Poniżej zamieszczam treść zadania, za które nie wiem jak się szczerze zabrać.
0
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.