如何定义在For循环中创建元素的向量?

时间:2017-01-08 20:48:40

标签: matlab vector symbolic-math

我想用五个元素定义一个向量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;

如何解决这个问题?

1 个答案:

答案 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)