(C语言)牛顿迭代法求方程的根

Python013

(C语言)牛顿迭代法求方程的根,第1张

#include <stdio.h> 

#include <math.h>

/******start******/

double Resolve( double,double,double,double )

/******end******/

int main()

{

    double a,b,c,d=0

    double y

    printf("input a b c d:")

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

    y = Resolve(a,b,c,d)

    printf("output:\n%.4lf\n", y)

    return 0

}

/******start******/

double f(double a,double b,double c,double d,double x)

{

return a*x*x*x + b*x*x + c*x +d 

}

double f1(double a,double b,double c,double x)

{

return 3*a*x*x + 2*b*x + c 

}

double Resolve( double a,double b,double c,double d )

{

double x0,x1,e

x0=1

e=f(a,b,c,d,x0)

do {

x1=x0-e/f1(a,b,c,x0) 

x0=x1

e=f(a,b,c,d,x0)

}while( e >= 1e-5 )

return x1 

}

/******end******/

不动点的定义,设X是一个集合,T 是X到X的自映射,如果存在一个x0属于X,使得Tx0=x0,

则称x0为映射T的一个不动点。

不动点迭代,Tx=x

即将Tx的 n-1 次方作为变量带入,得到n次方

#include<stdio.h>

#include<math.h>

double between = 0.0//确定内存足够

double diedai(double x,double cement)

{

    between = exp(x)+10*x-2//计算结果

    if(between<1e-5)//精度是否达到要求

    {

        x = (2-exp(x))/10

        diedai(x,cement)//否则进行迭代

    }

    return x

}

int main()

{

    double cement = 1e-5//设置精度

    double result

    result = diedai(0,cement)

    

    printf("\n达到要求精度时X=%f",result)

    getchar()

}

结果:

纯手打,费脑力,只求采纳

C++行么?

这两天忙考试,过两天可以帮你改成C的,实验报告我也,有电子档的

下载地址:http://ourys.com/post/22.html

2简单迭代法

#include<iostream>

#include<math.h>

using namespace std

double f(double) //申明函数

int main()

{

double a,i=0,a1,pr

cout<<"please input the start number:"

cin>>a

cout<<"please input precision:"

cin>>pr //输入精度

do

{

a1=a

a=f(a)

i++

if(i>1000000)

{cout<<"Iterative is defeated!"return 0}

}

while((a-a1)>pr||(a-a1)<-pr)

cout<<"Iterative Numbers is "<<i<<endl

cout<<"The answer is "<<a<<endl//输出迭代次数和结果

}

double f(double x)//定义函数

{

return pow((x+1.0),(1.0/3))

}

3Aitken迭代法

#include<iostream>

#include<math.h>

using namespace std

double f(double) //申明函数

int main()

{

double a,i=0,a1,fa,faa,pr

cout<<"please input the start number:"

cin>>a

cout<<"please input precision:"

cin>>pr //输入精度

do

{

a1=a

fa=f(a)

faa=f(fa)

a=faa-(faa-fa)*(faa-fa)/(faa-fa*2+a)

i++

if(i>1000000)

{cout<<"Iterative is defeated!"return 0}

}

while((a-a1)>pr||(a-a1)<-pr)

cout<<"Iterative Numbers is "<<i<<endl

cout<<"The answer is "<<a<<endl//输出迭代次数和结果

return 0

}

double f(double x) //定义函数

{

return pow((x+1.0),(1.0/3))

}

4Newton迭代

#include<iostream>

#include<math.h>

using namespace std

double f(double) //申明函数

int main()

{

double a,i=0,a1,pr

cout<<"please input the start number:"

cin>>a

cout<<"please input precision:"

cin>>pr //输入精度

do

{

a1=a

a=f(a)

i++

if(i>1000000)

{cout<<"Iterative is defeated!"return 0}

}

while((a-a1)>pr||(a-a1)<-pr)

cout<<"Iterative Numbers is "<<i<<endl

cout<<"The answer is "<<a<<endl//输出迭代次数和结果

}

double f(double x)//定义函数

{

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

}

结果:

#include<iostream>

#include<math.h>

using namespace std

double f(double) //申明函数

double g(double,double) //申明弦截法函数

int main()

{

double a,i=0,b,b1,pr

cout<<"please input the first number:"

cin>>a

cout<<"please input the second number:"

cin>>b

cout<<"please input precision:"

cin>>pr //输入精度

do

{

b1=b

b=g(a,b)

a=b1

i++

if(i>1000000)

{cout<<"Iterative is defeated!"return 0}

}

while((b-a)>pr||(b-a)<-pr)

cout<<"Iterative Numbers is "<<i<<endl

cout<<"The answer is "<<a<<endl//输出迭代次数和结果

}

double f(double x)//定义函数

{

return x*x*x-x-1

}

double g(double a,double b) //定义弦截法函数

{

return b-f(b)*(b-a)/(f(b)-f(a))

}