Mẹo hay

    Xử lý số học với module math trong Python - p1

    Đăng bởi vào

    Khi viết các chương trình trong cuộc sống hằng ngày, chúng ta thường gặp những tình huống nơi mà chúng ta cần phải sử dụng một chút kiến thức về môn toán để hoàn thành công việc. Cũng như những ngôn ngữ lập trình khác, Python cũng cung cấp các toán tử khác nhau để thực hiện các phép tính cơ bản như * cho phép nhân, % cho phép lấy dư, và // cho phép chia


    Nếu bạn đang viết một chương trình để thực hiện các nhiệm vụ cụ thể như nghiên cứu chu kỳ chuyển động hoặc mô phỏng các mạch điện, bạn sẽ cần phải làm việc với các hàm lượng giác cũng như số phức. Mặc dù bạn không thể sử dụng trực tiếp các hàm này, nhưng bạn có thể truy cập chúng bằng cách bao gồm hai mô-đun toán học đầu tiên. Các mô-đun này là math và cmath.

    Mô-đun đầu tiên cho phép bạn truy cập vào các hàm hypebôn, lượng giác và lôgarit cho các số thực, trong khi mô-đun thứ hai cho phép bạn làm việc với các số phức. Trong hướng dẫn này, tôi sẽ khái quát tất cả các hàm quan trọng được cung cấp bởi các mô-đun này. Trừ khi được đề cập một cách rõ ràng, thì tất cả các giá trị trả về đều là float.

    Mục Lục

    1, abs().

    2, fabs().

    3, ceil().

    4, exp().

    5, floor().

    6, log().

    7, log10().

    8, max().

    9, min().

    10, modf().

    11, pow().

    12, round().

    13, sqrt().

    14, acos().

    15, cos().

    16, asin().

    17, sin().

    18, atan() - tan().

    19, radians().

    Các hàm Số học

    Các hàm này thực hiện các phép tính số học khác nhau như tính cận dưới, cận trên, hoặc giá trị tuyệt đối của một số bằng các hàm floor(x), ceil(x) và fabs(x) tương ứng. Hàm ceil(x) sẽ trả về số nguyên nhỏ nhất lớn hơn hoặc bằng x. Tương tự, floor(x) trả về số nguyên lớn nhất nhỏ hơn hoặc bằng x. Hàm fabs(x) trả về giá trị tuyệt đối của x.

    Bạn cũng có thể thực hiện các phép toán không bình thường như tính giai thừa của một số bằng cách sử dụng hàm factorial(x). Một giai thừa là tích số của một số nguyên và tất cả các số nguyên dương nhỏ hơn nó. Nó được sử dụng rộng rãi khi tính toán liên quan đến tổ hợp và hoán vị. Nó cũng có thể được sử dụng để tính toán giá trị của các hàm sin và cosin.

    import math


    def getsin(x):


        multiplier = 1

        result = 0

        

      for i in range(1,20,2):

    result += multiplier*pow(x,i)/math.factorial(i)

    multiplier *= -1

    return result

        


    getsin(math.pi/2) # returns 1.0

    getsin(math.pi/4) # returns 0.7071067811865475

    Một hàm hữu ích khác trong mô-đun math là gcd(x, y), giúp bạn tính ước số chung lớn nhất (GCD) của hai số x và y. Khi x và y không bằng 0, hàm này trả về số nguyên dương lớn nhất chia hết cho cả x và y. Bạn có thể sử dụng nó gián tiếp để tính bội số chung nhỏ nhất của hai số bằng công thức sau:


    gcd(a, b) x lcm(a, b) = a x b

    Ở đây là một số hàm số học mà Python cung cấp:


    import math


    math.ceil(1.001)    # returns 2

    math.floor(1.001)   # returns 1

    math.factorial(10)  # returns 3628800

    math.gcd(10,125)    # returns 5


    math.trunc(1.001)   # returns 1

    math.trunc(1.999)   # returns 1

    Hàm Lượng giác

    Các hàm này liên quan đến các góc của một tam giác với các cạnh của nó. Chúng có rất nhiều ứng dụng, bao gồm nghiên cứu các hình tam giác và mô hình hoá các hiện tượng theo chu kỳ như sóng âm và ánh sáng. Lưu ý rằng góc bạn cung cấp là bằng radian.


    Bạn có thể tính sin(x), cos(x), và tan(x) trực tiếp bằng mô-đun này. Tuy nhiên, không có công thức trực tiếp để tính cosec(x), sec(x) và cot(x), nhưng giá trị của chúng bằng với nghịch đảo giá trị trả về của sin(x), cos(x) và tan(x) tương ứng.


    Thay vì tính giá trị của các hàm lượng giác ở một góc nào đó, bạn cũng có thể làm ngược lại và tính góc tại nơi mà chúng có một giá trị nhất định bằng cách sử dụng asin(x), acos(x) và atan(x).


    Bạn có rành về định lý Pitago không? Nó phát biểu rằng bình phương của cạnh huyền (cạnh đối diện với góc phải) bằng với tổng bình phương của hai cạnh bên. Cạnh huyền cũng là cạnh lớn nhất của một tam giác vuông góc bên phải. Mô-đun math cung cấp hàm hypot(a, b) để tính toán chiều dài của cạnh huyền.


    import math


    math.sin(math.pi/4)    # returns 0.7071067811865476

    math.cos(math.pi)      # returns -1.0

    math.tan(math.pi/6)    # returns 0.5773502691896257

    math.hypot(12,5)       # returns 13.0


    math.atan(0.5773502691896257) # returns 0.5235987755982988

    math.asin(0.7071067811865476) # returns 0.7853981633974484

    Hàm Hypebôn

    Các hàm hypebôn là tương tự các hàm lượng giác dựa trên một hipebôn thay vì một vòng tròn. Trong phép đo lượng giác, các điểm (cos b, sin b) đại diện cho các điểm của một vòng tròn đơn vị. Trong trường hợp các hàm hipebôn, các điểm (cosh b, sinh b) đại diện cho các điểm hình thành nửa bên phải của một hypebôn vuông góc.


    Cũng giống như các hàm lượng giác, bạn có thể tính trực tiếp giá trị sinh(x), cosh(x), và tanh(x). Phần còn lại của các giá trị có thể được tính bằng các mối quan hệ khác nhau giữa ba giá trị này. Ngoài ra còn có các hàm khác như asinh(x), acosh(x), và atanh(x), chúng có thể được sử dụng để tính toán nghịch đảo của các giá trị hypebôn tương ứng.


    import math


    math.sinh(math.pi)    # returns 11.548739357257746

    math.cosh(math.pi)    # returns 11.591953275521519

    math.cosh(math.pi)    # returns 0.99627207622075


    math.asinh(11.548739357257746)   # returns 3.141592653589793

    math.acosh(11.591953275521519)   # returns 3.141592653589793

    math.atanh(0.99627207622075)     # returns 3.141592653589798

    Vì math.pi tương đương khoảng 3.141592653589793, nên khi chúng ta sử dụng asinh() với giá trị trả về bởi sinh(math.pi), chúng ta lấy lại π của chúng ta.


    Hàm Luỹ thừa và Logarit

    Có lẽ bạn sẽ phải làm việc với luỹ thừa và logarit thường xuyên hơn so với các hàm hypebôn hay lượng giác. May mắn thay, mô-đun math cung cấp rất nhiều hàm để giúp chúng ta tính logarit.


    Bạn có thể sử dụng log(x, [cơ số]) để tính log của một số x cho trước với cơ số nhất định. Nếu bạn bỏ ra đối số cơ số, thì log của x được tính theo cơ số e. Ở đây, e là một hằng số toán học có giá trị là 2.71828182.... và nó có thể được truy xuất bằng cách sử dụng math.e. Nhân tiện, Python cũng cho phép bạn truy cập vào hằng số π bằng cách sử dụng math.pi.


    Nếu bạn muốn tính các giá trị logarit cơ số 2 hoặc 10, hãy sử dụng log2(x) và log10(x) sẽ trả về kết quả chính xác hơn log(x, 2) và log(x, 10). Hãy nhớ rằng không có hàm log3(x), do đó bạn sẽ phải tiếp tục sử dụng log(x, 3) để tính các giá trị logarit cơ số 3. Tương tự với tất cả các cơ số khác.


    Nếu giá trị của lôgarit mà bạn tính là rất gần với 1, bạn có thể sử dụng log1p(x). 1p trong log1p nghĩa là 1 cộng. Do đó, log1p(x) tính log(1+x) trong đó x là gần bằng 0. Tuy nhiên, kết quả chính xác hơn với log1p(x).


    Bạn cũng có thể tính giá trị của một số x luỹ thừa y bằng cách sử dụng pow(x, y). Trước khi tính toán các luỹ thừa, hàm này sẽ chuyển đổi cả hai đối số thành kiểu float. Nếu bạn muốn kết quả cuối cùng được tính bằng các số nguyên chính xác, bạn nên sử dụng hàm pow() có sẵn hoặc toán tử **.


    Bạn cũng có thể tính căn bậc hai của bất kỳ số x cho trước bằng cách sử dụng sqrt(x), nhưng điều tương tự cũng có thể được thực hiện bằng cách sử dụng pow(x, 0.5).


    import math


    math.exp(5)                      # returns 148.4131591025766

    math.e**5                        # returns 148.4131591025765


    math.log(148.41315910257657)     # returns 5.0

    math.log(148.41315910257657, 2)  # returns 7.213475204444817

    math.log(148.41315910257657, 10) # returns 2.171472409516258


    math.log(1.0000025)              # returns 2.4999968749105643e-06

    math.log1p(0.0000025)            # returns 2.4999968750052084e-06


    math.pow(12.5, 2.8)              # returns 1178.5500657314767

    math.pow(144, 0.5)               # returns 12.0

    math.sqrt(144)                   # returns 12.0

    Advertisement

    Số phức

    Số phức được lưu trữ nội tại bằng tọa độ hình chữ nhật hoặc Đề các. Một số phức z sẽ được biểu diễn trong các tọa độ Đề các là z = x + iy, trong đó x đại diện cho phần thực và y đại diện cho phần ảo. Một cách khác để biểu diễn chúng là sử dụng tọa độ cực.


    Trong trường hợp này, số phức z sẽ được định nghĩa là sự kết hợp của hệ số r và góc pha phi. Hệ số r là khoảng cách giữa số phức z và gốc. Góc phi là góc nghịch đảo được tính theo đơn vị radian từ trục x dương đến đoạn nối z với gốc.


    Khi xử lý các số phức, mô-đun cmath có thể là sự trợ giúp rất lớn. Hệ số của một số phức có thể được tính bằng hàm abs() tích hợp, và pha của nó có thể được tính bằng hàm phase(z) sẵn có trong mô đun cmath. Bạn có thể chuyển đổi một số phức dưới dạng hình chữ nhật thành dạng có cực sử dụng polar(z), nó sẽ trả về một cặp (r, phi), trong đó r là abs(z) và phi là phase(z).


    Tương tự, bạn có thể chuyển đổi một số phức dưới dạng có cực sang dạng hình chữ nhật bằng cách sử dụng rect(r, phi). Số phức trả về bởi hàm này là r * (math.cos (phi) + math.sin (phi) * 1j).


    import cmath


    cmath.polar(complex(1.0, 1.0))

    # returns (1.4142135623730951, 0.7853981633974483)


    cmath.phase(complex(1.0, 1.0))

    # returns 0.7853981633974483


    abs(complex(1.0, 1.0))

    # returns 1.4142135623730951

    Mô-đun cmath cũng cho phép chúng ta sử dụng các hàm toán học thông thường với số phức. Ví dụ, bạn có thể tính toán căn bậc hai của một số phức bằng hàm sqrt(z) hoặc cosine của nó bằng cos(z).


    import cmath


    cmath.sqrt(complex(25.0, 25.0))

    # returns (5.49342056733905+2.2754493028111367j)


    cmath.cos(complex(25.0, 25.0))

    # returns (35685729345.58163+4764987221.458499j)

    Số phức có rất nhiều ứng dụng như mô phỏng mạch điện, động lực học và phân tích tín hiệu. Nếu bạn cần phải làm việc với những điều đó, thì mô-đun cmath sẽ không làm bạn thất vọng.

    Trong Python có hỗ trợ rất nhiều kiểu dữ liệu số. Tuy nhiên, chỉ có một số kiểu dữ liệu hay được sử dụng bao gồm: số nguyên (int / integers), số thực (float / floating-point), số thập phân (decimal) phân số (fraction) và số phức (complex).

    Các kiểu dữ liệu số trong Python

    I. Số Nguyên (Int / Integers)

    Trong Toán học, số nguyên bao gồm các số nguyên dương (1, 2, 3,…), số 0 và số nguyên âm (-1, -2, -3,…). Trong Python, giá trị số nguyên cũng giống như vậy. Để kiểm tra xem biến hoặc giá trị thuộc lớp số (class) nào, ta sẽ dùng hàm type() và để kiểm tra xem chúng có thuộc về một lớp số (class) cụ thể nào không, ta sẽ dùng hàm isinstance(). Để rõ hơn, chúng tôi mời bạn xem ví dụ dưới đây:


    Ví dụ 1:

    Các câu lệnh:

    a = 1

    print(type(a))

    print(isinstance(a, int))

    print(isinstance(a, float))


    Kết quả trả ra:

    <class ‘int’>

    True

    False


    II. Số Thực (Float)

    Trong Toán học, số thực bao gồm các số nguyên (vd: -9), số thập phân (vd: 4/3) và các số vô tỷ (vd: √2 ~ 1.41421356…). Trong Python, kiểu số này được thể hiện bằng kiểu dữ liệu Float. Để rõ hơn, chúng tôi mời các bạn xem ví dụ dưới đây.


    Ví dụ 2:

    Các câu lệnh:

    a = 1.2345

    b = 2.0

    c = 4/3

    print(type(a))

    print(type(b))

    print(type(c))


    Kết quả trả ra:

    <class ‘float’>

    <class ‘float’>

    <class ‘float’>


    III. Phân Biệt Số Nguyên Và Số Thực Trong Python

    Trong Toán học, hai giá trị 1 và 1.0 là bằng nhau. Trong Python, giá trị 1 được xếp vào lớp số nguyên (class integer) và 1.0 được xếp vào lớp số thực (class float)


    Ví dụ 3:

    Các câu lệnh:

    a = 1

    b = 1.0

    print(type(a))

    print(type(b))


    Kết quả trả ra:

    <class ‘int’>

    <class ‘float’>


    Giá trị 1 và 1.0 bằng nhau về mặt toán học. Tuy nhiên trong Python thì giá trị 1 thuộc kiểu dữ liệu số nguyên. Còn giá trị 1.0 thuộc kiểu dữ liệu số thực.


    IV. Số Thập Phân (Decimal)

    Như đã nói ở phần II, số Thực bao gồm cả số nguyên và số thập phân. Tuy nhiên số Thực trong Python chỉ biểu thị đến 16 số sau dấu phẩy (trong Python là dấu chấm). Do đó, để tăng độ chính xác, trong Python tích hợp thêm số thập phân (Decimal). Mời các bạn xem ví dụ dưới đây ở hiểu rõ hơn.


    Ví dụ 4:

    Các câu lệnh:

    form decimal import Decimal

    print(4/3)

    print(Decimal(4/3))


    Kết quả trả ra:

    1.3333333333333333

    1.3333333333333332593184650249895639717578887939453125


    Sử dụng hàm “form decimal import Decimal” để nhập hàm Decimal vào Python. Khi in ra kết quả của 4/3 ( kiểu float) thì chỉ hiển thị đến 16 số ở phần thập phân. Khi in kết quả của Decimal(4/3) thì kết quả hiển thị chính xác hơn nhiều


    V. Phân Số (Fraction)

    Trong Toán học, phân số  bao gồm tử số và mẫu số. Trong Python, được nhập vào thông qua module Fraction với cú pháp như sau:


    from fractions import Fraction

    Fraction (<Tử số>,<Mẫu số>)


    Để rõ hơn, chúng tôi mời bạn xem ví dụ dưới đây:


    Ví dụ 1:

    Các câu lệnh:

    from fractions import Fraction

    print(Fraction(1,3))

    print(Fraction(2,4))


    Kết quả trả ra:

    1/3

    1/2


    CÁCH KHÁC (ngắn gọn hơn cho ví dụ trên)


    from fractions import Fraction as F

    print(F(1,3))

    print(F(2,4))


    Kết quả trả ra:

    1/3

    1/2


    Câu lệnh “from fractions import Fraction as F” dùng để import module Fraction và sử dụng nó bằng ký tự F ( cho ngắn gọn). Với hàm print(F(2,4)) thì khi phân số có thể rút gọn, Python sẽ tự rút gọn từ 2/4 thành 1/2


    VI. Số Phức (Complex)

    Nếu bạn chưa biết gì về số phức, bạn có thể bỏ qua phần này. So với các kiểu số khác thì số phức ít được sử dụng nhât.

     Trong Toán học, số phức có cấu trúc:


    a + bj


    Trong đó:

    + a, b là các số nguyên, a được gọi là phần thực, b được gọi là phần ảo. + j được xem là đơn vị ảo, qui ước j2 = -1

     Trong Python, để tạo một số phức, ta sử dụng cú pháp:


    complex(<Phần thực>,<Phần ảo>)


    Để gán giá trị số phức cho 1 biến:


    <tên_biến> = <Phần_thực> + <Phần_Ảo>j


     Để xuất ra từng phần của 1 số phức:


    <tên_biến>.real #để xuất ra phần thực

    <tên_biến>.imag #để xuất ra phần ảo


    Để rõ hơn, chúng tôi mời các bạn xem ví dụ dưới đây.


    Ví dụ 2:

    Các câu lệnh:

    x = complex(1,2)

    print(x)

    y = 3 + 4j

    print(y.real)

    print(y.imag)


    Kết quả trả ra:

    (1+2j)

    3.0

    4.0


    Biến x là số phức được khai báo sử dụng hàm complex. Biến y được khai báo trực tiếp theo cấu trúc số phức.


    Hàm .real và .imag được dùng để lần lượt tách phần thực và phần ảo trong số phức.


    VII. Biểu Thức Toán Học Trong Python

    Giống như trong Toán học, Python cung cấp các cách tính toán với các biểu thức toán học cơ bản. Trong bài này, chúng tôi sẽ giới thiệu một số biểu thức toán học thông dụng, được liệt kê theo hình ảnh ở dưới:



    Ví dụ 1:

    Các câu lệnh:

    A = 10

    B = 3

    print(A/B) , print(A//B) , print(A%B) , print(A**B)


    Kết quả trả ra:

    3.3333333333333335

    3

    1

    1000


    Hàm A/B trả về kết quả là số thực 3.333333…

    Hàm A//B trả về kết quả lầ số nguyên

    Hàm A%B trả về kết quả số dư của thương trong phép tính chia A/B là 1

    Hàm A**B trả về kết quả là A lũy thừa B bằng 1000

    VIII. Thư Viện Math Trong Python

    Python cung cấp thư viện Math bao gồm rất nhiều hàm liên quan đến toán học.

     Khi muốn sử dụng một thư viện nào đó, các bạn sử dụng câu lệnh:


    import <tên thư viện>


    hoặc


    import <tên thư viện> as <một ký tự mà ta lựa chọn (để code được ngắn gọn)>


     Khi muốn truy xuất 1 hàm nào đó trong thư viện , ta sử dụng câu lệnh:


    <tên thư viên>.<tên hàm>


    hoặc


    <ký tự đại diện cho thư viện>.<tên hàm>


    Một số hàm thường dùng trong thư viện math và ví dụ mình họa.



    Ví dụ 2:

    Các câu lệnh:

    import math as mt   a = 10/3

    b = 5

    c = 4


    print(mt.trunc(a)) 

    print(mt.floor(a))

     print(mt.ceil(a)) 

    print(mt.fabs(a)) 

    print(mt.sqrt(a)) 

    print(mt.gcd(b,c)) 


    Kết quả trả ra:

    3

    3

    4

    3.3333333333333335

    1.8257418583505538

    1


    Bằng cách import thư viện math và gán nó cho ký tự mt, để mỗi khi sử dụng hàm toán học ta chỉ cần dùng ký tự mt để gọi hàm ra.


    Tóm tắt

    Tất cả các hàm mà chúng ta thảo luận ở trên có các ứng dụng cụ thể của chúng. Ví dụ, bạn có thể sử dụng hàm factorial(x) để tính hoán vị và các vấn đề về tập hợp. Bạn có thể sử dụng các hàm lượng giác để phân giải một vector thành tọa độ Đề các. Bạn cũng có thể sử dụng các hàm lượng giác để mô phỏng các hàm tuần hoàn như sóng âm và ánh sáng.


    Tương tự, đường cong của một sợi dây treo giữa hai cực có thể được xác định bằng cách sử dụng một hàm hypebôn. Vì tất cả các hàm này trực tiếp có sẵn trong mô đun math, nên nó giúp dễ dàng tạo ra các chương trình nhỏ có thể thực hiện tất cả các nhiệm vụ này.


    Tôi hy vọng bạn thấy hứng thú với hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào, hãy cho tôi biết trong phần bình luận nhé.


    Comments

    Tóc nối
    HỖ TRỢ
    www.tocvietthat.com
    Danh mục