紧急求助!在线等待!!!关于循环

Gilbert0525 2003-06-27 05:14:33
此程序是用来求一个经济优化模型的最小值,可是运行时发现 for 好象没有循环
何故??? 急!!!



#include <stdio.h>
#include <math.h>
#define T1 140
#define T2 40
#define tt1 30

#define Q0 598000000
#define Cp1 2220
#define midu1 825
#define niandu1 0.000715

#define midu2 994
#define Cp2 4080
#define niandu2 0.000725

#define i 0.05
#define time (330*24)

#define di 0.020
#define do 0.025
#define Np 2
#define L 6.0

#define Po 100000

#define f1 1.12
#define f2 0.73
#define a 334
#define b 0.73
#define Fc 0.1
#define Zi 1.05

#define Cu 0.00152
#define Ci 0.5
#define Co 0.5
#define K 475.0

double Yu,Yt;
***************************

main()
{ double J(double tt2,double ui);
double y(double tt2);
double tt2,ui;
double min,totle;

Yt=tt2=35.0; Yu=ui=0.50;
totle=J(tt2,ui);
min=totle;
for(ui=0.55;ui<=3.00;ui+=0.10)
{
for(tt2=35.1;tt2<=80.0;tt2+=0.1)
{
if(y(tt2)>=0.9)
{ totle=J(tt2,ui);
if(totle<min)
{
min=totle;
Yt=tt2;
Yu=ui;
}
}
}

}

printf("ui=%f,t2=%f",Yu,Yt);
}



double tm(double tt2)
{
double z;
double mid1,mid2;
mid1=T1-tt2;
mid2=T2-tt1;
z=(mid1-mid2)/log(mid1/mid2);
return z;
}


double Q()
{
double z;
double ms;
ms=Q0/time;
ms=ms/3600.0;
z=(1+i)*Cp1*ms*(T1-T2);
return z;
}


double A(double tt2)
{ double y(double tt2);
double tm(double tt2);
double z;
z=Q()/(y(tt2)*K*tm(tt2));
return z;
}


double Vi(double tt2)
{ double Q();
double z;
z=Q()/(Cp2*(tt2-tt1)*midu2);
return z;
}


double A2(double tt2,double ui)
{ double Vi(double tt2);
double z;
z=4*Vi(tt2)*do*Np*L/(pow(di,2)*ui);
return z;
}


double Pi(double ui)
{
double z;
double mid1,mid2;
mid1=0.4458*pow(niandu2,0.261);
mid2=di*midu2*ui;
mid2=pow(mid2,0.261);
mid1=mid1/mid2;
mid2=L*pow(midu2*ui,2)*Zi*Np/(2*midu2*di);
z=mid1*mid2;
return z;
}


double Ei(double ui)
{ double Pi(double ui);
double z;
double mid1,mid2;
mid1=Pi(ui)*ui*pow(di,2);
mid2=4000*midu2*do*Np*L;
z=mid1/mid2;
return z;
}


double Eo(double tt2,double ui)
{ double Vi(double tt2);
double z;
double Vo,mid1,mid2;
Vo=Q0/(time*3600*midu1);
mid1=Po*Vo*pow(di,2)*ui;
mid2=4000*do*L*Vi(tt2)*Np;
z=mid1/mid2;
return z;
}


double Wu(double tt2)
{ double Vi(double tt2);
double z;
z=Vi(tt2)*midu2;
return z;
}


double J(double tt2,double ui)
{ double Wu(double tt2);
double Ei(double ui);
double A(double tt2);
double Eo(double tt2,double ui);
double z;
double mid1,mid2,mid3,mid4;
mid1=1.3*f1*f2*a*pow(A(tt2),b)*Fc;
mid2=3600*time*Cu*Wu(tt2);
mid3=Ei(ui)*Ci*time*A(tt2);
mid4=Eo(tt2,ui)*time*Co*A(tt2);
z=mid1+mid2+mid3+mid4;
return z;
}




double y(double tt2)
{
double z;
double P,R,mid1,mid2,mid3;
P=(tt2-tt1)/(T1-tt1);
R=(T1-T2)/(tt2-tt1);
mid1=pow(pow(R,2)+1,0.5);
mid2=2-P*(1+R-mid1);
mid3=2-P*(1+R+mid1);
if(mid3>=0.0){

mid2=log(mid2/mid3);
mid1=mid1/(R-1);
mid3=log((1-P)/(1-P*R));
z=mid1*mid3/mid2;
return z;}
else printf("Yu=%f,Yt=%f",Yu,Yt);
}
...全文
38 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
three1103 2003-06-29
  • 打赏
  • 举报
回复
关注。。。。。。
楼主是不是在建模哦!
three1103 2003-06-29
  • 打赏
  • 举报
回复
关注。。。。。。
楼主是不是在建摸哦
1cs1ak1 2003-06-27
  • 打赏
  • 举报
回复



关注。。。。。。


Gilbert0525 2003-06-27
  • 打赏
  • 举报
回复
up
zteliubin 2003-06-27
  • 打赏
  • 举报
回复
道歉道歉!

可一可以,我一时糊涂,向楼上所有人道歉!
如果不能循环,应该是循环条件的问题!
没时间帮你看了!
zteliubin 2003-06-27
  • 打赏
  • 举报
回复
for(;;)里面的循环变量不能用浮点数!


你可以*100然后循环!
Gilbert0525 2003-06-27
  • 打赏
  • 举报
回复
更改如下:以避免那些无意义的数据,但还是没有循环!!!


float y(float tt2)
{
float z;
float P,R,mid1,mid2,mid3;
P=(tt2-tt1)/(T1-tt1);
R=(T1-T2)/(tt2-tt1);
mid1=pow(pow(R,2)+1,0.5);
mid2=2-P*(1+R-mid1);
mid3=2-P*(1+R+mid1);
if(mid3>0)
{
mid2=log(mid2/mid3);
mid1=mid1/(R-1);
mid3=log((1-P)/(1-P*R));
z=mid1*mid3/mid2;
return z;}
else return 100;
}



float tm(float tt2)
{
float z;
float mid1,mid2;
mid1=T1-tt2;
mid2=T2-tt1;
z=(mid1-mid2)/log(mid1/mid2);
return z;
}



float Q()
{
float z;
float ms;
ms=Q0/time;
ms=ms/3600.0;
z=(1+i)*Cp1*ms*(T1-T2);
return z;
}


float A(float tt2)
{
float z;
if(y(tt2)!=100){
z=Q()/(y(tt2)*K*tm(tt2));
return z;}
else return 100;
}



float Vi(float tt2)
{
float z;
z=Q()/(Cp2*(tt2-tt1)*midu2);
return z;
}



float A2(float tt2,float ui)
{
float z;
z=4*Vi(tt2)*do*Np*L/(pow(di,2)*ui);
return z;
}



float Pi(float ui)
{
float z;
float mid1,mid2;
mid1=0.4458*pow(niandu2,0.261);
mid2=di*midu2*ui;
mid2=pow(mid2,0.261);
mid1=mid1/mid2;
mid2=L*pow(midu2*ui,2)*Zi*Np/(2*midu2*di);
z=mid1*mid2;
return z;
}



float Ei(float ui)
{
float z;
float mid1,mid2;
mid1=Pi(ui)*ui*pow(di,2);
mid2=4000*midu2*do*Np*L;
z=mid1/mid2;
return z;
}



float Eo(float tt2,float ui)
{
float z;
float Vo,mid1,mid2;
Vo=Q0/(time*3600*midu1);
mid1=Po*Vo*pow(di,2)*ui;
mid2=4000*do*L*Vi(tt2)*Np;
z=mid1/mid2;
return z;
}



float Wu(float tt2)
{
float z;
z=Vi(tt2)*midu2;
return z;
}



float J(float tt2,float ui)
{
float z;
float mid1,mid2,mid3,mid4;
if(A(tt2)!=100)
{
mid1=1.3*f1*f2*a*pow(A(tt2),b)*Fc;
mid2=3600*time*Cu*Wu(tt2);
mid3=Ei(ui)*Ci*time*A(tt2);
mid4=Eo(tt2,ui)*time*Co*A(tt2);
z=mid1+mid2+mid3+mid4;
return z;}
else return 100;
}


main()
{
float tt2,ui;
float min,totle;
float Yt,Yu;
Yt=tt2=35.0; Yu=ui=0.50;
totle=J(tt2,ui);
min=totle;
for(ui=0.55;ui<=3.00;ui+=0.10)
{
for(tt2=35.1;tt2<=80.0;tt2+=0.1)
{ if(J(tt2,ui)!=100) {
totle=J(tt2,ui);
if(totle<min)
{
min=totle;
Yt=tt2;
Yu=ui;
}
}
}
}
printf("ui=%5.2f,t2=%5.2f",Yu,Yt);
}
jingfei303 2003-06-27
  • 打赏
  • 举报
回复
楼上说的问题很严肃的
我看得好好想想着一段程序
19830711 2003-06-27
  • 打赏
  • 举报
回复
UP
Gilbert0525 2003-06-27
  • 打赏
  • 举报
回复
整个过程中还应让 y(float tt2)函数中应该使用 mid3>0 y>0.9 的值进行计算才有意义
但是如何实现舍弃无意义的值的循环呢?
Gilbert0525 2003-06-27
  • 打赏
  • 举报
回复
main()中tt2=30.1应该从tt2=35.0开始,但是运行后显示 被0除 ?? 何故
lzh7800 2003-06-27
  • 打赏
  • 举报
回复
帮你改了以下,可以循环的

#include <stdio.h>
#include <math.h>
#define T1 140
#define T2 40
#define tt1 30

#define Q0 598000000
#define Cp1 2220
#define midu1 825
#define niandu1 0.000715

#define midu2 994
#define Cp2 4080
#define niandu2 0.000725

#define i 0.05
#define time (330*24)

#define di 0.020
#define do 0.025
#define Np 2
#define L 6.0

#define Po 100000

#define f1 1.12
#define f2 0.73
#define a 334
#define b 0.73
#define Fc 0.1
#define Zi 1.05

#define Cu 0.00152
#define Ci 0.5
#define Co 0.5
#define K 475.0


// *****************

float y(float tt2)
{
float z;
float P,R,mid1,mid2,mid3;
P=(tt2-tt1)/(T1-tt1);
R=(T1-T2)/(tt2-tt1);
mid1=pow(pow(R,2)+1,0.5);
mid2=2-P*(1+R-mid1);
mid3=2-P*(1+R+mid1);
mid2=log(mid2/mid3);
mid1=mid1/(R-1);
mid3=log((1-P)/(1-P*R));
z=mid1*mid3/mid2;
return z;
}

// ******************

float tm(float tt2)
{
float z;
float mid1,mid2;
mid1=T1-tt2;
mid2=T2-tt1;
z=(mid1-mid2)/log(mid1/mid2);
return z;
}

// ***********************

float Q(float tt2)
{
float z;
float ms;
ms=Q0/time;
ms=ms/3600.0;
z=(1+i)*Cp1*ms*(T1-T2);
return z;
}

// ***********************

float A(float tt2)
{
float z;
z=Q(tt2)/(y(tt2)*K*tm(tt2));
return z;
}

// ************************

float Vi(float tt2)
{
float z;
z=Q(tt2)/(Cp2*(tt2-tt1)*midu2);
return z;
}

// ***********************

float A2(float tt2,float ui)
{
float z;
z=4*Vi(tt2)*do*Np*L/(pow(di,2)*ui);
return z;
}

// ***********************

float Pi(float ui)
{
float z;
float mid1,mid2;
mid1=0.4458*pow(niandu2,0.261);
mid2=di*midu2*ui;
mid2=pow(mid2,0.261);
mid1=mid1/mid2;
mid2=L*pow(midu2*ui,2)*Zi*Np/(2*midu2*di);
z=mid1*mid2;
return z;
}

// ************************

float Ei(float ui)
{
float z;
float mid1,mid2;
mid1=Pi(ui)*ui*pow(di,2);
mid2=4000*midu2*do*Np*L;
z=mid1/mid2;
return z;
}

// ************************

float Eo(float tt2,float ui)
{
float z;
float Vo,mid1,mid2;
Vo=Q0/(time*3600*midu1);
mid1=Po*Vo*pow(di,2)*ui;
mid2=4000*do*L*Vi(tt2)*Np;
z=mid1/mid2;
return z;
}

// ************************

float Wu(float tt2)
{
float z;
z=Vi(tt2)*midu2;
return z;
}

// *************************

float J(float tt2,float ui)
{
float z;
float mid1,mid2,mid3,mid4;
mid1=1.3*f1*f2*a*pow(A(tt2),b)*Fc;
mid2=3600*time*Cu*Wu(tt2);
mid3=Ei(ui)*Ci*time*A(tt2);
mid4=Eo(tt2,ui)*time*Co*A(tt2);
z=mid1+mid2+mid3+mid4;
return z;
}

// ***************************
// ***************************

main()
{
float tt2,ui;
float min,totle;
float Yt,Yu;
Yt=tt2=30.0; Yu=ui=0.50;
totle=J(tt2,ui);
min=totle;
for(ui=0.55;ui<=3.00;ui+=0.10)
{
for(tt2=30.1;tt2<=80.0;tt2+=0.1)
{
totle=J(tt2,ui);
if(totle<min)
{
min=totle;
Yt=tt2;
Yu=ui;
}
}
}
printf("ui=%5.2f,t2=%5.2f",Yu,Yt);
}

// ****************************

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧