我在mathematica 8中遇到了DSolve []命令的问题。解决下面的四阶微分方程,虽然它应该是一个真实的解决方案,但它会产生一个复杂的解决方案。 等式是:
y''''[x] + a y[x] == 0
手动求解这个方程产生一个只有实部的解。所有常数和边界条件也都是实数。
我手边的解决方案是:
y1[x_] = (C[5] E^(Power[a, (4)^-1]/Power[2, (2)^-1] x) +
C[6] E^(-(Power[a, (4)^-1]/Power[2, (2)^-1]) x)) Cos[
Power[a, (4)^-1]/Power[2, (2)^-1]
x] + (C[7] E^(Power[a, (4)^-1]/Power[2, (2)^-1] x) +
C[8] E^(-(Power[a, (4)^-1]/Power[2, (2)^-1]) x)) Sin[
Power[a, (4)^-1]/Power[2, (2)^-1] x];
现在我必须解决常数C [5] ...... C [8]。这引起了类似的问题。我使用带有边界条件的Solve []命令
Solve[{y1''[-c] == ic0, y1''[c] == ic0 , y1'''[-c] == ic1 ,
y1'''[c] == - ic1 }, {C[5], C[6], C[7], C[8]} ];
常量C [5] ... C [8]现在是真实的,如果使用//简化和复杂,如果使用// FullSimplify。
知道原因是什么吗? 我的计算笔记本可以在以下网址下载: http://dl.dropbox.com/u/4920002/DGL_4th_Order_with_own_solution.nb
在进一步的工作中,我必须使用DSolve [],我想在这里理解这个问题。
谢谢,
安德烈亚斯
答案 0 :(得分:1)
我认为你的一些陈述取决于细节。例如,如果您选择C[]
:
a<0
可能是复数
parS = Solve[{y1''[-c] == ic0, y1''[c] == ic0, y1'''[-c] == ic1,
y1'''[c] == -ic1}, {C[5], C[6], C[7], C[8]}] // Simplify;
parFS = Solve[{y1''[-c] == ic0, y1''[c] == ic0, y1'''[-c] == ic1,
y1'''[c] == -ic1}, {C[5], C[6], C[7], C[8]}] // FullSimplify
parS /. {a -> -2, c -> 10, ic0 -> 1, ic1 -> -1} // N
parFS /. {a -> -2, c -> 10, ic0 -> 1, ic1 -> -1} // N
(* {{C[5] -> -0.35876 - 2.498*10^-15 I, C[6] -> -0.35876 - 2.498*10^-15 I,
C[7] -> 2.27596*10^-15 - 0.358762 I, C[8] -> -2.27596*10^-15 + 0.358762 I}}
{{C[5] -> -0.35876 + 5.10703*10^-15 I, C[6] -> -0.35876 + 5.10703*10^-15 I,
C[7] -> 2.35922*10^-15 - 0.358762 I, C[8] -> -2.19269*10^-15 + 0.358762 I}} *)
除了这一点,你可以在一行中找到你的问题的解决方案,事实上它似乎是一个真正的功能(除了数字):
sol[a_, ic0_, ic1_, c_, x_] = y[x] /. DSolve[{y''''[x] + a y[x] == 0, y''[-c] == ic0,
y''[c] == ic0, y'''[-c] == ic1, y'''[c] == -ic1}, y[x], x][[1]] ;
Plot[Im[sol[-2.0, 1.0, -1.0, 10., x]], {x, -10., 10.}]
Plot[Re[sol[-2.0, 1.0, -1.0, 10., x]], {x, -10., 10.}]
答案 1 :(得分:0)
由于您将问题交叉发布到Mathematica.SE,我在那里给出了答案。它的关键在于,即使a
的实数和正值,,您的四阶微分方程的一般解也是复杂的。期。如果您碰巧只对真正的解决方案感兴趣,it is possible to extract them。