carpio 0 Denunciar post Postado Fevereiro 14, 2011 Olá p todos! Alguém pode me ajudar? Estou criando um algoritmo que é uma sequência de equações, que são alimentadas com dados de entrada. Minha dúvida é que na parte chamada CORRELAÇÂO, eu tenho que gerar 7 "k"s. A fórmula deve pegar o primeiro Pci, Tci e Afi, calcular e depois gerar o segundo e aí vai... Gerando 7 "k"s... ESTIMATIVA K, CORRELAÇÃO WILSON. Depois de gerar estes 7 "k"s eles vão servir como base p a fórmula seguinte, que é um somatório (double mrr). Alguém sabe como devo escrever esta fórmula? Ou seja a fórmula do somatório pegar cada "k" gerado e somá-lo? E como deveria jogá-lo no somatório seguinte (que eu chamo de mrr, acho q o somatório do mrr tá certo, a maneira que coloquei o K q ñ tá) OBRIGADO!!!! //Equação de estado #include <iostream> #include <cmath> using namespace std; int main () { //PROPRIEDADE DOS COMPONENTES, dados de entrada double Mw[7] = {28.013, 16.043, 30.07, 44.097, 58.124, 72.151, 86.177}; double Tc[7] = {227.16, 343.08, 549.72, 665.64, 765.36, 845.28, 913.68}; //Rankine double Pc[7] = {492.45, 667.38, 708.54, 615.93, 552.72, 489.51, 438.86}; //Psi double Af[7] = {0.040, 0.008, 0.098, 0.152, 0.193, 0.251, 0.3013}; double você[7] = {89.5, 99, 148, 203, 255, 304, 371}; double Bin1[7] = {0, 0.018, 0.039, 0.046, 0.047, 0.048, 0}; double Bin2[7] = {0.018, 0, 0.005, 0.01, 0.0145, 0.0182, 0}; double Bin3[7] = {0.039, 0.005, 0.00, 0.0017, 0.0032, 0.0048, 0}; double Bin4[7] = {0.046, 0.01, 0.0017, 0, 0.0012, 0.024, 0}; double Bin5[7] = {0.047, 0.0145, 0.0032, 0.0012, 0, 0.0008, 0}; double Bin6[7] = {0.048, 0.0182, 0.0048, 0.0024, 0.0008, 0, 0}; // FRACAO MOLAR (z), PRESSÃO e TEMPERATURA, mais dados de entrada double z[7] = {0.020, 0.8866, 0.0492, 0.0246, 0.0098, 0.0098, 0.00}; double P = 1000; //psi double T = 405; // rankine // ESTIMATIVA K, CORRELAÇÃO WILSON, preciso gerar 7 "k" que serão usados na fórmula seguinte, o que consigo é só gerar o último K dos 7????? double k = 0; for (int i = 0; i < 7; i++) { k = (Pc/P) * exp (5.37 * (1 + Af) * (1-Tc/T)); } // esta fórmula deve pegar cada valor de K e gerar um somatório que eu chamo de mrr double mrr = 0; while (i < 7) { mrr += z * (k - 1) / (1 + nv * (k - 1)); i++; } //aqui tento visualizar os "k" for(int n = 0; n != 7; n++) { cout << k << endl; } getchar(); //cout << mrr << endl; char saida; cin >> saida; } Compartilhar este post Link para o post Compartilhar em outros sites
AcquaBlue 0 Denunciar post Postado Fevereiro 14, 2011 Carpio, pelo que eu entendi do erro você quer que sejam gerados 7 'k's diferentes que serão usados na formula. O erro acontece por que você só consegue gerar o último 'k'? Bem... Seu codigo k é uma variavel double, se você deseja gerar 7 deles sugeriria transforma-la num vetor k[7] ( sem a piadinha que o fonema gera :P ). O novo trecho de codigo ficaria assim: // ESTIMATIVA K, CORRELAÇÃO WILSON, preciso gerar 7 "k" que serão usados na fórmula seguinte, o que consigo é só gerar o último K dos 7 double k[7] = {0,0,0,0,0,0,0}; for (int i = 0; i < 7; i++) { k[i] = (Pc[i]/P) * exp (5.37 * (1 + Af[i]) * (1-Tc[i]/T)); } // MÉTODO ITERATIVO DE RACHFORD-RICE, esta fórmula deve pegar cada valor de K e gerar um somatório que eu chamo de mrr double mrr = 0; while (i < 7) { mrr += z[i] * (k[i] - 1) / (1 + nv * (k[i] - 1)); i++; } //aqui tento visualizar os "k" for(int n = 0; n != 7; n++) { cout << k[n] << endl; } getchar(); //cout << mrr << endl; char saida; cin >> saida; } Compartilhar este post Link para o post Compartilhar em outros sites
carpio 0 Denunciar post Postado Fevereiro 16, 2011 Oi AcquaBlue obrigado pela resposta, agora rodou direitinho. Abusando um pouco da sua boa vontade e de todos. Ainda neste algoritmo estou esbarrando num comando IF. Na parte que chamo de ITERAÇÃO (em vermelho) eu não consigo fazer o programa obedecer meu IF. Ele tem que parar de calcular a variável "nv" assim que a condição do IF for alcançada. Pelo meu excel-gabarito ele alcança na segunda ou terceira rodada, só que ele acaba rodando as 20 que eu "setei". obs: Tá um pouco diferente do primeiro, pq eu dei uma perfumada. #include <iostream> #include <cmath> using namespace std; int main () { //PROPRIEDADE DOS COMPONENTES double Mw[7] = {28.013, 16.043, 30.07, 44.097, 58.124, 72.151, 86.177}; double Tc[7] = {126.2, 190.6, 305.4, 369.8, 425.2, 469.6, 507.6}; //Kelvin double Pc[7] = {33.5, 45.4, 48.2, 41.9, 37.6, 33.3, 29.5442882}; //Atm double Af[7] = {0.040, 0.008, 0.098, 0.152, 0.193, 0.251, 0.3013}; double você[7] = {89.5, 99, 148, 203, 255, 304, 371}; double Bin1[7] = {0, 0.018, 0.039, 0.046, 0.047, 0.048, 0}; double Bin2[7] = {0.018, 0, 0.005, 0.01, 0.0145, 0.0182, 0}; double Bin3[7] = {0.039, 0.005, 0.00, 0.0017, 0.0032, 0.0048, 0}; double Bin4[7] = {0.046, 0.01, 0.0017, 0, 0.0012, 0.024, 0}; double Bin5[7] = {0.047, 0.0145, 0.0032, 0.0012, 0, 0.0008, 0}; double Bin6[7] = {0.048, 0.0182, 0.0048, 0.0024, 0.0008, 0, 0}; // FRACAO MOLAR (z), PRESSÃO e TEMPERATURA double z[7] = {0.020, 0.8866, 0.0492, 0.0246, 0.0098, 0.0098, 0.00}; double P = 68.045958; //atm double T = 224.81667; // kelvin // ESTIMATIVA K, CORRELAÇÃO WILSON double k[7] = {0,0,0,0,0,0,0}; for (int i = 0; i < 7; i++) { k = (Pc/P) * exp (5.37 * (1 + Af) * (1-Tc/T)); } double mrr = 0; double mrr1 = 0; double dmrr = 0; double nv = 1; double delta = -0.01; int i = 0; double itera = 0; while (itera < 20) { while (i < 7) //não pode ter ";" no while { mrr += z * (k - 1) / (1 + nv * (k - 1)); mrr1 += z * (k - 1) / (1 + (nv + delta) * (k - 1)); i++; //cuidado com esse comando } // ITERAÇÃO double nv0 = 1; dmrr = (mrr1 - mrr) / delta; nv0 = nv; nv = nv0 - mrr/dmrr; if (nv0-nv < 0.0107) break; // Não consigo fazer este comando funcionar itera = itera + 1; } //Resultados for(int n = 0; n != 7; n++) { cout << k[n] << endl; } cout << "mrr = " << mrr; cout << "\n" ; cout << "mrr1 = " << mrr1; cout << "\n" ; cout << "dmrr = " << dmrr; cout << "\n" ; cout << "nv = " << nv; cout << "\n" ; cout << "iteracoes = " << itera; cout << "\n" ; char saida; cin >> saida; } Compartilhar este post Link para o post Compartilhar em outros sites