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

①y’=-y+x+1,y(0)=1②x’’=-x2+x+1,x’(0)=0.8,x(0)=0真心求教,还没怎么学matlab就要编这些东西。... ① y’=-y+x+1, y(0)=1
② x’’=-x2+x+1, x’(0)=0.8,x(0)=0

真心求教,还没怎么学matlab就要编这些东西。
展开
 我来答
春风与黄鹂鸟
2012-04-25 · TA获得超过547个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:133万
展开全部
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
很容易明白
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式