C# matlab 混合编程

1)在matlab 里面 ,编写一个程序, 并且发布, 这个网上 有大量 准确 完整的教程,此处不在赘述

 

2)假设matlab里面的代码是:

function [outputArg1,outputArg2] = gsz_fuction_1(inputArg1,inputArg2)
%GSZ_FUCTION_1 此处显示有关此函数的摘要
%   此处显示详细说明
outputArg1 = inputArg1+inputArg2;
outputArg2 = inputArg1-inputArg2;
end

  

 

 

 

3)发布过程大致是:

 

 

4)添加引用 和命名空间

 

 

 

5)编写代码

  private void button_main_start_Click(object sender, EventArgs e)
        {
            //创建MATLAB类实例
            var matlabObj = new Class_gsz();

            // 输入参数(需转换为MWArray类型)
            MWNumericArray input1 = 5; // 示例值
            MWNumericArray input2 = 3;

            MWArray[] result = matlabObj.fuction_add(2, input1, input2);

            double[] doubleResults = new double[2];
            for (int i = 0; i < 2; i++)
            {
                // 将MWArray元素转换为数值类型的MWNumericArray
                MWNumericArray numericElement = (MWNumericArray)result[i];

                // 将MWNumericArray转换为标量double值
                double convertedValue = numericElement.ToScalarDouble();

                // 将转换结果存入目标数组
                doubleResults[i] = convertedValue;
            }

        }

 

关于数据转化 ,还有增强型代码

using MathWorks.MATLAB.NET.Arrays;
using System;

public class MWArrayConverter
{
    public double[] ConvertMWArray(MWArray[] result)
    {
        if (result == null)
            throw new ArgumentNullException(nameof(result));
        
        if (result.Length != 10)
            throw new ArgumentException("输入数组必须包含10个元素");

        double[] doubleResults = new double[10];

        for (int i = 0; i < 10; i++)
        {
            if (result[i] == null)
                throw new ArgumentNullException($"索引 {i} 处的元素为null");

            try
            {
                using (MWNumericArray numericElement = (MWNumericArray)result[i])
                {
                    doubleResults[i] = numericElement.ToScalarDouble();
                }
            }
            catch (InvalidCastException ex)
            {
                throw new InvalidOperationException(
                    $"索引 {i} 处的元素类型 {result[i].GetType().Name} 无法转换为数值类型", ex);
            }
        }

        return doubleResults;
    }
}

 

posted @ 2025-02-20 09:09  wenluderen  阅读(3)  评论(0编辑  收藏  举报