Matlab
记录 Matlab 使用过程中的各种技巧
心态与习惯
trust yourself, then success will follow you.
展开
-
非线性规划求解器 Lingo, Matlab 使用心得,及使用的求解算法
对于非线性规划,Cplex 与 Gurobi 只支持二次规划(包括凸规划,二阶锥规划,目标函数或约束条件中可以包含二次函数)。若更高次数,或者非凸规划,非二阶锥规划,则需要用其他求解器了。matlab 自带的 fmincon 可以得到一些可行解,比较专业常用的求解器还有 lingo,自己这段时间准备用下看看。......原创 2019-07-22 23:42:16 · 15000 阅读 · 4 评论 -
matlab与c语言中的计时函数
最近编程用到了计时,网上搜了搜,先简单总结下,以后再补充。matlab记录一段程序的执行时间方法:用tic与toctic程序tocC语言用到time.h头文件,及clock_t,CLOCK_PER_SEC,例如:#include#includevoid main(){ int N=10000; int sum=0; clock_t i原创 2015-03-22 08:56:31 · 969 阅读 · 1 评论 -
matlab中调用cplex 以及使用 Yalmip 工具箱
一、首先需要在IBM的官网上下载cplex的安装包,有90天的免费试用期,够用了。二、找到CPLEX安装路径中的matlab文件夹,以及examle文件夹里面的matlab例子原创 2015-03-19 23:31:48 · 119013 阅读 · 80 评论 -
matlab 调用linprog 出错
最近用到matlab的linprog函数,发现若输入问题的可行域不存在,matlab仍然迭代并返回一个解,并提示以下信息:Exiting: One or more of the residuals, duality gap, or total relative errorhas grown 100000 times greater than its minimum value so f原创 2015-03-31 10:38:38 · 7690 阅读 · 0 评论 -
有序的整数划分,青蛙跳台阶问题 MATLAB
网上搜到的整数划分问题不考虑排序,例如认为3 1 与1 3是一样的。考虑排序的整数划分问题为跳台阶问题,但网上搜到的跳台阶问题没有输出排列结果,自己编写的matlab程序如下:function hua_fenn=input('请输入一个数:\n');global A B;num=count(n,n);A=zeros(num,n);B=zeros(n,1);m=1;global原创 2015-09-27 10:15:12 · 1699 阅读 · 1 评论 -
遗传算法求解带非线性约束的单目标问题,matlab代码,基于K Deb的论文
三年前曾经使用遗传算法求解了一个问题,现在将代码整理出来,放在网上交流原创 2016-09-04 12:13:39 · 21254 阅读 · 17 评论 -
如何提高 matlab 计算速度 运算效率
最近在网上查了一些资料,并结合自己的经验,就如何提高matlab计算效率,总结一下几个原则:1. 提前给数组分配大小。2. 尽量用矢量计算,减少 for 循环。3. 尽量调用 maltab自带的函数来实现一些功能。4. 少用 find 函数,用 logical 替代。5. 大规模的循环,可以调用c语言或c++的计算。原创 2016-10-20 01:10:10 · 21140 阅读 · 5 评论 -
matlab 用 matlabFunction 定义含参变量的积分,将符号函数转化为匿名函数
一些积分函数,积分上下限含有变量,并且不容易手工将函数积分出来。这时,可以先用符号函数 int 表示积分,然后用matlabFunction 将符号函数转化为匿名函数,从而达到化简目的。例如,有如下函数:其中,f(z) 为标准正态分布的密度函数,这个函数是一个关于 x 的函数,但由于这个积分人工没办法积出来,用符号函数必须用两个变量表示。若要化简成单变量的函数,原创 2016-10-25 22:48:56 · 16951 阅读 · 1 评论 -
matlab 画图添加图例时,改变图例中字体大小
matlab 画图时,在图形中添加图例要用到 legend 函数。还有一些图例属性可以调整,例如改变图例位置用到 ‘Location’;改变图例中文字大小需要用到 'Fontsize'。一般情况下,图例中的文字只需要单引号括起来即可;然而,当想改变图例中文字大小时,单引号外面还要加上大括号。matlab 的说明文档并没有具体指明这一点,估计以后的版本会修正吧。举例,若改变文字大...原创 2016-10-31 03:53:01 · 70326 阅读 · 7 评论 -
遗传算法 求解旅行商 TSP 问题,matlab代码
学习启发式算法时,旅行商问题是一个经典的例子。其中,遗传算法可以用来求解该问题。遗传算法是一种进化算法,由于其启发式算法的属性,并不能保证得到最优解。求解效果与初始种群选取,编码方法,选择方法,交叉变异规则有关。上课时,老师不知从哪里找了一个非常粗糙的程序,自己将不少错误修正,增加了一些注释方便理解,并增加了一些代码使程序更完美。该代码可以动态显示每一代的路线,非常直观!(备注:对于一般的 ...原创 2016-11-02 01:24:11 · 76837 阅读 · 191 评论 -
期望库存量,期望缺货量的线性拟合,基本思想与 matlab 代码
基于论文:Rossi R, Tarim S A, Prestwich S, et al. Piecewise linear lower and upper bounds for the standard normal first order loss function[J]. Applied Mathematics and Computation, 2014, 231: 489-502.在原创 2016-11-07 00:56:51 · 3300 阅读 · 0 评论 -
matlab 中画箭头
matlab 画图时,没有直接画箭头的函数。网上搜索解决方案时,有人提到用 annotation 函数,但该函数的位置坐标并不是传统的坐标值,而是在整个图形位置的单位坐标,不好调整;另一种方法 用 fill 函数填充一个三角形区域表示箭头,代码比较多并且繁琐。解决方案:有外国大神直接编写了一个 arrow 函数,坐标值是真实坐标, 可以像 使用 plot 画直线 那样 使用 该函数画箭头。文件原创 2016-11-07 01:16:08 · 23372 阅读 · 5 评论 -
matlab中的 peaks 函数的含义
matlab 中的 peaks 函数是一个典型的多元函数。它本质上是一个二元高斯分布的概率密度函数,函数表达式为:\begin{equation}f(x,y)=3(1-x)^{2}e^{-x^2-(y+1)^2}-10(\frac{1}{5}x-x^3-y^5)e^{-x^2-y^2}-\frac{1}{3}e^{-(x+1)^2-y^2}\end{equation}在 matlab 命令原创 2016-11-07 20:30:01 · 87652 阅读 · 1 评论 -
初始库存不为0 时的 Wager Whitin 算法 Matlab 代码
最近读几篇老论文, 发现Wager-Whitin 算法 在初始库存不为 0 时仍然成立。自己没有想到如何证明。原 wagner whitin的论文上又看了看,似乎证明时没有考虑到初始库存不我0时定理 1 不成立的情况。但经过编程测试,用了五六百个算例,发现仍然成立。此时,最优解有如下特点:第一个生产周期刚好将初始库存与生产量消化完,之后的阶段仍然满足“”零库存“”性质。Matla原创 2016-11-09 19:38:03 · 1873 阅读 · 1 评论 -
matlab心形图大全,几个经典的函数图像,有趣的函数图像,matlab画图
收藏几个经典的函数,用来当作数学优化方法求解的例子。再收藏几个有趣的函数图像。1 平面心形图像经过 网上搜索,平面坐标系中,下面函数最想心形图像,而且函数形式简单,不需要分段。 改变右面的数值可以变化心形图像的大小。> ezplot('x^2+(y-(x^2)^(1/3))^2=9')原创 2016-11-11 21:25:35 · 163851 阅读 · 7 评论 -
static uncertainty策略下的随机批量生产问题(stochastic lot sizing) 的建模与求解,Matlab
基于论文:Bookbinder J H, Tan J Y. Strategies for the probabilistic lot-sizing problem with service-level constraints[J]. Management Science, 1988, 34(9): 1096-1108.对于单产品批量生产问题,问题模型为:文中提出了三种订货策略。原创 2016-11-15 19:39:11 · 1516 阅读 · 0 评论 -
static dynamic策略下的随机批量生产问题
基于论文:Bookbinder J H, Tan J Y. Strategies for the probabilistic lot-sizing problem with service-level constraints[J]. Management Science, 1988, 34(9): 1096-1108.随机批量生产问题中:"static dynamic" 策略是指生产周原创 2016-11-19 03:28:17 · 787 阅读 · 0 评论 -
static dynamic 情形下的 (R, T)策略及 Matlab 代码
基于论文: Tarim S A, Kingsman B G. The stochastic dynamic production/inventory lot-sizing problem with service-level constraints[J]. International Journal of Production Economics, 2004, 88(1): 105-119.原创 2016-11-19 04:19:32 · 768 阅读 · 0 评论 -
Matlab代码,一维搜索用进退法确定搜索区间
在使用二维优化算法时,经常需要调用一维搜索算法求步长,而一维搜索算法需要确定搜索区间。进退法不仅可以直接当作一维搜素算法使用,也可以用来确定一维搜索区间。进退法确定搜索区间的原理是:假设一维目标函数为一个单峰函数,初始点 x0, 步长 h, 迭代点 x1= x0+h。 lamda初始值设为1.(1) 若 f(x0)> f(x1), 则 x2=x1+lamda*h. 找到一个 lamda原创 2016-11-21 03:22:53 · 18502 阅读 · 12 评论 -
随机动态规划,随机库存管理,matlab 代码, c 代码
与一般的动态规划相比,随机动态规划是指 下一阶段的状态是不确定的,每个状态有一定的概率。因此,在计算递推公式时,需要取期望。确定的动态规划的递推公式:而随机的动态规划的递推公式为:其中, p_{k} 表示随机变量取值 的概率, 在随机动态规划中,每一个决策 x_{i} 对应多个S_{i+1}。举例,库存管理问题:3个阶段,初始库存为1,每个阶段的需求随原创 2016-12-10 19:37:33 · 9196 阅读 · 8 评论 -
有能力约束的单产品批量生产问题,动态规划算法,Matlab
有能力约束的批量生产问题可以归约为背包问题。因此,当能力约束可变时,批量生产问题为NP 难问题。而当能力约束恒定时,可以用多项式时间的动态规划算法求解。设单位可变生产成本为 q(t), 单位库存持有成本 h(t), 生产启动成本 qt, 各阶段库存水平 st, 需求量 dt, 生产量 xt, 是否生产 yt。一般的单产品批量生产问题的数学模型如下:问题1令则原问原创 2016-12-27 01:43:18 · 3076 阅读 · 1 评论 -
matlab 与 Java 运算速度
最近运算程序时,发现 matlab计算速度跟 jave 差挺远的:一个算法在matlab中二十分钟,在java中一分钟。最大原因在于数据结构问题:matlab用矩阵存储数据,空间上占用不少开销。而java有hashmap存储,大大提高了运算速度。在运行大型程序时,matlab的矩阵能够达到上千万行,严重托延了计算速度。原创 2017-03-17 23:07:52 · 2926 阅读 · 0 评论 -
matlab 并行计算使用心得 (不断补充)
跑了大型程序时,发现 for 循环太多拖延了速度,尝试使用并行计算。并行计算时,用parfor取代for,进行循环计算。但在变量使用上有不少注意事项,慢慢总结写出来。1. 首先是临时变量的使用。临时变量 在 parfor 循环的每个迭代开始时被清除,因此若parfor 循环外还要用到变量时,这个变量一定不能是临时变量。2. 使用 matlab的优化原创 2017-03-17 23:24:26 · 23298 阅读 · 16 评论 -
matlab 与java 中的句柄
matlab 中的句柄应该是借鉴了java。 java中句柄相当于一个对象的引用;而matlab 中句柄用 @ 表示,相当于一个函数。句柄在两个软件里面的功能很类似。原创 2017-03-27 22:15:30 · 692 阅读 · 0 评论 -
java 与 matlab 的一些感想
大约 08 年就接触 java 了,但一直知道个皮毛。真没想到,快过10年了,似乎也有继续钻研的必要性。现在用 matlab 编程完全没问题了,因为自己编了不少大型程序,已经无所畏惧了。而 java 还很生疏,源于上手少。发现老外的原版书写的真好,讲解很充分。真比中文版好太多。只会 matlab 一种编程显然是不够的,因为严格意义上 matlab 不太像编程语言原创 2017-04-07 07:34:44 · 6173 阅读 · 1 评论 -
java 与 matlab 定义数组的区别,不等宽矩阵
MATLAB 定义数组时,行数和列数必须是提前确定好的,因此,MATLAB定义的矩阵一定是等宽的。而 java 定义数组时,可以只确定行数,因此,可以定义不等宽的矩阵。举例: double[][] e = new double[3][]; for (int i=0;i<3;i++) { e[i] = new double[i+1]; } Sys原创 2017-09-19 08:53:36 · 1460 阅读 · 0 评论