• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Iteracyjna metoda Siedla - pomocy!

VPS Starter Arubacloud
0 głosów
111 wizyt
pytanie zadane 4 stycznia 2018 w C i C++ przez chacken Użytkownik (820 p.)
edycja 4 stycznia 2018 przez chacken

Witam, siedzę już nad tym od tygodnia po 9h dziennie, głowa mi już pęka dosłownie i nie przesadzam, część w pracy próbuję, potem od 17 aż do teraz... kolejny dzień... zmieniam kod, szukam rozwiązań po necie, co rusz zaczynam od nowa i znowu źle, i źle i źle... i znowu od początku... mam już dosyć a czas jest do jutra... 

Pewna pani 'profesor' na studiach zaocznych bawi się w przedszkole i grozi karami za źle napisany kod... musi być tak jak ona chce i jak jest w instrukcji, inaczej będzie kara dodatkowe równanie do obliczenia. I nie możemy się odzywać i proponować swoich rozwiazań bo za każdą próbę obniży ocenę, na zajęciach też nie mozemy pytać bo wszystko jest w instrukcji.

To tak z wyżalania się.... studia to jedna wielka pier$%^&na parodia, przepraszam ale głowa mi już pęka. Zaznaczam że studiuje zaocznie... sami dorośli ludzie...
Ehh.... do rzeczy...

Tutaj troche chaosu jaki ta Pani mi napisała w zaszycie:
Chodzi wzór numer 32 muszę go (w parze z kolegą który uznał że rezygnuje... więc jestem sam) przerobić na kod programu:

Jak czegoś nie ma to są zmienne globalne (poniżej pastebina do kodu całego dałem

void liczSiedela() {
    double s1 = 0, s2 = 0;
    int licznik = 0;
    double suma = 1;

    do {
        suma = 0;
        for (int i = 0; i < n; i++) {
            s1 = 0;
            s2 = 0;
            if(licznik == 0) {
                xk1[i] = beta[i];
                suma = 1;
            }
            else {
                x[i] = xk1[i];

                for (int j = 0; j < (i - 1); j++)
                    s1 += alfa[i][j] * x[j];

                for (int j = i + 1; j < n; j++)
                    s2 += alfa[i][j] * x[j];

//                cout << s1 << "    " << s2 << endl;
                xk1[i] = s1 + s2 + beta[i];
                suma += fabs(xk1[i] - x[i]);
            }
            cout << xk1[i] << "    " << x[i] << "     " << fabs(xk1[i] - x[i]) << "     " << epsilon << endl;
        }
        licznik++;

        cout << suma << endl;
        cout << suma/N << endl;
        cout << endl;
    } while (suma/N > epsilon && licznik < MLI);

}

Coś mało? Pisałem to tydzień....
Cały mój kod: https://pastebin.com/SyqG4vPa

Tutaj kod funkcji liczącej który po kilku modyfikacjach DZIAŁA ale on jest w inny sposób niż ona chce i to właśnie nie przejdzie....
https://pastebin.com/4DsEGXbY

Przykładowa macierz a i wektor b:
https://pastebin.com/b0tAirMh

Ta macierz powyżej ma się obliczyć w 6 iteracjach i to jest "odpowiedź" jeżeli powyższą macierz z wektorem rozwiążę w 6 iteracji i epsilon zakończy sprawę to jest dobrze... Sprawdziłem to na tym "działającym kodzie" który udało mi sięzmodyfikować trochę pod moje rzeczy i działa ale na moim co sam piszę w końcu coś tam jest przypominającego to co ma być ale jest ŹLE

Zalecenia które mi nabazgrała że ledwo się odczytam w zeszycie, trochę chaos ale mniejwięcej moze trochę uzupełni to co siew kodzie dzieje
-Tworzę x[i] = {1,1,1,1,1}
-Najpierw przypisuję tak jak we wzorze do każdego xk1[i] iteracji pierwszej beta[i]
-Zaczynam pętlę do while
-x[i] = xk1[i] - stare xk1[i] przypisuje do x[i] i licze na nowo xk1[i]
-obliczam xk1[i] ze wzoru 32
-jeżeli stop iteracji jest miejszy od epsilon to wypisuję ostateczny zestaw x
-jeżeli nie to zaczynam ponownie do while, więc na starcie wyniki zapisywane są do x[i] a xk1[i] będzie na nowo liczony i tak aż to stopu iteracji albo 30 iteracji.

Nie wiem czego ja tam nie rozumiem... mam wrażenie że całkiem wszystko jest bezsensu i totalnie źle to jak dla mnie jest to kopia tego wzoru z instrukcji... wręcz dokładna... i nie mam pojęcia co tam jest źle. Naprawdę przerabiałem to milion razy, głowa mnie boli tak że nawet leki uspokajające nie pomagają, a ja dalej nie mam pomysłu... 

Byłbym wdzięczny za jakąkolwiek pomoc, próbuję wytłumaczenia, miejsce gdzie robię błąd... cokolwiek co mi chociaż trochę wskaże co tam jest źle

Jak na moje tam jest wszystko tip top i właśnie to jest problem bo nie wiem co robię źle, a mam wrażenie że wszystko jest dobrze :(

Trochę chaos ale jestem zdesperowany :((( Pomocy ;/
Jak coś chcecie dopytać to pytajcie, odpowiem na wszystko 
Zdesperowany zacząłem szukać po forach... bo nie wiem w co ręce włożyć ;/

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 157 wizyt
pytanie zadane 22 maja 2017 w JavaScript przez jaco Początkujący (290 p.)
0 głosów
1 odpowiedź 266 wizyt
0 głosów
0 odpowiedzi 621 wizyt
pytanie zadane 1 stycznia 2022 w C i C++ przez Admak Początkujący (340 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...