1

I created a matlab function like this

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

Then i got a .dll from it referenced to my c# windows form porject.

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 is the name of my dll file. below is the error that stop my app:

... 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.

Please help me....Thanks :)

1
  • 1
    my guess is that it has to do with you using a variable called max, that is inbuilt, as your error is in mymax.m at line14. Try to change that name to maximum_val Commented Feb 2, 2016 at 10:59

1 Answer 1

1

I found that to pass the input parms to the Matlab compiled assembly I needed to use the MWArray structure to ensure they are in a format the Matlab function can use. See below.

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());
        }
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.