[toc]
这个学期在学数值分析,课程内容相当于学过的计算方法的升级版,数值分析是一门很有用的学科,可以解决很多工程上实际的问题,学习这门课最好的方法就是把学到的算法自己实现一遍,现在打算开一个新坑,把数值分析每一章学到的算法都用matlab实现一遍。
强力推荐Timothy Sauer的数值分析,他的书没有那么多详细的推导,但是入门举的例子非常恰当,最重要的是他可以帮助你理解算法的本质,知道为什么要这样做,这个系列也会讲一点关于这个算法的本质上的理解
第一篇是关于迭代法求非线性方程
一、二分法
二分法很容易理解,收敛的条件也很简单,满足介值定理即可
function xc=bisect(f,a,b,tol)
if sign(f(a))*sign(f(b)) >= 0
error('f(a)f(b)<0 not satisfied!') %停止运行
end
fa=f(a);
fb=f(b);
while (b-a)/2>tol
c=(a+b)/2;
fc=f(c);
if fc==0
break
end
if sign(fc)*sign(fa)<0
b=c;
fb=fc;
else
a=c;
fa=fc;
end
end
xc=(a+b)/2;
两个实例
(1)
f=@(x) x+sin(x)-1
bisect(f,1,2,0.001)
解得答案为1.5322
(2)
f=@(x) x+sin(x)-1
bisect(f,1,2,0.001)
解得答案为0.5107
二、不动点法(FPI)
接下来的方法其实都可以归结为迭代法,本质上就是利用所给的方程找出一个形如x=φ(x)的公式,然后进行迭代(可以自行设置迭代精度或者迭代次数来控制求根)
不动点法得到迭代公式的方式十分简单,但是是否收敛以及收敛区间的选取是重点,这里不多提传统的条件,用几何的角度去理解非常形象
例:求x^3+x-1=0的根
有三种不动点迭代的公式
x=g(x)=1-x^3
x=g(x)=(1-3x)^(1/3)
x=g(x)=(1+2x^2)/(1+3xxx)
用几何的角度理解就是求y=x与y=g(x)的交点,迭代的过程就是这样一个回旋的过程,这样就不难理解为什么需要g`(x)
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[MATLAB学数值分析(一)迭代法解非线性方程]http://www.zyiz.net/tech/detail-132279.html