Witam!
Dany jest układ równań, który można uprościć do następującej postaci:
\(\displaystyle{ \left\{\begin{array}{l}E_1=A_{1}^{Z_{1}} + K_{12}A_2^{Z_1} + K_{13}A_3^{Z_1} + \cdots +K_{1j}A_j^{Z_1}\\
E_2=K_{21}A_{1}^{Z_{2}} + A_2^{Z_2} + K_{23}A_3^{Z_3} + \cdots +K_{2j}A_j^{Z_2}\\
\vdots\\
E_i=K_{i1}A_{1}^{Z_{i}} + K_{i2}A_2^{Z_i} + K_{i3}A_3^{Z_i} + \cdots +K_{ij}A_j^{Z_i}\end{array}}\)
ogólnie:
\(\displaystyle{ E_i=A_i^{Z_i} + \sum_{j \neq i}K_{ij}A_j^{Z_i}}\)
(\(\displaystyle{ A_i^{Z_i}}\) stoi przed sumą ponieważ leżący przy nim współczynnik \(\displaystyle{ K_{ii}}\) wynosi 1. \(\displaystyle{ K_{11},K_{22},\cdots,K_{jj}}\) też wynoszą 1.)
gdzie:
\(\displaystyle{ \textbf{E}}\) to wektor wyjść [znane]
\(\displaystyle{ \textbf{K}}\) to macierz parametrów [znane]
\(\displaystyle{ \textbf{Z}}\) to wektor wykładników, które przyjmują wartości całkowite (od -3 do +3)[znane]
\(\displaystyle{ \textbf{A}}\) to wektor wejść [szukane]
Jak łatwo się domyśleć poszukiwany jest algorytm, metoda numeryczna umożliwiająca obliczenie niewiadomych\(\displaystyle{ \textbf{A}}\).
******
Początkowo problem ten istniał bez potęg i wektora \(\displaystyle{ \textbf{Z}}\). Sytuacja wtedy była prosta, zapisując układ równań jako działanie na macierzach:
\(\displaystyle{ \textbf{E}=\textbf{K} \cdot \textbf{A}}\)
przykładowo:
\(\displaystyle{ \left[\begin{array}{c}E_1\\E_2\\E_3\end{array}\right] = \left[\begin{array}{ccc}1&K_{12}&K_{13}\\K_{21}&1&K_{23}\\K_{31}&K_{32}&1\end{array}\right] \cdot \left[\begin{array}{c}A_1\\A_2\\A_3\end{array}\right]}\)
można było łatwo wyznaczyć wejścia \(\displaystyle{ A_j}\) za pomocą metody MNK. Niestety potęgi \(\displaystyle{ Z_j}\) mimo, iż są znane nie pozwalają na łatwe przekształcenie na macierzach i przekształcają wektor \(\displaystyle{ A}\) w macierz. Można byłoby również w tym przypadku zastosować metodę MNK (w oparciu o tw. Frischa-Waugha-Lavella [?]) ale tylko w sytuacji gdyby po lewej stronie mieć macierz \(\displaystyle{ \textbf{E}}\), a nie wektor. Czyli gdyby układ równań można było zapisać w postaci działań na wektorach (gdyby zgadzały się wymiary).
Chciałem przybliżyć się do właściwych wyników (chociażby licząc niepoprawnie za pomocą MNK) i następnie opracować algorytm szukania odpowiednich \(\displaystyle{ A_j}\) minimalizując jakiś wskaźnik jakości. Chociażby \(\displaystyle{ J= \sum_{i}{\left(E_i-\widehat{E}_i\right)}^2}\), gdzie: \(\displaystyle{ \widehat{E}_i}\) to obliczane wyjścia (\(\displaystyle{ E_i}\) są znane) w wyniku jakiś zmian, zaszumienia \(\displaystyle{ A_j}\) .
Wykładniki \(\displaystyle{ Z_j}\) na tyle jednak zniekształcają wyniki, że gdy zaczniemy od nich szukać rozwiązania nie mam mowy o jakiejkolwiek zbieżności algorytmów szukających "po omacku".
******
Dodam, że nie znalazłem algorytmów, które pomogłyby w rozwiązaniu powyższego problemu. Ponad to zadanie to jest tylko niewielką częścią większej aplikacji i przez wprowadzenie zmiennych \(\displaystyle{ Z_j}\) blokują całość. Dlatego wszelkie nawet najmniejsze aluzje i pomysły bardzo mile widziane!
edit:poprawione błedy
Układ równań nieliniowych (algorytm).
- Szemek
- Użytkownik
- Posty: 4819
- Rejestracja: 10 paź 2006, o 23:03
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Podziękował: 43 razy
- Pomógł: 1407 razy
Układ równań nieliniowych (algorytm).
Swego czasu na zajęciach z metod numerycznych, do rozwiązywania układu równań nieliniowych wykorzystywałem metodę Newtona.
Opis metody, pseudokody możesz znaleźć w "Analizie numerycznej" Kincaida, Cheneya.
Opis metody, pseudokody możesz znaleźć w "Analizie numerycznej" Kincaida, Cheneya.
Układ równań nieliniowych (algorytm).
Użyłem pewnej modyfikacji metody Newtona. Jakość wyników jest zadowalająca, chociaż przy większej ilości równań obliczenia trwają niestety dość długo (rzędu kilku sekund, ale ma to niestety znaczenie w dalszej części aplikacji).
Dziękuję, temat prawdopodobnie do zamknięcia.
Dziękuję, temat prawdopodobnie do zamknięcia.