MATLAB常微分方程初值求解问题 求答案
1个回答
展开全部
改进的欧拉方法
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)
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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |