Ludzie informatyki:
I pierwotnie opublikowany na to pytanie w matematyce Stos Exchange i ktoś powiedział, że mogę dostać się „znacznie lepiej” odpowiedź tutaj:
Jestem nowicjuszem w metodach numerycznych i Matlabie. Próbuję oszacować następującą sumę dwóch potrójnych całek (można to oczywiście napisać prościej, ale nadal nie można jej ocenić symbolicznie (?)). Mam problem z uzyskaniem do pracy tutaj, więc niechętnie podzieliłem go tutaj na części: chcę znaleźć sumę
i
gdzie
i
EDYCJA (2 marca 2013 r.): Ktoś odpowiedział, że zmusił Mathematica do wykonania całek symbolicznie. Właśnie próbowałem to zrobić (z uproszczonymi wersjami całek), a Mathematica mogła wykonać tylko dwie zewnętrzne z pierwszej, i zatrzymałem się na drugiej. Byłbym wdzięczny za pomoc. Oto co zrobiłem:
Próbowałem ocenić
przez
Zintegruj [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]
i Mathematica powraca (miałem problem z tutaj, ponieważ wynik jest długi. Zerwałem na dwa równania. jeśli ktoś zna dobry sposób na wyświetlenie tego, proszę mi powiedzieć):
Potem próbowałem ocenić
za pomocą
Zintegruj [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]
właśnie teraz, a Mathematica nie odpowiedziała po upływie około pół godziny (ale mam teraz problemy z siecią komputerową i mogą być winni).
[KONIEC EDYCJI 2 MARCA]
Wiem, że Matlab jest dobrym oprogramowaniem, ale słyszałem, że trudne są dokładne potrójne całki numeryczne, a matematycy powinni być sceptyczni, dlatego chcę w jakiś sposób zweryfikować dokładność tej odpowiedzi. Całki podają oczekiwaną wartość określonego eksperymentu (jeśli ktoś chce, mogę edytować to pytanie, aby opisać eksperyment): zaimplementowałem eksperyment w Matlabie, używając odpowiednio losowo wygenerowanych liczb, milion razy, i uśredniłem wyniki. Powtórzyłem ten proces cztery razy. Oto wyniki (przepraszam, jeśli niewłaściwie użyłem słowa „rozprawa”):
Trial 3:
Trial 4:
Trial 5:
Chociaż w każdej próbie wykorzystano milion próbek, wartości symulacji zgadzają się tylko w pierwszej znaczącej cyfrze. Nie są wystarczająco blisko siebie, aby ustalić, czy potrójna całka numeryczna jest dokładna.
Czy ktoś może mi więc powiedzieć, czy mogę zaufać wynikowi „potrójnego kwadratu” i pod jakimi warunkami ogólnie można mu ufać?
Jedną z sugestii, które otrzymałem na Math Stack Exchange, było wypróbowanie innego oprogramowania, takiego jak Mathematica, Octave, Maple i SciPy. Czy to dobra rada? Czy ludzie faktycznie wykonują prace numeryczne w Mathematica i Maple? Octave jest rodzajem klonu Matlaba, więc czy mogę założyć, że używa tych samych algorytmów integracji? Jeszcze nie słyszałem o SciPy i doceniłbym wszelkie opinie na jego temat.
AKTUALIZACJA: Ktoś z Math Stack Exchange zrobił to w Maple i dostał. Jest to zgoda na trzy znaczące liczby. To dobry znak.
Byłbym także wdzięczny za sugestie, jak wprowadzić długie, wieloliniowe wyrażenie w stosie wymiany. Czy możesz tutaj użyć środowiska „wyrównanego”? Próbowałem i nie mogłem tego uruchomić.
Odpowiedzi:
Przede wszystkim to nie oprogramowanie (a przynajmniej tak nie powinno być) decyduje o jakości rozwiązania problemu, lecz o jakości i stosowności zastosowanego algorytmu. Powinieneś sprawdzić, jakiego algorytmu używa Matlab w potrójnym kwadracie (domyślam się, że używa zagnieżdżonej adaptacyjnej kwadratury Gaussa). I powinieneś sprawdzić, jakie są wymagane tolerancje (wymagana tolerancja bezwzględna i względna). Są szanse, że domyślnie tylko o to prosi10- 8 względna precyzja.
Odpowiedź pochodząca z Maple jest prawdopodobnie udzielona przez Computer Algebra i być może mogłaby znaleźć rozwiązanie zamknięte, które następnie zostało ocenione przy użyciu zmiennoprzecinkowego podwójnej precyzji. Ma to tę zaletę, że nie przybliżasz całki za pomocą skończonego sumowania (a zatem wprowadzasz błędy aproksymacji), ale system algebry komputerowej znajdzie wyrażenie dla całki, które można następnie ocenić. Oczywiście należy zachować ostrożność przy ocenie tego wyrażenia (w celu zaokrąglenia).
Jeśli chcesz to zrobić za pomocą SciPy, musisz również skorzystać z zagnieżdżonej adaptacyjnej kwadratury gaussowskiej przy użyciu podstawowych procedur Quadpack (Piessens i in.). W Octave będziesz miał takie samo podejście. I nie byłbym zaskoczony, gdyby Matlab używał Quadpack jako silnika kwadraturowego (ponieważ jest to odniesienie).
źródło
infolevel[`evalf/int`] := 4
. Czy na pewno Mape nie może znaleźć rozwiązania zamkniętego? Całka nie wydaje się zbyt skomplikowana. Czy mógłbyś gdzieś upublicznić swój arkusz klonu?