当前位置:
文档之家› 数值分析matlab完整版实验报告
数值分析matlab完整版实验报告
yk
1.000000e+000 1.59000000e-001 1.29961633e-002 1.96128714e-004
yk
-3.00000000e+000 1.70000000e+001 1.00000000e+000 1.05630272e-001 -1.89859581e-003 4.15115927e-007
参考文献
[1] 李庆扬.数值分析(第四版)北京:清华大学出版社,施普林格出版社.2001. [2] 胡学林.可编程控制器教程.北京:机械工业出版社,2003.
6
x3=x2-(2*f2/(w-sqrt(w^2-4*c*f2))); elseif w>0
x3=x2-(2*f2/(w+sqrt(w^2-4*c*f2))); end err=abs(x3-1.87938524);
4
《数值分析》报告
x0=x1; x1=x2; x2=x3; y=feval('f',x2); fprintf('k=%.0f x%d=%.8f e%d=%.6e y%d=%.8e\n',k,k,x2,k,err,k,y) if (err<e)|(y==0)|(k==max)
break; end end
5. 运行结果
(1)牛顿法计算结果 k 0 1 2
图 1 运行结果界面
xk
2.00000000 1.88888889 1.87945157
ek
9.503649e-003 6.632695e-005
5
yk
1.000000e+000 7.270233e-002 5.038501e-004
(3) newton.m,牛顿法
function newton(f,d,x0,e,max)
%f 是要求根的方程(f(x)=0); %d 是 f(x)的导数; %x0 是所给初值,位于 x*附近; %e 是给定允许误差;
%max 是迭代的最大次数; %x1 是 newton 法求得的方程的近似解; %err 是误差估计; %k 是迭代次数;
明,
f '(x*) 0
''(x*) ,
f ''(x*) 0 f '(x*)
,牛顿迭代法是平方收敛的,且
lim
k
ek 1 ek2
f ''(x*) 2 f '(x*) 。
(2)弦截法 将牛顿迭代法中的 f '(xk ) 用 f (x) 在 xk1 , xk 处的一阶差商来代替,即可得弦截法
《数值分析》报告
运用 Matlab 求解非线性方程的根
学 院: 专 业: 班 级: 姓 名: 学 号:
《数值分析》报告
1. 目的 掌握非线性方程求根的方法,并选取实例运用 MATLAB 软件进行算法的实
现,分别用牛顿法、弦截法和抛物线法求非线性方程的根。
2. 报告选题 报 告 选取 《数 值分 析( 第四版 )》 290 页习 题 7 作为 研 究对象 , 即求
3. 理论基础
(1) 牛顿迭代法
牛顿迭代法是一种特殊的不动点迭代法,其计算公式为
xk 1
xk
f (xk ) , k f '(xk )
0,1, 2,...
其迭代函数为
(x) x f (x ) f '(x )
牛 顿 迭 代 法 的 收 敛 速 度 , 当 f (x*) 0, f '(x*) 0, f ''(x*) 0 时 , 容 易 证
fprintf('k=%.0f x%d=%.8f y%d=%.8e\n',0,0,x0,0,feval('f',x0)) fprintf('k=%.0f x%d=%.8f y%d=%.8e\n',1,1,x1,1,feval('f',x1)) fprintf('k=%.0f x%d=%.8f y%d=%.8e\n',2,2,x2,2,feval('f',x2)) for k=3:max f0=feval('f',x0); f1=feval('f',x1); f2=feval('f',x2); a=(f0-f2)/(x0-x2); b=(f1-f2)/(x1-x2); c=(a-b)/(x0-x1); w=b+c*(x2-x1); if w<0
6. 小结 迭代法是解非线性方程的主要方法,牛顿法就是最有效的迭代法之一,它
在单根附近具有较高阶的收敛速度。而弦截法用差商代替导数,对于较复杂的 函数运算变的方便。抛物线法也是超线性收敛的,适用于求多项式的实根和复 根。
通过本次报告加深了对牛顿法、弦截法和抛物线法求解非线性方程根的理 解,同时掌握了 MATLAB 强大的计算功能,增强了对数值分析课程的学习兴趣。
xk 1 xk
f
(
xk
f )
( xk f
) (
xk
1
)
(
xk
xk 1)
。
(3)抛物线法
1
《数值分析》报告
弦截法可以理解为用过 (xk1, f (xk1)), (xk f (xk )) 两点的直线方程的根近似 替 f (x) 0 的 根 。 若 已 知 f (x) 0 的 三 个 近 似 根 xk , xk1 , xk2 用 过 (xk , f (xk )), (xk 1, f (xk 1)), (xk 2, f (xk 2)) 的 抛 物 线 方 程 的 根 近 似 代 替 f (x) 0 的 根,所得的迭代法称为抛物线法,也称密勒(Muller)法。
break; end
3
《数值分析》报告
end
(5) pwxmethod.m 抛物线法
function pwxmethod(f,x0,x1,x2,e,max)
%f 是要求根的方程(f(x)=0); %x0,x1,x2 是所给初值,位于 x*附近; %e 是给定允许误差; %max 是迭代的最大次数; %x3 是弦截法求得的方程的近似解; %err 是误差估计; %k 是迭代次数; %y是f(x)值
《数值分析》报告
即 x* x2 1.87945157 ,误差为 6.632695e-005。 (2)弦截法计算结果
k
xk
ek
0
2.00000000
1
1.90000000
2
1.88109394
1.708696e-003
3
1.87941106
2.582017e-005
即 x* x3 1.87941106 ,误差为 2.582017e-005。
f (x) x3 3x 1 0 在 x0 2 附近的根。根的准确值 x* 1.87938524... ,要求结 果准确到四位有效数字。
(1) 用牛顿法; (2) 用弦截法,取 x0 2 , x1 1.9 ; (3) 用抛物线法,取 x0 1, x1 3 , x2 2 。
x0=x1; y=feval('f',x0); fprintf('k=%.0f x%d=%.8f e%d=%.6e y%d=%.6e\n',k,k,x0,k,err,k,y) if (err<e)|(y==0)|(k==max)
break; end end
(4) xjmethod.m 弦截法
function xjmethod(f,x0,x1,e,max)
(3) 抛物线法计算结果
k
xk
ek
0
1.00000000
1
3.00000000
2
2.00000000
3
1.89314982
1.376458e-002
4
1.87913526
2.499828e-004
5
1.87938530
5.621918e-008
即 x* x6 1.87938530 ,误差为 5.621918e-008。
4. MATLAB 实现 根据牛顿法、弦截法和抛物线法求非线性方程根的理论基础,为实现计算
在 MATLAB 中编写了以下 M 文件: (1) f.m,题目中的函数 f
function y=f(x)
y=x^3-3*x-1;
(2) d.m,函数 f 的导数
function y=d(x)
y=3*x^2-3;
%f 是要求根的方程(f(x)=0); %x0,x1 是所给初值,位于 x*附近; %e 是给定允许误差; %max 是迭代的最大次数; %x1 是弦截法求得的方程的近似解; %err 是误差估计; %k 是迭代次数; %y 是 f(x)值;
fprintf('k=%.0f x%d=%.8f y%d=%.8e\n',0,0,x0,0,feval('f',x0)) fprintf('k=%.0f x%d=%.8f y%d=%.8e\n',1,1,x1,1,feval('f',x1)) for k=2:max x2=x1-(feval('f',x1)*(x1-x0))/(feval('f',x1)-feval('f',x0)); err=abs(x2-1.87938524); x0=x1; x1=x2; y=feval('f',x1); fprintf('k=%.0f x%d=%.8f e%d=%.6e y%d=%.8e\n',k,k,x1,k,err,k,y) if (err<e)|(y==0)|(k==max)