我还有其他方法可以为matlab代码编写函数吗?

时间:2017-05-26 19:43:35

标签: matlab optimization

我正在尝试从输入时间的函数中获取值。 现在使用我的代码,评估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

0 个答案:

没有答案