C语言程序 牛顿迭代法

Python019

C语言程序 牛顿迭代法,第1张

给你一点提示。

牛顿迭代法要计算

(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.

把两个子函数都写主函数里头吧!你这样写a、b、c、d都没有传参,害我找了半天。

#include<stdio.h>

#include<math.h>

int

a,b,c,d

//a、b、c、d为系数

void

main()

{

int

k=0

//计数变量

float

X0,X1,f,f1

int

a,b,c,d

printf("提示:函数f(x)=a*x^3+b*x^2+c*x+d\n")

printf("请输入系数:a,b,c,d的值:\n")

scanf("%d%d%d%d",&a,&b,&c,&d)

printf("请输入初始近似值X0:\n")

scanf("%f",&X1)

printf("---------------\n")

printf("敛散情况:\n")

printf("k:\tXk:\n")

printf("k=%d\tX%d=%f\n",k,k,X1)

do

{

k++

X0=X1

f=((a*X0+b)*X0+c)*X0+d

f1=(3*a*X0+2*b)*X0+c

X1=X0-f/f1

printf("k=%d\tX%d=%f\n",k,k,X1)

}

while(fabs(X1-X0)

>=0.00001)

printf("--------------------------\n")

printf("迭代的次数为:%d\n",k)

}