马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
有没有谁会编个二阶用龙格库塔法解非线性微分方程的程序给我看看,用matlab语言的,方程是
xdot(2)=(-(1/tau1+K*tau2*(cosx(1))/tau1)*x(2)-K*(sinx(1))/tau1+Deltaomegao/tau1);
xdot(1)=x(2);
其中xdot(1)就是x1求一阶导,xdot(2)就是x2求一阶导,Deltaomegao,tau1,tau2,K是要给定初值的常量
我把其中的cosx(1),sinx(1)用泰勒公式展开了前三项然后用ode45编了程序,但是老师说这样不精确,也不专业,要我用龙格库塔法,不会,所以请大家帮帮忙,看看怎么改。
本人的程序如下:
function xdot=TwoPLL2(t,x,dummy,tau1,tau2,K,Deltaomegao)
xdot=zeros(2,1);
xdot(2)=(-(1/tau1+K*tau2*(1-x(1)^2/2+x(1)^4/24)/tau1)*x(2)-K*(x(1)-x(1)^3/6+x(1)^5/120)/tau1+Deltaomegao/tau1);
xdot(1)=x(2);
主程序
tau1=5;tau2=1;K=12;Deltaomegao=[1,2,3,4];
tspan=linspace(0,15,1500);
options=odeset('Abstol',[1e-6,1e-6]);
for i=1:4
[t,x]=ode45('TwoPLL2',tspan,[-pi,Deltaomegao(i)]',options,tau1,tau2,K,Deltaomegao(i));
figure(1);plot(t,x(:,1)); hold on; title('Phase difference as a function of Time');ylabel('θe(t)/rad');xlabel('t/s');
figure(2);plot(t,x(:,2)); hold on; title('Frequency difference as a function of Time');ylabel('(dθe(t)/dt)/(rad?sˉ1)');xlabel('t/s');
figure(3);plot(x(:,1),x(:,2)); hold on; title('Phase portrait');ylabel('(dθe(t)/dt)/(rad?sˉ1)');xlabel('/rad');
end:'( |