\qquad 顾名思义,符号变量在matlab中的作用可类比与数学中的“未知量”.
例1:
sym x,y
a=3*x+y;
b=6*x;
>>a+b
9*x+y
即定义了符号变量之后,我们得到的式子便可使用“多项式四则运算”进行操作。当然,需要注意一点,得到的结果 a + b = 9 x + y a+b=9x+y a+b=9x+y任然是符号变量,只能进行代数运算,不能赋值使用(即不能当成函数),在下面部分我们将表明如何将符号变量代数式转化为函数。
\qquad 下面介绍符号变量的矩阵运算.若想进行符号变量的矩阵运算,则运算对象必须是sym型元素。
例2:
sym a,b,c,d
A=[a,b;c,d];
B=[c;d];
>>A*B
[a*c+b*d;c^2+d^2]
\qquad 由上例可知,当需要运算的矩阵特别多时,我们若手动一个个建立符号变量则非常麻烦,下面介绍如何建立多个符号变量 ( x 1 , x 2 , . . . x n ) (x_1,x_2,...x_n) (x1,x2,...xn)
例3:
sym('x',[1,n])
>>x(1)
x1
>>x(2)
x2
x>>(1)+x(2)-x(3)
x1+x2-x3
\qquad 匿名函数的定义为: 函数名=@(自变量)表达式
例4:
f=@(x)2*x^2
>>f(2)
4
除此之外还可以建立多变量(多元)函数
例5:
f=@(x,y)x^2+y^2
>>f(1,3)
10
例6:
f=@(x)x(1)+x(2)^2-3*x(3)
>>f([1,1,1])
-1
注: 例6的输入必须是向量, f f f可视为 R 3 → R \mathbb R^3\rightarrow \mathbb R R3→R的映射.
向量值函数: 顾名思义,输出为向量 f f f可视为 R n → R m \mathbb R^n\rightarrow \mathbb R^m Rn→Rm的映射
例7:
f=@(x)[x(1),3*x(2),5*x(3)^2]
>>f
[x1, 3*x2, 5*x3^2]
>>f([0,0,1])
[0,0,5]
由符号变量转为可赋值的匿名函数需要用到matlabFunction函数。具体操作如下例:
例8:转成多元函数
sym x,y
f=3*x+4*y
ff=matlabFunction(f);
>>f
@(x,y) 3*x+4*y
例9:转成输入为向量的函数
sym x,y
c=[x,y];
f=3*x+4*y
ff=matlabFunction(f,'Vars',{c});
>>f
@(inl) 3*inl(:,1)+4*inl(:,2)
>>f([1,2])
11
例10:转为向量值匿名函数,前提转换目标为向量值符号元素
a=sym('a',[1,n])
M=sym(zeros(n,1));
for i=1:n
M(i)=a(i);
end
>>M
>nX1 sym
fun=matlabFunction(M)
>>fun
@(a1,a2,...,an) [a1;a2;...;an]
若想转为向量值输入则
fun1=matlabFunction(M,'Vars',{a})
注意:最后输入的符号向量必须为M中的符号向量!!即M中的符号为 a 1 , a 2 , a 3 a1,a2,a3 a1,a2,a3则 a a a必须为三个代表 a a a的符号变量。此处的 a a a即为第一行代码定义的 a a a。
\qquad 假设创建了1X1的结构体,若想从中提取单个分量则结构体名.分量名即可。
例11:结构体创建及提取元素
a=struct(1,1);
a.first=a*b;
a.second=c*d;
>>a.first
例12:批量提取
d=struct2cell(a)
>>d
2X1 cell
>>d{1}
a*b