迭代法的c语言程序
1. c语言 用牛顿迭代法求f(x);
#include "stdio.h"
#include "math.h"
main()
{float x,f,f1; //f代表 f(x)=2x^3-4x^2+5x-18,f1代表 f‘(x)=2*x^2-4*2x^+5 =6*x*x-8*x+5;
x=8; // x的初值可为任意值
do
{
f=2*x*x*x-4*x*x+5*x-18; //f(x)=2x3-4x2+5x-18
f1=6*x*x-8*x+5; //f(x)的导数: f‘(x)=2*3* x^2 - 4*2 *x+5 =6*x*x-8*x+5;
x=x-f/f1;
}while(fabs(f)>0.00001);
printf("x=%f,f=%f\n",x,f);
}
2. c语言用迭代法求cosx的表达式
用迭代法求cosx的表达式,可以先将方程x=cosx改写成x=g(x),其中g(x)是一个合适的函数,例如g(x)=0.5*(x+cosx)。然后给定一个初始值x0,用公式xn+1=g(xn)来逐步计算xn的值,直到满足精度要求。下面是一个用C语言实现的例子:
#include <stdio.h>
#include <math.h>
#define EPS 1e-6 //定义精度
int main()
{
double x0,x1; //定义迭代变量
x0 = 0; //给定初始值
do
{
x1 = 0.5 * (x0 + cos(x0)); //计算下一个近似值
if(fabs(x1 - x0) < EPS) break; //判断是否满足精度要求
x0 = x1; //更新迭代变量
}while(1);
printf("cosx的表达式为:%.6lf\n", x1); //输出结果,保留6位小数
return 0;
}
3. 能解释一下用迭代法计算两个正整数的商和余数的程序吗详细点谢谢
这个算法的思想就是用减法替代除法的原理。例如9/4=2......1可以理解为9减去2个4还剩下1。
本算法中的x为被除数,y为除数,r为迭代时的被减数,y为迭代时的减数,q为y被减去的个数,最终输出时r作为余数输出,q作为商输出。
即x/y=q...r
4. 牛顿迭代法的C语言代码
doublefunc(doublex)//函数{returnx*x*x*x-3*x*x*x+1.5*x*x-4.0;}doublefunc1(doublex)//导函数{return4*x*x*x-9*x*x+3*x;}intNewton(double*x,doubleprecision,intmaxcyc)//迭代次数{doublex1,x0;intk;x0=*x;for(k=0;k<maxcyc;k++){if(func1(x0)==0.0)//若通过初值,函数返回值为0{printf(迭代过程中导数为0! );return0;}x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算if(fabs(x1-x0)<precision||fabs(func(x1))<precision)//达到结束条件{*x=x1;//返回结果return1;}else//未达到结束条件x0=x1;//准备下一次迭代}printf(迭代次数超过预期! );//迭代次数达到,仍没有达到精度return0;}intmain(){doublex,precision;intmaxcyc;printf(输入初始迭代值x0:);scanf(%lf,&x);printf(输入最大迭代次数:);scanf(%d,&maxcyc);printf(迭代要求的精度:);scanf(%lf,&precision);if(Newton(&x,precision,maxcyc)==1)//若函数返回值为1printf(该值附近的根为:%lf ,x);else//若函数返回值为0printf(迭代失败! );getch();return0;}

