实验8 非线形方程和常微分方程的解法
- 格式:doc
- 大小:141.00 KB
- 文档页数:12
实验8 非线性方程和常微分方程的解法一、实验目的求解非线性方程和常微分方程.二、实验内容与要求1. 非线性方程的数值解(1)最小二乘法格式:fsolve(‘fun’, x0)%求方程fun=0在估计值x0附近的近似解.【例】求方程x-e-x=0的解.>>x1=fsolve(fc,0)x1=0.5671f(x)=5x2sin x-e-x图像问题:求解方程5x2sin x-e-x=0,观察知有多解,如何求之?先用命令fplot(‘[5*x^2*sin(x)-exp(-x),0]’,[0,10]))作图 1.13,注意,[5*x^2*sin(x)-exp(-x),0]中的“[…,0]”是作y=0直线,即x轴. 方程在[0,10]区间从图中可看出有4个解,分别在0,3,6,9附近,所以用命令:>> fun=inline('5*x.^2.*sin(x)-exp(-x)');>> fsolve(fun,[0,3,6,9],1e-6)基于MA TLAB的数学实验48得出结果:ans =0.5018 3.1407 6.2832 9.4248【例】求解方程组x-0.7sin x-0.2cos y=0y-0.7cos x+0.2sin y=0先编制函数文件fu.m:function y=fu(x)y(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2));y(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2));y=[y(1), y(2)];在命令窗口调用fu运算:>> x1=fsolve('fu',[0.5,0.5])x1=0.5265 0.5079(2)零点法格式:fzero(‘fun’, x0)%求函数fun在x0附近的零点.说明:估计值x0若为标量时,则在x0附近查找零点,x0=[x1, x2]向量时,则首先要求函数值fun(x1) fun(x2)<0,然后将严格在[x1, x2]区间内寻找零点,若找不到,系统将给出提示.第一章MA TLAB软件操作实验49 【例1.74】求函数f (x)=sin x2/x+x e x-4的零点.>>fn=inline('sin(x^2)/x+x*exp(x)-4');>>x=fzero(fn,[1,2])%这里的fn不要加单引号x =1.0748注意:1.方程解的估计值x0可用fplot作图看出;2.用function建立函数文件fn,求解调用时fn两边要加单引号,而用inline时fn两边不要加单引号;3.这两种方法也可解线性方程组.2. 代数方程的符号解格式:g = solve(eq)%求解方程eq=0,输入参量eq可是符号表达式或字符串表达式.g = solve(eq,var) %对eq中指定的变量var求解方程eq(var)=0.g = solve(eq1,eq2,…,eqn) %求解方程组eq1=0,eq2=0,…,eqn=0.【例】>>solve('a*x^2 + b*x + c')>>solve('a*x^2 + b*x + c','b')>>[x,y]=solve('x + y = 1','x - 11*y = 5')>>[a,u,v] = solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a +6')基于MA TLAB的数学实验50计算结果为:ans =[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))][ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]ans =-(a*x^2+c)/xx =4/3y =-1/3a =[ 2][ 2][ 3][ 3]u =[ 1/3+1/3*i*2^(1/2)][ 1/3-1/3*i*2^(1/2)][ 1/4+1/4*i*3^(1/2)]第一章MA TLAB软件操作实验51 [ 1/4-1/4*i*3^(1/2)]v =[ -2/3+1/3*i*2^(1/2)][ -2/3-1/3*i*2^(1/2)][ -3/4+1/4*i*3^(1/2)][ -3/4-1/4*i*3^(1/2)]注意:对于单个的方程或方程组,若不存在符号解,则返回方程(组)的数值解.问题:用符号法求解问题1.28中的方程,结果不对,所以要验根,多用几种方法相互验证. 用符号法解方程3x2-e x=0,解的表达式不易懂,怎么办?>>x=solve('3*x^2-exp(x)')x =[ -2*lambertw(-1/6*3^(1/2))][ -2*lambertw(-1,-1/6*3^(1/2))][ -2*lambertw(1/6*3^(1/2))]再用命令:>>vpa(x,3)ans =[ .912][ 3.72]基于MA TLAB的数学实验52[ -.460]3. 常微分方程数值解法(ordinary differential equation)格式:[T,Y ] = solver(odefun,tspan,y0) %在区间tspan=[t0,tf]上,用初始条件y0求解显式微分方程y'=f(t,y).说明:1.solver为命令ode45,ode23,… 之一.2.odefun为显式常微分方程y'=f(t,y).3.tspan积分区间(即求解区间)的向量tspan=[t0,t f ]. 要获得问题在其他指定时间点t0,t1,t2,…上的解,则令tspan=[t0,t1,t2,…,t f ](要求是单调的).4.y0包含初始条件的向量.求解具体ODE的基本过程如下所示.1. 用微分方程与初始条件描述所给问题.F(y,y',y",…,y(n),t) = 0y(0)=y0,y'(0)=y1,…,y(n-1)(0)=y n-1而y=[y;y(1);y(2);…;y(m-1)],n与m可以不等.2.运用数学中的变量替换:y n=y(n-1),y n-1=y(n-2),…,y2=y',y1=y,把高阶(2阶及以上)的方程(组)写成一阶微分方程组:第一章 MA TLAB 软件操作实验 531122(,)(,)(,)nn f t Y y f t Y y Y f t Y y '⎡⎤⎡⎤⎢⎥⎢⎥'⎢⎥⎢⎥⎢⎥'⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥'⎢⎥⎣⎦⎢⎥⎣⎦,102101(0)(0)(0)n n y y y y Y y y -⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 3. 根据1与2的结果,编写能计算导数的M 函数文件odefile.4. 将文件odefile 与初始条件传递给求解器Solver 中的一个,运行后就可得到解列向量y因为没有一种算法可以有效地解决所有的ODE 问题,为此,MATLAB 提供了多种求解器Solver ,对于不同的ODE 问题,采用不同的Solver ,具体如表1.11所示.表1.11 不同求解器Solver 的特点基于MA TLAB的数学实验54【例】求解微分方程y'=-2y+2x2+2x,0≤x≤0.5,y(0)=1.>> fun=inline('-2*y+2*x^2+2*x','x','y');>> [x,y]=ode23(fun,[0,0.5],1);>> x'ans =Columns 1 through 70 0.0400 0.0900 0.1400 0.1900 0.2400 0.2900Columns 8 through 120.3400 0.3900 0.4400 0.4900 0.5000>> y'ans =Columns 1 through 71.0000 0.9247 0.8434 0.7754 0.7199 0.6764 0.6440Columns 8 through 120.6222 0.6105 0.6084 0.6154 0.6179第一章 MA TLAB 软件操作实验 55图形结果如图1.14所示.图1.14 例1.76图形结果 图1.15 例1.77图形结果【例】 求解描述振荡器的经典的Ver der Pol 微分方程222d d (1)0d d y yy y t t μ--+=,y (0)=1,y '(0)=0.分析:令x 1=y ,x 2=d y /d t ,μ=7,则:d x 1/d t = x 2d x 2/d t = 7(1-x 1^2)x 2-x 1 编写函数文件vdp.m : function fy = vdp(t,x)fy = [x(2);7*(1-x(1)^2)*x(2)-x(1)]; 再在命令窗口中执行: >>Y0=[1;0];>>[t,x] = ode45(‘v dp ’,[0,40],Y0);10.95 0.90.85 0.8 0.750.70.650.60 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.51510 5 0 -5 -10 -155 10 15 20 25 30 3540基于MA TLAB 的数学实验56 >>y=x(:,1);dy=x(:,2); >>plot(t,y,t,dy) 图形结果如图1.15所示.4. 常微分方程的符号解格式:r = dsolve(‘eq1,eq2,…’,‘cond1,cond2,…’,‘v ’).说明:1.对给定的常微分方程(组)eq 1,eq 2,…中指定的符号自变量v ,与给定的边界条件和初始条件cond 1,cond 2,…求符号解(即解析解)r ; 2.若没有指定变量v ,则缺省变量为t ;在微分方程(组)的表达式eq 中,D y =d y /d x ,D2y =d 2y /d x 2;3.初始和边界条件由字符串表示:y (a )=b ,D y (c )=d ,D2y (e )=f ,等等,分别表示b x y a x ==)(,d x y c x ='=)(,f x y e x ='=)(;4.若边界条件少于方程(组)的阶数,则返回的结果r 中会出现任意常数C 1,C 2. 【例】>>D1 = dsolve('D2y= Dy +exp(x)') >>D2 = dsolve('(Dy)^2 + y^2 = 1','s')>>D3 = dsolve('Dy = a*y', 'y(0) = b') % 带一个初始条件>>D4 = dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')% 带两个初始条件 >>[x,y] = dsolve('Dx = y', 'Dy = -x') % 求解线性微分方程组第一章MA TLAB软件操作实验57 计算结果为:D1 =-exp(x)*t+C1+C2*exp(t)D2 =[ -1][ 1][ sin(s-C1)][ -sin(s-C1)]D3 =b*exp(a*t)D4 =cos(a*t)x =cos(t)*C1+sin(t)*C2y =-sin(t)*C1+cos(t)*C2三、练习和思考①求解方程3x2-e x = 0基于MA TLAB的数学实验58②求解方程3x2-ln x = 10③求解方程5x4-sin2x = 0④求解微分方程y"-y'+2y = 5,y(0)=1,y'(0)=2.⑤求解微分方程的特解,并作出解函数曲线图.y"-2(1-y2) y' + y = 0,0≤x ≤30,y(0) =1,y'(0) = 0。