Matlab软件求解微分方程-170419

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

matlab函数定义格式总结matlab中函数定义的一些内容:1,函数定义格式在matlab中应该做成M文件,文件名要和你文件里的function后面的函数名一致在File新建一个M-file在M-file里编辑函数格式为:function[输出实参表]=函数名(输入实参数)注释部分函数体语句return语句(可以有可以没有)如果是文件中的子函数,则可以任意取名,也可以在同一个文件中定义多个子函数例:function[max,min]=mymainfun(x)%主函数n=length(x);max=mysubfun1(x,n);min=mysubfun2(x);functionr=mysubfun1(x,n)%子函数1x1=sort(x);r=x1(n);functionr=mysubfun2(x)%子函数2x1=sort(x);r=x1(1);Matlab自定义函数的五种方法1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件;2、函数文件+子函数:定义一个具有多个自定义函数的M文件;3、Inline:无需M文件,直接定义;4、Syms+subs:无需M文件,直接定义;5、字符串+subs:无需M文件,直接定义.1、函数文件+调用函数文件:定义多个M文件:%调用函数文件:myfile.mclearclcfort=1:10y=mylfg(t);fprintf(‘M^(1/3)=%6.4f\n’,t,y);end%自定义函数文件:mylfg.mfunctiony=mylfg(x)%注意:函数名(mylfg)必须与文件名(mylfg.m)一致Y=x^(1/3);注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。2、函数文件+子函数:定义一个具有多个子函数的M文件%命令文件:funtry2.mfunction[]=funtry2()fort=1:10y=lfg2(t)fprintf(‘M^(1/3)=%6.4f\n’);Endfunctiony=lfg2(x)Y=x^(1/3);%注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。3、Inline:无需M文件,直接定义;%inline命令用来定义一个内联函数:f=inline(‘函数表达式’,‘变量1’,’变量2’,……)。调用方式:y=f(数值列表)%注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。例如:f=inline(‘x^2+y’,’x’,’y’);z=f(2,3)Ans=7注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。例:ClearClcf=’x^2’;Symsxg;g=x^2;h=inline(‘x^2’,’x’);4、Syms+subs:无需M文件,直接定义;用syms定义一个符号表达式,用subs调用:Symsfx%定义符号f=1/(1+x^2);%定义符号表达式subs(f,‘x’,代替x的数值或符号)注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。这种函数定义方法的特点是,可以用符号进行替换Symsfxf=1/(1+x^2);subs(f,‘x’,’y^2’)ans=1/(1+(y^2)^2)注:该方法的缺点是,由于使用符号运算内核,运算速度会大大降低。5、字符串+subs:无需M文件,直接定义.直接定义一个字符串,用subs命令调用。例如:f=’1/(1+x^2)’%定义字符串z=subs(f,’x’,2)g=subs(f,’x’,’y^2’)注:优点是,占用内存最少,定义格式方面自由。缺点是,无法对字符进行符号转化。当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).例如:f=’x^2*y’;x=2;y=3;subs(f)ans=12fun1=@(x,y)x^2+y^2-9*x*yfun1(2,3)Matlab软件求解微分方程的解析解和数值解一、实验名称:Matlab软件求解微分方程的解析解和数值解二、实验目的:掌握Matlab软件求解微分方程模型的解析解和数值解的方法三、实验内容1、熟悉Matlab软件求解微分方程解析解的命令dsolve()2、熟悉微分方程数值解的方法:(1)欧拉公式(2)龙格-库塔法四、实验步骤1、Matlab软件求解微分方程解析解的命令dsolve()(1)求通解的命令格式:dsolve(‘微分方程’,自变量’)注:微分方程在输入时,一阶导数y’应输入Dy,y”应输入D2y等,D应大写)例1求解一阶微分方程的通解输入命令:y=dsolve('Dy+2*x*y=x*exp(-x^2)','x')例2求解二阶微分方程的通解输入命令:dsolve('D2y+3*Dy+exp(x)=0','x')(2)求特解的命令格式:dsolve(‘微分方程’,’初始条件’,‘自变量’)例3求解微分方程的特解在初始条件下的特解.输入命令:y=dsolve('(x^2-1)*Dy+2*x*y-cos(x)=0','y(0)=1','x')画出图形:ezplot(y)()微分方程组令格式:dsolve(‘微分方程1,微分方程组2’)-6-4-20246-1-0.500.511.5x(sin(x)-1)/(x2-1)例4求方程组的通解输入格式:[x,y]=dsolve('Dx=3*x+4*y,Dy=5*x-7*y')通解,不能画出图形。例5求微分方程组的特解输入格式:[x,y]=dsolve('Dx=3*x+4*y,Dy=5*x-7*y','x(0)=0,y(0)=1')画出0=t=0.5的图形:ezplot(x,y,[00.5])2、Matlab软件求解微分方程的数值解(1)欧拉方法例6欧拉方法求解方程的数值解00.511.522.5300.511.52xyx=-(exp(-t(351/2+2))((351/2)/2-(51/2(351/2+5))/6+5exp(t(351/2-2))exp(t(351/2+2))(51/2/6-1/2)+351/2exp(t(351/2-2))exp(t(351/2+2))(51/2/6-1/2)+5/2))/5,y=exp(-t(351/2+2))((51/2(351/2+5))/30-exp(t(351/2-2))exp(t(351/2+2))(51/2/6-1/2))解:由欧拉公式得具体迭代公式计算各yn可如下程序进行计算a=0;b=1;h=0.1;x=0:0.1:1;n=(b-a)/hy(1)=1;fork=1:ny(k+1)=y(k)+0.1*(y(k)-2*x(k)/y(k));endplot(x,y)得到函数图象:而解析解为:y=dsolve('Dy=y-2*x/y','y(0)=1','x')y=(2*x+1)^(1/2)图形为:ezplot(y)00.10.20.30.40.50.60.70.80.9111.11.21.31.41.51.61.71.8指定范围[01]:ezplot(y,[01])合并图形:012345600.511.522.533.5x(2x+1)1/200.10.20.30.40.50.60.70.80.9111.11.21.31.41.51.61.7x(2x+1)1/2(2)龙格-库塔法例7、求解下列方程的数值解解:先定一个说明方程组的函数M-文件:functiony=ill(t,x)a=1;b=0.3;y=[a*x(1)*x(2)-b*x(1),-a*x(1)*x(2)]’;程序命令:ts=0:50;x0=[0.02,0.98];[t,x]=ode45(@ill,ts,x0);[t,x]plot(t,x(:,1),t,x(:,2));grid,pauseplot(x(:,2),x(:,1));grid例800.10.20.30.40.50.60.70.80.9111.11.21.31.41.51.61.7x(2x+1)1/2解:令y1=x,y2=y1’微分方程变为一阶微分方程组:(1)建立m-文件vdp1000.m如下:functiondy=vdp1000(t,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=1000*(1-y(1)^2)*y(2)-y(1);(2)取t0=0,tf=3000,输入命令:[T,Y]=ode15s('vdp1000',[03000],[20]);plot(T,Y(:,1),'-')注:ode15s()是求微分方程数值解的一个命令。(3)结果如图五、实验题目1.求微分方程组在初始条件下的特解,并画出解函数的图形.2.用Euler折线法求解微分方程初值问题的数值解(步长h取0.1),求解范围为区间[0,2].3.用四阶Runge-Kutta法求解微分方程初值问题的数值解(步长h取0.1),求解范围为区间[0,3].4、当病人采取服口服药或肌肉注射来治疗疾病时,药物虽然瞬间进入了体内,但它一般都集中与身体的某一部位,靠其表面与肌体接触而逐步被吸收。假定身体系统是一个单房室系统,设t时刻体内药物的总量为x(t),则x(t)满足:其中k1是药物量被吸收到血液中的速率系数,k是血液中向体外排除的速率系数,D是刚开始胃中或肌肉中的药物总量。试用欧拉公式求上述微分方程数值解,并画出图。(设k1=0.6,k=0.2,D=200)5.建立铅球掷远模型.不考虑阻力,设铅球初速度为v,出手高度为h,出手角度为(与地面夹角),建立投掷距离与v,h,的关系式,并求v,h一定的条件下求最佳出手角度.

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功