您好,欢迎访问三七文档
实验2方程及方程组的求解课程名称数学实验实验名称方程及方程的求解实验编号2学期2011秋季学期实验日期3-4周学生姓名专业数理基础科学学号20091050080一、实验目的掌握方程和方程组的迭代算法;熟悉MATLAB软件编程环境;掌握MATLAB编程语句(特别是循环、条件、控制等语句);了解迭代过程的图形表示,分形与混沌学科等,学会参数的灵敏度分析。通过该实验的学习,加深理解方程求解或方程组求解的各种数值解法(简单迭代法、二分法、牛顿法、割线法等)。二、实验内容1.方程求解和方程组的各种数值解法练习2.直接使用MATLAB命令对方程和方程组进行求解练习3.针对实际问题,试建立数学模型,并求解。三、实验步骤1.开启软件平台——MATLAB,开启MATLAB编辑窗口;2.根据各种数值解法步骤编写M文件3.保存文件并运行;4.观察运行结果(数值或图形);5.根据观察到的结果写出实验报告,并浅谈学习心得体会。四、实验要求与任务根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→数学模型→算法与编程→计算结果→分析、检验和结论→心得体会)1.用图形放大法求解方程xsin(x)=1.并观察该方程有多少个根。解:方程变形为:y=sin(x)=1/x.matlab程序如下:symsxy;x=-50:0.5:50;y=sin(x);plot(x,y);gridon;holdon,y=1./x;plot(x,y);gridon;xlabel('x');ylabel('y');title('sin(x)and1./x');holdoff放大图像后如下图所示方程有两个根12.6494和-12.6494.12.649212.649312.649312.649412.649412.649512.649512.64960.07910.07910.07910.07910.07910.07910.0791xysin(x)and1./x如下图所示方程有无数个根。-50-40-30-20-1001020304050-2-1.5-1-0.500.511.52xysin(x)and1./x2.将方程x5+5x3-2x+1=0改写成各种等价的形式进行迭代,观察迭代是否收敛,并给出解释。解:第一步:画图。symsxy;x=-3:0.1:3;y=x.^5+5*x.^3-2*x+1;plot(x,y);gridon-3-2-10123-400-300-200-1000100200300400如图可知方程的解在(-1,1)之间。第二步:(1)构造迭代函数。)(xx;53512xxx)(1xx1535xxxx)(2xx32121555xxxx)(3xx32521xxxx)(4xx(2)经过加速迭代收敛法变形后得:534241012515xxxxx)(1xx215511042435xxxxx)(2xx62352435322xxxxxxx)(3xx25328561xxxxxx)(4xx第三步:用matlab编程。取初值x0=-0.75;x=-0.75;y=-0.75;z=-0.75;w=-0.75;fork=1:30x=(-4*x^5-10*x^3+1)/(2-5*x^4-15*x^2);y=(4*y^5+10*y^3-1)/(5*y^4+15*y^2-2);z=(2*z^6+4*z^2-3*z)/(5*z^3+3*z^5+2*z-2);w=(8*w^2-2*w)/(w^5+5*w^3+6*w-1);x,y,z,w;endx=-0.7691y=-0.7691z=-0.7682x=-0.7685y=-0.7685z=-0.7685x=-0.7685y=-0.7685z=-0.7685由程序结果可以看出前三个迭代式收敛,第四个不收敛,原因是“迭代函数在解的附近的导数的绝对值尽量小”这一条件不满足。故方程的解为-0.7685.3.求解下列方程组121212222123121312312(1)25712(2)31102400xxxxexxexxxxxxxxxxx用牛顿迭代法和直接使用MATLAB命令:solve()或fsolve()对方程组求解。解:1.牛顿迭代法:(1)%NewtonComplexRoot.mfunction[r,k]=mulNewton(x0,Error)clear;Error=1e-4;x0=[0,0];r=x0-myf(x0)/(dmyf(x0));fork=1:30x0=r;r=x0-myf(x0)/(dmyf(x0));if(abs(r-x0)=Error)break;endend%funNewton.comfunctionf=myf(x)x1=x(1);x2=x(2);f1=2*x1-x2-exp(-x1);f2=-x1+2*x2-exp(-x2);f=[f1f2];functiondf=dmyf(x)x1=x(1);x2=x(2);df=[2+exp(-x1),-1;-1,2+exp(-x2)];[r,k]=mulNewton([0,0])r=0.56710.5671k=3(2)%NewtoncomplexRoot.mfunction[r,k]=mulNewton(x0,Error)clear;Error=1.0e-4;x0=[1,1,1];r=x0-myf(x0)/(dmyf(x0));fork=1:30x0=r;r=x0-myf(x0)/(dmyf(x0));if(abs(r-x0)=Error)break;endend%funNewton.comfunctionf=myf(x)x1=x(1);x2=x(2);x3=x(3);f1=x1^2-5*x2^2+7*x3^2+12;f2=3*x1*x2+x1*x3-11*x1;f3=2*x2*x3+40*x1;f=[f1f2f3];functiondf=dmyf(x)x1=x(1);x2=x(2);x3=x(3);df=[2*x1,-10*x2,14*x3;3*x2+x3-11,3*x1,x1;40,2*x3,2*x2];[r,k]=mulNewton([1,5,-4]),r=15-4,k=1;[r,k]=mulNewton([0,2*sqrt(15)/5,0]),r=01.5492-0.0000,k=1;[r,k]=mulNewton([0,-2*sqrt(15)/5,0],r=0.0000-1.54920.0000,k=1;直接使用MATLAB命令:solve()或fsolve()的方法:(1)symsx1x2;[x1,x2]=solve('2*x1-x2-exp(-x1)=0','-x1+2*x2-exp(-x2)=0','x1','x2');x1,x2x1=0.56714329040978387299996866221036x2=0.56714329040978387299996866221036(2)s1='x1^2-5*x2^2+7*x3^2=-12';s2='3*x1*x2+x1*x3-11*x1=0';s3='2*x2*x3+40*x1';[abc]=solve(s1,s2,s3);a=vpa(a,5),b=vpa(b,5),c=vpa(c,5)a=1.00000-0.31447-32.703*i-387.0132.703*i-387.01b=5.01.5492-1.5492002.957950.807*i-0.31229-50.807*i-0.31229c=-4.0001.3093*i-1.3093*i2.126311.937-152.42*i152.42*i+11.9374.对以下函数进行迭代,分析迭代产生的序列的收敛性。axxfxaxfaxaxf42)(.3sin)(.2)()(.1对参数a进行讨论与观察,会得到什么结论?解:第一小题:c=[0.5,1.5,2.0,3.0];x=0.1;n=30;forj=1:4C=c(j);fori=1:nx(i+1)=C-(x(i)-sqrt(C))^2;endxx(:,j)=x';endk=(0:30)';subplot(2,2,1),plot(k,xx(:,1)),subplot(2,2,2),plot(k,xx(:,2)),subplot(2,2,3),plot(k,xx(:,3)),subplot(2,2,4),plot(k,xx(:,4)),01020300.10.20.30.40.5010203000.511.5010203000.511.5201020300123如上图所示,当a取不同值时的图像。下面编程求根。iter=0;a=0.5;x0=0.1;x1=a-(x0-sqrt(a))^2;whileabs(x1-x0)0.00001x0=x1;x1=a-(x0-sqrt(a))^2,iter=iter+1,pause,end迭代结果x1=0.4142iter=22,迭代收敛,如左上方图示。同理,a=1.5时,迭代结果x1=1.4495iter=11,迭代收敛,如右上方图示。a=2.0时,迭代结果x1=1.8284iter=59,迭代收敛,如左下方图示。a=3.0时,迭代结果x1在1.4153,2.8997,1.6367,2.9909这四个值之间循环,故迭代不收敛,如右下方图示。第二、三小题方法如同上题,现仅给出迭代结果。第二小题:取x0=0.5.当a=-0.2时,迭代结果x1=1.2254e-006iter=7,迭代收敛。当a=1.8时,迭代结果x1=1.7659iter=9,迭代收敛。当a=2.5时,迭代结果x1在2.4948,1.5065这两个值间循环,出现分叉现象,故迭代不收敛。当a=4时,迭代结果不收敛。第三小题:取x0=1.0.当a=0.3时,迭代结果x1=-0.2927iter=6,迭代收敛。当a=0.6时,迭代结果x=-0.5244iter=19,迭代收敛。当a=1.4时,迭代结果x1=Infiter=8,迭代不收敛。当a=2.3时,迭代结果x1=Infiter=8,迭代不收敛。五、实验总结这次试验较为复杂,涉及到图形放大法求根,牛顿迭代法求根等。主要对象为非线性方程或方程组或带参数的方程的求解和收敛性的判断。通过编程将理论付诸实践,对自己的处理问题的能力有较大提高。第一题:将原方程变形为y=sin(x)=1/x,可以画出两条函数曲线y=sin(x)与y=1/x,两条曲线的交点的横坐标x就是原方程的根,再通过图形放大法确定根的范围。第二题:首先画图确定方程根的大致范围,再运用加速收敛公式写出原方程的各种等价的形式,最后通过编程得出方程收敛的根。第三题:用牛顿法迭代法求方程组的根时,先编写M文件。在写程序的过程中一定要注意方程的根是用数组表示的,则必须用xi=x(i)来表示。然后赋初值进行求解。在直接使用solve()对方程求解时要注意正确调用其格式。第四题:对a取定四个值并赋予x0初值,用subplot画出不同a值时函数的图象,再通过编程进一步分析函数的收敛情况。即取定初值,任给出a值,可以得出a在何种取值区间内迭代是收敛的。
本文标题:数学实验3
链接地址:https://www.777doc.com/doc-4571133 .html