Metody numeryczne

Główna klasa programu

using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;   namespace Eliminacja_Gaussa {
   
class Program {
      
static double[,] zawartosc = new double[2, 2];
      
static double[] wektor = new double[2];   static void Main(string[] args)
      
{    zawartosc[0, 0]=1; zawartosc[1, 0]=3; zawartosc[0, 1]=2; zawartosc[1, 1]=4;   wektor[0]=2; wektor[1]=3;   Macierz M = new Macierz(2, wektor, zawartosc);   double[] wynik = M.Gausse();   for(int i = 0; i < 2; i++)
         
{    Console.WriteLine(wynik[i]);
         
}   Console.ReadLine();
      
}
   
}
}
Klasa macierzy oraz metoda gaussa

using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;   namespace Eliminacja_Gaussa {
   
public class Macierz {
      
public int rozmiar;
      
public double[,] zawartosc;
      
private double[] wektorWyrazowWolnych;   public Macierz(int rozmiar, double[] wektorWyrazowWolnych, double[,] zawartosc)
      
{
         
this.rozmiar = rozmiar;
         
this.wektorWyrazowWolnych = wektorWyrazowWolnych;
         
this.zawartosc = zawartosc;
      
}   public double[] Gausse()
      
{    DoprowadzDoPostaciTrojkatnej();   return Rozwiazanie();
      
}   private double[] Rozwiazanie()
      
{
         
double[] wynik = new double[rozmiar];   wynik[rozmiar - 1] = wektorWyrazowWolnych[rozmiar - 1] / zawartosc[rozmiar - 1, rozmiar - 1];   for(int i = rozmiar - 2; i >= 0; i--)
         
{
            
double suma = 0;   for(int j = i +1; j < rozmiar; j++)
            
{    suma += zawartosc[i, j]* wynik[j];
            
}   wynik[i] = (wektorWyrazowWolnych[i]- suma)/ zawartosc[i, i];
        
}    return wynik;
      
}   private void DoprowadzDoPostaciTrojkatnej()
      
{
         
for(int kolumna = 0; kolumna < rozmiar; kolumna++)
         
{
            
for(int wiersz = kolumna + 1; wiersz < rozmiar; wiersz++)
            
{
               
double wspolczynnik =- (zawartosc[wiersz, kolumna]/ zawartosc[kolumna, kolumna]);   for(int i = kolumna; i < rozmiar; i++)
               
{    zawartosc[wiersz, i]+= wspolczynnik * zawartosc[kolumna, i];
               
}   wektorWyrazowWolnych[wiersz]+= wspolczynnik * wektorWyrazowWolnych[kolumna];
            
}
         
}
      
}
   
}
}


Dodaj komentarz






Dodaj

© 2013-2024 PRV.pl
Strona została stworzona kreatorem stron w serwisie PRV.pl