Rozwiązywanie układów równan kramerowskich przy użyciu elimincji Gaussa C++

0

Cześć!
Piszę program jak w temacie:)

 


#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <math.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int ilosc=0; // ilosc rozwnan i ilosc niewiadomych
	double macierz[2][3];
	double X[2]; // wektor niewiadomych
	double maximum=0;
	int r=0,i=0,j=0;
	
	cout << "Podaj ilosc rownan: " << endl; // dla ilu rownan chcemy wypelnic macierz?
	cin >> ilosc;
	
	for(int i =0 ; i<ilosc; i++) /// wypelniamy macierz dowolnymi wartosciami ////////////////////
	{
		for(int j=0; j<ilosc+1; j++)
		{
			cout << "Podaj wartosc [" << i << "][" << j << "] : ";
			cin >> macierz[i][j];
		}
	}//////////////// koniec petli pobierajacej wspolczynniki rownania do macierzy ///////

	
	for( int k =1; k<ilosc; k++ )
	{
		maximum = macierz[k][k];
		r=k;
		for( i=k; i<ilosc; i++)
		{
			if (fabs(macierz[i][k]) > fabs(maximum)) // jesli wartosc bezwzgledna...
			{
				maximum=macierz[i][k];
				r=i;
			}
		}
		if(maximum == 0)
		{
			cout << "Macierz jest macierza osobliwa i rozwiazanie rownania to 0" << endl;
			
		}
		else
		{
			for(j=0; j<(ilosc+1); j++)
			{
				double macierz2=0;
				macierz2 = macierz[k][j];
				macierz[k][j] = macierz[r][j];
				macierz[r][j] = macierz2;
			}
		}

		for(int i =(k+1);i<ilosc;i++)
		{
			for(int j=(k+1); j<ilosc;j++)
			{
				macierz[i][j] = (macierz[i][j] -(macierz[i][j]*macierz[k][j]))/maximum;
			}
		}

	}

	for(int i = ilosc; i>1; i--)
	{
		double s=0; // wprowadzamy zmienna pomocnicza
		for(int m=(i+1); m < ilosc; m++)
		{
			s = s + (macierz[i][m]*X[m]);
		}
			X[i]=((macierz[i][ilosc+1]-s)/(macierz[i][i]));
	}

	cout << endl << endl; // przerwa

	//////////////// wyswietlanie rozwiazan ////////////////////////////////////////////
	for(int i =0; i < ilosc; i++) // zwracamy obliczone wartosci rownania
	{
		cout << "Rozwiazanie rownania nr [" << i << "] wynosi =" << X[i] << endl;
	}
	///////////// koniec wyswietlania rozwiazan /////////////////////////////////////

	system("PAUSE");
	return 0;
}


Tok rozumowania:
1)Pobieram od użytkownika ilosc równan które bede chciał obliczyć
2)Wpisuje wartosci wspolczynnikow do macierzy
3)Wykonuje algorytm
4)Wyswietlam wyniki

Program sie kompiluje, ale wyswietla mi jakies okropnie dziwne liczby i błąd o stosie.

user image

A na wyjsciu mamy:
user image

Wywala mi z warunku ,że macierz jest osobliwa a chyba nie powinno tak być...

Nie wiem o co chodzi.

Pozdrawiam i proszę o pomoc:)

1

Dobra nie mogłem sie juz nas was doczekać i sam do tego doszedłem.
Możecie zamknąć temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1