我在C#Visual Studio中有以下代码。我正在尝试使用MATLAB通过COM服务器绘制数据。我能够做到这一点,但是使用我的代码,MATLAB输出控制台只显示变量“数字”的最后一个值,当它绘制时,它会覆盖所有以前的值。另外,如何使变量大小动态化?我的目标是实时绘制数据。任何建议将不胜感激!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
////// Create the MATLAB instance
MLApp.MLApp matlab = new MLApp.MLApp();
for (int j = 1; j <= 10; j++)
{
int[] numbers = new int[11];
numbers[j] = j * 15;
matlab.Execute("numbers");
matlab.PutWorkspaceData("A", "base",numbers);
matlab.Execute("plot(A);");
}
// //Console.WriteLine(j*15);
//}
//Console.ReadKey();
}
}
}
更新:
var numbers = new List<int>();
for (int j = 1; j <= 10; j++)
{
//numbers[j] = j * 15;
int val= j * 15;
numbers.Add(val);
var array = numbers.ToArray();
matlab.Execute("array");
matlab.PutWorkspaceData("A", "base", array);
matlab.Execute("plot(A);");
}
答案 0 :(得分:1)
不要在循环内初始化numbers
。这样每次都会创建一个新实例。
试试这个:
int[] numbers = new int[11];
for (int j = 1; j <= 10; j++){
numbers[j] = j * 15;
//double vIn = Convert.ToDouble(numbers);
matlab.Execute("numbers");
matlab.PutWorkspaceData("A", "base",numbers);
matlab.Execute("plot(A);");
}
<强>更新强>
制作动态大小的数组。使用List<>
。
然后你必须改变循环:
List<int> numbers = new List<int>();
for (int j = 1; j <= 10; j++){
int val = j * 15;
numbers.Add(val);
....
}
答案 1 :(得分:1)
你必须移动这一行
int[] numbers = new int[11];
在for for循环之前
并将其放在
之后'MLApp.MLApp matlab = new MLApp.MLApp();'