在 matlab 中可以进行符号索引吗?
Are symbolic indexing possible in matlab?
我有这样一个函数lnn1c(ii, j, n, n1)
,它将索引ii
和jj
作为参数,其中Kdk1
和Wdg
是一些数组,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
我想在我的脚本中对索引 ii
和 j
从 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
您当然需要 n
和 n1
的数值......
由于您没有显示整个代码,因此很难知道您在做什么,但是有提示表明您根本不需要符号数学,您只是在混合编程概念。
正如 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 ;)
我有这样一个函数lnn1c(ii, j, n, n1)
,它将索引ii
和jj
作为参数,其中Kdk1
和Wdg
是一些数组,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
我想在我的脚本中对索引 ii
和 j
从 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
您当然需要 n
和 n1
的数值......
由于您没有显示整个代码,因此很难知道您在做什么,但是有提示表明您根本不需要符号数学,您只是在混合编程概念。
正如 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 ;)