[Octave] Funkcja obliczająca wzór

insectoman
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 1 maja 2015, o 20:56
Płeć: Mężczyzna
Lokalizacja: Podkarpacie
Podziękował: 2 razy

[Octave] Funkcja obliczająca wzór

Post autor: insectoman »

Witam, mam polecenie:

Kod: Zaznacz cały

Napisz funkcje realizującą poniższy wzór:
\(\displaystyle{ \begin{cases} \sin \left( x \right) \text{ dla } x < 0\\ x^2 \text{ dla } 0 \le x \le 1 \\ 0 \text{ dla } x > 1\end{cases}}\)

Kod: Zaznacz cały

Narysuj wykres tej funkcji w przedziale [-3;3] dla kroku 0.1
Moja funkcja wygląda tak:

Kod: Zaznacz cały

function k=wybor(x)

if(x<0)
  k=sin(x);
elseif(x>=0&&x<=1)
  k=x^2;
else
  k=1;
 endif
 
endfunction
Wywołanie tak:

Kod: Zaznacz cały

X=[-3:0.1:3];
plot(X,wybor(X))
No i nie działa. Wartości funkcji na wykresie zawsze są równe 1... Co zrobiłem nie tak?
Ostatnio zmieniony 7 cze 2015, o 08:40 przez Afish, łącznie zmieniany 2 razy.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

[Octave] Funkcja obliczająca wzór

Post autor: mdd »

insectoman pisze:Moja funkcja wygląda tak:

Kod: Zaznacz cały

function k=wybor(x)

if(x<0)
  k=sin(x);
elseif(x>=0&&x<=1)
  k=x^2;
else
  k=1;
 endif
 
endfunction
Wynikiem działania Twojej funkcji jest zawsze zmienna o rozmiarze 1 x 1, podczas gdy Ty chcesz uzyskać wektor odpowiedzi na poszczególne elementy wektora wejściowego.
1) W pliku funkcyjnym można powtórzyć procedurę dla każdego z elementów wektora wejściowego.
2) Można zmienić sposób wywoływania Twojej funkcji (np. w pętli for odwołać się do każdej składowej wektora wejściowego) - ale tego pewnie byś nie chciał.
Ukryta treść:    
insectoman
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 1 maja 2015, o 20:56
Płeć: Mężczyzna
Lokalizacja: Podkarpacie
Podziękował: 2 razy

[Octave] Funkcja obliczająca wzór

Post autor: insectoman »

Juz sobie z tym poradziłem. Po prostu dałem fora i zamiast x to x(i),a zamiast k to k(i) i działa wszystko.

Czy mógłby mi ktoś wytłumaczyć czym się różni operator mnożenia tablicowego w octave (.*) od operatora mnożenia zwykłego (*)?
Awatar użytkownika
p-adyczny Leo
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 19 maja 2014, o 22:14
Płeć: Mężczyzna
Lokalizacja: Polandia
Podziękował: 5 razy
Pomógł: 14 razy

[Octave] Funkcja obliczająca wzór

Post autor: p-adyczny Leo »

Jeśli tym samym, co w Matlabie, to: zwykłe mnożenie macierzy odpowiada zwykłemu ich iloczynowi, tablicowe iloczynowi Kroneckera.
ODPOWIEDZ