文档库 最新最全的文档下载
当前位置:文档库 › MATLAB学习笔记

MATLAB学习笔记

MATLAB学习笔记
MATLAB学习笔记

NO.1 MATLAB概述>>clear 命令用来清除前面用户定义的所有变量,对系统变量的重新定义也会被清除

>>real(a) 命令用来计算复数的实部

>>imag(a) 命令用来计算复数的虚部

>>abs(a) 命令用来计算复数的模>>angle(a)*180/pi 命令用来计算复数的相角

注:以上的a可以是单独的一个复数,也可以是数组

MATLAB中常用的控制命令>>clf清除图形窗

>>clc 清除命令窗口的显示内容(对变量的定义仍然存在)

>>type 显示指定M文件的内容>>clear 清除MATLAB工作空间中保存的变量

>>exit/quit 退出MATLAB程序

如何在MATLAB中创建自己的日

命令如下:

>>diary my_diary

>>%下面是计算代码

>>……

>>……

>>diary off

>>%至此以上计算内容写入my_diary文件

如果要继续写入日志到文件只需写入下面命令即可:

>>diary my_diary %下面写入的内容会与my_diary文件合并>>……

>>……

>>diary off

>>%至此以上计算内容添加到my_diary文件

注:若想在Command Window界面下打开自己的日志文件,只需写入下面命令即可:

>>open my_diary

MATLAB查看及操作内存变量>>who %查看变量

>>whos %查看变量所占内存>>clear a %清除变量a,其中a 为变量名

NO.2 MATLAB基础

知识

获取字符的ASCII码有以下方法: >>double(‘a’)

>>abs(‘a’)

将数字转换为ASCII码:

>>char(65)

查看变量属性:

>>class (a)

字符串与数值之间的相互转换:>>str2num(a)

>>num2str(a)

MATLAB中结构体演示: 例:

>> a.x1=1;

>> a.x2='this is yongli'; >> a.x3=[1,2,3];

>>a

a =

x1: 1

x2: 'this is yongli'

x3: [1 2 3]

>> class (a)

ans =

struct

下面的方法同样可以创建结构体:

>> a=struct('x1',1,'x2','this is yongli','x3',[1,2,3]);

以上两种方法等效

结构体常用的一些操作: >>isstruct(a)%用于判断a是否属于结构体,如果为真返回1,如果为假返回0

例:

>>isstruct (a)

ans =

1

>> isfield(a,{'x1','x2','x3',1})%用于判断某些变量名是否属于结构体a,如果为真返回1,如果为假返回0

例:

>> isfield(a,{'x1','x2','x3',1})

ans =

1 1 1 0 >> fieldnames(a)%返回结构体的成员变量名

例:

>> fieldnames(a)

ans =

'x1'

'x2'

'x3'

MATLAB中创建三维数组>>cat(dim,A1,A2,A3,A4……….)% dim为维度,A1,A2,A3,A4为每个维度的数组

例:

>> a=ones(2,2); %创建元素全为1的2*2数组

>> a

a =

1 1

1 1

>> b=cat(3,a,2*a,3*a);

>> b

b(:,:,1) =

1 1

1 1

b(:,:,2) =

2 2

2 2

b(:,:,3) =

3 3

3 3

>>repmat(A,dim1,dim2) % A表示数组,dim1,dim2表示dim1*dim2数组,整体表示以A为基本元素创建dim1*dim2数组

>>repmat(A,[dim1,dim2,dim3]) %表示以A为基本元素创建

dim1*dim2数组,有dim3页例:

>> a=[1,2,3;4,5,6;7,8,9];

>> b=repmat(a,2,3);

>> c=repmat(a,[1,2,3]);

>> a

a =

1 2 3

4 5 6

7 8 9

>> b

b =

1 2 3 1

2 3 1 2 3

4 5 6 4

7 8 9 7

8 9 7 8 9

1 2 3 1

2 3 1 2 3

4 5 6 4

5 6 4 5 6

7 8 9 7

8 9 7 8 9

>> c

c(:,:,1) =

1 2 3 1

2 3

4 5 6 4

5 6

7 8 9 7 8 9

c(:,:,2) =

1 2 3 1

2 3

4 5 6 4

7 8 9 7 8 9

c(:,:,3) =

1 2 3 1

2 3

4 5 6 4

5 6

7 8 9 7

8 9

>>reshape(A,dim1,dim2,dim3)%

将A拆分为dim1*dim2,有dim3页

例:

>> a=[1,2,3,4;5,6,7,8;9,10,11,12]; >> b=reshape(a,2,2,3);

c=reshape(a,2,3,2);

d=reshape(a,3,2,2);

>> a

a =

1 2 3 4

9 10 11 12 >> b

b(:,:,1) =

1 9

5 2

b(:,:,2) =

6 3

10 7

b(:,:,3) =

11 8

4 12

>> c

c(:,:,1) =

1 9 6

5 2 10

c(:,:,2) =

3 11 8

7 4 12

>> d

d(:,:,1) =

1 2

5 6

9 10

d(:,:,2) =

3 4

7 8

11 12

MATLAB创建低维标准数组>>a=zeros(dim1,dim2) %产生dim1*dim2全0数组

>>a=ones(dim1,dim2) %产生dim1*dim2全1数组

>>a=d1:d2:d3 %建立从d1-d3,步长为d2的行向量(等差数列) >>a=linspace(d1,d2,d3) %建立从d1-d2,一共d3个元素的行向量>>a=eye(dim) %产生对角为 1 dim*dim的矩阵

>>a=magic(dim)%产生行列以及对角之和均相等的din*dim矩阵>>randn(‘state’,0) %

>>a=randn(dim1,dim2)%产生dim1*dim2正态分布随机数>>a=gallery(5)%产生测试矩阵,参数只能是3或5

MATLAB创建高维标准数组>>a=randn(dim1,dim2,dim3)%创建dim1*dim2数组,共dim3页>>a=ones(dim1,dim2,dim3)%创建dim1*dim2全1数组,共dim3页

MATLAB访问矩阵中的元素>>a =

1 2 3

4 5 6

7 8 9

>>a(dim1,dim2) %按下标访问,dim1为行下标,dim2为列下标>>a(num) %按序号(索引)访问,MATLAB存储元素是按列来存储的,比如以上矩阵a存储方式为:1-4-7-2-5-8-3-6-9

例:

>>a(2)

ans = 4

>> a(4)

ans =2

>>[row,line]=find(a==value)%使用函数来访问a中值为value的元素,返回行号和列号

例:

>> [row,line]=find(a==8)

row = 3

line =2

>>num= find(a==value)%返回a中值为value的序号(索引)

例:

>> num=find(a==8)num =6

矩阵序号(索引)与下标的转换>>num=

sub2ind(size(array),row,line)%下标转换为序号

例:

>>num= sub2ind(size(a),2,3) num=8

>> [row,line]=ind2sub(size(array),nu m) %序号转换为下标

例:

>> [row,line]=ind2sub(size(a),8) row =2

line =3

MATLAB矩阵的重排

>>temp=reshape(array,dim1,dim2 ) %将array转换为dim1*dim2的矩阵

例:

>> temp=reshape(a,1,9)

temp =

1 4 7

2 5 8

3 6 9 >>temp=array(:) %将矩阵array转换为列向量

>>temp=array’ %矩阵转置

MATLAB矩阵的拆分

>>temp=array(dim,:) %获取矩阵array中第dim行所有元素

>>temp=array(:,dim)%获取矩阵

array中第dim列所有元素

>>temp=array(dim,1:end)%获取矩阵array中第dim行所有元素>>temp=array(1:end,dim) %获取矩阵array中第dim列所有元素>>temp=array(dim,dim1:dim2) %获取array中第dim行中,第dim1列到dim2列所有元素

>>temp=array(dim1:dim2,dim)%获取array中第dim列中,第dim1行到dim2行所有元素

>>temp=arrayz(dim1:dim2,dim3:d im4) %返回部分元素

例:

>> temp=a(1:2,1:2)

temp =

1 2

4 5

MATLAB删除矩阵的元素>>array(num)=[] %删除序号为num的元素

>>array(dim,:)=[]%删除第dim行的所有元素

>>array(:,dim) =[]%删除第dim列的所有元素

MATLAB压缩矩阵

>>temp=unique(array) %返回array中删除重复元素之后的矩阵

MATLAB特殊矩阵的建立>>eye(dim1,dim2) %生成

dim1*dim2单位矩阵,对角为1 >>eye(dim) %生成dim*dim单位矩阵,对角为1

>>rand(dim1,dim2) %0-1之间随机矩阵

>>rand(dim) %0-1之间随机矩阵>>randn(dim1,dim2) %随机矩阵,服从正态分布

>>randn(din)%随机矩阵,服从正态分布

>>num=a+(b-a)*rand %产生a-b 之间随机数

>>temp=a+(b-a)*rand(dim1,dim2)

%产生dim1*dim2,元素数值在a-b之间的随机矩阵

>>temp=a+(b-a)*rand(dim) %dim* dim随机矩阵

>>temp=avg*sqrt(var)*randn(dim 1,dim2) %产生均值为avg,方差为var的,dim1*dim2,服从正态分布的随机矩阵

>>avg=mean(array) %求均值函数>>var=std(array) %求方差函数>>magic(dim) %产生dim*dim魔方矩阵,不接受两个参数

>>hilb(dim) %产生dim*dim希尔伯特矩阵

>>array’ %求解矩阵的转置

>>inv(array) %求解矩阵的逆>>num=det(array) %计算矩阵的行列式

>>conj(array) %求解共轭矩阵MATLAB求解线性方程组>>a=[…….]%方程组左端端系数矩阵>>b=[…….] %方程组右端值矩阵>>c=inv(a)*b %求逆之后再乘(求逆效率较低)

>>c=a\b %使用左除运算符,直接左除,效率较高

MATLAB对矩阵的特殊操作>>jordan(array) %获取jordan标准型矩阵

>>eig(array) %获取矩阵的特征值>>[a,b]=eig(array)%获取矩阵的特征向量和特征值

>>norm(array)%获取矩阵的范数>>norm(array,1)%获取矩阵的1范数

>>norm(array,2)%获取矩阵的2范数

>>norm(array,inf)%获取矩阵的无穷范数

>>norm(array,'fro')%获取矩阵的f 范数

MATLAB程序控制结构

创建M文件:

>>edit

顺序结构选择结构循环结构

顺序结构

>> a=input('提示性语言') %接受一个输入赋值给a

>>disp('字符串') %显示字符串>>disp(变量名) %显示变量内容>>pause(value) %暂停程序value 秒

选择结构

If switch try

If语句语法:

>>If条件

>> 语句组

>>else

>> 语句组>>End

%测试if分支结构,注意每一个if 均有一个end与之对应

>>a=input('input a=');

if(a<10);

disp('a为一位数,输出a:');

disp(a);

else if(a>=10&&a<=99)

disp('a为两位数,不输出.');

else if(a>=100)

disp('a为三位数,输出a:');

disp(a);

end

end

>>end

%if语句可以用来设计分段函数

%{

MATLAB多行注释多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment,

或者快捷键Ctrl+R

取消注释: 选中要取消注释的语句, 编辑器菜单Text->Uncomment, 或者快捷键Ctrl+T

%}

%测试if分支结构

a=input('input a=');

if(a<10);

disp('a为一位数,输出a:');

disp(a);

else if(a>=10&&a<=99)

disp('a为两位数,不输出.');

else if(a>=100)

disp('a为三位数,输出a:');

disp(a);

end

end

end

%使用if语句实现分段函数x=input('input x=');

if(find(x)<=10)

y=cos(x);

else

y=log(x);

end

%利用分支结构实现大小写转换c=input('input a char:','s');

if(c>'A'&&c<'Z')%输入大写字母,转换为小写字母

c=c+32;

else if(c>'a'&&c<'z')%输入小写字母,转换为大写字母

c=c-32;

end

end

disp(char(c));

%switch语句,同C一样,case后

面跟常量表达式

%discount=0.0;

price=input('input price:'); switch(fix(price/100))

case{0,1}

discount=0.0;

case{2,3,4}

discount=0.03;

case{5,6,7,8,9}

discount=0.5;

otherwise

discount=0.1;

end

display(discount);

%try语句,可以很好的提高程序的容错性

% try

% 语句组

% catch

% 语句组% end

%for循环,循环变量我们一般用k,m,而不是i,i在MATLAB中是保留字符-虚数单位

%语法格式

%for 循环变量=表达式1:表达式2:表达式3

% 循环体

%end

sum=0;

for k=1:1:100;

sum=sum+k;

end

disp(sum);

%while循环

%语法格式

%while 循环条件

% 循环体

%end

k=100;

sum=0;

while(k>0)

sum=sum+k;

k=k-1;

end

disp(sum);

while(1)

a=input('input a char:','s');

if(isempty(abs(a)))

disp('输入为空,退出!');

break;

else

disp(a);

end

end

%MATLAB绘图

x=0:0.01:24;

t=6:0.01:24;

y3=6; y4=12;

y5=0;

y1=12-x;

y2=6+6*sin(t-6);

plot(x,y1,t,y2,x,y3,x,y4,x,y5);

grid on;

% MATLAB函数,文件名与函数名一般应相同

% 全局声明关键词:global

% 若在函数文件中声明,语句应写在function下面一句

% function sum=my_add(a,b,c,d,varargin)

% MY_ADD 完成若干数字相加% 函数文件

% 函数文件基本格式

% function[输出形参]=函数名([输入形参])

% [注释说明];

% 函数体;

% 函数参数可调标识变量,类似

于高级语言中的重载

% nargin 输入的参数个数

% nargout 输出的参数个数

% varargin 可选输入参数

% varargout 可选输出参数

% 最少两个参数,最多六个参数% minargs=2; maxargs=6;

% narginchk(minargs, maxargs); % switch(nargin)

% case 6

%

sum=a+b+c+d+varargin{1}+varargi n{2};

% case 5

%

sum=a+b+c+d+varargin{1};

% case 4

% sum=a+b+c+d;

% case 3

% sum=a+b+c;

% case 2

% sum=a+b; % case 1

% sum=1;

% otherwise

% error('Wrong!At least one argument.');

% end

%MATLAB高层二维绘图----plot 函数

%二维绘图辅助操作

% 标注:

% 图形名称

% 坐标轴名称

% 曲线标注

% 图例

% 坐标轴控制

% 图形保持(同一个坐标轴绘制多个图形)

% 窗口分割(同一窗口含有多个坐标轴)

%plot 函数基本用法

%plot(x,y);

%要求:x和y为相同长度的向量(其实是描点操作)

%一般用法

x=0:0.01:2*pi;

y=sin(x);

plot(x,y);

%利用矩阵绘制多个图形

x=0:0.01:2*pi;

y1=sin(x);

y2=cos(x);

y3=0.01*exp(x);

y4=x;

z=[y1;y2;y3;y4];

plot(x,z);

%x,y都是矩阵时,矩阵的维度应该相同

x1=0:0.01:2*pi;

x2=-pi:0.01:pi;

x=[x1;x2]';%注意转置

y1=sin(x1); y2=cos(x2);

y=[y1;y2]';%注意转置

plot(x,y);

%虚数的绘图

x=linspace(0,2*pi,200);%0-2*pi,20 0个点

y1=sin(x);

y2=cos(x);

y=y1+1i*y2;

plot(y);

grid on;

axis equal;%显示为圆,否则会显示为椭圆

%多个参数绘图

x1=linspace(0,2*pi,100);

x2=linspace(0,2*pi,200);

y1=sin(x1);

y2=cos(x2);

plot(x1,y1,x2,y2);

%MATLAB绘图颜色控制

% b-默认颜色

% r-红色

% k-黑色

% g-绿色

% y-黄色

% m-品红

x=linspace(0,2*pi,200);

y=sin(x);

plot(x,y,'m');

%MATLAB绘图线型控制

x=linspace(0,2*pi,200);

y=sin(x);

plot(x,y,'*');%用"*"绘制图形

plot(x,y,'.');%用"."绘制图形

plot(x,y,'p');%用五角星绘制图形plot(x,y,'-');%默认的用直线绘制图形

plot(x,y,'--');%用虚线(较大)绘制图形

plot(x,y,':');%用虚线(较小)来绘制图形

plot(x,y,'-.');%用点划线绘制图形plot(x,y,'.-');%直线加点来绘制图形

plot(x,y,'r--')%综合使用,红色+虚线绘制

%MATLAB图形标注

x=linspace(0,2*pi,200);

y1=sin(x);

y2=cos(x);

y=[y1;y2];

plot(x,y);

grid on;

xlabel('X');

ylabel('Y');

title('正弦函数');

text(3,0.8,'y=sin(x)');%在(4,0.4)处写入文本y=sin(x)

% text(4,0.4,'x-2');%显示x平方% text(4,0.2,'x_2');%显示x的下标text(6,0.6,'y=cos(x)');%在(4,0.4)

处写入文本y=sin(x) legend('sin(x)','cos(x)');%图例

%MATLAB坐标轴控制

% axis

% alim

% ylim

% axis equal

% axis quto

% axis off

% axis on

x=linspace(0,2*pi,200);

y=sin(x);

plot(x,y);

grid on;

xlim([0 10]);

ylim([-1 1]);

%MATLAB图形保持

x=linspace(0,2*pi,200);

y1=sin(x);

y2=cos(x); hold on;%图形保持

plot(x,y1,'r');

plot(x,y2,'b');

grid on;

legend('sin(x)','cos(x)');%图例

% hold off;

%MATLAB窗口分割subplot(a,b,c)

% subplot(a,b,c);%将窗口分割为a*b,c为序号

% 或者subplot(abc);%将窗口分割为a*b,c为序号

x=linspace(0,2*pi,200);

y1=sin(x);

y2=cos(x);

y3=exp(x);

y4=x;

subplot(2,2,1);

plot(x,y1);

grid on;

subplot(2,2,2);

plot(x,y2);

grid on;

subplot(223);

plot(x,y3);

grid on;

subplot(224);

plot(x,y4);

grid on;

%{

MATLAB多行注释

多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R

取消注释: 选中要取消注释的语句, 编辑器菜单Text->Uncomment, 或者快捷键Ctrl+T

%}

%%

%MATLAB归一化x=[1 2 3 4 5 6];

min_x=min(x);

max_x=max(x);

y=(x-min_x)/(max_x-min_x);

plot(y);

grid on;

%%

%测试if分支结构

a=input('input a=');

if(a<10);

disp('a为一位数,输出a:');

disp(a);

else if(a>=10&&a<=99)

disp('a为两位数,不输出.');

else if(a>=100)

disp('a为三位数,输出a:');

disp(a);

end

end

end

%%

%使用if语句实现分段函数

x=input('input x=');

if(find(x)<=10)

y=cos(x);

else

y=log(x);

end

plot(y);

%%

%利用分支结构实现大小写转换

c=input('input a char:','s');

if(c>'A'&&c<'Z')%输入大写字母,转换为小写字母

c=c+32;

else if(c>'a'&&c<'z')%输入小写字母,转换为大写字母

c=c-32;

end

end disp(char(c));

%%

%switch语句,同C一样,case后面跟常量表达式

%discount=0.0;

price=input('input price:'); switch(fix(price/100))

case{0,1}

discount=0.0;

case{2,3,4}

discount=0.03;

case{5,6,7,8,9}

discount=0.5;

otherwise

discount=0.1;

end

display(discount);

%%

%try语句,可以很好的提高程序的容错性

% try

% 语句组

% catch

% 语句组

% end

%for循环,循环变量我们一般用k,m,而不是i,i在MATLAB中是保留字符-虚数单位

%语法格式

%for 循环变量=表达式1:表达式2:表达式3

% 循环体

%end

sum=0;

for k=1:1:100;

sum=sum+k;

end

disp(sum);

%% %while循环

%语法格式

%while 循环条件

% 循环体

%end

k=100;

sum=0;

while(k>0)

sum=sum+k;

k=k-1;

end

disp(sum);

while(1)

a=input('input a char:','s');

if(isempty(abs(a)))

disp('输入为空,退出!');

break;

else

disp(a);

end

end

相关文档