我想用五个元素定义一个向量X:
syms a
X = zeros(1,5)
X(1) = 1;
for k=1:4
X(k+1)=X(k)+a^2;
end
实际上我需要有向量X,它的元素应该基于变量a。但是当我编写上面的代码时,我在Matlab中遇到了错误:
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 Code2 (line 5)
X(k+1)=X(k)*a^2;
如何解决这个问题?
答案 0 :(得分:0)
你在符号变量之间混合加倍, 双打持有一个值,只有当a是double并且已经保存一个值(该值可以是函数的输入)时,您可以使用您编写的循环。 例如:
function ret=testFunc(a)
X = zeros(1,5)
X(1) = 1;
for k=1:4
X(k+1)=X(k)+a^2;
end
ret=X
end
如果您想使用syms(用于其他符号分析),您也可以将x定义为符号,例如:
syms a x
x(1)=1;
for i=2:5
x(i)=x(i-1)+a.^2;
end
现在,x是a的函数,如果你打印x,你将得到:
[ 1, a^2 + 1, 2*a^2 + 1, 3*a^2 + 1, 4*a^2 + 1]
要评估x的值,您仍需要输入一个值。
Matlab帮助建议用于替换所需值的subs函数,如下所示:
y = subs(x,a,4)
在那一点上,y仍然是一个符号,你需要使用
使它成为一个双重符号double(y)