作业帮 > 综合 > 作业

在matlab中,用二三阶Runge-Kutta方法计算下列问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 09:44:45
在matlab中,用二三阶Runge-Kutta方法计算下列问题
① y’=-y+x+1, y(0)=1
② x’’=-x2+x+1, x’(0)=0.8,x(0)=0
真心求教,还没怎么学matlab就要编这些东西.
syms x y;
f= @(x,y) -y+x+1;%待求的函数 y’=-y+x+1, y(0)=1
%% 下面是龙哥库塔函数的四阶编程 :
h=0.01;% 积分步长
a=0;% 自变量取值下限
b=1;% 自变量取值上限
y0=1;% 函数初值
N = (b-a)/h;
y = zeros(N+1,1);
y(1) = y0;
x = a:h:b;
for i=2:N+1

K1 = f(x(i-1), y(i-1));
K2 = f(x(i-1)+h/2 ,y(i-1)+K1*h/2);
K3 = f(x(i-1)+h/2 ,y(i-1)+K2*h/2);
K4 = f(x(i-1)+h ,y(i-1)+h*K3);
y(i) = y(i-1)+h*(K1+2*K2+2*K3+K4)/6;
end
fprintf('输出结果: %4.4f\n',y);
这是四阶Runge-Kutta方法,之前自己写过,就放在这里了.给你提供一个参考
下面是三阶Runge-Kutta方法,当热也可以直接调用函数ode23
syms x y;
f= @(x,y) -y+x+1;%待求的函数 y’=-y+x+1, y(0)=1
%% 下面是龙哥库塔函数的三阶编程 :
h=0.01;% 积分步长
a=0;% 自变量取值下限
b=1;% 自变量取值上限
y0=1;% 函数初值
N = (b-a)/h;
y = zeros(N+1,1);
y(1) = y0;
x = a:h:b;
for i=2:N+1

K1 = f(x(i-1), y(i-1));
K2 = f(x(i-1)+h/2 ,y(i-1)+K1*h/2);
% K3 = f(x(i-1)+h/2 ,y(i-1)+K2*h/2);
K3 = f(x(i-1)+h ,y(i-1)-h*K1+K2*2*h);
y(i) = y(i-1)+h*(K1+4*K2+K3)/6;
end
fprintf('输出结果: %4.4f\n',y);
② x’’=-x2+x+1, x’(0)=0.8,x(0)=0
对于此问题的求解,我直接调用的函数ode23
代码如下
clear all;clc
[t,x] = ode23(@vdp1000,[0 3000],[0.8 0]);
另一个m文件存有的函数
function dx = vdp1000(t,x)
dx = zeros(2,1); % a column vector
dx(1) = x(2);
dx(2) = -x(1)^2+x(1)+1;
% x’’=-x2+x+1, x’(0)=0.8,x(0)=0
再问: 高手啊..... 第二小题里面:[t,x] = ode23(@vdp1000,[0 3000],[0.8 0]);中的(@vdp1000,[0 3000],[0.8 0])这些数字是指什么?怎么确定的?
再答: (@vdp1000,[0 3000],[0.8 0]) 你看一下matlab函数help 很容易明白