1、重庆大学数学实验实验报告参考重 庆 大 学学 生 实 验 报 告实验课程名称 数 学 实 验 开课实验室 学 院 年级 专业班 学 生 姓 名 学 号 开 课 时 间 至 学年第 学期总 成 绩教师签名数学与统计 学 院 制开课学院、实验室:数学与统计DS1421 实验时间 : 2010 年 3 月 23 日课程名称数学实验实验项目名 称MATLAB方程求解实验项目类型验证演示综合设计其他指导教师肖剑成 绩实验目的1 复习求解方程及方程组的基本原理和方法;2 掌握迭代算法;3 熟悉MATLAB软件编程环境;掌握MATLAB编程语句(特别是循环、条件、控制等语句);4 通过范例展现求解实际问题的
2、初步建模过程; 通过该实验的学习,复习和归纳方程求解或方程组求解的各种数值解法(简单迭代法、二分法、牛顿法、割线法等),初步了解数学建模过程。这对于学生深入理解数学概念,掌握数学的思维方法,熟悉处理大量的工程计算问题的方法具有十分重要的意义。一、实验内容 1方程求解和方程组的各种数值解法练习 2直接使用MATLAB命令对方程和方程组进行求解练习 3针对实际问题,试建立数学模型,并求解。二、实验过程(一般应包括实验原理或问题分析,算法设计、程序、计算、图表等, 实验结果及分析)基础实验1用图形放大法求解方程 x sin(x) = 1. 并观察该方程有多少个根。程序:x=-50:0.01:50y=
3、x.*sin(x)-1plot(x,y)line(-50,50,0,0)结果:有无穷个根图像放大:x=-8:0.01:-6y=x.*sin(x)-1plot(x,y)line(-8,-6,0,0) 求得一个解为6.44分析:2将方程x5 +5x3- 2x + 1 = 0 改写成各种等价的形式进行迭代,观察迭代是否收敛,并给出解释。迭代函数为,算法设计为:x1=0;x2=(x15+5*x13+1)/2;while abs(x1-x2)10(-5) x1=x2; x2=(x15+5*x13+1)/2;endx1输出结果为:x1 = Inf因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代
4、函数,算法设计为:x1=0; x2=(-4*x15-10*x13+1)/(-5*x14-15*x12+2);while abs(x1-x2)10(-5) x1=x2; x2=(-4*x15-10*x13+1)/(-5*x14-15*x12+2);endx1输出结果为:x1 = -0.7685迭代函数为,算法设计为:x1=1;x2=(2*x1-x15-1)/5)(1/3);while abs(x1-x2)10(-5) x1=x2; x2=(2*x1-x15-1)/5)(1/3);endx1输出结果为:x1 = Inf - Infi因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代函数,
5、算法设计为:x1=0;x2=(0.4*x1-0.2*x15-0.2)(1/3)-1/15*(0.4*x1-0.2*x15-0.2)(-2/3)*(2*x1-5*x15)/(1-(1/15*(0.4*x1-0.2*x15-0.2)(-2/3)*(2-5*x14);while abs(x1-x2)10(-5) x1=x2;x2=(0.4*x1-0.2*x15-0.2)(1/3)-1/15*(0.4*x1-0.2*x15-0.2)(-2/3)*(2*x1-5*x15)/(1-(1/15*(0.4*x1-0.2*x15-0.2)(-2/3)*(2-5*x14);endx1输出结果为:x1 = 0.40
6、04 + 0.2860i迭代函数为,算法设计为:x1=0;x2=(2*x1-5*x13-1)(1/5);for k=1:100 x1=x2; x2=(2*x1-5*x13-1)(1/5);endx1输出结果为:x1 = 2.0162 - 0.8223i若用加速迭代函数,算法设计为:x1=0;x2=(2*x1-5*x13-1)(1/5)-1/5*(2*x1-5*x13-1)(-4/5)*(2*x1-15*x13)/(1-1/5*(2*x1-5*x13-1)(-4/5)*(2-15*x12);for k=1:100 x1=x2; x2=(2*x1-5*x13-1)(1/5)-1/5*(2*x1-5
7、*x13-1)(-4/5)*(2*x1-15*x13)/(1-1/5*(2*x1-5*x13-1)(-4/5)*(2-15*x12);endx1输出结果为:x1 = -0.1483 + 0.7585i迭代函数为,算法设计为:x1=1;x2=0.2*(2/x1-1/x12-x13);for k=1:100 x1=x2; x2=0.2*(2/x1-1/x12-x13);endx1输出结果为x1 = NaN因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代函数,算法设计为:x1=1;x2=(2/x1-1/x12-x13)-x*(-2/x12+2/x13-3*x12)/(5-(-2/x12+
8、2/x13-3*x12);for k=1:100 x1=x2; x2=(2/x1-1/x12-x13)-x*(-2/x12+2/x13-3*x12)/(5-(-2/x12+2/x13-3*x12);endx1输出结果为:x1 = 3.4802308631248458912724395623836迭代函数为,算法设计为:x1=1;x2=2/x13-5/x1-1/x14;for k=1:100 x1=x2; x2=2/x13-5/x1-1/x14;endx1输出结果为:x1= 1.8933若用加速迭代函数,算法设计为:x1=1;x2=(2/x13-5/x1-1/x14)-x*(-6/x4+5/x2
9、+4/x5)/(1-(-6/x4+5/x2+4/x5);for k=1:100 x1=x2; x2=(2/x13-5/x1-1/x14)-x*(-6/x4+5/x2+4/x5)/(1-(-6/x4+5/x2+4/x5);endx1输出结果为:x1 = 1.79680594176126617832557567061133求解下列方程组(1) 用solve()对方程组求解程序:x,y=solve(2*x-y-exp(-x),-x+2*y-exp(-y) 结果:x = .56714329040978387299996866221036 y = .567143290409783872999968662
10、21036 用fsolve()对方程组求解:建立M文件,程序:function f=qhs(x)f(1)=2*x(1)-x(2)-exp(-x(1);f(2)=-x(1)+2*x(2)-exp(-x(2); 输入fsolve(qhs,1,1) 结果: ans =0.5671 0.5671(2) 用solve()对方程组求解程序:x1,x2,x3=solve(x12-5*x22+7*x32+12,3*x1*x2+x1*x3-11*x1,2*x2*x3+40*x1)double(x1)double(x2)double(x3)结果:ans = 1.0e+02 * 0.0100 0 0 -0.0031
11、 0 0 -3.8701 + 0.3270i -3.8701 - 0.3270ians = 5.0000 1.5492 -1.5492 2.9579 0 0 -0.3123 -50.8065i -0.3123 +50.8065ians = 1.0e+02 * -0.0400 0 0 0.0213 0 + 0.0131i 0 - 0.0131i 0.1194 + 1.5242i 0.1194 - 1.5242i 用fsolve()对方程组求解:程序:function f=qhst(x)f(1)=x(1)2-5*x(2)2+7*x(3)2+12;f(2)=3*x(1)*x(2)+x(1)*x(3)
12、-11*x(1);f(3)=2*x(2)*x(3)+40*x(1); 外部调用fsolve(qhst,1,1)结果:Optimization terminated: first-order optimality is less than options.TolFun.y =0.0000 1.5492 0.0000直接使用MATLAB命令:solve()和fsolve()对方程组求解。4.编写用二分法求方程根的函数M文件。以以解方程x2-x-2=0为例function f=fc(x)f=x2-*x-2;function f=qiugen(x)m=x(1);n=x(2);while (n-m)10
13、(-5) if fc(m)=0 f=m; break; else if fc(n)=0 f=n; break; else if fc(m+n)/2)=0 f=(m+n)/2; break; else if fc(m)*fc(m+n)/2) x=0.5,2;root=qiugen(x)输出结果root =1.0000应用实验一、实验内容 炮弹发射角的问题炮弹发射视为斜抛运动,已知初始速度为200 m/s,问要击中水平距离360m、垂直距离160m 的目标,当忽略空气阻力时,发射角应多大?此时炮弹的运行轨迹如何? 进一步思考:如果要考虑水平方向的阻力,且设阻力与(水平方向)速度成正比,系数为 0.1(1/s),结果又如何?此时炮弹的运行轨迹如何? 二、问题分析总结与体会通过该实验的学习,能灵活应用MATLAB软件解决一些简单问题,能借助MATLAB软件的绘图功能,对函数的特性进行探讨,联想,猜想,发现进而证实其中的规律。教师签名年 月 日