Układ równań metoda LU

0

Witam mam pewien problem z zadaniem które dostałem do rozwiązania. Powinienem dostać takie rozwiązania jak: x1=1, x2=-1 oraz x3=2 natomiast dostaję same 0. Ktoś może powiedzieć w czym problem ? Tablice dawałem gotowe bo na razie testuje by to w ogóle działało.

 #include <iostream>

using namespace std;

int main()
{
    int L[3][3]={{1,0,0},{3,1,0},{5,3,1}};
    int U[3][3]={{6,3,2},{0,4,3},{0,0,5}};
    int B[3]={7,23,51};
    int y[3]={0};
    int x[3]={0};
    float s=0;

    for(int i=1;i<3;i++)
{
    s=0;
        for(int k=1;k<i-1;k++)
        {
       s=s+L[i][k]*y[k];
        }
y[i]=1/(L[1][1])*(B[i]-s);

}


    for(int i=3;i<1;i--)
{
    s=0;
        for(int k=i+1;k<3;k++)
        {
       s=s+U[i][k]*x[k];
        }
x[i]=1/(U[1][1])*(y[i]-s);

}


        return 0;
}
1

Pozwoliłem sobie sformatować Twój kod, bo jest dość nieczytelny.

#include <iostream>

using namespace std;

int main()
{
    int L[3][3] = { { 1, 0, 0 }, { 3, 1, 0 }, { 5, 3, 1 } };
    int U[3][3] = { { 6, 3, 2 }, { 0, 4, 3 }, { 0, 0, 5 } };
    int B[3] = { 7, 23, 51 };
    int y[3] = { 0 };
    int x[3] = { 0 };
    float s = 0;

    for (int i = 1; i < 3; i++) {
        s = 0;
        for (int k = 1; k < i - 1; k++) {
            s = s + L[i][k] * y[k];
        }
        y[i] = 1 / (L[1][1]) * (B[i] - s);
    }

    for (int i = 3; i < 1; i--) {
        s = 0;
        for (int k = i + 1; k < 3; k++) {
            s = s + U[i][k] * x[k];
        }
        x[i] = 1 / (U[1][1]) * (y[i] - s);
    }

    return 0;
}

Jak teraz wyraźnie widać, druga pętla ma zły warunek i wykonuje się zawsze zero razy.

0
kq napisał(a):

Pozwoliłem sobie sformatować Twój kod, bo jest dość nieczytelny.
Jak teraz wyraźnie widać, druga pętla ma zły warunek i wykonuje się zawsze zero razy.

Chodzi o tą?

 for (int k = 1; k < i - 1; k++)

Dawałem już różne warunki i nic :/

0
 for (int i = 3; i < 1; i--) {

i jest równe 3. Nie jest mniejsze od 1, wobec tego nigdy w tę pętlę nie wejdzie.

0

Tylko, że już mam jakiś problem podczas obliczania tabeli Y bo tam także nie oblicza mi dobrze wartości

1

No to tak:

  1. Weź kartkę do ręki i policz krok po kroku na papierze co gdzie powinno po kolei wychodzić
  2. Uruchom program z debugerem i przejdź krok po kroku, sprawdzając ze swoją kartką aż trafisz na błąd.
  3. Profit! :P

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