matlab中方程根的近似计算要点
Matlab数值实验求代数方程的近似根(解)教程
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种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)。
matlab求根的个数和区间
标题:深度解析MATLAB求根的个数和区间1. 引言MATLAB作为一种强大的数学工具,对于求解方程根的问题有着丰富的函数库和算法支持。
在实际应用中,我们常常需要对一个函数的根进行求解,而了解该函数根的个数和区间是十分重要的。
本文将深入探讨MATLAB中求根个数和区间的相关知识和方法,以便读者能够更全面、深刻地理解这一主题。
2. 求根个数的概念及相关函数我们需要了解什么是求根的个数以及MATLAB中相关的函数。
对于一个函数f(x),求根的个数即为其在特定区间内零点的个数。
在MATLAB中,常用的求根函数包括fzero()、roots()等,它们可以对各种类型的函数进行求解,如多项式、非线性方程等。
3. 求根个数的判定方法接下来,我们将介绍MATLAB中判定求根个数的方法。
对于一元函数,我们可以借助MATLAB中的绘图函数plot(),来观察函数的图像,并直观地判断其在特定区间内的根的个数。
另外,MATLAB还提供了一些数值方法,如牛顿法、二分法等,可以精确地计算函数在区间内的根。
4. 区间的选取和调整选取合适的区间对于求解根的个数至关重要。
在选取区间时,我们需要考虑函数的特性、间断点和拐点等因素,以确保所选区间内包含所有的根。
当计算结果不准确或求根个数与预期值不符时,我们需要对区间进行调整,以提高求解的精度和准确性。
5. 个人观点和理解在我看来,MATLAB求根的个数和区间问题是实际工程中最常见且关键的数学问题之一。
在实际应用中,需要根据具体的函数形式和求解需求来选择合适的求根方法和算法。
充分了解函数的特性和区间的选择对于求解的准确性和有效性具有重要意义。
6. 总结和回顾通过本文的深度解析,读者对MATLAB求根个数和区间这一主题应该有了更全面、深刻的理解。
在实际应用中,我们应该根据具体情况来选择合适的求根方法和区间,以确保求解的准确性和有效性。
在MATLAB中,求根的个数和区间判定是一个复杂而又具有挑战性的问题,但凭借丰富的数学工具和函数库,我们可以很好地解决这一问题,并在实际工程中取得良好的效果。
MATLAB数值计算-第4章-方程求根
MATLAB数值计算(读书日记及程序编写)第四章方程求根 (2)第四章 方程求根#二分法 求2的值转化成方程02-2=x最慢的方法是取初值1001=x 02-21>x ,取502=x这样得到也可以x0=a, x1=x0+h, 进行扫描,若f(x0)*f(x1)<0, 则扫描成功,有根区间为[x0,x1],否则继续扫描,如果出现x1>b ,表面扫描失败,再缩小步长h, 再次扫描。
>> format long %让显示的值为M=2,a=1,b=2,k=0;while b-a>epsx=(a+b)/2;if x^2>Mb=xelsea=xendk=k+1end执行后得到的值为:k =50b =1.414213562373095k =51b =1.414213562373095k =52最后得到的值就是Matlab 能表达的最接近的值。
#牛顿法求解f(x)=0的牛顿法是在f(x)画一条切线,确定切线与x 轴的焦点,通过迭代 )(x f )f(x -n n 1'=+n n x x 对于平方根的问题,牛顿法简洁有效,换成f(x)=x^2-M, )(x f n '=2x 这样⎪⎪⎭⎫ ⎝⎛+==+n n n n x M x M x x 212x -x -n 2n 1 该算法就是反复求x 和M/x 的平均值,Matlab 的程序为:format long %让显示的值为xprev=2; %取的不等于初值x 的一个值,让判断能继续x=100; %取的初值为3while abs(x-xprev)>eps*abs(x)xprev=x;x=0.5*(x+2/x)endx = 1.833333333333333x = 1.462121212121212x = 1.414998429894803x = 1.414213780047198x = 1.414213562373112x = 1.414213562373095x = 1.414213562373095可见6步很快就收敛然而,若f(x)不具有连续的、有界的一阶、二阶导数,牛顿法的收敛将变得很慢。
matlab中方程根的近似计算
实验一方程根的近似计算一、问题求非线性方程的根二、实验目的1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。
4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。
三、预备知识方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。
它的一般形式是求方程f(x)=0的根。
如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。
并非所有的方程都能求出精确解或解析解。
理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没有代数求根方法,即它的根不能用方程系数的解析式表示。
至于超越方程,通常很难求出其解析解。
不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。
而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。
下面介绍几种常见的求近似根的方法。
1. 求方程近似解的简单方法1.1 图形方法—放大法求根图形的方法是分析方程根的性态最简洁的方法。
不过,不要总是想得到根的精确值。
这些值虽然粗糙但直观,多少个根,在何范围,一目了然。
并且还可以借助图形局部放大功能,将根定位得更加准确一些。
例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。
解(1)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。
为此,在matlab命令窗中输入clfezplot x-x,grid onhold onezplot('x^5+2*x^2+4',[-2*pi,2*pi])1-1 函数f(x)=x5+2x2+4的图形clfx=-2*pi:0.1:2*pi;y1=zeros(size(x));y2= x.^5+2*x.^2+4;plot(x,y1,x,y2)grid onaxis tighttitle('x^5+2x^2+4')xlabel('x')从图1-1可见,它有一个实数根,大致分布在-2与2之间。
实验三:matlab求代数方程的近似根(解)
相关概念
线性方程 与 非线性方程
f ( x) 0
如果 f(x) 是一次多项式,称上面的方程为线性方 程;否则称之为非线性方程。
对分法
基本思想
将有根区间进行对分,判断出解在某个分段内,然后 再对该段对分,依次类推,直到满足给定的精度为止。
适用范围
求有根区间内的 单根 或 奇重实根。
(1) 令 x0 (a b) / 2,计算 f ( x0 ); ( 2) 若 | f ( x0 ) | ,则 x0 就是我们所要的近似根,
停止计算, 输出结果 x x0;
(3) 若 f (a ) f ( x0 ) 0,令 a1 a, b1 x0 ; 否则令 a1 x0 , b1 b;
上机作业
作业(要求写实验报告)
教材:P69, 4
( x ) (1 w) x w ( x )
加权系数 wk 的确定:令 ’(x)=0 得
w 1 1 '( x )
wk
1 1 '( xk )
松弛迭代法
松弛法迭代公式:
xk 1 (1 wk ) xk wk ( xk )
1 wk , 1 '( xk )
根据上面的算法,我们可以得到一个每次缩小一半的 区间序列 {[ak , bk ]} ,在 (ak , bk ) 中含有方程的根。 设方程的根为 x* (ak , bk ) ,又 xk
1 1 1 1 | xk | ( bk ak ) ( bk 1 ak 1 )= = k 1 ( b a) 2 2 2 2
令: P ( x ) 0
ቤተ መጻሕፍቲ ባይዱ
f ( x0 ) x x0 f '( x0 )
matlab计算方程的根
MATLAB计算方程的根一、引言在数学中,方程的根指的是方程中使得等式成立的未知数的值。
解方程是数学中的一项基本操作,它在各个领域都有广泛的应用。
M A TL AB是一种强大的数值计算工具,它提供了多种方法来求解方程的根。
本文将介绍如何使用MA TL AB计算方程的根,包括求解一元方程和多元方程的方法。
二、求解一元方程的方法1.代数方法代数方法是求解一元方程的常用方法之一,它通过移项、合并同类项等代数运算,将方程转化为更简单的形式,从而求解方程的根。
在M A TL AB中,我们可以使用符号计算工具箱(Sy mb ol ic Ma thT o ol bo x)来进行代数运算。
以下是一个求解一元方程的示例代码:s y ms xe q n=x^2-3*x+2==0;s o l=so lv e(eq n,x);2.迭代法迭代法是数值计算中常用的一种方法,它通过逐步逼近方程的根,最终得到一个满足精度要求的解。
M AT LA B提供了多种迭代法求解方程根的函数,如牛顿迭代法(`fz er o`函数)、二分法(`f ze ro`函数)、割线法(`f ze ro`函数)等。
以下是一个使用二分法求解一元方程根的示例代码:f=@(x)x^2-3*x+2;x0=0;%初始猜测值x=fz er o(f,x0);三、求解多元方程的方法1.数值解法对于多元方程组,数值解法是一种常见且有效的求解方法。
MA T LA B提供了多种数值解法的函数,如牛顿法(`f s ol ve`函数)、最小二乘法(`ls qn on li n`函数)等。
这些函数可以根据方程组的特点选择合适的算法进行求解。
以下是一个使用牛顿法求解多元方程组的示例代码:f=@(x)[x(1)^2+x(2)^2-4;x(1)^2-x(2)^2-1];x0=[1;1];%初始猜测值x=fs ol ve(f,x0);2.符号解法在某些情况下,我们可以使用符号计算工具箱来求解多元方程组的精确解。
matlab计算根号算法
matlab计算根号算法根号算法是数学中常见的一种求解平方根的方法。
在计算机科学中,根号算法也是常用的数值计算方法之一。
在本文中,我们将介绍如何使用Matlab实现根号算法,并探讨其原理与应用。
我们需要明确根号算法的定义。
根号算法,也称为平方根算法,是求解一个数的平方根的方法。
在数学中,我们使用符号√来表示平方根。
例如,√4=2,表示4的平方根等于2。
在Matlab中,我们可以使用内置的sqrt函数来计算一个数的平方根。
sqrt函数的使用非常简单,只需要将需要求解平方根的数作为参数传入即可。
例如,如果我们想求解16的平方根,可以使用以下代码:```x = sqrt(16);disp(x);```运行上述代码,我们将得到输出结果为4。
这是因为16的平方根等于4。
除了使用内置的sqrt函数外,我们还可以使用迭代法来实现根号算法。
迭代法的基本思想是通过不断逼近的方式,求解一个方程的根。
在根号算法中,我们可以通过迭代法逼近一个数的平方根。
具体而言,我们可以使用以下迭代公式来计算一个数的平方根:```x(n+1) = (x(n) + a / x(n)) / 2```其中,x(n)表示第n次迭代的结果,x(n+1)表示第n+1次迭代的结果,a表示需要求解平方根的数。
现在,我们将使用Matlab实现根号算法的迭代过程。
首先,我们需要设置迭代的初始值,通常可以选择一个合适的数作为初始值。
在这里,我们选择a本身作为初始值。
然后,我们可以使用一个循环来迭代地计算平方根,直到达到预设的精度。
以下是使用Matlab实现根号算法的代码:```a = 16; % 需要求解平方根的数x = a; % 初始值设为a本身delta = 1e-6; % 预设的精度while truex_next = (x + a / x) / 2; % 根号算法的迭代公式if abs(x_next - x) < delta % 判断是否达到预设的精度break;endx = x_next; % 更新迭代结果enddisp(x);```运行上述代码,我们将得到输出结果为4。
matlab不动点迭代法求方程的根
不动点迭代法是求解非线性方程的一种常用方法,其原理是通过将原方程转化为不动点方程,并通过迭代来逼近方程的根。
在MATLAB中,我们可以利用不动点迭代法来求解方程的根,下面我将详细介绍该方法的原理和使用步骤。
1. 不动点迭代法的原理不动点迭代法的基本思想是将原方程化为不动点方程,即将方程f(x)=0 转化成g(x)=x 的形式,其中g(x) 是一个满足一定条件的函数。
然后通过迭代计算不动点序列 {x_k},当序列收敛时,即可得到方程的根。
2. 使用不动点迭代法求解方程的步骤我们需要将原方程 f(x)=0 转化成 g(x)=x 的形式,确定函数 g(x)。
然后选择一个初始值 x_0,并进行迭代计算,直到满足精度要求或者迭代次数达到上限为止。
3. MATLAB中的实现在MATLAB中,可以使用函数形式来表示不动点迭代法。
定义一个函数 f(x) 和一个不动点迭代函数 g(x),然后通过循环迭代计算来逼近方程的根。
在迭代过程中,可以设置一个收敛判据,当满足条件时即可停止迭代。
4. 个人观点和理解不动点迭代法是一种简单而有效的求解非线性方程的方法,其原理清晰、实现简单。
在MATLAB中,通过编写相应的函数和循环来实现该方法,可以更快速地求解方程的根。
不过需要注意的是,不动点迭代法的收敛性和收敛速度受到选择的初始值和迭代函数的影响,需要谨慎选择才能得到准确的结果。
利用不动点迭代法在MATLAB中求解方程的根是一种实用而重要的技能,可以帮助我们更好地解决实际问题。
希望我的文章能够帮助你更深入地理解这一方法,并在实践中灵活运用。
不动点迭代法是一种常用的求解非线性方程的方法,其原理和使用步骤在上文中已经有了详细介绍。
在本节中,我们将进一步探讨不动点迭代法的收敛性、迭代函数的选择和初始值的影响,以及在实际使用中需要注意的问题。
我们来讨论不动点迭代法的收敛性。
在使用不动点迭代法求解方程的过程中,我们需要考虑迭代函数 g(x) 是否满足一定的条件使得不动点序列 {x_k} 收敛到方程的根。
matlab牛顿迭代法求多项式方程的根
matlab牛顿迭代法求多项式方程的根【主题】matlab牛顿迭代法求多项式方程的根1. 引言在数学和工程领域中,求解多项式方程的根是一项常见且重要的任务。
牛顿迭代法是一种有效的数值方法,可以用来逼近多项式方程的根。
本文将详细介绍如何利用matlab实现牛顿迭代法,以及该方法的应用和局限性。
2. 牛顿迭代法简介牛顿迭代法是一种基于导数的数值逼近方法,用于求解方程 f(x)=0 的根。
该方法的基本思想是从一个初始近似值开始,通过逐步改进来逼近方程的根。
牛顿迭代法的迭代公式为:\[x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}\]其中,\(x_n\)是第n次迭代的近似根,f(x)是方程,\(f'(x)\)是f关于x的导数。
3. 在matlab中实现牛顿迭代法在matlab中,我们可以利用函数和循环结构来实现牛顿迭代法。
需要定义方程f(x)以及其导数f'(x)的函数表达式。
选择一个初始值作为近似根,通过迭代公式不断改进,直到满足预设的精度要求。
4. 应用实例我们将以一个具体的多项式方程为例,来演示如何利用matlab的牛顿迭代法来求解其根。
假设我们要求解方程\(x^2-2=0\)的根。
我们可以定义方程及其导数的matlab函数表达式,然后选择一个适当的初始值,进行迭代计算,最终得到方程的根。
5. 算法优化与局限性虽然牛顿迭代法在求解多项式方程的根上表现出色,但也存在一些局限性。
需要提前知道方程的导数表达式;初始值的选取可能影响迭代结果的精度等。
在实际应用中,需要根据具体情况灵活选择迭代算法,甚至进行一些优化来提高求解效率。
6. 结语通过matlab实现牛顿迭代法求解多项式方程的根,不仅可以帮助我们深入理解数值计算方法,也可以应用到实际工程问题中。
对于复杂的多项式方程,利用数值方法求解是一种有效的途径。
当然,在应用过程中需要注意算法的优化和局限性,以确保求解的准确性和稳定性。
MATLAB求代数方程的近似根(解)
y = polyval(p,x) Y = polyvalm(p,X)
多项式运算中, 使用的是多项式
系数向量,
不涉及符号计算!
x = roots(p)
线性方程组求解
线性方程组求解
linsolve(A,b):解线性方程组 Ax b
p2 2x 1 p1 p2 2x3 x2 2x 4
[2, 1, 0, 3] [ 0, 0[,2,1] [2, 1, 2, 4]
多项式四则运算
多项式乘法运算: k = conv(p,q)
例:计算多项式 2x3 x2 3 和 2x 1 的乘积 >> p=[2,-1,0,3]; >> q=[2,1]; >> k=conv(p,q);
多项式除法运算: [k,r] = deconv(p,q) 其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 [k,r]=deconv(p,q) <==> p=conv(q,k)+r
多项式的求导
polyder
k=polyder(p) : 多项式 p 的导数; k=polyder(p,q): p*q 的导数; [k,d]=polyder(p,q): p/q 的导数,k 是分子,d 是分母
fsolve [x,fval,flag,out]=fsolve(fun,x0,options): 参数大部分与fzero相同,优化参数更多,更灵活。 注意x0的长度必须与变量的个数相等。
它与fzero的区别是,算法不同,fsolve的功能强大多很多,它可 以直接方便的求解多变量方程组,线性和非线性,超静定和静不 定方程,还可求解复数方程。 fun同样可以是句柄、inline函数或M文件,但是一般M文件比较 多,这是由于fsolve是解方程组的,目标函数一般比较烦,直接 写比较困难
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 公式。
matlab求微分方程精确解与近似解
注:解微分方程组时,如果所给的输出个数与方程个数相同, 则方程组的解按词典顺序输出;如果只给一个输出,则输出 的是一个包含解的结构(structure)类型的数据。
❖ dsolve 举例
例:[x,y]=dsolve('Dx+5*x=0','Dy-3*y=0', ...
'x(0)=1', 'y(0)=1','t')
若找不到解析解,则返回其积分形式。
dsolve 举例
例 2:求微分方程 xy ' y e x 0 在初值条件 y(1) 2e
下的特解,并画出解函数的图形。
>> y=dsolve('x*Dy+y-exp(x)=0','y(1)=2*exp(1)','x') >> ezplot(y);
dsolve 举例
Euler折线法举例(续)
解析解:
y
5 3
e3x
2x
2 3
1/ 3
解析解
近似解
Runge-Kutta 方法
为了减小误差,可采用以下方法:
unge-Kutta (龙格-库塔) 方法
龙格-库塔方法
是一类求解常微分方程的数值方法 有多种不同的迭代格式
Runge-Kutta 方法
Euler 法与 R-K法误差比较
Matlab 解初值问题
用 Maltab自带函数 解初值问题
求解析解:dsolve
求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb
dsolve 求解析解
Matlab 求代数方程的近似解
x*
即 x* ( x*)
( x*)
f ( x*) 0
注:若得到的点列发散,则迭代法失效!
迭代法收敛性判断
如果存在 x* 的某个 邻域 =(x*- , x* + ), 使 定义: 得对 x0 开始的迭代 xk+1 = (xk) 都收敛, 则称该迭代法在 x* 附近局部收敛。 设 x* =(x*),的某个邻域 内连续,且对 定理 1: x 都有 |’(x)|q< 1, 则对 x0 ,由迭 代 xk+1 = (xk) 得到的点列都收敛。
f 是符号表达式,也可以是字符串 默认变量由 findsym(f,1) 确定
>> syms x >> f=sin(x)+3*x^2; >> g=diff(f,x) >> g=diff('sin(x)+3*x^2','x')
Matlab 解方程函数
roots(p):多项式的所有零点,p 是多项式系数向量。 fzero(f,x0):求 f=0 在 x0 附近的根,f 可以使用
inline、字符串、或 @,但不能是方程或符号表达式!
linsolve(A,b):解线性方程组。 solve(f,v):求方程关于指定自变量的解,f 可以是用
得到一个迭代序列
k = 0, 1, 2, ... ...
xk k 0
f (x) = 0 f (x) 的零点
等价变换
x = (x)
(x) 的不动点
迭代法的收敛性
收敛性分析
若 ,假设 (x) 连续,则 xk x * xk 收敛,即lim k
matlab根号运算
matlab根号运算摘要:本文主要介绍了MATLAB中根号运算的基本概念、实现方法及其在实际问题中的应用。
通过实例分析,展示了如何使用MATLAB进行根号运算,以及如何在实际问题中运用这些知识。
一、根号运算的基本概念根号运算是一种基本的数学运算,表示将一个数开平方。
在MATLAB中,可以使用内置函数`sqrt()`来实现根号运算。
`sqrt()`函数接受一个实数作为输入,返回其平方根。
例如,`sqrt(9)`返回3,因为3的平方等于9。
二、MATLAB中根号运算的实现在MATLAB中,可以使用`sqrt()`函数直接进行根号运算。
例如:```matlabnum = 9;result = sqrt(num);```此外,还可以使用`sym`函数将符号表达式转换为符号矩阵,然后使用`sqrt()`函数计算符号矩阵的平方根。
例如:```matlabsym_expr = sym('x^2 + y^2');num_coefficients = num2cell(eval(regexprep(sym_expr, '-', '+')));square_root_expr = [num2cell(sqrt(c)) for c in num_coefficients];```三、根号运算在实际问题中的应用1. 计算距离在地理系统中,经常需要计算两点之间的距离。
可以使用根号运算来计算两点之间的直线距离。
例如,假设有两个点A(x1, y1)和B(x2, y2),可以使用以下公式计算它们之间的距离:```matlabdistance = sqrt((x2 - x1)^2 + (y2 - y1)^2);```2. 计算面积和体积在计算平面图形和三维物体的面积和体积时,可能需要使用到根号运算。
例如,计算圆形、球体或圆柱体的面积和体积时,都需要使用到根号运算。
在MATLAB中,可以使用内置函数`pi`和`sphere`、`cylinder`等计算这些面积和体积。
matlab二分法求解方程的根
matlab二分法求解方程的根二分法是求解数值计算中常用的一种方法,也被广泛地应用于求解方程的根。
在MATLAB中,我们可以使用二分法来求解方程的根。
具体步骤如下:1.首先,我们需要定义我们要求解的方程。
可以使用MATLAB中的符号计算工具箱或者直接定义一个匿名函数。
例如,我们要求解的方程是 f(x) = x^3 - 2x - 5,我们可以这样定义一个匿名函数:f = @(x) x^3 - 2*x - 5。
2.接下来,我们需要确定求解的区间。
这个区间应该包含方程的一个根。
通常,我们可以通过简单的图形绘制来确定这个区间。
例如,我们可以绘制 f(x) 的图像,然后找到其中一个跨越 x 轴的点,就可以确定我们要求解的区间了。
假设我们已经确定了区间[2,3]。
3.然后,我们可以编写一个二分法求解方程根的函数。
这个函数需要接受三个参数:被求解的方程 f,求解区间 a 和 b。
函数的基本思路是每次将区间缩小一半,直到找到方程的一个根。
具体实现方式可以参考下面的代码示例:function [x] = bisection(f, a, b, tol)% f: 要求解的方程% a: 求解区间左端点% b: 求解区间右端点% tol: 误差容限% x: 方程的一个根% 初始化fa = f(a);fb = f(b);if fa*fb > 0error('区间内不存在根'); end% 迭代求解while abs(b-a) > tolx = (a+b)/2;fx = f(x);if fx == 0break;elseif fx*fa < 0b = x;fb = fx;elsea = x;fa = fx;endendend4.最后,我们可以调用这个函数来求解方程的根。
例如,我们可以这样调用:f = @(x) x^3 - 2*x - 5;a = 2;b = 3;tol = 1e-6;x = bisection(f, a, b, tol);这个函数将返回方程 f 在区间 [a,b] 内的一个根,误差容限为 tol。
matlab代数方程近似解
linsolve(A,b):解线性方程组。 solve(f,v):求方程关于指定自变量的解,f 可以是用
字符串表示的方程、符号表达式; solve 也可解方程组(包含非线性); 得不到解析解时,给出数值解。
上机作业
1.根据二分法的步骤编写程序bisec.m求
相关概念
线性方程 与 非线性方程
f ( x) 0
如果 f(x) 是一次多项式,称上面的方程为线性方 程;否则称之为非线性方程。
本节主要讨论非线性方程的数值求解
对分法
基本思想
将有根区间进行对分,判断出解在某个分段内,然后 再对该段对分,依次类推,直到满足给定的精度为止。
适用范围
(4) 令 x1 (a1 b1 ) / 2, 若 | f ( x1 ) | ,则停止计算, 输出结果 x x1; 若 f (a1 ) f ( x1 ) 0,令 a2 a1, b2 x1; 否则令 a2 x1, b2 b1;
... ...
Matlab程序见 bisec.m
f ( x ) f ( x0 ) f '( x0 )( x x0 ) 2! ( x x0 )
f ( x0 ) f '( x0 )( x x0 )
令: P ( x ) 0
P( x)
( f '( x0 ) 0)
f ( x0 ) x x0 f '( x0 )
(1) 令 x0 (a b) / 2,计算 f ( x0 ); (2) 若 | f ( x0 ) | ,则 x0 就是我们所要的近似根,
停止计算, 输出结果 x x0;
matlab实验报告--求代数方程近似根1
连续函数的介值定理,在 (a,b) 内至少存在一点 ,使 f ( ) 0 .
下面的方法可以求出该根:
(1)
令 x0
a b ,计算 2
f (x0 ) ;
(2) 若 f (x0 ) 0 ,则 x0 是 f (x) 0 的根,停止计算,输出结果 x x0 .
若
f
(a)
f
(x0)
0
,则令 a1
, k
1 1 '(xk )
b) Altken 方法: x* (x* ) , x* 是它的根, x0 是其近似根.
设 x1 (x0 ) , x2 (x1) ,因为 x* x2 [x* x2 ] x2 [ (x* ) (x1)] x2 ' ( )(x* x1) ,
用差商 x2 x1 (x1) (x0 ) 近似代替'( ) ,有
当 f (x) 0 是非线性方程时,由于 f (x) 的多样性,尚无一般的解析解法可使用,但如果对任意 的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.
本实验介绍一些求方程实根的近似值的有效方法,要求在使用这些方法前先确定求根区间[a,b] , 或给出某根的近似值 x0 .
a
, b1
x0
,若
f
(a)
f
(x0)
0
,则令
a1
x0
, b1
b
; x1
a1
b1 2
.
……,有 ak
、 bk
以及相应的 xk
ak
bk 2
.
(3) 若 f (xk )
(
为预先给定的精度要求),退出计算,输出结果 xk
ak
matlab中方程根的近似计算
实验一方程根的近似计算一、问题求非线性方程的根二、实验目的1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。
4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。
三、预备知识方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。
它的一般形式是求方程f(x)=0的根。
如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。
并非所有的方程都能求出精确解或解析解。
理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没有代数求根方法,即它的根不能用方程系数的解析式表示。
至于超越方程,通常很难求出其解析解。
不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。
而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。
下面介绍几种常见的求近似根的方法。
1. 求方程近似解的简单方法1.1 图形方法—放大法求根图形的方法是分析方程根的性态最简洁的方法。
不过,不要总是想得到根的精确值。
这些值虽然粗糙但直观,多少个根,在何范围,一目了然。
并且还可以借助图形局部放大功能,将根定位得更加准确一些。
例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。
解(1)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。
为此,在matlab命令窗中输入clfezplot x-x,grid onhold onezplot('x^5+2*x^2+4',[-2*pi,2*pi])1-1 函数f(x)=x5+2x2+4的图形clfx=-2*pi:0.1:2*pi;y1=zeros(size(x));y2= x.^5+2*x.^2+4;plot(x,y1,x,y2)grid onaxis tighttitle('x^5+2x^2+4')xlabel('x')从图1-1可见,它有一个实数根,大致分布在-2与2之间。
matlab二分法求方程的近似解
题目:matlab二分法求方程的近似解一、概述由于许多实际问题都可以用方程来描述,而有些方程并不能通过代数方法求解,因此需要利用计算机进行数值计算。
二分法是一种简单而又常用的数值计算方法,通过不断缩小一个区间来逼近方程的根,从而获得方程的近似解。
本文将介绍如何使用matlab编程实现二分法求解方程的近似解,并给出示例代码和实际应用。
二、二分法求解方程的原理1. 什么是二分法二分法又称折半法,是一种在有序数组中查找特定值的搜索算法。
它的工作原理是不断将待查找的范围分成两半,然后确定待查找值可能存在的那一半。
通过不断缩小范围,最终找到目标值或确定目标值不存在。
2. 二分法求解方程的思想对于一个非线性方程f(x)=0,如果我们能够找到两个值a和b,使得f(a)和f(b)异号,那么在[a,b]区间内一定存在方程的根。
二分法的思想就是不断将[a,b]区间缩小,从而逼近方程的根。
三、使用matlab编程实现二分法求解方程1. 确定搜索区间需要确定方程的根存在的区间[a,b],并保证f(a)和f(b)异号。
这一步可以通过实际问题分析或者数值计算得到。
2. 定义求解函数在matlab中,需要定义方程f(x)的求解函数。
定义一个求解方程x^2-2的函数为:```matlabfunction y = func(x)y = x^2 - 2;end```3. 编写二分法求解程序在matlab中,编写二分法求解程序如下:```matlabfunction [result, iter] = binary_search(a, b, f, tol)fa = f(a);fb = f(b);if sign(fa) == sign(fb)error('f(a) and f(b) must have opposite signs');enditer = 0;while (b - a)/2 > tolc = (a + b)/2;fc = f(c);if fc == 0break;endif sign(fc) == sign(fa)a = c;fa = fc;elseb = c;fb = fc;enditer = iter + 1;endresult = (a + b)/2;end```四、示例代码及应用以方程x^2-2=0为例,使用上述编写的程序求解方程的近似解:```matlab[a, b] = [1, 2];tol = 1e-6;[result, iter] = binary_search(a, b, func, tol);fprintf('The approximate solution of x^2-2=0 is .6f, it takes d iterations\n', result, iter);```运行结果为:The approximate solution of x^2-2=0 is 1.xxx, it takes 20 iterations以上代码实现了对方程x^2-2=0近似解的求解,并且给出了迭代次数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一方程根的近似计算一、问题求非线性方程的根二、实验目的1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。
4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。
三、预备知识方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。
它的一般形式是求方程f(x)=0的根。
如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。
并非所有的方程都能求出精确解或解析解。
理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没有代数求根方法,即它的根不能用方程系数的解析式表示。
至于超越方程,通常很难求出其解析解。
不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。
而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。
下面介绍几种常见的求近似根的方法。
1. 求方程近似解的简单方法1.1 图形方法—放大法求根图形的方法是分析方程根的性态最简洁的方法。
不过,不要总是想得到根的精确值。
这些值虽然粗糙但直观,多少个根,在何范围,一目了然。
并且还可以借助图形局部放大功能,将根定位得更加准确一些。
例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。
解(1)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。
为此,在matlab命令窗中输入clfezplot x-x,grid onhold onezplot('x^5+2*x^2+4',[-2*pi,2*pi])1-1 函数f(x)=x5+2x2+4的图形clfx=-2*pi:0.1:2*pi;y1=zeros(size(x));y2= x.^5+2*x.^2+4;plot(x,y1,x,y2)grid onaxis tighttitle('x^5+2x^2+4')xlabel('x')从图1-1可见,它有一个实数根,大致分布在-2与2之间。
(2)将作图范围不断缩小,用放大法可得到精度越来越高的根的近似值。
在matlab命令窗中先后键入subplot(2,2,1)ezplot x-x, grid on, hold on, ezplot('x^5+2*x^2+4',[-2,2])subplot(2,2,2)ezplot x-x, grid on, hold on, ezplot('x^5+2*x^2+4',[-2,-1])subplot(2,2,3)ezplot x-x, grid on, hold on, ezplot('x^5+2*x^2+4',[-1.6,-1.5])subplot(2,2,4)ezplot x-x, grid on, hold on, ezplot('x^5+2*x^2+4',[-1.55,-1.54])图1-2 放大法求函数f(x)=x5+2x2+4的根由图1-2可知,方程的根在-1.545与-1.54之间。
1.2 数值方法非线性方程f(x)=0求根的方法有区间法和迭代法两大类,二分法、弦位法是区间法,简单迭代法和牛顿迭代法及其变形是迭代法,这里只给出二分法、简单迭代法和牛顿迭代法的构造过程。
(1)根的隔离与二分法根的隔离思想来源于连续函数的零点定理:若函数f(x)在闭区间[a,b]上连续,且f(a)f(b)<0,则方程f(x)=0在(a,b)内至少有一根x *。
二分法是最简单的求根方法,它是利用连续函数的零点定理,将含根区间逐次减半缩小,取区间的中点构造收敛点列{x n }来逼近根x *。
用该方法求f(x)=0的近似解可分两步做:第一步,确定根的近似位置或大致范围,即确定一个区间[a,b],使所求根是位于这个区间内的唯一实根。
这个区间称为根的隔离区间,这可以通过函数作图达到:先画出y=f(x)的图形,然后从图上定出它与x 轴交点的大概位置。
第二步,以根的隔离区间[a,b]的端点作为根的初始近似值,用二分法逐步改进根的近似值的精确度,直至求得满足精确度的近似解。
具体步骤如下:取[a,b]的中点x 0=(a+b)/2,若f(x 0)=0,则x 0就是f(x)=0的根x *。
若f(a)f(x 0)<0,则根x *必在区间(a,x 0)内,取a 1=a, b 1=x 0;否则根x *必在区间(x 0,b)内,取a 1=x 0, b 1=b 。
这样,得到新区间[a 1,b 1],其长度为[a,b]的一半。
如此继续下去,进行n 等分后,得到一组不断缩小的区间序列[a,b], [a 1,b 1], [a 2,b 2],…, [a n ,b n ],…,和对应区间的中点数列x n =(a n +b n )/2, n=0,1,2,…, 其中每个区间都含有根x *,满足[a,b]⊃[a 1,b 1] ⊃[a 2,b 2] ⊃…⊃ [a n ,b n ] ⊃…且每个区间的长度都是前一区间长度的一半。
由于[a n ,b n ]的长度为(b-a)/2n ,当n 不断变大时,这些区间将收敛于一点x *,该点即为所求的根。
当做到第n 步时,有1*1122||()()n n n n x x b a b a +-≤-=-选择适当的步数n ,就可达到满意的精度。
用二分法,理论上区间中点序列{x n }将收敛到根的真值,但收敛速度较慢,所以通常用二分法为其他方法提供初步的近似值。
(2)简单迭代法迭代法的基本原理是构造一个迭代公式,反复用它得出一个逐次逼近方程根的数列,数列中每一项都是方程根的近似值,只是精度不同。
简单迭代法也成逐次迭代法,是非线性方程求根中各类迭代法的基础。
由于对方程作等价变换根不发生变换,将方程f(x)=0等价变换为()x x ϕ=,构造迭代计算公式1()n n x x ϕ+=。
取定初值x 0,算出数列{x n }。
如果{x n }收敛于x *,则有**1lim lim ()(lim )()n n n n n n x x x x x ϕϕϕ+→∞→∞→∞====这说明,x *就是方程f(x)=0的根。
上面()x x ϕ=称为不动点方程,()x ϕ称为迭代函数,数列{x n }称为迭代数列。
(3)牛顿迭代法如果f(x)在[a,b]上具有二阶导数,f(a)f(b)<0,且f'(x)与f''(x)在[a,b]上保持同号,这时可采用牛顿迭代法求方程f(x)=0在(a,b)内的惟一实根。
牛顿迭代法将非线性方程线性化处理为近似方程,然后用近似方程获得求根的迭代公式。
具体做法如下:设x n 是f(x)=0的一个近似根,把f(x)在x k 处作泰勒展开,得f(x)=f(x k )+f'(x k )(x-x k )+(f''(x k )/2!)(x-x k )2+…取前两项来近似代替f(x),则得近似线性方程f(x)≈f(x k )+f'(x k )(x-x k )=0如果f'(x k )≠0,令其解为x k+1,得x k+1=x k-f(x k)/f'(x k), k=1,2,.. (1-1)上式称为f(x)=0的根的牛顿迭代格式。
牛顿法具有明显的几何意义,方程y=f(x k)+f'(x k)(x-x k)是曲线在点(x k, f(x k))处的切线方程。
迭代方程(1.1)就是切线与x轴交点的横坐标,所以牛顿迭代法就是用切线与x轴交点的横坐标近似替代曲线与x轴交点的横坐标。
因此牛顿法也称切线法,是非线性方程求根方法中收敛最快的方法。
2. matlab中方程求解的基本命令roots(p):求多项式方程的根,其中p是多项式系数按降幂排列所形成的向量。
solve(fun):求方程fun=0的符号解,如果不能求得精确的符号解,可以计算可变精度的数值解。
solve(fun,var):对指定变量var求代数方程fun=0的符号解。
fsolve(fun,x0):用最小二乘法求非线性方程fun=0在估计值x0附近的近似解。
fzero(fun,x0):求函数fun在x0附近的零点。
四、实验过程1、编写二分法求根程序,求方程x3+1.1x2+0.9x-1.4=0实根的近似值,使误差不超过10-3。
解:(1)求根的初始隔离区间在matlab工作区输入命令:ezplot x-x, grid on, hold on, ezplot('x^3+1.1*x^2+0.9*x-1.4')图1-4画出曲线图1-4。
由上图可知,根应在-2和2之间,进一步画出该部分的图形。
ezplot x-x, grid on, hold on, ezplot('x^3+1.1*x^2+0.9*x-1.4',[-2,2])图1-5由图1-5可见,根在0.5与1之间。
(2)编写程序如下:f=input('输入函数:f(x)=');qujian=input('输入区间=');err=input('输入误差=');a=qujian(1);b=qujian(2);yc=1;while ((b-a)>err)&(yc~=0)c=(a+b)/2;x=a; ya=eval(f);x=b; yb=eval(f);x=c; yc=eval(f);if ya*yc<0b=c;elsea=c;endx0=cend存为文件erfenfa.m调用erfenfa得到如下结果:>> erfenfa输入函数:f(x)='x^3+1.1*x^2+0.9*x-1.4'输入区间=[0,1]输入误差=0.001x0=0.5000x0=0.7500x0=0.6250x0=0.6875x0=0.6563x0=0.6719x0=0.6641x0=0.6680x0=0.6699x0=0.6709由此得到,方程的根的近似值为0.6709.2、编写牛顿迭代法求根程序,求1中方程x3+1.1x2+0.9x-1.4=0的实根的近似值,并计算迭代次数为6的近似根。
解:由1可知,[0.5,1]是根所在的区间,在[0.5,1]上f(x)= x3+1.1x2+0.9x-1.4f'(x)=3*x2+2.2x+0.9, f''(x)=6x+2.2f'(x)与f''(x)在[0.5, 1]上保持同号,f(1)>0与f''(1)同号,所以取x0=1为迭代初始值。