Witam :)
Kończę robić aproksymację, wedle wzoru, który przedstawił mi Dragon w tym temacie:
https://4programmers.net/Forum/Algorytmy/263894-aproksymacja_wielomianowa_funkcji_dyskretnej-_pomoc_w_zrozumieniu_koncepcji
Ale jest problem. Napisałem własną "bibliotekę" do obliczeń na macierzach- testowałem ją różnymi przykładami i działała fajnie, natomiast kiedy wprowadziłem do niej już właściwe dane, każda próba odpalenia tego samego kodu, kończy się jakimiś dzikimi wartościami.
Zdenerwowałem się, i zaprzęgłem do roboty bibliotekę Math.Numerics- była na I miejscu w liscie NuGetów. Zaimplementowałem... i to samo. Nie wiem naprawdę, co robić.
Wynikowa macierz ma rozmiar [liczbaWspółczynników x 1], więc niby pasuje jak ulał.
Skąd biorę dane?
Mam listę obiektów Pomiar.
W uproszczeniu- składa się on z pola double, który odpowiada wartości pomiaru, oraz obiektu DateTime, który przechowuje datę wykonania pomiaru. Daty są u mnie macierzą A a wartości są wektorem Y.
Wzór jest taki:
V=(ATA)-1*AT*Y
Mnożenie macierzy nie jest przemienne, więc "przygotowałem" sobie odpowiednie współczynniki po kolei (może nie potrzebnie).
Aproksymacja wygląda tak:
Zwraca wielomian, który jest opisany tak:
http://wklej.org/id/1909981/
Problem może być taki, ze macierz ATA po odwróceniu, zawsze zawiera w większości NaN, zera albo jakieś małe wartości bliskie zeru. Kiedy inicjowałem testowe dane datami z właściwości DateTime.Now to czasem pojawiały się liczby, skrajnie różne- np - 20345.424324332, albo 34563.2342365426, albo 7.32423432 , albo tymi NaNami :)
Może te dane wejściowe nie są w porządku? Uciąć część ułamkową, przeskalować to jakoś? Nie widać nadziei, żeby to miało płynnie działać. :)
Tak wygląda testowe wywołanie tego wszystkiego. Stopień wielomianu chwilowo wprowadzam sobie ręcznie :)
http://wklej.org/id/1910466/