利用牛顿迭代法求根,方程是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附近的一个实根。求出根后由主函数输出。
展开
2个回答
展开全部
//此函数是用来求一元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;
}
希望对你有用。
//比如 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;
}
希望对你有用。
追问
和我学的编法不一样呢。。老师教的挺简单的啊。。不会这么复杂吧。。
展开全部
#!/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))
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询