c语言迭代法求方程根
A. 用C语言编程求牛顿迭代法求方程f(x)=0的根。(
#include<stdio.h>
void main()
{
float s,f0,h,x;
int n,i;
printf("input n:");
scanf("%d",&n);
h=1.0/n;
f0=4.0;
s=0.0;
for(i=1;i<n;i++)
{s+=f0*h;
x=i*h;
f0=4/(1+x*x);
}
printf("s=%f\n",s);
}
//运行结果:
input n:9
s=3.002370
其他方法:
#include<stdio.h>
void main()
{
float s,f0,f,h,xi;
int n,i;
printf("input n:");
scanf("%d",&n);
h=1.0/n;
f0=4.0;
s=0.0;
for(i=1;i<n;i++)
{
xi=i*h;
f=f0;
f0=4/(1+xi*xi);
s+=h*(f0+f)/2;
}
printf("s=%f\n",s);
}
//运行结果:
input n:42
s=3.093306
B. C语言编程——内容:用牛顿迭代法求一元三次方程的根。要求:由主函数调用求根子函数,谢谢各位了
牛顿迭代法
牛顿迭代法又称牛顿切线法,它采用以下方法求根:先任意设定一个与真实的根接近的值x0作为第一个近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),再过(x1,f(x1))点做f(x)的切线,交x轴于x2,再求出f(x2),再作切线……如此继续下去,直到足够接近真正的x为止。
其中f'(X0)是函数在X0处的斜率,也就是在X0处的导数。
代码如下:
#include<stdio.h>
#include<math.h>
float f(float a,float b,float c,float d,float x)
{
float f;
f=((a*x+b)*x+c)*x+d;
return f;
}
float f1(float a,float b,float c,float x)
{
float f;
f=(x*3*a+2*b)*x+c;
return f;
}
float root(float a,float b,float c,float d)
{
float x0,x1=1;
do
{
x0=x1;
x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);
}while(fabs(x1-x0)>=1e-6);
return x0;
}
void main()
{
float a,b,c,d,x;
printf("input four float numbers:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
x=root(a,b,c,d);
printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 its root near x=1.5 is :%.4f\n",a,b,c,d,x);
getch();
}
C. C语言编程:牛顿迭代法求方程的根
程序流程分析:
① 赋值x0=1.5,即迭代初值;
② 用初值x0代入方程中计算此时的f(x0)及f’(x0),程序中用变量f描述方程的值,用fd描述方程求导之后的值;
③ 计算增量d=f/fd;
④ 计算下一个x,x=x0-d;
⑤ 把新产生的x替换x0,为下一次迭代做好准备;
⑥ 若d绝对值大于1e-3,则重复②③④⑤步。
源程序代码:
#include <math.h>
main()
{
float x,x0,d,f,fd;
x0=0;
do {
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
fd=6*x0*x0-8*x0+3;
d=f/fd;
x=x0-d;
x0=x;
}while(fabs(d)>1e-3);
printf("x=%f\n",x);
}
D. C 语言 请哪位高手能帮我用C语言算出根号n的值
/*1.模拟笔算开平放的整数开平方算法:*/
int _sqrti(int n)
{
int r,l,t; //r: 方根; l: 余数; t: 试除数;
if(n<100)
{
r = 9;
while(n < r*r) r--;
}
else
{
r = _sqrti(n/100);
l = n - r*r*100;
t = l/(r*20);
while( t*(r*20 + t) > l ) t--;
r = r*10 + t;
}
return r;
}
/*2. 迭代法:
迭代公式:x[n+1]=(x[n]+y/x[n])/2
可以证明,x[n]收敛到y^(1/2),而且收敛速度较快。
*/
double _sqrt(double y)
{
#define eps 1e-15
double x1,x2;
if(y<eps) return 0;
x2= y>1.0? y/2 : y*2;
do{
x1 = x2;
x2 = (x1 + y/x1)/2;
}while(fabs(x2-x1) > eps);
return x2;
#undef eps
}
E. C语言 用牛顿迭代法求方程的根,并且输出迭代的次数
#include<stdio.h>
#include<math.h>
void main()
{float x1,x0,f,f1;
int i=0;//i就是当前计算的次数
x1=1.5;
do
{i++;
x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
printf("the d%th root is:%5.2f\n",i,x1);
}while(fabs(x1-x0)>=1e-5);
printf("the time is d%\n",i,);
printf("附近的根是:%5.2f\n",x1);