Mostrando postagens com marcador Matemática. Mostrar todas as postagens
Mostrando postagens com marcador Matemática. Mostrar todas as postagens

segunda-feira, 6 de junho de 2011

Runge Kutta de 4ª ordem em C

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//Definindo a equação
double f(double t, double y){
                  return(9.8 - 12.5 * 12.5 / 68 * y);//coloque a função do seu problema
                            }                                         //Nesse caso: dy/dt=9.8-(12,5²/68)*y, mas vale pra qualquer função
int main(){
   
    FILE*arq;
    int N, //quantidade de partições do domínio da solução y(t)
        i;
    double //troque os valores para se adequar ao seu problema
        a=0.0, b=8.0, //extremos do domínio da solução y(t)
        alfa=0, //y(t_0)=y(a)=alfa
        h=0.01, //tamanho do passo
        w,  //aproximações da solução y(t) garedas pelo método
        t,  //domínio da solução y(t)
        K_1,K_2,K_3,K_4;
       
 //passo 1      
 //Inicialização
 t=a;
 w=alfa;
 N=int(b/h)+1;
 arq=fopen("Runge_Kutta_4_Ordem.txt","w");
       fprintf(arq,"\n    Aproximacoes da solucao pelo método de Runge-Kutta de 4 Ordem:\n\n");
    fprintf(arq,"\n  **********************************");
    fprintf(arq,"\n        t            R_K ordem 4");
    fprintf(arq,"\n    %lf     %lf",t,w);
   
 //passo 2   
 for(i=1;i<=N;i++){
                   
            //passo 3
            K_1=h*f(t,w);
            K_2=h*f(t+h/2.0,w+K_1/2.0);
            K_3=h*f(t+h/2.0,w+K_2/2.0);
            K_4=h*f(t+h,w+K_3);
           
            //passo 4
            w=w+(K_1+2*K_2+2*K_3+K_4)/6;
            t=a+i*h;
            if(t==2.4){
                      printf("\nSolucao para t=%lf:     %lf",t,w);
                      }
            if(t==6.0){
                      printf("\nSolucao para t=%lf:     %lf",t,w);
                      }
            if(t==8.0){
                      printf("\nSolucao para t=%lf:     %lf\n\n",t,w);
                      }
            //passo 5
            fprintf(arq,"\n    %lf     %lf",t,w);
                   }
 fprintf(arq,"\n  *************************************");
 fclose(arq);
 printf("==> O restante das solucoes foram gravadas no arquivo Runge_Kutta_4_Ordem.txt.");
 getchar();
 getchar();
          }

terça-feira, 10 de maio de 2011

Calcular orbitais de uma matriz em C

#include<stdio.h>
#include<stdlib.h>
int main(void){
int D[3][3], i, j, k, A[3][3], cont2, v[3], cont, B[3][3], d[3];

    printf("Calcularemos as orbitas de um vetor, mas antes, entre com uma matriz A: \n\n");
    for(i=0;i<3;i=i+1){//Entrada dos valores da Matriz
             for(j=0;j<3;j=j+1){
                  printf("Digite o valor de A[%d][%d]: ", i , j);//Nao coloquei \n pq nao queria um espacamento muito grade, uma vez q eu digito e dou enter ele ja pula linha mesmo sem o \n
                  scanf("%d", &A[i][j]);         
             }
    }
    printf("\nAgora digite um vetor para calcularmos suas orbitas: \n\n");
    for(j=0; j<3; j=j+1){
                  printf("Digite o valor de v[%d]: ", j);
                  scanf("%d", &v[j]);
             }
           for(i=0; i<3; i=i+1){
             for(j=0;j<3;j=j+1){
                                D[i][j]=A[i][j];
                                B[i][j]=0;
                                }
                                }  
    for(cont=0;cont<50;cont++){
      for(i=0; i<3; i=i+1){
                d[i]=0;
                }
            
                               
                               
                                               
             for(i=0; i<3; i=i+1){
             for(j=0;j<3;j=j+1){
                                for (k=0;k<3;k=k+1){
                                B[i][j] = B[i][j] + D[i][k] * A[k][j];
            }
        }
      }
       for(i=0; i<3; i=i+1){
             for(j=0;j<3;j=j+1){
                                D[i][j]=B[i][j];
                               
                                }
                                }
      
       for(i=0; i<3; i=i+1){
             for(j=0;j<3;j=j+1){
                               
                               
                                d[i] = d[i] + B[i][j] * v[j];
           
        }
        }
                  
       
        printf("A^%d * v = (%d,%d,%d)  \n",cont, d[0],d[1],d[2]);
        }
                     
                     
getchar();
getchar();                     
                      }

Algoritimo Estendido de Euclides em C

Algoritimo simples para o cálculo do algoritimo estendido de Euclides em C

#include<stdio.h>
int main(){
    int a, b, q, r2b, r1b, r, op, x2b, x1b, x, y2b, y1b, y, mdcab, linhas;
   for(;;){
            printf("\n           MENU\n\n");
            printf("1 - Calcular MDC\n");
            printf("2 - Sair\n \nOpcao:");
            scanf("%d",&op);
            if(op==1){
    printf("\nEntre com dois numeros inteiros, primeiro o maior, depois o menor:\n");
    scanf("%d",&a);
    scanf("%d",&b);
    r=1;
    x2b=1;
    y2b=0;
    x1b=0;
    y1b=1;
    r2b=a;
    r1b=b;
    linhas=2;
    while(r!=0){
                q=r2b/r1b;
                x=x2b-q*x1b;
                y=y2b-q*y1b;
                r=r2b-r1b*q;
                linhas=linhas+1;
                x2b=x1b;
                x1b=x;
                y2b=y1b;
                y1b=y;
                r2b=r1b;
                r1b=r;
                }
    mdcab=a*x2b+b*y2b;
    printf("\n MDC(%d,%d)=%d\n",a,b,mdcab);
    printf("x=%d\n",x2b);
    printf("y=%d\n",y2b);
    printf("O Algoritmo Extendido de Euclides executou %d linhas",linhas);
}
else if(op==2){
     break;
     }
     else{
          printf("Opcao inexistente");
}
}
}