Education

Teaching and learning about math, Maple and MapleSim

On the very first day of class, a student once told math educator Sam Densley: “Your class feels safe.”

Open classroom door with students inside

Honestly, I can’t think of a better compliment for a teacher. I reflected on this in a LinkedIn post, and I want to share those thoughts here too.

A Story of Struggle

I rarely admit this, because it still carries a sting of shame. In my role at Maplesoft, people often assume I was naturally good at math. The truth is, I wasn’t. I had to work hard, and I failed along the way.

In fact, I failed my very first engineering course, Fundamentals of Electrical Engineering. Not once, but twice. The third time, I finally earned an A.

That second failure nearly crushed me. The first time, I told myself I was just adjusting to university life. But failing again, while my friends all passed easily, left me feeling stupid, ashamed, and like I didn’t belong.

When I got the news, I called my father. He left work to meet me, and instead of offering empty reassurances, he did something unexpected: he told me about his own struggles in school, the courses he failed, the moments he nearly gave up. Here was someone I admired, a successful engineer, admitting that he had stumbled too.

In that moment, the weight lifted. I wasn’t dumb. I wasn’t alone.

That experience has stayed with me ever since: the shame, the anxiety, the voice in my head whispering “I’m not cut out for this.” But also the relief of realizing I wasn’t the only one. And that’s why I believe vulnerability is key.

When teachers open up, something powerful happens:

  • Students stop thinking they’re the only ones who feel lost.
  • They see that failure isn’t the end; it’s part of the process.
  • It gives students permission to be honest about their own struggles.

That’s how you chip away at math anxiety and help students believe: “I can do this too.”

Why Vulnerability Matters

Abstract metallic mask with mathematical symbols

I can’t recall a single teacher in my own schooling who openly acknowledged their academic struggles. Why is that?

We tell students that “struggle is normal,” but simply saying the words isn’t enough. Students need to see it in us.

When teachers hide their struggles, students assume they’re the only ones who falter. That’s when math anxiety takes root. But when teachers are vulnerable, the cycle breaks. Students realize that struggle doesn’t mean they’re “bad at math.” It means they’re learning. Vulnerability builds trust, and trust is the foundation of a safe classroom.

What I Hear from Instructors

In my work at Maplesoft, I often hear instructors say: “Students don’t come to office hours — I wish they did.”

And I get it. Sometimes students are too anxious or hesitant to ask for help, even when a teacher makes it clear they’re available. That’s one of the reasons we built the Student Success Platform. It gives instructors a way to see where students are struggling without calling anyone out. Even if students stay silent, their struggles don’t stay invisible.

But tools can only go so far. They can reveal where students need support and even help illuminate concepts in new ways. What they can’t do is replace a teacher. Real learning happens when students feel safe, and that safety comes from trust. Trust isn’t built on flawless lectures or perfect answers. It grows when teachers are willing to be human, willing to admit they’ve struggled too.

That’s when students believe you mean it. And that’s when they’re more likely to walk through the door and ask for help.

The Real Lesson

Ultimately, what matters most in the classroom, whether in mathematics or any other subject, isn’t perfection. It’s effort.

As a new school year begins, it’s worth remembering:

  • Students don’t just need formulas.
  • They need to know struggle is normal.
  • They need to know questions are welcome.
  • They need to know the classroom is safe enough to try.

Because long after they move on, that’s what they’ll remember: not just what they learned, but how they felt.

The need to solve quadratic equations never seems to disappear. Whether it is completing a physics problem, solving a differential equation, or performing equilibrium calculations in chemistry, quadratic equations are an integral part of all STEM-based disciplines.

 

Depending on the complexity of the quadratic equation, the typical 'guess-and-check' method taught in most high school classes can often be frustrating and time-consuming. Professor of mathematics Dr. Po-Shen Loh, in his new method shown here, recognizes some important properties of solutions to quadratic equations and integrates them into a more intuitive approach that students are much more likely to feel motivated by.

 

For example, consider the equation x^2 - 14x + 45 = 0. Most students are taught to first factor this equation by thinking of two numbers that multiply to 45 and add to -14. After trying multiple values, we would discover that those values are -5 and -9. We would use these values to factor the equation into the form (x-5)*(x-9) = 0. Setting each factor equal to zero, we would get x = 5 or x = 9. Equivalently, to solve for x more directly, we need two numbers that multiply to 45 and add to 14 (again, x = 5 and x = 9).

 

The only way to speed up this process of guess-and-check is to do enough similar problems until the guesses become second nature. Not to mention, this becomes exponentially more difficult as the coefficient on x^2 increases (for example, solving the equation 6x^2 + 7x - 20 = 0).

 

For the example above, Dr. Loh's method builds on a simple starting point:

 

(i) We know that the numbers (call them R and S) add to 14

(ii) We know that since the numbers add to 14, they must have a mean value of 14/2 = 7

(iii) If the two numbers have an average of 7, they must be an equal 'distance' (call this distance z) from 7

(iv) We can write the two numbers as R = 7+z and S = 7-z

(v) Since the numbers R and S multiply to 45, then (7+z)*(7-z) = 45 ⇒ 49 - z^2 = 45. In other words, z^2 = 4, so z = +2 or z = -2

(vi) The solution to the equation is then R = 7+2 = 9 and S = 7-2 = 5 (as we predicted)

 

We can generalize this idea for any complex coefficients a, b and c in the equation ax^2 + bx + c = 0 to actually prove the quadratic formula. However, using Dr. Loh's method on specific examples (as above) helps build intuition for why the quadratic formula works in the first place. Other proof methods such as completing the square are just as mathematically sound, but they do not utilize the mathematical instinct that makes solving a problem in mathematics so gratifying.

 

Although I am currently a student working for Maplesoft, I had not used Maple Learn extensively beforehand. Dr. Loh's idea of creating a more intuitive way to solve such a conventional problem inspired me to create a document in Maple Learn, linked here, outlining the steps above.

 

Learning new ways to solve a problem in mathematics is exciting, but it is often difficult to present in a way that is clear, visually-appealing and easy to create. Most online mathematical environments are difficult to navigate and typically lack visualizations to accompany an idea. With Maple Learn, it felt comforting to open a clean canvas where I was able to easily build a document in just a few hours that not only summarized the main ideas of this new method, but also showed the user why the method works using live animations and colour schemes (see some examples below).

 

 

I surprised myself (as well as my managers) by how quickly I was able to transfer all of my ideas into the document. I could also split related content into groups and use collapsible sections to keep the document uncluttered and easy to read.

 

I also took advantage of the freedom to explore other documents and directly reference them through hyperlinks.

 

Sometimes it can be difficult to follow a new concept without having some background information. Adding these references makes it simple for the reader to access supporting documents and ensure there are no knowledge gaps to be filled along the way. Once you make a document, you also have the option to publish it to your own gallery and make it public for others to use and learn from.

 

Maple Learn has been incredibly helpful for sharing the things that interest me the most. If you have something related to mathematics that excites you, try not to keep it to yourself. Consider using Maple Learn to share your ideas with the world and see your vision come to life!

With the launch of ChatGPT 5.0, many people are testing it out and circulating their results. In our “random” Slack channel, where we share anything interesting that crosses our path, Filipe from IT posted one that stood out. He’d come across a simple math problem, double-checked it himself, and confirmed it was real:

ChatGPT 5.0 Example

As you can see, the AI-generated solution walked through clean, logical-looking steps and somehow concluded:

x = –0.21

I have two engineering degrees, and if I hadn’t known there was an error, I might not have spotted it. If I’d been tired, distracted, or rushing, I would have almost certainly missed it because I would have assumed AI could handle something this simple.

Most of us in the MaplePrimes community already understand that AI needs to be used with care. But our students may not always remember, especially at the start of the school year if they’ve already grown used to relying on AI without question. 

And if we’re honest, trusting without double-checking isn’t new. Before AI, plenty of us took shortcuts: splitting up the work, swapping answers, and just assuming they were right. I remember doing it myself in university, sometimes without even thinking twice. The tools might be different now, but that habit of skipping the “are we sure?” step has been around for a long time.

The difference now is that general-purpose AI tools such as ChatGPT have become the first place we turn for almost anything we do. They respond confidently and are often correct, which can lead us to become complacent. We trust them without question. If students develop the habit of doing this, especially while they are still learning, the stakes can be much higher as they carry those habits into work, research, and other areas of their lives.

The example above is making its rounds on social media because it’s memorable. It’s a basic problem, yet the AI still got it wrong and in a way that’s easy to miss if you’re not paying attention.

Using it in the classroom can be a great way to help students remember that AI’s answers need to be checked. It’s not about discouraging them from using AI, but about reinforcing the habit of verifying results and thinking critically about what they see.

So here’s my suggestion:

  • Show this example in your class, no matter the subject. If your students are using AI, they’ll benefit from seeing it.
  • Spend 10 minutes discussing it.
  • Use it as a jumping-off point to talk about what’s OK and not OK when using AI for your course.
  • Share other examples like this throughout the year as small reminders, so “critical thinking” becomes second nature.

This isn’t just about catching an AI’s bad subtraction. It’s about building a culture of verification and reasoning in our students. The tools will keep improving, but so will the temptation to turn off our own thinking.

If we can help students get into the habit of checking, AI can be a powerful partner without putting them on autopilot.

To the MaplePrimes community: How do you talk to your students to help them build strong habits when working with AI? Do you bring in examples like this one, or use other strategies? I’d love it if you could share your thoughts, tips, and ideas.

 


The Summer Issue of Maple Transactions has been published.  There are articles from a range of interests: research, education, and personal stories.

Have a look, and I hope you find something of value in the issue.

 

We are pleased to announce that the registration for the Maple Conference 2025 is now open!

Like the last few years, this year’s conference will be a free virtual event. Please visit the conference page for more information on how to register.

This year we are offering a number of new sessions, including more product training options, and an Audience Choice session.
Also included in this year's registration is access to an in-depth Maple workshop day presented by Maplesoft's R&D members following the conference.  You can find an overview of the program on the Sessions page. Those who register before September 14th, 2025 will have a chance to vote for the topics they want to learn more about during the Audience Choice session.

We hope to see you there!

Hi,

look at this Maple code.

short_list_prime_factorization_fun.mw

short_list_prime_factorization_fun.pdf

Have a good day

Matthew

Hi,

check out this maple code

positive_odd_integer_factorization_data.pdf

positive_odd_integer_factorization_data.mw

that is all

Regards,

Matthew

Hi,

have some Maple code to share.

prime_triplet_0_4_6.mw

prime_triplet_0_4_6.pdf

Enjoy

Matthew

ps Prime numbers are fun

see https://t5k.org/

 

We are a week away from the submission deadline for the Maple Conference!  
Presentation proposal applications are due July 25, 2025.

We are inviting submissions of presentation proposals on a range of topics related to Maple, including Maple in education, algorithms and software, and applications. We also encourage submission of proposals related to Maple Learn. You can find more information about the themes of the conference and how to submit a presentation proposal at the Call for Participation page.

We hope to see there.

Hi,

Don't laugh.

Some of you are not familair with Wagstaff Prime Numbers

see Wolfram Math World

also, this Maple code is esentially, a loop and the isprime() function

for your edification

b

have a look

just wanted to contribute my two cents to the Maple community

good day

We are excited to announce that the Maple Conference will be held Novemeber 5-7, 2025!

Please join us at this free virtual event as it will be an excellent opportunity to meet other members of the Maple community, get the latest news about our products, and hear from the experts about the challenges and opportunities that our technology brings to teaching, learning, and research. More importantly, it's a chance for you to share the work you've been doing with Maple and Maple Learn. 

The Call for Participation is now open. We are inviting submissions of presentation proposals on a range of topics related to Maple, including Maple in education, algorithms and software, and applications. We also encourage submission of proposals related to Maple Learn. 

You can find more information about the themes of the conference and how to submit a presentation proposal at the Call for Participation page. Applications are due July 25, 2025.

After the conference, all accepted presenters and invited speakers will be invited to submit related content to the Maple Transactions journal for consideration.

Registration for attending the conference will open in July.  Watch for further announcements in the coming weeks.

We hope all of you in the Maple Primes community will join us for this event!

Kaska Kowalska
Contributed Program Co-Chair

 

The link below goes to the Proceedings of the Maple 2024 Conference, which includes several articles that will be of interest to the readers of Maple Primes.

There may be one more paper coming in to the proceedings later as per policy; since most things are ready, away we go!

Proceedings of the Maple 2024 Conferenc

Geometrical entertainment in the form of rolling without slipping, now inside a torus.
You can also print out the corresponding equations - these graphs are # in the text, but it is better to do this separately from the geometric animation, because textplot3d takes up a lot of resources.

Please consider it not as a Maple program, but simply as an idea for a corresponding algorithm.
for_TORUS_IN_TORUS_for.mw
 

Maplesoft’s CEO, Dr. Laurent Bernardin, has written an opinion piece on Fostering Student Retention through Success in Mathematics. In it, he discusses ways to reduce university dropout rates by turning the technology shortcuts students are already using in their math courses into data-driven insights and interventions that promote student success.

You can read the whole article here:  Fostering Student Retention through Success in Mathematics

You will not be shocked to learn that Maplesoft plays a role in the strategy he proposes. 😊 (But this is a serious problem for a lot of schools, and we really would like to help!)

Hello everyone,

I am creating this post to begin a thread where I will share a series of worksheets on important topics in Complex Analysis, written as part of my notes for my classes. Complex_Analysis_Notes.pdf

The planned sections include:

  • Section 1: Infinite Series

  • Section 2: Power Series

  • Section 3: The Radius of Convergence of a Power Series

  • Section 4: The Riemann Zeta Function and the Riemann Hypothesis

  • Section 5: The Prime Number Theorem

Each worksheet will include calculations, plots, and examples using Maple to illustrate key ideas.

I plan to upload one worksheet every week to keep a steady pace and allow time for discussion and feedback between posts.

I hope this thread will be helpful both for learning and for deeper exploration.
Feel free to comment, suggest improvements, or ask questions as I post the materials.

Thank you!

restart; interface(imaginaryunit = 'I'); z := I*(1/3); S_N := proc (n) options operator, arrow; sum(z^k, k = 0 .. n) end proc; limit(S_N(n), n = infinity); S_N(10); S_N(100); S_N(1000); with(plots); points := [seq([Re(evalf(S_N(n))), Im(evalf(S_N(n)))], n = 0 .. 50)]; pointplot(points, connect = true, symbol = solidcircle, symbolsize = 10, color = blue, labels = ["Re", "Im"])

proc (n) options operator, arrow; sum(z^k, k = 0 .. n) end proc

 

9/10+(3/10)*I

 

53144/59049+(5905/19683)*I

 

 

restart; interface(imaginaryunit = 'I'); z := I*(1/2); S_N := proc (n) options operator, arrow; sum(z^k, k = 0 .. n) end proc; limit(S_N(n), n = infinity); S_N(10); S_N(100); S_N(1000); with(plots); points := [seq([Re(evalf(S_N(n))), Im(evalf(S_N(n)))], n = 0 .. 50)]; pointplot(points, connect = true, symbol = solidcircle, symbolsize = 10, color = blue, labels = ["Re", "Im"])

proc (n) options operator, arrow; sum(z^k, k = 0 .. n) end proc

 

4/5+(2/5)*I

 

819/1024+(205/512)*I

 

 

NULL

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; sum(((1/2)*I)^n, n = 0 .. N) end proc; fullsum := sum(((1/2)*I)^n, n = 0 .. infinity); realpts := [seq([n, Re(S(n))], n = 0 .. 30)]; imagpts := [seq([n, Im(S(n))], n = 0 .. 30)]; limit(Re(S(n)), n = infinity); limit(Im(S(n)), n = infinity); horiz_reallimit := plot(4/5, k = 0 .. 30, color = black, linestyle = 2, thickness = 2); horiz_imaglimit := plot(2/5, k = 0 .. 30, color = black, linestyle = 2, thickness = 2); plots[display]([pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Value"], legend = "Real Part"), pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Value"], legend = "Imaginary Part"), horiz_reallimit, horiz_imaglimit], axes = boxed, labels = ["n", "Partial Sum Value"])

4/5+(2/5)*I

 

4/5

 

2/5

 

 

restart; with(plots); interface(imaginaryunit = 'I'); H := proc (N) local n; sum(1/n, n = 1 .. N) end proc; limit(H(n), n = infinity); limit(Re(H(n)), n = infinity); limit(Im(H(n)), n = infinity); harmonic_pts := [seq([n, H(n)], n = 1 .. 100)]; harmonic_plot := pointplot(harmonic_pts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum Value"], axes = boxed)

infinity

 

infinity

 

0

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; sum(I^k/k, k = 1 .. N) end proc; realpts := [seq([n, Re(S(n))], n = 1 .. 100)]; imagpts := [seq([n, Im(S(n))], n = 1 .. 100)]; complex_pts := [seq([Re(S(n)), Im(S(n))], n = 1 .. 100)]; S_infinite := sum(I^k/k, k = 1 .. infinity); Re(S_infinite); Im(S_infinite); horiz_reallimit := plot(-(1/2)*ln(2), k = 0 .. 100, color = black, linestyle = 2, thickness = 2); horiz_imaglimit := plot((1/4)*Pi, k = 0 .. 100, color = black, linestyle = 2, thickness = 2); real_plot := pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum Value"], axes = boxed, legend = "Real Part"); imag_plot := pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Partial Sum Value"], axes = boxed, legend = "Imaginary Part"); plots[display]([real_plot, horiz_reallimit, imag_plot, horiz_imaglimit]); plots[pointplot](complex_pts, symbol = solidcircle, style = pointline, color = blue, axes = boxed, labels = ["Re", "Im"])

-(1/2)*ln(2)+((1/4)*I)*Pi

 

-(1/2)*ln(2)

 

(1/4)*Pi

 

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; sum((-(2/3)*I)^n, n = 0 .. N) end proc; fullsum := sum((-2*I*(1/3))^n, n = 0 .. infinity); realpts := [seq([n, Re(S(n))], n = 0 .. 30)]; imagpts := [seq([n, Im(S(n))], n = 0 .. 30)]; limit(Re(S(n)), n = infinity); limit(Im(S(n)), n = infinity); horiz_reallimit := plot(9/13, k = 0 .. 30, color = black, linestyle = 2, thickness = 2); horiz_imaglimit := plot(-6/13, k = 0 .. 30, color = black, linestyle = 2, thickness = 2); plots[display]([pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Value"], legend = "Real Part"), pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Value"], legend = "Imaginary Part"), horiz_reallimit, horiz_imaglimit], axes = boxed, labels = ["n", "Partial Sum Value"])

9/13-(6/13)*I

 

9/13

 

-6/13

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; sum((I*Pi)^n, n = 0 .. N) end proc; realpts := [seq([n, Re(S(n))], n = 0 .. 100)]; imagpts := [seq([n, Im(S(n))], n = 0 .. 100)]; complex_pts := [seq([Re(S(n)), Im(S(n))], n = 0 .. 100)]; limit(S(N), N = infinity); limit(Re(S(n)), n = infinity); limit(Im(S(n)), n = infinity); real_plot := pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum (Real Part)"], title = "Real Part of Partial Sums of (Pi i)^n", axes = boxed); imag_plot := pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Partial Sum (Imaginary Part)"], title = "Imaginary Part of Partial Sums of (Pi i)^n", axes = boxed); complex_plot := pointplot(complex_pts, symbol = solidcircle, style = pointline, color = blue, labels = ["Re", "Im"], title = "Partial Sums in Complex Plane (Pi i)^n", axes = boxed)

undefined

 

undefined

 

undefined

 

 

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; sum(2*I^k/k, k = 1 .. N) end proc; realpts := [seq([n, Re(S(n))], n = 1 .. 100)]; imagpts := [seq([n, Im(S(n))], n = 1 .. 100)]; complex_pts := [seq([Re(S(n)), Im(S(n))], n = 1 .. 100)]; S_infinite := sum(2*I^k/k, k = 1 .. infinity); Re(S_infinite); Im(S_infinite); horiz_reallimit := plot(-ln(2), k = 0 .. 100, color = black, linestyle = 2, thickness = 2); horiz_imaglimit := plot((1/2)*Pi, k = 0 .. 100, color = black, linestyle = 2, thickness = 2); real_plot := pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum Value"], axes = boxed, legend = "Real Part"); imag_plot := pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Partial Sum Value"], axes = boxed, legend = "Imaginary Part"); plots[display]([real_plot, horiz_reallimit, imag_plot, horiz_imaglimit]); plots[pointplot](complex_pts, symbol = solidcircle, style = pointline, color = blue, axes = boxed, labels = ["Re", "Im"])

-ln(2)+((1/2)*I)*Pi

 

-ln(2)

 

(1/2)*Pi

 

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; add(exp(Pi*I*n)/n, n = 1 .. N) end proc; realpts := [seq([n, Re(S(n))], n = 1 .. 100)]; imagpts := [seq([n, Im(S(n))], n = 1 .. 100)]; complex_pts := [seq([Re(S(n)), Im(S(n))], n = 1 .. 100)]; S_infinite := sum(exp(Pi*I*n)/n, n = 1 .. infinity); limit_Re := Re(S_infinite); limit_Im := Im(S_infinite); limit_Re; limit_Im; real_plot := pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum Value"], title = "Real Part of Partial Sums", axes = boxed); imag_plot := pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Partial Sum Value"], title = "Imaginary Part of Partial Sums", axes = boxed); complex_plot := pointplot(complex_pts, symbol = solidcircle, style = pointline, color = blue, labels = ["Re", "Im"], title = "Partial Sums in Complex Plane", axes = boxed); plots[display]([real_plot, imag_plot]); plots[display](complex_plot)

-ln(2)

 

-ln(2)

 

0

 

-ln(2)

 

0

 

 

 

restart; with(plots); interface(imaginaryunit = 'I'); S := proc (N) local n; add(exp(2*Pi*I*n), n = 0 .. N) end proc; realpts := [seq([n, Re(S(n))], n = 0 .. 100)]; imagpts := [seq([n, Im(S(n))], n = 0 .. 100)]; complex_pts := [seq([Re(S(n)), Im(S(n))], n = 0 .. 100)]; S_infinite := sum(exp(2*Pi*I*n), n = 1 .. infinity); limit_Re := Re(S_infinite); limit_Im := Im(S_infinite); real_plot := pointplot(realpts, symbol = solidcircle, style = pointline, color = blue, labels = ["n", "Partial Sum Value"], title = "Real Part of Partial Sums", axes = boxed); imag_plot := pointplot(imagpts, symbol = solidbox, style = pointline, color = red, labels = ["n", "Partial Sum Value"], title = "Imaginary Part of Partial Sums", axes = boxed); complex_plot := pointplot(complex_pts, symbol = solidcircle, style = pointline, color = blue, labels = ["Re", "Im"], title = "Partial Sums in Complex Plane", axes = boxed); plots[display]([real_plot, imag_plot]); plots[display](complex_plot)

infinity

 

infinity

 

0

 

 

 
 

``

Download infinite_series.mw

1 2 3 4 5 6 7 Last Page 1 of 59