Strona 1 z 2
Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 01:05
autor: bozydar
Witam wszystkich. Mam taki problem:
1. Mam wektory X i Y (na poczatku zadeklarowane np. w jakiejs tablicy)
2. Mnoze skalarnie: X*Y,
3. Wynik jest argumentem funkcji Z = f(X*Y)
4. Zmieniam wektor Y (ten z p-tu 1) (uzywajac wyliczonego Z, ale to akurat nieistotne).
5. Ten zmieniony wektor Y wstawiam do iloczynu skalarnego z p-tu2 i dalej zgodnie z kolejnoscia.
Petla powinna byc wykonana okreslona liczbe razy (ale to juz nie stanowi problemu:)). Cokolwiek nie wymysle to zawsze dojde do jakiejs sprzecznosci: albo musze zapisac to co jest tylko do odczytu, nie zgadzaja sie kierunki przesylania danych itp. Usilowalem znalezc jakis "bloczek" do zapamietania wartosci tablicy - nic z tego. Czy ktos moze mi podrzucic jakis zgrabny sposob wyjscia z tej sytuacji?? Z gory dziekuje.
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 08:39
autor: bogdani
Witaj
Może najlepszym wyjściem będzie pokazanie twojego kodu, łatwiej będzie znaleźć błąd.
Spokojnie możesz załączyć plik VI do wiadomości na forum.
bogdani
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 12:25
autor: wino
Może tak
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 15:17
autor: bozydar
Od kilku dni uzywam Labview i jeszcze funkcjonuja u mnie schematy myslowe z C++ i pewnie to jest najwieksza przeszkoda.
Glowne problemy przedstawilem w pliku ponizej (test.vi).
1.Jak zmienic tablice (wektro) Y uzywajac wyjscia?. (problem z polaczeniem)
2.Jesli zainicjuje tablice wartosciami losowymi to za kazdym nast. cyklem wartosci Y beda sie zmieniac przypadkowo, wiec w drugim cyklu (zamiast losowych)bede juz musial podstawic (jako stale), wartosci wylosowane w pierwszym cyklu. Jedyny sposob wykonania tego to "shift register" i np. wstawienie f-cji losujacej do struktury case? Nie ma latwiejszej metody? Jakis jeden "bloczek" zapamietujacy wartosc tablicy moglby zastapic spora "platanine"...
W pliku pokazalem tylko "ramy" problemu, zeby zilustrowac moje pytania.
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 15:36
autor: wino
Ad.1 Nie da się tego zrobić.
Ad.2
http://www.labview.pl/Content/pid=8/page=3.html w tym linku jest opisane działanie
Shift Register'a
Operator rejestru przesuwnego służy do przenoszenia danych pomiędzy kolejnymi iteracjami pętli for i while. To oznacza, że
zapamiętuje wynik z poprzedniej iteracji. Wystarczy go w twoim przypadku zainicjować wartościami losowymi, a w kolejnych iteracjach na nim bedą się pojawiały wartości z poprzedniego obrotu pętli.
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 16:30
autor: bozydar
>Operator rejestru przesuwnego służy do przenoszenia danych pomiędzy >kolejnymi iteracjami pętli for i while. To oznacza, że zapamiętuje wynik z >poprzedniej iteracji. Wystarczy go w twoim przypadku zainicjować >wartościami losowymi, a w kolejnych iteracjach na nim bedą się pojawiały >wartości z poprzedniego obrotu pętli.
...ale to chyba nie rozwiaze problemu, bo potrzebne jest cos takiego:
1. wyliczam wartosc losowa (np. 6)
2. mnoze te losowa szostke z jakams inna dowlona liczba.
3 wynik mnozenia musze dodac do wczesniej wylosowanej szostki - i tu jest problem, bo 6 nie jest pamietane tylko jest juz wstawiona nastepna wylosowana liczba.
Wpadlem na pomysl i przetestuje zamiane wartosci losowej z wyjsciem Shift Registera w nastepnym cyklu petli. Dam znac czy cos mi z tego wyszlo...
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 17:52
autor: Mikrobi
Shift Register możesz rozciągnąć - sprawdź jak to dziala na jakimś prostym przykładzie np. z dodawaniem.
W rozciągniętym z lewej strony SR bedziesz mial kolejne wartości z poprzedniej, 2 wstecz, 3 wstecz iteracje itd.
Jeśli jednak potrzebujesz pobierać pamietane wartości według jakiegoś parametru, to powinieneś zastosować tablicę z dodawanymi elementami, które potem według potrzeby bedziesz indeksował.
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 17:56
autor: bogdani
Ten twój problem dostępu do wcześniejszych danych rozwiązuje Shift Register przecięgnięty w dół (tak jakby miał kilka wejść), wtedy z każdego takiego stapnia masz liczbę z wcześniejszej iteracji.
bogdani
Edit: Byłeś szybszy, ale skoro są dwie podobne odpowiedzi, to ona musi być dobra

Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 18:02
autor: bozydar
...albo problem przedstawie w ten sposob:
Jak w labview7.1 wykonac cos takiego:
double w[5];
double x[5] = {1,2,3,4,5};
double pom=0;
int i,j;
for(i =0; i<=4; i++)
____w = random();_//na poczatku tylko raz przypisane wartosci losowe dla tablicy w[]
for(j=0; j<=10; j++) {_ //petla powtorzona np. 10 razy (lub dowolna ilosc)
____for(i=0; i<=4; i++)
________pom += w*x;_//wartosc pomocnicza = iloczyn skalarny w[] i x[]
____for(i=0; i<=4; i++)
________w = w - pom; //ze szczegolnym uwzglednieniem tej linijki: korekta wektora w[] za pomoca zmiennej pom.
}
...bede bardzo wdzieczny za pomoc...
P.S. Przepraszam za formatowanie, ale znikaja spacje.
Re: Jak zapamietac posrednie wyniki z tablic?
: 28 gru 2006 18:02
autor: Mikrobi
zaiste
aczkolwiek jeśli podług parametru...;)
Re: Jak zapamietac posrednie wyniki z tablic?
: 29 gru 2006 01:38
autor: PMaj
Witam
Da sie to zapisac w LabVIEW jak ponizej.
pzdrv
Re: Jak zapamietac posrednie wyniki z tablic?
: 29 gru 2006 11:48
autor: bozydar
Witam wszystkich. Caly czas to nie jest to. Z ukladu ktory przeslal PMaj dla przykladowych danych:
x[4] = {1,2,3,4}
w[4] = {6,7,8,9} i dla czerech "obrotow" glownej petli otrzymujemy:
w pierwszej glownej iteracji:w[] = {-74,-73,-72,-71}
w drugiej glownej iteracji:w[] = {-154,-153,-152,-151}
w trzeciej glownej iteracji:w[] = {-234,-233,-232,-231}
w czwartej glownej iteracji:w[] = {-314,-313,-312,-311}
...a powinno byc:
w pierwszej glownej iteracji:w[] = {-74,-73,-72,-71}
w drugiej glownej iteracji:w[] = {566,567,568,569}
w trzeciej glownej iteracji:w[] = {-4474,-4473,-4472,-4471}
w czwartej glownej iteracji:w[] = {35206,35207,35208,35209}
Caly problem polega na tym, ze w C mozna zapisac instrukcje w = w + 1 (w ogolnosci nieprawdziwe jako wyrazenie matematyczne), natomiast, w "logicznym do bolu" labview, bez jakiegos rejestru (innego od shift registera), na obecna chwile nie widze jakiejs zgrabnej metody...ale zawsze moge sie mylic....
Re: Jak zapamietac posrednie wyniki z tablic?
: 29 gru 2006 11:59
autor: Mikrobi
Feedback Node?
Re: Jak zapamietac posrednie wyniki z tablic?
: 29 gru 2006 12:21
autor: wino
wystarczy do tego Shift Register moim zdaniem i to będzie wyglądać o tak:
Re: Jak zapamietac posrednie wyniki z tablic?
: 29 gru 2006 13:29
autor: jogurt_owocowy
> Caly problem polega na tym, ze w C mozna zapisac instrukcje w = w + 1
A jak to się robi w LV?
Pamiętam, że jak parę lat temu zaczynałem swoją zabawę z LV to dla mnie też była to pierwsza kłoda pod nogami:)
A jak ją obejść to już koledzy napisali.
Pozdrawiam