在 matlab 中可以进行符号索引吗?

Are symbolic indexing possible in matlab?

我有这样一个函数lnn1c(ii, j, n, n1),它将索引iijj作为参数,其中Kdk1Wdg是一些数组,wg(n) 是另一个函数有点 alpha*(n-3)Gdg 是一个符号变量。

function lnn1c=lnn1c(ii, j, n, n1)
    syms k1Vzdg
    global Gdg Wdg Kdk1
    lnn1c=Gdg-i*(-(Wdg(ii)-Wdg(j))+(wg(n)-wg(n1))+...
        (Kdk1(ii)-Kdk1(j))*k1Vzdg);
end

我想在我的脚本中对索引 iij 从 1 到 4 的表达式 lnn1c(ii, j, n, n1) 求和。 我试过这样的代码

syms ii jj n n1
sum(subs(sum(subs(lnn1c(ii, jj, n, n1), ii, 1:4)),jj, 1:4))

但我一直收到这样的错误

Indexing input must be numeric, logical or ':'.

任何帮助对我来说都是非常有价值的。

不,符号索引没有意义。

但是,您可能会混淆想法。您正在有效地做 subs(f(ii, jj, n, n1), ii, 1:4)。你输入 ii 然后用 1:4 代替它。为什么不把 1:4 作为输入?

就这样:

for jj=1:4
    s=s+sum(lnn1c(1:4, jj, n, n1));
end

您当然需要 nn1 的数值...... 由于您没有显示整个代码,因此很难知道您在做什么,但是有提示表明您根本不需要符号数学,您只是在混合编程概念。

正如 Ander 指出的那样,您可以在两个 for 循环中完成,不会有任何问题:

s=0;
for jj=1:4
    for ii=1:4
    s=s+sum(lnn1c(ii, jj, n, n1));
    end
end

但是,如果您打算在 1 行内完成,为什么不试试 arrayfun?

s=sum(arrayfun(@(ii) sum(arrayfun(@(jj) lnn1c(ii, jj, n, n1),1:4),1:4));

而且不需要 syms ;)