MATLAB常微分方程初值求解问题 求答案
答案:1 悬赏:80 手机版
解决时间 2021-02-04 22:22
- 提问者网友:我是女神我骄傲
- 2021-02-04 09:26
MATLAB常微分方程初值求解问题 求答案
最佳答案
- 五星知识达人网友:十年萤火照君眠
- 2021-02-04 09:40
改进的欧拉方法
1.子函数
function[x,y]=eulerpro(fun,x0,xfinal,y0,n)
if nargin<5
n=50;
end
h=(xfinal-x0)/n;%步长
x(1)=x0;y(1)=y0;
for i=1:n
x(i+1)=x(i)+h;
y1=y(i)+h*feval(fun,x(i),y(i));
y2=y(i)+h*feval(fun,x(i+1),y1);
y(i+1)=(y1+y2)/2;
end
end
2.子函数
function f=doty(x,y)
f=cos(x*y);
end
3.主函数调用
[x,y]=eulerpro('doty',0,1,1,10)追问龙被割怎么弄啊追答4阶龙格库塔法解微分方程的程序
function varargout=saxplaxliu(varargin)
clc,clear
x0=0;xn=1.2;y0=1;h=0.1;
[y,x]=lgkt4j(x0,xn,y0,h);
n=length(x);
fprintf(' i x(i) y(i)\n');
for i=1:n
fprintf('%2d %4.4f %4.4f\n',i,x(i),y(i));
end
function z=f(x,y)
z=-2*x*y^2;
function [y,x]=lgkt4j(x0,xn,y0,h)
x=x0:h:xn;
n=length(x);
y1=x;
y1(1)=y0;
for i=1:n-1
K1=f(x(i),y1(i));
K2=f(x(i)+h/2,y1(i)+h/2*K1);
K3=f(x(i)+h/2,y1(i)+h/2*K2);
K4=f(x(i)+h,y1(i)+h*K3);
y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4);
end
y=y1;
1.子函数
function[x,y]=eulerpro(fun,x0,xfinal,y0,n)
if nargin<5
n=50;
end
h=(xfinal-x0)/n;%步长
x(1)=x0;y(1)=y0;
for i=1:n
x(i+1)=x(i)+h;
y1=y(i)+h*feval(fun,x(i),y(i));
y2=y(i)+h*feval(fun,x(i+1),y1);
y(i+1)=(y1+y2)/2;
end
end
2.子函数
function f=doty(x,y)
f=cos(x*y);
end
3.主函数调用
[x,y]=eulerpro('doty',0,1,1,10)追问龙被割怎么弄啊追答4阶龙格库塔法解微分方程的程序
function varargout=saxplaxliu(varargin)
clc,clear
x0=0;xn=1.2;y0=1;h=0.1;
[y,x]=lgkt4j(x0,xn,y0,h);
n=length(x);
fprintf(' i x(i) y(i)\n');
for i=1:n
fprintf('%2d %4.4f %4.4f\n',i,x(i),y(i));
end
function z=f(x,y)
z=-2*x*y^2;
function [y,x]=lgkt4j(x0,xn,y0,h)
x=x0:h:xn;
n=length(x);
y1=x;
y1(1)=y0;
for i=1:n-1
K1=f(x(i),y1(i));
K2=f(x(i)+h/2,y1(i)+h/2*K1);
K3=f(x(i)+h/2,y1(i)+h/2*K2);
K4=f(x(i)+h,y1(i)+h*K3);
y1(i+1)=y1(i)+h/6*(K1+2*K2+2*K3+K4);
end
y=y1;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯