Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

matlab; program badający zmienność funkcji

kichawa7 17 Kwi 2013 17:30 2562 2
  • #1 17 Kwi 2013 17:30
    kichawa7
    Poziom 12  

    Cześć, robię projekt w matlabie. Mam całość, tyle, że program błędnie liczy ekstrema i punkty przegięcia. Funkcja solve wyrzuca miejsca zerowe 1. i 2. pochodnej, liczy dobrze wartości, ale nie są faktyczne punkty przegięcia i ekstrema, patrząc po wykresie. Wydaje mi się, że powinno być sortowanie tych miejsc zerowych.
    Mam jakieś pseudo sortowanie, ale nie działa, wiadomo.
    Dzięki.

    [code]

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    clear all; close all;
    'Podaj poczatek i koniec zakresu osi X'
    xmin = input('xmin = ');
    xmax = input('xmax = ');

    syms x;
    'Podaj wzor funkcji'
    y = input('f(x) = ');
    ezplot(y, [xmin,xmax]);grid minor; xlabel('os x');ylabel('os y');
    title('Wykres funkcji f(x) ');



    %Dziedzina

    x_min = xmin
    x_max = xmax
    % Przeciwdziedzina

    x = xmin:0.0001:xmax;
    y2 = subs(y);
    y_min = min(double(y2))
    y_max = max(double(y2))
    % wartosc srednia

    wartosc_srednia = mean(double(y2));
    epsilon = 0.000000000001;
    if (wartosc_srednia>-epsilon)
    if (wartosc_srednia < epsilon)
    wartosc_srednia = 0;
    else wartosc_srednia = mean(double(y2));
    end
    end
    wartosc_srednia_funkcji = wartosc_srednia

    % miejsca zerowe
    miejsca_zerowe = double(solve(y))
    % Ekstrema
    'Wzor pochodnej funkcji'
    y1 = diff(y)
    'Ekstrema funkcji'
    argumenty_ekstremow = double(solve(y1))
    x = double(argumenty_ekstremow);
    wartosci_ekstremow = double(eval(y))

    % punkty przegiecia
    'Wzor drugiej pochodnej funkcji'
    sortuj(tablica tab)
    for i=0 to r-2 do
    for j=r-1 downto i+1 do
    if (tab[j-1]>tab[j])
    zamień elementy tab[j] i tab[j-1]


    y2 = diff(y,2)
    x = xmin:0.0001:xmax;
    punkty_przegiecia = double(solve(y2))



    %Funkcja ujemna badz dodatnia (y)
    z = zeros(1,1);
    z(1) = xmin;
    j=2;
    for i = 1:length(miejsca_zerowe)
    z(j) = miejsca_zerowe(i);
    j = j+1;
    end
    z(j) = xmax;
    for i=1:length(z)-1
    x = z(i)+epsilon;
    y2 = subs(y);
    if(y2 > 0)
    sprintf('Funkcja jest dodatnia na przedziale <%d,%d>',z(i),z(i+1))
    else
    sprintf('Funkcja jest ujemna na przedziale <%d,%d>',z(i),z(i+1))
    end
    end



    % monotonicznosc
    z = zeros(1,1);
    z(1) = xmin;
    j=2;
    for i=1:length(argumenty_ekstremow)
    z(j) = argumenty_ekstremow(i);
    j = j+1;
    end
    z(j) = xmax;
    for i = 1:length(z)-1
    x = z(i)+epsilon;
    y2 = subs(y1);
    if(y2 > 0)
    sprintf('Funkcja jest rosnaca na przedziale <%d,%d>',z(i),z(i+1))
    else
    sprintf('Funkcja jest malejaca na przedziale <%d,%d>',z(i),z(i+1))
    end
    end






    Cytat:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    sortuj(tablica tab)
    for i=0 to r-2 do
    for j=r-1 downto i+1 do
    if (tab[j-1]>tab[j])
    zamień elementy tab[j] i tab[j-1]


    A tutaj to pseudo sortowanie.

    0 2
  • #2 17 Kwi 2013 17:49
    Raphaw
    Poziom 20  

    Przecież jest gotowa funkcja sort.

    0
  • #3 17 Kwi 2013 18:39
    kichawa7
    Poziom 12  

    [code]

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Coś takiego tylko? :)

    0