展开全部
第一个办法比较简单,就是利用一元三次方程的求根公式,具体算法请参看关于一元三次方程的卡尔丹方法;
第二个办法是利用高斯-塞德尔迭代法把方程变形为:
x=(63x³-114x²+42)/95
把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述方程,得到一个近似x值,然后再把这个值回代入这个方程继续求解,重复进行这个运算,直至前后两次运算的差小于规定的误差值,就能得到近似值。
其它办法包括牛顿-拉夫逊法等等,不过我觉得上面的两个方法就足够了。
好久没接触C++编程了,我用C来写吧,函数库定义之类的我就省略了,第二个办法编程比较容易,我只写第二个办法的主程序哈!(假设要求误差小于0.0001)
main()
{
float x,k,m,d;
int i;
scanf("%f",&x); /*这一步表示输入要求的x近似值*/
for(i=0;i<99;i++)
{
k=(63*x*x*x-114*x*x+42)/95;
m=k-x;
d=abs(m); /*这一步表示求得的误差*/
if(d>0.0001) continue;
else break;
}
printf("方程的解为%f\n",k);
}
我这里没有调试环境,不知道这个程序有没有错,也不知道这个方法是不是收敛,只是给你的参考,其实最可靠的办法还是用牛顿法,编程一定要耐心调试,毕竟知道算法后需要大量的实际运算才能得到正确的结果!
第二个办法是利用高斯-塞德尔迭代法把方程变形为:
x=(63x³-114x²+42)/95
把初始迭代值(即-1.0, 0.4和1.2三值)分别代入上述方程,得到一个近似x值,然后再把这个值回代入这个方程继续求解,重复进行这个运算,直至前后两次运算的差小于规定的误差值,就能得到近似值。
其它办法包括牛顿-拉夫逊法等等,不过我觉得上面的两个方法就足够了。
好久没接触C++编程了,我用C来写吧,函数库定义之类的我就省略了,第二个办法编程比较容易,我只写第二个办法的主程序哈!(假设要求误差小于0.0001)
main()
{
float x,k,m,d;
int i;
scanf("%f",&x); /*这一步表示输入要求的x近似值*/
for(i=0;i<99;i++)
{
k=(63*x*x*x-114*x*x+42)/95;
m=k-x;
d=abs(m); /*这一步表示求得的误差*/
if(d>0.0001) continue;
else break;
}
printf("方程的解为%f\n",k);
}
我这里没有调试环境,不知道这个程序有没有错,也不知道这个方法是不是收敛,只是给你的参考,其实最可靠的办法还是用牛顿法,编程一定要耐心调试,毕竟知道算法后需要大量的实际运算才能得到正确的结果!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询