Octave - problem z zadaniem


(Phinsectoman) #1

Witam, mam polecenie: 

Napisz funkcje realizującą poniższy wzór:

 

[tex]dla  x < 0    sin(x)[/tex]

[tex]dla  0 \le x \le 1   x^2[/tex]

[tex]dla x > 1   1[/tex]

 

Narysuj wykres tej funkcji w przedziale <-3;3> dla kroku 0.1

 

Moja funkcja wygląda tak:

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:

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?


(Rolek0) #2

Jeśli porównujesz dwie macierze lub macierz ze skalarem (wektor to też macierz) to dostajesz macierz wartości logicznych.

Jeśli podajesz _if_owi macierz to przejdzie on tylko wtedy gdy wszystkie elementy będą prawdziwe.

Przekazuj swojej funkcji tylko skalary (np. w pętli) albo pozbądź się instrukcji warunkowych.