插值与拟合 下载本文

内容发布更新时间 : 2024/5/1 15:46:14星期一 下面是文章的全部内容请认真阅读。

实验一 插值与拟合

1、 实验目的:

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

② 熟悉编程环境。 2、实验要求:

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

3、实验内容:

1)用牛顿法求解x3?155?0的根,取初始值为10。 2) 用弦截法求解数学方程。

f(x)?0.002*9.81?1.4*10?5x1.5?1.15*10?5x2?0 4、题目: 插值与拟合 5、原理:

1)用牛顿法求解x3?155?0的根的原理:

牛顿迭代法是以微分为基础的,微分就是用直线来代替曲线,由于曲线不规则,那么我们来研究直线代替曲线后,剩下的差值是不是高阶无穷小,如果是高阶无穷小,那么这个差值就可以扔到不管了,只用直线就可以了,这就是微分的意义。 牛顿法是牛顿在17世纪提出的一种求解方程f(x)=0.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。 牛顿迭代法是取x0之后,在这个基础上,找到比x0更接近的方程的跟,一步一步迭代,从而找到更接近方程根的近似跟。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。 2) 用弦截法求解数学方程

f(x)?0.002*9.81?1.4*10?5x1.5?1.15*10?5x2?0的原理: 设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)用牛顿法求解x3?155?0的根的基本思想是:将非线性方程f(x)=0逐步转化为线性方程来求解,即是依次用切线代替曲线,用线性函数的零点作为函数f(x)=0的近似值。

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

依次用弦线代替曲线,用线性函数的零点作为函数零点的近似值。 7、对应程序:

用牛顿法求解x3?155?0的根,取初始值为10

#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(\ printf(\}

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<< \ cin >> x1 >> x2; f1=f(x1); f2=f(x2);

} while(f1*f2 >= 0); x = root(x1,x2);

cout << setiosflags(ios::fixed) << setprecision(7); cout << \ 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; 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.00001); return x; }

8、实验结果:

x3?155?0的根是 X= 5.3716854

f(x)?0.002*9.81?1.4*10?5x1.5?1.15*10?5x2?0 的根是 X= 37.734196 9、图形(如果可视化) 牛顿法:

弦截法:

10、实验体会:

第一次用C语言编写计算方法方面的程序,感觉很难,很多次都想放弃了,不过最后将问题解决了,一种说不出的成就感。插值与拟合中的牛顿法和弦截法都是通过对图形的观察和实际计算方法的运用,从而解决一些复杂的数值问题,我们应熟练掌握它,将其运用于我们的实际生活中。