function [Y] = RK45(t,X,f,h)
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比百色網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式百色網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋百色地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
K1=f(t,X);
K2=f(t+h/2,X+h/2*K1);
K3=f(t+h/2,X+h/2*K2);
K4=f(t+h,X+h*K3);
Y=X+h/6*(K1+2*K2+2*K3+K4);
end
以上是4階龍格庫塔法的代碼:
自己寫函數(shù),存為f.m
function dxdt = f (t,x)
dxdt(1)=exp(x(1)*sin(t))+x(2);
dxdt(2)=exp(x(2)*cos(t))+x(1); % x(1)是你的f,x(2)是你的g
dxdt=dxdt(:);
end
自己給出t0,x0,h的值(初始時(shí)間,初值,步長)
如果求t0到t1的軌跡的話:給個(gè)例子如下
t0=0;t1=5;h=0.02;x0=[-1;-1];
T=t0:h:t1;X=zeros(length(x0),length(T));X(:,1)=x0;
for j=1:length(T)-1
X(:,j+1)=RK45(T(j),X(:,j),@(t,x) f(t,x),h);
end
plot(T,X(1,:));
hold on;
plot(T,X(2,:),'r');
具體參數(shù)自己設(shè)置
題主給出的運(yùn)行龍格庫塔法求微分方程為什么會(huì)出錯(cuò)?出錯(cuò)的根本原因自定義函數(shù)的變量與函數(shù)體里的變量不一致,即F=f(t,y)的y,不等同于Y(1)和Y(2)。正確的寫法為
function F=f(t,Y)
x=Y(1);y=Y(2);
f1=-x^2*(5-y);
f2=y*(4-3*x);
F=[f1;f2];
end
完善代碼可以得到如下圖形。
經(jīng)典龍格庫塔公式的精度為p=2。亞當(dāng)斯-巴什福思(Adams-Bashorth)法,亞當(dāng)斯-莫爾頓(Adams-Monlton)法,都是常微分方程的積分方法。它們需要在每一次迭代時(shí)重新計(jì)算一遍等式右邊的結(jié)果(非線性隱含問題忽略計(jì)算多個(gè)f(ω)值的可能性龍格-庫塔(Runge-Kutta)法是一種不同的處理,作為多級(jí)方法為人們所知。它要求對(duì)于一個(gè)簡(jiǎn)單的校正計(jì)算多個(gè)f的值。
MATLAB求解x''+0.7x'+0.8x'|x'|+25.6x-25.6x3=0二階微分方程組的方法,可以按下列步驟進(jìn)行:
1、建立自定義函數(shù)func()
function
f
=
func(t,x)
%x''+0.7x'+0.8x'|x'|+25.6x-25.6x3=0
f(1)=x(2);
f(2)=25.6*x(1)^3-25.6*x(1)-0.8*x(2)*abs(x(2))-0.7*x(2);
f=f(:);
2、建立龍格庫塔算法函數(shù)runge_kutta()
調(diào)用格式:[t,x]
=
runge_kutta(@(t,x)func(t,x),x0,h,a,b);
3、然后根據(jù)x和x'數(shù)據(jù),繪制出x(t)、x′(t)的圖形。
plot(x(:,1),x(:,2))