实习题二计算方法

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

实习题二

班级:1502011 学号: 姓名: 成绩:

1实验目的

(1)通过对二分法与牛顿迭代法做编程练习和上机运算,进一步体会二分法和牛顿法的不同。

(2)编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。 2 实验内容

1、用牛顿法求下列方程的根:

(1)20x x e -=

(2)10x xe -=

(3)lg 20x x +-=

2、编写割线法程序求解第一问的方程。

3实验步骤

1. 通过定义牛顿法求方程的子函数,用main 函数调用子函数求根

3 程序设计、实验结果及分析

1、用牛顿法求下列方程的根:

(1)20x x e -=

(2)10x xe -=

(3)lg 20x x +-=

I. 实验步骤:通过定义牛顿法求方程的子函数,用main 函数调用子函数求根。 II .流程图:

III.程序代码:

2、编写割线法程序求解第一问的方程。

I. 实验步骤:利用两个初始值,通过割线法求解。

II.流程图:

III.程序代码:

#include

#include

#include

#define N 10000

#define eps 1e-6

#define eta 1e-8

double Gexian(double(*f)(double), double x0, double x1)

{

double x2, d;

int k = 0;

do

{

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

if (k++>N || fabs(((*f)(x1)-(*f)(x0)) / (x1 - x0))

{

printf("\n 割线法迭代发散");

break;

}

d = fabs(x2)<1 ? x2 - x1 : (x2 - x1) / x2;

x0 = x1;

x1 = x2;

printf("x(%d)=%lf\t", k + 1, x0);

} while (fabs(d)>eps&&fabs((*f)(x2))>eta);

printf("\n");

return x2;

}

double f1(double x)

{

return x*x - exp(x);

}

double f2(double x)

{

return x*exp(x) - 1;

}

double f3(double x)

{

return log10(x) + x - 2;

}

main()

{

double x0, x1, y0;

printf("请输入方程1迭代初值x0、x1:");

scanf("%lf%lf", &x0, &x1);

printf("x0=%lf \t x1=%lf\n", x0, x1);

y0 = Gexian(f1, x0, x1);

printf("方程1的根为%16.10f\n", y0);

printf("请输入方程2迭代初值x0、x1:");

scanf("%lf%lf", &x0, &x1);

printf("x0=%lf \t x1=%lf\n", x0, x1);

y0 = Gexian(f2, x0, x1);

printf("方程2的根为%16.10f\n", y0);

printf("请输入方程3迭代初值x0、x1:");

scanf("%lf%lf", &x0, &x1);

printf("x0=%lf \t x1=%lf\n", x0, x1);

y0 = Gexian(f3, x0, x1);

printf("方程3的根为%16.10f\n", y0);

system("pause");}

IV.运行结果:

V.结果分析:割线法的收敛速度快。

5总结

割线法的收敛速度比牛顿法略慢些,但是割线法避免了求导数,而且每迭代一次,只要求一次值,计算量比牛顿法少。

6参考资料

[1] 孙志忠. 计算方法与实习[M]. 东南大学出版社, 2011.07

[2] 谭浩强. C程序设计[M]. 清华大学出版社,2010.06

相关文档
最新文档