在matlab中,用二三阶Runge-Kutta方法计算下列问题① y’=-y+x+1, y(0)=1 ② x’’=-x2+x+1, x’(0)=0.8,x(0)=0真心求教,还没怎么学matlab就要编这些东西.
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/17 03:34:33
![在matlab中,用二三阶Runge-Kutta方法计算下列问题① y’=-y+x+1, y(0)=1 ② x’’=-x2+x+1, x’(0)=0.8,x(0)=0真心求教,还没怎么学matlab就要编这些东西.](/uploads/image/z/13138635-3-5.jpg?t=%E5%9C%A8matlab%E4%B8%AD%2C%E7%94%A8%E4%BA%8C%E4%B8%89%E9%98%B6Runge-Kutta%E6%96%B9%E6%B3%95%E8%AE%A1%E7%AE%97%E4%B8%8B%E5%88%97%E9%97%AE%E9%A2%98%E2%91%A0+y%E2%80%99%3D-y%2Bx%2B1%2C+y%280%29%3D1+++%E2%91%A1+x%E2%80%99%E2%80%99%3D-x2%2Bx%2B1%2C+x%E2%80%99%280%29%3D0.8%2Cx%280%29%3D0%E7%9C%9F%E5%BF%83%E6%B1%82%E6%95%99%2C%E8%BF%98%E6%B2%A1%E6%80%8E%E4%B9%88%E5%AD%A6matlab%E5%B0%B1%E8%A6%81%E7%BC%96%E8%BF%99%E4%BA%9B%E4%B8%9C%E8%A5%BF.)
在matlab中,用二三阶Runge-Kutta方法计算下列问题① y’=-y+x+1, y(0)=1 ② x’’=-x2+x+1, x’(0)=0.8,x(0)=0真心求教,还没怎么学matlab就要编这些东西.
在matlab中,用二三阶Runge-Kutta方法计算下列问题
① y’=-y+x+1, y(0)=1
② x’’=-x2+x+1, x’(0)=0.8,x(0)=0
真心求教,还没怎么学matlab就要编这些东西.
在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