Ryuujin Temat założony przez niniejszego użytkownika |
Algorytm: układy równań » 2014-05-01 20:14:33 Witam, szczerze mówiąc piszę tutaj tylko dlatego, że jakoś nie mam weny i nie wiem z której strony chwycić się za mój problem. ^.=.^
Sprawa jest niby prosta. Mam równanie z dowolną (od jednej do możliwych [teoretycznie nieskończonych] zasobów systemowych) ilością niewiadomych i przynajmniej dwoma "wiadomymi" Przykładowo:
X = Y*a*b + Z*a*c*d + a*b*c + Y*b*b*c [1]
Lub inne tego typu. Duże litery opisują niewiadome co do których informację będziemy mieli podane, a małe musimy obliczyć.
W tym momencie otrzymuję "zestawy danych" mówiący o tym jak wyglądają X, Y i Z. Np:
"5 4 5 ; 7 3 1 ; 8 2 1 ;" Oznacza, że mamy układ trzech równań:
{ 5 = 4*a*b + 5*a*c*d + a*b*c + 4*b*b*c 7 = 3*a*b + 1*a*c*d + a*b*c + 3*b*b*c 8 = 2*a*b + 1*a*c*d + a*b*c + 1*b*b*c }
No i teraz pojawia się mój cel: chcę znaleźć zestawy niewiadomych a, b, c i d (i więcej) które będą spełniać ten układ równań lub stwierdzić, że to niemożliwe. Ktokolwiek bardziej rozgarnięty pomoże mi chociaż jakimś pomysłem jak to wydajnie zrobić? Nie wiem czy chcę się bawić w podstawianie, bo na moją ocenę w wypadku większej ilości informacji zwyczajnie zawiesi to komputer na długie godziny :\ Może macierzą? Ale znów - jak to chwycić? Pomocy xD
[1] - Warto zaznaczyć, że po lewej stronie zawsze stoi jedna "wiadoma" |
|
Parapet |
» 2014-05-01 20:24:24 Bardzo ciekawe zadanie ;) Ja bym napisał (jak bym umiał:P) parser do takiego zadania (nie wiem jaka opinia innych). Sam zajmę się takim zadaniem ale w C# i dam ci jakieś wskazówki ;) |
|
Ryuujin Temat założony przez niniejszego użytkownika |
» 2014-05-02 18:24:32 Myślę, że parser jest tutaj niewystarczający. Chodzi tu o wykrycie zależności i w taki sposób poprowadzenie równań by otrzymać:
a = 5b^2 = 3/5c = ...
Sama analiza składni na pewno będzie niezbędna na wstępie, ale problem jest bardziej złożony niż same dodawanie/odejmowanie/mnożenie. Przykładowo w tym przykładzie:
5 = 8ac + 21c^2b + 9ab + 2a^2b
Rozbicie składni na jakikolwiek sposób nie udzieli nam żadnej informacji. Bo nie ważne jak wykonać jedno działanie - szukana niewiadoma pozostanie wciąż po prawej stronie. Szczerze mówiąc to rozwiązanie pojedynczego przykładu na kartce jest uparte, już nie mówiąc o algorytmie tego dokonującym. Trzeba by było bawić się z kwadratami i pierwiastkowaniem. Wtedy jednak powstaje dużo dziedzin co dodatkowo utrudnia później znalezienie dobrego rozwiązania.
Wkurzająca sprawa. |
|
Parapet |
» 2014-05-02 20:38:15 Daj skrzynkę piwa dobremu matematykowi i zrób tą aplikację z bazą mysql. Użytkownik wpisuje dane a twój kumpel rozwiązuje i wysyła. Albo Jedź na if'ach
[ŻART]
Bardzo ciężkie zadanie, napisz do jakiegoś matematyka i Ci pomoże ;) |
|
Ryuujin Temat założony przez niniejszego użytkownika |
» 2014-05-02 21:00:49 Rozumiem, że z tym matematykiem to żart? ;P
Mam zamiar spróbować to ogarnąć macierzą i kilkoma przekształceniami. Ale wciąż liczę na jakąś kreatywną ideę. |
|
Parapet |
» 2014-05-02 21:30:58 Nie serio pomoże Ci. |
|
docentpp |
» 2014-05-05 19:26:41 Tak postawiony problem jest z założenia nierozwiązywalny, bo masz TRZY równania, a poszukujesz wartości CZTERECH niewiadomych. (a,b,c,d).
|
|
Ryuujin Temat założony przez niniejszego użytkownika |
» 2014-05-09 15:05:52 Właśnie na tym ma polegać działanie algorytmu. Znalezienie w internecie sposobu na proste rozwiązanie układu równań to nie problem. Tylko tu faktycznie najczęściej będzie mniej równań niż układów. W takim wypadku algorytm ma mi wypluć zależności między niewiadomymi spełniające taki układ równań. Przykładowo na takie proste równanie:
4X + 3 = 2Y - 5
Chcę otrzymać odpowiedź:
Y = 2X + 4
A w trudniejszym przypadku:
{ 4X + 3 = 2Y - 5 + Z 3X - Y = Y + Z }
Na odpowiedź:
X = -8 Y = -1/2*Z - 24
Da mi to możliwość uzupełnienia układu później, gdy już będę miał dodatkowe dane i powie mi co z góry jest już pewne, jak tutaj X.
|
|
« 1 » 2 |