C语言 牛顿法求方程:2χ3-4χ2+3χ-6=0在1.5附近的根。 需要一个比较简洁适合初学者的答案
2个回答
展开全部
悬赏真是少呢
#include <stdio.h>
#include <conio.h>
#include <math.h>
double func(double x) //函数
{
return 2*x*x*x-4*x*x+3*x-6.0;
}
double func1(double x) //导函数
{
return 6*x*x-8*x+3;
}
int Newton(double *x,double precision,int maxcyc) //迭代次数
{
double x1,x0;
x0=*x;
int k;
for(k=0;k<maxcyc;k++)
{
if(func1(x0)==0.0)//若通过初值,函数返回值为0
{
printf("迭代过程中导数为0!\n");
return 0;
}
x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算
if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件
{
*x=x1; //返回结果
printf("该值附近的根为:%.2lf迭代次数为:%d\n",x1,k+1);
return 1;
}
else //未达到结束条件
x0=x1; //准备下一次迭代
}
printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度
return 0;
}
int main()
{
double x,precision;
int maxcyc;
printf("输入初始迭代值x0:");
scanf("%lf",&x);
printf("输入最大迭代次数:");
scanf("%d",&maxcyc);
printf("迭代要求的精度:");
scanf("%lf",&precision);
if(Newton(&x,precision,maxcyc)!=1) //若函数返回值为1
printf("迭代失败!\n");
getch();
return 0;
}
展开全部
#include<iostream>
using namespace std;
double f(double x){ return 2*x*x*x-4*x*x+3*x-6.0;}
double fd(double x){ return 6*x*x-8*x+3;}
void main()
{
double x;
cout<<"输入初始迭代值:"<<endl;
cin>>x;
while(abs(f(x))>0.00001)
{
x=x-f(x)/fd(x);
}
cout<<"计算结果: x="<<x<<", f(x)="<<f(x)<<endl;
system("pause");
}
using namespace std;
double f(double x){ return 2*x*x*x-4*x*x+3*x-6.0;}
double fd(double x){ return 6*x*x-8*x+3;}
void main()
{
double x;
cout<<"输入初始迭代值:"<<endl;
cin>>x;
while(abs(f(x))>0.00001)
{
x=x-f(x)/fd(x);
}
cout<<"计算结果: x="<<x<<", f(x)="<<f(x)<<endl;
system("pause");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询