2012-07-04 75 views
10

Tôi cần phải tích hợp phân tích trong C++. Ví dụ: tôi nên tích hợp các biểu thức như sau: exp[I(x-y)], I là số ảo.tính toán biểu tượng trong C++

Tôi có thể làm điều này bằng C++ bằng cách nào?

Tôi đã thử GiNaC nhưng nó chỉ có thể tích hợp đa thức. Tôi cũng đã thử SymbolicC++. Nó có thể tích hợp các chức năng như sine, cosine hoặc exp(x)ln(x), nhưng nó không phải là rất mạnh mẽ. Ví dụ, nó không thể tích hợp x*ln(x) mà có thể dễ dàng thu được bằng cách sử dụng Mathematica hoặc bằng cách tích hợp theo từng phần.

Có công cụ hoặc thư viện nào khác có thể thực hiện tính toán biểu tượng như tích hợp phân tích trong C++ không?

+0

Bạn đã thử [Maxima] (http://maxima.sourceforge.net/) chưa? – jxh

+0

đang sử dụng tùy chọn Matlab? Hộp công cụ biểu tượng của Matlab sẽ có thể làm những việc này. Sử dụng C Matlab Engine bạn có thể gọi nó từ mã C++ của bạn? – Philipp

+0

Tôi không có giấy phép của Matlab nên tôi không thể sử dụng nó. Maxima có sử dụng cú pháp C++ không? Tôi thích một số thư viện trong C++. nếu tôi muốn sử dụng các chương trình khác như maxima hoặc Matlab tôi sẽ sử dụng Mathematica thay thế. thực sự tôi đã viết chương trình của tôi trong mathematica. Nó là một chương trình đơn giản để giải phương trình Integro-defferential nhưng vấn đề là Mathematica không hiệu quả về thời gian cần thiết để tính toán. Vì vậy, tôi quyết định viết chương trình của tôi bằng C++. – MOON

Trả lời

4

Nếu bạn cần làm tích hợp tượng trưng, ​​thì có thể bạn sẽ không nhận được gì nhanh hơn chạy nó trong toán học hoặc cực đại - chúng đã được viết bằng (giống như) C++. Vì vậy, trừ khi phương trình của bạn có một công thức rất cụ thể mà bạn có thể khai thác theo cách mà Mathematica hoặc Maxima không thể thì bạn có thể không may mắn - và ít nhất bạn sẽ không nhận được loại thao tác tùy chỉnh đó từ thư viện có sẵn.

Bạn có thể được biện minh bằng cách viết mã của riêng bạn để tăng tốc độ nếu bạn cần thực hiện các giải pháp số. (Tôi biết rằng tôi đã làm để tạo ra các giải pháp số cho PDE).

+0

Mã của tôi được viết bằng Mathematica có trong liên kết này: http://www.mediafire.com/?cw9s3ne7jz8fq7s Mã này là về một lần đệ quy quan hệ. Tôi cung cấp cho nó nhiệm kỳ thứ 0 và nó có được nhiệm kỳ đầu tiên sau đó nó sử dụng thuật ngữ đầu tiên để có được từ thứ hai và vân vân. Trong 4 học kỳ đầu tiên, không mất nhiều thời gian nhưng đối với các thuật ngữ khác, phải mất rất nhiều thời gian và tôi chưa bao giờ đạt được những thuật ngữ cao hơn. mã này là nghĩa vụ phải giải quyết một phương trình vi phân tích phân vì vậy tôi cần rất nhiều thuật ngữ để thu được. Ít nhất tôi nghĩ 50 thuật ngữ là cần thiết. – MOON

+0

Vì vậy, beacuse phải mất rất nhiều thời gian trong Mathematica tôi quyết định viết nó bằng c + + – MOON

+0

Bạn có thể thêm một hình ảnh của phương trình, tôi không thể mở máy tính xách tay mathematica (không có toán học có sẵn cho tôi những ngày này ...) –

1

Các thư viện khác C++ Tôi nhận thức được rằng làm tính toán mang tính biểu tượng là

Nếu tôi không nhầm, SymEngine làm chưa hỗ trợ tích hợp; Tuy nhiên, Piranha làm. Các documentation cho Piranha là hơi hạn chế vào lúc này và đang được phát triển, nhưng bạn có thể thấy chức năng tích hợp here. Lưu ý rằng liên kết thứ hai sử dụng cú pháp cho trình bao bọc Python Piranha. Tuy nhiên, Piranha "là một thư viện đại số máy tính cho thao tác biểu tượng của đa thức đa biến thưa thớt và các đối tượng tượng trưng liên quan chặt chẽ khác (như loạt Poisson)", vì vậy tôi không nghĩ rằng nó có thể tích hợp các chức năng cụ thể mà bạn có thể quan tâm .

Mặc dù nó không phải là C++, bạn cũng có thể quan tâm SymPy cho Python, có thể thực hiện một số tích hợp biểu tượng phức tạp hơn mà bạn có thể quan tâm. Tài liệu cho tích hợp của SymPy là here.

Các vấn đề liên quan