Bu gün algoritama ve programlama Matrisin Ters Alma işlemini sizler için sunmaya çalışacağız, umarız bu ders faydalı olacak.

package matristersalma;
import java.util.Scanner;
public class MatrisTersAlma {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Kare matrisin bouytunu gir");
		
		int n = input.nextInt();
		double a[][]= new double[n][n];
		System.out.println("Matrsin elamanlarini gir:");
		for(int i=0; i<n; i++)
			for(int j=0; j<n; j++)
				a[i][j] = input.nextDouble();
		double d[][] = invert(a);
		
		System.out.println("Matrisin tersi(inverse) : ");
		for(int i=0; i<n; ++i)
		{
			for(int j=0; j<n; ++j)
				
			{
				System.out.println(d[i][j]+" ");
			}
		    System.out.println();
		}
		input.close();
	}
	public static double[][] invert(double a[][])
	{
		int n =a.length;
		double x[][] = new double[n][n];
		double b[][] = new double[n][n];
		int index[] = new int[n];
		for(int i=0; i<n; ++i)
			b[i][i] = 1;
		
		//Matrisi ust ucgen matris haline donusturur
		gaussian(a, index);
		
		//b[i][j] degerlarini gunceller
		for(int i=0; i<n-1; ++i)
			for(int j=i+1; j<n; ++j)
				for(int k=0; k<n; ++k)
					b[index[j]][k] -= a[index[j]][i]*b[index[i]][k];
		
		// Geriye dogru yerine koyma gercklestirilir
		for(int i=0; i<n; ++i)
		{
			x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
			for (int j=n-2; j>=0; --j)
			{
				x[j][i] = b[index[j]][i];
				for(int k=j+1; k<n; ++k)
				{
					x[j][i] -= a[index[j]][k]*x[k][i];
				}
				x[j][i] /= a[index[j]][j];
			}
		}
		return x;
 	}
	public static void gaussian(double a[][], int index[])
	{
		int n =index.length;
		double c[] = new double[n];
		
		//index degeri hazilanir
		for(int i=0; i<n; ++i)
			index[i] = i;
		
		for(int i=0; i<n; ++i)
		{
			double c1 = 0;
			for(int j=0; j<n; ++j)
			{
				double c0 = Math.abs(a[i][j]);
				if (c0 > c1) c1 = c0;
			}
			c[i] = c1;
		}
		int k = 0; 
		for(int j=0; j<n-1; ++j)
		{
			double pi1 = 0;
			for(int i=j; i<n; ++i)
			{
				double pi0 = Math.abs(a[index[i]][j]);
				pi0 /= c[index[i]];
				if (pi0 > pi1)
				{
					pi1 = pi0; 
					k = i;
				}
			}
			int itmp = index[j];
			index[j] = index[k];
			index[k] = itmp;
			for(int i=j+1; i<n; ++i)
			{
				double pj = a[index[j]][j]/a[index[j]][j];
				
				a[index[i]][j] = pj;
				for(int l=j+1; l<n; ++l)
					a[index[i]][l] -= pj*a[index[j]][l];			
			}
		}
	}	
}

Bir kaç örenk çıktısı aşağıda verilmiş, onları bakarak kodla karşılaştırabilrisiniz, daha iyi anlamanız için.

Birinci kod çıtısı
İkinci kod çıktısı, aşağıda devamı var
İkinci kod çıkıtısı, devamı

Bu dersimizde Algo ve Prog matris Ters Alma işlemini sunmaya çalıştım umarım bu dersten fayda almışsınız. Tabi matrislar konusu biraz zor olabilir, ama çalışarak bu problemi ortadan kaldırabilirsiniz.

İleri hayatınızda başarılar dilerim.

 #EvdeKal #HayatEveSıgar

Kaynak: www.kriptarium.com