matlab常用代码

来源:互联网 发布:知而行天下 编辑:程序博客网 时间:2024/06/03 16:27
----来自我的QQ博客-----
http://user.qzone.qq.com/459125872/blog/1388641939

判断某个文件or目录是否存在
exist('rule_features.mat','file')
如果文件rule_features.mat不存在返回,否则返回其它整数(文件为2)
exist('data','dir')
如果目录存在返回一个自然数(7),如果不存在,返回0.
if ~exist('data')
    mkdir('data')
end
问题matlab2012和vs2013,No supported SDK or compiler was found on this computer.
原因matlab版本比vs旧,不支持vs2013编译器,吧matlab换成2014版的就好了
问题Test checkout of feature 'Compiler' failed.
原因是matlab未完全破解,2014a的破解办法:
http://pan.baidu.com/s/1qWFbOjq,提取码84rg ,
下载后解压,把“..\Matlab64\bin\win64”目录下的compiler.dll,mcc.exe,libmwservices.dll 三个文件复制到matlab安装目录对应位置替换原文件即可!(如果软件是32位,则对应目录为“..\Matlab32\bin\win32”)
转载出处:http://blog.csdn.net/smilebluesky/article/details/42987985 ;
连mysql库
matlab链接mysql:

http://blog.sina.com.cn/s/blog_6c843f980102vin6.html

matlab 代码:

conn =database('lbs_data_process','root','root','com.mysql.jdbc.Driver','jdbc:mysql://127.0.0.1:3306/lbs_data_process');

 ping(conn);

 cursorA = exec(conn,'select * from rule_check_all');

 cursorA = fetch(cursorA);

rules_road = cursorA.Data;

检查数据类型
>> a = [1 2 3 4];
>> class(a)
ans =
double
>> size(a)
ans =
     1     4
字符转换大小写
>> str = 'helLO,小强'
str =
helLO,小强
>> str2 = upper(str)
str2 =
HELLO,小强
>> str3 = lower(str)
str3 =
hello,小强
matlab 元包,cell
res(1) = {1x1 cell}
res{1} = '连通性'
res(1)取元包数组的第一个元素,还是cell形式。
res{1}取元包数组的第一个元素的内容,在这里是字符串。
显示内容,disp()
disp('hello show');
dispose(res{1}); 

matlab写入txt文件

b = 10;
fp = fopen('D:\ztq.txt','wt');
fprintf(fp, 'b = %d\n', b);
读、写xls表格内容
 
 dataM = xlsread('test.xls',2,'B2:C17');
读入test.xls 文件的第2个工作簿 的
B2:C17区域的数值内容,并用dataM矩阵接受该内容。
参考:http://blog.csdn.net/ximenchuixuezijin/article/details/5650399 
 写入xls,rules_road为一个
二维元包数组
 
xlswrite('myrule.xls',rules_road);
 meshgrid mesh
x = -3:3;%7
y = -2:3;%6
[X,Y] = meshgrid(x,y);%X 和Y都是6列7行的网格,x拷贝6行成X,y转置成列并列拷贝7列成Y
Z = X.^2 + Y.^2;
mesh(X,Y,Z); %绘制X或者Y size的网格,网格上每个节点计算Z值并绘制出来。
x=
-3    -2    -1     0     1     2     3     
X=
    -3    -2    -1     0     1     2     3
    -3    -2    -1     0     1     2     3
    -3    -2    -1     0     1     2     3
    -3    -2    -1     0     1     2     3
    -3    -2    -1     0     1     2     3
    -3    -2    -1     0     1     2     3
y =  -2    -1     0     1     2     3
Y
    -2    -2    -2    -2    -2    -2    -2
    -1    -1    -1    -1    -1    -1    -1
     0     0     0     0     0     0     0
     1     1     1     1     1     1     1
     2     2     2     2     2     2     2
     3     3     3     3     3     3     3

bitxor
C=bitxor(A,B);
得到两个逻辑变量的异或 
pVoiced
Pefac  =  [0.4,  0.5,  0.6,   0.7];
tPitch                 =  [50,   0,     100,  0    ];

bVoicedPefac = pVoicedPefac>=0.5;
bVoicedTrue  = tPitch>1;
errFrame = bitxor(bVoicedPefac,bVoicedTrue) 
senNumErrVoiced = sum(Frame);
又如
A = uint13([0 1 0 0 1 1 0 0 1 0 1 0 1]);
B = uint13([1 1 1 0 0 0 0 1 0 0 0 1 0]);
TT = bitxor(A, B)
TT =
        1 0 1 0 1 1 0 1 1 0 1 1 1
mvnrnd
data=mvnrnd(mu1,sigma1,300);
生成300个数据,数据是符合均值为mu1,协方差矩阵为sigma1的高斯分布。
做高斯混合模型实验,需要生成一批二维数据,数据符合高斯分布(正态分布)
mu1 = [1 2];
sigma1 = [1 0;0 1];
mu2 = [50 89];
sigma2 = [10 0;0 50];
data1 = mvnrnd(mu1,sigma1,300);
data2 = mvnrnd(mu2,sigma2,200);
plot(data1(:,1),data1(:,2),'r+');
hold on;
plot(data2(:,1),data2(:,2),'b*');
mvnrnd:Multivariate normal random numbers 
mvnrnd 是用来生成多维正态数据的。
repmat
B = repmat(A,m,n)
将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, size(A,2)*n]
>> a = [1,2;3,4]
a =
     1     2
     3     4
>> b = repmat(a,2,3)
b =
     1     2     1     2     1     2
     3     4     3     4     3     4
     1     2     1     2     1     2
     3     4     3     4     3     4 
randperm:
randperm(n)产生1到n的整数的无重复的随机排列,利用它就可以得到无重复的随机数。
a = randperm(5) ;%通常每次运行结果不一样
a = [2,1,5,3,4]; 

创建目录:
savePath='C:\Users\Administrator\Desktop\matlab-work\Imgaes2\';
for i = 1:100
    mkdir(savePath,num2str(i));
end
savepath为所在父路径名,
num2str(i)为创建目录名 
复制文件:
      copyfile(src.jpg,dst.jpg);    复制src文件并命名为dst.jpg。前面可以加路径。
输出信息: 
i = 10;
LengthFiles = 100; 

fprintf('process(%d, %d)\n', i,LengthFiles); 
数字转字符:
 for i = 2:5
        fullName=[pathName,num2str(i),'\1.bmp'];
end 
清除:
内容清除:clear;
清空命令行:clc;
查找图片文件dir (fullfile(,)):
path='F:\photo\';
Files = dir(fullfile(path,'*.jpg'));
LengthFiles = length(Files);
for i=1:LengthFiles
  Img = imread([path,Files(i).name]); 
  imshow(Img);
end
dir()返回的是一个文件列表
参考:
http://www.aiseminar.cn/bbs/forum.php?mod=viewthread&tid=79 
 图像处理:
图像读入:
1. 直接打开

I=imread('C:\Users\Administrator\Desktop\模式识别\人脸采集\训练用\a1.bmp'); 
2.文件形式打开
[fn,pn,fi]=uigetfile('*.bmp','选择图片'); 
I1=imread([pn fn]);
图像显示:
imshow(I1);
显示多个图像:
subplot(1,2,1),imshow(I1);
subplot(1,2,2),imshow(I2);
得到图像大小:
mysize=size(I1);  
mysize 是一个三列的行向量。 
图像的保存:
imwrite(I1,'C:\a1.png') ;  
图像灰度化:
%rgb2gray(img); img需为rbg形式的图片
fullName=[pathName,num2str(i-1),'_',num2str(j-1),'.bmp'];
        img=imread(fullName);
        %灰度化
        if ndims(img)==3
            img=rgb2gray(img);
        end
图像二值化:
% im2bw(gray_img,ratio);gray_img需为只有一维颜色的灰度图,灰度图中灰度值超过ratio*255就变白,否则就是黑
f=imread('2.tiff')

subplot(2,2,1),imshow(f),title('原始图像');
ff0=im2bw(f,0.3);
subplot(2,2,2),imshow(ff0),title('域值取0.3的二值图像');
ff1=im2bw(f,0.5);
subplot(2,2,3),imshow(ff1),title('域值取0.5的二值图像');
ff2=im2bw(f,0.7);
subplot(2,2,4),imshow(ff2),title('域值取0.7的二值图像');
ff0=im2bw(f,0.3);  

figure % 打开一个新的窗口显示灰度图像
imshow(imgGray); % 显示转化后的灰度图像
连通域处理函数参照:
http://blog.sina.com.cn/s/blog_4d648afc01017ggb.html ;

logical函数:
将数据类型转换成逻辑类型(true 或false)!
任何非零的数据都转换成true,而0被转换成false;
>> bool1=logical(-1)
bool1 =1
>> bool2=logical(0)
bool2 =0
字符串拼接:
str1=‘hello’;
str2=' world';
str=[str1,str2];
再如:
pathName='C:\Users\Administrator\Desktop\模式识别\人脸采集\训练用\';
for i = 'a':'n'
    for j = '1':'5'
        fullName=[pathName,i,'-',j,'.bmp'];
        pathNameArray[i-'a',j-'1'] = fullName;
    end
end
参考:http://blog.csdn.net/largestone_187/article/details/6000254 ;

循环结构,显示一个一维向量的值【祝一维向量用(),多维向量用 [ ],向量下标从1开始】
for i=1:1:3
    imgSize(i);
end

快捷键:
ctrl +R 选中注释
ctrl +T 取消注释
F5       保存并运行
F12     设置断点
F10     单步调试 
ctrl +C 终止运行 


画多个图在一个绘图窗口中:
subplot(m,n,p)或者subplot(mnp)此函数最常用:subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。  
for i = 'a':'g'
    for j = '1':'5'
        fullName=[pathName,i,j,'.bmp'];
        img=imread(fullName);
        subplot('g'-'a'+1,5,(1+(i-'a')*5+j-'1')),imshow(img);
    end
end 
矩阵的拼接:
a =
             3
             4
b =
             6
             9
竖向合并,
c = [ab] 
c =
             3
             4
             6
             9
横向合并c = [a b]或c = [a, b]。 
c =
                         6
                         9
矩阵的逆序排列:
flip 
蹦跳,翻转,倒装
fliplr,左右翻转
flipud,上下翻转
a =
             3
             4
fliplr(a)
ans = 
     3 2 1
     4 3 2
flipud(a)
ans = 
      2 3 4
      1 2 3 
numel(A): 
number element,返回A矩阵中元素的数量:
a =
             3
             4
numel(a) = 6; 
  
reshape(A,m,n): 
把矩阵A改变形状,变为m行n列.(元素个数不变,原矩阵按列排成一排,再按行排成若干排)
a =
         2
         4
b = reshape(a,1,4);
b =  1 3 2 4; 
如果想让b排成 1 2 3 4,可以b = reshape(a',1,4); 
expand,syms
expand展开多项式,或者铺开矩阵。
syms x; %定义变量x
f = 2*x^2 + 3*x^5;
g = x^2-x+7;
f*g
expand(f*g) 
运行结果: 

ans =
(3*x^5 + 2*x^2)*(x^2 - x + 7)
ans =
3*x^7 - 3*x^6 + 21*x^5 + 2*x^4 - 2*x^3 + 14*x^2 
expand铺开矩阵:
A = [1 2; 3 4];
 
>> B = expand(A,[3 2])
把A的每个元素铺开为[3 2]的矩阵 
B =

     1     1     2     2
     1     1     2     2
     1     1     2     2
     3     3     4     4
     3     3     4     4
     3     3     4     4
交叉验证:
n=8;
p_train=eye(n,n);     %训练样本的输入
t_train=eye(n,n);     %训练样本的输出
p_test=eye(n,n);      %验证样本的输入
t_test=eye(n,n);      %验证样本的输出
indices=crossvalind('Kfold',length(p_train),5); %5折交叉验证
for i=1:5 %5次循环(交叉验证思想)
disp(['以下为第',num2str(i),'次交叉验证结果'])
test=(indices==i);              %test为逻辑类型的列向量
train=~test;                    %每次取出一折作为验证集,其余4折作为训练集
p_cv_train=p_train(train,:);    %交叉验证训练集的输入
t_cv_train=t_train(train,:);    %交叉验证训练集的输出
p_cv_test=p_train(test,:);      %交叉验证验证集的输入
t_cv_test=t_train(test,:);      %交叉验证验证集的输出
 参考:
http://blog.sina.com.cn/s/blog_7f478b9b0101cwde.html
 


矩阵排序:
用sort(A)函数
对矩阵默认是按列升序排序。
执行代码:
A=[0 0.5; 1.2 0.2; 0 1; 1.5 1]';
A =[
0    1.2   0  1.5;
0.5 0.2  1  1
] ;
A
[sp,index] = sort(A)
得到结果: 
A =
         0    1.2000         0    1.5000
    0.5000    0.2000    1.0000    1.0000
sp =
         0    0.2000         0    1.0000
    0.5000    1.2000    1.0000    1.5000
index =
     1     2     1     2
     2     1     2     1
参考:http://blog.sina.com.cn/s/blog_61010ebe0100krdq.html ;
 
多列排序
 
saveM = sortrows(rules_road,[-23,21,22]);
rules_road矩阵按照第23列降序,21列升序,22列降序的顺序排列所有行。

PCA,主成分分析:
   %PCA处理data_input,降维
    x=data_input; 
    [coef,score,latent,t2] = princomp(x);%调用princomp函数降维 
    latent=100*latent/sum(latent);       %将latent总和统一为100,便于观察贡献率 pareto(latent);%调用matla画图
    for k=1:length(latent)
        if(latent(k)>0.1)                %贡献值大于0.1%的维度选入bp输入层
            xx(:,k)=score(:,k);
        else
            break;
        end
    end
    data_input=xx;
参考:http://www.360doc.com/content/14/0104/10/14713231_342509814.shtml

Kmeans,聚类:
load eightAllM.mat
K = 100;
ldx = kmeans(eightAllM,K);
eightAllM矩阵中每行为一个样本数据,分为K类。
ldx为一个列向量,分别为每个样本的类别。
 
保存数据到文件.mat,读入 .mat文件
myMatrix = [   
    0 0;
    200 0;
    0 100;
    0 300;
    600 0;
    600 300;
    400 400;
];
save  myTrain_inst.mat myMatrix 
或者可以:
a=[1 2 3 4 5 6 7 8 9 10];

save(‘var.mat’,'a');     %将变量a保存在var.mat文件中
如果需要在名字中使用变量则可以:
i=1;
file = [num2str(i),'M'];
save(file,'myMatrix')
或者save ([num2str(i),'M'], 'myMatrix');
保存的文件为1M 
%下面是调用
b=load('var.mat','a');   %将var.mat中的变量a读取出,放在b中,b是一个结构体。
神经网络工具箱里的整形函数:
参考:http://blog.sina.com.cn/s/blog_6e09af650100zbte.html
归一化函数:mapminmax()
>> x1 = [1,2,4];
>> [y,ps]=mapminmax(x1);

y =-1.0000   -0.3333    1.0000
ps = 
         name: 'mapminmax'
        xrows: 1
         xmax: 4
         xmin: 1
       xrange: 3
        yrows: 1
         ymax: 1
         ymin: -1
       yrange: 2
    no_change: 0
参考:http://blog.sina.com.cn/s/blog_4936c31d0100uchd.html
导入matlab工具包的方法
1 解压文件
把下载的工具箱解压到matlab中的toolbox文件夹里,

2 添加目录
matlab主界面:File——>Set Path...——>点击Add with subfolders...    

在浏览文件中,选择刚才的安装路径C:\Program Files\MATLAB\R2012a\toolbox\DeepLearnToolbox-master,点击确定
返回到Set Path对话框,点击左下角的保存按钮,点击Close关闭对话框
3 更新工具箱路径缓存
matlab主界面:File——>Preferences——>General——>选中enable toolbox path cache——>点击updata toolbox path cache

关闭Preferences对话框。
工具箱彻底安装完毕
参考:
http://blog.sciencenet.cn/blog-633617-630878.html ;
离散卷积conv:
>> a = [5,3,1];
>> b = [2,1];
>> c = conv(a,b);
>> c
c =
    10    11     5     1
a 为多项式 y1 = 5X^2 + 3X + 1 的系数
b为多项式  y2 = 2X + 1            的系数 
 y3 = y1*y2 = 10X^3 + 11X^2 +5X + 1
c=conv(a,b),c为多项式  y3 = y1*y2的系数。
matlab画图:
figure;新增一个图像。
subplot(m,n,p);绘制m行n列的拼图的第p个图。
plot(x);
x为一维数组时绘制一条线,
x为 n 维数组是绘制n条线。
横坐标为数组下标,纵坐标为数组元素的值。
plot(x,y);
绘制一条曲线,
曲线的纵坐标为y数组的值,
曲线的横坐标为x数组的值,
plotyy(x,y1,x,y2,'plot');
在一个图中绘制两条曲线,分别为y1曲线和y2曲线,横坐标为x;
参考:http://hi.baidu.com/njust_neopets/item/d673e808104de3863c42e270

画三角函数的图
a = cos(2*pi*[0:0.01:1]);
b = sin(4*pi*[0:0.01:1]);
c = cos(6*pi*[0:0.01:1]+0.25);
plot([a;b;c]');
hold
plot(a+b+c);

傅里叶变换(FFT)简单使用:
 a = sin(2*pi*[0:0.001:1]);
 plot(a)
 f = fft(a);
b = ifft(f);
plot(b);
f1 = abs(f);
b1 = ifft(f1);
hold;%hold为显示图像到现有图框中,figure为新开一个图框显示。 
plot(b1);

求语音频谱:
%convert.m 
function convert(filename)
    if nargin < 1
        filename = 'F16A1.wav';
    end
    winsize = 512;
    shiftsize = 160;
    wav = wavread(filename);
    window = hamming(winsize);
    winc = getframe(wav+0.1*randn(length(wav),1),winsize,shiftsize,window);
    sf = fft(winc);%傅里叶变换
    ef = ifft(abs(sf).^0.1);%傅里叶逆变换
    subplot(121);imagesc(log(abs(sf(winsize/2:end,:))));
    subplot(122);imagesc(ef(winsize/2:end,:));
%--- sub func  分帧
function winc = getframe(wav,winsize,shiftsize,window)
    slen = length(wav);
    numframe = ceil(slen/shiftsize);
    winc = zeros(winsize,numframe);
    for n = 1:numframe
        st = (n-1)*shiftsize;
        ed = min(st+winsize,slen);
        winc(1:ed-st,n) = wav(st+1:ed);
        winc(:,n) = winc(:,n).*window;        
    end
    
wavread,sound
wavread函数用于读入wav格式的音频文件
[xn,Fs,bit]   =wavread('D:\\speech_863\\F00C1048.WAV');
其中xn为语音信号序列,Fs为采样率,bit为信号格式。
sound(xn,Fs);
sound用于播放声音,以xn为声音信号序列,以Fs为信号采样率 

 

matlab,plot:
t = 0:1/16000:0.1;%采样频率16K
f = 100;%信号频率hz
plot(t,sin(2*pi*f*t),'r:');%r红色,:虚线
axis: 
在plot写完后 加上axis([0 1 2 3])
则表明图线的x轴范围为0~1, y轴范围为2~3
如 plot(x,y)
axis([0 1 2 3])
grid on
title,xlabel,ylabel,legend,grid。 

在画完图后增加图形的说明,如标题,x,y坐标,在右上角加图形注解
plot(x,y),title('合成的信号波形'),ylabel('振幅'),xlabel('x-采样点序号');%legend('y = cos(x)'); % 图形注解,grid on;%打开网格

参考:http://wenku.baidu.com/link?url=bwSq5uIPhubpmU4_fcMANC6GJ0F139_e6wZ3rQme_W9w2MdQ4rrdRQsryNJvXPcBDRktfozZ9go6z4ao_LZTLxJLz4MP67T7EdkfVa2TXuW

matlab 程序打包成exe文件
1选择合适的编译器
mbuild -setup
mcc -m myfunction.m 
等一小会儿,myfunction.exe就生成了。
参考http://pan.baidu.com/s/1c0vRnLu,第30页
如果是图形界面程序 mcc -e ui.m,得到的程序不会出现黑框框

如果要做有界面的程序,输入 guide

如果要使多个函数共享数据,在每个函数中将共享变量用global声明。






0 0
原创粉丝点击