2011-11-06 37 views
18

Tôi đã phát triển một chương trình trong Octave mà tôi muốn thêm một lớp GUI. Tôi muốn tạo một chương trình thực thi trong C# mà tôi có thể phân phối nhưng muốn gắn bó với các cấu trúc đại số tuyến tính của Octave mà không cần phải thực hiện chúng một mình. Đặc biệt, tôi muốn các hàm ma trận, hoạt động vector và tối ưu hóa cơ bản (như fminuncfmincg).Giao diện quãng tám với C#

Cách tốt nhất để đạt được điều này là gì? Thư viện đại số tuyến tính C# thích hợp, có lẽ?

+1

Bạn nên chỉnh sửa tiêu đề để phù hợp với câu hỏi của mình, bạn có thể thu hút nhiều người quan tâm hơn. – jv42

Trả lời

8

Có rất nhiều thư viện toán học cho C#. Math.NET Numerics có vẻ là một lựa chọn thay thế miễn phí tốt. Ngoài ra còn có triển khai thương mại.

Một cách khác là gọi Octave với Process.Start và phân tích đầu ra. Điều này giúp bạn tiết kiệm từ việc viết lại các phép tính của mình nhưng bạn cần có khả năng thực hiện gói Octave với ứng dụng của bạn. Nếu bạn muốn kết hợp chặt chẽ mã C# và toán học thì điều này sẽ khá phức tạp, nhưng nếu mã toán của bạn là một phép tính lớn với một bộ đầu vào duy nhất và một bộ kết quả đầu ra, nó có thể là một lựa chọn tốt.

6

Tôi đã viết một Octave C# wrapper cho dự án Adastra tôi:

http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Tools/OctaveController.cs

Đây là một cách sử dụng ví dụ: http://code.google.com/p/adastra/source/browse/trunk/src/Adastra/Algorithms/OctaveLogisticRegression.cs Đây là một Octave lai và C# thực hiện Logistic Regression -máy chia hạng.

+0

Mã của bạn đã giúp tôi rất nhiều, cảm ơn !!! – Narek

+0

@Anton Andreev Nó có thể xử lý âm mưu không? Tôi có thể thực hiện các phép tính bằng cách sử dụng OctaveController, nhưng không thể tìm ra cách để xem các ô. – demongolem

+0

@Anton - điều này có vẻ tuyệt vời; cám ơn vì đã chia sẻ. Bạn có biết làm thế nào dễ dàng để làm việc trong Mono trên Linux? Tôi thấy bạn đã có một số cuộc gọi API đến Kernel32 ... (UPDATE: Tôi đã phát hiện điều này: http://www.codeproject.com/Articles/342007/OctaveSharp-Running-GNU-Octave-with-Csharp) –

2

Để xây dựng một standalone: ​​ http://www.gnu.org/software/octave/doc/interpreter/Standalone-Programs.html#Standalone-Programs

Tôi có một vấn đề tương tự, đó là tạo ra một .dll cho C# Tôi đã tìm kiếm một cách để làm điều này trong một thời gian bây giờ, tôi có không có thể tìm thấy hướng dẫn hoặc cách dễ dàng để làm điều đó. Đây là một dự án đang diễn ra hơn là một câu hỏi, nhưng tôi chắc chắn sẽ trả lời hoặc giúp đỡ! :)

Tôi đang lên kế hoạch theo dõi những nỗ lực của mình ở đây, vì vậy, điều này sẽ trở thành một trang cho phép mọi người tìm thấy làm thế nào để biên dịch quãng tám thành .dll (luôn luôn giả định này là có thể)

vì vậy:

-Tôi đang sử dụng VS2010

-Tôi bắt đầu với những chương trình MS VS2010 biên soạn cho quãng tám, giả sử điều này sẽ gần hơn.

-Tôi tạo một dự án trong VS và sử dụng đoạn mã sau:

#include <iostream> 
#include <octave/oct.h> 
#include <octave/octave.h> 
#include <octave/parse.h> 


int main(int argc, char* argv[]) 
{ 
    std::cout<<"hello world"<<std::endl; 
    char a[900]; 
    std::cin>>a; 
    return 0; 
} 

-Các code sẽ tất nhiên không tìm thấy libs quãng tám, vì vậy tôi đã thêm họ, ví dụ như,

C:\Octave\Octave-3.6.1-VS10\lib\octave\3.6.1;C:\Octave\Octave-3.6.1-VS10\include\octave-3.6.1;C:\Octave\Octave-3.6.1-VS10\include;$(VCInstallDir)include;... 

Để Bao gồm Thư mục (Nhấp chuột phải vào Dự án -> Thuộc tính)

Bây giờ tôi nhận được

Error 73 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall octave_value::~octave_value(void)" ([email protected]@[email protected]) referenced in function "public: void * __thiscall octave_value::`vector deleting destructor'(unsigned int)" ([email protected]@[email protected]) ...\Projects\cppap32\cppap32\main.obj cppap32 

mà về cơ bản có nghĩa là nó không thể tìm thấy octave_value ... Bằng cách sử dụng dumpbin.exe chúng ta có thể thấy rằng nó cần phải có cả hai octave.lib VÀ octinterp.lib

Nó bây giờ không biên dịch ....:)

Bước tiếp theo tạo ra một .dll ...

Ghi chú:

Để kiểm tra những gì được xuất khẩu bởi một lib:

dumpbin.exe /exports C:\Octave\Octave-3.6.1-VS10\lib\octave\3.6.1\octave.lib 

liên kết liên quan:

tương tự , câu hỏi mở trên trang web khác: http://www.daniweb.com/software-development/cpp/threads/297336/gnu-octave-for-c-how-to-start

0

Có lẽ bạn có thể xem Xoctave. Đây là một GUI được viết cho Octave. Đây là liên kết: www.xoctave.com

Và có thể những người ở đó có thể có giải pháp cho câu hỏi của bạn.

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