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

How to define a vector that its elements are created in a For Loop?

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

如何解决这个问题?

您将符号变量与双精度变量混合, Double 包含一个值,只有当 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 的值,您仍然需要输入 a 的值。

Matlab help suggest subs function for replacing a in wanted value:

y = subs(x,a,4)

在这一点上 y 仍然是一个符号,您需要使用

将其设为双精度
double(y)