目录
四、如何进行常见的三角函数、指数函数、对数函数等数学函数的计算?
七、如何进行常微分方程(ODE)和偏微分方程(PDE)的求解?
1.打开MATLAB,并在命令窗口输入sym命令,创建符号计算变量:
2.输入需要计算的表达式。例如,要计算x+y的和与积,可以输入以下命令。
3.对符号计算变量进行操作。例如,可以计算表达式的导数、积分、简化等。
4.MATLAB还提供了一些特定的符号计算函数,如求解方程、矩阵运算、微分方程求解等。
一、MATLAB之数学运算简介
Matlab是一款强大的数学计算工具,支持多种数学运算,包括基础计算、向量和矩阵运算、微积分运算、代数运算、概率和统计运算等等。下面分别进行介绍:
-
基础计算:Matlab可以进行基本的加、减、乘、除运算,也可以进行幂运算、取余运算、绝对值运算等。
-
向量和矩阵运算:Matlab可以方便地进行向量和矩阵运算,如向量的加、减、乘运算,矩阵的加、减、乘运算,矩阵的转置、求逆、求行列式等等。
-
微积分运算:Matlab中可以进行微积分运算,如求导、积分、微分方程求解等。
-
代数运算:Matlab可以进行代数运算,如方程求解、多项式求解、线性方程组求解等。
-
概率和统计运算:Matlab可以进行概率和统计运算,如随机数生成、概率分布函数的计算、统计分析等。
以上就是Matlab常用的数学运算介绍,不同的运算操作需要使用不同的Matlab函数进行实现。
二、函数介绍
1.三角函数
函数名称 | 说明 |
sin()/sind() | 正弦函数,输入值为弧度/角度 |
cos()/cosd() | 余弦函数,输入值为弧度/角度 |
tan()/tand() | 正切函数,输入值为弧度/角度 |
sec()/secd() | 正割函数,输入值为弧度/角度 |
csc()/cscd() | 余割函数,输入值为弧度/角度 |
cot()/cotd() | 余切函数,输入值为弧度/角度 |
asin()/asind() | 反正弦函数,返回值为弧度/角度 |
acos()/acosd() | 反余弦函数,返回值为弧度/角度 |
acsc()/acscd() | 反余割函数,返回值为弧度/角度 |
asec()/asecd() | 反正割函数,返回值为弧度/角度 |
atan()/atand() | 反正切函数,返回值为弧度/角度 |
acot()/acotd() | 反余切函数,返回值为弧度/角度 |
atan2() | 四象限内反正切,返回值为弧度/角度 |
2.双曲线函数
函数名 | 说明 | 函数名 | 说明 |
sinh() | 双曲正弦 | asinh() | 反双曲正弦 |
cosh() | 双曲余弦 | acos() | 反双曲余弦 |
tanh() | 双曲正切 | atan() | 反双曲正切 |
例:
>> x=-3:0.01:3;
>> plot(x,sinh(x))
>> grid on
3.复数函数
函数名 | 说明 |
abs() | 求复数的模 |
angle() | 求复数的相角(弧度制) |
real() | 求复数的实部 |
imag() | 求复数的虚部 |
conj() | 求复数的共轭值 |
unwrap() | 复数的相角展开 |
isreal() | 判断是否为实数 |
cplxpair() | 按共轭复数对重新排列 |
complex() | 由实部和虚部创建函数 |
例:
>> a=3+4i
a =
3.0000 + 4.0000i
>> A=abs(a)
A =
5
>> al=real(a)
al =
3
>> a2=imag(a)
a2 =
4
>> angle_a=angle(a)
angle_a =
0.9273
>> b=conj(a)
b =
3.0000 - 4.0000i
4.求和、乘积和差分
(1)求和函数
一般格式:
sum(x) %返回数组x的所有值之和,这里x表示一个数组
sum(X) %返回矩阵X各列元素之和的矩阵
comsum(x) %返回一个数组x中元素累计和的向量
comsum(X) %返回矩阵X各列元素之和的矩阵,和sun(X)的结果相同
例.创建一个三维数组B并对其求和及累积和:
>> B(:,:,1)=[1 2 3;2 3 1;3 2 1]
B =
1 2 3
2 3 1
3 2 1
>> B(:,:,2)=[2 4 6;4 6 2;6 4 2]
B(:,:,1) =
1 2 3
2 3 1
3 2 1
B(:,:,2) =
2 4 6
4 6 2
6 4 2
>> Varsum=sum(B)
Varsum(:,:,1) =
6 7 5
Varsum(:,:,2) =
12 14 10
>> VarCsum=cumsum(B)
VarCsum(:,:,1) =
1 2 3
3 5 4
6 7 5
VarCsum(:,:,2) =
2 4 6
6 10 8
12 14 10
(2)乘积函数
一般格式:
函数名 | 说明 |
prod(x) | 返回数组x中各元素乘积,x表示数组 |
prod(A) | 返回按列向量的所有元素的积,然后组成一行向量 |
prod(A,dim) | 给出dim维内的元素乘积 |
cumprod(x) | 返回一个x中各元素累计积的向量,也就是第2个元素是x中前两个元素的累计积 |
cumprod(A) | 返回一个矩阵,其中列元素是A中列元素的累计积 |
cumprod(A,dim) | 给出在dim维内的累计积 |
例.创建三维数组B并对其求积及累计积:
>> B(:,:,1)=[1 2 3;2 3 1;3 2 1]
B(:,:,1) =
1 2 3
2 3 1
3 2 1
B(:,:,2) =
2 4 6
4 6 2
6 4 2
>> B(:,:,2)=[2 4 6;4 6 2;6 4 2]
B(:,:,1) =
1 2 3
2 3 1
3 2 1
B(:,:,2) =
2 4 6
4 6 2
6 4 2
>> Varprod=prod(B)
Varprod(:,:,1) =
6 12 3
Varprod(:,:,2) =
48 96 24
>> VarCprod=cumprod(B)
VarCprod(:,:,1) =
1 2 3
2 6 3
6 12 3
VarCprod(:,:,2) =
2 4 6
8 24 12
48 96 24
(3)差分函数
调用格式 | 说明 |
diff(x) | 给出一个长度为n-1的向量,它的元素是长度为n的向量x中相邻元素的差,如果x=(x1,x2,...,xn),则diff(x)=(x2-x1,x3-x2,...,xn-(xn-1)) |
diff(A) | 在A的第一维内计算相邻元素的差分。对于二维矩阵来说,即diff(A)=A(2:m,:)-A(1:m-1,:) |
diff(x,k) | 求出第k次差分,diff(x,2)和diff(diff(x))等价 |
diff(A,k,dim) | 在dim维内求出第k次差分 |
例.已知向量x求其差分:
>> x=[1 3 7 12 35 78]
x =
1 3 7 12 35 78
>> Vard1=diff(x)
Vard1 =
2 4 5 23 43
>> Vard2=diff(Vard1)
Vard2 =
2 1 18 20
5.最大值和最小值
函数格式 | 说明 |
max(x) | 返回x中的最大值;如果x为复数,则返回abs(x)的最大值 |
max(X) | 返回一个矩阵,该矩阵的元素包含矩阵X中第一维元素中的最大值。例如,X是一个二维矩阵,则返回的函数为一个向量,它的第一个元素即X中的第一列的最大值,以此类推。若X为复数,则返回abs(X)的最大值 |
max(A,B) | 返回一个与A,B同维数的矩阵,该矩阵的每个元素均为A,B矩阵相同位置元素的最大值 |
min(x) | 返回x中的最小值;如果x为复数,则返回abs(x)的最小值 |
min(X) | 返回一个矩阵,该矩阵的元素包含矩阵X中第一维元素中的最小值。例如,X是一个二维矩阵,则返回的函数为一个向量,它的第一个元素即X中的第一列的最小值,以此类推。若X为复数,则返回abs(X)的最小值 |
min(A,B) | 返回一个与A,B同维数的矩阵,该矩阵的每个元素均为A,B矩阵相同位置的最小值 |
例.创建三维数组B,并求其最大值:
>> B(:,:,1)=[1 2 3;2 3 1;3 2 1]
B(:,:,1) =
1 2 3
2 3 1
3 2 1
B(:,:,2) =
2 4 6
4 6 2
6 4 2
>> B(:,:,2)=[2 4 6;4 6 2;6 4 2]
B(:,:,1) =
1 2 3
2 3 1
3 2 1
B(:,:,2) =
2 4 6
4 6 2
6 4 2
>> max(B)
ans(:,:,1) =
3 3 3
ans(:,:,2) =
6 6 6
>> whos
Name Size Bytes Class Attributes
A 1x1 8 double
B 3x3x2 144 double
VarCprod 3x3x2 144 double
VarCsum 3x3x2 144 double
Vard1 1x5 40 double
Vard2 1x4 32 double
Varprod 1x3x2 48 double
Varsum 1x3x2 48 double
a 1x1 16 double complex
a2 1x1 8 double
al 1x1 8 double
angle_a 1x1 8 double
ans 1x3x2 48 double
b 1x1 16 double complex
x 1x6 48 double
6.简单统计命令
函数 | 说明 |
mean(x) | 求出向量x的算术平均值 |
mean(A,dim) | 给出一个1xnx...xp的矩阵,它包含A中第1维的各个平均值。如果给出了dim,就在dim维内计算 |
median(x) | 求出向量x中元素的中值 |
median(A,dim) | 给出一个1xnx...xp的矩阵,它包含A中第1维各列的中值。如果给出了dim,就在dim维内计算 |
std(x) | 求出向量x中元素的标准差 |
std(A,dim) | 给出一个1xnx...xp的矩阵,它包含A中第1维各列的标准差。如果给出了dim,就在dim维内计算标准差 |
例.求算术平均值和中值:
>> A=[1.4 9.3 3.5;1.8 9.8 3.2;1.6 10.2 3.9];
>> mean(A)
ans =
1.6000 9.7667 3.5333
>> mean(A,2)
ans =
4.7333
4.9333
5.2333
>> Varmed=median(A)
Varmed =
1.6000 9.8000 3.5000
>> Varstd=std(A)
Varstd =
0.2000 0.4509 0.3512
7.排序
函数 | 说明 |
sort(x) | 返回一个向量x的元素按递增排序的向量。如果元素是复数,则使用绝对值进行排序,即sort(abs(x)) |
[y,ind]=sort(x) | 返回下标向量ind,即y=x(ind).另外,向量y是x中元素按递增排序得到的 |
sort(A,dim) | 对A中各列按递增排序,注意矩阵的行已被改变。如果给出了dim,则在dim维内进行排序 |
[B,Ind]=sort(A) | 返回矩阵Ind和矩阵B,矩阵B的列为矩阵A中按递增排序的列,矩阵Ind的每列对应于上面提到的向量中列ind |
sortrows(X,col) | 对矩阵A的各行按递增排序。如果行的元素是复数,它们以abs(x)为主,以angle(x)为辅进行排序,如果给出col,则根据指定的列数对行进行排序 |
例.对给定矩阵升序降序排序:
>> B=[0 5 5;3 0 3;5 3 0]
B =
0 5 5
3 0 3
5 3 0
>> [Ascend,Ind]=sort(B)
Ascend =
0 0 0
3 3 3
5 5 5
Ind =
1 2 3
2 3 2
3 1 1
>> Var_Descend=flipud(sort(B))
%把矩阵sort(B)上下翻转,并把翻转后的新矩阵返回Var_Descend
Var_Descend =
5 5 5
3 3 3
0 0 0
8.关系和逻辑运算及多项式运算
(1)关系操作符
关系操作符 | 功能说明 | 关系操作符 | 功能说明 |
< | 小于 | >= | 大于或者等于 |
<= | 小于等于 | == | 等于 |
> | 大于 | ~= | 不等于 |
例:
>> a=magic(3) %输入一个魔方阵列
a =
8 1 6
3 5 7
4 9 2
>> a>4*ones(3) %将a与全为4的数组比较
ans =
1 0 1
0 1 1
0 1 0
(2)逻辑操作符
逻辑操作符 | 说明 |
& | 与 |
&& | 只是用于标量,表示“与” |
| | 或 |
|| | 只是用于标量,表示“或” |
~ | 非 |
xor | 异或 |
例:
>> a=[1,2,-3,0,0];
>> b=[0,1,0,2,0];
>> a&b
ans =
0 1 0 0 0
>> a|b
ans =
1 1 1 1 0
>> -a
ans =
-1 -2 3 0 0
>> xor(a,b)
ans =
1 0 1 1 0
(3)关系与逻辑函数
函数名称 | 功能介绍 |
xor(x) | 异或运算 |
any(x) | 如果向量x中有非0元素则返回1,否则返回0 |
all(x) | 如果向量x中所有元素非0则返回1,否则返回0 |
isequal(x,y) | x和y对于元素相等时置1,否则置0 |
ismember(x,y) | 若x元素是y是子集,相应x元素置1,否则置0 |
例:
>> a=[1,2,-3,0,0];
>> b=[0,1,0,2,0];
>> any(a)
ans =
1
>> all(a)
ans =
0
>> isequal(a,b)
ans =
0
(4)多项式运算
函数名称 | 功能介绍 |
polyval(p,x) | 计算多项式p,如果x是一个标量,则计算出多项式在x点的值;如果x是一个向量或者一个矩阵,则计算出多项式在x中所有元素上的值 |
[y,err]=polyval(p,x,E) | 计算向量x的多项式p的值。同上,计算结果在y中,同时还根据polyfit命令给出的矩阵E返回一个误差估计向量err |
polyvalm(p,A) | 直接对矩阵A进行多项式计算。不是像上个命令一样对每个元素进行多项式计算,而是计算p(A)=P1An+p2An+... |
poly(A) | 计算矩阵A的特征多项式向量 |
poly(x) | 给出一个长度为n+1的向量,其中的元素是次数为n的多项式的系数。这个多项式的根是长度为n的向量x中的元素 |
compan(p) | 计算带有系数p的多项式的友矩阵A,这个矩阵的特征多项式为p |
roots(p) | 计算特征多项式p的根,是一个长度为n的向量,也就是方程p(x)=0的解。表达式poly(roots(p))=p为真,结果可以是复数 |
conv(p,q) | 计算多项式p和q的乘积,也可以认为是p和q的卷积 |
[k,r]=deconv(p,q) | 计算多项式p除q。k是商多项式,r是残多项式。这个计算等价于p和q的逆卷积 |
例:给定两个多项式和
。试进行以下计算:
(1)计算多项式在x=1处的值。
(2)两个多项式相乘,得到一个新的多项式。
(3)求多项式的根。
解:
>> p2=[2 3 -5];
>> p3=[3 0 0 -4];
>> var_valuel=polyval(p2,1)
var_valuel =
0
>> var_value2=polyval(p3,1)
var_value2 =
-1
>> p5=conv(p2,p3)
p5 =
6 9 -15 -8 -12 20
>> roots2=roots(p2)
roots2 =
-2.5000
1.0000
>> roots3=roots(p3)
roots3 =
-0.5503 + 0.9532i
-0.5503 - 0.9532i
1.1006
三、如何进行矩阵的转置、求逆、行列式等运算?
MATLAB可以使用多种函数来进行矩阵的转置、求逆和行列式等运算,以下是一些常用的示例:
1.矩阵转置:使用' '或者.'操作符
例如,对于一个3x2的矩阵A,可以使用以下方式进行转置:
A = [1 2; 3 4; 5 6];
B = A'; % 使用'操作符
C = A.'; % 使用.'操作符
2.矩阵的逆:使用inv()函数
例如,对于一个3x3的矩阵A,可以使用以下方式求逆:
A = [1 2 3; 4 5 6; 7 8 9];
B = inv(A);
如果矩阵A没有逆,MATLAB会返回一个警告或错误信息。在求逆之前应该检查矩阵是否可逆。
3.矩阵的行列式:使用det()函数
例如,对于一个3x3的矩阵A,可以使用以下方式求行列式:
A = [1 2 3; 4 5 6; 7 8 9];
B = det(A);
行列式的值是一个标量。
除此之外,还有其他一些函数可以进行矩阵运算,如矩阵乘法('*'操作符或者mtimes()函数)、矩阵分解(如LU分解、QR分解等)和特征值分解(eig()函数)等。使用不同的函数根据实际需要进行矩阵运算即可。
四、如何进行常见的三角函数、指数函数、对数函数等数学函数的计算?
MATLAB中有很多内置函数可以进行常见的数学函数计算,以下是常用的数学函数及其在MATLAB中的函数名:
- 三角函数:sin(x), cos(x), tan(x), asin(x), acos(x), atan(x)
- 指数函数:exp(x)
- 对数函数:log(x), log10(x), log2(x)
- 幂函数:power(x,y), x^y
以上函数中,x和y一般为数字或向量,表示对这些数字或向量进行对应的数学运算。
另外,MATLAB还提供了符号计算工具箱(Symbolic Math Toolbox),可以对符号表达式进行计算,包括符号三角函数、符号指数函数、符号对数函数等。可以使用syms命令定义符号变量,使用相应的符号函数进行计算。例如:
syms x
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
exp(x)
log(x)
log10(x)
log2(x)
如果需要进行高级的数学计算(如微积分、矩阵计算、傅里叶变换等),可以使用MATLAB中的相应工具箱(如Symbolic Math Toolbox、Optimization Toolbox、Signal Processing Toolbox等)。
五、如何进行多项式的求解和拟合?
MATLAB提供了多种方法来进行多项式的求解和拟合。以下是其中常用的几种方法:
1.使用polyfit函数进行多项式拟合。
该函数可以根据给定的数据点,使用最小二乘法拟合出一个n次多项式,并返回多项式系数。例如,要拟合一个2次多项式,可以使用以下代码:
% 定义x和y为数据点
x = [1, 2, 3, 4, 5];
y = [0, 2, 3, 4, 5];
% 进行2次多项式拟合
p = polyfit(x, y, 2);
% 输出多项式系数
disp(p);
2.使用polyval函数求解多项式函数值。
polyval函数可以根据给定的多项式系数和自变量,求解多项式函数值。例如,要求解上面拟合的2次多项式在x=6处的函数值,可以使用以下代码:
% 求解2次多项式在x=6处的函数值
y = polyval(p, 6);
% 输出函数值
disp(y);
3.使用roots函数求解多项式的根。
roots函数可以根据多项式系数,求解出多项式的根。例如,要求解2次多项式的根,可以使用以下代码:
% 定义2次多项式的系数
a = [1, -3, 2];
% 求解多项式的根
r = roots(a);
% 输出根
disp(r);
以上这些方法可以满足大部分多项式求解和拟合的需求。如果需要更高级的功能,可以参考MATLAB文档中的其他函数和工具箱。
六、如何进行数值积分和微分?
MATLAB中有许多函数可以用于数值积分和微分。下面简单介绍其中几个常用的函数:
- 数值积分:
-
quad函数:可以用于一维数值积分。例如:
f = @(x) x^2 + 2*x + 1; a = 0; b = 1; Q = quad(f,a,b) % Q为积分结果
-
dblquad函数:可以用于二维数值积分。例如:
f = @(x,y) x.^2 + y.^2; x1 = 0; x2 = 1; y1 = 0; y2 = 1; Q = dblquad(f,x1,x2,y1,y2) % Q为积分结果
- 数值微分:
-
diff函数:可以用于求函数的一阶或二阶导数。例如:
x = linspace(0,1,100); y = exp(x); dydx = diff(y)./diff(x); % 求y的一阶导数 d2ydx2 = diff(y,2)./diff(x(1:end-1)); % 求y的二阶导数 plot(x,y,x(1:end-1),dydx,x(1:end-2),d2ydx2) legend('y','y''','y''''')
-
gradient函数:可以用于求函数在网格上的梯度。例如:
[x,y] = meshgrid(-2:0.1:2,-2:0.1:2); f = x.^2 + y.^2; [Gx,Gy] = gradient(f,0.1,0.1); % 求f在0.1间隔网格上的梯度 quiver(x,y,-Gx,-Gy) % 绘制矢量场图
以上仅是示例,实际情况中还有很多其他函数可以用于数值积分和微分。需要根据具体问题进行选择。
七、如何进行常微分方程(ODE)和偏微分方程(PDE)的求解?
MATLAB中提供了多种用于求解常微分方程(ODE)和偏微分方程(PDE)的函数和工具箱,下面分别做简介。
求解常微分方程(ODE)
1.ode45函数
ode45函数是MATLAB中最常用的求解常微分方程的函数,它使用龙格-库塔(RK)法求解初值问题(IVP),可以处理非刚性问题和刚性问题。语法为:
[t,y] = ode45(odefun,tspan,y0,options)
其中,odefun为求解的ODE方程,tspan为求解区间,y0为初始值,options为可选参数,用于调整求解参数。
2.ode23函数
ode23函数和ode45函数类似,也是用于求解ODE问题的。不同之处在于它使用较简单的RK法,适用于求解非刚性问题。语法为:
[t,y] = ode23(odefun,tspan,y0,options)
3.ode113函数
ode113函数也是用于求解ODE问题的函数,它使用自适应的Adams方法和龙格-库塔法,适用于求解高精度的非刚性问题。语法为:
[t,y] = ode113(odefun,tspan,y0,options)
求解偏微分方程(PDE)
MATLAB中提供了两种工具箱用于求解偏微分方程:PDE工具箱和偏微分方程工具箱。
1.利用PDE工具箱求解PDE问题
PDE工具箱是MATLAB中常用的工具箱之一,它能够处理二维和三维的偏微分方程问题。使用PDE工具箱可以进行网格划分、求解和可视化等操作。可以通过PDE工具箱中的“偏微分方程器”来进行求解。使用方法如下:
-
打开MATLAB并创建一个新的PDE应用程序
-
选择“偏微分方程器”工具
-
输入PDE问题的系数、边界条件、初始条件、求解区域和网格划分等信息
-
进行求解,并用可视化工具查看结果
2.利用偏微分方程工具箱求解PDE问题
偏微分方程工具箱是MATLAB中的另一种工具箱,用于求解二维和三维的偏微分方程问题。可以通过偏微分方程工具箱中的各种函数来进行求解。常用的函数包括pdepe、pdetool、pde23s、pde23t和pde45等。使用方法如下:
-
输入PDE问题的系数、边界条件、初始条件、求解区域和网格划分等信息
-
调用相应的函数进行求解
-
可以进行结果可视化、后处理等操作
以上是MATLAB中求解常微分方程和偏微分方程的基本方法,需要注意的是,在使用相应的函数时,需要根据具体情况选择合适的函数,并进行参数设置和结果处理。
八、如何使用MATLAB的符号计算工具箱进行符号计算?
MATLAB的符号计算工具箱可以帮助实现符号计算。具体步骤如下:
1.打开MATLAB,并在命令窗口输入sym命令,创建符号计算变量:
>> syms x y
2.输入需要计算的表达式。例如,要计算x+y的和与积,可以输入以下命令。
>> z = x + y
>> w = x * y
3.对符号计算变量进行操作。例如,可以计算表达式的导数、积分、简化等。
>> diff(z)
>> diff(w, x)
>> int(z)
>> simplify(z + z)
4.MATLAB还提供了一些特定的符号计算函数,如求解方程、矩阵运算、微分方程求解等。
>> solve(x^2 + y^2 == 1, x)
>> A = sym('1 2;3 4')
>> det(A)
>> dsolve('Dy = y', 'y(0) = 1')
以上为基本的使用方法,符号计算工具箱还有许多高级功能,如多项式运算、计算机代数、符号计算设置、符号函数等,需要进一步的学习和掌握。