logo资料库

matlab编程经验总结(论文算法仿真常用命令及技巧).docx

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
Matlab编程
MATLAB中改变默认工作路径(Current Folder)的方法
恢复m文件关联
自动对齐
判断cell是否为空
合并两个cell
转换cell为double
输出文本
停止显示warning
Warning: Variable 'a1' cannot be saved to a MAT-fi
内存不足:out of memory
保存变量至文件
跳出全部for循环
取矩阵最大值及其坐标
判断文件是否存在
绘图
设置坐标范围
为plot点加标注
设置曲线不可见
保存plot为图片
title中带变量
消除向量中的重复元素
find函数
元胞数组删除行
截断矩阵
选中一行代码运行
显示当前时间
调用其它程序
计时(小数点后保留3位)
取模运算
排列
排列数
向量排序
根据某一列大小,对矩阵排序
imagesc命令纵坐标翻转
SeDuMi下载及安装
语音处理
波形图
matlab 编程经验总结(论文算法仿真常用命令及技巧) by mc Matlab 编程 MATLAB 中改变默认工作路径(Current Folder)的方法 http://blog.csdn.net/u012210613/article/details/52346842 1. 用记事本或者 MATLAB 打开 C:\Program Files\MATLAB\R2012a\toolbox\local\matlabrc.m 文件。--即打开安装路径下的 matlabrc.m 文件(注:最开头的“X”你所安装的位置盘符)。 2. 在最后一行加入这条语句: cd 'E:\MatlabFile' 恢复 m 文件关联 cwd=pwd; cd([matlabroot '\toolbox\matlab\winfun\private']); fileassoc('add',{'.m','.mat','.fig','.p','.mdl',['.' mexext]}); cd(cwd); disp('Changed Windows file associations. FIG, M, MAT, MDL, MEX, and P files are now associated with MATLAB.'); 自动对齐 Ctrl +I 判断 cell 是否为空 cellfun(@isempty,assignment_list(i,1)) 合并两个 cell a=[a,b] %注意 这里是方括号
转换 cell 为 double cell2mat 输出文本 disp('CICS 所用时间:'); str = fprintf('%d/%d trail, %d/%d frame\n', nn, no_of_trials, k, Ns); 停止显示 warning warning off Warning: Variable 'a1' cannot be saved to a MAT-filewhose version is older than 7.3. To save this variable, use the -v7.3 switch. Skipping... 解决办法: 打开 matlab,file/preferences,general 选项卡-MAT-Files,选择第一个。 内存不足:out of memory Matlab 是如何存储矩阵的? Matlab 中矩阵是以 Block,也就是块的形式存储的。当 Matlab 在为即将存储的矩阵划分块时, 如果没有相应大小的连续内存,即使实际内存没有被完全使用,它还是会报告“Out of Memory”。 Matlab 中数组必须占用连续分配的内存段,当无法为新建的数组分配连续的内存段的时候,” Out of Memory” 就会出现。在使用的过程中,由于存储单元的不断的被分配和清除,反复 分配和释放数组会使内存被分割成不连续的区域,可用的连续内存段减少,很容易造成“Out of Memory”。因此当 Matlab 刚刚启动时其连续内存最多,此时往往可以新建非常大的数组, 这一点可以用命令 feature(’memstats’)(在 7.0 版本以上)看出。如果现实的最大连续 内存段很小,但实际可用内存(非连续的)仍旧很多,则表明内存中碎片太多了。此时可以 考虑用 pack 命令,pack 命令的作用就是将所有内存中的数组写入硬盘,然后重新建立这
些数组,以减少内存碎片。此外,在命令行或者程序中都可以使用 clear 命令,随时减少不 必要的内存。 因此,治本的方法如下: 1. 在命令行输入 pack 整理内存空间 2. 尽量避免产生大的瞬时变量,把没必要的变量 clear 掉或当它们不用的时候应该及时 clear。 3. 减少变量,尽量的重复使用变量(跟不用的 clear 掉一个意思)。 4. 把有用的变量先 save,后 clear 掉,需要时再读出来。 保存变量至文件 save('all_path_25.mat','all_path_25'); 跳出全部 for 循环 MATLAB 中只能一层层的跳出循环,使用 break,这和 C++等有所差别。你可以设置标志,满 足条件逐层 break。 取矩阵最大值及其坐标 % 修改自 lyqmath @ Matlab 中文论坛 clc; clear all; close all; A = rand(5, 5, 5); % 最大值统计 [Amax, indmax] = max(A(:)) % 最大值坐标 [i, j, w] = ind2sub(size(A), indmax) % 验证 A(i, j, w) 判断文件是否存在 if ~exist('.\assignment_list\Nk1_Z_N2.mat','file') save('.\assignment_list\Nk1_Z_N2.mat', 'assignment_list'); end
绘图 line_sty1= {'--ob','--sr','--^m','--+m','--g'}; 只绘点不连线 plot( k_present(k_beg_idx:el), posn_k_present(2,k_beg_idx:el),line_sty1{i} ); % 设置线型及颜色,去除'--'表示 figure(3);subplot(2,1,1); xlabel('时间帧数'); ylabel('x/m'); set(gca, 'XLim',[1 K]); % 设置坐标轴范围 % 设置 legend h1_t= plot(k_birth(i):1:k_death(i),P(1,:),'-k'); final_fig_handle(1)= h1_t; legend_title{1}= [ '真实 (',' 总共两个个目标)' ]; legend_title{i+2}= [' 标签= ',num2str(hat_total_track_list(i))]; figure(3);subplot(2,1,1); legend(final_fig_handle,legend_title,4); 颜色 r 红 m 紫红 g 绿 y 黄 b 蓝 k 黑 c 蓝绿 w 白 可以用 RGB 来指定任意颜色。你也可以改背景色再画白线。 plot(1:10,'Color',[0.4 0.5 0.6]) 线型 '-' 实线 '--' 虚线 ':' 点线 '-.' 点划线 各种标记点属性选项 + 加号 o 空心圆 * 星号 . 实心圆 x 叉号符 s 正方形 d 菱形 ^ 上三角形 v 下三角形 > 右三角形 < 左三角形 p 五角星 h 六边形
线条宽度 plot(x,y,'LineWidth',1.5) 设置坐标范围 axis([0 6 0 4]); 为 plot 点加标注 text(2.5,2.5,['(',num2str(2.5),',',num2str(2.5),')'],'color','r'); text(2.5,2.5, num2str(2.5),'color','r'); 设置曲线不可见 if iBest==3 || iBest==4 || iBest==5 || iBest==7 line_sty1{iBest} = ':.w'; final_fig_handle(iBest) = plot(1:K, Pc_N, line_sty1{iBest}, 'Visible', 'off'); end 保存 plot 为图片 % 在句柄为 2 的图形窗口上画图。 %文件名为'D:\abc.jpeg'。 % 新建一个句柄为 2 的图形窗口。 >> figure(2) >> plot(x,cos(x)); >> grid str_png = sprintf('%dTrail',no_of_trials); print(2,'-dpng',str_png); %将句柄为 2 的图形保存为 jpeg/jpg 格式的图片, >> 用法:print(图形句柄,存储格式,文件名); <<回目录 图形句柄,如果图形窗口标题栏是“Figure 3”,则句柄就是 3.用 gcf 可以获取当前窗口句柄。 指定存储格式。常用的有: png 格式:‚-dpng‘ (推荐这一种,与 bmp 格式一样清晰,文件也不大) jpeg: ‚-djpeg‘(文件小,较清晰) tiff: ‚-dtiff‘ bmp: ‚-dbitmap‘(清晰,文件极大) gif: ‚-dgif‘(文件小但不清晰)
title 中带变量 title(sprintf('%d trail, %dBest', no_of_trials, bestCount)); 消除向量中的重复元素 unique 比如说 A=[1,2,3,3,4],那么 unique(A)=[1,2,3,4]; find 函数 向量矩阵中查找某一元素的 index 1 >> X = [1 0 4 -3 0 0 0 8 6]; 2 >> ind = find(X == 4) matlab 的 find 函数出现 Empty matrix:0-by-1 读入一幅图像数据,想查找结果为 0.4 的值所在的位置,用 find(subimg==0.4) 结果返回 Empty matrix: 0-by-1! 明明数据中存在 0.4 啊,为何不显示? 原来,读入的数据计算机会用浮点数来表示,但是这个数值并不是精确等于 0.4,不信的话 可以将数组减去 0.4,可以发现所谓的等于 0.4 的位置相减以后并不为零,而是很小的一个 数值。 所以可以改为: find(abs(subimg==0.4)<0.01) 这样就可以了。 这个问题很常见。对于由二进制码表示的浮点数,有一部分值是无法精确达到的。你可以输 入命令 vpa(d(71),20) 20 位,这时你就可以看到,这个值只是非常非常接近 1.7,但是不等于它。 ans =1.7000000000000001776。vpa 的意思是显示 d(71)到小数点后 元胞数组删除行 X(i,:) = [];
截断矩阵 assignment_list = assignment_list(1:cur,:); 选中一行代码运行 F9 显示当前时间 datestr(now) 调用其它程序 system('C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe') 发声 (1) %鸟声 load chirp sound(y,Fs) %锣声 load gong sound(y,Fs) %哈里路亚 load handel sound(y,Fs) %笑声 load laughter sound(y,Fs) %啪哒声 load splat sound(y,Fs) %火车 load train sound(y,Fs) (2)
sound(sin(2*pi*25*(1:4000)/100)); pause(1); sound(sin(2*pi*25*(1:4000)/100)); 计时(小数点后保留 3 位) 方法 1: tic toc 方法 2: t0=clock 程序段 t1 = etime(clock, t0)/60; %总耗时,单位:分钟 fprintf('总耗时:%.3f 分钟', t1); %小数点后保留 3 位 取模运算 mod(x, y) 排列 prod(n:m) %求排列数:m*(m-1)*(m-2)*…*(n+1)*n 排列数 combntns([1 2 3],2) 向量排序 [B index] = sort(A, 'descend'); 根据某一列大小,对矩阵排序 1 >> a=[1,3,2;3,0,5;2,2,6];
分享到:
收藏