Matlab для решения ODE применяется к государственной космической системе, входные данные зависят от времени - PullRequest
0 голосов
/ 27 января 2012

Я попал в государственную систему, с «принудительными» входами в границах.Мое уравнение СС: zp = A * z * B. (A - квадратная матрица, а B - столбец)

Если B - шаг (по времени опыта), проблем нет, потому что яможно использовать

  tevent = 2;
  tmax= 5*tevent;

  n =100;
  dT = n/tmax;
  t = linspace(0,tmax,n);
  u0 = 1 * ones(size(z'));
  B = zeros(nz,n);
  B(1,1)= utop(1)';
  A = eye(nz,nz);

  [tt,u]=ode23('SS',t,u0);

и SS:

  function zp = SS(t,z)
          global A B
          zp = A*z + B;
  end

Моя проблема в том, что я применил отстой, поэтому B будет зависеть от времени.

  utop_init= 20;
  utop_final = 50;
  utop(1)=utop_init;
  utop(tevent * dT)=utop_final;

  for k = 2: tevent*dT -1
      utop(k) = utop(k-1) +(( utop(tevent * dT) - utop(1))/(tevent * dT));
  end

  for k = (tevent * dT) +1 :(tmax*dT)
      utop(k) = utop(k-1);
  end

  global A B
  B = zeros(nz,1);
  B(1,1:n) = utop(:)';
  A = eye(nz,nz);

Iнаписал новое уравнение (чтобы попытаться решить), проблему, но я не могу настроить «шаг по времени», и я не получаю ау с 22x100 (что является целью).

  for k = 2 : n
  u=solveSS(t,k,u0);
  end

У SolveSS есть код:

function [ u ] = solveSS( t,k,u0)

  tspan = [t(k-1) t(k)];

  [t,u] = ode15s(@SS,tspan,u0);

      function zp = SS(t,z)
          global A B
          zp = A*z + B(:,k-1);
      end

  end

Я надеюсь, что вы можете помочь!

1 Ответ

2 голосов
/ 27 января 2012

Вы должны определить функцию B, которая постоянно меняется с t, и передать ее как дескриптор функции.Таким образом, вы позволите решателю ODE эффективно регулировать временные шаги (ваше использование жесткого решателя ODE ode15s предполагает, что пошаговое изменение времени еще более важно)

Форма вашего кода будет чем-токак это:

function [ u ] = solveSS( t,k,u0)

    tspan = [t(k-1) t(k)];

    [t,u] = ode15s(@SS,tspan,u0,@B);

        function y = B(x)
            %% insert B calculation
        end

        function zp = SS(t,z,B)
            global A
            zp = A*z + B(t);
        end

    end
...