龙格-库塔方法求解三阶常微分方程
第一步:将高阶常微分方程转换成常微分方程组,func(t,x)
第二步:调用runge_kutta(@func,y0,h,a, b)
例如:二阶常微分方程
func。m
function z = func(t,y)
z =[y(2);(1-y(1)^2)*y(2)-y(1)];
main。m
clear all;close all;clc
y0 = [0.25;0];
h = 0.1;
a = 0;
b = 20;
[t1 y1] = runge_kutta(@rhs_7,y0,h,a,b)
不是很懂你说的,比如随便写一个复杂点的微分方程:cosy·y'''+2y·y''-(y/x)·y'+y'^2=0,请问四阶龙格-库塔公式里面的f(xi,yi)是什么?
为了方便解答,例题选用教材上的题目。
func。m
function dy = func(x,y)
dy=zeros(3,1);
dy(1)=y(2);
dy(2)=y(3);
dy(3)=2*y(3)/x^3+3*y(2)/x^3+3*exp(2*x)/x^3;
main。m
x0 = 1;
xt =10;
y0=[1;10;30];
N= 100;
h=(xt-x0)/N;%linspace(x0,xt,N)
[x,yR] = runge_kutta(@func,y0,h,x0,xt);
plot(x,yR(1,:),'r-',x,yR(2,:),'k-',x,yR(3,:),'g-');
grid
legend('y','y一阶导数','y二阶导数');
xlabel('x');ylabel('y(y',y'')');
title('三阶常微分方程求解结果');