Tính tổng, giải phương trình và giải tích
Trang này hướng dẫn tính tổng hoặc tích của một dãy số hạng, giải phương trình, tìm đạo hàm của biểu thức dưới dạng công thức hoặc tại một điểm, và tính tích phân xác định. Hãy dùng khi bài toán cần ký hiệu Σ hoặc Π, khi khó biến đổi phương trình bằng tay, hoặc khi bạn muốn kiểm tra đạo hàm hay diện tích dưới đường cong trong bài học.
Tất cả các hàm này đều nhận một tên biến trong các đối số, chẳng hạn k trong sum(k^2, k, 1, 10). Tên đó chỉ tồn tại bên trong lời gọi hàm, nên không bao giờ thay đổi giá trị cùng tên ở nơi khác trong ghi chú.
Tổng và tích hữu hạn
sum(k, k, 1, 100) cho kết quả 5,050sum(k^2, k, 1, 10) cho kết quả 385summation(2*k - 1, k, 1, 10) cho kết quả 100product(k, k, 1, 5) cho kết quả 120Các đối số là biểu thức, biến, giá trị đầu tiên và giá trị cuối cùng. Cả hai đầu đều được bao gồm, vì vậy sum(k, k, 1, 100) cộng 1 + 2 + ... + 100. summation là tên gọi khác của sum. Dòng thứ ba cho thấy mười số lẻ đầu tiên cộng lại là 10², và dòng cuối cùng là 5 giai thừa.
Phép tính tổng dùng được với tiền và đơn vị, phù hợp để tính các khoản tiết kiệm đều đặn:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) cho kết quả £6,962.30Phép tính tích hữu ích cho các chuỗi xác suất. Xác suất có ít nhất hai người trong nhóm 23 người trùng ngày sinh bằng một trừ đi xác suất cả 23 người đều có ngày sinh khác nhau:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp cho kết quả 50.7%Một số chi tiết:
- Giá trị đầu tiên và cuối cùng phải là số nguyên.
- Nếu giá trị cuối cùng thấp hơn giá trị đầu tiên, không có số hạng nào: tổng là 0 và tích là 1.
- Một tổng hoặc tích có thể có tối đa 10.000 số hạng.
- Bạn có thể lồng các phép tính tổng, như
sum(sum(j, j, 1, n), n, 1, 4), cho kết quả20. Các lời gọi hàm lồng nhau dùng chung một giới hạn tổng về khối lượng tính toán. - Để cộng các giá trị bạn đã có, hãy sử dụng một danh sách thay thế:
sum([4, 8, 15]). Xem Danh sách và thống kê.
Giải một phương trình chính xác
Cho một phương trình riêng của nó, solve đọc các hệ số và tìm ra câu trả lời, theo cách bạn làm trên giấy:
solve(2x + 6 = 10) cho kết quả 2solve(x/3 + 1 = 4) cho kết quả 9solve(5x + 3 = 2x - 9) cho kết quả -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) cho kết quả 250Ẩn số là tên duy nhất trong phương trình chưa có giá trị riêng; những tên bạn đã định nghĩa được thay bằng giá trị của chúng. Nếu bỏ vế phải, biểu thức sẽ được đặt bằng không.
Phương trình bậc nhất trả về một số. Phương trình bậc hai trả về danh sách các nghiệm thực phân biệt theo thứ tự tăng dần, nên khi có nghiệm kép, danh sách chỉ có một phần tử:
solve(x^2 - 5x + 6 = 0) cho kết quả [2, 3]solve(x^2 = 9) cho kết quả [-3, 3]solve(x^2 - 6x + 9 = 0) cho kết quả [3]solve(x^2 - 2 = 0) cho kết quả [-1.4142135624, 1.4142135624]Dạng của kết quả phụ thuộc vào phương trình bạn viết, không phụ thuộc vào các nghiệm tìm được: phương trình bậc hai luôn trả về một danh sách.
Phương trình bậc nhất và phương trình bậc hai có biệt thức là số chính phương được giải bằng phân số chính xác, nên nghiệm của solve(x^2 - 5x + 6 = 0) đúng bằng 2 và 3. Khi biệt thức không phải số chính phương, hai nghiệm được tính bằng căn bậc hai dạng thập phân. Hai giá trị gần đúng có thể trông giống nhau nhưng không được coi là bằng nhau khi so sánh: solve(x^2 - 2 = 0) và sqrt(2) đều hiển thị 1.4142135624 nhưng phép so sánh cho rằng chúng khác nhau.
Phương trình chỉ được giải với các số không kèm đơn vị. Giá trị có đơn vị hoặc tiền tệ sẽ bị từ chối, tránh việc biến đổi phương trình làm mất ý nghĩa của chúng. Xem quy tắc đầy đủ trong Những điều bộ máy tính toán bảo đảm.
Khi phép tính bị từ chối
Varlig không đoán nghiệm. Nếu phương trình không có nghiệm thực, ứng dụng sẽ thông báo thay vì tìm nghiệm phức. Phương trình cao hơn bậc hai cũng bị từ chối, kèm gợi ý dùng dạng giải bằng phương pháp số:
solve(x^2 + 1 = 0) cho kết quả Error: no real solutionsolve(x^3 - 1 = 0) cho kết quả 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) cho kết quả Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyẨn số cũng không được nằm ở mẫu số hoặc số mũ; nếu phương trình có hai tên chưa được định nghĩa, thông báo sẽ chỉ rõ tên không thể đọc được:
solve(1/x = 2) cho kết quả Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) cho kết quả Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) cho kết quả 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 numericallyNếu mọi giá trị đều thỏa mãn phương trình, Varlig cũng sẽ thông báo thay vì chọn một giá trị tùy ý:
solve(x - x = 0) cho kết quả Unsupported: every value of x solves this equation, so it has no single answerMọi điểm từ chối đó đều chỉ vào hàm solve bốn tham số bên dưới, hàm này tìm một nghiệm số duy nhất và không quan tâm biểu thức có dạng gì. Đối với nhiều phương trình tuyến tính với nhiều ẩn số, hãy sử dụng solve_system từ Vectors and matrices.
Tìm một nghiệm bằng phương pháp số
Với bốn đối số, solve hoạt động theo cách khác: tìm một giá trị của biến làm phương trình đúng trong khoảng hai giới hạn bạn cung cấp. Hãy dùng dạng này khi dạng giải chính xác ở trên từ chối phương trình.
solve(x^2 = 2, x, 0, 2) cho kết quả 1.4142135624solve(x^2 - 4, x, -3, 0) cho kết quả -2solve(cos(x) = x, x, 0, 1) cho kết quả 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) cho kết quả 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) cho kết quả 250Các đối số là phương trình, biến, giới hạn dưới và giới hạn trên. Bạn có thể cung cấp một phương trình với =, hoặc một biểu thức riêng lẻ, mà solve coi là expression = 0.
Chọn các cận
solve cần hai vế của phương trình hoán đổi để xác định bên nào lớn hơn ở đâu đó trong khoảng giới hạn của bạn. Nói cách khác, left - right phải dương ở một giới hạn và âm ở giới hạn còn lại (hoặc chính xác là bằng không ở một giới hạn). Sau đó, nó thu hẹp phạm vi cho đến khi tìm thấy điểm giao nhau.
Điều này có một vài hậu quả:
- Nếu có hai nghiệm trong khoảng, dấu ở hai đầu có thể giống nhau.
solve(x^2 - 4, x, -3, 3)không giải được vìx^2 - 4dương ở cả hai đầu. Hãy chọn khoảng chỉ bao quanh một nghiệm, chẳng hạn từ0đến3. - Không thể dùng cách này để tìm nghiệm tại điểm đường cong chỉ tiếp xúc với trục hoành, như
x^2 = 0, vì biểu thức không đổi dấu. - Biểu thức phải được xác định trên toàn bộ phạm vi.
solve(sqrt(x) = 2, x, -1, 10)thất bại vìsqrtcủa một giá trị số âm là một lỗi. Thay vào đó, hãy bắt đầu phạm vi tại0. - Bước nhảy qua giá trị không, như ở
1/xgần0, không phải là nghiệm; vì vậysolvesẽ báo lỗi thay vì đưa ra kết quả. - Giới hạn dưới phải nhỏ hơn giới hạn trên và cả hai phải là số đơn giản.
solve trả về một nghiệm, không bao giờ trả về danh sách tất cả các nghiệm. Hàm chỉ làm việc với số không kèm đơn vị, nên hãy bỏ đơn vị ra khỏi phương trình.
Làm tròn và tái sử dụng
Kết quả là một giá trị gần đúng với độ chính xác cao, nhưng chữ số cuối cùng được hiển thị có thể bị lệch. Thêm to 4 dp (hoặc số chữ số thập phân bạn muốn) vào cùng dòng để kết quả gọn hơn, hoặc đặt tên cho kết quả trước nếu muốn dùng lại:
solve(sqrt(x) = 2, x, 0, 10) cho kết quả 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp cho kết quả 4side = solve(sqrt(x) = 2, x, 0, 10) cho kết quả 4.0000000001side * 3 to 2 dp cho kết quả 12Bạn có thể gói solve trong một hàm của riêng bạn để sử dụng lại nó với các giá trị khác nhau:
root(y) = solve(x^2 = y, x, 0, 10)root(9) cho kết quả 3Đối với một số phương trình tuyến tính trong một số ẩn số, hãy sử dụng solve_system từ Vectơ và ma trận.
Đạo hàm ký hiệu
Với hai đối số, differentiate (hoặc derivative) đưa ra đạo hàm dưới dạng công thức:
differentiate(sin(x), x) cho kết quả cos(x)derivative(x^3, x) cho kết quả (3*(x^(3-1)))derivative(x * sin(x), x) cho kết quả (sin(x)+(x*cos(x)))derivative(exp(2*x), x) cho kết quả (exp((2*x))*2)Kết quả không được đơn giản hóa và mọi bước đều được đặt trong ngoặc: (3*(x^(3-1))) là 3x². Số thập phân trong biểu thức của bạn trở lại dưới dạng phân số, vì vậy 19.6 xuất hiện dưới dạng (98/5).
Kết quả là văn bản, không phải thứ mà Varlig có thể tính toán. Để sử dụng nó, hãy nhập công thức vào một hàm của riêng bạn:
slope(x) = 3*x^2slope(2) cho kết quả 12Những gì phép tính đạo hàm ký hiệu hỗ trợ:
+,-,*,/và lũy thừa, theo các quy tắc đạo hàm của tổng, tích, thương, lũy thừa và hàm hợp- Các hàm
sin,cos,tan,sinh,cosh,exp,lnvàsqrt - Các tên khác, được coi là hằng số và vẫn là tên trong kết quả
Một tên không cần có giá trị trong ghi chú, nên bạn có thể lấy đạo hàm của công thức chứa các ký hiệu:
derivative(a*x^2, x) cho kết quả (a*(2*(x^(2-1))))Các hàm khác như abs, log hoặc hàm do bạn tự định nghĩa sẽ gây lỗi. Với chúng, hãy dùng dạng tính bằng phương pháp số bên dưới. Công thức kết quả cũng không tự mang theo các điều kiện xác định của biểu thức ban đầu: đạo hàm của sqrt(x) chỉ có ý nghĩa trong miền phù hợp của sqrt(x), dù (1/(2*sqrt(x))) trông như một công thức độc lập.
Đạo hàm bằng phương pháp số
Khi có đối số thứ ba, derivative trả về hệ số góc tại điểm đó dưới dạng một số:
derivative(x^3, x, 2) cho kết quả 12differentiate(sin(x), x, 0) cho kết quả 1derivative(sqrt(x), x, 4) cho kết quả 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) cho kết quả 10.2Biểu mẫu này hoạt động với các hàm mà bạn đã định nghĩa trong ghi chú, như height ở trên, mà biểu mẫu ký hiệu không thể thực hiện. Bởi vì nó tính toán một giá trị số, mọi tên khác trong biểu thức đều cần một giá trị. Điều tương tự cũng áp dụng cho sum, product, solve và integrate:
derivative(a*x^2, x, 2) cho kết quả Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) cho kết quả 12Kết quả được ước tính từ các giá trị lân cận ở hai phía của điểm. Khi hệ số góc thực là một số gọn, Varlig lưu chính số đó, nên bạn có thể so sánh bằng chính xác. Với hệ số góc là số vô tỷ, chẳng hạn hệ số góc của exp(x), Varlig giữ toàn bộ các chữ số; hãy so sánh trong một mức sai số cho phép:
derivative(x^3, x, 2) == 12 cho kết quả trueabs(derivative(exp(x), x, 1) - e) < 1e-6 cho kết quả trueBiểu thức cần phải trơn tru, không có góc hoặc khoảng trống, trong khu vực xung quanh điểm. derivative(abs(x), x, 0) là một lỗi vì abs có một góc ở số không và derivative(sqrt(x), x, 0) là một lỗi vì sqrt không được xác định ở bên trái của số không.
Tích phân xác định
integrate(x^2, x, 0, 3) cho kết quả 9integrate(sin(x), x, 0, pi) cho kết quả 2integrate(x^2, x, 3, 0) cho kết quả -9integrate(4/(1 + x^2), x, 0, 1) cho kết quả 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) cho kết quả 44.1Các đối số lần lượt là biểu thức, biến, cận dưới và cận trên, cùng thứ tự với sum. Kết quả là diện tích có dấu dưới đường cong giữa hai cận. Đổi chỗ hai cận sẽ đổi dấu kết quả; hai cận bằng nhau cho kết quả không. Bạn có thể tính tích phân của các hàm đã định nghĩa trong ghi chú, như integrate(power(t), t, 0, 4).
integrate tính bằng phương pháp số, nên có một số giới hạn:
- Không hỗ trợ tích phân bất định: bạn luôn nhận được một số, không phải một công thức.
- Hai cận đều phải là số hữu hạn; không thể tính tích phân đến vô cực.
- Biểu thức phải được xác định trên toàn bộ phạm vi.
integrate(1/sqrt(x), x, 0, 1)là một lỗi, bởi vì1/sqrt(0)chia cho 0, mặc dù bản thân diện tích là hữu hạn. - Biểu thức có bước nhảy, đỉnh nhọn hoặc dao động rất nhanh có thể cho kết quả không chính xác hoặc gây lỗi.
- Các đơn vị không được chấp nhận, vì vậy hãy để lại chúng trong phần nhận xét, như trong ví dụ cuối cùng.
Thuật toán và hội tụ
Bạn không cần những chi tiết này để sử dụng hàng ngày, nhưng chúng hữu ích khi kết quả có vẻ sai hoặc một dòng đưa ra lỗi.
solve sử dụng phương pháp chia đôi: nó chia đôi khoảng giá trị nhiều lần, giữ lại nửa giá trị nơi dấu đổi. Nó dừng lại khi giá trị của left - right nằm trong vòng 10⁻¹⁰ của 0 và khoảng giá trị đủ hẹp, và bỏ cuộc với lỗi sau 128 lần chia đôi.
derivative dạng ký hiệu áp dụng từng bước các quy tắc tiêu chuẩn mà không rút gọn. Kết quả dài tối đa 8.192 ký tự. Đây không phải là một hệ thống đại số máy tính đầy đủ.
derivative bằng phương pháp số so sánh các sai phân trung tâm với bước tính ngày càng nhỏ, đồng thời kiểm tra riêng hệ số góc từ mỗi phía. Nếu chúng không khớp hoặc một giá trị gần điểm đó không xác định, hàm sẽ báo lỗi thay vì đoán kết quả.
integrate sử dụng các quy tắc Gauss–Kronrod 7 và 15 điểm thích ứng. Nó so sánh hai ước tính trên mỗi đoạn của khoảng và chia đoạn có lỗi ước tính lớn nhất, cho đến khi tổng lỗi ước tính dưới 10⁻⁹ × max(1, |answer|). Nó cho phép tối đa 2.048 lần chia, 20 cấp độ chia và ngân sách chung 100.000 bước. Các điểm mẫu không được phân bố đều đặn, vì vậy một dao động nhanh như cos(128*pi*x) từ 0 đến 1 tích phân chính xác về khoảng 0 thay vì bị nhầm lẫn thành một hằng số. Ước tính lỗi vẫn là một phương pháp heuristic, vì vậy hãy xử lý cẩn thận các câu trả lời cho các biểu thức có điểm kỳ dị hoặc gián đoạn.
Các quy tắc đầy đủ nằm trong tài liệu tham khảo toán học nâng cao.
Kết hợp các phần
Đây là cách kiểm tra một bài tập vật lý: quả bóng được ném thẳng đứng lên với vận tốc 19,6 m/s, lấy gia tốc trọng trường là 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) cho kết quả 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) cho kết quả 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) cho kết quả 2height(peak) cho kết quả 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) cho kết quả 19.6Quả bóng chạm đất sau 4 giây và đạt độ cao 19,6 m tại thời điểm 2 giây. Cận dưới bằng 1 trong dòng landing giúp solve tránh nghiệm còn lại tại t = 0. Dòng cuối kiểm tra độ cao theo cách thứ hai, bằng cách lấy tích phân của vận tốc.