用二分法求方程的根(C语言)想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,帮忙分析下,并给出源代码 ,
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/21 00:33:38
![用二分法求方程的根(C语言)想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,帮忙分析下,并给出源代码 ,](/uploads/image/z/2487606-6-6.jpg?t=%E7%94%A8%E4%BA%8C%E5%88%86%E6%B3%95%E6%B1%82%E6%96%B9%E7%A8%8B%E7%9A%84%E6%A0%B9%EF%BC%88C%E8%AF%AD%E8%A8%80%EF%BC%89%E6%83%B3%E9%97%AE%E4%B8%8B%E5%A4%A7%E5%AE%B6%2C%E5%A6%82%E4%BD%95%E6%B1%822%2Ax%2Ax%2Ax-4%2Ax%2Ax%2B3%2Ax-6%3D0%E5%9C%A8%EF%BC%88-10%2C10%EF%BC%89%E5%86%85%E7%9A%84%E5%85%A8%E9%83%A8%E7%9A%84%E6%A0%B9%2C%E8%A6%81%E6%98%AF%E5%85%A8%E9%83%A8%E7%9A%84%E6%A0%B9%2C%E4%B8%8D%E8%83%BD%E5%8F%AA%E6%B1%82+%E4%B8%80%E4%B8%AA%2C%E5%B8%AE%E5%BF%99%E5%88%86%E6%9E%90%E4%B8%8B%2C%E5%B9%B6%E7%BB%99%E5%87%BA%E6%BA%90%E4%BB%A3%E7%A0%81+%2C)
用二分法求方程的根(C语言)想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,帮忙分析下,并给出源代码 ,
用二分法求方程的根(C语言)
想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,帮忙分析下,并给出源代码 ,
用二分法求方程的根(C语言)想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,帮忙分析下,并给出源代码 ,
刚才那个只能找一个根,现在改了下,可以找所有根:
刚才有个小BUG,改了下::
#include
void FindRoot(void)
{
double dbLeftX = -10.0;
double dbRightX = 10.0;
double dbResultY = 0.0;
double dbTmp = 0.0;
double dbMidleX =0.0;
//当二分点Y的值不为0不是根(即,二分点X不满足方程)
//当区间无限小时完成计算(下面的语句表示当区间不是无限小时继续计算)
while ( abs(dbRightX-dbLeftX) > 0.1e-6 )
{
//二分区间
dbMidleX = ( dbLeftX + dbRightX ) / 2.0;
//算二分点Y的值
dbResultY = 2 * pow(dbMidleX,3) - 4 * pow(dbMidleX,2) + 3 * dbMidleX - 6;
//如果计算的Y值为0时,找到一个根
if ( abs(dbResultY) < 0.1e-6 )
{
printf("Finde a root in [-10,10] ,value = [%lf].\n",dbMidleX);
}
//判断方程的根落于刚才二分区间的哪个区间,并生成新的区间.
if ( dbResultY < 0.0 )
{
dbTmp = 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6;
if ( dbTmp < 0.0 )
{
dbLeftX = dbMidleX;
}
else
{
dbRightX = dbMidleX;
}
}
else
{
dbTmp = 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6;
if ( dbTmp > 0.0 )
{
dbLeftX = dbMidleX;
}
else
{
dbRightX = dbMidleX;
}
}
}
//区间无限小,如果区间两端计算的Y值一个为正一个为负则区间中点也是一个根
if( 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6 < 0 &&
2 * pow(dbRightX,3) - 4 * pow(dbRightX,2) + 3 * dbRightX - 6 >0 )
{
printf("Finde a root in [-10,10] ,value = [%lf].\n",dbMidleX);
}
}