Hỏi đáp

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

Đạo hàm trong C#

8 năm trước 2.468 lượt xem 2 bình luận 8 năm trước

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 8 năm trước

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
......................

Bài viết
0
Câu hỏi
4
Bình luận
6