%1. matlab数据类型转换,例:uint8函数将数值数据转换成无符号8位整数,int8将数值数据转换为带符号8位整数
x=int8(129); %因为带符号8位整型数的最大值为127,129超过范围
y=uint8(129); %因为无符号8位整型数的最大值为255
%2.浮点:单精度(single),双精度(double,默认)
a=class(4);
b=class(single(4));
%3.复型:包括实部和虚部,实部和虚部默认为双精度型,虚数单位用i或j来表示
%real函数:求复数的实部;imag函数:求复数的虚部
c=6+5i;
d=6+5j;
real(d);
%format命令可以用来设置数值命令的输出格式
%format命令的格式:format 格式符
%
format long;
50/3;
format; %回到默认输出格式short
50/3;
%常用数学函数
%函数调用格式:函数名(自变量的值)
%函数的自变量规定为矩阵变量,也可以是标量
%函数在运算时是将函数逐项作用于矩阵的每个元素上,所以运算的结果就是一个与自变量同型的矩阵
A=[4,1;3,6];
B=exp(A); %exp(x)函数为求e的x次方
%三角函数有以弧度为单位的函数和以角度为单位的函数
%以角度为单位的函数就在函数名后加d,以示区别
sin(pi/2);
sind(90);
cos(pi);
cosd(180);
%abs函数可以求实数的绝对值,复数的模,字符串的ASCII码值
abs(-4);
abs(3+4i);
abs('a');
%用于取整的函数:fix,floor,ceil,round
%round函数按照四舍五入的规则取整;ceil向上取整;floor向下取整;fix舍去小数取整
round(4.7);
fix(-3.2);
floor(3.6);
ceil(-3.8);
%分别求一个三位正整数的个位数字,十位数字和百位数字
m=345;
m1=rem(m,10); % m%10
m2=rem(fix(m/10),10);
m3=fix(m/100);
%求[1,100]区间的所有素数
%isprime(n)函数:当n是素数是返回1,否则返回0
xx=1:100;
k=isprime(xx); %生成k向量,向量中的元素为1或0
k1=find(k); %k1向量为k向量中非0元素的序号
p=xx(k1);
%计算表达式(5+cos47)/(1+|d-f|)的值,并将结果赋值给zz,其中d,f为如下值
d=sqrt(7)-2i;
f=exp(pi/2);
g=(5+cosd(47))/(1+abs(d-f));
%预定义变量:pi代表圆周率,NaN代表非数(绘图时要裁掉一部分,则将要裁掉的部分设为NaN)
%who ,whos可以查当前已有变量
%内存变量文件:用于保存matlab工作区变量的文件,其拓展名为.mat
%save命令:创建内存文件;load命令:装入内存变量文件
save mydata a x; %将a,x装入mydata.mat文件中
load mydata;
%matlab矩阵的表示和使用
B=[1,2,3;4,5,6;7,8,9];
C=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
D=[B,C;C,B];
E=[1,2,3;4,5,6];
F=[6,7,8;9,10,11];
G=E+F*i;
%冒号表达式 格式:e1:e2:e3 e1为初始值,e2为步长,e3为终止值 若省略e2,则表示步长为1
t=0:1:5;
%linspace函数可产生行向量,调用格式:linspace(a,b,n) a是第一个元素,b是最后一个元素,当n省略时,自动产生100个元素
aa=linspace(0,pi,6);
%结构矩阵和单元矩阵
%结构矩阵成员赋值格式:结构矩阵元素.成员们=表达式
u(1).x1=10;u(1).x2='liu';u(1).x3=[11,21;34,78];
u(2).x1=12;u(2).x2='wang';u(2).x3=[34,19;10,27];
u(3).x1=14;u(3).x2='cai';u(3).x3=[13,17;90,19];
u(2);
%建立单元矩阵和一般矩阵相似,只是单元矩阵元素用大括号括起来
uu={10,'liu',[11,21;34,10],12,'wang',[34,19]};
%矩阵元素的引用方式:
%1.通过下标来引用A(3,2)表示A矩阵第三行第二列的元素
AA=[1,2,3;4,5,6];
AA(4,5)=10;
%2.通过序号来引用(矩阵存储顺序为按列存储) m*n的矩阵A,矩阵元素A(i.j)的序号为(j-1)*m+i
BB=[1,2,3;4,5,6];
BB(2);
BB(3);
%矩阵元素的序号与下标可以利用sub2ind和ind2sub函数实现相互转换
CC=[1:3;4:6];
% 格式: sub2ind(S,I,J)
%行下标为1,列下标为1的元素在矩阵中的序号为1;行下标为2,列下标为1的元素在矩阵中的序号为2;
%行下标为2,列下标为3的元素在矩阵中的序号为6; 2 2 4
DD=sub2ind(size(CC),[1,2;2,2],[1,1;3,2]);
%格式:[I,J]=ind2sub(S,D)
%要求一个3行3列的矩阵的第1个,第3个,第5个元素的下标
[I,J]=ind2sub([3,3],[1,3,5]);
%利用冒号表达式获得子矩阵
%A(i,:) 第i行的全部元素
%A(:,j) 第j列的全部元素
%A(i:i+m,k:k+m)
DD=[1:5;6:10;11:15];
DD(1:2,:);
DD(2:3,1:2:5);
%end运算符:表示某一维的末尾元素下标
EE=[1:5;6:10;11:15;16:20];
EE(end,:);
%引用第一行和第四行的从第三列到最后一列的元素
EE([1,4],3:end);
%利用空矩阵删除矩阵元素,X=[]
FF=[1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8];
%删除第二列和第四列元素
FF(:,[2,4])=[];
%改变矩阵的形状
%reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵,不改变存储顺序即序号
GG=[1,2,3,4;5,6,7,8];
reshape(GG,4,2);
%A(:):将矩阵A的每一列元素堆叠起来,成为一个列向量
GG(:);
%算术运算
%基本算数运算:+(加),-(减),*(乘),/(右除),\(左除),^(乘方),是在矩阵意义下进行的,单个数是矩阵的特例
%加减运算需两矩阵同型,乘法运算A乘B要求矩阵A的列数等于矩阵B的行数
%乘方运算A^x,要求A为方阵,x为标量
%点运算:.* ; ./ ; .\ ; .^
%两个矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型
%关系运算符:<,<=,>,>=,==,~=(不等于) 关系成立为1,不成立为0
%当参与比较的量是两个同型矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终得到一个由0和1组成的同型矩阵
%当参与比较的一个是标量,一个时矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较
%建立一个三阶方阵,判断方阵的元素是否为偶数
HH=[24,35,13;22,63,23;39,47,80];
II=rem(HH,2)==0;
%逻辑运算符:&(与),|(或),~(非)
%优先级:在算术运算,关系运算和逻辑运算中,算数运算优先级最高,逻辑运算最低,但逻辑非运算是单目运算,他的优先级比双目运算要高
~9==1;
%水仙花数是指各位数字的立方之和等于改数本身的三位正整数,求所有水仙花数
mk=100:999;
mk1=rem(mk,10);
mk2=rem(fix(mk/10),10);
mk3=fix(mk/100);
%find找序号
mmk=find(mk==mk1.*mk1.*mk1+mk2.*mk2.*mk2+mk3.*mk3.*mk3);
mkk=mk(mmk);
%字符串处理,字符串是用单引号括起来的字符序列
str='Central South University';
str(1:3);
%若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示
sss='I''m a teacher.';
%建立多行字符串,形成字符矩阵
ch=['abcdef';'123456'];
ch(2,3);
%建立一个字符串向量,然后对该向量做如下处理:
%1.取第1-5个字符组成的子字符串
%2.将字符串倒过来重新排列
%3.将字符串中的小写字母变成相应的大写字母,其余字符不变
%4.统计字符串中小写字母的个数
ch='ABc123d4e56Fg9';
subch=ch(1:5);
revch=ch(end:-1:1);
k=find(ch>='a'&ch<='z');
ch(k)=ch(k)-('a'-'A');
length(k);
%字符串的执行:格式:eval(s)
tp=pi;
tm='[tp,sin(tp),cos(tp)]';
ty=eval(tm);
%字符串与数值之间的转换
%abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵
%char函数可以把ASCII码矩阵转换为字符串矩阵
s1='MATLAB';
a=abs(s1);
char(a+32);
%字符串的比较:利用关系运算符或字符串比较函数
%比较规则:两个字符串里的每个字符依次按ASCII值大小逐个比较,比较的结果是一个数值向量,向量中的元素为1或0
'www0'>='W123';
%字符串比较函数用于判断字符串是否相等,有四种比较方式:1.strcmp(s1,s2) 2.strncmp(s1,s2,n) 比较两个字符串前n个是否相等
%3.strcmpi(s1,s2) 在忽略字母大小写前提下,比较字符串s1和s2是否相等
%4.strncmpi(sq,s2,n) 在忽略字符串大小写前提下,比较字符串前n个字符是否相等
strcmp('www0','w123');
strncmpi('Www0','ww123',2);
%字符串的查找与替换
%1.findstr(s1,s2):返回短字符串在长字符串中的开始位置
%2.strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3
pp=findstr('This is a test!','is');
pp=findstr('uti','beautiful');
result=strrep('This is a test','test','class');
%lower(c)将大写字母转换为小写字母 upper(c)将小写字母转换为大写字母
%matlab矩阵处理
%通用的特殊矩阵——1.zeros函数:产生全0矩阵 2.ones函数:产生全1矩阵
%3.eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵
%4.rand函数:产生(0,1)区间均匀分布的随机矩阵
%5.randn函数:产生均值为0,方差为1的标准正态分布随机矩阵
%zeros函数调用格式:1.zeros(m);产生m*m零矩阵 2.zeros(m,n):产生m*n零矩阵
%3.zeros(size(A)):产生与矩阵A同样大小的零矩阵
AT=zeros(2,3);
zeros(size(reshape(AT,3,2)));
%例1:首先产生5阶两位随机整数矩阵AR,再产生均值为0.6,方差为0,1的5阶正态分布随机矩阵BR,最后验证(AR+BR)*I=I*AR+BR*I(I为单位矩阵)
AR=fix(10+(99-10+1)*rand(5));
BR=0.6+sqrt(0.1)*randn(5);
I=eye(5);
(AR+BR)*I==I*AR+BR*I;
%魔方矩阵:n阶魔方矩阵由1,2,3,...,n^2共n^2个整数组成,且每行,每列以及主,副对角线上各n个元素之和都相等
%n阶魔方阵每行每列元素的和为(1+2+3+...+n^2)/n=(n+n^3)/2
%MATLAB函数magic(n)产生一个特定的魔方阵
%例:产生8阶魔方阵,求其每行每列元素的和
MM=magic(8);
sum(MM(1,:));
%范德蒙矩阵 vander(V)
AAA=vander(1:5);
%希尔伯特矩阵 hilb(n)
%format rat %以有理数形式输出
HH=hilb(4);
%对角矩阵:只有对角线上有非零元素的矩阵 数量矩阵:对角线上的元素相等的对角矩阵
%单位矩阵:对角线上的元素都为1的对角矩阵
%提取矩阵的对角线元素
%diag(A):提取矩阵A主对角线元素,产生一个列向量
%diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量
%构造对角矩阵
%diag(V):以向量V为主对角线元素,产生对角矩阵
%diag(V,k):以向量V为第k条对角线元素,产生对角矩阵
%例:先建立5*5矩阵AFF,然后将AFF的第一行元素乘以1,第二行乘以2,...,第五行乘以5
AFF=[1:5;6:10;11:15;16:20;21:25];
ADD=diag(1:5);
ADD*AFF;
%上三角阵:矩阵的对角线以下的元素全为0的矩阵 下三角阵:对角线以上的元素全为0的矩阵
%triu(A):提取矩阵A的主对角线及以上的元素 triu(A,k):提取矩阵A的第k条对角线及以上的元素
triu(ones(4),-1);
triu(ones(4),1);
%提取矩阵A的下三角矩阵的函数时tril,其用法与triu函数完全相同
%矩阵的转置 转置运算符是小数点后面接单引号(.')
%共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共轭
A=[1:5;6:10;11:15;16:20];
A.';
A;
%矩阵的旋转:rot90(A,k):将矩阵A逆时针方向旋转90的k倍,当k为1时可省略
B=[1,3,2;-3,2,1;4,1,2];
rot90(B);
rot90(B,2);
%矩阵的翻转 fliplr(A):对矩阵A实施左右翻转 flipud(A):对矩阵A实施上下翻转
%矩阵的求逆:对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=I(I为单位矩阵),则称B为A的逆矩阵,当百,A也是B的逆矩阵
%inv(A):求方阵A的逆矩阵
%例:用求逆矩阵的方法解线性方程组 (1)x+2y+3z=5 (2)x+4y+9z=-2 (3)x+8y+27z=6
% Ax=b => A.'Ax=A.'b =>x=A.'b
A=[1,2,3;1,4,9;1,8,27];
b=[5;-2;6];
x=inv(A)*b;
y=(A^-1)*b;
%方阵的行列式:把方阵看作行列式,并对其按行列式的规则求值,这个值就称为方阵所对应的行列式的值
%det(A):求方阵A所对应的行列式的值
%验证 det(P^-1)=1/det(P)
%format rat %以有理数形式输出
P=[1,3,2;-3,2,1;4,1,2];
det(P^-1);
det(inv(P));
1/det(P);
%rank(A):求矩阵A的秩
for n=3:20
r(n)=rank(magic(n)); %r(1)=r(2)=0
end
bar(r); %用r绘制出直方图
grid on; %加上网格
axis([2,21,0,20]); %axis函数定义图中横坐标和纵坐标的定义域的
%矩阵的迹:矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和
%trace(A):求矩阵A的迹
P=[1,3,2;-3,2,1;4,1,2];
trace(P);
sum(diag(P));
%向量和矩阵的范数:用来度量矩阵或向量在某种意义下的长度
%向量的三种范数
%向量一范数:向量元素的绝对值之和 ; 向量二范数:向量元素平方和的平方根 ; 向量无穷大范数:所有向量元素绝对值中的最大值
% norm(V)或norm(V,2):计算向量V的二范式 norm(V,1):计算向量V的一范数 norm(V,inf):计算向量V的无穷大范数
%矩阵的条件数
%矩阵的特征值与特征向量
%E=eig(A):求矩阵A的全部特征值,构成向量E
%[X,D]=eig(A):求矩阵A的全部特征值,构成对角矩阵D,并产生矩阵X,X各列是相应的特征向量
format rat
A=[1,1,0;1,0,5;1,10,2];
E=eig(A);
[X,D]=eig(A);
AX=A*X(:,1);
DX=D(1)*X(:,1);
AX==DX; % ???
[564/974;1265/293;1765/252]==[564/974;1265/293;1765/252];
R=[-1,2,0;2,-4,1;1,1,-6];
S=[1,2;2,3];
A=[R,zeros(3,2);zeros(2,3),S];
[X1,d1]=eig(R);
[X2,d2]=eig(S);
[X3,d3]=eig(A);
%稀疏矩阵:0元素的个数远远多于非0元素的个数的矩阵
%矩阵的存储方式:完全存储方式(按列存储)和稀疏存储方式(只存储矩阵的非零元素的值及其位置,即行号的列号)
%A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A
%S=full(A):将矩阵A转化为完全存储方式的矩阵S
A=sparse(eye(5));
B=full(A);
%whos A B
%直接建立稀疏存储矩阵 sparse函数的其他调用格式:
%sparse(m,n):生成一个m*n的所有元素都是0的稀疏矩阵
%sparse(u,v,S):其中u,v,S是三个等长的向量,S是要建立的稀疏存储矩阵的非零元素,u(i),v(i)分别是S(i)的行和列下标
A=sparse([1,2,2],[2,1,4],[4,5,-7]);
B=full(A);
%使用spconvert函数直接建立稀疏存储矩阵,其调用格式为:B=spconvert(A)
%A为一个m*3或m*4的矩阵,其每行表示一个非零元素,m是非零元素的个数
%例
A=[2,2,1;2,1,-1;2,4,3];
B=spconvert(A);
%带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵
%单位矩阵的系数存储:speye(m,n)返回一个m*n的稀疏存储单位矩阵
speye(3);
%数据的输入 A=input(提示信息,选项);
%A=input('请输入变量A的值:');
%数据的输出 disp(输出项);
s='Hello,world';
%disp(s)
%程序的暂停 pause(延迟秒数) 若要强行终止程序的运行可使用Ctrl+C命令
%求线段AB的长 ?注:以复数形式输入
%A=input('A='); %x1+y1i
%B=input('B='); %x2+y2i
%s=abs(A-B);
%单分支if语句 if 条件\n\t语句组\nend
%if语句中的条件:如果条件为标量,非零成立;如果条件为矩阵,矩阵为非空且不含零元素成立;
%双分支if语句:if条件\n\t语句组1\nelse\n\t语句组2\nend
%例:输入一个整数,若为奇数则输出其平方根,否则输出其立方根
%x=input('请您输入一个整数:');
% if rem(x,2)==1
% y=sqrt(x);
% else
% y=power(x,1/3); % x^(1/3) <=> power(x,1/3)
% end
%多分枝if语句(程序只执行一个分支) 语句格式: if 条件1\n\t语句组2\nelseif 条件2\n\t语句组2...else\n\t语句组n\nend
%lower(c)将大写字母转换为小写字母 upper(c)将小写字母转换为大写字母
%switch语句的格式 switch 表达式\n\tcase 结果表1\n\t语句组1\ncase 结果表2\n\t语句组2...otherwise 语句组n\nend
%整个过程只执行一个语句组
%switch表达式应该是一个其值可以列举的表达式;当取值有多个时,用单元数据表示(大括号括起来);
% y=input('y=?');
% switch fix(y)
% case 2
% disp(111);
% case 2
% disp(222);
% case {3,4,5}
% disp(333);
% otherwise
% disp(444);
% end
%循环结构
%for循环格式:for 循环变量=表达式1:表达式2:表达式3\n\t循环体语句\nend (表达式1为初值,表达式2为步长,表达式3为终值)
%当步长为1时,表达式2可以省略
for k=[1,3,2,5]
k;
end
%当向量为空时,循环体一次也不执行
for k=1:-2:10
k;
end
%while语句 格式:while 条件\n\t循环体语句\nend
%例:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和
% a=input('please enter:');
% i=0;
% sum=0;
% while a~=0
% i=i+1;
% sum=sum+a;
% a=input('please enter again:');
% end
% disp(sum/i);
%break:终止循环 continue:结束本次循环
% for n=100:200
% if rem(n,21)==0
% n
% break
% end
% end
%用筛选法求某自然数范围内的全部素数
% m=input('m=');
% p=1:m;
% p(1)=0;
% for i=2:sqrt(m)
% for j=2*i:i:m
% p(j)=0;
% end
% end
% n=find(p~=0)
% p(n)
%函数:fcircle.m
%匿名函数基本格式:函数句柄变量=@(匿名函数输入参数)匿名函数表达式 【利用函数句柄可以间接调用函数】
f=@(x,y)x^2+y^2;
f(3,4);
%还可以给已存在的函数定义函数句柄 格式:函数句柄变量=@函数名 【这些函数包括内部函数还有自定义文件】
%例:取sin的函数句柄,并将它赋值给变量h
% h=@sin;
% h(pi/2)
% c=@fcircle;
% [s,p]=c(3)
%函数的递归调用:1.直接递归 2.间接递归(f1函数调用f2,f2调用了f1)
%利用函数的递归调用求n! fact.m
% n=input('please input n=');
% s=fact(n);
% disp(s);
%函数参数的可调性:函数传入的参数个数是可变的
%nargin:记录调用函数时输入实参的个数 nargout:记录调用函数时输出实参的个数
%例子:var.m
fout=var(2);
fout=var(2,3,2);
%局部变量是指在程序中只在特定过程或函数中可以访问的变量
%全局变量是在整个matlab工作空间都有效的变量,所有的函数都可以对它进行存取和修改。我们前面所定义的都是局部变量
%全局变量定义格式:global 变量名
%函数L:wad.m
global ALPHA BETA
ALPHA=1;
BETA=2;
s=wad(1,2)
%绘制图形
%二维曲线:plot函数,fplot函数
%plot函数基本用法:plot(x,y) 其中,x和y分别用于存储x坐标和y坐标数据,通常,x和y为长度相等的向量
%例:绘制一条折线
x=[2.5,3.5,4,5];
y=[1.5,2.0,1,1.5];
%plot(x,y);
%最简单的plot函数调用格式:plot(x) 这种情况下,当x是实向量时,则以该向量元素的下标为横坐标,元素的值为纵坐标绘制一条曲线
%当plot函数的参数x是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线
cx=complex(x,y); %cx=x+y*i <=> cx=complex(x,y);
%plot(x)
%plot(cx)
%plot(x,y)函数参数的变化形式
%1.当x是向量,y是矩阵时:如果矩阵y的列数等于x的长度,则以向量x为横坐标,以y的每个行向量为纵坐标绘制曲线,曲线的条数等于y的行数
%2.如果矩阵y的行数等于x的长度,则以向量x为横坐标,以y的每个列向量为纵坐标绘制曲线,曲线的条数等于y的列数
%例:绘制sinx ,sin(2x),sin(x/2)的函数曲线
x=linspace(0,2*pi,100); %x为有100个元素的行向量
%用法:linspace(x1,x2,N)
%功能:linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。其中x1、x2、N分别为起始值、中止值、元素个数。
%若缺省N,默认点数为100。在matlab的命令窗口下输入help linspace或者doc linspace可以获得该函数的帮助信息。
%x=0:(2*pi/100):2*pi;
y=[sin(x);sin(2*x);sin(0.5*x)];
%plot(x,y)
%3.当x,y是同型矩阵时,以x,y对应列元素为横,纵坐标分别绘制曲线,曲线条数等于矩阵的列数
% t=0:0.01:2*pi;
% t1=t';
% x=[t1,t1,t1];
% y=[sin(t1),sin(2*t1),sin(0.5*t1)];
%plot(x,y);
%(4)含多个输入参数的plot函数:plot(x1,y1,x2,y2,...,xn,yn) 其中,每一向量对构成一组数据点的横,纵坐标,绘制一条曲线
t1=linspace(0,2*pi,10);
t2=linspace(0,2*pi,20);
t3=linspace(0,2*pi,100);
%plot(t1,sin(t1),t2,sin(t2)+1,t3,sin(t3)+2);
%(5)含选项的plot函数:plot(x,y,选项) 选项用于指定曲线的线性,颜色和数据点标记
%线性:‘-’表实线;‘:’表虚线;'-.'表点画线;‘--’表双画线;默认实线
%颜色:‘r'红色;'g'绿色;'b'蓝色;'w'白色;'k'黑色
%数据点标记:'*'表星号;'o'表圆圈;'s'表方块;'p'表五角星;'^'表朝上三角符号;默认无数据点标记符号
x=(0:pi/50:2*pi)';
y1=2*exp(-0.5*x)*[-1,1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=0:0.5:6;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
%plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');
%fplot函数
%1.fplot函数基本用法 fplot(f,lims,选项) 根据参数函数特性自适应的设置间隔,当函数值变化缓慢时,设置的采样间隔大,反之则小
%fplot(f,lims,选项)
%f代表一个函数,通常采用函数句柄的形式;lims为x轴的取值范围,用二元向量[xmin,xmax]描述,默认值为[-5,5];选项定义与plot函数相同
%例:采用fplot函数绘制函数sin(1/x)的图形
%fplot(@(x)sin(1./x),[0,0.2],'b');
%2.双输入函数参数的用法:fplot(funx,funy,tlims,选项)
%其中,funx,funy代表函数,通常采用函数句柄的形式。tlims为参数函数funx和funy的自变量的取值范围,用二元向量[tmin,tmax]描述
%例:根据参数方程绘制参数方程,绘制螺旋曲线 x=t*sint y=t*cost
%fplot(@(t)t.*sin(t),@(t)t.*cos(t),[0,10*pi],'r')
%fplot(@(t)2*(2*cos(t)-cos(2*t)),@(t)2*(2*sin(t)-sin(2*t)),[0,2*pi],'r')
%绘制图形的辅助操作
%图形标注:title(图形标题),xlabel(x轴说明),ylabel(y轴说明),text(x,y,图形说明),legend(图例1,图例2,...)
%title函数基本用法:1.title(图形标题)
%例:绘制[-2pi,2pi]区间的正弦曲线并给图形添加标题
x=-2*pi:0.05:2*pi;
y=sin(x);
%plot(x,y);
%title('y=sin(x)');
%title({'matlab','y=sin(x)'}) %标题有两行
%title函数:2.在标题中使用LaTeX格式控制符 LaTeX部分要用大括号括起来 _:下标 ^:上标
%title('y=cos{\omega}t+{\beta}')
%title('y=e^{axt}')
%title('x_{1}{\geq}x_{2}')
%title函数:含属性设置的title函数 title(图形标题,属性名,属性值)
%Color属性:用于设置图形标题文本的颜色 其取值与plot函数相等 默认黑色
%FontSize属性:用于设置标题文字的字号 默认字号11
%title('y=cos{\omega}t+{\beta}','Color','r','FontSize',24);
%xlabel函数和ylabel函数调用方法:xlabel(x轴说明) ylabel(y轴说明) 与title函数一样
%xlabel('-2\pi \leq x \leq 2\pi');
%text函数和gtext函数 text(x,y,说明) gtext(说明)
%text(-2*pi,0,'-2{\pi}')
%text(3,sin(3),'\leftarrow sin(x)','Color','r')
%gtext函数没有坐标参数,执行命令时光标跟随鼠标移动,单击鼠标即可放置文本
%gtext('sinx')
%legend函数:legend(图例1,图例2,...) 图例定义方法与title函数一样
% x=linspace(0,2*pi);
% plot(x,[sin(x);sin(2*x);sin(3*x)]);
% legend('sin(x)','sin(2x)','sin(3x)')
%坐标控制:axis函数 axis([xmin,xmax,ymin,ymax,zmin,zmax])
%六个参数分别为三个坐标轴的最小值和最大值,绘制二维图形时只给出前四个值
%axis的其他用法:axis equal:纵,横坐标采用等长刻度 axis square:产生正方形坐标系(默认矩形)
%axis auto:使用坐标轴的默认设置 axis off:不显示坐标轴 axis on:显示坐标轴
% x=[0,1,1,0,0];
% y=[0,0,1,1,0];
% plot(x,y);
% axis([-0.1,1.1,-0.1,1.1]);
%给坐标系加网格:grid on控制显示网格线 grid off控制不显示网格线 grid在两种状态进行切换 默认不显示
%给坐标系加边框:box on box off box 默认有边框
% grid on;
% box off;
% 例:绘制sinx,sin(2x),sin(x/2)的函数曲线并添加图形标注
% x=linspace(0,2*pi,100);
% y=[sin(x);sin(2*x);sin(x/2)];
% plot(x,y);
% axis([0,7,-1.2,1.2]);
% title('不同频率正弦函数曲线');
% xlabel('Variable X');
% ylabel('Variable Y');
% text(2.5,sin(2.5),'sin(x)');
% text(1.5,sin(1.5*2),'sin(2x)');
% text(5.5,sin(0.5*5.5),'sin(x/2)');
% legend('sin(x)','sin(2x)','sin(x/2)');
% grid on
%图形保持 hold on控制保持原有图形 hold off控制刷新图形窗口 hold控制在两种状态进行切换
%例:用图形保持功能绘制两个同心圆
% t=linspace(0,2*pi,100);
% x=sin(t);
% y=cos(t);
% plot(x,y,'b');
% hold on;
% plot(2*x,2*y,'r--');
% grid on;
% axis([-2.2,2.2,-2.2,2.2]);
% axis equal
%图形窗口的分割
%子图:同一图形窗口中的不同坐标系下的图形称为子图
%subplot函数:subplot(m,n,p) 其中,m和n指定将图形窗口分成m*n个绘图区,p指定当前活动区,区号按行优先编号
% subplot(2,2,1);
% x=linspace(0,2*pi,60);
% y=sin(x);
% plot(x,y);
% title('sin(x)');
% axis([0,2*pi,-1,1]);
% subplot(2,2,4);
% plot(x,cos(x));
% title('cos(x)')
% axis([0,2*pi,-1,1]);
% x=linspace(0,2*pi,60);
% subplot(2,2,1);
% plot(x,sin(x)-1);
% title('sin(x)-1');
% axis([0,2*pi,-2,0]);
% subplot(2,1,2);
% plot(x,cos(x)+1);
% title('cos(x)+1');
% axis([0,2*pi,0,2]);
% subplot(4,4,3);
% plot(x,tan(x));
% title('tan(x)');
% axis([0,2*pi,-40,40]);
% subplot(4,4,8);
% plot(x,cot(x));
% title('cot(x)');
% axis([0,2*pi,-35,35]);
%其他形式的二维曲线:其他坐标系下的二维曲线图,统计图,矢量图形
%对数坐标图 semilogx(x1,y1,选项1,x2,y2,选项2,...) semilogy(x1,y1,选项1,x2,y2,选项2,...) loglog(x1,y1,选项1,x2,y2,选项2,...)
%前两个是半对数,最后一个是全对数
%例:绘制1/x的直角坐标图和三种对数坐标图
% x=0:0.1:10;
% y=1./x;
% subplot(2,2,1);
% plot(x,y);
% title('plot(x,y)');
% grid on
% subplot(2,2,2);
% semilogx(x,y);
% title('semilogx(x,y)');
% grid on
% subplot(2,2,3);
% semilogy(x,y);
% title('semilogy(x,y)');
% grid on
% subplot(2,2,4);
% loglog(x,y);
% title('loglog(x,y)');
% grid on
%极坐标图:polar(theta,rho,选项) 其中,theta为极角,rho为极径,选项的内容与plot函数相同
%例:按极坐标方程ρ=1-sint绘制心形曲线
% t=0:pi/100:2*pi;
% r=1-sin(t);
% subplot(1,2,1);
% polar(t,r);
% subplot(1,2,2);
% t1=t-pi/2; %逆时针旋转90度
% r1=1-sin(t1);
% polar(t,r1);
%统计图:条形图,直方图,饼图,散点图
%1.条形图:bar函数绘制二维垂直条形图 barh函数水平条形图 两种函数调用格式相同
%bar(y,style):若输入参数y为向量,则分别以每个元素的值作为每一个矩形条的高度,以对应元素的下标作为横坐标。
%若y为矩阵,则以y的每一行元素组成一组用矩阵的行号作为横坐标分组绘制矩形条
%选项style用于指定分组排列模式 grouped:簇状分组 stacked:堆积分组 默认采用簇状分组
% y=[1,2,3,4,5;1,2,1,2,1;5,4,3,2,1];
% subplot(1,2,1);
% bar(y,'grouped');
% title('Group');
% subplot(1,2,2);
% bar(y,'stacked');
% title('Stack')
%bar(x,y,style) 其中,x存储横坐标,y存储数据 x是一个向量,y是矩阵,y的行数要与x的长度相同
%例:画某公司2015-2017年一月份各电类商品的销售数据
% x=[2015,2016,2017]; %存储年份
% y=[68,80,115,98,102;75,88,102,99,110;81,86,125,105,115];
% bar(x,y);
% title('Group');
%直方图:hist函数用于绘制直角坐标系下的直方图 rose函数用于绘制极坐标系下的直方图
%hist(y):通常参数y是向量,绘图时将y中的最小值和最大值之间的数值区间等分,并统计落在每个区间的元素的个数,然后以元素个数为高度绘制条形图
%hist(y,x):x用于指定区间的划分方式,若x是标量,则统计区间均分成x个小区间,若x是向量,则向量x中的每一个数指定分组的中心值,元素的个数为数据分组数,x缺省时,默认按10个等分区间进行统计
%绘制服从高斯分布的直方图
% y=randn(500,1); %是一种产生标准正态分布的随机数或矩阵的函数,Y = randn(m,n) 或 Y = randn([m n]),返回一个m*n的随机项矩阵。
% subplot(2,1,1);
% hist(y);
% title('高斯分布直方图');
% subplot(2,1,2);
% x=-3:0.2:3;
% hist(y,x);
% title('指定区间中心点的直方图');
%极坐标系下的直方图:rose函数:rose(theta,x)
%其中,参数theta用于确定每一区间与原点的角度,选项x用于指定区间的划分方式
%若x是标量,则在0-2pi区间内均匀划分成x个扇形区域,若x缺省时,则默认按20个等分区间进行统计
%例:绘制高斯分布数据在极坐标下的直方图
% y=randn(500,1);
% theta=y*pi; %将y转换为弧度制赋给theta
% rose(theta);
% title('在极坐标下的直方图');
%面积类统计图形:1.扇形统计图(又称饼图) pie函数 2.面积图 area函数(area函数用法与plot函数相同)
%pie函数:pie(x,explode) 其中,参数x存储待统计数据,选项explode控制图块的显示模式
%通常x为向量,绘图时x的每个元素对应一个扇形,每个扇形的覆盖角度反应对应x元素在整体所占的比重,与参数explode的非零值对应的部分将从饼图中心分离出来,explode是与x同等大小的向量,省略exlpode时,饼图是一个整体
%例:某次考试优秀、良好、中等、及格、不及格的人数分别为:5、17、23、9、4,试用扇形统计图作成绩统计分析,并将不及格人数从饼图中分离出来
% score=[5,17,23,9,4];
% ex=[0,0,0,0,1];
% pie(score,ex);
% %location用于指定图例位置,eastoutside表示图例放在绘图区域右边的外侧,如果不指定图例位置,图例默认放在绘图区域内,会遮挡一部分图形
% legend('优秀','良好','中等','及格','不及格','location','eastoutside');
%散点类图形经常用于实验中,比较实验得到的结果与理论值之间的差异
%scatter函数:散点图 stairs函数:阶梯图 stem函数:杆图 三个函数的用法与plot函数相似
%scatter(x,y,选项,'filled')
%参数x、y用于定位数据点,选项用于指定线性、颜色、数据点标记,与plot函数相同,如果数据点标记符号是封闭图形,如圆圈或方块,可以用选项filled指定填充数据点标记,该选项省略时,数据点是空心的
%例:以散点图形式绘制桃心曲线,曲线的参数方程如下:x=16(sint)^3 y=13cost-5cos(2t)-2cos(3t)-cos(4t)
% t=0:pi/50:2*pi;
% x=16*sin(t).^3;
% y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
% scatter(x,y,'rd','filled');
%矢量类图形 compass函数:罗盘图 feather函数:羽毛图 quiver函数:箭头图
%quiver(x,y,u,v):其中,(x,y)指定矢量起点,(u,v)指定矢量终点
%(x,y)和(u,v)是同样大小的向量或同型的矩阵,若省略(x,y),则在(x,y)平面上均匀取若干个点作为起点
%例:已知向量A,B,求A+B,并用矢量图表示
% A=[4,5]; B=[-10,0]; C=A+B;
% hold on;
% quiver(0,0,A(1),A(2));
% quiver(0,0,B(1),B(2));
% quiver(0,0,C(1),C(2));
% text(A(1),A(2),'A');
% text(B(1),B(2),'B');
% text(C(1),C(2),'C');
% axis([-12,6,-1,6])
% grid on
%三维曲线的绘制 基本函数:plot3函数
% plot3(x,y,z) 其中,参数x,y,z组成一组曲线的坐标
%例1.绘制一条空间折线,x(1),y(1),z(1)构成折线的第一个坐标,x(2),y(2),z(2)构成折线的第二个坐标,...
% x=[0.2,1.8,2.5];
% y=[1.3,2.8,1.1];
% z=[0.4,1.2,1.6];
% plot3(x,y,z)
% grid on
% axis([0,3,1,3,0,2])
%例2.绘制螺旋线
% t=linspace(0,10*pi,200);
% x=sin(t)+t.*cos(t);
% y=cos(t)-t.*sin(t);
% z=t;
% subplot(1,2,1);
% plot3(x,y,z);
% grid on;
% subplot(1,2,2)
% plot3(x(1:4:200),y(1:4:200),z(1:4:200))
% grid on;
%plot3函数参数的变化形式 plot3(x,y,z) x,y,z一般为长度相等的向量,但也可以有些变化
%当参数x,y,z是同型矩阵时,则以x,y,z对应列元素绘制曲线。曲线条数等于矩阵列数。
%当参数x,y,z中有向量,也有矩阵时,向量的长度应于矩阵相符,也就是行向量的长度与矩阵的列数相同,列向量的长度与矩阵的行数相同
%例:在空间不同位置绘制5条正弦曲线
% t=0:0.01:2*pi;
% t=t'; %将t转换为列向量
% x=[t,t,t,t,t];
% y=[sin(t),sin(t)+1,sin(t)+2,sin(t)+3,sin(t)+4];
% z=[t,t,t,t,t];
% plot3(x,y,z);
% 以下代码段等同于上面那个代码段
% t=0:0.01:2*pi;
% t=t'; %将t转换为列向量
% x=t;
% y=[sin(t),sin(t)+1,sin(t)+2,sin(t)+3,sin(t)+4];
% z=t;
% plot3(x,y,z);
% 含多组输入参数的plot3函数 plot3(x1,y1,z1,x2,y2,z2,...,xn,yn,zn)
% 每一组x,y,z向量构成一组数据点的坐标,绘制一条曲线
%例:绘制三条不同长度的正弦曲线
% t1=0:0.01:1.5*pi;
% t2=0:0.01:2*pi;
% t3=0:0.01:3*pi;
% plot3(t1,sin(t1),t1,t2,sin(t2)+1,t2,t3,sin(t3)+2,t3);
% xlabel('X'),ylabel('Y'),zlabel('Z'); %给三个坐标轴添加标签
% grid on
% 含选项的plot3函数 plot3(x,y,z,选项) 选项用于指定曲线的线型、颜色和数据点标记
%如果x,y,z用参数方程定义,且参数方程只有一个自变量,则可以使用fplot3函数 fplot3(funx,funy,funz,tlims,选项)
%其中,funx,funy,funz代表定义曲线x,y,z坐标的函数,通常采用函数句柄的形式。tlims为参数函数自变量的取值范围,用二元向量[tmin,tmax]描述,默认为[-5,5]
%例,绘制墨西哥帽顶曲线
% xt=@(t)exp(-t/10).*sin(5*t);
% yt=@(t)exp(-t/10).*cos(5*t);
% zt=@(t)t;
% fplot3(xt,yt,zt,[-15,15],'r-');
%三维曲面 5.5.1 未学
%图形修饰处理 :视点处理 色彩处理 裁剪处理
%视点处理:方位角,仰角5.6.1未学
%色彩处理:1.用含有三个元素的向量表示颜色,向量元素在0-1之间取值,颜色的向量 [R G B] 红,绿,蓝 三种颜色
%例如[0 0 1]:蓝色 [1 0 0]:红色 [0 1 0]:绿色 [1 1 1]:白色 [0 0 0]:黑色
%2.色图:色图矩阵(m行3列的数组,定义了包含m组颜色的数组) 内建色图
%未学完
%图形的裁剪处理
%将图形中需要裁剪部分对应的函数值设置成NaN,这样在绘制图形时,函数值为NaN的部分将不显示出来,从而达到对图形进行裁剪的目的
%例:绘制3/4圆
t=linspace(0,2*pi,100);
x=sin(t);
y=cos(t);
p=y>0.5;
y(p)=NaN;
plot(x,y)
axis([-1.1,1.1,-1.1,1.1])
axis square
grid on
%数据分析与多项式计算
%求矩阵的最大元素和最小元素 max() min()
%y=max(X):返回向量X的最大值存入y
%[y,k]=max(X):返回向量X的最大值存入y,最大值元素的序号存入k,如果X包含复数元素,则按模取最大值
% x=[-43,72,9,10];
% [k,y]=max(x)
%求整个矩阵最大元素max(A(:))
% %求矩阵的平均值和中值 mean():求算术平均值 median():求中值
% x=[1200,800,1500,1000,5000];
% mean(x)
% median(x)
%求和与求积 sum():求和函数 prod():求积函数
%累加和与累乘积 cumsum():累加和函数 cumprod():累乘积函数
% %求向量X=[1,2,3,4,5,6,7,8,9,10]的积与累乘积
% X=[1,2,3,4,5,6,7,8,9,10]
% y1=prod(X)
% y2=cumprod(X)
%标准差与相关系数
% std():计算标准差函数
%调用格式:1.std(X):计算向量X的标准差 2.std(A):计算矩阵A的各列的标准差
%3.std(A,flag,dim)
%corrcoef():相关系数函数
%多项式的表示
%在Matlab中,n次多项式用一个长度为n+1的行向量表示,如有n次多项式:p(x)=an*x^(n)+an-1*x^(n-1)+...+a1*x+a0
%则在Matlab中,p(x)表示为向量形式:[an,an-1,...,a1,a0]
%在Matlab中创建多项式向量时,注意三点:1.多项式系数向量的顺序是从高到低 2.多项式系数向量包含0次项系数即常数项,所以其长度为多项式最高次数加1
%3.如果有的项没有,系数向量相应位置应用0补足
%多项式的四则运算 1.多项式的加减即相应向量进行加减
%2.多项式乘法:conv(P1,P2):多项式相乘函数,在这里,P1,P2是两个多项式系数向量
%3.多项式除法:[Q,r]=deconv(P1,P2):多项式相除函数,其中Q返回多项式P1除以P2的商式,r返回P1除以P2的余式,这里,Q和r仍是多项式系数向量
%deconv是conv的逆函数,因此有P1=conv(Q,P2)+r
%多项式的求导:polyder():多项式求导函数
%1.p=polyder(P):求多项式P的导函数 2.p=ployder(P,Q):求P和Q乘积的导函数
%3.[p,q]=polyder(P,Q):求P/Q的导函数,导函数的分子存入p,分母存入q
%多项式的求值
%polyval(p,x):代数多项式求值
%其中,p为多项式系数向量;x可以是标量、向量或矩阵。若x为标量,则求多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值
%ployvalm(p,x):矩阵多项式求值 要求x为方阵,以方阵为自变量求多项式的值
% a=[1,8,0,0,-10];
% b=[1,8,0,0,0];
% x=[-1,1.2;2,-1.8]
% y1=polyvalm(a,x)
% y2=polyvalm(b,x)
%多项式求根:roots(p):多项式求根函数
%例:求多项式x^4+8*x^3-10的根
a=[1,8,0,0,-10];
% x=roots(a)
%数据插值
%数据插值可以根据有限个点的取值状况,合理估算出附近其他点的取值,从而节约大量的实验和测试资源,节省大量的人力、物力和财力
%interp1():一维插值函数
%调用格式:Y1=interp1(X,Y,X1,method)
%根据X,Y的值计算函数在X1处的值。其中,X,Y是两个等长的已知向量,分别表示采样点和采样值。X1是一个向量或标量,表示要插值的点
%method用于指定插值方法,常用取值有四种:linear:线性插值,默认方法。将与插值点靠近的两个数据点用直线连接,让后在直线上选取对应插值点的数据
%nearest:最近点插值。选择最近样本点的值作为插值数据。
%pchip:分段3次埃尔米特插值。
%spline:3次样条插值。
%例:求x每改变0.1时y的值
% x=[0,3,5,7,9,11,12,13,14,15];
% y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
% x1=0:0.1:15;
% y1=interp1(x,y,x1,'spline'); %将计算的值存储在有y1中
% plot(x1,y1,x,y)
% y2=interp1(x,y,1.2,'spline')
%数据插值是一种函数逼近的方法
%interp2():二维插值函数 Z1=interp2(X,Y,Z.X1,Y1,method)
%曲线拟合
%例:人口预测问题
%年份 1790 1800 1810 1820 1830 1840 1850 ... 1990 2000 2010
%人口(百万) [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,63.0,76.0,92.0,105.7,122.8,131.7,150.7,179.3,203.2,226.5,248.7,281.4,308.7]
%预测2020年的人口数
x=1790:10:2010;
y=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,63.0,76.0,92.0,105.7,122.8,131.7,150.7,179.3,203.2,226.5,248.7,281.4,308.7];
% plot(x,y,'*');
p=polyfit(x,y,3);
polyval(p,2020)
plot(x,y,'*',x,polyval(p,x));