Group Abstract Group Abstract

Message Boards Message Boards

[WSG25] Daily Study Group: Introduction to Calculus

A Wolfram U Daily Study Group on "Introduction to Calculus" begins on Monday, August 11, 2025.

Join a cohort of fellow mathematics enthusiasts to learn about the fundamentals of calculus from the Introduction to Calculus ebook by John Clark and myself.

enter image description here

Our topics will include functions and limits, differential and integral calculus, and practical applications of calculus.

The study group will be led by expert Wolfram U instructors @Luke Titus and @Shenghui Yang, and I will stop by occasionally to check in with the group. You will have a lot of fun learning with us!

No prior Wolfram Language experience is required.

Please feel free to use this thread to collaborate and share ideas, materials and links to other resources with fellow learners.

Dates

August 11-August 29, 2025, 11am-12pm CT (4-5pm GMT)

REGISTER HERE

enter image description here

POSTED BY: Devendra Kapadia
16 Replies

Here's an applet that builds on @Shenghui Yang's example. It finds all the tangents with a given slope. I also used an exact solver instead of a numerical one, for variety's sake. I'm quite familiar with Wolfram Language, and I apologize if some of the functions I used are a little further along your personal learning curve for WL.

f[x_, y_] := x^2 + x*Sin[4*y] + 3 y^2 - 7 + Cos[3*x];
(* there are powerful algorithms for solving transcendental equations
   over bounded domains, so we'll help Solve[] out with the following *)
boundsArray = RegionBounds[ImplicitRegion[f[x, y] == 0, {x, y}]];
boundsArray = boundsArray /. x_Real :> Sign[x] Ceiling[Abs[x] + 0.01, 1/128]; (* pad bounds a bit *)
boundsIneqs = Replace[boundsArray,
  {{x1_, x2_}, {y1_, y2_}} :> x1 < x < x2 && y1 < y < y2];
(* pre-compute plot to speed up Manipulate[] *)
curvePlot = Replace[boundsArray,
   {{x1_, x2_}, {y1_, y2_}} :> ContourPlot[f[x, y] == 0, {x, x1, x2}, {y, y1, y2}]];
(* Find all tangents of a given slope *)
Manipulate[
 With[{sols = Solve[(* Solve or NSolve *)
     {f[x, y] == 0, slope == ImplicitD[f[x, y] == 0, y, x], 
      boundsIneqs},
     {x, y}]},
  Show[curvePlot,
   Graphics[{
     Replace[sols, sol_ :> InfiniteLine[{x, y} /. sol, {1, slope}], 1]
     }],
   PlotRange -> Max@Abs@boundsArray
   ]
  ],
 {{slope, 0}, -5, 5, 1/128}]
POSTED BY: Michael Rogers

You can enter the symbol for "an element of" by using \[Element]. You can also get this symbol by pressing the escape key, then start typing the word element. The suggestion for the element symbol should be suggested to you.

You can find some other symbols for mathematical logic in the following guide page:

https://reference.wolfram.com/language/guide/LogicAndBooleanAlgebra.html

There is also some useful function relevant for theorem proving in this guide page:

https://reference.wolfram.com/language/guide/TheoremProving.html

POSTED BY: Luke Titus

Looking forward to this Daily Study Group with great instructors and an energetic group of learners! See everyone online on Monday, 11am CT. Preview the daily schedule of topics and sign up here.

POSTED BY: Jamie Peterson

In order to understand the difference in the two plots, you could try setting Exclusions ->None for both of them.

The plot with PlotRange->{0, 4} is mostly smooth and setting Exclusions->All with a moderate setting of PlotPoints is enough to smooth out the singular behavior at the top.

The plot with PlotRange->{0, 8} is very irregular and using Exclusions->All with a much higher setting of PlotPoints (say PlotPoints->500) is required to get a reasonably smooth plot at the top, but it may still be difficult to get the same kind of smooth surface that is seen with PlotRange->{0,4}.

POSTED BY: Devendra Kapadia

Here is an more involved example demonstrating that the parallel tangents can be found using numeric equation solving function:

f[x_, y_] := x^2 + x*Sin[4*y] + 3 y^2 - 7 + Cos[3*x];
pt = With[{x = RandomReal[{-2, 2}]}, {x, y /. FindRoot[f[x, y] == 0, {y, 1}]}];
slope = ImplicitD[f[x, y] == 0, y, x];
m = slope /. Thread[{x, y} -> pt];
pt2 = {x, y} /. FindRoot[{f[x, y] == 0, slope == m}, {x, -2}, {y, -1}];
m2 = slope /. Thread[{x, y} -> pt2];
ContourPlot[f[x,y]==0,{x,-4,4},{y,-4,4},Epilog->{InfiniteLine[pt,{1,m}],
    InfiniteLine[pt2,{1,m2}],
    {PointSize[0.02],Point[pt]},
    {PointSize[0.02],Point[pt2]}
}]

enter image description here

POSTED BY: Shenghui Yang
Posted 4 days ago

I put the following question, which Shenghui said he would answer in the Community Thread, in the Q&A today (8-18). I have added more to it here:

On each of the examples with a tangent line drawn to an implicitly defined curve, can you write code that will also draw all other tangent lines to the curve which are parallel to the first tangent line? The examples included: circle, Folium of Descartes [in the example shown, there are no other tangents since the one shown is parallel to the asymptote—but every other point on the curve should have a parallel tangent], ellipse, hyperbola, cardioid, Devil’s Curve (a symmetric rational quartic), and Kampyle of Eudoxus. Are there any theorems relating the maximum number of possible parallel tangents to the degree of the equation?

A non-relative extrema point on the graph of a sine, cosine, secant, cosecant, tangent, or cotangent would have an infinite number of parallel tangents to the one at the given point. Now consider Lissajous curves [see, for example, https://mathworld.wolfram.com/LissajousCurve.html and https://demonstrations.wolfram.com/LissajousFigures/ ], which are parametric curves with both x- and y- components being sinusoidal functions. Would the code for finding parallel tangents from the algebraic curves above also work for these? If not, can you write code for this case?

POSTED BY: Gerald Oberg
Posted 4 days ago

What is the formula for the function shown on the cover of the course textbook (which is shown very briefly in the video above, also in the logo on the Daily Study Group page, and also at https://www.wolfram-media.com/products/introduction-to-calculus/)?

POSTED BY: Gerald Oberg

please discard.

POSTED BY: Shenghui Yang

Having said that, here's a Lissajous code. Replace the first two lines in my original code with the following:

lj = {Sin[5 t + Pi/2], Sin[2 t]} // TrigToExp // ReplaceAll[t -> I*Log[z]];
f[x_, y_] = First@GroebnerBasis[{x, y} - lj, {x, y}, {z}]; 
boundsArray = {{-1, 1}, {-1, 1}};

You can replace {Sin[5 t + Pi/2], Sin[2 t]} with your favorite Lissajous parametrization — unless Mathematica chokes on it. In the above example, you see no tangents of slope 0. It's one of those problems I alluded to that I don't have time for; you have to put in checks and fixes for the various issues that might arise.

POSTED BY: Michael Rogers

Hi Gerald,

It's not entirely straightforward to me. I was rather surprised that Mathematica found Shenghui's example so easy to solve. In general, you have to worry about unbounded curves, curves with multiple loops, self-intersecting curves (like Lissajous) and other singularities, and so on. Parametric has to be treated differently than implicit, and converting from one form to the other is not always easy.

In general, each example needs to be worked on and tweaked. One might try to simplify some step, like fixing the bounding rectangle. Then one has to find examples that can be shown in the chosen rectangle. It's more work than I can put into it right now.

Plus, for me, figuring out how to do the mathematics and how to express the mathematics in WL is the interesting bit. If that's how you feel, I suggest you take one of your examples and try to work it up. If you get stuck, post a question on the main community site so others will see it. Then I or someone else might be able to give you help. That way, you build your own knowledge.

POSTED BY: Michael Rogers
Posted 1 day ago
POSTED BY: Gerald Oberg

If I change the Plotrange to {0,6} or higher, the tops of the "volcanoes" get jagged around the edges. Do you happen to know why?

enter image description here

POSTED BY: Carl Hahn

Thank you for the nice question! Here is the code for generating the plot shown on the book cover:

RemoveBackground[
 Rasterize[
  Plot3D[{Re[Sqrt[1/(Cos[5 x] Sin[5 y] - 1/2)]], 
    Im[Sqrt[1/(Cos[5 x] Sin[5 y] - 1/2)]], 
    Style[.01, White, Lighting -> {{"Ambient", White}}]}, {x, -1/3, 
    1.33}, {y, -1/3, 1.6}, Axes -> False, Boxed -> False, 
   BoundaryStyle -> None, Exclusions -> All, Mesh -> None, 
   PlotPoints -> 35, PlotRange -> {Automatic, Automatic, {0, 4}}, 
   ViewPoint -> {1.75, 2.25, 1.85}]]]
POSTED BY: Devendra Kapadia
Posted 7 days ago

Also entering set theory symbols from the keyboard-how to do? It is abstract sets whose elements are not given and sentences like "A is a subset of B", "element a belongs to B". I want to repeat the whole school math, but how is it better to do it - just solving tasks is pointless after all. But how to make a step by step solution knit, from which to start!?

POSTED BY: Jaan Kapp
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard