Strona 1 z 1
Przyporządkowywanie najbliższej wartości
: 25 paź 2012 16:06
autor: 4B
Witam Wszystkich,
poszukuję pomocy przy takim zagadnieniu: Muszę wykreślić wykres, gdzie na osi x będzie liczba obrotów wału (omega) z pomiarów. No i mam te pomiary - jest tego 999 punktów. Natomiast na osi y będzie zależność u=2(Mg-2Mr)/F*d. Na razie można przyjąć, że wszystkie wartości, oprócz Mr są w tym wzorze stałymi, a Mr jest zależna od omegi (jest to zależność, którą normalnie odczytuje się z wykresu na kartce, a ja mam ten wykres zdigitalizowany do normalnego pliku .txt). Tylko tu pojawia się szkopuł, bo tych punktów jest 576.
Więc co LabVIEW powinien zrobić (przynajmniej taki mam pomysł), to dla każdego punktu z pliku obrotów:
0,311464586
0,3111492
0,31083389
0,310466124
0,310150978
0,309783403
Znaleźć najbliższy mu (o najbliższej wartości) punkt z pierwsze kolumny pliku z wykresem:
3.09062 0.331071
3.09915 0.333173
3.11197 0.333196
3.12049 0.335298
3.14613 0.335344
(czyli w przypadku punktu 0,311464586 jak i 0,3111492 z pierwszego pliku, to będzie punkt 3.11197 z drugiego pliku) i następnie wstawić odpowiadająca mu wartość z drugiej kolumny, w tym przypadku 0.333196 do równania u=2(Mg-2Mr)/F*d jako Mr i na tej podstawie wykreślić wykres, w którym każda z 999 wartości na osi x, ma swojego y - wyliczonego z równania na u.
Czy zna ktoś jakiś sprawdzony sposób na to?
Re: Przyporządkowywanie najbliższej wartości
: 25 paź 2012 19:04
autor: dzojstik22
"(czyli w przypadku punktu 0,311464586 jak i 0,3111492 z pierwszego pliku, to będzie punkt 3.11197 z drugiego pliku) i następnie wstawić odpowiadająca mu wartość z drugiej kolumny, w tym przypadku 0.333196 do równania u=2(Mg-2Mr)/F*d jako Mr i na tej podstawie wykreślić wykres, w którym każda z 999 wartości na osi x, ma swojego y - wyliczonego z równania na u."
Możesz to dokładnie opisać- raz u Ciebie punkt ma dwie współrzędne a raz jedną.
Re: Przyporządkowywanie najbliższej wartości
: 25 paź 2012 19:50
autor: 4B
Hmm, no dobra - no to przykładowa sekwencja (prawdopodobnie pętli for) :
punkt: 0,311464586 (tak jak pisałem, jest to jeden z 999 punktów na osi x)
-program szuka najbliższego mu odpowiednika w drugim pliku, w pierwszej kolumnie: 3.11197 i do wzoru u=2(Mg-2Mr)/F*d wstawia, za Mr, liczbę z drugiej kolumny: 0.333196
u=2(Mg-2*0.333196)/F*d -> pozostałe, to stałe i tak otrzymujemy wartość y dla tego konkretnie punktu (czyli 0,311464586).
dalej -> punkt 0,3111492
-w tym przypadku, po przeszukaniu pierwszej kolumny drugiego pliku - najbliższą wartością znowu jest 3.11197, czyli znowu wzór na u wygląda tak:
u=2(Mg-2*0.333196)/F*d -> i w efekcie otrzymujemy dla kolejnego punktu z osi x, kolejną wartość y - tyle, że akurat taką samą jak wcześniej. I tak dalej, aż każdy z 999 punktów będzie miał wartość y.
Jednocześnie, zdaje sobie sprawę, że takie dwie (takie same) wartości y obok siebie stworzą "schodek" na wykresie który tak ogólnie ma wyjść płynnie opadający.. ale może nie będzie tak widać. A jak będzie widać, to będę myślał jak z 999 punktów wybierać np. co drugi i mieć tylko 499 punktów na osi x. Ale to na razie jest inna bajka.
Przyporządkowywanie najbliższej wartości
: 25 paź 2012 23:35
autor: wiget
Witaj, jeśli masz tylko 999 próbek to najszybciej będzie Ci chyba zrobić pętlę for w pętli for - przeszukując (odejmując jedną liczbę od drugiej i wyciągając z różnicy moduł) - w ten sposób faktycznie będzie dużo operacji - ale szybko zaimplementujesz i uzyskasz wynik - moduły oczywiście porównujesz i wybierasz ten indeks z tabeli 2, który ma najmniejszą wartość modułu różnicy. Jak już masz nr indeksu - to wybierasz wartość z kolumny 2 i wstawiasz do wzoru. Brak bodu z braku czasu - jeśi będizesz miał problem to wrzuć pliki wejściowe to postaramy się szybko coś napisać żeby pomóc - ale więcej nauczysz się próbując samemu:)
Powodzenia.
Re: Przyporządkowywanie najbliższej wartości
: 25 paź 2012 23:55
autor: PiDi
Nie wiem, czy kumam, ale to chyba wystarczy:
- szukajnajblizszego.png (20.27 KiB) Przejrzano 8216 razy
Ed. A, nie doczytałem postu wigeta, który chce to samo... No to właśnie tak jest, ale bez pętli.
Re: Przyporządkowywanie najbliższej wartości
: 26 paź 2012 00:16
autor: trooper
Witam,
Widze ze kolega 4B się stara ... radziłbym jednak mniej chaotycznie na przyszłość. Pytanie dałoby się napisać w jednej linii + rysunek. Jeżeli spędziłbyś nieco więcej czasu na pożądnym napisaniu pytania, myślę, że sam zakodował byś rozwiązanie.
Problem nie jest trudny - nawet jak go źle zrozumiałem, to załączony poniżej przykład poprawisz dość szybko. Założyłem też, że pomyliłeś się w jednej z kolumn i wpisałeś wartości 10 razy większe. Nie musisz brać tych samych wartości - zawsze mozesz interpolować.
Ważna uwaga dot. funkcji interpolującej - funkcja nie moze byc nierosnąca (patrz help do funkcji)- więc jeżeli jest - to pokombinuj. Musisz też dołożyć czytanie z pliku.
Zaznaczę też, że łatwiej się poprawia kod niż pisze od nowa. Jeżeli załączyłbyś fragment czytający z pliku oraz plik byłoby dużo łatwiej
- tylko propozycja
Pozdrawiam i powodzenia w kodowaniu ... mozesz dać znać czy zadziałało ;)
Re: Przyporządkowywanie najbliższej wartości
: 26 paź 2012 00:25
autor: dzojstik22
Jeszcze taka uwaga na przyszłość- raz piszesz przecinki a raz kropki między cyframi. Nie wiem jak jest w różnych wersjach labview ale w mojej(2011) nie mogę wpisać kropek. Działania muszą być napisane z przecinkami.