Witam!
Mam problem z napisaniem pewnego programiku. Rzecz wydaje się banalna, ale jako, że jestem początkujący w pisaniu programów w języku C to ma do was pytanie. Mam za zadanie wyznaczyć numerycznie ekstrema funkcji f(x)=(cosx)^2+2sinx+2 w zadanym przez użytkownika przedziale. Napisałem kod, który wyznacza, ale tylko jedno ekstremum z podanego przedziału (a może ich być kilka). Zrobiłem to za pomocą metody bisekcji. Ma ktoś jakiś pomysł jak zrobić by program wyszukał wszystkie ekstrema? Myślałem coś o pętlach, ale nie wiem gdzie ją wsadzić:P
Oto kod:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float a, b, c; // zadeklarowanie wartości liczby pi
printf("Witaj!\n Ten program pomoze Ci w wyznaczeniu ekstremow funkcji f(x)=(cos(x))^2+2sin(x)+2 w wybranym przez Ciebie przedziale.\nPodaj pierwszy kraniec przedzialu, po czym nacisnij Enter...\n");
scanf("%f" , &a); //liczba a jest pierwszym krańcem przedziału podanego przez użytkownika
printf("Podaj drugi kraniec przedzialu, po czym nacisnij klawisz Enter...\n");
scanf("%f" , &b); //liczba b jest drugim krańcem przedziału podanego przez użytkownika
if (a>b) //sprawdzamy, czy użytkownik nie podał nieprawidłowych wartości przedziałów
printf("Blad. Pierwszy kraniec przedzialu nie moze mieć wiekszej wartosci od drugiego kranca.");
else
if ((-2*cos(a)*(sin(a)-1))*(-2*cos(b)*(sin(b)-1))<0 || fabs(b-a)>M_PI)
{
while (fabs(b-a)>0.0001)
{
c = (a+b)/2;
if ((-2*cos(a)*(sin(a)-1))*(-2*cos(c)*(sin(c)-1))<0)
b = c;
else
if ((-2*cos(b)*(sin(b)-1))*(-2*cos(c)*(sin(c)-1))<0)
a = c;
}
printf("%f\n", (a+b)/2);
}
else
printf("Brak ekstremow w podanym przedziale.\n");
system("PAUSE");
return 0;
}
Z góry mówię, że nie proszę was o gotowy kod, ale chociaż o naprowadzenie na to jak rozwiązać problem. Może macie inny pomysł niż metoda bisekcji? Nurtuje mnie też wyrażenie "wyznaczyć numerycznie", czyli jakim sposobem?
Pozdrawiam i czekam na pomysły:)