Sumowanie, równania i analiza
Ta strona opisuje sumowanie i mnożenie ciągów wyrazów, rozwiązywanie równań, różniczkowanie symboliczne lub w punkcie oraz całki oznaczone. Sięgnij po nią, gdy potrzebujesz zapisu Σ lub Π, równania nie da się łatwo przekształcić ręcznie albo chcesz sprawdzić pochodną lub pole pod krzywą z zadania.
Wszystkie te funkcje przyjmują nazwę zmiennej jako jeden z argumentów, na przykład k w sum(k^2, k, 1, 10). Ta nazwa istnieje tylko wewnątrz wywołania i nigdy nie zmienia wartości o tej samej nazwie w innym miejscu notatki.
Sumy i iloczyny skończone
sum(k, k, 1, 100) daje 5,050sum(k^2, k, 1, 10) daje 385summation(2*k - 1, k, 1, 10) daje 100product(k, k, 1, 5) daje 120Argumenty to wyrażenie, zmienna, pierwsza wartość i ostatnia wartość. Obie granice są włączone, więc sum(k, k, 1, 100) dodaje 1 + 2 + … + 100. summation to inna nazwa sum. Trzeci wiersz pokazuje, że pierwszych dziesięć liczb nieparzystych sumuje się do 10², a ostatni oblicza silnię z 5.
Sumy obsługują pieniądze i jednostki, co przydaje się przy regularnym oszczędzaniu:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) daje £6,962.30Iloczyn przydaje się do łańcuchów prawdopodobieństw. Szansa, że co najmniej dwie osoby w grupie 23 mają urodziny tego samego dnia, to jeden minus szansa, że wszystkie 23 daty są różne:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp daje 50.7%Kilka szczegółów:
- Pierwsza i ostatnia wartość muszą być liczbami całkowitymi.
- Jeśli ostatnia wartość jest mniejsza od pierwszej, nie ma żadnych wyrazów: suma wynosi 0, a iloczyn 1.
- Jedna suma lub jeden iloczyn może obejmować najwyżej 10 000 wyrazów.
- Sumy można zagnieżdżać, jak w
sum(sum(j, j, 1, n), n, 1, 4), co daje20. Zagnieżdżone wywołania współdzielą jeden łączny limit pracy. - Aby dodać już dostępne wartości, użyj listy:
sum([4, 8, 15]). Zobacz Listy i statystyka.
Dokładne rozwiązywanie równania
Gdy podasz samo równanie, solve odczytuje współczynniki i wyznacza rozwiązanie tak jak na papierze:
solve(2x + 6 = 10) daje 2solve(x/3 + 1 = 4) daje 9solve(5x + 3 = 2x - 9) daje -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) daje 250Niewiadomą jest jedyna nazwa w równaniu, której nie przypisano wartości. Wcześniej zdefiniowane nazwy są zastępowane ich wartościami. Jeśli pominiesz prawą stronę, wyrażenie zostanie przyrównane do zera.
Równanie liniowe zwraca liczbę. Równanie kwadratowe zwraca listę różnych pierwiastków rzeczywistych, od najmniejszego, więc pierwiastek podwójny daje listę jednoelementową:
solve(x^2 - 5x + 6 = 0) daje [2, 3]solve(x^2 = 9) daje [-3, 3]solve(x^2 - 6x + 9 = 0) daje [3]solve(x^2 - 2 = 0) daje [-1.4142135624, 1.4142135624]Postać wyniku zależy od zapisanego równania, a nie liczby znalezionych pierwiastków: równanie kwadratowe zawsze zwraca listę.
Równania liniowe i kwadratowe z wyróżnikiem będącym kwadratem liczby są obliczane jako dokładne ułamki, więc solve(x^2 - 5x + 6 = 0) daje dokładnie 2 i 3. Gdy wyróżnik nie jest takim kwadratem, oba pierwiastki są przybliżeniami dziesiętnymi. Dwie przybliżone wartości nie muszą być równe, nawet jeśli wyglądają identycznie: solve(x^2 - 2 = 0) i sqrt(2) wyświetlają 1.4142135624, ale porównanie wykazuje różnicę.
Równania rozwiązuje się dla liczb bez jednostek. Jednostki i waluty są odrzucane zamiast poddawane przekształceniom, które mogłyby je zniekształcić. Pełne zasady opisuje Co gwarantuje silnik.
Gdy obliczenie nie jest obsługiwane
Nie ma zgadywania. Równanie bez pierwiastka rzeczywistego informuje o tym zamiast zwracać zespolony, a równania wyższych stopni są odrzucane z propozycją użycia postaci numerycznej:
solve(x^2 + 1 = 0) daje Error: no real solutionsolve(x^3 - 1 = 0) daje Unsupported: solve reads equations of degree 1 and 2; this one has degree 3: write solve(expression,x,lower,upper) to search for one root numericallysolve(sin(x) = 0) daje Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyNiewiadoma nie może też znajdować się w mianowniku ani wykładniku. Przy dwóch niezdefiniowanych nazwach komunikat wskazuje tę, której nie udało się odczytać:
solve(1/x = 2) daje Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) daje Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) daje Unsupported: solve reads one unknown, and y holds no value either; give y a value, or write solve(expression,x,lower,upper) to search for one root numericallyRównanie spełnione dla każdej wartości również to zgłasza zamiast wybierać jedno rozwiązanie:
solve(x - x = 0) daje Unsupported: every value of x solves this equation, so it has no single answerKażda taka odmowa wskazuje czteroargumentowe solve opisane poniżej, które szuka jednego pierwiastka numerycznie bez ograniczenia do określonej postaci wyrażenia. Do układów równań liniowych z wieloma niewiadomymi użyj solve_system ze strony Wektory i macierze.
Wyznaczanie jednego pierwiastka numerycznie
Z czterema argumentami solve działa inaczej: szuka wartości zmiennej spełniającej równanie między dwiema podanymi granicami. Użyj tej postaci, gdy dokładny wariant powyżej odrzuci równanie.
solve(x^2 = 2, x, 0, 2) daje 1.4142135624solve(x^2 - 4, x, -3, 0) daje -2solve(cos(x) = x, x, 0, 1) daje 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) daje 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) daje 250Argumenty to równanie, zmienna, dolna granica i górna granica. Możesz podać równanie z = albo samo wyrażenie, które solve traktuje jako expression = 0.
Wybór granic
solve wymaga, aby między granicami zmieniało się to, która strona równania jest większa. Innymi słowy left - right musi być dodatnie na jednym końcu i ujemne na drugim albo dokładnie równe zeru na końcu. Następnie funkcja zawęża przedział, aż znajdzie miejsce przecięcia.
Ma to kilka konsekwencji:
- Gdy między granicami są dwa pierwiastki, znak na końcach może być taki sam.
solve(x^2 - 4, x, -3, 3)kończy się błędem, ponieważx^2 - 4jest dodatnie na obu końcach. Wybierz granice otaczające jeden pierwiastek, na przykład0i3. - Pierwiastka, przy którym krzywa tylko dotyka zera, jak w
x^2 = 0, nie da się znaleźć tą metodą, ponieważ znak się nie zmienia. - Wyrażenie musi być określone w całym przedziale.
solve(sqrt(x) = 2, x, -1, 10)daje błąd, ponieważsqrtliczby ujemnej jest błędem. Zacznij przedział od0. - Skok przez zero, jak w
1/xw pobliżu0, nie jest pierwiastkiem, więcsolvezwraca błąd zamiast wyniku. - Dolna granica musi być mniejsza od górnej, a obie muszą być liczbami bez jednostek.
solve zwraca jeden pierwiastek, nigdy listę wszystkich. Działa tylko na liczbach bez jednostek, więc pomiń jednostki w równaniu.
Zaokrąglanie i dalsze wykorzystanie
Wynik jest dokładnym przybliżeniem numerycznym, które może różnić się na ostatniej wyświetlanej cyfrze. Dodaj w tym samym wierszu to 4 dp lub inną liczbę miejsc, aby uprościć zapis, albo najpierw nadaj wynikowi nazwę, aby użyć go później:
solve(sqrt(x) = 2, x, 0, 10) daje 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp daje 4side = solve(sqrt(x) = 2, x, 0, 10) daje 4.0000000001side * 3 to 2 dp daje 12Możesz umieścić solve we własnej funkcji, aby używać go z różnymi wartościami:
root(y) = solve(x^2 = y, x, 0, 10)root(9) daje 3Do układów równań liniowych z wieloma niewiadomymi użyj solve_system ze strony Wektory i macierze.
Różniczkowanie symboliczne
Z dwoma argumentami differentiate lub derivative zwraca pochodną jako wzór:
differentiate(sin(x), x) daje cos(x)derivative(x^3, x) daje (3*(x^(3-1)))derivative(x * sin(x), x) daje (sin(x)+(x*cos(x)))derivative(exp(2*x), x) daje (exp((2*x))*2)Wynik nie jest upraszczany, a każdy krok ma nawiasy: (3*(x^(3-1))) oznacza 3x². Liczby dziesiętne wracają jako ułamki, więc 19.6 pojawia się jako (98/5).
Wynik jest tekstem, a nie wartością do dalszych obliczeń w Varlig. Aby go użyć, wpisz wzór we własnej funkcji:
slope(x) = 3*x^2slope(2) daje 12Różniczkowanie symboliczne obsługuje:
+,-,*,/i potęgi, z regułami sumy, iloczynu, ilorazu, potęgi i łańcuchową- funkcje
sin,cos,tan,sinh,cosh,exp,lnisqrt - inne nazwy, traktowane jako stałe i zachowywane jako nazwy w wyniku
Nazwa nie musi mieć wartości w notatce, więc możesz różniczkować wzór z symbolami:
derivative(a*x^2, x) daje (a*(2*(x^(2-1))))Inne funkcje, takie jak abs, log lub własna funkcja, dają błąd. Użyj dla nich postaci numerycznej poniżej. Wynikowy wzór nie przenosi też ograniczeń dziedziny oryginału: pochodna sqrt(x) ma sens tylko tam, gdzie oryginalne sqrt(x), choć (1/(2*sqrt(x))) wygląda jak samodzielny wzór.
Różniczkowanie numeryczne
Z trzecim argumentem derivative zwraca nachylenie w danym punkcie jako liczbę:
derivative(x^3, x, 2) daje 12differentiate(sin(x), x, 0) daje 1derivative(sqrt(x), x, 4) daje 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) daje 10.2Ta postać działa z funkcjami zdefiniowanymi w notatce, takimi jak powyższe height, czego nie potrafi wariant symboliczny. Ponieważ oblicza liczbę, wszystkie pozostałe nazwy w wyrażeniu muszą mieć wartości. To samo dotyczy sum, product, solve i integrate:
derivative(a*x^2, x, 2) daje Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) daje 12Wynik jest oszacowaniem na podstawie pobliskich wartości po obu stronach punktu. Gdy rzeczywiste nachylenie jest prostą liczbą, Varlig zapisuje tę liczbę, więc działa dokładne porównanie. Nachylenia niewymierne, na przykład dla exp(x), zachowują wszystkie cyfry, dlatego porównuj je z tolerancją:
derivative(x^3, x, 2) == 12 daje trueabs(derivative(exp(x), x, 1) - e) < 1e-6 daje trueWyrażenie musi być gładkie w otoczeniu punktu, bez załamań ani przerw. derivative(abs(x), x, 0) daje błąd, ponieważ abs ma załamanie w zerze. derivative(sqrt(x), x, 0) daje błąd, ponieważ sqrt nie jest określone na lewo od zera.
Całkowanie oznaczone
integrate(x^2, x, 0, 3) daje 9integrate(sin(x), x, 0, pi) daje 2integrate(x^2, x, 3, 0) daje -9integrate(4/(1 + x^2), x, 0, 1) daje 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) daje 44.1Argumenty to wyrażenie, zmienna, dolna granica i górna granica, w tej samej kolejności co w sum. Wynik jest polem ze znakiem pod krzywą między granicami. Zamiana granic odwraca znak, a równe granice dają zero. Możesz całkować funkcje z notatki, na przykład integrate(power(t), t, 0, 4).
integrate działa numerycznie, więc ma pewne ograniczenia:
- Nie ma całkowania nieoznaczonego: wynikiem zawsze jest liczba, nigdy wzór.
- Obie granice muszą być skończone; nie można całkować do nieskończoności.
- Wyrażenie musi być określone w całym przedziale.
integrate(1/sqrt(x), x, 0, 1)daje błąd, ponieważ1/sqrt(0)dzieli przez zero, mimo że samo pole jest skończone. - Wyrażenia ze skokami, ostrymi pikami lub bardzo szybkimi oscylacjami mogą dawać niedokładne wyniki albo błąd.
- Jednostki nie są przyjmowane, więc umieść je w komentarzu, jak w ostatnim przykładzie.
Algorytmy i zbieżność
Te szczegóły nie są potrzebne na co dzień, ale pomagają, gdy wynik wygląda nieprawidłowo lub wiersz zgłasza błąd.
solve używa bisekcji: wielokrotnie dzieli przedział na pół, zachowując połowę ze zmianą znaku. Kończy, gdy left - right różni się od zera o najwyżej 10⁻¹⁰ i przedział jest dostatecznie wąski; po 128 podziałach bez zbieżności zwraca błąd.
Symboliczne derivative stosuje standardowe reguły krok po kroku bez upraszczania. Wynik może mieć najwyżej 8192 znaki. To nie jest pełny system algebry komputerowej.
Numeryczne derivative porównuje różnice centralne przy coraz mniejszych krokach i osobno sprawdza nachylenie z obu stron. Jeśli się nie zgadzają lub pobliska wartość jest nieokreślona, zwraca błąd zamiast zgadywać.
integrate używa adaptacyjnych 7- i 15-punktowych kwadratur Gaussa–Kronroda. Porównuje dwa oszacowania w każdej części przedziału i dzieli część z największym szacowanym błędem, aż łączny błąd spadnie poniżej 10⁻⁹ × max(1, |wynik|). Dopuszcza do 2048 podziałów, 20 poziomów podziału i wspólny limit 100 000 kroków. Punkty próbkowania nie są równomierne, więc szybka oscylacja taka jak cos(128*pi*x) od 0 do 1 poprawnie daje całkę bliską zeru zamiast zostać uznana za stałą. Oszacowanie błędu pozostaje heurystyką, dlatego ostrożnie traktuj wyniki dla osobliwości i nieciągłości.
Pełne zasady są w dokumentacji zaawansowanej matematyki.
Przykład całościowy
Oto sprawdzenie zadania z fizyki: piłka rzucona pionowo w górę z prędkością 19,6 m/s, przy przyspieszeniu grawitacyjnym 9,8 m/s²:
# Height in metres after t secondsheight(t) = 19.6*t - 4.9*t^2velocity(t) = 19.6 - 9.8*t# Lands when the height is back to zero (skip t = 0)landing = solve(height(t) = 0, t, 1, 10) daje 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) daje 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) daje 2height(peak) daje 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) daje 19.6Piłka ląduje po 4 sekundach i osiąga 19,6 m po 2 sekundach. Dolna granica 1 w wierszu landing pozwala solve ominąć drugi pierwiastek przy t = 0. Ostatni wiersz potwierdza wysokość inną metodą, całkując prędkość.