西安石油大学计算方法实验1--非线性方程的迭代数值解法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算方法》实验报告
二级学院:计算机学院
专业:计算机科学与技术
指导教师:爨莹
班级学号:201107010122
姓名:张文江
实验一 非线性方程的迭代数值解法
实验目的:
① 通过编程和插值与拟合中的某种具体算法解决具体问题,更深一步的体会计算方法这门课的重要性,同时加深对插值与拟合公式某种具体算法的理解。
② 熟悉编程环境。 2、实验要求:
实现插值与拟合中的某种具体算法编写并执行
3、实验内容:
1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程,()^310f x x x =--=在[1,1.5]内的根。
4、题目:
1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程,()^310f x x x =--=在[1,1.5]内的根
5、原理:
编程实现牛顿法、弦截法求非线性方程的根。 (1)牛顿法
x1=(x0-f/f1); (2)单点弦截法
x2=x0-f0*(xn-x0)/(fn-f0);
6、设计思想: (1)牛顿法
首先找到初始值,将初始值带入到方程中,计算一次求导和二次求导的值,确定x0和x1的值,然后利用循环x1=(x0-f/f1),条件为(x0-x1)>1e-6,循环一次的x1的值给x0;直到找到符合的x1为止。 (2)单点弦截法
首先找到初始值,将初始值带入到方程中,计算一次求导和二次求导的值,确 定x0和x1的值,然后利用循环x2=x0-f0*(x1-x0)/(f1-f0);,条件为(x0-x1)>1e-6, 循环一次的x2的值给x1;直到找到符合的x2为止。 7、对应程序: (1)牛顿法: #include
float f(float a,float b,float c,float d,float x) {
float f;
f=a*x*x*x+b*x*x+c*x+d;
return f;
}
float f1(float a,float b,float c,float x)
{
float f1;
f1=(x*3*a+2*b)*x+c;
return f1;
}
float root(float a,float b,float c,float d)
{
float x0,x1=6;
do
{
x0=x1;
x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);
}while(fabs(x1-x0)>=1e-6);
return x0;
}
void main()
{
float a,b,c,d,x;
printf("input four float numbers:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
x=root(a,b,c,d);
printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 its root near x=1.5 is :%.3f\n",a,b,c,d,x);
}
(2)迭代法:
#include
#include
void main()
{
float f(float x);
float root(float x1, float x2);
float xpoint(float x1,float x2);
float x1,x2,f1,f2,x;
do
{
printf("input x1,x2:\n");
scanf("%f,%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
}while(f1*f2>=0);
x=root(x1,x2);
printf("A root of equation is %.3f\n",x);
}
float root(float x1, float x2)
{
float xpoint(float x1,float x2);
float f(float x);
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0)
{
y1=y;
x1=x;
}else
x2=x;
}while(fabs(y)>=0.0001);
return (x);
}
float f(float x)
{
float y;
y=x*x*x-x-1;
return (y);
}
float xpoint(float x1,float x2)
{
float y;
y=(x1*f(x2)-x2*f(x1)) / (f(x2) - f(x1));
return (y) ;
}
8、实验结果:
(1)牛顿法结果:
X=5.372
(2)迭代法结果