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.

[JAVA] Wartość min i max funkcji z zastosowaniem klas.

elektro1122 30 Maj 2010 20:56 3524 25
  • #1 30 Maj 2010 20:56
    elektro1122
    Poziom 9  

    Stworzyłam sobie taki programik który ma wyznaczać wartość maksymalną i minimalną funkcji sinus na przedziale od 0 do 2 PI tylko coś w nim nie gra zwraca mi wartosci 0, a i może ktoś pomógł by mi go zmodyfikować żeby pokazywał dla jakiego x wartość jest max a dla jakiego min.

    0 25
  • #3 30 Maj 2010 21:30
    elektro1122
    Poziom 9  

    a jeśli zmienię typ zmiennych to wartości będą dokładniejsze?
    Funkcja Math.sin musi mieć dla x double? (o ile się nie mylę)

    0
  • #5 30 Maj 2010 21:44
    elektro1122
    Poziom 9  

    Krok? nie rozumiem.

    0
  • #7 30 Maj 2010 21:51
    elektro1122
    Poziom 9  

    nie wiem co w pętli jest nie tak przecież odwołuje się do funkcji z klasy JFunkcja

    0
  • #9 30 Maj 2010 21:55
    elektro1122
    Poziom 9  

    rozumiem że nie powinno być i++
    A jeśli chcę żeby kroki następowały po sobie co PI/4
    to jak to zapisać bo i+Math.PI / 4 nie bardzo działa

    0
  • #11 30 Maj 2010 22:05
    elektro1122
    Poziom 9  

    a jak mozna obszar badania zmniejszyc np co pi/4? próbowałam jak w poprzednim poście ale nie bardzo działa

    0
  • #13 30 Maj 2010 22:12
    elektro1122
    Poziom 9  

    super działa:)
    a nakieruje mnie ktoś jak zrobić żeby pokazywał dla jakiego x wartość jest max a dla jakiego min.

    0
  • #14 30 Maj 2010 22:16
    piterus99
    Poziom 43  

    Dwie zmienne tymczasowe, pod każdym ifem w pętli zapisujesz sobie do odpowiedniej zmiennej tymczasowej argument zamiast wyniku

    0
  • #15 30 Maj 2010 22:29
    elektro1122
    Poziom 9  

    coś w stylu double min = Math.sin(a);
    double max = Math.sin(b);

    i wczesniej double a=0;
    double b=0;

    0
  • #16 30 Maj 2010 22:32
    piterus99
    Poziom 43  

    To jest pytanie? Bo jeśli tak, to źle myślisz, albo nie do końca potrafisz przekazać o czym myślisz
    Masz zapisywać ARGUMENT, przekładając do Twojego kodu to jest i.

    0
  • #17 30 Maj 2010 22:41
    elektro1122
    Poziom 9  

    wyskakuje mi błąd że nie rozpoznaje i :(

    0
  • #19 30 Maj 2010 22:58
    elektro1122
    Poziom 9  

    kombinowałam coś w stylu i= max=przebieg.Funkcja(i);
    jako ze i jest argumentem w którym wartość funkcji od i wynosi max czy to całe max=przebieg.Funkcja(i) wziąć jako jakąś jedną zmienną
    (wiem moja java jest jeszcze słaba ale to dopiero początki:|)

    0
  • #20 30 Maj 2010 23:01
    piterus99
    Poziom 43  

    Sorki za dosadność, ale z Java nie musi być najlepiej - wystarczy dobre myślenie.

    Masz

    Code:
    if (przebieg.Funkcja(i) > max) 
    
         max = przebieg.Funkcja(i);

    Co oznacza, że jeżeli dla bieżącego argumentu wartość funkcji Funkcja(i) jest większa, to do max zapisz wartość funkcji dla bieżącego argumentu. To kto Ci zabroni jeszcze w tym momencie do innej zmiennej przepisać i?

    0
  • #21 30 Maj 2010 23:06
    wrych
    Poziom 20  

    Nie bardzo rozumiem sens tego problemu. W przedziale <0, 2Π> (pełny okres) funkcja sin(x) przyjmuje wartość najmniejszą -1 dla x=3Π/4 i największą 1 dla Π/4.
    Jednak ze względu na przestępność i niewymierność liczby Π i przybliżony charakter obliczeń na pewnym podzbiorze zbioru liczb wymiernych możesz nigdy tego wyniku nie uzyskać...
    Po wykonaniu poniższego kodu (traktuj to jako pseudokod wyjaśniający algorytm)

    Code:
    double krok = 0.01;
    
    double min = 2; // zdecydowanie więcej niż się spodziewam
    double max = -2; // zdecydowanie mniej niż się spodziewam
    double x = 0, x_min = 0 x_max = 0;
    while (x <= 2*PI)
      {
         if (sin(x)>max) {x_max = x; max = sin(x)};
         if (sin(x)<min) {x_min = x; min = sin(x)};
         x += krok;
       }

    uzyskasz wartość minimalną w punkcie (x_min, min) maksymalną w punkcie (x_max, max). Mieniając krok możesz uzyskać inne (dokładniejsze?) wyniki.
    Myślę, że z przerobieniem na Javę nie będzie problemów.

    0
  • #22 30 Maj 2010 23:20
    elektro1122
    Poziom 9  

    stosując twój kod po przeróbce wyświetla mi dla x=6,.... wartość jest max

    0
  • #24 30 Maj 2010 23:24
    elektro1122
    Poziom 9  

    Code:

    public void Max(double poczatekPrzedzialu, double koniecPrzedzialu)
       {
       JakaFunkcja przebieg = new JakaFunkcja();
         
        double max = 0;
              double min = 0;
        double imax = 0;
        double imin = 0;
       
       
    for (double i = poczatekPrzedzialu ; i <= koniecPrzedzialu; i+=((Math.PI)/20))
         {
         if (przebieg.Funkcja(i) > max)
         max = przebieg.Funkcja(i);
         imax = i;
       
         if (przebieg.Funkcja(i) < min)
         min = przebieg.Funkcja(i);
        imin = i;
        }

    0
  • #25 30 Maj 2010 23:25
    piterus99
    Poziom 43  

    O klamrach w ifie sie zapomniało.

    Code:
    if (przebieg.Funkcja(i) > max) {
    
         max = przebieg.Funkcja(i);
         imax = i; }
       
         if (przebieg.Funkcja(i) < min) {
         min = przebieg.Funkcja(i);
        imin = i;}

    0
  • #26 31 Maj 2010 00:35
    elektro1122
    Poziom 9  

    wielkie dzięki za pomoc :)

    0