【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《割线法求解非线性方程》,欢迎阅读!
割线法求解非线性方程
要求:对于给定的非线性方程以及初值可求解方程
一、 割线法求解非线性方程的数学理论
给定非线性方程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.wddqxz.cn/a4a57d4b0b1c59eef8c7b4b4.html