Jak zapamietac posrednie wyniki z tablic?
Jak zapamietac posrednie wyniki z tablic?
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.
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.
...a jusci krowa co rycy duzo to mlika malo daje.
-
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Re: Jak zapamietac posrednie wyniki z tablic?
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
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?
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.
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.
...a jusci krowa co rycy duzo to mlika malo daje.
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Jak zapamietac posrednie wyniki z tablic?
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.
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?
>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...
...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...
...a jusci krowa co rycy duzo to mlika malo daje.
Re: Jak zapamietac posrednie wyniki z tablic?
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ł.
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ł.
-
- Administrator
- Posty: 1315
- Rejestracja: 30 lip 2003 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Ruda Śląska
- Kontakt:
Re: Jak zapamietac posrednie wyniki z tablic?
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
bogdani
Edit: Byłeś szybszy, ale skoro są dwie podobne odpowiedzi, to ona musi być dobra

Re: Jak zapamietac posrednie wyniki z tablic?
...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.
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.
Ostatnio zmieniony 28 gru 2006 18:43 przez bozydar, łącznie zmieniany 3 razy.
...a jusci krowa co rycy duzo to mlika malo daje.
Re: Jak zapamietac posrednie wyniki z tablic?
zaiste 
aczkolwiek jeśli podług parametru...;)

aczkolwiek jeśli podług parametru...;)
Re: Jak zapamietac posrednie wyniki z tablic?
Witam
Da sie to zapisac w LabVIEW jak ponizej.
pzdrv
Da sie to zapisac w LabVIEW jak ponizej.
pzdrv
Nie jestem leniwy
Mam zawyżone wymagania motywacyjne
Mam zawyżone wymagania motywacyjne
Re: Jak zapamietac posrednie wyniki z tablic?
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....
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....
...a jusci krowa co rycy duzo to mlika malo daje.
Re: Jak zapamietac posrednie wyniki z tablic?
Feedback Node?
- wino
- Posty: 549
- Rejestracja: 23 gru 2005 00:00
- Wersja środowiska: Nie mam LabVIEW
- Lokalizacja: Kraków
Re: Jak zapamietac posrednie wyniki z tablic?
wystarczy do tego Shift Register moim zdaniem i to będzie wyglądać o tak:
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
Re: Jak zapamietac posrednie wyniki z tablic?
> 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
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