mathematica - Table If

Mathematica, Matlab, Statistica, LaTeX i wszelkiego rodzaju oprogramowanie przydatne matematykowi w pracy. Miejsca w sieci poświęcone zagadnieniu.
Aniusia010791
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 8 paź 2010, o 20:17
Płeć: Kobieta
Lokalizacja: S....
Podziękował: 2 razy

mathematica - Table If

Post autor: Aniusia010791 »

Mam problem z wygenerowaniem takiego ciągu liczb
\(\displaystyle{ \left\{ 5112,2556,1278,639,319,159,79,39,19,9\right\}}\)
czyli chodzi o to aby zaczynając od 5112 dzielić ją na pół, a jeśli liczba jest nieparzysta to najpierw odejmowała sie jedynka i dalej dzieliło się na pół.
Na pewno musi być coś z Table. Dalej kombinowałam z If, While ale nie wychodzi mi.
If zapisałam w taki sposób
\(\displaystyle{ If \left[ EvenQ\left[ i\right] , i/2, \left( i - 1\right) /2\right]}\)
Proszę o pomoc
Awatar użytkownika
Medea 2
Użytkownik
Użytkownik
Posty: 2489
Rejestracja: 30 lis 2014, o 11:03
Płeć: Kobieta
Podziękował: 23 razy
Pomógł: 479 razy

mathematica - Table If

Post autor: Medea 2 »

Nie widzę rozwiązania z Table, przecież nie widać od razu, kiedy ciąg się skończy. Polecam rekurencję:

Kod: Zaznacz cały

Clear@fun;
fun[1] := {1}
fun[n_] := 
 fun[n] = If[
   EvenQ[n] && n > 0, {n}~Join~fun[n/2], {n}~Join~fun[(n - 1)/2]]
Aniusia010791
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 8 paź 2010, o 20:17
Płeć: Kobieta
Lokalizacja: S....
Podziękował: 2 razy

mathematica - Table If

Post autor: Aniusia010791 »

już coś mam. dziękuję. chciałabym sie tylko dowiedzieć jak działa "&&" i czemu służy Clear@fun?
Awatar użytkownika
Medea 2
Użytkownik
Użytkownik
Posty: 2489
Rejestracja: 30 lis 2014, o 11:03
Płeć: Kobieta
Podziękował: 23 razy
Pomógł: 479 razy

mathematica - Table If

Post autor: Medea 2 »

Pierwsza linijka usuwa definicję fun (bo nie wiem, czy nie deklarowałaś coś pod tą nazwą), podwójny ampersand to logiczna koniunkcja.
Aniusia010791
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 8 paź 2010, o 20:17
Płeć: Kobieta
Lokalizacja: S....
Podziękował: 2 razy

mathematica - Table If

Post autor: Aniusia010791 »

dziękuję, sama bym nigdy do tego nie doszła, a potrzebne mi to było do pracy mgr
luka52
Użytkownik
Użytkownik
Posty: 8297
Rejestracja: 1 maja 2006, o 20:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 47 razy
Pomógł: 1814 razy

mathematica - Table If

Post autor: luka52 »

Inny sposób to po prostu dzielić liczby przez 2 i skorzystać z funkcji podłoga:

Kod: Zaznacz cały

RecurrenceTable[{a[n + 1] == Floor[a[n]/2], a[1] == 5112}, a, {n, 1, 10}]
Medea 2 pisze:przecież nie widać od razu, kiedy ciąg się skończy
skończy się po ok. \(\displaystyle{ \lceil \log_2 5112 \rceil}\) iteracjach.
ODPOWIEDZ