Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Liczba miejsc zerowych dla dowolnej funkcji


Rekomendowane odpowiedzi

Opublikowano
Witam!
Nie mam bladego pojęcia jak wykonać pewien algorytm.
Otóż w c++ muszę napisać algorytm, który wyświetli mi jedynie ilość rozwiązań (miejsc zerowych) dowolnej funkcji np. x²-8x+14.
Niestety moja wiedza jest nietety nikła na ten temat i proszę bardzooo o go...go...gotowca :|
Oczywiście każdą pracę nagrodzę  ogromną wdzięcznością z mojej strony ;) Z góry dzięki.
 
Do tej pory robiliśmy coś takiego na funkcji liniowej. Algorytm jednak wyliczał tylko 1 miejsce zerowe. Udostępniam kod tego zadania, może ktoś przerobi.
 
 

 

#include <iostream> 

#include <cstdio> 
#include <cmath> 
using namespace std; 
double E1=0.000000000000000001;  
double oblicz (double p, double q, double E1) 
  
    double s=(p+q)/2; 
    while ((p*(-1)+5)!=0 && (q*(-1)+5)!=0 && q-p>=E1) 
    { 
        s=(p+q)/2; 
        if ((p*(-1)+5)*(s*(-1)+5)>0) p=s; else q=s; 
    } 
if ((p*(-1)+5)==0) return p; 
if ((q*(-1)+5)==0) return q; 
return s; 
int main() 
      
double p,q,s; 
      
    cout<<"Podaj zmienna p \n"; 
    cin>>p; 
    cout<<"Podaj zmienna q \n"; 
    cin>>q; 
      
    s=oblicz(p,q,E1); 
    cout<<"mz= "<<s<<endl; 
      
}

 

 

Kocham mpcforum.pl!!!

18706.png

Opublikowano

Dowolnej funkcji.

Dziedzina rzeczywista.

 

@Sopelek

Kod który podałem jest do funkcji liniowej! Czytaj trochę!

Wylicza on tylko jedno miejsce zerowe. Nawet jeśli wstawisz tam funkcje kwadratowa z dwoma pierwiastki to wyliczy tylko jedno i tyle.

 

Całość ma wyświetlać jedynie liczbę rozwiązań dla dowolnej funkcji np. kwadratowej. Może być to też x do szóstej wtedy rozwiązań może być ich aż 6.

Kocham mpcforum.pl!!!

18706.png

Opublikowano

@4ggr

Algorytm wyżej liczy dla funkcji -p+5 i to samo dla -q+5.

Chcesz inną funkcję to zmień ją w algorytmie!

Mam ci rozpisać wzór ogólny?

Działanie jest proste. W przedziale jakim podamy p i q program dzieli go na połowy aż znajdzie miejsce zerowe i na jednym miejscu zerowym skończy. Chodzi o to aby dla dowolnej funkcji, nie tylko kwadratowej czy liniowej pokazał wszystkie miejsca zerowe!

Kocham mpcforum.pl!!!

18706.png

Opublikowano

 

double oblicz (double p, double q, double E1)

{

double s=(p+q)/2;

while (F(p)!=0 && F(q)!=0 && q-p>=E1)

{

s=(p+q)/2;

if (F(p)*F(s)>0) p=s; else q=s

}

if (F(p)==0) return p;

if (F(q)==0 return q;

return s;

}

 

p i q to granice przedziału w którym szukamy miejsca zerowego funkcji.

E1 dokładność.

 

Oto zobrazowany sposób:

 

21034531568381339033.png

 

Czerwone linie oznaczają połowienie przedziału. Dzieli na połowy i decyduje w której połowie znajduje się mz. Następnie wybrane znów dzieli aż w końcu znajdzie mz.

Muszę to przerobić aby po prostu szukał ich więcej. Tak jak pisałem wyżej. Jeśli damy nawet funkcje kwadratową lub wielomian który ma kilka miejsc zerowych to na jednym poprzestanie i przestanie liczyć, wyświetlać chociaż powinno być ich więcej.

Kocham mpcforum.pl!!!

18706.png

Opublikowano
Jeśli damy nawet funkcje kwadratową lub wielomian który ma kilka miejsc zerowych to na jednym poprzestanie i przestanie liczyć, wyświetlać chociaż powinno być ich więcej.

 

To spróbuj sobie rozrysować ten sposób dla funkcji kwadratowej. Zobaczysz dlaczego ci nie działa.

 

Jeśli może to być dowolna funkcja i nic o niej nie wiesz to musisz sprawdzić (q-p)/E1 miejsc (powodzenia) i łudzić się, że znajdziesz gdzieś zero. Tego zera możesz, mimo, że jest, nie znaleźć, ze względu na ograniczoną precyzję.

 

Zadanie bez sensu według mnie przy takich założeniach. Trzeba znać postać funkcji, aby coś takiego wykonać.

Opublikowano

p i q to granice przedziału w którym szukamy miejsca zerowego funkcji.

E1 dokładność.

 

Oto zobrazowany sposób:

 

 

 

Czerwone linie oznaczają połowienie przedziału. Dzieli na połowy i decyduje w której połowie znajduje się mz. Następnie wybrane znów dzieli aż w końcu znajdzie mz.

Muszę to przerobić aby po prostu szukał ich więcej. Tak jak pisałem wyżej. Jeśli damy nawet funkcje kwadratową lub wielomian który ma kilka miejsc zerowych to na jednym poprzestanie i przestanie liczyć, wyświetlać chociaż powinno być ich więcej.

I to liczy dla jakiej funkcji...? 

 

Zdajesz sobie sprawę, że miejsce zerowe dla funkcji opisanej wzorem 

f(x) = ax + b 

to 

-b/a

 

Innymi słowy: 

f(x) = 0  <==> x = -b/a

Ta sygnatura jest pusta.

Opublikowano
F5
 
Dowiedziałem się, że muszę zastosować inne kryterium zakończenia algorytmu- maksymalną liczbę iteracji L. Pomoże ktoś z tym?
Przerobiłem go aby był bardziej czytelny.
 


#include <iostream>
#include <cmath>
using namespace std;

double F (double x)
{
 return pow(x,2)-x-3;
}

double oblicz (double p, double q, double E1)
{
 double s=(p+q)/2;
 while (F(p)!=0 && F(q)!=0 && q-p>=E1)
 {
  s=(p+q)/2;
  if (F(p)*F(s)>0) p=s; else q=s;
 }
 if (F(p)==0) return p;
 if (F(q)==0) return q;
 return s;
}

main()
{
 double p, q, E1;
 cout<<"podaj przedzial [p, q]: ";
 cin>>p>>q;
 cout<<"podaj dokladnosc E1: ";
 cin>>E1;
 cout<<"miejsce zerowe = "<<oblicz(p,q,E1)<<endl;

 return 0;
}

 

@4ggr35510n

Coś ty się tak uczepił tej liniowej? Wiem o tym co piszesz ale ja problemu z liniową funkcją nie mam. Założyłem ten temat abyście mi pomogli w zmodyfikowaniu tego algorytmu aby działał na kwadratowej lub wyższej. O jakieś skomplikowanych wielomianach nie ma tu mowy.

Odpuście tą liniową.

Kocham mpcforum.pl!!!

18706.png

Opublikowano

 

aby działał na kwadratowej lub wyższej. O jakieś skomplikowanych wielomianach nie ma tu mowy.

to się wyklucza

 

 

Założyłem ten temat abyście mi pomogli w zmodyfikowaniu tego algorytmu

Potrzebny jest zupełnie inny algorytm.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...