2015-03-23 6 views
0

Кто-нибудь знает, как извлечь последние значения интертации внутри цикла? Например, у меня есть последовательная итерацияКак взять последнее значение внутри цикла итерации цикла?

94.53630, 94.53630, 94.53630, 99.57083, 101.29593, 101.46015, 101.46150, 101.46150, 101.46150, 101.46150. Это делается на каждом этапе, но я хочу извлечь только последний (101.46150). Потому что я запускаю цикл for for 9 раз, и я смотрю на конец значений итерации 9. В этом скрипте R я хочу взять после первой итерации только один x.new с соответствующими значениями вероятности.

# | ------------------------------------------------------------------------------------------------------------------------------------------ 
# | The CDF and PDF functions for product models. My original data is well fitted to Persoan Type-3 
# | From the diffination of Quantiles we set our F(x) and derivatives of F(x) as follow: 
# | Q(p)= { x:Pr(X<=x)=p } or equivalently ; Q(p)= { x:Pr(X<=x)- p =0 } --------- > (1) 
# | CDF1 = F1(x) ---------------------------------------------------------------- >> (2) 
# | CDF2 = F2(x) ---------------------------------------------------------------- >> (3) 
# | PDF1 = f1(x) ---------------------------------------------------------------- >> (4) 
# | PDF2 = f2(x) ---------------------------------------------------------------- >> (5) 
# | Using the above five model equations I want to calculate quantils for the given probability values. 
# | This lead Us to Newton-Raphson algorithm ;(Newton Method leads to the recurrence) 
# | # | Qx+1 = X[k]- F(x)-prob/F'(x) ------------------------------------------------- >>> (6) 
# | Where ;; 
# | F(x) = F1(x) *F2(x) - prob = 0 ,,,,, the CDF function -------------------- >>> (7) 
# | F'(x) = f1(x)*F2(x) + f2(x)*F1(x) ,,,,, the PDF function ------------------ >>>> (8) 
# | prob=c(0.5,0.65,0.70,0.75,0.80,0.85,0.90,0.95,0.998,0.999) 
# | 
# | ----------------------------------------------------------------------------------------------------------------------------------------- 
rm(list=ls()) 
Sys.setenv(LANGUAGE="en") # to set languege from Polish to English 
setwd("C:/Users/sdebele/Desktop/From_oldcomp/Old_Computer/Seasonal_APP/Data/Data_Winter&Summer") 
# | ----------------------------------------------------------------------------------------------------------------------- 
# | ---------------------------------------------------------------------------------> 
# | ---------------------------------------------------------------------------------> 
# | ------------------------------------------------------------------------------------------------------------------------- 
Fx=function(x) # Equation (7) # ! Evaluate function at old estimate 
{ 

    require(PearsonDS) 
    return(ppearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308)* 
      ppearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522)); 
} 
dFx=function(x) # Equation (8) # ! Evaluate derivative at old estimate 
{ 
    require(PearsonDS) 
    return((dpearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308))* 
      (ppearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522)) + 
      (dpearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522))* 
      ppearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308)); 
} 
# | ------------------------------------------------------------------------------------------------------------------------------------ 
# |Defining Parameters for Newton-Raphson algorithm and while loop 
# | 
# | -------------------------------------------------------------------------------------------------------------------------------------- 
prob=c(0.5,0.65,0.75,0.80,0.85,0.90,0.95,0.998,0.999) 
par(mfrow=c(1,2)) 
par("lwd"=2) 
curve(dFx,from=3,to=70,col="red",lwd=2); 
curve(Fx,from=3,to=70,col="blue",lwd=2); 
start<-locator(n=1)$x; 
col=rainbow(20) 
x.new<-NULL; 
x.new<-cbind(x.new,start); 
n=1; 
niter=1 ; # ! Number of iterations 
niter_max = 100; # ! Maximum of iterations allowed 
counter=1 
# | -------------------------------------------------------------------------------------------------------------------------- 
# | Here we start calculating quantiles 
# | 
# | ----------------------------------------------------------------------------------------------------------------------- 
for(i in 1:length(prob)) 
{ 

    while (niter < niter_max) 

    { 

    Fx=function(x) # Equation (7) # ! Evaluate function at old estimate 
    { 

     require(PearsonDS) 
     return(ppearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308)* 
       ppearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522)-prob[i]); 
    } 

    dFx=function(x) # Equation (8) # ! Evaluate derivative at old estimate 
    { 
     require(PearsonDS) 
     return((dpearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308))* 
       (ppearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522)) + 
       (dpearsonIII(x,shape=1.492779 ,location=3.295901, scale=9.212522))* 
       ppearsonIII(x,shape=3.743843 ,location= 0,scale= 7.976308)); 
    } 
# | ------------------------------------------------------------------------------------------------------------------------------------- 
# | A function of the Newton-Raphson algorithm to calculate quantiles of product model 
# | Description : Applies the Newton-Raphson algorithm to find x such that Qx+1 = X[k]- F(x)/F'(x) == 0. 
# | Returns the value of x at which Qx+1 = X[k]- F(x)/F'(x) == 0. 
# | -------------------------------------------------------------------------------------------------------------------------------- 
    Newton.Raphson <-function(Fx,dFx,x) # Equation (6) 
    { 

     if (abs(dFx(x))<10*.Machine$double.eps) 
      { 
      return (x); 
      } else 
      { 
      return(x-Fx(x)/dFx(x)); # ! Calculate new estimate 
      } 
     } 
     n=n+1 
     x.new<-c(x.new,Newton.Raphson(Fx,dFx,x.new[n-1])); 
     abline(a=Fx(x.new[n])-dFx(x.new[n])*x.new[n],b=dFx(x.new[n]),col=col[n-1]); 
     if(abs(x.new[n]-x.new[n-1])<100*.Machine$double.eps) break; 
    niter = niter+1 ; 
    Sys.sleep(1) 
    } 

    x.new[i]<-cbind(x.new[i]); 
    cat(paste()) 
    print(paste("at each doing step i--------------------------------------------------------- >",prob[i],x.new)) 

} 
# | -------------------------------------------------------------------------------------------------------------------------------------- 
# | End of quantile calculation here 
# | ------------------------------------------------------------------------------------------------------------------------------------ 

ответ

0

это зависит от используемого языка:

в R команда: хвост (ваш вектор, индекс). В вашем случае это хвост (ваш вектор, 1). Или: ваш вектор [длина (ваш вектор)]

в matlab и подобных языках yo может использовать аналогичную команду для последней.

или вы можете использовать счетчик внутри цикла, например

counter=1 
loop{ 
............ 
if(counter == your number){ 
    x=value 
    break 
} 
counter=counter+1 
} 

или вы можете просто сохранить последнее значение. пример

value=0 
loop{ 
.................... 
value = value from current step 

} 
+0

Спасибо, это полезно ответить; но, тем не менее, это не работает для меня, я выложу свой r-код с указанным выше вопросом. – user3828732

Смежные вопросы