mnożenie macierzy
mnożenie macierzy
Mam na zadanie do zrobienie program który mnoży manierze bez użycia funkcji LabVIEW (AXB) a następnie sprawdza wyniku funkcją(AXB). Za bardzo nie wiem jak mogłabym się za to zabrać. Mógłby mi ktoś pomóc
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: mnożenie macierzy
Witaj na forum,
Najlepiej zabrać się za to definiując wymagania funkcjonalne odnośnie tego programu, a więc np.:
Otwórz nowego VIaja i spróbuj na jego panelu utworzyć wejścia i wyjścia Twojego programu. Tablicę tworzysz w ten sposób, że do wnętrza elementu Array (zwróć uwagę na przycisk Search na palecie kontrolek) przeciągasz kontrolkę odpowiedniego typu - w Twoim przypadku Numeric Control. Powstała tablica jest jednowymiarowa, więc kliknij prawym klawiszem na indeksie tablicy (z lewej) i wybierz Add Dimension - masz już tablicę 2D. Możesz ją rozciągnąć chwytając na róg. Nazwij ją X i skopiuj aby otrzymać tablicę Y. Dodatkowo wrzuć na panel kontrolkę Boolean (Round LED) i nazwij ją błąd.
Wymaganie nr 1 jest (prawie) spełnione, czas na wymaganie nr 2. Przejdź na diagram i spróbuj za pomocą dostępnych funkcji (Array Size, Index Array, Equal?) zaświecić kontrolkę błąd, jeśli rozmiary tablic wejściowych są nieprawidłowe.
Napisz, jak się z tym uporasz (albo jak będziesz mieć jakieś problemy). Powodzenia.
PS. Tablice utworzone wg powyższego opisu są początkowo puste - mają rozmiar [0,0]. Gdy coś w nie wpiszesz, zaczynają mieć niezerowy rozmiar. Aby z powrotem przywrócić je do pierwotnej postaci, kliknij na indeksie tablicy i wybierz Data Operations -> Empty Array.
PPS. Na każdym wejściu/wyjściu każdej funkcji możesz kliknąć prawym klawiszem i utworzyć kontrolkę wybierając Create -> Control/Indicator
Najlepiej zabrać się za to definiując wymagania funkcjonalne odnośnie tego programu, a więc np.:
- Dwie macierze wejściowe (X i Y) reprezentowane są jako tablice 2D liczb typu double, podobnie macierz wyjściowa (Z).
- Jeśli liczba kolumn macierzy X jest różna od ilości wierszy macierzy Y, program sygnalizuje błąd.
Otwórz nowego VIaja i spróbuj na jego panelu utworzyć wejścia i wyjścia Twojego programu. Tablicę tworzysz w ten sposób, że do wnętrza elementu Array (zwróć uwagę na przycisk Search na palecie kontrolek) przeciągasz kontrolkę odpowiedniego typu - w Twoim przypadku Numeric Control. Powstała tablica jest jednowymiarowa, więc kliknij prawym klawiszem na indeksie tablicy (z lewej) i wybierz Add Dimension - masz już tablicę 2D. Możesz ją rozciągnąć chwytając na róg. Nazwij ją X i skopiuj aby otrzymać tablicę Y. Dodatkowo wrzuć na panel kontrolkę Boolean (Round LED) i nazwij ją błąd.
Wymaganie nr 1 jest (prawie) spełnione, czas na wymaganie nr 2. Przejdź na diagram i spróbuj za pomocą dostępnych funkcji (Array Size, Index Array, Equal?) zaświecić kontrolkę błąd, jeśli rozmiary tablic wejściowych są nieprawidłowe.
Napisz, jak się z tym uporasz (albo jak będziesz mieć jakieś problemy). Powodzenia.
PS. Tablice utworzone wg powyższego opisu są początkowo puste - mają rozmiar [0,0]. Gdy coś w nie wpiszesz, zaczynają mieć niezerowy rozmiar. Aby z powrotem przywrócić je do pierwotnej postaci, kliknij na indeksie tablicy i wybierz Data Operations -> Empty Array.
PPS. Na każdym wejściu/wyjściu każdej funkcji możesz kliknąć prawym klawiszem i utworzyć kontrolkę wybierając Create -> Control/Indicator
Ostatnio zmieniony 04 kwie 2009 15:56 przez jogurt_owocowy, łącznie zmieniany 1 raz.
mnożenie macierzy
Ok dzięki wielki
Udało mi się zrobić tyle. Za bardzo nie co powinno się umieścić w pętlach for i jak wykorzystać indeksowanie aby program działał poprawnie
Udało mi się zrobić tyle. Za bardzo nie co powinno się umieścić w pętlach for i jak wykorzystać indeksowanie aby program działał poprawnie
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: mnożenie macierzy
Dobrze.
Ważna rzecz: Aby macierze A i B mogły być pomnożone, wystarczy żeby było spełnione, że macierz A ma tyle kolumn, co macierz B wierszy. NIE MUSI być jednocześnie spełnione, że macierz A ma tyle wierszy, co macierz B kolumn.
Dwie zagnieżdżone pętle for to dobry trop, tak samo jak transpozycja macierzy, trzeba to tylko doszlifować.
Autoindeksowanie wejściowe pętli dla tablic 2D działa tak, że wewnątrz pętli z tunelu wychodzą kolejne wiersze tablicy. W mnożeniu macierzy potrzebujesz kolejne wiersze macierzy A i kolejne kolumny macierzy B, czyli transpozycja owszem, ale macierzy B. Teraz w zewnętrznej pętli włącz autoindeksowanie dla macierzy A i wyłącz dla B, a w wewnętrznej na odwrót (prawy klawisz myszy na tunelu Enable/Disable Autoindexing). W ten sposób wewnątrz wewnętrznej pętli masz do dyspozycji kolejny wiersz macierzy A i kolejną kolumnę B. Pozostaje Ci pomnożenie ich i zsumowanie iloczynów: Add Array Elements. Najlepsze jest to, że możesz wyjście tej funkcji wyciągnąć po prostu poza obydwie pętle i podłączyć wprost do tablicy wyjściowej - autoindeksowanie na wyjściu w pełni załatwia sprawę i nie potrzebujesz rejestrów przesuwnych.
Jeszcze tylko uzależnij wykonanie się tego mnożenia od poprawności rozmiarów tablic wejściowych (struktura Case), bo jak mają złe rozmiary to nie ma co mnożyć, tylko wyrzucić na wyjście błąd i pustą macierz i gotowe.
Pozdrawiam
Ważna rzecz: Aby macierze A i B mogły być pomnożone, wystarczy żeby było spełnione, że macierz A ma tyle kolumn, co macierz B wierszy. NIE MUSI być jednocześnie spełnione, że macierz A ma tyle wierszy, co macierz B kolumn.
Dwie zagnieżdżone pętle for to dobry trop, tak samo jak transpozycja macierzy, trzeba to tylko doszlifować.
Autoindeksowanie wejściowe pętli dla tablic 2D działa tak, że wewnątrz pętli z tunelu wychodzą kolejne wiersze tablicy. W mnożeniu macierzy potrzebujesz kolejne wiersze macierzy A i kolejne kolumny macierzy B, czyli transpozycja owszem, ale macierzy B. Teraz w zewnętrznej pętli włącz autoindeksowanie dla macierzy A i wyłącz dla B, a w wewnętrznej na odwrót (prawy klawisz myszy na tunelu Enable/Disable Autoindexing). W ten sposób wewnątrz wewnętrznej pętli masz do dyspozycji kolejny wiersz macierzy A i kolejną kolumnę B. Pozostaje Ci pomnożenie ich i zsumowanie iloczynów: Add Array Elements. Najlepsze jest to, że możesz wyjście tej funkcji wyciągnąć po prostu poza obydwie pętle i podłączyć wprost do tablicy wyjściowej - autoindeksowanie na wyjściu w pełni załatwia sprawę i nie potrzebujesz rejestrów przesuwnych.
Jeszcze tylko uzależnij wykonanie się tego mnożenia od poprawności rozmiarów tablic wejściowych (struktura Case), bo jak mają złe rozmiary to nie ma co mnożyć, tylko wyrzucić na wyjście błąd i pustą macierz i gotowe.
Pozdrawiam
Ostatnio zmieniony 04 kwie 2009 19:31 przez jogurt_owocowy, łącznie zmieniany 2 razy.
mnożenie macierzy
Działa idealnie.
Bardzo dziękuje za pomoc!!
Pozdrawiam
Bardzo dziękuje za pomoc!!
Pozdrawiam