在matlab中求解两个耦合二阶微分方程的输出问题

计算科学 matlab
2021-12-21 05:32:39

我正在尝试在 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。

在此处输入图像描述

我的错误是什么?

1个回答

是您的 ODE 系统的平衡解。所以 MATLAB 正在计算和绘制答案——全为零。中的某些条目似乎应该是 1 而不是 0。x=[0,0,0,0]Tx0

从您预期的解决方案来看,x0 可能应该是这将产生相同的初始值(假设 h 曲线的斜率在原点为 1)。[0,1,1,0]T