数据输入和输出
一、 概述
MATLAB可读和写的文件格式:
文件格式 | 文件内容 | 扩展名 | 读、写文件的函数 |
MATLAB | 保存的MATLAB工作区 | .mat | load,save |
文本 | Text | 任意 | textscan,textread |
限定文本 | 任意 | dlmread,dlmwrite | |
逗号分隔的数值 | .csv | csvread,csvwrite | |
XML | XML-格式文本t | .xml | xmlread,xmlwrite |
Audio | NeXT/SUN sound | .au | auread,auwrite |
Microsoft WAVE sound | .mav | mavread,mavwrite | |
Movie | Audio/video | .avi | aviread |
Scientific data | Data in Common Data Format | .cdf | cdfread,cdfwrite |
Flexible Image Transport system data | .fits | fitsread | |
Data in Hierarchical Data Format | .hdf | hdfread | |
Spreadsheet | printf输出格式默认Excel worksheet | .xls | xlsread,xlswrite |
Lotus 123 worksheet | .wk1 | wk1read,wk1write | |
Graphics | TIFF/PNG/HDF/BMP/JPEG image GIF/PCX/XWD/Cursor/Icon image | .tiff .png .hdf .bmp .jpeg .gif .pcx .xwd .cur .ico | imread,imwrite |
二、 使用输入向导(Import Wizard)
从菜单File->Import Data打开Import Wizard;或者命令窗口输入函数uiimport。
从剪贴板开始Import Wizard:Edit->Paste to workspace。
三、 保存和加载MAT文件
MAT文件是双精度、二进制、MATLAB格式的文件。
输出到MAT文件:save filename [var1 var2 …] [str*];可以通过[var1 var2 …]选择性保存变量;也可以使用通配符“*”。
查看MAT文件中的变量:whos –file 文件名。
存放结构数组的某个字段:加上“-struct”选项。
在已经存在的MAT文件上添加数据:-append选项。
禁止压缩和Unicode字符编码文件,在save语句中加入“-v6”或者File->Preferences-> Genera
l->MAT-Files->MAT-File save options->Ensure backward compatibility(-v6)。save语句默认为数据压缩。
选择输出格式:“-ascii”、“-tabs”、“-double”“-v4”。
从MAT文件输入数据:load函数。
四、 输入文本数据
各种输入函数的数据定界符:
csvread | 仅逗号 | dlmread | 任何字符(可指定) |
fscanf | 任何字符 | load | 仅空格 |
textread | 任何字符 | textscan | 任何字符 |
详见:doc 函数名。
textscan和textread性能比较:前者有更好的性能,特别是读大文件时;使用前者首先要打开文件,最后要关闭文件,可从文件任意位置读;前者只输出一个单元数组,不必给每个被读字段指定一个输出参数;前者有更多的数据转换选项和更多的用户设置选项。
五、 输出文本数据
ASCII数据输出函数的特点:
csvwrite | 仅逗号 | dlmwrite | 任何字符(可指定) |
fprintf | 任何字符 | diary | 仅空格 |
save | Tab或空格 | ||
六、 输入/输出标准图像文件
imfinfo | 得到有关图像的信息 | imread | 输入图像数据 |
imwrite | 输出图像数据 | imshow、imview | 显示图像 |
七、 输入/输出音频和视频数据
aufinfo | 返回描述声音文件信息 | aviinfo | 返回包含AVI文件信息的结构 | |
wavfinfo | 返回描述声音(WAV)文件信息 | mmfileinfo | 通用的多媒体信息函数 | |
auread | 从AU文件读入音频和视频数据 | aviread | 从AVI文件读数据 | |
wavread | 从Microsoft WAVE声音文件读 | movie | 播放录制的多帧影片 | |
audiorecorder | 建立录音器对象 | auwrite | 按AU格式输出数据 | |
wavwrite | 按WAV格式输出声音数据 | avifile | 建立avifile对象 | |
addframe | 获取图像序列 | getframe | 获取图片 | |
八、 输入/输出电子表数据
xlsfinfo | 确定文件是否包含可读的Excel | xlswrite | 将一个矩阵输出到Excel电子表格 |
xlsread | 从一个Excel读入矩阵数据 | wk1finfo | 确定一个文件是否包含Lotus WK1 |
wk1write | 矩阵输出到Lotus表格 | wk1read | 从Lotus 123读数据到MATLAB |
九、 低级文件输入/输出函数
fopen | 打开文件 | fread | 读二进制数据 |
fwrite | 写二进制数据 | fseek | 重新设置文件指针的位置 |
ftell | 得到文件指针的位置 | ferror | 查询文件输入/输出时的错误 |
fgetl | 从文件读一行文本,丢弃换行符 | fgets | 从文件读一行,保留换行符 |
fscanf | 从ASCII文件读数据 | fclose | 关闭文件 |
fprintf | 转换数据并将它们输出到文件或屏幕 | ||
Matlab 转换为C语言
6.1版本的Matlab软件包中提供了C/C++的数学和图形库,通过其编译器支持可以将Matlab中编写的m文件转换成以C/C++代码的文件,而且可以将m文件生成dll库,甚至我们可以直接调用其中的库函数,生成并发布不必依赖Matlab的可执行文件。通过mcc编译器生成C/C++代码,进而可以在VC或者其它编译器生成可独立执行的应用程序。
下面具体讨论如何利用Matlab编译器从m文件生成C/C++代码,并嵌入用户代码,生成运行时不需Matlab支持的应用程序。设matsum.m文件,内容如下:
function sum = matbs( a, b )
% sum
sum = a + b
用mcc命令转换为C/C++代码,命令行参数如下
生成C文件
mcc -t -L C matsum.m
生成C++文件
mcc -t -L Cpp matsum.m
生成动态链接库函数
mcc -t -W lib:sum -T link:lib matsum.m
注意①lib:后跟生成的库文件名不能和原m文件名相同(此处为sum),②此处只能生成C语言方式的动态链接库。该编译命令共生成9个文件,其中sum.lib和sum.dll是可以在C/C++应用程序中调用的动态链接库文件。
模极大值程序(似乎有错误)
function [x,I] = localmax(x,rInit);
%LOCALMAX Compute local maxima.
% M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 05-Oct-96.
% Last Revision: 25-May-2003.
% Copyright 1995-2004 The MathWorks, Inc.
% $Revision: 1.5.4.2 $ $Date: 2004/03/15 22:41:01 $
[r,c] = size(x);
if nargin==1 , rInit = r; end
% Regularization of x (!?)
%--------------------------
regule = 1;
if regule==1
%LOCALMAX Compute local maxima.
% M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 05-Oct-96.
% Last Revision: 25-May-2003.
% Copyright 1995-2004 The MathWorks, Inc.
% $Revision: 1.5.4.2 $ $Date: 2004/03/15 22:41:01 $
[r,c] = size(x);
if nargin==1 , rInit = r; end
% Regularization of x (!?)
%--------------------------
regule = 1;
if regule==1
wav = 'sym4';
lev = 5;
[cfs,len] = wavedec(x(rInit,,lev,wav);
x(rInit, = wrcoef('a',cfs,len,wav);
end
x = [zeros(r,1) diff(abs(x),1,2)];
x(abs(x)<sqrt(eps)) = 0;
x(x<0) = -1;
x(x>0) = 1;
x = [zeros(r,1) diff(x,1,2)];
I = find(x==-2);
x(x>-2) = 0;
x(I) = 1;
% Chain maxima - Eliminate "false" maxima.
lev = 5;
[cfs,len] = wavedec(x(rInit,,lev,wav);
x(rInit, = wrcoef('a',cfs,len,wav);
end
x = [zeros(r,1) diff(abs(x),1,2)];
x(abs(x)<sqrt(eps)) = 0;
x(x<0) = -1;
x(x>0) = 1;
x = [zeros(r,1) diff(x,1,2)];
I = find(x==-2);
x(x>-2) = 0;
x(I) = 1;
% Chain maxima - Eliminate "false" maxima.
%-----------------------------------------
ideb = rInit ; step = -1; ifin = 1;
max_down = find(x(ideb,);
x(ideb,max_down) = max_down;
if rInit<2 , return; end
for jj = ideb닗:step:ifin
max_curr = find(x(jj,);
val_max = zeros(size(max_curr));
for k = 1:length(max_down)
[nul,ind] = min(abs(max_curr-max_down(k)));
val_max(ind) = max_down(k);
end
x(jj,max_curr) = val_max;
max_down = max_curr(find(val_max));
end
ideb = rInit ; step = -1; ifin = 1;
max_down = find(x(ideb,);
x(ideb,max_down) = max_down;
if rInit<2 , return; end
for jj = ideb닗:step:ifin
max_curr = find(x(jj,);
val_max = zeros(size(max_curr));
for k = 1:length(max_down)
[nul,ind] = min(abs(max_curr-max_down(k)));
val_max(ind) = max_down(k);
end
x(jj,max_curr) = val_max;
max_down = max_curr(find(val_max));
end
EXAMPLE2
wavelab802中有一个求模极大值的函数,他还牵涉到wavelab802802中的其他函数,大家可以去查。
function ro = localmaxima(P,interval)
% Find all the real roots of poly. P within the real interval [a,b]
a = interval(1); b= interval(2);
EPS = 10^(-10);
ro = roots(P);
realpos = find(abs(imag(ro)) < EPS);
ro = real(ro(realpos));
pos = find(ro>a & ro<b);
ro = ro(pos);
ro = sort(ro);
function ro = localmaxima(P,interval)
% Find all the real roots of poly. P within the real interval [a,b]
a = interval(1); b= interval(2);
EPS = 10^(-10);
ro = roots(P);
realpos = find(abs(imag(ro)) < EPS);
ro = real(ro(realpos));
pos = find(ro>a & ro<b);
ro = ro(pos);
ro = sort(ro);
%
% Part of WaveLab Version 802
% Built Sunday, October 3, 1999 8:52:27 AM
% This is Copyrighted Material
% For Copying permissions see COPYING.m
% Comments? e-mail wavelab@stat.stanford.edu
%
localmax()只是用来求局部极大值,
Example3
function [mould]=extre_mould(s,maxvalue);
%%%%%%%%%%%%%%%%%求莫极大值
%%maxvalue阀值
%%%、s 小波变换矩阵
%%%%%%%%%%%%%%%%%求莫极大值
%%maxvalue阀值
%%%、s 小波变换矩阵
wt=s;
m=maxvalue;
mycat=(abs(wt)>m);
[x y]=size(wt);
cc=abs((wt).*mycat);
mycat=mycat.*0;
for kk=1:x
for jj=1:y-1
if (jj==1)
if ( cc(kk,jj)> cc(kk,jj+1) )
mycat(kk,jj)=1;
m=maxvalue;
mycat=(abs(wt)>m);
[x y]=size(wt);
cc=abs((wt).*mycat);
mycat=mycat.*0;
for kk=1:x
for jj=1:y-1
if (jj==1)
if ( cc(kk,jj)> cc(kk,jj+1) )
mycat(kk,jj)=1;
end
else
if (((cc(kk,jj)>=cc(kk,jj-1))&(cc(kk,jj)>=cc(kk,jj+1))) & ((cc(kk,jj)>cc(kk,jj-1))|(cc(kk,jj)>cc(kk,jj+1))) )
mycat(kk,jj)=1;
end
end
end
end
mould= mycat;
return
else
if (((cc(kk,jj)>=cc(kk,jj-1))&(cc(kk,jj)>=cc(kk,jj+1))) & ((cc(kk,jj)>cc(kk,jj-1))|(cc(kk,jj)>cc(kk,jj+1))) )
mycat(kk,jj)=1;
end
end
end
end
mould= mycat;
return
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论