2017-04-06 138 views
1

我正在用Matlab編寫一個函數來模擬中風病人住院時間。我很難存儲我的輸出值。 這裏是我的功能:在Matlab中存儲函數循環中的值

function [] = losdf(age, strokeType, dest) 

% function to mdetermine length of stay in hospitaal of stroke patients 
% t = time since admission (days); 
% age = age of patient; 
% strokeType = 1. Haemorhagic, 2. Cerebral Infarction, 3. TIA; 
% dest = 5.Death 6.Nursing Home 7. Usual Residence; 

alpha1 = 6.63570; 
beta1 = -0.03652; 
alpha2 = -3.06931; 
beta2 = 0.07153; 
theta0 = -8.66118; 
theta1 = 0.08801; 
mu1 = 22.10156; 
mu2 = 2.48820; 
mu3 = 1.56162; 
mu4 = 0; 
nu1 = 0; 
nu2 = 0; 
nu3 = 1.27849; 
nu4 = 0; 
rho1 = 0; 
rho2 = 11.76860; 
rho3 = 3.41989; 
rho4 = 63.92514; 

for t = 1:1:365 
p = (exp(-exp(theta0 + (theta1.*age)))); 

if strokeType == 1 
    initialstatevec = [1 0 0 0 0 0 0]; 
elseif strokeType == 2 
    initialstatevec = [0 1 0 0 0 0 0]; 
else 
    initialstatevec = [0 0 (1-p) p 0 0 0]; 
end 

lambda1 = exp(alpha1 + (beta1.*age)); 
lambda2 = exp(alpha2 + (beta2.*age)); 

Q = [ -(lambda1+mu1+nu1+rho1) lambda1 0 0 mu1 nu1 rho1; 
0 -(lambda2+mu2+nu2+rho2) lambda2 0 mu2 nu2 rho2; 
0 0 -(mu3+nu3+rho3) 0 mu3 nu3 rho3; 
0 0 0 -(mu4+nu4+rho4) mu4 nu4 rho4; 
0 0 0 0 0 0 0; 
0 0 0 0 0 0 0; 
0 0 0 0 0 0 0]; 

Pt = expm(t./365.*Q); 
Pt = Pt(strokeType, dest); 
Ft = sum(initialstatevec.*Pt); 
Ft 

end 
end 

然後運行我的功能我用: losdf(75,3,7)

我想從0到365繪製在圖中我英尺的值天。做這個的最好方式是什麼?

我是否需要首先將值存儲在數組中,如果是這樣的話,最好的方法是什麼?

回答

1

許多方法可以做到這一點,一種簡單的方法是在循環中將每個數據點保存到一個向量,並在退出循環後繪製該向量。

... 
Ft = zeros(365,1); % Preallocate Ft as a vector of 365 zeros 
for t = 1:365 
... 
    Ft(t) = sum(initialstatevec.*Pt); % At index "t", store your output 
... 
end 
plot(1:365,Ft); 
+0

完全感謝您的支持 – user3497570