实验四 方程求根Matlab实验报告
- 格式:doc
- 大小:352.50 KB
- 文档页数:5
Matlab数值实验求代数方程的近似根(解)教程一、问题背景和实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景和实验目的求代数方程的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当是一次多项式时,称为线性方程,否则称之为非线性方程.当是非线性方程时,由于的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间,或给出某根的近似值.在实际问题抽象出的数学模型中,可以根据物理背景确定;也可根据的草图等方法确定,还可用对分法、迭代法以及牛顿切线法大致确定根的分布情况.通过本实验希望你能:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.二、相关函数(命令)及简介1.abs( ):求绝对值函数.2.diff(f):对独立变量求微分,f 为符号表达式.diff(f, 'a'):对变量a求微分,f 为符号表达式.diff(f, 'a', n):对变量 a 求 n 次微分,f 为符号表达式.例如:syms x tdiff(sin(x^2)*t^6, 't', 6)ans=720*sin(x^2)3.roots([c(1), c(2), …, c(n+1)]):求解多项式的所有根.例如:求解:.p = [1 -6 -72 -27];r = roots(p)r =12.1229-5.7345-0.38844.solve('表达式'):求表达式的解.solve('2*sin(x)=1')ans =1/6*pi5.linsolve(A, b):求线性方程组 A*x=b 的解.例如:A= [9 0; -1 8]; b=[1; 2];linsolve(A, b)ans=[ 1/9][19/72]6.fzero(fun, x0):在x0附近求fun 的解.其中fun为一个定义的函数,用“@函数名”方式进行调用.例如:fzero(@sin, 3)ans=3.14167.subs(f, 'x ', a):将 a 的值赋给符号表达式 f 中的 x,并计算出值.例如:subs('x^2 ', 'x ', 2)ans = 4三、实验内容首先,我们介绍几种与求根有关的方法:1.对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设在上连续,,即,或,.则根据连续函数的介值定理,在内至少存在一点,使.下面的方法可以求出该根:(1) 令,计算;(2) 若,则是的根,停止计算,输出结果.若,则令,,若,则令,;.……,有、以及相应的.(3) 若 (为预先给定的精度要求),退出计算,输出结果;反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列,在中含有方程的根.当区间长很小时,取其中点为根的近似值,显然有以上公式可用于估计对分次数.分析以上过程不难知道,对分法的收敛速度与公比为的等比级数相同.由于,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值.2. 迭代法1) 迭代法的基本思想:由方程构造一个等价方程从某个近似根出发,令,可得序列,这种方法称为迭代法.若收敛,即,只要连续,有即可知,的极限是的根,也就是的根.当然,若发散,迭代法就失败.以下给出迭代过程收敛的一些判别方法:定义:如果根的某个邻域中,使对任意的,迭代过程,收敛,则称迭代过程在附近局部收敛.定理1:设,在的某个邻域内连续,并且,,则对任何,由迭代决定的序列收敛于.定理2:条件同定理 1,则定理3:已知方程,且(1) 对任意的,有.(2) 对任意的,有,则对任意的,迭代生成的序列收敛于的根,且.以上给出的收敛定理中的条件要严格验证都较困难,实用时常用以下不严格的标准:当根区间较小,且对某一,明显小于1时,则迭代收敛 (参见附录3).2) 迭代法的加速:a) 松弛法:若与同是的近似值,则是两个近似值的加权平均,其中称为权重,现通过确定看能否得到加速.迭代方程是:其中,令,试确定:当时,有,即当,时,可望获得较好的加速效果,于是有松弛法:,松弛法的加速效果是明显的 (见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken方法:松弛法要先计算,在使用中有时不方便,为此发展出以下的 Altken 公式:,是它的根,是其近似根.设,,因为,用差商近似代替,有,解出,得由此得出公式;;,这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)1) 牛顿法的基本思想:是非线性方程,一般较难解决,多采用线性化方法.记:是一次多项式,用作为的近似方程.的解为记为,一般地,记即为牛顿法公式.2) 牛顿法的收敛速度:对牛顿法,迭代形式为:注意分子上的,所以当时,,牛顿法至少是二阶收敛的,而在重根附近,牛顿法是线性收敛的.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值要求较严,要求相当接近真值.因此,常用其他方法确定初值,再用牛顿法提高精度.4. 求方程根(解)的其它方法(1) solve('x^3-3*x+1=0')(2) roots([1 0 -3 1])(3) fzero('x^3-3*x+1', -2)(4) fzero('x^3-3*x+1', 0.5)(5) fzero('x^3-3*x+1', 1.4)(6) linsolve([1, 2, 3; 4, 5, 6; 7, 8, 0], [1, 2, 3]')体会一下,(2)(5) 用了上述 1 3 中的哪一种方法?以下是本实验中的几个具体的实验,详细的程序清单参见附录.具体实验1:对分法先作图观察方程:的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.输入以下命令,可得的图象:f='x^3-3*x+1';g='0';ezplot(f, [-4, 4]);hold on;ezplot(g, [-4, 4]); %目的是画出直线 y=0,即 x 轴grid on;axis([-4 4 -5 5]);hold off请填写下表:在某区间上求根的近似值的对分法程序参见附录1.具体实验2:普通迭代法采用迭代过程:求方程在 0.5 附近的根,精确到第 4 位小数.构造等价方程:用迭代公式:,用 Matlab 编写的程序参见附录2.请利用上述程序填写下表:分析:将附录2第4行中的分别改为以及,问运行的结果是什么?你能分析得到其中的原因吗?看看下面的“具体实验3”是想向你表达一个什么意思.用 Matlab 编写的程序参见附录3.具体实验3:收敛/发散判断设方程的三个根近似地取,和,这些近似值可以用上面的对分法求得.迭代形式一:收敛 (很可能收敛,下同)不收敛 (很可能不收敛,下同)不收敛迭代形式二:收敛不收敛不收敛迭代形式三:不收敛收敛收敛具体实验4:迭代法的加速1——松弛迭代法,,迭代公式为程序参见附录4.具体实验5:迭代法的加速2——Altken迭代法迭代公式为:,,程序参见附录5.具体实验6:牛顿法用牛顿法计算方程在-2到2之间的三个根.提示:,迭代公式:程序参见附录6 (牛顿法程序).具体实验7:其他方法求下列代数方程(组)的解:(1)命令:solve('x^5-x+1=0')(2)命令:[x, y]=solve('2*x+3*y=0', '4*x^2+3*y=1')(3) 求线性方程组的解,已知,命令:for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'linsolve(m, b)思考:若,或是类似的但阶数更大的稀疏方阵,则应如何得到?四、自己动手1.对分法可以用来求偶重根附近的近似解吗? 为什么?2.对照具体实验2、4、5,你可以得出什么结论?3.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和Altken 迭代法.求解方程在 1.4 附近的根,精确到4位小数,请注意迭代次数的变化.4.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)。
数值计算⽅法⽅程求根数值计算⽅法实验报告实验内容:⽅程求根实验室:专业班级:学号:姓名:2.⽤MATBAB软件,⽤⼆分法求⽅程f(x)=x^3+4*x^2-10=0在区间[1,2]内根的近似值,为使误差不超过10^-5时所需要的⼆分次数。
function bisection_time(tolerance)a=1;b=2;k=0;while(abs(b-a)>tolerance)c=(a+b)/2;fa=a^3+4*a^2-10;fb=b^3+4*b^2-10;fc=c^3+4*c^2-10;if((fa==0)|(fc==0))disp(k);elseif(fa*fc<0)b=c;k=k+1;elseif(fc*fb<0)a=c;k=k+1;elseif(fb==0)disp(k);endendsoluntion=(a+b)/2;disp(soluntion);disp(k);运⾏结果1.36523176.取x0=1.5,⽤⽜顿迭代法求f(x)=x^3+4*x^2-10=0的跟的近似值function new(tolerance)x0=1.5;k=0;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;while(abs(x0-x1)>tolerance)x0=x1;k=k+1;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;enddisp(x1);disp(k);运⾏结果1.3652338.弦割法求⽅程f(x)=x^3-3*x^2-x+9=0在区间[-2,-1]内的⼀个实根近似值Xk,使|f(x) |<=10^-5. function xuange(k)x0=-2;x1=-1;t=0;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);while(abs(x1-x0)>k)x0=x1;x1=x2;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);t=t+1;enddisp(x1);disp(t)运⾏结果-1.52510269.⽤艾特肯算法求⽅程f (x )=x^3+4*x^2+10=0在区间[1,2]内的根的近似值(取X0=1.5,g (x )=410x ,精确到|Xk+1-Xk|<=10^-5,并与第2,3,6题的相应结果进⾏⽐较。
实验目的(1) 利用计算机完成控制系统的根轨迹作图。
(2) 了解控制系统根轨迹作图的一般规律。
(3) 利用根轨迹进行系统分析。
实验步骤(1)运行matlab 。
(2)练习根轨迹的相关函数。
rlocus(sys) rlocus(sys,k) r=rlocus(sys)[r,k]=rlocus(sys) (3)实验内容1)给定如下系统的开环传递函数,作出它们的根轨迹,并完成给定要求。
()()()21++=s s s ks G要求:准确记录根轨迹的起点、终点和根轨迹的条数。
确定根轨迹的分离点与相应的根轨迹增益。
确定临界稳定时根轨迹增益k 。
(1) num=[1];den=conv([1 0],conv([1 1],[1 2])); sys=tf(num,den); rlocus(sys)-1、0终点为无穷远∞。
(2) num=[1];den=conv([1 0],conv([1 1],[1 2])); sys=tf(num,den);rlocus(sys);[kd,pd]=rlocfind(sys)Select a point in the graphics window selected_point =-0.4207 - 0.0000ikd =0.3849pd =-2.1547-0.4247分离点为-0.4207,增益为0.3849(3) num=[1];den=conv([1 0],conv([1 1],[1 2])); sys=tf(num,den); rlocus(sys);[k,p]=rlocfind(sys)Select a point in the graphics window selected_point = 0.0153 - 1.4136i k =6.0566 p =-3.0051 0.0026 + 1.4197i()()()()164112++-+=s s s s s k s G 要求:确定根轨迹与虚轴交点并确定系统稳定的根轨迹增益k 。
matlab求微分方程的解-实验报告四《matlab与数学实验》实验报告实验序号:实验四日期: 2015年 5 月 25 日班级132132002姓名彭婉婷学号 1321320057 实验名称求微分方程的解问题背景描述实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解).实验目的本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍 Euler 折线法.实验原理与数学模型MATLAB7.11.0主要内容(要点)1. 求微分方程0sin2')1(2=-+-xxyyx的通解.2. 求微分方程xeyyy x sin5'2''=+-的通解.3. 求微分方程组⎪⎪⎩⎪⎪⎨⎧=-+=++yxdtdyyxdtdx在初始条件0|,1|====ttyx下的特解,并画出解函数()y f x=的图形.4. 分别用 ode23、ode45 求上述第 3 题中的微分方程初值问题的数值解(近似解),求解区间为[0,2]t∈.利用画图来比较两种求解器之间的差异.5. 用 Euler 折线法求解微分方程初值问题⎪⎩⎪⎨⎧=-=1)0(,12'32yyxyy的数值解(步长h取0.1),求解范围为区间[0,2].选做:6. 用四阶 Runge-Kutta 法求解微分方程初值问题⎩⎨⎧=-=1)0(,cos'yxeyy x的数值解(步长h取0.1),求解范围为区间[0,3].迭代法实验过程记录(含基本步骤、主要程序清单及异常情况记录等)1.求微分方程0sin2')1(2=-+-xxyyx的通解.程序:clearsyms x yy=dsolve('(x^2-1)*Dy+2*x*y=sin(x)','x') 答案:y =-(C2 + cos(x))/(x^2 - 1)2.求微分方程xeyyy x sin5'2''=+-的通解.程序:clearsyms x yy=dsolve('D2y-2*Dy+5*y=exp(x)*sin(x)','x ')simplyify(x/y)weijiao答案:y =(exp(x)*sin(x))/6 - (sin(3*x)*exp(x))/8 + (sin(5*x)*exp(x))/24 + C4*cos(2*x)*exp(x) + sin(2*x)*exp(x)*(cos(x)/4 - cos(3*x)/12 + 1/6) + C5*sin(2*x)*exp(x)3. 求微分方程组⎪⎪⎩⎪⎪⎨⎧=-+=++00y x dt dy y x dt dx在初始条件0|,1|00====t t y x 下的特解,并画出解函数()y f x =的图形.程序:clearsyms x y t[x,y]=dsolve('Dx+x+y=0','Dy+x-y=0','x(0)=1','y(0)=0','t')ezplot(x,y,[0, 1])(t 的取值,t 是与x,y 相关的,如果不给范围,则会默认为一个较大的区间) simplify(x)simplify(y)答案:x =exp(2^(1/2)*t)/2 + 1/(2*exp(2^(1/2)*t)) - (2^(1/2)*exp(2^(1/2)*t))/4 +2^(1/2)/(4*exp(2^(1/2)*t))y =2^(1/2)/(4*exp(2^(1/2)*t)) -(2^(1/2)*exp(2^(1/2)*t))/4图形:4. 分别用 ode23、ode45 求上述第 3 题中的微分方程初值问题的数值解(近似解),求解区间为t .利用画图来比较两种求解器之间的差异.[0,2]先编写函数文件verderpol.m:clearfunction xprime=verderpol(t,x)xprime=[-x(1)-x(2); x(2)-x(1)];再编写命令文件cleary0=[1;0];[t,x] = ode45('verderpol',[0,2],y0);x1=x(:,1);x2=x(:,2);plot(x1,x2,'b-')hold ony0=[1;0];[t,x]=ode23('verderpol',[0,2],y0);x1=x(:,1);x2=x(:,2);plot(x(:,1),x(:,2),'r-');图形:两种求解器之间的差异:ode45大部分场合的首选算法ode23使用于精度较低的情形但在此题中并没有体现出差异。
实验四 方程求根实验一. 实验目的(1)深入理解方程求根的迭代法的设计思想,学会利用校正技术和松弛技术解决某些实际的非线性方程问题,比较这些方法解题的不同之处。
(2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。
二. 实验要求用Matlab 软件实现根的二分搜索、迭代法、Newton 法、快速弦截法和弦截法,并用实例在计算机上计算。
三. 实验内容1. 实验题目(1)早在1225年,古代人曾求解方程020102)(23=-++=x x x x f 并给出了高精度的实根368808107.1*=x ,试用Newton 法和弦截法进行验证,要求精度610-=ε,并绘制方程的图形。
答:A.Newton 法:a .编写文件Newton.m 、func4.m 内容如下所示:b.运行,如下所示A为矩阵,由上面可知,对于初值为5,运行7次即可得到所需的精度,验证结果为古人给出的解释正确的;c.作图,编写下面的文件photo1.m.然后运行即可:注意下面中的x矩阵即为刚才计算出来的x系列,k为迭代的次数:a.编写文件Chord.m内容如下所示:b.运行结果如下所示:由上表可知,在精度为10^-6时有7位有效数字,古人的结果还是正确的c.作图,在上面运行后,即运行newton法时写的photo1.m文件即可出现图像:可以看到图中两条曲线基本重合; (2)取5.00=x ,用迭代法求方程x e x -=的根,然后用Aitken 方法加速,要求精度为结果有4为有效数字。
答:a. 编写文件func7.m 和Aiken.m ,内容如下所示:b .运行:具有四位有效数字 (3)用快速弦截法求解方程01)(=-=x xe x f ,要求精度为610-=ε,取6.05.010==x x ,作为开始值,并绘制1)(-=x xe x f 的图形。
答:对照可知,书本后面的程序已经正确,运行即可:下面为快速弦截法的主程序文件:函数文件如下:运行如下:作图,编写下面的文件:运行该文件就可以y=x*exp(x)-1函数和插值函数的图:可以看到两条直线基本重合在一起了,扩大图片可以看到两条直线是不重合的:2. 设计思想要求针对上述题目,详细分析每种算法的设计思想。
实验四MATLAB数值运算一、实验目的掌握MATLAB 的数值运算及其运算中所用到的函数,掌握结构数组和细胞数组的操作。
二、实验内容:(1) 多项式运算。
(2) 多项式插值和拟合。
(3) 数值微积分。
(4) 结构数组和细胞数组。
三、实验步骤:1. 多项式运算(1) 多项式表示。
在MATLAB 中,多项式表示成向量的形式。
(2) 多项式的加减法相当于向量的加减法,但须注意阶次要相同。
(3) 多项式的乘、除法分别用函数conv 和deconv 实现(4) 多项式求根用函数roots(5) 多项式求值用函数polyval2. 多项式插值和拟合有一组实验数据如附表1-1 所示。
请分别用拟合(二阶至三阶)和插值(线性和三次样条)的方法来估测X=9.5 时Y 的值。
以下是实现一阶拟合的语句。
x=1:10y=[16 32 70 142 260 436 682 1010 1432 1960]p1=polyfit(x,y,1) %一阶拟合y1=polyval(p1,9.5) %计算多项式p1在x=9.5时的值练习:比较二阶三阶和插值(线性和三次样条)的方法估测X=9.5时的Y的值。
一阶拟合结果:y1 = 1.4232e+003二阶拟合结果:y1 = 1.6712e+003三阶拟合结果::y1 = 1.6820e+003线性插值结果:Y1 = 1696三次样条插值结果:Y1 = 16823. 数值微积分(1) 差分使用diff 函数实现。
(2)数值积分使用trapz函数实现使用复合梯形公式计算(3) 可以用因变量和自变量差分的结果相除得到数值微分。
(4) cumsum函数求累计积分,trapz 函数用梯形法求定积分,即曲线的面积。
4. 结构数组与细胞数组(1) 结构数组的创建。
(2) 结构数组的操作。
(3) 细胞数组的创建。
(4) 细胞数组的操作。
1、求多项式“商”及“余”多项式 a=[1 0 1];b=[1 2];c=[1 1];d=[1 0 1 1];h=conv(a,b);i=conv(h,c);[j,k]=deconv(i,d);>> j=poly2sym(j)j =x + 3>> k=poly2sym(k)k =2*x^2 - x – 12、利用 polyval 找出多项式 在[-1,4]间均匀分布的 5个离散点的值。
matlab 实验报告Matlab 实验报告引言:Matlab(Matrix Laboratory)是一种强大的科学计算软件,它为科学家、工程师和研究人员提供了一个强大的计算环境。
本实验报告旨在介绍我对Matlab的实验结果和使用体验,以及对其优点和局限性的思考。
一、Matlab的基本功能和特点Matlab是一种高级编程语言和开发环境,它具有广泛的数学和工程计算功能。
通过Matlab,我可以进行矩阵运算、数值计算、数据可视化、算法开发等一系列操作。
Matlab的语法简洁易懂,可以快速实现复杂的计算任务。
此外,Matlab还提供了大量的工具箱,如信号处理、控制系统、图像处理等,使得各种领域的科学研究和工程应用变得更加便捷。
二、实验结果与应用案例在本次实验中,我选择了一个经典的数值计算问题——求解非线性方程。
通过Matlab的数值计算能力,我可以使用不同的迭代方法来求解方程的根。
在实验中,我使用了牛顿迭代法、二分法和割线法来求解方程。
通过对比这些方法的收敛速度和精度,我得出了不同方法的优缺点。
在实际应用中,Matlab可以广泛应用于信号处理、图像处理、数据分析等领域。
例如,在信号处理中,我可以使用Matlab的信号处理工具箱来进行滤波、频谱分析等操作。
在图像处理中,我可以利用Matlab的图像处理工具箱进行图像增强、边缘检测等操作。
这些应用案例充分展示了Matlab在科学计算和工程应用中的重要性和灵活性。
三、Matlab的优点1. 强大的计算功能:Matlab提供了丰富的数学和工程计算函数,可以高效地进行复杂的计算任务。
2. 简洁的语法:Matlab的语法简洁易懂,使得编程变得更加高效和便捷。
3. 丰富的工具箱:Matlab提供了大量的工具箱,覆盖了各种领域的科学计算和工程应用需求。
4. 可视化能力强:Matlab提供了丰富的绘图函数,可以直观地展示数据和计算结果。
四、Matlab的局限性1. 高昂的价格:Matlab是一款商业软件,其价格较高,对于个人用户而言可能不太容易承受。
数学实验报告实验序号: 日期: 年 月 日班级姓名学号实验名称:求代数方程的近似根 问题背景描述:求代数方程0)(=x f 的根是最常见的数学问题之一,当)(x f 是一次多项式时,称0)(=x f 为线性方程,否则称之为非线性方程.当0)(=x f 是非线性方程时,由于)(x f 的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间],[b a ,或给出某根的近似值0x .实验目的:1. 了解代数方程求根求解的四种方法:对分法、迭代法、牛顿切线法2. 掌握对分法、迭代法、牛顿切线法求方程近似根的基本过程。
实验原理与数学模型:1.对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设)(x f 在],[b a 上连续,0)()(<⋅b f a f ,即 ()0f a >,()0f b <或()0f a <,()0f b >.则根据连续函数的介值定理,在),(b a 内至少存在一点 ξ,使()0f ξ=.下面的方法可以求出该根:(1) 令02a bx +=,计算0()f x ;(2) 若0()0f x =,则0x 是()0f x =的根,停止计算,输出结果0x x =.若 0()()0f a f x ⋅<,则令1a a =,10b x =,若0()()0f a f x ⋅>,则令10a x =,1b b =;1112a b x +=. ……,有k a 、k b 以及相应的2k kk a b x +=. (3) 若()k f x ε≤ (ε为预先给定的精度要求),退出计算,输出结果2k kk a b x +=; 反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列{[,]}k k a b ,在(,)k k a b 中含有方程的根.当区间长k k b a -很小时,取其中点2k kk a b x +=为根的近似值,显然有 1111111()()()2222k k k k k k x b a b a b a ξ--+-≤-=⨯⨯-==-以上公式可用于估计对分次数k .2. 迭代法1) 迭代法的基本思想:由方程()0f x =构造一个等价方程()x x φ=从某个近似根0x 出发,令1()k k x x φ+=, ,2,1,0=k可得序列{}k x ,这种方法称为迭代法.若 {}k x 收敛,即*lim k k x x →∞=,只要()x φ连续,有1lim lim ()(lim )k k k k k k x x x φφ+→∞→∞→∞==即可知,{}k x 的极限*x 是()x x φ=的根,也就是()0f x =的根.当然,若k x 发散,迭代法就失败. 迭代过程1()k k x x φ+=收敛的常用判别标准:当根区间[,]a b 较小,且对某一0[,]x a b ∈,()'x φ明显小于1时,则迭代收敛2) 迭代法的加速:a) 松弛法:若()x φ与k x 同是*x 的近似值,则1(1)()k k k k k x x x ωωφ+=-+是两个近似值的加权平均,其中k ω称为权重,现通过确定k ω看能否得到加速.迭代方程是:()x x ψ←其中()(1)()x x x ψωωφ=-+,令'()1'()0x x ψωωφ=-+=,试确定ω:当'()1x φ≠时,有11'()x ωφ=-,即当11'()k k x ωφ=-,'()11'()k k k x x φωφ--=-时,可望获得较好的加速效果,于是有松弛法:1(1)()k k k k k x x x ωωφ+=-+,11'()k k x ωφ=-b) Altken 方法:**()x x φ=,*x 是它的根,0x 是其近似根. 设10()x x φ=,21()x x φ=,因为****222121[][()()]()()x x x x x x x x 'x x φφφξ=+-=+-=+-, 用差商10211010()()x x x x x x x x φφ--=--近似代替()'φξ,有 **212110()x x x x x x x x -≈+-- , 解出*x ,得**()x x φ=2*212210()2x x x x x x x -≈--+ 由此得出公式(1)()k k x x φ= ; (2)(1)()k k x x φ=;(2)(1)2(2)1(2)(1)()2k k k kk k kx x x xx x x +-==-+, ,2,1,0=k 这就是Altken 公式。
实验报告(五)完成人:L.W.Yohann注:本次实验主要学习了用MATLAB求解开普勒方程和方程求根的问题,了解学习了用fzero命令、二分法、Newton迭代法、一般迭代法求解方程,以及学习了非线性方程组的求解问题,完成后,小组对第90页的上级练习题进行了程序编辑和运行。
1.绘图并观察函数零点的分布.解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');fplot(f,[0,1])grid存盘后运行得2. 利用fzero 命令求解方程.解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');c=fzero(f,[1,2])存盘后运行得c =1.49873. 用二分法求解方程.求解(1)方程x^2-2=0在(0,2)内的近似根;(2)圆x^2+y^2=2与曲线y=e^-x 的两个交点;(3)方程∫t 21+t 2x 0dt =12的近似根. (1)解:在编辑窗口输入:00.10.20.30.40.50.60.70.80.91-1-0.9-0.8-0.7-0.6-0.5-0.4-0.3f=inline('x^2-2');x1=0;x2=2;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendx0=x3存盘后运行得x0 =1.4142(2)解:在编辑窗口输入:f=inline('(x^2)*exp(2*x)+1-2*exp(2*x)');x1=0;x2=2;x5=-2;x6=0;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendwhile abs(x5-x6)>10^(-5)x7=(x5+x6)/2;if f(x7)==0break;elseif f(x5)*f(x7)>0x5=x7;else f(x6)*f(x7)>0;x6=x7;endendx0=x3x4=x7存盘后运行得x0 =1.3922x4 =-0.3203(3)解:在编辑窗口输入:clear;clc;syms t xf1=(t^2)/(1+t^2);f2=int(f1,t,0,x);%¼ÆËã²»¶¨»ý·Öf=inline('x - atan(x)-0.5');x1=-5;x2=5;while abs(x1-x2)>10^(-5)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendx0=x3存盘后运行得x0 =1.47504.用Newton迭代法求解方程求解:x=0.5sinx+1的近似根;解:在编辑窗口输入:f=inline('x-0.5*sin(x)-1');df=inline('1-0.5*cos(x)');d2f=inline('0.5*sin(x)');a=1;b=2;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=0;while abs(f(x0))>m*dltk=k+1;x1=x0-f(x0)/df(x0);x0=x1;fprintf('k=%d x=%.5f\n',k,x0); end存盘后运行得k=1 x=1.54858k=2 x=1.49933k=3 x=1.498705.求解非线性方程组.试求非线性方程组{2x12−x1x2−5x1+1=0x1+3lgx1−x22=0的解,初值如下:(1)x0=[1.4,−1.5](2)x0=[3.7,2.7]解:在编辑窗口输入:function f=group5(x)f=[2*x(1)^2-x(1)*x(2)-5*x(1)+1;x(1)+3*log10(x(1))-x(2)^2];(1):输入:[f,fval]=fsolve('group2',[1.4,-1.5]) 运行得f =1.4589 -1.3968fval =1.0e-011 *0.0759-0.6178(2):输入:[f,fval]=fsolve('group2',[3.7,2.7])运行得f =3.4874 2.2616fval =1.0e-006 *0.0059-0.20126.解决实际问题.为了在海岛I与某城市C之间铺设一条地下光缆,每千米光缆铺设成本在水下部分使C1万元,在地下部分使C2万元,为使得该光缆的总成本最低,光缆的转折点P(海岸线上)应该取在何处?如果实际测得海岛I与城市C之间的水平距离l=30km,海岛距海岸线垂直距离h1=15km,城市距海岸线垂直距离h=10km,C1=3000万元/km,C2=1500万元/km,求P点的坐标(误差<10−3km).解:在编辑窗口输入:f=inline('(3000*x)/(x^2 + 225)^(1/2) + (750*(2*x - 60))/((x - 30)^2 + 100)^(1/2)'); x1=5;x2=10;while abs(x1-x2)>10^(-3)x3=(x1+x2)/2;if f(x3)==0break;elseif f(x1)*f(x3)>0x1=x3;else f(x2)*f(x3)>0;x2=x3;endendfprintf('x=%.5f',x3) 存盘后运行得x=7.69104>>。
学生实验报告开课学院及实验室: 机电学院2012年12月21日学院机电学院年级、专业、班姓名学号实验课程名称MATLAB程序设计成绩实验项目名称实验4: 数据和函数的可视化指导老师一、实验目的1、掌握MATLAB绘图的基本步骤和相关指令调用的先后顺序。
2、掌握MATLAB绘图指令的调用方法。
二、实验内容数学函数从形式上可以分为离散函数和连续函数。
MATLAB对这两种函数数据的可视化都提供了相应的指令。
仔细阅读教材【例5.1-1】的实现代码, 运行并保存结果;并改用stem函数, 画出【例5.1-1】的序列图。
仔细阅读教材【例5.1-2】的实现代码, 运行并保存结果;并分别使用描点和连折线方式, 画出连续函数y=xcosx的近似图形(采样点数自定, 要求画出的图尽量接近原连续函数的图)。
仔细阅读【例5.2-2】的实现代码, 理解plot指令画多条曲线的运用方法, 运行并保存结果;并使用plot函数和legend函数, 在同一个图形窗口上画出y=sint和y=sin(2t)在[0,2pi]区间上的图形, 并标出图例。
仔细阅读【例5.2-4】的实现代码, 理解图形标识选项的运用方法, 运行并保存结果;并修改代码, 把“sin(t)”字体改为正体, 大小改为20, “极大值”改为宋体。
阅读【例5.2-6】, 理解使用hold on指令画多幅图的方法, 运行并保存结果。
阅读【例5.2-8】, 理解使用subplot函数画多个子图的方法, 运行并保存结果。
(1)综合实验: 阅读以下关于通过绘制二阶系统阶跃响应综合演示图形标识的示例, 理解示例中所有图形标识指令的作用, 掌握各个图形标识指令的运用方法, 并在原指令上改动以实现以下功能:(2)把横坐标范围改为0至5pi, 纵坐标范围改为0至2;(3)把图中的横轴的刻度改为从0开始到4pi, 中间各点间隔为pi/2;纵轴刻度改为从0开始到1.5, 中间各点间隔为0.3;(4)把图中的α改为σ。
计算方法matlab实验报告计算方法MATLAB实验报告引言:计算方法是一门研究如何用计算机来解决数学问题的学科。
在计算方法的学习过程中,MATLAB作为一种强大的数值计算软件,被广泛应用于科学计算、工程计算、数据分析等领域。
本实验报告将介绍在计算方法课程中使用MATLAB 进行的实验内容和实验结果。
一、二分法求方程根在数值计算中,求解非线性方程是一个常见的问题。
二分法是一种简单而有效的求解非线性方程根的方法。
在MATLAB中,可以通过编写函数和使用循环结构来实现二分法求解方程根。
实验步骤:1. 编写函数f(x),表示待求解的非线性方程。
2. 设定初始区间[a, b],满足f(a) * f(b) < 0。
3. 利用二分法迭代求解方程根,直到满足精度要求或迭代次数达到预设值。
实验结果:通过在MATLAB中编写相应的函数和脚本,我们成功求解了多个非线性方程的根。
例如,对于方程f(x) = x^3 - 2x - 5,我们通过二分法迭代了5次,得到了方程的一个根x ≈ 2.0946。
二、高斯消元法解线性方程组线性方程组的求解是计算方法中的重要内容之一。
高斯消元法是一种常用的求解线性方程组的方法,它通过矩阵变换将线性方程组化为上三角矩阵,从而简化求解过程。
在MATLAB中,可以利用矩阵运算和循环结构来实现高斯消元法。
实验步骤:1. 构建线性方程组的系数矩阵A和常数向量b。
2. 利用高斯消元法将系数矩阵A化为上三角矩阵U,并相应地对常数向量b进行变换。
3. 利用回代法求解上三角矩阵U,得到线性方程组的解向量x。
实验结果:通过在MATLAB中编写相应的函数和脚本,我们成功求解了多个线性方程组。
例如,对于线性方程组:2x + 3y - z = 13x - 2y + 2z = -3-x + y + 3z = 7经过高斯消元法的计算,我们得到了方程组的解x = 1,y = -2,z = 3。
三、数值积分方法数值积分是计算方法中的重要内容之一,它用于计算函数在给定区间上的定积分。
MATLAB方程组求解实验报告实验报告:MATLAB方程组求解一、引言在工程和科学领域的研究中,常常需要求解一系列的线性或非线性方程组。
MATLAB是一种强大的数学软件,可以用于解决方程组求解的问题。
本实验旨在通过实例介绍MATLAB求解方程组的方法和应用。
二、方程组的定义与求解方法方程组是一组包含多个未知数的方程的集合。
求解方程组即求解方程组中的未知数,使得方程组中的每个方程都成立。
对于线性方程组,可以使用矩阵表示。
例如:Ax=b其中A是一个已知的mxn的矩阵,x是待求解的向量,b是已知的向量。
MATLAB提供了多种求解线性方程组的方法,如高斯消元法、LU分解法和迭代法等。
对于非线性方程组,一般使用数值方法求解。
常见的数值方法有牛顿法、割线法和迭代法等。
MATLAB中的fzero函数可以用于求解非线性方程组。
三、MATLAB求解线性方程组的实例1.高斯消元法考虑以下线性方程组:3x+2y-z=12x-2y+4z=-2-x+0.5y-z=0可以通过高斯消元法求解该方程组。
在MATLAB中,可以使用linsolve函数进行求解。
2.LU分解法LU分解是一种常用的求解线性方程组的方法。
通过将系数矩阵分解为上三角矩阵U和下三角矩阵L的乘积来求解方程组。
在MATLAB中,可以使用lu函数进行LU分解。
四、MATLAB求解非线性方程组的实例1.牛顿法考虑以下非线性方程组:x^2+y^2=1(x-1)^2+y^2=1可以通过牛顿法求解该方程组。
在MATLAB中,可以使用fsolve函数进行求解。
2.迭代法考虑以下非线性方程组:x^2+y^2=2x+y=1可以通过迭代法求解该方程组。
在MATLAB中,设置初始值,并使用循环迭代的方法逐步逼近方程的解。
五、实验步骤和结果1.线性方程组求解构建线性方程组Ax = b,并使用linsolve函数进行求解。
2.非线性方程组求解构建非线性方程组,并使用fsolve函数进行求解。
运用MATLAB;实验:方程求根求方程f(x)=x^3-sinx-12x+1的全部根, ε=1e -6 (1) 用一般迭代法; (2) 用牛顿迭代法;并比较两种迭代的收敛速度。
解:由题可知, (1)①=-)4(f -15.7568<0,=-)3(f 10.1411>0,所以当x ∈[-4,-3]时,)(x f 有解,将原方程化为等价方程3112sin -+=x x x ,迭代函数和迭代序列分别为31112sin )(-+=x x x g ,31112sin -+=+x x g n ,n=0,1,2,....取初值5.30-=x ,因为ε=1e -6,使用matlab ,得即运行结果:x_star =-3.410 ,1iter =14②1)0(=f >0,=)1(f -10.8415<0,所以当x ∈[0,1]时,)(x f 有解,将原方程化为等价方程3112sin -+=x x x ,迭代函数和迭代序列分别为31112sin )(-+=x x x g ,31112sin -+=+x x g n ,n=0,1,2,....取初值5.00=x ,因为ε=1e -6,使用matlab ,得 代码:即运行结果:x_star = 0.0770 iter =6③=)3(f -8.1411<0,=)4(f 17.7568>0,所以当x ∈[3,4]时,)(x f 有解,将原方程化为等价方程3112sin -+=x x x ,迭代函数和迭代序列分别为31112sin )(-+=x x x g ,31112sin -+=+x x g n ,n=0,1,2,....取初值5.30=x ,因为ε=1e -6,使用matlab ,得 代码:即运行结果:x_star = 3.4101 iter =10(2)对函数求导可得12cos 3)(2'--=x x x f ,由(1)可知,当x ∈[-4,-3]时,5.30-=x ,用牛顿迭代格式5.3)(/)(0'1{-=-=+x x f x f x x n n代码:即运行结果:x_star = -3.4912 iter =2②当x ∈[0,1]时,5.00=x ,用牛顿迭代格式5.0)(/)(0'1{=-=+x x f x f x x n n代码:运行结果:即 x_star = 0.0770 iter = 3③当x ∈[3,4]时,5.30=x ,用牛顿迭代格式5.3)(/)(0'1{=-=+x x f x f x x n n代码:即运行结果:x_star =3.4101iter =3由(1),(2)对比可得,牛顿迭代的收敛速度比较快。
matlab实验报告实验名称:MATLAB数值分析实验报告摘要:本实验通过使用MATLAB软件,实现了一些数值分析中重要的算法,包括线性方程组求解、非线性方程求根、数值积分与微分以及常微分方程求解。
在算法实现的过程中,通过观察输出结果验证了算法的正确性和可靠性,并探讨了一些算法实现中需要注意的问题。
1.线性方程组求解线性方程组求解是数值分析中的重要算法之一,是很多数学问题的基础。
本实验中使用了三种求解线性方程组的算法:高斯消元法、LU分解法和共轭梯度法。
在实验中,我们需要注意选取矩阵的条件数,使用一些特殊矩阵,如对角矩阵、三对角矩阵和希尔伯特矩阵等来验证算法的正确性。
2.非线性方程求根非线性方程求根是MATLAB中一个非常实用的函数,能够快速解决大量的非线性方程。
本实验中,我们更深入地探讨了二分法、牛顿法和割线法等算法,通过实现代码,实现了对非线性方程的求解。
同时,对不同的算法进行比较,从而选择合适的算法。
3.数值积分与微分数值积分与微分是宏观物理中需要用到的重要数学问题之一。
本实验中,我们使用了梯形法、辛普森法和龙贝格法等多种数值积分算法实现了函数的数值积分。
同时,也对数值微分的误差和稳定性进行了研究和探讨。
4.常微分方程求解常微分方程求解是MATLAB中最常用的功能之一。
本实验中,我们实现了欧拉法、龙格-库塔法等常微分方程求解算法。
并不断尝试对算法进行改进,提高其效率和精度。
实验结果表明,使用MATLAB实现数值分析算法是非常可靠和高效的。
同时,也需要注意在算法实现中注意问题和选择合适的算法。
北京理工大学珠海学院实验报告
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级2012电气2班学号xxxxxxxxxx姓名陈冲指导教师张凯成绩
实验题目(实验四)方程求根实验地点及时间JB501 2013/12/31(3-4节)
一、实验目的
1.掌握用程序语言来编辑函数。
2.学会用MATLAB编写resecm.m以及Newtoniter.m函数分别实现二分法、牛顿迭代法求解。
二、实验环境
Matlab软件
三、实验内容
1、以书中第11页题目1和第154页题目16为例编辑程序来实现计算结果。
2、使用MATLAB进行编写:
第一步:编写resecm.m函数,代码如下
第二步:编写Newtoniter.m函数,代码如下
第三步:利用上述函数编辑命令:(可见实验结果中的截图)1.在此之前先建立一个名为f.m的M文件,代码如下
function y=f(x);
y=x^3-x-1;
再编代码:
clear all;
resecm(‘f’,1,2,0.01)
得到结果:ans=1.3247
2.再建文件名为li6_4fun.m的M文件,代码如下
function y=li6_4fun(x);
y=x^3+2*x^2+10*x-20;
和dili6_4fun.m的M文件,代码如下
function y=dili6_4fun(x);
y=3*x^2+4*x+10;
再编代码:
得到结果:x=1.3688
若在语句中添加format long;语句,且精确到14位,则结果为
x=1.36880810782137
四、实验题目
1、用二分法求方程310x x --=在[]1,2内的近似值,要求误差不超过310-。
16、早在1225年,有人曾求解方程32
210200x x x ++-=(见前述题1)并给了高精度的实根* 1.368808107x =,试用牛顿法求得这个结果。
前述题:1、试取01x =,用迭代公式
1220210k k k x x x +=
++,0,1,2,...k = 求方程32210200x x x ++-=的根,要求准确到310-。
五、实验结果
六、总结
通过这次实验,我掌握了用Matlab软件实现求根的技巧,牛顿迭代法会比二分法更加精确。
此外,用format long语句会更加精确。
要注意符号不要缺,打代码过程一定要严谨。