MATLAB求代数方程的近似根(解)

合集下载

matlab用二分法求方程近似根

matlab用二分法求方程近似根

matlab用二分法求方程近似根在MATLAB中,可以使用以下代码使用二分法求解方程的近似根:```matlabfunction root = bisection_method(func, a, b, tol, max_iter)% 输入参数:% func: 待求解方程的函数句柄% a, b: 取值范围% tol: 容差% max_iter: 最大迭代次数fa = func(a);fb = func(b);if fa * fb > 0error('在该区间内没有根存在');endfor k = 1:max_iterc = (a + b) / 2;fc = func(c);if abs(fc) < tolroot = c;return;endif fa * fc < 0b = c;fb = fc;elsea = c;fa = fc;endenderror('未达到收敛条件');end```使用该函数时,首先需要定义待求解方程的函数句柄。

例如,若要求解方程x^2 - 4 = 0的近似根,则可以定义如下函数:```matlabfunction f = equation(x)f = x^2 - 4;end```然后,可以通过调用`bisection_method`函数求解方程的近似根:```matlaba = 1; % 取值范围的下界b = 3; % 取值范围的上界tol = 1e-6; % 容差max_iter = 100; % 最大迭代次数root = bisection_method(@equation, a, b, tol, max_iter);disp(root);```在上述代码中,设置了取值范围的下界为1,上界为3,容差为1e-6,最大迭代次数为100。

运行代码后,MATLAB将输出方程的一个近似根。

MATLAB求根的几种方法

MATLAB求根的几种方法

1.roots求解多项式的根r=roots(c)注意:c为一维向量,者返回指定多项式的所有根(包括复根),poly和roots是互为反运算,还有就是roots只能求解多项式的解还有下面几个函数poly2sym、sym2poly、eig>>syms x>>y=x^5+3*x^3+3;>>c=sym2poly(y);%求解多项式系数>>r=roots(c);>>poly(r)2.residue求留数[r, p, k] = residue(b,a)>>b = [ 5 3 -2 7]>>a = [-4 0 8 3]>>[r, p, k] = residue(b,a)3.solve符号解方程(组)——使用最多的g = solve(eq1,eq2,...,eqn,var1,var2,...,varn)注意:eqn和varn可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=”号,假如说varn没有给出,使用findsym函数找出默认的求解变量。

返回的g是一个结构体,以varn为字段。

由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法解方程A=solve('a*x^2 + b*x + c')解方程组B=solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6')4.fzero数值求零点[x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...)fun是目标函数,可以是句柄(@)、inline函数或M文件名x0是初值,可以是标量也可以是长度为2的向量,前者给定一个位置,后者是给定一个范围options是优化参数,通过optimset设置,optimget获取,一般使用默认的就可以了,具体参照帮助p1,p2...为需要传递的其它参数假如说(x/1446)^2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1/5.3)*x/1446)=0的根,其中p,t是已知参数,但是每次都改变那么目标函数如下三种书写格式,效果完全等效。

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种方法,求方程的正的近似根,.(建议取.时间许可的话,可进一步考虑的情况.)。

求代数方程的近似根(解).

求代数方程的近似根(解).

主要内容
本实验讨论的数值算法
对分法 不动点迭代法
不动ห้องสมุดไป่ตู้迭代一般形式 松弛加速迭代法
牛顿迭代法
8
不动点迭代法
基本思想 构造 f (x) = 0 的一个等价方程:x 从某个近似根 x0 出发,计算
( x)
xk 1 ( xk )
得到一个迭代序列
k = 0, 1, 2, ... ...
11
k
迭代法收敛性判断
q 越小,迭代收敛越快
’(x*) 越小,迭代收敛越快
以上所给出的收敛性定理中的条件的验证都比较 困难,在实际应用中,我们常用下面不严格的判别 方法:
当有根区间 [a, b] 较小,且对某一 x0[a, b] ,
|’(x0)| 明显小于 1 时,则我们就认为迭代收敛 例:用不动点迭代法求 x3 - 3x + 1 = 0 在 [0, 1] 中的解。
例:用对分法求 x3 - 3x + 1 = 0 在 [0, 1] 中的解。(fuluA.m)
6
对分法收敛性
收敛性分析
根据上面的算法,我们可以得到一个每次缩小一半的 区间序列 {[ak , bk ]} ,在 (ak , bk ) 中含有方程的根。 设方程的根为 x* (ak , bk ) ,又 xk
基本思想
将有根区间进行对分,判断出解在某个分段内,然后 再对该段对分,依次类推,直到满足给定的精度为止
数学原理:介值定理
设 f(x) 在 [a, b] 上连续,且 f(a) f(b)<0,则由介值定 理可得,在 (a, b) 内至少存在一点 使得 f()=0
适用范围
求有根区间内的 单重实根 或 奇重实根

matlab中方程根的近似计算

matlab中方程根的近似计算

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求代数方程的近似根(解)

相关概念
线性方程 与 非线性方程
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程序

用迭代法求方程的根的matlab程序迭代法是一种求解方程根的常用方法,它通过不断逼近根的方法来求解方程的解。

在matlab中,我们可以通过编写程序来实现迭代法求解方程的根。

我们需要确定迭代公式。

对于一般的方程f(x)=0,我们可以通过将其转化为x=g(x)的形式,然后通过不断迭代g(x)来逼近方程的根。

具体来说,我们可以选择一个初始值x0,然后通过迭代公式x(i+1)=g(x(i))来不断逼近方程的根。

当x(i+1)与x(i)的差值小于一定的精度要求时,我们就认为已经找到了方程的根。

下面是一个简单的matlab程序,用于求解方程x^2-2=0的根:function [x] = iteration_method()% 迭代法求解方程x^2-2=0的根% 初始值x0=1.5,精度要求为1e-6x0 = 1.5; % 初始值eps = 1e-6; % 精度要求% 迭代公式g = @(x) (x + 2/x)/2;x = x0;while abs(x - g(x)) > epsx = g(x);endend在这个程序中,我们首先定义了初始值x0和精度要求eps。

然后,我们定义了迭代公式g(x),即x(i+1)=(x(i)+2/x(i))/2。

最后,我们通过while循环来不断迭代x,直到满足精度要求为止。

当我们运行这个程序时,就可以得到方程x^2-2=0的根,即x=1.414213。

这个结果与方程的实际根非常接近,说明迭代法是一种有效的求解方程根的方法。

迭代法是一种常用的求解方程根的方法,它通过不断逼近根的方法来求解方程的解。

在matlab中,我们可以通过编写程序来实现迭代法求解方程的根。

通过这种方法,我们可以快速、准确地求解各种复杂的方程,为科学研究和工程实践提供了有力的支持。

matlab计算方程的根

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中,我们可以利用不动点迭代法来求解方程的根,下面我将详细介绍该方法的原理和使用步骤。

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;实验:方程求根求方程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实验报告--求代数方程的近似根

数学实验报告实验序号: 日期: 年 月 日班级姓名学号实验名称:求代数方程的近似根 问题背景描述:求代数方程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代码

不同方法求方程的根matlab代码

不同方法求方程的根matlab代码1、%使用二分法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('二分法')a=0.2;b=0.26;tol=0.0001;n0=10;fa=600*(a.^4)-550*(a.^3)+200*(a.^2)-20*a-1;for i=1:n0p=(a+b)/2;fp=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;if fp==0||(abs((b-a)/2)<tol)< p="">disp('用二分法求得方程的根p=')disp(p)disp('二分迭代次数为:')disp(i)break;endif fa*fp>0a=p;else b=p;endendif i==n0&&~(fp==0||(abs((b-a)/2)<tol))< p="">disp(n0)disp('次二分迭代后没有求出方程的根')end2、%使用牛顿法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('牛顿法')p0=0.3;for i=1:n0p=p0-(600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1)./(2400*(p0.^3) -1650*p0.^2+400*p0-20);if(abs(p-p0)<tol)< p="">disp('用牛顿法求得方程的根p=')disp(p)disp('牛顿迭代次数为:')disp(i)break;endp0=p;endif i==n0&&~(abs(p-p0)<tol)< p="">disp(n0)disp('次牛顿迭代后没有求出方程的根')end3、%使用割线法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('割线法')p0=0.2;p1=0.25;q0=600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1;q1=600*(p1.^4)-550*(p1.^3)+200*(p1.^2)-20*p1-1;for i=2:n0p=p1-q1*(p1-p0)/(q1-q0);if abs(p-p1)<tol< p="">disp('用割线法求得方程的根p=')disp(p)disp('割线法迭代次数为:')disp(i)break;endp0=p1;q0=q1;pp=p1;p1=p;q1=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;endif i==n0&&~(abs(p-pp)<tol)< p="">disp(n0)disp('次割线法迭代后没有求出方程的根')end4、%使用试位法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('试位法')p0=0.2;p1=0.25;q0=600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1;q1=600*(p1.^4)-550*(p1.^3)+200*(p1.^2)-20*p1-1;for i=2:n0p=p1-q1*(p1-p0)/(q1-q0);if abs(p-p1)<tol< p="">disp('用试位法求得方程的根p=')disp(p)disp('试位法迭代次数为:')disp(i)break;endq=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;if q*q1<0p0=p1;q0=q1;endpp=p1;p1=p;q1=q;endif i==n0&&~(abs(p-pp)<tol)< p="">disp(n0)disp('次试位法迭代后没有求出方程的根')end5、%使用muller方法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('muller法')x0=0.1;x1=0.2;x2=0.25;h1=x1-x0;h2=x2-x1;d1=((600*(x1.^4)-550*(x1.^3)+200*(x1.^2)-20*x1-1)-(600*(x0.^4)-55 0*(x0.^3)+200*(x0.^2)-20*x0-1))/h1;d2=((600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)-(600*(x1.^4)-55 0*(x1.^3)+200*(x1.^2)-20*x1-1))/h2;d=(d2-d1)/(h2+h1);for i=3:n0b=d2+h2*d;D=(b*b-4*(600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)*d)^0.5;if(abs(d-D)<abs(d+d))< p="">E=b+D;else E=b-D;endh=-2*(600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)/E;p=x2+h;if abs(h)<tol< p="">disp('用muller方法求得方程的根p=')disp(p)disp('muller方法迭代次数为:')disp(i)break;endx0=x1;x1=x2;x2=p;h1=x1-x0;h2=x2-x1;d1=((600*(x1.^4)-550*(x1.^3)+200*(x1.^2)-20*x1-1)-(600*(x0.^4)-55 0*(x0.^3)+200*(x0.^2)-20*x0-1))/h1;d2=((600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)-(600*(x1.^4)-55 0*(x1.^3)+200*(x1.^2)-20*x1-1))/h2;d=(d2-d1)/(h2+h1);endif i==n0%条件有待商榷?!disp(n0)disp('次muller方法迭代后没有求出方程的根') end</tol<></abs(d+d))<></tol)<></tol<></tol)<></tol<></tol)<></tol)<></tol))<></tol)<>。

Matlab 求代数方程的近似解

Matlab 求代数方程的近似解
k k k


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代数方程近似解
inline、字符串、或 @,但不能是方程或符号表达式!
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

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解代数方程

用Matlab解代数方程

一般的代数方程函数solve用于求解一般代数方程的根,假定S为符号表达式,命令solve (S)求解表达式等于0的根,也可以再输入一个参数指定未知数。

例:syms a b c xS=a*x^2+b*x+c;solve(S)ans=[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))][ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]b=solve(S,b)b =-(a*x^2+c)/x线性方程组线性方程组的求解问题可以表述为:给定两个矩阵A和B,求解满足方程AX=B或XA=B的矩阵X。

方程AX=B的解用X=A\B或X=inv (A)*B表示;方程XA=B 的解用X=B/A或X=B*inv (A)表示。

不过斜杠和反斜杠运算符计算更准确,占用内存更小,算得更快。

线性微分方程函数dsolve用于线性常微分方程(组)的符号求解。

在方程中用大写字母D表示一次微分,D2,D3分别表示二阶、三阶微分,符号D2y相当于y关于t的二阶导数。

函数dsolve的输出方式格式说明y=dsolve(‘Dyt=y0*y’) 一个方程,一个输出参数[u,v]=dsolve(‘Du=v’,’Dv=u’) 两个方程,两个输出参数S=dsolve(‘Df=g’,’Dg=h’,’Dh=-2*f ‘)方程组的解以S.fS.g S.h结构数组的形式输出例1 求 21u dtdu += 的通解.解 输入命令:dsolve('Du=1+u^2','t')结果:u = tg(t-c)例2 求微分方程的特解.ïîïíì===++15)0(',0)0(029422y y y dxdydx y d 解输入命令: y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')结果为: y =3e -2x sin (5x )例3 求微分方程组的通解.ïïïîïïïíì+-=+-=+-=z y x dtdz zy x dtdyz y x dt dx244354332解输入命令:[x,y,z]=dsolve('Dx=2*x-3*y+3*z','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z', 't');x=simple(x) % 将x 化简y=simple(y)z=simple(z)结果为:x = (c 1-c 2+c 3+c 2e -3t -c 3e -3t )e 2ty = -c 1e -4t +c 2e -4t +c 2e -3t -c 3e -3t +(c 1-c 2+c 3)e 2t z = (-c 1e -4t +c 2e -4t +c 1-c 2+c 3)e 2t非线性微分方程注意:1、在解n个未知函数的方程组时,x0和x均为n维向量,m-文件中的待解方程组应以x的分量形式写成.2、使用Matlab软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组.例4 ïîïíì===---0)0(';2)0(0)1(1000222x x x dtdx x dt x d 解: 令y 1=x ,y 2=y 1’则微分方程变为一阶微分方程组:ïîïíì==--==0)0(,2)0()1(1000''211221221y y y y y y y y 1、建立m-文件vdp1000.m 如下:function dy=vdp1000(t,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=1000*(1-y(1)^2)*y(2)-y(1);2、取t 0=0,t f =3000,输入命令:[T,Y]=ode15s('vdp1000',[0 3000],[2 0]); plot(T,Y(:,1),'-')3、结果如图50010001500200025003000-2.5-2-1.5-1-0.500.511.52例5 解微分方程组.ïïîïïíì===-=-==1)0(,1)0(,0)0(51.0'''321213312321y y y y y y y y y y y y 解1、建立m-文件rigid.m 如下:function dy=rigid(t,y)dy=zeros(3,1);dy(1)=y(2)*y(3);dy(2)=-y(1)*y(3);dy(3)=-0.51*y(1)*y(2);2、取t 0=0,t f =12,输入命令:[T,Y]=ode45('rigid',[0 12],[0 1 1]);plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+')3、结果如图24681012-1-0.8-0.6-0.4-0.200.20.40.60.81图中,y 1的图形为实线,y 2的图形为“*”线,y 3的图形为“+”线.例6 Lorenz 模型的状态ïîïíì-+-=+-=+-=)()()()()()()()()()()()(322133223221t x t x t x t x t xt x t x t xt x t x t x t x r s s b &&& 若令3/8,28,10===b r s 且初值为e ===)0(,0)0()0(321x x x ,e 为一个小常数,假设1010-=e。

MATLAB求方程根

MATLAB求方程根

运用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)对比可得,牛顿迭代的收敛速度比较快。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k = polyder(p) k = polyder(p,q) [k,d] = polyder(p,q)
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是解方程组的,目标函数一般比较烦,直接 写比较困难
>> p=[2,-1,0,3]; >> x=roots(p)
若已知多项式的全部零点,则可用 poly 函数给出该多 x2 ) (x xn )
多项式运算小结
poly2sym(p,’x’) k = conv(p,q)
[k,r] = deconv(p,q)
多项式的值
矩阵多项式求值
Y=polyvalm(p,X)
采用的是普通矩阵运算 X 必须是方阵
例:已知 p(x) 2x3 x2 3,则
polyvalm(p,A) = 2*A*A*A - A*A + 3*eye(size(A)) polyval(P,A) = 2*A.*A.*A - A.*A + 3*ones(size(A))
例:解方程组

x
2yz xz3
2
x 3y 8
>> A=[1 2 –1; 1 0 1; 1 3 0]; >> b=[2;3;8]; >> x=linsolve(A,b)
b是列向量!
非线性方程的根
Matlab 非线性方程的数值求解 fzero(f,x0):求方程 f=0 在 x0 附近的根。
optimset('Display','off'))
>>function f=myfun(x) f=[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]; >>[xy,f,exit]=fsolve(@myfun,[0.5,0.5]', optimset('Display','off'))
例:解方程组
uy2

vz

w

0 关于y,z的解
yzw0
>>[y,z]=solve('u*y^2+v*z+w=0','y+z+w=0','y','z
') >>S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z ') >>disp('S.y'),disp(S.y),disp('S.z'),disp(S.z)
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间 两个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因 此它无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点。
多项式四则运算
多项式加减运算
Matlab 没有提供专门进行多项式加减运算的函数,事实 上,多项式的加减就是其所对应的系数向量的加减运算
对于次数相同的多项式,可以直接对其系数向量进行 加减运算;
如果两个多项式次数不同,则应该把低次多项式中系 数不足的高次项用 0 补足,然后进行加减运算。
例: p1 2x3 x2 3
例:解方程组
x

y
0.6sin x 0.3cos 0.6cos x 0.3sin
y y

0 0
>>fun='[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]';
>>[xy,f,exit]=fsolve(fun,[0.5,0.5]',…
例:已知 p(x) 2x3 x2 3,q(x) 2x 1 , 求 p',( p q)',( p / q)'
>> k1=polyder([2,-1,0,3]); >> k2=polyder([2,-1,0,3],[2,1]); >> [k2,d]=polyder([2,-1,0,3],[2,1]);
>> p=[2,-1,0,3]; >> x=[-1, 2;-2,1];polyval(p,x) >> polyvalm(p,x)
多项式的零点
x=roots(p):若 p 是 n 次多项式,则输出是 p=0 的 n 个根组成的 n 维向量。
例:已知 p(x) 2x3 x2 3,求 p(x) 的零点。
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x): 计算多项式 p 在 x 点的值
注:若 x 是向量或矩阵,则采用数组运算 (点运算)!
例:已知 p(x) 2x3 x2 3,分别取 x=2 和一个 22 矩阵, 求 p(x) 在 x 处的值
>> p=[2,-1,0,3]; >> x=2; y=polyval(p,x) >> x=[-1, 2;-2,1]; y=polyval(p,x)
solve 在得不到解析解时,会给出数值解。
例:解方程组
x 2 y z 27

x

z

3
x5 3 y2 28
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ...
'x^5+3*y^2=28','x','y','z')
一般非线性方程数值解
相关文档
最新文档