C语言 牛顿法求方程:2χ3-4χ2+3χ-6=0在1.5附近的根。 需要一个比较简洁适合初学者的答案

在一行中输出该方程的解和循环次数(解保留2位小数,两者以一个空格分隔)。... 在一行中输出该方程的解和循环次数(解保留2位小数,两者以一个空格分隔)。 展开
 我来答
玹龗
推荐于2016-06-14 · TA获得超过463个赞
知道小有建树答主
回答量:642
采纳率:50%
帮助的人:318万
展开全部

悬赏真是少呢

#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;
}
百度网友a1e531d
2015-10-22 · TA获得超过1010个赞
知道小有建树答主
回答量:744
采纳率:50%
帮助的人:313万
展开全部
#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");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式