资源描述
二分法求解单变量非线性方程及其应用与实现
论文摘要:本文主要通过一个实例来研究单变量非线性方程f=0的二分法求解及此方法的收敛性,根据误差估计确定二分次数并进行求解。同时实现matlab和C语言程序编写。从而掌握过程的基本形式和二分法的基本思想,在以后的学习过程中得以应用。
1.引言
在科学研究与工程技术中常会遇到求解非线性方程f(x)=0的问题。而方程f(x)是多项式或超越函数又分为代数方程或超越方程。对于不高于四次的代数方程已有求根公式,而高于四次的代数方程则无精确的求根公式,至于超越方程就更无法求其精确解了。因此,如何求得满足一定精度要求的方程的近似根也就成为了我们迫切需要解决的问题。近年来,随着数学科学研究的不断进展,又更新了许多方程求解的方法。我们知道,对于单变量非线性方程f=0,一般都可采用迭代法求根,由此产生了二分法。 二分法
一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。
解方程即要求f(x)的所有零点。
先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)0,f(b)0,ab
①如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]0,则在区间=x³-x-1=0在区间[,]内的一个实根,要求准确到小数点后第2位。 问题分析
对于以上单变量非线性方程,已知a=,b=,采用二分法求解。首先我们根据二分法所允许的误差范围求得应迭代次数。
二分法允许的误差公式:|x*-|(-)/2=/,
其中k为二分次数。
所以求得本题应二分6次达到预定的精度。 解题过程
这里a=,b=,而f0,f0。[a,b]的中点x0=,将区间二等分。由于f0,即f与f同号,故所求根x*必在x0右侧,这是应令a1=,b1=,得到新的有根区间[a1,b1].如此反复二分6次,结果
K/二分次数/区间
左边界值/右边界值F()的符号
0
1
2
3
4
5
-
+
-
+
+
-
-
6.基本二分法的matlab实现与C语言实现
%二分法的算法及MATLAB实现
function[c,err,yc]=bisect(f,a,b,delta)
%f是所要求解的函数
%a和b分别是有根区间的左右限
%delta是允许的误差界
%c为所求的近似解
%yc为函数f在c上的值
%err是c的误差估计
ifnargin4
delta=1e-5;
end
ya=feval(’f’,a);
yb=feval(’f’,b);
ifyb==0,c=b,return
end
ifya*yb0
disp(’(a,b)不是有根区间’);
return
end
max1=1+round((log(b-a)-log(delta))/log(2));
fork=1:max1
c=(a+b)/2;
yc=fevel(’f’,c);
ifyc==0a=c;b=c;break,
elseifyb*yc0
b=c;yb=yc;
else
a=c;ya=c;
end
if(b-a)delta,break
end
end
k,c=(a+b)/2,err=abs(b-a),yc=feval(‘f’,c)
%基本二分法的C语言实现
方程式为:f(x)=0,示例中f(x)=1+x-x^3
使用示例:
inputabe:121e-5
solution:
源码
#include
#include
#include
#include
doublef(doublex)
{
return1+x-x*x*x;
}
intmain()
{
doublea=0,b=0,e=1e-5;
printf("inputabe:");
scanf("%lf%lf%lf",&a,&b,&e);
e=fabs(e);
if(fabs(f(a))=e)
{
printf("solution:%lg“n",a);
}
elseif(fabs(f(b))=e)
{
printf("solution:%lg“n",b);
}
elseif(f(a)*f(b)0)
{
printf("f(%lg)*f(%lg)0!need=0!“n",a,b);
}
else
{
while(fabs(b-a)e)
{
doublec=(a+b)/;
if(f(a)*f(c)0)
b=c;
else
a=c;
}
printf("solution:%lg“n",(a+b)/);
}
return0;
}
7.方法总结
二分法解题的基本步骤:
1)计算f的有根区间[a,b]端点处的值f,f。
2)计算f(x)的区间中点的值f/2)。
3)进行函数值的符号比较。
4)根据误差估计二分到一定次数达到精度,从而求得近似值。
二分法的优缺点:
优点:算法简单,容易理解,且总是收敛的
缺点:收敛速度太慢,浪费时间
所以,在以后的学习过程中,我们将根据方程的形式和二分法的优缺点不单独将其用于求根,只用其为根求得一个较好的近似值,方便其他方法的运算。
8.结论
(1)针对现实中的许多剖面设计、轨道设计等关键参数方程中三角函数多、计算工作量较大、迭代收敛条件强等问题,采取数学变化的方法将该方程转化成一个只包含对数函数和多项式函数的新方程,并提出了寻找求解区间的步长搜索算法和自适应步长搜索算法,进而使用二分法求新方程的数值解。
(2)数学分析和数值实践表明,该算法不仅能够正确判断设计方程是否有解,而且在有解的情况下能够正确求出该解,计算量小,计算过程稳定。
参考文献
【1】曾毅;改进的遗传算法在非线性方程组求解中的应用[J];华东交通大学学报;2004年04期;136-138
【2】许小勇,宋昔芳;一种求解非线性方程全部实根的算法与实现[J];科技广场;2007年01期;15-17
【3】王兴华,郭学萍;二分法及其各种变形收敛性的统一判定法则[J];高等学校计算数学学报;1999年04期
【4】苗慧;解非线性方程的若干算法的收敛性分析[D];浙江大学;2006年
【5】李晓霞;关于若干迭代算法的收敛性分析[D];浙江大学;2002年
【6】李庆扬,王能超,易大义;数值分析第4版TUP清华大学;2001年5月
展开阅读全文