- 基本操作
- 图形
- 随机数
$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