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

时间:2017-02-17 10:15:36

标签: matlab indexing symbols

我有一个函数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

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

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

但我一直收到这样的错误

  

索引输入必须是数字,逻辑或“:”。

任何帮助对我来说都很有价值。

2 个答案:

答案 0 :(得分:1)

不,符号索引没有意义。

但是,你可能会混淆想法。你实际上在做Consumer。你放subs(f(ii, jj, n, n1), ii, 1:4)然后用1:4替换它。为什么不把ii作为输入?

只是做:

1:4

您肯定需要for jj=1:4 s=s+sum(lnn1c(1:4, jj, n, n1)); end n的数值.... 由于你还没有显示整个代码,很难知道你在做什么,但有一些提示可以说你根本不需要符号数学,而只是混合了编程概念。

答案 1 :(得分:0)

正如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;)