牛顿迭代法程序如图

牛顿迭代法程序如图,第1张

#include<stdio.h>

#include<math.h>

double f(double x)

{

    return (x*x*x-3*x-1)

}

double dfdx(double x)

{

    return (3*x*x-3)

}

void main()

{

    double x0=2,x1,y,err

    int n=0

    double tol=0.5*1.0e-3

    printf("解议程x*x*x-3*x-1=0的初始值为x0=%f,误差限为%f\n",x0,tol)

    do{

        y=dfdx(x0)

        if(fabs(y)<1.0e-5){

            printf("奇异:函数在%f的导数接近0",x0)

            break

        }else{

            x1=x0-f(x0)/y

            err=x0-x1

            n++

            printf("迭代%d次的解x%d=%f,error=%f,函数值f(x%d)=%f\n",n,n,x1,err,n,f(x1))

            x0=x1

        }

    }while(fabs(err)>tol)

}

给你一点提示。

牛顿迭代法要计算

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11325824.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存