割线法

割线法求解方程\(f(x)=0\)的根需要两个接近真实根\(x^\*\)的初值\(x_0\)和\(x_1\),于是得到函数\(f(x)\)上两个点\((x_0,y_0=f(x_0))\)和\((x_1,y_1=f(x_1))\),连接这两点得到一条直线(割线):

\begin{equation*}
y-y_1=\frac{y_1-y_0}{x_1-x_0}(x-x_1)
\end{equation*}

由于我们要求解\(f(x)=0\),因此设\(y=0\),由上式解出\(x\),作为下次迭代的初值。这个过程一直进行下去,有如下迭代关系:

\begin{equation}
x_{i+1}=x_i-\frac{x_i-x_{i-1}}{y_i-y_{i-1}}y_i
\tag{6.1}\label{6.1}
\end{equation}

其中\(y_i=f(x_i)\)。以上过程如图6.1所示。



图6.1 割线法求根

割线法需要两个初值,但是不需要求函数的导数。割线法程序如下:

function x = mysecant (f,x0 ,x1 ,n)
% Solves f(x) = 0 by doing n steps of the secant method
% starting with x0 and x1.
% Inputs : f -- the function , input as an inline function
% x0 -- starting guess , a number
% x1 -- second starting geuss
% n -- the number of steps to do
% Output : x -- the approximate solution
y0 = f(x0 );
y1 = f(x1 );
for i = 1:n % Do n times
x = x1 - (x1 -x0 )* y1 /(y1 -y0) % secant formula .
y=f(x) % y value at the new approximate solution .
% Move numbers to get ready for the next step
x0=x1;
y0=y1;
x1=x;
y1=y;
end

盈不足术

盈不足术是割线法和二分法的综合。如二分法,我们先选定两个初始点\(a\)和\(b\),且保证\(f(a)\)和\(f(b)\)异号。然后我们根据割线法,得到新的迭代结果,

\begin{equation*}
x =b-\frac{b-a}{f(b)-f(a)}f(b)
\end{equation*}

然后我们按照二分法,判断\(f(x)\)的符号,如果\(f(x)\)与\(f(a)\)同号,则把\(x\)设为新的\(a\),否则,把\(x\)设为新的\(b\)。注意到,一般情况下,\(a\)和\(b\)其中之一逐渐趋近于\(x^\*\),而不大可能二者共同趋近于\(x^\*\),因此不大会\(b-a\nrightarrow 0\)。比如,图6.1中的函数,\(a\rightarrow x^\*\),而\(b\nrightarrow x^\*\)。

收敛性

如果我们选的初值\(x_0\)比较好,牛顿法会很快收敛到\(x^\*\)。割线法要比牛顿法慢一些,盈不足术会更慢。二分法是收敛最慢的。

如果我们选的初值或初始区间不够好,割线法——如牛顿法一样——可能会不收敛。盈不足术——如二分法一样——总是收敛的,因为盈不足术会一直保证根在一个确定的区间内。

模拟和实验

尽管牛顿法最快,但有些情况下,牛顿法不太好用,甚至根本不能用。比如难以导出\(f'(x)\)表达式的情况。在科学和工程中的一些问题中,甚至连\(f(x)\)的表达式都没有,\(f(x)\)是实验和模拟的结果时就是这样的情况。在这样的情况下,割线法一般是最佳选择。

练习

6.1 用纸和计算器对方程\(f(x)=x^3-4=0\)应用三次盈不足术迭代,初始区间\([1,3]\),计算各次迭代结果的误差和相对误差,并与练习3.3和5.2结果做比较。

6.2 写出函数程序myregfalsi,实现盈不足术,并使残量绝对值小于给定公差,并将程序解方程\(f(x)=2x^3+3x-1=0\),初始区间为\([0,1]\),公差为\(10^{-8}\)。程序需要迭代多少步?与练习5.1结果做比较。

Todd's Matlab讲义第6讲:割线法的更多相关文章

  1. Todd's Matlab讲义第5讲:二分法和找根

    二分法和if ... else ... end 语句 先回顾一下二分法.要求方程\(f(x)=0\)的根.假设\(c = f(a) < 0\)和\(d = f(b) > 0\),如果\(f ...

  2. Todd's Matlab讲义第4讲:控制误差和条件语句

    误差和残量 数值求解方程\(f(x)=0\)的根,有多种方法测算结果的近似程度.最直接的方法是计算误差.第\(n\)步迭代结果与真值\(x^\*\)的差即为第\(n\)步迭代的误差: \begin{e ...

  3. Todd's Matlab讲义第3讲:牛顿法和for循环

    方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许 ...

  4. Todd's Matlab讲义第2讲:Matlab 编程

    Matlab也可以编程,可存为以.m为后缀的文件,称为M文件.M文件有两种:函数和脚本. 函数程序 点击新建图标,在打开的窗口里输入如下内容: function y = myfunc (x) y = ...

  5. Todd's Matlab讲义第1讲:向量,函数和作图

    向量 Matlab 中最基本的对象是矩阵,向量是特殊的矩阵.行向量是\(1\times n\)矩阵,列向量是\(m\times 1\)矩阵.输入如下行向量: >> v=[0 1 2 3] ...

  6. 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

    摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...

  7. Bag of Words/Bag of Features的Matlab源码发布

    2010年11月19日 ⁄ 技术, 科研 ⁄ 共 1296字 ⁄ 评论数 26 ⁄ 被围观 4,150 阅读+ 由于自己以前发过一篇文章讲bow特征的matlab代码的优化的<Bag-Of-Wo ...

  8. Coursera台大机器学习技法课程笔记03-Kernel Support Vector Machine

    这一节讲的是核化的SVM,Andrew Ng的那篇讲义也讲过,讲的也不错. 首先讲的是kernel trick,为了简化将低维特征映射高维特征后的计算,使用了核技巧.讲义中还讲了核函数的判定,即什么样 ...

  9. 转自 z55250825 的几篇关于FFT的博文(一)

        关于FFT,咱们都会迫不及待地 @  .....(大雾)(貌似被玩坏了...)    .....0.0学习FFT前先orz FFT君.         首先先是更详细的链接(手写版题解点赞0v ...

随机推荐

  1. IDEA:Idea注册

    注册码查找: http://idea.lanyus.com ,然后点击 OK

  2. Scala高阶函数示例

    object Closure { def function1(n: Int): Int = { val multiplier = (i: Int, m: Int) => i * m multip ...

  3. AngularJs ngIf、ngSwitch、ngHide/ngShow

    在组合这些ng指令写到一篇文章里的时候,基本是有规则的,本兽会将功能相似相近的一类整合到一篇文章,方便理解和记忆. 这篇的三个指令也都是对DOM元素的操作,页面上显示/隐藏的判断,添加/移除的判断. ...

  4. 第1个linux驱动___打印"hello world"

    为了方便后续的深入,我们在驱动程序中用printk( )函数来打印"hello world",printk( )是内核中自带的函数,专门用于在打印内核信息.在安装驱动模块到内核中的 ...

  5. f

     module.exports = util; }); 除了define之外,我们看到module.exports = util;这一句比较特殊.这句是在说,我util模块向外暴露的接口就这些,其他所 ...

  6. [中英双语] 数学缩写列表 (List of mathematical abbreviations)

    List of mathematical abbreviations From Wikipedia, the free encyclopedia 数学缩写列表 维基百科,自由的百科全书 This ar ...

  7. JS010-DOM

    JS010-DOM 本章内容: 1.理解包含不同层次节点的DOM 2.使用不同的节点类型 3.客服浏览器兼容性问题及各种陷阱 DOM(文档对象模型)是针对 HTML和xml文旦过得一个API(应用程序 ...

  8. ajax成功跨域_自己写的

    跨域的简单原理:一般浏览器会阻止js请求异端服务器(A服务器请求B服务器).js连接却除外 如:<script type="text/jscript" src="h ...

  9. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

       FastCGI编程包括四部分:初始化编码.接收请求循环.响应内容.响应结束循环. FCGX_Request request; FCGX_Init(); ); FCGX_InitRequest(& ...

  10. EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. Entity Framewo ...