在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就要编这些东西。 展开
② x’’=-x2+x+1, x’(0)=0.8,x(0)=0
真心求教,还没怎么学matlab就要编这些东西。 展开
1个回答
展开全部
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
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
很容易明白
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询