如何在 Matlab 中提取符号函数矩阵
How to extract a matrix of symbolic functions in Matlab
syms c A(t) v(t)
A(t) =
0
c*sin(tt(t))
c*cos(tt(t))
如何得到X = A(2) = c*sin(tt(t));
(第二行的函数)?如果我输入 A(2)
,结果将如下(它用一个常量代替函数,这不是我想要的):
>> A(2)
ans =
0
c*sin(tt(2))
c*cos(tt(2))
在 matlab 中你必须使用 "subs(f)" 函数来计算函数。
首先创建函数:
syms g(x)
g(x) = x^3;
之后分配 X 值:
x=2;
然后,如果您使用 subs 函数计算 g,结果是预期值 8,但它被分配给符号函数 gnew。这个新的符号函数正式依赖于变量 x。
gnew = subs(g)
函数调用,g(x),returnsg的值对应x的当前值。例如,如果将值 2 赋给变量 x,则调用 g(x) 等同于调用 g(2)
g2 = g(x)
g2 =
4
g2 = g(2)
g2 =
4
问题是您将 A
定义为符号函数 (symfun
),而不是符号表达式数组。相反:
syms c A tt(t)
A = [0;
c*sin(tt(t));
c*sin(tt(t))];
现在 A(2)
将 return c*sin(tt(t))
。
或者,如果您无法更改 A(t)
的定义,则需要将其分配给中间变量以将其转换为符号表达式数组:
syms c A(t) tt(t)
A(t) = [0;
c*sin(tt(t));
c*cos(tt(t))];
B = A(t);
然后,B(2)
将returnc*sin(tt(t))
。您还可以使用 formula
来提取底层表达式:
B = formula(A):
syms c A(t) v(t)
A(t) =
0
c*sin(tt(t))
c*cos(tt(t))
如何得到X = A(2) = c*sin(tt(t));
(第二行的函数)?如果我输入 A(2)
,结果将如下(它用一个常量代替函数,这不是我想要的):
>> A(2)
ans =
0
c*sin(tt(2))
c*cos(tt(2))
在 matlab 中你必须使用 "subs(f)" 函数来计算函数。
首先创建函数:
syms g(x)
g(x) = x^3;
之后分配 X 值:
x=2;
然后,如果您使用 subs 函数计算 g,结果是预期值 8,但它被分配给符号函数 gnew。这个新的符号函数正式依赖于变量 x。
gnew = subs(g)
函数调用,g(x),returnsg的值对应x的当前值。例如,如果将值 2 赋给变量 x,则调用 g(x) 等同于调用 g(2)
g2 = g(x)
g2 =
4
g2 = g(2)
g2 =
4
问题是您将 A
定义为符号函数 (symfun
),而不是符号表达式数组。相反:
syms c A tt(t)
A = [0;
c*sin(tt(t));
c*sin(tt(t))];
现在 A(2)
将 return c*sin(tt(t))
。
或者,如果您无法更改 A(t)
的定义,则需要将其分配给中间变量以将其转换为符号表达式数组:
syms c A(t) tt(t)
A(t) = [0;
c*sin(tt(t));
c*cos(tt(t))];
B = A(t);
然后,B(2)
将returnc*sin(tt(t))
。您还可以使用 formula
来提取底层表达式:
B = formula(A):