Có một bộ giải pháp ODE mã nguồn mở cho C sử dụng loại phức C99 nguyên gốc không?


12

Tôi đã sử dụng GSL làm nền tảng cho nhiều mô phỏng của mình, nhưng nó hơi quá mức cho mục đích của tôi và nó xác định loại phức tạp của riêng nó vì lý do di sản. Thay vì viết mã bộ giải Runge-Kutta ODE của riêng tôi, có lẽ sẽ không hiệu quả lắm, có bộ giải ODE mã nguồn mở nào sử dụng loại phức C99 gốc không?


Tôi không biết bạn muốn sử dụng nó ở đâu, nhưng nói chung RK khá khó thực hiện theo cách không hiệu quả ... Bạn đã thực hiện bất kỳ điểm chuẩn nào cho thấy bạn có vấn đề này chưa?
mbq

2
Không ai. Tôi đã không viết riêng của mình bởi vì tôi không muốn phát minh lại bánh xe. Nếu tôi phải thì tôi sẽ làm, nhưng tìm thời gian để dành cho thứ gì đó không bị hỏng không phải là thẻ cho tôi ngay bây giờ. Nếu một câu trả lời xuất hiện đó là những gì tôi đang tìm kiếm, tôi sẽ không thể thực sự sử dụng nếu trong một vài tháng. Ngoài ra, RK không phải lúc nào cũng là thứ tôi cần, chỉ là những gì tôi biết về thuật toán.
qubyte

Ngẫu nhiên, hầu hết thời gian tôi đang thực hiện mô phỏng các hệ lượng tử nhỏ. Không độc quyền mặc dù.
qubyte

Tôi sẽ tư vấn chống lại việc tự thực hiện RK kích thước bước thay đổi (trừ mục đích giáo dục). Có rất nhiều heuristic liên quan đến việc tìm kích thước bước tối ưu.
Jitse Niesen

Như tôi đã nói, bất kỳ điều gì tôi viết nhanh chóng đều sai hoặc chậm. Có đặc biệt khó thực hiện RK với đầu vào / đầu ra phức tạp không? Tôi biết bạn chỉ có thể chia nó thành hai phần thực, nhưng điều này thật khó chịu!
qubyte

Câu trả lời:


10

Bạn có thể coi đó là "quá mức", nhưng gói tích hợp thời gian của PETSc có thể được sử dụng với C99 phức tạp (cấu hình --with-scalar-type=complex). Các phương pháp được hỗ trợ bao gồm

Những triển khai này là thích hợp nhất cho các vấn đề chiều cao như phương trình vi phân từng phần bán rời rạc (phương pháp đường).


Nó hơi lớn, nhưng tôi không biết về nó nên +1. Lý tưởng nhất là bất cứ điều gì tôi sử dụng sẽ không lớn hơn GSL. Tôi sẽ xem hướng dẫn và xem những gì tôi nghĩ.
qubyte

Để rõ ràng, bạn liên kết với các thư viện này tại thời gian biên dịch. Có đúng không?
qubyte

Không có gì được liên kết tại thời gian biên dịch. Không bao giờ. Liên kết được thực hiện sau khi biên dịch (ngay cả khi trình biên dịch gọi trình liên kết). Bạn có thể tải động thư viện một cách linh hoạt, nhưng bạn sẽ cần các tiêu đề để biên dịch mã của bạn để gọi vào thư viện. Nếu điều đó không trả lời câu hỏi của bạn, vui lòng giải thích những gì bạn muốn làm.
Jed Brown

Bạn đúng tất nhiên. Lỗi ngớ ngẩn, nhưng bạn biết ý tôi là gì. Câu hỏi của tôi sẽ được nêu rõ hơn là "Tôi có liên kết đến các thư viện này không?" trái ngược với việc biên dịch các bit tôi yêu cầu cùng lúc với mã của riêng tôi như trường hợp của Boost. Tôi biết rằng các chức năng gọi từ thư viện sẽ yêu cầu các tiêu đề, tôi đã làm điều này một thời gian.
qubyte

Có, bạn biên dịch PETSc độc lập với ứng dụng của bạn. Nó không chỉ tiêu đề như Boost.
Jed Brown

1

Một tùy chọn khác mà bạn có, trừ khi hệ thống khá phức tạp, chỉ là chuyển đổi từ ký hiệu phức tạp sang một vấn đề với hai ẩn số đại diện cho phần thực và phần ảo. Sau đó, bạn có thể sử dụng một bộ giải ODE có giá trị thực tiêu chuẩn.


Đây chính xác là những gì tôi đang cố gắng tránh. Trong thực tế, các nhà tích hợp GSL chỉ thực sự nếu bộ nhớ phục vụ, vì vậy đây là những gì tôi đang làm vào lúc này.
qubyte
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.