在符号函数 symsum 中索引数组时下标索引错误
Subscript indices error while indexing array within symbolic function symsum
我正在尝试求解一个简单的递归方程,但我遇到了非常基本的问题,我认为 MATLAB 专家可以轻松解决。
所以这是我的代码的简短版本:
clear all
%%%INPUT DATA
gconst = [75 75];
kconst = [200 200];
tau = [.01667 .14153];
%%% TIME Span
t = [0 .001 .002 .003 .004 .005];
%%% Definition of the functions g(x) and k(y)
syms g(x) k(y)
g(x) = gconst(1)*exp(-x/tau(1))+gconst(2)*exp(-x/tau(2));
k(y) = kconst(1)*exp(-y/tau(1))+kconst(2)*exp(-y/tau(2));
%%% Defining initial conditons
nu = zeros(1,7);
nu(1)= 3.64e-1;
nu(2)= 3.64e-1;
%%% nu(3) is required
int(sym('i'))
nu(3)=nu(1)*(3*k(t(3)-t(2))+g(t(3)-t(2))-g(t(3)))...
+symsum(nu(i)*(3*k(t(3)-t(i+1))-3*k(t(3)-t(i-1))... %symsum line 1
+g(t(3)-t(i+1))-g(t(3)-t(i-1))), i, 1, 3))... %symsum line 2
/(3*k(0)+g(0));
您可以忽略整个 symsum
部分,因为没有,代码仍然无法运行。
这是一个非常简单的代码,但是在 运行 之后,我得到了这个错误:
Subscript indices must either be real positive integers or logicals.
这个错误出现在我定义nu(3)
的那一行。
我想听听你的意见。
编辑 1:k(y) 而不是 k(x)。
编辑 2:zeros(1,7) 而不是 zeros(7)。
注意 1:代码在没有 symsum
部分和编辑 1 之后工作。
你想做的做不到
原因是,您正在使用符号求和索引 i
.
索引数组 t = [0 .001 .002 .003 .004 .005]
所以虽然
syms i
S1 = symsum( i, i, 1,3)
有效
syms t i
t = [1 2 3];
S1 = symsum( t(i), i, 1,3)
不会工作,也没有办法绕过它,因为值 1 ... 3
是 在索引 之后计算的。您需要彻底重新考虑您的方法。
除此之外,您可能需要 k(y)
而不是 k(x)
。这就是为什么没有 symsum 部分代码也不能工作的原因。
使用 i
作为变量名不再是问题,但不应该被用来避免误解。
我正在尝试求解一个简单的递归方程,但我遇到了非常基本的问题,我认为 MATLAB 专家可以轻松解决。 所以这是我的代码的简短版本:
clear all
%%%INPUT DATA
gconst = [75 75];
kconst = [200 200];
tau = [.01667 .14153];
%%% TIME Span
t = [0 .001 .002 .003 .004 .005];
%%% Definition of the functions g(x) and k(y)
syms g(x) k(y)
g(x) = gconst(1)*exp(-x/tau(1))+gconst(2)*exp(-x/tau(2));
k(y) = kconst(1)*exp(-y/tau(1))+kconst(2)*exp(-y/tau(2));
%%% Defining initial conditons
nu = zeros(1,7);
nu(1)= 3.64e-1;
nu(2)= 3.64e-1;
%%% nu(3) is required
int(sym('i'))
nu(3)=nu(1)*(3*k(t(3)-t(2))+g(t(3)-t(2))-g(t(3)))...
+symsum(nu(i)*(3*k(t(3)-t(i+1))-3*k(t(3)-t(i-1))... %symsum line 1
+g(t(3)-t(i+1))-g(t(3)-t(i-1))), i, 1, 3))... %symsum line 2
/(3*k(0)+g(0));
您可以忽略整个 symsum
部分,因为没有,代码仍然无法运行。
这是一个非常简单的代码,但是在 运行 之后,我得到了这个错误:
Subscript indices must either be real positive integers or logicals.
这个错误出现在我定义nu(3)
的那一行。
我想听听你的意见。
编辑 1:k(y) 而不是 k(x)。
编辑 2:zeros(1,7) 而不是 zeros(7)。
注意 1:代码在没有 symsum
部分和编辑 1 之后工作。
你想做的做不到
原因是,您正在使用符号求和索引 i
.
t = [0 .001 .002 .003 .004 .005]
所以虽然
syms i
S1 = symsum( i, i, 1,3)
有效
syms t i
t = [1 2 3];
S1 = symsum( t(i), i, 1,3)
不会工作,也没有办法绕过它,因为值 1 ... 3
是 在索引 之后计算的。您需要彻底重新考虑您的方法。
除此之外,您可能需要 k(y)
而不是 k(x)
。这就是为什么没有 symsum 部分代码也不能工作的原因。
使用 i
作为变量名不再是问题,但不应该被用来避免误解。