在matlab中求解两个耦合二阶微分方程的误差

时间:2012-07-05 13:29:37

标签: matlab physics differential-equations

我试图在matlab上解决以下微分方程。 (它们是从yang-mills-higgs lagrangian获得的关于蹄状polyakov单极子ansatz的方程式)。这是我的函数文件。我有两个变量h和k及其衍生物w.r.t到变量t。我的x(1)= h,x(2)= k,x(3)= dh \ dt,x(4)= dk \ dt。所有函数的初始值均为0。

    function xprime = monopole( t,x )
    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here

    xprime(1)=x(3);
    xprime(2)=x(4);
    xprime(4)=(1/(t.^2)).*((x(2).^2)-1).*x(2) + 4.*(x(1).^2).*x(2);
    xprime(3)=(2/(t.^2)).*(x(2).^2).*x(1)-(1-(x(1)).^2).*x(1)-(2/t).*x(3);
    xprime=xprime(:);




end

现在我运行以下代码     >

> t0=0;
    >> tf=10;
    >> x0=[0 0 0 0];
    >> [t,s]=ode45(@monopole,[t0,tf],x0);
    >> plot(t,s(:,1));

我什么都没得到。出现图形窗口但它不包含任何内容。这个方程应该有解决方案。虚线曲线是从1开始的曲线应该得到的曲线是k,而0是h。

enter image description here

我的错误是什么?

1 个答案:

答案 0 :(得分:0)

当发生这种情况时,您应该做的第一件事就是查看t和s向量中的值。在这种情况下,s(1,1)包含0,s(:,2:end)都是NaN。因此,情节中没有任何内容。

至于为什么会这样,一些想法

  1. 您确定monopole的定义是否正确?
  2. 为什么要显示k(0)= 1的情节,但是传递k = 0的初始条件?
  3. 为什么使用h ^ prime(0)= 0初始条件,但在图中它看起来像h ^ prime(0)有一个非零斜率?
  4. 1./t ^ 2肯定看起来很可疑;想一想,在第一步你要将0除以0,因此NaN。也许颂歌解决者在这方面遇到了困难,而另一个求解器会更好地工作(注意:我对ODE解算器的经验很少,所以请大家用这一点)。
  5. 最后,为了确保你真正理解如何使用ODE求解器,为什么不从一个非常简单的ODE开始,你知道确切的答案(即谐振子)。