строить символические уравнения итеративно в Matlab - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь решить уравнения Юла – Уокера для процесса авторегрессии заданного порядка P по заданному числу лагов - символически с помощью Matlab's Symbolic Math Toolbox .

Уравнения связывают автокорреляцию с запаздыванием k, rho_k с коэффициентами процесса AR phi_i, где i = 1 ... P и P - порядок процесса.Я хочу решить их за rho, учитывая phi.

Я придумал реализацию, которая, кажется, работает, но я не уверен, является ли это наилучшим способом решения этой задачи, особенно способомЯ строю уравнения итеративно:

phi = sym('phi', [1 3]);

n = 10;
P = numel(phi);
nLags = max(P + 1, n);

syms eqns

% ρ(0) = 1
syms rho0
eqns(1) = (rho0 == 1);

% ρ(k) = sum_i^P φ_i ρ(|k - i|) for k > 0
rho = [rho0, sym('rho', [1, nLags - 1])];
for k = 1 : nLags - 1
    syms summands
    for i = 1 : P
        summands(i) = phi(i) * rho(abs(k - i) + 1);
    end
    eqns(k + 1) = (rho(k + 1) == sum(summands));
end

solution = solve(eqns, rho);

Я пытался использовать symsum вместо внутреннего цикла, но обнаружил, что не могу использовать переменную числового цикла k в символическом выражении.Есть ли лучший способ сделать это?

...