Jak w programowaniu wyrazić nieskończoność? Jaki algorytm?

0

Chodzi mi o to, by napisać algorytm liczący granice funkcji przy x zmierzającym do nieskończoności.

0

Nie da się wyrazić nieskończenie wielkiej liczby wprost, bo komputery mają skończoną ilość pamięci.

Granicę najlepiej liczyć symbolicznie, czyli tak jak się liczy w szkole, tj. korzystając z odpowiednich twierdzeń. Oczywiście napisanie takiego programu będzie skomplikowane i mogą być sytuacje, kiedy dla pewnych funkcji program nie policzy granicy, mimo że istnieje. Zaleta jest taka, że możesz obliczyć bardzo dokładne wartości. Może się przydać różniczkowanie symboliczne (nie jest takie trudne) np. aby skorzystać z reguły de l'Hospitala.

Możesz też liczyć numerycznie tzn. po prostu brać coraz większe x i patrzeć, czy wartość funkcji zbiega do jakiejś wartości. Tu jednak trzeba uważać na:

  • błędy zaokrągleń
  • skończenie się zakresu liczb zmiennoprzecinkowych
  • pozorną zbieżność; jeśli zrobisz to w sposób naiwny, zmiany wartości funkcji będą coraz mniejsze i możesz stwierdzić, że jesteś "blisko granicy", mimo że granica wcale nie istnieje albo jesteś bardzo daleko. Np. szereg harmoniczny nie jest zbieżny, mimo że przyrosty są zbieżne do zera, podobnie funkcja ln(x), której pochodna zbiega do zera przy x -> nieskończoność.
0

To w takim razie zastanawiam się jak to wymyślili na wolframie, ze po wpisaniu limit (1/x) wyskakuje wszystkie możliwe wartości granic.

1

Ale przecież w standardzie liczby zmiennoprzecinkowe mają wartości zarezerwowane dla Infinity i -Infinity.

Chociażby stałe w dokumentacji: https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html

1

Wybitny Mleczarz, stosują przekształcenia symboliczne. Po wpisaniu limes x->0 (x*x-2)/(x-sqrt(2)) dostaniesz odpowiedź \sqrt{2}, a nie 1.41421356237...

krzysiek050 napisał(a):

Ale przecież w standardzie liczby zmiennoprzecinkowe mają wartości zarezerwowane dla Infinity i -Infinity.

@krzysiek050, jaki to ma związek z pytaniem?

0
bogdans_nz napisał(a):

Wybitny Mleczarz, stosują przekształcenia symboliczne. Po wpisaniu limes x->0 (x*x-2)/(x-sqrt(2)) dostaniesz odpowiedź \sqrt{2}, a nie 1.41421356237...

krzysiek050 napisał(a):

Ale przecież w standardzie liczby zmiennoprzecinkowe mają wartości zarezerwowane dla Infinity i -Infinity.

@krzysiek050, jaki to ma związek z pytaniem?

Ma związek bardzo duży, bo ciekawi mnie też czy można w c# przypisać do zmiennej wartość nieskończoną. Oczywiście można walnąć Pow(x,-1), no ale...no właśnie...i co? Mam to wrzucić np w while(true)?

1

https://msdn.microsoft.com/pl-pl/library/system.double.positiveinfinity(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

 Console.WriteLine("PositiveInfinity plus 10.0 equals {0}.", (Double.PositiveInfinity + 10.0).ToString());

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