概念上最简单的选择(如您所提到的)是制作y
一个函数x
并使用偏导数运算符D[]
In[1]:= D[x^2/a^2 + y[x]^2/b^2 == 100, x]
Solve[%, y'[x]]
Out[1]= (2 x)/a^2 + (2 y[x] y'[x])/b^2 == 0
Out[2]= {{y'[x] -> -((b^2 x)/(a^2 y[x]))}}
但对于更复杂的关系,最好使用全导算子Dt[]
In[3]:= SetOptions[Dt, Constants -> {a, b}];
In[4]:= Dt[x^2/a^2 + y^2/b^2 == 100, x]
Solve[%, Dt[y, x]]
Out[4]= (2 x)/a^2 + (2 y Dt[y, x, Constants -> {a, b}])/b^2 == 0
Out[5]= {{Dt[y, x, Constants -> {a, b}] -> -((b^2 x)/(a^2 y))}}
请注意,使用它SetAttributes[{a, b}, Constant]
而不是SetOptions[Dt, Constants -> {a, b}]
命令可能更整洁......然后Dt
不会携带所有额外的垃圾。
最后一个选项(您也提到过)是求解 的原始方程y[x]
,尽管这并不总是可能的......
In[6]:= rep = Solve[x^2/a^2 + y^2/b^2 == 100, y]
Out[6]= {{y -> -((b Sqrt[100 a^2 - x^2])/a)}, {y -> (b Sqrt[100 a^2 - x^2])/a}}
你可以检查它是否满足我们上面推导的两个解的微分方程
In[7]:= D[y /. rep[[1]], x] == -((b^2 x)/(a^2 y)) /. rep[[1]]
Out[7]= True
您可以随时使用替换规则替换您a = 8
的值。b = 6
{a->8, b->6}
如果您实际上使用具有正确初始条件(源自原始椭圆方程)的 DSolve 求解您的微分方程y'[x] == -((b^2 x)/(a^2 y[x])
,那么您将根据y
上面给出的条件恢复解x
。