2

我正在尝试在 matlab 上求解以下微分方程。(它们是从 yang-mills-higgs 拉格朗日方程中获得的 hoofy polyakov 单极子 ansatz 的方程)。这是我的函数文件。我有两个变量 h 和 k 以及它们对变量 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。

在此处输入图像描述

我的错误是什么?

4

1 回答 1

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 求解器在这方面遇到了困难,而另一个求解器会更好地工作(注意:我对 ODE 求解器的经验很少,所以请多加注意)。

最后,为了确保您真正了解如何使用 ODE 求解器,为什么不从一个非常简单的 ODE 开始,您知道确切的答案(即谐波振荡器)。

于 2012-07-05T19:11:53.187 回答