如何循环重新计算R中的公式? [英] How to do a loop to re-calculate the formula in R?

查看:152
本文介绍了如何循环重新计算R中的公式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是如何使用循环(while)来获得最终的Tb和Theta_T?

My question is how to use loop(while) to get the final "Tb" and "Theta_T"?

Tmax = c(35.0,30.0,28.0,25.0,25.5,26.0)
Tmin = c(15.4,15.8,13.2,9.8,9.5,9.4)
X = c(0.233,0.233,0.220,0.065,0.138,0.083)
D = c(12,25,46,41,45,62)
Ts = 40
To = 30
Tbo = 0

## calculate Theta_g by Tbo ##

if (Tbo<Tmin){ 
  Theta_g = (Tmax+Tmin)/2
} else if (Tbo<Tmax & Tbo>Tmin){
  Theta_g = (Tmax+Tmin)/2+(Tbo-Tmin)^2/2*(Tmax-Tmin)
} else 
  Theta_g = Tbo

##calculate Theta_a by Tbo ##
if (To>Tmin & Tmax<Ts){
  Theta_a=(Ts-Tbo)*(Tmax-To)^2/(2*(Ts-To)*(Tmax-Tmin))
} else if (To>Tmin & Tmax>=Ts){
  Theta_a=(Tmax*(Tmax-2*Tbo)-To*(Ts-Tbo)+Ts*Tbo)/(2*(Ts-To))
} else if (Tmin>=To & Tmin<Ts & Tmax<Ts){
  Theta_a=(Ts-Tbo)*(Tmax+Tmin-2*To)/(2*(Tmax-Tmin))
} else if (Tmin>=To & Tmin<Ts & Tmax>Ts){
  Theta_a=(Tmax+Tmin)/2-Tbo-(To-Tbo)*(Ts-Tmin)^2/(2*(Ts-To)*(Tmax-Tmin))
} else 
  Theta_a=(Tmax+Tmin)/2-Tbo

## Theta_s
Theta_s = (Theta_g-Theta_a)*D

## Linear formular: Theta_s/X=Theta_T+Tb(D/X)
y = Theta_s/X
x = D/X

##Least square linear regress simulation
Tb = sum((x-mean(x))*(y-mean(y)))/sum((x-mean(x))^2)
Theta_T = mean(y)-Tb*mean(x)

运行循环的条件是:当| Tb-Tbo |> = 0.01时,让Tbo = Tb,然后返回,应用新的Tbo获取新的Tb,直到| Tb-Tbo |< 0.01

The condition to run loop is: when |Tb-Tbo|>=0.01, let Tbo=Tb, and then go back, apply the new "Tbo" to get the new "Tb", until |Tb-Tbo|<0.01

推荐答案

如评论所示:

首先运行你的代码:

  X = c(0.233,0.233,0.220,0.065,0.138,0.083)
  D = c(12,25,46,41,45,62)
  Ts = 40
  To = 30
  Tbo = 0

  ## calculate Theta_g by Tbo ##

  if (Tbo<Tmin){ 
 Theta_g = (Tmax+Tmin)/2
  } else if (Tbo<Tmax & Tbo>Tmin){
  Theta_g = (Tmax+Tmin)/2+(Tbo-Tmin)^2/2*(Tmax-Tmin)
} else 
Theta_g = Tbo

##calculate Theta_a by Tbo ##
if (To>Tmin & Tmax<Ts){
 Theta_a=(Ts-Tbo)*(Tmax-To)^2/(2*(Ts-To)*(Tmax-Tmin))
 } else if (To>Tmin & Tmax>=Ts){
 Theta_a=(Tmax*(Tmax-2*Tbo)-To*(Ts-Tbo)+Ts*Tbo)/(2*(Ts-To))
   } else if (Tmin>=To & Tmin<Ts & Tmax<Ts){
 Theta_a=(Ts-Tbo)*(Tmax+Tmin-2*To)/(2*(Tmax-Tmin))
    } else if (Tmin>=To & Tmin<Ts & Tmax>Ts){
 Theta_a=(Tmax+Tmin)/2-Tbo-(To-Tbo)*(Ts-Tmin)^2/(2*(Ts-To)*(Tmax-Tmin))
} else 
Theta_a=(Tmax+Tmin)/2-Tbo

 ## Theta_s
 Theta_s = (Theta_g-Theta_a)*D

  ## Linear formular: Theta_s/X=Theta_T+Tb(D/X)
    y = Theta_s/X
    x = D/X

    ##Least square linear regress simulation
    Tb = sum((x-mean(x))*(y-mean(y)))/sum((x-mean(x))^2)
    Theta_T = mean(y)-Tb*mean(x)

然后将while循环添加到您的代码中:

Then add the while loop to your code:

 while ((Tb-Tbo)>=0.01) { 

 Tbo=Tb

  ## calculate Theta_g by Tbo ##

  if (Tbo<Tmin){ 
 Theta_g = (Tmax+Tmin)/2
  } else if (Tbo<Tmax & Tbo>Tmin){
  Theta_g = (Tmax+Tmin)/2+(Tbo-Tmin)^2/2*(Tmax-Tmin)
} else 
Theta_g = Tbo

##calculate Theta_a by Tbo ##
if (To>Tmin & Tmax<Ts){
 Theta_a=(Ts-Tbo)*(Tmax-To)^2/(2*(Ts-To)*(Tmax-Tmin))
 } else if (To>Tmin & Tmax>=Ts){
 Theta_a=(Tmax*(Tmax-2*Tbo)-To*(Ts-Tbo)+Ts*Tbo)/(2*(Ts-To))
   } else if (Tmin>=To & Tmin<Ts & Tmax<Ts){
 Theta_a=(Ts-Tbo)*(Tmax+Tmin-2*To)/(2*(Tmax-Tmin))
    } else if (Tmin>=To & Tmin<Ts & Tmax>Ts){
 Theta_a=(Tmax+Tmin)/2-Tbo-(To-Tbo)*(Ts-Tmin)^2/(2*(Ts-To)*(Tmax-Tmin))
} else 
Theta_a=(Tmax+Tmin)/2-Tbo

 ## Theta_s
 Theta_s = (Theta_g-Theta_a)*D

  ## Linear formular: Theta_s/X=Theta_T+Tb(D/X)
    y = Theta_s/X
    x = D/X

    ##Least square linear regress simulation
    Tb = sum((x-mean(x))*(y-mean(y)))/sum((x-mean(x))^2)
    Theta_T = mean(y)-Tb*mean(x)

   }

这篇关于如何循环重新计算R中的公式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆