MATLAB 中有哪些命令,让人相见恨晚?

发布时间:2023-05-25 15:00

唐平,航天灌水,业余PM,初涉CV,主业刷知乎

赵甡、Happlex、张涤天 等人赞同
bsxfun
强大的、万能的、不同维数的矩阵扩展混合运算,从此告别矩阵运算中的for循环
另,matlab里所有以fun为后缀的命令都很好用,arrayfun,cellfun,structfun,等等

@() 匿名函数
使用函数式编程,在编写以数学公式为主的程序中比传统编程方法好得多

set(gca,...)等
所有与画图相关的命令都包含了千奇百怪的属性和参数,非常实用,如著名的 set(gca,...) 

$ $
画图中的标题、注释等文字内容是可以直接使用latex格式的,只须在包含latex命令的部分前后用$框起来即可

slice
高维切片,要在三维空间中表现三个以上变量的函数关系,必备此命令
编辑于 2014-07-16 11 条评论       
 
赞同160 反对,不会显示你的姓名

冷哲,无论对人还是对物,自控都是必需的

听风、赵甡、法国就是培根 等人赞同
Matlab里面应该多用向量运算,把循环语句转变为向量运算会省很多时间,程序也更简洁易读。

比方说,一个名叫array数组里面,你要将里面大于1的都变成0,就不必用到循环:

array(array>1)=0;

把大于1小于3的变成0。

array(and(array>1,array<3))=0;

当然,还可以使用find,这个也很好用。

——————————————————————————————

另一个重要的技巧是delete/clf-plot-pause

用plot可以画图(注意记录句柄),然后用delete删掉特定图象,或用clf清图,再绘制,这可以在figure窗口产生动画。但是如果只plot,往往只会在全部程序执行结束时显示,这时候需要用pause让figure完成图像的更新。drawnow貌似也可以,但是我比较喜欢用pause,能够简单地控制动画的速度。

这会方便调试和展示。这个技巧尤其适合使用matlab的图形用户界面设计功能时构造一个显示运行状态等信息的figure。

——————————————————————————————

mathworks 有一个fig函数(不是系统自带的,是别人编写的),可以很容易地调整字体、尺寸以及绘图是否有边框等等,不必画出来再自己手动调整。这对于写论文的人来说会很方便。

——————————————————————————————

善用eval,可以让你的程序的灵活度大大加强。尤其是在变量名的问题上。当然,这可能会对代码维护和调试带来麻烦。很多情况可以用其他方法代替。 @王备 指出了一个链接,值得一读Alternatives to the eval Function

——————————————————————————————

save、load可以将部分或全部变量、结构体等存入mat文件或从mat导入workspace

global可以将变量变为全局变量,在各函数之间共享。不过这不太好用,尽量慎用吧。

——————————————————————————————

exist可以检测某目标(如变量)是否存在,减少一些麻烦。

——————————————————————————————

surf、mesh都很漂亮,不过surf之后记得用shading interp,看起来更漂亮。

——————————————————————————————

对于一些重复性的矩阵赋值,比如:1、2、3、4、1、2、3、4

可以使用repmat,将一个矩阵重复扩展为更大的矩阵。

——————————————————————————————

很多函数都有高级的用法,当使用到了,但又觉得有点麻烦的时候,不妨help一下,看看其他的用法。

总而言之,还是多上网搜索,一般问题总有很好的答案。
编辑于 2014-07-18 36 条评论       
 
赞同12 反对,不会显示你的姓名

匿名用户

混沌骑士、graphic Zhang、steve刘 等人赞同
1. 可以用nohup matlab result.out &把程序丢到linux服务器上后台跑,然后exit即可安全退出,第二天在result.out中查看结果;
2. matlab -nojvm -nodisplay -nodesktop 不启动图形界面跑matlab,比有图形界面要快一些;
3. 没有图形界面调程序的时候,cd/pwd/cd ../ls等doc命令就很有用了;
4. clear all,clc,ctrl+C中断正在跑的程序(比如死循环了)什么的;
5. find (查找矩阵元素不需要循环遍历);
6. cmd = sprint ('command'); system(cmd); 在服务器上跑Linux指令;
7. 第二句改成eval(cmd)也有相似效果,没研究过区别。
发布于 2014-07-18 2 条评论       
 
赞同10 反对,不会显示你的姓名

韩笑,hi~~

赵甡、蒋瑞勋、羊星宇 等人赞同
bsxfun

绝对是向量化编程的利器,具体参见
科学网—Matlab中矩阵列向量归一化的三种方法比较
发布于 2014-07-16 添加评论       
 
赞同279 反对,不会显示你的姓名

王备,数学我不懂,勿邀!

龚研、赵甡、寇飞 等人赞同
说几个很常用但容易被初学者忽略的吧。

1. 转置但不共轭
b = a.'

2. 得到列向量
b = a(:)
相应的,得到行向量就是
b = a(:).'

3. 清除并更新所有 class 的定义
clear classes
当你修改了某些 class 的定义时,需要调用此命令——仅仅 clear all 是不够的。

4. 忽略某些返回参数
[~, idx] = max(a)
忽略最大值,只返回最大值的索引。
【注】
这种语法是在 Matlab 7.9 (2009b) 中引入的,在此之前的版本不支持这种用法。如果你使用早期版本,可以使用如下写法:
[tmp, idx] = max(a); clear tmp
或者一句话搞定
[idx, idx] = max(a)
不过第二种写法不见得每个人都会喜欢。

5. 去除长度为 1 的维度(常用于 3D 矩阵转为 2D)
b = squeeze(a)
Simulink 的 save to workspace 模块经常得到一个 [m x 1 x n] 的三维矩阵,直接使用非常不便。使用 squeeze 后,会将其转换为 [m x n] 的二维矩阵。

6. 代码运行耗时显示
tic; some_code_to_run(); toc
tic/toc 会在 Matlab 命令行中打印出两条命令之间的代码的运行耗时。更详细的代码效率分析,可以使用 profile 命令。

7. 电脑跑分
bench
只能用于相同版本的 Matlab 下电脑之间的比较。

8. 记录命令行命令
diary on
% Lots of my Matlab commands here.
diary off
使用 diary 好处是运行结果也会被记录下来,并且以纯文本方式存储,方便编辑。更正式的报告,则推荐使用 publish。

9. 反转向量
b = fliplr(a)    % For row-vector a.
b = flipud(a)    % For column-vector a.
b = wrev(a)      % For any vector a.
b = a(end:-1:1); % This is the implementation of function wrev.

10. 去除数据中的 NaN
a(isnan(a)) = []
对于 inf 和 -inf,使用 isinf 命令。
编辑于 2014-08-04 19 条评论       
 
赞同6 反对,不会显示你的姓名

傅红雪,立志成为大魔导师的巫婆。

黄金白、花笑雪、杨硕 等人赞同
跑个题先,help 是真神器啊。。。当初读help读了几个通宵。。。当然,这个属于个人癖好,就像高中喜欢读牛津高阶和现代汉语词典一样,可能效率不高,看完能有个印象就不错了,要用时还得翻,主要是图个乐子。我没正经学过matlab教材,需要用就翻出help的相关模块,冷哲讲的用向量代替循环来写语句是自己翻到的。不知道还有没有人一样癖好的。
编辑于 2014-12-02 2 条评论       
 
赞同20 反对,不会显示你的姓名

tengmoon,机械

赵甡、火焰骑士、苏皮皮 等人赞同
1. 关于向量化
大家都知道,如果用一个函数对一个矩阵中的每一个元素进行求值,那么就要用到 .*, ./之类
function r = fmat(x)
    r = x.^2 + 1./x;
end 

A = [1 2 3 4];
fmat(A)
上面这样就可以做到用fmat对A每一个元素分别求值。但不是所有的函数都像fmat这样,下面这种情况就不行:
function r = fmat2(x)
if x > 0
    r = x.^2;
else 
    r = 1./x;
end

fmat2(A)    % 会出错
可以看到,因为上面fmat2 里面有判断语句,就不能把整个矩阵作为输入参数。我知道的解决方法有3种:
% 法1
for i = 1:length(A)
    r(i) = fmat2(A(i));
end

% 法2 用arrayfun
r = arrayfun(@fmat2, A) 

% 法3 用逻辑矩阵

r = zeros(1,length(A));
l1 = (A>0);
l2 = ~l1;
r(l1) = A(l1).^2;
r(l2) = 1./A(l2);
值得说一说的是第二种和第三种。arrayfun只是比用for更加简洁,速度上没有太大差别。但是,用逻辑矩阵的话,就比前两种快10倍。逻辑矩阵是向量化的利器。比如 A>0 就会返回一个逻辑矩阵,里面全是1, 0 。并且, 逻辑矩阵可以当作索引, A(A>0) 就把所有A>0 的数返回。

2. 类型转换
matlab中一共有4种类型:func(函数句柄), num(数值), sym(符号), str(字符)
- 在数值运算中,使用func, num
- 需要输入输出出,要用到str
- 进行符号运算(符号微分,积分)时,用sym

我们使用matlab,一般有这么个过程:
- 先进行公式推导,这时要用sym, symfun类型
- 再进行数值计算,这里要用普通的func, 和num 类型
- 最后与GUI界面交互的时候,要用str类型
这里介绍几个用于转换的函数
str2func('@(x,y)sin(x*y)') %  str -> @func 返回一个函数句柄

syms x y
fs(x,y) = x^2+sin(x*y);
fh=matlabFunction(fs); % symfun -> @func 返回一个函数句柄 !!!强烈推荐

fh = @(x)x.^2+sin(x);
fun2str(fh)    % @func ->str 函数句柄变为字符

3. 三维画图
大家都晓得,作图第一步,对 x, y 划分网格,用的是 meshgrid 。这样画出来的图在一个立方体的范围内,但是有时候我们要显示一个圆柱体内的三维图形这时候画网格可以用 cylinder
[x, y] = cylinder(linspace(0,10,100),200)   % linspace(0,10,100)指在半径[0, 10]上划分为100份,参数200指的是在圆周方向上 200等分
z = sin(x) + cos(y);
mesh(x, y, z);

4. 学无止境
学matlab,还是要去论坛,看看大神们的说法,大神们的做法。比如说1中的向量化
function r = fmat2(x)
if x > 0
    r = x.^2;
else 
    r = 1./x;
end

fmat2(A)    % 会出错
论坛中的大神的做法是这样的
fmat3 = @(x)x.^2.*(x>0) + 1./x.*(x<=0);
fmat3(A)
极其简洁!!!我看到后非常佩服


先这些吧
编辑于 2015-03-03 9 条评论       
 
赞同2 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第1张图片迈斯沃克,matlab课程设计技术支持,有偿技术问题咨…

无本之木、Dinohu 赞同
uigetfile, uiputfile
find
is*** 系列函数。
str2num num2str strcat + eval
open
winopen
! start ****.exe
timer
uiwait uiresume
analoginput
编辑于 2014-07-20 添加评论       
 
赞同6 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第2张图片古十长

何芳华、刘思琦、左元 等人赞同
1.freqz

2.fir1,fir2等一系列示波器构造相关函数

3.用text函数直接在figure中写出latex风格公式;(有时Matlab/C风格的文本格式公式咋看之下太难懂)
比如说:
 syms x;
text(.5,.5,['$',latex(x^(2*x^x+x/3)),'$'],'interpreter','latex','HorizontalAlignment','center','fontsize',18)
4.我写过一个主要用dir,system,zip这几个函数管理打包下载好的漫画的小脚本。

5.其实工具也算是命令的封装,常用并觉得好用的一般有拟合工具,小波等时频分析工具,神经网络,还有射频相关的小工具

6.快捷键ctrl+i,不算命令,我觉得不少人不知道这个

7. 开着电脑,matlab和音箱,然后在办公室有人的时候远程自己的电脑,让自己电脑突然说话。。。【我觉得还是Mathematica的某个函数好使一些~】
sp=actxserver('SAPI.SpVoice');
sp.Speak('hello')
8.eval,比如可以轻易批量生成m1到m8这些具有规律的变量名
发布于 2014-07-17 1 条评论       
 
赞同5 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第3张图片立党,相声表演艺术家

刘毅斐、李坤、macher Liebe 等人赞同
sparse()
当你处理大规模稀疏模式的矩阵时,如果不用sparse,不仅耗费时间,也耗费内存,用了sparse之后性能上升很多,而内存占用也降低很多,非常棒!
发布于 2015-03-25 添加评论       
 
赞同5 反对,不会显示你的姓名

小生境

caporion、柳木、徐忠亚 等人赞同
bsxfun:non-for-loop的究极体验
发几段代码感受下bsxfun,broadcasting操作才是向量化编程语言的归属:

1.
源代码
function x = calcuProjOfPQ(CPs,VSPs)
x = zeros(size(CPs,1),size(VSPs,1),3);
for k = 1 : size(CPs,1)
    for h = 1 : size(VSPs,1)
        for i = 1 : 3
            x(k,h,i) = CPs(k, i+1) - VSPs(h, i+1);
        end
    end
end
end
broadcasting化:
function x = revised_calcuProjOfPQ(CPs,VSPs)
x = bsxfun(@minus, reshape(CPs(:, 2:end), [], 1, 3), reshape(VSPs(:, 2:end), 1, [], 3));
end
2. 
源代码
function reTheta = calcuTheta(X,R,Nor)
[m,n,~] = size(X);
reTheta = zeros(m,n);
for i = 1 : m
    for j = 1 : n
        reTheta(i,j) = X(i,j,1)/R(i,j) * Nor(i,1) + ...
                       X(i,j,2)/R(i,j) * Nor(i,2) + ...
                       X(i,j,3)/R(i,j) * Nor(i,3);
    end
end
end
broadcasting化:
function reTheta = revised_calcuTheta(X,R,Nor)
reTheta = sum(bsxfun(@times, bsxfun(@rdivide, X, R), reshape(Nor, [], 1, 3)), 3);
end
3.
源代码
function [Uij,Tij] = calcuUijTij(shearM, poisson, R, X, Nor, cosTheta)
Uij = zeros(size(X,1)*3,size(X,2)*3);
Tij = zeros(size(X,1)*3,size(X,2)*3);
elementUij = zeros(3,3);
elementTij = zeros(3,3);
% ganerate Uij and Tij
for a = 1 : size(X,1)
    for b = 1 : size(X,2)
        for i = 1 : size(X,3)
            for j = 1 : size(X,3)
                if i == j
                    detaij = 1;
                else
                    detaij = 0;
                end
                elementUij(i,j) = 1 / (16*pi*shearM*(1-poisson) * R(a,b)) * ...
                    ((3-4*poisson) * detaij +X(a,b,i)*X(a,b,j)/(R(a,b))^2);
                
                elementTij(i,j) = -1/(8*pi*(1-poisson)*R(a,b)^2) * (((1-2 * ...
                    poisson) * detaij + 3*X(a,b,i) * X(a,b,j)/R(a,b)^2) * ...
                    cosTheta(a,b) - (1-2*poisson) * (( X(a,b,i) * Nor(a,j)) ...
                    / R(a,b)- X(a,b,j) * Nor(a,i) / R(a,b)));
            end
        end
        Uij(a*3-2:a*3,b*3-2:b*3) = elementUij;%Uij(a*3-2:a*3,b*3-2:b*3) + 
        Tij(a*3-2:a*3,b*3-2:b*3) = elementTij;%Tij(a*3-2:a*3,b*3-2:b*3) + 
    end
end
end
broadcasting化:
function [Uij, Tij] = revised_calcuUijTij(shearM, poisson, R, X, Nor, cosTheta)
[ir, jr] = size(R); [ix, jx, kx] = size(X);
R = reshape(R, 1,1,ir,jr); cosTheta = reshape(cosTheta, 1,1,ir,jr);
X1 = reshape(permute(X, [3,1,2]), [],1,ix,jx); X2 = reshape(permute(X, [3,1,2]), 1,[],ix,jx);
tmp = bsxfun(@rdivide, bsxfun(@times, X1, X2), R.^2);
Uij = reshape(permute(reshape(permute(bsxfun(@rdivide, bsxfun(@plus, tmp, (3-4*poisson)*eye(kx)), R) / (16*pi*shearM*(1-poisson)), [1,2,4,3]), 3,[],ix), [2,1,3]), [],3*ix).';
Tij = bsxfun(@times, 3*tmp, cosTheta) - (1-2*poisson) * bsxfun(@rdivide, (bsxfun(@times, X1, reshape(Nor.', 1,3,[])) - bsxfun(@times, X2, reshape(Nor.', 3,1,[]))), R);
Tij = reshape(permute(reshape(permute(bsxfun(@rdivide, bsxfun(@plus, Tij, bsxfun(@times, (1-2*poisson)*eye(kx), cosTheta)), R.^2) / (8*pi*(poisson-1)),    [1,2,4,3]), 3,[],ix), [2,1,3]), [],3*ix).';
end
4.
源代码
function [ul, pl] = calcuUlPl(~) %alpha, Uij, Tij
global m n Uij Tij alpha
disp = zeros(size(Uij,1),1);
fors = zeros(size(Uij,1),1);
ulData1 = 0;
ulData2 = 0;
ulData3 = 0;
plData1 = 0;
plData2 = 0;
plData3 = 0;
for j = 1 : m
    for i = 1 : n
        ulData1 = ulData1 + alpha(i,:) * Uij(j*3-2:j*3,i*3-2);
        ulData2 = ulData2 + alpha(i,:) * Uij(j*3-2:j*3,i*3-1);
        ulData3 = ulData3 + alpha(i,:) * Uij(j*3-2:j*3,i*3-0);
% =========================================================================        
        plData1 = plData1 + alpha(i,:) * Tij(j*3-2:j*3,i*3-2);
        plData2 = plData2 + alpha(i,:) * Tij(j*3-2:j*3,i*3-1);
        plData3 = plData3 + alpha(i,:) * Tij(j*3-2:j*3,i*3-0);
    end
    disp(j*3-2:j*3,1) =[ulData1;
                        ulData2;
                        ulData3];
% =========================================================================
    fors(j*3-2:j*3,1) =[plData1;
                        plData2;
                        plData3];
%% ==================================================================
 % Forget to zero the accumulation variable, I spent nearly half a month of
 % time to debug the code
    ulData1 = 0;
    ulData2 = 0;
    ulData3 = 0;
    plData1 = 0;
    plData2 = 0;
    plData3 = 0;
%% ==================================================================
end
sum(disp)
sum(fors)
% reshape the ul and pl to 2 mx3 martices respectively
ul = zeros(m,3);pl = zeros(m,3);
ul = reshape(disp,[3,numel(disp)/3])';
pl = reshape(fors,[3,numel(fors)/3])';
end
broadcasting化:
function [ul, pl] = revised_calcuUlPl(Uij,Tij,alpha)
n = size(Uij, 2);
alpha = reshape(alpha.',3,1,[]);
ul = reshape(sum(sum(bsxfun(@times, alpha, reshape(permute(reshape(Uij.', n,3,[]), [2,1,3]), 3,3,n/3,[])), 3), 1), 3, []).';
pl = reshape(sum(sum(bsxfun(@times, alpha, reshape(permute(reshape(Tij.', n,3,[]), [2,1,3]), 3,3,n/3,[])), 3), 1), 3, []).';
end

效率大约提高了20倍。

就是这样。
编辑于 2015-01-25 2 条评论       
 
赞同6 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第4张图片阿拉姗,数学系吉祥物

顾青、金菠菜、Woody huang 等人赞同
这里有几个没被提到但也很实用的:

1、sparse,生成稀疏矩阵函数。
节省时间空间小能手,尤其是面对很多带有对角阵,三对角阵的算法。


2、root(a),求多项式的根。(这里a是系数数组)

3、type,显示指定m文件的内容。

4、grid on,给画的图像加网格。(没有网格的散点图逼死强迫症ಠ_ಠ)

5、clf,既然clc出现了,那么clf也来凑下热闹吧(O_O)[clf,hold on],一图多线流起手式。
编辑于 2015-01-17 1 条评论       
 
赞同26 反对,不会显示你的姓名

王王,哈工大,搬砖狗

于肖、JasonXu、飞猪扑火 等人赞同
我感觉对于一个懒到家的工科人员,matlab本身,就已经是相见恨晚了
发布于 2014-07-16 4 条评论       
 
赞同6 反对,不会显示你的姓名

Filestorm,Artificial artificial intelligence

穆言、Steve、刘义隆 等人赞同
补充
accumarray()


附件是一个针对整数的unique(),运行速度比原生 unique() 快60%

function [elements, counts] = intUnique(a)

a = a(:);

if sum((a)~=round(a))>0
	error('a must be int!');
end


offsetA = min(a)-1;
a = a-offsetA;
counts = accumarray(a, 1);

elements = find(counts);
counts = counts(elements);
elements = elements+offsetA;

end
发布于 2014-12-09 4 条评论       
 
赞同4 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第5张图片沈周

何芳华、张金科、焦龙飞 等人赞同
当你不是为了实现而实现某个功能的时候,都请上网搜一下,很多时候matlab都已经帮你实现好了

向量化编程

find

函数式编程
eval

Hash表
containers

正则表达式
regexp
编辑于 2014-07-17 2 条评论       
 
赞同8 反对,不会显示你的姓名

Pacino An

Wanqi Wang、彭昊明、Carsickjoy 等人赞同
对于我来说,各种牛逼的工具箱都想见恨晚,各种工科的仿真实验,只有它做不好的,没有它做不了的。
要说最有用的指令,那必须是help…
发布于 2014-07-18 添加评论       
 
赞同5 反对,不会显示你的姓名

白如冰,闭关修炼

奎丹尼、匿名用户、Xana Hopper 等人赞同
matlab中可以使用和所在的操作系统平台的文件目录相关的命令
发布于 2014-07-16 2 条评论       
 
赞同5 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第6张图片myd7349,坚持“当上CTO,迎娶白富美”的梦想100年…

Horch Luo、后土、湯卓 等人赞同
1. 牛逼哄哄的notebook功能:
Notebook--matlab_了凡春秋

2. 高端大气上档次的GUIDE,老板再也不用担心我不会用uicontrol拼GUI了。

3. doc命令,我灰常喜欢。(help给的东西不太详细)

4. type可以查看很多函数/命令的source code。

5. matlab.exe -regserver

6. 昨天用textread解析一个特定格式的文本文件,headerline参数可以让我们跳过文件开头指定行数,真是考虑得周到。有了textread,就不用fopen、fread、fscanf……这么费劲了。
编辑于 2014-07-16 1 条评论       
 
赞同5 反对,不会显示你的姓名

王征,不是别人忽略你 而是你太闲

于墨、韩劼群、赵武休息一下 等人赞同
Matlab tips and tricks
发布于 2014-07-18 1 条评论       
 
赞同3 反对,不会显示你的姓名

随心所欲

往北走、Xavier Wu、赵武休息一下 赞同
必然是各种傻瓜工具箱还有工具箱附带的命令。
还有matlab coder和类似的工具箱。之前还用了一个类似的免费工具包,可以直接similink拖框框后直接烧写到stm32里,再也不担心出错了,当时惊艳的不行不行的,结果一查人家早就在搞了。浙大也有个教授在做这方面的工作。真是懒人的福利!而且听说很多国防方面的工程就是用这种方法做的。有知道详情的同学请继续。如果想起来再上各种链接吧……手机不方便
发布于 2015-01-24 3 条评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第7张图片mapwyj

unique
发布于 2014-08-01 添加评论       
 
赞同9 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第8张图片吕延庆,关注复杂系统、数据挖掘,电影,音乐等。…

J2Perturbation、刘义隆、爱知 等人赞同
把自己学matlab时的遇到的常见问题笔记贴过来一段:

1,which命令,可以找到命令所在的具体路径
例如:
>> which fft
built-in (D:\MATLAB\R2008b\toolbox\matlab\datafun\@logical\fft)  % logical method
另外,新版的matlab在命令行双击tab能自动补全。


2,获得一个变量的类型,用class函数
例如:
>> class([0 1])  % double
>> class('test')  % char

3,画直方图。(看看导入是多么方便,直方图也一句搞定)
一般成绩统计是用excel来统计的,就把那一列复制成一个文本文件,比如score.txt
79
82
65
94
...

1)Matlab先把数据导入myscore变量:
>> myscore=importdata('score.txt');
成绩一个N*1的列向量myscore,N是学生人数。

2)然后用这些成绩做个直方图:
>> hist(myscore);
这句就画出直方图(histogram)了。所谓直方图,就是把各成绩段,按照落入各个区间的数量,画出柱状图。(横坐标为成绩分布区间,纵坐标为落入对应区间的成绩个数)。


4,在matlab里使用LaTeX
图的标题或标记中可以用LaTeX书写公式。

例如:为图加标题时,用

title('$$f(x)=cos(x)$$', 'interpreter','latex' );

这里title函数的格式是 title(...,'PropertyName',PropertyValue),

后面两个参数表示使用latex语法处理字符串(经测试,否则会当做普通字符串处理),其他命令有类似选项。
LaTeX表示的数学公式的前后用$ $, 或$$ $$或 \( \),三种形式中的任意一个。

5,画多幅图
1)叠加多幅图时,可以用hold on命令保持住,然后可以继续往上面叠加图(如plot等命令),最后hold off。
2)画多个子图,用subplot命令,例如subplot( 2, 4, 1) 是2行4列的第1幅子图,接着用plot等命令画图,下一个subplot命令切换到下一子图 ......。
编辑于 2014-07-18 2 条评论       
 
赞同8 反对,不会显示你的姓名

阿呆,学生

柳木、松松、J2Perturbation 等人赞同
谢不邀
提问都说了是命令,大家回答那么多函数干什么... 我来给一个超级大杀器

在命令行敲入 dbstop if error

如果运行出现错误,matlab会自动停在出错的那行,并且保存所有相关变量。再也不用设断点了有没有!!!
编辑于 2014-12-09 3 条评论       
 
赞同15 反对,不会显示你的姓名

爱冰,我和我的幽默配合的很默契

朱新奇、刘思琦、墨瞻 等人赞同
绝对是surf,大学里第一次接触matlab用surf做出漂亮,高逼格的三维图时,就深深的爱上了matlab。


之后就把解析几何课上的曲面整个全做了一遍,空间想象能力上升那叫一个档次。
编辑于 2014-07-16 3 条评论       
 
赞同5 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第9张图片野合菌,᷇Θ̵̵̵̤Θ᷆ 闷声大发财

amy辛辛、孙亚辉、Lipeng Hu 等人赞同
我老板用了十几年不知道clc。。。我在他面前用的时候他震惊了。

还有,我最近才知道 “...” (三个句号)可以用来给长命令换行= =

还有,dos可以执行DOS命令。。。
编辑于 2014-07-16 6 条评论       
 
赞同6 反对,不会显示你的姓名

郑凯,无知之徒

amy辛辛、Joel Zhang、沙小仕 等人赞同
命令:why
发布于 2014-07-16 2 条评论       
 
赞同4 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第10张图片曾博,不懂物理,会光学,可内推

聂希、陈思、赵龙峰 等人赞同
delete matlab
发布于 2014-07-16 2 条评论       
 
赞同4 反对,不会显示你的姓名

匿名用户

鲁达、呼啦呼啦、bee jeff 等人赞同
Why
-----

好奇的知友可以自己试试。。
编辑于 2014-07-19 2 条评论       
 
赞同4 反对,不会显示你的姓名

light Day,苦逼工科狗

Wu Meng、Bumblebee、爱知 等人赞同
MATLAB 中有哪些命令,让人相见恨晚?_第11张图片 MATLAB 中有哪些命令,让人相见恨晚?_第12张图片
>> why
The bald and not excessively bald and not excessively smart hamster obeyed a terrified and not excessively terrified hamster.
>> why
To fool the tall good and smart system manager.
>> why
The rich rich and tall and good system manager suggested it.
>> why
He wanted it that way.
>> why
The programmer suggested it.
>> why
Mara suggested it.
>> why
To please a very terrified and smart and tall engineer.
>> why
The tall system manager obeyed some engineer.
>> why
To satisfy some programmer.
>> why
Mary Ann wanted it that way.
>> why
Can you rephrase that?
>> why
Because Mary Ann wanted it that way.
>> why
How should I know?
>> why
Because they asked the terrified and smart and tall and tall programmer.
>> why
To fool a young tall hamster.
>> why
For the love of a bald and terrified mathematician.
>> why
It's your karma.
>> why
Some terrified and rich system manager knew it was a good idea.
>> why
Don't you have something better to do?
>> why
He suggested it.
>> why
A terrified and good and not very rich engineer helped the bald programmer.
>> why
To fool some kid.
>> why
I obeyed the tall and young system manager.
发布于 2014-11-22 1 条评论       
 
赞同2 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第13张图片FogLikelihood,Maximum

何芳华、譙達達 赞同
Piotr's Matlab Toolbox
Dollar老师的工具箱。谁用谁知道
发布于 2014-07-17 1 条评论       
 
赞同2 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第14张图片Jingyi,假装是trader?????

张帆、赵武休息一下 赞同
edit FunctionName.m 可以查看自由编辑和使用任何toolbox中build in function的源代码。知道的那一刻仿佛拥有了全世界..........好怂哦..........
发布于 2014-07-18 3 条评论       
 
赞同2 反对,不会显示你的姓名

于墨

宅楠、张昊 赞同
绝对是
ind2sub
sub2ind
发布于 2014-07-18 添加评论       
 
赞同2 反对,不会显示你的姓名

聂鑫,对所有知识状物体充满好奇= ̄ω ̄=

蒋瑞勋、李海涛 赞同
两个百分号可以分块

%%
发布于 2014-12-09 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第15张图片Linglai Li

赵武休息一下 赞同
1) eval, feval,很多人提到了
2) cellfun,对cell数组进行函数操作,因为很多函数不直接支持cell的。
3) varargin, nargin,变长度输入变量
4) movie及相关绘图函数,得查看一下help了,记不太清了,能做demo动画,很酷
发布于 2014-07-18 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第16张图片夕阳山顶

宅楠 赞同
home命令,类似clc清理屏幕,但是略有不同。
发布于 2014-07-20 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第17张图片月明,我辜负了知乎,我不是来分享知识的,这个…

唐紫玉 赞同
点开MATLAB里的HELP,想要什么直接搜索,每次都有新惊喜XD
发布于 2014-08-01 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第18张图片梁维,Data不说谎,说谎的是人。

松松 赞同
不是命令行
以前一直各种read
cvsread
xlsread
textread
自从发现了右键其他第三方文件import data以后
麻麻再也不用担心我的数据载入了

import data可选各行载入,整体矩阵载入,等等...甚至能根据header命名变量,挺好用的感觉

这个算是因为版本更迭而产生的相见恨晚
编辑于 2014-08-01 添加评论       
 
赞同1 反对,不会显示你的姓名

benman,换个姿势,继续挨踢

盘古悟空 赞同
mat2gray
发布于 2014-12-09 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第19张图片Zenan Wang,Econ PhD candidate

莫輕浮 赞同
做回归的时候,regress Y on X,只要 X\Y就可以了。
发布于 2014-12-22 添加评论       
 
赞同1 反对,不会显示你的姓名

曹荣禹,persist......forever

Atlantic Young 赞同
repmat 函数可以很好的用于代替循环,比如要计算一个样本集A中各个行向量之间的欧氏距离时,第一反应就是写循环如下。
for i=1:m
for j=i+1:m
result(i,j) = sqrt( (A(i,:)-A(j,:))*(A(i,:)-A(j,:))' ) ;
end
end
但是通过repmat可以直接代替之,如下。
aa = repmat(sum(A.^2,2), 1, m) ;
bb = repmat(sum(A.^2,2)', m, 1) ;
ab = A*A' ;
result = aa + bb - 2*ab ;

思想是这样,程序可能有些小错误还需要根据具体情况而言,基本上两端代码的时间比是,在A的样本个数是1000的时候,第一段需要10秒左右,第二段需要0.1秒左右。
发布于 2014-12-30 添加评论       
 
赞同1 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第20张图片萤-时光灯,健忘的逗比青年欢乐多

奚鹏飞 赞同
是try 和 catch吧——相见恨晚,转身就忘。健忘没办法。。。
编辑于 2015-01-02 添加评论       
 
赞同1 反对,不会显示你的姓名

幽林夜雨,挨踢狗,汪汪!

赵武休息一下 赞同
what, ctrl+c,图像处理里的uint8,最相见恨晚的当属logo命令了,绝对的相见恨晚!
发布于 2014-07-17 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第21张图片舒幼生,这个笑话有点冷

eval,最近编程时发现的,和for循环结合使用,批量处理诸如N1,N2,....N100这种,简直是编程小白的福音。
matlab是一座无比丰富的宝库,就像R语一样,使用他们本身就已经是站在巨人的肩膀上了。
发布于 2014-11-06 添加评论       
 
赞同0 反对,不会显示你的姓名

流水,凡是随缘

1. convn函数用于连续的分析数据的时候很有效
2. functions函数可以调试程序,返回当时的一些有效信息
3. inmem返回内存中正在执行的函数等
4. setenv设置环境变量
这些函数都有相关的see also, 很有帮助
发布于 2014-11-10 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第22张图片苍洪,一个在武汉搬砖的小硕。。。

clc
发布于 2014-11-23 添加评论       
 
赞同0 反对,不会显示你的姓名

xn geo,Geography/Satellite Oceanography

跑个题说一下,MATLAB2014b让人相见恨晚,大家用之前的版本想必都会被MATLAB中作图的锯齿和生硬的颜色所困扰,为啥MATLAB做出来的图就是没有R和Python做出来的图好看呢?MATLAB2014b基本解决了这个问题,MATLAB2014b对绘图部分做了很大改善,做出来的图完全没有锯齿状了,而且色彩柔和协调了很多很多,所以如果大家在使用MATLAB旧版本并且因为发论文绘图的而纠结的筒子们可以考虑换MATLAB2014b了。总而言之,也算给MATLAB打个广告哈哈。
MATLAB2014b的绘图真心不错,谁用谁知道!
发布于 2014-12-27 2 条评论       
 
赞同0 反对,不会显示你的姓名

鹌鹑,咕咕咕

num2str
发布于 2015-01-01 添加评论       
 
赞同0 反对,不会显示你的姓名

匿名用户

我在windows上跑matlab,觉得help功能简直好用极了!
发布于 2015-01-06 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第23张图片Coldwings,专业数星星团队成员

绝对的simulink啊 各种工具箱合集让人懒到极致
发布于 2015-01-29 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第24张图片张杰,代码

1.reshape函数
2.repmat函数
3.find函数

4.vec2ind和ind2vec函数,以及compet函数
5.dist函数
发布于 2015-02-02 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第25张图片Lillian Song,好奇宝宝(两人共用号,略精分,勿怪)

parfor
发布于 2015-02-05 添加评论       
 
赞同0 反对,不会显示你的姓名

苏皮皮,线性代数爱好者

大概是sort和unique的多返回值,自己help一下就发现碉堡。
发布于 2015-02-25 添加评论       
 
赞同0 反对,不会显示你的姓名

奈何尘雨,希望在各方面有所涉猎的程序猿

FFT


为了在科学计算和数字信号处理等领域使用计算机进行Fourier变换,必须将函数定义在离散点上而非连续域内,这一点非常符合所给的波函数的数据,数据点之间同样也存在着定义在离散点上而不是连续域内,且须满足有限性或周期性条件。这种情况下,序列

的离散傅里叶变换为:

FFT(Fast Fourier Transformation),即为快速Fourier变换,是离散Fourier变换的快速算法,它是根据离散Fourier变换的奇偶虚实等特性,对离散Fourier变换的算法进行改进获得的,而Fourier变换则是能将满足一条件的某个函数表示成三角函数(正弦、余弦)或者他们的组合形式。另f(t)为t的周期函数,如果t满足条件:在一个周期内具有有限个极值;绝对可积。则有下式成立。称为积分运算f(t)的Fourier变换。

利用这一方法可以将原先时域的数据改成了频域的图方便后面处理。 这只是我编的MATLAB将DTMF信号的解码程序中的部分程序= =听说FFT用得好几行就没了。。。

笔拙,献丑了。。。
MATLAB 中有哪些命令,让人相见恨晚?_第26张图片
发布于 2015-03-23 添加评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第27张图片灰姑娘公主,喵~喵~喵~

@汪星人的汪
给你看看
发布于 2015-04-04 添加评论       
 
赞同0 反对,不会显示你的姓名

熊猫潘达,学习者

竟然能动态增加矩阵维数!
发布于 2015-04-06 添加评论       
 
赞同0 反对,不会显示你的姓名

孙宇涛,にゃん!

绝对是expand()= =!!!!
还有simplify(), diff(), regexp(), latex()
编辑于 2015-04-17 添加评论       
 
赞同0 反对,不会显示你的姓名

Nieh

函数:inv;
语法:冒号。。。。
发布于 2014-07-16 1 条评论       
 
赞同0 反对,不会显示你的姓名

郭富城,向往美好新生活

plot3,surf,mesh
编辑于 2014-07-18 1 条评论       
 
赞同0 反对,不会显示你的姓名

玉面书生

cftool图像拟合工具
发布于 2014-07-17 添加评论       
 
赞同0 反对,不会显示你的姓名

卫仁,呼哈

ctrl+c
发布于 2014-08-03 1 条评论       
 
赞同0 反对,不会显示你的姓名

MATLAB 中有哪些命令,让人相见恨晚?_第28张图片Yuan Zi,爱车,爱摄影,爱美食的码农

[ ], 用来连接字符串,array 和 cell array等等
比如:
str1 = 'Hello';
str2 = 'world';
str3 = ['This is: ', str1, str2];
输出str3: This is: Helloworld
发布于 2015-02-07 2 条评论       
 
赞同0 反对,不会显示你的姓名

糟曰,_AU

latex( )
发布于 2014-12-04 添加评论 感谢 分享 收藏  没有帮助  
举报
 
赞同0 反对,不会显示你的姓名

爱知,算法,编码,音乐,人生

save load

原文地址:http://www.zhihu.com/question/24499729

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号