割线法求解非线性方程
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
割线法求解非线性方程 要求:对于给定的非线性方程以及初值可求解方程 一、 割线法求解非线性方程的数学理论 给定非线性方程f(x)=0,选定曲线y=f(x)上的两个点p0(x0,f(x0)).p1(x1,f(x1)),过着两点作一条直线p0p1,则直线方程y=f(x1)+f(x1)-f(x0)(x-x1)/(x1-x0)。当f(x0)!=f(x1)时,直线p0p1与x轴的交点为x2=x1-f(x1)(x1-x0)/f(x1)-f(x0)时,这时用x2作为曲线y=f(x)与x轴交点的近似值,显然x2x*(minx1x*,x0x*)这里x*为f(x)=0的精确解,然后用p1(x1,f(x)),p2(x2,f(x2))构造直线p1p2,重复上述步骤,就可以求出x3。 如此进行下去,就可得到迭代格式 x(k+1)=xk-f(xk)(xk-x(k-1))/f(xk)-f(x(k-1)) (k=0,1,…) (1) 迭代格式(1)实际上就是用均差f(xk)-f(x(k-1))/(xk)-x(k-1)取代牛顿公式x(k+1)=xk-f(xk)/f'(xk)中的微商f'(x)的结果,所以割线法可以被看成牛顿法的一种变形。 二、 割线法求解非线性方程算法和流程图 输入求根区间,搜索步长和精度,利用公式(1)迭代,得到值后计算精度,如果精度没有达到继续迭代,达到精度后输出结果。 三、 割线法求解非线性方程的Matlab实现 function[p1,err,k,y]=secant(f,p0,p1delta,max1) %f是给定的非线性函数 %p0,p1为初始值 %delta为给定误差界 %max1迭代次数的上限 %p1为所求得的方程的近似解 %err为p1-p0的绝对值 %k为所需要的迭代次数 %y=f(p1) k=0,p0,p1,feval(`f`,p0),feval(`f`,p(0)) for k=1:max1 p2=p1-feval(`f`,p1)*(p1-p0)/(feval(`f`,p1)-feval(`f`,p0)) err=abs(p2-p1); p0=p1; p1=p2; k,p1,err,y=feval(`f`,p1) if(errend
四、 割线法求解非线性方程的算例实现
例题 解非线性方程x^3-x+2=0,给定处置为p0=1.5,p=-1.52,误差界为10^-6。 先用一个名为f.m的文件定义f(x)=x^3-x+2。 function y=f(x) y=x^3-x+2;
然后在命令窗口中输入
>>secant(`f`,-1.5,-1.52.10^(-6),11) 回车得到如下结果: k=0
p0=-1.5000 p1=-1.5200 ans=0.1250 ans=0.0082 k=1
p1=-1.5214 err=0.0014 y=-1.3633e-004 k=2
p1=-1.5214 err=2,2916e-005 y=1.4454e007 k=3
p1=-1.5214 err2.4318e-008 y=2.5460e-012 ans=-1.5214
以上表明,经过3次迭代得到了满足精度要求的近似解x*x31.5214,且f(x3)=2.5461012
本文来源:https://www.wddqw.com/doc/a4a57d4b0b1c59eef8c7b4b4.html