C语言程序 牛顿迭代法
给你一点提示。
牛顿迭代法要计算
(1) y1=f(x) 在 x 的函数值
(2) d1=f(x) 的一阶导数 在 x 的值
你可以写两个函数,分别计算y1,d1
如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。
步骤:
设解的精度,例 float eps=0.000001;
设x初值,x1;
算y1=f(x1);
迭代循环开始
算一阶导数 在 x1 的值 d1
用牛顿公式 算出 x2; [x2 = x1 – y1 / d1]
如果 fabs(x2-x1) eps 则从新迭代 — 用新的函数值和一阶导数值推下一个 新x.
c语言牛顿迭代法
#includestdio.h
#includemath.h
int a,b,c,d;
float f(float x)
{ float y;
y=((a*x+b)*x+c)*x+d;
return(y);
}
float f1(float x)
{ float y;
y=(3*a*x+2*b)*x+c;
return(y);
}
void main()
{ float x0=1.0,x1;
printf(“请输入a,b,c,d的值:\n”);
scanf(“%d,%d,%d,%d”,a,b,c,d);
x1=1;
do
{
x0=x1;
x1=x0-f(x0)/f1(x0);
}
while(fabs(x1-x0) =0.00001);
printf(“%f”,x1);
}
牛顿迭代法:
牛顿迭代法(Newton’s method)又称为牛顿-拉弗森方法(Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。方法使用函数的泰勒级数的前面几项来寻找方程的根。
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)=2×3-4×2+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);
}