Zadanie którego nie umiem zrobić.

0

Poniżej zamieszczam treść zadania, za które nie wiem jak się szczerze zabrać.
title

0

-- nieaktualne --

0
#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

void wypiszMacierz(double **macierz, int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << setw(10) << macierz[j][i]; 
		}
		cout << endl;
	}
}

void wypiszWektor(double *wektor, int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << setw(10) << wektor[i];
	}
	cout << endl;
}

void thomas(double *l, double *d, double *u, int n) //Algorytm Thomasa przeksztalcajacy glowna przekatna d na wektor teta
{
	
	for (int i = 1; i <= n; i++)
	{
		d[i] = d[i] - (l[i - 1])/d[i - 1]*(u[i - 1]);

	}
}

void rozwiazanie_ukladu(double *l, double *d, double *u, double *b, double *x, int n)
	{
		for (int i = 1; i < n + 1; i++) 				// Przeksztalcenie wektora b na r
			b[i] = b[i] - l[i - 1]/d[i - 1]*b[i - 1];
		x[n] = b[n] / d[n];								// Obliczanie rozw.
		for (int i = n - 1; i >= 0; i--)
		{
			x[i] = (b[i] - u[i] * x[i + 1]) / d[i];
		}
	}

int main(void)
{
	int n = 6;
	double **a = new double *[n]; 	// Alokacja pamięci
	for (int i = 0; i < n; i++)
	{
		a[i] = new double [n];		// Alokacja pamięci
	}
	double *b = new double[n];
	double *x = new double[n];

	for (int i = 0; i < n; i++)
	{
		for( int j = 0; j < n; j ++)
		{
			a[i][j] = 0;
		}
	}	
	a[0][0]= 30;     a[1][0] = 2.0/3;
	a[0][1] = 3.0/4; a[1][1] = 20;    a[2][1] = 5.0/6;
				     a[1][2] = 7.0/8; a[2][2] = 10;      a[3][2] = 9.0/10;
				  				      a[2][3] = 11.0/12; a[3][3] = 10;      a[4][3] = 13.0/14;
				  								         a[3][4] = 15.0/16; a[4][4] = 20;	   a[5][4] = 17.0/18;
				  													        a[4][5] = 19.0/20; a[5][5] = 30;
				  												
	b[0] = 94.0/3; b[1] = 173.0/4; b[2] = 581.0/20; b[3] = -815.0/28; b[4] = -6301.0/144; b[5] = -319.0/10;
	
	cout << "### Dane wejsciowe ###" << endl;	
	cout << "Macierz A:" << endl;
	wypiszMacierz(a, n);
	cout << "Wektor b:" << endl;
	wypiszWektor(b, n);
	cout << endl;
	
	double *l = new double[n-1];
	double *d = new double[n];
	double *u = new double[n-1];
	
	for (int i = 0; i < n; i++) // Przekształcenie macierzy na wektory l, u, d
	{
		if (i < n - 1)
		{
			l[i] = a[i+1][i];
			u[i] = a[i][i+1];
		}
		d[i] = a[i][i];		
	}
	
	cout << "### Macierz przeksztalcona na wektory l, u, d ###" << endl;
	cout << "Wektor l:" << endl;
	wypiszWektor(l, n - 1);
	cout << "Wektor d:" << endl;
	wypiszWektor(d, n);
	cout << "Wektor u:" << endl;
	wypiszWektor(u, n - 1);

	cout << endl;
	
	thomas(l, d, u, n);
	
	cout << "### Wektory przeksztalcone metoda thomasa ###" << endl;
	cout << "Wektor l:" << endl;
	wypiszWektor(l, n - 1);
	cout << "Wektor d:" << endl;
	wypiszWektor(d, n);
	cout << "Wektor u:" << endl;
	wypiszWektor(u, n - 1);
	cout << endl;
	
	rozwiazanie_ukladu(l, d, u, b, x, n);

	cout << "### Rozwiazanie ukladu ###" << endl;	
	cout << "Wektor x:" << endl;
	wypiszWektor(x, n);

}

Program jest CHYBA zrobiony dobrze - dostaje tylko wyniki w postaci inf i -inf. Ktoś pomoże mi to naprawić?

0

Program jest CHYBA zrobiony dobrze - dostaje tylko wyniki w postaci inf i -inf. Ktoś pomoże mi to naprawić?

No to skoro daje złe wyniki to NA PEWNO jest zrobiony źle, czyż nie? Skoro dostajesz inf to dzielisz gdzieś przez 0.

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