MATLAB优化——减少for的使用
Table of Contents
- 1. MATLAB
- 2. 矩阵计算——全0行整体替换
MATLAB
MATLAB作为一个强大的工具(可惜是收费的),在矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言等方面都有着卓越的表现。一方面友好的界面,直观的表示让很多用户为之倾倒,但另一方面又有很多人因为他的计算方式抱怨计算太慢,内存需求量大等。其实真的是MATLAB本身的局限么,或许是我们并没有真正懂得MATLAB吧。
MATLAB是matrix laboratory两个词的组合。换句话说,MATLAB是为矩阵而生的。而现实情况中(本人虽说MATLAB学习不久,但是已经阅读了很多前辈的代码),很多人并不是用矩阵的思想去思考MATLAB,而是用其他代码的思想。(这里又想起了网上一句话“一种语言即一种思考问题的方式”。)其中,最明显的就是循环的问题,比如for的使用。循环的思考方式比较直观,但是MATLAB并不擅长循环,虽然也能做,但是用矩阵的方式,MATLAB可以做到更好。
矩阵计算——全0行整体替换
这里举一个例子,用行向量v替换矩阵中的全0行。比如下面这个矩阵Data:
8 7 7 1
0 0 0 0
4 8 7 1
0 0 0 0
7 5 9 2
明显,第2行和第4行是全0的。如果把这两行用向量v=[1 2 3 4]替换掉,怎么做。你千万别跟我说用这个办法:
Data(2,:)=v
Data(4,:)=v
明显这是手动操作找出来的全0行,不适用于更复杂的数据。很多人(包括我看到的代码)都是如下操作
k=size(Data,1);
for j=1:k;
if Data(i,:)==0;
Data(i,:)=v;
end
end
这里举得例子其实就是遍历一遍,就是把矩阵每个元素(或者行,或者列)都检查一遍,符合条件的,做一下处理。本例中是把Data矩阵中的所有行都看了一遍,对全0的行进行了一下赋值操作。听到这,看客可能已经体会到,当你输入一个for以后,MATLAB有多辛苦了,他本不适应这样的生活啊。那么用矩阵的思路怎么做呢?
首先,找出全0行的操作为(Data==0),这样matlab会把Data中等于0的元素找出来,得到下面这个矩阵temp:
0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1
0 0 0 0
同时把v变成对角矩阵,diag(v)
可以试一试(Data==0)*diag(v)这样得到的矩阵如下:
0 0 0 0
1 2 3 4
0 0 0 0
1 2 3 4
0 0 0 0
这时得到的矩阵再加上原来的矩阵Data,实现了替代全0行的效果
(Data==0)*diag(v)+Data
8 7 7 1
1 2 3 4
4 8 7 1
1 2 3 4
7 5 9 2
对比一下命令
for结构:
k=size(Data,1);
for j=1:k;
if Data(i,:)==0;
Data(i,:)=v;
end
end
矩阵计算:
(Data==0)*diag(v)+Data
命令减少了,MATLAB也轻松了。
PS:不过上面的矩阵计算也有漏洞,比如如果Data中第一行有一个元素是0,怎么办?这里就留给大家自己思考了。
转载于:https://www.cnblogs.com/Tavion/p/5176950.html
MATLAB优化——减少for的使用相关推荐
- 【Matlab优化求解】遗传算法求解仓库货位优化问题【含源码 022期】
一.代码运行视频(哔哩哔哩) [Matlab优化求解]遗传算法求解仓库货位优化问题[含源码 022期] 二.遗传算法仓库货位简介(仅供参考) 1 引言 随着电力企业生产规模的不断扩大,传统模式下的仓库 ...
- matlab优化工具箱介绍
在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案.最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学.由于优化问题无所不在,目前最优化方法 ...
- 利用Matlab优化工具箱解数独问题
前一阵使用Matlab的优化工具箱,发现可以求解数独问题,有意思!实际上,Matlab优化工具箱有两个:Optimization Toolbox和Global Optimization Toolbox ...
- Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划
Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...
- matlab中线性变压器,用MATLAB优化计算差动变压器的线性范围
基金项目:河南省自然科学基金资助项目(994043500) 作者简介:胡明江(1974 - ) ,男 ,河南洛阳人 ,硕士生. 收稿日期:2003 - 04 - 23 文章编号 :1672 - 687 ...
- MATLAB优化算法(一)
1.线性规划 [x,fval]=linprog(c,A,b,Aeq,Beq,VLB,VUB) 用于解决 min(z)=cX%%求满足条件的X与已定系数c乘积之和的最小值 s.t. AX<=b ...
- help efun matlab,Matlab优化工具箱在函数最值求解中的应用.pdf
Matlab优化工具箱在函数最值求解中的应用.pdf 系 统 解 决 方 案 Matlab优化工具箱在函数最值求解中的应用 彭东海 (中山职业技术学院数学教研室,广 东 中山 528404) 摘 要 ...
- 非线性优化汇总——Matlab优化工具箱(持续更新中)
非线性优化汇总--Matlab优化工具箱(持续更新中) 室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易,路过的各位大佬请点个赞 目录 非线性优化汇总--Matlab优化工具箱( ...
- 最优化问题的Matlab优化工具箱求解总结
第一次发文,个人总结,可以一起讨论,如有问题,感谢指出. 1.常规算法 MATLAB 目标函数 约束条件 决策变量 非线性 多目标 上下界 线性 非线性 整数 无初始值 linprog √ √ √ i ...
最新文章
- R----plotly包介绍学习
- C语言的那些秘密之---函数返回局部变量
- 四则运算题目生成程序
- .NET中RabbitMQ的使用
- bzoj千题计划282:bzoj4517: [Sdoi2016]排列计数
- mysql 元数据获取_[MySQL] 获取元数据的步骤
- 为什么用python的时候特别卡_【后端开发】python为什么会运行慢
- 利用GDAL进行工具开源化改造
- 计算机电源性能怎么调,笔记本电脑如何将电源模式更改为高性能模式? -
- 软件文档的概念和细分
- 软件人才争夺战日趋白热化
- sklearn.datasets.make_blobs 生成符合高斯分布的点
- 福利:阿里云免费试用劵
- 2014阿里实习生面试题——mysql如何实现索引的
- python机器人开发——基于Micropython的智能机器人底层控制开发
- SSM手动、自动切换多数据源
- Input.mousePosition
- K8S使用教程(详细)
- 杂谈---2014的第一篇博客
- 按回车Enter键后自动隐藏软键盘、进页面自动弹出软键盘
热门文章
- java arraylist 序列化_无法序列化/反序列化ArrayList
- 继承单例模式 php_详解PHP单例模式之继承碰见的问题
- mysql行锁加在什么上_mysql怎么加行锁?
- FPGA设计心得(4)Aurora IP core 的定制详情记录
- FPGA之道(14)IP核介绍
- CodeForces 609B The Best Gift
- 参加“北向峰会”后对SOC之感言
- 如何限制oracle数据库表的输出记录条数
- HDOJ 1905 Pseudoprime numbers(模运算)
- 长途每分钟只要9分钱!