我正在尝试从输入时间的函数中获取值。 现在使用我的代码,评估100个数据点大约需要10分钟,180个数据点需要20分钟。我相信长期运行的功能是动脉功能。我还有其他方法可以编写这段代码吗?我是Matlab的新手。
以下是我的职能:
This function grab a value from predictionvalue function.
function grabvalues= grabvalue(tfinal,F,f,z,PS)
tic
grabvalues=zeros(1,length(tfinal));
for i=1:length(tfinal)
grabvalues(i)= predictionvalue(tfinal(i),F,f,z,PS);
end
toc
end
这个功能有三个主要部分;动脉功能,RK4功能和采样时间。 Arterial函数接受shortdata.txt文件并对输出进行线性插值。然后RK4使用Arterial函数获取Sample times的值。
function tis_predicted2 = predictionvalue(tfinal,F,f,z,PS)
%----------------Define Functions-----------%
%Arterial Function
load shortdata.txt
tA=shortdata(:,1);
AA=shortdata(:,2);
function output=AF_function_in(tA_input)
%size(tA);
xq1=0:0.01:tA_input;
vq1=interpn(tA,AA,xq1,'linear');
output=vq1(end);
%plot(xq1,vq1,'-',tA,AA,'o');
%set(gca,'XLim',[0 10])
end
%Two Compartmental Model Functions
fP=@(t,I,P) (F/f)*(AF_function_in(t)- P) - (PS/f)*(P-I); % Hct(mv)=0.45
fI=@(t,I,P) (PS/z)*(P - I);
%Initial Condition
h=0.01;
N=ceil(tfinal/h);
t=zeros(1,N);
P=zeros(1,N);
I=zeros(1,N);
%------------------- RK4 Loop-----------------------------------%
for i=1:N %i=[0, tfinal/h]
% Update t
t(i+1)=t(i)+h;
%Update equation
k1P = fP(t(i) , I(i) , P(i) );
k1I = fI(t(i) , I(i) , P(i) );
k2P = fP(t(i)+0.5*h, I(i)+ 0.5*k1I*h, P(i)+0.5*k1P*h);
k2I = fI(t(i)+0.5*h, I(i)+ 0.5*k1I*h, P(i)+0.5*k1P*h);
k3P = fP(t(i)+0.5*h, I(i)+ 0.5*k2I*h, P(i)+0.5*k2P*h);
k3I = fI(t(i)+0.5*h, I(i)+ 0.5*k2I*h, P(i)+0.5*k2P*h);
k4P = fP(t(i)+h ,I(i)+k3I*h , P(i)+ k3P*h);
k4I = fI(t(i)+h ,I(i)+k3I*h , P(i)+ k3P*h);
I(i+1) = (I(i) + h/6 *(k1I + 2*k2I + 2*k3I + k4I));
P(i+1) = (P(i) + h/6 *(k1P + 2*k2P + 2*k3P + k4P));
end
Tissue_predicted = P*f+I*z;
%-----------------SAMPLING ---------------------------------------------%
tdelta=0.835;
tfinalsub=tfinal+0.000001;
tSamp=zeros(1,ceil(tfinalsub/tdelta));
Samp=zeros(1,ceil(tfinalsub/tdelta));
a(1)=0;
for d = 1:ceil(tfinalsub/tdelta)-1
a(d+1)= a(d)+tdelta/h;
tSamp(d+1)= tSamp(d)+tdelta;
Samp(d+1)= Tissue_predicted(1,ceil(a(d)+1));
end
tis_predicted2 = Samp(end);
end