IP: *.aster.pl / *.aster.pl 29.03.05, 13:27
czy ma ktos pojecie o pisaniu dosyc prostych programikow w matlabie.
Najprostsze funkcje zlozone, bo ewentualnie bym prosil o pomoc w napisaniu
(albo i napisanie) zadania
Obserwuj wątek
    • freebaby Re: Matlab 29.03.05, 16:16
      a jaki problem masz do rozwiazania? daj przyklady
      • Gość: Marks Re: Matlab IP: *.aster.pl / *.aster.pl 29.03.05, 16:37
        Narysuj funkcje:

        y(x)=
        20 dla 1<x<=10
        2*x dla 10<x<=20
        40 dla 20<x<=50

        niestety nie potrafie tego zrobic. nie jest to pewnie skomplikowane, ale...
        • freebaby Re: Matlab 29.03.05, 18:09
          a=0;

          while a==0,

          x=input('Podaj wartosc argumentu funkcji x=');
          a=1;
          if ((x<=1|x>51)|(x>20&x<=40))
          a=0;
          disp('Podaj wartosc argumentu jeszcze raz - wartosc spoza zakresu');
          end;

          end;

          if (x>1 & x<=10) stem(20,x); end;
          if (x>10 & x<=20) stem(2*x,x); end;
          if (x>40 & x<=50) stem(40,x); end;

          end
          • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 18:49
            A czy bylo by mozliwe wytlumaczenie tego programu? tak w skrocie. Bylbym
            wdzieczny. pozdrawiam
          • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 18:55
            Ewentualnie metoda bardziej lopatologiczna, jesli istnieje :)
          • freebaby Re: Matlab 29.03.05, 19:02
            a=0; % inicjujemy zmienna pomocnicza a, ktora uzyta bedzie w petli while.
            Ustawienie jej na "0" sprawia,ze warunek jest spelniony,a petla wykonywana
            dopoki wartosc wynosi "0".

            while a==0, %poczatek petli,ktorej sprawdzenie wyrazenia logicznego nastepuje na
            koncu petli

            x=input('Podaj wartosc argumentu funkcji x='); %pobieramy wartosc argumentu x
            a=1; %a=1, powoduje wyjscie z petli
            if ((x<=1|x>51)|(x>20&x<=40)) %petla wylapujaca nieprawidlowe wartosci
            a=0; %wykryto nieprawidlowe wartosci - petla wykonac sie musi jeszcze raz
            disp('Podaj wartosc argumentu jeszcze raz - wartosc spoza zakresu');
            %wyswietla komunikat
            end; %koniec petli if

            end; %koniec petli while

            if (x>1 & x<=10) stem(20,x); end; %kreslenie wartosci dyskretnej dla warunku 1<x<=10
            if (x>10 & x<=20) stem(2*x,x); end; %kreslenie wartosci dyskretnej dla warunku
            10<x<=20
            if (x>40 & x<=50) stem(40,x); end; %kreslenie wartosci dyskretnej dla warunku
            40<x<=50

            end %koniec programu (np. m-file'a)


            • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 19:10
              a czy ewentualnie istnieją inne sposoby bez uzycia petli while ???
              • freebaby Re: Matlab 29.03.05, 19:29
                ta petla while byla do wyeliminowania zlych wartosci. mozna petla if to samo zrobic.
                • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 19:51
                  A mozna prosic o rozwiazanie z uzyciem jedynie petli if, byloby mi prosciej :)
                  Przepraszam ze zawracam glowe :)
                  • freebaby Re: Matlab 29.03.05, 20:07

                    if (x>1 & x<=10) stem(20,x)
                    elseif (x>10 & x<=20) stem(2*x,x)
                    elseif (x>40 & x<=50) stem(40,x);
                    else disp('Liczba spoza zakresu');
                    end;

                    mozna i tak
                    • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 20:41
                      Jakie jest dzialanie funkcji 'stem' tzn wiem ze ona mi to rysuje, ale czy to
                      cos bardziej skomplkowanego czy jedna z podstawowych?
                      • freebaby Re: Matlab 29.03.05, 20:47
                        podstawowa, do kreslenia wartosci dyskretnych - inne to np.
                        plot,loglog,bar,stairs,semilogx itd.. wiecej info znajdziesz na w helpie, gdzie
                        wpisujac help w oknie polecen uzyskasz uszeregowana liste wszystkich polecen
                        matlab'a.
                        • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 21:30
                          "if (x>1 & x<=10) stem(20,x)
                          elseif (x>10 & x<=20) stem(2*x,x)
                          elseif (x>40 & x<=50) stem(40,x);
                          else disp('Liczba spoza zakresu');
                          end;
                          "
                          to jeszcze na poczatku winno miec "x=input('podaj wartosc')" np. tak?

                          a za pomoca "plot" jest mozliwosc zrobienia? bo jak ja probowalem zrobic cos
                          z "plot" to wyskakiwaly tylko punkty, a nie linia ciagla, co mniemam zapewnia
                          wlasnie funkcja "stem"
                          • freebaby Re: Matlab 29.03.05, 21:38
                            dokladnie. a plot rysuje wykres, bedzie on polaczony liniami jezeli x,y beda
                            wektorami (o tych samych rozmiarach) zawierajacymi wspolrzedne.
                            • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 21:58
                              A bylaby mozliwosc napisania programu z uzyciem "plot" :)
                              • freebaby Re: Matlab 29.03.05, 22:24
                                jak mialby przebieg tej funkcji wygladac? wg wytycznych sa to wartosci
                                dyskretne, wiec moze zaprezentowac to jak poziom wysoki dla danego zakresu np.
                                1<x<10 jako poziom (taki prostokat) 20 ??
                                • Gość: Marks Re: Matlab IP: 217.153.87.* 29.03.05, 22:36
                                  mi sie wydaje ze ma byc tak, iz jesli podam
                                  1. x od 1 do 10 to rysuje wykres y=20 w przedziale 1-10, jak podam
                                  2. x od 10 do 20 to rysuje wykres y=2x (dla tego podanego x) w przedziale 10-20
                                  3. x od 20 do 50 --> patrz pkt. 1
                                  4. x spoza zakresu, nie rysuje nic
                                  • freebaby Re: Matlab 29.03.05, 22:55
                                    najprosciej bedzie z bar (wykres slupkowy):

                                    x=input('Podaj wartosc argumentu funkcji x=');
                                    if (x>1 & x<=10) bar([1 10],[20 20])
                                    elseif (x>10 & x<=20) bar([10 20],[2*x 2*x]);
                                    elseif (x>20 & x<=50) bar([20 40],[40 40]);
                                    else disp('Wartosc spoza zakresu');
                                    end;

                                    z plot bedzie tak:

                                    if (x>1 & x<=10) plot([1 10],[20 20])
                                    elseif (x>10 & x<=20) plot([10 20],[2*x 2*x]);
                                    elseif (x>20 & x<=50) plot([20 40],[40 40]);
                                    else disp('Wartosc spoza zakresu');
                                    end;

                                    jezeli chcesz zbudowac prostokacic to musisz dodac odpowiednie elementy wektrora
                                    np dla przypadku 1<x<=10 : [1 1 10 10],[0 20 20 0]

                                    istniej rowniez sporo atrybutow do odpowiedniego ustawienia wykresu, takich jak
                                    osie kolory itp. - wymaga to chwili zabawy. Sorrki za wczesniejsze bledne
                                    programy,ale jakos zle odczytalem zakresy danych (3 zakres).
                                    • Gość: Marks Re: Matlab IP: *.aster.pl / *.aster.pl 29.03.05, 23:22
                                      A jesli mialoby wygladac to tak ze chce ujrzec cala to funkcje y(x), od 1<x<50
                                      wygladala by wtedy mniejwiecej tak:
                                      __
                                      /
                                      __/

                                      y(x)=
                                      20 dla 1<x<=10
                                      2*x dla 10<x<=20
                                      40 dla 20<x<=50

                                      czyli by przyjmowala dla
                                      x:1-10 y=20
                                      x:10-20 y=20,22,24,26,28,...,38,40 (dla kazdego z x)
                                      x:20-50 y=40

                                      bardzo podoba mi sie metoda z wektorami...
                                      please.......
                                    • Gość: Marks Re: Matlab IP: *.aster.pl / *.aster.pl 29.03.05, 23:23
                                    • Gość: Marks Re: Matlab IP: *.aster.pl / *.aster.pl 29.03.05, 23:24
                                      __
                                      /
                                      __/

                                      tak znaczy sie, widomo o co chodzi :>
                                      • freebaby Re: Matlab 29.03.05, 23:41
                                        czyli ten srodkowy zakres jako takie schodki ? a caly przebieg, co masz na mysli ?
                                        • Gość: Marks Re: Matlab IP: *.aster.pl / *.aster.pl 29.03.05, 23:42
                                          mailem napisze, wrzuce jakiegos painta aby bylo widac o co chodzi

Nie masz jeszcze konta? Zarejestruj się


Nakarm Pajacyka