题目:用二分法求f(x)=x^3+x^2-3*x-3=0的正根(精度要求精确到1E-3)。
(1)分析结果的正确性。
(2)进一步考虑如何求出所有根。
算法分析:
(1)分析题目要求,由于方程是一元三次方程。所以方程应该存在三个根,由于题目要求只求正根,所以下面在用二分法之前应先给定一个正区间。
(2)令f=x^3+x^2-3*x-3,并给定:区间[a,b],其中a>=0,且要保证f(a)*f(b)<0.
(3)这里首先令x1=a,x2=b,先给x一个初值为((x1+x2)/2),判断f((x1+x2)/2)即f(x)的正、负。
若为负数即f(x)<0,则把((x1+x2)/2)赋给x1(或x2),即新区间的左(或右)端点;
若为正数即f(x)>0,则把((x1+x2)/2)赋给x2(或x1),即新区间的右(或左)端点;
若为零即f(x)==0,则找到方程的根。
此步骤的原则是使新区间始终保证f(x1)*f(x2)<0。
在此题中由于经过判断知:f=x^3+x^2-3*x-3的一阶导在[1.0,2.0]上大于0,即f=x^3+x^2-3*x-3在[1.0,2.0]上单调增加。又因为此题中f(1)<0,f(2)>0,所以在没找到零点之前,这里的判断条件可以简化为判断区间中左、右端点的正负。与f(a)*f(b)<0的作用相同。
(4)重复步骤(3),直到找到方程的根,或者达到给定精度!则循环停止,这时的x值即为方程的近似值。
C语言实现代码如下:
Matlab代码如下(two_cut.m脚本文件的内容为):
在Matlab的命令行中输入(因为我的程序文件保存为:two_cut.m脚本文件):
>>two_cut
f=Inline function:
f(x)= x^3+x^2-3*x-3
x1=1
x2=2
x=1.500000000000000
x=1.750000000000000
x=1.625000000000000
x=1.687500000000000
x=1.718750000000000
x=1.734375000000000
x=1.726562500000000
x=1.730468750000000
x=1.732421875000000
x=1.731445312500000
x=1.731445312500000
k=10
结果分析:
在Matlab的命令行中输入:
>>format long
>>sqrt(3)
ans=1.732050807568877
在与用二分法所求的结果分析可知,有一定误差。通过k的值可知此程序在给定的区间上循
环了10次,经分析发现:用二分法解方程,其方法有以下缺点:收敛速度不快,无法求偶
重根,也无法求复根。
这里进一步分析如何求此方程的所有根:因为此方程是一元三次方程f=x^3+x^2-3*x-3=0,
所以理论上它有三个根。如果任用二分法求出它的其余两个根,那么我们应首先估算这两
根在数轴上的大概位置,然后给定合理的区间,再用二分继续处理。
这里在在Matlab的命令行中输入,并运行:
>>x=-2:0.001:2;
>>y=x.^3+x.^2-3*x-3;
>>plot(x,y)
>>grid on
可得到下图:
通过上图可知,另外两个根在[-2.0,-1.5]与[-1.5,-0.5]区间上,可继续用二分法求出。
本文为本人原创!如需使用,请注明出处!
分享到:
相关推荐
VB_牛顿迭代法、二分法和弦截法解一元三次方程
VB牛顿迭代法、二分法和弦截法解一元三次方程.doc
C语言编程一元N次方程二分法求根,例子是用的HS1101湿度传感器一元三次方程调试用的
c语言二分法求解方程c语言二分法求解方程c语言二分法求解方程
C++实现了一元三次方程的求解,利用二分法求解,只需要输入一元三次方程的四个系数,就可以求出实数解
牛顿法 二分法解方程组 MFC界面直观 控件的应用比较基础 适合新手学习
% 二分法解方程 % Bisection Method % The first parameter fx is a external function with respect to viable x. % xa is the left point of the initial interval % xb is the right point of the initial ...
C语言用二分法求解方程的根 用C语言编译的5次方程代码简明
本例实现了用c语言实现了二分法求解方程。本例主要介绍用二分法求解方程f(X)=sin(x)在(-3,7)这个范围内的解C语言实现方法。 求解主要通过函数BisectRoot()来完成。该函数首先根据二分法的需要扫描根的存在 及根的...
用c语言写的简单的二分法解方程,但方程是指定的
分别用二分法和迭代法求方程的根,含两个程序的
文档包含二分法、牛顿法解方程的具体思路以及经检验可执行的c程序
一个简单的Matlab程序,主要通过二分法求解非线性问题,每行代码都做了详细的说明。适合初学者使用。
二分法求三次方程组
二分法 解函数 c++语言 c语言 递归 数根
二分法,牛顿法,迭代法matlab解线性方程
在matlab软件中判断方程单调性后利用二分搜索解方程的m代码
实验一:用二分法求方程的根.doc实验一:用二分法求方程的根.doc实验一:用二分法求方程的根.doc实验一:用二分法求方程的根.doc实验一:用二分法求方程的根.doc实验一:用二分法求方程的根.doc
二分法和牛顿迭代法求解方程二分法和牛顿迭代法求解方程二分法和牛顿迭代法求解方程二分法和牛顿迭代法求解方程
数值分析作业3-二分法求解非线性方程组(含题目以及matlab求解代码).pdf