jueves, 8 de noviembre de 2007

ELIMINACION GAUSSIANA TEST

#include
#include
#include
#include

float A[4][5]=
{{1,-1, 2,-1, -8},
{2,-2, 3,-3,-20},
{1, 1, 1, 0, -2},
{1,-1, 4, 3, 4}};

/*

float A[4][5]=
{{1, 1, 1, 1, 6 },
{2, 2, 1, 3,12},
{1, 1, 2, 1, 8},
{1, 1, 4, 3, 4}};
*/

float x[4];

float cte,m;
int n=4;
int i,j,k,p;

void imprimeMatriz();
void intercambiarEcuaciones(int ori, int des);
void reducirEcuacion(float m,int j,int i);
int entero_mas_peq(int i);

int main(){

printf("\n Matriz ampliada \n");
imprimeMatriz();

for(i=0;i
p = entero_mas_peq(i);

if(p!=i){
intercambiarEcuaciones(p,i);
imprimeMatriz();
}


for(j=i+1;j //if(A[j][i]!=0){
m = A[j][i]/A[i][i];
reducirEcuacion(m,j,i);
imprimeMatriz();
//}
}



}// for para i

if(A[n-1][n-1]==0){
printf("No existe solucion unica ");
getch();
exit(0);
}

x[n-1]=A[n-1][n]/A[n-1][n-1];
printf("x%d = %5.2f / %5.2f = %5.2f\n\n",n-1,A[n-1][n],A[n-1][n-1],x[n-1]);

for(i=n-2;i>=0;i--){
cte=0;
printf("x%d = (%5.2f",i,A[i][n]);
for(j=i+1;j cte +=A[i][j]*x[j];
printf(" -(%.2f) * x%d",A[i][j],j);
}
x[i]=(A[i][n]-cte)/A[i][i];
printf(" )/%5.2f = %5.2f\n\n",A[i][i],x[i]);
}

for(i=0;i printf("x%d=%5.2f\n",i,x[i]);
}
getch();

return 0;
}


int entero_mas_peq(int i){
int cont;
int p;
p = i;

for(cont=0;cont < n;cont++){
if(!( i <= p && p < n && A[p][i] != 0)){
p++;
if(p==n){
printf("No existe solucion unica ");
getch();
exit(0);
}
}
}

return p;
}

/************************************************************************
*
*
*
*************************************************************************/

void intercambiarEcuaciones(int ori, int des){
int cont,tmp;

for(cont=0 ; cont <= n ; cont++){
tmp = A[des][cont];
A[des][cont] = A[ori][cont];
A[ori][cont] = tmp;
}

printf("(E%d) <-> (E%d) \n",ori,des);
}

void reducirEcuacion(float m,int j,int i){
int cont;

for(cont=0;cont <= n ;cont++){
A[j][cont] = A[j][cont]-m*A[i][cont];
}

printf("(E%d - %4.2f * E%d) <-> (E%d) \n",j,m,i,j);
}

void imprimeMatriz(){

int r,c;

printf("\n");
for(r=0;r < n;r++){
printf("\t E%d : ",r);
for(c=0 ;c <=n ; c++){
printf("%10.2f",A[r][c]);
}
printf("\n");
}

printf("\n");
}

BISECCION C

#include
#include
#include


float a; /* valor a (extremo izquierdo del intervalo) */
float b; /* valor b (extremo derecho del intervalo) */
float c; /* valor c (punto medio del intevalo) */
float fa; /* f(a) */
float fb; /* f(b) */
float fc; /* f(c) */
float ea; /* error aproximado */
float tol; /* valor de rolerancia */

float f(float x){
return (pow(x,3)-1.5) ;
}

void biseccion();

int main(){

char opc=' ';


while(opc!='n'){

clrscr();

biseccion();

printf("\n\n\t\t Correr nuevamente [s/n]= ");
fflush(stdin);
scanf("%c",&opc);
}


return 0;
}

void biseccion(){

int i=0,n;

clrscr();
printf("\n\t METODO DE BISECCION\n");
printf("\n\t Este metodo busca una raiz en un intervalo dado.");
printf("\n\t escribir el intervalo (a,b) a buscar\n\n");
printf("\t\t a= ");
scanf("%f",&a);
printf("\t\t b= ");
scanf("%f",&b);
printf("\n\t Con una tolerancia de :\n");
printf("\t\t Tolerancia = ");
scanf("%f",&tol);

fa=f(a);
fb=f(b);

if(fa*fb<0){
n=0;
clrscr();
printf("\n\n\t METODO DE BISECCION\n");
printf("\n\ti\ta\tb\tc\tf(c)\tError");
printf("\n\t------------------------------------------------");
ea = fabs((b-a)/b);

while(ea>tol)
{
c = (a+b)/2;
fc = f(c);
ea = fabs((b-a)/b);
printf("\n\t%d \t%6.4f\t%6.4f\t%6.4f\t%6.4f\t%6.4f",i+1,a,b,c,fc,ea);
if(fa*fc<0) {
b=c;
} else {
a=c;
}
i++;

} //fin del for de biseccion
printf("\n\n\t Tolerancia = %f",tol);
printf("\n\n\t Error aproximado = %f",ea);
printf("\n\n\t La raiz aproximada es x= %f",c);
}//fin del if para biseccion
else{
printf("\n\t En este intervalo no hay una raiz para la funcion");
}//fin del if principal
}

NEWTON EAPHSON C

#include
#include

int derivada(void)
{

float b,c,d,e,i,j,f,fp,p,p0,n0;
int a;
clrscr();
printf("Dame el numero del que quieres sacar la raiz\n");
scanf("%d",&a);
printf("Desde que numero quieres empezar a iterar\n");
scanf("%f",&p0);
printf("Dame el numero de iteraciones\n");
scanf("%f",&n0);

do
{
i=1;
p=p0-((pow(p0,3)-a)/(3*pow(p0,2)));

if(abs(p-p0)<.001)
{
printf("la raiz de %d es %f",a,p);
getch();
break;
}

p0=p;
i++;

}
while(i printf("El metodo fracaso despues de N0 iteraciones N0=%f",n0);
}
main()
{
derivada();
}

OBJETIVO

Seguramente si eres estudiante de la Facultad de Ingenieria de la UNAM y llevas la materia de programación Avanzada y Métodos Numéricos, sabrás lo feo que es que tu profesor de laboratorio vaya mas avanzado que el de teoria o a la inversa, y habrás conocido la desesperación de no poder hacer un programa, si eres uno de esos, te invito a que compartas con la comunidad los códigos de los programas, no con el objeto de copiarlos literalmente (eso es medio estúpido) pero si para que te sirva ver el código cuando no tienes idea de lo que tienes que hacer,, el objetivo pues es que los códigos publicados sirvan como una guía a los pasos que debemos seguir.
PUBLICA Y COMPARTE!!!!