Skip to main content

calculus and analysis - How to convert a system of parametric equations to a normal equation?


For example, I have a system of parametric equations (R is a constant number) :


{ x == p +  R Cos[k],
y == Cos[p] + R Sin[k],
k == ArcTan[ 1/Sin[p] ] }

Now I am going to find the normal equation of $\; y = f(x)\;$ without other variables. (Theoretically it is possible because there are totally 4 variables and 3 equations.)



How can I do this in Mathematica?



Answer



First, for the sake of simplicity let's define eqs - the system of our interest :


eqs = { x == p + R Cos[k],
y == Cos[p] + R Sin[k],
k == ArcTan[ 1/Sin[p]] };

Equations y = y(x)


For this system we can find an explicit equation $\;y = y(x)\;$ only assuming R == 0, otherwise we could find only implicit solutions.


Solve[ eqs /. R -> 0, y, {p}, MaxExtraConditions -> All]



{{y -> ConditionalExpression[Cos[x], k == ArcTan[Csc[x]]]}}

See e.g. Inverse function theorem for the general issue of invertibility, let's restrict to :


eqs[[1]] /. (Rule @@@ eqs)[[3]]


x == p + R/Sqrt[1 + Csc[p]^2]


When R is given, one could invert $\;x = x(p)\;$ in a neighbourhood of $p_{0}$ to get $\;p = p(x)\;$ if $\frac{dx}{dp}|_{p=p_{0}} \neq 0$, i.e. only for special ranges of p where $\frac{dx}{dp}$ doesn't vanish. While it would work well on the symbolic level using InverseFunction, but generically there is no way to get explicit formulae. We can animate dependence of the function $\;x = x(p)\;$ : p + R Cos[ArcTan[1/Sin[p]]] and its inverse function $\;p = p(x)\;$ on the running parameter -1 < R < 1 (then $x(p)$ is globally invertible). We add the symmetry axis p == x.


Animate[ Plot[ { p + R Cos[ArcTan[1/Sin[p]]],
p,
InverseFunction[ # + R Cos[ ArcTan[ 1/Sin[#]]] &]@p }, {p, -Pi, Pi},

PlotPoints -> 80, PlotRange -> {-3.3, 3.3},
PlotStyle -> {Thick, Dashed, Thick}],
{R, -1, 1} ]

enter image description here



Equations y = y(k)


We can get an equation for y in an implicit form using Eliminate and then solve the equation with respect to y :


Eliminate[ eqs, {x, p}, InverseFunctions -> True]
Reduce[%, y]


(-1 + y^2 - 2 R y Sin[k] + R^2 Sin[k]^2) Tan[k]^2 == -1

Tan[k] != 0 &&
(y == Cot[k]^2 (R Sin[k] Tan[k]^2 - Sqrt[-Tan[k]^2 + Tan[k]^4]) ||

y == Cot[k]^2 (R Sin[k] Tan[k]^2 + Sqrt[-Tan[k]^2 + Tan[k]^4]) )

We've got solutions in terms of k only. This is the best one can do for your system,
otherwise to get an equation for y in terms of x we should invert $\;k = k(x)\;$ to get $\;y = y(x)\;$


First @ Solve[ k == ArcTan[ Csc[ p]], p]


{p -> ArcCsc[Tan[k]]}

We could do that analogically as in the case $\;p = p(x)\;$, i.e using InverseFunction.



Equations y = y(p)


You could as well try another way of eliminating variables while solving equations (as pointed out by Searke) i.e. Solve[ eqns, vars, elims], and using MaxExtraConditions -> All to get also non-generic solutions, here we eliminate k to get a solution in terms of p :


Solve[ eqs, y, k, MaxExtraConditions -> All]


{{y -> ConditionalExpression[(R Csc[p] + Cos[p] Sqrt[1 + Csc[p]^2])/ Sqrt[1 + Csc[p]^2], 
Sqrt[1 + Csc[p]^2] != 0 &&
p - x + R/Sqrt[1 + Csc[p]^2] == 0]}}

The second argument in ConditionalExpression is the condition which has to be satisfied.



Nevertheless you could do the following to express y in terms of p and x :


Solve[ eqs, {y, k}]


{{y -> -Sqrt[-p^2 + R^2 + 2 p x - x^2] + Cos[p], k -> ArcTan[Csc[p]]},
{y -> Sqrt[-p^2 + R^2 + 2 p x - x^2] + Cos[p], k -> ArcTan[Csc[p]]}}

or


 Reduce[eqs, y, Backsubstitution -> True]



x == (R + p Sqrt[1 + Csc[p]^2])/Sqrt[1 + Csc[p]^2] && k == ArcTan[Csc[p]] && 
y == (R Csc[p] + Cos[p] Sqrt[1 + Csc[p]^2])/Sqrt[1 + Csc[p]^2]

There is another approach to get x in terms of y and p :


Eliminate[eqs, {x, k}, InverseFunctions -> True] //
Simplify[#, x == p + R Cos[k]] &

Reduce[%, x]



R^2 + 2 y Cos[p] == (p - x)^2 + y^2 + Cos[p]^2

x == p - Sqrt[R^2 - y^2 + 2 y Cos[p] - Cos[p]^2] ||
x == p + Sqrt[R^2 - y^2 + 2 y Cos[p] - Cos[p]^2]

Above, in all cases we have to use ReplaceAll (i.e. /.) and InverseFunction wherever appear p or k to get $\;p = p(x)\;$ or $\;k = k(x)\;$.


Comments

Popular posts from this blog

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Mathematica: 3D plot based on combined 2D graphs

I have several sigmoidal fits to 3 different datasets, with mean fit predictions plus the 95% confidence limits (not symmetrical around the mean) and the actual data. I would now like to show these different 2D plots projected in 3D as in but then using proper perspective. In the link here they give some solutions to combine the plots using isometric perspective, but I would like to use proper 3 point perspective. Any thoughts? Also any way to show the mean points per time point for each series plus or minus the standard error on the mean would be cool too, either using points+vertical bars, or using spheres plus tubes. Below are some test data and the fit function I am using. Note that I am working on a logit(proportion) scale and that the final vertical scale is Log10(percentage). (* some test data *) data = Table[Null, {i, 4}]; data[[1]] = {{1, -5.8}, {2, -5.4}, {3, -0.8}, {4, -0.2}, {5, 4.6}, {1, -6.4}, {2, -5.6}, {3, -0.7}, {4, 0.04}, {5, 1.0}, {1, -6.8}, {2, -4.7}, {3, -1....