实习题二计算方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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