:
关于矩阵
1.矩阵的左右划分:
注意,只有前一个矩阵的列数和后一个矩阵的行数在两个矩阵中相同时,才能进行乘法运算。 ab运算相当于求a*x=b的解; 而a/b等价于求x*b=a的解。 只有方阵可以取幂。
2.逆矩阵和行列式计算
求逆:inv(A); 求行列式:det(A); 矩阵必须是方阵
3.使用矩阵下标提取和重排矩阵
A(m,n):提取第m行第n列元素; A(:,n):提取第n列元素; A(m,:):提取第m行元素。 A(:):得到一个长列向量,其元素按矩阵的列排列。
矩阵扩充:如果在原矩阵中一个不存在的地址位置设置了一个数(赋值),矩阵会自动扩充行数和列数,并在这个位置加上这个数,其他未指定的位置用零。
4.求矩阵的大小
[m,n]=size(A,x):返回矩阵m和n的行数和列数。 当 x=1 时,只返回行数 m。 当 x=2 时,只返回列数 n。
length(A)=max(size(A)):返回最大行数或列数。
rank(A):找到矩阵的秩。
5.矩阵的转置
对于实数矩阵,使用符号(')或(.')得到转置结果是一样的; 但是,对于包含复数的矩阵,(') 会将复数同时共轭,而 (.') 只是将它们转换 Permutations 转置。
多项式处理
1. 多项式求根与反演
在 MATLAB 中,多项式由降低幂系数的行向量表示matlab拟合曲线并得到方程,例如:x^2+2x+1
表示为p=[1 2 1],函数r=roots(p)用于求根; po=poly(r) 用于反转已知根的多项式。
2.多项式运算
乘法转换:
一=[1 2 3]; b=[1 2] c=conv(a,b)=1 4 7 6
Conv指令可以嵌套,如conv(conv(a,b),c)
划分反卷积:
[q,r]=反卷积(c,b)
q=1 2 3% 商多项式
r=0 0 0 % 余数多项式
对一个多项式多项式 polyder 进行微分:
多边形(a)=2 2
求多项式函数值 polyval(p,n):
多元 (a,2)=11
3.多项式拟合
多项式拟合又称曲线拟合,其目的是在众多样本点之间进行拟合,找出一个满足样本点分布的多项式。 这在分析实验数据和分析描述实验数据时非常有用。
命令格式:p=polyfit(x,y,n),其中x和y为样本点向量,n为待求多项式的阶数,p为待求多项式。
喜欢:
x = linspace(0,4*pi,10);
y = sin(x);
使用 polyfit 将一个 7 次多项式与这些点拟合。
p = polyfit(x,y,7);
有关函数拟合的更多示例:
官方帮助文档列举了误差拟合、改进数值、绘制线性回归图等示例。
4.多项式插值
多项式插值是指在给定有限数量的样本点的基础上产生额外的估计点,以达到对数据更平滑的效果。 该技术广泛用于信号处理和图像处理。
使用的指令为一维interp1、二维interp2、三维interp3。 这些指令有不同的方法(method),设计者可以根据需要选择合适的方法来满足系统特性的要求。 帮助 polyfun 可以获得更详细的内容。
y=interp1(xs,ys,x,'方法')
在有限样本点向量xs和ys中,插值生成向量x和y,使用的方法在method中定义,有4种选择:
nearest:执行速度最快,输出结果为直角转弯
linear:默认值,斜率随样本点变化很大
spline:最耗时,但输出也最流畅
cubic:占用内存最多,输出结果类似spline
例如:在一 天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为
12,9,9,1,0,18 ,24,28,27,25,20,18,15,13,
推测中午12点(即13点)时的温度.
%}
x = 0:2:24;
y = [12 9 9 10 18 24 28 27 25 20 18 15 13];
a = 13;
y1 = interp1(x,y,a,'spline')
% 结果为:27.8725
% 若要得到一天24小时的温度曲线,则:
xi = 0:1/3600:24;
% 插值点可以是向量,则返回的也就是对应的向量
yi = interp1(x,y,xi, 'spline');
plot(x,y,'o' ,xi,yi);
MATLAB数据处理
1.矩阵分解
奇异值分解:
[U,S,V]=svd(A)
求矩阵A的奇异值和分解矩阵,满足U*S*V'=A,其中U和V矩阵为正交矩阵(U*U'=I),S矩阵为对角矩阵,其对角线elements 即A矩阵的奇异值。
特征值分解:
求矩阵A的特征向量V和特征值D,满足A*V=V*D。 其中D的对角线元素为特征值,V的列为对应的特征向量。若D=eig(A)只返回特征值
正交分解:
[Q,R]=qr(A)
对矩阵A进行正交分解,使得Q*R=A,其中Q为正交矩阵(其范数为1,指令norm(Q)=1),R为对角化的上三角矩阵。
三角分解:
[L,U]=卢(A)
对角分解A使得A=L*U,其中L为下三角矩阵,U为上三角矩阵。
注意:L实际上是一个“心理”下三角矩阵matlab拟合曲线并得到方程,它实际上是一个置换矩阵P的逆矩阵和一个真正的下三角矩阵L1(其对角元素为1)的乘积。
[L1,U1,P]=lu(A)
MATLAB图形绘制
MATLAB提供了丰富的绘图函数,help graph2d可以获得绘制二维图形的所有命令,help graph3d可以获得绘制三维图形的所有命令,下面介绍常用的二维图形命令。
1.基本绘图功能
情节(x1,y1,option1,x2,y2,option2,…)
x1和y1给出的数据分别是x轴和y轴的坐标值,option1是一个选项参数,以折线逐点连接的方式绘制二维图形; 同时,类似地绘制出第二个二维图,……等等。
这是plot命令的完整格式,在实际应用中可以根据需要进行简化。 例如:
情节(x,y); 情节(x,y,选项)
option参数option定义图形曲线的颜色、线型和标记符号,用一对单引号括起来。
例1:在0≤x≤2区间画一条曲线
y=2e-0.5xcos(4πx)
程序如下:
x=0:圆周率/100:2*圆周率;
y=2*exp(-0.5*x).*cos(4*pi*x); (。从后面断开指数)
情节(x,y)
例2:分析下面的代码,想象一下输出的图形。
x1=linspace(0,2*pi,100);%将0~2pi之间分为一百个等距的店
x2=linspace(0,3*pi,100);
x3=linspace(0,4*pi,100);
y1=sin(x1);
y2=1+sin(x2); %sin图像向上移动一个单位
y3=2+sin(x3);
x=[x1;x2;x3]'; %将x1~y1x2~y2x3~y3对应的图像整合成矩阵,一起绘制出
y=[y1;y2;y3]';
plot(x,y,x1,y1-1)
注意:plotyy可以绘制两个纵坐标。
plotyy(x1,y1,x2,y2)
其中x1、y1对应一条曲线,x2、y2对应另一条曲线。 横坐标的刻度相同,有两个纵坐标,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。
例3:在同一坐标下,分别用不同的线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx),并标出两条曲线的交点。
x=linspace(0,2*pi,1000);
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
k=find(abs(y1-y2)<1e-2); %查找y1与y2相等点(近似相等)的下标
x1=x(k); %取y1与y2相等点的x坐标
y3=0.2*exp(-0.5*x1).*cos(4*pi*x1); %求y1与y2值相等点的y坐标
plot(x,y1,x,y2,'k:',x1,y3,'bp');
2. 选择一张图片
图1); 图(2); …; 图(n)
打开不同的图形窗口绘制不同的图形。
3.网格开合
grid on:在绘制的图形坐标上添加一个网格
grid off:去除图形坐标中的网格
4.图形保持
hold on:保持当前图形在屏幕上,允许在该坐标范围内绘制另一个图形。
hold off:让新图覆盖旧图
5.图像标注
文本(x,y,'字符串')
在图形的指定坐标位置(x,y)处,标记用单引号括起来的字符串。
gtext('字符串')
用鼠标在图形上的某个位置标记一个字符串。
标题('字符串')
在正在绘制的图表顶部显示描述图表标题的字符串。
xlabel('字符串'), ylabel('字符串')
设置 x,y 轴的名称。
要输入特殊文本,您需要以反斜杠 () 开头。
除了标准的ASCII字符外,函数中的说明文字还可以使用LaTeX格式的控制字符,这样就可以在图形中添加希腊字母、数学符号和公式。 比如text(0.3,0.5,'sin({omega}t+{beta})') 会得到标注效果sin(ωt+β)
6.坐标设置
坐标轴函数的调用格式为:
轴([xmin xmax ymin ymax zmin zmax])
轴函数功能丰富,常用的格式有:
axis equal:垂直轴和水平轴使用等长刻度。
axis square:生成正方形坐标系(默认为矩形)。
axis auto:使用默认设置。
axis off:取消坐标轴。
axis on:显示坐标轴。
例4 在同一个坐标下,可以画3个同心圆,加上坐标控制。
程序如下:
t=0:0.01:2*pi;
x=exp(i*t); 而复数exp(i*t)的实部是cos(t),虚部是sin(t),因此,x=exp(i*t)就是圆的复数方程。i 是虚数单位。而复数exp(i*t)的实部是cos(t),虚部是sin(t),因此,x=exp(i*t)就是圆的复数方程。i 是虚数单位。
y=[x;2*x;3*x]';
plot(y)
grid on; %加网格线
box on; %加坐标边框
axis equal %坐标轴采用等刻度
7.图形分割
subplot函数的调用格式为:
子图(m,n,p)
该函数将当前图形窗口划分为m×n个绘图区,即每行n行,共m行。 区域代码按照行优先顺序编号,选择第p个区域作为当前活动区域。允许在每个绘图区域分别绘制不同坐标系的图形
8、其他坐标系下的二维数据曲线
MATLAB提供绘制对数和半对数坐标曲线的函数,调用格式为:
semilogx(x1,y1,option1,x2,y2,option2,…)
semilogy(x1,y1,option1,x2,y2,option2,…)
polar函数用于绘制极坐标图,其调用格式为:
极性(θ、rho、选项)
其中theta为极坐标极角,rho为极坐标矢量半径,选项内容与plot函数类似。
9. 坐标表示
在MATLAB中,有许多二维统计分析图形,如条形图、梯形图、杆状图、填充图等。 使用的函数是:
栏(x,y,选项)
楼梯(x,y,选项)
茎(x,y,选项)
填充(x1,y1,选项 1,x2,y2,选项 2,…)
例5:将y=2sin(x)曲线分别绘制成柱状图、阶梯图、杆状图和填充图。
x=0:pi/10:2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0,7,-2,2]);
subplot(2,2,2);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0,7,-2,2]);
subplot(2,2,3);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0,7,-2,2]);
subplot(2,2,4);fill(x,y,'y');
title('fill(x,y,''y'')');axis([0,7,-2,2]);
饼图和矢量图:
(1)某企业全年各季度产值(单位:万元)为:2347、1827、2043、3025,用饼图进行统计分析。
(2)画出复数的相量图:7+2.9i、2-3i、-1.5-6i。
subplot(1,2,1);
pie([2347,1827,2043,3025]);
title('饼图');
legend('一季度','二季度','三季度','四季度');
subplot(1,2,2);
compass([7+2.9i,2-3i,-1.5-6i]);
title('相量图');
10.三维图形
plot3函数与plot函数非常相似,其调用格式为:
plot3(x1, y1, z1, 选项 1, x2, y2, z2, 选项 2, …, xn, yn, zn, 选项 n)
例6 绘制三维曲面图z=sin(x+sin(y))-x/10。
程序如下:
[x,y]=网格(0:0.25:4*pi);
z=sin(x+sin(y))-x/10;
网格(x,y,z);
轴([0 4*pi 0 4*pi -2.5 1]);
此外,还有一个带等高线的 3D 网格曲面函数 meshc 和一个带底的 3D 网格曲面函数 meshz。 它的用法与mesh类似,只是meshc也是在xy平面上绘制z轴方向的曲面轮廓,meshz也是在xy平面上绘制曲面的底边。
标准 3D 表面
sphere函数的调用格式为:
[x,y,z]=球体(n)
圆柱函数的调用格式为:
[x,y,z]= 圆柱体(R,n)
MATLAB 还有一个 peaks 函数,称为多峰函数,常用于三维曲面的演示。
t=0:pi/20:2*pi;
[x,y,z]= cylinder(2+sin(t),30);
subplot(2,2,1);
surf(x,y,z);
subplot(2,2,2);
[x,y,z]=sphere;
surf(x,y,z);
subplot(2,1,2);
[x,y,z]=peaks(30);
surf(x,y,z;
例7 绘制三维图形:
(1)画出幻方的三维柱状图。
(2)以三维柱状图的形式画出曲线y=2sin(x)。
(3) 给定x=[2347,1827,2043,3025],画饼图。
(4) 绘制五个顶点坐标值随机的黄色三角形。
subplot(2,2,1);
bar3(magic(4))
subplot(2,2,2);
y=2*sin(0:pi/10:2*pi);
stem3(y);
subplot(2,2,3);
pie3([2347,1827,2043,3025]);
subplot(2,2,4);
fill3(rand(3,5),rand(3,5),rand(3,5), 'y' )
11. MATLAB中3D图形的修改
颜色的矢量表示
除了用字符来表示颜色,MATLAB 还可以用包含 3 个元素的向量来表示颜色。 向量元素取值范围[0,1],三个元素分别表示红、绿、蓝三种颜色的相对亮度,称为RGB三元组。
颜色图(Color map)是MATLAB系统引入的一个概念。 在 MATLAB 中,每个图形窗口只能有一个颜色图。 颜色图是一个 m×3 数字矩阵,其中每一行都是一个 RGB 三元组。 可以人为生成colormap矩阵,也可以调用MATLAB提供的函数定义colormap矩阵。
3D 表面图实际上是在网格图的每个网格块上绘制颜色。 surf 函数使用默认着色对网格补丁进行着色。 此外,还可以使用着色命令改变着色方式。
shading faceted 命令为每个网格块着色与其高度对应的颜色,但网格线仍然保留,它们的颜色为黑色。 这是系统默认的着色方法。
shading flat 命令用相同的颜色对每个网格块进行着色,网格线也使用相应的颜色,使图形表面显得更平滑。
shading interp 命令使用网格切片内的颜色插值来生成最平滑的表面图像。
示例:3种图形着色方式的效果展示。
[x,y,z]=sphere(20);
colormap(copper);
subplot(1,3,1);
surf(x,y,z);
axis equal
subplot(1,3,2);
surf(x,y,z);shading flat;
axis equal
subplot(1,3,3);
surf(x,y,z);shading interp;
axis equal
MATLAB提供了光照设置函数,其调用格式为:
light('颜色', 选项 1, '样式', 选项 2, '位置', 选项 3)
光处理后的球体示例。
[x,y,z]=sphere(20);
subplot(1,2,1);
surf(x,y,z);axis equal;
light('Posi',[0,1,1]);
shading interp;
hold on;
plot3(0,1,1,'p');text(0,1,1,' light');
subplot(1,2,2);
surf(x,y,z);axis equal;
light('Posi',[1,0,1]);
shading interp;
hold on;
plot3(1,0,1,'p');text(1,0,1,' light');
图形剪裁
例如绘制一个三维地表图,并进行插值着色处理,将图中x、y均小于0的部分切掉。
程序如下:
[x,y]=网格(-5:0.1:5);
z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)/4);
冲浪(x,y,z); 阴影插值;
暂停 % 程序暂停
我=找到(x