Exemplo n.º 1
0
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);};
Exemplo n.º 2
0
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);

}
Exemplo n.º 3
0
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);

}
Exemplo n.º 4
0
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);

}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
/* ------------------------------------------------------------------------ */
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] !='');