资讯详情

matlab工作笔记

matlab笔记

  • 一、文件操作
    • 1.1 检查指定文件夹是否存在,如有删除重建
    • 1.2 查看目标文件夹下的所有指定格式文件,删除文件
    • 1.3 查看目标文件夹中的所有子文件夹
    • 1.4 判断目标文件是否存在,如果存在,则删除
    • 1.5 写txt或ini文件
    • 1.6 写xlsx文件
    • 写dat和hdr,支持ENVI直接打开
  • 二、自定义函数
    • 2.1 raw文件读取,raw转mat
    • 2.2 .asc文件读取
    • 2.3 读取xml文件
    • 2.4 曲线寻峰函数
    • 2.5 曲线平滑
    • 2.6 光谱填图匹配SAM
    • 2.7 批量最小二乘回归,批量计算一次线性拟合k和b
    • 2.8 获取目标文件夹下所有子文件夹的路径
    • 2.9 在目标文件夹下获得指定格式的所有文件名
  • 三、绘图
    • 3.1 画热度图
    • 3.2 写在图片上
  • 四、其他
    • 4.1 延时和计时
    • 4.2 小数保留固定位数
    • 4.3 左右旋转矩阵
    • 4.4 矩阵按指定维度从大到小排序
    • 4.5 矩阵卷积
    • 4.6 统计矩阵元素
    • 功能快捷键
    • 合理创建标题有助于生成目录
    • 如何改变文本的风格
    • 插入链接和图片
    • 如何插入一个漂亮的代码片?
    • 生成一个适合你的列表
    • 创建表格
      • 设、左、右设置内容
      • SmartyPants
    • 创建一个自定义列表
    • 如何创造注脚?
    • 注释也是必不可少的
    • KaTeX数学公式
    • 新的甘特图功能,丰富你的文章
    • UML 图表
    • FLowchart流程图
    • 导出与导入
      • 导出
      • 导入

一、文件操作

1.1 检查指定文件夹是否存在,如有删除重建

savepath=['../saved/']; if exist(savepath,'dir')     rmdir(savepath,'s'); end  mkdir(savepath); 

1.2 查看目标文件夹下的所有指定格式文件,删除文件

picFormat='tif';%图片格式 files_list = dir(fullfile(data_file,['*.',picFormat]));%查看指定格式文件 delete([data_file,files_list(end).name]); 删除列表中最后一个文件 

1.3 查看目标文件夹中的所有子文件夹

files_list = dir(path); 

1.4 判断目标文件是否存在,如果存在,则删除

if exist(txtname,'file')     delete(txtname);  end 

1.5 写txt或ini文件

a=1:100; b=321; txtname='output.txt';
if exist(txtname,'file')
    delete(txtname); 
end

fid_txt=fopen(txtname,'a');
fprintf(fid_txt,'[node1]');
fprintf(fid_txt,'\r\n'); 
fprintf(fid_txt,'a=');
fprintf(fid_txt,'\r\n'); 
for i=1:length(a)-1
    fprintf(fid_txt,[num2str(a(i)),',']);             
end
fprintf(fid_txt,[num2str(a(end))]);
fprintf(fid_txt,'\r\n'); 

fprintf(fid_txt,'[node2]');
fprintf(fid_txt,'\r\n');
fprintf(fid_txt,['b=',num2str(b)]);
fprintf(fid_txt,'\r\n');    
fprintf(fid_txt,'txt write finished!');
fprintf(fid_txt,'\r\n');
fclose(fid_txt);         
disp(['test finish!']);

1.6 写xlsx文件

a=1:100;
b=321;
c=3.1415926;
xlsxname='data.xlsx';
if exist(xlsxname,'file')
    delete(xlsxname); 
end
sheetname='sheet1';
xlswrite(xlsxname,{ 
        'a','b','c','xlsx write finished!'},sheetname,'A1');
xlswrite(xlsxname,a',sheetname,'A2'); xlswrite(xlsxname,b,sheetname,'B2'); xlswrite(xlsxname,c,sheetname,'C2');

写dat和hdr,支持ENVI直接打开

% 创建mat矩阵pb
p=ones(640,512);
b=4:4:256;
pb=[];
for i=1:length(b)
    pb(:,:,i)=p*b(i);    
end

pb30=pb(:,:,30);
figure;
imshow(uint8(pb30));

%保存dat
fid_cmati = fopen('pb.dat','w');
fwrite(fid_cmati,pb,'double');
fclose(fid_cmati);          

%保存hdr    
fid_dp=fopen('pb.hdr','a');
fprintf(fid_dp,'ENVI');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'description = {');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,' File Imported into ENVI.}');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,['samples = ',num2str(size(pb,1))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['lines = ',num2str(size(pb,2))]);
fprintf(fid_dp,'\r\n');
fprintf(fid_dp,['bands = ',num2str(size(pb,3))]);
fprintf(fid_dp,'\r\n'); 

fprintf(fid_dp,'header offset = 0');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'file type = ENVI Standard');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'data type = 5');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'interleave = bsq');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'sensor type = Unknown');
fprintf(fid_dp,'\r\n'); 
fprintf(fid_dp,'byte order = 0');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,'band names = {');
fprintf(fid_dp,'\r\n');    
fprintf(fid_dp,'band 1');
for ii=2:size(pb,3)
    fprintf(fid_dp,[',band ',num2str(ii)]);        
end
fprintf(fid_dp,'}');
fprintf(fid_dp,'\r\n');

fprintf(fid_dp,'wavelength = {');
fprintf(fid_dp,'\r\n');    
fprintf(fid_dp,num2str(b(1)));
for ii=2:length(b)
    fprintf(fid_dp,[', ',num2str(b(ii))]);        
end
fprintf(fid_dp,'}');
fclose(fid_dp);    

二、自定义函数

2.1 raw文件读取,raw转mat

function mat=raw2mat(allpath,col,row,band,way)
    
%     col=512;
%     row=640*54;
    
    
    fid=fopen(allpath,'r');
    A=fread(fid,[col,row*band],way);
    A=A';
    fclose(fid);
%     figure;
%     imshow(uint8(A(1:640,1:512)));

    mat=[];
    for i=1:band
        mat(:,:,i)=A(row*(i-1)+1:row*i,1:col);   
%         figure;
%         imshow(uint8(B(:,:,i)));
%         title(num2str(i));

    end

end

2.2 .asc文件读取

1-1-505.asc文件内容: 在这里插入图片描述

asc文件中第91行开始为要用的数据。

[wavei,valuei]=textread('1-1-505.asc', '%f %f','headerlines', 90);

2.3 读取xml文件

function doubleDataPt = myreadxml(allpath, NodeName)
% 读取xml文件:读取xml指定节点下的数据,保存成mat
%输入:allpath:xml文件的全路径,包括文件名
%      NodeName:节点名
%输出:doubleDataPt:指定节点中的数据

    xmlDoc = xmlread(allpath);   %读取xml文件。
    doubleDataPt=[];    
    DataPt_array= xmlDoc.getElementsByTagName(NodeName);  % 将所有DataPt节点放入数组DataPt_array
    for i = 0 : DataPt_array.getLength-1    % DataPt_array.getLength
        charDataPt= char(DataPt_array.item(i).getFirstChild.getData);    % 提取当前节点的内容,内容为char型
        doubleDataPt(i+1,1)=str2double(charDataPt);   %将插入型转化为double型
        %fprintf('%d %f \n',i+1,num(i+1));  %输出double型数据
    end

return;

xml文件内容: 函数调用:

bi = myreadxml('8.5.xml', 'DataPt');

2.4 曲线寻峰函数

function [posi,widthi]=myxunfengLeftRight(sIi)

    [maxv,maxi]=max(sIi);
    minv=min(sIi);
    midv=(maxv+minv)/2;

    %left
    ww_left=abs(sIi(1:maxi)-midv);
    [~,mini_left]=min(ww_left);
    %right
    ww_right=abs(sIi(maxi+1:end)-midv);
    [~,mini_right]=min(ww_right);
    posi=(mini_left+mini_right+maxi)/2;
    widthi=mini_right+maxi-mini_left;

end

2.5 曲线平滑

function xc=myWindowsFilter(x,windowSize,dim)
%x为一维向量
%windowSize为窗口尺寸
%xc为平滑后的一维向量
    
    a = (1/windowSize)*ones(1,windowSize);
    if dim == 1
        b = conv(ones(length(x),1),a,'same');
    else if dim==2
            b = conv(ones(1,length(x)),a,'same');
        end
    end
    y = conv(x,a,'same');
    xc = y./b;
end

2.6 光谱角填图匹配SAM

function angle = mysam(a, b)
% 光谱角填图算法:计算两个一维向量的光谱角相似度
%输入:a,b均为一维向量
%输出:a,b间的光谱角

	% [p,N] = size(a);
	% errRadians = zeros(1,N);
	% for k=1:N
	%     tmp = a(:,k);
	%     errRadians(k) = acos(dot(tmp, b)/ (norm(b) * norm(tmp)));
	% end
		
	xtxi=sum(sum(a.*b));
	x11=sqrt(sum(a.^2));
	xi11=sqrt(sum(b.^2));
	angle=acos(xtxi/x11/xi11);

return;

2.7 批量最小二乘回归,批量计算一次线性拟合的k和b

function [k,b,r2] = LinearRegForArr(x,y,dim)
%最小二乘法一次线性回归函数
%x,y为原始数据
%dim控制按行计算还是按列计算的参数,1为按列计算(1列为1组数据),2为按行计算
%k、b、r2分别为拟合后的k、b、r2的矩阵
	n = size(y,dim);
		
	x2=sum(x.^2,dim);       % 求Σ(xi^2)
	x1=sum(x,dim);          % 求Σ(xi)
	x1y1=sum(x.*y,dim);     % 求Σ(xi*yi)
	y1=sum(y,dim);          % 求Σ(yi)
	 
	k=(n.*x1y1-x1.*y1)./(n.*x2-x1.*x1);      %解出直线斜率b=(y1-a*x1)/n
	b=(y1-k.*x1)./n;                      %解出直线截距
	
	yfit=x.*k+b;	%求拟合值
	sst=sum(((y-mean(y,dim)).^2),dim);
	ssr=sum(((yfit-mean(yfit,dim)).^2),dim);
	r2=ssr./sst;	%求拟合的R2

end

2.8 获取目标文件夹下所有子文件夹的路径

function [SubFolders] = GetFolders(ParentFolder)
%GetFolders
% 函数功能为获取父文件夹下所有子文件夹的路径
% 函数的输入为ParentFolder:父文件夹路径。eg: 'D:\myFiles'
% 函数的输出为SubFolders:子文件夹路径。为一个元胞数组,eg: { 
        'D:\myFiles\file1\doc1'}
  
	SubFolderNames = dir(ParentFolder);
	for i=1:length(SubFolderNames)
	        if( isequal( SubFolderNames( i ).name, '.' )||...
	        isequal( SubFolderNames( i ).name, '..')||...
	        ~SubFolderNames( i ).isdir) % 如果不是目录则跳过
	            continue;
	        end
	        SubFolder(i).SubFolderName = fullfile( ParentFolder, SubFolderNames( i ).name );
	end
	 
	temp = { 
        SubFolder.SubFolderName};
	idx = cellfun(@(x)~isempty(x),temp,'UniformOutput',true); % 利用cellfun函数得到元胞数组中所有非空元素的下标
	SubFolders = temp(idx);
end

2.9 获得目标文件夹下,指定格式所有文件名

function [FileNames] = GetFileNames(Path,Format)
% GetFileNames
% 函数的功能为获得某一路径下,某种格式所有文件名
% 函数的输入1为Path,要获取的路径。eg: 'D:\myFiles\docs'
% 函数的输入2为Format,要获取路径的文件格式。eg: '*.txt','*.docx','*.png'
 
	fileFolder=fullfile(Path);
	dirOutput=dir(fullfile(fileFolder,Format));
	FileNames={ 
        dirOutput.name}; 
end

三、绘图

3.1 画热度图

%画热度分布图
figure(1);
set(gcf,'position',[50 50 1200 900]);
colormap jet;
imagesc(a);%矩阵a尺寸为w*h*1
xlim([0 w]);
ylim([0 h]);
set(gca,'XTick',0:floor(w/8):w);
set(gca,'YTick',0:floor(h/8):h);
colorbar;
title('pic');

3.2 在图片上写字

%x,y为文字的位置
%hello为文字的内容
%'horiz','left'  左对齐
%'fontsize',11  字号为11
text(x,y,'hello','horiz','left','fontsize',11);

四、其他

4.1 延时和计时

pause(1);%延时1s

t1=clock;%开始计时
......
......
......
t2=clock;%结束计时
time=etime(t2,t1);%计算时间,单位秒

4.2 小数保留固定位数

c=3.1415926;
d_str=sprintf('%.4f',c);%保留4位小数后的字符串
d=str2num(d_str);%字符串转数字

4.3 矩阵旋转和左右翻转

%矩阵先顺时针转90度
mat1=rot90(mat1);

%矩阵左右翻转
mat2=fliplr(mat1);

4.4 矩阵按指定维度从大到小排序

[max_value9,max_index9]=sort(mat,3,'descend');%mat按第3维度从大到小排序

4.5 矩阵卷积

kenel = 1/25 * ones(5,5);%5*5卷积核
b=conv2(a,kenel,'valid');%对a进行卷积操作      

4.6 矩阵元素统计

statistics1=tabulate(mat);%统计mat中的元素
statistics1(find(statistics1(:,2)==0),:)=[];%去掉没有出现过的元素
statistics1_index=find(statistics1(:,2)>1);%找出现次数大于1的元素的索引
statistics2=statistics1(statistics1_index,:);%统计出现次数大于1的元素

功能快捷键

撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctrl/Command + Shift + H 无序列表:Ctrl/Command + Shift + U 有序列表:Ctrl/Command + Shift + O 检查列表:Ctrl/Command + Shift + C 插入代码:Ctrl/Command + Shift + K 插入链接:Ctrl/Command + Shift + L 插入图片:Ctrl/Command + Shift + G 查找:Ctrl/Command + F 替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。 输入2次#,并按下space后,将生成2级标题。 以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片:

带尺寸的图片:

居中的图片:

居中并且带尺寸的图片:

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中 使用:----------居左 使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫

标签: bsq015a振动变送器bsq015振动变送器bsq073lvdt位移变送器bsq011a振动变送器振动变送器bsq015b

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台