MATLAB关于符号变量的迭代运算
参考资料:matlab批量创建符号变量并放数组里 - 简书 (jianshu.com)
y = sym(zeros(1,4));
for m = 1:4
y(m) = ['x' num2str(m)];
end
以上程序可以用于符号变量的迭代计算中。 比如需要获得如下符号表达式:
{
y
1
=
x
1
sin
(
x
1
)
y
2
=
x
1
sin
(
x
1
)
+
x
2
sin
(
x
2
)
⋮
y
n
=
∑
k
=
1
n
x
k
sin
(
x
k
)
;
\begin{cases} y_1 &= x_1 \sin(x_1) \\ y_2 &= x_1 \sin(x_1) + x_2 \sin(x_2) \\ &\vdots \\ y_n &= \sum_{k=1}^{n} x_k \sin(x_k); \end{cases}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧y1y2yn=x1sin(x1)=x1sin(x1)+x2sin(x2)⋮=∑k=1nxksin(xk);
可以使用如下程序实现。这里n=4,结果如下图所示。
n = 4;
syms x [n 1]
y = sym(zeros(n,1)); % 将double转换为sym
for i = 1:n
for k = 1:i
y(i) = y(i) + x(k)*sin(x(k));
end
end
但是若在以上程序的第三行代码去掉sym
,就会报错。
n = 4;
syms x [n 1]
y = zeros(n,1); % double类型
for i = 1:n
for k = 1:i
y(i) = y(i) + x(k)*sin(x(k));
end
end
这是因为此时y是一个double
类型的数组,而符号类型(sym
)是无法放在一个double
类型的数组中的。因此,必须先将zeros(n,1)
转换为sym
类型的数组。