【问题标题】:Are symbolic indexing possible in matlab?matlab中是否可以进行符号索引?
【发布时间】:2017-07-06 19:40:04
【问题描述】:

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

我想在我的脚本中对从 1 到 4 的索引 iij 的表达式 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))

但我不断收到这样的错误

索引输入必须是数字、逻辑或':'。

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

【问题讨论】:

  • 注意:创建将被返回的符号变量和全局变量inside 一个函数是一个糟糕的主意。您需要以更智能的方式重写代码的所有提示,否则您会发现更多问题。还要注意i 是虚数单位,所以它的j。写ii 来避免它,然后写j 并不能解决问题!

标签: matlab indexing symbols


【解决方案1】:

不,符号索引没有意义。

但是,您可能会混淆想法。你实际上是在做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 的数值...... 由于您没有展示整个代码,因此很难知道您在做什么,但有提示说您根本不需要符号数学,您只是在混合编程概念。

【讨论】:

    【解决方案2】:

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

    而且不需要符号 ;)

    【讨论】:

    • 您的一个解决方案不起作用。它抛出一个错误:Error using arrayfun sym output type当前未实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2011-03-19
    • 2022-12-10
    相关资源
    最近更新 更多