数值积分实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算方法》实验报告

实验四数值积分

二级学院:计算机学院

专业:计算机科学与技术

指导教师:爨莹

班级学号:

姓名:

实验一 非线性方程的迭代数值解法

1、 实验目的:

① 通过编程和插值与拟合中的某种具体算法解决具体问题,更深一步的体会计算方法这门课的重要性,同时加深对插值与拟合公式某种具体算法的理解。

② 熟悉编程环境。

2、实验要求:

实现插值与拟合中的某种具体算法编写并执行

3、实验内容:

1)用牛顿法求解01553=-x 的根,取初始值为10。

2) 用弦截法求解数学方程。

010*15.110*4.181.9*002.0)(255.15=--=--x x x f

4、题目: 非线性方程的迭代数值解法

5、原理:

1) 用牛顿法求解01553=-x 的根的原理:

牛顿迭代法是以微分为基础,用直线来代替曲线,由于曲线不规则,那么研究直线代替曲线后,剩下的差值是不是高阶无穷小,如果是高阶无穷小,,只用直线就可以了.。

牛顿迭代法是取初始值x0之后,过曲线y= f(x)上的点(x0, f(x0))做切线,切线方程为:y=f(x0)+f ’(x0)(x-x0), 它与x 轴交点横坐标x1 为

x1=x0-f(x0)/f ’(x0)

再过曲线y= f(x)上的点(x1, f(x1))做切线,切线方程为y=f(x1)+f ’(x1)(x-x1) 它与x 轴交点横坐标x2 为: x2=x1-f(x1)/f ’(x1)

如此做下去,第n+1条切线方程为:y=f(xn)+f ’(xn)(x-xn) 它与x 轴交点横坐标xn 为 Xn+1=Xn-f(Xn)/f ’(Xn)

在这个基础上,从而找到更接近方程根的近似跟。

2) 用弦截法求解数学方程

010*15.110*4.181.9*002.0)(255.15=--=--x x x f 的原理:

设 xk 、xk+1是f(x)=0的近似根,我们利用f(xk),f(xk+1)构造一次插值多项式p1(x), 并用p1(x)=0的根作为f(x)=0的新的近似根xk+1,

由于 p1(x)=f(xk)+f(xk)-f(xk-1)xk-xk-1(x-xk)(1)

因此有 xk+1=xk-f(xk)f(xk)-f(xk-1)(xk-xk-1)(2)

所以弦截法的几何意义为:依次用弦线代替曲线,用线性函数的零点作为函数零点的近似值

6、设计思想:

1)用牛顿法求解01553=-x 的根的基本思想是:

将非线性方程f(x)=0逐步转化为线性方程来求解,即依次用切线代替曲线,用线性函数的零点作为函数f(x)=0的近似值。

2)用弦截法求解根的基本思想是:

依次用弦线代替曲线,用线性函数的零点作为函数零点的近似值。

7、对应程序:

用牛顿法求解01553=-x

#include

#include

double F1(double);

double F2(double);

double Newton(double,double);

int main(int argc, int *argv[])

{ double x0 = 10.0;

double e = pow(10,-5);

printf("the result is %f\n",Newton(x0,e));

printf("pause");

}

double F1(double x)

{

return x*x*x-155 ;

}

double F2(double x)

{

return 3*x*x ;

}

double Newton(double x0, double e)

{

double x1;

do

{

x1 = x0;

x0 = x1 - F1(x1) / F2(x1);

}

while (fabs(x1 - x0) > e);

return x0;

}

用弦截法求解数学方程:

#include

#include

#include

using namespace std;

double f(double);

double xpoint(double,double);

double root(double,double);

int main()

{

double x1,x2,f1,f2,x;

do

{

cout<< "input x1,x2:";

cin >> x1 >> x2;

f1=f(x1);

f2=f(x2);

}

while(f1*f2 >= 0);

x = root(x1,x2);

cout << setiosflags(ios::fixed) << setprecision(7);

cout << "A root of equation is " << x << endl;

return 0;

}

double f(double x)

{

double y;

y=0.002*9.81-1.4*(1e-5)*sqrt(x*x*x)-1.15*x*x*(1e-5);

return y;

}

double xpoint(double x1,double x2)

{

double y;

y = ( x1 * f(x2) - x2 * f(x1))/(f(x2) - f(x1));

return y;

}

double root(double x1,double x2)

{

double x,y,y1;

相关文档
最新文档