Buena a todos de nuevo
Este otro programa es de pivoteo parcial tengo el mismo problema que el anterior
las soluciones no sales pero me parece que si implemente la lógica correcta al hacer pruebas de escritorio
El método consisten en tener intercambiar filas para evitar ceros en la diagonal principal, por eso el elemento pivote(números en la diagonal) tiene que se mayor en valor absoluto respecto a cada columna, y si este elemento pivote es menor en su columna por el elemento mayor, ademas se se intercambia toda la fila
De ahí es el metodo de gauss simple para despejar las incógnitas
Aquí
un ejemplo de una matriz:
matriz A
2 1 -3
-1 3 2
3 1 -3
vector B
-1
12
0
la matriz resultante --- >
3 1 -3
0 10/3 1
0 0 -11/10
vector B
0
12
-11/5
Soluciones:
X=1
Y=3
Z=2
EL PROGRAMA
[I]//METODO PIVOTEO
#include <fstream>
#include <conio>
#include <ctype>
#include <string.h>
#include <stdio>
#include <dos.h>
#include <windows.h>
#include <time.h>
#include <math.h>
void main()
{
float min,paso,g,b[100][100],c[100],h[100][100],inv[100][100],ind[100],matriz[100][100],det,a[100][100],fo[100],m0[100][100],f1[100],f2[100],m1[100][100],factor,xn[100],sum;
int may,fmay,f,i,j,n,m,p,k,l,s=1,km,km1,n1,n2;
if(s!=1)
{
o:
}else{
r:
clrscr();
cout<<"INGRESE EL NUMERO DE VARIABLES"<<endl;
cin>>n;
if(n<=1)
{
cout<<"ERROR!, Ingrese mas de una variable para completar el sistema "<<endl;
getch();
goto r;
}
else{
cout<<"=========================================== ===================================";
km=1;
m=4;
p=10;
for(j=1;j<=n;j++)
{
gotoxy(p,m);cout<<"X"<<j;
p=p+6;
}
gotoxy(p,m);cout<<"C";
m=6;
for(i=1;i<=n;i++)
{
p=10;
for(j=1;j<=n;j++)
{
gotoxy(p,m);scanf("%f",&matriz[i][j]);
fo[km]=matriz[i][j];
km++;
p=p+6;
}
gotoxy(p,m);cin>>ind[i];
fo[km]=ind[i];
km++;
m=m+2;
}
}
cout<<"=========================================== ===================================";
//Pivoteo parcial
for(i=1;i<=n-1;i++)
{
may=abs(matriz[i][i]);
fmay=i;
for(j=i+1;j<=n;j++)
{
if(abs(matriz[j][i])>may)
{
may=abs(matriz[j][i]);
fmay=j;
}
}
for(k=1;k<=n;k++)
{
paso=matriz[i][k];
matriz[i][k]=matriz[fmay][k];
matriz[fmay][k]=paso;
}
paso=ind[i];
ind[i]=ind[fmay];
ind[fmay]=paso;
//Eliminacion
for(j=i+1;j<=n;j++)
{
min=matriz[j][i]/matriz[i][i];
for(k=1;k<=n;k++)
{
matriz[j][k]=matriz[j][k]-(min*matriz[i][k]);
}
ind[j]=ind[j]-(min*ind[i]);
}
}
//Despeje de las incognitas
xn[n]=ind[n]/matriz[n][n];
for(i=n-1;i<=1;i--)
{
xn[i]=ind[i];
for(j=i+1;j<=n;j++)
{
xn[i]=xn[i]-(matriz[i][j]*xn[j]);
}
xn[i]=xn[i]/matriz[i][i];
}
clrscr();
m=4;
for(i=1;i<=n;i++)
{
p=10;
for(j=1;j<=n;j++)
{
gotoxy(p,m);cout<<matriz[i][j];
p=p+6;
}
m=m+2;
}
cout<<"Las soluciones son: "<<endl;
for(i=1;i<=n;i++)
{
cout<<xn<<endl;
}
getch();
}
}