#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))
}