二分法和if ... else ... end 语句 先回顾一下二分法.要求方程\(f(x)=0\)的根.假设\(c = f(a) < 0\)和\(d = f(b) > 0\),如果\(f(x)\)是连续函数,那么方程的根\(x^*\)一定位于\(a\)和\(b\)之间.然后,我们看一下\(a\)和\(b\)中点\(x=(a+b)/2\),计算函数值\(y=f(x)\),如果函数不为0,比较\(c\).\(d\)和\(y\)的符号,确定新的二分区间.具体来说,如果\(c\)和\(y\)同号,新…
误差和残量 数值求解方程\(f(x)=0\)的根,有多种方法测算结果的近似程度.最直接的方法是计算误差.第\(n\)步迭代结果与真值\(x^\*\)的差即为第\(n\)步迭代的误差: \begin{equation*}e_n=x_n-x^*\end{equation*} 但是,我们一般是不知道真实值\(x^\*\)的,否则,我们也不会费劲去算了.所以,直接计算误差是不可能的,需要我们另辟蹊径. 一个可能的方法是,程序一直运行,直到结果不再变化.这个方法通常还是很管用的.有时候,程序结果不再变化并…
方程数值求解 下面几讲,我们将聚集如下方程的解法: \begin{equation} f(x)=0 \tag{3.1}\label{3.1} \end{equation} 在微积分课程中,我们知道,许多优化问题最终归结为求解上述形式的方程,其中\(f\)为你要求极值的函数\(F\)的导数.在工程问题中,函数\(F\)来源多种多样,有公式.微分方程的解.实验和模拟等. 牛顿迭代 我们把方程\eqref{3.1}的解记为\(x^\*\).方程的解法有三种:对分法.割线法和牛顿法.这三种方法都需要猜测…
Matlab也可以编程,可存为以.m为后缀的文件,称为M文件.M文件有两种:函数和脚本. 函数程序 点击新建图标,在打开的窗口里输入如下内容: function y = myfunc (x) y = 2*x.^2 - 3*x + 1; 将文件保存为myfunc.m,保存在当前目录下.这个文件就可以直接在命令窗口使用了,用法如Matlab内置函数,如在命令窗口输入如下内容: >> x = -2:.1:2; >> y = myfunc(x); >> plot(x,y) 这里…
向量 Matlab 中最基本的对象是矩阵,向量是特殊的矩阵.行向量是\(1\times n\)矩阵,列向量是\(m\times 1\)矩阵.输入如下行向量: >> v=[0 1 2 3] 回车,Matlab 将输出此行向量: v = 0 1 2 3 输入如下列向量: >> u = [9; 10; 11; 12; 13] 按如下方式访问向量的元素: >> u(2) 按如下方式改变元素的值: >> u(2)=47 按如下方式提取多个连续向量: >>…
割线法 割线法求解方程\(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\),作为下次迭…
最近有人贴出BAT的面试题,题目链接. 就是实现系统的开根号的操作,并且要求一定的误差,其实这类题就是两种方法,二分法和牛顿迭代,现在用OC的方法实现如下: 第一:二分法实现 -(double)sqrt_binary:(int)num { double x = sqrt(num); double y = num / 2; double low = 0.0; double up = num; int count = 1; while (fabs(y-x) > 0.000000001) { NSLo…
运筹学课上,首先介绍了非线性规划算法中的无约束规划算法.二分法和黄金分割法是属于无约束规划算法的一维搜索法中的代表. 二分法:$$x_{1}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}-\Delta)$$$$x_{2}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}+\Delta)$$ 黄金分割法:$$x_{1}^{(k+1)}=x_{R}^{(k)}-(\frac{\sqrt{5}-1}{2})(x_{R}^{…
/** 题目:Flow construction SGU - 176 链接:https://vjudge.net/problem/SGU-176 题意: 有源汇有上下界的最小流. 给定n个点,m个管道.每个管道给出u,v,z,c.u表示起点,v表示终点,z表示容量,如果c==1,那么表示还有下界为z. 如果c==0,表示没有下界. 求从1到n的最小流. 思路: 第一种做法: 转化为无源汇求超级源S到超级汇T的最大流flow1(此时从s出发的流和为flow1),然后讲t到s的边删掉(可以使流量等于…
http://blog.sina.com.cn/s/blog_67f37e760101bu4e.html 实例结果http://wenku.baidu.com/link?url=SiGsFZIxuS1E1VZWtixqXdjG5Y9SY4tu1W8TXgk147HDOLLCgpffjX8ywDMIH1PYkQSi5rp8gkmnMPsLhH-IUaGjMl8hsRhZQssTPmnBjdy 关于MATLAB 插值(Interpolation)http://blog.sina.com.cn/s/b…