如何使用mathematica隐式求解单个变量的微分方程?

如何使用mathematica隐式求解单个变量的微分方程?,math,wolfram-mathematica,differentiation,Math,Wolfram Mathematica,Differentiation,我试图强迫Mathematica隐式微分一个椭圆方程的形式: x^2/a^2+y^2/b^2 == 100 使用a=8和b=6 我使用的命令如下所示: D[x^2/a^2 + y^2/b^2 == 100/. y -> 3/4*Sqrt[6400-x^2], x] 其中,y->3/4*Sqrt[6400-x^2]来自于根据x求解y 我是按照这里的建议走到这一步的: 此脚本的输入是隐式 微积分教科书中表达了x和y之间的关系。在里面 Mathematica您需要使用y[x]来明确这个关系

我试图强迫Mathematica隐式微分一个椭圆方程的形式:

x^2/a^2+y^2/b^2 == 100
使用
a=8
b=6

我使用的命令如下所示:

D[x^2/a^2 + y^2/b^2 == 100/. y -> 3/4*Sqrt[6400-x^2], x]
其中,
y->3/4*Sqrt[6400-x^2]
来自于根据
x
求解
y

我是按照这里的建议走到这一步的:

此脚本的输入是隐式 微积分教科书中表达了x和y之间的关系。在里面 Mathematica您需要使用y[x]来明确这个关系 代替y。这在脚本中通过替换自动完成 y与y[x]的所有发生


但是Mathematica给出的解决方案中没有
y'
dy/dx
(就像我手工求解时一样)。所以我认为这个问题没有得到正确的解决。你知道什么命令能让程序解隐式微分吗?谢谢

概念上最简单的选择(如您所述)是将
y
设置为
x
的函数,并使用

但对于更复杂的关系,最好使用

请注意,使用
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


如果您实际使用正确的初始条件(从原始椭圆方程导出)求解微分方程
y'[x]==-((b^2 x)/(a^2 y[x])
然后您将根据上面给出的
x
恢复
y
的解决方案。

+1.我非常同意不全局设置
Dt
属性的建议,因为这可能非常容易出错。我甚至不确定首先显示此用法是否是一个好主意-您可以将选项传递给
Dt是显式的。如果您首先全局地将一些符号设置为
Dt
的常量,然后忘记它并进行一些涉及
Dt
和这些符号的无关计算,您可能会得到令人惊讶的结果。所提到的计算可能会以某种不明显的方式调用
Dt
,比如通过顶级代码调用一些系统函数nction。更糟糕的是,如果有人esle编写了一些软件包等并在那里使用了它,然后你使用了该软件包,你甚至不知道它,结果会非常令人费解。事实上,它可能没有我最初想的那么糟糕,因为
Dt
带有选项设置。我还是不想这样做,但这更重要个人喜好的。
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