首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC 與 MATLAB 聯合程式設計 (八) — 線性方程求解與 C/C++ 程式碼生成

     編輯:關於VC++

前言

上一章介紹 MATLAB Compiler 基本用法,本章示範如何將 .m 檔轉換為對應的 C/C++ 檔案並在 VC 中呼叫。範例沿用第四章的線性方程組求解。

步驟 1:撰寫 MATLAB 函數 gjfcz.m

function [x] = gjfcz(A,b)
% A = [-1.5 1 2; 4 2 3; -3 2 8]
% b = [3; 5; 6]
x = A \ b

步驟 2:使用 mcc -m 生成 C 程式碼與可執行檔

> mcc -m gjfcz.m

於 MATLAB 工作目錄產生:gjfcz.exe、gjfcz.c、gjfcz.h、gjfcz_main.c。我們需要 gjfcz.c、gjfcz.h。

步驟 3:建立 VC 對話方塊專案 JXXFC

面板加入一個按鈕,複製 gjfcz.c、gjfcz.h 到專案目錄並加入專案。

步驟 4:按鈕回應程式碼

void CJXXFCDlg::OnButton1()
{
    static double Adata[] = {-1.5, 4, -3, 1, 2, 2, 2, 3, 8};
    static double bdata[] = {3, 5, 6};
    double Xdata[100];

    mxArray *A = NULL, *b = NULL, *x = NULL;
    mlfEnterNewContext(0, 0);               // 自動記憶體管理
    mlfAssign(&A, mlfDoubleMatrix(3, 3, Adata, NULL));
    mlfAssign(&b, mlfDoubleMatrix(3, 1, bdata, NULL));
    InitializeModule_gjfcz();               // 初始化模組
    x = mlfGjfcz(A, b);                     // 呼叫求解函數
    TerminateModule_gjfcz();                // 結束模組
    memcpy(Xdata, mxGetPr(x), 3 * sizeof(double)); // 取得結果指標

    CString R;
    R.Format(_T("%f\n%f\n%f"), Xdata[0], Xdata[1], Xdata[2]);
    MessageBox(R);

    mxDestroyArray(A); mxDestroyArray(b); mxDestroyArray(x);
    mlfRestorePreviousContext(0, 0);
}

執行結果

求解結果

圖 1

結語

使用 MATLAB Compiler 將 .m 檔編譯為 C/C++ 檔再於 VC 中呼叫,是最常用的介面方式。雖然仍使用 C/C++ 函式庫函數,但比完全手寫 C/C++ 簡單許多。靈活運用編譯器需對 C/C++ 函式庫有一定了解,MATLAB 提供 cmath_ref2b.pdf 與 cmath_ug2b.pdf 參考。注意:MATLAB 7.0 介面大幅變更,舊版程式碼不相容。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved