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