目录
- 矩阵的基本运算
- 常量及变量
- 运算符及常见函数
- 定义矩阵/数组
- 获取矩阵元素
- Matlab可视化绘图
- Matlab符号运算(求导,极限,最值,极值,积分,解微分方程)
(一)矩阵的基本运算
假设有一个3×3的矩阵A
[123579384]
1. 转置
命令行语句: A'
2.加减数乘乘方
矩阵之间的加减运算注意要满足矩阵的运算法则即矩阵的维度相同
矩阵之间的乘方运算注意要满足矩阵的运算法则即该矩阵为方阵
假设为n次方
命令行语句: A^n
3.求行列式
命令行语句: det(A)
4.求可逆矩阵的逆矩阵
命令行语句: inv(A)
(二)常量及变量
1.变量
Matlab中的变量不需要声明,但变量名命名时第一个字符不可以是数字
2.常见常量
(1) pi
为圆周率Π
(2) i,j
为虚数单位
(3) Inf
为无穷大值
(4) NaN
为空值
(5) e
为自然对数e
(三)运算符及常见函数
1.常见运算符
+,-,*,\,/(左除),乘方 (注意数组运算(点运算)和矩阵运算的区别)
2.常见函数
sqrt()
计算某个数的平方根
abs()
计算某个数的绝对值
exp()
以自然对数e为底的指数函数
rank()
计算某个矩阵的秩
det()
计算某个矩阵的行列式
eig()
计算某个矩阵的特征值
poly()
计算某个矩阵的特征多项式
注意以行向量的形式返回从首元素开始次数依次减小
>> poly(A)
ans =
1.0000 -12.0000 -52.0000 -27.0000
如A矩阵的特征多项式为x3−12x2−52x−27
roots()
计算某个方程的根
计算时要注意将系数按照从大到小次序写到一个数组中
如计算方程x3+67x2−43x+109=0
要将其写为 B=[1,67,-43,109]
的数组形式进行输入计算
>> B=[1,67,-43,109];
>> roots(B)
ans =
-67.6593 + 0.0000i
0.3297 + 1.2257i
0.3297 - 1.2257i
linspace()
用于构造矩阵数组
(四)定义矩阵/数组
1.直接构造—输入即可
2.增量法—(首位:步长:末位)
假如输入从1到8步长为2的数组
>> B=1:2:8
B =
1 3 5 7
3.linspace(x1,x2,n)函数
函数参数x1为数组首位,x2为数组末位,n为数组中元素个数
>> linspace(1,6,3)
ans =
1.0000 3.5000 6.0000
>> linspace(1,6,6)
ans =
1 2 3 4 5 6
4.常见矩阵生成函数
函数名 | 函数功能 |
---|---|
zeros(m,n) | 生成一个m行n列的零矩阵,m=n时可简写为zeros(n) |
ones(m,n) | 生成一个m行n列的元素全为1的矩阵,m=n时可写为ones(n) |
eye(m,n) | 生成一个主对角线全为1的m行n列矩阵,m=n时简写为eye(n),即n维单位矩阵 |
diag(x) | 若x是矩阵,则diag(x)生成以x为主对角线的向量 若x是向量,则diag(x)产生以x为主对角线的对角矩阵 |
tril(A) | 提取矩阵A的下三角部分 |
triu(A) | 提前矩阵A的上三角部分 |
rand(m,n) | 产生一个0-1间均匀分布的随机矩阵,m=n时简写为rand(n) |
randn(m,n) | 产生均值为0,方差为1的标准正态分布随机矩阵,m=n时简写为randn(n) |
其他特殊矩阵生成函数:magic,hilb,pascal
(五)获取矩阵元素
获取矩阵中第三行第一列的元素 A(3,1)
>> A(3,1)
ans =
3
获取矩阵中第二列元素 A(:,2)
>> A(:,2)
ans =
2
7
8
获取整个矩阵 A(:,:)
好像有点多此一举
>> A(:,:)
ans =
1 2 3
5 7 9
3 8 4
(六)Matlab可视化绘图
1.二维平面绘图
二维平面参数方程绘图—plot函数
可以利用subplot函数将绘图平面分为几部分,将几种不同的函数图像综合在一个窗口中
subplot(2,2,1)
t=0.1:0.1:2*pi;
y=sin(t); %%图像为关于t的正弦函数
plot(t,y)
grid on %%做出网格
subplot(2,2,2)
t=0:0.1:4*pi;
y=sin(t); %%两个周期内的正弦函数
plot(t,y)
subplot(2,2,3)
x=1:0.01:5;
y=exp(x);
plot(x,y) %%自然对数指数函数
subplot(2,2,4)
x=1:0.1:10;
y=sqrt(x);%%完全平方函数
plot(x,y,'rd') %%将函数图像标记为红色菱形
做出的图像为
plot函数常见的线型和颜色参数
颜色
符号 | b | g | r | c | m | y | k | w |
---|---|---|---|---|---|---|---|---|
含义 | 蓝色 | 绿色 | 红色 | 青色 | 洋红 | 黄色 | 黑色 | 白色 |
线型
符号 | - | : | -. | – |
---|---|---|---|---|
含义 | 实线 | 虚线 | 点划线 | 双划线 |
顶点标记
符号 | . | o | × | + | * | s | d | p | h |
---|---|---|---|---|---|---|---|---|---|
含义 | 实点 | 圆圈 | 叉字符 | 加号 | 星号 | 方块 | 菱形 | 五角形 | 六角形 |
二维平面极坐标系绘图—ploarplot函数
利用ploarplot函数画出三叶玫瑰线
t = 0:0.01:2*pi;
%生成极角范围为 0 - 2*pi 的若干个等间距点的行向量
r = 3*sin(3*t); %极径方程
polarplot(t,r,'r'); %polarplot函数:极坐标系作图 图1 红色
title('三叶玫瑰线'); %设置标题名字
二维平面隐函数作图—fimplicit函数 我愿称之为最简单的
f = @(x,y) x.^2 + y.^2 - 1 ;
%%定义单位圆隐函数
fimplicit(f,[-2 2 -2 2])
%%在x,y分别为[-2,2]的区间上作出图像
注意flimplicit函数的默认作图区间为[-5,5]
okey,我们用以上三种方法来画心形线
t = 0 :0.01:2*pi;
r = 1 + cos(t);
subplot(2,2,1);
polarplot(t,r,'r');
grid on;
x = 2*cos(t)+cos(2*t);
y = 2*sin(t)+sin(2*t);
subplot(2,2,2);
plot(x,y,'b');
f = @(x,y) x^2 + y^2 - x - sqrt(x^2 + y^2);
subplot(2,2,3)
fimplicit(f,'g');
2.三维空间绘图
plot3曲线绘图函数
t = 0:pi/50:10*pi;
%%生成0-10Π等间距的一系列行向量
st = sin(t);
%%st方向上为正弦函数图像
ct = cos(t);
%%ct方向上为余弦函数图像
plot3(st,ct,t)
mesh网格绘图函数
x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);
%%将x,y向量映射到网格坐标中
F = X.*exp(-X.^2-Y.^2);
mesh(X,Y,F)
surf表面绘图函数
x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);
F = X.*exp(-X.^2-Y.^2);
surf(X,Y,F)
okey,我们来用以上三种方法来画双曲抛物面(马鞍面)
x = linspace(-10,10);
y = linspace(-10,10);
[X,Y] = meshgrid(x,y);%生成网格
Z = X.^2 - Y.^2;%a = b = 1
subplot(2,2,1);%图1
mesh(X,Y,Z);%填充线条绘图
view(20,40);%调整视角
subplot(2,2,2);%图1
surf(X,Y,Z);%填充网格绘图
view(20,50);%调整视角
subplot(2,2,3);%图1
plot3(X,Y,Z);%三维曲线构成曲面
view(20,60);%调整视角
3.特殊图形绘制
面积图函数–area
x = [10 11 12];
%%面积图上三个对应点
Y = [21.6 25.4; 70.8 66.1; 58.0 43.6];
%%面积图对应三个点增量
area(x,Y)
legend({'Model A','Model B'})
直方图函数—bar
x = 2012:1:2022;
%%直方图几个对应横坐标
y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
%%直方图对应x的数值
bar(x,y)
扇形图函数—pie
x=[200,360,120,400,320];
%%扇形图表示的是x占总和的比例
subplot(2,2,1)
pie(x,[0 0 0 1 0])
%%[0 0 0 1 0]表示扇形中是否分块
title('图1');
subplot(2,2,2),
pie3(x,[0 0 0 1 0])
title('图2');
subplot(2,2,3)
pie(x(2:5))
title('图3');
subplot(2,2,4)
x=[0.1,0.12,0.21,0.34,0.11];
pie3(x ,{'A','B','C','D','E'})
%%给扇形图标记相应字母
title('图4');
(七)Matlab符号运算
需要下载Symbolic Math Toolbox工具包
1.因式分解—factor函数
syms x
syms y
assume(x, 'real')
assume(y, 'real')
%%注意定义函数时将其标注为syms中实数类型
f = (x^2 + 3*x*y + 2*y^2 + 4*x + 5*y + 3)
factor(f)
结果为
ans =
[x + y + 1, x + 2*y + 3]
%%两因式乘积
举例函数
f(x)=3x3+17x2+6x+12x3−x+3
syms x
assume(x, 'real')
f = (3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)
fplot(f)
grid
函数图像
计算极限值—limit函数
lim_left = limit(f, x, -inf)
lim_right = limit(f, x, inf)
%%计算函数值趋于无穷时的自变量值
结果为
lim_left =
3/2
lim_right =
3/2
结合图像验证可知x=32时函数值极限趋于无穷
计算导函数—diff函数
g=diff(f,x)
h=diff(f,x,2)
%%函数的第三个参数为2表示所求为二阶导
结果为
g =
(9*x^2 + 34*x + 6)/(2*x^3 - x + 3) - ((6*x^2 - 1)*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^2
h =
(18*x + 34)/(2*x^3 - x + 3) - (2*(6*x^2 - 1)*(9*x^2 + 34*x + 6))/(2*x^3 - x + 3)^2 - (12*x*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^2 + (2*(6*x^2 - 1)^2*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^3
多元函数偏导数计算则将第二个参数为x,则表示对x求偏导
举例 f(x,y)=x2+3xy+2y2+4x+5y+3
syms x
syms y
assume(x, 'real')
assume(y, 'real')
f = (x^2 + 3*x*y + 2*y^2 + 4*x + 5*y + 3)
m = diff(f, y)
%%对y求偏导
结果为
m =
3*x + 4*y + 5
计算极值点
求导后解方程
g = diff( f , x )
g0 = solve( g , x )
double(g0)
%%利用double函数计算近似值
结果为
ans =
-0.1892
1.2860
计算最大(最小)值点—利用内联函数
关于内联函数个人理解是被计算函数的变量是由Symbolic Math Toolbox工具包定义的,min,max函数的输入值为数组或者矩阵,内联函数则实现了变量转化的功能
t = -100:0.01:100;
y = inline(f)
%%内联函数
min = min(y(t))
max = max(y(t))
结果为
min =
-4.4730e+03
max =
173.6527
计算积分—int函数
syms x
assume(x, 'real')
f = ( 3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)
t = int( f , x , [3,4] )
%%int函数第一参数为被积函数,第二个参数为积分变量,第三个参数为积分区间
m = vpa(t)
%%vpa函数计算出其具体的值
结果为
t =
int((3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3), x, 3, 4)
m =
4.2289590152094368082694890801909
求解微分方程—dsolve函数
举例
微分方程为: y′=a√y+y
初值条件为:y(a)=1
syms a y(t)
eqn = diff(y) == a/sqrt(y) + y;
%%微分方程
cond = y(a) == 1;
%%处值条件
ym = dsolve(eqn,cond)
%%函数的第一个参数为微分方程,第二参数为初值条件
最后加一个表情包
Referces:
[1] LaTeX新手教程
[2] https://ww2.mathworks.cn/help/matlab/learn_matlab/help.html
# orz
一看 怎么是MATLAB
hhhhh,最近在准备美赛
orzorzorzorzorz