hasanpix
شنبه 21 اردیبهشت 1392, 11:12 صبح
دوستان سلام
من یه کدی رو نوشتم با این که کار میکنه بصورت درست ولی در آخر خطا میده گاهی اوقات هم بصورت کامل ران نمیشه. من فکر میکنم مشکل از نوع تعریف function ها و یا pointer هام باشه. اساتید اگه میشه یک نگاهی بیندازید به این سورس ما
ممنون
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <new>
using namespace std;
double** matrix(int, int);
void matrixzero(double**,int);
void matrixPrint(double**,int);
void matrixFree(double**,int);
void LUdecom(double**,double**,double**,int);
int main()
{
int N;
double** a;
double** l;
double** u;
cout << "******* LU Decomposition *******" << endl << endl;
cout << "Enter number of row of matrix n=" << endl;
cin >> N;
a = matrix(N, N);
l = matrix(N, N);
u = matrix(N, N);
cout << "Input matrix coefficients a(i,j)=" << endl;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
cin >> a[i][j];
matrixzero(l,N);
matrixzero(u,N);
for(int i=1; i<=N; i++)
l[i][i]=1;
LUdecom(a,l,u,N);
cout << "A:" << endl;
matrixPrint(a,N);
cout << "L:" << endl;
matrixPrint(l,N);
cout << "U: " << endl;
matrixPrint(u,N);
matrixFree(a,N);
matrixFree(l,N);
matrixFree(u,N);
return 0;
}
double** matrix(int n, int m)
{
double** p;
{
p = new double* [n];
for ( int i = 0; i <= n; i++ )
p[i] = new double[m];
}
return p;
}
void matrixzero(double **p, int n)
{
for ( int i = 0; i <= n; i++)
for ( int j = 0; j <= n; j++)
p[i][j]=0;
}
void LUdecom(double **p1,double **p2,double **p3, int n)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
double sum=0;
if (i>j)
p3[i][j]=0;
else
{
for(int s=1; s<=i-1; s++)
sum+= p2[i][s]*p3[s][j];
p3[i][j]=p1[i][j]-sum;
}
if (i<j)
p2[i][j]=0;
else
{
double sum=0;
for(int k=1; k<=j-1; k++)
sum+=p2[i][k]*p3[k][j];
p2[i][j]=(p1[i][j]-sum)/p3[j][j];
p2[i][i]=1;
}
}
}
}
void matrixPrint(double** p, int n)
{
for ( int i = 1; i <= n; i++)
{
for ( int j = 1; j <= n; j++)
cout << p[i][j]<<'\t';
cout<<endl;
}
}
void matrixFree(double **p, int n)
{
for ( int i = 0; i <= n; i++)
delete[] p[i];
delete[] p;
}
من یه کدی رو نوشتم با این که کار میکنه بصورت درست ولی در آخر خطا میده گاهی اوقات هم بصورت کامل ران نمیشه. من فکر میکنم مشکل از نوع تعریف function ها و یا pointer هام باشه. اساتید اگه میشه یک نگاهی بیندازید به این سورس ما
ممنون
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <new>
using namespace std;
double** matrix(int, int);
void matrixzero(double**,int);
void matrixPrint(double**,int);
void matrixFree(double**,int);
void LUdecom(double**,double**,double**,int);
int main()
{
int N;
double** a;
double** l;
double** u;
cout << "******* LU Decomposition *******" << endl << endl;
cout << "Enter number of row of matrix n=" << endl;
cin >> N;
a = matrix(N, N);
l = matrix(N, N);
u = matrix(N, N);
cout << "Input matrix coefficients a(i,j)=" << endl;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
cin >> a[i][j];
matrixzero(l,N);
matrixzero(u,N);
for(int i=1; i<=N; i++)
l[i][i]=1;
LUdecom(a,l,u,N);
cout << "A:" << endl;
matrixPrint(a,N);
cout << "L:" << endl;
matrixPrint(l,N);
cout << "U: " << endl;
matrixPrint(u,N);
matrixFree(a,N);
matrixFree(l,N);
matrixFree(u,N);
return 0;
}
double** matrix(int n, int m)
{
double** p;
{
p = new double* [n];
for ( int i = 0; i <= n; i++ )
p[i] = new double[m];
}
return p;
}
void matrixzero(double **p, int n)
{
for ( int i = 0; i <= n; i++)
for ( int j = 0; j <= n; j++)
p[i][j]=0;
}
void LUdecom(double **p1,double **p2,double **p3, int n)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
double sum=0;
if (i>j)
p3[i][j]=0;
else
{
for(int s=1; s<=i-1; s++)
sum+= p2[i][s]*p3[s][j];
p3[i][j]=p1[i][j]-sum;
}
if (i<j)
p2[i][j]=0;
else
{
double sum=0;
for(int k=1; k<=j-1; k++)
sum+=p2[i][k]*p3[k][j];
p2[i][j]=(p1[i][j]-sum)/p3[j][j];
p2[i][i]=1;
}
}
}
}
void matrixPrint(double** p, int n)
{
for ( int i = 1; i <= n; i++)
{
for ( int j = 1; j <= n; j++)
cout << p[i][j]<<'\t';
cout<<endl;
}
}
void matrixFree(double **p, int n)
{
for ( int i = 0; i <= n; i++)
delete[] p[i];
delete[] p;
}