為什麼Mathematica的DSolve函數會解不出顯式解??

這個方程我手動解過,所以肯定是有顯式解的:

特解(u=0,v=e^t)也找不出:

殘念……


In[6]:= DSolve[v""[t] == 3 v"[t] - 2 v[t] - 2 v[t]^2 + 2 v[t] v"[t],
v[t], t]

Out[6]= {{v[t] -&> E^t Sqrt[-C[1]] Tan[E^t Sqrt[-C[1]] + C[2]]}}

說明書裡面是這麼說的,

DSolve includes general procedures that handle almost all the nonlinear ordinary differential equations whose solutions are given in standard reference books such as Kamke.

但system of ODEs就一點說明也沒有,估計消元比較殘念吧(而且似乎很難設計演算法不增添或者遺漏解吧),你看這個,

In[28]:= DSolve[{u"[t] == v[t], v"[t] == w[t]}, {u[t], v[t]}, t]

Out[28]= {{u[t] -&>
1/2 E^-t (1 + E^(2 t)) C[1] + 1/2 E^-t (-1 + E^(2 t)) C[2],
v[t] -&> 1/2 E^-t (-1 + E^(2 t)) C[1] + 1/2 E^-t (1 + E^(2 t)) C[2]}}

從解的結構可以看出來是用特徵值法做的,沒用消元,

我猜DSolve這個函數是對未知函數向量 {u[t], v[t]}做整體的線性或者非線性的變換,而後比對自己的函數庫(MM喜歡內建已知的函數和其性質,但Simplify的功能一直很雞肋,看起來似乎是做了一個簡單的parser,更別提複雜的有目的性的代數計算了),比對完了就返回空值,你看這個例子,

DSolve[{u"[t] == 3 v[t], v"[t]^3 == 8 u[t]}, {u[t], v[t]}, t]

{{v[t] -&> -Sqrt[
2] [Sqrt](C[1] -
1/4 InverseFunction[(3 I (EllipticE[
I ArcSinh[(
Sqrt[((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[
C[1]]] #1^(1/3))/Sqrt[2]], -1] -
EllipticF[
I ArcSinh[(
Sqrt[((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[
C[1]]] #1^(1/3))/Sqrt[2]], -1]) Sqrt[(
8 C[1] + (-2 - 2 I Sqrt[3]) #1^(4/3))/
C[1]])/((((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[C[1]])^(
3/2) Sqrt[4 C[1] + (-1 - I Sqrt[3]) #1^(4/3)]) ][-((
3 t)/Sqrt[2]) + C[2]]^(4/3) -
1/4 I Sqrt[3]
InverseFunction[(3 I (EllipticE[
I ArcSinh[(
Sqrt[((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[
C[1]]] #1^(1/3))/Sqrt[2]], -1] -
EllipticF[
I ArcSinh[(
Sqrt[((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[
C[1]]] #1^(1/3))/Sqrt[2]], -1]) Sqrt[(
8 C[1] + (-2 - 2 I Sqrt[3]) #1^(4/3))/
C[1]])/((((-1)^(3/4) Sqrt[I - Sqrt[3]])/Sqrt[C[1]])^(
3/2) Sqrt[4 C[1] + (-1 - I Sqrt[3]) #1^(4/3)]) ][-((
3 t)/Sqrt[2]) + C[2]]^(4/3)),

我只把v[t] copy過來了,這個system of ODEs是用u[t]=t^3, v[t]=t^2 造的,但即便添加u[0]==0, v[0]==0或者類似的條件也得不出那個特解,而是會提示,

In[44]:= DSolve[{u"[t] == 3 v[t], v"[t]^3 == 8 u[t], u[0] == 0,
v[0] == 0}, {u[t], v[t]}, t]

During evaluation of In[44]:= DSolve::bvnul: For some branches of the general solution, the given boundary conditions lead to an empty solution. &>&>

During evaluation of In[44]:= DSolve::bvnul: For some branches of the general solution, the given boundary conditions lead to an empty solution. &>&>

During evaluation of In[44]:= DSolve::bvnul: For some branches of the general solution, the given boundary conditions lead to an empty solution. &>&>

During evaluation of In[44]:= General::stop: Further output of DSolve::bvnul will be suppressed during this calculation. &>&>

Out[44]= {}

MM自己橢圓函數沒玩好玩脫了。

所以即便MM號稱符號運算強大,還是用來處理流水線計算比較穩妥,比如算個Riemann tensor啥的。。。。


不同的軟體演算法不同,可能這題正好對不上MMA的胃口

這題maple和matlab(mupad)都能算出來,不過兩者解的形式很不相同


推薦閱讀:

為什麼Mathematica里矩陣索引這麼慢,有沒有什麼辦法迴避或者改進?

TAG:數學 | 微積分 | WolframMathematica | 微分方程 |