MATLAB - Laboratorium 4

Rozwiązywanie równań nieliniowych. Budowa interfejsu graficznego

  1. Pierwiastki wielomianu: dla podanego przez prowadzącego NUMERU zadania wyznacz pierwiastki wielomianu (czyli rozwiązania równania W(x)=0) w sposób opisany niżej:

  2. Aby zobaczyć wyznaczone pierwiastki na wykresie, sporządź wykres wielomianu wykorzystując zdefiniowany w poprzednim zadaniu wektor współczynników i funkcję polyval oraz do skalowania funkcję axis) . Jako tytuł wykresu wstaw wzór wielomianu.

  3. Wiadomości do kolejnych ćwiczeń zawarte są w rozdziale 10 podręcznika [1]

  4. Przekopiuj program "Bilard1" (złożony z trzech plików), do trzech dokumentów w edytorze oraz uruchom i przetestuj.
    Następnie:
    a) Uzupełnij kod programu tak aby kwadracik odbijał się nie tylko od poziomych krawędzi okna ale także od pionowych.
    b) Dopisz pętlę FOR - aby po kliknięciu przycisku "Skok" kwadracik poruszał się sam (i wykonał 600 skoków).
    % ten program zapisz do pliku „Bilard1.m”
    clear; clc;
    % ------ Definiowanie okna graficznego:
    SZER=700; WYS=500;
    f1=figure('position',[50,80,SZER,WYS]);
    set(f1,'color',[0.5 0.5 0]);
    %------- Definiowanie przycisku:
    przycisk1=uicontrol('string','SKOCZ', 'Callback','przyrost');
    %------- Definiowanie napisu
    x=100; y=20; w=35; h=35; 
    napis1=uicontrol('Style','text', 'string','TUTAJ')
    set(napis1,'position',[x,y,w,h]);
    dx=10; dy=20; % to skok napisu do nowej pozycji
    %------- Definiowanie suwaka:
    suwak1=uicontrol('style','Slider', 'position',[20,50,20,140]);
    set(suwak1,'Callback','kolor')
    
    % ten podprogram zapisz do pliku „kolor.m”
    bb=get(suwak1,'Value');
    % set(f1,'Color',[1-sqrt(bb) bb bb^4]);
    set(napis1,'BackgroundColor',[1-sqrt(bb) bb bb^4]);
    
    % ten podprogram zapisz do pliku „przyrost.m”
    x=x+dx; y=y+dy;
    if y+h>=WYS | y<=0
        dy=-dy; beep;
    end
    set(napis1,'position',[x,y,w,h]); 
    pause(0.1);
    set(f1,'Color',[x/SZER 0.5 1-y/WYS]);
    

  5. Poniższy program "Kalkulatorek", złożony z trzech plików, przekopiuj do trzech dokumentów w edytorze oraz uruchom. Następnie przerób program tak, aby realizował mnożenie i dzielenie zamiast dodawania i odejmowania. Uwaga: ma także zapobiegać dzieleniu przez zero.
    % Program Kalkulatorek
    % Próbowanie interfejsu graficznego do najprostszych obliczeń:
    clear; clc
    F1=figure('Name','Kalkulatorek', 'Color',[0.6 0.6 1], 'Menubar','none'); % - to formatka
    set(F1,'Units','characters');
    % Okienka edycyjne:
    e1=uicontrol('Style','Edit','Units','normalized','Position',[0.1,  0.6, 0.15, 0.05]);
    e2=uicontrol('Style','Edit','Units','normalized','Position',[0.35, 0.6, 0.15, 0.05]);
    % Przyciski:
    b1=uicontrol('Style','Pushbutton','Units','normalized');
      set(b1,'Position',[0.275, 0.65, 0.05, 0.05],'String','+','Callback','Dodaj');
    b2=uicontrol('Style','Pushbutton','Units','normalized');
      set(b2,'Position',[0.275, 0.55, 0.05, 0.05],'String','-','Callback','Odejmij');
    % Tekst wynikowy:
    t1=uicontrol('Style','Text','Units','normalized','Position',[0.6, 0.6, 0.15, 0.05]);
      set(t1,'String',' = ');
    
    % to jest podprogram "Dodaj" wywoływany przyciskiem "+"
    x1 = str2double(get(e1, 'String'));
    x2 = str2double(get(e2, 'String'));
    y=x1+x2;
    set(t1,'String',[' = ',num2str(y)]);
    
    % to jest podprogram "Odejmij" wywoływany przyciskiem "-"
    x1 = str2double(get(e1, 'String'));
    x2 = str2double(get(e2, 'String'));
    y=x1-x2;
    set(t1,'String',[' = ',num2str(y)]);
    

  6. Napisz i uruchom program "Wielomian" opisany w podręczniku [1] str.238-240

    Poniżej masz zawartość trzech plików: pierwiastki.m, rysuj.m, nowe.m
    Utwórz takie pliki i uzupełnij miejsca kropek .... odpowiednimi poleceniami., a nastepnie uruchom i sprawdź działanie. Zmodyfikuj kolor i tytuł okna graficznego

    % program pierwiastki
    % cz.1 INICJACJA - jednorazowa
    clear;clc
    a=[1 5 2 20];
    r=roots(a);
    xp=min(real(r))-5; xk=max(real(r))+5;
    x=linspace(xp,xk);
    f1=figure;
    a1=axes('position',[0.06,0.06,0.5,0.85]);
    %---- Tekst i suwak dla współczynnika b:
    t1=uicontrol('style','text','units','normalized','position',[0.6,0.85,0.1,0.05]);
    s1=uicontrol('style','slider','units','normalized','position',[0.71,0.85,0.28,0.05
    ]);
    set(s1,'Min',-20,'Max',20,'Callback','nowe');
    %---- Tekst i suwak dla wyrazu wolnego d:
    t2=....
    s2=....
    set(s2,'Min',-500,'Max',500,'Callback','nowe');
    %----
    t03=uicontrol('style','text','units','normalized','position',[0.6,0.65,0.2,0.04]);
    set(t03,'string','Pierwiastki:')
    %---- Wyświetlanie wartości pierwiastków
    t3=uicontrol('style','text','units','normalized','position',[0.6,0.60,0.2,0.04]);
    t4=....
    t5=....
    rysuj;
    
    % procedura rysuj
    % wyznaczenie ciągu wartości wielomianu
    % dla danego wektora wspolczynnikow a
    % oraz ciągu wartości x wyznaczonego przez: x=linspace(xp,xk)
    y=polyval(a,x);
    plot(x,y); grid on
    st=['W(x)=x^3+',num2str(a(2)),'x^2+',num2str(a(3)),'x+',num2str(a(4))
    ];
    title(st);
    set(t1,'string',['b=',num2str(a(2))]);
    set(t2,'string',['d=',num2str(a(4))]);
    set(t3,'string',['r1=',num2str(r(1))]);
    set(t4,'string',['r2=',num2str(r(2))]);
    set(t5,'string',['r3=',num2str(r(3))]);
    
    % procedura nowe
    a(2)=get(s1,'Value');
    a(4)=get(s2,'Value');
    r=roots(a); % wyznacza 3 pierwiastki (takze zespolone)
    xp=min(real(r))-5; xk=max(real(r))+5;
    x=linspace(xp,xk); % wyznacza ciąg 100 wartości x między xp xk
    rysuj; % wywoluje procedure rysuj
    

    Zad.domowe 4. Interfejs okienkowy do programu z poprzedniego zadania domowego oraz
    dokończenie w domu zadań nieskończonych na ćwiczeniach.