Matlab中如何用符号表达式填充矩阵?
How can matrix be filled with symbolic expressions in Matlab?
我想使用 for 循环用符号表达式填充矩阵的行。
代码如下。
for r=1:N
%dL/dfidot
frst(r)=diff(L,fidot(r));
%d/dt*dL/dfidot
dfrst(r)=diff(frst(r),fi(r))*fidot(r)+diff(frst(r),fidot(r))*fiddot(r);
%dL/dfi
scnd(r)=diff(L,fi(r));
%EQ of Motion
EqofMotion(r)=dfrst(r)-scnd(r)==0;
acc(r)=solve(EqofMotion(r),fiddot(r));
C=zeros(N,1);
C(r,1)=acc(r);
end
acc是符号数组,C是矩阵。这个想法是使用循环用 acc(r) 填充 C 矩阵的第 r 行。程序给我一个错误如下:
The following error occurred converting from sym to double:
Error using symengine (line 58)
DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use VPA.
Error in Trying (line 56)
C(r,1)=acc(r);
我该如何解决这个问题?
您正在尝试将符号值分配给双精度数组元素。这是非法的,因为符号对象不能隐式转换为 double
。
要解决这个问题,可以让C
数组成为一个符号对象数组:
C = sym(zeros(N,1)); % now C is an array containing the symbolic expressions 'zero'
C(r,1) = acc(r);
我想使用 for 循环用符号表达式填充矩阵的行。 代码如下。
for r=1:N
%dL/dfidot
frst(r)=diff(L,fidot(r));
%d/dt*dL/dfidot
dfrst(r)=diff(frst(r),fi(r))*fidot(r)+diff(frst(r),fidot(r))*fiddot(r);
%dL/dfi
scnd(r)=diff(L,fi(r));
%EQ of Motion
EqofMotion(r)=dfrst(r)-scnd(r)==0;
acc(r)=solve(EqofMotion(r),fiddot(r));
C=zeros(N,1);
C(r,1)=acc(r);
end
acc是符号数组,C是矩阵。这个想法是使用循环用 acc(r) 填充 C 矩阵的第 r 行。程序给我一个错误如下:
The following error occurred converting from sym to double:
Error using symengine (line 58)
DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use VPA.
Error in Trying (line 56)
C(r,1)=acc(r);
我该如何解决这个问题?
您正在尝试将符号值分配给双精度数组元素。这是非法的,因为符号对象不能隐式转换为 double
。
要解决这个问题,可以让C
数组成为一个符号对象数组:
C = sym(zeros(N,1)); % now C is an array containing the symbolic expressions 'zero'
C(r,1) = acc(r);