#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void swopInt(int *a,int *b)
{
int temp=(*a);
(*a)=(*b);
(*b)=temp;
}
void swopDouble(double *a,double *b)
{
double temp=(*a);
(*a)=(*b);
(*b)=temp;
}
void LUPDecomposition(double **A,int n,int *pi)
{
for(int i=0;i<n;i++)
{
pi[i]=i;
}
for(int k=0;k<n;k++)
{
double p=0.0;
int kk=0;
for(int i=k;i<n;i++)
{
if(abs(A[i][k])>p)
{
p=abs(A[i][k]);
kk=i;
}
}
if(p==0)
{
printf("singular matrix");
return;
}
swopInt(&pi[kk],&pi[k]);
for(int i=0;i<n;i++)
swopDouble(&A[k][i],&A[kk][i]);
for(int i=k+1;i<n;i++)
{
A[i][k]=A[i][k]/A[k][k];
for(int j=k+1;j<n;j++)
{
A[i][j]=A[i][j]-A[i][k]*A[k][j];
}
}
}
}
void printA(double **A,int n
算法导论 矩阵运算 LUP
最新推荐文章于 2024-11-29 20:23:33 发布
