You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET6 Web应用中实现C#向Matlab传数组及解决调用报错

解决方案

问题根源分析

触发异常的核心原因有三点:

  • 工作目录切换错误:cd命令指向了.m文件而非其所在文件夹,导致Matlab无法找到myfunc函数
  • 数据类型不兼容:C#传入的int32数组与Matlab默认使用的double数值类型不匹配
  • 返回值数量不匹配:Feval指定的返回结果数与Matlab函数实际返回数不一致,后续还会引发索引越界

具体修复步骤

1. 修正工作目录切换命令

cd命令需要指向包含.m文件的文件夹,而非文件路径本身:

matlab.Execute(@"cd C:\Users\user\Desktop");

2. 统一输入数组类型为double

Matlab默认以double处理数值,将C#中的int[]改为double[]:

double[] input = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 500, 800, 14, 78, 99, 45, 201, 336, 5578 };

3. 匹配函数返回值数量

Matlab函数myfunc返回3个结果(a,b,c),需将Feval的第二个参数设为3:

matlab.Feval("myfunc", 3, out result, input);

4. 修正结果索引访问

返回的object[]长度为3,索引范围是0-2,原代码中res[3]会触发越界,改为:

Console.WriteLine(res[0]);
Console.WriteLine(res[1]);
Console.WriteLine(res[2]);

完整修正后的C#代码

MLApp.MLApp matlab = new MLApp.MLApp();

// 切换到包含myfunc.m的文件夹
matlab.Execute(@"cd C:\Users\user\Desktop");

object result = null;

// 使用double类型数组匹配Matlab默认数值类型
double[] input = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 500, 800, 14, 78, 99, 45, 201, 336, 5578 };
// 指定返回3个结果,与Matlab函数定义一致
matlab.Feval("myfunc", 3, out result, input);

// 处理返回结果
object[] res = result as object[];

// 访问正确的索引
Console.WriteLine(res[0]);
Console.WriteLine(res[1]);
Console.WriteLine(res[2]);
Console.ReadLine();

Matlab代码无需修改,保持原定义即可。


内容的提问来源于stack exchange,提问作者Mariam Sultan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 10:33:18