Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Đạo hàm trong C#

20:34 28-04-2017 2.463 lượt xem 2 bình luận 22:04 28-04-2017

Như tiêu đề mình vấn đề về tính đạo hàm các phép tính VD:3*x+4*x*x sẽ có đạo hàm 3+8*x ( không có phép toán đặc biệt như sin cos ).Nhưng mình không biết thuật toán nào hay thư viện nào của C# hỗ trợ ; xin được mọi người chỉ giáo .Cảm ơn mọi ngừơi nhiều.

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 21:45 28-04-2017

1) đổi biểu thức dạng chuỗi sang dạng cây nhị phân

Ví dụ:
Code:


(y-x)(x+y)


sẽ trở thành cây nhị phân:
     *
   /   \
  -     +
 / \   / \
y  x  x  y

2) Duyệt cây để lấy đạo hàm theo các quy tắc đã biết => tạo ra 1 cây cho đạo hàm:
a) gặp nút '*': ứng với (L * R) => xài qui tắc (L'*R + R'*L)
b) gặp nút '+': ứng với (L + R) => xài qui tắc (L' + R')
c) gặp nút '-': ứng với (L - R) => xài qui tắc (L' - R')
Ví dụ: 

Code:

cây ứng với biểu thức "(y-x)(x+y)" sẽ cho ra cây đạo hàm:
           +
       /       \
     *          *
    / \        / \
  -   +      -   +
 /\   /\    /\   /\
0 1  x  y  y x  0  1
(ứng với biểu thức: -(x+y) + (y-x))

3) rút gọn cây đạo hàm
Ví dụ:

Code:

Cây đạo hàm trên có thể rút gọn lại thành:
   -
  / \
 0  *
    /\
   2 x
(ứng với: -2x)

4) Duyệt cây đạo hàm và đổi ra dạng chuỗi
Ví dụ với cây đạo hàm trên thì sẽ có chuỗi: "-2x"

Phần 2 (-> cây đạo hàm) có vẻ khó nhưng mình đã có các qui tắc lấy đạo hàm trong sách
Nếu không cần in biểu thức đạo hàm ra cho người dùng coi mà chỉ cần có đạo hàm để tính toán tiếp thì có thể bỏ qua phần 3 (rút gọn cây). Phần 3 thì phải dựa trên kinh nghiệm để có danh sách các qui tắc rút gọn, đại khái:
0+x = x
1*x = x
mx+nx = (m+n)x
xy = yx
......................

Câu hỏi mới nhất