MATLAB应用 求解非线性方程

合集下载

matlab二分法

matlab二分法

matlab二分法MATLAB二分法是一种常用的求解非线性方程的数值解法,它通过不断地将定义域分成若干个子区间,从而找到近似解。

与梯形法和牛顿迭代法相比,MATLAB 二分法又称为“分治法”,是一种简单、直观、快速和有效的求解非线性方程的数值解法。

1. 二分法原理MATLAB 二分法是根据“分而治之”的思想来求解非线性方程的数值解的。

它的基本思想是,将定义域分成两个子区间,其中一个子区间的函数值的符号一定是固定的,另一个子区间的函数值的符号也是固定的,只有当它们的符号相反时,才能确定解存在于这两个子区间之间。

然后,再对缩小的子区间重复以上操作,进而确定非线性方程的近似解,也就是所谓的“黄金分割法”。

2. MATLAB 二分法的步骤(1)始条件首先,要将定义域分成两个子区间,在每一个子区间内,假定函数值的符号是固定的;确定迭代初值 $x_0,比如$x_0=0.5;(2)代计算求出迭代第二值 $x_1,即 $x_1=x_0+frac{b-x_0}{2},计算出$x_1$值,计算函数值的符号;(3)晕条件当求得的函数值的符号与定义域中一边的函数值的符号相反时,认为解存在于此子区间之间,继续将所取得的子区间继续缩小,直到定义域中的某两个端点接近,或者函数值的绝对值小于指定的误差范围,此时称为收敛;(4)的输出将收敛时的根 $x_n$ 作为解的输出。

3. MATLAB 二分法的优缺点(1) MATLAB 二分法的优点MATLAB 二分法具有简单、直观、快速和有效的特点,只要能够确定函数在定义域中的一边的函数值的符号,就可以求出近似解。

(2) MATLAB 二分法的缺点MATLAB 二分法容易收敛到局部极小值,而无法收敛到全局最优值;同时,它也不适用于函数值在定义域内不连续或周期变化的情况。

4. MATLAB 二分法的应用MATLAB 二分法在实际工程中广泛应用,主要用于求解非线性方程、解决二次规划问题、求解非线性最小化问题、结构优化问题等。

非线性方程组求解-Matlab-fsolve-Read

非线性方程组求解-Matlab-fsolve-Read

非线性方程组求解-Matlab-fsolve实例一:①建立文件fun.m:function y=fun(x)y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ...x(2) - 0.5*cos(x(1))+0.3*sin(x(2))];②>>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve'))注:...为续行符m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。

实例二:①建立文件fun.mfunction F=myfun(x)F=[x(1)-3*x(2)-sin(x(1));2*x(1)+x(2)-cos(x(2))];②然后在命令窗口求解:>> x0=[0;0]; %设定求解初值>> options=optimset('Display','iter'); %设定优化条件>> [x,fv]=fsolve(@myfun,x0,options) %优化求解%MATLAB显示的优化过程Norm of First-order Trust-region Iteration Func-count f(x) step optimality radius0 3 1 2 11 6 0.000423308 0.5 0.0617 12 9 5.17424e-010 0.00751433 4.55e-005 1.253 12 9.99174e-022 1.15212e-005 9.46e-011 1.25 Optimization terminated: first-order optimality is less than options.TolFun.x =0.49660.0067fv =1.0e-010 *0.31610.0018实例三:求下列非线性方程组在(0.5,0.5) 附近的数值解。

牛顿迭代法解非线性方程组(MATLAB版)

牛顿迭代法解非线性方程组(MATLAB版)

⽜顿迭代法解⾮线性⽅程组(MATLAB版)⽜顿迭代法,⼜名切线法,这⾥不详细介绍,简单说明每⼀次⽜顿迭代的运算:⾸先将各个⽅程式在⼀个根的估计值处线性化(泰勒展开式忽略⾼阶余项),然后求解线性化后的⽅程组,最后再更新根的估计值。

下⾯以求解最简单的⾮线性⼆元⽅程组为例(平⾯⼆维定位最基本原理),贴出源代码:1、新建函数fun.m,定义⽅程组1 function f=fun(x);2 %定义⾮线性⽅程组如下3 %变量x1 x24 %函数f1 f25 syms x1 x26 f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);7 f2 = sqrt(x1^2 + (x2-4)^2)-5;8 f=[f1 f2];2、新建dfun.m,求出⼀阶微分⽅程1 function df=dfun(x);2 f=fun(x);3 df=[diff(f,'x1');diff(f,'x2')]; %雅克⽐矩阵3、建⽴newton.m,执⾏⽜顿迭代过程1 clear;clc2 format;3 x0=[0 0]; % 迭代初始值4 eps = 0.00001; % 定位精度要求5for i = 1:106 f = double(subs(fun(x0),{'x1''x2'},{x0(1) x0(2)}));7 df = double(subs(dfun(x0),{'x1''x2'},{x0(1) x0(2)})); % 得到雅克⽐矩阵8 x = x0 - f/df;9if(abs(x-x0) < eps)10break;11 end12 x0 = x; % 更新迭代结果13 end14 disp('定位坐标:');15 x16 disp('迭代次数:');17 i结果如下:定位坐标:x =0.0000 -1.0000迭代次数:i =4。

x=e^x用简单迭代法matlab

x=e^x用简单迭代法matlab

x=e^x用简单迭代法matlab篇一:正文:简单迭代法是一种用于求解非线性方程的迭代方法,它的基本思想是通过不断迭代逼近方程的解。

我们将使用简单迭代法来解决方程x=e^x,并使用MATLAB 编写代码实现。

首先,我们需要将方程进行转化,使得等式左右两边的差值为零。

针对本题,我们可以将方程改写为x - e^x = 0。

接下来,我们可以通过迭代的方式逐步逼近方程的解。

假设初始值为x0,则迭代公式可以表示为x(i+1) = x(i) - f(x(i)) / f'(x(i)),其中f(x)为方程的左边项,f'(x)为f(x)的导数。

在MATLAB中,我们可以使用循环结构来实现迭代过程。

具体代码如下所示: ```% 初始值x0 = 0.5;% 迭代次数iterations = 100;% 容差tolerance = 1e-6;% 迭代过程for i = 1:iterations% 计算方程的左边项和导数f = x0 - exp(x0);f_prime = 1 - exp(x0);% 更新x的值x = x0 - f / f_prime;% 判断是否满足容差要求if abs(x - x0) < tolerancebreak;end% 更新x0的值x0 = x;end% 输出结果fprintf('方程的解为: %f', x);```在上述代码中,我们设置了初始值x0为0.5,迭代次数为100,容差为1e-6。

通过不断迭代,直到满足容差要求或达到最大迭代次数时停止迭代。

最终输出的结果即为方程的解。

通过运行以上代码,我们可以得到方程x=e^x的解为x=0.567143。

篇二:我们可以使用简单迭代法来解决方程x=e^x。

简单迭代法是一种通过不断迭代逼近解的方法。

首先,我们可以将方程x=e^x转化为x-e^x=0的形式。

然后,我们可以通过构造迭代函数来逼近方程的解。

假设迭代函数为g(x),我们可以选择将g(x)设置为x-e^x,即g(x) = x - e^x。

MATLAB应用 求解非线性方程

MATLAB应用 求解非线性方程

第7章 求解非线性方程7.1 多项式运算在MATLAB 中的实现一、多项式的表达n 次多项式表达为:n a +⋯⋯++=x a x a x a p(x )1-n 1-n 1n 0,是n+1项之和在MATLAB 中,n 次多项式可以用n 次多项式系数构成的长度为n+1的行向量表示[a0, a1,……an-1,an]二、多项式的加减运算设有两个多项式n a +⋯⋯++=x a x a x a p1(x )1-n 1-n 1n 0和m b +⋯⋯++=x b x b x b p2(x )1-m 1-m 1m 0。

它们的加减运算实际上就是它们的对应系数的加减运算。

当它们的次数相同时,可以直接对多项式的系数向量进行加减运算。

当它们的次数不同时,应该把次数低的多项式无高次项部分用0系数表示。

例2 计算()()1635223-+++-x x x xa=[1, -2, 5, 3]; b=[0, 0, 6, -1]; c=a+b例 3 设()6572532345++-+-=x x x x x x f ,()3532-+=x x x g ,求f(x)+g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; g1=[0, 0, 0, g];%为了和f 的次数找齐 f+g1, f-g1三、多项式的乘法运算conv(p1,p2)例4 在上例中,求f(x)*g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3];conv(f, g)四、多项式的除法运算[Q, r]=deconv(p1, p2)表示p1除以p2,给出商式Q(x),余式r(x)。

Q,和r 仍为多项式系数向量 例4 在上例中,求f(x)/g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3];[Q, r]=deconv(f, g)五、多项式的导函数p=polyder(P):求多项式P 的导函数p=polyder(P ,Q):求P ·Q 的导函数[p,q]=polyder(P ,Q):求P/Q 的导函数,导函数的分子存入p ,分母存入q 。

关于采用matlab进行指定非线性方程拟合的问题

关于采用matlab进行指定非线性方程拟合的问题

关于采用matlab进行指定非线性方程拟合的问题(1)※1。

优化工具箱的利用函数描述LSQLIN 有约束线性最小二乘优化LSQNONNEG 非负约束线性最小二乘优化问题当有约束问题存在的时候,应该采用上面的方法代替Polyfit与反斜线(\)。

具体例子请参阅优化工具箱文档中的相应利用这两个函数的例子。

d. 非线性曲线拟合利用MATLAB的内建函数函数名描述FMINBND 只解决单变量固定区域的最小值问题FMINSEARCH 多变量无约束非线性最小化问题(Nelder-Mead 方法)。

下面给出一个小例子展示一下如何利用FMINSEARCH1.首先生成数据>> t=0:.1:10;>> t=t(:);>> Data=40*exp(-.5*t)+rand(size(t)); % 将数据加上随机噪声2.写一个m文件,以曲线参数作为输入,以拟合误差作为输出function sse=myfit(params,Input,Actural_Output)A=params(1);lamda=params(2);Fitted_Curve=A.*exp(-lamda*Input);Error_Vector=Fitted_Curve-Actural_Output;%当曲线拟合的时候,一个典型的质量评价标准就是误差平方和sse=sum(Error_Vector.^2);%当然,也可以将sse写作:sse=Error_Vector(:)*Error_Vector(:);3.调用FMINSEARCH>> Strarting=rand(1,2);>> options=optimset('Display','iter');>> Estimates=fiminsearch(@myfit,Strarting,options,t,Data);>> plot(t,Data,'*');>> hold on>> plot(t,Estimates(1)*exp(-Estimates(2)*t),'r');Estimates将是一个包含了对原数据集进行估计的参数值的向量。

Matlab非线性方程数值解法

Matlab非线性方程数值解法

Matlab⾮线性⽅程数值解法实验⽬的⽤Matlab实现⾮线性⽅程的⼆分法、不动点迭代法实验要求1. 给出⼆分法算法和不动点迭代算法2. ⽤Matlab实现⼆分法3. ⽤Matlab实现不动点迭代法实验内容(1)在区间[0,1]上⽤⼆分法和不动点迭代法求的根到⼩数点后六位。

(2)⼆分法的基本思想:逐步⼆分区间[a,b],通过判断两端点函数值的符号,进⼀步缩⼩有限区间,将有根区间的长度缩⼩到充分⼩,从⽽,求得满⾜精度要求的根的近似值。

(3)不动点迭代法基本思想:已知⼀个近似根,构造⼀个递推关系(迭代格式),使⽤这个迭代格式反复校正根的近似值,计算出⽅程的⼀个根的近似值序列,使之逐步精确法,直到满⾜精度要求(该序列收敛于⽅程的根)。

实验步骤(1)⼆分法算法与MATLAB程序(⼆分法的依据是根的存在性定理,更深地说是介值定理)。

MATLAB程序,1 %⼆分法2 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep3 %输出:近似根root,迭代次数k4 function [root,k]=bisect(fun,a,b,ep)5if nargin>36 elseif nargin<47 ep=1e-5;%默认精度8else9 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]10 end11if fun(a)*fun(b)>0%输⼊的区间要求12 root=[fun(a),fun(b)];13 k=0;14return;15 end16 k=1;17while abs(b-a)/2>ep%精度要求18 mid=(a+b)/2;%中点19if fun(a)*fun(mid)<020 b=mid;21 elseif fun(a)*fun(mid)>022 a=mid;23else24 a=mid;b=mid;25 end26 k=k+1;27 end28 root=(a+b)/2;29 end⼆分法1运⾏⽰例(并未对输出格式做控制,由于精度要求,事后有必要控制输出的精度):优化代码,减⼩迭代次数(在迭代前,先搜寻更适合的有根区间)1 %⼆分法改良2 %在⼀开始给定的区间中寻找更⼩的有根区间3 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep4 %输出:近似根root,迭代次数k5 %得到的根是优化区间⾥的最⼤根6 function [root,k]=bisect3(fun,a,b,ep)7if nargin>38 elseif nargin<49 ep=1e-5;%默认精度10else11 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]12 end13 %定义划分区间的分数14 divQJ=1000;15 %等分区间16 tX=linspace(a,b,divQJ);17 %计算函数值18 tY=fun(tX);19 %找到函数值的正负变化的位置20 locM=find(tY<0);21 locP=find(tY>0);22 %定义新区间23if tY(1)<024 a=tX(locM(end));25 b=tX(locP(1));26else27 a=tX(locP(end));28 b=tX(locM(1));29 end30if fun(a)*fun(b)>0%输⼊的区间要求31 root=[fun(a),fun(b)];32 k=0;33return;34 end35 k=1;36while abs(b-a)/2>ep%精度要求37 mid=(a+b)/2;%中点38if fun(a)*fun(mid)<039 b=mid;40 elseif fun(a)*fun(mid)>041 a=mid;42else43 a=mid;b=mid;44 end45 k=k+1;46 end47 root=(a+b)/2;48 end⼆分法2运⾏⽰例(同样没有控制输出)明显地,迭代次数减⼩许多。

牛顿法matlab程序及例题

牛顿法matlab程序及例题

牛顿法matlab程序及例题牛顿法是一种求解非线性方程组的常用方法,它的基本思想是通过迭代逐步逼近方程组的根。

在matlab中,可以通过编写相应的程序来实现牛顿法,并且可以通过一些例题来深入理解其应用。

下面是一份牛顿法的matlab程序:function [x, fval, exitflag, output] = mynewton(fun, x0, tol, maxiter)% fun:非线性方程组的函数句柄% x0:初始点% tol:允许误差% maxiter:最大迭代次数x = x0;fval = feval(fun, x);iter = 0;output = [];while norm(fval) > tol && iter < maxiteriter = iter + 1;J = myjacobian(fun, x);dx = - J fval;x = x + dx;fval = feval(fun, x);output = [output; [x', norm(fval)]];endif norm(fval) <= tolexitflag = 0; % 成功求解elseexitflag = 1; % 未能求解end% 计算雅可比矩阵function J = myjacobian(fun, x)n = length(x);fval = feval(fun, x);J = zeros(n);h = sqrt(eps); % 微小的增量for j = 1:nxj = x(j);x(j) = xj + h;fval1 = feval(fun, x);x(j) = xj - h;fval2 = feval(fun, x);x(j) = xj;J(:, j) = (fval1 - fval2) / (2 * h);end接下来,我们可以通过一个例题来演示牛顿法的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章 求解非线性方程7.1 多项式运算在MATLAB 中的实现一、多项式的表达n 次多项式表达为:n a +⋯⋯++=x a x a x a p(x )1-n 1-n 1n 0,是n+1项之和 在MATLAB 中,n 次多项式可以用n 次多项式系数构成的长度为n+1的行向量表示[a0, a1,……an-1,an]二、多项式的加减运算 设有两个多项式na +⋯⋯++=x a x a x a p1(x )1-n 1-n 1n 0和m b +⋯⋯++=x b x b x b p2(x )1-m 1-m 1m 0。

它们的加减运算实际上就是它们的对应系数的加减运算。

当它们的次数相同时,可以直接对多项式的系数向量进行加减运算。

当它们的次数不同时,应该把次数低的多项式无高次项部分用0系数表示。

例2 计算()()1635223-+++-x x x x a=[1, -2, 5, 3]; b=[0, 0, 6, -1]; c=a+b例3 设()6572532345++-+-=x x x x x x f ,()3532-+=x x x g ,求f(x)+g(x)f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; g1=[0, 0, 0, g];%为了和f 的次数找齐f+g1, f-g1三、多项式的乘法运算 conv(p1,p2)例4 在上例中,求f(x)*g(x) f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; conv(f, g)四、多项式的除法运算[Q, r]=deconv(p1, p2)表示p1除以p2,给出商式Q(x),余式r(x)。

Q,和r 仍为多项式系数向量 例4 在上例中,求f(x)/g(x) f=[3, -5, 2, -7, 5, 6]; g=[3, 5, -3]; [Q, r]=deconv(f, g) 五、多项式的导函数p=polyder(P):求多项式P 的导函数 p=polyder(P,Q):求P·Q 的导函数[p,q]=polyder(P,Q):求P/Q 的导函数,导函数的分子存入p ,分母存入q 。

参数P,Q 是多项式的向量表示,p,q 也是多项式的向量表示。

例4 求有理分式()100765105853*********--+++-+-+=x x x x x x x x x x f 的导函数P=[3, 5, 0, -8, 1, -5]; %有理分式分子 Q=[10, 5, 0, 0, 6, 0, 0, 7, -1, 0, -100]; %有理分式分母 [p,q]=polyder(P,Q) 六、多项式求根多项式求根就是求满足多项式p(x)=0的x 值。

N 次多项式应该有n 个根。

这些根可能是实根,也可能是若干对共轭复根。

其调用格式是x=roots(P)其中P 为多项式的系数向量,求得的根赋给向量x ,即x(1),x(2),…,x(n)分别代表多项式的n 个根。

该命令每次只能求一个一元多项式的根,该指令不能用于求方程组的解,必须把多项式方程变成P n (x) = 0的形式;例4 求方程123+=x x 的解。

首先将方程变成P n (x) = 0的形式:0123=--x xroots([1 -1 0 -1])例5 求多项式x 4+8x 3-10的根。

A=[1,8,0,0,-10]; x=roots(A)若已知多项式的全部根,则可以用poly 函数建立起该多项式,其调用格式为:P=poly(x)若x 为具有n 个元素的向量,则poly(x)建立以x 为其根的多项式,且将该多项式的系数赋给向量P 。

例6 已知 f(x)=3x 5+4x 3-5x 2-7.2x+5 (1) 计算f(x)=0 的全部根。

(2) 由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。

P=[3,0,4,-5,-7.2,5];X=roots(P) %求方程f(x)=0的根 G=poly(X) %求多项式g(x) 将这个结果乘以3,就与f(x)一致7.2 求解非线性方程f ( x ) = 0方程求根的一般形式是求下列方程的根:f ( x ) = 0 (l)实际上,就是寻找使函数 f ( x )等于零的变量x ,所以求方程(l )的根,也叫求函数 f ( x )的零点。

如果变量x 是列阵,则方程(l )就代表方程组。

当方程(l )中的函数 f (x )是有限个指数、对数、三角、反三角或幂函数的组合时,则方程(l )被称为超越方程,例如 e -x - sin (πx / 2 ) +lnx = 0 就是超越方程。

当方程(l )中的函数f (x )是多项式时,即 f (x )=P n (x )= a n x n + a n-1x n + … + a l x + a 0,则方程(l )就成为下面的多项式方程,也称代数方程:P n (x )= a n x n + a n-1x n + … + a l x + a 0 = 0 ( 2 )P n (x )的最高次数n 等于2、3时,用代数方法可以求出方程(2)的解析解,但是,当n ≥ 5时,伽罗瓦(Galois )定理已经证明它是没有代数求根方法的。

至于超越方程,通常很难求出其解析解。

所以,方程(l )的求解经常使用作图法或数值法,而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。

本章首先介绍求解 f ( x ) = 0 的 MATLAB 符号法指令,然后介绍求方程数值解的基本原理,最后再介绍求解 f ( x ) = 0 的 MATLAB 数值法指令。

一、符号方程求解在MATLAB 中,求解用符号表达式表示的代数方程可由函数solve 实现,其调用格式为:solve(s):求解符号表达式s 的代数方程,求解变量为默认变量。

当方程右端为0时,方程可以不标出等号和0,仅标出方程的左端。

solve(s,v):求解符号表达式s 的代数方程,求解变量为v 。

solve(s1,s2,…,sn,v1,v2,…,vn):求解符号表达式s1,s2,…,sn 组成的代数方程组,求解变量分别v1,v2,…,vn 。

例1. 解下列方程。

1.22144212-+=-++x x x x x= solve('1/(x+2)+4*x/(x^2-4)=1+2/(x-2)', 'x')2.17433=---x x x f=sym('x-(x^3-4*x-7)^(1/3)=1') x= solve(f)3.143sin 2=⎪⎭⎫ ⎝⎛-πxx= solve('2*sin(3*x-pi/4)=1') 4.010=-+x xe xx= solve('x+x*exp(x)-10', 'x') %仅标出方程的左端 二、求方程f ( x ) = 0数值解的基本方法并非所有的方程 f ( x ) = 0 都能求出精确解或解析解,不存在这种解的方程就需要用数值解法求出近似解,有几种常见的数值解法基本原理:二分法。

1 求实根的二分法原理设方程 f (x) =0中的函数 f ( x )为实函数,且满足:① 函数 f (x )在[ a , b]上单调、连续;② 方程 f (x) = 0 在(a , b )内只有一个实根 x*。

则求方程 f (x) = 0 的根,就是在(a, b )内找出使f (x )为零的点x*:f (x*) = 0 ,即求函数 f ( x ) 的零点。

因为 f (x )单调连续,由连续函数的性质可知,若任意两点aj ,bj ∈[ a , b] ,而且满足条件 f (aj) f (bj) < 0 ,则闭区间[aj , bj] 上必然存在方程的根x*,即 x*∈[aj , bj]。

据此原理提出求实根的二分法如下图所示,图1 方程求根二分法原理示意图先用中点21ba b +=将区间[a, b]平分为两个子区间 (a,b 1)和(b 1, b),方程的根必然在子区间两端点上函数值之积小于零的那一半中,即不在(a ,b 1)内,就在(b 1 ,b )内,除非 f(b 1) = 0 ,于是寻根的范围缩小了一半。

图1中的根x*在区间中点左侧,即 x*∈(a , b l )。

再将新的含根区间( a , b 1)分成两半,重复上述步骤确定出更新的含根子区间。

如此重复n 次,设含根区间缩小为(a n , b n ),则方程的根x*∈(a n , b n ), 这一系列含根的子区间满足:( a , b ) D ⊃ ( a l , b l ) ⊃ ( a 2 , b 2 ) ⊃ … ⊃ ( a 0, b 0)⊃ …由于含根区间范围每次减半,子区间的宽度为n n n ab a b 2-=- (n = 1,2,….),显然当n →∞时,(b n 一a n )→0,即子区间收敛于一点x*,这个点就是方程的根。

若n 为有限整数,取最后一个子区间的中点2nn n b a x +=作为方程根的近似值,它满足 f ( x n )≈0 ,于是有:12221*+-=-⋅≤-n n n a b a b x x 这就是近似值x n 的绝对误差限。

假定预先要求的误差为ε,由12+-<n ab ε便可以求出满足误差要求的最小等分次数n 。

下面是二分法的程序function [c,err,yc] =bisect (f,a,b,delta)%Input - f is the function input as a string ‘f ’ % - a and b are the left and right end points %. - delta is the tolerance %Output - c is the zero % - yc=f(c)% - err is the error estimate for c ya=feval (f,a); yb=feval (f,b);if ya*yb>0, break, end %表示无解,结束maxl=l+round( (log (b-a) -log (delta))/log (2)); %从误差表达式得到最小等分次数n for k=1:max1c=(a+b)/2; %取区间中点 yc=feval (f,c); if yc==0 a=c;b=c; %这时解已经找到 elseif yb*yc>0 b=c; %区间减半 yb=yc; else •a=c; ya=yc; endif b-a < delta, break, end endc=(a+b)/2; err=abs(b-a); yc=feval (f, c)2 迭代法迭代法是计算数学中的一种重要方法,用途很广,求解线性方程组和矩阵特征值时也要用到它。

相关文档
最新文档