[Matlab] Zapis funkcji

maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

Witam serdecznie
Mam problem z napisaniem tej funkcji w matlabie:

\(\displaystyle{ y=\begin{cases} 1 \text{ gdy } x<-1 \\ x^{2} \text{ gdy } -1 \le x \le 1 \\ x \text{ gdy }>1 \end{cases}}\)

+ wykres tej funkcji.

Podejrzewam, że powinnam wykorzystać if, elseif, else aczkolwiek nie wiem jak. Dopiero zaczynam naukę z tym programem dlatego proszę o pomoc:)

Pozdrawiam
Ostatnio zmieniony 27 lut 2013, o 13:53 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Ale dokładnie masz narysować wykres tej funkcji, czy też napisać skrypt który wywołuje wartości dla danych argumentów. Czy to i to?
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

Muszę zrobić to i to.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Nie pamiętam składni ale jak CI wysypie to się na błędy popatrzy.
Możesz spróbować taki kod. Pewnie wysypie Ci trochę błędów, ale spróbować można. Nie pamiętam czy jest operator =>:P

Kod: Zaznacz cały

function y=funkcja(x);
y=1.*(x<-1)+x.*(-1<= x & x<= 1)+x.^2*(x>1);
end
Drugi sposób z if :

Kod: Zaznacz cały

function y=funkcja(x);
if x<-1 ;
y=1 else
       if x>= -1 & x<=1
       y=x else 
             y=x^2
              end
        end
end
end
Tak to jakoś by szło, bez błędów się nie obejdzie. Jeśli chodzi o rysowanie, to są dwie funkcje plot,ezplot. Ta pierwsza pobiera dwa wektory, czyli najpierw musisz zrobić coś takiego:

Kod: Zaznacz cały

x=-3:.01:3;
y=funkcja(x);
plot(x,y);
Natomiast ezplot działa symbolicznie i nie wiem czy złożenie na odpowiednich przedziałach będzie możliwe. Bardzo możliwe, że wystarczy tylko komenda hold on po każdym rysunku.
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

Bardzo dziekuję.!

Po wpisaniu pierwszego kodu, kiedy podstawiłam za x 2 wyświetliło się
funkcjaa(2)

ans =

4

Więc w zasadzie nie wiem co jest źle. A po wpisaniu 2 kodu :
Illegal use of reserved keyword "else".

A jeżeli chodzi o wykres funkcji, to mogę poprosić o wytłumaczenie tego wiersza :
x=-3:.01:3
czy x zawsze musi być zdefiniowany? Niestety nie wiem o co chodzi.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Po wpisaniu pierwszego kodu, kiedy podstawiłam za x 2 wyświetliło się
Bo ja tam odwrotnie napisałem winno być:

Kod: Zaznacz cały

function y=funkcja(x);
y=1.*(x<-1)+x.^2.*(-1<= x & x<= 1)+x.*(x>1);
end
Nie zapomnij o kropkach.
Illegal use of reserved keyword "else".
Spróbuj elseif, ale najpierw wpisz help elseif, zobacz, czy jest i czy będzie Ci to pasowało.
Jest też funkcja switch,case i ją też by można było użyć. Ale ten pierwszy kod można stosować na wektorach. Nie wiem czy pozostałe będzie można.
czy x zawsze musi być zdefiniowany? Niestety nie wiem o co chodzi.
Jeśli chcesz użyć funkcji plot, to tak. Sam kod oznacza, że \(\displaystyle{ x}\) to wektor. Jego pierwsza współrzędna to \(\displaystyle{ -3}\), ostatnia to \(\displaystyle{ 3}\), a każda następna jest większa o \(\displaystyle{ 0.1}\). Wpisz sobie też help linspace, bo działa dość podobnie.
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

badzo dziekuję raz jeszcze, spróbuję to wszystko wpisać.
witekkq
Użytkownik
Użytkownik
Posty: 145
Rejestracja: 16 lis 2007, o 09:06
Płeć: Mężczyzna
Lokalizacja: Gniezno
Podziękował: 2 razy
Pomógł: 27 razy

[Matlab] Zapis funkcji

Post autor: witekkq »

funkcja.m

Kod: Zaznacz cały

function y=funkcja(x)
if x<-1
    y=1; 
elseif x>=1
    y=x;
else
    y=x^2;
end
wywołanie przykładowe:

Kod: Zaznacz cały

x=-2:0.1:2;
y=[];

for i=1:1:length(x)
    y=[y funkcja(x(i))];
end

plot(x,y);
xlabel('Os X')
ylabel('Os Y')
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

No i działa, dzięki za pomoc

Mam problem z jeszcze jednym zadaniem:
Napisz funkcję, która za wejściowy argument bierze macierz kwadratową i zwraca wektor którego komponenty są sumą wierszy macierzy.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Taka funkcja jest wbudowana help sum, daje wiersze bądź kolumny w zależności od parametrów.
Przyda Ci się zapoznanie z funkcjami:

Kod: Zaznacz cały

help size
help zeros 
help for
Macierz nie musi być kwadratowa, choć jeśli ma byc koniecznie to się poprawnie. To mniej więcej leci tak. Tutaj może być problem z wymiarami.

Kod: Zaznacz cały

function wektor=suma(A);
[wiersz, kol]=size(A);
wektor=zeros(1,kol)
for i=1:wiersz
wektor=wektor+A(i,:);
end
end
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

W zadaniu jest podane, że musi być kwadratowa ale dzieki spróbuję to sobie poprawić.-- 27 lut 2013, o 11:35 --Chyba jednak nie wiem jak ;p
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Wystarczy tylko wrzucić if.

Kod: Zaznacz cały

function wektor=suma(A);
[wiersz, kol]=size(A);
if wiersz==kol
wektor=zeros(1,kol)
for i=1:wiersz
wektor=wektor+A(i,:);
   else
disp('To nie jest macierz kwadratowa')
end
end
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

Hmm coś jeszcze jest nie tak, jestem zielona w tym temacie. Żeby wywołać tą funkcję powinnam wpisać w oknie komend : suma( jakaś macierz) ?
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Zapis funkcji

Post autor: pyzol »

Oczywiście.
maxishine
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 sty 2012, o 15:29
Płeć: Kobieta
Lokalizacja: Cieszyn
Podziękował: 6 razy

[Matlab] Zapis funkcji

Post autor: maxishine »

hmm wyświetla mi to : Illegal use of reserved keyword "else". Próbowałam poprawić ale nie wyszło
ODPOWIEDZ