J0R6EW4P0

EVAPORADORES

May 7th, 2025 (edited)
662
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 381.42 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<vector>
  8. #include<algorithm>
  9. #include<numeric>
  10. #include<stdexcept>
  11. using namespace std;
  12.  
  13.  
  14. 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};
  15. 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};
  16. 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};
  17. 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};
  18. 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};
  19.  
  20. /*Esto es para el NaOH*//*Funciones auxiliares*/
  21. bool validar_coeficientes();
  22. bool validar_presiones();
  23. bool validar_concentraciones();
  24. bool validar_temperatura();
  25. bool validar_alimentacion();
  26. bool ingresar_orden_efectos();
  27. void imprimir_datos();
  28.  
  29. /*ARREGLOS*/
  30. int opcion;
  31. unsigned short int io[9][2],numEfectos,termodinamica,efecto[9],incognita[]= {10,10,10,10,10,10,10,10,10,10},label;
  32. double economia,deltaT0,xN_constante;
  33. double L[9];
  34. double T[9];
  35. double U[8];
  36. double P[9];
  37. double x[9];
  38. double H[9];
  39. double hx[9];
  40. double Tsat[9];
  41. double deltaT[9];
  42. double V[9];
  43. double epe[9];
  44. double Licor[9];
  45. double A[9];
  46. double M[9][9];
  47. double m[9][9];
  48. double N[8][2];
  49. double hvap[9];
  50. double Q[8];
  51. double BalanceMateria[9];
  52.  
  53. /*FUNCIONES*/
  54. double contar(double n);
  55. double determinante(double b[9][9],unsigned short int n);
  56. double T_sat(double P);
  57. double P_sat(double T);
  58. double Hg(double T);
  59. double EPE(double x,double T);
  60. double Hx(double x,double T);
  61. double CP(double T);
  62. double Hvap(double T);
  63. bool orden_efectos(int n);
  64. bool resolver(void);
  65. void escribir(void);
  66. void borrar(void);
  67. void latex(void);
  68. void generar_datos_aleatorios(void);
  69. void calcularMatrices();
  70. std::vector<double> resolverSistemaGauss(const std::vector<std::vector<double>>& M,const std::vector<double>& N);
  71. size_t encontrarIndiceInterpolacion(const std::vector<double>& valores, double x);
  72.  
  73.  
  74.  
  75. bool resolverConBroyden(double tolerancia = 1e-6, int max_iter = 50);
  76. std::vector<double> empaquetarVariablesBroyden();
  77. void desempaquetarVariablesBroyden(const std::vector<double>& vars);
  78. std::vector<double> calcularResiduosBroyden(const std::vector<double>& vars);
  79. double calcularErrorTotal();
  80. void aplicarLimites(std::vector<double>& vars);
  81.  
  82. int main() {
  83.     borrar();
  84.     cout<<"EVAPORADORES M\351LTIPLES EFECTOS (2-9) para NaOH"<<'\n';
  85.     cout<<"Creado por Jorge Armando L\242pez Contreras"<<'\n';
  86.     do {
  87.         cout<<'\n'<<"*********************************************"<<'\n';
  88.         cout<<"\250Qu\202 desea hacer?"<<'\n';
  89.         cout<<"(1) Resolver un problema"<<'\n';
  90.         cout<<"(2) Generar un problema"<<'\n';
  91.         cout<<"Su opci\242n es: ";
  92.         cin>>opcion;
  93.         if(opcion<1 or opcion>2) {
  94.             cout<<"ERROR: NO EXISTE ESA OPCI\340N"<<'\n';
  95.             cout<<"Intente otra vez"<<'\n';
  96.         }
  97.     } while(opcion<1 or opcion>2);
  98.     cout<<'\n'<<"*********************************************"<<'\n';
  99.     do {
  100.         cout<<'\n'<<"*********************************************"<<'\n';
  101.         cout<<"\250Qu\202 datos termodin\240micos usar?"<<'\n';
  102.         cout<<"(1) Geankoplis"<<'\n';
  103.         cout<<"(2) IAPWS (M\265S EXACTO)"<<'\n';
  104.         cout<<"Su opci\242n es: ";
  105.         cin>>termodinamica;
  106.         if(termodinamica<1 or termodinamica>2) {
  107.             cout<<"ERROR: NO EXISTE ESA OPCI\340N"<<'\n';
  108.             cout<<"Intente otra vez"<<'\n';
  109.         }
  110.     } while(termodinamica<1 or termodinamica>2);
  111.     cout<<'\n'<<"*********************************************"<<'\n';
  112.     switch(opcion) {
  113.     case 1: {
  114.         do {
  115.             do {
  116.                 cout<<"Ingrese el n\243mero de efectos (2-9): ";
  117.                 cin >> numEfectos;
  118.                 if (numEfectos<2||numEfectos>9) {
  119.                     cout<<"ERROR: ingrese un valor entre 2 y 9."<<'\n';
  120.                 }
  121.             } while (numEfectos<2||numEfectos>9);
  122.             while(!ingresar_orden_efectos());
  123.             while(!validar_alimentacion());
  124.             while(!validar_temperatura());
  125.             while(!validar_concentraciones());
  126.             while(!validar_presiones());
  127.             while(!validar_coeficientes());
  128.             imprimir_datos();
  129.             cout<<"\250 Est\240 correcto los datos?"<<'\n';
  130.             cout<<"Ingrese (1) para continuar"<<'\n';
  131.             cout<<"Ingrese (2) para corregir"<<'\n';
  132.             cin>>opcion;
  133.         } while(opcion!=1);
  134.  
  135.         /*Analizando las entradas y salidas de cada efecto*/
  136.         for(int i=0; i<numEfectos; i++) {
  137.             io[efecto[i]][sale]=efecto[i];
  138.             if(i==0) {
  139.                 io[efecto[i]][entra]=0;
  140.             } else {
  141.                 io[efecto[i]][entra]=efecto[i-1];
  142.             }
  143.         }
  144.         /*PASO 2: Balance de Materia*/
  145.         L[efecto[numEfectos-1]]=L[0]*x[0]/x[efecto[numEfectos-1]];
  146.         for(int i=0; i<=numEfectos; i++) {
  147.             V[i]=(L[0]-L[efecto[numEfectos-1]])/numEfectos;
  148.         }
  149.         // Inicializar el flujo msico de lquido en el primer efecto
  150.         L[efecto[0]]=L[0]-V[efecto[0]];
  151.         // Calcular los flujos msicos de lquido en los efectos restantes
  152.         for (int i=1; i<numEfectos; ++i) {
  153.             L[efecto[i]]=L[efecto[i-1]]-V[efecto[i]];
  154.         }
  155.         for(int i=0; i<numEfectos; i++) {
  156.             x[efecto[i]]=L[0]*x[0]/L[efecto[i]];
  157.         }
  158.         Tsat[numEfectos]=T_sat(P[numEfectos]);
  159.         Tsat[0]=T_sat(P[0]);
  160.         /*Paso 3: Suponer las temperaturas de saturación de cada etapa intermedia*/
  161.         for(int i=1; i<numEfectos; i++) {
  162.             Tsat[i]=Tsat[0]-i*(Tsat[0]-Tsat[numEfectos])/numEfectos;
  163.         }
  164.  
  165.         if (resolver()) {
  166.             resolverConBroyden(1e-16,550);
  167.             escribir();
  168.         }
  169.         break;
  170.     }
  171.     default: {
  172.         do {
  173.             cout<<"Ingrese el n\243mero de efectos (2-9): ";
  174.             cin>>numEfectos;
  175.             if(numEfectos<2||numEfectos>9) {
  176.                 cout<<"ERROR: Ingrese un valor entre 2 y 9."<<'\n';
  177.             }
  178.         } while(numEfectos<2||numEfectos>9);
  179.         do {
  180.             cout<<"Ingrese el orden de los efectos (por ejemplo 312, 132, 123 para 3 efectos): ";
  181.             cin>>opcion;
  182.         } while(!orden_efectos(opcion));
  183.         generar_datos_aleatorios();
  184.         break;
  185.     }
  186.     system("PAUSE");
  187.     return 0;
  188.     }
  189. }
  190. bool resolver(void) {
  191.     double suma;
  192.     unsigned short int contador,iteracion=0;
  193.     do {
  194.         do {
  195.             contador=0;
  196.             for(int i=0; i<=numEfectos; i++) {
  197.                 Licor[i]=L[i];
  198.             }
  199.             for(int i=0; i<numEfectos; i++) {
  200.                 x[efecto[i]]=L[0]*x[0]/L[efecto[i]];
  201.             }
  202.             if(iteracion==0) {
  203.                 for(int i=0; i<numEfectos; i++) {
  204.                     if(i==0) {
  205.                         T[1]=Tsat[0]-deltaT[1];
  206.                     } else {
  207.                         T[i+1]=T[i]-epe[i-1]-deltaT[i+1];
  208.                     }
  209.                 }
  210.                 for(int i=1; i<numEfectos; i++) {
  211.                     Tsat[i]=T[i]-epe[i-1];
  212.                 }
  213.             }
  214.             for(int i=0; i<numEfectos; i++) {
  215.                 epe[i]=EPE(x[i+1],Tsat[i+1]);
  216.             }
  217.             if(iteracion==0) {
  218.                 deltaT[0]=0;
  219.                 for(int i=0; i<numEfectos; i++) {
  220.                     deltaT[0]=deltaT[0]+epe[i];
  221.                 }
  222.                 deltaT[0]=Tsat[0]-Tsat[numEfectos]-deltaT[0];
  223.                 suma=0;
  224.                 for(int i=0; i<numEfectos; i++) {
  225.                     suma=suma+1/U[i];
  226.                 }
  227.                 for(int i=1; i<=numEfectos; i++) {
  228.                     deltaT[i]=deltaT[0]*(1/U[i-1])/suma;
  229.                 }
  230.                 deltaT[efecto[0]]=deltaT[efecto[0]]+numEfectos;
  231.                 for(int i=2; i<=numEfectos; i++) {
  232.                     deltaT[i]=deltaT[i]-1;
  233.                 }
  234.             }
  235.             for(int i=0; i<numEfectos; i++) {
  236.                 if(i==0) {
  237.                     T[1]=Tsat[0]-deltaT[1];
  238.                 } else {
  239.                     T[i+1]=T[i]-epe[i-1]-deltaT[i+1];
  240.                 }
  241.             }
  242.             for(int i=1; i<numEfectos; i++) {
  243.                 Tsat[i]=T[i]-epe[i-1];
  244.             }
  245.             for(int i=0; i<=numEfectos; i++) {
  246.                 if(i<numEfectos) {
  247.                     H[i]=Hg(Tsat[i+1])+CP(Tsat[i+1])*epe[i];
  248.                 }
  249.                 hx[i]=Hx(x[i],T[i]);
  250.                 if(i==0) {
  251.                     hvap[i]=Hvap(Tsat[i]);
  252.                 } else {
  253.                     hvap[i]=Hvap(Tsat[i])+CP(Tsat[i])*epe[i-1];
  254.                 }
  255.             }
  256.             calcularMatrices();
  257.             /*cout<<"Matriz M:"<<'\n';
  258.             for(int i=0;i<numEfectos;i++) {
  259.                 for(int j=0;j<numEfectos;j++) {
  260.                     cout<<setw(14)<<setprecision(10)<<M[i][j]<<" ";
  261.                 }
  262.                 cout<<'\n';
  263.             }
  264.             cout<<"N:"<<'\n';
  265.             for(int i=0;i<numEfectos;i++) {
  266.                 cout<<setw(14)<<setprecision(10)<<N[i][0]<<'\n';
  267.             }
  268.             cout<<"V[0]="<<V[0]<<'\n';
  269.             cout<<"Iteracion: "<<iteracion<<'\n';
  270.  
  271.  
  272.             Método de Cramer:
  273.             for(int k=0;k<numEfectos;k++){
  274.                 for(int i=0;i<numEfectos;i++) {
  275.                     for(int j=0; j<numEfectos; j++) {
  276.                         m[i][j]=M[i][j];
  277.                     }
  278.                 }
  279.                 for(int i=0; i<=9; i++) {
  280.                     m[i][k]=N[i][0];
  281.                 }
  282.                 if(k==0) {
  283.                     V[0]=determinante(m,numEfectos)/determinante(M,numEfectos);
  284.                 } else {
  285.                     L[incognita[k-1]]=determinante(m,numEfectos)/determinante(M,numEfectos);
  286.                 }
  287.             }*/
  288.  
  289.  
  290.  
  291.  
  292.             /*Aquí lo resuelvo con Eliminación Gaussiana - Reemplazo de Cramer*/
  293. // Primero, copiamos la matriz M y vector N para no modificar los originales
  294.  
  295.  
  296.             std::vector<std::vector<double>> M_vec(numEfectos, std::vector<double>(numEfectos));
  297.             std::vector<double> N_vec(numEfectos);
  298.  
  299.             for(int i=0; i<numEfectos; i++) {
  300.                 N_vec[i] = N[i][0];
  301.                 for(int j=0; j<numEfectos; j++) {
  302.                     M_vec[i][j] = M[i][j];
  303.                 }
  304.             }
  305.  
  306.             // 2. Resolver sistema
  307.             std::vector<double> soluciones = resolverSistemaGauss(M_vec, N_vec);
  308.  
  309.             // 3. Asignar resultados (esto SÍ queda aquí)
  310.             for(int k=0; k<numEfectos; k++) {
  311.                 if(k==0) {
  312.                     V[0]=soluciones[k];
  313.                 } else {
  314.                     L[incognita[k-1]] = soluciones[k];
  315.                 }
  316.             }
  317.  
  318.             for(int i=0; i<numEfectos; i++) {
  319.                 BalanceMateria[efecto[i]]=L[io[efecto[i]][entra]]-V[io[efecto[i]][sale]]-L[io[efecto[i]][sale]];
  320.             }
  321.  
  322.  
  323.  
  324.             for(int i=0; i<=numEfectos; i++) {
  325.                 if(abs(L[i]-Licor[i])>1) {
  326.                     contador++;
  327.                 }
  328.             }
  329.             for(int i=0; i<numEfectos; i++) {
  330.                 V[efecto[i]]=L[io[efecto[i]][entra]]-L[io[efecto[i]][sale]];
  331.             }
  332.         } while(contador>0);
  333.         contador=0;
  334.         for(int i=1; i<=numEfectos; i++) {
  335.             A[i]=V[i-1]*hvap[i-1]/(U[i-1]*deltaT[i]);
  336.             Q[i-1]=A[i]*U[i-1]*deltaT[i];
  337.         }
  338.         suma=0;
  339.         for(int i=1; i<=numEfectos; i++) {
  340.             suma=suma+A[i]/numEfectos;
  341.         }
  342.         A[0]=suma;
  343.         for(int i=1; i<=numEfectos; i++) {
  344.             deltaT[i]=deltaT[i]*A[i]/A[0];
  345.         }
  346.         deltaT[0]=0;
  347.         for(int i=1; i<=numEfectos; i++) {
  348.             deltaT[0]=deltaT[0]+deltaT[i];
  349.         }
  350.         deltaT0=0;
  351.         for(int i=0; i<numEfectos; i++) {
  352.             deltaT0=deltaT0+epe[i];
  353.         }
  354.         deltaT0=Tsat[0]-Tsat[numEfectos]-deltaT0;
  355.         iteracion++;
  356.     } while(iteracion<=10);
  357.     deltaT[0]=(deltaT0+deltaT[0])/2;
  358.     suma=0;
  359.     for(int i=1; i<numEfectos; i++) {
  360.         P[i]=P_sat(Tsat[i]);
  361.     }
  362.     economia=0;
  363.     for(int i=1; i<=numEfectos; i++) {
  364.         economia=economia+V[i]/V[0];
  365.     }
  366.     contador=0;
  367.     for(int i=0; i<=numEfectos; i++) {
  368.         if(A[i]<=0) {
  369.             contador++;
  370.         }
  371.         if(L[i]<=0) {
  372.             contador++;
  373.         }
  374.         if(epe[i]<=0 and i!=numEfectos) {
  375.             contador++;
  376.         }
  377.         if(Tsat[i]<=Tsat[i+1] and i!=numEfectos) {
  378.             contador++;
  379.         }
  380.         if(deltaT[i+1]>=deltaT[0] and i!=numEfectos) {
  381.             contador++;
  382.         }
  383.         if(x[i]<=0 and i!=numEfectos) {
  384.             contador++;
  385.         }
  386.         if(deltaT[i]<=0) {
  387.             contador++;
  388.         }
  389.         if(V[i]<=0) {
  390.             contador++;
  391.         }
  392.     }
  393.     if(contador==0) {
  394.         return true;
  395.     } else {
  396.         return false;
  397.     }
  398. }
  399.  
  400. void calcularMatrices() {
  401.     int aver=5;
  402.     for(int i=0; i<=9; i++) {
  403.         for(int j=0; j<=9; j++) {
  404.             M[i][j]=0.0;
  405.         }
  406.     }
  407.     for(int i=0; i<numEfectos; i++) {
  408.         aver++;
  409.         /*Para alimentacin*/if(i==0) {
  410.             if(aver==0) {
  411.                 cout<<"ALIMENTACION"<<'\n';
  412.                 cout<<"Se llena la fila M["<<efecto[i]<<"]"<<'\n';
  413.             }
  414.             /*Caso 1:*/if(efecto[i]==1) {/*Caso trivial: La alimentacin ocurre en el primer efecto*/
  415.                 if(aver==0) {
  416.                     cout<<"CASO 1"<<'\n'<<'\n';
  417.                 }
  418.                 M[efecto[i]-1][0]=hvap[efecto[i]-1];
  419.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  420.                 N[efecto[i]-1][0]=(H[efecto[i]-1]-hx[io[efecto[i]][entra]])*L[io[efecto[i]][entra]];
  421.             }/*Caso 2:*/if(efecto[i]!=1 and io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[numEfectos-1]][sale]) {
  422.                 if(aver==0) {
  423.                     cout<<"CASO 2"<<'\n'<<'\n';
  424.                 }
  425.                 M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]-hx[io[efecto[i]][sale]]+H[efecto[i]-1];
  426.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  427.                 N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[efecto[i]-1]-hx[io[efecto[i]][entra]]);
  428.             }/*Caso 3:*/if(efecto[i]!=1 and io[efecto[i]][sale]!=io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[numEfectos-1]][sale]) {
  429.                 if(aver==0) {
  430.                     cout<<"CASO 3"<<'\n'<<'\n';
  431.                 }
  432.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  433.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  434.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  435.                 N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[efecto[i]-1]-hx[io[efecto[i]][entra]]);
  436.             }/*Caso 4:*/if(efecto[i]!=1 and io[efecto[i]][sale]!=io[efecto[i]-1][entra] and io[efecto[i]-1][sale]==io[efecto[numEfectos-1]][sale]) {
  437.                 if(aver==0) {
  438.                     cout<<"CASO 4"<<'\n'<<'\n';
  439.                 }
  440.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  441.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  442.                 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];
  443.             }/*Caso 5:*/if(numEfectos==2 and efecto[0]==2) {
  444.                 if(aver==0) {
  445.                     cout<<"CASO 5"<<'\n'<<'\n';
  446.                 }
  447.                 M[efecto[i]-1][1]=hvap[1]-hx[io[efecto[i]][sale]]+H[1];
  448.                 N[efecto[i]-1][0]=L[io[efecto[i]][entra]]*(H[1]-hx[io[efecto[i]][entra]])+L[1]*hvap[1];
  449.             }
  450.         } else if(i==numEfectos-1) {
  451.             /*Producto*/if(aver==numEfectos-1) {
  452.                 cout<<"PRODUCTO"<<'\n';
  453.                 cout<<"Se llena la fila M["<<efecto[i]<<"]"<<'\n';
  454.             }
  455.             /*Caso 1: */ if(efecto[i]==1 and numEfectos==2) {
  456.                 if(aver==numEfectos-1) {
  457.                     cout<<"CASO 1"<<'\n'<<'\n';
  458.                 }
  459.                 M[efecto[i]-1][0]=hvap[efecto[i]-1];
  460.                 M[efecto[i]-1][1]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  461.                 N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  462.             }/*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]) {
  463.                 if(aver==numEfectos-1) {
  464.                     cout<<"CASO 2"<<'\n'<<'\n';
  465.                 }
  466.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1]-hvap[efecto[i]-1];
  467.                 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];
  468.             }/*Caso 3: */if(io[efecto[i]-1][entra]==0 and io[efecto[i]-1][sale]!=io[efecto[i]][entra] and numEfectos>2 and efecto[i]>1)  {
  469.                 if(aver==numEfectos-1) {
  470.                     cout<<"CASO 3"<<'\n'<<'\n';
  471.                 }
  472.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  473.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  474.                 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];
  475.             }/*Caso 4: */if(io[efecto[i]-1][entra]!=0 and io[efecto[i]-1][sale]!=io[efecto[i]][entra]) {
  476.                 if(aver==numEfectos-1) {
  477.                     cout<<"CASO 4"<<'\n'<<'\n';
  478.                 }
  479.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  480.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  481.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  482.                 N[efecto[i]-1][0]=L[efecto[numEfectos-1]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  483.             }/*Caso 5: */if(numEfectos>2 and efecto[i]==1) {
  484.                 if(aver==numEfectos-1) {
  485.                     cout<<"CASO 5"<<'\n'<<'\n';
  486.                 }
  487.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  488.                 M[efecto[i]-1][0]=hvap[efecto[i]-1];
  489.                 N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  490.             }/*Caso 6: */if(numEfectos>2 and io[efecto[i]][entra]==io[efecto[i]-1][sale] and io[efecto[i]-1][entra]>0 and efecto[i]!=1) {
  491.                 if(aver==numEfectos-1) {
  492.                     cout<<"CASO 6"<<'\n'<<'\n';
  493.                 }
  494.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-hvap[efecto[i]-1]-H[efecto[i]-1];
  495.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  496.                 N[efecto[i]-1][0]=L[io[efecto[i]][sale]]*(hx[io[efecto[i]][sale]]-H[efecto[i]-1]);
  497.             }
  498.         } else {
  499.             if(aver>0 and aver<numEfectos-1) {
  500.                 cout<<"En medio:"<<'\n';
  501.                 cout<<"Se llena la fila M["<<efecto[i]<<"]"<<'\n';
  502.             }
  503.             /*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[numEfectos-1]][sale] and io[efecto[i]-1][entra]!=io[efecto[i]][sale]) {
  504.                 if(aver>0 and aver<numEfectos-1) {
  505.                     cout<<"Caso 1"<<'\n'<<'\n';
  506.                 }
  507.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  508.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  509.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  510.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  511.                 N[efecto[i]-1][0]=0;
  512.             }/*Caso 2*/if(io[efecto[i]-1][entra]==0 and io[efecto[i]][entra]!=io[efecto[i]-1][sale] and efecto[i]!=1) {
  513.                 if(aver>0 and aver<numEfectos-1) {
  514.                     cout<<"Caso 2"<<'\n'<<'\n';
  515.                 }
  516.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  517.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  518.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  519.                 N[efecto[i]-1][0]=-L[0]*hvap[efecto[i]-1];
  520.             }/*Caso 3*/if(io[efecto[i]-1][entra]==0 and io[efecto[i]][entra]==io[efecto[i]-1][sale]) {
  521.                 if(aver>0 and aver<numEfectos-1) {
  522.                     cout<<"Caso 3"<<'\n'<<'\n';
  523.                 }
  524.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1]-hvap[efecto[i]-1];
  525.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  526.                 N[efecto[i]-1][0]=-L[io[efecto[i]-1][entra]]*hvap[efecto[i]-1];
  527.             }/*Caso 4*/if(io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]!=io[efecto[numEfectos-1]][sale]) {
  528.                 if(aver>0 and aver<numEfectos-1) {
  529.                     cout<<"Caso 4"<<'\n'<<'\n';
  530.                 }
  531.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  532.                 M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]+H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  533.                 M[efecto[i]-1][io[efecto[i]-1][sale]]=-hvap[efecto[i]-1];
  534.                 N[efecto[i]-1][0]=0;
  535.             }/*Caso 5*/if(io[efecto[i]][entra]==io[efecto[i]-1][sale] and io[efecto[i]-1][entra]!=0) {
  536.                 if(aver>0 and aver<numEfectos-1) {
  537.                     cout<<"Caso 5"<<'\n'<<'\n';
  538.                 }
  539.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-hvap[efecto[i]-1]-H[efecto[i]-1];
  540.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  541.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  542.                 N[efecto[i]-1][0]=0;
  543.             }/*Caso 6*/if(io[efecto[i]-1][sale]==io[efecto[numEfectos-1]][sale] and io[efecto[i]][sale]!=io[efecto[i]-1][entra]) {
  544.                 if(aver>0 and aver<numEfectos-1) {
  545.                     cout<<"Caso 6"<<'\n'<<'\n';
  546.                 }
  547.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  548.                 M[efecto[i]-1][io[efecto[i]][sale]]=H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  549.                 M[efecto[i]-1][io[efecto[i]-1][entra]]=hvap[efecto[i]-1];
  550.                 N[efecto[i]-1][0]=L[io[efecto[numEfectos-1]][sale]]*hvap[efecto[i]-1];
  551.             }/*Caso 7*/if(io[efecto[i]][sale]==io[efecto[i]-1][entra] and io[efecto[i]-1][sale]==io[efecto[numEfectos-1]][sale]) {
  552.                 if(aver>0 and aver<numEfectos-1) {
  553.                     cout<<"Caso 7"<<'\n'<<'\n';
  554.                 }
  555.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[efecto[i]-1];
  556.                 M[efecto[i]-1][io[efecto[i]][sale]]=hvap[efecto[i]-1]+H[efecto[i]-1]-hx[io[efecto[i]][sale]];
  557.                 N[efecto[i]-1][0]=L[io[efecto[i]-1][sale]]*hvap[efecto[i]-1];
  558.             }
  559.             /*Caso 8*/if(io[efecto[i]-1][entra]==0 and efecto[i]==1 and numEfectos>2) {
  560.                 if(aver>0 and aver<numEfectos-1) {
  561.                     cout<<"Caso 8"<<'\n'<<'\n';
  562.                 }
  563.                 M[efecto[i]-1][1]=H[0]-hx[1];
  564.                 M[efecto[i]-1][0]=hvap[efecto[i]-1];
  565.                 M[efecto[i]-1][io[efecto[i]][entra]]=hx[io[efecto[i]][entra]]-H[0];
  566.                 N[efecto[i]-1][0]=0;
  567.             }
  568.         }
  569.     }
  570.     if(efecto[numEfectos-1]!=numEfectos and numEfectos>2) {
  571.         for(int columna=efecto[numEfectos-1]; columna<=numEfectos; columna++) {
  572.             for(int fila=0; fila<numEfectos; fila++) {
  573.                 M[fila][columna]=M[fila][columna+1];
  574.             }
  575.         }
  576.     }
  577.  
  578. }
  579.  
  580. double EPE(double x,double T) {
  581.     return (1+0.1419526*x)*T+271.3627*pow(x,2)-9.419608*x-T;
  582. }
  583.  
  584. bool orden_efectos(int n) {
  585.     vector<int> digitos;
  586.     int temp=n;
  587.     while(temp>0) {
  588.         digitos.push_back(temp%10);
  589.         temp/=10;
  590.     }
  591.     if (digitos.size()!=numEfectos) {
  592.         cout<<"Debe ingresar un valor v\240lido."<<'\n';
  593.         cout<<n<<" tiene "<<digitos.size()<<" cifras. Ingrese un orden de "<<numEfectos<<" cifras.\n";
  594.         return false;
  595.     }
  596.     reverse(digitos.begin(),digitos.end());
  597.     vector<int> rango(numEfectos);
  598.     iota(rango.begin(),rango.end(),1);
  599.     sort(digitos.begin(),digitos.end());
  600.     if(digitos!=rango) {
  601.         cout<<"Orden inv\240lido,pruebe otra vez."<<'\n';
  602.         return false;
  603.     }
  604.     temp=n;
  605.     for(int i=0; i<numEfectos; i++) {
  606.         efecto[i]=temp%10;
  607.         temp/=10;
  608.     }
  609.     reverse(efecto,efecto+numEfectos);
  610.     for(int i=0; i<numEfectos-1; i++) {
  611.         incognita[i]=efecto[i];
  612.     }
  613.     sort(incognita,incognita+numEfectos-1);
  614.     return true;
  615. }
  616. void borrar(void) {
  617.     label=0;
  618.     unsigned short int i,j;
  619.     for(i=0; i<=9; i++) {
  620.         for(j=0; j<=9; j++) {
  621.             m[i][j]=0;
  622.         }
  623.     }
  624.     for(i=0; i<=9; i++) {
  625.         H[i]=0;
  626.     }
  627.     for(i=0; i<9; i++) {
  628.         A[i]=0;
  629.     }
  630.     for(i=0; i<9; i++) {
  631.         U[i]=0;
  632.     }
  633.     for(i=0; i<=9; i++) {
  634.         L[i]=0;
  635.     }
  636.     for(i=0; i<=9; i++) {
  637.         T[i]=0;
  638.     }
  639.     for(i=0; i<=9; i++) {
  640.         P[i]=0;
  641.     }
  642.     for(i=0; i<=9; i++) {
  643.         x[i]=0;
  644.     }
  645.     for(i=0; i<=9; i++) {
  646.         hx[i]=0;
  647.     }
  648.     for(i=0; i<=9; i++) {
  649.         Tsat[i]=0;
  650.     }
  651.     for(i=0; i<9; i++) {
  652.         for(j=0; j<=2; j++) {
  653.             io[i][j]=0;
  654.         }
  655.     }
  656.     for(i=0; i<=8; i++) {
  657.         for(j=0; j<=2; j++) {
  658.             N[i][j]=0;
  659.         }
  660.     }
  661.     for(i=0; i<=9; i++) {
  662.         deltaT[i]=0;
  663.     }
  664.     for(i=0; i<=9; i++) {
  665.         V[i]=0;
  666.     }
  667.     for(i=0; i<=9; i++) {
  668.         epe[i]=0;
  669.     }
  670.     for(i=0; i<=9; i++) {
  671.         Licor[i]=0;
  672.     }
  673.     for(i=0; i<9; i++) {
  674.         hvap[i]=0;
  675.     }
  676.     for(i=0; i<9; i++) {
  677.         BalanceMateria[i]=0;
  678.     }
  679. }
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691. size_t encontrarIndiceInterpolacion(const std::vector<double>& valores, double x) {
  692.     if (valores.empty()) return 0;
  693.     if (x <= valores[0]) return 0;
  694.     if (x >= valores.back()) return valores.size() - 2;
  695.  
  696.     size_t low = 0, high = valores.size() - 1;
  697.     while (low + 1 < high) {
  698.         size_t mid = (low + high) / 2;
  699.         if (valores[mid] <= x) {
  700.             low = mid;
  701.         } else {
  702.             high = mid;
  703.         }
  704.     }
  705.     return low;
  706. }
  707.  
  708. /*double Hx(double x,double T) {
  709.     if (x<=0||x>=0.75||T>400||T<40) {
  710.         throw std::logic_error("x o T fuera de rango.");
  711.     }
  712.     unsigned short int Tx=static_cast<unsigned short int>(T/10-4);
  713.     double h[36];
  714.     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);
  715.     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);
  716.     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);
  717.     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);
  718.     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);
  719.     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);
  720.     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);
  721.     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);
  722.     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);
  723.     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);
  724.     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);
  725.     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);
  726.     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);
  727.     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);
  728.     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);
  729.     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);
  730.     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);
  731.     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);
  732.     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);
  733.     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);
  734.     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);
  735.     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);
  736.     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);
  737.     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);
  738.     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);
  739.     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);
  740.     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);
  741.     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);
  742.     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);
  743.     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);
  744.     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);
  745.     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);
  746.     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);
  747.     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);
  748.     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);
  749.     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);
  750.     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);
  751.  
  752.     return ((T/10-4)-(Tx-1))/2*(h[Tx+1]-h[Tx-1])+h[Tx-1];
  753. }*/
  754.  
  755.  
  756. double Hx(double x,double T) {
  757.     if (x<concentraciones.front() || x>concentraciones.back() || T<temperaturas.front() || T>temperaturas.back()) {
  758.         throw std::logic_error("x o T fuera de rango.");
  759.         return 0.0;
  760.     }
  761.     size_t i=0;
  762.     while(i<concentraciones.size()-1 && x>concentraciones[i+1]) {
  763.         i++;
  764.     }
  765.     size_t j=0;
  766.     while(j<temperaturas.size()-1 && T>temperaturas[j+1]) {
  767.         j++;
  768.     }
  769.     double x1=concentraciones[i],x2=concentraciones[i+1];
  770.     double T1=temperaturas[j],T2=temperaturas[j+1];
  771.     double Q11=tabla[i][j];
  772.     double Q12=tabla[i][j+1];
  773.     double Q21=tabla[i+1][j];
  774.     double Q22=tabla[i+1][j+1];
  775.     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));
  776. }
  777.  
  778. double CP(double T) {
  779.     // Aplicar límites
  780.     if (T < 32.018) T = 32.018;
  781.     if (T > 705.44) T = 705.44;
  782.  
  783.     // Casos extremos
  784.     if (T <= temperaturas[0]) return cp_values[0];
  785.     if (T >= temperaturas.back()) return cp_values.back();
  786.  
  787.     // Búsqueda binaria
  788.     size_t idx = encontrarIndiceInterpolacion(temperaturas, T);
  789.  
  790.     double t1 = temperaturas[idx];
  791.     double t2 = temperaturas[idx + 1];
  792.     double cp1 = cp_values[idx];
  793.     double cp2 = cp_values[idx + 1];
  794.  
  795.     return cp1 + (cp2 - cp1) * (T - t1) / (t2 - t1);
  796. }
  797.  
  798.  
  799. double P_sat(double T) {
  800.     // Aplicar límites
  801.     if (T < 32.018) T = 32.018;
  802.     if (T > 705.44) T = 705.44;
  803.  
  804.     if (T <= temperaturas[0]) return presion_vapor[0];
  805.     if (T >= temperaturas.back()) return presion_vapor.back();
  806.  
  807.     size_t idx = encontrarIndiceInterpolacion(temperaturas, T);
  808.  
  809.     double T1 = temperaturas[idx];
  810.     double T2 = temperaturas[idx + 1];
  811.     double P1 = presion_vapor[idx];
  812.     double P2 = presion_vapor[idx + 1];
  813.  
  814.     return P1 + (T - T1) * (P2 - P1) / (T2 - T1);
  815. }
  816.  
  817. double Hg(double T) {
  818.     if (T < 32.018) T = 32.018;
  819.     if (T > 705.44) T = 705.44;
  820.  
  821.     if (T <= temperaturas[0]) return entalpia_vapor_saturado[0];
  822.     if (T >= temperaturas.back()) return entalpia_vapor_saturado.back();
  823.  
  824.     size_t idx = encontrarIndiceInterpolacion(temperaturas, T);
  825.  
  826.     double T1 = temperaturas[idx];
  827.     double T2 = temperaturas[idx + 1];
  828.     double H1 = entalpia_vapor_saturado[idx];
  829.     double H2 = entalpia_vapor_saturado[idx + 1];
  830.  
  831.     return H1 + (T - T1) * (H2 - H1) / (T2 - T1);
  832. }
  833.  
  834. double Hvap(double T) {
  835.     if (T < 32.018) T = 32.018;
  836.     if (T > 705.44) T = 705.44;
  837.  
  838.     if (T <= temperaturas[0]) return entalpia_vaporizacion[0];
  839.     if (T >= temperaturas.back()) return entalpia_vaporizacion.back();
  840.  
  841.     size_t idx = encontrarIndiceInterpolacion(temperaturas, T);
  842.  
  843.     double t1 = temperaturas[idx];
  844.     double t2 = temperaturas[idx + 1];
  845.     double h1 = entalpia_vaporizacion[idx];
  846.     double h2 = entalpia_vaporizacion[idx + 1];
  847.  
  848.     return h1 + (T - t1) * (h2 - h1) / (t2 - t1);
  849. }
  850.  
  851. double T_sat(double P) {
  852.     // Aplicar límites de presión
  853.     if (P < presion_vapor[0]) P = presion_vapor[0];
  854.     if (P > presion_vapor.back()) P = presion_vapor.back();
  855.  
  856.     if (P <= presion_vapor[0]) return temperaturas[0];
  857.     if (P >= presion_vapor.back()) return temperaturas.back();
  858.  
  859.     size_t idx = encontrarIndiceInterpolacion(presion_vapor, P);
  860.  
  861.     double P1 = presion_vapor[idx];
  862.     double P2 = presion_vapor[idx + 1];
  863.     double T1 = temperaturas[idx];
  864.     double T2 = temperaturas[idx + 1];
  865.  
  866.     return T1 + (P - P1) * (T2 - T1) / (P2 - P1);
  867. }
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875. /*double determinante(double b[9][9],unsigned short int n) {
  876.     Eigen::MatrixXd matrix(n,n);
  877.     for (unsigned short int i=0; i<n; ++i) {
  878.         for (unsigned short int j=0; j<n; ++j) {
  879.             matrix(i,j)=b[i][j];
  880.         }
  881.     }
  882.     return matrix.determinant();
  883. }*/
  884.  
  885.  
  886.  
  887. double determinante(double b[9][9],unsigned short int n) {
  888.     if(n==1)return b[0][0];
  889.     if(n==2)return b[0][0]*b[1][1]-b[0][1]*b[1][0];
  890.     if(n==3)return b[0][0]*b[1][1]*b[2][2]+b[0][1]*b[1][2]*b[2][0]+b[0][2]*b[1][0]*b[2][1]-b[0][2]*b[1][1]*b[2][0]-b[0][0]*b[1][2]*b[2][1]-b[0][1]*b[1][0]*b[2][2];
  891.     double a[9][9];
  892.     for(int i=0; i<n; i++) {
  893.         for(int j=0; j<n; j++) {
  894.             a[i][j]=b[i][j];
  895.         }
  896.     }
  897.     double det=1.0;
  898.     const double EPS=1e-12;
  899.     for(int i=0; i<n; i++) {
  900.         int max_row=i;
  901.         double max_val=std::fabs(a[i][i]);
  902.         for(int k=i+1; k<n; k++) {
  903.             double val=std::fabs(a[k][i]);
  904.             if(val>max_val) {
  905.                 max_val=val;
  906.                 max_row=k;
  907.             }
  908.         }
  909.         if(max_val<EPS) {
  910.             return 0.0;
  911.         }
  912.         if(max_row!=i) {
  913.             for(int j=0; j<n; j++) {
  914.                 std::swap(a[i][j],a[max_row][j]);
  915.             }
  916.             det=-det;
  917.         }
  918.         det*=a[i][i];
  919.         for(int k=i+1; k<n; k++) {
  920.             double factor=a[k][i]/a[i][i];
  921.             for(int j=i+1; j<n; j++) {
  922.                 a[k][j]-=factor*a[i][j];
  923.             }
  924.         }
  925.     }
  926.     return det;
  927. }
  928.  
  929.  
  930.  
  931.  
  932.  
  933. void escribir(void) {
  934.     label=0;
  935.     cout<<'\n'<<"*********************************************"<<'\n';
  936.     cout<<"Orden: ";
  937.     for(int i=0; i<numEfectos; i++) {
  938.         cout<<efecto[i];
  939.     }
  940.     cout<<'\n';
  941.     cout<<"Alimentaci\242n [lbm/h]="<<L[0]<<'\n';
  942.     cout<<"Temperatura de alimentaci\242n [\370F]="<<T[0]<<'\n';
  943.     cout<<"Concentraci\242n de entrada (fracci\242n en peso)="<<x[0]<<'\n';
  944.     cout<<"Concentraci\242n de salida (fracci\242n en peso)="<<x[efecto[numEfectos-1]]<<'\n';
  945.     cout<<"Presi\242n del vapor vivo [psia]="<<P[0]<<'\n';
  946.     cout<<"Presi\242n del efecto "<<numEfectos<<" [psia]="<<P[numEfectos]<<'\n';
  947.     cout<<"Coeficientes globales de transferencia de calor [BTU/(h*ft\375*\370F)]"<<'\n';
  948.     for(int i=0; i<numEfectos; i++) {
  949.         cout<<"U["<<i<<"]="<<U[i]<<'\n';
  950.     }
  951.     for(int i=0; i<=numEfectos; i++) {
  952.         cout<<"x["<<i<<"]="<<x[i]<<'\n';
  953.     }
  954.     for(int i=0; i<=numEfectos; i++) {
  955.         cout<<"Tsat["<<i<<"]="<<Tsat[i]<<'\n';
  956.     }
  957.     for(int i=0; i<=numEfectos; i++) {
  958.         cout<<"T["<<i<<"]="<<T[i]<<'\n';
  959.     }
  960.     for(int i=0; i<=numEfectos; i++) {
  961.         cout<<"L["<<i<<"]="<<L[i]<<'\n';
  962.     }
  963.     for(int i=0; i<numEfectos; i++) {
  964.         cout<<"epe["<<i<<"]="<<epe[i]<<'\n';
  965.     }
  966.     for(int i=0; i<=numEfectos; i++) {
  967.         cout<<"A["<<i<<"]="<<A[i]<<'\n';
  968.     }
  969.     cout<<"T total="<<deltaT[0]<<'\n';
  970.     cout<<"T total="<<deltaT0<<'\n';
  971.     cout<<"="<<deltaT0-deltaT[0]<<'\n';
  972.  
  973.  
  974.     for(int i=0; i<=numEfectos; i++) {
  975.         cout<<"deltaT["<<i+1<<"]="<<deltaT[i+1]<<'\n';
  976.     }
  977.     for(int i=0; i<numEfectos; i++) {
  978.         cout<<"Q["<<i<<"]="<<Q[i]<<'\n';
  979.     }
  980.     for(int i=0; i<numEfectos; i++) {
  981.         cout<<"balance de materia ["<<i+1<<"]="<<BalanceMateria[i]<<'\n';
  982.     }
  983.     for(int i=0; i<numEfectos; i++) {
  984.         cout<<"BalanceMateria["<<efecto[i]<<"]=L["<<io[efecto[i]][entra]<<"]-V["<<io[efecto[i]][sale]<<"]-L["<<io[efecto[i]][sale]<<"]"<<endl;
  985.     }
  986.  
  987.  
  988.     for(int i=0; i<numEfectos; i++) {
  989.         cout<<"BalanceMateria["<<efecto[i]<<"]="<<L[io[efecto[i]][entra]]<<"-"<<V[io[efecto[i]][sale]]<<"-"<<L[io[efecto[i]][sale]]<<endl;
  990.     }
  991.  
  992.  
  993.  
  994.     cout<<'\n'<<'\n'<<'\n';
  995.     cout<<"S="<<V[0]<<'\n';
  996.     cout<<"Area media="<<A[0]<<'\n';
  997.     cout<<"Economia="<<economia<<'\n';
  998.     cout<<'\n'<<"*********************************************"<<'\n';
  999.     latex();
  1000. }
  1001. double contar(double n) {
  1002.     return floor(n*100+0.5)/100;
  1003.     //return n;
  1004. }
  1005.  
  1006.  
  1007. std::vector<double> resolverSistemaGauss(const std::vector<std::vector<double>>& M,
  1008.         const std::vector<double>& N) {
  1009.     int n = N.size();
  1010.     std::vector<std::vector<double>> tempM = M;
  1011.     std::vector<double> tempN = N;
  1012.     std::vector<double> soluciones(n);
  1013.  
  1014.     // Tu código Gauss EXACTO como lo tienes, pero:
  1015.     // 1. Recibe M y N por parámetro
  1016.     // 2. Devuelve vector de soluciones
  1017.     // 3. NO toca variables globales
  1018.  
  1019.     // Eliminación Gaussiana con pivoteo parcial
  1020.     for(int i=0; i<n; i++) {
  1021.         // Pivoteo
  1022.         int filaMax = i;
  1023.         double maxVal = fabs(tempM[i][i]);
  1024.         for(int f=i+1; f<n; f++) {
  1025.             if(fabs(tempM[f][i]) > maxVal) {
  1026.                 maxVal = fabs(tempM[f][i]);
  1027.                 filaMax = f;
  1028.             }
  1029.         }
  1030.  
  1031.         if(filaMax != i) {
  1032.             std::swap(tempM[i], tempM[filaMax]);
  1033.             std::swap(tempN[i], tempN[filaMax]);
  1034.         }
  1035.  
  1036.         // Eliminación
  1037.         for(int f=i+1; f<n; f++) {
  1038.             double factor = tempM[f][i] / tempM[i][i];
  1039.             for(int j=i; j<n; j++) {
  1040.                 tempM[f][j] -= factor * tempM[i][j];
  1041.             }
  1042.             tempN[f] -= factor * tempN[i];
  1043.         }
  1044.     }
  1045.  
  1046.     // Sustitución hacia atrás
  1047.     for(int i=n-1; i>=0; i--) {
  1048.         double suma = tempN[i];
  1049.         for(int j=i+1; j<n; j++) {
  1050.             suma -= tempM[i][j] * soluciones[j];
  1051.         }
  1052.         soluciones[i] = suma / tempM[i][i];
  1053.     }
  1054.  
  1055.     return soluciones;  // ← SOLO devuelve soluciones, no asigna a L[] o V[]
  1056. }
  1057.  
  1058. /*funciones auxiliares*/
  1059.  
  1060. bool ingresar_orden_efectos() {
  1061.     cout<<"Ingrese el orden de los efectos (por ejemplo 312, 132, 123 para 3 efectos): ";
  1062.     cin >> opcion;
  1063.     if (!orden_efectos(opcion)) {
  1064.         cout<<"ERROR: el orden ingresado no es v\240lido."<<'\n';
  1065.         return false;
  1066.     }
  1067.     return true;
  1068. }
  1069.  
  1070. bool validar_alimentacion() {
  1071.     cout<<"Ingrese el flujo m\240sico [lb/h]: ";
  1072.     cin >> L[0];
  1073.     if (L[0]<=0) {
  1074.         cout<<"ERROR: El flujo m\240sico debe ser mayor a 0."<<'\n';
  1075.         return false;
  1076.     }
  1077.     return true;
  1078. }
  1079.  
  1080. bool validar_temperatura() {
  1081.     cout<<"Ingrese temperatura de alimentacion [\370F]: ";
  1082.     cin >> T[0];
  1083.     if (T[0]<40 || T[0] > 400) {
  1084.         cout<<"ERROR: La temperatura debe estar entre 40 y 400 Fahrenheit."<<'\n';
  1085.         return false;
  1086.     }
  1087.     return true;
  1088. }
  1089.  
  1090. bool validar_concentraciones() {
  1091.     cout<<"Ingrese concentracion (fraccion en peso): x[0]=";
  1092.     cin >> x[0];
  1093.     cout<<"Ingrese concentracion (fraccion en peso): x["<<efecto[numEfectos-1]<<"]=";
  1094.     cin >> x[efecto[numEfectos-1]];
  1095.  
  1096.     if (x[0]<=0 || x[efecto[numEfectos-1]]<=0 || x[0]>=1 || x[efecto[numEfectos-1]] > 1 || x[0]>=x[efecto[numEfectos-1]]) {
  1097.         cout<<"ERROR: Las concentraciones deben estar entre 0 y 1, y x[0]<x[efecto[numEfectos-1]]."<<'\n';
  1098.         return false;
  1099.     }
  1100.     xN_constante = x[efecto[numEfectos-1]];
  1101.     return true;
  1102. }
  1103.  
  1104. bool validar_presiones() {
  1105.     cout<<"Ingrese presion del vapor vivo [psia]: P[0]=";
  1106.     cin >> P[0];
  1107.     cout<<"Ingrese presion ultimo efecto [psia]: P["<<numEfectos<<"]=";
  1108.     cin >> P[numEfectos];
  1109.  
  1110.     if (P[0]<0.1 || P[numEfectos]<0.1 || P[0] > 3198 || P[numEfectos] > 3198 || P[0] <=P[numEfectos]) {
  1111.         cout<<"ERROR: Las presiones deben ser mayores a 0.1 psia y menores a 3198 psia, y P[0] > P[numEfectos]."<<'\n';
  1112.         return false;
  1113.     }
  1114.     return true;
  1115. }
  1116.  
  1117. bool validar_coeficientes() {
  1118.     cout<<"Ingrese los coeficientes globales de transferencia de calor [BTU/(h*ft*F)]: "<<'\n';
  1119.     for (int i=0; i<numEfectos; i++) {
  1120.         cout<<"U["<<i+1<<"]=";
  1121.         cin>>U[i];
  1122.         if (U[i]<200 || U[i]>1000) {
  1123.             cout<<"ERROR: Los coeficientes deben estar entre 200 y 1000."<<'\n';
  1124.             return false;
  1125.         }
  1126.     }
  1127.     return true;
  1128. }
  1129.  
  1130. void imprimir_datos() {
  1131.     cout<<"\n*********************************************"<<'\n';
  1132.     cout<<"Alimentacion [lbm/h]: "<<L[0]<<'\n';
  1133.     cout<<"Temperatura de alimentacion [F]: "<<T[0]<<'\n';
  1134.     cout<<"Concentracion en peso: "<<x[0]<<'\n';
  1135.     cout<<"Concentracion en peso: "<<x[efecto[numEfectos-1]]<<'\n';
  1136.     cout<<"Presion del vapor vivo [psia]: "<<P[0]<<'\n';
  1137.     cout<<"Presion del efecto "<<numEfectos<<" [psia]: "<<P[numEfectos]<<'\n';
  1138.     cout<<"Coeficientes globales de transferencia de calor [BTU/(h*)]: "<<'\n';
  1139.     for (int i=0; i<numEfectos; i++) {
  1140.         cout<<"U["<<i+1<<"]="<<U[i]<<'\n';
  1141.     }
  1142.     cout<<"*********************************************"<<'\n';
  1143. }
  1144.  
  1145. void generar_datos_aleatorios() {
  1146.     srand(time(0));
  1147.     int intentos=0;
  1148.     bool continuar=true;
  1149.  
  1150.     cout<<"Generacion de datos aleatorios para "<<numEfectos<<" efectos..."<<'\n';
  1151.  
  1152.     do {
  1153.         intentos++;
  1154.         cout<<"Intento "<<intentos<<'\n';
  1155.  
  1156.         // Generar coeficientes de transferencia de calor U[i] entre 450 y 1500
  1157.         for (int i=0; i<numEfectos; i++) {
  1158.             U[i]=400+rand()%(1000-400+1);
  1159.         }
  1160.  
  1161.  
  1162.         L[0]=5000+rand() % (250000-5000+1);// Entre 5,000 y 250,000 lb/h
  1163.  
  1164.         // Generar concentraciones x[0] y x[efecto[numEfectos-1]] (0<x[0]<x[efecto[numEfectos-1]]<1)
  1165.         do {
  1166.             x[0]=(rand() % 50+1) / 100.0;// Entre 0.01 y 0.5
  1167.             x[efecto[numEfectos-1]]=x[0]+(rand() % 50+1) / 100.0;// Entre x[0] y x[0]+0.5
  1168.         } while (x[efecto[numEfectos-1]] >=0.75);
  1169.  
  1170.  
  1171.         T[0]=40+rand()%(400-40+1);
  1172.  
  1173.         // Generar presiones P[0] y P[numEfectos] (0.1<P[numEfectos]<P[0]<3198)
  1174.         double c=(rand()%200)/10.0;// Generar un valor base para las presiones
  1175.         P[numEfectos]=0.1+c+(rand()%50)/10.0;// Entre 0.1 y c+5
  1176.         P[0]=P[numEfectos]+(rand()%3198)/10.0;// Entre P[numEfectos] y 3198
  1177.         /*Analizando las entradas y salidas de cada efecto*/
  1178.         for(int i=0; i<numEfectos; i++) {
  1179.             io[efecto[i]][sale]=efecto[i];
  1180.             if(i==0) {
  1181.                 io[efecto[i]][entra]=0;
  1182.             } else {
  1183.                 io[efecto[i]][entra]=efecto[i-1];
  1184.             }
  1185.         }
  1186.         /*PASO 2: Balance de Materia*/
  1187.         L[efecto[numEfectos-1]]=L[0]*x[0]/x[efecto[numEfectos-1]];
  1188.         for(int i=0; i<=numEfectos; i++) {
  1189.             V[i]=(L[0]-L[efecto[numEfectos-1]])/numEfectos;
  1190.         }
  1191.         // Inicializar el flujo msico de lquido en el primer efecto
  1192.         L[efecto[0]]=L[0]-V[efecto[0]];
  1193.         // Calcular los flujos msicos de lquido en los efectos restantes
  1194.         for (int i=1; i<numEfectos; ++i) {
  1195.             L[efecto[i]]=L[efecto[i-1]]-V[efecto[i]];
  1196.         }
  1197.         for(int i=0; i<numEfectos; i++) {
  1198.             x[efecto[i]]=L[0]*x[0]/L[efecto[i]];
  1199.         }
  1200.         Tsat[numEfectos]=T_sat(P[numEfectos]);
  1201.         Tsat[0]=T_sat(P[0]);
  1202.         /*Paso 3: Suponer las temperaturas de saturación de cada etapa intermedia*/
  1203.         for(int i=1; i<numEfectos; i++) {
  1204.             Tsat[i]=Tsat[0]-i*(Tsat[0]-Tsat[numEfectos])/numEfectos;
  1205.         }
  1206.  
  1207.         if (resolver()) {
  1208.             resolverConBroyden(1e-16,550);
  1209.             escribir();
  1210.             continuar=false;
  1211.         }
  1212.  
  1213.         // Verificar si se alcanzaron 20 intentos
  1214.         if (intentos==20) {
  1215.             int respuesta;
  1216.             cout<<"\250Desea continuar? (1) S\241,(2) No: ";
  1217.             cin>>respuesta;
  1218.             if (respuesta!=1) {
  1219.                 continuar=false;
  1220.             }
  1221.             intentos=0;// Reiniciar intentos
  1222.         }
  1223.     } while (continuar);
  1224.     cout<<"FINALIZADO"<<'\n';
  1225. }
  1226.  
  1227.  
  1228.  
  1229. void latex(void) {
  1230.     setprecision(6);
  1231.     ofstream f;
  1232.     f.open("EvaporadorNaOH.tex",ios::out);
  1233.     if(f.fail()) {
  1234.         cout<<"ERROR AL CREAR EL ARCHIVO"<<'\n';
  1235.         exit(1);
  1236.     }
  1237.     double suma=0;
  1238.     f<<"\134documentclass[addpoints,spanish,12pt,letterpaper]{exam}"<<'\n';
  1239.     f<<"\134usepackage{amsmath}"<<'\n';
  1240.     f<<"\134usepackage{newpxtext,newpxmath}"<<'\n';
  1241.     f<<"\134usepackage[T1]{fontenc}"<<'\n';
  1242.     f<<"\134usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}"<<'\n';
  1243.     f<<"\134usepackage[spanish]{babel}"<<'\n';
  1244.     f<<"\134usepackage{hyperref}"<<'\n';
  1245.     f<<"\134usepackage{multicol}"<<'\n';
  1246.     f<<"\134usepackage[dvipsnames]{xcolor}"<<'\n';
  1247.     f<<"\134spanishdecimal{.}"<<'\n';
  1248.     f<<"\134printanswers"<<'\n';
  1249.     f<<"\134unframedsolutions"<<'\n';
  1250.     f<<"\134usepackage{microtype}"<<'\n';
  1251.     f<<"\134renewcommand{\134solutiontitle}{\134textbf{Solución:}}"<<'\n';
  1252.     f<<"\134usepackage{siunitx}"<<'\n';
  1253.     f<<"\134usepackage[pdftex]{pict2e}"<<'\n';
  1254.     f<<"\134usepackage{wrapfig}"<<'\n';
  1255.     f<<"\134footer{}{\134footnotesize Página \134thepage}{}"<<'\n';
  1256.     f<<"\134sisetup{per-mode=symbol,inter-unit-product=\134ensuremath{{}\134cdot{}}}"<<'\n';
  1257.  
  1258.     f<<"\134usepackage{pgfplots}"<<'\n';
  1259.     f<<"\134pgfplotsset{compat=1.18}"<<'\n';
  1260.     f<<"\134usepackage{tikz}"<<'\n';
  1261.     f<<"\134usepackage{float}"<<'\n';
  1262.  
  1263.     f<<"\134DeclareSIUnit{\134BTU}{\134text{BTU}}"<<'\n';
  1264.     f<<"\134DeclareSIUnit{\134ft}{\134text{ft}}"<<'\n';
  1265.     f<<"\134DeclareSIUnit{\134F}{\134text{\134textdegree}F}"<<'\n';
  1266.     f<<"\134DeclareSIUnit{\134lbporhora}{\134tfrac{\134text{lb}_\134text{m}}{\134text{h}}}"<<'\n';
  1267.     f<<"\134DeclareSIUnit{\134lb}{\134text{lb}_\134text{m}}"<<'\n';
  1268.     f<<"\134DeclareSIUnit{\134U}{\134tfrac{\134text{BTU}}{\134text{h}\134cdot \134text{ft}^2 \134cdot \134si{\134F}}}"<<'\n';
  1269.     f<<"\134DeclareSIUnit{\134BTUporlb}{\134tfrac{\134text{BTU}}{\134text{lb}_\134text{m}}}"<<'\n';
  1270.     f<<"\134DeclareSIUnit{\134BTUporhora}{\134tfrac{\134text{BTU}}{\134text{h}}}"<<'\n';
  1271.     f<<"\134DeclareSIUnit{\134CP}{\134tfrac{\134text{BTU}}{\134text{lb}_\134text{m} \134cdot ^\134circ\134text{F}}}"<<'\n';
  1272.     f<<"\134DeclareSIUnit{\134USI}{\134tfrac{\134si{\134watt}}{\134si{\134square\134meter} \134cdot \134si{\134celsius}}}"<<'\n';
  1273.  
  1274.     f<<"\134begin{document}"<<'\n';
  1275.     f<<"\134begin{questions}"<<'\n';
  1276.     f<<"\134question Un evaporador de ";
  1277.  
  1278.     switch(numEfectos) {
  1279.     case 2:
  1280.         f<<"doble";
  1281.         break;
  1282.     case 3:
  1283.         f<<"triple";
  1284.         break;
  1285.     case 4:
  1286.         f<<"cuádruple";
  1287.         break;
  1288.     case 5:
  1289.         f<<"quíntuple";
  1290.         break;
  1291.     case 6:
  1292.         f<<"séxtuple";
  1293.         break;
  1294.     case 7:
  1295.         f<<"séptuple";
  1296.         break;
  1297.     case 8:
  1298.         f<<"óctuple";
  1299.         break;
  1300.     default:
  1301.         f<<"nónuple";
  1302.         break;
  1303.     }
  1304.     f<<" efecto está concentrando una solución de sosa cáustica del \134SI{"<<x[0]*100<<"}{\134percent} en peso y a \134SI{"<<T[0]<<"}{\134F} (\134SI{"<<contar((T[0]-32)*100/212)<<"}{\134celsius}) hasta el \134SI{"<<x[efecto[numEfectos-1]]*100<<"}{\134percent}. El vapor empleado entra a \134SI{"<<P[0]<<"}{psia} (\134SI{"<<contar(P[0]*101.325/14.696)<<"}{\134kilo\134pascal}). La presión absoluta del último efecto es \134SI{"<<P[numEfectos]<<"}{psia} (\134SI{"<<contar(P[numEfectos]*101.325/14.7)<<"}{\134kilo\134pascal}). La velocidad de alimentación es \134SI{"<<L[0]<<"}{lb_m\134per\134hour} (\134SI{"<<contar(L[0]*453.6/1000)<<"}{\134kilo\134gram\134per\134hour}). Los coeficientes de transferencia de calor son:"<<'\n';
  1305.  
  1306.     f<<"\134begin{align*}"<<'\n';
  1307.     for(int i=0; i<numEfectos; i++) {
  1308.         f<<"U_{"<<i+1<<"}&=\134SI{"<<U[i]<<"}{\134U}=\134SI{"<<contar(U[i]*5.6783/100)*100<<"}{\134USI}";
  1309.         if(i<numEfectos-1) {
  1310.             f<<"\134\134[7pt]"<<'\n';
  1311.         } else {
  1312.             f<<'\n';
  1313.         }
  1314.     }
  1315.     f<<"\134end{align*}"<<'\n';
  1316.  
  1317.     f<<"Todos los efectos tienen la misma área. El orden de los efectos es ";
  1318.     for(int i=0; i<numEfectos; i++) {
  1319.         f<<"\134uppercase\134expandafter{\134romannumeral "<<efecto[i]<<"}";
  1320.         if(i<numEfectos-2) {
  1321.             f<<",\176";
  1322.         } else {
  1323.             if(i==numEfectos-2) {
  1324.                 f<<" y ";
  1325.             }
  1326.         }
  1327.     }
  1328.     f<<". Calcule:"<<'\n';
  1329.     f<<"\134begin{center}"<<'\n';
  1330.     f<<"\134begin{parts}"<<'\n';
  1331.     f<<"\134part Las áreas de los efectos."<<'\n';
  1332.     f<<"\134part Flujo másico del vapor vivo."<<'\n';
  1333.     f<<"\134part La economía."<<'\n';
  1334.     f<<"\134end{parts}"<<'\n';
  1335.     f<<"\134end{center}"<<'\n';
  1336.     f<<"\134end{questions}"<<'\n';
  1337.     f<<"\134begin{solution}"<<'\n'<<'\n';
  1338.  
  1339.  
  1340.     int altura=numEfectos;
  1341.     /*Empieza los dibujos*/
  1342.  
  1343.  
  1344.     f<<"\134setlength{\134unitlength}{0.5cm}"<<'\n';
  1345.     bool ejex[50][50],ejey[50][50];
  1346.     for(int i=0; i<50; i++) {
  1347.         for(int j=0; j<50; j++) {
  1348.             ejex[i][j]=false;
  1349.             ejey[i][j]=false;
  1350.         }
  1351.     }
  1352.     for(int i=0; i<numEfectos; i++) {
  1353.         double coord_x1,coord_x2;
  1354.         if(i!=numEfectos-1) {
  1355.             coord_x1=4*efecto[i]-1;
  1356.             coord_x2=4*efecto[i+1]-2.5;
  1357.         } else {
  1358.             coord_x1=4*efecto[i]-1;
  1359.         }
  1360.         int x1=2*efecto[i]-1;
  1361.         int x2;
  1362.         if(i!=numEfectos-1) {
  1363.             x2=2*efecto[i+1]-2;
  1364.         } else {
  1365.             x2=x1+1;
  1366.         }
  1367.  
  1368.         unsigned short int fila=0,verificar;
  1369.         do {
  1370.             verificar=0;
  1371.             fila++;
  1372.             if(x1<x2) {
  1373.                 for(int k=x1; k<x2; k++) {
  1374.                     if(ejex[fila][k]) {
  1375.                         verificar++;
  1376.                     }
  1377.                 }
  1378.             } else {
  1379.                 for(int k=x2; k<x1; k++) {
  1380.                     if(ejex[fila][k]) {
  1381.                         verificar++;
  1382.                     }
  1383.                 }
  1384.             }
  1385.         } while(verificar>0);
  1386.         bool curva_adelante=false;
  1387.         bool curva_atras=false;
  1388.         for(int k=0; k<fila; k++) {
  1389.             ejey[k][x1]=true;
  1390.             if(ejex[k+1][x1] and ejex[k+1][x1-1]) {
  1391.                 curva_adelante=true;
  1392.             } else {
  1393.                 curva_adelante=false;
  1394.             }
  1395.             if(curva_adelante and curva_atras) {
  1396.                 curva_atras=true;
  1397.             } else if(curva_adelante and curva_atras==false) {
  1398.                 curva_atras=true;
  1399.             } else if(curva_adelante==false and curva_atras) {
  1400.                 curva_atras=false;
  1401.             } else if(curva_adelante==false and curva_atras==false) {
  1402.                 curva_atras=false;
  1403.             }
  1404.             curva_atras=curva_adelante;
  1405.         }
  1406.         if(i<numEfectos-1) {
  1407.             curva_adelante=false;
  1408.             curva_atras=false;
  1409.             if(x2!=0) {
  1410.                 for(int k=0; k<fila; k++) {
  1411.                     ejey[k][x2]=true;
  1412.                     if(ejex[k+1][x2] and ejex[k+1][x2-1]) {
  1413.                         curva_adelante=true;
  1414.                     } else {
  1415.                         curva_adelante=false;
  1416.                     }
  1417.                     if(curva_adelante and curva_atras) {
  1418.                         curva_atras=true;
  1419.                     } else if(curva_adelante and curva_atras==false) {
  1420.  
  1421.                         curva_atras=true;
  1422.                     } else if(curva_adelante==false and curva_atras) {
  1423.                         curva_atras=false;
  1424.                     } else if(curva_adelante==false and curva_atras==false) {
  1425.                         curva_atras=false;
  1426.                     }
  1427.                     curva_atras=curva_adelante;
  1428.                 }
  1429.             }
  1430.         }
  1431.         curva_adelante=false;
  1432.         curva_atras=false;
  1433.         if(i!=numEfectos-1) {
  1434.             if(x1<x2) {
  1435.                 for(int k=x1; k<x2; k++) {
  1436.                     if(k==x1) {
  1437.                         curva_atras=false;
  1438.                     }
  1439.                     ejex[fila][k]=true;
  1440.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1441.                         curva_adelante=true;
  1442.                     } else {
  1443.                         curva_adelante=false;
  1444.                     }
  1445.                     if(k%2==0) {
  1446.                         if(curva_adelante and curva_atras) {
  1447.                             curva_atras=false;
  1448.                         }
  1449.                         if(curva_adelante and curva_atras==false) {
  1450.                             curva_atras=true;
  1451.                         }
  1452.                         if(curva_adelante==false and curva_atras) {
  1453.                             curva_atras=false;
  1454.                         }
  1455.                         if(curva_adelante==false and curva_atras==false) {
  1456.                             curva_atras=false;
  1457.                         }
  1458.                         coord_x1=coord_x1+1.5;
  1459.                     } else {
  1460.                         if(curva_adelante and curva_atras) {
  1461.                             curva_atras=false;
  1462.                         }
  1463.                         if(curva_adelante and curva_atras==false) {
  1464.                             curva_atras=true;
  1465.                         }
  1466.                         if(curva_adelante==false and curva_atras) {
  1467.                             curva_atras=false;
  1468.                         }
  1469.                         if(curva_adelante==false and curva_atras==false) {
  1470.                             curva_atras=false;
  1471.                         }
  1472.                         coord_x1=coord_x1+2.5;
  1473.                     }
  1474.                     curva_atras=curva_adelante;
  1475.                 }
  1476.             } else {
  1477.                 for(int k=x2; k<x1; k++) {
  1478.                     if(k==x2) {
  1479.                         curva_atras=false;
  1480.                     }
  1481.                     ejex[fila][k-1]=true;
  1482.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1483.                         curva_adelante=true;
  1484.                     } else {
  1485.                         curva_adelante=false;
  1486.                     }
  1487.                     if(k%2==0) {
  1488.                         if(curva_adelante and curva_atras) {
  1489.                             curva_atras=false;
  1490.                         } else if(curva_adelante and curva_atras==false) {
  1491.                             curva_atras=true;
  1492.                         } else if(curva_adelante==false and curva_atras) {
  1493.                             curva_atras=false;
  1494.                         } else if(curva_adelante==false and curva_atras==false) {
  1495.                             curva_atras=false;
  1496.                         }
  1497.                         coord_x2=coord_x2+1.5;
  1498.                     } else {
  1499.                         if(curva_adelante and curva_atras) {
  1500.                             curva_atras=false;
  1501.                         } else if(curva_adelante and curva_atras==false) {
  1502.                             curva_atras=true;
  1503.                         } else if(curva_adelante==false and curva_atras) {
  1504.                             curva_atras=false;
  1505.                         } else if(curva_adelante==false and curva_atras==false) {
  1506.                             curva_atras=false;
  1507.                         }
  1508.                         coord_x2=coord_x2+2.5;
  1509.                     }
  1510.                     curva_atras=curva_adelante;
  1511.                 }
  1512.             }
  1513.         }
  1514.     }
  1515.     altura=2;
  1516.     for(int i=0; i<50; i++) {
  1517.         unsigned short int po=0;
  1518.         for(int j=0; j<50; j++) {
  1519.             po=po+ejex[i][j];
  1520.         }
  1521.         if(po>0) {
  1522.             altura++;
  1523.         }
  1524.     }
  1525.     for(int i=0; i<50; i++) {
  1526.         for(int j=0; j<50; j++) {
  1527.             ejex[i][j]=false;
  1528.             ejey[i][j]=false;
  1529.         }
  1530.     }
  1531.     f<<"\134begin{picture}("<<numEfectos*4+2<<","<<5+altura<<")"<<'\n';
  1532.     for(int i=0; i<numEfectos; i++) {
  1533.         /*ENtrada de vapor,S V1 V2 V3... ETC*/
  1534.         if(i==0) {
  1535.             f<<"\134put(0,"<<altura+1<<"){\134vector(1,0){2}}"<<'\n';
  1536.         } else {
  1537.             f<<"\134put("<<i*4+1<<","<<altura+1<<"){\134vector(1,0){1}}"<<'\n';
  1538.         }
  1539.  
  1540.         /*SALIDA DE VAPOR de cada efecto*/
  1541.         f<<"\134put("<<i*4+3<<","<<altura+3<<"){\134line(0,1){1}}"<<'\n';
  1542.         if(i==numEfectos-1) {
  1543.             f<<"\134put("<<i*4+3<<","<<altura+4<<"){\134vector(1,0){2}}"<<'\n';
  1544.         } else {
  1545.             f<<"\134put("<<i*4+3<<","<<altura+4<<"){\134line(1,0){2}}"<<'\n';
  1546.             f<<"\134put("<<i*4+5<<","<<altura+4<<"){\134line(0,-1){3}}"<<'\n';
  1547.             f<<"\134put("<<i*4+5<<","<<altura+1<<"){\134vector(1,0){1}}"<<'\n';
  1548.         }
  1549.         /*Efectos*/
  1550.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(0,1){2}}"<<'\n';
  1551.         f<<"\134put("<<i*4+2<<","<<altura+3<<"){\134line(1,0){2}}"<<'\n';
  1552.         f<<"\134put("<<i*4+4<<","<<altura+3<<"){\134line(0,-1){2}}"<<'\n';
  1553.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(1,-1){1}}"<<'\n';
  1554.         f<<"\134put("<<i*4+3<<","<<altura<<"){\134line(1,1){1}}"<<'\n';
  1555.  
  1556.  
  1557.  
  1558.         f<<"\134put("<<i*4+2<<","<<altura+1<<"){\134line(1,1){0.25}}"<<'\n';
  1559.         f<<"\134put("<<i*4+2.25<<","<<altura+1+0.25<<"){\134line(1,-1){0.25}}"<<'\n';
  1560.         f<<"\134put("<<i*4+2.5<<","<<altura+1<<"){\134line(1,1){0.25}}"<<'\n';
  1561.         f<<"\134put("<<i*4+2.75<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<'\n';
  1562.         f<<"\134put("<<i*4+3<<","<<altura+1<<"){\134line(1,1){0.25}}"<<'\n';
  1563.         f<<"\134put("<<i*4+3.25<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<'\n';
  1564.         f<<"\134put("<<i*4+3.5<<","<<altura+1<<"){\134line(1,1){0.25}}"<<'\n';
  1565.         f<<"\134put("<<i*4+3.75<<","<<altura+1.25<<"){\134line(1,-1){0.25}}"<<'\n';
  1566.         f<<"\134put("<<i*4+4<<","<<altura+1<<"){\134line(1,0){0.5}}"<<'\n';
  1567.         f<<"\134put("<<i*4+4.5<<","<<altura+1<<"){\134vector(0,-1){0.5}}"<<'\n';
  1568.  
  1569.         /*Entrada de los licores*/
  1570.         f<<"\134put("<<i*4+1.5<<","<<altura+2.5<<"){\134vector(1,0){0.5}}"<<'\n';
  1571.         if(i!=efecto[0]-1) {
  1572.             f<<"\134put("<<i*4+1.5<<","<<altura<<"){\134line(0,1){0.8}}"<<'\n';
  1573.             f<<"\134put("<<i*4+1.5<<","<<altura+1<<"){\134oval(0.4,0.4)[l]}"<<'\n';
  1574.             f<<"\134put("<<i*4+1.5<<","<<altura+1.2<<"){\134line(0,1){1.3}}"<<'\n';
  1575.         }
  1576.  
  1577.         /*nombre de los efectos*/
  1578.         f<<"\134put("<<i*4+2.6<<","<<altura+2<<"){{\134footnotesize ("<<i+1<<")}}"<<'\n';
  1579.  
  1580.  
  1581.  
  1582.  
  1583.         /*Los LICORES y el enredo de abajo*/
  1584.         /*ABAJO*/
  1585.         double coord_x1,coord_x2;
  1586.         if(i!=numEfectos-1) {
  1587.             coord_x1=4*efecto[i]-1;
  1588.             coord_x2=4*efecto[i+1]-2.5;
  1589.         } else {
  1590.             coord_x1=4*efecto[i]-1;
  1591.         }
  1592.         int x1=2*efecto[i]-1;
  1593.         int x2;
  1594.         if(i!=numEfectos-1) {
  1595.             x2=2*efecto[i+1]-2;
  1596.         } else {
  1597.             x2=x1+1;
  1598.         }
  1599.  
  1600.         unsigned short int fila=0,verificar;
  1601.         do {
  1602.             verificar=0;
  1603.             fila++;
  1604.             if(x1<x2) {
  1605.                 for(int k=x1; k<x2; k++) {
  1606.                     if(ejex[fila][k]) {
  1607.                         verificar++;
  1608.                     }
  1609.                 }
  1610.             } else {
  1611.                 for(int k=x2; k<x1; k++) {
  1612.                     if(ejex[fila][k]) {
  1613.                         verificar++;
  1614.                     }
  1615.                 }
  1616.             }
  1617.         } while(verificar>0);
  1618.         bool curva_adelante=false;
  1619.         bool curva_atras=false;
  1620.         for(int k=0; k<fila; k++) {
  1621.             ejey[k][x1]=true;
  1622.             if(ejex[k+1][x1] and ejex[k+1][x1-1]) {
  1623.                 curva_adelante=true;
  1624.             } else {
  1625.                 curva_adelante=false;
  1626.             }
  1627.             if(curva_adelante and curva_atras) {
  1628.                 f<<"\134put("<<coord_x1<<","<<altura-k-0.2<<"){\134line(0,-1){0.6}}"<<'\n';
  1629.                 f<<"\134put("<<coord_x1<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<'\n';
  1630.                 curva_atras=true;
  1631.             } else if(curva_adelante and curva_atras==false) {
  1632.                 f<<"\134put("<<coord_x1<<","<<altura-k<<"){\134line(0,-1){0.8}}"<<'\n';
  1633.                 f<<"\134put("<<coord_x1<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<'\n';
  1634.                 curva_atras=true;
  1635.             } else if(curva_adelante==false and curva_atras) {
  1636.                 f<<"\134put("<<coord_x1<<","<<altura-k-0.2<<"){\134line(0,-1){0.8}}"<<'\n';
  1637.                 curva_atras=false;
  1638.             } else if(curva_adelante==false and curva_atras==false) {
  1639.                 f<<"\134put("<<coord_x1<<","<<altura-k<<"){\134line(0,-1){1}}"<<'\n';
  1640.                 curva_atras=false;
  1641.             }
  1642.             curva_atras=curva_adelante;
  1643.         }
  1644.  
  1645.         if(i<numEfectos-1) {
  1646.             curva_adelante=false;
  1647.             curva_atras=false;
  1648.             if(x2!=0) {
  1649.                 for(int k=0; k<fila; k++) {
  1650.                     ejey[k][x2]=true;
  1651.                     if(ejex[k+1][x2] and ejex[k+1][x2-1]) {
  1652.                         curva_adelante=true;
  1653.                     } else {
  1654.                         curva_adelante=false;
  1655.                     }
  1656.                     if(curva_adelante and curva_atras) {
  1657.                         f<<"\134put("<<coord_x2<<","<<altura-k-0.2<<"){\134line(0,-1){0.6}}"<<'\n';
  1658.                         f<<"\134put("<<coord_x2<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<'\n';
  1659.                         curva_atras=true;
  1660.                     } else if(curva_adelante and curva_atras==false) {
  1661.                         f<<"\134put("<<coord_x2<<","<<altura-k<<"){\134line(0,-1){0.8}}"<<'\n';
  1662.                         f<<"\134put("<<coord_x2<<","<<altura-k-1<<"){\134oval(0.4,0.4)[l]}"<<'\n';
  1663.                         curva_atras=true;
  1664.                     } else if(curva_adelante==false and curva_atras) {
  1665.                         f<<"\134put("<<coord_x2<<","<<altura-k-0.2<<"){\134line(0,-1){0.8}}"<<'\n';
  1666.                         curva_atras=false;
  1667.                     } else if(curva_adelante==false and curva_atras==false) {
  1668.                         f<<"\134put("<<coord_x2<<","<<altura-k<<"){\134line(0,-1){1}}"<<'\n';
  1669.                         curva_atras=false;
  1670.                     }
  1671.                     curva_atras=curva_adelante;
  1672.                 }
  1673.             } else {
  1674.                 f<<"\134put("<<coord_x2<<","<<altura<<"){\134line(0,-1){"<<fila<<"}}"<<'\n';
  1675.             }
  1676.         }
  1677.         /*HORIZONTAL*/
  1678.         curva_adelante=false;
  1679.         curva_atras=false;
  1680.         if(i!=numEfectos-1) {
  1681.             if(x1<x2) {
  1682.                 for(int k=x1; k<x2; k++) {
  1683.                     if(k==x1) {
  1684.                         curva_atras=false;
  1685.                     }
  1686.                     ejex[fila][k]=true;
  1687.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1688.                         curva_adelante=true;
  1689.                     } else {
  1690.                         curva_adelante=false;
  1691.                     }
  1692.                     if(k%2==0) {
  1693.                         if(curva_adelante and curva_atras) {
  1694.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){1.1}}"<<'\n';
  1695.                             f<<"\134put("<<coord_x1+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1696.                             curva_atras=false;
  1697.                         }
  1698.                         if(curva_adelante and curva_atras==false) {
  1699.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<'\n';
  1700.                             f<<"\134put("<<coord_x1+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1701.                             curva_atras=true;
  1702.                         }
  1703.                         if(curva_adelante==false and curva_atras) {
  1704.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<'\n';
  1705.                             curva_atras=false;
  1706.                         }
  1707.                         if(curva_adelante==false and curva_atras==false) {
  1708.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){1.5}}"<<'\n';
  1709.                             curva_atras=false;
  1710.                         }
  1711.                         coord_x1=coord_x1+1.5;
  1712.                     } else {
  1713.                         if(curva_adelante and curva_atras) {
  1714.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){2.1}}"<<'\n';
  1715.                             f<<"\134put("<<coord_x1+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1716.                             curva_atras=false;
  1717.                         }
  1718.                         if(curva_adelante and curva_atras==false) {
  1719.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<'\n';
  1720.                             f<<"\134put("<<coord_x1+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1721.                             curva_atras=true;
  1722.                         }
  1723.                         if(curva_adelante==false and curva_atras) {
  1724.                             f<<"\134put("<<coord_x1+0.2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<'\n';
  1725.                             curva_atras=false;
  1726.                         }
  1727.                         if(curva_adelante==false and curva_atras==false) {
  1728.                             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134line(1,0){2.5}}"<<'\n';
  1729.                             curva_atras=false;
  1730.                         }
  1731.                         coord_x1=coord_x1+2.5;
  1732.                     }
  1733.                     curva_atras=curva_adelante;
  1734.                 }
  1735.             } else {
  1736.                 for(int k=x2; k<x1; k++) {
  1737.                     if(k==x2) {
  1738.                         curva_atras=false;
  1739.                     }
  1740.                     ejex[fila][k-1]=true;
  1741.                     if(ejey[fila][k+1] and ejey[fila-1][k+1]) {
  1742.                         curva_adelante=true;
  1743.                     } else {
  1744.                         curva_adelante=false;
  1745.                     }
  1746.                     if(k%2==0) {
  1747.                         if(curva_adelante and curva_atras) {
  1748.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){1.1}}"<<'\n';
  1749.                             f<<"\134put("<<coord_x2+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1750.                             curva_atras=false;
  1751.                         } else if(curva_adelante and curva_atras==false) {
  1752.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<'\n';
  1753.                             f<<"\134put("<<coord_x2+1.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1754.                             curva_atras=true;
  1755.                         } else if(curva_adelante==false and curva_atras) {
  1756.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){1.3}}"<<'\n';
  1757.                             curva_atras=false;
  1758.                         } else if(curva_adelante==false and curva_atras==false) {
  1759.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){1.5}}"<<'\n';
  1760.                             curva_atras=false;
  1761.                         }
  1762.                         coord_x2=coord_x2+1.5;
  1763.                     } else {
  1764.                         if(curva_adelante and curva_atras) {
  1765.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){2.1}}"<<'\n';
  1766.                             f<<"\134put("<<coord_x2+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1767.                             curva_atras=false;
  1768.                         } else if(curva_adelante and curva_atras==false) {
  1769.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<'\n';
  1770.                             f<<"\134put("<<coord_x2+2.5<<","<<altura-fila<<"){\134oval(0.4,0.4)[b]}"<<'\n';
  1771.                             curva_atras=true;
  1772.                         } else if(curva_adelante==false and curva_atras) {
  1773.                             f<<"\134put("<<coord_x2+0.2<<","<<altura-fila<<"){\134line(1,0){2.3}}"<<'\n';
  1774.                             curva_atras=false;
  1775.                         } else if(curva_adelante==false and curva_atras==false) {
  1776.                             f<<"\134put("<<coord_x2<<","<<altura-fila<<"){\134line(1,0){2.5}}"<<'\n';
  1777.                             curva_atras=false;
  1778.                         }
  1779.                         coord_x2=coord_x2+2.5;
  1780.                     }
  1781.                     curva_atras=curva_adelante;
  1782.                 }
  1783.             }
  1784.         } else {
  1785.             f<<"\134put("<<coord_x1<<","<<altura-fila<<"){\134vector(1,0){1}}"<<'\n';
  1786.         }
  1787.     }
  1788.     f<<"\134put(3,0){{\134textit{\134footnotesize Diagrama de flujo para la evaporación de "<<numEfectos<<" efectos de orden $";
  1789.     for(int i=0; i<numEfectos; i++) {
  1790.         f<<efecto[i];
  1791.         if(i<numEfectos-1) {
  1792.             f<<" \134rightarrow ";
  1793.         }
  1794.     }
  1795.     f<<"$.}}}"<<'\n';
  1796.     f<<"\134end{picture}"<<'\n';
  1797.     f<<"\134begin{description}"<<'\n';
  1798.     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ólidos. El producto es $L_{"<<io[efecto[numEfectos-1]][sale]<<"}$, y las incógnitas son ";
  1799.     for(int i=0; i<numEfectos-1; i++) {
  1800.         f<<"\44";
  1801.         f<<"L_{"<<incognita[i]<<"}";
  1802.         f<<"\44";
  1803.         f<<", ";
  1804.     }
  1805.     for(int i=0; i<numEfectos-1; i++) {
  1806.         f<<"\44";
  1807.         f<<"T_{S"<<i+2<<"}";
  1808.         f<<"\44";
  1809.         if(i<numEfectos-3) {
  1810.             f<<",";
  1811.         }
  1812.         if(i==numEfectos-3) {
  1813.             f<<" y ";
  1814.         }
  1815.     }
  1816.     f<<". Para la sosa cáustica el balance queda:"<<'\n';
  1817.     f<<"\134begin{align*}"<<'\n';
  1818.     f<<"F\134cdot x_{F}&=L_{"<<io[efecto[numEfectos-1]][sale]<<"}\134cdot x_{"<<io[efecto[numEfectos-1]][sale]<<"}\134\134"<<'\n';
  1819.     f<<"L_{"<<io[efecto[numEfectos-1]][sale]<<"}&="<<"\134frac{\134left(\134SI{"<<L[0]<<"}{\134lbporhora}\134right)\134left("<<x[0]<<"\134right)}{"<<x[io[efecto[numEfectos-1]][sale]]<<"}\134\134"<<'\n';
  1820.     f<<"L_{"<<io[efecto[numEfectos-1]][sale]<<"}&=\134SI{"<<contar(L[io[efecto[numEfectos-1]][sale]])<<"}{\134lbporhora}"<<'\n';
  1821.     f<<"\134end{align*}"<<'\n';
  1822.     f<<"Entonces se sustituye en la ecuación del balance global:"<<'\n';
  1823.     f<<"\134begin{align*}"<<'\n';
  1824.     f<<"F&=";
  1825.     for(int i=0; i<numEfectos; i++) {
  1826.         f<<"V_{"<<i+1<<"}+";
  1827.     }
  1828.     f<<"L_{"<<io[efecto[numEfectos-1]][sale]<<"}\134\134"<<'\n';
  1829.     f<<"F-L_{"<<io[efecto[numEfectos-1]][sale]<<"}&=";
  1830.     for(int i=0; i<numEfectos; i++) {
  1831.         f<<"V_{"<<i+1<<"}";
  1832.         if(i<numEfectos-1) {
  1833.             f<<"+";
  1834.         } else {
  1835.             f<<'\n';
  1836.         }
  1837.     }
  1838.     f<<"\134\134"<<'\n';
  1839.     f<<"\134SI{"<<L[0]<<"}{\134lbporhora}-\134SI{"<<L[io[efecto[numEfectos-1]][sale]]<<"}{\134lbporhora}&=";
  1840.     for(int i=0; i<numEfectos; i++) {
  1841.         f<<"V_{"<<i+1<<"}";
  1842.         if(i<numEfectos-1) {
  1843.             f<<"+";
  1844.         } else {
  1845.             f<<'\n';
  1846.         }
  1847.     }
  1848.     f<<"\134end {align*}"<<'\n';
  1849.     f<<"La cantidad total vaporizada son las corrientes "<<'\n';
  1850.     f<<"\134begin{math}"<<'\n';
  1851.     for(int i=0; i<numEfectos; i++) {
  1852.         f<<"V_{"<<i+1<<"}";
  1853.         suma=suma+V[i+1];
  1854.         if(i<numEfectos-1) {
  1855.             f<<"+";
  1856.         } else {
  1857.             f<<"=\134SI{"<<suma<<"}{\134lbporhora}."<<'\n';
  1858.         }
  1859.     }
  1860.     f<<"\134end{math}"<<'\n';
  1861.  
  1862.     f<<"Supondré las concentraciones "<<'\n';
  1863.     for(int i=0; i<numEfectos-1; i++) {
  1864.  
  1865.         f<<"$x_{"<<incognita[i]<<"}=\134SI{"<<x[incognita[i]]*100<<"}{\134percent}$"<<'\n';
  1866.  
  1867.         if(i<numEfectos-3) {
  1868.             f<<", ";
  1869.         } else {
  1870.             if(i==numEfectos-3) {
  1871.                 f<<" y ";
  1872.             }
  1873.         }
  1874.  
  1875.     }
  1876.     f<<". De esta forma el balance de sosa cáustica en cada efecto proporciona los valores de la fase líquida:"<<'\n';
  1877.     f<<"\134begin{multicols}{";
  1878.     if(numEfectos>3 and numEfectos<6) {
  1879.         f<<numEfectos-1;
  1880.     } else {
  1881.         f<<2;
  1882.     }
  1883.     f<<"}"<<'\n';
  1884.     for(int i=0; i<numEfectos-1; i++) {
  1885.         f<<"\134begin{center}"<<'\n';
  1886.         f<<"\134emph{Para el efecto "<<incognita[i]<<"}"<<'\n';
  1887.         f<<"\134end{center}"<<'\n';
  1888.         f<<"\134begin{align*}"<<'\n';
  1889.         f<<"F\134cdot x_{F}&=L_{"<<incognita[i]<<"}\134cdot x_{"<<incognita[i]<<"}\134\134"<<'\n';
  1890.         f<<"L_{"<<incognita[i]<<"}&=\134frac{\134left(\134SI{"<<L[0]<<"}{\134lbporhora}\134right)\134cdot\134left("<<x[0]<<"\134right)}{"<<x[incognita[i]]<<"} \134\134"<<'\n';
  1891.         f<<"L_{"<<incognita[i]<<"}&=\134SI{"<<L[incognita[i]]<<"}{\134lbporhora}"<<'\n';
  1892.         f<<"\134end{align*}"<<'\n';
  1893.     }
  1894.     f<<"\134end{multicols}"<<'\n';
  1895.     f<<"Y ahora se procede a calcular las corrientes de vapor, y luego se comprueba que la suma de esas corrientes deben de dar $\134SI{"<<suma<<"}{\134lbporhora}$:"<<'\n';
  1896.     f<<"\134begin{multicols}{2}"<<'\n';
  1897.     f<<"\134noindent";
  1898.     for(int i=0; i<numEfectos; i++) {
  1899.         f<<"\134emph{Para el efecto "<<i+1<<"}"<<'\n';
  1900.         f<<"\134begin{align*}"<<'\n';
  1901.         if(i+1==efecto[0]) {
  1902.             f<<"F&=L_{"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  1903.             f<<"F-L_{"<<io[i+1][sale]<<"}&=V_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  1904.         } else {
  1905.             f<<"L_{"<<io[i+1][entra]<<"}&=L_{"<<io[i+1][sale]<<"}+V_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  1906.             f<<"L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}&=V_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  1907.         }
  1908.         f<<"\134SI{"<<contar(L[io[i+1][entra]])<<"}{\134lbporhora}-\134SI{"<<contar(L[io[i+1][sale]])<<"}{\134lbporhora}&=V_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  1909.         f<<"V_{"<<io[i+1][sale]<<"}&=\134SI{"<<contar(V[io[i+1][sale]])<<"}{\134lbporhora}"<<'\n';
  1910.         f<<"\134end{align*}"<<'\n';
  1911.     }
  1912.     f<<"\134end{multicols}"<<'\n';
  1913.     f<<"\134begin{align*}"<<'\n';
  1914.     for(int i=0; i<numEfectos; i++) {
  1915.         f<<"V_{"<<i+1<<"}";
  1916.         if(i<numEfectos-1) {
  1917.             f<<"+";
  1918.         }
  1919.     }
  1920.     f<<"&=\134SI{"<<suma<<"}{\134lbporhora}\134\134"<<'\n';
  1921.     for(int i=0; i<numEfectos; i++) {
  1922.         f<<"\134SI{"<<V[i+1]<<"}{\134lbporhora}";
  1923.         if(i<numEfectos-1) {
  1924.             f<<"+";
  1925.         }
  1926.     }
  1927.     f<<"&=\134SI{"<<suma<<"}{\134lbporhora}\134\134"<<'\n';
  1928.     f<<"\134SI{"<<suma<<"}{\134lbporhora}&=\134SI{"<<suma<<"}{\134lbporhora}\134\134"<<'\n';
  1929.     f<<"\134end{align*}"<<'\n';
  1930.     f<<"Con esto último se comprueba que las concentraciones supuestas son válidas. Sin embargo, no se sabe si son parte de la solución."<<'\n'<<'\n';
  1931.  
  1932.  
  1933.     f<<"\134item[Paso 2:] Se calcula la temperatura de saturación del último efecto. Se necesita suponer las temperaturas de saturación de los efectos ";
  1934.     for(int i=0; i<numEfectos-1; i++) {
  1935.         f<<i+1;
  1936.         if(i<numEfectos-3) {
  1937.             f<<", ";
  1938.         } else {
  1939.             if(i==numEfectos-3) {
  1940.                 f<<" y ";
  1941.             }
  1942.         }
  1943.     }
  1944.     f<<" ya que se requieren para el cálculo de los EPE's."<<'\n'<<'\n';
  1945.     f<<"La temperatura de saturación del vapor vivo es \134SI{"<<contar(Tsat[0])<<"}{\134F} leyendo las tablas de vapor a $P=\134SI{"<<contar(P[0])<<"}{psia}$."<<'\n'<<'\n';
  1946.     f<<"La temperatura de saturación del efecto "<<numEfectos<<" es \134SI{"<<contar(Tsat[numEfectos])<<"}{\134F} leyendo las tablas de vapor a $P=\134SI{"<<contar(P[numEfectos])<<"}{psia}$."<<'\n'<<'\n';
  1947.     f<<"Las temperaturas de saturación supuestas son:";
  1948.     f<<"\134begin{displaymath}"<<'\n';
  1949.     f<<"\134begin{array}{rcl}"<<'\n';
  1950.     for(int i=1; i<numEfectos; i++) {
  1951.         f<<"T_{S"<<i+1<<"}&=&\134SI{"<<contar(Tsat[i])<<"}{\134F}\134\134"<<'\n';
  1952.     }
  1953.     f<<"\134end{array}"<<'\n';
  1954.     f<<"\134end{displaymath}"<<'\n';
  1955.     f<<'\n'<<'\n';
  1956.     f<<"\134item[Paso 3:] Se calcula los EPE's y los $\134Delta T$ global y de cada efecto:"<<'\n'<<'\n';
  1957.     f<<"Los EPE's se calculan con el diagrama de D\134\42uhring y queda:"<<'\n'<<'\n';
  1958.     suma=0;
  1959.     for(int i=0; i<numEfectos; i++) {
  1960.         suma=suma+contar(epe[i]);
  1961.     }
  1962.     deltaT[0]=contar(Tsat[0])-contar(Tsat[numEfectos])-suma;
  1963.     f<<"\134begin{displaymath}"<<'\n';
  1964.     f<<"\134begin{array}{lllll}"<<'\n';
  1965.     for(int i=0; i<numEfectos; i++) {
  1966.         f<<"\134text{EPE}_{"<<i+1<<"}=\134SI{"<<contar(epe[i])<<"}{\134F}&\134text{Leído a}&\134text{$x_{"<<i+1<<"}=\134SI{"<<contar(x[i+1]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i+1])<<"}{\134F}$}\134\134"<<'\n';
  1967.     }
  1968.     f<<"\134end{array}"<<'\n';
  1969.     f<<"\134end{displaymath}"<<'\n';
  1970.     f<<"\134begin{align*}"<<'\n';
  1971.     f<<"\134Delta T_{\134text{Total}}&=T_{S1}-T_{S4}-\134left(";
  1972.     for(int i=0; i<numEfectos; i++) {
  1973.         f<<"\134text{EPE}_{"<<i+1<<"}";
  1974.         if(i<numEfectos-1) {
  1975.             f<<"+";
  1976.         } else {
  1977.             f<<"\134right)\134\134"<<'\n';
  1978.         }
  1979.     }
  1980.     f<<"\134Delta T_{\134text{Total}}&=\134SI{"<<contar(Tsat[0])<<"}{\134F}-\134SI{"<<contar(Tsat[numEfectos])<<"}{\134F}-\134left(";
  1981.     for(int i=0; i<numEfectos; i++) {
  1982.         f<<"\134SI{"<<contar(epe[i])<<"}{\134F}";
  1983.         if(i<numEfectos-1) {
  1984.             f<<"+";
  1985.         } else {
  1986.             f<<"\134right)\134\134"<<'\n';
  1987.         }
  1988.     }
  1989.     f<<"\134Delta T_{\134text{Total}}&=\134SI{"<<contar(deltaT[0])<<"}{\134F}"<<'\n';
  1990.     f<<"\134end{align*}"<<'\n';
  1991.     f<<"Se obtienen los $\134Delta T$ de cada efecto con el $\134Delta T_{\134text{Total}}$ y la ecuación 8.5-6 del Geankoplis:"<<'\n';
  1992.     for(int i=0; i<numEfectos; i++) {
  1993.         f<<"\134begin{align*}"<<'\n';
  1994.         f<<"\134Delta T_{"<<i+1<<"}&=\134Delta T_{\134text{Total}}\134cdot \134frac{\134frac{1}{U_{"<<i+1<<"}}}{";
  1995.         for(int j=0; j<numEfectos; j++) {
  1996.             f<<"\134frac{1}{U_{"<<j+1<<"}}";
  1997.             if(j<numEfectos-1) {
  1998.                 f<<"+";
  1999.             } else {
  2000.                 f<<"}=";
  2001.             }
  2002.         }
  2003.         f<<"\134SI{"<<contar(deltaT[0])<<"}{\134F} \134cdot \134frac{\134frac{1}{"<<U[i]<<"}}{";
  2004.         for(int j=0; j<numEfectos; j++) {
  2005.             f<<"\134frac{1}{"<<U[j]<<"}";
  2006.             if(j<numEfectos-1) {
  2007.                 f<<"+";
  2008.             } else {
  2009.                 f<<"}=";
  2010.             }
  2011.         }
  2012.         suma=0;
  2013.         for(int j=0; j<numEfectos; j++) {
  2014.             suma=suma+1/U[j];
  2015.         }
  2016.         f<<"\134SI{"<<contar(deltaT[0]*(1/U[i])/suma)<<"}{\134F} \134\134";
  2017.         f<<"\134end{align*}"<<'\n';
  2018.     }
  2019.     f<<"Se aumenta y disminuye proporcionalmente los $\134Delta T$ de cada efecto se obtiene:"<<'\n';
  2020.     f<<"\134begin{align*}"<<'\n';
  2021.     for(int i=0; i<numEfectos; i++) {
  2022.         f<<"\134Delta T_{"<<i+1<<"}&=\134SI{"<<contar(deltaT[0]*(1/U[i])/suma)<<"}{\134F}";
  2023.         if(contar(deltaT[0]*(1/U[i])/suma)-deltaT[i+1]>0) {
  2024.             f<<"-";
  2025.         } else {
  2026.             f<<"+";
  2027.         }
  2028.         f<<"\134SI{"<<contar(abs(contar(deltaT[0]*(1/U[i])/suma)-deltaT[i+1]))<<"}{\134F}=\134SI{"<<contar(deltaT[i+1])<<"}{\134F}";
  2029.         if(i<numEfectos-1) {
  2030.             f<<"\134\134"<<'\n';
  2031.         } else {
  2032.             f<<'\n';
  2033.         }
  2034.     }
  2035.     f<<"\134end{align*}"<<'\n';
  2036.     f<<"Y ahora se recalcula las temperaturas de saturación en cada efecto:"<<'\n'<<'\n';
  2037.     f<<"\134begin{multicols}{2}"<<'\n';
  2038.     f<<"\134noindent";
  2039.     for(int i=0; i<numEfectos; i++) {
  2040.         f<<"\134emph{Efecto "<<i+1<<":}"<<'\n';
  2041.         f<<"\134begin{align*}"<<'\n';
  2042.         if(i==0) {
  2043.             f<<"T_{"<<i+1<<"}&=T_{S"<<i+1<<"}-\134Delta T_{"<<i+1<<"}\134\134"<<'\n';
  2044.             f<<"&=\134SI{"<<contar(Tsat[i])<<"}{\134F}-\134SI{"<<contar(deltaT[i+1])<<"}{\134F}=\134SI{"<<contar(T[i+1])<<"}{\134F}\134\134"<<'\n';
  2045.             f<<"T_{S"<<i+1<<"}&=\134SI{"<<contar(Tsat[i])<<"}{\134F}"<<'\n';
  2046.         } else {
  2047.             f<<"T_{"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}-\134Delta T_{"<<i+1<<"}\134\134"<<'\n';
  2048.             f<<"&=\134SI{"<<contar(T[i])<<"}{\134F}-\134SI{"<<contar(epe[i-1])<<"}{\134F}-\134SI{"<<contar(deltaT[i+1])<<"}{\134F}=\134SI{"<<contar(T[i+1])<<"}{\134F}\134\134"<<'\n';
  2049.             f<<"T_{S"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}\134\134"<<'\n';
  2050.             f<<"&=\134SI{"<<contar(T[i])<<"}{\134F}-\134SI{"<<contar(epe[i-1])<<"}{\134F}=\134SI{"<<contar(Tsat[i])<<"}{\134F}"<<'\n';
  2051.         }
  2052.         f<<"\134end{align*}"<<'\n';
  2053.         f<<"\134newline"<<'\n';
  2054.     }
  2055.     f<<"\134end{multicols}"<<'\n';
  2056.     f<<"Las temperaturas de los "<<numEfectos<<" efectos son las siguiente:"<<'\n';
  2057.     f<<"\134begin{multicols*}{";
  2058.     if(numEfectos==3) {
  2059.         f<<"4";
  2060.     } else {
  2061.         f<<"2";
  2062.     }
  2063.     f<<"}"<<'\n';
  2064.     for(int i=0; i<=numEfectos; i++) {
  2065.         f<<"\134begin{center}"<<'\n';
  2066.         if(i<numEfectos) {
  2067.             f<<"\134emph{Efecto "<<i+1<<":}"<<'\n';
  2068.             f<<"\134end{center}"<<'\n';
  2069.             f<<"\134begin{align*}"<<'\n';
  2070.             f<<"T_{S"<<i+1<<"}&=\134SI{"<<contar(Tsat[i])<<"}{\134F}\134\134"<<'\n';
  2071.             f<<"T_{"<<i+1<<"}&=\134SI{"<<contar(T[i+1])<<"}{\134F}"<<'\n';
  2072.             f<<"\134end{align*}"<<'\n';
  2073.         } else {
  2074.             f<<"\134emph{Condensador:}"<<'\n';
  2075.             f<<"\134end{center}"<<'\n';
  2076.             f<<"\134begin{align*}"<<'\n';
  2077.             f<<"T_{S"<<i+1<<"}&=\134SI{"<<contar(Tsat[i])<<"}{\134F}"<<'\n';
  2078.             f<<"\134end{align*}"<<'\n';
  2079.         }
  2080.     }
  2081.     f<<"\134end{multicols*}"<<'\n';
  2082.     f<<"\134item[Paso 4:] Se realiza un \134emph{balance de energía} en cada efecto. Para eso se calculan las entalpías de cada corriente, tanto de los licores como los vapores:"<<'\n';
  2083.     f<<"\134newline"<<'\n';
  2084.     f<<"\134begin{center}"<<'\n';
  2085.     f<<"\134textsc{\134textbf{Entalpías de los licores:}}"<<'\n';
  2086.     f<<"\134end{center}"<<'\n';
  2087.     f<<"Entalpías de los licores leídos de la página 530 del McCabe (Figura 16.6):"<<'\n';
  2088.     f<<"\134begin{displaymath}"<<'\n';
  2089.     f<<"\134begin{array}{lllllll}"<<'\n';
  2090.     for(int i=0; i<=numEfectos; i++) {
  2091.         if(i==0) {
  2092.             f<<"H_{XF}=\134SI{"<<contar(hx[i])<<"}{\134BTUporlb}&\134text{Alimentación.}&\134text{Leído a}&\134text{$x_{F}=\134SI{"<<contar(x[i]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{F}=\134SI{"<<contar(T[i])<<"}{\134F}$}\134\134[6pt]"<<'\n';
  2093.         } else {
  2094.             f<<"H_{X"<<i<<"}=\134SI{"<<contar(hx[i])<<"}{\134BTUporlb}&\134text{Licor "<<i<<".}&\134text{Leído a}&\134text{$x_{"<<i<<"}=\134SI{"<<contar(x[i]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{"<<i<<"}=\134SI{"<<contar(T[i])<<"}{\134F}$}\134\134[6pt]"<<'\n';
  2095.         }
  2096.     }
  2097.     f<<"\134end{array}"<<'\n';
  2098.     f<<"\134end{displaymath}"<<'\n';
  2099.     f<<"\134newline"<<'\n';
  2100.     f<<"\134begin{center}"<<'\n';
  2101.     f<<"\134textsc{\134textbf{Entalpías de los vapores:}}"<<'\n';
  2102.     f<<"\134end{center}"<<'\n';
  2103.     f<<"Las entalpías de los vapores de agua se toman con respecto a \134SI{32}{\134F} (temperatura triple) agua saturada como estado de referencia. Los $c_p$ y $\134lambda_S$ se calculan a la temperatura de saturación. Los valores son interpolados de la tabla A.2-9 Propiedades del vapor saturado y del agua (tablas de vapor), unidades del Sistema Inglés del libro \134textit{Procesos de transporte y principios de procesos de separación (incluye operaciones unitarias) -- Christie John Geankoplis} Cuarta edición, pág. 973. \134emph{Referencia: J. H. Keenan, F. G. Keyes, P. G. Hill Y J. G. Moore, Steam Tables-English Units. Nueva York: John Wiley \134& Sons, Inc., 1969.} Se obtienen:\134newline"<<'\n';
  2104.     for(int i=0; i<numEfectos; i++) {
  2105.         f<<"\134noindent \134emph{Efecto "<<i+1<<":}"<<'\n';
  2106.         f<<"\134begin{align*}"<<'\n';
  2107.         f<<"H_{"<<i+1<<"}&=h_{g \134left(T_{S"<<i+2<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"}\134\134"<<'\n';
  2108.         f<<"H_{"<<i+1<<"}&=\134SI{"<<contar(Hg(Tsat[i+1]))<<"}{\134BTUporlb}+\134SI{"<<contar(CP(Tsat[i+1]))<<"}{\134CP} \134cdot \134SI{"<<contar(epe[i])<<"}{\134F}=\134SI{"<<contar(H[i])<<"}{\134BTUporlb}"<<'\n';
  2109.         f<<"\134end{align*}"<<'\n';
  2110.         if(i==0) {
  2111.             f<<"\134begin{equation*}"<<'\n';
  2112.             f<<"\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb} \134quad\134text{Leído a\134quad $T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i])<<"}{\134F}$}"<<'\n';
  2113.             f<<"\134end{equation*}"<<'\n';
  2114.         } else {
  2115.             f<<"\134begin{equation*}"<<'\n';
  2116.             f<<"\134lambda_{S"<<i+1<<"}=h_{fg \134left(T_{S"<<i+1<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"} \134quad\134text{Leído a\134quad $T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i])<<"}{\134F}$}"<<'\n';
  2117.             f<<"\134end{equation*}"<<'\n';
  2118.             f<<"\134begin{equation*}"<<'\n';
  2119.             f<<"\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(Hvap(Tsat[i]))<<"}{\134BTUporlb}+\134SI{"<<contar(CP(Tsat[i]))<<"}{\134CP} \134cdot \134SI{"<<contar(epe[i-1])<<"}{\134F}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb}"<<'\n';
  2120.             f<<"\134end{equation*}"<<'\n';
  2121.         }
  2122.         f<<"\134newline"<<'\n';
  2123.     }
  2124.     f<<"\134newline"<<'\n';
  2125.     f<<"\134begin{center}"<<'\n';
  2126.     f<<"\134textsc{\134textbf{Balance de Energía de cada efecto:}}"<<'\n';
  2127.     f<<"\134end{center}"<<'\n';
  2128.     f<<"Se realiza el \134emph{balance de energía} en cada efecto, suponiendo que funcionan de forma \134emph{estacionaria}. Además no hay calor por solvatación"<<'\n';
  2129.     f<<"\134begin{align*}"<<'\n';
  2130.     f<<"\134dot{E}_{\134text{entra}}-\134dot{E}_{\134text{sale}}&=\134Delta \134dot{E}_{\134text{sistema}}=0\134\134"<<'\n';
  2131.     f<<"\134dot{E}_{\134text{entra}}-\134dot{E}_{\134text{sale}}&=0\134\134"<<'\n';
  2132.     f<<"\134dot{E}_{\134text{entra}}&=\134dot{E}_{\134text{sale}}"<<'\n';
  2133.     f<<"\134end{align*}"<<'\n';
  2134.     f<<"\134noindent Esta última ecuación nos servirá para cada efecto.\134newline"<<'\n';
  2135.     for(int i=0; i<numEfectos; i++) {
  2136.         f<<"\134begin{center}"<<'\n';
  2137.         f<<"{\134color{Blue}\134hrule}"<<'\n';
  2138.         f<<"\134textbf{Efecto "<<i+1<<":}"<<'\n';
  2139.         f<<"\134end{center}"<<'\n';
  2140.         f<<"\134begin{multicols}{2}"<<'\n';
  2141.         f<<"\134begin{picture}(10,13)"<<'\n';
  2142.  
  2143.  
  2144.         f<<"\134thicklines"<<'\n';
  2145.  
  2146.  
  2147.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(0,1){6.8}}}"<<'\n';
  2148.         f<<"\134put(3.6,8.4){{\134color{Red}\134line(1,0){4.8}}}"<<'\n';
  2149.         f<<"\134put(8.4,8.4){{\134color{Red}\134line(0,-1){6.8}}}"<<'\n';
  2150.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(1,0){4.8}}}"<<'\n';
  2151.  
  2152.         f<<"\134thinlines"<<'\n';
  2153.  
  2154.         f<<"\134put(0,4){\134vector(1,0){4}}"<<'\n';
  2155.         f<<"\134put(0,7){\134vector(1,0){4}}"<<'\n';
  2156.         f<<"\134put(6,10){\134vector(1,0){4}}"<<'\n';
  2157.         f<<"\134put(6,2){\134vector(0,-1){2}}"<<'\n';
  2158.         f<<"\134put(10,4){\134vector(0,-1){2}}"<<'\n';
  2159.  
  2160.         f<<"\134put(4,4){\134line(0,1){4}}"<<'\n';
  2161.         f<<"\134put(4,8){\134line(1,0){4}}"<<'\n';
  2162.         f<<"\134put(8,8){\134line(0,-1){4}}"<<'\n';
  2163.         f<<"\134put(4,4){\134line(1,-1){2}}"<<'\n';
  2164.         f<<"\134put(6,2){\134line(1,1){2}}"<<'\n';
  2165.         f<<"\134put(6,8){\134line(0,1){2}}"<<'\n';
  2166.         f<<"\134put(8,4){\134line(1,0){2}}"<<'\n';
  2167.  
  2168.         f<<"\134put(4,4){\134line(1,1){0.5}}"<<'\n';
  2169.         f<<"\134put(5,4){\134line(1,1){0.5}}"<<'\n';
  2170.         f<<"\134put(6,4){\134line(1,1){0.5}}"<<'\n';
  2171.         f<<"\134put(7,4){\134line(1,1){0.5}}"<<'\n';
  2172.         f<<"\134put(4.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2173.         f<<"\134put(5.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2174.         f<<"\134put(6.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2175.         f<<"\134put(7.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2176.  
  2177.  
  2178.         f<<"\134put(5.5,6){{("<<i+1<<")}}"<<'\n';
  2179.  
  2180.         if(i+1==efecto[0]) {
  2181.             f<<"\134put(-2,8.3){{\134footnotesize $F=\134SI{"<<L[0]<<"}{\134lbporhora}$}}"<<'\n';
  2182.             f<<"\134put(-2,7.4){{\134footnotesize $H_{XF}=\134SI{"<<contar(hx[0])<<"}{\134BTUporlb}$}}"<<'\n';
  2183.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2184.         } else {
  2185.             f<<"\134put(-2,8.3){{\134footnotesize $L_{"<<io[i+1][entra]<<"}$}}"<<'\n';
  2186.             f<<"\134put(-2,7.4){{\134footnotesize $H_{X"<<io[i+1][entra]<<"}=\134SI{"<<contar(hx[io[i+1][entra]])<<"}{\134BTUporlb}$}}"<<'\n';
  2187.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2188.         }
  2189.         if(i==0) {
  2190.             f<<"\134put(-2,3.2){{\134footnotesize $S$}}"<<'\n';
  2191.         } else if(io[i][entra]==0) {
  2192.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=F-L_{"<<io[i][sale]<<"}$}}"<<'\n';
  2193.         } else {
  2194.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=L_{"<<io[i][entra]<<"}-L_{"<<io[i][sale]<<"}$}}"<<'\n';
  2195.         }
  2196.         f<<"\134put(-2,2.3){{\134footnotesize $\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporhora}$}}"<<'\n';
  2197.  
  2198.  
  2199.         f<<"\134put(6.2,0.8){{\134footnotesize $L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2200.         f<<"\134put(6.2,0){{\134footnotesize $H_{X"<<io[i+1][sale]<<"}=\134SI{"<<contar(hx[io[i+1][sale]])<<"}{\134BTUporlb}$}}"<<'\n';
  2201.         f<<"\134put(6,10.4){{\134footnotesize $H_{"<<io[i+1][sale]<<"}=\134SI{"<<contar(H[io[i+1][sale]-1])<<"}{\134BTUporlb}$}}"<<'\n';
  2202.  
  2203.  
  2204.  
  2205.  
  2206.  
  2207.  
  2208.  
  2209.         f<<"\134end{picture}"<<'\n';
  2210.         f<<"\134newline\134newline"<<'\n';
  2211.  
  2212.  
  2213.         f<<"\134begin{align*}"<<'\n';
  2214.         f<<"\134dot{E}_{\134text{entra}}&=\134dot{E}_{\134text{sale}}\134\134"<<'\n';
  2215.         if(i+1==efecto[0]) {
  2216.             f<<"F \134cdot H_{XF}+";
  2217.         } else {
  2218.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2219.         }
  2220.         if(i==0) {
  2221.             f<<"S \134cdot ";
  2222.         } else {
  2223.             f<<"V_{"<<i<<"} \134cdot ";
  2224.         }
  2225.         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]<<"}"<<'\n';
  2226.         f<<"\134end{align*}"<<'\n';
  2227.         f<<"Como se conoce del \134emph{balance de materia} "<<'\n';
  2228.         if(i>0) {
  2229.             f<<"\134begin{math}"<<'\n';
  2230.             f<<"V_{"<<io[i][sale]<<"}=";
  2231.             if(io[i][entra]==0) {
  2232.                 f<<"F-";
  2233.             } else {
  2234.                 f<<"L_{"<<io[i][entra]<<"}-";
  2235.             }
  2236.             f<<"L_{"<<io[i][sale]<<"}";
  2237.             f<<"\134end{math}"<<'\n';
  2238.             f<<" y ";
  2239.         }
  2240.         f<<"\134begin{math}"<<'\n';
  2241.         if(i+1==efecto[0]) {
  2242.             f<<"V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}"<<'\n';
  2243.         } else {
  2244.             f<<"V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}"<<'\n';
  2245.         }
  2246.         f<<"\134end{math}"<<'\n';
  2247.         if(i==0) {
  2248.             f<<". Se realiza un arreglo algebráico de modo que las incógnitas queden en el lado izquierdo de la igualdad y las constantes en el lado derecho, se sustituyen los valores de las entalpías:\134newline"<<'\n';
  2249.         } else {
  2250.             f<<". Se repite al igual que el efecto 1:\134newline"<<'\n';
  2251.         }
  2252.         f<<"\134end{multicols}"<<'\n';
  2253.  
  2254.  
  2255.         f<<"\134begin{align*}"<<'\n';
  2256.         if(i+1==efecto[0]) {
  2257.             f<<"F \134cdot H_{XF}+";
  2258.         } else {
  2259.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2260.         }
  2261.         if(i==0) {
  2262.             f<<"S \134cdot ";
  2263.         } else {
  2264.             if(i>0) {
  2265.                 if(io[i][entra]==0) {
  2266.                     f<<"\134left(F-";
  2267.                 } else {
  2268.                     f<<"\134left(L_{"<<io[i][entra]<<"}-";
  2269.                 }
  2270.                 f<<"L_{"<<io[i][sale]<<"}\134right) \134cdot";
  2271.             }
  2272.         }
  2273.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2274.         if(i+1==efecto[0]) {
  2275.             f<<"\134left(F-L_{"<<io[i+1][sale]<<"}\134right)";
  2276.         } else {
  2277.             f<<"\134left(L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134right)";
  2278.         }
  2279.         f<<"\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2280.         if(i+1==efecto[0]) {
  2281.             f<<"F \134cdot H_{XF}+";
  2282.         } else {
  2283.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2284.         }
  2285.         if(i==0) {
  2286.             f<<"S \134cdot \134lambda_{S"<<i+1<<"}";
  2287.         } else {
  2288.             if(i>0) {
  2289.                 if(io[i][entra]==0) {
  2290.                     f<<"F \134cdot \134lambda_{S"<<i+1<<"}-";
  2291.                 } else {
  2292.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134lambda_{S"<<i+1<<"}-";
  2293.                 }
  2294.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134lambda_{S"<<i+1<<"}";
  2295.             }
  2296.         }
  2297.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2298.         if(i+1==efecto[0]) {
  2299.             f<<"F\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2300.         } else {
  2301.             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"<<'\n';
  2302.         }
  2303.         if(i+1==efecto[0]) {
  2304.             f<<"F \134cdot \134left("<<contar(hx[0])<<"\134right)+";
  2305.         } else {
  2306.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot \134left(\134num{"<<contar(hx[io[i+1][entra]])<<"}\134right)+";
  2307.         }
  2308.         if(i==0) {
  2309.             f<<"S \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)";
  2310.         } else {
  2311.             if(i>0) {
  2312.                 if(io[i][entra]==0) {
  2313.                     f<<"F \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)-";
  2314.                 } else {
  2315.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)-";
  2316.                 }
  2317.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)";
  2318.             }
  2319.         }
  2320.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot \134left(\134num{"<<contar(hx[io[i+1][sale]])<<"}\134right)+";
  2321.         if(i+1==efecto[0]) {
  2322.             f<<"F\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)-L_{"<<io[i+1][sale]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<'\n';
  2323.         } else {
  2324.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<"-L_{"<<io[i+1][sale]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<'\n';
  2325.         }
  2326.         f<<"\134end{align*}"<<'\n';
  2327.         label++;
  2328.         f<<"\134begin{equation}"<<'\n';
  2329.         f<<"\134label{eq"<<label<<"}"<<'\n';
  2330.         unsigned short int c2,c3;
  2331.         c2=0;
  2332.         for(int j=0; j<numEfectos; j++) {
  2333.             if(M[i][j]!=0) {
  2334.                 c2++;
  2335.             }
  2336.         }
  2337.         c3=c2;
  2338.         for(int j=0; j<numEfectos; j++) {
  2339.             if(M[i][j]!=0 and j!=0) {
  2340.                 if(c3!=c2 and M[i][j]>0) {
  2341.                     f<<"+";
  2342.                 }
  2343.                 f<<"\134num{"<<contar(M[i][j])<<"}L_{"<<incognita[j-1]<<"}";
  2344.                 c2--;
  2345.             }
  2346.             if(i==0 and j==0 and M[i][j]!=0) {
  2347.                 f<<"\134num{"<<contar(M[i][j])<<"}S";
  2348.                 c2--;
  2349.             }
  2350.         }
  2351.         f<<"=\134num{"<<N[i][0]<<"}";
  2352.         if(i<numEfectos-1) {
  2353.             f<<"\134\134"<<'\n';
  2354.         }
  2355.         f<<"\134end{equation}"<<'\n';
  2356.     }
  2357.     f<<"Se resuelven las ecuaciones ";
  2358.     for(int i=0; i<numEfectos; i++) {
  2359.         f<<"\134ref{eq"<<i+1<<"}";
  2360.         if(i<numEfectos-2) {
  2361.             f<<", ";
  2362.         }
  2363.         if(i==numEfectos-2) {
  2364.             f<<" y ";
  2365.         }
  2366.     }
  2367.     f<<" utilizando cualquier método visto en álgebra lineal. Se resolverá con \134emph{Regla de Cramer} para este caso:"<<'\n';
  2368.     f<<"\134begin{displaymath}"<<'\n';
  2369.     f<<"\134left\134{"<<'\n';
  2370.     f<<"\134begin{array}{rcl}"<<'\n';
  2371.     for(int i=0; i<numEfectos; i++) {
  2372.         unsigned short int c2,c3;
  2373.         c2=0;
  2374.         for(int j=0; j<numEfectos; j++) {
  2375.             if(M[i][j]!=0) {
  2376.                 c2++;
  2377.             }
  2378.         }
  2379.         c3=c2;
  2380.         for(int j=0; j<numEfectos; j++) {
  2381.             if(M[i][j]!=0 and j!=0) {
  2382.                 if(c3!=c2 and M[i][j]>0) {
  2383.                     f<<"+";
  2384.                 }
  2385.                 f<<"\134num{"<<contar(M[i][j])<<"}\134textcolor{OliveGreen}{L_{"<<incognita[j-1]<<"}}";
  2386.                 c2--;
  2387.             }
  2388.             if(i==0 and j==0 and M[i][j]!=0) {
  2389.                 f<<"\134num{"<<contar(M[i][j])<<"}\134textcolor{OliveGreen}{S}";
  2390.                 c2--;
  2391.             }
  2392.         }
  2393.         f<<"&=&\134num{"<<N[i][0]<<"}";
  2394.         if(i<numEfectos-1) {
  2395.             f<<"\134\134"<<'\n';
  2396.         }
  2397.     }
  2398.     f<<"\134end{array}"<<'\n';
  2399.     f<<"\134right."<<'\n';
  2400.     f<<"\134end{displaymath}"<<'\n';
  2401.     f<<"\134vspace{0.7cm}"<<'\n';
  2402.     f<<"\134begin{displaymath}"<<'\n';
  2403.     f<<"\134left["<<'\n';
  2404.     f<<"\134begin{matrix}"<<'\n';
  2405.     for(int i=0; i<numEfectos; i++) {
  2406.         for(int j=0; j<numEfectos; j++) {
  2407.             f<<"\134textcolor{black}{\134num{"<<contar(M[i][j])<<"}}";
  2408.             if(j<numEfectos-1) {
  2409.                 f<<"&";
  2410.             } else {
  2411.                 f<<"\134\134"<<'\n';
  2412.             }
  2413.         }
  2414.     }
  2415.     f<<"\134end{matrix}"<<'\n';
  2416.     f<<"\134right]"<<'\n';
  2417.     f<<"\134left["<<'\n';
  2418.     f<<"\134begin{matrix}"<<'\n';
  2419.     for(int i=0; i<numEfectos; i++) {
  2420.         if(i==0) {
  2421.             f<<"\134textcolor{OliveGreen}{S}";
  2422.         } else {
  2423.             f<<"\134textcolor{OliveGreen}{L_{"<<incognita[i-1]<<"}}";
  2424.         }
  2425.         if(i<numEfectos-1) {
  2426.             f<<"\134\134"<<'\n';
  2427.         } else {
  2428.             f<<'\n';
  2429.         }
  2430.     }
  2431.     f<<"\134end{matrix}"<<'\n';
  2432.     f<<"\134right]"<<'\n';
  2433.     f<<"=";
  2434.     f<<"\134left["<<'\n';
  2435.     f<<"\134begin{matrix}"<<'\n';
  2436.     for(int j=0; j<numEfectos; j++) {
  2437.         f<<"\134textcolor{Blue}{\134num{"<<N[j][0]<<"}}";
  2438.         if(j<numEfectos-1) {
  2439.             f<<"\134\134"<<'\n';
  2440.         }
  2441.     }
  2442.     f<<"\134end{matrix}"<<'\n';
  2443.     f<<"\134right]"<<'\n';
  2444.     f<<"\134end{displaymath}"<<'\n';
  2445.  
  2446.  
  2447.     f<<"\134vspace{0.7cm}"<<'\n';
  2448.  
  2449.     for(int k=0; k<numEfectos; k++) {
  2450.         f<<"\134begin{displaymath}"<<'\n';
  2451.         for(int i=0; i<numEfectos; i++) {
  2452.             for(int j=0; j<numEfectos; j++) {
  2453.                 m[i][j]=M[i][j];
  2454.             }
  2455.         }
  2456.         for(int i=0; i<=9; i++) {
  2457.             m[i][k]=N[i][0];
  2458.         }
  2459.         if(k==0) {
  2460.             f<<"S=\134frac{"<<'\n';
  2461.         } else {
  2462.             f<<"L_{"<<incognita[k-1]<<"}=\134frac{"<<'\n';
  2463.         }
  2464.  
  2465.         f<<"\134begin{vmatrix}"<<'\n';
  2466.         for(int fila=0; fila<numEfectos; fila++) {
  2467.             for(int columna=0; columna<numEfectos; columna++) {
  2468.                 if(columna==k) {
  2469.                     f<<"\134textcolor{Blue}{";
  2470.                 } else {
  2471.                     f<<"\134textcolor{black}{";
  2472.                 }
  2473.                 f<<"\134num{"<<contar(m[fila][columna])<<"}}";
  2474.                 if(columna==numEfectos-1) {
  2475.                     f<<"\134\134"<<'\n';
  2476.                 } else {
  2477.                     f<<"&";
  2478.                 }
  2479.             }
  2480.         }
  2481.         f<<"\134end{vmatrix}}{"<<'\n';
  2482.         f<<"\134begin{vmatrix}"<<'\n';
  2483.         for(int fila=0; fila<numEfectos; fila++) {
  2484.             for(int columna=0; columna<numEfectos; columna++) {
  2485.                 f<<"\134textcolor{black}{";
  2486.                 f<<"\134num{"<<contar(M[fila][columna])<<"}}";
  2487.                 if(columna==numEfectos-1) {
  2488.                     f<<"\134\134"<<'\n';
  2489.                 } else {
  2490.                     f<<"&";
  2491.                 }
  2492.             }
  2493.         }
  2494.         f<<"\134end{vmatrix}}="<<'\n';
  2495.         if(numEfectos<6) {
  2496.             f<<"\134frac{\134num{"<<contar(determinante(m,numEfectos))<<"}}{\134num{"<<contar(determinante(M,numEfectos))<<"}}=";
  2497.         }
  2498.         f<<"\134SI{"<<contar(determinante(m,numEfectos)/determinante(M,numEfectos))<<"}{\134lbporhora}"<<'\n';
  2499.         f<<"\134end{displaymath}"<<'\n';
  2500.         if(k<numEfectos-1) {
  2501.             f<<"\134vspace{0.7cm}"<<'\n';
  2502.         }
  2503.     }
  2504.     f<<"Se observa que estos valores son idénticos a los obtenidos con las concentraciones supuestas en el \134emph{Paso 1}. Así que no se necesita iterar. De no ser idénticos se repiten los pasos 1 al 4 hasta que converjan."<<'\n';
  2505.  
  2506.  
  2507.  
  2508.     for(int i=0; i<numEfectos; i++) {
  2509.         f<<"\134begin{align*}"<<'\n';
  2510.         if(i+1==efecto[0]) {
  2511.             f<<"V_{"<<io[i+1][sale]<<"}&=F-L_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2512.         } else {
  2513.             f<<"V_ {"<<io[i+1][sale]<<"}&=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2514.         }
  2515.         f<<"V_{"<<io[i+1][sale]<<"}&=\134SI{"<<contar(L[io[i+1][entra]])<<"}{\134lbporhora}-\134SI{"<<contar(L[io[i+1][sale]])<<"}{\134lbporhora}\134\134"<<'\n';
  2516.         f<<"V_{"<<io[i+1][sale]<<"}&=\134SI{"<<contar(V[io[i+1][sale]])<<"}{\134lbporhora}\134\134"<<'\n';
  2517.         f<<"\134end{align*}"<<'\n';
  2518.     }
  2519.  
  2520.  
  2521.     f<<"\134item[Paso 5:] Con los valores obtenidos en el \134emph{Paso 4} se encuentran los calores transferidos en cada efecto y el área:\134newline"<<'\n';
  2522.     f<<"\134begin{align*}"<<'\n';
  2523.     for(int i=0; i<numEfectos; i++) {
  2524.         f<<"\134dot{Q}_{"<<i+1<<"}&=";
  2525.         if(i==0) {
  2526.             f<<"S";
  2527.         } else {
  2528.             f<<"V_{"<<i<<"}";
  2529.         }
  2530.         f<<"\134cdot \134lambda_{S"<<i+1<<"}=\134left(\134SI{"<<contar(V[i])<<"}{\134lbporhora}\134right)\134left(\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb}\134right)=\134SI{"<<contar(contar(hvap[i])*contar(V[i]))<<"}{\134BTUporhora}\134\134"<<'\n';
  2531.     }
  2532.     suma=0;
  2533.     f<<"\134end{align*}"<<'\n';
  2534.     f<<"\134begin{align*}"<<'\n';
  2535.     for(int i=0; i<numEfectos; i++) {
  2536.         f<<"A_{"<<i+1<<"}&="<<"\134frac{\134dot{Q}_{"<<i+1<<"}}{U_{"<<i+1<<"}\134cdot \134Delta T_{"<<i+1<<"}}=\134frac{\134SI{"<<contar(contar(hvap[i])*contar(V[i]))<<"}{\134BTUporhora}}{\134left(\134SI{"<<U[i]<<"}{\134U}\134right)\134left(\134SI{"<<contar(deltaT[i+1])<<"}{\134F}\134right)}=\134SI{"<<contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]))<<"}{\134square\134ft}\134\134[7pt]"<<'\n';
  2537.         suma=suma+contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]));
  2538.     }
  2539.     f<<"\134end{align*}"<<'\n';
  2540.  
  2541.     f<<"El área promedio $A_m=\134SI{"<<contar(suma/numEfectos)<<"}{\134square\134ft}$. La variación es despreciable y no hace falta otra iteración. Sin embargo, los cálculos se repiten desde el \134emph{Paso 6} para indicar los métodos de cálculos utilizados.\134newline"<<'\n';
  2542.  
  2543.     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}:"<<'\n';
  2544.     deltaT[0]=0;
  2545.     for(int i=0; i<numEfectos; i++) {
  2546.         deltaT[0]=deltaT[0]+deltaT[i];
  2547.     }
  2548.     f<<"\134begin{multicols}{2}"<<'\n';
  2549.     for(int i=0; i<numEfectos; i++) {
  2550.         f<<"\134emph{Efecto "<<i+1<<":}"<<'\n';
  2551.         f<<"\134begin{align*}"<<'\n';
  2552.         f<<"F \134cdot x_{F} &=L_{"<<i+1<<"} \134cdot x_{"<<i+1<<"}\134\134"<<'\n';
  2553.         f<<"x_{"<<i+1<<"}&=\134frac{\134left(\134SI{"<<L[0]<<"}{\134lbporhora}\134right)\134left("<<x[0]<<"\134right)}{\134SI{"<<contar(L[i+1])<<"}{\134lbporhora}}\134\134"<<'\n';
  2554.         f<<"x_{"<<i+1<<"}&="<<contar(x[i+1]*1000)/1000<<'\n';
  2555.         f<<"\134end{align*}"<<'\n';
  2556.     }
  2557.     f<<"\134end{multicols}"<<'\n';
  2558.     f<<"Se ve con toda claridad que las concentraciones obtenidas corresponden a las supuestas en el \134emph{Paso 1}.\134newline\134newline"<<'\n';
  2559.     f<<"\134item[Paso 7:] Con los datos anteriores se calcula las nuevas temperaturas (ahora con la ecuación 8.5-11 del Geankoplis) y los nuevos EPE's.\134newline"<<'\n';
  2560.     f<<"\134begin{align*}"<<'\n';
  2561.     suma=0;
  2562.     for(int i=0; i<numEfectos; i++) {
  2563.         f<<"\134Delta T^\134prime_{"<<i+1<<"}&=\134frac{\134Delta T_{"<<i+1<<"} \134cdot A_{"<<i+1<<"}}{A_m}=\134frac{\134left(\134SI{"<<contar(deltaT[i+1])<<"}{\134F}\134right)\134left(\134SI{"<<contar(A[i+1])<<"}{\134square\134ft} \134right)}{\134SI{"<<contar(A[0])<<"}{\134square\134ft}}=\134SI{"<<contar(contar(deltaT[i+1])*contar(A[i+1])/contar(A[0]))<<"}{\134F}\134\134[7pt]"<<'\n';
  2564.         suma=suma+contar(contar(deltaT[i+1])*contar(A[i+1])/contar(A[0]));
  2565.     }
  2566.  
  2567.  
  2568.     f<<"\134end{align*}"<<'\n';
  2569.  
  2570.     f<<"\134begin{equation*}"<<'\n';
  2571.     f<<"\134Delta T_{\134text{Total}}=";
  2572.     for(int i=0; i<numEfectos; i++) {
  2573.         f<<"\134SI{"<<contar(deltaT[i+1])<<"}{\134F}";
  2574.         if(i<numEfectos-1) {
  2575.             f<<"+";
  2576.         }
  2577.     }
  2578.     f<<"=\134SI{"<<suma<<"}{\134F}"<<'\n';
  2579.     f<<"\134end{equation*}"<<'\n';
  2580.  
  2581.  
  2582.  
  2583.     f<<"Estos valores no varían con los obtenidos en el \134emph{Paso 3}. Ahora se calculan los nuevos EPE's:\134newline"<<'\n';
  2584.     suma=0;
  2585.     for(int i=0; i<numEfectos; i++) {
  2586.         suma=suma+contar(epe[i]);
  2587.     }
  2588.     deltaT[0]=contar(Tsat[0])-contar(Tsat[numEfectos])-suma;
  2589.     f<<"\134begin{displaymath}"<<'\n';
  2590.     f<<"\134begin{array}{lllll}"<<'\n';
  2591.     for(int i=0; i<numEfectos; i++) {
  2592.         f<<"\134text{EPE}_{"<<i+1<<"}=\134SI{"<<contar(epe[i])<<"}{\134F}&\134text{Leído a}&\134text{$x_{"<<i+1<<"}=\134SI{"<<contar(x[i+1]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i+1])<<"}{\134F}$}\134\134"<<'\n';
  2593.     }
  2594.     f<<"\134end{array}"<<'\n';
  2595.     f<<"\134end{displaymath}"<<'\n';
  2596.     f<<"\134begin{align*}"<<'\n';
  2597.     f<<"\134Delta T_{\134text{Total}}&=T_{S1}-T_{S"<<numEfectos+1<<"}-\134left(";
  2598.     for(int i=0; i<numEfectos; i++) {
  2599.         f<<"\134text{EPE}_{"<<i+1<<"}";
  2600.         if(i<numEfectos-1) {
  2601.             f<<"+";
  2602.         } else {
  2603.             f<<"\134right)\134\134"<<'\n';
  2604.         }
  2605.     }
  2606.     f<<"\134Delta T_{\134text{Total}}&=\134SI{"<<contar(Tsat[0])<<"}{\134F}-\134SI{"<<contar(Tsat[numEfectos])<<"}{\134F}-\134left(";
  2607.     for(int i=0; i<numEfectos; i++) {
  2608.         f<<"\134SI{"<<contar(epe[i])<<"}{\134F}";
  2609.         if(i<numEfectos-1) {
  2610.             f<<"+";
  2611.         } else {
  2612.             f<<"\134right)\134\134"<<'\n';
  2613.         }
  2614.     }
  2615.     f<<"\134Delta T_{\134text{Total}}&=\134SI{"<<contar(deltaT[0])<<"}{\134F}"<<'\n';
  2616.     f<<"\134end{align*}"<<'\n';
  2617.     f<<"Este último $\134Delta T_{\134text{Total}}$ es muy cercano al obtenido con la ecuación 8.5-11. Este es un indicio que en el \134emph{Paso 8} terminará la resolución del problema.\134\134"<<'\n';
  2618.     f<<"Ahora se recalcula las temperaturas de saturación en cada efecto:"<<'\n';
  2619.     f<<"\134begin{multicols}{2}"<<'\n';
  2620.     f<<"\134noindent";
  2621.     for(int i=0; i<numEfectos; i++) {
  2622.         f<<"\134emph{Efecto "<<i+1<<":}"<<'\n';
  2623.         f<<"\134begin{align*}"<<'\n';
  2624.         if(i==0) {
  2625.             f<<"T_{"<<i+1<<"}&=T_{S"<<i+1<<"}-\134Delta T^\134prime_{"<<i+1<<"}\134\134"<<'\n';
  2626.             f<<"&=\134SI{"<<contar(Tsat[i])<<"}{\134F}-\134SI{"<<contar(deltaT[i+1])<<"}{\134F}=\134SI{"<<contar(T[i+1])<<"}{\134F}\134\134"<<'\n';
  2627.             f<<"T_{S"<<i+1<<"}&=\134SI{"<<contar(Tsat[i])<<"}{\134F}"<<'\n';
  2628.         } else {
  2629.             f<<"T_{"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}-\134Delta T^\134prime_{"<<i+1<<"}\134\134"<<'\n';
  2630.             f<<"&=\134SI{"<<contar(T[i])<<"}{\134F}-\134SI{"<<contar(epe[i-1])<<"}{\134F}-\134SI{"<<contar(deltaT[i+1])<<"}{\134F}=\134SI{"<<contar(T[i+1])<<"}{\134F}\134\134"<<'\n';
  2631.             f<<"T_{S"<<i+1<<"}&=T_{"<<i<<"}-\134text{EPE}_{"<<i<<"}\134\134"<<'\n';
  2632.             f<<"&=\134SI{"<<contar(T[i])<<"}{\134F}-\134SI{"<<contar(epe[i-1])<<"}{\134F}=\134SI{"<<contar(Tsat[i])<<"}{\134F}"<<'\n';
  2633.         }
  2634.         f<<"\134end{align*}"<<'\n';
  2635.         f<<"\134newline"<<'\n';
  2636.     }
  2637.     f<<"\134end{multicols}"<<'\n';
  2638.  
  2639.  
  2640.     f<<"\134item[Paso 8:] Se sigue con el \134emph{Paso 4} (cálculos de las entalpías y el \134emph{balance de energía} en cada efecto), y con el \134emph{Paso 5} (cálculos de tasas calor y áreas):\134newline"<<'\n';
  2641.  
  2642.  
  2643.     f<<"\134newline"<<'\n';
  2644.     f<<"\134begin{center}"<<'\n';
  2645.     f<<"\134textsc{\134textbf{Entalpías de los licores:}}"<<'\n';
  2646.     f<<"\134end{center}"<<'\n';
  2647.     f<<"Entalpías de los licores leídos de la página 530 del McCabe:"<<'\n';
  2648.     f<<"\134begin{displaymath}"<<'\n';
  2649.     f<<"\134begin{array}{lllllll}"<<'\n';
  2650.     for(int i=0; i<=numEfectos; i++) {
  2651.         if(i==0) {
  2652.             f<<"H_{XF}=\134SI{"<<contar(hx[i])<<"}{\134BTUporlb}&\134text{Alimentación.}&\134text{Leído a}&\134text{$x_{F}=\134SI{"<<contar(x[i]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{F}=\134SI{"<<contar(T[i])<<"}{\134F}$}\134\134[6pt]"<<'\n';
  2653.         } else {
  2654.             f<<"H_{X"<<i<<"}=\134SI{"<<contar(hx[i])<<"}{\134BTUporlb}&\134text{Licor "<<i<<".}&\134text{Leído a}&\134text{$x_{"<<i<<"}=\134SI{"<<contar(x[i]*100)<<"}{\134percent}$}&\134text{y}&\134text{$T_{"<<i<<"}=\134SI{"<<contar(T[i])<<"}{\134F}$}\134\134[6pt]"<<'\n';
  2655.         }
  2656.     }
  2657.     f<<"\134end{array}"<<'\n';
  2658.     f<<"\134end{displaymath}"<<'\n';
  2659.     f<<"\134newline"<<'\n';
  2660.  
  2661. // =============================================================================
  2662. // DIAGRAMA ENTALPÍA-CONCENTRACIÓN para el sistema NaOH-Agua
  2663. // =============================================================================
  2664.     f<<"\134begin{figure}[H]"<<'\n';
  2665.     f<<"\134centering"<<'\n';
  2666.     f<<"\134begin{tikzpicture}"<<'\n';
  2667.     f<<"\134begin{axis}["<<'\n';
  2668.     f<<"    width=0.95\\textwidth,"<<'\n';
  2669.     f<<"    height=0.6\\textwidth,"<<'\n';
  2670.     f<<"    xlabel={Fracci\\'on m\\'asica de NaOH, $x$},"<<'\n';
  2671.     f<<"    ylabel={Entalp\\'ia $H$, \\si{\\BTUporlb}},"<<'\n';
  2672.     f<<"    grid=both,"<<'\n';
  2673.     f<<"    grid style={gray!20, line width=0.1pt},"<<'\n';
  2674.     f<<"    xmin=0,"<<'\n';
  2675.     f<<"    xmax=0.75,"<<'\n';
  2676.     f<<"    ymin=0,"<<'\n';
  2677.     f<<"    ymax=500,"<<'\n';
  2678.     f<<"    xtick={0,0.05,0.10,0.15,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75},"<<'\n';
  2679.     f<<"    ytick={0,50,100,150,200,250,300,350,400,450,500},"<<'\n';
  2680.     f<<"    ticklabel style={font=\\small},"<<'\n';
  2681.     f<<"    xticklabel style={/pgf/number format/fixed},"<<'\n';
  2682.     f<<"    minor x tick num=4,"<<'\n';
  2683.     f<<"    minor y tick num=4,"<<'\n';
  2684.     f<<"    tick align=outside,"<<'\n';
  2685.     f<<"    axis background/.style={fill=white}"<<'\n';
  2686.     f<<"]"<<'\n';
  2687.     f<<'\n';
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.     for(size_t T = 0; T < T_NaOH.size(); T++) {
  2697.         f<<"\\addplot["<<'\n';
  2698.         f<<"color=blue!100,"<<'\n';
  2699.         f<<"        thin,"<<'\n';
  2700.         f<<"        mark=none,"<<'\n';
  2701.         f<<"        smooth"<<'\n';
  2702.         f<<"] coordinates {"<<'\n';
  2703.  
  2704.         // Tomar 1 de cada N puntos
  2705.         size_t paso = 27;  //
  2706.  
  2707.         for(size_t fila = 0; fila < concentraciones.size(); fila += paso) {
  2708.             if(tabla[fila][T] != 0) {
  2709.                 f<<"("<<concentraciones[fila]<<","<<tabla[fila][T]<<")"<<'\n';
  2710.             }
  2711.         }
  2712.  
  2713.         // Asegurar último punto
  2714.         size_t ultima_fila = concentraciones.size() - 1;
  2715.         if(ultima_fila % paso != 0 && tabla[ultima_fila][T] != 0) {
  2716.             f<<"("<<concentraciones[ultima_fila]<<","<<tabla[ultima_fila][T]<<")"<<'\n';
  2717.         }
  2718.  
  2719.         f<<"};"<<'\n';
  2720.         f<<'\n';
  2721.     }
  2722.  
  2723.     f<<"    % Puntos de las corrientes del evaporador"<<'\n';
  2724.     f<<"    \\addplot["<<'\n';
  2725.     f<<"        only marks,"<<'\n';
  2726.     f<<"        mark=*,"<<'\n';
  2727.     f<<"        mark size=1.2pt,"<<'\n';  // Aún más pequeño
  2728.     f<<"        color=black"<<'\n';
  2729.     f<<"    ] coordinates {"<<'\n';
  2730.  
  2731.     for(int i = 0; i <= numEfectos; i++) {
  2732.         f<<"        ("<<x[i]<<","<<hx[i]<<")"<<'\n';
  2733.     }
  2734.  
  2735.     f<<"    };"<<'\n';
  2736.     f<<'\n';
  2737.  
  2738. // Viñetas con fondo blanco para mejor legibilidad
  2739.     f<<"    % Viñetas con fondo blanco"<<'\n';
  2740.     for(int i = 0; i <= numEfectos; i++) {
  2741.         double offset_x = 0.005;  // Pequeño desplazamiento en x
  2742.         double offset_y = 12;    // Pequeño desplazamiento en y (ajusta según escala)
  2743.  
  2744.         if(i == 0) {
  2745.             f<<"    \\node[draw=none, fill=white, inner sep=1pt, font=\\footnotesize, rounded corners=1pt] at ("
  2746.              <<x[i] + offset_x<<","<<hx[i] + offset_y<<") {$H_{XF}$};"<<'\n';
  2747.         } else {
  2748.             f<<"    \\node[draw=none, fill=white, inner sep=1pt, font=\\footnotesize, rounded corners=1pt] at ("
  2749.              <<x[i] + offset_x<<","<<hx[i] + offset_y<<") {$H_{X"<<i<<"}$};"<<'\n';
  2750.         }
  2751.     }
  2752.     f<<'\n';
  2753.  
  2754. // Líneas punteadas más sutiles
  2755.     f<<"    % Líneas punteadas sutiles a los ejes"<<'\n';
  2756.     for(int i = 0; i <= numEfectos; i++) {
  2757.         f<<"    \\draw[dashed, black!100, thin] ("<<x[i]<<","<<hx[i]<<") -- ("<<x[i]<<",0);"<<'\n';
  2758.         f<<"    \\draw[dashed, black!100, thin] ("<<x[i]<<","<<hx[i]<<") -- (0,"<<hx[i]<<");"<<'\n';
  2759.     }
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766.     f<<"\\end{axis}"<<'\n';
  2767.     f<<"\\end{tikzpicture}"<<'\n';
  2768.     f<<"\\caption{Diagrama entalp\\'ia-concentraci\\'on para soluciones acuosas de hidr\\'oxido de sodio.}"<<'\n';
  2769.     f<<"\\label{fig:diagrama_entalpia_naoh}"<<'\n';
  2770.     f<<"\\end{figure}"<<'\n';
  2771.     f<<'\n';
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.     f<<"\134begin{center}"<<'\n';
  2778.     f<<"\134textsc{\134textbf{Entalpías de los vapores:}}"<<'\n';
  2779.     f<<"\134end{center}"<<'\n';
  2780.     f<<"Los nuevos valores son:\134\134"<<'\n';
  2781.     for(int i=0; i<numEfectos; i++) {
  2782.         f<<"\134noindent \134emph{Efecto "<<i+1<<":}"<<'\n';
  2783.         f<<"\134begin{align*}"<<'\n';
  2784.         f<<"H_{"<<i+1<<"}&=h_{g \134left(T_{S"<<i+2<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"}\134\134"<<'\n';
  2785.         f<<"H_{"<<i+1<<"}&=\134SI{"<<contar(Hg(Tsat[i+1]))<<"}{\134BTUporlb}+\134SI{"<<contar(CP(Tsat[i+1]))<<"}{\134CP} \134cdot \134SI{"<<contar(epe[i])<<"}{\134F}=\134SI{"<<contar(H[i])<<"}{\134BTUporlb}"<<'\n';
  2786.         f<<"\134end{align*}"<<'\n';
  2787.         if(i==0) {
  2788.             f<<"\134begin{equation*}"<<'\n';
  2789.             f<<"\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb} \134quad\134text{Leído a\134quad $T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i])<<"}{\134F}$}"<<'\n';
  2790.             f<<"\134end{equation*}"<<'\n';
  2791.         } else {
  2792.             f<<"\134begin{equation*}"<<'\n';
  2793.             f<<"\134lambda_{S"<<i+1<<"}=h_{fg \134left(T_{S"<<i+1<<"}\134right)}+c_p \134cdot \134text{EPE}_{"<<i+1<<"} \134quad\134text{Leído a\134quad $T_{S"<<i+1<<"}=\134SI{"<<contar(Tsat[i])<<"}{\134F}$}"<<'\n';
  2794.             f<<"\134end{equation*}"<<'\n';
  2795.             f<<"\134begin{equation*}"<<'\n';
  2796.             f<<"\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(Hvap(Tsat[i]))<<"}{\134BTUporlb}+\134SI{"<<contar(CP(Tsat[i]))<<"}{\134CP} \134cdot \134SI{"<<contar(epe[i-1])<<"}{\134F}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb}"<<'\n';
  2797.             f<<"\134end{equation*}"<<'\n';
  2798.         }
  2799.         f<<"\134newline"<<'\n';
  2800.     }
  2801.     f<<"\134newline"<<'\n';
  2802.     f<<"\134begin{center}"<<'\n';
  2803.     f<<"\134textsc{\134textbf{Balance de Energía de cada efecto:}}"<<'\n';
  2804.     f<<"\134end{center}"<<'\n';
  2805.     f<<"Se realiza el \134emph{balance de energía} en cada efecto, suponiendo que funcionan de forma \134emph{estacionaria}. Además no hay calor por solvatación"<<'\n';
  2806.     f<<"\134begin{align*}"<<'\n';
  2807.     f<<"\134dot{E}_{\134text{entra}}-\134dot{E}_{\134text{sale}}&=\134Delta \134dot{E}_{\134text{sistema}}=0\134\134"<<'\n';
  2808.     f<<"\134dot{E}_{\134text{entra}}-\134dot{E}_{\134text{sale}}&=0\134\134"<<'\n';
  2809.     f<<"\134dot{E}_{\134text{entra}}&=\134dot{E}_{\134text{sale}}"<<'\n';
  2810.     f<<"\134end{align*}"<<'\n';
  2811.     f<<"\134noindent Esta última ecuación nos servirá para cada efecto.\134newline"<<'\n';
  2812.     for(int i=0; i<numEfectos; i++) {
  2813.         f<<"\134begin{center}"<<'\n';
  2814.         f<<"{\134color{Blue}\134hrule}"<<'\n';
  2815.         f<<"\134textbf{Efecto "<<i+1<<":}"<<'\n';
  2816.         f<<"\134end{center}"<<'\n';
  2817.         f<<"\134begin{multicols}{2}"<<'\n';
  2818.         f<<"\134begin{picture}(10,13)"<<'\n';
  2819.  
  2820.  
  2821.         f<<"\134thicklines"<<'\n';
  2822.  
  2823.  
  2824.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(0,1){6.8}}}"<<'\n';
  2825.         f<<"\134put(3.6,8.4){{\134color{Red}\134line(1,0){4.8}}}"<<'\n';
  2826.         f<<"\134put(8.4,8.4){{\134color{Red}\134line(0,-1){6.8}}}"<<'\n';
  2827.         f<<"\134put(3.6,1.6){{\134color{Red}\134line(1,0){4.8}}}"<<'\n';
  2828.  
  2829.         f<<"\134thinlines"<<'\n';
  2830.  
  2831.         f<<"\134put(0,4){\134vector(1,0){4}}"<<'\n';
  2832.         f<<"\134put(0,7){\134vector(1,0){4}}"<<'\n';
  2833.         f<<"\134put(6,10){\134vector(1,0){4}}"<<'\n';
  2834.         f<<"\134put(6,2){\134vector(0,-1){2}}"<<'\n';
  2835.         f<<"\134put(10,4){\134vector(0,-1){2}}"<<'\n';
  2836.  
  2837.         f<<"\134put(4,4){\134line(0,1){4}}"<<'\n';
  2838.         f<<"\134put(4,8){\134line(1,0){4}}"<<'\n';
  2839.         f<<"\134put(8,8){\134line(0,-1){4}}"<<'\n';
  2840.         f<<"\134put(4,4){\134line(1,-1){2}}"<<'\n';
  2841.         f<<"\134put(6,2){\134line(1,1){2}}"<<'\n';
  2842.         f<<"\134put(6,8){\134line(0,1){2}}"<<'\n';
  2843.         f<<"\134put(8,4){\134line(1,0){2}}"<<'\n';
  2844.  
  2845.         f<<"\134put(4,4){\134line(1,1){0.5}}"<<'\n';
  2846.         f<<"\134put(5,4){\134line(1,1){0.5}}"<<'\n';
  2847.         f<<"\134put(6,4){\134line(1,1){0.5}}"<<'\n';
  2848.         f<<"\134put(7,4){\134line(1,1){0.5}}"<<'\n';
  2849.         f<<"\134put(4.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2850.         f<<"\134put(5.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2851.         f<<"\134put(6.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2852.         f<<"\134put(7.5,4.5){\134line(1,-1){0.5}}"<<'\n';
  2853.  
  2854.  
  2855.         f<<"\134put(5.5,6){{("<<i+1<<")}}"<<'\n';
  2856.  
  2857.         if(i+1==efecto[0]) {
  2858.             f<<"\134put(-2,8.3){{\134footnotesize $F=\134SI{"<<L[0]<<"}{\134lbporhora}$}}"<<'\n';
  2859.             f<<"\134put(-2,7.4){{\134footnotesize $H_{XF}=\134SI{"<<contar(hx[0])<<"}{\134BTUporlb}$}}"<<'\n';
  2860.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2861.         } else {
  2862.             f<<"\134put(-2,8.3){{\134footnotesize $L_{"<<io[i+1][entra]<<"}$}}"<<'\n';
  2863.             f<<"\134put(-2,7.4){{\134footnotesize $H_{X"<<io[i+1][entra]<<"}=\134SI{"<<contar(hx[io[i+1][entra]])<<"}{\134BTUporlb}$}}"<<'\n';
  2864.             f<<"\134put(6,11.4){{\134footnotesize $V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2865.         }
  2866.         if(i==0) {
  2867.             f<<"\134put(-2,3.2){{\134footnotesize $S$}}"<<'\n';
  2868.         } else if(io[i][entra]==0) {
  2869.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=F-L_{"<<io[i][sale]<<"}$}}"<<'\n';
  2870.         } else {
  2871.             f<<"\134put(-2,3.2){{\134footnotesize $V_{"<<io[i][sale]<<"}=L_{"<<io[i][entra]<<"}-L_{"<<io[i][sale]<<"}$}}"<<'\n';
  2872.         }
  2873.         f<<"\134put(-2,2.3){{\134footnotesize $\134lambda_{S"<<i+1<<"}=\134SI{"<<contar(hvap[i])<<"}{\134BTUporhora}$}}"<<'\n';
  2874.  
  2875.  
  2876.         f<<"\134put(6.2,0.8){{\134footnotesize $L_{"<<io[i+1][sale]<<"}$}}"<<'\n';
  2877.         f<<"\134put(6.2,0){{\134footnotesize $H_{X"<<io[i+1][sale]<<"}=\134SI{"<<contar(hx[io[i+1][sale]])<<"}{\134BTUporlb}$}}"<<'\n';
  2878.         f<<"\134put(6,10.4){{\134footnotesize $H_{"<<io[i+1][sale]<<"}=\134SI{"<<contar(H[io[i+1][sale]-1])<<"}{\134BTUporlb}$}}"<<'\n';
  2879.  
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  
  2885.  
  2886.         f<<"\134end{picture}"<<'\n';
  2887.         f<<"\134newline\134newline"<<'\n';
  2888.  
  2889.  
  2890.         f<<"\134begin{align*}"<<'\n';
  2891.         f<<"\134dot{E}_{\134text{entra}}&=\134dot{E}_{\134text{sale}}\134\134"<<'\n';
  2892.         if(i+1==efecto[0]) {
  2893.             f<<"F \134cdot H_{XF}+";
  2894.         } else {
  2895.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2896.         }
  2897.         if(i==0) {
  2898.             f<<"S \134cdot ";
  2899.         } else {
  2900.             f<<"V_{"<<i<<"} \134cdot ";
  2901.         }
  2902.         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]<<"}"<<'\n';
  2903.         f<<"\134end{align*}"<<'\n';
  2904.         f<<"Como se conoce del \134emph{balance de materia} "<<'\n';
  2905.         if(i>0) {
  2906.             f<<"\134begin{math}"<<'\n';
  2907.             f<<"V_{"<<io[i][sale]<<"}=";
  2908.             if(io[i][entra]==0) {
  2909.                 f<<"F-";
  2910.             } else {
  2911.                 f<<"L_{"<<io[i][entra]<<"}-";
  2912.             }
  2913.             f<<"L_{"<<io[i][sale]<<"}";
  2914.             f<<"\134end{math}"<<'\n';
  2915.             f<<" y ";
  2916.         }
  2917.         f<<"\134begin{math}"<<'\n';
  2918.         if(i+1==efecto[0]) {
  2919.             f<<"V_{"<<io[i+1][sale]<<"}=F-L_{"<<io[i+1][sale]<<"}"<<'\n';
  2920.         } else {
  2921.             f<<"V_{"<<io[i+1][sale]<<"}=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}"<<'\n';
  2922.         }
  2923.         f<<"\134end{math}"<<'\n';
  2924.         if(i==0) {
  2925.             f<<". Se realiza un arreglo algebráico de modo que las incógnitas queden en el lado izquierdo de la igualdad y las constantes en el lado derecho, se sustituyen los valores de las entalpías:\134newline"<<'\n';
  2926.         } else {
  2927.             f<<". Se repite al igual que el efecto 1:\134newline"<<'\n';
  2928.         }
  2929.         f<<"\134end{multicols}"<<'\n';
  2930.  
  2931.  
  2932.         f<<"\134begin{align*}"<<'\n';
  2933.         if(i+1==efecto[0]) {
  2934.             f<<"F \134cdot H_{XF}+";
  2935.         } else {
  2936.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2937.         }
  2938.         if(i==0) {
  2939.             f<<"S \134cdot ";
  2940.         } else {
  2941.             if(i>0) {
  2942.                 if(io[i][entra]==0) {
  2943.                     f<<"\134left(F-";
  2944.                 } else {
  2945.                     f<<"\134left(L_{"<<io[i][entra]<<"}-";
  2946.                 }
  2947.                 f<<"L_{"<<io[i][sale]<<"}\134right) \134cdot";
  2948.             }
  2949.         }
  2950.         f<<"\134lambda_{S"<<i+1<<"}&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2951.         if(i+1==efecto[0]) {
  2952.             f<<"\134left(F-L_{"<<io[i+1][sale]<<"}\134right)";
  2953.         } else {
  2954.             f<<"\134left(L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134right)";
  2955.         }
  2956.         f<<"\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2957.         if(i+1==efecto[0]) {
  2958.             f<<"F \134cdot H_{XF}+";
  2959.         } else {
  2960.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot H_{X"<<io[i+1][entra]<<"}+";
  2961.         }
  2962.         if(i==0) {
  2963.             f<<"S \134cdot \134lambda_{S"<<i+1<<"}";
  2964.         } else {
  2965.             if(i>0) {
  2966.                 if(io[i][entra]==0) {
  2967.                     f<<"F \134cdot \134lambda_{S"<<i+1<<"}-";
  2968.                 } else {
  2969.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134lambda_{S"<<i+1<<"}-";
  2970.                 }
  2971.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134lambda_{S"<<i+1<<"}";
  2972.             }
  2973.         }
  2974.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot H_{X"<<io[i+1][sale]<<"}+";
  2975.         if(i+1==efecto[0]) {
  2976.             f<<"F\134cdot H_{"<<io[i+1][sale]<<"}-L_{"<<io[i+1][sale]<<"}\134cdot H_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  2977.         } else {
  2978.             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"<<'\n';
  2979.         }
  2980.         if(i+1==efecto[0]) {
  2981.             f<<"F \134cdot \134left("<<contar(hx[0])<<"\134right)+";
  2982.         } else {
  2983.             f<<"L_{"<<io[i+1][entra]<<"} \134cdot \134left(\134num{"<<contar(hx[io[i+1][entra]])<<"}\134right)+";
  2984.         }
  2985.         if(i==0) {
  2986.             f<<"S \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)";
  2987.         } else {
  2988.             if(i>0) {
  2989.                 if(io[i][entra]==0) {
  2990.                     f<<"F \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)-";
  2991.                 } else {
  2992.                     f<<"L_{"<<io[i][entra]<<"} \134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)-";
  2993.                 }
  2994.                 f<<"L_{"<<io[i][sale]<<"}\134cdot \134left(\134num{"<<contar(hvap[i])<<"}\134right)";
  2995.             }
  2996.         }
  2997.         f<<"&=L_{"<<io[i+1][sale]<<"} \134cdot \134left(\134num{"<<contar(hx[io[i+1][sale]])<<"}\134right)+";
  2998.         if(i+1==efecto[0]) {
  2999.             f<<"F\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)-L_{"<<io[i+1][sale]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<'\n';
  3000.         } else {
  3001.             f<<"L_{"<<io[i+1][entra]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<"-L_{"<<io[i+1][sale]<<"}\134cdot \134left(\134num{"<<contar(H[io[i+1][sale]-1])<<"}\134right)"<<'\n';
  3002.         }
  3003.         f<<"\134end{align*}"<<'\n';
  3004.         label++;
  3005.         f<<"\134begin{equation}"<<'\n';
  3006.         f<<"\134label{eq"<<label<<"}"<<'\n';
  3007.         unsigned short int c2,c3;
  3008.         c2=0;
  3009.         for(int j=0; j<numEfectos; j++) {
  3010.             if(M[i][j]!=0) {
  3011.                 c2++;
  3012.             }
  3013.         }
  3014.         c3=c2;
  3015.         for(int j=0; j<numEfectos; j++) {
  3016.             if(M[i][j]!=0 and j!=0) {
  3017.                 if(c3!=c2 and M[i][j]>0) {
  3018.                     f<<"+";
  3019.                 }
  3020.                 f<<"\134num{"<<contar(M[i][j])<<"}L_{"<<incognita[j-1]<<"}";
  3021.                 c2--;
  3022.             }
  3023.             if(i==0 and j==0 and M[i][j]!=0) {
  3024.                 f<<"\134num{"<<contar(M[i][j])<<"}S";
  3025.                 c2--;
  3026.             }
  3027.         }
  3028.         f<<"=\134num{"<<N[i][0]<<"}";
  3029.         if(i<numEfectos-1) {
  3030.             f<<"\134\134"<<'\n';
  3031.         }
  3032.         f<<"\134end{equation}"<<'\n';
  3033.     }
  3034.     f<<"Se resuelven las ecuaciones ";
  3035.     for(int i=0; i<numEfectos; i++) {
  3036.         f<<"\134ref{eq"<<i+1<<"}";
  3037.         if(i<numEfectos-2) {
  3038.             f<<", ";
  3039.         }
  3040.         if(i==numEfectos-2) {
  3041.             f<<" y ";
  3042.         }
  3043.     }
  3044.     f<<" utilizando cualquier método visto en álgebra lineal. Se resolverá con \134emph{Regla de Cramer} para este caso:"<<'\n';
  3045.     f<<"\134begin{displaymath}"<<'\n';
  3046.     f<<"\134left\134{"<<'\n';
  3047.     f<<"\134begin{array}{rcl}"<<'\n';
  3048.     for(int i=0; i<numEfectos; i++) {
  3049.         unsigned short int c2,c3;
  3050.         c2=0;
  3051.         for(int j=0; j<numEfectos; j++) {
  3052.             if(M[i][j]!=0) {
  3053.                 c2++;
  3054.             }
  3055.         }
  3056.         c3=c2;
  3057.         for(int j=0; j<numEfectos; j++) {
  3058.             if(M[i][j]!=0 and j!=0) {
  3059.                 if(c3!=c2 and M[i][j]>0) {
  3060.                     f<<"+";
  3061.                 }
  3062.                 f<<"\134num{"<<contar(M[i][j])<<"}\134textcolor{OliveGreen}{L_{"<<incognita[j-1]<<"}}";
  3063.                 c2--;
  3064.             }
  3065.             if(i==0 and j==0 and M[i][j]!=0) {
  3066.                 f<<"\134num{"<<contar(M[i][j])<<"}\134textcolor{OliveGreen}{S}";
  3067.                 c2--;
  3068.             }
  3069.         }
  3070.         f<<"&=&\134num{"<<N[i][0]<<"}";
  3071.         if(i<numEfectos-1) {
  3072.             f<<"\134\134"<<'\n';
  3073.         }
  3074.     }
  3075.     f<<"\134end{array}"<<'\n';
  3076.  
  3077.     f<<"\134right."<<'\n';
  3078.     f<<"\134end{displaymath}"<<'\n';
  3079.     f<<"\134vspace{0.7cm}"<<'\n';
  3080.     f<<"\134begin{displaymath}"<<'\n';
  3081.     f<<"\134left["<<'\n';
  3082.     f<<"\134begin{matrix}"<<'\n';
  3083.     for(int i=0; i<numEfectos; i++) {
  3084.         for(int j=0; j<numEfectos; j++) {
  3085.             f<<"\134textcolor{black}{\134num{"<<contar(M[i][j])<<"}}";
  3086.             if(j<numEfectos-1) {
  3087.                 f<<"&";
  3088.             } else {
  3089.                 f<<"\134\134"<<'\n';
  3090.             }
  3091.         }
  3092.     }
  3093.     f<<"\134end{matrix}"<<'\n';
  3094.     f<<"\134right]"<<'\n';
  3095.     f<<"\134left["<<'\n';
  3096.     f<<"\134begin{matrix}"<<'\n';
  3097.     for(int i=0; i<numEfectos; i++) {
  3098.         if(i==0) {
  3099.             f<<"\134textcolor{OliveGreen}{S}";
  3100.         } else {
  3101.             f<<"\134textcolor{OliveGreen}{L_{"<<incognita[i-1]<<"}}";
  3102.         }
  3103.         if(i<numEfectos-1) {
  3104.             f<<"\134\134"<<'\n';
  3105.         } else {
  3106.             f<<'\n';
  3107.         }
  3108.     }
  3109.     f<<"\134end{matrix}"<<'\n';
  3110.     f<<"\134right]"<<'\n';
  3111.     f<<"=";
  3112.     f<<"\134left["<<'\n';
  3113.     f<<"\134begin{matrix}"<<'\n';
  3114.     for(int j=0; j<numEfectos; j++) {
  3115.         f<<"\134textcolor{Blue}{\134num{"<<N[j][0]<<"}}";
  3116.         if(j<numEfectos-1) {
  3117.             f<<"\134\134"<<'\n';
  3118.         }
  3119.     }
  3120.     f<<"\134end{matrix}"<<'\n';
  3121.     f<<"\134right]"<<'\n';
  3122.     f<<"\134end{displaymath}"<<'\n';
  3123.  
  3124.     f<<"\134vspace{0.7cm}"<<'\n';
  3125.  
  3126.  
  3127.     for(int k=0; k<numEfectos; k++) {
  3128.         f<<"\134begin{displaymath}"<<'\n';
  3129.         for(int i=0; i<numEfectos; i++) {
  3130.             for(int j=0; j<numEfectos; j++) {
  3131.                 m[i][j]=M[i][j];
  3132.             }
  3133.         }
  3134.         for(int i=0; i<=9; i++) {
  3135.             m[i][k]=N[i][0];
  3136.         }
  3137.         if(k==0) {
  3138.             f<<"S=\134frac{"<<'\n';
  3139.         } else {
  3140.             f<<"L_{"<<incognita[k-1]<<"}=\134frac{"<<'\n';
  3141.         }
  3142.  
  3143.         f<<"\134begin{vmatrix}"<<'\n';
  3144.         for(int fila=0; fila<numEfectos; fila++) {
  3145.             for(int columna=0; columna<numEfectos; columna++) {
  3146.                 if(columna==k) {
  3147.                     f<<"\134textcolor{Blue}{";
  3148.                 } else {
  3149.                     f<<"\134textcolor{black}{";
  3150.                 }
  3151.                 f<<"\134num{"<<contar(m[fila][columna])<<"}}";
  3152.                 if(columna==numEfectos-1) {
  3153.                     f<<"\134\134"<<'\n';
  3154.                 } else {
  3155.                     f<<"&";
  3156.                 }
  3157.             }
  3158.         }
  3159.         f<<"\134end{vmatrix}}{"<<'\n';
  3160.         f<<"\134begin{vmatrix}"<<'\n';
  3161.         for(int fila=0; fila<numEfectos; fila++) {
  3162.             for(int columna=0; columna<numEfectos; columna++) {
  3163.                 f<<"\134textcolor{black}{";
  3164.                 f<<"\134num{"<<contar(M[fila][columna])<<"}}";
  3165.                 if(columna==numEfectos-1) {
  3166.                     f<<"\134\134"<<'\n';
  3167.                 } else {
  3168.                     f<<"&";
  3169.                 }
  3170.             }
  3171.         }
  3172.         f<<"\134end{vmatrix}}="<<'\n';
  3173.         if(numEfectos<6) {
  3174.             f<<"\134frac{\134num{"<<contar(determinante(m,numEfectos))<<"}}{\134num{"<<contar(determinante(M,numEfectos))<<"}}=";
  3175.         }
  3176.         f<<"\134SI{"<<contar(determinante(m,numEfectos)/determinante(M,numEfectos))<<"}{\134lbporhora}"<<'\n';
  3177.         f<<"\134end{displaymath}"<<'\n';
  3178.         if(k<numEfectos-1) {
  3179.             f<<"\134vspace{0.7cm}"<<'\n';
  3180.         }
  3181.     }
  3182.  
  3183.     f<<"Se observa que estos valores son idénticos a los obtenidos con las concentraciones supuestas en el \134emph{Paso 1}. Así que no se necesita iterar. De no ser idénticos se repiten los pasos 1 al 4 hasta que converjan."<<'\n';
  3184.  
  3185.  
  3186.  
  3187.     for(int i=0; i<numEfectos; i++) {
  3188.         f<<"\134begin{align*}"<<'\n';
  3189.         if(i+1==efecto[0]) {
  3190.             f<<"V_{"<<io[i+1][sale]<<"}&=F-L_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  3191.         } else {
  3192.             f<<"V_ {"<<io[i+1][sale]<<"}&=L_{"<<io[i+1][entra]<<"}-L_{"<<io[i+1][sale]<<"}\134\134"<<'\n';
  3193.         }
  3194.         f<<"V_{"<<io[i+1][sale]<<"}&=\134SI{"<<contar(L[io[i+1][entra]])<<"}{\134lbporhora}-\134SI{"<<contar(L[io[i+1][sale]])<<"}{\134lbporhora}\134\134"<<'\n';
  3195.         f<<"V_{"<<io[i+1][sale]<<"}&=\134SI{"<<contar(V[io[i+1][sale]])<<"}{\134lbporhora}\134\134"<<'\n';
  3196.         f<<"\134end{align*}"<<'\n';
  3197.     }
  3198.  
  3199.  
  3200.     f<<"\134item[Paso 5:] Con los valores obtenidos en el \134emph{Paso 4} se encuentran los calores transferidos en cada efecto y el área:\134newline"<<'\n';
  3201.     f<<"\134begin{align*}"<<'\n';
  3202.     for(int i=0; i<numEfectos; i++) {
  3203.         f<<"\134dot{Q}_{"<<i+1<<"}&=";
  3204.         if(i==0) {
  3205.             f<<"S";
  3206.         } else {
  3207.             f<<"V_{"<<i<<"}";
  3208.         }
  3209.         f<<"\134cdot \134lambda_{S"<<i+1<<"}=\134left(\134SI{"<<contar(V[i])<<"}{\134lbporhora}\134right)\134left(\134SI{"<<contar(hvap[i])<<"}{\134BTUporlb}\134right)=\134SI{"<<contar(contar(hvap[i])*contar(V[i]))<<"}{\134BTUporhora}\134\134"<<'\n';
  3210.     }
  3211.     suma=0;
  3212.     f<<"\134end{align*}"<<'\n';
  3213.     f<<"\134begin{align*}"<<'\n';
  3214.     for(int i=0; i<numEfectos; i++) {
  3215.         f<<"A_{"<<i+1<<"}&="<<"\134frac{\134dot{Q}_{"<<i+1<<"}}{U_{"<<i+1<<"}\134cdot \134Delta T_{"<<i+1<<"}}=\134frac{\134SI{"<<contar(contar(hvap[i])*contar(V[i]))<<"}{\134BTUporhora}}{\134left(\134SI{"<<U[i]<<"}{\134U}\134right)\134left(\134SI{"<<contar(deltaT[i+1])<<"}{\134F}\134right)}=\134SI{"<<contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]))<<"}{\134square\134ft}\134\134[6pt]"<<'\n';
  3216.         suma=suma+contar(contar(contar(hvap[i])*contar(V[i]))/(contar(deltaT[i+1])*U[i]));
  3217.     }
  3218.     f<<"\134end{align*}"<<'\n';
  3219.  
  3220.     f<<"El área promedio $A_m=\134SI{"<<contar(suma/numEfectos)<<"}{\134square\134ft}$. La variación es despreciable y no hace falta otra iteración. De no ser iguales se debe repetir los pasos 6, 7 y 8 hasta que converjan las respuestas.\134newline\134newline"<<'\n';
  3221.     f<<"\134begin{Large}"<<'\n';
  3222.     f<<"\134textbf{Respuestas:}"<<'\n';
  3223.     f<<"\134end{Large}"<<'\n';
  3224.     f<<"\134begin{parts}"<<'\n';
  3225.     f<<"\134part $A_m=\134SI{"<<contar(A[0])<<"}{\134square\134ft}$ (\134SI{"<<contar(A[0]/10.7639)<<"}{\134square\134meter})"<<'\n';
  3226.     f<<"\134part $S=\134SI{"<<contar(V[0])<<"}{\134lbporhora}$ (\134SI{"<<contar(V[0]*453.6/100000)*100<<"}{\134kilo\134gram\134per\134hour})"<<'\n';
  3227.     f<<"\134part $\134text{Economía del vapor}=\134frac{";
  3228.     for(int i=0; i<numEfectos; i++) {
  3229.         f<<"V_{"<<i+1<<"}";
  3230.         if(i==numEfectos-1) {
  3231.             f<<"}";
  3232.         } else {
  3233.             f<<"+";
  3234.         }
  3235.     }
  3236.     f<<"{S}=\134frac{";
  3237.     suma=0;
  3238.     for(int i=0; i<numEfectos; i++) {
  3239.         f<<contar(V[i+1]);
  3240.         suma=suma+contar(V[i+1]);
  3241.         if(i==numEfectos-1) {
  3242.             f<<"}";
  3243.         } else {
  3244.             f<<"+";
  3245.         }
  3246.     }
  3247.     f<<"{"<<contar(V[0])<<"}="<<contar(contar(suma)/contar(V[0])*1000)/1000<<"$"<<'\n';
  3248.     f<<"\134end{parts}"<<'\n';
  3249.     f<<"\134end{description}"<<'\n';
  3250.     f<<"\134end{solution}"<<'\n';
  3251.     f<<"\134end{document}";
  3252.     f.close();
  3253. }
  3254.  
  3255.  
  3256.  
  3257.  
  3258.  
  3259. /*chatgpt*/
  3260.  
  3261.  
  3262.  
  3263.  
  3264. std::vector<double> empaquetarVariablesBroyden() {
  3265.     std::vector<double> vars;
  3266.  
  3267.     cout << "\nDEBUG - Empaquetando variables:" << endl;
  3268.  
  3269.     // Variable 0: V[0] (vapor vivo)
  3270.     vars.push_back(V[0]);
  3271.     cout << "  V[0] = " << V[0] << endl;
  3272.  
  3273.     // Variables 1..numEfectos-1: L[incognita[k-1]]
  3274.     for (int k = 1; k < numEfectos; k++) {
  3275.         double valor_L = L[incognita[k-1]];
  3276.         vars.push_back(valor_L);
  3277.         cout << "  L[" << incognita[k-1] << "] = " << valor_L << endl;
  3278.     }
  3279.  
  3280.     return vars;
  3281. }
  3282.  
  3283. // 2. Desempaquetar variables y recalcular dependientes
  3284. void desempaquetarVariablesBroyden(const std::vector<double>& vars) {
  3285.     int idx = 0;
  3286.  
  3287.     // 1. V[0] (vapor vivo)
  3288.     V[0] = vars[idx++];
  3289.  
  3290.     // 2. L intermedios (L[incognita[k-1]])
  3291.     for (int k = 1; k < numEfectos; k++) {
  3292.         L[incognita[k-1]] = vars[idx++];
  3293.     }
  3294.  
  3295.     // 3. Recalcular variables dependientes
  3296.  
  3297.     // a) L final del balance de sólidos (se mantiene constante x[efecto[numEfectos-1]])
  3298.     L[efecto[numEfectos-1]] = (L[0] * x[0]) / x[efecto[numEfectos-1]];
  3299.  
  3300.     // b) V[1] a V[numEfectos] se calculan en resolver(), no aquí
  3301.  
  3302.     // c) Concentraciones intermedias
  3303.     for (int i = 1; i < numEfectos; i++) {
  3304.         if (L[i] > 1e-6) {
  3305.             x[i] = (L[0] * x[0]) / L[i];
  3306.             // Límites físicos
  3307.             if (x[i] < 0.0) x[i] = 0.0;
  3308.             if (x[i] > 0.75) x[i] = 0.75;
  3309.         }
  3310.     }
  3311.  
  3312.     // d) Mantener concentración final constante
  3313.     x[efecto[numEfectos-1]] = xN_constante;
  3314. }
  3315. // 3. Calcular residuos F(x) - lo que queremos que sea 0
  3316. std::vector<double> calcularResiduosBroyden(const std::vector<double>& vars) {
  3317.     // Aplicar variables al sistema
  3318.     desempaquetarVariablesBroyden(vars);
  3319.  
  3320.     // Ejecutar resolver() para calcular toda la física
  3321.     if (!resolver()) {
  3322.         std::vector<double> residuos(vars.size(), 1e6);
  3323.         return residuos;
  3324.     }
  3325.  
  3326.     std::vector<double> residuos;
  3327.  
  3328.  
  3329.     // RESIDUO 1: Diferencia entre deltaT[0] y deltaT0
  3330.     double residuo1 = deltaT0 - deltaT[0];
  3331.     residuos.push_back(residuo1);
  3332.  
  3333.     // RESIDUOS 2..numEfectos+1: Balances de materia CORREGIDOS
  3334.     // Para cada efecto i: L[entra] - V[sale] - L[sale] = 0
  3335.     for (int i = 0; i < numEfectos; i++) {
  3336.         int efecto_actual = efecto[i];
  3337.         int efecto_entra = io[efecto_actual][entra];
  3338.         int efecto_sale = io[efecto_actual][sale];
  3339.  
  3340.         double balance = L[efecto_entra] - V[efecto_sale] - L[efecto_sale];
  3341.         residuos.push_back(balance);
  3342.  
  3343.         // DEBUG: Mostrar balance
  3344.         if (i == 0) {
  3345.             cout << "  DEBUG Balance efecto " << efecto_actual << ": ";
  3346.             cout << "L[" << efecto_entra << "]=" << L[efecto_entra] << " - ";
  3347.             cout << "V[" << efecto_sale << "]=" << V[efecto_sale] << " - ";
  3348.             cout << "L[" << efecto_sale << "]=" << L[efecto_sale] << " = ";
  3349.             cout << balance << endl;
  3350.         }
  3351.     }
  3352.  
  3353.     // RESIDUO adicional: Error en suma de ΔT
  3354.     double deltaT_total_teorico = Tsat[0] - Tsat[numEfectos];
  3355.     for (int i = 0; i < numEfectos; i++) {
  3356.         deltaT_total_teorico -= epe[i];
  3357.     }
  3358.  
  3359.     double suma_deltaT = 0.0;
  3360.     for (int i = 0; i < numEfectos; i++) {
  3361.         if (i == 0) {
  3362.             double Tsat_vivo = T_sat(P[0]);
  3363.             deltaT[i] = Tsat_vivo - T[i];
  3364.         } else {
  3365.             deltaT[i] = T[i-1] - T[i];
  3366.         }
  3367.         suma_deltaT += deltaT[i];
  3368.     }
  3369.  
  3370.     double residuo_deltaT = suma_deltaT - deltaT_total_teorico;
  3371.     residuos.push_back(residuo_deltaT);
  3372.  
  3373.     // RESIDUO adicional: Coherencia entre áreas (si se desea igualar)
  3374.     if (numEfectos > 1) {
  3375.         double area_promedio = 0.0;
  3376.         for (int i = 0; i < numEfectos; i++) {
  3377.             area_promedio += A[i];
  3378.         }
  3379.         area_promedio /= numEfectos;
  3380.  
  3381.         for (int i = 0; i < numEfectos; i++) {
  3382.             double residuo_area = A[i] - area_promedio;
  3383.             residuos.push_back(residuo_area);
  3384.         }
  3385.     }
  3386.  
  3387.     return residuos;
  3388. }
  3389.  
  3390. // 4. Calcular error total (norma de residuos)
  3391. double calcularErrorTotal() {
  3392.     // Empaquetar variables actuales
  3393.     std::vector<double> vars = empaquetarVariablesBroyden();
  3394.  
  3395.     // Calcular residuos
  3396.     std::vector<double> residuos = calcularResiduosBroyden(vars);
  3397.  
  3398.     // Calcular norma euclidiana
  3399.     double suma = 0.0;
  3400.     for (double r : residuos) {
  3401.         suma += r * r;
  3402.     }
  3403.     return sqrt(suma);
  3404. }
  3405.  
  3406. // 5. Aplicar límites físicos a las variables
  3407. void aplicarLimites(std::vector<double>& vars) {
  3408.     // vars[0] = V[0] (vapor vivo)
  3409.     if (vars[0] < 0) vars[0] = 0;
  3410.     if (vars[0] > L[0] * 0.9) vars[0] = L[0] * 0.9;  // No más del 90% de alimentación
  3411.  
  3412.     // vars[1..] = L intermedios
  3413.     for (size_t i = 1; i < vars.size(); i++) {
  3414.         // L debe estar entre 0.01*L[0] y 0.99*L[0]
  3415.         double min_L = L[0] * 0.01;
  3416.         double max_L = L[0] * 0.99;
  3417.  
  3418.         if (vars[i] < min_L) vars[i] = min_L;
  3419.         if (vars[i] > max_L) vars[i] = max_L;
  3420.     }
  3421. }
  3422.  
  3423. // 6. Resolver sistema lineal simple (para Broyden)
  3424. std::vector<double> resolverSistemaBroyden(const std::vector<std::vector<double>>& B,
  3425.         const std::vector<double>& F) {
  3426.     int n = B.size();
  3427.     std::vector<double> s(n, 0.0);
  3428.  
  3429.     // Método simple: asumiendo B es diagonal dominante
  3430.     // En Broyden, B es aproximación del Jacobiano
  3431.     for (int i = 0; i < n; i++) {
  3432.         if (fabs(B[i][i]) > 1e-12) {
  3433.             s[i] = -F[i] / B[i][i];  // s = -B⁻¹ * F
  3434.         }
  3435.     }
  3436.     return s;
  3437. }
  3438.  
  3439. // 7. Actualización de Broyden
  3440. void actualizarBroyden(std::vector<std::vector<double>>& B,
  3441.                        const std::vector<double>& s,
  3442.                        const std::vector<double>& y) {
  3443.     int n = B.size();
  3444.  
  3445.     // Calcular s^T * s
  3446.     double sTs = 0.0;
  3447.     for (int i = 0; i < n; i++) {
  3448.         sTs += s[i] * s[i];
  3449.     }
  3450.  
  3451.     if (fabs(sTs) < 1e-12) return;
  3452.  
  3453.     // Calcular B*s
  3454.     std::vector<double> Bs(n, 0.0);
  3455.     for (int i = 0; i < n; i++) {
  3456.         for (int j = 0; j < n; j++) {
  3457.             Bs[i] += B[i][j] * s[j];
  3458.         }
  3459.     }
  3460.  
  3461.     // Actualización de Broyden: B = B + (y - Bs) * s^T / (s^T * s)
  3462.     for (int i = 0; i < n; i++) {
  3463.         double factor = (y[i] - Bs[i]) / sTs;
  3464.         for (int j = 0; j < n; j++) {
  3465.             B[i][j] += factor * s[j];
  3466.         }
  3467.     }
  3468. }
  3469.  
  3470. // 8. FUNCIÓN PRINCIPAL BROYDEN
  3471. bool resolverConBroyden(double tolerancia, int max_iter) {
  3472.     cout << "\n=========================================" << endl;
  3473.     cout << "BROYDEN - BALANCE: L[entra] - V[sale] - L[sale] = 0" << endl;
  3474.     cout << "=========================================" << endl;
  3475.  
  3476.     // Paso 0: Mostrar configuración de efectos
  3477.     cout << "\nCONFIGURACIÓN DE EFECTOS:" << endl;
  3478.     for (int i = 0; i < numEfectos; i++) {
  3479.         int efecto_actual = efecto[i];
  3480.         cout << "Efecto " << efecto_actual << ": ";
  3481.         cout << "entra de " << io[efecto_actual][entra];
  3482.         cout << ", sale a " << io[efecto_actual][sale] << endl;
  3483.     }
  3484.  
  3485.     // Paso 1: Solución inicial
  3486.     cout << "\nPASO 1: Solución inicial con método iterativo..." << endl;
  3487.     if (!resolver()) {
  3488.         cout << "ERROR: Solución inicial falló" << endl;
  3489.         return false;
  3490.     }
  3491.  
  3492.     // Guardar concentración final constante
  3493.     xN_constante = x[efecto[numEfectos-1]];
  3494.     cout << "xN_constante = " << xN_constante << endl;
  3495.  
  3496.     // Calcular deltaT0
  3497.     deltaT0 = Tsat[0] - Tsat[numEfectos];
  3498.     for (int i = 0; i < numEfectos; i++) {
  3499.         deltaT0 -= epe[i];
  3500.     }
  3501.     cout << "deltaT0 teórico = " << deltaT0 << endl;
  3502.     cout << "deltaT[0] actual = " << deltaT[0] << endl;
  3503.  
  3504.     // Paso 2: Empaquetar variables iniciales
  3505.     std::vector<double> x_actual = empaquetarVariablesBroyden();
  3506.     int n = x_actual.size();  // Número de variables
  3507.  
  3508.     cout << "\nPASO 2: " << n << " variables a optimizar" << endl;
  3509.  
  3510.     // Paso 3: Calcular residuos iniciales
  3511.     std::vector<double> F_actual = calcularResiduosBroyden(x_actual);
  3512.     double error_actual = 0.0;
  3513.     for (double f : F_actual) error_actual += f * f;
  3514.     error_actual = sqrt(error_actual);
  3515.  
  3516.     cout << "\nPASO 3: Residuos iniciales:" << endl;
  3517.     cout << "  Error total = " << error_actual << endl;
  3518.     cout << "  deltaT error = " << F_actual[0] << endl;
  3519.     for (int i = 0; i < numEfectos; i++) {
  3520.         cout << "  Balance efecto " << efecto[i] << " = " << F_actual[i+1] << endl;
  3521.     }
  3522.     cout << "  Error ΔT total = " << F_actual[numEfectos+1] << endl;
  3523.  
  3524.     // Paso 4: Inicializar Jacobiano
  3525.     std::vector<std::vector<double>> B(n, std::vector<double>(n, 0.0));
  3526.     for (int i = 0; i < n; i++) {
  3527.         B[i][i] = 1.0;  // Identidad inicial
  3528.     }
  3529.  
  3530.     // Paso 5: Iteraciones de Broyden
  3531.     cout << "\nPASO 5: Iniciando iteraciones de Broyden..." << endl;
  3532.  
  3533.     for (int iter = 0; iter < max_iter; iter++) {
  3534.         cout << "\n--- Iteración " << iter + 1 << "/" << max_iter << " ---" << endl;
  3535.  
  3536.         // Calcular dirección s = -B⁻¹ * F (simplificado)
  3537.         std::vector<double> s(n);
  3538.         for (int i = 0; i < n; i++) {
  3539.             double paso_maximo = 0.01;  // 10% máximo - AJUSTA ESTE VALOR
  3540.             s[i] = -F_actual[i] / B[i][i];
  3541.  
  3542. // Limitar el paso máximo
  3543.             if (fabs(s[i]) > paso_maximo * fabs(x_actual[i])) {
  3544.                 s[i] = paso_maximo * x_actual[i] * (s[i] > 0 ? 1 : -1);
  3545.             }
  3546.  
  3547.             // Limitar paso máximo
  3548.             if (fabs(s[i]) > 0.3 * fabs(x_actual[i]) && fabs(x_actual[i]) > 1e-6) {
  3549.                 s[i] = 0.3 * x_actual[i] * (s[i] > 0 ? 1 : -1);
  3550.             }
  3551.         }
  3552.  
  3553.         // Factor de relajación adaptativo
  3554.         double alpha = 0.001;
  3555.         std::vector<double> x_nuevo = x_actual;
  3556.         bool paso_aceptable = false;
  3557.  
  3558.         for (int intento = 0; intento < 3; intento++) {
  3559.             x_nuevo = x_actual;
  3560.  
  3561.             // Aplicar paso
  3562.             for (int i = 0; i < n; i++) {
  3563.                 x_nuevo[i] += alpha * s[i];
  3564.             }
  3565.  
  3566.             // Aplicar límites
  3567.             aplicarLimites(x_nuevo);
  3568.  
  3569.             // Calcular nuevos residuos
  3570.             std::vector<double> F_nuevo = calcularResiduosBroyden(x_nuevo);
  3571.             double error_nuevo = 0.0;
  3572.             for (double f : F_nuevo) error_nuevo += f * f;
  3573.             error_nuevo = sqrt(error_nuevo);
  3574.  
  3575.             cout << "  Alpha=" << alpha << ", Error=" << error_nuevo;
  3576.  
  3577.             // Verificar si mejora
  3578.             if (error_nuevo < error_actual) {
  3579.                 // Actualizar Broyden
  3580.                 std::vector<double> y(n);
  3581.                 for (int i = 0; i < n; i++) y[i] = F_nuevo[i] - F_actual[i];
  3582.                 actualizarBroyden(B, s, y);
  3583.  
  3584.                 // Preparar siguiente iteración
  3585.                 x_actual = x_nuevo;
  3586.                 F_actual = F_nuevo;
  3587.                 error_actual = error_nuevo;
  3588.  
  3589.                 cout << " ✓" << endl;
  3590.                 paso_aceptable = true;
  3591.                 break;
  3592.             } else {
  3593.                 cout << " ✗" << endl;
  3594.                 alpha *= 0.5;  // Reducir paso
  3595.             }
  3596.         }
  3597.  
  3598.         if (!paso_aceptable) {
  3599.             cout << "  ADVERTENCIA: Reiniciando Jacobiano" << endl;
  3600.             for (int i = 0; i < n; i++) {
  3601.                 B[i][i] = 1.0;
  3602.                 for (int j = 0; j < n; j++) {
  3603.                     if (i != j) B[i][j] = 0.0;
  3604.                 }
  3605.             }
  3606.         }
  3607.  
  3608.         // Mostrar progreso
  3609.         cout << "  V[0] = " << x_actual[0];
  3610.         cout << ", Error total = " << error_actual << endl;
  3611.  
  3612.         // Calcular balances actuales para monitoreo
  3613.         desempaquetarVariablesBroyden(x_actual);
  3614.         resolver();
  3615.  
  3616.         cout << "  Balances actuales: ";
  3617.         for (int i = 0; i < numEfectos; i++) {
  3618.             int efecto_actual = efecto[i];
  3619.             double balance = L[io[efecto_actual][entra]] -
  3620.                              V[io[efecto_actual][sale]] -
  3621.                              L[io[efecto_actual][sale]];
  3622.             cout << "B" << efecto_actual << "=" << balance << " ";
  3623.         }
  3624.         cout << endl;
  3625.  
  3626.         // Verificar convergencia
  3627.         if (error_actual < tolerancia) {
  3628.             cout << "\n═══════════════════════════════════════════" << endl;
  3629.             cout << "¡CONVERGENCIA ALCANZADA!" << endl;
  3630.             cout << "Iteraciones: " << iter + 1 << endl;
  3631.             cout << "Error final: " << error_actual << endl;
  3632.  
  3633.             // Mostrar solución final
  3634.             cout << "\nSOLUCIÓN FINAL:" << endl;
  3635.             cout << "V[0] = " << V[0] << " lbm/h" << endl;
  3636.             for (int i = 1; i < numEfectos; i++) {
  3637.                 cout << "L[" << efecto[i] << "] = " << L[efecto[i]]
  3638.                      << " lbm/h, x = " << x[efecto[i]] << endl;
  3639.             }
  3640.  
  3641.             // Verificar balances finales
  3642.             cout << "\nVERIFICACIÓN DE BALANCES:" << endl;
  3643.             for (int i = 0; i < numEfectos; i++) {
  3644.                 int efecto_actual = efecto[i];
  3645.                 double balance = L[io[efecto_actual][entra]] -
  3646.                                  V[io[efecto_actual][sale]] -
  3647.                                  L[io[efecto_actual][sale]];
  3648.                 cout << "Efecto " << efecto_actual << ": " << balance << endl;
  3649.             }
  3650.  
  3651.             cout << "═══════════════════════════════════════════" << endl;
  3652.             return true;
  3653.         }
  3654.     }
  3655.  
  3656.     cout << "\n═══════════════════════════════════════════" << endl;
  3657.     cout << "ADVERTENCIA: Máximo de iteraciones" << endl;
  3658.     cout << "Error final: " << error_actual << endl;
  3659.     cout << "═══════════════════════════════════════════" << endl;
  3660.  
  3661.     // Aplicar mejor solución encontrada
  3662.     desempaquetarVariablesBroyden(x_actual);
  3663.     resolver();
  3664.  
  3665.     return false;
  3666. }
  3667.  
  3668.  
  3669.  
  3670.  
  3671.  
  3672.  
Advertisement
Add Comment
Please, Sign In to add comment