[ create a new paste ] login | about

Link: http://codepad.org/55uflV29    [ raw code | output | fork ]

C++, pasted on Mar 18:
#include <iostream>

void LUDecRes(double **A, int Row, int Col, double *B, double *res){
	int row = Row;
	int col = Col + 1;

	double **L, **U, **Ar;

	L	= new double*[row];
	U	= new double*[row];
	Ar	= new double*[row];

	for(int i = 0; i < row; ++i){
		L[i]	= new double[row];
		U[i]	= new double[col];
		Ar[i]	= new double[col];

		for(int j = 0; j < row; ++j)
			Ar[i][j] = A[i][j];
		Ar[i][col - 1] = B[i];
	}

	for(int i = 0; i < row; ++i){
		U[i][i] = 1;
		L[i][i] = 0;

		L[i][0] = Ar[i][0];
		U[0][i + 1] = Ar[0][i + 1] / L[0][0];
	}

	for(int i = 1; i < row; ++i){
		for(int j = i; j < row; ++j){
			double sum = 0;

			for(int c = 0; c < i; ++c)
				sum += L[j][c]*U[c][i];
			L[j][i] = Ar[j][i] - sum;

			sum = 0;

			for(int c = 0; c < i; ++c)
				sum += L[i][c]*U[c][j + 1];
			U[i][j + 1] = ( Ar[i][j + 1] - sum ) / L[i][i];
		}
	}

	for(int i = row - 2; i >= 0; --i){
		double sum = 0;
		for(int c = i + 1; c < row; ++c)
			sum += U[i][c]*U[c][row];
		U[i][row] -= sum;
	}

	for(int i = 0; i < row; ++i)
		res[i] = U[i][row];

	for(int i = 0; i < row; ++i){
		delete[] L[i];
		delete[] U[i];
		delete[] Ar[i];
	}

	delete[] L;
	delete[] U;
	delete[] Ar;
}

int main(){

	double arr_v[3] = {7, 4, 6};
	double arr_m[3][3] = 
	{
		{10,-7, 0},
		{-3, 2, 6},
		{ 5,-2, 5}
	};

	double *arrV, *res, **arrM;

	arrV	= new double[3];
	res		= new double[3];
	arrM	= new double*[3];

	for(int i = 0; i < 3; ++i){
		arrM[i]	= new double[3];
		arrV[i] = arr_v[i];
		for(int j = 0; j < 3; ++j)
			arrM[i][j] = arr_m[i][j];
	}

	LUDecRes(arrM, 3, 3, arrV, res);
	std::cout << "``Result`` : ";

	for(int i = 0; i < 3; ++i)
		std::cout << res[i] << ' ';

	std::cout << std::endl;

	for(int i = 0; i < 3; ++i)
		delete[] arrM[i];


	delete[] arrM;
	delete[] arrV;
	delete[] res;

	return 0;
}


Output:
1
``Result`` : -0.442105 -1.63158 0.989474 


Create a new paste based on this one


Comments: