void metodoEuler(float x0, float y0,float h,int m,int id){ int j; float x[m+1]; float y[m+1]; x[0] = x0; y[0] = y0; // Calculo pelo metodo de Euler for(j = 0; j < m; j++) { y[j+1] = y[j] + h*fGet(x[j], y[j]); x[j+1] = x[j] + h; } // mostrando o resultado printf("Os valores de x e y sao: \n"); // PLOTANDO! plota (m, x, y);};
void preditorCorretor(float x0,float y0,float h,int m,int id){ float k1, k2, k3, k4; int j; // Calculo de x[0]->x[3] e y[0]->y[3] pelo metodo RK4 float x[m+1]; float y[m+1]; x[0] = x0; y[0] = y0; // calculo de x[0] -> x[3] e y[0] -> y[3] pelo metodo de Runge Kutta for(j = 0; j < 3; j++) { k1 = fGet(x[j], y[j]); k2 = fGet(x[j] + h / 2, y[j] + (h / 2)*k1); k3 = fGet(x[j] + h / 2, y[j] + (h / 2)*k2); k4 = fGet(x[j] + h, y[j] + h*k3); y[j + 1] = y[j] + (h/6)*(k1 + 2*k2 + 2*k3 + k4); x[j + 1] = x[j] + h; } float yp, fp; // Calculo da EDO usando o metodo Preditor-Corretor for(j = 3; j < m; j++) { x[j+1] = x[j] + h; yp = y[j] + (h/24)*(55*fGet(x[j], y[j]) - 59*fGet(x[j-1], y[j-1]) + 37*fGet(x[j-2], y[j-2]) - 9*fGet(x[j-3], y[j-3])); fp = y[j] + (h/24)*(9*fGet(x[j+1], yp) + 19*fGet(x[j], y[j]) - 5*fGet(x[j-1], y[j-1]) + fGet(x[j-2], y[j-2])); y[j+1] = y[j] + (h/24)*(9*fGet(x[j+1], fp) + 19*fGet(x[j], y[j]) - 5*fGet(x[j-1], y[j-1]) + fGet(x[j-2], y[j-2])); } // printf("Os valores de x e y sao: \n"); // PLOTANDO! plota (m, x, y); }
void rungeKuttaTerceiraOrdem(float x0,float y0,float h,int m,int id){ float k1, k2, k3; int j; float x[m+1], y[m+1]; x[0] = x0; y[0] = y0; // faz os calculos for(j = 0; j < m; j++) { k1 = fGet(x[j], y[j]); k2 = fGet(x[j] + h / 2, y[j] + k1 / 2); k3 = fGet(x[j] + ((float)3 / 4)*h, y[j] + ((float)3 / 4)*k2); x[j+1] = x[j] + h; y[j+1] = y[j] + (h/9)*(2*k1 + 3*k2 + 4*k3); } printf("Os valores de x e y sao:\n"); // PLOTANDO! plota (m, x, y); }
void rungeKuttaSegundaOrdem(float x0,float y0,float h,int m,int id){ int j; float x[m+1]; float y[m+1]; float k1, k2; x[0] = x0; y[0] = y0; //Calculo pelo metodo de Runge Kutta de segunda ordem for(j = 0; j < m; j++) { k1 = fGet(x[j], y[j]); k2 = fGet(x[j] + h, y[j] + h*k1); y[j + 1] = y[j] + (h/2)*(k1 + k2); x[j + 1] = x[j] + h; } //mostra os resultados printf("Os valores de x e y sao: \n"); // PLOTANDO! plota (m, x, y); }
void rungeKuttaQuartaOrdem(float x0,float y0,float h,int m,int id){ int j; float x[m+1]; float y[m+1]; float k1, k2, k3, k4; x[0] = x0; y[0] = y0; for(j = 0; j < m; j++) { k1 = fGet(x[j], y[j]); k2 = fGet(x[j] + h / 2, y[j] + (h / 2)*k1); k3 = fGet(x[j] + h / 2, y[j] + (h / 2)*k2); k4 = fGet(x[j] + h, y[j] + h*k3); y[j + 1] = y[j] + (h/6)*(k1 + 2*k2 + 2*k3 + k4); x[j + 1] = x[j] + h; } // Mostra os valores printf("Os valores de x e y sao: \n"); // PLOTANDO! plota (m, x, y); }
/* ------------------------------------------------------------------------ */ void Esforco() /* ------------------------------------------------------------------------ */ { int i = 0, ultimo = 0, le = 0, j = 0, t = 0, prox = 0, k, var; CriaJanelaGrafica(ESFORCO,0,0,MAXX,MAXY,0,""); tempo = (struct time*) malloc(sizeof(struct time)); var = VEF1UN; AmbienteFluxVol (); FVposBD(); LimpaTela(); AmbienteEsforco(); outtextxy(310,2,"PROVA DE ESFORCO"); if (Paciente.Nome){ valor[0].nome=Paciente.Nome; valor[0].clock=0; for(k=0;k<6;k++) valor[0].pontos[k]=0; } do { if (kbhit()) le=getch(); /* le possivel saida ou help*/ if (le==ESC) return; if (le==20) novopaciente(); if (le=='?'){ chama_help("01"); return;} le=''; if (valor[i].clock==0){ valor_pac[i] = 1; AmbienteFluxVol (); valor[i].clock= (int) (atoi(tempo->ti_hour)*60+ atoi(tempo->ti_min)); valor[i].pontos[0] = VEF1UN; /* Atualiza paciente*/ /* pt[0]=valor[i].pontos[0]; pt[1]=valor[i].pontos[1]; pt[2]=valor[i].pontos[4]; pt[3]=valor[i].pontos[3]; pt[4]=valor[i].pontos[4]; pt[5]=valor[i].pontos[5]; */ plota(valor[i].pontos,var,escala); /* plota os pontos e dados do paciente*/ le=getch(); /* le possivel saida ou help */ if (le==ESC) return; if (le==20) novopaciente(); if (le=='?') chama_help("01"); le=''; } gettime(tempo); valor[i].clock += (int) atoi(tempo->ti_hour)*60+ atoi(tempo->ti_min); aproxima(valor[i].clock); switch (valor[i].clock){ case 5: case 10: case 15: case 30: case 63: AmbienteFluxVol (); FVposBD(); AmbienteEsforco(); outtextxy(310,2,"PROVA DE ESFORCO"); j++; valor[i].pontos[j] = VEF1UN; plota(valor[i].pontos,var,escala); break; } i=prox; /* if ( le == F1) chama_help(114);*/ if ( (valor[i].clock == 63) || (le==ESC) ) { /* guarda(&valor[i]); for(t=i;t<ultimo;t++){ valor[t].nome=valor[t+1].nome; valor[t].clock=valor[t+1].clock; for(k=0;k<6;k++) { valor[t].pontos[k]=valor[t+1].pontos[k]; valor_pac[i] = 0; } } valor[ultimo].nome =""; valor[ultimo].clock =0; for(k=0;k<6;k++) valor[ultimo].pontos[k]=0; /* atribuicao suspeita */ ultimo--; } }while (valor_pac[i] !='');