Концептуально самый простой вариант (как вы упомянули) - сделать 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}
.
Если вы действительно решите свое дифференциальное уравнение y'[x] == -((b^2 x)/(a^2 y[x])
, используя DSolve с правильным начальным условием (полученным из исходного уравнения эллипса), тогда вы восстановите решение для y
в терминах x
дано выше.