作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业。
我把二分法、牛顿法、弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现。具体的程序详细标注后放在文章附录了,算法数学原理也一并放在文中了。需要的同学自取。下文为作业详解
题目:给定方程:sin10x-xe-x=x,完成以下工作
1.绘出函数f(x)=sin10x-xe-x-x的图形,确定有根区间。
函数图像如下图,可以确定函数有三个根,区间分别为[-0.3,-0.2],[-0.1,0.1],[0.2,0.3].
2.使用二分法求出方程的根,要求精度ε≤10-8
二分法数学原理:
对于区间[a,b]上连续不断且f(a)*f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下:
1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
2 求区间(a,b)的中点c.
3 计算f(c).
(1) 若f(c)=0,则c就是函数的零点;
(2) 若f(a)·f(c)<0,则令b=c;
(3) 若f(c)·f(b)<0,则令a=c.使用 Newton 法求出方程的根,要求精度
(4) 判断是否达到精确度ξ:即若|a-b|<ξ,则得到零点近似值a(或b),否则重复2-4.
具体运行程序在附录中,此处只展示结果
计算结果如下表所示
有根区间 |
二分次数 |
f(x)=0的根x* |