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; } }