大一下学期刚开始学c语言 求n次方根 用牛顿迭代法 别用一些不懂的知识 就用牛顿迭代法前面和后面一点点的要n次方根都能求
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/06 06:37:22
大一下学期刚开始学c语言 求n次方根 用牛顿迭代法 别用一些不懂的知识 就用牛顿迭代法前面和后面一点点的要n次方根都能求
大一下学期刚开始学c语言 求n次方根 用牛顿迭代法 别用一些不懂的知识 就用牛顿迭代法前面和后面一点点的
要n次方根都能求
大一下学期刚开始学c语言 求n次方根 用牛顿迭代法 别用一些不懂的知识 就用牛顿迭代法前面和后面一点点的要n次方根都能求
请参考:百度百科之牛顿迭代法.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdio.h>
#include <math.h>
int n;
int y;
double func(double x) //函数
{
double k = 1;
int i;
for(i = 0; i < n; i++)
{
k *= x;
}
return k-y;
}
double func1(double x) //导函数
{
double k = 1;
int i;
for(i = 0; i < n-1; i++)
{
k *=x;
}
return n*k;
}
int Newton(double *x,double precision,int maxcyc) //迭代次数
{
double x1,x0;
int k;
x0=*x;
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; //返回结果
return 1;
}
else //未达到结束条件
x0=x1; //准备下一次迭代
}
printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度
return 0;
}
int main()
{
double x,precision;
int maxcyc;
printf("输入被开方数:");
scanf("%d",&y);
printf("输入开方数:");
scanf("%d",&n);
printf("输入初始迭代值x0(不为0):");
scanf("%lf",&x);
printf("输入最大迭代次数:");
scanf("%d",&maxcyc);
printf("迭代要求的精度:");
scanf("%lf",&precision);
if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1
printf("该值附近的根为:%lf\n",x);
else //若函数返回值为0
printf("迭代失败!\n");
getchar();
system("pause");
}