• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

学习和工程中常用的matlab代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、求取曲线的斜率和切线

a = [47 21; 46 20; 45 19; 44 19;43 18; 42 19;41 20;42 21;43 22].';

sp = spline(1:size(a,2),a);

dsp = fnder(sp);

d = fnval(dsp, 5);

k = d(2)/d(1);

 

ai = fnval(sp, linspace(1, size(a, 2)));

plot(a(1,:), a(2,:),'r+')

line(ai(1,:), ai(2,:))

 

line(a(1,5)+[-5 5],a(2,5)+k*[-5 5],'color','g')

2、给图表添加名字

legend('Recovery','Original')%给图表添加名字

pr=minmax(p);%计算每一行的数据范围

利用字符串建立表达式后,再用eval 命令执行它,可以使程序设计更加灵活。

但是注意表达式一定要是字符串。其命令格式为:

eval(’字符串’)

例 先定义字符串t 为平方根运算,再用eval 求出1 到10 的平方根。

clear,clc

t='sqrt(i)';

for i=1:10

s(i)={char(['The square root of ', int2str(i), ' is ',...

num2str(eval(t))])};

%上面大括号{}代表建立数组

end

s(:)

例 如果要输入几十个甚至上百个文件,用手工操作十分繁琐,然而灵活运用

eval 函数可以自动完成这一工作。假设数据文件名从data1.dat~data10.dat,放

在D:\matlab\chp 目录下,操作如下:

for i=1:10

eval(['load d:\matlab\chp\data',int2str(i),'.dat'])

end

3、利用循环打开一个文件夹的所有文件

filename1=ls('D:\c盘\毕业论文\数据\2nd_test');%提取文件名,每次必须将文件夹名写入。

cd('D:\c盘\毕业论文\数据\2nd_test')%跳转到要处理的数据所在文件夹

filename=cellstr(filename1);         %把细胞数组转化为字符串

filename(1:2)=[];             %删除filename中的...文件名,不知道哪里来的??

num=length(filename);   %计算文件个数

j=800;                           %选择第800组数据

B=filename(j);                 %获取文件名

C=cell2mat(B);                 %细胞数组转化为字符串

data1= load(C);                 %加载文件夹所对应的数据

 

 

第四步输入corrcoef(a),可以求a矩阵的相关系数,如果a矩阵是个多维矩阵,可以通过corrcoef(a(:,1),a(:,2))求每一列的相关系数,如下图所示:

4、Arma相关代码

y=iddata(x);%将数据转化为ARMAX能识别的类型。

5、可以利用通过直接调用.m函数进行输入数据。

[FileName,PathName] = uigetfile('*.txt','Select the Txt file');

cd(PathName);

data    = load(FileName);

6、求取矩阵X中列的个数;

size(X, 2)

7、对数据进行等分

%%此程序为将行/列矩阵分成20等分

y=ones(1,3401);

x=floor(length(y)/20);

y=y(1:(x*20));

b = reshape(y,20,x);

8、用if语句代替for语句,加速执行

对于那种有for语句的代码,构建了一个函数,可以通过内部调用函数进行执行,可以提高处理的速度。递归提供好的解决方案。

9、求解陀螺之间的相关系数corrcoef

data=[data1 data2 data3];

corrcoef(data)   %求解三个陀螺数据data1和data2和data3的相关系数,用于求解状态变量矩阵Q和Q‘

10、matlab绘图时快速添加等间隔的坐标

例如:

plot(1:0.8:2000, 0, 'k');%主要用于控制横坐标的绘制。

结果如上图所示。

11、图片保存技巧

  1. 将其保存为tiff格式的矢量图,这样放大以后不会失真。
  2. 设置坐标轴上下限:axis([xmin,xmax,ymin,ymax]);分别是x,y轴的上下限;

 

12、对离散序列进行积分

Trapz:梯形数值积分

For example

X=rand(1,1000)    ;

T=[1:1000]*(1/1000);

Trapz(T,X)                ;

  1. 13、循环读取数据

    1. 方法1:

clc

clear

close all

%% 获取和跳转到当前m文件的所在文件夹

p1 = mfilename('fullpath');

i=strfind(p1,'\');

p1=p1(1:i(end));

cd(p1)

 

%% 开始读取文件

location='如何利用matlab循环读取文件夹中的文件/';

temp1 = dir([location,  '*.txt']);

cd('如何利用matlab循环读取文件夹中的文件')

N=length(temp1);

for i=1:N

    data=load(temp1(i).name);

end

 

    1. 方法二:

clc

clear

close all

%% 获取和跳转到当前m文件的所在文件夹

p1 = mfilename('fullpath');

i=strfind(p1,'\');

p1=p1(1:i(end));

cd(p1)

 

%% 开始读取文件

file_location=[p1,'如何利用matlab循环读取文件夹中的文件'];%注意每次修改文件名

filename1=ls(file_location);                                                  %提取文件名

cd(file_location);                                                                   %跳转到需要读取的文件夹

filename=cellstr(filename1);                                                 %把细胞数组转换为字符串

filename(1:2)=[];

num=length(filename);                                                         %计算文件个数

for i=1:num

    data=load(filename{i});

end

14、获取和跳转到当前m文件的所在文件夹

p1 = mfilename('fullpath');

i=strfind(p1,'\');

p1=p1(1:i(end));

cd(p1)

15、绘制幅频图

mag1=abs(fft(fhat,N))*2/N;%对信号fhat进行快速傅里叶变换。

figure

plot(fv(1:N/2),mag1(1:N/2));

16、读取数据中含有空的文件数据

fid=fopen('C:\Users\pgl\Desktop\matab学习\读取含有空的数据\data.txt','r');

[f,count]=fscanf(fid,'%f %f');%从左到右,从上到下读取数据,对于数据中间的空白位置,自动跳过,返回的f为数据,count为数据的个数

fclose(fid);

xlswrite('new.xls',f);

17、对具有编号的变量进行赋值

data_s是种N行n列的数据,利用n个变量分别为gyro_1…gyro_n的数据。

for i=1:n

    eval(['gyro','_',num2str(i), ' =data_s;']);

end

18、将数据保存成txt格式

save raw_data.txt -ascii data

19、matlab离散数据积分

有两个序列x,y,则x,y的离散积分为(梯形法计算):

T=sum(diff(x).*(y(1:end-1)+y(2:end))/2)

20、Matlab求解矩阵指数函数,——expm

syms t b s ss;

expm(([0 1 0;0 0 1;0 0 -b].*t))

21、一个小图嵌入另bai外一个大图中,matlab举例。程序如du下。

t=0:.1:2*pi; plot(t,sin(t),'g'); xlim([0,2*pi]); xlabel('x')ylabel('y')axes('position',[0.55,0.55,0.3,0.3]);     %关键在这句!所画的bai小图duplot(t,cos(t)); xlabel('t')ylabel('y')xlim([0,2*pi]);%设置横坐标范围

22、Matlab读取dat文件,以及读取一般文件

fileID = fopen('C:\Users\pgl\Desktop\数据采集相关资料\采集数据\SAVE2020_7_8_11-27-35.DAT');%注意修改路径

A= fread(fileID);

23、如何将数据进行列排序,将任何矩阵进行列排序

AA = [1 3 4 5 6]

AA(:)的结果为:

1

3

4

5

6

AAA = [1 3 4;5 6 7]

AAA(:)的结果为

1

5

2

6

3

7

24、读取带汉字的文档

fid = fopen('所有人.txt','r','n','UTF-8');

t = 0;

while 1

    t = t+1;

    tline = fgetl(fid);

    if ~ischar(tline)  

        break

    end

    disp(tline)

    allPeaple{t}=tline;

end

fclose(fid);

25、判断两个细胞数组是否相等(if语句中的判断)

isequal(partPeaple(i),allPeaple(j))

26、simulink library browser 设置字体大小

按Ctrl 加 +可以放大字体,按Ctrl 加 -可以缩小字体。alt加1恢复原字体。

27、利用matlab生成.mif文件

clc

clear

close all

t = [0:0.1:360];%输入范围0到90°,步长0.1°

x = pi*t/180;

sin_val = sin(x);

fid = fopen('C:\Users\pgl\Desktop\sine.mif','wt');

fprintf(fid,'width=14;\n');

fprintf(fid,'depth=1024;\n');

fprintf(fid,'address_radix=uns;\n');

fprintf(fid,'data_radix=dec;\n');

fprintf(fid,'content begin;\n');

for jresult = 1:1024

    i = jresult-1;

    k = round(sin_val(jresult)*16384);

    if(k==16384)

        k = 16384;

    end

    fprintf(fid,'%d:%d;\n',i,k);

end

fprintf(fid,'end;\n');

fclose(fid);

plot(sin_val);


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap