matematykaszkolna.pl
macierze Bartek: Znacie może jakiś zbiór zadań pdf, w którym były by układy równań z trzema lub czterema niewiadomymi? Przy czym chodzi mi o metodę rozwiązywania w postaci macierzy.
12 paź 14:35
Bartek: Słuchajcie, chciałem głębiej przetrenować rozwiązywanie układów równań liniowych z niewiadomymi przy pomocy macierzy, ale kłopot w tym, że internet jest pusty. W googlach nic nie ma, a w skoczylasie są za dania nie na temat. Pomocy...
12 paź 15:08
Trivial: Możesz sobie sam wymyślać układy, a odpowiedzi sprawdzać na wolframie
12 paź 16:29
Bartek: Właśnie zacząłem sobie wymyślać sam przykłady, ale raz sobie taki wymyśliłem, że już łatwiej mi było go wyznacznikami policzyć. Sęk jednak w tym, że wyznacznikami liczy się tylko układy kwadratowe, a nie prostokątne. Chodzi o to, że nie łatwo jest wymyślić taki sprytny układ, dzięki którem otrzymam układ schodkowy z samymi zerami i jedynkami − a mnie właśnie takie przykłady są potrzebne. A no właśnie
12 paź 17:31
Trivial: Jak wymyślić "ładny" układ? Zacznij od rozwiązania. Niech będzie "ładne", np.:
 
nawias
1
nawias
nawias
2
nawias
 
x =
  
Teraz pomnóż x przez dowolną "ładną macierz" (taką o współczynnikach całkowitych). Przykładowo:
nawias
1 2
nawias
nawias
−1 5
nawias
 
nawias
1 2
nawias
nawias
−1 5
nawias
nawias
1
nawias
nawias
2
nawias
 
nawias
5
nawias
nawias
9
nawias
 
x =
=
   
I możesz sobie rozwiązywać. emotka Prostokątne zrobisz tak samo. Wymyśl ładne x, np.: x = [ 1 0 −1 ]T Pomnóż przez macierz, np.:
 
nawias
1 2 0
nawias
nawias
−1 2 −2
nawias
 
nawias
1
nawias
nawias
1
nawias
 
x =
   
I znów możesz sobie rozwiązywać. emotka
12 paź 18:33
Bartek: Sory Trivial, ale nie za bardzo za tobą nadążam. Przecież w przykładach, które sobie zarzucam współczynniki są całkowite. To jednak nie wiele zmienia, bo gdy je rozwiązuję, to przychodzi taka sytuacja, że zupełnie nie wiem do czego zmierzam. Możę będzie prościej jeśli cię zapytam czy mógłbyś mi wytłumaczyć samą filozofię sprowadzania macierzy do układu schodkowego zredukowanego. Ogólnie wiem co to jest oraz wiem po co to jest. Znam też metodę tzn. odejmowanie lub dodawanie wierszy w macierzy, ale i tak mam wrażenie, że tak do końca tego nie rozumiem.
12 paź 21:11
Trivial: Sprowadzanie macierzy do postaci zredukowanej to metoda obliczeniowa pozwalająca zapisać układ równań w takiej postaci, że jego rozwiązanie jest trywialne. Jak chcesz mogę dać przykład: Znajdź wszystkie wektory x = [ x1 x2 x3 x4 ]T, takie że:
 
nawias
1 2 1 1
nawias
nawias
1 2 0 2
nawias
 
nawias
4
nawias
nawias
3
nawias
 
x =
   
12 paź 21:20
Bartek: Okej, to wyszło mi coś takiego, ale dalej nie wiem co z tym zrobić:
nawias
1 2 1 1
nawias
nawias
0 0 −1 1
nawias
 
nawias
4
nawias
nawias
−1
nawias
 
=
  
Zastosowałem: W2 − W1.
12 paź 21:31
Trivial: Redukuj dalej. Czy da się ocalić jakoś drugą kolumnę przez zamianę wierszy? Nie. Zatem kolumna druga jest traktowana jako kolumna wolna (x2 będzie parametrem w rozwiązaniu). Przechodzimy do kolumny trzeciej. Redukujemy do góry:
nawias
1 2 1 1 | 4
nawias
nawias
0 0 −1 1 | −1
nawias
 
 
nawias
1 2 0 2 | 3
nawias
nawias
0 0 −1 1 | −1
nawias
 
 
nawias
1 2 0 2 | 3
nawias
nawias
0 0 1 −1 | 1
nawias
 
 
Jeżeli się skupisz, to zobaczysz tutaj macierz jednostkową w kolumnach 1,3. Zapisując nasze równania mamy: x1 + 2x2 + 2x4 = 3 x3 − x4 = 1 Zatem wystarczy wybrać x2,x4 jako parametry i mamy że: x1 = 3 − 2c1 − 2c2 x3 = 1 + c2 Czyli rozwiązanie ogólne wygląda tak: x = [ 3 − 2c1 − 2c2 c1 1 + c2 c2 ]T = = [ 3 0 1 0]T + c1*[−2 1 0 0]T + c2*[−2 0 1 1]T Zauważ, że wszystkie te informacje można odczytać wprost z macierzy zredukowanej:
nawias
1 2 0 2 | 3
nawias
nawias
0 0 1 −1 | 1
nawias
 
 
x = [ 3 0 1 0]T + c1*[ −2 1 0 0]T + c2*[ −2 0 1 1]T
12 paź 21:46
Trivial: No to teraz trudniejszy przykład, ale od razu zredukowany: 1 2 0 1 −1 0 | −1 0 3 1 3 1 0 | 0 0 1 0 2 0 1 | 1 Jakie wektory x spełniają ten układ równań?
12 paź 21:53
Bartek: Jeju, Trivial, dzięki wielkie. Czyli wnioskuję, że mój problem (mam wrażenie) polega na tym, że jeszcze nie za bardzo załapałem sam mechanizm redukcji takiej macierzy. Chodzi mi po prostu o to, że strasznie się jeszcze motam, gdy usiłuję dostrzec jak uzyskać owe jedynki bez niszczenia zer. Bo mój kłopot polega na tym, że owszem uzyskuję w danym miejscu jedynkę lub minus jedynkę, ale w tym samym wierszu np. 0 zamienia mi się na niezero. I tak mam z tymi układami cały czas. Właśnie usiłuję rozwiązać przykład z wikipedi. Tak na marginesie
12 paź 21:55
Bartek: Trivial poczekaj, ja nie myślę tak szybko. Moment, bo po napisaniu tutaj posta, zajrzałem do wiki żeby rozwiązać inny przykład. Daj mi chwilę. Rozwiążę tamten, potem przeanalizuję jeszcze raz ten twój i dopiero, Okej? dziękować.
12 paź 21:58
Trivial: Ściślej mówiąc, to mój układ nie jest do końca "zredukowany", ale jego rozwiązanie można zapisać od razu (nic nie trzeba już zmieniać). Może nie będę już kombinować, tylko dam dobrze "zredukowany" przykład: 1 2 0 1 −1 0 | −1 0 0 1 3 1 0 | 0 0 0 0 0 0 1 | 1
12 paź 22:07
Bartek: Trivial, pytanie ogólne: Czy poprzez "ocalenie" którejkolwiek kolumny masz na myśli uzyskanie w niej jedynki oraz samych zer? Żeby było prościej, proszę o odpowiedź: tak lub nie.
12 paź 22:17
Trivial: tak.
12 paź 22:20
Bartek: Aha, czyli kolumna z zerami i jedynkami to kolumna jednostkowa a kolumny wolne to kolumny z parametrami? A co jeśli mam kolumnę z jedynką i np. trójką i nie da się trójki zredukować do zera? Bo np. wtedy rozwalam zera w kolumnie sąsiedniej? Bo z tym problemem właśnie zetknąłem się dzisiaj najczęściej. Po prostu takie bałagany mi wychodziły, że załamać się można.
12 paź 22:24
Bartek: Okej, może dam przykład: x + 3y +2z = 4 2x + 4y + 5z =3 5x + 10y +7z = 6 ?
12 paź 22:26
Trivial: Mam gdzieś program do redukcji macierzy. Zaraz wygrzebię.
12 paź 22:32
Trivial: 1 3 2 4 2 4 5 3 5 10 7 6 w2 := w2 − (2)*w1 w3 := w3 − (5)*w1 1 3 2 4 0 −2 1 −5 0 −5 −3 −14 w2 := w2/(−2) 1 3 2 4 0 1 −12 52 0 −5 −3 −14 w1 := w1 − (3)*w2 w3 := w3 − (−5)*w2 1 0 7272 0 1 −12 52 0 0 −11232 w3 := w3/(−112) 1 0 7272 0 1 −12 52 0 0 1 311 w1 := w1 − (72)*w3 w2 := w2 − (−12)*w3 1 0 0 −4911 0 1 0 2911 0 0 1 311
12 paź 22:40
Bartek: Trivial, na prawdę dzięki. Policzyłem to sobie i chyba już wiem o co biega. Dziś już może nie, bo trzeba jutro wstać,ale jutro zrobię tego więcej. Chyba już rozumiem o co chodzi. Dzięki jeszcze raz.
12 paź 23:01
Trivial: To była eliminacja w stylu Jordana − w górę i dół na raz. Można wyeliminować też najpierw w dół, a potem w górę − w stylu Gaussa.
12 paź 23:08
Bartek: Właściwie to zauważyłem, że w tej redukcji panuje taka kolejność na przemian: 1 0 1 0 1 0 , mam rację? albo 0 1 0 1 0. Tzn. gdy śledziłem twoje obliczenia, to zauważyłem, że najpierw osiągasz 0 a potem 1 potem znowu 0 i znowu 1.
12 paź 23:14
Trivial: Daj większy przykład, to zobaczysz. Program wszystko wchłonie.
12 paź 23:21
Bartek: A ten program ty sam napisałeś? Czy z netu ściągany? Wiesz, ja jestem (może na razie z programowanie kiepski, bo dopiero się uczę), ale generalnie jestem fascynatem takich rzeczy. W tej chwili jestem w trakcie czytania php.net oraz javascript. Kiedyś uczyłem się podstaw programowania obiektowego c++.
12 paź 23:25
Trivial: Kiedyś napisałem jak mi się nudziło.
12 paź 23:26
Bartek: Podziwiam takie rzeczy. Po prostu podziwiam. Jedni idą na panienki jak im się nudzi. Inni (a feee..) na panów. A tu proszę, gościowi się nudziło i zrobił program do redukcji macierzy. Co tu dużo pisać − szacun!
12 paź 23:30
Bartek: A w czym ten program napisałeś? W c++ ?
12 paź 23:30
Trivial: Tak. Sam algorytm redukcji jest prosty. emotka
12 paź 23:33
Bartek: No widzisz, a mnie się w dziedzinie programowania marzy programowanie pod windows. Słyszałem o książce Pecolda, ale wiesz...po pierwsza kasa, a po drugie ...trudno mówić o nauce programowania, gdy się w ciągu dnia robi mnóstwo innych rzeczy. Patrz dzisiaj: ćwiczenie redukcji macierzy.
12 paź 23:36
Trivial: Dopisałem redukcję w stylu Gaussa. 1 3 2 4 2 4 5 3 5 10 7 6 w2 := w2 − (2)*w1 w3 := w3 − (5)*w1 1 3 2 4 0 −2 1 −5 0 −5 −3 −14 w3 := w3 − (52)*w2 1 3 2 4 0 −2 1 −5 0 0 −11232 Kolumna 4 oznaczona jako wolna w3 := w3/(−112) 1 3 2 4 0 −2 1 −5 0 0 1 311 w2 := w2 − (1)*w3 w1 := w1 − (2)*w3 1 3 0 3811 0 −2 0 −5811 0 0 1 311 w2 := w2/(−2) 1 3 0 3811 0 1 0 2911 0 0 1 311 w1 := w1 − (3)*w2 1 0 0 −4911 0 1 0 2911 0 0 1 311
12 paź 23:40
Bartek: Kolejny przykład. Wyszło mi, że układ nie ma rozwiązań, bo na samym końcu w wierszu czwartym jest : 0 + 0 + 0 −38 przy czym −38 to wyraz wolny. Dlatego moim zdaniem układ musi być sprzeczny, bo 0≠ −38. Przykład: 2x +y +3z =4 x +3y +z = 3 4x + 2y + 3z = 5 −x + 5y + 2z = −3
13 paź 00:08
Trivial: 2 1 3 4 1 3 1 3 4 2 3 5 −1 5 2 −3 w2 := w2 − (12)*w1 w3 := w3 − (2)*w1 w4 := w4 − (−12)*w1 2 1 3 4 0 5212 1 0 0 −3 −3 0 112 72 −1 w4 := w4 − (115)*w2 2 1 3 4 0 5212 1 0 0 −3 −3 0 0 235165 w4 := w4 − (−2315)*w3 2 1 3 4 0 5212 1 0 0 −3 −3 0 0 0 −395 Układ sprzeczny.
13 paź 00:33
Bartek: Trivial, dlaczego na samej górze jest: w2 := w2 − (1/2)*w1 Przecież w tym równaniu w ogóle nie ma takiego współczynnika, jak 1/2.
13 paź 12:10
Bartek: Triiiiiviaaaal
13 paź 12:30
Trivial: Po kolei w pierwszej kolumnie: Przez co pomnożyć 2 żeby było równe 1? przez 12. Przez co pomnożyć 2 żeby było równe 4? przez 2. Przez co pomnożyć 2 żeby było równe −1? przez −12.
 y 
Przez co pomnożyć x żeby było równe y? przez

.
 x 
13 paź 12:37
Bartek: No oczywiście ta ja też to zauważyłem, ale wydawało mi się, że mnożyć można tylko przez istniejące współczynniki. Czyli jeśli mam: 2 1 3 4 1 3 1 3 4 2 3 5 −1 5 2 −3 to myślałem, że np. W1 − 2*W2, bo w pierwszym wierszu mam współczynnik 2 (na samym początku z resztą). Wydawało mi się, że tych liczb do mnożenia nie można sobie brać tak z choinki
13 paź 12:55
Trivial: Można.
13 paź 13:03
Trivial: Każda liczba ≠ 0 jest OK.
13 paź 13:03
Bartek: Trivial, a znasz może jakieś miejsce w internecie, gdzie można o zasadach tej redukcji poczytać? Tzn. nie chodzi mi o konkretne przykłady, bo metodę Gaussa w wikipedi znalazłem. Chodzi mi raczej o zasady teoretyczne, czyli o jakieś takie teoretyczne reguły. I to sprawa pierwsza. Sprawa druga: 2 1 3 4 1 3 1 3 4 2 3 5 −1 5 2 −3 Dlaczego w tym przykładzie nie policzyłeś tak, by ta pierwsza dwójka zamieniła się na jedynkę? Przecież można było zrobić: W1 − W2 i miałbyś od razu w pierwszym wierszu na samym początku jedynkę. Czy tu może jest jakaś taka dowolność tych obliczeń
13 paź 13:09
Trivial: Zasady są tylko 3, więc je po prostu napiszę. Dozwolone operacje to: 1. Pomnożenie wiersza przez liczbę c ≠ 0. wi ← c*wi 2. Dodanie do wiersza wielokrotności innego wiersza (c ≠ 0). wi ← wi + c*wj 3. Zamiana dwóch wierszy. wi ↔ wj Można eliminować w dowolny sposób, tak aby dojść do rozwiązania. Mój program eliminuje w sposób "tradycyjny", czyli po prostu od góry do dołu (otrzymuje się trójkąt zer pod przekątną macierzy).
13 paź 13:14
13 paź 13:26
Bartek: Ale chyba dzielić też można np. Wi <−−Wi:c gdzie c≠0 ?
13 paź 13:29
Trivial:
 1 
Dzielenie to mnożenie przez odwrotność. x : c =

*x
 c 
13 paź 13:41
Bartek: Okej, taki przykład. Nie wiem czy dobrze zrobiłem, ale doszedłem do tego,że jest sprzeczny: 1 2 1 | 5 2 1 2 | 3 4 −2 −3 | 3 5 3 4 | 2 W2 − 2W1 W3 − 4W1 W4 − 5W1 i otrzymałem: 1 2 1 5 0 −3 0 −7 0 −10 −7 −7 0 −7 −1 −8 w2:(−3) 1 2 1 5 0 1 0 7/3 0 −10 −7 − 7 0 −7 −1 −8 W3 + 10W2 W4 + 7W2 1 2 1 5 0 1 0 7/3 0 0 −7/2 49/3 0 0 −1 25/3 No okej, i co ja mam z tym teraz zrobić? czy ja to w ogóle poprawnie policzyłem?
13 paź 13:50
Bartek: Tzn. sory, tak naprawdę nie wiem czy jest sprzeczny. Chodzi raczej o to, że nie wiem co z nim dalej robić.
13 paź 13:54
Bartek: Okej, poszedłem dalej: W1 − 2W2 1 0 1 1/3 0 1 0 7/3 0 0 −7/2 49/3 0 0 −1 25/3 W1 + W4 W4 *(−1) 1 0 0 1/3 0 1 0 7/3 0 0 −7/2 49/3 0 0 1 −25/3 W3 (−2/7) 1 0 0 1/3 0 1 0 7/3 0 0 1 −14/3 0 0 1 −25/3 Jak wół wychodzi, że jest sprzeczny. Nie może być x3= −14/3 i x3=−25/3 jednocześnie. Chyba, że się gdzieś walnąłęm.
13 paź 14:07
Bartek: Trivial, bo w sumie nie jestem sam na tym forum. Może prześlij mi ten twój program (proszę), to będę sobie to wszystko sam sprawdzał. Co ty na to? Podałbym maila.
13 paź 14:33
Trivial: Ten program nie ma interfejsu użytkownika. Macierze są wpisywane sztywnie do kodu programu. I jakoś nie chce mi się tego zmieniać. Ale kod mogę wrzucić. http://pastebin.com/GB5gabw8 kod nie jest najwyższej jakości − wszędzie się powtarza. Trudno...
13 paź 14:49
Bartek: Żałuję, że poprosiłem Sory.... Miałem po prostu nadzieję, że właśnie ten interfejs jest, (choćby z wiersza poleceń)bo tak to w tym kodzie tylko namieszam.
13 paź 14:56
Trivial: Nie no, wystarczy zmienić w mainie macierz i jej rozmiary. Np dla Twojego problemu: http://pastebin.com/CSk2Dsmi
13 paź 15:01
Bartek: Okej, ale gdzie ten kod odpalić? Jak go przekopiuje np. do visual c+ express to po prostu uruchomić i zadziała?
13 paź 15:06
Bartek: Czy może devc++ byś w tym przypadku raczej sugerował?
13 paź 15:07
Trivial: To nie ma znaczenia. Wystarczy skompilować. A nawiasem, wynik jest taki: 1 2 1 5 2 1 2 3 4 −2 −3 3 5 3 4 2 w2 := w2 − (2)*w1 w3 := w3 − (4)*w1 w4 := w4 − (5)*w1 1 2 1 5 0 −3 0 −7 0 −10 −7 −17 0 −7 −1 −23 w3 := w3 − (103)*w2 w4 := w4 − (73)*w2 1 2 1 5 0 −3 0 −7 0 0 −7 193 0 0 −1 −203 w4 := w4 − (17)*w3 1 2 1 5 0 −3 0 −7 0 0 −7 193 0 0 0 −537 Czyli układ sprzeczny.
13 paź 15:09
Trivial: A DevC++ odradzam zdecydowanie. Muszę z tego korzystać jednych na zajęciach i zawsze są z nim problemy (np. nagle przestaje działać, projekt się zapisuje ale już nie otwiera, itd...)
13 paź 15:12
Trivial: Tymczasem muszę już lecieć. Możesz też wypróbować opcję szukania wszystkich wymiernych pierwiastków dowolnego wielomianu o współczynnikach wymiernych. Rational as[6] = { 2, 2, 1, 5, 3, 1 }; tryRational(as, 5); Zobacz co się stanie. Na razie.
13 paź 15:24
Bartek: Dzięki wielkie. Na prawdę bardzo mi pomogłeś.
13 paź 15:42
Bartek: Niestety mistrzu. Usiłowałem uruchomić debagowanie w visual c++ express i cały czas wyskakują błędy. Także nie wiem, może podaj mi jak będziesz miał chwilę wskazówki jak ty ten kod odpalasz.
13 paź 17:24
Bartek: Dobra, udało mi się go odpalić na kompilatorze online. Wciąż jednak nie wiem dlaczego pojawiają się błędy w moim visualu. No nic, pewnie jakąś głupotę robię. Taki o to error mi wyskakuje: macierze.cpp 1>d:\macierze\macierze\macierze\macierze.cpp(355): error C2668: 'sqrt' : ambiguous call to overloaded function 1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(589): could be 'long double sqrt(long double)' 1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(541): or 'float sqrt(float)' 1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\math.h(127): or 'double sqrt(double)' 1> while trying to match the argument list '(int)' ========== Build: 0 succeeded, 1 failed, 0 up−to−date, 0 skipped ==========
13 paź 17:31
Trivial: Zamień linijkę 355 z: for (i = 1; i < sqrt(n); i++) { na: for (i = 1; i < sqrt((double)n); i++) {
13 paź 20:46
Bartek: Okej Słuchaj,a tak przy okazji, co ty właściwie studiujesz? Jeśli to nie tajemnica oczywiście.
13 paź 21:21
Trivial: Studiuję turystykę religijną.
13 paź 21:25
Bartek: Taki żart... To na turystyce religijnej uczą takich rzeczy?
13 paź 21:30
Trivial:
13 paź 21:31
Bartek: To chyba dobra alternatywa dla tych z polibudy.
13 paź 21:44
Trivial: Jasne. A ty co studiujesz?
13 paź 21:50
Bartek: Informatykę. Właściwie dopiero zacząłem. Ale tak w ogóle to wpienia mnie jedna rzecz. Był czas (kilka ładnych miesięcy), że dotarłem do programowania obiektowego c++. I uczyłem się go, ale później tak mi się ułożyło, że musiałem przestać się tego uczyć i zabrałem się za co innego. A chętnie bym do tego języka wrócił. Tylko nie wiem jak to zrobię, bo teraz uczę się php i javascript. Rozumiesz...po prostu doba za krótka.
13 paź 21:59
Bartek: Bo ja bym chciał: c++, php i javascript. Może też sama java. Mówię. Doba za krótka.
13 paź 22:00
Bartek: O, a właśnie. Jesteś w stanie polecić mi jakąś książkę (bez błędów w kodach) do c++? Słyszam, że thinking in c++ jest dobra.
13 paź 22:01
Trivial: Przeczytałem Thinking in c++ tom pierwszy i część tomu drugiego. Nie widziałem ani jednego błędu w kodzie (w tekście się zdarzały, ale rzadko). Polecam Ci wybrać sobie jeden język na początek i nauczyć się go dobrze. Gdy już osiągniesz odpowiedni poziom, możesz poświęcić te 7 dni na php i javascript. (tyle było mi potrzebne, żeby ogarnąć php i javascript w stopniu pozwalającym zbudować realistyczną stronę internetową). emotka
13 paź 22:05
Bartek: Właśnie. Co do javascript. Są tacy, którzy biorą się za analizowanie kodu jquery. Oj jak bym chciał..., ale niestety jeszcze za mała wiedza i za małe skrzydła.
13 paź 22:16
Bartek: Dobra Trivial Idę spać, bo jutro trza do roboty. Może wrócę do c++. Fajny język.
13 paź 22:21
Trivial: Dobranoc. emotka
13 paź 22:41
Bartek: Trivial, wpisałem taką macierz i errory są: 1 3 −1 2 4 2 6 3 2 3 −1 −3 3 2 6 Skompilowałem ten twój program i błędy mi jakieś wychodzą.
27 paź 12:14
Bartek: Triiiiiviaaal, help
27 paź 12:40
Trivial: "Jakieś błędy" to bardzo konkretne.
27 paź 23:00