如何将两个多维矩阵从matlab传递到c#

本文关键字:matlab 两个 | 更新日期: 2023-09-27 17:50:57

我有一个用matlab编写的函数,例如加/减两个矩阵a和B(a和B都是二维矩阵):

function [X, Y] = add(A, B) 
X = A + B;
Y = A - B;

我在c#中工作,我想从visual studio调用这个函数,并在c#中使用这个函数的输出。所以我添加了MLApp.dll到我的引用和

MLApp.MLApp matlab = new MLApp.MLApp();
matlab.Execute(@"cd D:'Matlab");
object result = null;
matlab.Feval("add", 2, out result, Mymat1, Mymat2); //Mymat1/2 are my matrices passing to matlab

1),但在这段代码中,我只能得到一个输出,我不知道如何得到他们两个,因为Feval有一个输出参数?
2)那么我如何在c#中转换两个输出到两个二维浮点矩阵?

如何将两个多维矩阵从matlab传递到c#

我的一个朋友找到了答案,我决定与他人分享:

为例,如果我们在matlab中有这样的代码来加/减两个矩阵:

function [add, sub] = myFunc(a,b,c, par1, par2) 
add = par1 + par2;
sub = par1 - par2;

,那么我们可以从visual studio调用它你可以访问两个矩阵你可以将这些对象矩阵更改为你想要的类型(这里例如double)这里你可以将对象转换为你喜欢的类型

        // Create the MATLAB instance 
        MLApp.MLApp matlab = new MLApp.MLApp();
        // Change to the directory where the function is located 
        matlab.Execute(@"cd C:'matlabInC");
        // Define the output 
        object result = null;
        // creat two array
        double[,] par1 = new double[3, 3];
        double[,] par2 = new double[3, 3];
        //Give value to them.....

        // Call the MATLAB function myfunc
        matlab.Feval("myFunc", 2, out result, 3.14, 42.0, "world", par1, par2);
        // Display result 
        object[] res = result as object[];

        object arr = res[0];
        Console.WriteLine(arr.GetType());
        // addition resualt
        double[,] da = (double[,])arr;
        //Show Result of Addition.....
        for (int i = 0; i < da.GetLength(0); i++)
        {
            for (int j = 0; j < da.GetLength(1); j++)
            {
                Console.WriteLine("add[" + i + "," + j + "]= " + da[i, j] + ", ");
            }
        }
        // subtraction resualt
        arr = res[1];
        double[,] da2 = (double[,])arr;
        //Show subtraction result...
        for (int i = 0; i < da2.GetLength(0); i++)
        {
            for (int j = 0; j < da2.GetLength(1); j++)
            {
                Console.WriteLine("sub[" + i + "," + j + "]= " + da2[i, j] + ", ");
            }
        }
        Console.ReadLine();