cndaqiang Web Linux DFT

matlab 命令简单记录

2019-03-06
cndaqiang
RSS

为了水学分,选了一个matlab的课,把常用的命令记录下来,方便做作业

参考

Matlab中disp、fprintf和sprintf有什么区别?

说明

  • 可以在终端直接执行,命令后以;结尾不会输出到屏幕,也可以使用m文件
  • 同行书写,用;代表换行
  • 变量名区分大小写,字母数字下划线
  • 变量无需定义,随用随赋值,新创建,赋值为新数据=删除旧变量并重新定义赋值
  • 注释%开头,多行注释??,m文件开头的注释,help 文件名时,会显示文件开头的注释,函数文件function行后面的注释会在help 函数名后显示
  • 代码节用%%和空格开头,可用于单独调试某一段代码
  • 函数(变量)也可函数(矩阵),返回一组值
  • 函数,默认传址调用,单独书写成一个文件,文件名和函数名一样
  • 所有变量默认double类型
  • !开头执行系统命令
  • [矩阵]'单引号表示转置

path路径

设置path(搜索路径)path(path1,'new_path',path2),等价于bash的PATH=PATH1:$PATH:PATH2 输入命令后,matlab的搜索方式

  • (1)检查该命令是不是一个变量。
  • (2)检查该命令是不是一个内部函数。
  • (3)检查该命令是否当前目录下的M文件。
  • (4)检查该命令是否MATLAB搜索路径中其他目录下的M文件。

标点符号

辅助命令

help lookfor tab模糊查询

clc 类似于linux的clear 清空界面

clf 清空图形

clear 清空变量

clear x y z %清除x,y,z 中间是空格不是,
clear  %清楚所有变量

save 保存变量

save 文件名 [变量名表,空格分隔,不是,] [-append] [-ascii]

变量名不指定,保存所有变量
保存文件默认为xxx.mat 文件名无需写mat
-append追加变量,已存在相同变量名则覆盖
-ascii选项使文件以ASCII格式处理,省略该选项时文件将以二进制格式处理

load 导入变量

save 文件名 [变量名表,空格分隔,不是,] 

全导入或导入指定变量

who 查看是否存在变量

who [变量表]

whos 查看变量信息

whos [变量表]
》whos
  Name      Size            Bytes  Class     Attributes

  a         1x3                24  double              
  b         1x1                 8  double      

显示精度

默认是双精度存储计算,只显示format形式,更改显示形式

变量

数值

数值类型

在未加说明与特殊定义时,MATLAB对所有数值按照双精度浮点数类型进行存储和操作

复数y=complex(a,b)或`y=a+b*i)

单精度浮点类型不能与整数类型进行算术运算

变量

系统变量

不能清除

i, j:虚数单位。
inf:无穷大。
realmax:最大正实数。
realmin:最小正实数。
ans:没有给定变量值,系统默认采用ans。
eps:可作为一个容许误差。如eps=2^(-42)。
NaN:表示不定值。由Inf/Inf或者0/0得到。
nargin:函数输入参数个数。
nargout:函数输出的参数个数
lasterr:存放最新的错误信息
lastwar:存放最新的警告信息

矩阵

定义

,或空格分开同行元素,;分开行,也可将其他矩阵用于元素构造新矩阵

》x=[1,2,3;4,5,6;7,8,9]

x =

     1     2     3
     4     5     6
     7     8     9

调用、赋值A(m,n)

  • A([a,b,c],[d,e]) 操作/提取A矩阵的a,b,c行,d,e列元素
  • A(end,end)最后一个元素
  • A(-2,-2)倒数第2行,倒数第2列
  • A(:,m:n) 逗号两边是维度,一个:表示所有行,m:n表示m到n列
  • A(n) 按列存储,第n个元素,与Fortran一样
  • A([一维数列]) 操作/提取一维数列n对应A(n)元素
  • A(范围)=[] 删除矩阵元素,维度变化
  • A(范围)=0 赋值0
  • 若,原矩阵该范围内之前不存在元素,操作后,自动拓展矩阵,未指定元素赋0,即
  • 使用条件提取特定值,如若ResponseTime{Condition}{1}矩阵元==one,即被试编号是one,则提取被试相应的数据
    ` OneResponseTime{Condition}=ResponseTime{Condition}{2}(ResponseTime{Condition}{1}==one); `` 》x=[1,2;3,4]

x =

 1     2
 3     4

》x(3,3)=1

x =

 1     2     0
 3     4     0
 0     0     1 ```

矩阵生成

等差,等比数列

等差数列[按差值]start[:差值]:end 差值默认为1

》x=1:0.2:2

x =

    1.0000    1.2000    1.4000    1.6000    1.8000    2.0000

》x=1:2

x =

     1     2

等差数列[按总点数],linspace(start,end[,总点数]) 总点数默认100

》linspace(1,2,5)

ans =

    1.0000    1.2500    1.5000    1.7500    2.0000

等比数列,an=a0*x^nlogspace(start,end[,总点数])点数默认50

logspace(1,2,5)

ans =

   10.0000   17.7828   31.6228   56.2341  100.0000

》17.7828/10*17.7828

ans =

   31.6228
特殊矩阵
一下的N或m,n或m,n,p也可用size(A)已存在矩阵来替代
ones(N) NxN全1矩阵
ones(m,n) mxn全1矩阵
ones(m,n,p) mxnxp 全1
ones(size(A)) 与A维度相同,全1
zeros(N) 全0
zeros(m,n) 全0
zeros(m,n,p) 全0
rand(N) 0-1随机数
rand(m,n) 0-1随机数
rand(m,n,p) 0-1随机数
randn(维度):产生符合均值为0,方差为1的标准正态分布

eye(N) NxN单位矩阵
eye(m,n) mxn对角线1
对角线矩阵
x =

     1     2     3

》diag(x,0)  %或diag(x)

ans =

     1     0     0
     0     2     0
     0     0     3

》diag(x,1)

ans =

     0     1     0     0
     0     0     2     0
     0     0     0     3
     0     0     0     0

》diag(x,-1)

ans =

     0     0     0     0
     1     0     0     0
     0     2     0     0
     0     0     3     0
稀疏矩阵
A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A,当矩阵S是稀疏存储方式时,则函数调用相当于A=S;
A=sparse(m,n):生成一个m*n的所有元素都是0的稀疏矩阵A。 
A=sparse(u,v,S): u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。
S=sparse(i,j,s,m,n):其中i 和j 分别是矩阵非零元素的行和列指标向量,s是非零元素值向量,m,n 分别是矩阵的行数和列数
》A

A =

     1     2     0     0
     0     0     3     4
     0     0     0     0

》S=sparse(A)

S =

   (1,1)        1
   (1,2)        2
   (2,3)        3
   (2,4)        4
%S的存储方式和一般矩阵不同
%恢复一般存储方式
S+0或full(S)
magic魔方矩阵,magic(n)

对于n阶魔方阵,其元素由1,2,3,…,nn共nn个整数组成

范得蒙矩阵vander(a)

范得蒙(Vandermonde)矩阵是指最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积,即 a的斐波那契次方构成


》a=[1 2 3 4 5];
》vander(a)

ans =

     1     1     1     1     1
    16     8     4     2     1
    81    27     9     3     1
   256    64    16     4     1
   625   125    25     5     1
希尔伯特矩阵
hill(n)   %n阶希尔伯特矩阵
invhill(n) %n阶希尔伯特矩阵的逆
托普利兹矩阵

托普利兹(Toeplitz)矩阵 除第一行第一列外,其他每个元素都与左上角的元素相同。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以向量x为第一列,以向量y为第一行的托普利兹矩阵。toeplitz(x)用向量x生成一个对称的托普利兹矩阵
x,y向量,第一个元素需相同

》x=[1 2 3 4];
》y=[1 20 30];
》toeplitz(x,y)

ans =

     1    20    30
     2     1    20
     3     2     1
     4     3     2

矩阵函数

  • size(x)查看矩阵x维度,返回维度数组
    》a
    a =
       1     2     3
    》h=size(a)
    h =
       1     3
    
  • length(x)返回就是size(x)的第二个维度大小,即一维矩阵长度,mxn二维矩阵的n

  • reshape(x,维度) 按照新维度排列矩阵,不改变x,如A(3,2)=1;B=resphape(A,1,6)
下三角矩阵tril(A[,k]),上三角矩阵triu(A[,k])
a =

     1     1     1
     1     1     1
     1     1     1

》tril(a)

ans =

     1     0     0
     1     1     0
     1     1     1

》triu(a,1)

ans =

     0     1     1
     0     0     1
     0     0     0
转置:x.'非共轭转置,x'共轭转置
翻转 :fliplr(x)左右翻转, flipud(x)上下翻转,flipdim(x,dim)按维度翻转
旋转

B=rot90(A):矩阵B是矩阵A沿逆时针方向旋转90度得到的。
B=rot90(A,k):矩阵B是矩阵A沿逆时针方向旋转k*90度得到的(要想顺时针旋转,k取-1)

inv(x)

伪逆是对于不可逆矩阵来说的。对于可逆矩阵来说,伪逆和逆结果一样,对于不可能逆矩阵,是采用最小二乘的方法求一个近似的逆
可逆:方阵+满秩 如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A’同型的矩阵B,使得:ABA=A,BAB=B 此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。在MATLAB中,求一个矩阵伪逆的函数是pinv(A)。当一个矩阵不是满秩的时候,如果要求逆,只能用伪逆函数来求。

行列式det(x)
trace(x)对角线元素之和
rank(x)
特征值,特征向量

Ax=ax 特征值an,特征向量xn

eig(A) 特征值
[a,x]=eig(A) 特征值a,特征向量x
范数

了解了范数再来弹

norm

字符串'字符串'"string型"

字符串 ,字符char型构成的数组,用单引号'

》a='string';
》whos a
  Name      Size            Bytes  Class    Attributes

  a         1x6                12  char      

使用cd切换目录时,只能cd '目录'

很多命令/函数的输入都用'字符数组'

 %将变量a保存到file文件
 save ('file','a')
 %将xi保存到
 save (['data',num2str(i)],['x',num2str(i)])

关于num2str可以按照格式转成字符串

num2str(T,'%2.1f\n')]

string型,用双引号"

》a="tring";
》whos a
  Name      Size            Bytes  Class     Attributes

  a         1x1               158  string              

函数略

结构体

定义

直接定义

》xiaoming.matrix=[1:10];
》xiaoming.grad=123;
》xiaoming

xiaoming = 

  包含以下字段的 struct:

    matrix: [1 2 3 4 5 6 7 8 9 10]
      grad: 123

struct创建,可以同时创建n个student(n)但只有第n个会被赋值

》student(2)=struct('matrix',[1:10],'grad',123);
》student(1)

ans = 

  包含以下字段的 struct:

    matrix: []
      grad: []

》student(2)

ans = 

  包含以下字段的 struct:

    matrix: [1 2 3 4 5 6 7 8 9 10]
      grad: 123

使用repmat创建复制内容相同的结构体

 》student=repmat(struct('matrix',[1:10],'grad',123),2,3);
》student

student = 

  包含以下字段的 2×3 struct 数组:

    matrix
    grad

》student(1,3)

ans = 

  包含以下字段的 struct:

    matrix: [1 2 3 4 5 6 7 8 9 10]
      grad: 123

使用

cell

定义

a={元素}

使用

cell的维度也可以是多维

a{m,n}
cell里面有cell
a{m,n}{p,q}

格式化输入输出

格式化输出

disp(‘字符数组’)直接显示在命令行

disp(['6.全体学生IQ和GPA的相关系数为:', num2str(IQCorr(1,2))])

sprintf和fprintf都用来生成格式化的字符串,当然也可以直接接受没有格式的字符串 Sprintf是s(tring)print f(ormat),也就是直接生成带格式的字符串的,通常并不直接用来显示在命令行

Fprintf是f(ile)printf(ormat),可以用来直接进行文件的写入,如果不指定文件的fid那么直接输出到命令行

error('错误信息') 提示错误信息,并终止程序

warning('错误信息')提示错误信息,继续运行

条件

if-else-end

if 条件
	命令
elseif 条件
	命令
else
	命令
end

elseif else可不写

if a==5; b=5;end

swith

switch num %num可以是变量,表达式,但结果要是标量或字符向量
case value1
命令
case value2
命令
otherwise
命令
end

otherwise可以忽略

try-catch 捕获运行是否发生错误

try
命令1
catch
命令2
end

如果命令1执行报错,程序运行错误,执行命令2

比如提取矩阵超过范围,执行语句不存在

循环

for

for x=array
命令
end

可以中途改变x的取值,不影响运行

while

while 条件
命令
end

循环调节

continue进入下一个循环

break终止循环

函数

函数传址调用

自定义函数function

一个函数写一个文件,函数名和文件名一致
help 函数名 会返回函数体之前的注释

function [输出变量]=函数名(输入变量)
%注释行start
%。。。help 函数名时,会显示这部分注释
%注释行end
	函数体
end

使用return可以提前返回,跳出函数

可以缺省输入,输出

也可以在m文件中定义function,本文件内调用

文件读写

数学

基础计算

+(加)、-(减)、*(乘)、^(乘方)、’(转置)

对于矩阵a,ba/b(a除以b)、a\b(a被b除)

eye(size(x))/x == inv(x)
A\B等效于inv(A)*B
B/A等效于B*inv(A)

对于标量a,b a/b==b\a

.*点乘,元素相乘,.\ ` ./ 点除,元素相除,.^`点乘方

逻辑关系

关系成立返回1,否则0,可以比较变量和矩阵

<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)

矩阵逻辑返回矩阵

&(与)、|(或)和~(非) 可以判断矩阵
A&&B 不支持判断矩阵,首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值
"|"与“||”同理

逻辑函数

find(x非0) x中大于1的元素位置
find(x>1) x>1的矩阵中非0元素,即x中大于1的元素位置

数学函数

假如x为向量,则表示对向量中的每个元素进行操作后得到的新向量

abs(x)绝对值
sqrt(x)开方
sign(x)符号函数,返回0,1,-1
exp(x):e^x
log(x):ln(x)
log2(x)
log10(x)
pow2(n)==2^n
real(x) 实部
image(x) 虚部 

取整

round(x):四舍五入,与他距离最近的整数
fix(x):只保留整数部分
floor(x):向负无穷取整
ceil(x):向正无穷取整

取余

求x除以y的余数,Fortran中是mod(y,x)

rem(x,y)
返回的是x-n.*y,其中的n = fix(x./y),fix舍去小数部分,向0取整

mod(x,y):
命令返回的是x-n.*y,n=floor(x./y),向负无穷取整

当x和y的正负号一样的时候,两个函数结果是等同的      当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样

指数函数

exp(n)=e^2
5^2=5x5

对数

log(x):求x以e为底的对数,即自然对数。如果x为向量,则对其中的每个元素都求自然对数。
log2(x):求x以2为底的对数。如果x为向量,则对其中的每个元素都求以2为底的对数。
log10(x):求x以10为底的对数。如果x为向量,则对其中的每个元素都求以10为底的对数

线性方程组

求导

积分

绘图

画板操作

画板分隔subplot(x,y,z)

将绘图窗口分隔成x*y个画板,活动画板为第z个画板(从左到右,从上到下)

切换绘图窗口 figure([n])

切换到绘图窗口n,若不存在则新建,缺省n,自动创建

关闭活动画图窗口close([n])

关闭绘图窗口n,缺省n,关闭当前活动窗口

图形操作

在本图上继续画图 hold on, 取消hold off

title标题

titlename=['T = ',num2str(T,'%2.1f\n'),'系统磁矩']
title(titlename);

legend图例

legend('y=sin(x)','y=cos(x)')
legend('y=sin(x)','y=cos(x)','Location','位置')
%位置如下图
legendoff %清除图例

字体风格

在显示到图上时控制显示格式

title('\fontname{宋体} \bf \fontsize{20} no 字体^{上标}_{下标}\beta')
legend('\fontname{宋体} \bf \fontsize{20} no 字体^{上标}_{下标}\beta')

坐标轴

坐标轴范围

axis equal 
axis([xmin xmax ymin ymax]):设置坐标轴的范围,指 定当前坐标轴x轴和y轴的范围,其中xmin为x轴下界,而 xmax为x轴的上届,而ymin和ymax分别为y轴的下界和 上界。
axis([xmin xmax ymin ymax zmin zmax]):设置x、y 和z坐标轴的范围,其中xmin和xmax为x轴下界和上届, ymin和ymax分别为y轴的下界和上界,zmin和zmax分别 为z轴的下界和上界。 
xlim([xmin xmax]):仅设置x轴的范围
ylim([ymin ymax]):仅设置y轴的范围。

指定坐标轴lable

set(gca,'xtick',[1 2 3 4]); % 故意为了只是显示4个刻度值,下方的设置才有效
%设置x标签
set(gca,'xticklabel',{'字符串长度6+干扰','字符串长度9+干扰','字符串长度6+安静','字符串长度9+安静'});
%注意{ }
坐标轴log增量semilogyx, semilogy 恒纵坐标刻度是10^n
semilogy(y)
semilogy(x,y)

通过gca设置图形的参数

gca返回一个“结构体”,是当前绘图面板的所有参数的值,通过get(gca)可以看到可以设置的参数,修改gca内部参数的值,即可修改当前图形

get(gca)
                       ALim: [0 1]
                   ALimMode: 'auto'
     ActivePositionProperty: 'position'
          AmbientLightColor: [1 1 1]
               BeingDeleted: 'off'
                        Box: 'on'
                   BoxStyle: 'back'
                 BusyAction: 'queue'
              ButtonDownFcn: ''
                       CLim: [0 1]
                   CLimMode: 'auto'
             CameraPosition: [2 0.5706 19.6202]
         CameraPositionMode: 'auto'
               CameraTarget: [2 0.5706 0
               %略略略略
                 FontName: 'Times New Roman'
                 FontSize: 10
%略略略略
set(gca,参数,值)
set(gca, 'FontSize',20)

保存图像

pngname=['up.',num2str(T,'%2.1f\n'),'.png'];
saveas(gcf,pngname)

坐标

#### meshgrid 绘制网格

[xx,yy]=meshgrid(x,y)

二维图

plot 直角坐标

plot(y) 
plot(x,y) %x,y亦可为矩阵
plot(x,y,线形描述)  %也可以画图后,用画图面板调

多维曲线

plot(x1,y1,[线形,]x2,y2,[线形,]...)
plot(X,Y) %X,Y是通维矩阵,可以是一维X,多维Y,也可以是多维X和多维Y

line 用直线连接二维三维之间的点

line(x,y) %必须有x,y,即至少两个参量,表示一个二维点,
line(x,y,z)
line(x,y,z,线形)

bar条形图

bar(y)
bar(x,y)

pir 饼图

pie(x)

hist直方图

hist(y)
hist(y,x) %直方图中心为x中的各值

scatter散点图

scatter(x,y)

polar 极坐标

polar(角度,半径)
polar(角度,半径,线形)

plotyy 两个y坐标轴标度

plotyy(x1,y1,x2,y2)
plotyy(x1,y1,x2,y2,fun) %
plotyy(x1,y1,x2,y2,fun1,fun2)
%fun可以为plot和semilogy等绘图函数,如
plotyy(x1,y1,x2,y2,@plot,@semilogy)

counter 等高线

contour(z) :把矩阵z中的值作为一个二维函数 的值,等高曲线在一个平面内,平面的高度v由 MATLAB自动选取,绘制等高线。
contour(x,y,z):(x,y)是平面z=0上点的坐标矩 阵,z为相应点的高度值矩阵,绘制等高线。 
contour(z,n):画出矩阵z的n条等高线。  contour(x,y,z,n) :画出矩阵z的n条等高线。 contour(z,v) :在指定的高度v上画出等高线
clabel 添加高度标签

曲线,标记样式

plot(x,y,'style')
plot(x,sin(x),'gsquare--')
%画error bar只显示bar部分
errorbar(MeanResponse,VarResponse,'linestyle', 'none')
%线宽,点大小
plot(x,sin(x),'gsquare--','LineWidth',4,'MarkerSize',10)

文件读写

读入

按格式读入textscan

filename='RightRatio.dat';
RightRatioID = fopen(filename);
RightRatio=textscan(RightRatioID,'%d%f%f%f%f','HeaderLines',1);
%'HeaderLines',从第1+1行读取
%MATLAB文件中的行号从0开始
% %d整数%f实数
fclose(RightRatioID);

有趣

eval(字符数组),执行字符数组对应的命令

eval(['x=100'])
eval(['x','=',num2str(y)])

统计分析

第九章.ppt

第19章 回归分析.ppt

p值计算

%设置统计参数
alpha = 0.05;%显著水平 
tail = 'both'; 
vartype = 'equal'; 
disp('1.	语音干扰是否会显著影响被试的反应时和正确率')
[h,p,muci,stats] = ttest2(AverageResponseTime{2},AverageResponseTime{4},alpha,tail,vartype);
disp(['字符长度为6时:语音干扰与安静情况下,被试反应时的p值 p=', num2str(p)])

预测分析

%% 请对IQ&GPA.csv 中的数据进行如下分析
%clear
%=====读入数据
filename='IQ&GPA.csv';
IQData=csvread(filename, 1, 0);
%%=== 6.	请绘制全体学生IQ和GPA的散点图并计算相关系数
figure(4)
scatter(IQData(:,1),IQData(:,2),'*');
title('全体学生IQ和GPA的散点图')
 xlabel('IQ (z score)');ylabel('GPA');
IQCorr=corrcoef(IQData(:,1),IQData(:,2));
disp(['6.全体学生IQ和GPA的相关系数为:', num2str(IQCorr(1,2))])
%% 
disp(' ')
disp(' ')
%===7.	请回答:IQ能否预测学生的GPA。(可利用多种数据分析方法以及相关的图、表来辅证)
%此处参考[包寒吴霜-多层线性模型(HLM)及其自由度问题](https://zhuanlan.zhihu.com/p/50048784)
%
figure(5)
clf(5)
for school=1:3 %[1:3]
    oneIQ=[];
    oneGPA=[];
    oneIQ=IQData(IQData(:,3)==school,1);
    oneGPA=IQData(IQData(:,3)==school,2);
    %各学校散点图
    subplot(1,3,school)
    scatter(oneIQ,oneGPA,'*');
    titlename=['学校',num2str(school),' 学生IQ和GPA的散点图'];
    title(titlename)
    xlabel('IQ (z score)');ylabel('GPA');
    hold on
    %回归分析
    %排序
    [oneIQSort, id] = sort(oneIQ);
    oneGPASort=oneGPA(id);%列矩阵
    oneIQSort=oneIQSort;%列矩阵
    xdata = [ones(size(oneIQSort)), oneIQSort];
    %regress分析
    b1 = regress(oneGPASort, xdata); 
    yhat1 = xdata*b1;
    plot(oneIQSort, yhat1, 'b--','linewidth',1)
    %robustfit分析
    b2 = robustfit(oneIQSort,oneGPASort); 
    yhat2 = xdata*b2; 
    plot(oneIQSort, yhat2, 'linewidth', 1)
    legend('原始数据','regress回归直线','robustfit回归直线')

    
    %相关系数
    oneIQCorr=corrcoef(oneIQ,oneGPA);
    disp(['7.学校',num2str(school),'学生IQ和GPA的相关系数为:', num2str(oneIQCorr(1,2))]) 
end

other

采集数据,若是正态分布可以进行检验,

非正态分布,进行置换


本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!


上一篇 gcc 编译 ATOM

目录

访客数据