2013-04-18 19 views
16

Tôi thực sự không thể hiểu chức năng của numpy.gradient và cách sử dụng nó để tính toán gradient chức năng đa biến.Tính gradient với NumPy

Ví dụ, tôi có một chức năng như:

def func(q, chi, delta): 
    return q * chi * delta 

tôi cần phải tính toán đã ghi bàn 3 chiều gradient (nói cách khác, tôi muốn để tính toán hàm riêng liên quan đến tất cả các biến (q, chi bằng, delta)).

Tôi có thể tính toán độ dốc này bằng cách sử dụng NumPy như thế nào?

Trả lời

16

Vấn đề là, numpy rằng không thể cung cấp cho bạn các dẫn xuất trực tiếp và bạn có hai tùy chọn:

Với NUMPY

Điều cơ bản bạn phải làm là xác định lưới trong ba chiều và để đánh giá chức năng trên lưới này. Sau đó bạn nạp bảng giá trị hàm này vào numpy.gradient để lấy một mảng với đạo hàm số cho mọi thứ nguyên (biến).

Ví dụ từ here:

from numpy import * 

x,y,z = mgrid[-100:101:25., -100:101:25., -100:101:25.] 

V = 2*x**2 + 3*y**2 - 4*z # just a random function for the potential 

Ex,Ey,Ez = gradient(V) 

Without NumPy

Bạn cũng có thể tính toán đạo hàm chính mình bằng cách sử dụng centered difference quotient. centered difference quotient

Đây là bản chất, những gì numpy.gradientis doing cho mọi điểm trong lưới được xác định trước của bạn.

+0

Cảm ơn, Stefan! Trong thực tế, tôi hiểu làm thế nào để tính toán hướng dẫn sử dụng dẫn xuất (không có bất kỳ khuôn khổ), nhưng tôi đã không thể hiểu cách thức hoạt động của np.gradient.Trước đây tôi đã sử dụng cho mục đích kết hợp của C++ với gsl, nhưng cách tiếp cận này đòi hỏi quá nhiều mã hóa. –

+2

Để chính xác, công thức là những gì 'numpy.diff' làm; 'numpy.gradient' tương tự nhưng có hành vi đặc biệt ở các ranh giới. – Mark

+0

@Mark: 'numpy.gradient' giống như công thức này (thương hiệu chênh lệch trung tâm với $ + \ Delta x $ và $ - \ Delta x $) so với' numpy.diff' – user66081

10

Numpy và Scipy là để tính toán số. Vì bạn muốn tính toán độ dốc của một hàm phân tích, bạn phải sử dụng gói Sympy hỗ trợ toán học biểu tượng. Sự khác biệt được giải thích here (bạn thực sự có thể sử dụng nó trong bảng điều khiển web ở góc dưới cùng bên trái).

Bạn có thể cài đặt Sympy dưới Ubuntu với

sudo apt-get install python-sympy 

hoặc dưới bất kỳ phân phối Linux với pip

sudo pip install sympy