0
我已經在狀態系統,在邊界處有「強制」輸入。我的SS方程是:zp = A * z * B(A是方陣和B柱)Matlab解決應用於狀態空間系統的ODE,輸入時間依賴
如果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);
我寫了一個新的公式(以試圖解決)問題,但我不能調整「時間步長」,我不22x100得到U(這是客觀的)。
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
我希望你能幫助!
謝謝你回答@jonnat。我明白你的意思,但是我沒有弄懂如何編寫代碼,但我正在努力。 – marco 2012-01-27 20:47:43
@marco,'B'函數只是依賴於'x'的斜坡。例如,B的主體可能是'y =(x-tinit)/(tfinal-tinit)*(Bmax-Bmin)+ Bmin' – foglerit 2012-01-28 01:10:22
我已經通過了我的一週期待這個問題,我想我需要一個剎車來理解清楚我能做些什麼。 B最初是一個帶有「斜坡」的矩陣(可能在最後一行)。 B的大小爲nz x size(t)。 @jonnat我認爲你的「方式」可能是對的,但我需要編纂和驗證。 謝謝你的病人和時間! – marco 2012-01-28 11:13:26