在符号函数symsum中

时间:2015-09-16 12:15:37

标签: arrays matlab symbolic-math

我试图解决一个简单的递归方程,但我遇到了非常基本的问题,我认为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部分,因为没有,代码仍然无效。 这是一个非常简单的代码,但在运行之后,我收到了这个错误:

  

下标索引必须是实数正整数或逻辑。

在我定义nu(3)的行中找到此错误。 我想听听你的意见。

编辑1:k(y)而不是k(x)。

编辑2:零(1,7)而不是零(7)。

注1:代码在没有symsum部分的情况下以及在编辑1之后工作。

1 个答案:

答案 0 :(得分:2)

您无法做到的事情。

原因是,您使用符号求和索引t = [0 .001 .002 .003 .004 .005]索引数组i

所以,而

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作为变量名不再是问题,但不应该用来避免误解。