2016-05-29 80 views
0

我在C#Visual Studio中有以下代码。我试图通过COM服务器使用MATLAB绘制数据。我能够做到这一点,但有了我的代码,MATLAB输出控制台只显示变量“数字”的最后一个值,当它绘制时,它将覆盖所有以前的值。另外,我如何制作可变大小的动态数据呢?我的目标是实时绘制数据。任何建议,将不胜感激!C#我的ArrayList只包含最后一个项目

 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(); 
    } 
} 

}

UPDATE:

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);"); 
     } 

回答

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);"); 
} 

UPDATE:

进行动态大小的数组。使用List<>。 然后,你必须改变环路这样的:

List<int> numbers = new List<int>(); 
for (int j = 1; j <= 10; j++){ 
    int val = j * 15; 
    numbers.Add(val); 
    .... 
} 
+0

是@ Sabi3023已经提供的解。你会碰巧知道如何在这一行中使数组大小为任意或动态: int [] numbers = new int [11];即。将11更改为动态值 – DashD

+0

@DashD,请参阅更新回答 – Sajal

+0

是的,我之前曾尝试过这种方法,但它会导致错误。 – DashD

1

必须的前移到这一行 int[] numbers = new int[11]; for循环

,并将其放置后

'MLApp.MLApp matlab = new MLApp.MLApp();' 
+0

它的工作!非常感谢。我在C#中第一次编码,所以它是一个很大的学习曲线。 – DashD

相关问题