4

私は、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]から解くことから来ます。yx

私はここにあるアドバイスに従ってこれまでに到達しました:http ://www.hostsrv.com/webmaa/app1/MSP/webm1010/implicit

このスクリプトの入力は、xとyの間の暗黙の関係が微積分の教科書で表現される従来の方法です。Mathematicaでは、yの代わりにy [x]を使用して、この関係を明示的にする必要があります。これは、yのすべての出現箇所をy [x]に置き換えることにより、スクリプトで自動的に実行されます。

y'しかし、Mathematicaが提供する解決策には、またはその中にはありませんdy/dx(私が手で解決したときのように)。ですから、正しく解決されたとは思いません。どのコマンドがプログラムに陰関数の微分を解くようにするかについてのアイデアはありますか?ありがとう。

4

1 に答える 1

8

(あなたが言ったように)概念的に最も簡単なオプションは、偏微分演算子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}

DSolvey'[x] == -((b^2 x)/(a^2 y[x])を使用して(元の楕円方程式から導出された)正しい初期条件で微分方程式を実際に解くと、上記の観点から解が回復します。yx

于 2011-09-15T13:11:35.403 に答える