利用牛顿迭代法求根,方程是ax³+bx²+cx+d=0. 10

系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。... 系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。 展开
 我来答
夏小勇1314
2013-06-26
知道答主
回答量:10
采纳率:0%
帮助的人:5.8万
展开全部
//此函数是用来求一元3次方程ax^3+bx^2+cx+d=0的解
//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解
//牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。
#include<iostream>
#include<cmath>
using namespace std;
double diedai(double a,double b,double c,double d);
int main()
{
double a,b,c,d;
char reply;
cout<<"欢迎使用牛顿迭代法求方程解!\n\n"<<endl;
do
{
cout<<"请依次输入方程aX^3+bX^2+cX+d=0的四个系数(a b c d):\n";
cin>>a>>b>>c>>d;
diedai(a,b,c,d);
cout<<"是否继续(Y or N)?";
cin>>reply;
}while(reply=='Y'||reply=='y');
return 0;
}
double diedai(double a,double b,double c,double d)
{
double x=10000.0;
if(a==0&&c*c-4*b*d<0)
{
cout<<"方程无解!"<<endl;
}
else if(a==0&&b==0&&c==0&&d!=0)
{
cout<<"方程无解!"<<endl;
}
else if(a==0&&b==0&&c==0&&d==0)
{
cout<<"方程恒等!"<<endl;
}
else
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
cout<<"X="<<x<<endl;
}
希望对你有用。
追问
和我学的编法不一样呢。。老师教的挺简单的啊。。不会这么复杂吧。。
孟羽然
2013-06-25 · TA获得超过2976个赞
知道小有建树答主
回答量:1308
采纳率:70%
帮助的人:572万
展开全部
#!/usr/bin/python3
# -*- coding: utf-8 -*-

def newton(f, f1, x0, e):
    while True:
        y = f(x0)
        if abs(y) < e:
            break
        x0 -= y / f1(x0)
    return x0
    
if __name__ == '__main__':
    f = lambda x: x*(x*(x + 2) + 3) + 4
    f1 = lambda x: x*(3*x + 4) + 3
    x0 = 1.0
    print ('result = %.6f' % newton(f, f1, x0, 0.00001))
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式