Maple Questions and Posts

These are Posts and Questions associated with the product, Maple

Could anyone tell me what type of matrix normalisation this is and it it built into Maple? I found this in a paper and Google AI said this is the process of normailsation being used.

> 

restart

> 

with(LinearAlgebra):

> 

J:=Matrix([[ 1 , 0 , 0 ],
        [ 0 , 1 , 0 ],
        [ 0 , 0 , -1 ]]);

Matrix(3, 3, {(1, 1) = 1, (1, 2) = 0, (1, 3) = 0, (2, 1) = 0, (2, 2) = 1, (2, 3) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = -1})

(1)

Matrix N has already been scaled, so the rows are of equal magnitude  x^2 + y^2 - z^2= k

> 

N:=Matrix(3, 3, [[4, -3, 2], [-1/2*sqrt(70), -3/10*sqrt(70), 1/5*sqrt(70)], [1/11*sqrt(77), 6/11*sqrt(77), 2/11*sqrt(77)]])

Matrix(3, 3, {(1, 1) = 4, (1, 2) = -3, (1, 3) = 2, (2, 1) = -(1/2)*sqrt(70), (2, 2) = -(3/10)*sqrt(70), (2, 3) = (1/5)*sqrt(70), (3, 1) = (1/11)*sqrt(77), (3, 2) = (6/11)*sqrt(77), (3, 3) = (2/11)*sqrt(77)})

(2)

 

> 

for i to 3 do
add(N[i,j]^2,j=1..2)-N[i,3]^2;
end do

21

 

21

 

21

(3)

Normalisation process to produce C

> 

A:=N.J.N^%T

Matrix(3, 3, {(1, 1) = 21, (1, 2) = -(3/2)*sqrt(70), (1, 3) = -(18/11)*sqrt(77), (2, 1) = -(3/2)*sqrt(70), (2, 2) = 21, (2, 3) = -(27/110)*sqrt(70)*sqrt(77), (3, 1) = -(18/11)*sqrt(77), (3, 2) = -(27/110)*sqrt(70)*sqrt(77), (3, 3) = 21})

(4)
> 

dA:=DiagonalMatrix(1/~(sqrt~(abs(Diagonal((A))))));

Matrix(3, 3, {(1, 1) = (1/21)*sqrt(21), (1, 2) = 0, (1, 3) = 0, (2, 1) = 0, (2, 2) = (1/21)*sqrt(21), (2, 3) = 0, (3, 1) = 0, (3, 2) = 0, (3, 3) = (1/21)*sqrt(21)})

(5)
> 

C:=(dA.A.dA);

Matrix(3, 3, {(1, 1) = 1, (1, 2) = -(1/14)*sqrt(70), (1, 3) = -(6/77)*sqrt(77), (2, 1) = -(1/14)*sqrt(70), (2, 2) = 1, (2, 3) = -(9/770)*sqrt(70)*sqrt(77), (3, 1) = -(6/77)*sqrt(77), (3, 2) = -(9/770)*sqrt(70)*sqrt(77), (3, 3) = 1})

(6)
> 

evalf(C)

Matrix(3, 3, {(1, 1) = 1., (1, 2) = -.5976143047, (1, 3) = -.6837634587, (2, 1) = -.5976143047, (2, 2) = 1., (2, 3) = -.8581163304, (3, 1) = -.6837634587, (3, 2) = -.8581163304, (3, 3) = 1.})

(7)
 

 

Download 2026-08-14_Q_What_Type_of_Matrix_Normalisation.mw

I notice that Maple transactions journal does not publish any new issue ever since March this year. Based on the previous recording it is supposed to publish issue each season. When is it going to promote a new issue? My research is supposed to publish there and I believe I have made some interesting progress and it is of interest to the community.

You are hosting a big party tonight and prepared 1000 bottles of wine. A spiteful neighbor sneaks in and poisons exactly one bottle. The poison is colorless, tasteless, and takes about an hour to take effect and kill. Your party also starts in an hour, and you don’t want to throw all the wine away.

You have 10 mice and time for only one round of tasting. In that round, a mouse can taste from any number of bottles. How can you identify that single poisoned bottle among 1000?

Pause here and try to solve the problem yourself!

An obvious solution might be to group the wine into 10 batches of 100 bottles and have each mouse drink from one batch. But if a mouse dies, you have only narrowed it down to 100 bottles, and there is no time for a second round. Whatever test you run, you only get one shot.

Ten mice. A thousand bottles. The problem sounds impossible – until you realize each mouse isn’t just a taster.

The exact idea that powers computers is also what solves our wine puzzle.

A 300-Year-Old Idea

Some background information before we solve the problem.

In 1703, Gottfried Leibniz published a paper describing how every number can be written using only two symbols: 0 and 1. To him, the concept felt almost divine – an entire universe created out of nothingness and unity. But for over two centuries, binary remained an idea trapped on paper.

Everything changed when a young engineer named Claude Shannon realized that 0 and 1 map perfectly onto the physical states of an electrical switch: off and on. That single insight laid the groundwork for digital circuits, eventually powering every smartphone, laptop, and text message on the planet.

Yet binary is more than just how machines store information. It is a way of extracting information.

0 and 1 not only reflect the underlying logic of switches, but they also correspond to every yes/no question you ask: “did this mouse die, or not?”. And 10 binary digits can cover 2¹⁰ = 1024 different possibilities.

1024 is more than 1000.

The Solution  

Step 1: Relabel the bottles in binary

Write each bottle’s number, 1 through 1000, as a 10-digit binary number, padding the front with 0s. For example, bottle 17 is 10001 in binary, so its label becomes 0000010001. Every bottle now carries a unique 10-digit barcode of 0s and 1s.

Step 2: Assign each mouse a digit

Line up the mice and assign each one a digit: mouse #1 owns the leftmost digit, mouse #10 the rightmost. Then, run the tasting by the simple rule of a mouse drinks from a bottle if and only if its digit in that bottle’s label is a 1.

For bottle 17, only mouse #6 and mouse #10 take a sip. No two bottles are sampled by the same combination of mice; each bottle’s binary label is its unique drinking pattern.

Step 3: Read the answer off the casualties

Wait an hour. Then, write a 1 in every position with a dead mouse and a 0 otherwise. The string you end up with is the binary label of the poisoned bottle.

One More Sip

Before you pop the corks, one last question: was the binary system essential here, or could we have used a different method?

Here’s a food for thought: suppose your neighbor used a cheaper poison that kicks in 30 minutes instead of an hour, now there is time for a second round of tasting.

Now each mouse has three possible outcomes instead of two: dies in round 1, dies in round 2, or survives. Binary is the wrong language here; you want base 3.

The scheme goes as follows. Label the bottles in base 3, give each mouse a digit position, and follow one rule: if digit 1, drink in round 1; if digit 2, drink in round 2; if digit 0, sit out. Each mouse’s fate is its digit on the poisoned bottle’s label.

The ternary system’s power grows exponentially. Ten mice can now handle 3¹⁰ = 59049 bottles – our 1000 can be covered by seven mice (3⁷ = 2187). Generalized, with r rounds, the whole construction runs in base r+1.

That is the lesson hidden in the wine cellar. The binary system is more than the foundation of our telecom network, it is also a way of thinking – a reminder that any question, no matter how large, can be answered by a patient sequence of yes and no. You walked into an impossible evening with ten mice and walked out with 999 bottles of perfectly good wine.

Enjoy the party.

Newbie here.  If L=[1/2, 1/3, 1/4], how can I display the unevaluated sum of the numerical terms in the list?  I don't want to use sigma notation. 

If L=[x,y,z], I can just do `+`(op(L)) to get x+y+z.  I can't make this work with numbers instead of variables.   Maple evaluates and gives me 13/12.  I want 1/2+1/3+1/4.

In late July, the International Congress on Mathematical Software (ICMS 2026) came to the University of Waterloo and Wilfrid Laurier University. Maplesoft had the privilege of sponsoring this year's event, and on the first evening of the conference we opened our Waterloo office for a reception, welcoming around 140 researchers, professors, students, and developers from around the world for an evening of food, demos, and good conversation. Among the many brilliant guests were the ICMS General Chair Bernard Mourrain and Local Organization Chairs Stephen M. Watt and Ilias S. Kotsireas.


About 30 of us pitched in to organize, demo, and host, turning our office into a packed social hub for the evening. Our CEO, Dr. Laurent Bernardin, opened the evening with some welcome remarks and a talk on math education in the age of AI, tying into the recent launch of the Math Success Platform - a new tool built on Maple to help educators understand where students are struggling and provide more targeted support.

I, alongside the other co-op students for this term, got the opportunity to volunteer at one of the demo booths, where we showed off the new AI Assistant and Document Import features in Maple 2026, as well as the Maple MCP Server. Two live examples in particular seemed to resonate quite well with our guests...

The first was a demonstration of the Document Import tool. We brought messy handwritten multivariable calculus notes, outlining limit definitions and squeeze theorem example problems, and scanned them directly into Maple. Within seconds, the handwriting was converted into a functional Maple worksheet, math and all, right down to preserving the hand-drawn graphs. The worksheet was ready to be edited and executed just like anything typed in natively. A skeptical guest even asked us to scan their research papers - written completely in German - just to see the import work in this case as well, and it did, intelligently creating a worksheet with collapsible sections for each individual topic. For a room full of people who spend their careers working with mathematical software, this feature got a reaction every single time.

The second was Maple's AI assistant, specifically its ability to generate and debug Maple code within the context of your workspace. We loaded a worksheet with a spherical coordinates problem - calculating the volume of the upper half of a sphere with radius 4 - and simply prompted the AI Assistant to create a 3D diagram with interactive sliders to help visualize the problem. Moments later, it had analyzed the sheet and written a working code block for generating a fully interactive 3D visualization, letting guests drag each slider and watch the diagram update in real time across the sphere. It turned an abstract triple integral into something you could physically manipulate and understand, which for a lot of students really helps make these topics click.

Working the demo booth was a rewarding experience for all of us co-op students, as researchers asked some tough, thought-provoking questions that pushed us to think on our feet and imagine new ways to use the very tools we were demonstrating.
Beyond the demos, it was also just a great chance to talk with inspiring figures in the world of mathematics - hearing what ambassadors are building with Maple day-to-day, swapping stories with both students and professors on their academic experiences, and getting a glimpse into just how wide and varied the math software community really is. It's not every day that I get to spend time chatting with the people actually shaping the field I'm studying.

Thank you to the ICMS for bringing the international math software community to our door. It made for one of the most memorable evenings of our time as Maplesoft co-op students!

For the purpose of practicing with Maple, I have worked on a definite integral in the attached file. I found it on the Internet. According to a side calculation, it can only be calculated using famous special functions or series expansions. That is why I am only interested in the numerical evaluation here. According to auxiliary calculations, it can only be computed using famous special functions or a series expansion. It is known that the series expansion of the antiderivative converges very rapidly. Therefore, for comparison purposes, I calculated the values ​​for integration limits of 10 and 100 instead of infinity. In the first graph, the two result curves appear to coincide perfectly. Is there a way to zoom in locally - like using a magnifying glass - to make the difference in the ordinate values ​​visible?

restart

int(sinh((Pi-a)*x)/(cosh(Pi*x)*sinh(a*x)), x = -100 .. 100)

int(sinh((Pi-a)*x)/(cosh(Pi*x)*sinh(a*x)), x = -100 .. 100)

(1)

plot([int(sinh((Pi-a)*x)/(cosh(Pi*x)*sinh(a*x)), x = -100 .. 100), int(sinh((Pi-a)*x)/(cosh(Pi*x)*sinh(a*x)), x = -10 .. 10)], a = 0 .. 3.2, y = 0 .. 100)

 

plot(int(sinh((Pi-a)*x)/(cosh(Pi*x)*sinh(a*x)), x = -10 .. 10), a = 0 .. 3.2, y = 0 .. 100)

 

NULL

Download testint3.mw

Hello,

I found this sample code that determine the time to do matrix multiplications using cpus and gpus. I was surprised that the speedup factor was less than one.  I also did a similar speed test using python pytorch code on the same computer. The speedup factor was remarkable. Please find my mistakes, thanks.

MAPLE CODE:

kernelopts(version);
with(LinearAlgebra);
with(CUDA);
n := 4000;
M1 := RandomMatrix(n, n, datatype = float[8]);
M2 := RandomMatrix(n, n, datatype = float[8]);
printf("CUDA enabled? %a\n", IsEnabled());
tNoCUDA := time[real](M1 . M2);
printf("Time without CUDA: %.3f seconds\n", tNoCUDA);
prevSetting := Enable(true);
printf("Previous CUDA setting: %a\n", prevSetting);
printf("CUDA enabled now? %a\n", IsEnabled());
tCUDA := time[real](M1 . M2);
printf("Time with CUDA: %.3f seconds\n", tCUDA);
printf("Speedup factor: %.2f\n", evalf(tNoCUDA/tCUDA));
props := Properties();
printf("CUDA Device Properties:\n");
props;
Enable(false);
printf("CUDA enabled after disabling? %a\n", IsEnabled());

 

RESULTS:

  Maple 2026.0, X86 64 WINDOWS, Mar 05 2026, Build ID 2001916

CUDA enabled? false
Time without CUDA: 0.288 seconds
Previous CUDA setting: false
CUDA enabled now? true
Time with CUDA: 0.439 seconds
Speedup factor: 0.66
CUDA Device Properties:

[TABLE(["Clock Rate" = 2692000, "Resisters Per Block" = 65536, 

  "ID" = 0, "Texture Alignment" = 512, 

  "Max Grid Size" = [2147483647, 65535, 65535], 

  "Memory Pitch" = 2147483647, "Major" = 12, 

  "MultiProcessor Count" = 36, "Shared Memory Per Block" = 49152, 

  "Minor" = 0, "Name" = "NVIDIA GeForce RTX 5060 Ti", 

  "Max Threads Dimensions" = [1024, 1024, 64], "Warp Size" = 32, 

  "Total Global Memory" = 4294967295, 

  "Max Threads Per Block" = 1024, "Device Overlap" = 1, 

  "Total Constant Memory" = 65536, 

  "Kernel Exec Timeout Enabled" = true])]


CUDA enabled after disabling? false
 

Hello:

For educational purposes, I want to define the zeta function on a plot using textplot, so I write

textplot([2,3,Zeta(sigma+i*t)=Sum(1/n^(sigma+i*t),n=1..infinity)]...

But the characters "sigma+it" show up as "it+sigma" rather than "sigma+it" which is how most people would naturally read it.

Is there any way that I can convince textplot to order the output the way I set it?

I've tried single quotes, i.e. 'sigma+it' but that doesn't work.

Thank you.

I learned about automatic differentiation from an AI. Could you please tell me, what does Maple have for working with dual numbers in this regard? 
(I am experiencing some minor internet issues, so my response to your reply may be significantly delayed.)

I am trying to add this to my type list in a package, but cannot get it to work.

TypeTools:-AddType(_L3DP, set(satisfies(s -> type(s, [algebraic $ 3])),'Vector[column](3, algebraic)'));

when I test with this I get an error.

 type({[7,8,9],<1,2,3>},:-_L3DP);
Error, testing against an invalid type

or this 

type({[7,8,9],<1,2,3>},set(satisfies(s -> type(s, [algebraic $ 3])),'Vector[column](3, algebraic)'));
Error, testing against an invalid type

How do I vectorize a Maple graph—that is, export it in PDF quality—and add X and Y axis labels along with annotations?

By "annotations," I mean something like "green curve = 39T" written directly on the figure.

I need a more complete comand. After the comand, eu can ajust how I liked.

Given is a list of equations where the lhs is a name and the rhs an expression (i.e. list(name=algebraic).

I want to pass that list to a procedure and then assign locally the names to the values on the rhs. Similar to passing options in Maple commands (e.g. plot option numpoints=n).

The below, the example throws an error

restart;
foo := proc(params) 
local names; 
names := lhs~(params)[]; 
#local op(names);
print([names]):
assign(params); 
print(b, c, d); end proc;

foo([b = 2, c = 3, d = 4]);
foo([b = 2, c = 3, d = 4]); #  error because the assignement was done to global names

How to fix that and/or avoid assignements to global names

This the part of a procedure I have for removing common factors from matrices and vectors used in a projective geometry setting.
How can a get it to work so it handles polynomial denominators? Such as 

x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2
> 

restart

> 

 

> 

ReduceM:= proc(C::{Matrix, :-_ProjM3})
            local i, tgdc, dnm, V1, Ml, SV1, ns, M, r;
            option overload;
            if C::'Matrix' then
                M := LinearAlgebra:-Copy(C);
            elif C::{':-_ProjM3'} then
                M := LinearAlgebra:-Copy(C[1]);
            end if;
            V1 := convert(M, list);
            SV1 := convert(M, set) minus {0};
            ns := nops(SV1);
            dnm := frontend(lcm, [seq(denom(SV1[i]), i = 1 .. ns)]);
            Ml := simplify(dnm *~ M);
            V1 := convert(Ml, list);
            tgdc := SV1[1];
            if tgdc = 0 then
                tgdc := 1;
            end if;
            for i from 2 to ns do
                tgdc := frontend(gcd, [tgdc, SV1[i]]);
            end do;
            r := `if`(C::'Matrix', simplify(factor~(Ml /~ tgdc)),
                <[simplify(factor~(Ml /~ tgdc))]>);
            return r;
        end proc:

> 

 

> 

 

> 

A:=Matrix(3, 3, [[(x__2 - x__1)*(-y__2 + y__3) + (-y__1 + y__2)*(-x__3 + x__2), (x__2 - x__1)*(-y__1 + y__3) + (-y__1 + y__2)*(-x__3 + x__1), (x__2 - x__1)*(-y__1 + y__2) + (-y__1 + y__2)*(-x__2 + x__1)], [(x__3 - x__1)*(-y__2 + y__3) + (-y__1 + y__3)*(-x__3 + x__2), (x__3 - x__1)*(-y__1 + y__3) + (-y__1 + y__3)*(-x__3 + x__1), (x__3 - x__1)*(-y__1 + y__2) + (-y__1 + y__3)*(-x__2 + x__1)], [x__1*(-y__2 + y__3) + y__1*(-x__3 + x__2) - x__2*y__3 + x__3*y__2, (-y__1 + y__3)*x__1 + y__1*(-x__3 + x__1) - x__1*y__3 + x__3*y__1, (-y__1 + y__2)*x__1 + y__1*(-x__2 + x__1) - x__1*y__2 + x__2*y__1]])

Matrix(3, 3, {(1, 1) = (x__2-x__1)*(-y__2+y__3)+(-y__1+y__2)*(-x__3+x__2), (1, 2) = (x__2-x__1)*(-y__1+y__3)+(-y__1+y__2)*(-x__3+x__1), (1, 3) = (x__2-x__1)*(-y__1+y__2)+(-y__1+y__2)*(-x__2+x__1), (2, 1) = (x__3-x__1)*(-y__2+y__3)+(-y__1+y__3)*(-x__3+x__2), (2, 2) = (x__3-x__1)*(-y__1+y__3)+(-y__1+y__3)*(-x__3+x__1), (2, 3) = (x__3-x__1)*(-y__1+y__2)+(-y__1+y__3)*(-x__2+x__1), (3, 1) = x__1*(-y__2+y__3)+y__1*(-x__3+x__2)-x__2*y__3+x__3*y__2, (3, 2) = (-y__1+y__3)*x__1+y__1*(-x__3+x__1)-x__1*y__3+x__3*y__1, (3, 3) = (-y__1+y__2)*x__1+y__1*(-x__2+x__1)-x__1*y__2+x__2*y__1})

(1)
> 

ReduceM(A)

Matrix(3, 3, {(1, 1) = 1, (1, 2) = 1, (1, 3) = 0, (2, 1) = 1, (2, 2) = 0, (2, 3) = -1, (3, 1) = -1, (3, 2) = 0, (3, 3) = 0})

(2)
> 

B:=Matrix(3, 3, [[-(y__1 - y__3)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2) + (y__1 - y__2)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2), -(y__1 - y__3)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2), -(y__1 - y__2)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2)], [(-x__3 + x__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2) - (-x__2 + x__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2), (-x__3 + x__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2), (-x__2 + x__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2)], [-(x__1*y__3 - x__3*y__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2) + (x__1*y__2 - x__2*y__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2) - 1, -(x__1*y__3 - x__3*y__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2), -(x__1*y__2 - x__2*y__1)/(x__1*y__2 - x__1*y__3 - x__2*y__1 + x__2*y__3 + x__3*y__1 - x__3*y__2)]])

Matrix(3, 3, {(1, 1) = -(y__1-y__3)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)+(y__1-y__2)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (1, 2) = -(y__1-y__3)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (1, 3) = -(y__1-y__2)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (2, 1) = (-x__3+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)-(-x__2+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (2, 2) = (-x__3+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (2, 3) = (-x__2+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (3, 1) = -(x__1*y__3-x__3*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)+(x__1*y__2-x__2*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)-1, (3, 2) = -(x__1*y__3-x__3*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2), (3, 3) = -(x__1*y__2-x__2*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)})

(3)
> 

ReduceM(B)

Error, (in gcd/Freeze) arguments should be polynomials

 
> 

B*denom(B[1,1])

Matrix(3, 3, {(1, 1) = (x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)*(-(y__1-y__3)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)+(y__1-y__2)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)), (1, 2) = -y__1+y__3, (1, 3) = -y__1+y__2, (2, 1) = (x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)*((-x__3+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)-(-x__2+x__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)), (2, 2) = -x__3+x__1, (2, 3) = -x__2+x__1, (3, 1) = (x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)*(-(x__1*y__3-x__3*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)+(x__1*y__2-x__2*y__1)/(x__1*y__2-x__1*y__3-x__2*y__1+x__2*y__3+x__3*y__1-x__3*y__2)-1), (3, 2) = -x__1*y__3+x__3*y__1, (3, 3) = -x__1*y__2+x__2*y__1})

(4)
> 

simplify( (4) );

Matrix(3, 3, {(1, 1) = -y__2+y__3, (1, 2) = -y__1+y__3, (1, 3) = -y__1+y__2, (2, 1) = -x__3+x__2, (2, 2) = -x__3+x__1, (2, 3) = -x__2+x__1, (3, 1) = -x__2*y__3+x__3*y__2, (3, 2) = -x__1*y__3+x__3*y__1, (3, 3) = -x__1*y__2+x__2*y__1})

(5)
 

 

Download 2026-08-03_Q_Remove_Common_Factors_from_Matrix.mw

Does GuessRecurrence require at least 7 terms in its input list?

Imagine walking into a room full of strangers. At first, everyone seems completely unrelated, with different names, different lives, and different birthdays. As the room gets more crowded, we of course know that sharing similarities with the strangers in the room becomes more likely.

But just how likely is it that, for example, two people in the room share a birthday?

The Birthday Paradox asks, more specifically: How many people must be in the room so that it is more likely than not that two people share a birthday?

Intuitively, we might imagine it must be well over 100 since there are 365 possible birthdays that each stranger can have. Probability, however, has a habit of ignoring our intuition.

Suppose there are only two people in the room: you, and one stranger. You have your own birthday, so there is a 1/365 ≈ 0.27% chance that the stranger next to you shares your birthday. If we add a third person to the room, we must consider the probability that either of the two strangers share your birthday, or the two strangers share a birthday with each other. This overlap makes our calculations more difficult, and it will only get worse as we add more people.

Instead, there's a cleaner way to find the solution. Let's find the probability P(n) that no two people share a birthday, then subtract it from 1 to get the probability that two people do share a birthday. Once P(n) < 0.5, then 1 - P(n) > 0.5, meaning at this value of n, there is a greater than 50% chance that two people in the room share a birthday.

For the case of only two people, there is a 364/365 chance that the second person has a different birthday than the first person. If we introduce a third person, there are 363 unclaimed birthdays left in the year, so a 363/365 chance that the third person's birthday falls on one of these days. Repeating this process for n people in the room, we get:

If we keep increasing n, we see that the probability P(n) that two people don't share a birthday decreases, meaning the probability 1 - P(n) that they do share a birthday increases.

Below are some values of 1 - P(n) I found using Maple Learn:

Based on these calculations, we see that when 23 people are in the room, it is more likely than not that at least two people in the room share a birthday.

Our question was very specific: we wanted to know what n needed to be in order for the probability of two people sharing a birthday to be > 50%. We found this number to be 23. But, we could extend this question to, say, the probability being 99.9%. This happens when there are 70 people in the room. Consider the animation below to see this visually, where the x-axis represents the number of people n, and the y-axis represents the probability that two people share a birthday, 1 - P(n):

How many people must be in the room to guarantee that two of them share a birthday? By the shape of the graph above, it may be tempting to think that it is impossible to guarantee this, since the probability seems to asymptotically approach 1. However, we must think through this logically.

If 365 people were in the room, it is still possible that their birthdays would all fall on a different day (although it's extremely unlikely). But if we have more people than we have available birthdays, we can say at least two people will share a birthday with 100% certainty. That is, P(n) = 0 when n > 365, so our formula for P(n) above is limited to values of n that are 365 or less. This is a basic principle in mathematics called the "pigeonhole principle", which uses the analogy that if we have more pigeons than we have holes to put them in, then at least one of the holes must have at least two pigeons.

These ideas can be conceptually confusing, but once you go through the mathematical arguments a few times, mentioning the Birthday Paradox in a conversation is a great way to show off your random math knowledge and confuse your peers!

Attached is an interactive Maple worksheet from Maple's Math Apps gallery if you'd like to investigate the Birthday Paradox further: The_Birthday_Paradox.mw. If you're still interested in more info/applications, see this Maple Primes post by John May.

2 3 4 5 6 7 8 Last Page 4 of 2261