【精选资料】上机实验报告非线性方程的数值解法

二分法实验(1)

上机题目:二分法的应用

实验目的:熟悉二分法并在计算机上实现 实验要求:

①上机前充分准备,复习有关内容,写出计算步骤,查对程序;

②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言,算法步骤

陈述,变量说明,程序清单,输出计算结果,结果分析等等; ③用编好的程序在Matlab环境中执行。 算法说明:

①找出 计算f(x)在有限根区间[a, b]端点的值,f(a),f(b)

a?ba?b②计算 计算f(x)在区间中点()处的值f() .

22a?ba?ba?b③判断 若f()=0,则即是根,计算过程结束,否则检验若()f(a)<0,则以

222a?ba?b代替b,否则以代替a.反复执行步骤②和步骤③,直到区间[a, b]长度小于允许误22a?b差?,此时中点即为所求近似根。

2计算例题:求f(x)=x3- x-1在[1,1.5]的零点. f(1)<0,. f(1.5)>0,delta= d=10?6

不动点迭代法实验⑵

上机题目:不动点迭代法的实现

实验目的:熟悉迭代法并在计算机上实现 实验要求:

①上机前充分准备,复习有关内容,写出计算步骤,查对程序;

②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言,算法步骤陈述,变量说明,程序清单,输出计算结果,结果分析等等; ③用编好的程序在Matlab环境中执行。 算法说明:

*f(x)?0,则①准备 将f(x)?0改写为等价的形式x??(x)。若要求x满足

*x*??(x*);反之亦然。求f(x)的零点,等价于求的不动点,选择一个初始近似值x0代入x??(x)右端,得x1??(x0)。如此反复迭代计算xk?1??(xk),k?0,1,?,此为迭

代公式。

②不动点的存在性迭代法的收敛性 定理1 设?(x)?C[a,b]满足:

(1)对任意x?[a,b]有a??(x)?b;

(2)存在正常数L<1,使对任意x,y?[a,b]都有|?(x)??(y)|?L|x?y|,则

?(x)在[a,b]上存在唯一不动点x*。

定理2 设?(x)?C[a,b]满足定理1中的两个条件,则对任意x0?[a,b],由迭代公式得到的迭代序列{xk}收敛到?(x)的不动点x*,并有误差估计

Lk|xk?x|?|x1?x0|。 1?L*计算例题: 求f(x)=x3-x-1在[1,1.5]的零点. 取x0=1.5, d=10?6

牛顿法实验⑶

上机题目:实现Newton法

实验目的:编制求单变量非线性方程组的程序. 实验要求:

①上机前充分准备,复习有关内容,写出计算步骤,查对程序;

②完成实验后写出完整的实验报告,内容应该包括:所用的算法语言, 算法步骤陈述,变量说明,程序清单,输出计算结果,结果分析等; ③用编好的程序在Matlab环境中执行简化Newton法.来解方程。 计算步骤:

①准备 选定初始近似值x0,计算f0=f(x0),f?0?f?(x0)。 ②迭代 按公式 x1?x0?f0f0?迭代一次,得新的近似值x

1, 计算

f1?f(x1),f1??f?(x1).

③控制 如果 x1满足??1或f1?2,则终止迭代,以x1作为所求的根;否则

?x1?x0,当x1?c??转步骤4,此处?1,?2是允许误差,而 ???x1?x0时。

,当x1?c???x1其中c是取绝对误差或相对误差的控制常数,一般可取c=1.

④修改 如果迭代次数达到预先指定的次数N,或者f?=0,则方程失败;否则以(x1,f1,f1?)代替(x0,f0,f0?)转步骤2继续迭代。

例题:用牛顿方法解方程 x3-x-1=0,取迭代初值 x0=1.5, d=10?6.

程序代码: ①二分法:

function [x,k,error]=erfenfa(f,a,b,delta)

% 二分法求方程的根

% =左边:[给定区间内的一个实根,迭代次数,误差]

% =右边:erfenfa('函数表达式',区间左端点,区间右端点,预定精度) f=inline(f); if f(a)*f(b)>0

x=char(' none'); k=0;

error=char(' NONE'); disp(' 在给定区间不存在实根') else m=a; n=b;

N=10000; for k=1:N

x0=(m+n)/2; M=f(m); t=f(x0); if t==0 x=x0; else t; end

if t*M<0 n=x0; else m=x0; end

x=(m+n)/2;

error=abs(x-x0); if error

②不动点迭代法:

function [x,k,error]=BDdiedai(f,x0,a,b,delta)

% 不动点迭代法求方程的根

% =左边:[给定区间内的一个实根,迭代次数,误差]

% =右边:BDdiedai('迭代算式',初始近似值,区间左端点,区间右端点,预定精度) f=inline(f);

g=inline(diff(sym(f)));

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4