2 利用MATLAB 中fzero 命令求解
在MA TLAB 命令窗中输入:
? f=inline(' x-0.5*sin(x)-1'); %建立函数1sin 5.0)(--=x x x f ? c=fzero(f,[1,2]) %求函数)(x f 在[1,2]内的零点c 运行结果为:
? Zero found in the interval: [1, 2]. ? c = 1.4987 或输入:
? c=fzero(f,1) %求函数)(x f 在1附近的零点c 运行结果为:
? Zero found in the interval: [0.98, 1.82]. ? c = 1.4987
显然, fzero 命令用起来简单易行,但从科学的态度出发,我们应该充分了解“隐藏”在该命令背后的原理、算法以及实现过程。因此,下面介绍求方程近似根的原理、公式及编程方法,从而掌握求解一般非线性方程近似根的常用数值方法,熟悉这些原理、方法对于从事科学研究,解决复杂问题是十分必要的。 3 “二分法”
如果()f x 在[],a b 连续,()()0f a f b ?
基本思想:
首先取区间[],a b 的中点1,2
a b
x +=
保留有根的半个区间],[1x a 或],[1b x ;
再取新的区间的中点,保留有根的半个区间,依次类推,直到区间长度减小到给定的精度ε,此时,该区间内任意一点可以作为方程根的近似值。
具体步骤:
步1:取区间[],a b 的中点1,2
a b
x +=
如果1()0f x =,则1x ξ=为所求的根; 步2:如果1()0f x ≠且1()()0f x f b ?
步3:再重复执行步1至步2,直到区间长度不超过给定的误差界ε。 这样,重复执行上述步骤n 次,我们得到包含解ξ的区间序列[]
{}
1
,n n n a b ∞=,它是一个区间套,
即[][][]11,,,n n a b a b a b ???? ,可以证明,它有唯一的收敛点*
x ,也就是方程的根ξ。
误差分析:
若用],[n n n b a x ∈作为方程根ξ的近似值,则其误差
*2
n n n n b a
x x b a --