牛顿迭代法要计算
(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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)