在 C# 中使用参数调用 MATLAB 函数

本文关键字:调用 MATLAB 函数 参数 | 更新日期: 2023-09-27 18:32:49

我创建了一个这样的matlab函数

function max = mymax(n1,n2,n3,n4,n5)
%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
   max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
max = n4;
end
if(n5 > max)
   max = n5;
end
end

然后我从中得到了一个引用我的 c# 窗口表单的.dll。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Mymax;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
namespace Mymax_with_Matlab
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Mymax.Mymax c1 = new Mymax.Mymax();
            int a = Convert.ToInt32(c1.mymax(1, 2, 3, 4, 5));
        }
    }
}

Mymax 是我的 DLL 文件的名称。 下面是停止我的应用程序的错误:

... MWMCR::EvaluateFunction error ... 
Not enough input arguments.
Error in => mymax.m at line 14.
... Matlab M-code Stack Trace ...
    at
file C:'Users'milad'AppData'Local'Temp'milad'mcrCache8.1'Mymax_0'Matlab      Examples'mymax.m, name mymax, line 14.

请帮助我....谢谢:)

在 C# 中使用参数调用 MATLAB 函数

我发现要将输入 parms 传递给 Matlab 编译程序集,我需要使用 MWArray 结构来确保它们采用 Matlab 函数可以使用的格式。见下文。

using System;
using MathWorks.MATLAB.NET.Arrays;
using TrainedClassifierComp;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            MLTestClass theModel = null;   /* Stores deployment class instance */
            MWStructArray inputs = null;   /* Sample input data */
            MWArray[] result = null;       /* Stores the result */
            MWNumericArray prediction = null;  /* Ouptut data extracted from result */
            MWNumericArray score = null;  /* Ouptut data extracted from result */
            /* Create the new deployment object */
            theModel = new MLTestClass();
            /* Create an MWStructArray */
            String[] myFieldNames = { "1", "2", "3", "4", "5", "6", "7", "8" };
            inputs = new MWStructArray(1, 8, myFieldNames);
            /* Populate struct with some sample inputs  */
            inputs["1", 1] = 1;
            inputs["2", 2] = 2;
            inputs["3", 3] = 3;
            inputs["4", 4] = 4;
            inputs["5", 5] = 5;
            inputs["6", 6] = 6;
            inputs["7", 7] = 7;
            inputs["8", 8] = 8;
            /* Show some of the sample data */
            Console.WriteLine("Inputs: ");
            Console.WriteLine(inputs.ToString());
            /* Pass it to a MATLAB function */
            result = theModel.fnTrainedClassifier(1, inputs);
            prediction = (MWNumericArray) result[0];
            score = (MWNumericArray)result[1];
            /* Show the results */
            Console.WriteLine("Prediction: ");
            Console.WriteLine(prediction.ToString());
            Console.WriteLine("Score: ");
            Console.WriteLine(prediction.ToString());
        }
    }
}