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에 코드가있다!
@jonnat에 감사드립니다. 나는 네가 한 말을 이해하지만 코드 작성 방법은 모르지만 노력하고있어. – marco
@marco에서'B' 함수는 단순히'x'에 의존하는 램프가 될 것입니다. 예를 들어, B의 몸체는'y = (x-tinit)/(tfinal-tinit) * (Bmax-Bmin) + Bmin' 일 수 있습니다. – foglerit
이 문제를 바라 보면서 일주일을 지났습니다. 분명히 내가 할 수있는 일. B는 처음에는 "램프"가있는 행렬입니다 (그리고 아마도 마지막 행에있을 것입니다). B의 크기는 nz x 크기 (t)입니다. @jonnat 나는 당신의 "길"이 옳을 수 있다고 생각하지만, 나는 성문화하고 검증 할 필요가있다. 감사합니다. – marco