割线法求解非线性方程.doc
文本预览下载声明
割线法求解非线性方程
要求:对于给定的非线性方程以及初值可求解方程
割线法求解非线性方程的数学理论
给定非线性方程f(x)=0,选定曲线y=f(x)上的两个点p0(x0,f(x0)).p1(x1,f(x1)),过着两点作一条直线,则直线方程y=f(x1)+f(x1)-f(x0)(x-x1)/(x1-x0)。当f(x0)!=f(x1)时,直线与x轴的交点为x2=x1-f(x1)(x1-x0)/f(x1)-f(x0)时,这时用x2作为曲线y=f(x)与x轴交点的近似值,显然这里x*为f(x)=0的精确解,然后用p1(x1,f(x)),p2(x2,f(x2))构造直线,重复上述步骤,就可以求出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)/中的微商的结果,所以割线法可以被看成牛顿法的一种变形。
割线法求解非线性方程算法和流程图
输入求根区间,搜索步长和精度,利用公式(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(errdelta|(y==0),break,end
end
割线法求解非线性方程的算例实现
例题 解非线性方程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次迭代得到了满足精度要求的近似解,且f(x3)=
显示全部