您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 会议纪要 > 6matlab在求解方程中的
在求解方程中的应用许海洋6.1代数方程6.2微分方程6.3非线性方程求解求多项式零点6.4常微分方程数值解法6.1代数方程solve(f,t)功能:对变量t解方程f=0,t缺省时默认为x或最接近字母x的符号变量。例:求解一元二次方程f=a*x^2+b*x+c的实根symsabcxf=a*x^2+b*x+c;solve(f,x)ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]1221xyzxyzxyzg1='x+y+z-1';g2='x-y+z-2';g3='2*x-y-z-1';[x,y,z]=solve(g1,g2,g3)x=2/3y=-1/2z=5/6求解方程组6.2微分方程dsolve(‘eq’,’s1’,’s2’,…,’x’)其中eq为方程;s1,s2,……为初始条件,缺省时给出含任意常数c1,c2,……的通解;x为自变量,缺省时默认为t。例:求微分方程的通解dsolve('Dy=1+y^2')ans=tan(t+c1)y的一阶导数——Dy,y的二阶导数——D2y微分方程符号解y=dsolve('Dy=1/(1+x^2)-2*y^2','y(0)=0','x')y=2*x/(2*x^2+2)22211yxy符号解:pretty(y)y(x)=x/(1+x2)ezplot(y,-6,6)symsPtP=dsolve('DP=0.02*P*(1-P/500)','P(0)=76')P=500/(1+106/19*exp(-1/50*t))ezplot(P,0,200)pretty(P)例P’=0.02P(1–P/500)初始条件:P(0)=76050100150200100200300400t500/(1+106/19exp(-1/50t))150500106119te求一元函数零点fzero(fun,x0)X=fzero(fun,x0)寻找fun在x0附近的零点6.3非线性方程求解已知函数f(x),求x使f(x)=0xyxytanxy)21(kxkk(k=1,2,·······)例x=tanxf=inline('x-tan(x)')x=fzero(f,3.5)x=4.4934求多项式零点:roots(p)例1求方程x3–4x+5=0的解P=[10-45];roots(P)ans=-2.45671.2283+0.7256i1.2283-0.7256i例2求x3–8x2+6x–30=0的解P=[1-86-30];r=roots(P)r=7.72600.1370+1.9658i0.1370-1.9658i6.4常微分方程数值解法求解微分方程初值问题在区间[t0,tf]的数值解的函数为[t,x]=ode23(‘fun’,[t0,tf],x0,’选项’)----2/3阶RKF(Runge-Kutta-Felhberg)法[t,x]=ode45(‘fun’,[t0,tf],x0,’选项’)----4/5阶RKF(Runge-Kutta-Felhberg)法其中函数fun的编写格式如下:functionxdot=fun(t,x)例1求解描述振荡器的经典的VerderPol微分方程01dtdy)y1(dtyd222y(0)=1,y’(0)=0令x1=y,x2=dy/dx,则dx1/dt=x2dx2/dt=μ(1-x2)-x1编写函数文件verderpol.m:functionxprime=verderpol(t,x)globalMUxprime=[x(2);MU*(1-x(1)^2)*x(2)-x(1)];再在命令窗口中执行:globalMUMU=7;Y0=[1;0][t,x]=ode45('verderpol',0,40,Y0);x1=x(:,1);x2=x(:,2);plot(t,x1,t,x2)图形结果例2食饵-捕食者模型其中x(t),y(t)分别表示食饵和捕食者t时刻的数量。求r=1,d=0.5,a=0.1,b=0.02,x0=25,y0=2时的数值解,并画出x(t),y(t)的图形以及相图(x,y)。functionxdot=shier(t,x)r=1;d=0.5;a=0.1;b=0.02;xdot=diag([r-a*x(2),-d+b*x(1)])*x;0)0(,0)0()(',)('yyxxbxydytyaxyrxtxs_b.mts=0:0.1:15;x0=[25,2];[t,x]=ode45('shier',ts,x0);[t,x]plot(t,x),grid,gtext('x1(t)'),gtext('x2(t)'),plot(x(:,1),x(:,2)),grid,xlabel('x1'),ylabel('x2')马尔萨斯(Malthus)人口模型某时刻人口数为y0,在以后某一时间t人口数y的变化率正比于y0)0(0yytryyy(t)=y0ertMATLAB符号求解方法y=dsolve('Dy=r*y','t')y=C1*exp(r*t)ThomasMalthus(1766-1834)令r=a,y0=exp(b)y(t)=exp(at+b)a=?,b=?人口数据拟合实验生物学家研究发现,战争期间捕鱼量减少,食肉鱼总数会急增,数学家将鱼分成捕食者和被捕食者,分别以y2(t),y1(t)表示它们在时刻t的总数。假定被捕食者(食用鱼)有充分的食物。捕食者和被捕食者模型2122211102.001.0yyydtdyyyydtdy(0≤t≤15)y1(0)=20,y2(0)=2021221102.001.0),(yyyyyyytf211202.010.01yyyyt0=0;tf=15;y0=[2020];[t,y]=ode23('lotka',[t0,tf],y0);plot(t,y(:,1),t,y(:,2),'r')MATLAB求解:(1)定义函数;(2)调用ode23functionyp=lotka(t,y)%predator-preymodel.yp=diag([1-.01*y(2),-1+.02*y(1)])*y;函数文件,文件名:lotka.m——捕食者y2——被捕食者y1zyxydtdzzydtdyyzxdtdx)(洛伦兹模型与“蝴蝶效应”Y-X平面t∈[0,80]x(0)=0,y(0)=0,z(0)=0.01=8/3=10=28y0=[0;0;0.01];[x,y]=ode23('flo',[0,80],y0);plot(y(:,2),y(:,1))functionz=flo(t,y)A=[-8/30y(2);0-1010;-y(2)28-1];z=A*y;
本文标题:6matlab在求解方程中的
链接地址:https://www.777doc.com/doc-2930969 .html