Advertisement
J0R6EW4P0

EVAPORADORES

May 7th, 2025 (edited)
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 334.18 KB | Software | 0 0
  1. #include<iostream>
  2. #include<cmath>
  3. #include<time.h>
  4. #include<stdlib.h>
  5. #include<fstream>
  6. #include<iomanip>
  7. #include<Eigen/Dense>
  8. #include<ceres/ceres.h>
  9. #include<vector>
  10. #include<algorithm>
  11. #include<numeric>
  12. #include<stdexcept>
  13. #include <ceres/jet.h>
  14. using namespace std;
  15. using namespace Eigen;
  16.  
  17. static const std::vector<double> temperaturas= {32.018,35,40,45,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,212,220,230,240,250,260,270,280,290,300,320,340,360,380,400,420,440,460,480,500,520,540,560,580,600,620,640,660,680,700,705.44};
  18. static const std::vector<double> entalpia_vaporizacion= {1075.4,1073.7,1070.9,1068.1,1065.2,1059.6,1053.9,1048.3,1042.6,1037.0,1031.3,1025.5,1019.8,1013.9,1008.1,1002.1,996.2,990.2,984.1,977.8,971.6,970.3,965.3,958.8,952.3,945.6,938.8,932.0,924.9,917.8,910.5,895.4,879.5,862.9,845.4,826.9,807.2,786.3,764.1,740.3,714.8,687.2,657.4,625.0,589.4,549.7,505.0,453.3,391.1,309.8,167.5,0.0};
  19. static const std::vector<double> presion_vapor= {0.08866,0.09992,0.12166,0.14748,0.17803,0.2563,0.3632,0.5073,0.6988,0.9503,1.2763,1.6945,2.225,2.892,3.722,4.745,5.996,7.515,9.343,11.529,14.125,14.698,17.188,20.78,24.97,29.82,35.42,41.85,49.18,57.53,66.98,89.60,117.93,152.92,195.60,247.1,308.5,381.2,466.3,565.5,680.0,811.4,961.5,1131.8,1324.3,1541.0,1784.4,2057.1,2362,2705,3090,3204};
  20. static const std::vector<double> entalpia_vapor_saturado= {1075.4,1076.7,1078.9,1081.1,1083.3,1087.7,1092.0,1096.4,1100.7,1105.0,1109.3,1113.5,1117.8,1121.9,1126.1,1130.1,1134.2,1138.2,1142.1,1145.9,1149.7,1150.5,1153.5,1157.1,1160.7,1164.2,1167.6,1170.9,1174.1,1177.2,1180.2,1185.8,1190.8,1195.2,1199.0,1202.0,1204.1,1205.3,1205.5,1204.6,1202.5,1198.9,1193.8,1187.0,1178.0,1166.4,1151.4,1131.9,1105.5,1066.7,990.2,902.5};
  21. static const std::vector<double> cp_values= {0.4501,0.4505,0.4511,0.4518,0.4525,0.454,0.4555,0.4571,0.4588,0.4606,0.4625,0.4645,0.4668,0.4693,0.472,0.475,0.4784,0.4821,0.4862,0.4907,0.4957,0.4968,0.5013,0.5074,0.5141,0.5215,0.5295,0.5383,0.5479,0.5582,0.5694,0.5943,0.6226,0.6546,0.6905,0.7306,0.7755,0.8262,0.8839,0.9506,1.029,1.122,1.237,1.38,1.567,1.82,2.185,2.762,3.823,6.529,32.81,1.851E+13};
  22.  
  23. /*Esto es para el NaOH*//*Funciones auxiliares*/
  24. bool validar_coeficientes();
  25. bool validar_presiones();
  26. bool validar_concentraciones();
  27. bool validar_temperatura();
  28. bool validar_alimentacion();
  29. bool ingresar_orden_efectos();
  30. void imprimir_datos();
  31.  
  32. /*ARREGLOS*/
  33. int opcion;
  34. unsigned short int io[9][2],size,termodinamica,efecto[9],incognita[]= {10,10,10,10,10,10,10,10,10,10},label;
  35. double economia,deltaT0;
  36. double L[9];
  37. double T[9];
  38. double U[8];
  39. double P[9];
  40. double x[9];
  41. double H[9];
  42. double hx[9];
  43. double Tsat[9];
  44. double deltaT[9];
  45. double V[9];
  46. double epe[9];
  47. double Licor[9];
  48. double A[9];
  49. double M[9][9];
  50. double m[9][9];
  51. double N[8][2];
  52. double hvap[9];
  53. double Q[8];
  54.  
  55. /*FUNCIONES*/
  56. double contar(double n);
  57. double determinante(double b[9][9],unsigned short int n);
  58. double T_sat(double P);
  59. double P_sat(double T);
  60. double Hg(double T);
  61. double EPE(double x,double T);
  62. double Hx(double x,double T);
  63. double CP(double T);
  64. double Hvap(double T);
  65. bool orden_efectos(int n);
  66. bool resolver(void);
  67. bool resolver2(void);
  68. void escribir(void);
  69. void borrar(void);
  70. void latex(void);
  71. void generar_datos_aleatorios(void);
  72. int main() {
  73.     borrar();
  74.     cout<<"EVAPORADORES M\351LTIPLES EFECTOS (2-9) para NaOH"<<endl;
  75.     cout<<"Creado por Jorge Armando L\242pez Contreras"<<endl;
  76.     do {
  77.         cout<<endl<<"*********************************************"<<endl;
  78.         cout<<"\250Qu\202 desea hacer?"<<endl;
  79.         cout<<"(1) Resolver un problema"<<endl;
  80.         cout<<"(2) Generar un problema"<<endl;
  81.         cout<<"Su opci\242n es: ";
  82.         cin>>opcion;
  83.         if(opcion<1 or opcion>2) {
  84.             cout<<"ERROR: NO EXISTE ESA OPCI\340N"<<endl;
  85.             cout<<"Intente otra vez"<<endl;
  86.         }
  87.     } while(opcion<1 or opcion>2);
  88.     cout<<endl<<"*********************************************"<<endl;
  89.     do {
  90.         cout<<endl<<"*********************************************"<<endl;
  91.         cout<<"\250Qu\202 datos termodin\240micos usar?"<<endl;
  92.         cout<<"(1) Geankoplis"<<endl;
  93.         cout<<"(2) IAPWS (M\265S EXACTO)"<<endl;
  94.         cout<<"Su opci\242n es: ";
  95.         cin>>termodinamica;
  96.         if(termodinamica<1 or termodinamica>2) {
  97.             cout<<"ERROR: NO EXISTE ESA OPCI\340N"<<endl;
  98.             cout<<"Intente otra vez"<<endl;
  99.         }
  100.     } while(termodinamica<1 or termodinamica>2);
  101.     cout<<endl<<"*********************************************"<<endl;
  102.     switch(opcion) {
  103.         case 1: {
  104.             do {
  105.                 do {
  106.                     cout<<"Ingrese el n\243mero de efectos (2-9): ";
  107.                     cin >> size;
  108.                     if (size<2||size>9) {
  109.                         cout<<"ERROR: ingrese un valor entre 2 y 9."<<endl;
  110.                     }
  111.                 } while (size<2||size>9);
  112.                 while(!ingresar_orden_efectos());
  113.                 while(!validar_alimentacion());
  114.                 while(!validar_temperatura());
  115.                 while(!validar_concentraciones());
  116.                 while(!validar_presiones());
  117.                 while(!validar_coeficientes());
  118.                 imprimir_datos();
  119.                 cout<<"\250 Est\240 correcto los datos?"<<endl;
  120.                 cout<<"Ingrese (1) para continuar"<<endl;
  121.                 cout<<"Ingrese (2) para corregir"<<endl;
  122.                 cin>>opcion;
  123.             } while(opcion!=1);
  124.             if(resolver()) {
  125.                 escribir();
  126.             } else {
  127.                 cout<<"El problema no tiene soluci\242n"<<endl;
  128.             }
  129.             break;
  130.         }
  131.         default: {
  132.             do {
  133.                 cout<<"Ingrese el n\243mero de efectos (2-9): ";
  134.                 cin>>size;
  135.                 if(size<2||size>9) {
  136.                     cout<<"ERROR: Ingrese un valor entre 2 y 9."<<endl;
  137.                 }
  138.             } while(size<2||size>9);
  139.             do {
  140.                 cout<<"Ingrese el orden de los efectos (por ejemplo 312, 132, 123 para 3 efectos): ";
  141.                 cin>>opcion;
  142.             } while(!orden_efectos(opcion));
  143.             generar_datos_aleatorios();
  144.             break;
  145.         }
  146.         system("PAUSE");
  147.         return 0;
  148.     }
  149. }
  150. bool resolver(void) {
  151.     double suma;
  152.     unsigned short int contador,iteracion=0;
  153.     /*Analizando las entradas y salidas de cada efecto*/
  154.     for(int i=0; i<size; i++) {
  155.         io[efecto[i]][sale]=efecto[i];
  156.         if(i==0) {
  157.             io[efecto[i]][entra]=0;
  158.         } else {
  159.             io[efecto[i]][entra]=efecto[i-1];
  160.         }
  161.     }
  162.     /*PASO 2: Balance de Materia*/
  163.     L[efecto[size-1]]=L[0]*x[0]/x[efecto[size-1]];
  164.     for(int i=0; i<=size; i++) {
  165.         V[i]=(L[0]-L[efecto[size-1]])/size;
  166.     }
  167.     // Inicializar el flujo msico de lquido en el primer efecto
  168.     L[efecto[0]]=L[0]-V[efecto[0]];
  169.     // Calcular los flujos msicos de lquido en los efectos restantes
  170.     for (int i=1; i<size; ++i) {
  171.         L[efecto[i]]=L[efecto[i-1]]-V[efecto[i]];
  172.     }
  173.     for(int i=0; i<size; i++) {
  174.         x[efecto[i]]=L[0]*x[0]/L[efecto[i]];
  175.     }
  176.     Tsat[size]=T_sat(P[size]);
  177.     Tsat[0]=T_sat(P[0]);
  178.     /*Paso 3: Suponer las temperaturas de saturación de cada etapa intermedia*/
  179.     for(int i=1; i<size; i++) {
  180.         Tsat[i]=Tsat[0]-i*(Tsat[0]-Tsat[size])/size;
  181.     }
  182.     int aver=-1;
  183.     unsigned short int contador2=0;
  184.     do {
  185.         double V0=V[0];
  186.         do {
  187.             contador=0;
  188.             for(int i=0; i<=size; i++) {
  189.                 Licor[i]=L[i];
  190.             }
  191.             for(int i=0; i<size; i++) {
  192.                 x[efecto[i]]=L[0]*x[0]/L[efecto[i]];
  193.             }
  194.             if(iteracion==0) {
  195.                 for(int i=0; i<size; i++) {
  196.                     if(i==0) {
  197.                         T[1]=Tsat[0]-deltaT[1];
  198.                     } else {
  199.                         T[i+1]=T[i]-epe[i-1]-deltaT[i+1];
  200.                     }
  201.                 }
  202.                 for(int i=1; i<size; i++) {
  203.                     Tsat[i]=T[i]-epe[i-1];
  204.                 }
  205.             }
  206.             for(int i=0; i<size; i++) {
  207.                 epe[i]=EPE(x[i+1],Tsat[i+1]);
  208.             }
  209.             if(iteracion==0) {
  210.                 deltaT[0]=0;
  211.                 for(int i=0; i<size; i++) {
  212.                     deltaT[0]=deltaT[0]+epe[i];
  213.                 }
  214.                 deltaT[0]=Tsat[0]-Tsat[size]-deltaT[0];
  215.                 suma=0;
  216.                 for(int i=0; i<size; i++) {
  217.                     suma=suma+1/U[i];
  218.                 }
  219.                 for(int i=1; i<=size; i++) {
  220.                     deltaT[i]=deltaT[0]*(1/U[i-1])/suma;
  221.                 }
  222.                 deltaT[efecto[0]]=deltaT[efecto[0]]+size;
  223.                 for(int i=2; i<=size; i++) {
  224.                     deltaT[i]=deltaT[i]-1;
  225.                 }
  226.             }
  227.             /*Aqu puede estar la nueva funcin*/
  228.             for(int i=0; i<size; i++) {
  229.                 if(i==0) {
  230.                     T[1]=Tsat[0]-deltaT[1];
  231.                 } else {
  232.                     T[i+1]=T[i]-epe[i-1]-deltaT[i+1];
  233.                 }
  234.             }
  235.             for(int i=1; i<size; i++) {
  236.                 Tsat[i]=T[i]-epe[i-1];
  237.             }
  238.             for(int i=0; i<=size; i++) {
  239.                 if(i<size) {
  240.                     H[i]=Hg(Tsat[i+1])+CP(Tsat[i+1])*epe[i];
  241.                 }
  242.                 hx[i]=Hx(x[i],T[i]);
  243.                 if(i==0) {
  244.                     hvap[i]=Hvap(Tsat[i]);
  245.                 } else {
  246.                     hvap[i]=Hvap(Tsat[i])+CP(Tsat[i])*epe[i-1];
  247.                 }
  248.             }
  249.             for(int i=0; i<=9; i++) {
  250.                 for(int j=0; j<=9; j++) {
  251.                     M[i][j]=0.0;
  252.                 }
  253.             }
  254.             for(int i=0; i<size; i++) {
  255.                 aver++;
  256.                 /*Para alimentacin*/if(i==0) {
  257.                     if(aver==0) {
  258.                         cout<<"ALIMENTACION"<<endl;
  259.                         cout<<"Se llena la fila M["<<efecto[i]<<"]"<<endl;
  260.                     }
  261.                     /*Caso 1:*/if(efecto[i]==1) {/*Caso trivial: La alimentacin ocurre en el primer efecto*/
  262.                         if(aver==0) {
  263.                             cout<<"CASO 1"<<endl<<endl;
  264.                         }
  265.                         M[efecto[i]-1][0]=hvap[efecto[i]-1];
  266.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  267.                         N[efecto[i]-1][0]=(H[efecto[i]-1]-hx[io[efecto[i]][entra]])*L[io[efecto[i]][entra]];
  268.                     }/*Caso 2:*/if(efecto[i]!=1 and io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[size-1]][sale]) {
  269.                         if(aver==0) {
  270.                             cout<<"CASO 2"<<endl<<endl;
  271.                         }
  272.                         M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]-hx[io[efecto[i]][sale]]+H[efecto[i]-1];
  273.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  274.                         N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[efecto[i]-1]-hx[io[efecto[i]][entra]]);
  275.                     }/*Caso 3:*/if(efecto[i]!=1 and io[efecto[i]][sale]!=io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[size-1]][sale]) {
  276.                         if(aver==0) {
  277.                             cout<<"CASO 3"<<endl<<endl;
  278.                         }
  279.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  280.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  281.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  282.                         N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[efecto[i]-1]-hx[io[efecto[i]][entra]]);
  283.                     }/*Caso 4:*/if(efecto[i]!=1 and io[efecto[i]][sale]!=io[efecto[i]-1][entra] and io[efecto[i]-1][sale]==io[efecto[size-1]][sale]) {
  284.                         if(aver==0) {
  285.                             cout<<"CASO 4"<<endl<<endl;
  286.                         }
  287.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  288.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  289.                         N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[efecto[i]-1]-hx[io[efecto[i]][entra]])+L[io[efecto[i]-1][sale]]*hvap[efecto[i]-1];
  290.                     }/*Caso 5:*/if(size==2 and efecto[0]==2) {
  291.                         if(aver==0) {
  292.                             cout<<"CASO 5"<<endl<<endl;
  293.                         }
  294.                         M[efecto[i]-1][1]=hvap[1]-hx[io[efecto[i]][sale]]+H[1];
  295.                         N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[1]-hx[io[efecto[i]][entra]])+L[1]*hvap[1];
  296.                     }
  297.                 } else if(i==size-1) {
  298.                     /*Producto*/if(aver==size-1) {
  299.                         cout<<"PRODUCTO"<<endl;
  300.                         cout<<"Se llena la fila M["<<efecto[i]<<"]"<<endl;
  301.                     }
  302.                     /*Caso 1: */ if(efecto[i]==1 and size==2) {
  303.                         if(aver==size-1) {
  304.                             cout<<"CASO 1"<<endl<<endl;
  305.                         }
  306.                         M[efecto[i]-1][0]=hvap[efecto[i]-1];
  307.                         M[efecto[i]-1][1]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  308.                         N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  309.                     }/*Caso 2: Ocurre con el efecto 1-2 producto en el 2*/if(io[efecto[i]-1][entra]==0 and io[efecto[i]-1][sale]==io[efecto[i]][entra]) {
  310.                         if(aver==size-1) {
  311.                             cout<<"CASO 2"<<endl<<endl;
  312.                         }
  313.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1]-hvap[efecto[i]-1];
  314.                         N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1])-L[io[efecto[i]-1][entra]]*hvap[efecto[i]-1];
  315.                     }/*Caso 3: */if(io[efecto[i]-1][entra]==0 and io[efecto[i]-1][sale]!=io[efecto[i]][entra] and size>2 and efecto[i]>1)  {
  316.                         if(aver==size-1) {
  317.                             cout<<"CASO 3"<<endl<<endl;
  318.                         }
  319.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  320.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  321.                         N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1])-L[io[efecto[i]-1][entra]]*hvap[efecto[i]-1];
  322.                     }/*Caso 4: */if(io[efecto[i]-1][entra]!=0 and io[efecto[i]-1][sale]!=io[efecto[i]][entra]) {
  323.                         if(aver==size-1) {
  324.                             cout<<"CASO 4"<<endl<<endl;
  325.                         }
  326.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  327.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  328.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  329.                         N[efecto[i]-1][0]=L[efecto[size-1]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  330.                     }/*Caso 5: */if(size>2 and efecto[i]==1) {
  331.                         if(aver==size-1) {
  332.                             cout<<"CASO 5"<<endl<<endl;
  333.                         }
  334.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  335.                         M[efecto[i]-1][0]=hvap[efecto[i]-1];
  336.                         N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  337.                     }/*Caso 6: */if(size>2 and io[efecto[i]][entra]==io[efecto[i]-1][sale] and io[efecto[i]-1][entra]>0 and efecto[i]!=1) {
  338.                         if(aver==size-1) {
  339.                             cout<<"CASO 6"<<endl<<endl;
  340.                         }
  341.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-hvap[efecto[i]-1]-H[efecto[i]-1];
  342.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  343.                         N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  344.                     }
  345.                 } else {
  346.                     if(aver>0 and aver<size-1) {
  347.                         cout<<"En medio:"<<endl;
  348.                         cout<<"Se llena la fila M["<<efecto[i]<<"]"<<endl;
  349.                     }
  350.                     /*Caso 1*/if(io[efecto[i]-1][entra]!=0 and io[efecto[i]-1][sale]!=io[efecto[i]][entra] and io[efecto[i]-1][sale]!=io[efecto[size-1]][sale] and io[efecto[i]-1][entra]!=io[efecto[i]][sale]) {
  351.                         if(aver>0 and aver<size-1) {
  352.                             cout<<"Caso 1"<<endl<<endl;
  353.                         }
  354.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  355.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  356.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  357.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  358.                         N[efecto[i]-1][0]=0;
  359.                     }/*Caso 2*/if(io[efecto[i]-1][entra]==0 and io[efecto[i]][entra]!=io[efecto[i]-1][sale] and efecto[i]!=1) {
  360.                         if(aver>0 and aver<size-1) {
  361.                             cout<<"Caso 2"<<endl<<endl;
  362.                         }
  363.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  364.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  365.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  366.                         N[efecto[i]-1][0]=-L[0]*hvap[efecto[i]-1];
  367.                     }/*Caso 3*/if(io[efecto[i]-1][entra]==0 and io[efecto[i]][entra]==io[efecto[i]-1][sale]) {
  368.                         if(aver>0 and aver<size-1) {
  369.                             cout<<"Caso 3"<<endl<<endl;
  370.                         }
  371.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1]-hvap[efecto[i]-1];
  372.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  373.                         N[efecto[i]-1][0]=-L[io[efecto[i]-1][entra]]*hvap[efecto[i]-1];
  374.                     }/*Caso 4*/if(io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[size-1]][sale]) {
  375.                         if(aver>0 and aver<size-1) {
  376.                             cout<<"Caso 4"<<endl<<endl;
  377.                         }
  378.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  379.                         M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]+H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  380.                         M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  381.                         N[efecto[i]-1][0]=0;
  382.                     }/*Caso 5*/if(io[efecto[i]][entra]==io[efecto[i]-1][sale] and io[efecto[i]-1][entra]!=0) {
  383.                         if(aver>0 and aver<size-1) {
  384.                             cout<<"Caso 5"<<endl<<endl;
  385.                         }
  386.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-hvap[efecto[i]-1]-H[efecto[i]-1];
  387.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  388.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  389.                         N[efecto[i]-1][0]=0;
  390.                     }/*Caso 6*/if(io[efecto[i]-1][sale]==io[efecto[size-1]][sale] and io[efecto[i]][sale]!=io[efecto[i]-1][entra]) {
  391.                         if(aver>0 and aver<size-1) {
  392.                             cout<<"Caso 6"<<endl<<endl;
  393.                         }
  394.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  395.                         M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  396.                         M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  397.                         N[efecto[i]-1][0]=L[io[efecto[size-1]][sale]]*hvap[efecto[i]-1];
  398.                     }/*Caso 7*/if(io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]==io[efecto[size-1]][sale]) {
  399.                         if(aver>0 and aver<size-1) {
  400.                             cout<<"Caso 7"<<endl<<endl;
  401.                         }
  402.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  403.                         M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]+H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  404.                         N[efecto[i]-1][0]=L[io[efecto[i]-1][sale]]*hvap[efecto[i]-1];
  405.                     }
  406.                     /*Caso 8*/if(io[efecto[i]-1][entra]==0 and efecto[i]==1 and size>2) {
  407.                         if(aver>0 and aver<size-1) {
  408.                             cout<<"Caso 8"<<endl<<endl;
  409.                         }
  410.                         M[efecto[i]-1][1]=H[0]-hx[1];
  411.                         M[efecto[i]-1][0]=hvap[efecto[i]-1];
  412.                         M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[0];
  413.                         N[efecto[i]-1][0]=0;
  414.                     }
  415.                 }
  416.             }
  417.             if(efecto[size-1]!=size and size>2) {
  418.                 for(int columna=efecto[size-1]; columna<=size; columna++) {
  419.                     for(int fila=0; fila<size; fila++) {
  420.                         M[fila][columna]=M[fila][columna+1];
  421.                     }
  422.                 }
  423.             }
  424.             /*cout<<"Matriz M:"<<endl;
  425.             for(int i=0;i<size;i++) {
  426.                 for(int j=0;j<size;j++) {
  427.                     cout<<setw(14)<<setprecision(10)<<M[i][j]<<" ";
  428.                 }
  429.                 cout<<endl;
  430.             }
  431.             cout<<"N:"<<endl;
  432.             for(int i=0;i<size;i++) {
  433.                 cout<<setw(14)<<setprecision(10)<<N[i][0]<<endl;
  434.             }
  435.             cout<<"V[0]="<<V[0]<<endl;
  436.             cout<<"Iteracion: "<<iteracion<<endl;*/
  437.             for(int k=0; k<size; k++) {
  438.                 for(int i=0; i<size; i++) {
  439.                     for(int j=0; j<size; j++) {
  440.                         m[i][j]=M[i][j];
  441.                     }
  442.                 }
  443.                 for(int i=0; i<=9; i++) {
  444.                     m[i][k]=N[i][0];
  445.                 }
  446.                 if(k==0) {
  447.                     V[0]=determinante(m,size)/determinante(M,size);
  448.                 } else {
  449.                     L[incognita[k-1]]=determinante(m,size)/determinante(M,size);
  450.                 }
  451.             }
  452.             for(int i=0; i<=size; i++) {
  453.                 if(abs(L[i]-Licor[i])>1) {
  454.                     contador++;
  455.                 }
  456.             }
  457.             for(int i=0; i<size; i++) {
  458.                 V[efecto[i]]=L[io[efecto[i]][entra]]-L[io[efecto[i]][sale]];
  459.             }
  460.         } while(contador>0);
  461.         contador=0;
  462.         for(int i=1; i<=size; i++) {
  463.             A[i]=V[i-1]*hvap[i-1]/(U[i-1]*deltaT[i]);
  464.             Q[i-1]=A[i]*U[i-1]*deltaT[i];
  465.         }
  466.         suma=0;
  467.         for(int i=1; i<=size; i++) {
  468.             suma=suma+A[i]/size;
  469.         }
  470.         A[0]=suma;
  471.         for(int i=1; i<=size; i++) {
  472.             deltaT[i]=deltaT[i]*A[i]/A[0];
  473.         }
  474.         deltaT[0]=0;
  475.         for(int i=1; i<=size; i++) {
  476.             deltaT[0]=deltaT[0]+deltaT[i];
  477.         }
  478.         deltaT0=0;
  479.         for(int i=0; i<size; i++) {
  480.             deltaT0=deltaT0+epe[i];
  481.         }
  482.         deltaT0=Tsat[0]-Tsat[size]-deltaT0;
  483.         if(abs(deltaT0-deltaT[0])>0.001) {
  484.             deltaT[0]=(deltaT0+deltaT[0])/2;
  485.         }
  486.         iteracion++;
  487.         if(iteracion==3) {
  488.             resolver2();
  489.         }
  490.         cout<<"Iteracion: "<<iteracion<<endl;
  491.     } while(iteracion<=5);
  492.     deltaT[0]=(deltaT0+deltaT[0])/2;
  493.     suma=0;
  494.     for(int i=1; i<size; i++) {
  495.         P[i]=P_sat(Tsat[i]);
  496.     }
  497.     economia=0;
  498.     for(int i=1; i<=size; i++) {
  499.         economia=economia+V[i]/V[0];
  500.     }
  501.     contador=0;
  502.     for(int i=0; i<=size; i++) {
  503.         if(A[i]<=0) {
  504.             contador++;
  505.         }
  506.         if(L[i]<=0) {
  507.             contador++;
  508.         }
  509.         if(epe[i]<=0 and i!=size) {
  510.             contador++;
  511.         }
  512.         if(Tsat[i]<=Tsat[i+1] and i!=size) {
  513.             contador++;
  514.         }
  515.         if(deltaT[i+1]>=deltaT[0] and i!=size) {
  516.             contador++;
  517.         }
  518.         if(x[i]<=0 and i!=size) {
  519.             contador++;
  520.         }
  521.         if(deltaT[i]<=0) {
  522.             contador++;
  523.         }
  524.         if(V[i]<=0) {
  525.             contador++;
  526.         }
  527.     }
  528.     if(contador==0) {
  529.         return true;
  530.     } else {
  531.         return false;
  532.     }
  533. }
  534.  
  535. /*
  536. void resolver2(void){
  537.     En esta parte tiene que ir ceres
  538. }*/
  539.  
  540. double EPE(double x,double T) {
  541.     return (1+0.1419526*x)*T+271.3627*pow(x,2)-9.419608*x-T;
  542. }
  543.  
  544. bool orden_efectos(int n) {
  545.     vector<int> digitos;
  546.     int temp=n;
  547.     while(temp>0) {
  548.         digitos.push_back(temp%10);
  549.         temp/=10;
  550.     }
  551.     if (digitos.size()!=size) {
  552.         cout<<"Debe ingresar un valor v\240lido."<<endl;
  553.         cout<<n<<" tiene "<<digitos.size()<<" cifras. Ingrese un orden de "<<size<<" cifras.\n";
  554.         return false;
  555.     }
  556.     reverse(digitos.begin(),digitos.end());
  557.     vector<int> rango(size);
  558.     iota(rango.begin(),rango.end(),1);
  559.     sort(digitos.begin(),digitos.end());
  560.     if(digitos!=rango) {
  561.         cout<<"Orden inv\240lido,pruebe otra vez."<<endl;
  562.         return false;
  563.     }
  564.     temp=n;
  565.     for(int i=0; i<size; i++) {
  566.         efecto[i]=temp%10;
  567.         temp/=10;
  568.     }
  569.     reverse(efecto,efecto+size);
  570.     for(int i=0; i<size-1; i++) {
  571.         incognita[i]=efecto[i];
  572.     }
  573.     sort(incognita,incognita+size-1);
  574.     return true;
  575. }
  576. void borrar(void) {
  577.     label=0;
  578.     unsigned short int i,j;
  579.     for(i=0; i<=9; i++) {
  580.         for(j=0; j<=9; j++) {
  581.             m[i][j]=0;
  582.         }
  583.     }
  584.     for(i=0; i<=9; i++) {
  585.         H[i]=0;
  586.     }
  587.     for(i=0; i<9; i++) {
  588.         A[i]=0;
  589.     }
  590.     for(i=0; i<9; i++) {
  591.         U[i]=0;
  592.     }
  593.     for(i=0; i<=9; i++) {
  594.         L[i]=0;
  595.     }
  596.     for(i=0; i<=9; i++) {
  597.         T[i]=0;
  598.     }
  599.     for(i=0; i<=9; i++) {
  600.         P[i]=0;
  601.     }
  602.     for(i=0; i<=9; i++) {
  603.         x[i]=0;
  604.     }
  605.     for(i=0; i<=9; i++) {
  606.         hx[i]=0;
  607.     }
  608.     for(i=0; i<=9; i++) {
  609.         Tsat[i]=0;
  610.     }
  611.     for(i=0; i<9; i++) {
  612.         for(j=0; j<=2; j++) {
  613.             io[i][j]=0;
  614.         }
  615.     }
  616.     for(i=0; i<=8; i++) {
  617.         for(j=0; j<=2; j++) {
  618.             N[i][j]=0;
  619.         }
  620.     }
  621.     for(i=0; i<=9; i++) {
  622.         deltaT[i]=0;
  623.     }
  624.     for(i=0; i<=9; i++) {
  625.         V[i]=0;
  626.     }
  627.     for(i=0; i<=9; i++) {
  628.         epe[i]=0;
  629.     }
  630.     for(i=0; i<=9; i++) {
  631.         Licor[i]=0;
  632.     }
  633.     for(i=0; i<9; i++) {
  634.         hvap[i]=0;
  635.     }
  636. }
  637. /*double Hx(double x,double T) {
  638.     if (x<=0||x>=0.75||T>400||T<40) {
  639.         throw std::logic_error("x o T fuera de rango.");
  640.     }
  641.     unsigned short int Tx=static_cast<unsigned short int>(T/10-4);
  642.     double h[36];
  643.     h[0]=8.219430803614e+00+1.230933268065e+02*x-8.584212214443e+03*pow(x,2)+3.509231300664e+05*pow(x,3)-7.706026103393e+06*pow(x,4)+8.407353880554e+07*pow(x,5)-3.572446063967e+08*pow(x,6)-6.454608354850e+08*pow(x,7)+6.148788650843e+09*pow(x,8)+3.642132509238e+10*pow(x,9)-2.472875309956e+11*pow(x,10)-1.978309275261e+11*pow(x,11)+2.375921834948e+12*pow(x,12)-2.714063764541e+12*pow(x,13)+1.992816135748e+13*pow(x,14)+2.352294196277e+13*pow(x,15)-3.177362396359e+14*pow(x,16)-6.418034554324e+14*pow(x,17)-1.168147202489e+15*pow(x,18)+6.569617558021e+15*pow(x,19)+2.356174017836e+16*pow(x,20)+1.043865859153e+17*pow(x,21)+2.224477326099e+17*pow(x,22)-8.662127007082e+17*pow(x,23)-4.452470089319e+18*pow(x,24)-9.499655204396e+18*pow(x,25)-3.367693118408e+19*pow(x,26)+4.098424874077e+19*pow(x,27)+6.801696348343e+20*pow(x,28)+5.607625307059e+20*pow(x,29)+4.170697087814e+21*pow(x,30)-4.791023148698e+21*pow(x,31)-4.359430547787e+22*pow(x,32)-1.561855622636e+22*pow(x,33)+9.084500737005e+21*pow(x,34)-3.717684399014e+23*pow(x,35)-3.178040911301e+24*pow(x,36)-3.949934484237e+24*pow(x,37)+2.819623013312e+25*pow(x,38)+9.878816138449e+25*pow(x,39)-2.888644503828e+25*pow(x,40)-5.114649377515e+26*pow(x,41)+9.689387326313e+27*pow(x,42)-3.093677092813e+28*pow(x,43)+4.226393186633e+28*pow(x,44)+1.438589121249e+29*pow(x,45)-1.181343711464e+30*pow(x,46)-2.130358166562e+30*pow(x,47)+8.383064406919e+30*pow(x,48)+3.086629166865e+31*pow(x,49)-7.055151210246e+31*pow(x,50)+0.0*pow(x,51);
  644.     h[1]=1.855819364335e+01+1.868778161598e+02*x-1.903934915943e+04*pow(x,2)+7.116221598773e+05*pow(x,3)-1.221448983636e+07*pow(x,4)+6.869084801289e+07*pow(x,5)+7.435427052853e+08*pow(x,6)-1.379659960161e+10*pow(x,7)+7.431856358622e+10*pow(x,8)-7.249066345989e+10*pow(x,9)-3.498424730798e+11*pow(x,10)-1.875745068247e+12*pow(x,11)+8.457990975292e+12*pow(x,12)+3.610109866601e+13*pow(x,13)-5.426432163947e+13*pow(x,14)-5.374445763290e+14*pow(x,15)+3.956656025525e+14*pow(x,16)-1.104118150867e+15*pow(x,17)+1.274414388851e+16*pow(x,18)+2.748115594435e+16*pow(x,19)-1.372942192981e+16*pow(x,20)-2.580132413446e+17*pow(x,21)-7.975537434013e+17*pow(x,22)-2.610940526815e+17*pow(x,23)+8.802431842887e+18*pow(x,24)-3.586621045401e+19*pow(x,25)+9.935447610938e+19*pow(x,26)-9.948814175213e+19*pow(x,27)+2.977884342078e+20*pow(x,28)+9.763507116198e+20*pow(x,29)-5.597039468527e+19*pow(x,30)+1.307113387675e+22*pow(x,31)+9.546233749623e+21*pow(x,32)-1.887884577664e+23*pow(x,33)-5.448571882139e+23*pow(x,34)-3.103406465341e+24*pow(x,35)+3.226702699745e+24*pow(x,36)+1.558518077781e+25*pow(x,37)+3.163873305816e+24*pow(x,38)+2.579688028382e+26*pow(x,39)+5.887612386592e+26*pow(x,40)-5.222290913388e+26*pow(x,41)-6.995359131443e+26*pow(x,42)-4.144433200953e+28*pow(x,43)-1.082814665035e+28*pow(x,44)+1.614867343410e+29*pow(x,45)+1.424828970090e+29*pow(x,46)+1.015477872738e+29*pow(x,47)+8.018246053544e+28*pow(x,48)-2.207798368839e+30*pow(x,49)+1.519274296710e+31*pow(x,50)-3.385303776655e+31*pow(x,51);
  645.     h[2]=2.880341036081e+01-2.371672029599e+02*x+1.031290113344e+04*pow(x,2)-6.872662947513e+04*pow(x,3)-4.838825474669e+06*pow(x,4)+1.204083792847e+08*pow(x,5)-1.200593182935e+09*pow(x,6)+5.672671952987e+09*pow(x,7)-8.102112362547e+09*pow(x,8)-3.686126777779e+10*pow(x,9)+1.926033628735e+11*pow(x,10)-5.038163544815e+11*pow(x,11)+1.542711132985e+12*pow(x,12)-3.749768009933e+12*pow(x,13)+3.855590157209e+12*pow(x,14)-3.094039340763e+12*pow(x,15)+5.771106203691e+11*pow(x,16)+5.388173517450e+13*pow(x,17)-9.044839261928e+13*pow(x,18)+1.692478690176e+13*pow(x,19)-4.713314245799e+14*pow(x,20)+7.547139286189e+14*pow(x,21)+1.496671638282e+15*pow(x,22)-4.035352942884e+15*pow(x,23)+4.045295433772e+15*pow(x,24)+1.878465427188e+15*pow(x,25)-4.554906455877e+15*pow(x,26)+2.391607112837e+16*pow(x,27)-1.318376597062e+17*pow(x,28)+1.099059532546e+17*pow(x,29)-1.845085198187e+17*pow(x,30)-1.117730732335e+17*pow(x,31)+3.573777340265e+18*pow(x,32)-4.091883503258e+18*pow(x,33)+8.959165021555e+18*pow(x,34)-2.746956619998e+19*pow(x,35)-2.864846720950e+19*pow(x,36)-5.850720653901e+18*pow(x,37)+8.669472712782e+19*pow(x,38)+4.896267610395e+20*pow(x,39)+6.892924731386e+20*pow(x,40)-1.989150326877e+21*pow(x,41)-4.632777692993e+20*pow(x,42)-5.499172898609e+21*pow(x,43)-7.737583727582e+21*pow(x,44)+2.157981529440e+22*pow(x,45)+1.790710587322e+22*pow(x,46)+9.190221604146e+22*pow(x,47)-1.310324209802e+23*pow(x,48)+9.350085256449e+22*pow(x,49)-7.877304455206e+23*pow(x,50)+8.653211206891e+23*pow(x,51);
  646.     h[3]=2.880341036081e+01-2.371672029599e+02*x+1.031290113344e+04*pow(x,2)-6.872662947513e+04*pow(x,3)-4.838825474669e+06*pow(x,4)+1.204083792847e+08*pow(x,5)-1.200593182935e+09*pow(x,6)+5.672671952987e+09*pow(x,7)-8.102112362547e+09*pow(x,8)-3.686126777779e+10*pow(x,9)+1.926033628735e+11*pow(x,10)-5.038163544815e+11*pow(x,11)+1.542711132985e+12*pow(x,12)-3.749768009933e+12*pow(x,13)+3.855590157209e+12*pow(x,14)-3.094039340763e+12*pow(x,15)+5.771106203691e+11*pow(x,16)+5.388173517450e+13*pow(x,17)-9.044839261928e+13*pow(x,18)+1.692478690176e+13*pow(x,19)-4.713314245799e+14*pow(x,20)+7.547139286189e+14*pow(x,21)+1.496671638282e+15*pow(x,22)-4.035352942884e+15*pow(x,23)+4.045295433772e+15*pow(x,24)+1.878465427188e+15*pow(x,25)-4.554906455877e+15*pow(x,26)+2.391607112837e+16*pow(x,27)-1.318376597062e+17*pow(x,28)+1.099059532546e+17*pow(x,29)-1.845085198187e+17*pow(x,30)-1.117730732335e+17*pow(x,31)+3.573777340265e+18*pow(x,32)-4.091883503258e+18*pow(x,33)+8.959165021555e+18*pow(x,34)-2.746956619998e+19*pow(x,35)-2.864846720950e+19*pow(x,36)-5.850720653901e+18*pow(x,37)+8.669472712782e+19*pow(x,38)+4.896267610395e+20*pow(x,39)+6.892924731386e+20*pow(x,40)-1.989150326877e+21*pow(x,41)-4.632777692993e+20*pow(x,42)-5.499172898609e+21*pow(x,43)-7.737583727582e+21*pow(x,44)+2.157981529440e+22*pow(x,45)+1.790710587322e+22*pow(x,46)+9.190221604146e+22*pow(x,47)-1.310324209802e+23*pow(x,48)+9.350085256449e+22*pow(x,49)-7.877304455206e+23*pow(x,50)+8.653211206891e+23*pow(x,51);
  647.     h[4]=4.767117468761e+01-9.232759115644e+00*x-2.166306102434e+03*pow(x,2)+6.382223653133e+04*pow(x,3)-1.081806290893e+06*pow(x,4)+9.888043802556e+06*pow(x,5)-4.438146004838e+07*pow(x,6)+4.715707830629e+07*pow(x,7)+3.761491402571e+08*pow(x,8)-1.447156149735e+09*pow(x,9)+1.145497738837e+09*pow(x,10)+2.199726117829e+09*pow(x,11)-2.588283920500e+09*pow(x,12)-1.097938574954e+09*pow(x,13)-4.028705673399e+09*pow(x,14)-9.915527026724e+08*pow(x,15)+1.010324989553e+11*pow(x,16)-2.936487670431e+11*pow(x,17)+2.420818674812e+11*pow(x,18)+4.476670072705e+10*pow(x,19)-7.518431398075e+10*pow(x,20)-1.769013377148e+12*pow(x,21)+1.016662191298e+13*pow(x,22)-2.662945221385e+13*pow(x,23)+3.977894556069e+13*pow(x,24)+2.108661463305e+13*pow(x,25)-1.077851775156e+14*pow(x,26)-5.898936983297e+13*pow(x,27)+5.331002382833e+14*pow(x,28)-4.168943092127e+14*pow(x,29)-1.699941624299e+15*pow(x,30)-8.147774738592e+14*pow(x,31)-2.181773900568e+15*pow(x,32)+1.119977282911e+16*pow(x,33)+3.887850040101e+16*pow(x,34)+7.807274472244e+15*pow(x,35)-5.421541357496e+16*pow(x,36)-1.358703500652e+17*pow(x,37)-9.367886661939e+16*pow(x,38)+3.911600193355e+17*pow(x,39)-1.009965257530e+18*pow(x,40)-2.326456816080e+18*pow(x,41)+4.962578398200e+18*pow(x,42)+1.058536897016e+18*pow(x,43)+1.224578751028e+19*pow(x,44)+1.227668167749e+19*pow(x,45)-3.586126378823e+19*pow(x,46)-4.259942850919e+19*pow(x,47)-5.176272033062e+19*pow(x,48)+2.483775851857e+20*pow(x,49)-4.280008244299e+20*pow(x,50)+3.974193143632e+20*pow(x,51);
  648.     h[5]=5.749786883954e+01+2.450160292509e+02*x-2.283242311403e+04*pow(x,2)+6.793710113473e+05*pow(x,3)-1.010007750797e+07*pow(x,4)+7.938349868347e+07*pow(x,5)-3.024396439603e+08*pow(x,6)+2.147279260187e+08*pow(x,7)+2.046016008798e+09*pow(x,8)-4.506426944766e+09*pow(x,9)-3.905366587438e+09*pow(x,10)+1.063176507983e+10*pow(x,11)+6.556275134216e+08*pow(x,12)+4.363764096562e+10*pow(x,13)+5.556745395391e+10*pow(x,14)-1.772784625714e+11*pow(x,15)-8.200461375392e+11*pow(x,16)-4.105422606030e+11*pow(x,17)+1.209280732188e+12*pow(x,18)+7.444819910333e+12*pow(x,19)+5.289288400299e+12*pow(x,20)+8.593467816502e+12*pow(x,21)-4.567254035279e+13*pow(x,22)-4.579607113840e+13*pow(x,23)-1.148808506811e+14*pow(x,24)-2.235593665098e+14*pow(x,25)-1.516261530203e+14*pow(x,26)+2.020092575654e+15*pow(x,27)+5.432332091203e+15*pow(x,28)-2.129324540417e+15*pow(x,29)-1.304419615701e+16*pow(x,30)-2.700062332804e+16*pow(x,31)+2.807820914157e+16*pow(x,32)+5.638556177657e+16*pow(x,33)+2.278006406449e+16*pow(x,34)+2.215777934288e+16*pow(x,35)-1.704774158683e+17*pow(x,36)-1.091225949615e+18*pow(x,37)-1.591415173678e+18*pow(x,38)+2.361982612926e+18*pow(x,39)+1.267169331534e+19*pow(x,40)+1.143873566740e+18*pow(x,41)+8.410586603366e+18*pow(x,42)-6.524602669974e+19*pow(x,43)+1.762893942242e+19*pow(x,44)-2.910173591257e+19*pow(x,45)+3.625143888941e+19*pow(x,46)-1.343646800729e+20*pow(x,47)-7.932632683418e+20*pow(x,48)+2.571362512960e+21*pow(x,49)+4.051143589185e+20*pow(x,50)-2.820224973285e+21*pow(x,51);
  649.     h[6]=6.946067671036e+01-2.944898551770e+02*x+1.259060099831e+04*pow(x,2)-3.282775142765e+05*pow(x,3)+4.405946335301e+06*pow(x,4)-3.165637188199e+07*pow(x,5)+1.087349776773e+08*pow(x,6)-3.029135187954e+07*pow(x,7)-9.058830344821e+08*pow(x,8)+1.879437713159e+09*pow(x,9)+1.122796524972e+09*pow(x,10)-3.166073931741e+09*pow(x,11)-1.120727075922e+09*pow(x,12)-1.299019514666e+10*pow(x,13)-3.397254983238e+10*pow(x,14)+6.821679398394e+10*pow(x,15)+2.916942570804e+11*pow(x,16)+3.865080624101e+11*pow(x,17)-4.283117647381e+11*pow(x,18)-3.471169833550e+12*pow(x,19)-2.860663828102e+12*pow(x,20)-5.188069180330e+12*pow(x,21)+2.319718977973e+13*pow(x,22)+1.947056373651e+13*pow(x,23)+5.840981515717e+13*pow(x,24)+9.637816319432e+13*pow(x,25)+7.831853079070e+13*pow(x,26)-9.353168548350e+14*pow(x,27)-2.347371372920e+15*pow(x,28)+8.286717615091e+14*pow(x,29)+5.590333291894e+15*pow(x,30)+1.042475640313e+16*pow(x,31)-1.241390897679e+16*pow(x,32)-2.237551651460e+16*pow(x,33)+4.818459874605e+15*pow(x,34)+9.495656679262e+15*pow(x,35)+5.304436046901e+16*pow(x,36)+4.525850102623e+17*pow(x,37)+5.299166151009e+17*pow(x,38)-9.815602182627e+17*pow(x,39)-5.671895812026e+18*pow(x,40)-8.115281339366e+17*pow(x,41)-3.314081040288e+18*pow(x,42)+3.180704064105e+19*pow(x,43)-7.750613809783e+18*pow(x,44)+1.478604438597e+19*pow(x,45)-2.752390808635e+19*pow(x,46)+7.004739582214e+19*pow(x,47)+3.197507080053e+20*pow(x,48)-1.060346379024e+21*pow(x,49)-3.596297908082e+20*pow(x,50)+1.414648033611e+21*pow(x,51);
  650.     h[7]=7.885080401005e+01-1.836322879679e+02*x+4.084908791850e+03*pow(x,2)-7.574450079949e+04*pow(x,3)+7.077018911440e+05*pow(x,4)-3.015123139341e+06*pow(x,5)+6.578878393524e+05*pow(x,6)+4.288666144620e+07*pow(x,7)-1.281120384664e+08*pow(x,8)-1.499478698966e+07*pow(x,9)+4.536083754226e+08*pow(x,10)+4.290779711894e+07*pow(x,11)-1.419609641970e+09*pow(x,12)+2.663875360476e+09*pow(x,13)-6.521170517274e+09*pow(x,14)-9.606778196110e+09*pow(x,15)+4.359661144063e+10*pow(x,16)+4.501699717794e+10*pow(x,17)-1.827404444513e+11*pow(x,18)+1.026473140927e+11*pow(x,19)+1.955132406324e+10*pow(x,20)-3.860316120773e+11*pow(x,21)+6.407457842908e+11*pow(x,22)+2.078327495918e+11*pow(x,23)-6.342943260448e+11*pow(x,24)-1.452980275158e+12*pow(x,25)+9.551416146011e+12*pow(x,26)-1.121253903792e+13*pow(x,27)-3.281282637488e+11*pow(x,28)-8.794844384733e+13*pow(x,29)+3.100262041928e+14*pow(x,30)-2.250336652475e+14*pow(x,31)-1.298031113193e+14*pow(x,32)-2.063540312771e+14*pow(x,33)+1.122332741865e+15*pow(x,34)-2.273058866277e+15*pow(x,35)+1.914056799731e+15*pow(x,36)+2.764562251518e+15*pow(x,37)+8.909700241342e+14*pow(x,38)-1.622065799826e+16*pow(x,39)-4.616752099765e+16*pow(x,40)+1.307561746962e+17*pow(x,41)-3.373325890312e+16*pow(x,42)+7.634989830516e+16*pow(x,43)+1.349886735312e+17*pow(x,44)-1.279850487260e+17*pow(x,45)-2.140995150328e+18*pow(x,46)+1.905721024527e+18*pow(x,47)-7.461022755724e+17*pow(x,48)+6.592040167692e+18*pow(x,49)-6.515292250602e+18*pow(x,50)+1.497072576049e+17*pow(x,51);
  651.     h[8]=8.929732605310e+01-2.351919659419e+02*x+8.904244618484e+03*pow(x,2)-2.389865218817e+05*pow(x,3)+3.306008462786e+06*pow(x,4)-2.566053689384e+07*pow(x,5)+1.128590344875e+08*pow(x,6)-2.419085914209e+08*pow(x,7)-9.213122415355e+06*pow(x,8)+1.088335987732e+09*pow(x,9)-1.039081738569e+09*pow(x,10)-3.127362345335e+09*pow(x,11)+2.816040067845e+09*pow(x,12)+1.229012616858e+10*pow(x,13)-1.761146363233e+09*pow(x,14)-3.624197549625e+10*pow(x,15)-8.054966932789e+10*pow(x,16)+1.809612366707e+11*pow(x,17)+1.326513819518e+11*pow(x,18)-1.007318675599e+11*pow(x,19)+5.371784923251e+11*pow(x,20)-8.217669916015e+11*pow(x,21)-3.393528377607e+12*pow(x,22)-2.425230090675e+12*pow(x,23)+7.139164865050e+12*pow(x,24)+1.129196988166e+13*pow(x,25)+9.873816506896e+12*pow(x,26)+3.495671774387e+12*pow(x,27)+2.817013257025e+13*pow(x,28)-1.051620339193e+14*pow(x,29)-4.627191670992e+13*pow(x,30)-2.698211829878e+14*pow(x,31)-6.673139030004e+14*pow(x,32)+6.891096233744e+14*pow(x,33)+1.680391828223e+15*pow(x,34)+2.660841161135e+15*pow(x,35)+4.192399945128e+15*pow(x,36)-8.328843772529e+15*pow(x,37)-1.325044782452e+16*pow(x,38)-1.892118523332e+15*pow(x,39)+1.574060948672e+16*pow(x,40)+2.306511810349e+16*pow(x,41)+3.486870224923e+16*pow(x,42)-2.167501258981e+16*pow(x,43)-5.421914401306e+17*pow(x,44)-3.959703771158e+17*pow(x,45)+1.193796176628e+18*pow(x,46)+2.233591676398e+18*pow(x,47)+4.133335720845e+18*pow(x,48)-1.296339975452e+19*pow(x,49)-1.434297768229e+18*pow(x,50)+8.806742863644e+18*pow(x,51);
  652.     h[9]=9.817505946505e+01-2.881178410427e+01*x-2.771721923826e+03*pow(x,2)+4.179977675313e+04*pow(x,3)-3.152697490220e+05*pow(x,4)+1.386410899562e+06*pow(x,5)-4.813863501809e+06*pow(x,6)+2.194026747971e+07*pow(x,7)-8.378897649229e+07*pow(x,8)+1.127686937252e+08*pow(x,9)+2.897983494321e+08*pow(x,10)-9.917282827975e+08*pow(x,11)+2.786811396591e+08*pow(x,12)+9.366451575648e+08*pow(x,13)+2.813515349373e+09*pow(x,14)-6.531163229799e+09*pow(x,15)-2.401248049193e+09*pow(x,16)+3.879549363725e+09*pow(x,17)+1.699033609515e+10*pow(x,18)+1.311943339168e+10*pow(x,19)-8.000467759117e+10*pow(x,20)+8.395164250604e+10*pow(x,21)+4.517537804373e+10*pow(x,22)-4.532213240291e+11*pow(x,23)-1.664736828397e+11*pow(x,24)+9.354733631676e+11*pow(x,25)+2.723226880429e+11*pow(x,26)+1.021835119487e+12*pow(x,27)-1.846127146629e+12*pow(x,28)+1.367153774668e+13*pow(x,29)-1.316671164794e+13*pow(x,30)-2.840065767075e+13*pow(x,31)+2.541940079729e+13*pow(x,32)-1.443504002409e+13*pow(x,33)-4.297120428988e+13*pow(x,34)+4.928320858719e+13*pow(x,35)-5.295542977304e+14*pow(x,36)+1.376435569933e+15*pow(x,37)-1.179084171785e+15*pow(x,38)-1.761972898667e+15*pow(x,39)+5.314219906491e+15*pow(x,40)+4.986640259205e+15*pow(x,41)-1.561672176878e+15*pow(x,42)+1.359298275088e+16*pow(x,43)-2.235941089761e+16*pow(x,44)-4.327764254514e+16*pow(x,45)-9.334197737047e+16*pow(x,46)-1.828279585899e+17*pow(x,47)+4.484474421627e+17*pow(x,48)+3.224956932203e+17*pow(x,49)+5.859298516470e+17*pow(x,50)-1.329499103898e+18*pow(x,51);
  653.     h[10]=1.090840465735e+02-1.017784383621e+02*x-9.103389647162e+02*pow(x,2)+8.272959523762e+03*pow(x,3)+3.305438122979e+04*pow(x,4)-6.642285597432e+05*pow(x,5)+2.745038872170e+06*pow(x,6)-1.990270882595e+06*pow(x,7)-7.305779830784e+06*pow(x,8)-1.564500839238e+07*pow(x,9)+1.054388122436e+08*pow(x,10)-3.200180705989e+07*pow(x,11)-3.809964651520e+08*pow(x,12)+5.466166123634e+08*pow(x,13)+1.500617223508e+08*pow(x,14)-5.051350053459e+08*pow(x,15)-1.711053810670e+09*pow(x,16)-4.962120348660e+09*pow(x,17)+2.712335890117e+10*pow(x,18)-1.706579569560e+10*pow(x,19)-1.371004188708e+10*pow(x,20)+5.049748897550e+10*pow(x,21)-6.218989817068e+10*pow(x,22)-2.046460213250e+11*pow(x,23)+1.193639536718e+11*pow(x,24)-1.886351129175e+11*pow(x,25)-7.318791198658e+10*pow(x,26)+3.077713582659e+12*pow(x,27)+5.235486032316e+12*pow(x,28)-1.044505349870e+13*pow(x,29)-1.625111908919e+13*pow(x,30)+1.091397394094e+13*pow(x,31)-1.329462223025e+13*pow(x,32)+3.500804523050e+13*pow(x,33)+6.332760303640e+13*pow(x,34)+5.748472778043e+13*pow(x,35)-2.299271676017e+14*pow(x,36)+3.874967219654e+14*pow(x,37)-1.781656668353e+15*pow(x,38)+2.401091015473e+15*pow(x,39)-1.946856859878e+15*pow(x,40)+5.530836837347e+14*pow(x,41)+1.931796702016e+15*pow(x,42)+1.136620128602e+16*pow(x,43)-2.676677636988e+16*pow(x,44)+4.007213555491e+16*pow(x,45)+1.812113491244e+16*pow(x,46)-1.794231634110e+17*pow(x,47)-6.427424714132e+15*pow(x,48)+2.610694189115e+16*pow(x,49)+7.782576093881e+17*pow(x,50)-7.306016174178e+17*pow(x,51);
  654.     h[11]=1.187172064014e+02-1.207508407118e+02*x+1.947105954664e+02*pow(x,2)-1.444933348142e+04*pow(x,3)+2.347201016951e+05*pow(x,4)-1.489632929183e+06*pow(x,5)+4.398365570346e+06*pow(x,6)-5.766805934611e+06*pow(x,7)+5.305684860954e+06*pow(x,8)-1.478292440685e+07*pow(x,9)+1.603159936045e+07*pow(x,10)-2.738220933277e+04*pow(x,11)+5.698198813847e+07*pow(x,12)-6.531756347109e+07*pow(x,13)+6.623410936324e+07*pow(x,14)-4.702271319953e+08*pow(x,15)+3.100735357455e+06*pow(x,16)+6.171721240393e+08*pow(x,17)+1.182497405161e+09*pow(x,18)-4.825291770580e+08*pow(x,19)-3.210217834323e+07*pow(x,20)-9.077168758948e+08*pow(x,21)-4.587554055584e+09*pow(x,22)-2.380150999152e+09*pow(x,23)+5.530316290775e+08*pow(x,24)+7.008083989862e+09*pow(x,25)+1.525920912981e+10*pow(x,26)+1.788802071785e+09*pow(x,27)+1.187470529119e+10*pow(x,28)-1.119005100380e+10*pow(x,29)-5.654879862831e+09*pow(x,30)-7.124005777355e+10*pow(x,31)-6.703903736846e+10*pow(x,32)+2.107329172900e+10*pow(x,33)+3.423040989913e+10*pow(x,34)-9.858026077533e+09*pow(x,35)+3.148012591123e+11*pow(x,36)+1.527207645230e+11*pow(x,37)+6.502950986380e+10*pow(x,38)-1.787822129045e+11*pow(x,39)-1.584273546821e+11*pow(x,40)-6.660849551553e+11*pow(x,41)-2.411653526117e+11*pow(x,42)-1.001422687609e+12*pow(x,43)+2.554051358680e+12*pow(x,44)-2.329527960531e+12*pow(x,45)+1.767944172401e+12*pow(x,46)+1.245071544182e+12*pow(x,47)+7.214969416301e+12*pow(x,48)-1.338121998855e+13*pow(x,49)+1.891674368260e+12*pow(x,50)+2.810419980978e+12*pow(x,51);
  655.     h[12]=1.294915195315e+02-2.774176616032e+02*x+6.230472554993e+03*pow(x,2)-1.364938267980e+05*pow(x,3)+1.591489343312e+06*pow(x,4)-1.017199723551e+07*pow(x,5)+3.610260699347e+07*pow(x,6)-6.362024714415e+07*pow(x,7)+2.239125282649e+07*pow(x,8)+7.479465188120e+07*pow(x,9)-2.690334665124e+07*pow(x,10)-7.168707464559e+07*pow(x,11)-1.633637348760e+08*pow(x,12)+4.525376556307e+08*pow(x,13)-1.122559998546e+09*pow(x,14)+2.262309212266e+09*pow(x,15)-5.441562065686e+08*pow(x,16)-9.650220695010e+08*pow(x,17)-1.976730683740e+09*pow(x,18)-1.920846626573e+09*pow(x,19)+4.828602563263e+09*pow(x,20)+9.941341045118e+08*pow(x,21)+6.185807085941e+09*pow(x,22)-6.026421018807e+09*pow(x,23)+1.742152667868e+10*pow(x,24)-3.701839157912e+10*pow(x,25)-2.328347776217e+10*pow(x,26)+4.017653750004e+10*pow(x,27)+1.564385341704e+10*pow(x,28)+2.956381137109e+09*pow(x,29)-1.274439779494e+11*pow(x,30)+1.380819601354e+11*pow(x,31)+1.709785186162e+11*pow(x,32)+3.997397007824e+10*pow(x,33)-2.627605906528e+11*pow(x,34)-3.739892981047e+10*pow(x,35)-3.732349877257e+11*pow(x,36)-2.984461472300e+10*pow(x,37)-3.794767398278e+11*pow(x,38)+1.855628087996e+12*pow(x,39)+2.225759417076e+11*pow(x,40)-2.554210459335e+12*pow(x,41)+1.411342025604e+12*pow(x,42)+4.970324181082e+12*pow(x,43)-1.030712610418e+13*pow(x,44)+7.014007120148e+12*pow(x,45)-3.116283200506e+12*pow(x,46)+1.081448092264e+13*pow(x,47)-3.705989032512e+13*pow(x,48)+4.736313989476e+13*pow(x,49)-2.051301478946e+13*pow(x,50)+7.128311981960e+11*pow(x,51);
  656.     h[13]=1.397078301266e+02-2.659179269459e+02*x+3.346677343796e+03*pow(x,2)-4.735091068907e+04*pow(x,3)+3.884756043887e+05*pow(x,4)-1.699650109130e+06*pow(x,5)+3.891001684527e+06*pow(x,6)-4.646162949936e+06*pow(x,7)+5.817400786313e+06*pow(x,8)-1.139611690545e+07*pow(x,9)+8.113651524541e+06*pow(x,10)-1.599375922722e+07*pow(x,11)+5.134894071791e+07*pow(x,12)+2.193262091870e+07*pow(x,13)-2.040890075003e+07*pow(x,14)-2.311108203658e+08*pow(x,15)-8.913136239834e+07*pow(x,16)+2.466047573286e+08*pow(x,17)+5.276567354811e+08*pow(x,18)-1.423794300350e+08*pow(x,19)+5.280111826795e+08*pow(x,20)-1.830219194723e+08*pow(x,21)-2.017984114811e+09*pow(x,22)-2.220229398052e+09*pow(x,23)+8.045136324157e+08*pow(x,24)+1.494772836068e+09*pow(x,25)+4.667605895747e+09*pow(x,26)+1.977593088484e+09*pow(x,27)+8.292892534088e+09*pow(x,28)-1.692600168337e+09*pow(x,29)-9.724551714442e+09*pow(x,30)-2.493017775702e+10*pow(x,31)-2.131238155176e+10*pow(x,32)+1.253708151206e+10*pow(x,33)+1.777509168124e+10*pow(x,34)-2.840126387238e+10*pow(x,35)+1.314111194668e+11*pow(x,36)+4.502589131101e+10*pow(x,37)+3.602603477896e+10*pow(x,38)-1.593732403702e+10*pow(x,39)-8.959640864438e+10*pow(x,40)-5.513705160170e+11*pow(x,41)+1.901965763616e+10*pow(x,42)-1.177496338261e+11*pow(x,43)+1.150598327925e+12*pow(x,44)-1.148162058447e+12*pow(x,45)+6.624096473352e+11*pow(x,46)+1.322280972648e+12*pow(x,47)+1.710084891922e+12*pow(x,48)-4.484047498125e+12*pow(x,49)-1.269927805181e+12*pow(x,50)+2.663678672338e+12*pow(x,51);
  657.     h[14]=1.502247151819e+02-3.046390635453e+02*x+5.721025997981e+03*pow(x,2)-1.130542828935e+05*pow(x,3)+1.227064986909e+06*pow(x,4)-7.358049706687e+06*pow(x,5)+2.460855811407e+07*pow(x,6)-4.116921657445e+07*pow(x,7)+1.533433772973e+07*pow(x,8)+3.885899933049e+07*pow(x,9)-1.258133096416e+07*pow(x,10)-3.531342181813e+07*pow(x,11)-7.682316535284e+07*pow(x,12)+2.513968487892e+08*pow(x,13)-6.926177903593e+08*pow(x,14)+1.232100146992e+09*pow(x,15)-3.087285620194e+08*pow(x,16)-4.319986565803e+08*pow(x,17)-7.021773331041e+08*pow(x,18)-1.412781944923e+09*pow(x,19)+3.181607850795e+09*pow(x,20)+2.008411217048e+08*pow(x,21)+1.887522982168e+09*pow(x,22)-4.868332243425e+09*pow(x,23)+1.107426204020e+10*pow(x,24)-2.023972404292e+10*pow(x,25)-8.765329068998e+09*pow(x,26)+2.739238592166e+10*pow(x,27)+1.414735447255e+10*pow(x,28)-6.285221663486e+09*pow(x,29)-7.771782680780e+10*pow(x,30)+6.130533145626e+10*pow(x,31)+8.052503117185e+10*pow(x,32)+2.353784084611e+10*pow(x,33)-1.626604287000e+11*pow(x,34)-2.689939899902e+10*pow(x,35)-9.097739032535e+10*pow(x,36)+4.881986551309e+10*pow(x,37)-1.566593182488e+11*pow(x,38)+1.037481567200e+12*pow(x,39)+5.354261170688e+10*pow(x,40)-1.872074059526e+12*pow(x,41)+9.471284701206e+11*pow(x,42)+2.582475044870e+12*pow(x,43)-5.561165725006e+12*pow(x,44)+3.348675468893e+12*pow(x,45)-1.062265810354e+12*pow(x,46)+6.663824649175e+12*pow(x,47)-1.940921667130e+13*pow(x,48)+2.445911698248e+13*pow(x,49)-1.158093902496e+13*pow(x,50)+5.728984649950e+11*pow(x,51);
  658.     h[15]=1.605101712411e+02-2.749966759456e+02*x+4.548498160194e+03*pow(x,2)-9.996249913743e+04*pow(x,3)+1.165186932749e+06*pow(x,4)-7.249996316664e+06*pow(x,5)+2.456882214843e+07*pow(x,6)-4.042014773282e+07*pow(x,7)+1.129987284367e+07*pow(x,8)+4.587877622426e+07*pow(x,9)-2.314291802380e+07*pow(x,10)-5.034161832643e+06*pow(x,11)-1.069014385806e+08*pow(x,12)+2.274671346035e+08*pow(x,13)-7.197505234851e+08*pow(x,14)+1.350633954194e+09*pow(x,15)-2.575973976943e+08*pow(x,16)-5.465211991823e+08*pow(x,17)-6.711968447436e+08*pow(x,18)-1.562279518123e+09*pow(x,19)+3.317113964281e+09*pow(x,20)-1.572265830804e+08*pow(x,21)+1.909222020300e+09*pow(x,22)-4.195880983023e+09*pow(x,23)+1.102109226643e+10*pow(x,24)-2.054673157604e+10*pow(x,25)-8.099812734690e+09*pow(x,26)+2.977591650210e+10*pow(x,27)+9.445325756398e+09*pow(x,28)-1.246558817801e+10*pow(x,29)-6.806245769881e+10*pow(x,30)+6.468439038906e+10*pow(x,31)+9.161635810867e+10*pow(x,32)+1.493920407559e+10*pow(x,33)-2.064535366036e+11*pow(x,34)-6.917425503312e+09*pow(x,35)-8.813497362693e+10*pow(x,36)+5.014000616520e+10*pow(x,37)-1.190370254172e+11*pow(x,38)+9.692741287000e+11*pow(x,39)+6.153454980857e+10*pow(x,40)-1.671240684551e+12*pow(x,41)+1.135745537505e+12*pow(x,42)+2.385873128712e+12*pow(x,43)-6.073443327452e+12*pow(x,44)+3.767086081563e+12*pow(x,45)-1.345792202861e+12*pow(x,46)+5.755949072437e+12*pow(x,47)-1.900464534104e+13*pow(x,48)+2.522293310251e+13*pow(x,49)-9.016854169056e+12*pow(x,50)-2.107844239399e+12*pow(x,51);
  659.     h[16]=1.694450503872e+02-3.050161587240e+02*x+5.199808304362e+03*pow(x,2)-1.045075283453e+05*pow(x,3)+1.179111103418e+06*pow(x,4)-7.378998283974e+06*pow(x,5)+2.585664975907e+07*pow(x,6)-4.574629134692e+07*pow(x,7)+1.976450820767e+07*pow(x,8)+4.240514310704e+07*pow(x,9)-5.868627874322e+06*pow(x,10)-7.025648633004e+07*pow(x,11)-8.123760257641e+07*pow(x,12)+3.123221661911e+08*pow(x,13)-7.403397967634e+08*pow(x,14)+1.367094885557e+09*pow(x,15)-4.026307552753e+08*pow(x,16)-4.199722554531e+08*pow(x,17)-1.112312753934e+09*pow(x,18)-1.311449593668e+09*pow(x,19)+3.172450618415e+09*pow(x,20)+6.621709668835e+08*pow(x,21)+3.169044244656e+09*pow(x,22)-5.363188415772e+09*pow(x,23)+1.211350888689e+10*pow(x,24)-2.351155344170e+10*pow(x,25)-1.236130462621e+10*pow(x,26)+2.712024248100e+10*pow(x,27)+1.702329423308e+10*pow(x,28)+3.440446218758e+09*pow(x,29)-9.491333193595e+10*pow(x,30)+7.620772342914e+10*pow(x,31)+8.914917784313e+10*pow(x,32)+3.536904174758e+10*pow(x,33)-1.458725626640e+11*pow(x,34)-4.405185765195e+10*pow(x,35)-1.834215973919e+11*pow(x,36)+2.553391515294e+10*pow(x,37)-2.552331197637e+11*pow(x,38)+1.287150560036e+12*pow(x,39)+1.171186686439e+11*pow(x,40)-2.053324674169e+12*pow(x,41)+8.303120379013e+11*pow(x,42)+3.248735029607e+12*pow(x,43)-6.177192423261e+12*pow(x,44)+3.915325321889e+12*pow(x,45)-1.531905802923e+12*pow(x,46)+8.356357065441e+12*pow(x,47)-2.404008026363e+13*pow(x,48)+2.921396973459e+13*pow(x,49)-1.568935338473e+13*pow(x,50)+3.046039251161e+12*pow(x,51);
  660.     h[17]=1.795845962777e+02-2.273907142582e+02*x+1.018964883290e+03*pow(x,2)-1.609332238935e+04*pow(x,3)+2.001811481128e+05*pow(x,4)-1.139377253448e+06*pow(x,5)+2.655606754959e+06*pow(x,6)+3.128178159273e+05*pow(x,7)-9.733715073233e+06*pow(x,8)+8.419381120524e+06*pow(x,9)-1.810345148390e+07*pow(x,10)+9.004334285117e+07*pow(x,11)-4.977275836594e+07*pow(x,12)-1.254902177989e+08*pow(x,13)-6.890218489302e+07*pow(x,14)+1.554875114938e+08*pow(x,15)+2.784119958996e+08*pow(x,16)-1.918177223745e+08*pow(x,17)+6.409015356322e+08*pow(x,18)-7.656696400719e+08*pow(x,19)+3.005569293221e+08*pow(x,20)-1.232054456218e+09*pow(x,21)-2.133993040067e+09*pow(x,22)+8.115083130044e+08*pow(x,23)+6.931302331861e+08*pow(x,24)+2.815535902931e+09*pow(x,25)+7.575162327327e+09*pow(x,26)+9.868831582054e+09*pow(x,27)-5.001741695325e+09*pow(x,28)-3.090695824203e+10*pow(x,29)+2.397657093211e+10*pow(x,30)-1.625791053406e+10*pow(x,31)-1.222628332314e+10*pow(x,32)-3.556030818978e+10*pow(x,33)-9.857669959635e+10*pow(x,34)+5.814978548536e+10*pow(x,35)+1.874529383940e+11*pow(x,36)+1.238361820672e+11*pow(x,37)+2.145073164469e+11*pow(x,38)-3.032144115109e+11*pow(x,39)-9.674855747439e+10*pow(x,40)+1.058019205025e+11*pow(x,41)+5.573583899641e+11*pow(x,42)-1.204259120624e+12*pow(x,43)-7.630525388259e+11*pow(x,44)-1.985502304112e+11*pow(x,45)+1.167356755374e+12*pow(x,46)-3.178955900474e+12*pow(x,47)+6.538909443216e+12*pow(x,48)-3.414745226945e+12*pow(x,49)+7.714743397224e+12*pow(x,50)-7.801802748923e+12*pow(x,51);
  661.     h[18]=1.890007073366e+02-2.905988370589e+02*x+5.269296639460e+03*pow(x,2)-1.102815497291e+05*pow(x,3)+1.208457268935e+06*pow(x,4)-7.168964791459e+06*pow(x,5)+2.339257431524e+07*pow(x,6)-3.736802212250e+07*pow(x,7)+1.131530168041e+07*pow(x,8)+3.626034233003e+07*pow(x,9)-1.858835234408e+07*pow(x,10)+7.561971162486e+05*pow(x,11)-7.523262116093e+07*pow(x,12)+1.796346414313e+08*pow(x,13)-6.285799242692e+08*pow(x,14)+1.051999561892e+09*pow(x,15)-2.152878561924e+08*pow(x,16)-3.232206399903e+08*pow(x,17)-1.527859095616e+08*pow(x,18)-1.597067837032e+09*pow(x,19)+3.060264090531e+09*pow(x,20)-4.825089753033e+08*pow(x,21)+3.022865002873e+07*pow(x,22)-4.559329347980e+09*pow(x,23)+1.014095992479e+10*pow(x,24)-1.597620271972e+10*pow(x,25)-2.389008427062e+09*pow(x,26)+2.789396217003e+10*pow(x,27)+1.224778767380e+10*pow(x,28)-1.678800631002e+10*pow(x,29)-6.091190095653e+10*pow(x,30)+3.458592567728e+10*pow(x,31)+6.166387844148e+10*pow(x,32)+1.878026470532e+10*pow(x,33)-1.790780566326e+11*pow(x,34)-1.030244398461e+10*pow(x,35)+3.226513936160e+10*pow(x,36)+9.143241469776e+10*pow(x,37)-6.228773851483e+10*pow(x,38)+7.824165543641e+11*pow(x,39)-6.662643074768e+09*pow(x,40)-1.718667713925e+12*pow(x,41)+1.018449358013e+12*pow(x,42)+1.767495057365e+12*pow(x,43)-4.602148548975e+12*pow(x,44)+2.558748186096e+12*pow(x,45)-5.930295086292e+11*pow(x,46)+5.154752942841e+12*pow(x,47)-1.410560172540e+13*pow(x,48)+1.801392628330e+13*pow(x,49)-6.971709212622e+12*pow(x,50)-1.419931854776e+12*pow(x,51);
  662.     h[19]=1.990215400542e+02-1.730891943215e+02*x-7.942391589923e+02*pow(x,2)+6.108748802472e+03*pow(x,3)+6.401902632520e+04*pow(x,4)-8.914505820806e+05*pow(x,5)+4.132302572034e+06*pow(x,6)-8.064744874907e+06*pow(x,7)+2.890816114448e+06*pow(x,8)+7.463307678739e+06*pow(x,9)+4.603911731122e+06*pow(x,10)-1.098202544381e+07*pow(x,11)-2.747998955439e+07*pow(x,12)+3.714542855785e+07*pow(x,13)-1.354733755812e+08*pow(x,14)+3.063915482491e+08*pow(x,15)-6.790195857394e+06*pow(x,16)-9.755707159721e+07*pow(x,17)-3.395105105768e+08*pow(x,18)-2.004055627564e+08*pow(x,19)+2.447340804638e+08*pow(x,20)+1.713442618257e+08*pow(x,21)+9.943240993850e+08*pow(x,22)-7.016125038678e+08*pow(x,23)+2.163109807608e+09*pow(x,24)-4.263583107704e+09*pow(x,25)-2.311840795878e+09*pow(x,26)+5.385961841163e+09*pow(x,27)+2.770357075853e+09*pow(x,28)-1.104017978043e+09*pow(x,29)-1.657641835148e+10*pow(x,30)+1.960740459015e+10*pow(x,31)+7.241574512621e+09*pow(x,32)-4.699459786516e+09*pow(x,33)-2.225784872317e+10*pow(x,34)+1.604383702692e+09*pow(x,35)-4.467287787343e+10*pow(x,36)+3.751352115937e+10*pow(x,37)-3.841319233406e+10*pow(x,38)+2.520743910048e+11*pow(x,39)+2.258836411787e+10*pow(x,40)-3.235569922548e+11*pow(x,41)+1.458361612903e+11*pow(x,42)+4.494189160149e+11*pow(x,43)-1.488033015586e+12*pow(x,44)+7.806626771141e+11*pow(x,45)+7.967826264534e+10*pow(x,46)+1.224694621520e+12*pow(x,47)-4.251186317910e+12*pow(x,48)+6.583774437123e+12*pow(x,49)-3.354500873720e+12*pow(x,50)-1.384345619537e+11*pow(x,51);
  663.     h[20]=2.089176579056e+02-2.309579321601e+02*x+4.324966461234e+02*pow(x,2)-4.134149060715e+03*pow(x,3)+7.568771547547e+04*pow(x,4)-5.480715762322e+05*pow(x,5)+2.026957490609e+06*pow(x,6)-3.894033081432e+06*pow(x,7)+3.292049291485e+06*pow(x,8)-6.611652703767e+05*pow(x,9)+5.538638803312e+06*pow(x,10)-1.896841254109e+07*pow(x,11)+8.196814138097e+06*pow(x,12)+3.627657442310e+07*pow(x,13)-5.985933923188e+07*pow(x,14)+7.133433790138e+07*pow(x,15)-4.409872426554e+07*pow(x,16)-6.791407861404e+06*pow(x,17)-1.325886644362e+08*pow(x,18)-1.148421718917e+07*pow(x,19)+1.950952601087e+08*pow(x,20)+2.670359226359e+08*pow(x,21)+3.465947413868e+08*pow(x,22)-8.480245109793e+08*pow(x,23)+1.195334728350e+09*pow(x,24)-2.110879593368e+09*pow(x,25)-1.748425161690e+09*pow(x,26)+1.587059843271e+09*pow(x,27)+3.623372623411e+09*pow(x,28)+2.297243433763e+09*pow(x,29)-1.224520524654e+10*pow(x,30)+8.257574811924e+09*pow(x,31)+1.467484582412e+09*pow(x,32)+3.454089598772e+09*pow(x,33)+9.571032468427e+09*pow(x,34)-1.285839697733e+10*pow(x,35)-2.258529261046e+10*pow(x,36)+9.100117587069e+09*pow(x,37)-3.326962596564e+10*pow(x,38)+1.444046009330e+11*pow(x,39)-8.650440643985e+09*pow(x,40)-2.764158252964e+11*pow(x,41)+4.138870273267e+10*pow(x,42)+3.323863817114e+11*pow(x,43)-3.762870184026e+11*pow(x,44)+1.331057895946e+11*pow(x,45)+1.351216256678e+11*pow(x,46)+9.135007947800e+11*pow(x,47)-2.217530845786e+12*pow(x,48)+2.771445139270e+12*pow(x,49)-2.844346651135e+12*pow(x,50)+1.301935204811e+12*pow(x,51);
  664.     h[21]=2.198625825071e+02-2.585755135834e+02*x+1.825746823762e+03*pow(x,2)-3.800831520080e+04*pow(x,3)+4.711400551328e+05*pow(x,4)-3.020287309869e+06*pow(x,5)+1.017565940432e+07*pow(x,6)-1.511572661533e+07*pow(x,7)-1.918350990477e+06*pow(x,8)+2.758428481178e+07*pow(x,9)-2.093058409705e+07*pow(x,10)+4.194733863847e+07*pow(x,11)-7.902810522884e+07*pow(x,12)+1.878098895923e+07*pow(x,13)-3.034385816816e+08*pow(x,14)+6.789168951991e+08*pow(x,15)+6.677657837257e+07*pow(x,16)-3.734508300669e+08*pow(x,17)-9.091164221521e+07*pow(x,18)-1.054599442997e+09*pow(x,19)+1.238692034284e+09*pow(x,20)-5.290382031347e+08*pow(x,21)+1.846537295932e+08*pow(x,22)-3.655475267721e+08*pow(x,23)+4.818857388538e+09*pow(x,24)-7.054126478659e+09*pow(x,25)-9.513564995750e+08*pow(x,26)+1.524711565818e+10*pow(x,27)+1.005955062155e+08*pow(x,28)-1.951623841180e+10*pow(x,29)-1.664206311671e+10*pow(x,30)+2.081583717375e+10*pow(x,31)+3.669544746276e+10*pow(x,32)-8.143010240104e+09*pow(x,33)-1.242002972531e+11*pow(x,34)+3.611830032603e+10*pow(x,35)+2.393260028374e+10*pow(x,36)+6.654455244937e+10*pow(x,37)+1.694878304516e+10*pow(x,38)+2.631170747304e+11*pow(x,39)+5.697774522264e+09*pow(x,40)-5.034614351098e+11*pow(x,41)+6.004488825927e+11*pow(x,42)+4.923685551827e+11*pow(x,43)-3.063141399701e+12*pow(x,44)+1.753836061922e+12*pow(x,45)-1.493311650621e+10*pow(x,46)+4.590018142127e+11*pow(x,47)-4.737803870024e+12*pow(x,48)+8.898275489206e+12*pow(x,49)+6.164742101971e+11*pow(x,50)-5.113749185085e+12*pow(x,51);
  665.     h[22]=2.291129459605e+02-2.335404953468e+02*x-9.745908132689e+02*pow(x,2)+2.753613780753e+04*pow(x,3)-2.594653697302e+05*pow(x,4)+1.391090273133e+06*pow(x,5)-3.973620907069e+06*pow(x,6)+3.764449373175e+06*pow(x,7)+8.216822602621e+06*pow(x,8)-2.326919287697e+07*pow(x,9)+2.991942565932e+07*pow(x,10)-6.973368258707e+07*pow(x,11)+7.727227613226e+07*pow(x,12)+3.391867868972e+07*pow(x,13)+1.736141288113e+08*pow(x,14)-4.883914038231e+08*pow(x,15)-1.404689400295e+08*pow(x,16)+4.405817423928e+08*pow(x,17)-1.894274711118e+07*pow(x,18)+7.320496425951e+08*pow(x,19)-8.347979638722e+08*pow(x,20)+6.922744728405e+08*pow(x,21)-1.418747846095e+08*pow(x,22)-1.206871700271e+09*pow(x,23)-2.054090764240e+09*pow(x,24)+3.491549016516e+09*pow(x,25)+9.592683738518e+08*pow(x,26)-1.023568370731e+10*pow(x,27)+7.613736776069e+09*pow(x,28)+2.013285031027e+10*pow(x,29)-9.750718536118e+09*pow(x,30)-1.787999231433e+10*pow(x,31)-3.898383034256e+10*pow(x,32)+1.997609498645e+10*pow(x,33)+1.217485179075e+11*pow(x,34)-4.840942851524e+10*pow(x,35)-1.181556063737e+10*pow(x,36)-1.496937414775e+10*pow(x,37)-8.568503738665e+10*pow(x,38)+2.665674065916e+10*pow(x,39)-3.670935313699e+09*pow(x,40)-1.149808956011e+11*pow(x,41)-6.057700435662e+11*pow(x,42)+5.951782980470e+10*pow(x,43)+2.235755826785e+12*pow(x,44)-1.455087751254e+12*pow(x,45)+3.238716108055e+11*pow(x,46)+1.895361896374e+12*pow(x,47)+7.445683746899e+11*pow(x,48)-5.056674672918e+12*pow(x,49)-4.804262746799e+12*pow(x,50)+7.130965030437e+12*pow(x,51);
  666.     h[23]=2.389468061415e+02-2.398886072868e+02*x+1.065286366577e+03*pow(x,2)-2.978106507527e+04*pow(x,3)+3.920800493711e+05*pow(x,4)-2.370718729970e+06*pow(x,5)+7.262344574606e+06*pow(x,6)-1.031194069302e+07*pow(x,7)+3.485433985840e+06*pow(x,8)+3.927089756834e+06*pow(x,9)-6.123045190015e+06*pow(x,10)+1.978775129898e+07*pow(x,11)-1.590425211740e+07*pow(x,12)+4.423548506641e+07*pow(x,13)-1.746180919101e+08*pow(x,14)+1.585563660236e+08*pow(x,15)-1.080685862178e+08*pow(x,16)+5.109060045345e+07*pow(x,17)+3.149507576998e+08*pow(x,18)-3.781970185715e+08*pow(x,19)+1.202085512746e+09*pow(x,20)-7.453508405544e+08*pow(x,21)-1.127246722374e+09*pow(x,22)-2.305005143310e+09*pow(x,23)+1.796731413020e+09*pow(x,24)-2.763853514693e+09*pow(x,25)+4.185910391246e+09*pow(x,26)+9.993538397784e+09*pow(x,27)+1.820778721821e+09*pow(x,28)-7.466324463304e+09*pow(x,29)-4.946586383284e+09*pow(x,30)-3.489050292390e+09*pow(x,31)+8.282097700816e+09*pow(x,32)-1.235153440055e+09*pow(x,33)-8.419528312258e+10*pow(x,34)-8.804243802097e+09*pow(x,35)+8.726420202794e+10*pow(x,36)+4.524781271710e+10*pow(x,37)+7.398739170386e+10*pow(x,38)+7.322943653396e+10*pow(x,39)-3.300013625162e+10*pow(x,40)-4.466800092417e+11*pow(x,41)+4.930049849428e+11*pow(x,42)+5.655181558451e+09*pow(x,43)-6.027254323374e+11*pow(x,44)+1.340729393501e+11*pow(x,45)-4.475385650851e+11*pow(x,46)+1.579295671848e+12*pow(x,47)-2.196150445144e+12*pow(x,48)+2.227097517040e+12*pow(x,49)-1.556327366879e+11*pow(x,50)-7.601365547967e+11*pow(x,51);
  667.     h[24]=2.502374458320e+02-2.665587263086e+02*x+9.052917055997e+02*pow(x,2)-1.815940981744e+04*pow(x,3)+2.304692628610e+05*pow(x,4)-1.466526928019e+06*pow(x,5)+5.311363086823e+06*pow(x,6)-1.047728126531e+07*pow(x,7)+7.681195504772e+06*pow(x,8)+5.547632931134e+06*pow(x,9)+2.264939715643e+06*pow(x,10)-3.497737650155e+07*pow(x,11)-1.144531033436e+07*pow(x,12)+1.304680598856e+08*pow(x,13)-1.862665964381e+08*pow(x,14)+3.050155483900e+08*pow(x,15)-2.163751605669e+08*pow(x,16)-7.924428966215e+07*pow(x,17)-5.056370548094e+08*pow(x,18)+8.471081258226e+07*pow(x,19)+9.373585748961e+08*pow(x,20)+3.633536003057e+08*pow(x,21)+1.704827246260e+09*pow(x,22)-2.032163575793e+09*pow(x,23)+2.128799925223e+09*pow(x,24)-7.272383731514e+09*pow(x,25)-5.553795816104e+09*pow(x,26)+5.367045731400e+09*pow(x,27)+2.954690628031e+09*pow(x,28)+1.084073673492e+10*pow(x,29)-2.276039368460e+10*pow(x,30)+3.242404917694e+10*pow(x,31)+3.106177236119e+10*pow(x,32)+8.517479838433e+09*pow(x,33)-3.394084296530e+10*pow(x,34)-3.440391476958e+10*pow(x,35)-1.196166211239e+11*pow(x,36)-4.306897298925e+10*pow(x,37)-7.347793451046e+10*pow(x,38)+3.716228911944e+11*pow(x,39)+6.541814750312e+10*pow(x,40)-4.269853673591e+11*pow(x,41)+2.704696483724e+11*pow(x,42)+1.058371568609e+12*pow(x,43)-1.442685965980e+12*pow(x,44)+1.082796670681e+12*pow(x,45)-1.212816381390e+12*pow(x,46)+2.916474916597e+12*pow(x,47)-8.499222761320e+12*pow(x,48)+9.864178216848e+12*pow(x,49)-6.130429553054e+12*pow(x,50)+2.503884887726e+12*pow(x,51);
  668.     h[25]=2.608772141030e+02-3.243335910983e+02*x+2.903842744822e+03*pow(x,2)-6.749947550699e+04*pow(x,3)+8.772948595666e+05*pow(x,4)-6.009158478594e+06*pow(x,5)+2.266093200002e+07*pow(x,6)-4.305187182371e+07*pow(x,7)+2.043059915374e+07*pow(x,8)+4.518005122431e+07*pow(x,9)-6.454221367090e+06*pow(x,10)-9.763715512186e+07*pow(x,11)-8.114682668619e+07*pow(x,12)+3.651363117799e+08*pow(x,13)-7.063280891559e+08*pow(x,14)+1.405083570259e+09*pow(x,15)-5.139074401638e+08*pow(x,16)-4.878823491393e+08*pow(x,17)-1.625106504581e+09*pow(x,18)-8.837244114902e+08*pow(x,19)+2.977445836507e+09*pow(x,20)+1.288197484997e+09*pow(x,21)+5.094965251777e+09*pow(x,22)-4.534593526973e+09*pow(x,23)+1.135353875452e+10*pow(x,24)-2.593619779297e+10*pow(x,25)-1.863877722911e+10*pow(x,26)+2.129234008688e+10*pow(x,27)+1.371746205295e+10*pow(x,28)+1.862458424464e+10*pow(x,29)-9.928850793786e+10*pow(x,30)+9.674822879549e+10*pow(x,31)+1.164361604401e+11*pow(x,32)+4.903456908195e+10*pow(x,33)-1.169367388903e+11*pow(x,34)-5.605646059219e+10*pow(x,35)-3.404147025938e+11*pow(x,36)-7.563932851441e+10*pow(x,37)-3.813909625942e+11*pow(x,38)+1.408393804453e+12*pow(x,39)+1.947285600004e+11*pow(x,40)-1.786908314671e+12*pow(x,41)+5.990930369894e+11*pow(x,42)+3.921330360897e+12*pow(x,43)-6.317432442430e+12*pow(x,44)+4.698980638586e+12*pow(x,45)-2.632042663913e+12*pow(x,46)+9.072351331154e+12*pow(x,47)-2.810822254258e+13*pow(x,48)+3.287576490201e+13*pow(x,49)-1.789287882986e+13*pow(x,50)+4.988557440734e+12*pow(x,51);
  669.     h[26]=2.701996250402e+02-3.551140375914e+02*x+4.056646645593e+03*pow(x,2)-8.009103282878e+04*pow(x,3)+8.786087221404e+05*pow(x,4)-5.343381373570e+06*pow(x,5)+1.859720823364e+07*pow(x,6)-3.370769996644e+07*pow(x,7)+1.679964014302e+07*pow(x,8)+3.032756583384e+07*pow(x,9)-4.790136698145e+06*pow(x,10)-7.006905641067e+07*pow(x,11)-4.647860505873e+07*pow(x,12)+2.720511711920e+08*pow(x,13)-5.412223590124e+08*pow(x,14)+9.702650760161e+08*pow(x,15)-3.942449083408e+08*pow(x,16)-2.815934170233e+08*pow(x,17)-9.274213290027e+08*pow(x,18)-7.954661787830e+08*pow(x,19)+2.488253146468e+09*pow(x,20)+7.205329883356e+08*pow(x,21)+2.747777588855e+09*pow(x,22)-4.276289073552e+09*pow(x,23)+8.817470652794e+09*pow(x,24)-1.840077816146e+10*pow(x,25)-1.120987380016e+10*pow(x,26)+1.801300660244e+10*pow(x,27)+1.307122910072e+10*pow(x,28)+1.027438159794e+10*pow(x,29)-7.460758543096e+10*pow(x,30)+6.034803555415e+10*pow(x,31)+7.666454814353e+10*pow(x,32)+3.820580451791e+10*pow(x,33)-9.419941372189e+10*pow(x,34)-5.077741435316e+10*pow(x,35)-1.841739278886e+11*pow(x,36)-3.088870122581e+10*pow(x,37)-2.362722416102e+11*pow(x,38)+1.011720039324e+12*pow(x,39)+1.093296191834e+11*pow(x,40)-1.533793881549e+12*pow(x,41)+5.496252200410e+11*pow(x,42)+2.752057715601e+12*pow(x,43)-4.320861096441e+12*pow(x,44)+3.004410735267e+12*pow(x,45)-1.699823103286e+12*pow(x,46)+6.916276885014e+12*pow(x,47)-1.959270076094e+13*pow(x,48)+2.243594059218e+13*pow(x,49)-1.304173048695e+13*pow(x,50)+4.059527247666e+12*pow(x,51);
  670.     h[27]=2.814486457368e+02-3.577488289082e+02*x+3.034559343732e+03*pow(x,2)-4.736040513036e+04*pow(x,3)+4.150812996819e+05*pow(x,4)-1.851987779380e+06*pow(x,5)+3.986936049271e+06*pow(x,6)-2.473296671512e+06*pow(x,7)-1.829076330031e+06*pow(x,8)-3.831147329397e+06*pow(x,9)-3.938711942376e+06*pow(x,10)+4.306804447771e+07*pow(x,11)+9.141238902823e+06*pow(x,12)-7.590139873773e+07*pow(x,13)-3.492038712732e+07*pow(x,14)-1.095170206469e+08*pow(x,15)+1.382658671018e+08*pow(x,16)+9.363870966584e+07*pow(x,17)+8.382923239671e+08*pow(x,18)-6.108392626322e+08*pow(x,19)+4.019413784351e+08*pow(x,20)-9.038475667271e+08*pow(x,21)-3.046723075625e+09*pow(x,22)-1.008414696231e+09*pow(x,23)+9.565104704821e+08*pow(x,24)+3.758798748266e+09*pow(x,25)+8.847993634506e+09*pow(x,26)+7.036763433302e+09*pow(x,27)+3.888202720082e+09*pow(x,28)-2.144467134725e+10*pow(x,29)+8.202989342761e+09*pow(x,30)-3.321386983968e+10*pow(x,31)-3.114689258479e+10*pow(x,32)-1.257770955330e+10*pow(x,33)-3.774268183326e+10*pow(x,34)+1.660736486506e+10*pow(x,35)+2.293110111709e+11*pow(x,36)+1.205766906226e+11*pow(x,37)+1.650156471527e+11*pow(x,38)-2.203841239064e+11*pow(x,39)-1.336830913346e+11*pow(x,40)-3.440375080513e+11*pow(x,41)+3.085514609441e+11*pow(x,42)-9.383735679802e+11*pow(x,43)+5.487351994272e+11*pow(x,44)-1.143196247568e+12*pow(x,45)+1.455359602597e+12*pow(x,46)-1.240538715464e+12*pow(x,47)+6.302106075253e+12*pow(x,48)-6.546882671616e+12*pow(x,49)+4.047726907060e+12*pow(x,50)-2.796661952720e+12*pow(x,51);
  671.     h[28]=2.926979540135e+02-3.605868223057e+02*x+2.624954977597e+03*pow(x,2)-5.190799706794e+04*pow(x,3)+5.983375058663e+05*pow(x,4)-3.845699550346e+06*pow(x,5)+1.469241093493e+07*pow(x,6)-3.133569355432e+07*pow(x,7)+2.631185577422e+07*pow(x,8)+1.097291342367e+07*pow(x,9)+2.766354632043e+07*pow(x,10)-1.634989688166e+08*pow(x,11)+3.357212130660e+07*pow(x,12)+3.302990732391e+08*pow(x,13)-3.945157316839e+08*pow(x,14)+6.023170806343e+08*pow(x,15)-5.284182573488e+08*pow(x,16)+4.950200199226e+07*pow(x,17)-1.275413162964e+09*pow(x,18)-8.044512563395e+07*pow(x,19)+1.507267754720e+09*pow(x,20)+2.015579592776e+09*pow(x,21)+3.644941261624e+09*pow(x,22)-5.092116511925e+09*pow(x,23)+8.000537210821e+09*pow(x,24)-1.724909097130e+10*pow(x,25)-1.501160494230e+10*pow(x,26)+6.409303408366e+09*pow(x,27)+2.329854336556e+10*pow(x,28)+3.434369327037e+10*pow(x,29)-9.884898833247e+10*pow(x,30)+5.680537030024e+10*pow(x,31)+4.803125560852e+10*pow(x,32)+6.604313353982e+10*pow(x,33)+6.002950741334e+10*pow(x,34)-1.026301519208e+11*pow(x,35)-2.719049733043e+11*pow(x,36)-6.538176349861e+10*pow(x,37)-4.115575826906e+11*pow(x,38)+1.208921633249e+12*pow(x,39)+1.205272074672e+11*pow(x,40)-1.787828599161e+12*pow(x,41)-1.982266013155e+11*pow(x,42)+3.359079328672e+12*pow(x,43)-2.686653368064e+12*pow(x,44)+2.053306848659e+12*pow(x,45)-1.172675615719e+12*pow(x,46)+9.115868314346e+12*pow(x,47)-2.127316573656e+13*pow(x,48)+2.076010802011e+13*pow(x,49)-2.049308489885e+13*pow(x,50)+1.212862102761e+13*pow(x,51);
  672.     h[29]=3.018368921543e+02-2.344805985035e+02*x-1.523737344596e+03*pow(x,2)+9.715272854334e+03*pow(x,3)+1.015844996981e+05*pow(x,4)-1.492197123870e+06*pow(x,5)+8.114885242908e+06*pow(x,6)-2.153463785038e+07*pow(x,7)+2.127194065219e+07*pow(x,8)+9.992958556127e+06*pow(x,9)+2.037757596591e+07*pow(x,10)-1.473907183199e+08*pow(x,11)+1.204662368682e+07*pow(x,12)+3.325891431350e+08*pow(x,13)-2.912499560833e+08*pow(x,14)+5.413735825946e+08*pow(x,15)-5.882097134305e+08*pow(x,16)-4.112244372542e+07*pow(x,17)-1.632388221441e+09*pow(x,18)+6.025059619307e+08*pow(x,19)+1.196744820674e+09*pow(x,20)+2.004270506506e+09*pow(x,21)+5.373237607412e+09*pow(x,22)-3.465289302035e+09*pow(x,23)+4.400040696732e+09*pow(x,24)-1.673008660295e+10*pow(x,25)-1.816964536140e+10*pow(x,26)+1.860539862008e+08*pow(x,27)+1.079209739717e+10*pow(x,28)+4.544522267822e+10*pow(x,29)-7.307855556345e+10*pow(x,30)+7.488289954443e+10*pow(x,31)+7.318217158328e+10*pow(x,32)+5.469828170073e+10*pow(x,33)+4.192376469564e+10*pow(x,34)-9.550900479280e+10*pow(x,35)-4.016704688519e+11*pow(x,36)-1.730719796120e+11*pow(x,37)-4.096383851825e+11*pow(x,38)+1.040841739786e+12*pow(x,39)+2.101471315496e+11*pow(x,40)-9.408712520384e+11*pow(x,41)-2.261201129559e+11*pow(x,42)+3.247158794816e+12*pow(x,43)-2.460322626663e+12*pow(x,44)+2.611304956123e+12*pow(x,45)-2.812997435695e+12*pow(x,46)+8.237815662550e+12*pow(x,47)-2.213386581153e+13*pow(x,48)+2.184578779963e+13*pow(x,49)-1.814379051120e+13*pow(x,50)+1.102274867858e+13*pow(x,51);
  673.     h[30]=3.115750947061e+02-3.809122144674e+02*x+2.733643926239e+03*pow(x,2)-4.283874229984e+04*pow(x,3)+3.787260130626e+05*pow(x,4)-1.677334534608e+06*pow(x,5)+3.746870136929e+06*pow(x,6)-3.622475397685e+06*pow(x,7)+2.222494070899e+06*pow(x,8)-6.600169736745e+06*pow(x,9)+1.112727626209e+06*pow(x,10)+1.435129874091e+07*pow(x,11)+1.964308300074e+07*pow(x,12)-1.288415382753e+07*pow(x,13)-3.690628821774e+07*pow(x,14)-1.283178807788e+08*pow(x,15)-7.288472240369e+06*pow(x,16)+1.527372714361e+08*pow(x,17)+5.667186556274e+08*pow(x,18)-2.698947224825e+08*pow(x,19)+5.348534126745e+08*pow(x,20)-5.841722521224e+08*pow(x,21)-2.058395554537e+09*pow(x,22)-1.637403895842e+09*pow(x,23)+4.477383731982e+08*pow(x,24)+1.910732139302e+09*pow(x,25)+6.034217336554e+09*pow(x,26)+4.755010376917e+09*pow(x,27)+4.128373083048e+09*pow(x,28)-8.985117795294e+09*pow(x,29)+1.946740644041e+09*pow(x,30)-2.242048579779e+10*pow(x,31)-1.990458376951e+10*pow(x,32)-3.289903889524e+09*pow(x,33)-2.465035425385e+10*pow(x,34)-7.403332016015e+09*pow(x,35)+1.507857290059e+11*pow(x,36)+6.467887743466e+10*pow(x,37)+1.055995548356e+11*pow(x,38)-1.053161369200e+11*pow(x,39)-8.176702691304e+10*pow(x,40)-3.501951115451e+11*pow(x,41)+2.143860369891e+11*pow(x,42)-4.665095787458e+11*pow(x,43)+6.374838741421e+11*pow(x,44)-9.076530814175e+11*pow(x,45)+5.939481745747e+11*pow(x,46)+3.010093953044e+11*pow(x,47)+2.857689616422e+12*pow(x,48)-4.054362289997e+12*pow(x,49)+1.182690082809e+12*pow(x,50)-1.497972944371e+11*pow(x,51);
  674.     h[31]=3.216986042644e+02-4.221172665423e+02*x+5.052511502488e+03*pow(x,2)-1.161200285504e+05*pow(x,3)+1.429866358106e+06*pow(x,4)-9.441423501380e+06*pow(x,5)+3.484149288721e+07*pow(x,6)-6.531938438354e+07*pow(x,7)+2.916511619443e+07*pow(x,8)+7.322482187037e+07*pow(x,9)-1.233247636675e+07*pow(x,10)-1.460565969448e+08*pow(x,11)-1.342976045448e+08*pow(x,12)+5.413856904666e+08*pow(x,13)-1.106431863587e+09*pow(x,14)+2.294412227190e+09*pow(x,15)-6.740202789193e+08*pow(x,16)-9.484191789856e+08*pow(x,17)-2.657291355471e+09*pow(x,18)-1.539301720064e+09*pow(x,19)+4.421913773771e+09*pow(x,20)+2.240639275801e+09*pow(x,21)+8.339871474332e+09*pow(x,22)-6.189337448853e+09*pow(x,23)+1.830948153500e+10*pow(x,24)-4.054528669465e+10*pow(x,25)-3.145292200555e+10*pow(x,26)+3.398190264994e+10*pow(x,27)+2.177374274084e+10*pow(x,28)+2.312062590964e+10*pow(x,29)-1.553980129039e+11*pow(x,30)+1.595743552615e+11*pow(x,31)+1.804095380412e+11*pow(x,32)+6.467949685904e+10*pow(x,33)-1.762381987734e+11*pow(x,34)-7.410656747203e+10*pow(x,35)-5.436129069689e+11*pow(x,36)-9.782884240532e+10*pow(x,37)-5.710610395427e+11*pow(x,38)+2.198684684824e+12*pow(x,39)+3.022069948909e+11*pow(x,40)-2.768108033218e+12*pow(x,41)+9.743382542191e+11*pow(x,42)+6.098933985984e+12*pow(x,43)-1.052540963505e+13*pow(x,44)+7.480721711939e+12*pow(x,45)-3.431015605977e+12*pow(x,46)+1.285342722623e+13*pow(x,47)-4.272776614378e+13*pow(x,48)+5.246850776123e+13*pow(x,49)-2.755822026426e+13*pow(x,50)+6.034334976951e+12*pow(x,51);
  675.     h[32]=3.324597374125e+02-4.436579646922e+02*x+5.160060195900e+03*pow(x,2)-1.038061863419e+05*pow(x,3)+1.136871925821e+06*pow(x,4)-6.732303311285e+06*pow(x,5)+2.260079991064e+07*pow(x,6)-3.984249226091e+07*pow(x,7)+2.042477997888e+07*pow(x,8)+3.257318956274e+07*pow(x,9)-3.884837593564e+06*pow(x,10)-8.541383619426e+07*pow(x,11)-4.889754546019e+07*pow(x,12)+3.381140479102e+08*pow(x,13)-6.743806190691e+08*pow(x,14)+1.189568543181e+09*pow(x,15)-4.644210089845e+08*pow(x,16)-4.368147267369e+08*pow(x,17)-1.206718752353e+09*pow(x,18)-8.572468469522e+08*pow(x,19)+3.141999332795e+09*pow(x,20)+1.025061675375e+09*pow(x,21)+3.684834899829e+09*pow(x,22)-5.428592303487e+09*pow(x,23)+1.056480078631e+10*pow(x,24)-2.285140598862e+10*pow(x,25)-1.540728671251e+10*pow(x,26)+2.271791672137e+10*pow(x,27)+1.583034975927e+10*pow(x,28)+1.177711435828e+10*pow(x,29)-8.864311265621e+10*pow(x,30)+8.354488892481e+10*pow(x,31)+9.384838932709e+10*pow(x,32)+3.379533780026e+10*pow(x,33)-1.161143696427e+11*pow(x,34)-6.601331582655e+10*pow(x,35)-2.364264278207e+11*pow(x,36)-3.488029079971e+10*pow(x,37)-2.445381518744e+11*pow(x,38)+1.217040715856e+12*pow(x,39)+1.206603200622e+11*pow(x,40)-1.874821916162e+12*pow(x,41)+8.041709691552e+11*pow(x,42)+3.328283655732e+12*pow(x,43)-5.507909509842e+12*pow(x,44)+3.581572350113e+12*pow(x,45)-1.883405939983e+12*pow(x,46)+8.047646370428e+12*pow(x,47)-2.375479351829e+13*pow(x,48)+2.867608116112e+13*pow(x,49)-1.656320896772e+13*pow(x,50)+4.513609749036e+12*pow(x,51);
  676.     h[33]=3.425247456963e+02-4.264832008778e+02*x+3.664727663842e+03*pow(x,2)-6.136782539675e+04*pow(x,3)+4.821694575591e+05*pow(x,4)-1.193841693393e+06*pow(x,5)-3.042019521633e+06*pow(x,6)+1.973916879534e+07*pow(x,7)-2.002599126811e+07*pow(x,8)-2.627859383286e+07*pow(x,9)-3.240274894967e+07*pow(x,10)+2.093751213494e+08*pow(x,11)+1.512537047512e+07*pow(x,12)-3.252041957906e+08*pow(x,13)+2.115628593303e+08*pow(x,14)-8.482102576029e+08*pow(x,15)+4.458018924085e+08*pow(x,16)+2.731480944868e+08*pow(x,17)+2.779981857663e+09*pow(x,18)-6.744029785046e+08*pow(x,19)+5.282615779951e+08*pow(x,20)-3.701810954847e+09*pow(x,21)-9.010403710966e+09*pow(x,22)-1.062310799717e+08*pow(x,23)-5.946535311262e+09*pow(x,24)+1.992727865362e+10*pow(x,25)+3.001630915646e+10*pow(x,26)+1.006199575226e+10*pow(x,27)-1.310340900162e+10*pow(x,28)-5.917103434855e+10*pow(x,29)+1.028498773045e+11*pow(x,30)-1.066545289404e+11*pow(x,31)-8.418054427235e+10*pow(x,32)-7.454316096030e+10*pow(x,33)-1.621870307729e+11*pow(x,34)+7.024704610685e+10*pow(x,35)+6.489957345171e+11*pow(x,36)+2.219210454935e+11*pow(x,37)+7.164851000219e+11*pow(x,38)-1.436486203998e+12*pow(x,39)-3.373096358368e+11*pow(x,40)+7.616147706459e+11*pow(x,41)+1.102422965274e+12*pow(x,42)-4.412960319978e+12*pow(x,43)+3.943887612140e+12*pow(x,44)-4.200262841452e+12*pow(x,45)+2.192748183532e+12*pow(x,46)-8.165458388608e+12*pow(x,47)+2.696553904715e+13*pow(x,48)-2.856757517397e+13*pow(x,49)+2.319237644065e+13*pow(x,50)-1.295115768718e+13*pow(x,51);
  677.     h[34]=3.539211287006e+02-5.484847279936e+02*x+7.569408780670e+03*pow(x,2)-1.347788782191e+05*pow(x,3)+1.394479977101e+06*pow(x,4)-8.446283181173e+06*pow(x,5)+3.104565991760e+07*pow(x,6)-6.387987236706e+07*pow(x,7)+4.674936630919e+07*pow(x,8)+4.205191609076e+07*pow(x,9)+3.185181405990e+07*pow(x,10)-2.926526972746e+08*pow(x,11)-1.576921591514e+07*pow(x,12)+7.069065959729e+08*pow(x,13)-9.508504172255e+08*pow(x,14)+1.809014786446e+09*pow(x,15)-1.035611301231e+09*pow(x,16)-5.341125408712e+08*pow(x,17)-3.355906771851e+09*pow(x,18)-2.269753381330e+08*pow(x,19)+3.778560315122e+09*pow(x,20)+4.139922944392e+09*pow(x,21)+1.052142403302e+10*pow(x,22)-8.593432922339e+09*pow(x,23)+1.633510924193e+10*pow(x,24)-4.139651290258e+10*pow(x,25)-4.000839836368e+10*pow(x,26)+1.918593834004e+10*pow(x,27)+3.491982863777e+10*pow(x,28)+6.654894826864e+10*pow(x,29)-1.885099250577e+11*pow(x,30)+1.725159102734e+11*pow(x,31)+1.596046208624e+11*pow(x,32)+9.865054545015e+10*pow(x,33)+6.852525947812e+09*pow(x,34)-1.771525643766e+11*pow(x,35)-7.255234944979e+11*pow(x,36)-2.141172085711e+11*pow(x,37)-7.756064191249e+11*pow(x,38)+2.535225126932e+12*pow(x,39)+3.838070905729e+11*pow(x,40)-3.142523869744e+12*pow(x,41)+1.426741428276e+11*pow(x,42)+7.376295705185e+12*pow(x,43)-8.546099852534e+12*pow(x,44)+6.399261975069e+12*pow(x,45)-3.926186738619e+12*pow(x,46)+1.737899438409e+13*pow(x,47)-4.859092604866e+13*pow(x,48)+5.374942886679e+13*pow(x,49)-4.021109112651e+13*pow(x,50)+1.883450530617e+13*pow(x,51);
  678.     h[35]=3.635477592209e+02-4.683215674615e+02*x+2.480710026119e+03*pow(x,2)-2.111297037138e+04*pow(x,3)+1.352985532951e+05*pow(x,4)-5.824473573401e+05*pow(x,5)+3.096603927174e+06*pow(x,6)-1.369870923142e+07*pow(x,7)+1.823517946886e+07*pow(x,8)+7.066146612387e+07*pow(x,9)-2.128177755324e+08*pow(x,10)-2.988263490070e+07*pow(x,11)+4.091577978683e+08*pow(x,12)+1.175662823958e+08*pow(x,13)+8.055746467984e+07*pow(x,14)-1.721520149994e+09*pow(x,15)+1.646196590715e+09*pow(x,16)-2.989346719871e+09*pow(x,17)+2.651406890466e+09*pow(x,18)-3.995663605652e+08*pow(x,19)+9.983354634416e+09*pow(x,20)-5.819394998183e+09*pow(x,21)+6.030208555744e+09*pow(x,22)-7.412184623310e+08*pow(x,23)-3.701983776454e+10*pow(x,24)-4.176312032892e+10*pow(x,25)-2.540353538424e+10*pow(x,26)+8.917832014591e+10*pow(x,27)+1.451300076987e+11*pow(x,28)+6.748904207098e+10*pow(x,29)+1.662859532699e+11*pow(x,30)-1.989048677254e+11*pow(x,31)-3.364485131812e+11*pow(x,32)-6.602440781743e+11*pow(x,33)+2.420797485587e+11*pow(x,34)+3.101238966538e+11*pow(x,35)+3.411940934786e+11*pow(x,36)-7.387394952668e+11*pow(x,37)-1.072075757810e+12*pow(x,38)+4.934476961766e+11*pow(x,39)+9.164610970250e+12*pow(x,40)-4.330154240270e+12*pow(x,41)+3.231024659723e+12*pow(x,42)-7.213076878796e+12*pow(x,43)+1.634892993553e+12*pow(x,44)-4.150678718083e+12*pow(x,45)-3.270764524355e+13*pow(x,46)+1.697377609102e+13*pow(x,47)+8.326219643038e+12*pow(x,48)+3.245471409345e+13*pow(x,49)+3.820842314164e+13*pow(x,50)-6.311888000080e+13*pow(x,51);
  679.     h[36]=3.746733225203e+02-4.353257076391e+02*x+8.299482264638e+02*pow(x,2)-6.252183708343e+03*pow(x,3)+5.200539003090e+04*pow(x,4)+5.534466862922e+05*pow(x,5)-8.575402790731e+06*pow(x,6)+4.100677747627e+07*pow(x,7)-6.718176367161e+07*pow(x,8)-1.241798682463e+08*pow(x,9)+7.265499789053e+08*pow(x,10)-1.203436602527e+09*pow(x,11)+6.773076119372e+08*pow(x,12)+3.627992590108e+08*pow(x,13)-1.021696432130e+09*pow(x,14)+1.571762393428e+09*pow(x,15)-6.481827859688e+08*pow(x,16)-3.405537437010e+09*pow(x,17)+4.995356814765e+09*pow(x,18)+4.986596046228e+09*pow(x,19)-1.452937945895e+10*pow(x,20)+2.166394438691e+09*pow(x,21)-1.071169030165e+09*pow(x,22)+3.120219029020e+10*pow(x,23)-2.122004726272e+10*pow(x,24)-2.486107779815e+10*pow(x,25)+6.268875308782e+09*pow(x,26)+5.185872921397e+10*pow(x,27)-3.165899546850e+10*pow(x,28)+2.174715967195e+10*pow(x,29)-3.332984128597e+10*pow(x,30)-1.055485358916e+11*pow(x,31)+1.502352758075e+11*pow(x,32)+1.780350978261e+11*pow(x,33)-7.950193430087e+11*pow(x,34)+2.690275239534e+11*pow(x,35)+1.970597768779e+12*pow(x,36)-3.569862981542e+12*pow(x,37)+1.251537720157e+12*pow(x,38)+2.428987985959e+12*pow(x,39)+8.676522287442e+11*pow(x,40)+6.624154201634e+12*pow(x,41)-1.519277873193e+13*pow(x,42)-9.264122589635e+12*pow(x,43)-7.597521813214e+11*pow(x,44)+2.493056845585e+13*pow(x,45)+1.368571831381e+13*pow(x,46)-9.502121113843e+12*pow(x,47)+1.192133441831e+13*pow(x,48)-1.197291892858e+14*pow(x,49)+1.494057413196e+14*pow(x,50)-5.538134425264e+13*pow(x,51);
  680.  
  681.     return ((T/10-4)-(Tx-1))/2*(h[Tx+1]-h[Tx-1])+h[Tx-1];
  682. }*/
  683.  
  684.  
  685. double Hx(double x,double T) {
  686.     if (x<concentraciones.front() || x>concentraciones.back() || T<temperaturas.front() || T>temperaturas.back()) {
  687.         throw std::logic_error("x o T fuera de rango.");
  688.     }
  689.     size_t i=0;
  690.     while(i<concentraciones.size()-1 && x>concentraciones[i+1]) {
  691.         i++;
  692.     }
  693.     size_t j=0;
  694.     while(j<temperaturas.size()-1 && T>temperaturas[j+1]) {
  695.         j++;
  696.     }
  697.     double x1=concentraciones[i],x2=concentraciones[i+1];
  698.     double T1=temperaturas[j],T2=temperaturas[j+1];
  699.     double Q11=tabla[i][j];
  700.     double Q12=tabla[i][j+1];
  701.     double Q21=tabla[i+1][j];
  702.     double Q22=tabla[i+1][j+1];
  703.     return (Q11*(x2-x)*(T2-T)+Q21*(x-x1)*(T2-T)+Q12*(x2-x)*(T-T1)+Q22*(x-x1)*(T-T1))/((x2-x1)*(T2-T1));
  704. }
  705. double CP(double T) {
  706.     if (T<temperaturas.front()||T>temperaturas.back()) {
  707.         throw std::out_of_range("Temperatura fuera del rango.");
  708.     }
  709.     for(size_t i=0; i<temperaturas.size()-1; ++i) {
  710.         if (T>=temperaturas[i] && T<=temperaturas[i+1]) {
  711.             double t1=temperaturas[i];
  712.             double t2=temperaturas[i+1];
  713.             double cp1=cp_values[i];
  714.             double cp2=cp_values[i+1];
  715.             return cp1+(cp2-cp1)*(T-t1)/(t2-t1);
  716.         }
  717.     }
  718.  
  719.     throw std::logic_error("No se encontro.");
  720. }
  721. double determinante(double b[9][9],unsigned short int n) {
  722.     Eigen::MatrixXd matrix(n,n);
  723.     for (unsigned short int i=0; i<n; ++i) {
  724.         for (unsigned short int j=0; j<n; ++j) {
  725.             matrix(i,j)=b[i][j];
  726.         }
  727.     }
  728.     return matrix.determinant();
  729. }
  730. void escribir(void) {
  731.     label=0;
  732.     cout<<endl<<"*********************************************"<<endl;
  733.     cout<<"Orden: ";
  734.     for(int i=0; i<size; i++) {
  735.         cout<<efecto[i];
  736.     }
  737.     cout<<endl;
  738.     cout<<"Alimentaci\242n [lbm/h]="<<L[0]<<endl;
  739.     cout<<"Temperatura de alimentaci\242n [\370F]="<<T[0]<<endl;
  740.     cout<<"Concentraci\242n de entrada (fracci\242n en peso)="<<x[0]<<endl;
  741.     cout<<"Concentraci\242n de salida (fracci\242n en peso)="<<x[efecto[size-1]]<<endl;
  742.     cout<<"Presi\242n del vapor vivo [psia]="<<P[0]<<endl;
  743.     cout<<"Presi\242n del efecto "<<size<<" [psia]="<<P[size]<<endl;
  744.     cout<<"Coeficientes globales de transferencia de calor [BTU/(h*ft\375*\370F)]"<<endl;
  745.     for(int i=0; i<size; i++) {
  746.         cout<<"U["<<i<<"]="<<U[i]<<endl;
  747.     }
  748.     for(int i=0; i<=size; i++) {
  749.         cout<<"x["<<i<<"]="<<x[i]<<endl;
  750.     }
  751.     for(int i=0; i<=size; i++) {
  752.         cout<<"Tsat["<<i<<"]="<<Tsat[i]<<endl;
  753.     }
  754.     for(int i=0; i<=size; i++) {
  755.         cout<<"T["<<i<<"]="<<T[i]<<endl;
  756.     }
  757.     for(int i=0; i<=size; i++) {
  758.         cout<<"L["<<i<<"]="<<L[i]<<endl;
  759.     }
  760.     for(int i=0; i<size; i++) {
  761.         cout<<"epe["<<i<<"]="<<epe[i]<<endl;
  762.     }
  763.     for(int i=0; i<=size; i++) {
  764.         cout<<"A["<<i<<"]="<<A[i]<<endl;
  765.     }
  766.     for(int i=0; i<=size; i++) {
  767.         cout<<"deltaT["<<i<<"]="<<deltaT[i]<<endl;
  768.     }
  769.     for(int i=0; i<size; i++) {
  770.         cout<<"Q["<<i<<"]="<<Q[i]<<endl;
  771.     }
  772.     cout<<"S="<<V[0]<<endl;
  773.     cout<<"Area media="<<A[0]<<endl;
  774.     cout<<"Economia="<<economia<<endl;
  775.     cout<<endl<<"*********************************************"<<endl;
  776.     latex();
  777. }
  778. double contar(double n) {
  779.     return floor(n*100+0.5)/100;
  780. }
  781. void latex(void) {
  782.     setprecision(6);
  783.     ofstream f;
  784.     f.open("EvaporadorNaOH.tex",ios::out);
  785.     if(f.fail()) {
  786.         cout<<"ERROR AL CREAR EL ARCHIVO"<<endl;
  787.         exit(1);
  788.     }
  789.     double suma=0;
  790.     int random=1+rand()%7;
  791.     f<<"\134documentclass[addpoints,spanish,11pt,letterpaper]{exam}"<<endl;
  792.     f<<"\134usepackage{amsmath}"<<endl;
  793.     f<<"\134usepackage{";
  794.     switch(random) {
  795.         case 1: {
  796.             f<<"fourier";
  797.             break;
  798.         }
  799.         case 2: {
  800.             f<<"fouriernc";
  801.             break;
  802.         }
  803.         case 3: {
  804.             f<<"kpfonts";
  805.             break;
  806.         }
  807.         case 4: {
  808.             f<<"amsfonts";
  809.             break;
  810.         }
  811.         case 5: {
  812.             f<<"kmath,kerkis";
  813.             break;
  814.         }
  815.         case 6: {
  816.             f<<"libertinus";
  817.             break;
  818.         }
  819.         default: {
  820.             f<<"txfonts";
  821.             break;
  822.         }
  823.     }
  824.     f<<"}"<<endl;
  825.     f<<"\134usepackage[T1]{fontenc}"<<endl;
  826.     f<<"\134usepackage[left=1.0cm,right=1cm,top=1cm,bottom=1cm]{geometry}"<<endl;
  827.     f<<"\134usepackage[spanish]{babel}"<<endl;
  828.     f<<"\134usepackage{hyperref}"<<endl;
  829.     f<<"\134usepackage{multicol}"<<endl;
  830.     f<<"\134usepackage[dvipsnames]{xcolor}"<<endl;
  831.     f<<"\134spanishdecimal{.}"<<endl;
  832.     f<<"\134printanswers"<<endl;
  833.     f<<"\134unframedsolutions"<<endl;
  834.     f<<"\134renewcommand{\134solutiontitle}{\134textbf{Soluci\134'on:}}"<<endl;
  835.  
  836.  
  837.     f<<"\134usepackage[pdftex]{pict2e}"<<endl;
  838.     f<<"\134usepackage{wrapfig}"<<endl;
  839.  
  840.  
  841.     f<<"\134begin{document}"<<endl;
  842.     f<<"\134begin{questions}"<<endl;
  843.     f<<"\134question Un evaporador de "<<size<<" efectos est\134'a concentrando una soluci\134'on de sosa c\134'austica del "<<x[0]*100<<" \134% en peso y a "<<T[0]<<" $^{\134circ}\134text{F}$ hasta el "<<x[efecto[size-1]]*100<<" \134%. El vapor empleado entra a "<<P[0]<<" psia. La presi\134'on absoluta del \134'ultimo efecto es "<<P[size]<<" psia. La velocidad de alimentaci\134'on es "<<L[0]<<" $\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}$.";
  844.     f<<" Los coeficientes de transferencia de calor son ";
  845.     for(int i=0; i<size; i++) {
  846.         f<<"$U_{"<<i+1<<"}="<<U[i]<<"\176\134tfrac{\134text{BTU}}{\134text{h}\134cdot \134text{ft}^2 \134cdot ^{\134circ}\134text{F}}$";
  847.         if(i<size-2) {
  848.             f<<",";
  849.         } else {
  850.             if(i==size-2) {
  851.                 f<<" y ";
  852.             }
  853.         }
  854.     }
  855.     f<<". Todos los efectos tienen la misma \134'area. El orden de los efectos es ";
  856.     for(int i=0; i<size; i++) {
  857.         f<<efecto[i];
  858.     }
  859.     f<<". Calcule:"<<endl;
  860.     f<<"\134begin{center}"<<endl;
  861.     f<<"\134begin{parts}"<<endl;
  862.     f<<"\134part Las \134'areas de los efectos."<<endl;
  863.     f<<"\134part Flujo m\134'asico del vapor vivo."<<endl;
  864.     f<<"\134part La econom\134'ia."<<endl;
  865.     f<<"\134end{parts}"<<endl;
  866.     f<<"\134end{center}"<<endl;
  867.     f<<"\134end{questions}"<<endl;
  868.     f<<"\134begin{solution}"<<endl<<endl;
  869.  
  870.  
  871.     int altura=size;
  872.     /*Empieza los dibujos*/
  873.  
  874.  
  875.     f<<"\134setlength{\134unitlength}{0.5cm}"<<endl;
  876.     bool ejex[50][50],ejey[50][50];
  877.     for(int i=0; i<50; i++) {
  878.         for(int j=0; j<50; j++) {
  879.             ejex[i][j]=false;
  880.             ejey[i][j]=false;
  881.         }
  882.     }
  883.  
  884.     for(int i=0; i<size; i++) {
  885.         double coord_x1,coord_x2;
  886.         if(i!=size-1) {
  887.             coord_x1=4*efecto[i]-1;
  888.             coord_x2=4*efecto[i+1]-2.5;
  889.         } else {
  890.             coord_x1=4*efecto[i]-1;
  891.         }
  892.         int x1=2*efecto[i]-1;
  893.         int x2;
  894.         if(i!=size-1) {
  895.             x2=2*efecto[i+1]-2;
  896.         } else {
  897.             x2=x1+1;
  898.         }
  899.  
  900.         unsigned short int fila=0,verificar;
  901.         do {
  902.             verificar=0;
  903.             fila++;
  904.             if(x1<x2) {
  905.                 for(int k=x1; k<x2; k++) {
  906.                     if(ejex[fila][k]) {
  907.                         verificar++;
  908.                     }
  909.                 }
  910.             } else {
  911.                 for(int k=x2; k<x1; k++) {
  912.                     if(ejex[fila][k]) {
  913.                         verificar++;
  914.                     }
  915.                 }
  916.             }
  917.         } while(verificar>0);
  918.         bool curva_adelante=false;
  919.         bool curva_atras=false;
  920.         for(int k=0; k<fila; k++) {
  921.             ejey[k][x1]=true;
  922.             if(ejex[k+1][x1] and ejex[k+1][x1-1]) {
  923.                 curva_adelante=true;
  924.             } else {
  925.                 curva_adelante=false;
  926.             }
  927.             if(curva_adelante and curva_atras) {
  928.                 curva_atras=true;
  929.             } else if(curva_adelante and curva_atras==false) {
  930.                 curva_atras=true;
  931.             } else if(curva_adelante==false and curva_atras) {
  932.                 curva_atras=false;
  933.             } else if(curva_adelante==false and curva_atras==false) {
  934.                 curva_atras=false;
  935.             }
  936.             curva_atras=curva_adelante;
  937.         }
  938.         if(i<size-1) {
  939.             curva_adelante=false;
  940.             curva_atras=false;
  941.             if(x2!=0) {
  942.                 for(int k=0; k<fila; k++) {
  943.                     ejey[k][x2]=true;
  944.                     if(ejex[k+1][x2] and ejex[k+1][x2-1]) {
  945.                         curva_adelante=true;
  946.                     } else {
  947.                         curva_adelante=false;
  948.                     }
  949.                     if(curva_adelante and curva_atras) {
  950.                         curva_atras=true;
  951.                     } else if(curva_adelante and curva_atras==false) {
  952.  
  953.                         curva_atras=true;
  954.                     } else if(curva_adelante==false and curva_atras) {
  955.                         curva_atras=false;
  956.                     } else if(curva_adelante==false and curva_atras==false) {
  957.                         curva_atras=false;
  958.                     }
  959.                     curva_atras=curva_adelante;
  960.                 }
  961.             }
  962.         }
  963.         curva_adelante=false;
  964.         curva_atras=false;
  965.         if(i!=size-1) {
  966.             if(x1<x2) {
  967.                 for(int k=x1; k<x2; k++) {
  968.                     if(k==x1) {
  969.                         curva_atras=false;
  970.                     }
  971.                     ejex[fila][k]=true;
  972.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  973.                         curva_adelante=true;
  974.                     } else {
  975.                         curva_adelante=false;
  976.                     }
  977.                     if(k%2==0) {
  978.                         if(curva_adelante and curva_atras) {
  979.                             curva_atras=false;
  980.                         }
  981.                         if(curva_adelante and curva_atras==false) {
  982.                             curva_atras=true;
  983.                         }
  984.                         if(curva_adelante==false and curva_atras) {
  985.                             curva_atras=false;
  986.                         }
  987.                         if(curva_adelante==false and curva_atras==false) {
  988.                             curva_atras=false;
  989.                         }
  990.                         coord_x1=coord_x1+1.5;
  991.                     } else {
  992.                         if(curva_adelante and curva_atras) {
  993.                             curva_atras=false;
  994.                         }
  995.                         if(curva_adelante and curva_atras==false) {
  996.                             curva_atras=true;
  997.                         }
  998.                         if(curva_adelante==false and curva_atras) {
  999.                             curva_atras=false;
  1000.                         }
  1001.                         if(curva_adelante==false and curva_atras==false) {
  1002.                             curva_atras=false;
  1003.                         }
  1004.                         coord_x1=coord_x1+2.5;
  1005.                     }
  1006.                     curva_atras=curva_adelante;
  1007.                 }
  1008.             } else {
  1009.                 for(int k=x2; k<x1; k++) {
  1010.                     if(k==x2) {
  1011.                         curva_atras=false;
  1012.                     }
  1013.                     ejex[fila][k-1]=true;
  1014.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1015.                         curva_adelante=true;
  1016.                     } else {
  1017.                         curva_adelante=false;
  1018.                     }
  1019.                     if(k%2==0) {
  1020.                         if(curva_adelante and curva_atras) {
  1021.                             curva_atras=false;
  1022.                         } else if(curva_adelante and curva_atras==false) {
  1023.                             curva_atras=true;
  1024.                         } else if(curva_adelante==false and curva_atras) {
  1025.                             curva_atras=false;
  1026.                         } else if(curva_adelante==false and curva_atras==false) {
  1027.                             curva_atras=false;
  1028.                         }
  1029.                         coord_x2=coord_x2+1.5;
  1030.                     } else {
  1031.                         if(curva_adelante and curva_atras) {
  1032.                             curva_atras=false;
  1033.                         } else if(curva_adelante and curva_atras==false) {
  1034.                             curva_atras=true;
  1035.                         } else if(curva_adelante==false and curva_atras) {
  1036.                             curva_atras=false;
  1037.                         } else if(curva_adelante==false and curva_atras==false) {
  1038.                             curva_atras=false;
  1039.                         }
  1040.                         coord_x2=coord_x2+2.5;
  1041.                     }
  1042.                     curva_atras=curva_adelante;
  1043.                 }
  1044.             }
  1045.         }
  1046.     }
  1047.     altura=2;
  1048.     for(int i=0; i<50; i++) {
  1049.         unsigned short int po=0;
  1050.         for(int j=0; j<50; j++) {
  1051.             po=po+ejex[i][j];
  1052.         }
  1053.         if(po>0) {
  1054.             altura++;
  1055.         }
  1056.     }
  1057.     for(int i=0; i<50; i++) {
  1058.         for(int j=0; j<50; j++) {
  1059.             ejex[i][j]=false;
  1060.             ejey[i][j]=false;
  1061.         }
  1062.     }
  1063.     f<<"\134begin{picture}("<<size*4+2<<","<<5+altura<<")"<<endl;
  1064.     double distanciax,distanciay;
  1065.     for(int i=0; i<size; i++) {
  1066.         /*ENtrada de vapor,S V1 V2 V3... ETC*/
  1067.         if(i==0) {
  1068.             f<<"\134put(0,"<<altura+1<<"){\134vector(1,0){2}}"<<endl;
  1069.         } else {
  1070.             f<<"\134put("<<i*4+1<<","<<altura+1<<"){\134vector(1,0){1}}"<<endl;
  1071.         }
  1072.  
  1073.         /*SALIDA DE VAPOR de cada efecto*/
  1074.         f<<"\134put("<<i*4+3<<","<<altura+3<<"){\134line(0,1){1}}"<<endl;
  1075.         if(i==size-1) {
  1076.             f<<"\134put("<<i*4+3<<","<<altura+4<<"){\134vector(1,0){2}}"<<endl;
  1077.         } else {
  1078.             f<<"\134put("<<i*4+3<<","<<altura+4<<"){\134line(1,0){2}}"<<endl;
  1079.             f<<"\134put("<<i*4+5<<","<<altura+4<<"){\134line(0,-1){3}}"<<endl;
  1080.             f<<"\134put("<<i*4+5<<","<<altura+1<<"){\134vector(1,0){1}}"<<endl;
  1081.         }
  1082.         /*Efectos*/
  1083.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(0,1){2}}"<<endl;
  1084.         f<<"\134put("<<i*4+2<<","<<altura+3<<"){\134line(1,0){2}}"<<endl;
  1085.         f<<"\134put("<<i*4+4<<","<<altura+3<<"){\134line(0,-1){2}}"<<endl;
  1086.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(1,-1){1}}"<<endl;
  1087.         f<<"\134put("<<i*4+3<<","<<altura<<"){\134line(1,1){1}}"<<endl;
  1088.  
  1089.  
  1090.  
  1091.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(1,1){0.25}}"<<endl;
  1092.         f<<"\134put("<<i*4+2.25<<","<<altura+1+0.25<<"){\134line(1,-1){0.25}}"<<endl;
  1093.         f<<"\134put("<<i*4+2.5<<","<<altura+1<<"){\134line(1,1){0.25}}"<<endl;
  1094.         f<<"\134put("<<i*4+2.75<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<endl;
  1095.         f<<"\134put("<<i*4+3<<","<<altura+1<<"){\134line(1,1){0.25}}"<<endl;
  1096.         f<<"\134put("<<i*4+3.25<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<endl;
  1097.         f<<"\134put("<<i*4+3.5<<","<<altura+1<<"){\134line(1,1){0.25}}"<<endl;
  1098.         f<<"\134put("<<i*4+3.75<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<endl;
  1099.         f<<"\134put("<<i*4+4<<","<<altura+1<<"){\134line(1,0){0.5}}"<<endl;
  1100.         f<<"\134put("<<i*4+4.5<<","<<altura+1<<"){\134vector(0,-1){0.5}}"<<endl;
  1101.  
  1102.         /*Entrada de los licores*/
  1103.         f<<"\134put("<<i*4+1.5<<","<<altura+2.5<<"){\134vector(1,0){0.5}}"<<endl;
  1104.         if(i!=efecto[0]-1) {
  1105.             f<<"\134put("<<i*4+1.5<<","<<altura<<"){\134line(0,1){0.8}}"<<endl;
  1106.             f<<"\134put("<<i*4+1.5<<","<<altura+1<<"){\134oval(0.4,0.4)[l]}"<<endl;
  1107.             f<<"\134put("<<i*4+1.5<<","<<altura+1.2<<"){\134line(0,1){1.3}}"<<endl;
  1108.         }
  1109.  
  1110.         /*nombre de los efectos*/
  1111.         f<<"\134put("<<i*4+2.6<<","<<altura+2<<"){{\134footnotesize ("<<i+1<<")}}"<<endl;
  1112.  
  1113.  
  1114.  
  1115.  
  1116.         /*Los LICORES y el enredo de abajo*/
  1117.         /*ABAJO*/
  1118.         double coord_x1,coord_x2;
  1119.         if(i!=size-1) {
  1120.             coord_x1=4*efecto[i]-1;
  1121.             coord_x2=4*efecto[i+1]-2.5;
  1122.         } else {
  1123.             coord_x1=4*efecto[i]-1;
  1124.         }
  1125.         int x1=2*efecto[i]-1;
  1126.         int x2;
  1127.         if(i!=size-1) {
  1128.             x2=2*efecto[i+1]-2;
  1129.         } else {
  1130.             x2=x1+1;
  1131.         }
  1132.  
  1133.         unsigned short int fila=0,verificar;
  1134.         do {
  1135.             verificar=0;
  1136.             fila++;
  1137.             if(x1<x2) {
  1138.                 for(int k=x1; k<x2; k++) {
  1139.                     if(ejex[fila][k]) {
  1140.                         verificar++;
  1141.                     }
  1142.                 }
  1143.             } else {
  1144.                 for(int k=x2; k<x1; k++) {
  1145.                     if(ejex[fila][k]) {
  1146.                         verificar++;
  1147.                     }
  1148.                 }
  1149.             }
  1150.         } while(verificar>0);
  1151.         bool curva_adelante=false;
  1152.         bool curva_atras=false;
  1153.         for(int k=0; k<fila; k++) {
  1154.             ejey[k][x1]=true;
  1155.             if(ejex[k+1][x1] and ejex[k+1][x1-1]) {
  1156.                 curva_adelante=true;
  1157.             } else {
  1158.                 curva_adelante=false;
  1159.             }
  1160.             if(curva_adelante and curva_atras) {
  1161.                 f<<"\134put("<<coord_x1<<","<<altura-k-0.2<<"){\134line(0,-1){0.6}}"<<endl;
  1162.                 f<<"\134put("<<coord_x1<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<endl;
  1163.                 curva_atras=true;
  1164.             } else if(curva_adelante and curva_atras==false) {
  1165.                 f<<"\134put("<<coord_x1<<","<<altura-k<<"){\134line(0,-1){0.8}}"<<endl;
  1166.                 f<<"\134put("<<coord_x1<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<endl;
  1167.                 curva_atras=true;
  1168.             } else if(curva_adelante==false and curva_atras) {
  1169.                 f<<"\134put("<<coord_x1<<","<<altura-k-0.2<<"){\134line(0,-1){0.8}}"<<endl;
  1170.                 curva_atras=false;
  1171.             } else if(curva_adelante==false and curva_atras==false) {
  1172.                 f<<"\134put("<<coord_x1<<","<<altura-k<<"){\134line(0,-1){1}}"<<endl;
  1173.                 curva_atras=false;
  1174.             }
  1175.             curva_atras=curva_adelante;
  1176.         }
  1177.  
  1178.         if(i<size-1) {
  1179.             curva_adelante=false;
  1180.             curva_atras=false;
  1181.             if(x2!=0) {
  1182.                 for(int k=0; k<fila; k++) {
  1183.                     ejey[k][x2]=true;
  1184.                     if(ejex[k+1][x2] and ejex[k+1][x2-1]) {
  1185.                         curva_adelante=true;
  1186.                     } else {
  1187.                         curva_adelante=false;
  1188.                     }
  1189.                     if(curva_adelante and curva_atras) {
  1190.                         f<<"\134put("<<coord_x2<<","<<altura-k-0.2<<"){\134line(0,-1){0.6}}"<<endl;
  1191.                         f<<"\134put("<<coord_x2<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<endl;
  1192.                         curva_atras=true;
  1193.                     } else if(curva_adelante and curva_atras==false) {
  1194.                         f<<"\134put("<<coord_x2<<","<<altura-k<<"){\134line(0,-1){0.8}}"<<endl;
  1195.                         f<<"\134put("<<coord_x2<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<endl;
  1196.                         curva_atras=true;
  1197.                     } else if(curva_adelante==false and curva_atras) {
  1198.                         f<<"\134put("<<coord_x2<<","<<altura-k-0.2<<"){\134line(0,-1){0.8}}"<<endl;
  1199.                         curva_atras=false;
  1200.                     } else if(curva_adelante==false and curva_atras==false) {
  1201.                         f<<"\134put("<<coord_x2<<","<<altura-k<<"){\134line(0,-1){1}}"<<endl;
  1202.                         curva_atras=false;
  1203.                     }
  1204.                     curva_atras=curva_adelante;
  1205.                 }
  1206.             } else {
  1207.                 f<<"\134put("<<coord_x2<<","<<altura<<"){\134line(0,-1){"<<fila<<"}}"<<endl;
  1208.             }
  1209.         }
  1210.         /*HORIZONTAL*/
  1211.         curva_adelante=false;
  1212.         curva_atras=false;
  1213.         if(i!=size-1) {
  1214.             if(x1<x2) {
  1215.                 for(int k=x1; k<x2; k++) {
  1216.                     if(k==x1) {
  1217.                         curva_atras=false;
  1218.                     }
  1219.                     ejex[fila][k]=true;
  1220.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1221.                         curva_adelante=true;
  1222.                     } else {
  1223.                         curva_adelante=false;
  1224.                     }
  1225.                     if(k%2==0) {
  1226.                         if(curva_adelante and curva_atras) {
  1227.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){1.1}}"<<endl;
  1228.                             f<<"\134put("<<coord_x1+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1229.                             curva_atras=false;
  1230.                         }
  1231.                         if(curva_adelante and curva_atras==false) {
  1232.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<endl;
  1233.                             f<<"\134put("<<coord_x1+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1234.                             curva_atras=true;
  1235.                         }
  1236.                         if(curva_adelante==false and curva_atras) {
  1237.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<endl;
  1238.                             curva_atras=false;
  1239.                         }
  1240.                         if(curva_adelante==false and curva_atras==false) {
  1241.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){1.5}}"<<endl;
  1242.                             curva_atras=false;
  1243.                         }
  1244.                         coord_x1=coord_x1+1.5;
  1245.                     } else {
  1246.                         if(curva_adelante and curva_atras) {
  1247.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){2.1}}"<<endl;
  1248.                             f<<"\134put("<<coord_x1+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1249.                             curva_atras=false;
  1250.                         }
  1251.                         if(curva_adelante and curva_atras==false) {
  1252.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<endl;
  1253.                             f<<"\134put("<<coord_x1+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1254.                             curva_atras=true;
  1255.                         }
  1256.                         if(curva_adelante==false and curva_atras) {
  1257.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<endl;
  1258.                             curva_atras=false;
  1259.                         }
  1260.                         if(curva_adelante==false and curva_atras==false) {
  1261.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){2.5}}"<<endl;
  1262.                             curva_atras=false;
  1263.                         }
  1264.                         coord_x1=coord_x1+2.5;
  1265.                     }
  1266.                     curva_atras=curva_adelante;
  1267.                 }
  1268.             } else {
  1269.                 for(int k=x2; k<x1; k++) {
  1270.                     if(k==x2) {
  1271.                         curva_atras=false;
  1272.                     }
  1273.                     ejex[fila][k-1]=true;
  1274.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1275.                         curva_adelante=true;
  1276.                     } else {
  1277.                         curva_adelante=false;
  1278.                     }
  1279.                     if(k%2==0) {
  1280.                         if(curva_adelante and curva_atras) {
  1281.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){1.1}}"<<endl;
  1282.                             f<<"\134put("<<coord_x2+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1283.                             curva_atras=false;
  1284.                         } else if(curva_adelante and curva_atras==false) {
  1285.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<endl;
  1286.                             f<<"\134put("<<coord_x2+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1287.                             curva_atras=true;
  1288.                         } else if(curva_adelante==false and curva_atras) {
  1289.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<endl;
  1290.                             curva_atras=false;
  1291.                         } else if(curva_adelante==false and curva_atras==false) {
  1292.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){1.5}}"<<endl;
  1293.                             curva_atras=false;
  1294.                         }
  1295.                         coord_x2=coord_x2+1.5;
  1296.                     } else {
  1297.                         if(curva_adelante and curva_atras) {
  1298.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){2.1}}"<<endl;
  1299.                             f<<"\134put("<<coord_x2+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1300.                             curva_atras=false;
  1301.                         } else if(curva_adelante and curva_atras==false) {
  1302.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<endl;
  1303.                             f<<"\134put("<<coord_x2+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<endl;
  1304.                             curva_atras=true;
  1305.                         } else if(curva_adelante==false and curva_atras) {
  1306.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<endl;
  1307.                             curva_atras=false;
  1308.                         } else if(curva_adelante==false and curva_atras==false) {
  1309.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){2.5}}"<<endl;
  1310.                             curva_atras=false;
  1311.                         }
  1312.                         coord_x2=coord_x2+2.5;
  1313.                     }
  1314.                     curva_atras=curva_adelante;
  1315.                 }
  1316.             }
  1317.         } else {
  1318.             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134vector(1,0){1}}"<<endl;
  1319.         }
  1320.     }
  1321.     f<<"\134put(3,0){{\134textit{\134footnotesize Diagrama de flujo para la evaporaci\134'on de "<<size<<" efectos de orden $";
  1322.     for(int i=0; i<size; i++) {
  1323.         f<<efecto[i];
  1324.         if(i<size-1) {
  1325.             f<<" \134rightarrow ";
  1326.         }
  1327.     }
  1328.     f<<"$.}}}"<<endl;
  1329.     f<<"\134end{picture}"<<endl;
  1330.     f<<"\134begin{description}"<<endl;
  1331.     f<<"\134item[Paso 1:] Se realiza un \134emph{balance de materia} global y en cada efecto para calcular la cantidad total vaporizada y para los s\134'olidos. El producto es ";
  1332.     f<<"\134begin{math}"<<endl;
  1333.     f<<"L_{"<<io[efecto[size-1]][sale]<<"}";
  1334.     f<<"\134end{math}"<<endl;
  1335.     f<<",y las inc\134'ognitas son ";
  1336.     for(int i=0; i<size-1; i++) {
  1337.         f<<"\134begin{math}"<<endl;
  1338.         f<<"L_{"<<incognita[i]<<"}";
  1339.         f<<"\134end{math}"<<endl;
  1340.         f<<",";
  1341.     }
  1342.     for(int i=0; i<size-1; i++) {
  1343.         f<<"\134begin{math}"<<endl;
  1344.         f<<"T_{S"<<i+2<<"}";
  1345.         f<<"\134end{math}"<<endl;
  1346.         if(i<size-3) {
  1347.             f<<",";
  1348.         }
  1349.         if(i==size-3) {
  1350.             f<<" y ";
  1351.         }
  1352.     }
  1353.     f<<". Para la sosa c\134'austica el balance queda:"<<endl;
  1354.     f<<"\134begin{align*}"<<endl;
  1355.     f<<"F\134cdot x_{F}&=L_{"<<io[efecto[size-1]][sale]<<"}\134cdot x_{"<<io[efecto[size-1]][sale]<<"}\134\134"<<endl;
  1356.     f<<"L_{"<<io[efecto[size-1]][sale]<<"}&="<<"\134frac{\134left("<<L[0]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134right)\134left("<<x[0]<<"\134right)}{"<<x[io[efecto[size-1]][sale]]<<"}\134\134"<<endl;
  1357.     f<<"L_{"<<io[efecto[size-1]][sale]<<"}&="<<contar(L[io[efecto[size-1]][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}"<<endl;
  1358.     f<<"\134end{align*}"<<endl;
  1359.     f<<"Entonces se sustituye en la ecuaci\134'on del balance global:"<<endl;
  1360.     f<<"\134begin{align*}"<<endl;
  1361.     f<<"F&=";
  1362.     for(int i=0; i<size; i++) {
  1363.         f<<"V_{"<<i+1<<"}+";
  1364.     }
  1365.     f<<"L_{"<<io[efecto[size-1]][sale]<<"}\134\134"<<endl;
  1366.     f<<"F-L_{"<<io[efecto[size-1]][sale]<<"}&=";
  1367.     for(int i=0; i<size; i++) {
  1368.         f<<"V_{"<<i+1<<"}";
  1369.         if(i<size-1) {
  1370.             f<<"+";
  1371.         } else {
  1372.             f<<endl;
  1373.         }
  1374.     }
  1375.     f<<"\134\134"<<endl;
  1376.     f<<L[0]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}-"<<L[io[efecto[size-1]][sale]]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}&=";
  1377.     for(int i=0; i<size; i++) {
  1378.         f<<"V_{"<<i+1<<"}";
  1379.         if(i<size-1) {
  1380.             f<<"+";
  1381.         } else {
  1382.             f<<endl;
  1383.         }
  1384.     }
  1385.     f<<"\134end {align*}"<<endl;
  1386.     f<<"La cantidad total vaporizada son las corrientes "<<endl;
  1387.     f<<"\134begin{math}"<<endl;
  1388.     for(int i=0; i<size; i++) {
  1389.         f<<"V_{"<<i+1<<"}";
  1390.         suma=suma+V[i+1];
  1391.         if(i<size-1) {
  1392.             f<<"+";
  1393.         } else {
  1394.             f<<"="<<suma<<"\176\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}."<<endl;
  1395.         }
  1396.     }
  1397.     f<<"\134end{math}"<<endl;
  1398.  
  1399.     f<<"Supondr\134'e las concentraciones "<<endl;
  1400.     for(int i=0; i<size-1; i++) {
  1401.         f<<"\134begin{math}"<<endl;
  1402.         f<<"x_{"<<incognita[i]<<"}="<<x[incognita[i]]*100<<"\134%"<<endl;
  1403.         f<<"\134end{math}"<<endl;
  1404.         if(i<size-3) {
  1405.             f<<",";
  1406.         } else {
  1407.             if(i==size-3) {
  1408.                 f<<" y ";
  1409.             }
  1410.         }
  1411.  
  1412.     }
  1413.     f<<". De esta forma el balance de sosa c\134'austica en cada efecto proporciona los valores de la fase l\134'iquida:"<<endl;
  1414.     f<<"\134begin{multicols}{";
  1415.     if(size>3 and size<6) {
  1416.         f<<size-1;
  1417.     } else {
  1418.         f<<2;
  1419.     }
  1420.     f<<"}"<<endl;
  1421.     for(int i=0; i<size-1; i++) {
  1422.         f<<"\134begin{center}"<<endl;
  1423.         f<<"\134emph{Para el efecto "<<incognita[i]<<"}"<<endl;
  1424.         f<<"\134end{center}"<<endl;
  1425.         f<<"\134begin{align*}"<<endl;
  1426.         f<<"F\134cdot x_{F}&=L_{"<<incognita[i]<<"}\134cdot x_{"<<incognita[i]<<"}\134\134"<<endl;
  1427.         f<<"L_{"<<incognita[i]<<"}&=\134frac{\134left("<<L[0]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134right)\134cdot\134left("<<x[0]<<"\134right)}{"<<x[incognita[i]]<<"} \134\134"<<endl;
  1428.         f<<"L_{"<<incognita[i]<<"}&="<<L[incognita[i]]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}"<<endl;
  1429.         f<<"\134end{align*}"<<endl;
  1430.     }
  1431.     f<<"\134end{multicols}"<<endl;
  1432.     f<<"Y ahora se procede a calcular las corrientes de vapor,y luego se comprueba que la suma de esas corrientes deben de dar $"<<suma<<"\176\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}$:"<<endl;
  1433.     f<<"\134begin{multicols}{2}"<<endl;
  1434.     f<<"\134noindent";
  1435.     for(int i=0; i<size; i++) {
  1436.         f<<"\134emph{Para el efecto "<<i+1<<"}"<<endl;
  1437.         f<<"\134begin{align*}"<<endl;
  1438.         if(i+1==efecto[0]) {
  1439.             f<<"F&=L_{"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1440.             f<<"F-L_{"<<io[i+1][sale]<<"}&=V_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1441.         } else {
  1442.             f<<"L_{"<<io[i+1][entra]<<"}&=L_{"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1443.             f<<"L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}&=V_ {"<<io[i+1][sale]<<"}\134\134"<<endl;
  1444.         }
  1445.         f<<contar(L[io[i+1][entra]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}-"<<contar(L[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}&=V_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1446.         f<<"V_{"<<io[i+1][sale]<<"}&="<<contar(V[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}"<<endl;
  1447.         f<<"\134end{align*}"<<endl;
  1448.     }
  1449.     f<<"\134end{multicols}"<<endl;
  1450.     f<<"\134begin{align*}"<<endl;
  1451.     for(int i=0; i<size; i++) {
  1452.         f<<"V_{"<<i+1<<"}";
  1453.         if(i<size-1) {
  1454.             f<<"+";
  1455.         }
  1456.     }
  1457.     f<<"&="<<suma<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  1458.     for(int i=0; i<size; i++) {
  1459.         f<<V[i+1]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}";
  1460.         if(i<size-1) {
  1461.             f<<"+";
  1462.         }
  1463.     }
  1464.     f<<"&="<<suma<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  1465.     f<<suma<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}&="<<suma<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  1466.     f<<"\134end{align*}"<<endl;
  1467.     f<<"Con esto \134'ultimo se comprueba que las concentraciones supuestas son v\134'alidas. Sin embargo,no se sabe si son parte de la soluci\134'on."<<endl<<endl;
  1468.  
  1469.  
  1470.     f<<"\134item[Paso 2:] Se calcula la temperatura de saturaci\134'on del \134'ultimo efecto. Se necesita suponer las temperaturas de saturaci\134'on de los efectos ";
  1471.     for(int i=0; i<size; i++) {
  1472.         f<<i+1;
  1473.         if(i<size-2) {
  1474.             f<<",";
  1475.         } else {
  1476.             if(i==size-2) {
  1477.                 f<<" y ";
  1478.             }
  1479.         }
  1480.     }
  1481.     f<<" ya que se requieren para el c\134'alculo de los EPE's."<<endl<<endl;
  1482.     f<<"La temperatura de saturaci\134'on del vapor vivo es $"<<contar(Tsat[0])<<"\176^{\134circ}\134text{F}$ leyendo las tablas de vapor a $P="<<contar(P[0])<<"$ psia."<<endl<<endl;
  1483.     f<<"La temperatura de saturaci\134'on del efecto "<<size<<" es $"<<contar(Tsat[size])<<"\176^{\134circ}\134text{F}$ leyendo las tablas de vapor a $P="<<contar(P[size])<<"$ psia."<<endl<<endl;
  1484.     f<<"Las temperaturas de saturaci\134'on supuestas son:";
  1485.     f<<"\134begin{displaymath}"<<endl;
  1486.     f<<"\134begin{array}{rcl}"<<endl;
  1487.     for(int i=1; i<size; i++) {
  1488.         f<<"T_{S"<<i+1<<"}&=&"<<contar(Tsat[i])<<"^{\134circ}\134text{F}\134\134"<<endl;
  1489.     }
  1490.     f<<"\134end{array}"<<endl;
  1491.     f<<"\134end{displaymath}"<<endl;
  1492.     f<<endl<<endl;
  1493.     f<<"\134item[Paso 3:] Se calcula los EPE's y los $\134Delta T$ global y de cada efecto:"<<endl<<endl;
  1494.     f<<"Los EPE's se calculan con el diagrama de D\134\42uhring y queda:"<<endl<<endl;
  1495.     suma=0;
  1496.     for(int i=0; i<size; i++) {
  1497.         suma=suma+contar(epe[i]);
  1498.     }
  1499.     deltaT[0]=contar(Tsat[0])-contar(Tsat[size])-suma;
  1500.     f<<"\134begin{displaymath}"<<endl;
  1501.     f<<"\134begin{array}{lllll}"<<endl;
  1502.     for(int i=0; i<size; i++) {
  1503.         f<<"\134text{EPE}_{"<<i+1<<"}="<<contar(epe[i])<<"^{\134circ}\134text{F}&\134text{Le\134'ido a}&\134text{$x_{"<<i+1<<"}="<<contar(x[i+1]*100)<<"$\134%}&\134text{y}&\134text{$T_{S"<<i+1<<"}="<<contar(Tsat[i+1])<<"^{\134circ}\134text{F}$}\134\134"<<endl;
  1504.     }
  1505.     f<<"\134end{array}"<<endl;
  1506.     f<<"\134end{displaymath}"<<endl;
  1507.     f<<"\134begin{align*}"<<endl;
  1508.     f<<"\134Delta T_{\134text{Total}}&=T_{S1}-T_{S4}-\134left(";
  1509.     for(int i=0; i<size; i++) {
  1510.         f<<"\134text{EPE}_{"<<i+1<<"}";
  1511.         if(i<size-1) {
  1512.             f<<"+";
  1513.         } else {
  1514.             f<<"\134right)\134\134"<<endl;
  1515.         }
  1516.     }
  1517.     f<<"\134Delta T_{\134text{Total}}&="<<contar(Tsat[0])<<"^{\134circ}\134text{F}-"<<contar(Tsat[size])<<"^{\134circ}\134text{F}-\134left(";
  1518.     for(int i=0; i<size; i++) {
  1519.         f<<contar(epe[i])<<"^{\134circ}\134text{F}";
  1520.         if(i<size-1) {
  1521.             f<<"+";
  1522.         } else {
  1523.             f<<"\134right)\134\134"<<endl;
  1524.         }
  1525.     }
  1526.     f<<"\134Delta T_{\134text{Total}}&="<<contar(deltaT[0])<<"^{\134circ}\134text{F}"<<endl;
  1527.     f<<"\134end{align*}"<<endl;
  1528.     f<<"Se obtienen los $\134Delta T$ de cada efecto con el $\134Delta T_{\134text{Total}}$ y la ecuaci\134'on 8.5-6 del Geankoplis:"<<endl;
  1529.     for(int i=0; i<size; i++) {
  1530.         f<<"\134begin{align*}"<<endl;
  1531.         f<<"\134Delta T_{"<<i+1<<"}&=\134Delta T_{\134text{Total}}\134cdot \134frac{\134frac{1}{U_{"<<i+1<<"}}}{";
  1532.         for(int j=0; j<size; j++) {
  1533.             f<<"\134frac{1}{U_{"<<j+1<<"}}";
  1534.             if(j<size-1) {
  1535.                 f<<"+";
  1536.             } else {
  1537.                 f<<"}=";
  1538.             }
  1539.         }
  1540.         f<<contar(deltaT[0])<<"^{\134circ}\134text{F} \134cdot \134frac{\134frac{1}{"<<U[i]<<"}}{";
  1541.         for(int j=0; j<size; j++) {
  1542.             f<<"\134frac{1}{"<<U[j]<<"}";
  1543.             if(j<size-1) {
  1544.                 f<<"+";
  1545.             } else {
  1546.                 f<<"}=";
  1547.             }
  1548.         }
  1549.         suma=0;
  1550.         for(int j=0; j<size; j++) {
  1551.             suma=suma+1/U[j];
  1552.         }
  1553.         f<<contar(deltaT[0]*(1/U[i])/suma)<<"^{\134circ}\134text{F}\134\134";
  1554.         f<<"\134end{align*}"<<endl;
  1555.     }
  1556.     f<<"Se aumenta y disminuye proporcionalmente los $\134Delta T$ de cada efecto se obtiene:"<<endl;
  1557.     f<<"\134begin{align*}"<<endl;
  1558.     for(int i=0; i<size; i++) {
  1559.         f<<"\134Delta T_{"<<i+1<<"}&="<<contar(deltaT[0]*(1/U[i])/suma)<<"^{\134circ}\134text{F}";
  1560.         if(contar(deltaT[0]*(1/U[i])/suma)-deltaT[i+1]>0) {
  1561.             f<<"-";
  1562.         } else {
  1563.             f<<"+";
  1564.         }
  1565.         f<<contar(abs(contar(deltaT[0]*(1/U[i])/suma)-deltaT[i+1]))<<"^{\134circ}\134text{F}="<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}";
  1566.         if(i<size-1) {
  1567.             f<<"\134\134"<<endl;
  1568.         } else {
  1569.             f<<endl;
  1570.         }
  1571.     }
  1572.     f<<"\134end{align*}"<<endl;
  1573.     f<<"Y ahora se recalcula las temperaturas de saturaci\134'on en cada efecto:"<<endl<<endl;
  1574.     f<<"\134begin{multicols}{2}"<<endl;
  1575.     f<<"\134noindent";
  1576.     for(int i=0; i<size; i++) {
  1577.         f<<"\134emph{Efecto "<<i+1<<":}"<<endl;
  1578.         f<<"\134begin{align*}"<<endl;
  1579.         if(i==0) {
  1580.             f<<"T_{"<<i+1<<"}&=T_{S"<<i+1<<"}-\134Delta T_{"<<i+1<<"}\134\134"<<endl;
  1581.             f<<"&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}-"<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}="<<contar(T[i+1])<<"^{\134circ}\134text{F}\134\134"<<endl;
  1582.             f<<"T_{S"<<i+1<<"}&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}"<<endl;
  1583.         } else {
  1584.             f<<"T_{"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}-\134Delta T_{"<<i+1<<"}\134\134"<<endl;
  1585.             f<<"&="<<contar(T[i])<<"^{\134circ}\134text{F}-"<<contar(epe[i-1])<<"^{\134circ}\134text{F}-"<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}="<<contar(T[i+1])<<"^{\134circ}\134text{F}\134\134"<<endl;
  1586.             f<<"T_{S"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}\134\134"<<endl;
  1587.             f<<"&="<<contar(T[i])<<"^{\134circ}\134text{F}-"<<contar(epe[i-1])<<"^{\134circ}\134text{F}="<<contar(Tsat[i])<<"^{\134circ}\134text{F}"<<endl;
  1588.         }
  1589.         f<<"\134end{align*}"<<endl;
  1590.         f<<"\134newline"<<endl;
  1591.     }
  1592.     f<<"\134end{multicols}"<<endl;
  1593.     f<<"Las temperaturas de los "<<size<<" efectos son las siguiente:"<<endl;
  1594.     f<<"\134begin{multicols*}{";
  1595.     if(size==3) {
  1596.         f<<"4";
  1597.     } else {
  1598.         f<<"2";
  1599.     }
  1600.     f<<"}"<<endl;
  1601.     for(int i=0; i<=size; i++) {
  1602.         f<<"\134begin{center}"<<endl;
  1603.         if(i<size) {
  1604.             f<<"\134emph{Efecto "<<i+1<<":}"<<endl;
  1605.             f<<"\134end{center}"<<endl;
  1606.             f<<"\134begin{align*}"<<endl;
  1607.             f<<"T_{S"<<i+1<<"}&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}\134\134"<<endl;
  1608.             f<<"T_{"<<i+1<<"}&="<<contar(T[i+1])<<"^{\134circ}\134text{F}"<<endl;
  1609.             f<<"\134end{align*}"<<endl;
  1610.         } else {
  1611.             f<<"\134emph{Condensador:}"<<endl;
  1612.             f<<"\134end{center}"<<endl;
  1613.             f<<"\134begin{align*}"<<endl;
  1614.             f<<"T_{S"<<i+1<<"}&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}"<<endl;
  1615.             f<<"\134end{align*}"<<endl;
  1616.         }
  1617.     }
  1618.     f<<"\134end{multicols*}"<<endl;
  1619.     f<<"\134item[Paso 4:] Se realiza un \134emph{balance de energ\134'ia} en cada efecto. Para eso se calculan las entalp\134'ias de cada corriente,tanto de los licores como los vapores:"<<endl;
  1620.     f<<"\134newline"<<endl;
  1621.     f<<"\134begin{center}"<<endl;
  1622.     f<<"\134textsc{\134textbf{Entalp\134'ias de los licores:}}"<<endl;
  1623.     f<<"\134end{center}"<<endl;
  1624.     f<<"Entalp\134'ias de los licores le\134'idos de la p\134'agina 530 del McCabe (Figura 16.6):"<<endl;
  1625.     f<<"\134begin{displaymath}"<<endl;
  1626.     f<<"\134begin{array}{lllllll}"<<endl;
  1627.     for(int i=0; i<=size; i++) {
  1628.         if(i==0) {
  1629.             f<<"H_{XF}="<<contar(hx[i])<<"\134tfrac{\134text{BTU}}{lb_m}&\134text{Alimentaci\134'on.}&\134text{Le\134'ido a}&\134text{$x_{F}="<<contar(x[i]*100)<<"$\134%}&\134text{y}&\134text{$T_{F}="<<contar(T[i])<<"^{\134circ} F$}\134\134"<<endl;
  1630.         } else {
  1631.             f<<"H_{X"<<i<<"}="<<contar(hx[i])<<"\134tfrac{\134text{BTU}}{lb_m}&\134text{Licor "<<i<<".}&\134text{Le\134'ido a}&\134text{$x_{"<<i<<"}="<<contar(x[i]*100)<<"$\134%}&\134text{y}&\134text{$T_{"<<i<<"}="<<contar(T[i])<<"^{\134circ} F$}\134\134"<<endl;
  1632.         }
  1633.     }
  1634.     f<<"\134end{array}"<<endl;
  1635.     f<<"\134end{displaymath}"<<endl;
  1636.     f<<"\134newline"<<endl;
  1637.     f<<"\134begin{center}"<<endl;
  1638.     f<<"\134textsc{\134textbf{Entalp\134'ias de los vapores:}}"<<endl;
  1639.     f<<"\134end{center}"<<endl;
  1640.     f<<"Las entalp\134'ias de los vapores de agua se toman con respecto a $32^{\134circ} F$ como base. Los $c_p$ y $\134lambda_S$ se calculan a la temperatura de saturaci\134'on. En las tablas de vapor se obtienen:\134newline"<<endl;
  1641.     for(int i=0; i<size; i++) {
  1642.         f<<"\134noindent \134emph{Efecto "<<i+1<<":}"<<endl;
  1643.         f<<"\134begin{align*}"<<endl;
  1644.         f<<"H_{"<<i+1<<"}&=h_{g \134left(T_{S"<<i+2<<"}\134right)}+c_p \134cdot EPE_{"<<i+1<<"}\134\134"<<endl;
  1645.         f<<"H_{"<<i+1<<"}&="<<contar(Hg(Tsat[i+1]))<<"\134tfrac{\134text{BTU}}{lb_m}+"<<contar(CP(Tsat[i+1]))<<"\134tfrac{\134text{BTU}}{lb_m \134cdot ^{\134circ} \134text{F}} \134cdot"<<contar(epe[i])<<"^{\134circ} F="<<contar(H[i])<<"\134tfrac{\134text{BTU}}{lb_m}"<<endl;
  1646.         f<<"\134end{align*}"<<endl;
  1647.         if(i==0) {
  1648.             f<<"\134begin{equation*}"<<endl;
  1649.             f<<"\134lambda_{S"<<i+1<<"}="<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{lb_m} \134quad\134text{Le\134'ido a\134quad $T_{S"<<i+1<<"}="<<contar(Tsat[i])<<"^{\134circ} F$}"<<endl;
  1650.             f<<"\134end{equation*}"<<endl;
  1651.         } else {
  1652.             f<<"\134begin{equation*}"<<endl;
  1653.             f<<"\134lambda_{S"<<i+1<<"}=h_{fg \134left(T_{S"<<i+1<<"}\134right)}+c_p \134cdot EPE_{"<<i+1<<"} \134quad\134text{Le\134'ido a\134quad $T_{S"<<i+1<<"}="<<contar(Tsat[i])<<"^{\134circ} F$}"<<endl;
  1654.             f<<"\134end{equation*}"<<endl;
  1655.             f<<"\134begin{equation*}"<<endl;
  1656.             f<<"\134lambda_{S"<<i+1<<"}="<<contar(Hvap(Tsat[i]))<<"\134tfrac{\134text{BTU}}{lb_m}+"<<contar(CP(Tsat[i]))<<"\134tfrac{\134text{BTU}}{lb_m \134cdot ^{\134circ} \134text{F}} \134cdot"<<contar(epe[i-1])<<"^{\134circ} F="<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{lb_m}"<<endl;
  1657.             f<<"\134end{equation*}"<<endl;
  1658.         }
  1659.         f<<"\134newline"<<endl;
  1660.     }
  1661.     f<<"\134newline"<<endl;
  1662.     f<<"\134begin{center}"<<endl;
  1663.     f<<"\134textsc{\134textbf{Balance de Energ\134'ia de cada efecto:}}"<<endl;
  1664.     f<<"\134end{center}"<<endl;
  1665.     f<<"Se realiza el \134emph{balance de energ\134'ia} en cada efecto,suponiendo que funcionan de forma \134emph{estacionaria}. Adem\134'as no hay calor por solvataci\134'on"<<endl;
  1666.     f<<"\134begin{align*}"<<endl;
  1667.     f<<"\134dot{E}_{entra}-\134dot{E}_{sale}&=\134Delta \134dot{E}_{sistema}=0\134\134"<<endl;
  1668.     f<<"\134dot{E}_{entra}-\134dot{E}_{sale}&=0\134\134"<<endl;
  1669.     f<<"\134dot{E}_{entra}&=\134dot{E}_{sale}"<<endl;
  1670.     f<<"\134end{align*}"<<endl;
  1671.     f<<"\134noindent Esta \134'ultima ecuaci\134'on nos servir\134'a para cada efecto.\134newline"<<endl;
  1672.     for(int i=0; i<size; i++) {
  1673.         f<<"\134begin{center}"<<endl;
  1674.         f<<"{\134color{Blue}\134hrule}"<<endl;
  1675.         f<<"\134textbf{Efecto "<<i+1<<":}"<<endl;
  1676.         f<<"\134end{center}"<<endl;
  1677.         f<<"\134begin{multicols}{2}"<<endl;
  1678.         f<<"\134begin{picture}(10,13)"<<endl;
  1679.  
  1680.  
  1681.         f<<"\134thicklines"<<endl;
  1682.  
  1683.  
  1684.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(0,1){6.8}}}"<<endl;
  1685.         f<<"\134put(3.6,8.4){{\134color{Red}\134line(1,0){4.8}}}"<<endl;
  1686.         f<<"\134put(8.4,8.4){{\134color{Red}\134line(0,-1){6.8}}}"<<endl;
  1687.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(1,0){4.8}}}"<<endl;
  1688.  
  1689.         f<<"\134thinlines"<<endl;
  1690.  
  1691.         f<<"\134put(0,4){\134vector(1,0){4}}"<<endl;
  1692.         f<<"\134put(0,7){\134vector(1,0){4}}"<<endl;
  1693.         f<<"\134put(6,10){\134vector(1,0){4}}"<<endl;
  1694.         f<<"\134put(6,2){\134vector(0,-1){2}}"<<endl;
  1695.         f<<"\134put(10,4){\134vector(0,-1){2}}"<<endl;
  1696.  
  1697.         f<<"\134put(4,4){\134line(0,1){4}}"<<endl;
  1698.         f<<"\134put(4,8){\134line(1,0){4}}"<<endl;
  1699.         f<<"\134put(8,8){\134line(0,-1){4}}"<<endl;
  1700.         f<<"\134put(4,4){\134line(1,-1){2}}"<<endl;
  1701.         f<<"\134put(6,2){\134line(1,1){2}}"<<endl;
  1702.         f<<"\134put(6,8){\134line(0,1){2}}"<<endl;
  1703.         f<<"\134put(8,4){\134line(1,0){2}}"<<endl;
  1704.  
  1705.         f<<"\134put(4,4){\134line(1,1){0.5}}"<<endl;
  1706.         f<<"\134put(5,4){\134line(1,1){0.5}}"<<endl;
  1707.         f<<"\134put(6,4){\134line(1,1){0.5}}"<<endl;
  1708.         f<<"\134put(7,4){\134line(1,1){0.5}}"<<endl;
  1709.         f<<"\134put(4.5,4.5){\134line(1,-1){0.5}}"<<endl;
  1710.         f<<"\134put(5.5,4.5){\134line(1,-1){0.5}}"<<endl;
  1711.         f<<"\134put(6.5,4.5){\134line(1,-1){0.5}}"<<endl;
  1712.         f<<"\134put(7.5,4.5){\134line(1,-1){0.5}}"<<endl;
  1713.  
  1714.  
  1715.         f<<"\134put(5.5,6){{("<<i+1<<")}}"<<endl;
  1716.  
  1717.         if(i+1==efecto[0]) {
  1718.             f<<"\134put(-2,8.3){{\134footnotesize $F="<<L[0]<<"\134tfrac{lb_m}{h}$}}"<<endl;
  1719.             f<<"\134put(-2,7.4){{\134footnotesize $H_{XF}="<<contar(hx[0])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  1720.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  1721.         } else {
  1722.             f<<"\134put(-2,8.3){{\134footnotesize $L_{"<<io[i+1][entra]<<"}$}}"<<endl;
  1723.             f<<"\134put(-2,7.4){{\134footnotesize $H_{X"<<io[i+1][entra]<<"}="<<contar(hx[io[i+1][entra]])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  1724.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  1725.         }
  1726.         if(i==0) {
  1727.             f<<"\134put(-2,3.2){{\134footnotesize $S$}}"<<endl;
  1728.         } else if(io[i][entra]==0) {
  1729.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=F-L_{"<<io[i][sale]<<"}$}}"<<endl;
  1730.         } else {
  1731.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=L_{"<<io[i][entra]<<"}-L_{"<<io[i][sale]<<"}$}}"<<endl;
  1732.         }
  1733.         f<<"\134put(-2,2.3){{\134footnotesize $\134lambda_{S"<<i+1<<"}="<<contar(hvap[i])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  1734.  
  1735.  
  1736.         f<<"\134put(6.2,0.8){{\134footnotesize $L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  1737.         f<<"\134put(6.2,0){{\134footnotesize $H_{X"<<io[i+1][sale]<<"}="<<contar(hx[io[i+1][sale]])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  1738.         f<<"\134put(6,10.4){{\134footnotesize $H_{"<<io[i+1][sale]<<"}="<<contar(H[io[i+1][sale]-1])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.         f<<"\134end{picture}"<<endl;
  1747.         f<<"\134newline\134newline"<<endl;
  1748.  
  1749.  
  1750.         f<<"\134begin{align*}"<<endl;
  1751.         f<<"\134dot{E}_{entra}&=\134dot{E}_{sale}\134\134"<<endl;
  1752.         if(i+1==efecto[0]) {
  1753.             f<<"F \134cdot H_{XF}+";
  1754.         } else {
  1755.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  1756.         }
  1757.         if(i==0) {
  1758.             f<<"S \134cdot ";
  1759.         } else {
  1760.             f<<"V_{"<<i<<"} \134cdot ";
  1761.         }
  1762.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"} \134cdot H_{"<<io[i+1][sale]<<"}"<<endl;
  1763.         f<<"\134end{align*}"<<endl;
  1764.         f<<"Como se conoce del \134emph{balance de materia} "<<endl;
  1765.         if(i>0) {
  1766.             f<<"\134begin{math}"<<endl;
  1767.             f<<"V_{"<<io[i][sale]<<"}=";
  1768.             if(io[i][entra]==0) {
  1769.                 f<<"F-";
  1770.             } else {
  1771.                 f<<"L_{"<<io[i][entra]<<"}-";
  1772.             }
  1773.             f<<"L_{"<<io[i][sale]<<"}";
  1774.             f<<"\134end{math}"<<endl;
  1775.             f<<" y ";
  1776.         }
  1777.         f<<"\134begin{math}"<<endl;
  1778.         if(i+1==efecto[0]) {
  1779.             f<<"V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}"<<endl;
  1780.         } else {
  1781.             f<<"V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}"<<endl;
  1782.         }
  1783.         f<<"\134end{math}"<<endl;
  1784.         if(i==0) {
  1785.             f<<". Se realiza un arreglo algebr\134'aico de modo que las inc\134'ognitas queden en el lado izquierdo de la igualdad y las constantes en el lado derecho,se sustituyen los valores de las entalp\134'ias:\134newline"<<endl;
  1786.         } else {
  1787.             f<<". Se repite al igual que el efecto 1:\134newline"<<endl;
  1788.         }
  1789.         f<<"\134end{multicols}"<<endl;
  1790.  
  1791.  
  1792.         f<<"\134begin{align*}"<<endl;
  1793.         if(i+1==efecto[0]) {
  1794.             f<<"F \134cdot H_{XF}+";
  1795.         } else {
  1796.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  1797.         }
  1798.         if(i==0) {
  1799.             f<<"S \134cdot ";
  1800.         } else {
  1801.             if(i>0) {
  1802.                 if(io[i][entra]==0) {
  1803.                     f<<"\134left(F-";
  1804.                 } else {
  1805.                     f<<"\134left(L_{"<<io[i][entra]<<"}-";
  1806.                 }
  1807.                 f<<"L_{"<<io[i][sale]<<"}\134right) \134cdot";
  1808.             }
  1809.         }
  1810.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  1811.         if(i+1==efecto[0]) {
  1812.             f<<"\134left(F-L_{"<<io[i+1][sale]<<"}\134right)";
  1813.         } else {
  1814.             f<<"\134left(L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134right)";
  1815.         }
  1816.         f<<"\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1817.         if(i+1==efecto[0]) {
  1818.             f<<"F \134cdot H_{XF}+";
  1819.         } else {
  1820.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  1821.         }
  1822.         if(i==0) {
  1823.             f<<"S \134cdot \134lambda_{S"<<i+1<<"}";
  1824.         } else {
  1825.             if(i>0) {
  1826.                 if(io[i][entra]==0) {
  1827.                     f<<"F \134cdot \134lambda_{S"<<i+1<<"}-";
  1828.                 } else {
  1829.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134lambda_{S"<<i+1<<"}-";
  1830.                 }
  1831.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134lambda_{S"<<i+1<<"}";
  1832.             }
  1833.         }
  1834.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  1835.         if(i+1==efecto[0]) {
  1836.             f<<"F\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1837.         } else {
  1838.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  1839.         }
  1840.         if(i+1==efecto[0]) {
  1841.             f<<"F \134cdot \134left("<<contar(hx[0])<<"\134right)+";
  1842.         } else {
  1843.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot \134left("<<contar(hx[io[i+1][entra]])<<"\134right)+";
  1844.         }
  1845.         if(i==0) {
  1846.             f<<"S \134cdot \134left("<<contar(hvap[i])<<"\134right)";
  1847.         } else {
  1848.             if(i>0) {
  1849.                 if(io[i][entra]==0) {
  1850.                     f<<"F \134cdot \134left("<<contar(hvap[i])<<"\134right)-";
  1851.                 } else {
  1852.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134left("<<contar(hvap[i])<<"\134right)-";
  1853.                 }
  1854.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134left("<<contar(hvap[i])<<"\134right)";
  1855.             }
  1856.         }
  1857.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot \134left("<<contar(hx[io[i+1][sale]])<<"\134right)+";
  1858.         if(i+1==efecto[0]) {
  1859.             f<<"F\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)-L_{"<<io[i+1][sale]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<endl;
  1860.         } else {
  1861.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<"-L_{"<<io[i+1][sale]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<endl;
  1862.         }
  1863.         f<<"\134end{align*}"<<endl;
  1864.         label++;
  1865.         f<<"\134begin{equation}"<<endl;
  1866.         f<<"\134label{eq"<<label<<"}"<<endl;
  1867.         unsigned short int c2,c3;
  1868.         c2=0;
  1869.         for(int j=0; j<size; j++) {
  1870.             if(M[i][j]!=0) {
  1871.                 c2++;
  1872.             }
  1873.         }
  1874.         c3=c2;
  1875.         for(int j=0; j<size; j++) {
  1876.             if(M[i][j]!=0 and j!=0) {
  1877.                 if(c3!=c2 and M[i][j]>0) {
  1878.                     f<<"+";
  1879.                 }
  1880.                 f<<contar(M[i][j])<<"L_{"<<incognita[j-1]<<"}";
  1881.                 c2--;
  1882.             }
  1883.             if(i==0 and j==0 and M[i][j]!=0) {
  1884.                 f<<contar(M[i][j])<<"S";
  1885.                 c2--;
  1886.             }
  1887.         }
  1888.         f<<"="<<setprecision(10)<<N[i][0];
  1889.         if(i<size-1) {
  1890.             f<<"\134\134"<<endl;
  1891.         }
  1892.         f<<"\134end{equation}"<<endl;
  1893.     }
  1894.     f<<"Se resuelven las ecuaciones ";
  1895.     for(int i=0; i<size; i++) {
  1896.         f<<"\134ref{eq"<<i+1<<"}";
  1897.         if(i<size-2) {
  1898.             f<<",";
  1899.         }
  1900.         if(i==size-2) {
  1901.             f<<" y ";
  1902.         }
  1903.     }
  1904.     f<<" utilizando cualquier m\134'etodo visto en \134'algebra lineal. Se resolver\134'a con \134emph{Regla de Cramer} para este caso:"<<endl;
  1905.     f<<"\134begin{displaymath}"<<endl;
  1906.     f<<"\134left\134{"<<endl;
  1907.     f<<"\134begin{array}{rcl}"<<endl;
  1908.     for(int i=0; i<size; i++) {
  1909.         unsigned short int c2,c3;
  1910.         c2=0;
  1911.         for(int j=0; j<size; j++) {
  1912.             if(M[i][j]!=0) {
  1913.                 c2++;
  1914.             }
  1915.         }
  1916.         c3=c2;
  1917.         for(int j=0; j<size; j++) {
  1918.             if(M[i][j]!=0 and j!=0) {
  1919.                 if(c3!=c2 and M[i][j]>0) {
  1920.                     f<<"+";
  1921.                 }
  1922.                 f<<contar(M[i][j])<<"\134textcolor{OliveGreen}{L_{"<<incognita[j-1]<<"}}";
  1923.                 c2--;
  1924.             }
  1925.             if(i==0 and j==0 and M[i][j]!=0) {
  1926.                 f<<contar(M[i][j])<<"\134textcolor{OliveGreen}{S}";
  1927.                 c2--;
  1928.             }
  1929.         }
  1930.         f<<"&=&"<<setprecision(10)<<N[i][0];
  1931.         if(i<size-1) {
  1932.             f<<"\134\134"<<endl;
  1933.         }
  1934.     }
  1935.     f<<"\134end{array}"<<endl;
  1936.     f<<"\134right."<<endl;
  1937.     f<<"\134end{displaymath}"<<endl;
  1938.  
  1939.     f<<"\134begin{displaymath}"<<endl;
  1940.     f<<"\134left["<<endl;
  1941.     f<<"\134begin{matrix}"<<endl;
  1942.     for(int i=0; i<size; i++) {
  1943.         for(int j=0; j<size; j++) {
  1944.             f<<"\134textcolor{black}{"<<contar(M[i][j])<<"}";
  1945.             if(j<size-1) {
  1946.                 f<<"&";
  1947.             } else {
  1948.                 f<<"\134\134"<<endl;
  1949.             }
  1950.         }
  1951.     }
  1952.     f<<"\134end{matrix}"<<endl;
  1953.     f<<"\134right]"<<endl;
  1954.     f<<"\134left["<<endl;
  1955.     f<<"\134begin{matrix}"<<endl;
  1956.     for(int i=0; i<size; i++) {
  1957.         if(i==0) {
  1958.             f<<"\134textcolor{OliveGreen}{S}";
  1959.         } else {
  1960.             f<<"\134textcolor{OliveGreen}{L_{"<<incognita[i-1]<<"}}";
  1961.         }
  1962.         if(i<size-1) {
  1963.             f<<"\134\134"<<endl;
  1964.         } else {
  1965.             f<<endl;
  1966.         }
  1967.     }
  1968.     f<<"\134end{matrix}"<<endl;
  1969.     f<<"\134right]"<<endl;
  1970.     f<<"=";
  1971.     f<<"\134left["<<endl;
  1972.     f<<"\134begin{matrix}"<<endl;
  1973.     for(int j=0; j<size; j++) {
  1974.         f<<"\134textcolor{Blue}{"<<N[j][0]<<"}";
  1975.         if(j<size-1) {
  1976.             f<<"\134\134"<<endl;
  1977.         }
  1978.     }
  1979.     f<<"\134end{matrix}"<<endl;
  1980.     f<<"\134right]"<<endl;
  1981.     f<<"\134end{displaymath}"<<endl;
  1982.  
  1983.  
  1984.  
  1985.  
  1986.     for(int k=0; k<size; k++) {
  1987.         f<<"\134begin{displaymath}"<<endl;
  1988.         for(int i=0; i<size; i++) {
  1989.             for(int j=0; j<size; j++) {
  1990.                 m[i][j]=M[i][j];
  1991.             }
  1992.         }
  1993.         for(int i=0; i<=9; i++) {
  1994.             m[i][k]=N[i][0];
  1995.         }
  1996.         if(k==0) {
  1997.             f<<"S=\134frac{"<<endl;
  1998.         } else {
  1999.             f<<"L_{"<<incognita[k-1]<<"}=\134frac{"<<endl;
  2000.         }
  2001.  
  2002.         f<<"\134begin{vmatrix}"<<endl;
  2003.         for(int fila=0; fila<size; fila++) {
  2004.             for(int columna=0; columna<size; columna++) {
  2005.                 if(columna==k) {
  2006.                     f<<"\134textcolor{Blue}{";
  2007.                 } else {
  2008.                     f<<"\134textcolor{black}{";
  2009.                 }
  2010.                 f<<contar(m[fila][columna])<<"}";
  2011.                 if(columna==size-1) {
  2012.                     f<<"\134\134"<<endl;
  2013.                 } else {
  2014.                     f<<"&";
  2015.                 }
  2016.             }
  2017.         }
  2018.         f<<"\134end{vmatrix}}{"<<endl;
  2019.         f<<"\134begin{vmatrix}"<<endl;
  2020.         for(int fila=0; fila<size; fila++) {
  2021.             for(int columna=0; columna<size; columna++) {
  2022.                 f<<"\134textcolor{black}{";
  2023.                 f<<contar(M[fila][columna])<<"}";
  2024.                 if(columna==size-1) {
  2025.                     f<<"\134\134"<<endl;
  2026.                 } else {
  2027.                     f<<"&";
  2028.                 }
  2029.             }
  2030.         }
  2031.         f<<"\134end{vmatrix}}="<<endl;
  2032.         if(size<6) {
  2033.             f<<"\134frac{"<<setprecision(15)<<contar(determinante(m,size))<<"}{"<<contar(determinante(M,size))<<"}=";
  2034.         }
  2035.         f<<contar(determinante(m,size)/determinante(M,size))<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}"<<endl;
  2036.         f<<"\134end{displaymath}"<<endl;
  2037.     }
  2038.     f<<"Se observa que estos valores son id\134'enticos a los obtenidos con las concentraciones supuestas en el \134emph{Paso 1}. As\134'i que no se necesita iterar. De no ser id\134'enticos se repiten los pasos 1 al 4 hasta que converjan."<<endl;
  2039.  
  2040.  
  2041.  
  2042.     for(int i=0; i<size; i++) {
  2043.         f<<"\134begin{align*}"<<endl;
  2044.         if(i+1==efecto[0]) {
  2045.             f<<"V_{"<<io[i+1][sale]<<"}&=F-L_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2046.         } else {
  2047.             f<<"V_ {"<<io[i+1][sale]<<"}&=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2048.         }
  2049.         f<<"V_{"<<io[i+1][sale]<<"}&="<<contar(L[io[i+1][entra]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}-"<<contar(L[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  2050.         f<<"V_{"<<io[i+1][sale]<<"}&="<<contar(V[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  2051.         f<<"\134end{align*}"<<endl;
  2052.     }
  2053.  
  2054.  
  2055.     f<<"\134item[Paso 5:] Con los valores obtenidos en el \134emph{Paso 4} se encuentran los calores transferidos en cada efecto y el \134'area:\134newline"<<endl;
  2056.     f<<"\134begin{align*}"<<endl;
  2057.     for(int i=0; i<size; i++) {
  2058.         f<<"\134dot{Q}_{"<<i+1<<"}&=";
  2059.         if(i==0) {
  2060.             f<<"S";
  2061.         } else {
  2062.             f<<"V_{"<<i<<"}";
  2063.         }
  2064.         f<<"\134cdot \134lambda_{S"<<i+1<<"}=\134left("<<contar(V[i])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134right)\134left("<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{lb_m}\134right)="<<contar(contar(hvap[i])*contar(V[i]))<<"\134tfrac{\134text{BTU}}{h}\134\134"<<endl;
  2065.     }
  2066.     suma=0;
  2067.     f<<"\134end{align*}"<<endl;
  2068.     f<<"\134begin{align*}"<<endl;
  2069.     for(int i=0; i<size; i++) {
  2070.         f<<"A_{"<<i+1<<"}&="<<"\134frac{\134dot{Q}_{"<<i+1<<"}}{U_{"<<i+1<<"}\134cdot \134Delta T_{"<<i+1<<"}}=\134frac{"<<contar(contar(hvap[i])*contar(V[i]))<<"\134frac{\134text{BTU}}{h}}{\134left("<<U[i]<<"\134tfrac{\134text{BTU}}{\134text{h}\134cdot \134text{ft}^2 \134cdot ^{\134circ}\134text{F}}\134right)\134left("<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}\134right)}="<<contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]))<<"\176\134text{ft}^2\134\134"<<endl;
  2071.         suma=suma+contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]));
  2072.     }
  2073.     f<<"\134end{align*}"<<endl;
  2074.  
  2075.     f<<"El \134'area promedio $A_m="<<contar(suma/size)<<"\176\134text{ft}^2$. La variaci\134'on es despreciable y no hace falta otra iteraci\134'on. Sin embargo,los c\134'alculos se repiten desde el \134emph{Paso 6} para indicar los m\134'etodos de c\134'alculos utilizados.\134newline"<<endl;
  2076.  
  2077.     f<<"\134item[Paso 6:] Se repite el \134emph{Paso 1} (realizar un \134emph{balance de materia} en cada efecto) con los valores de los licores obtenidos en el \134emph{Paso 4}:"<<endl;
  2078.     deltaT[0]=0;
  2079.     for(int i=0; i<size; i++) {
  2080.         deltaT[0]=deltaT[0]+deltaT[i];
  2081.     }
  2082.     f<<"\134begin{multicols}{2}"<<endl;
  2083.     for(int i=0; i<size; i++) {
  2084.         f<<"\134emph{Efecto "<<i+1<<":}"<<endl;
  2085.         f<<"\134begin{align*}"<<endl;
  2086.         f<<"F \134cdot x_{F} &=L_{"<<i+1<<"} \134cdot x_{"<<i+1<<"}\134\134"<<endl;
  2087.         f<<"x_{"<<i+1<<"}&=\134frac{\134left("<<L[0]<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134right)\134left("<<x[0]<<"\134right)}{"<<contar(L[i+1])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}}\134\134"<<endl;
  2088.         f<<"x_{"<<i+1<<"}&="<<contar(x[i+1]*1000)/1000<<endl;
  2089.         f<<"\134end{align*}"<<endl;
  2090.     }
  2091.     f<<"\134end{multicols}"<<endl;
  2092.     f<<"Se ve con toda claridad que las concentraciones obtenidas corresponden a las supuestas en el \134emph{Paso 1}.\134newline\134newline"<<endl;
  2093.     f<<"\134item[Paso 7:] Con los datos anteriores se calcula las nuevas temperaturas (ahora con la ecuaci\134'on 8.5-11 del Geankoplis) y los nuevos EPE's.\134newline"<<endl;
  2094.     f<<"\134begin{align*}"<<endl;
  2095.     suma=0;
  2096.     for(int i=0; i<size; i++) {
  2097.         f<<"\134Delta T^\134prime_{"<<i+1<<"}&=\134frac{\134Delta T_{"<<i+1<<"} \134cdot A_{"<<i+1<<"}}{A_m}=\134frac{\134left("<<contar(deltaT[i+1])<<"^{\134circ}\134text{F} \134right)\134left("<<contar(A[i+1])<<"\134text{ft}^2 \134right)}{"<<contar(A[0])<<"\134text{ft}^2}="<<contar(contar(deltaT[i+1])*contar(A[i+1])/contar(A[0]))<<"^{\134circ}\134text{F}\134\134"<<endl;
  2098.         suma=suma+contar(contar(deltaT[i+1])*contar(A[i+1])/contar(A[0]));
  2099.     }
  2100.     f<<"\134Delta T_{\134text{Total}}&=";
  2101.     for(int i=0; i<size; i++) {
  2102.         f<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}";
  2103.         if(i<size-1) {
  2104.             f<<"+";
  2105.         }
  2106.     }
  2107.     f<<"="<<suma<<"^{\134circ}\134text{F}"<<endl;
  2108.     f<<"\134end{align*}"<<endl;
  2109.     f<<"Estos valores no var\134'ian con los obtenidos en el \134emph{Paso 3}. Ahora se calculan los nuevos EPE's:\134newline"<<endl;
  2110.     f<<"\134begin{displaymath}"<<endl;
  2111.     f<<"\134begin{array}{lllll}"<<endl;
  2112.     for(int i=0; i<size; i++) {
  2113.         f<<"\134text{EPE}_{"<<i+1<<"}="<<contar(epe[i])<<"^{\134circ}\134text{F}&\134text{Le\134'ido a}&\134text{$x_{"<<i+1<<"}="<<contar(x[i+1]*100)<<"$\134%}&\134text{y}&\134text{$T_{S"<<i+1<<"}="<<contar(Tsat[i+1])<<"^{\134circ}\134text{F}$}\134\134"<<endl;
  2114.     }
  2115.     f<<"\134end{array}"<<endl;
  2116.     f<<"\134end{displaymath}"<<endl;
  2117.     suma=0;
  2118.     for(int i=0; i<size; i++) {
  2119.         suma=suma+contar(epe[i]);
  2120.     }
  2121.     deltaT[0]=contar(Tsat[0])-contar(Tsat[size])-suma;
  2122.     f<<"\134begin{align*}"<<endl;
  2123.     f<<"\134Delta T_{\134text{Total}}&=T_{S1}-T_{S4}-\134left(";
  2124.     for(int i=0; i<size; i++) {
  2125.         f<<"\134text{EPE}_{"<<i+1<<"}";
  2126.         if(i<size-1) {
  2127.             f<<"+";
  2128.         } else {
  2129.             f<<"\134right)\134\134"<<endl;
  2130.         }
  2131.     }
  2132.     f<<"\134Delta T_{\134text{Total}}&="<<contar(Tsat[0])<<"^{\134circ}\134text{F}-"<<contar(Tsat[size])<<"^{\134circ}\134text{F}-\134left(";
  2133.     for(int i=0; i<size; i++) {
  2134.         f<<contar(epe[i])<<"^{\134circ}\134text{F}";
  2135.         if(i==size-1) {
  2136.             f<<"\134right)\134\134"<<endl;
  2137.         } else {
  2138.             f<<"+";
  2139.         }
  2140.     }
  2141.     f<<"\134Delta T_{\134text{Total}}&="<<contar(deltaT[0])<<"^{\134circ}\134text{F}"<<endl;
  2142.     f<<"\134end{align*}"<<endl;
  2143.     f<<"Este \134'ultimo $\134Delta T_{\134text{Total}}$ es muy cercano al obtenido con la ecuaci\134'on 8.5-11. Este es un indicio que en el \134emph{Paso 8} terminar\134'a la resoluci\134'on del problema.\134\134"<<endl;
  2144.     f<<"Ahora se recalcula las temperaturas de saturaci\134'on en cada efecto:"<<endl;
  2145.     f<<"\134begin{multicols}{2}"<<endl;
  2146.     f<<"\134noindent";
  2147.     for(int i=0; i<size; i++) {
  2148.         f<<"\134emph{Efecto "<<i+1<<":}"<<endl;
  2149.         f<<"\134begin{align*}"<<endl;
  2150.         if(i==0) {
  2151.             f<<"T_{"<<i+1<<"}&=T_{S"<<i+1<<"}-\134Delta T^\134prime_{"<<i+1<<"}\134\134"<<endl;
  2152.             f<<"&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}-"<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}="<<contar(T[i+1])<<"^{\134circ}\134text{F}\134\134"<<endl;
  2153.             f<<"T_{S"<<i+1<<"}&="<<contar(Tsat[i])<<"^{\134circ}\134text{F}"<<endl;
  2154.         } else {
  2155.             f<<"T_{"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}-\134Delta T^\134prime_{"<<i+1<<"}\134\134"<<endl;
  2156.             f<<"&="<<contar(T[i])<<"^{\134circ}\134text{F}-"<<contar(epe[i-1])<<"^{\134circ}\134text{F}-"<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}="<<contar(T[i+1])<<"^{\134circ}\134text{F}\134\134"<<endl;
  2157.             f<<"T_{S"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}\134\134"<<endl;
  2158.             f<<"&="<<contar(T[i])<<"^{\134circ}\134text{F}-"<<contar(epe[i-1])<<"^{\134circ}\134text{F}="<<contar(Tsat[i])<<"^{\134circ}\134text{F}"<<endl;
  2159.         }
  2160.         f<<"\134end{align*}"<<endl;
  2161.         f<<"\134newline"<<endl;
  2162.     }
  2163.     f<<"\134end{multicols}"<<endl;
  2164.  
  2165.  
  2166.     f<<"\134item[Paso 8:] Se sigue con el \134emph{Paso 4} (c\134'alculos de las entalp\134'ias y el \134emph{balance de energ\134'ia} en cada efecto),y con el \134emph{Paso 5} (c\134'alculos de tasas calor y \134'areas):\134newline"<<endl;
  2167.  
  2168.  
  2169.     f<<"\134newline"<<endl;
  2170.     f<<"\134begin{center}"<<endl;
  2171.     f<<"\134textsc{\134textbf{Entalp\134'ias de los licores:}}"<<endl;
  2172.     f<<"\134end{center}"<<endl;
  2173.     f<<"Entalp\134'ias de los licores le\134'idos de la p\134'agina 530 del McCabe:"<<endl;
  2174.     f<<"\134begin{displaymath}"<<endl;
  2175.     f<<"\134begin{array}{lllllll}"<<endl;
  2176.     for(int i=0; i<=size; i++) {
  2177.         if(i==0) {
  2178.             f<<"H_{XF}="<<contar(hx[i])<<"\134tfrac{\134text{BTU}}{lb_m}&\134text{Alimentaci\134'on.}&\134text{Le\134'ido a}&\134text{$x_{F}="<<contar(x[i]*100)<<"$\134%}&\134text{y}&\134text{$T_{F}="<<contar(T[i])<<"^{\134circ}\134text{F}$}\134\134"<<endl;
  2179.         } else {
  2180.             f<<"H_{X"<<i<<"}="<<contar(hx[i])<<"\134tfrac{\134text{BTU}}{lb_m}&\134text{Licor "<<i<<".}&\134text{Le\134'ido a}&\134text{$x_{"<<i<<"}="<<contar(x[i]*100)<<"$\134%}&\134text{y}&\134text{$T_{"<<i<<"}="<<contar(T[i])<<"^{\134circ}\134text{F}$}\134\134"<<endl;
  2181.         }
  2182.     }
  2183.     f<<"\134end{array}"<<endl;
  2184.     f<<"\134end{displaymath}"<<endl;
  2185.     f<<"\134newline"<<endl;
  2186.     f<<"\134begin{center}"<<endl;
  2187.     f<<"\134textsc{\134textbf{Entalp\134'ias de los vapores:}}"<<endl;
  2188.     f<<"\134end{center}"<<endl;
  2189.     for(int i=0; i<size; i++) {
  2190.         f<<"\134noindent \134emph{Efecto "<<i+1<<":}"<<endl;
  2191.         f<<"\134begin{align*}"<<endl;
  2192.         f<<"H_{"<<i+1<<"}&=h_{g \134left(T_{S"<<i+2<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"}\134\134"<<endl;
  2193.         f<<"H_{"<<i+1<<"}&="<<contar(Hg(Tsat[i+1]))<<"\134tfrac{\134text{BTU}}{lb_m}+"<<contar(CP(Tsat[i+1]))<<"\134tfrac{\134text{BTU}}{lb_m \134cdot ^{\134circ} \134text{F}} \134cdot"<<contar(epe[i])<<"^{\134circ} F="<<contar(H[i])<<"\134tfrac{\134text{BTU}}{lb_m}"<<endl;
  2194.         f<<"\134end{align*}"<<endl;
  2195.         if(i==0) {
  2196.             f<<"\134begin{equation*}"<<endl;
  2197.             f<<"\134lambda_{S"<<i+1<<"}="<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{lb_m} \134quad\134text{Le\134'ido a\134quad $T_{S"<<i+1<<"}="<<contar(Tsat[i])<<"^{\134circ} F$}"<<endl;
  2198.             f<<"\134end{equation*}"<<endl;
  2199.         } else {
  2200.             f<<"\134begin{equation*}"<<endl;
  2201.             f<<"\134lambda_{S"<<i+1<<"}=h_{fg \134left(T_{S"<<i+1<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"} \134quad\134text{Le\134'ido a\134quad $T_{S"<<i+1<<"}="<<contar(Tsat[i])<<"^{\134circ} F$}"<<endl;
  2202.             f<<"\134end{equation*}"<<endl;
  2203.             f<<"\134begin{equation*}"<<endl;
  2204.             f<<"\134lambda_{S"<<i+1<<"}="<<contar(Hvap(Tsat[i]))<<"\134tfrac{\134text{BTU}}{lb_m}+"<<contar(CP(Tsat[i]))<<"\134tfrac{\134text{BTU}}{lb_m \134cdot ^{\134circ} \134text{F}} \134cdot"<<contar(epe[i-1])<<"^{\134circ} F="<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{lb_m}"<<endl;
  2205.             f<<"\134end{equation*}"<<endl;
  2206.         }
  2207.         f<<"\134newline"<<endl;
  2208.     }
  2209.     f<<"\134newline"<<endl;
  2210.     f<<"\134begin{center}"<<endl;
  2211.     f<<"\134textsc{\134textbf{Balance de Energ\134'ia de cada efecto:}}"<<endl;
  2212.     f<<"\134end{center}"<<endl;
  2213.     for(int i=0; i<size; i++) {
  2214.  
  2215.         f<<"\134begin{center}"<<endl;
  2216.         f<<"{\134color{Blue}\134hrule}"<<endl;
  2217.         f<<"\134textbf{Efecto "<<i+1<<":}"<<endl;
  2218.         f<<"\134end{center}"<<endl;
  2219.         f<<"\134begin{multicols}{2}"<<endl;
  2220.         f<<"\134begin{picture}(10,13)"<<endl;
  2221.  
  2222.  
  2223.         f<<"\134thicklines"<<endl;
  2224.  
  2225.  
  2226.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(0,1){6.8}}}"<<endl;
  2227.         f<<"\134put(3.6,8.4){{\134color{Red}\134line(1,0){4.8}}}"<<endl;
  2228.         f<<"\134put(8.4,8.4){{\134color{Red}\134line(0,-1){6.8}}}"<<endl;
  2229.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(1,0){4.8}}}"<<endl;
  2230.  
  2231.         f<<"\134thinlines"<<endl;
  2232.  
  2233.         f<<"\134put(0,4){\134vector(1,0){4}}"<<endl;
  2234.         f<<"\134put(0,7){\134vector(1,0){4}}"<<endl;
  2235.         f<<"\134put(6,10){\134vector(1,0){4}}"<<endl;
  2236.         f<<"\134put(6,2){\134vector(0,-1){2}}"<<endl;
  2237.         f<<"\134put(10,4){\134vector(0,-1){2}}"<<endl;
  2238.  
  2239.         f<<"\134put(4,4){\134line(0,1){4}}"<<endl;
  2240.         f<<"\134put(4,8){\134line(1,0){4}}"<<endl;
  2241.         f<<"\134put(8,8){\134line(0,-1){4}}"<<endl;
  2242.         f<<"\134put(4,4){\134line(1,-1){2}}"<<endl;
  2243.         f<<"\134put(6,2){\134line(1,1){2}}"<<endl;
  2244.         f<<"\134put(6,8){\134line(0,1){2}}"<<endl;
  2245.         f<<"\134put(8,4){\134line(1,0){2}}"<<endl;
  2246.  
  2247.         f<<"\134put(4,4){\134line(1,1){0.5}}"<<endl;
  2248.         f<<"\134put(5,4){\134line(1,1){0.5}}"<<endl;
  2249.         f<<"\134put(6,4){\134line(1,1){0.5}}"<<endl;
  2250.         f<<"\134put(7,4){\134line(1,1){0.5}}"<<endl;
  2251.         f<<"\134put(4.5,4.5){\134line(1,-1){0.5}}"<<endl;
  2252.         f<<"\134put(5.5,4.5){\134line(1,-1){0.5}}"<<endl;
  2253.         f<<"\134put(6.5,4.5){\134line(1,-1){0.5}}"<<endl;
  2254.         f<<"\134put(7.5,4.5){\134line(1,-1){0.5}}"<<endl;
  2255.  
  2256.  
  2257.         f<<"\134put(5.5,6){{("<<i+1<<")}}"<<endl;
  2258.  
  2259.         if(i+1==efecto[0]) {
  2260.             f<<"\134put(-2,8.3){{\134footnotesize $F="<<L[0]<<"\134tfrac{lb_m}{h}$}}"<<endl;
  2261.             f<<"\134put(-2,7.4){{\134footnotesize $H_{XF}="<<contar(hx[0])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  2262.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  2263.         } else {
  2264.             f<<"\134put(-2,8.3){{\134footnotesize $L_{"<<io[i+1][entra]<<"}$}}"<<endl;
  2265.             f<<"\134put(-2,7.4){{\134footnotesize $H_{X"<<io[i+1][entra]<<"}="<<contar(hx[io[i+1][entra]])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  2266.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  2267.         }
  2268.         if(i==0) {
  2269.             f<<"\134put(-2,3.2){{\134footnotesize $S$}}"<<endl;
  2270.         } else if(io[i][entra]==0) {
  2271.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=F-L_{"<<io[i][sale]<<"}$}}"<<endl;
  2272.         } else {
  2273.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=L_{"<<io[i][entra]<<"}-L_{"<<io[i][sale]<<"}$}}"<<endl;
  2274.         }
  2275.         f<<"\134put(-2,2.3){{\134footnotesize $\134lambda_{S"<<i+1<<"}="<<contar(hvap[i])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  2276.  
  2277.  
  2278.         f<<"\134put(6.2,0.8){{\134footnotesize $L_{"<<io[i+1][sale]<<"}$}}"<<endl;
  2279.         f<<"\134put(6.2,0){{\134footnotesize $H_{X"<<io[i+1][sale]<<"}="<<contar(hx[io[i+1][sale]])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  2280.         f<<"\134put(6,10.4){{\134footnotesize $H_{"<<io[i+1][sale]<<"}="<<contar(H[io[i+1][sale]-1])<<"\134tfrac{BTU}{lb_m}$}}"<<endl;
  2281.         f<<"\134end{picture}"<<endl;
  2282.         f<<"\134newline\134newline"<<endl;
  2283.         f<<"\134begin{align*}"<<endl;
  2284.         f<<"\134dot{E}_{entra}&=\134dot{E}_{sale}\134\134"<<endl;
  2285.         if(i+1==efecto[0]) {
  2286.             f<<"F \134cdot H_{XF}+";
  2287.         } else {
  2288.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2289.         }
  2290.         if(i==0) {
  2291.             f<<"S \134cdot ";
  2292.         } else {
  2293.             f<<"V_{"<<i<<"} \134cdot ";
  2294.         }
  2295.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"} \134cdot H_{"<<io[i+1][sale]<<"}"<<endl;
  2296.         f<<"\134end{align*}"<<endl;
  2297.         f<<"Como se conoce del \134emph{balance de materia} "<<endl;
  2298.         if(i>0) {
  2299.             f<<"\134begin{math}"<<endl;
  2300.             f<<"V_{"<<io[i][sale]<<"}=";
  2301.             if(io[i][entra]==0) {
  2302.                 f<<"F-";
  2303.             } else {
  2304.                 f<<"L_{"<<io[i][entra]<<"}-";
  2305.             }
  2306.             f<<"L_{"<<io[i][sale]<<"}";
  2307.             f<<"\134end{math}"<<endl;
  2308.             f<<" y ";
  2309.         }
  2310.         f<<"\134begin{math}"<<endl;
  2311.         if(i+1==efecto[0]) {
  2312.             f<<"V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}"<<endl;
  2313.         } else {
  2314.             f<<"V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}"<<endl;
  2315.         }
  2316.         f<<"\134end{math}"<<endl;
  2317.         if(i==0) {
  2318.             f<<". Se realiza un arreglo algebr\134'aico de modo que las inc\134'ognitas queden en el lado izquierdo de la igualdad y las constantes en el lado derecho,se sustituyen los valores de las entalp\134'ias:\134newline"<<endl;
  2319.         } else {
  2320.             f<<". Se repite al igual que el efecto 1:\134newline"<<endl;
  2321.         }
  2322.  
  2323.         f<<"\134end{multicols}"<<endl;
  2324.  
  2325.         f<<"\134begin{align*}"<<endl;
  2326.         if(i+1==efecto[0]) {
  2327.             f<<"F \134cdot H_{XF}+";
  2328.         } else {
  2329.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2330.         }
  2331.         if(i==0) {
  2332.             f<<"S \134cdot ";
  2333.         } else {
  2334.             if(i>0) {
  2335.                 if(io[i][entra]==0) {
  2336.                     f<<"\134left(F-";
  2337.                 } else {
  2338.                     f<<"\134left(L_{"<<io[i][entra]<<"}-";
  2339.                 }
  2340.                 f<<"L_{"<<io[i][sale]<<"}\134right) \134cdot";
  2341.             }
  2342.         }
  2343.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2344.         if(i+1==efecto[0]) {
  2345.             f<<"\134left(F-L_{"<<io[i+1][sale]<<"}\134right)";
  2346.         } else {
  2347.             f<<"\134left(L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134right)";
  2348.         }
  2349.         f<<"\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2350.         if(i+1==efecto[0]) {
  2351.             f<<"F \134cdot H_{XF}+";
  2352.         } else {
  2353.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2354.         }
  2355.         if(i==0) {
  2356.             f<<"S \134cdot \134lambda_{S"<<i+1<<"}";
  2357.         } else {
  2358.             if(i>0) {
  2359.                 if(io[i][entra]==0) {
  2360.                     f<<"F \134cdot \134lambda_{S"<<i+1<<"}-";
  2361.                 } else {
  2362.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134lambda_{S"<<i+1<<"}-";
  2363.                 }
  2364.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134lambda_{S"<<i+1<<"}";
  2365.             }
  2366.         }
  2367.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2368.         if(i+1==efecto[0]) {
  2369.             f<<"F\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2370.         } else {
  2371.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2372.         }
  2373.         if(i+1==efecto[0]) {
  2374.             f<<"F \134cdot \134left("<<contar(hx[0])<<"\134right)+";
  2375.         } else {
  2376.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot \134left("<<contar(hx[io[i+1][entra]])<<"\134right)+";
  2377.         }
  2378.         if(i==0) {
  2379.             f<<"S \134cdot \134left("<<contar(hvap[i])<<"\134right)";
  2380.         } else {
  2381.             if(i>0) {
  2382.                 if(io[i][entra]==0) {
  2383.                     f<<"F \134cdot \134left("<<contar(hvap[i])<<"\134right)-";
  2384.                 } else {
  2385.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134left("<<contar(hvap[i])<<"\134right)-";
  2386.                 }
  2387.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134left("<<contar(hvap[i])<<"\134right)";
  2388.             }
  2389.         }
  2390.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot \134left("<<contar(hx[io[i+1][sale]])<<"\134right)+";
  2391.         if(i+1==efecto[0]) {
  2392.             f<<"F\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)-L_{"<<io[i+1][sale]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<endl;
  2393.         } else {
  2394.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<"-L_{"<<io[i+1][sale]<<"}\134cdot \134left("<<contar(H[io[i+1][sale]-1])<<"\134right)"<<endl;
  2395.         }
  2396.         f<<"\134end{align*}"<<endl;
  2397.         label++;
  2398.         f<<"\134begin{equation}"<<endl;
  2399.         f<<"\134label{eq"<<label<<"}"<<endl;
  2400.         unsigned short int c2,c3;
  2401.         c2=0;
  2402.         for(int j=0; j<size; j++) {
  2403.             if(M[i][j]!=0) {
  2404.                 c2++;
  2405.             }
  2406.         }
  2407.         c3=c2;
  2408.         for(int j=0; j<size; j++) {
  2409.             if(M[i][j]!=0 and j!=0) {
  2410.                 if(c3!=c2 and M[i][j]>0) {
  2411.                     f<<"+";
  2412.                 }
  2413.                 f<<contar(M[i][j])<<"L_{"<<incognita[j-1]<<"}";
  2414.                 c2--;
  2415.             }
  2416.             if(i==0 and j==0 and M[i][j]!=0) {
  2417.                 f<<contar(M[i][j])<<"S";
  2418.                 c2--;
  2419.             }
  2420.         }
  2421.         f<<"="<<setprecision(10)<<N[i][0];
  2422.         if(i<size-1) {
  2423.             f<<"\134\134"<<endl;
  2424.         }
  2425.         f<<"\134end{equation}"<<endl;
  2426.     }
  2427.     f<<"Se resuelven las ecuaciones ";
  2428.     for(int i=0; i<size; i++) {
  2429.         f<<"\134ref{eq"<<i+size+1<<"}";
  2430.         if(i<size-2) {
  2431.             f<<",";
  2432.         }
  2433.         if(i==size-2) {
  2434.             f<<" y ";
  2435.         }
  2436.     }
  2437.     f<<"."<<endl;
  2438.     f<<"\134begin{displaymath}"<<endl;
  2439.     f<<"\134left\134{"<<endl;
  2440.     f<<"\134begin{array}{rcl}"<<endl;
  2441.     for(int i=0; i<size; i++) {
  2442.         unsigned short int c2,c3;
  2443.         c2=0;
  2444.         for(int j=0; j<size; j++) {
  2445.             if(M[i][j]!=0) {
  2446.                 c2++;
  2447.             }
  2448.         }
  2449.         c3=c2;
  2450.         for(int j=0; j<size; j++) {
  2451.             if(M[i][j]!=0 and j!=0) {
  2452.                 if(c3!=c2 and M[i][j]>0) {
  2453.                     f<<"+";
  2454.                 }
  2455.                 f<<contar(M[i][j])<<"\134textcolor{OliveGreen}{L_{"<<incognita[j-1]<<"}}";
  2456.                 c2--;
  2457.             }
  2458.             if(i==0 and j==0 and M[i][j]!=0) {
  2459.                 f<<contar(M[i][j])<<"\134textcolor{OliveGreen}{S}";
  2460.                 c2--;
  2461.             }
  2462.         }
  2463.         f<<"&=&"<<setprecision(10)<<N[i][0];
  2464.         if(i<size-1) {
  2465.             f<<"\134\134"<<endl;
  2466.         }
  2467.     }
  2468.     f<<"\134end{array}"<<endl;
  2469.     f<<"\134right."<<endl;
  2470.     f<<"\134end{displaymath}"<<endl;
  2471.  
  2472.     f<<"\134begin{displaymath}"<<endl;
  2473.     f<<"\134left["<<endl;
  2474.     f<<"\134begin{matrix}"<<endl;
  2475.     for(int i=0; i<size; i++) {
  2476.         for(int j=0; j<size; j++) {
  2477.             f<<"\134textcolor{black}{"<<contar(M[i][j])<<"}";
  2478.             if(j<size-1) {
  2479.                 f<<"&";
  2480.             } else {
  2481.                 f<<"\134\134"<<endl;
  2482.             }
  2483.         }
  2484.     }
  2485.     f<<"\134end{matrix}"<<endl;
  2486.     f<<"\134right]"<<endl;
  2487.     f<<"\134left["<<endl;
  2488.     f<<"\134begin{matrix}"<<endl;
  2489.     for(int i=0; i<size; i++) {
  2490.         if(i==0) {
  2491.             f<<"\134textcolor{OliveGreen}{S}";
  2492.         } else {
  2493.             f<<"\134textcolor{OliveGreen}{L_{"<<incognita[i-1]<<"}}";
  2494.         }
  2495.         if(i<size-1) {
  2496.             f<<"\134\134"<<endl;
  2497.         } else {
  2498.             f<<endl;
  2499.         }
  2500.     }
  2501.     f<<"\134end{matrix}"<<endl;
  2502.     f<<"\134right]"<<endl;
  2503.     f<<"=";
  2504.     f<<"\134left["<<endl;
  2505.     f<<"\134begin{matrix}"<<endl;
  2506.     for(int j=0; j<size; j++) {
  2507.         f<<"\134textcolor{Blue}{"<<N[j][0]<<"}";
  2508.         if(j<size-1) {
  2509.             f<<"\134\134"<<endl;
  2510.         }
  2511.     }
  2512.     f<<"\134end{matrix}"<<endl;
  2513.     f<<"\134right]"<<endl;
  2514.     f<<"\134end{displaymath}"<<endl;
  2515.  
  2516.  
  2517.     for(int k=0; k<size; k++) {
  2518.         f<<"\134begin{displaymath}"<<endl;
  2519.         for(int i=0; i<size; i++) {
  2520.             for(int j=0; j<size; j++) {
  2521.                 m[i][j]=M[i][j];
  2522.             }
  2523.         }
  2524.         for(int i=0; i<=9; i++) {
  2525.             m[i][k]=N[i][0];
  2526.         }
  2527.         if(k==0) {
  2528.             f<<"S=\134frac{"<<endl;
  2529.         } else {
  2530.             f<<"L_{"<<incognita[k-1]<<"}=\134frac{"<<endl;
  2531.         }
  2532.  
  2533.         f<<"\134begin{vmatrix}"<<endl;
  2534.         for(int fila=0; fila<size; fila++) {
  2535.             for(int columna=0; columna<size; columna++) {
  2536.                 if(columna==k) {
  2537.                     f<<"\134textcolor{Blue}{";
  2538.                 } else {
  2539.                     f<<"\134textcolor{black}{";
  2540.                 }
  2541.                 f<<contar(m[fila][columna])<<"}";
  2542.                 if(columna==size-1) {
  2543.                     f<<"\134\134"<<endl;
  2544.                 } else {
  2545.                     f<<"&";
  2546.                 }
  2547.             }
  2548.         }
  2549.         f<<"\134end{vmatrix}}{"<<endl;
  2550.         f<<"\134begin{vmatrix}"<<endl;
  2551.         for(int fila=0; fila<size; fila++) {
  2552.             for(int columna=0; columna<size; columna++) {
  2553.                 f<<"\134textcolor{black}{";
  2554.                 f<<contar(M[fila][columna])<<"}";
  2555.                 if(columna==size-1) {
  2556.                     f<<"\134\134"<<endl;
  2557.                 } else {
  2558.                     f<<"&";
  2559.                 }
  2560.             }
  2561.         }
  2562.         f<<"\134end{vmatrix}}="<<endl;
  2563.         if(size<6) {
  2564.             f<<"\134frac{"<<setprecision(15)<<contar(determinante(m,size))<<"}{"<<contar(determinante(M,size))<<"}=";
  2565.         }
  2566.         f<<contar(determinante(m,size)/determinante(M,size))<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}"<<endl;
  2567.         f<<"\134end{displaymath}"<<endl;
  2568.     }
  2569.     for(int i=0; i<size; i++) {
  2570.         f<<"\134begin{align*}"<<endl;
  2571.         if(i+1==efecto[0]) {
  2572.             f<<"V_{"<<io[i+1][sale]<<"}&=F-L_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2573.         } else {
  2574.             f<<"V_ {"<<io[i+1][sale]<<"}&=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134\134"<<endl;
  2575.         }
  2576.         f<<"V_{"<<io[i+1][sale]<<"}&="<<contar(L[io[i+1][entra]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}-"<<contar(L[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  2577.         f<<"V_{"<<io[i+1][sale]<<"}&="<<contar(V[io[i+1][sale]])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134\134"<<endl;
  2578.         f<<"\134end{align*}"<<endl;
  2579.     }
  2580.     f<<"\134begin{align*}"<<endl;
  2581.     for(int i=0; i<size; i++) {
  2582.         f<<"\134dot{Q}_{"<<i+1<<"}&=";
  2583.         if(i==0) {
  2584.             f<<"S";
  2585.         } else {
  2586.             f<<"V_{"<<i<<"}";
  2587.         }
  2588.         f<<"\134cdot \134lambda_{S"<<i+1<<"}=\134left("<<contar(V[i])<<"\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}\134right)\134left("<<contar(hvap[i])<<"\134tfrac{\134text{BTU}}{\134text{lb}_\134text{m}}\134right)="<<contar(contar(hvap[i])*contar(V[i]))<<"\176\134tfrac{\134text{BTU}}{h}\134\134"<<endl;
  2589.     }
  2590.     suma=0;
  2591.     f<<"\134end{align*}"<<endl;
  2592.     f<<"\134begin{align*}"<<endl;
  2593.     for(int i=0; i<size; i++) {
  2594.         f<<"A_{"<<i+1<<"}&="<<"\134frac{\134dot{Q}_{"<<i+1<<"}}{U_{"<<i+1<<"}\134cdot \134Delta T_{"<<i+1<<"}}=\134frac{"<<contar(contar(hvap[i])*contar(V[i]))<<"\134frac{\134text{BTU}}{\134text{h}}}{\134left("<<U[i]<<"\134tfrac{\134text{BTU}}{\134text{h}\134cdot \134text{ft}^2 \134cdot ^{\134circ}\134text{F}}\134right)\134left("<<contar(deltaT[i+1])<<"^{\134circ}\134text{F}\134right)}="<<contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]))<<"\176\134text{ft}^2\134\134"<<endl;
  2595.         suma=suma+contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]));
  2596.     }
  2597.     f<<"\134end{align*}"<<endl;
  2598.     f<<"El \134'area promedio $A_m="<<contar(suma/size)<<"\176\134text{ft}^2$. La variaci\134'on es despreciable y no hace falta otra iteraci\134'on. De no ser iguales se debe repetir los pasos 6,7 y 8 hasta que converjan las respuestas.\134newline\134newline"<<endl;
  2599.     f<<"\134begin{Large}"<<endl;
  2600.     f<<"\134textbf{Respuestas:}"<<endl;
  2601.     f<<"\134end{Large}"<<endl;
  2602.     f<<"\134begin{parts}"<<endl;
  2603.     f<<"\134part $A_m="<<contar(A[0])<<"\176\134text{ft}^2$"<<endl;
  2604.     f<<"\134part $S="<<contar(V[0])<<"\176\134frac{\134text{lb}_{m}}{\134text{h}}$"<<endl;
  2605.     f<<"\134part $\134text{Econom\134'ia del vapor}=\134frac{";
  2606.     for(int i=0; i<size; i++) {
  2607.         f<<"V_{"<<i+1<<"}";
  2608.         if(i==size-1) {
  2609.             f<<"}";
  2610.         } else {
  2611.             f<<"+";
  2612.         }
  2613.     }
  2614.     f<<"{S}=\134frac{";
  2615.     suma=0;
  2616.     for(int i=0; i<size; i++) {
  2617.         f<<contar(V[i+1]);
  2618.         suma=suma+contar(V[i+1]);
  2619.         if(i==size-1) {
  2620.             f<<"}";
  2621.         } else {
  2622.             f<<"+";
  2623.         }
  2624.     }
  2625.     f<<"{"<<contar(V[0])<<"}="<<contar(contar(suma)/contar(V[0])*1000)/1000<<"$"<<endl;
  2626.     f<<"\134end{parts}"<<endl;
  2627.     f<<"\134end{description}"<<endl;
  2628.     f<<"\134end{solution}"<<endl;
  2629.     f<<"\134end{document}";
  2630.     f.close();
  2631. }
  2632.  
  2633.  
  2634. /*funciones auxiliares*/
  2635.  
  2636. bool ingresar_orden_efectos() {
  2637.     cout<<"Ingrese el orden de los efectos (por ejemplo 312, 132, 123 para 3 efectos): ";
  2638.     cin >> opcion;
  2639.     if (!orden_efectos(opcion)) {
  2640.         cout<<"ERROR: el orden ingresado no es v\240lido."<<endl;
  2641.         return false;
  2642.     }
  2643.     return true;
  2644. }
  2645.  
  2646. bool validar_alimentacion() {
  2647.     cout<<"Ingrese el flujo m\240sico [lb/h]: ";
  2648.     cin >> L[0];
  2649.     if (L[0] <=0) {
  2650.         cout<<"ERROR: El flujo m\240sico debe ser mayor a 0."<<endl;
  2651.         return false;
  2652.     }
  2653.     return true;
  2654. }
  2655.  
  2656. bool validar_temperatura() {
  2657.     cout<<"Ingrese temperatura de alimentacion [F]: ";
  2658.     cin >> T[0];
  2659.     if (T[0]<40 || T[0] > 400) {
  2660.         cout<<"ERROR: La temperatura debe estar entre 40 y 400 Fahrenheit."<<endl;
  2661.         return false;
  2662.     }
  2663.     return true;
  2664. }
  2665.  
  2666. bool validar_concentraciones() {
  2667.     cout<<"Ingrese concentracion (fraccion en peso): x[0]=";
  2668.     cin >> x[0];
  2669.     cout<<"Ingrese concentracion (fraccion en peso): x["<<efecto[size-1]<<"]=";
  2670.     cin >> x[efecto[size-1]];
  2671.  
  2672.     if (x[0]<=0 || x[efecto[size-1]]<=0 || x[0]>=1 || x[efecto[size-1]] > 1 || x[0]>=x[efecto[size-1]]) {
  2673.         cout<<"ERROR: Las concentraciones deben estar entre 0 y 1,y x[0]<x[efecto[size-1]]."<<endl;
  2674.         return false;
  2675.     }
  2676.     return true;
  2677. }
  2678.  
  2679. bool validar_presiones() {
  2680.     cout<<"Ingrese presion del vapor vivo [psia]: P[0]=";
  2681.     cin >> P[0];
  2682.     cout<<"Ingrese presion ultimo efecto [psia]: P["<<size<<"]=";
  2683.     cin >> P[size];
  2684.  
  2685.     if (P[0]<0.1 || P[size]<0.1 || P[0] > 3198 || P[size] > 3198 || P[0] <=P[size]) {
  2686.         cout<<"ERROR: Las presiones deben ser mayores a 0.1 psia y menores a 3198 psia,y P[0] > P[size]."<<endl;
  2687.         return false;
  2688.     }
  2689.     return true;
  2690. }
  2691.  
  2692. bool validar_coeficientes() {
  2693.     cout<<"Ingrese los coeficientes globales de transferencia de calor [BTU/(h*ft*F)]: "<<endl;
  2694.     for (int i=0; i<size; i++) {
  2695.         cout<<"U["<<i+1<<"]=";
  2696.         cin>>U[i];
  2697.         if (U[i]<200 || U[i]>1000) {
  2698.             cout<<"ERROR: Los coeficientes deben estar entre 200 y 1000."<<endl;
  2699.             return false;
  2700.         }
  2701.     }
  2702.     return true;
  2703. }
  2704.  
  2705. void imprimir_datos() {
  2706.     cout<<"\n*********************************************"<<endl;
  2707.     cout<<"Alimentacion [lbm/h]: "<<L[0]<<endl;
  2708.     cout<<"Temperatura de alimentacion [F]: "<<T[0]<<endl;
  2709.     cout<<"Concentracion en peso: "<<x[0]<<endl;
  2710.     cout<<"Concentracion en peso: "<<x[efecto[size-1]]<<endl;
  2711.     cout<<"Presion del vapor vivo [psia]: "<<P[0]<<endl;
  2712.     cout<<"Presion del efecto "<<size<<" [psia]: "<<P[size]<<endl;
  2713.     cout<<"Coeficientes globales de transferencia de calor [BTU/(h*)]: "<<endl;
  2714.     for (int i=0; i<size; i++) {
  2715.         cout<<"U["<<i+1<<"]="<<U[i]<<endl;
  2716.     }
  2717.     cout<<"*********************************************"<<endl;
  2718. }
  2719.  
  2720. void generar_datos_aleatorios() {
  2721.     srand(time(0));
  2722.     int intentos=0;
  2723.     bool continuar=true;
  2724.  
  2725.     cout<<"Generacion de datos aleatorios para "<<size<<" efectos..."<<endl;
  2726.  
  2727.     do {
  2728.         intentos++;
  2729.         cout<<"Intento "<<intentos<<endl;
  2730.  
  2731.         // Generar coeficientes de transferencia de calor U[i] entre 450 y 1500
  2732.         for (int i=0; i<size; i++) {
  2733.             U[i]=400+rand()%(1000-400+1);
  2734.         }
  2735.  
  2736.  
  2737.         L[0]=5000+rand() % (250000-5000+1);// Entre 5,000 y 250,000 lb/h
  2738.  
  2739.         // Generar concentraciones x[0] y x[efecto[size-1]] (0<x[0]<x[efecto[size-1]]<1)
  2740.         do {
  2741.             x[0]=(rand() % 50+1) / 100.0;// Entre 0.01 y 0.5
  2742.             x[efecto[size-1]]=x[0]+(rand() % 50+1) / 100.0;// Entre x[0] y x[0]+0.5
  2743.         } while (x[efecto[size-1]] >=0.75);
  2744.  
  2745.  
  2746.         T[0]=40+rand()%(400-40+1);
  2747.  
  2748.         // Generar presiones P[0] y P[size] (0.1<P[size]<P[0]<3198)
  2749.         double c=(rand()%200)/10.0;// Generar un valor base para las presiones
  2750.         P[size]=0.1+c+(rand()%50)/10.0;// Entre 0.1 y c+5
  2751.         P[0]=P[size]+(rand()%3198)/10.0;// Entre P[size] y 3198
  2752.  
  2753.  
  2754.         if (resolver()) {
  2755.             escribir();
  2756.             continuar=false;
  2757.         }
  2758.  
  2759.         // Verificar si se alcanzaron 20 intentos
  2760.         if (intentos==20) {
  2761.             int respuesta;
  2762.             cout<<"\250Desea continuar? (1) S\241,(2) No: ";
  2763.             cin>>respuesta;
  2764.             if (respuesta!=1) {
  2765.                 continuar=false;
  2766.             }
  2767.             intentos=0;// Reiniciar intentos
  2768.         }
  2769.     } while (continuar);
  2770.     cout<<"FINALIZADO"<<endl;
  2771. }
  2772.  
  2773. double Hvap(double T) {
  2774.     if (T<temperaturas.front()||T>temperaturas.back()) {
  2775.         throw std::out_of_range("La temperatura esta fuera del rango soportado.");
  2776.     }
  2777.     for (size_t i=0; i<temperaturas.size()-1; ++i) {
  2778.         if (T>=temperaturas[i] && T<=temperaturas[i+1]) {
  2779.             double t1=temperaturas[i];
  2780.             double t2=temperaturas[i+1];
  2781.             double h1=entalpia_vaporizacion[i];
  2782.             double h2=entalpia_vaporizacion[i+1];
  2783.             return h1+(T-t1)*(h2-h1)/(t2-t1);
  2784.         }
  2785.     }
  2786.     throw std::runtime_error("Error inesperado en la interpolacion.");
  2787. }
  2788.  
  2789.  
  2790. double T_sat(double P) {
  2791.     if (P<presion_vapor.front() || P>presion_vapor.back()) {
  2792.         throw std::out_of_range("La presion fuera del rango soportado.");
  2793.     }
  2794.     for (size_t i=0; i<presion_vapor.size()-1; ++i) {
  2795.         if (P >=presion_vapor[i] && P<=presion_vapor[i+1]) {
  2796.             double P1=presion_vapor[i];
  2797.             double P2=presion_vapor[i+1];
  2798.             double T1=temperaturas[i];
  2799.             double T2=temperaturas[i+1];
  2800.             return T1+(P-P1)*(T2-T1)/(P2-P1);
  2801.         }
  2802.     }
  2803.     throw std::runtime_error("Error inesperado en T_sat.");
  2804. }
  2805.  
  2806. double P_sat(double T) {
  2807.     if (T<temperaturas.front() || T > temperaturas.back()) {
  2808.         throw std::out_of_range("La temperatura esta fuera del rango soportado.");
  2809.     }
  2810.  
  2811.     for (size_t i=0; i<temperaturas.size()-1; ++i) {
  2812.         if (T >=temperaturas[i] && T <=temperaturas[i+1]) {
  2813.             double T1=temperaturas[i];
  2814.             double T2=temperaturas[i+1];
  2815.             double P1=presion_vapor[i];
  2816.             double P2=presion_vapor[i+1];
  2817.             return P1+(T-T1)*(P2-P1)/(T2-T1);
  2818.         }
  2819.     }
  2820.  
  2821.     throw std::runtime_error("Error inesperado en P_sat.");
  2822. }
  2823. double Hg(double T) {
  2824.     if (T<temperaturas.front()||T>temperaturas.back()) {
  2825.         throw std::out_of_range("La temperatura esta fuera del rango soportado.");
  2826.     }
  2827.     for (size_t i=0; i<temperaturas.size()-1; ++i) {
  2828.         if (T>=temperaturas[i] && T<=temperaturas[i+1]) {
  2829.             double T1=temperaturas[i];
  2830.             double T2=temperaturas[i+1];
  2831.             double H1=entalpia_vapor_saturado[i];
  2832.             double H2=entalpia_vapor_saturado[i+1];
  2833.             return H1+(T-T1)*(H2-H1)/(T2-T1);
  2834.         }
  2835.     }
  2836.     throw std::runtime_error("Error inesperado en Hg.");
  2837. }
  2838.  
  2839.  
  2840.  
  2841.  
  2842. struct EvaporadorFunctor {
  2843.     const int size;
  2844.     const std::vector<std::vector<double>>& M;
  2845.     const std::vector<std::vector<double>>& N;
  2846.  
  2847.     EvaporadorFunctor(int sz, const std::vector<std::vector<double>>& m,
  2848.                       const std::vector<std::vector<double>>& n)
  2849.         : size(sz), M(m), N(n) {}
  2850.  
  2851.     template <typename T>
  2852.     bool operator()(const T* const x, T* residuals) const {
  2853.         // Variables: Tsat[1..size-1]+L[0..size-1]
  2854.         const T* Tsat=x;                 // x[0] .. x[size-2] son Tsat[1] .. Tsat[size-1]
  2855.         const T* L=x+(size-1);       // x[size-1] .. x[2*size-2] son L[0] .. L[size-1]
  2856.  
  2857.         for (int i=0; i<size; ++i) {
  2858.             T eq=T(0);
  2859.             for (int j=0; j<size+1; ++j) {
  2860.                 T coef=T(M[i][j]);
  2861.                 if (j == 0) {
  2862.                     eq += coef; // V[0]=constante, asumimos 1
  2863.                 } else {
  2864.                     int idx=j-1;
  2865.                     if (idx >= 0 && idx<size)
  2866.                         eq += coef * L[idx];
  2867.                 }
  2868.             }
  2869.             eq -= T(N[i][0]);
  2870.             residuals[i]=eq;
  2871.         }
  2872.         return true;
  2873.     }
  2874. };
  2875. void resolver2() {
  2876.     using ceres::AutoDiffCostFunction;
  2877.     using ceres::Problem;
  2878.     using ceres::Solver;
  2879.     using ceres::Solve;
  2880.  
  2881.     const int num_Tsat_vars=size-1;
  2882.     const int num_L_vars=size;
  2883.     const int num_vars=num_Tsat_vars+num_L_vars;
  2884.  
  2885.     // Vector de variables: [Tsat[1..size-1], L[0..size-1]]
  2886.     std::vector<double> x(num_vars);
  2887.     for (int i=1; i<size; ++i) x[i-1]=Tsat[i];
  2888.     for (int i=0; i<size; ++i) x[num_Tsat_vars+i]=L[i];
  2889.  
  2890.     // Crear problema de optimización
  2891.     Problem problem;
  2892.     EvaporadorFunctor* functor=new EvaporadorFunctor(size, M, N);
  2893.     problem.AddResidualBlock(
  2894.         new AutoDiffCostFunction<EvaporadorFunctor, ceres::DYNAMIC, ceres::DYNAMIC>(
  2895.             functor, size, num_vars),
  2896.         nullptr,
  2897.         x.data()
  2898.     );
  2899.  
  2900.     // Opciones del solver
  2901.     Solver::Options options;
  2902.     options.linear_solver_type=ceres::DENSE_QR;
  2903.     options.minimizer_progress_to_stdout=true;
  2904.     options.max_num_iterations=1000;
  2905.     options.function_tolerance=1e-10;
  2906.     options.gradient_tolerance=1e-10;
  2907.     options.parameter_tolerance=1e-10;
  2908.  
  2909.     // Ejecutar solver
  2910.     Solver::Summary summary;
  2911.     Solve(options, &problem, &summary);
  2912.  
  2913.     std::cout<<summary.FullReport()<<"\n";
  2914.  
  2915.     // Actualizar Tsat y L con resultados
  2916.     for (int i=1; i<size; ++i) Tsat[i]=x[i-1];
  2917.     for (int i=0; i<size; ++i) L[i]=x[num_Tsat_vars+i];
  2918. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement