24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2545  |  回复: 0

nenceman

新虫 (初入文坛)

[求助] 求助各位MATLAB微分方程互相迭代怎么做?

我要做两个微分方程的互相迭代,程序如下
h0=[0.5 0;0 -0.5];
h1=[0 0.5;0.5 0];
odefun1=@(t,psi) -i*(h0+cos(0.5*t)*h1)*psi;%求初始psi
tspan1=[0:0.1:10];
psi0=[1;0];
[t,psi]=ode45(odefun1,tspan1,psi0);
psi.'                                                   %因为我的版本是R2010,这个psi求出来理论上是列向量,但是2010求出来是行向量,之前已在论坛发帖,以后热心
                                                         %网友在R14版本测试为列向量。
for i1=1:1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp_1=[];
temp_1=h1*psi.';
for i0=1:size(temp_1,2)
    val_1=temp_1(:,i0);  
    odefun2=@(t,chi) -i*(h0+h1*imag(dot(chi,val_1)))*chi;%这部分为第一个微分方程,chi为所求变量,因为要迭代所以我在开头使用了for循环,
    tspan2=[10:-0.1:0];                                                       % psi为上面所求出来的psi
    chi0=[0,0;0,1]*psi(end,.';
    [t,chi]=ode45(odefun2,tspan2,chi0);
end
chi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
temp_2=[];
temp_2=chi.';
for i0=1:size(chi,2)
    val_1=temp_2(:,i0);
    odefun3=@(t,psi) -i*(h0+h1*imag(dot(val_1,h1*psi)))*psi;%这部分是迭代中的第二个微分方程,所求变量为psi,把上一步的chi带入这一步
    tspan3=[0:0.1:10];                                                             %求出psi,再把这一步求得的psi带入上一步求出chi,在带入这一步求psi,如此迭代
    psi0=[1;0];
    [t,psi]=ode45(odefun3,tspan3,psi0);
end
psi
%%%%%%%%%%%%%%%%%%%%%%%
for i0=1:size(chi,1)
    u(i0)=imag(chi(i0,*h1*psi(i0,.');
end
end
%%%%%%%%%%%%%%%%%%
问题:在最上面的部分,求得的psi是61个列向量,但是带入迭代的第一个方程中得到的解和理论上出入很大。研究后我发现在matlab求得的chi结果中并不是拿来一个psi值带入得到一个chi解,得到的只是psi中的最后一个解带入的结果。求各位指点,在这部分卡了好久了。另,迭代中的第一个微分方程由于给出的是终值而不是初值,所以我把时间设为[10:-0.1:0],不知道对这种知道终值的微分方程这样是否欠妥,但是我用最上面的微分方程反演试验了一下,结果是正确的。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 nenceman 的主题更新
信息提示
请填处理意见