- 基本操作
- 图形
- 随机数
$matlab -nodesktop 可以进入 text mode
在默认路径下创建
kv_init.m 可以省去添加路径的麻烦,选择要添加的路径,或所有路径
显示: disp('string')
判断字符串相等 strcmp(a,b)
判断变量/函数/类/文件/目录 是否定义 exist('name',var)
Toolbox:
lightspeed: 提高Matlab速度,如果不想用,把它的路径从 matlab 路径中删除
函数定义时,输入和输出的优先级都是从左往右
[y1 y2]=f(x1, x2)
如果调用时 y=f(x1)
则 y 为 y1
函数可以有可变个变量,即传递给它的变量少于定义的参数个数
这时可以通过如下方法判断
nargin
nargout
exist('A','var') checks only for variables.
exist('A','builtin') checks only for built-in functions.
exist('A','file') checks for files or directories.
exist('A','dir') checks only for directories.
exist('A','class') checks only for Java classes.
使用 struct 可以灵活的传递函数参数和输出,可以用 isstruct 结合 isfield 来判断 field 是否定义了。if isstruct(para)
if isfield(para,'numLevels')
numLevels = para.numLevels;
end
end
函数头注释必须每一行都有 %,不能断
比较浮点数相等
0.1==0.3/3 这是错误的。
要使用 abs(a-b)
比较两个 array 是否相等 isequal
判断是否为NAN, INF
isnan()
isinf()
reshape 可以把多维矩阵 reshape 成其他维数,把矩阵根据维数从大到小向量化,再进行填充
A = reshape(B, 3,3,5) % 3x3x5
randperm(n) 生成 1:n 的permutation,用于随即排列
' 共轭转置
.' 非共轭转置
复数
abs 模
angle
real
imag 虚部
matlab 的 global variable
需要使用的地方都需要声明 % top.m global x; x = []; % subprogram.m global x; x = [x sin(r)];
图形
plot 参数,其他画图函数不一定有这些参数
semilogy: y 坐标为log
图像坐标,j 轴向下;axis ij 切换至该模式
普通坐标,y 轴向上;axis xy 切换至该模式
![]() |
| two axis modes |
line 可以画线,circle 画圆,x 都指横轴。
比如有多种算法,最后需要将结果画在一张图中,由于 legend 是一次性指令,所以可以定义 cell 变量
更新如下
legendstr = {legendstr{:} new_str}
图形控制
figure xlim ylim xlabel ylabel title legend(str1, str2, str3,...) 说明图中每条曲线,参数中字符串的顺序即曲线的顺序
axis auto Return to default axis limits axis equal Equalize data units on x-, y-, and z-axes axis off Remove axes axis square Make axis box square (cubic) axis tight Set axis limits to range of data grid on/off hold on/off
figure(n) 带有 handler,这个 handler 是一个数字,对应 Figure n 的数字 n。这样在有多个图的情况下,可以很快的找到第 n 个
保存 figure 图像,注意这里说的不是把矩阵保存成图像
handler = figure(num);print(handler, 'driver', 'name')
比如
print(1,'-djpeg','foo')
将 figure 1 保存为 foo.jpg
缺省 handler 则保存 current figure
在显示图像时,如何按图像大小显示,禁止缩放(Matlab figure 缩放为简单缩放,会产生问题)?
参见这儿
重要的两条命令
I = imread('peppers.png'); %# Load a sample image
imshow(I); %# Display it
[r,c,d] = size(I); %# Get the image size
set(gca,'Units','normalized','Position',[0 0 1 1]); %# Modify axes size
set(gcf,'Units','pixels','Position',[200 200 c r]); %# Modify figure size
hold on;
plot(100,100,'r*'); %# Plot something over the image
f = getframe(gcf); %# Capture the current window
imwrite(f.cdata,'image2.jpg'); %# Save the frame data
将图像序列生成 avi
t = linspace(0,2.5*pi,40);
fact = 10*sin(t);
fig=figure;
aviobj = avifile('example.avi')
[x,y,z] = peaks;
for k=1:length(fact)
h = surf(x,y,fact(k)*z);
axis([-3 3 -3 3 -80 80])
axis off
caxis([-90 90])
F = getframe(fig);
aviobj = addframe(aviobj,F);
end
close(fig)
aviobj = close(aviobj);
如何在图形中加入公式,希腊字母等?
Matlab 的 Text 支持 Latex,简单的字符可以直接用,完整的支持必须加 Interpreter,latex 语句用 $$, 或 $$ $$ 包含(两者好像有区别?)
ylabel('\alpha');
options = {'Interpreter','latex'};
title('$$\int x^2 dx$$',options{:})
文件和文件夹操作
delete my_file.m
mkdir newdir
改名或者移动
movefile('myfile.m','projectresults.m')
rmdir('myfiles')
复制文件
copyfile
随机数:
基本随机数rand
randi
randn
其他分布的随机数,请参见 help doc index: random number generators (RNGs)
多维数据只有 mvnrnd, mvtrnd
控制随机整数序列的 seed,新版的 Matlab 采用 RandStream 来生成随机整数,默认有一个 default 的 stream。可以将自己创建的 stram 设为 default,达到控制的目的。可以生成多个独立的 stream.
s=RandStream('mt19937ar');
reset(s,5)
rand(s)
rand(s)
reset(s,5)
rand(s)
rand(s)
mu = [1 -1]; Sigma = [.9 .4; .4 .3];
RandStream.setDefaultStream(s);
reset(s,5)
rand
rand
r = mvnrnd(mu, Sigma, 2)
reset(s,5)
rand
rand
r = mvnrnd(mu, Sigma, 2)


0 comments:
Post a Comment