0,g_f,tau_q)
t=linspace(0,T,L);%最终演化时间 T 就等于每一个 tau_q
h=T/L;%h 这是步长和精度,不同的 tau_q,精度应该不一样
C{1}=rho_0; %演化矩阵的初态
for x=1:1:L
TEST(1:2,x)=C{1};%这里的测试代码时用,没有其他用途,以下才是龙格库塔算
法
k1=master(t(1,x),C{1},w0,g_f,tau_q);
k2=master(t(1,x)+h/2,C{1}+h*k1/2,w0,g_f,tau_q);
k3=master(t(1,x)+h/2,C{1}+h*k2/2,w0,g_f,tau_q);
k4=master(t(1,x)+h,C{1}+h*k3,w0,g_f,tau_q);
C{1}=C{1}+(k1+2*k2+2*k3+k4)*h/6;
U=C{1};
end
Er=w0*(abs(U(2,1)))^2-(w0*g_f^2)/4*(abs(U(1,1)+U(2,1)))^2-
(w0*sqrt(1-g_f^2)-w0)/2;%这是根据 Er 公式算写的,U(1,1)和 U(2,1)就是
演化到每一个最终时间 T=tau_q 时的解 u(tau_q)和 v(tau_q)解。
U_condition=(abs(U(1,1)))^2-(abs(U(2,1)))^2; %用来验证这两个值是否归
一化的
function y=master(t,P,w0,g_f,tau_q)
H=zeros(2,2);
g_t=g_f/tau_q*t;
H=[w0/i*(1-1/2*g_t^2),-w0/i*1/2*g_t^2;
w0/i*1/2*g_t^2,-w0/i*(1-1/2*g_t^2);]; %微分方程组对应第一列
u(t),第二列 v(t)的形式去改写,之后把系数矩阵写出来就是这个形式
y=H*P;
主程序 代码如下:
clear;
tic
w0=1;
rho_0=[1;0];
g_c=1;
L=200000;%L 的大小(精度)随着 tau_q 的增加而迅速增加!注意 tau_q 变化需要调试这里
tau_x1=-1;
tau_x2=5;
tau_N=25;
tau_space=logspace(tau_x1,tau_x2,tau_N);
test_Er=zeros(1,tau_N);
g_f_space=[g_c,g_c-10^(-4),g_c-10^(-3),g_c-10^(-2),g_c-10^(-1)];
g_f_N=size(g_f_space);
figure
评论16
最新资源