2012-01-27 1 views
0

경계에 "forced"입력이있는 상태 시스템에 있습니다. 내 SS 방정식은 다음과 같습니다. zp = A * z * B. (A는 정사각 행렬 및 B 행렬입니다.)State Space System에 적용된 ODE를 해결하는 Matlab은 입력 시간에 따라 달라집니다.

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는 : 나는 슬롭을 적용, 그래서 B는 시간 의존 할 때

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

내 문제입니다.

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); 

나는이 문제를 (해결하기 위해 노력에) 새로운 방정식을 썼다, 그러나 나는 "시간 간격"을 조정할 수 없습니다, 나는 (목표 인) 22x100와 U를하지 않습니다.

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 

난 당신이 도움이 될 수 있기를 바랍니다 :

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

SolveSS에 코드가있다!

답변

2

t으로 연속적으로 변하는 함수 B을 정의하고 함수 핸들로 전달해야합니다. 당신은 ODE 솔버는 효율적으로 시간 단계를 조정할 수 있습니다이 방법은

이 코드의 형태는이 같은 것 (ode15s의 사용, 딱딱한 ODE 솔버, 가변 시간 스테핑 더욱 중요 제안) :

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 
+0

@jonnat에 감사드립니다. 나는 네가 한 말을 이해하지만 코드 작성 방법은 모르지만 노력하고있어. – marco

+0

@marco에서'B' 함수는 단순히'x'에 의존하는 램프가 될 것입니다. 예를 들어, B의 몸체는'y = (x-tinit)/(tfinal-tinit) * (Bmax-Bmin) + Bmin' 일 수 있습니다. – foglerit

+0

이 문제를 바라 보면서 일주일을 지났습니다. 분명히 내가 할 수있는 일. B는 처음에는 "램프"가있는 행렬입니다 (그리고 아마도 마지막 행에있을 것입니다). B의 크기는 nz x 크기 (t)입니다. @jonnat 나는 당신의 "길"이 옳을 수 있다고 생각하지만, 나는 성문화하고 검증 할 필요가있다. 감사합니다. – marco

관련 문제