前言: 此篇并非详细介绍各种命令,只是以表格的形式记录 MATLAB 学习过程中试过的一些简单命令,记录下来将来自己查阅方便。边学边补充。
1. 基础
1.1 基本命令列表
命令 | 功能 |
---|---|
who | 显示出到目前为止所有变量的名称 |
whos | 告诉我们当前内存中的变量,类型,每个变量所分配的内存空间,以及它们是否是复数 |
clear | 清除全部变量 |
clear x y z | 清除变量 x,y,z |
format rat | 自动查找最接近结果的比例式 |
pi | Π值 |
e | e值 |
sqrt(x) | 求x的平方根 |
log(y) | 求y的自然对数 |
log10(x) | 得到以 10 为底的对数 |
cos(pi/4) | 三角函数:求cos值 |
atan(pi/3) | 反三角函数 |
a = 2 + 3i | a为复数 |
x = [1:5]; | 创建含有5个元素的x数组 |
2. 向量与矩阵
2.1 向量相关命令列表
命令 | 功能 |
---|---|
a = [2; 1; 4] | 创建一个列向量 |
v = [2 0 4] | 创建一个行向量 |
y = a' | 求向量a的转置 |
w = [u; v] | 合并列向量 |
u = [r, s] | 合并行向量 |
x = [xi : q: xe] | 创建等差元素向量 |
y = x .^ 2 | 向量的乘方 |
linspace(a, b, n) | 创建 a、 b 之间含有 n 个等差元素的向量 |
logspace(a, b, n) | 创建 10a 和 10b 之间 n 个对数值等差的向量 |
length(A) | 返回向量A的长度 |
J.*J | 向量的点乘 |
mag = sqrt(sum(J.*J)) | 求向量u(不带复数)的模 |
v = conj(u) | 求向量u的转置 |
c = sqrt(sum(conj(u).*u)) | 求向量u(带有复数)的模(一步到位) |
B = abs(A) | 返回向量每个位置的数的绝对值 |
dot(a, b) | 向量的点乘 |
mag = sqrt(dot(J,J)) | 求向量 J 的模 |
C = cross(A, B) | 求向量的叉乘 |
A(i) | 向量 v 的第 i 个元素 |
v( : ) | 列出向量的所有元素 |
A(4:6) | 选出第 4 到第 6 个元素组成一个新的、含有 3 个元素的向量 |
注: 向量的点乘计算公式:
2.2 矩阵相关命令列表
命令 | 功能 |
---|---|
A = [-1,6; 7, 11] | 创建矩阵 |
B = A' | 求矩阵A的转置。若A含有复数,转置操作会自动计算复数的共轭值 |
D = C.' | 转置复数矩阵而不计算它的共轭值 |
C = A .* B] | 数组乘法 |
C = A * B] | 矩阵相乘 |
A = [1 2 3 4]; b = 2; C = b + A | 把数量值加到行向量 |
eye(n) | 创建n*n单位矩阵 |
zeros(m, n) | 创建 m×n 的零矩阵 |
ones(m,n) | 创建 m×n 的元素都为1的矩阵 |
A(m,n) | 选出矩阵第 m 行 n 列的元素 |
A(:,i) | 引用第 i 列的所有元素 |
A(:,i:j) | 选出从第 i 列到第 j 列之间的所有元素 |
A(2:3,1:2) | 选出第二到第三行同时处于第一和第二列的元素 |
A(1,1) = -8 | 把第一行第一列元素的值改为-8 |
A(2,:)=[ ] | 删除 A 的第二行 |
E = A([1,1,1,1], : ) | 复制 A 矩阵的第一行四次来创建一个新矩阵 |
F = A([1,2,1], : ) | 引用两次 A 的第一行创建新矩阵(理解:新矩阵有三行,分别是A矩阵的第一行,第二行,第一行) |
2.3 行列式与线性系统求解命令列表
命令 | 功能 |
---|---|
det(A) | 求矩阵A的行列式 |
rank(A) | 求矩阵A的秩 |
inv(A) | 求矩阵A的逆矩阵 |
x = inv(A)*b | 求解方程组的解 |
x = pinv(A)*b | 伪逆矩阵求解方程组的解 |
rref(A) | 求解矩阵 A 降行后的梯形形式 |
magic(n) | 产生n*n的魔方矩阵(矩阵的元素从 1 到 n2 之间,并且行元素的和等于列元素的和) |
lu(A) | 求解矩阵A的LU分解 |
3. 绘图与图形
3.1 2D绘图基础
绘图三个步骤: ①定义函数;②指定要绘制的函数图形的值范围;③调用 MATLAB 的 plot(x, y)函数
命令 | 功能 |
---|---|
[ start : interval : end ] | 定义区间和增量 |
x = [0:0.01:10]; | 确认x的区间 |
y = cos(x); | 定义函数 |
plot(x, y), xlabel('x'), ylabel('cos(x)'); | 调用画图函数,并标注x轴y轴标签 |
fplot(@(t)exp(-2.*t).*sin(t), [0, 4]); xlabel('t'), ylabel('f(t)'), title('阻尼弹力') | fplot 生成尽可能精确的的图象 |
plot(x,y), grid on, axis equal(或者 axis square) | 添加网格,且两坐标轴比例和间距都相同(产生正方形形状的图像) |
t = [0:0.01:5]; f = exp(-t); g = exp(-2*t); plot(t,f,t,g,'--') | 在一个坐标系里同时画出两个图像,第二个图像用虚线显示 |
'-' ‘--’ ‘-.’ ':' | 分别是:实线,虚线,虚点线,点线;若不指定线的类型,全部默认为实线,但是颜色不同 |
x = [0:0.01:2]; y = sinh(x); z = cosh(x); plot(x,y,x,z,'-.'), xlabel('x'), ylabel('Potential'), legend('sinh(x)','cosh(x)'); | 绘制两个函数的图像并添加图例 (legent函数),可用鼠标拖动图例到满意位置 |
plot(x,y,'r',x,z,'b') | 设置线条颜色,红色和蓝色 |
plot(x,y,'r',x,z,'b--') | 红色实线,蓝色虚线 |
w, k, b, r, c, g, m, y | 白色,黑色,蓝色,红色,青色,绿色,洋红,黄色 |
axis ( [xmin xmax ymin ymax] ) | 描述画图范围 |
plot(x,y), axis([0 5 -1 1]) | 显示x在0到5,y在-1到1之间的图像 |
subplot(m, n, p) | 绘制子图:这里 m 和 n 告诉 MATLAB 产生的产生的子图有 m 行和 n 列, p 用来告诉 MATLAB 我们所要贴上去的某个已经绘制的图形窗口。 |
x = [0:0.01:5]; y = exp(-1.2*x).*sin(20*x);subplot(1,2,1); plot(x,y),xlabel('x'),ylabel('exp(-1.2x)*sin(20x)'),axis([0 5 -1 1]) y = exp(-2*x).sin(20x);subplot(1,2,2); plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(20x)'),axis([0 5 -1 1]) | 定义x的范围;定义第一个函数;一行两列窗格,从左至右编号,接下来生成的图像将放置在第一个窗格。生成第一个函数图像定义第二个函数;一行两列窗格,从左至右编号,接下来的图像将放置在第二个窗格;生成第二个函数图像 |
x = linspace(a,b); x = linspace(a,b,n); | 在 a 到 b 间取出均匀分布的 100 个点;在 a、 b 之间取出均匀分布的 n 个点。 |
x = linspace(0,2*pi);plot(x, cos(x)),axis([0 2*pi -1 1]);hold on; plot(x, sin(x)), axis ([0 2*pi -1 1]); | 一个图形上绘制 cos(x)的同时再绘上 sin(x) |
注: ①当一个函数是由二个或更多个函数相乘构成,别忘记在相乘时加上“.”以便告诉 MATLAB 我们是对两个矩阵进行相乘。 ②对 sin 函数平方的正确方法是使用数组相乘记号,即使用 A.^B 表示 AB。即“y = sin(5*x).^2;”。
3.2 离散数据绘图
命令 | 功能 |
---|---|
x = [1:5];y = [50,98,75,80,98]; bar(x,y), xlabel('学生'),ylabel('分数'), title('期末测试'); | 生成二维条形图 |
stem(x, y) | 生成针头图 |
stem(t,f,'--rp'),xlabel('时间(秒)'),ylabel('弹簧响应') | 指定图像中标记的颜色形状:包括方块(s)、菱形(d)、五角星(p)、圆圈(o)、叉号(x)、星号(*)和点号(.)。 |
3.3 等高线图和三维图
命令 | 功能 |
---|---|
[x,y] = meshgrid(-5:0.1:5, -3:0.1:3); | meshgrid 产生矩阵元素,元素 x 和 y 按照我们分别所指定的范围和增量来产生。 |
z = x.^2 + y.^2; | 定义含有两个变量的函数 |
[C,h] = contour(x,y,z);set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2) | 绘制等高线,并设置标签 |
[x,y] = meshgrid(-2:0.1:2); z = y.*exp(-x.^2 - y.^2);contour(x,y,z),xlabel('x'),ylabel('y')contour3(x, y, z, 30)surface(x,y,z,'EdgeColor',[.8 .8 .8],'FaceColor','none'); grid off;view(-15,20) | 设置x和y的范围和增量;定义函数;生成等高线函数图像; 生成30个级别的三维等高线函数图像。使用surface函数稍微美化一下生成的图像 |
[x,y] = meshgrid(-2*pi:0.1:2*pi);z = cos(x).*sin(y);mesh(x,y,z),xlabel('x'),ylabel('y'),zlabel('z'); surf(x,y,z),xlabel('x'),ylabel('y'),zlabel('z'); | mesh(x, y, z),surf(x,y,z), surfc(x,y,z),, surfl(x,y,z)等函数均能产生三维图象,有些许不同。 |
4. 统计和MATLAB
4.1 创建柱状图
命令 | 功能 |
---|---|
a = [54.5,64.5,74.5,84.5,94.5];b = [1,3,17,8,7]; bar(a,b),xlabel('分数'),ylabel('学生人数'), title('期中考代数成绩') | 生成柱状图 |
a = [54.5,64.5,74.5,84.5,94.5];b = [1,3,17,8,7]; barh(a,b),xlabel('学生人数'),ylabel('考试分数') | 生成横状柱状图 |
a = [54.5,64.5,74.5,84.5,94.5];b = [1,3,17,8,7]; bar3(a,b),xlabel('考试分数'),ylabel('学生人数') | 生成三维柱状图 |
x = [54.5,64.5,74.5,84.5,94.5];garcia= [0; 3; 18; 13; 10];...simpson= [3; 5; 20; 10; 5];...smith= [1; 2; 15; 17; 8];y = [garcia simpson smith];bar(x,y),xlabel('考试分数'),ylabel('学生人数'),legend('加西亚','辛普森','史密斯') | 多组数据合并画柱状图 |
4.2 基本统计
命令 | 功能 |
---|---|
a = [11,12,16,23,24,29];mean(a) | 求数据的平均数 |
N = sum(y) | 求y数组的和 |
x = [55, 63,69,70,75,78,82,84,85,88,90,96,100];y = [1,2,1,6,4,7,2,1,3,2,4,2,1];s = sum(x.*y);N = sum(y);ave = s/N; | 此时x数组表示的是分数,y数组表示的是分数对应的人数。两个数组的点乘之和是指分数总数,则ave 求的是平均分 |
function ave = myaverage(x, N)sizex = size(x);sizeN = size(N);if sizex(2) ~= sizeN(2) disp('错误:数据必须具有相同的维数。')else total = sum(N); s = x.*N; ave = sum(s)/total;end | 新建.m脚本,保存左边的代码: “~=”表示不等于; “end”用来结束if-else语句; size()函数求的是矩阵的行列大小,返回一个包含两个元素的行向量,第一个元素是矩阵的行数,第二个是矩阵的列数; |
for index = start : increment : finish statementsend | for语句语法:若是忽略增量,则默认为1 |
function sumx = mysum(x)%获取元素个数num = size(x);%初始化总和sumx = 0;for i = 1:num(2) sumx = sumx + x(i);end | “%”表示注释; |
mean(x);median(x);std(x); | 求数组x的平均数求数组x的中位数求数组x的标准偏差 |
input();disp(); | 接受用户输入;输出内容; |
while condition statementsend | while语句语法 |
switch expression case 1 do these statements case 2 do these statements case n do these statementsend | switch语法 |
5. 代数方程求解和其他符号工具
命令 | 功能 |
---|---|
syms x;x = solve(x+3==0); | x保存方程的解 |
syms x;x = solve(x^2-6*x-12==0) | x(1)为第一个根,x(2)为第二个根; |
syms x;equ = x + 3 == 0; x = solve(equ, x); | 将方程赋给一个变量 |
syms w x y z;equ1 = w + x + 4*y + 3*z == 5;equ2 = 2*w +3*x+y - 2*z == 1;equ3 = w + 2*x - 5*y + 4*z == 3;equ4 = w - 3*z == 9; s = solve(equ1,equ2,equ3,equ4, w, x, y, z);w = s.w;x = s.x;y = s.y;z = s.z; | 求解方程组并取出根 |
d = 'x^2 - 6*x -12';ezplot(d, [-2, 8]) | 画出函数图像,并限定了x轴范围 |
syms x;expand((x - 1)*(x + 4)); | 展开方程式 |
syms x;collect(x*(x^2 - 2)); | 合并同类项 |
syms x y;factor(x^2 - y^2); | 因式分解 |
syms x;simplify((x^4-81)/(x^2-9)); | 多项式相除 |
syms x; s = taylor(sin(x), x, 0, 'order', 20); | 泰勒展开式:对x在x=0处展开,阶数是20。 |