前言: 此篇并非详细介绍各种命令,只是以表格的形式记录 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 statements end |
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 statements end |
while语句语法 |
| switch expression case 1 do these statements case 2 do these statements case n do these statements end |
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。 |