Rozwiązanie równania cosx=x

0

Witam Musze napisać program na 1 ekran który wyliczy dane równanie, myślałem że zadanie jest łatwe, ale niestety nie wiem jak ro ugryźć. Zdefiniowałem sobie PI, domyślam się że będę musiał zamienić na radiany, ale nie mam pomysłu na wyznaczenie tego x. z góry dziękuję za wasze cenne rady

0

Najprościej przez podział zakresu.
Wiesz, że dla x=0 cos x - x jest dodatnie a dla x=1 ujemne. Sprawdzasz co jest w połowie i zawężasz przedział i tak, aż przedział będzie mały.

0

średnio rozumiem, w sumie to interesuje mnie tylko I Ćwiartka Układu współrzędnych, jedynie tam znajdę rozwiązanie równania. Ale nadal nie mam pojęcia jak zawężać te zakresy. Moja wiedza jest na poziomie analizy 1 (I semestr).

0

Twierdzenie Darboux w praktyce ;).

Ewentualnie można naiwnie, zwykłą pętlą, zwiększając sprawdzaną wartość. Trzeba tylko pamiętać, żeby nie przyrównywać do zera, a też do określonego, małego epsilonu.

Niczego na radiany zamieniać nie musisz, bo x jest w nich podany.

0

dzięki Rev za radę udało mi się stworzyć coś takiego.

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

int main()
{
#define PI 3.14159265
	double e=0.001, n;
	

	for(double x=0; x<PI; x+=e)
	{
		if(cos(x)<x)
		{
			n=cos(x);
			cout <<"Rownanie cos(x)=x ma sens dla x= "<<cos(x)<< " wartosc przyblizenia (+/- 0,001)";
			break;
		}	
	}
	char z;
	cin >>z;
}

Trochę na około ale jest:P. Proszę o opinię

1

#a=0 b=1
#skoro f(a)*f(b)<0 to pomiędzy a i b musi być takie x, że f(x)=0
#wybieramy x=(a+b)/2
#sprawdzasz czy f(x)*f(a)<0 jeśli tak to rozwiązanie masz pomiędzy a i x więc podstawiasz b=x i skaczesz do 3
#tu f(x)*f(b)<0 więc podstawiasz a=x i skaczesz do 3
#pętle powtarzasz tak długo, aż uznasz że b-a jest dostatecznie małe (przedział jest bardzo wąski).

1 użytkowników online, w tym zalogowanych: 0, gości: 1