【问题标题】:Interpolating matrices with 2 variables and 1 dependent value用 2 个变量和 1 个因值插值矩阵
【发布时间】:2019-04-17 22:34:28
【问题描述】:

我正在分析感应电机,改变定子电流的频率和绝对值。由于 FEM-Tool 仅适用于电流输入,因此我需要在频率上改变电流以获得每个频率的恒定转矩电流值。

为了生成网格,我使用了 2 个 for 循环: 外环设置电流。 内环随着所述电流改变频率,获得机器的转矩,最后,附加矩阵,将当前定子电流、频率和转矩分别添加到单独的矩阵中。绘制它看起来像这样: Example of the plot using the raw data 对于绘图,我使用了更小、更不精确的矩阵和相当任意的值:

I_S = [ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 ];
fre = [ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ];
tor = [ 0 0.1 0.3 0.5 0.7 1 1.5 2 2.6 3.3 0 1.1 1.3 1.5 1.7 2 2.5 3 3.6 4.3 0 2.1 2.3 2.5 2.7 3 3.5 4 4.6 5.3 ];

tor 在图中显示为颜色图。每个矩阵的长度为 30。

一次模拟大约需要 20-30 秒。因此,要获得精确的网格,FEM 工具需要几个小时才能生成。

我想在已知空间之间插入空格。

似乎要么是创建矩阵的方式是问题所在,要么是 Octave/MATLAB 的 interp*...- 函数根本不适用于这种插值。

有没有办法从这种类型的矩阵中实现类似网格/网格的插值?我发现了很多 x,y 作为变量和 z 作为数学函数的例子,但很少有 3 个线性/非线性矩阵。

【问题讨论】:

    标签: matlab octave interpolation


    【解决方案1】:

    您的数据需要采用网格网格形式,即 2D:

    // Known data
    current = [0:2];
    frequency = [0:9];
    [current2D, frequency2D] = meshgrid(current,frequency);
    torque2D = [ 0 0.1 0.3; 0.5 0.7 1; 1.5 2 2.6; 3.3 0 1.1; 1.3 1.5 1.7; 2 2.5 3; 3.6 4.3 0; 2.1 2.3 2.5; 2.7 3 3.5; 4 4.6 5.3 ];
    
    // Interpolated data
    currentToInterpolate = [0.5 1.5];
    frequncyToInterpolate = [0.5 : 8.5];
    [currentToInterpolate2D, frequencyToInterpolate2D] = meshgrid(currentToInterpolate,frequncyToInterpolate);
    interpolatedTorque2D = interp2(current2D,frequency2D,torque2D,currentToInterpolate2D,frequencyToInterpolate2D);
    

    【讨论】:

    • 我尝试测试 FEM 工具生成的原始数据的插值。我收到错误消息,插值矩阵需要适合 x 和 y 方向。我认为我得到了错误,因为我调整了插值点。我会继续努力解决这个问题,我会回来报告。
    • @TobiK 你跑了吗?在发布我的答案之前,我已经在最新的 matlab 版本上运行了它,它看起来还不错 - 至少没有任何运行时错误。
    • 我刚刚接受了您上面的回答。它工作正常(当你不像我一样搞乱数组的长度和宽度时)。非常感谢!编辑:进一步解释出了什么问题:我试图附加数组以匹配网格,但我切换了行和列,如下所示:arrayA = [arrayA; number] 应该是什么时候:arrayA = [arrayA ; rowOfNumbers] 除此之外,插值似乎可以正常工作。
    • 我去过那里,meshgrid 格式很难正确处理!很高兴它终于奏效了!
    • 快速跟进问题:当我想用 [row,col] = find(interpolatedTorque2D = x); 找到特定扭矩时我假设 row = 5 和 col = 10;我假设frequencyToInterpolate2D 的坐标是相同的,对吧?因此,如果我需要所述扭矩的频率,我目前使用“f = frequencyToInterpolate2D(row,col);”哪个似乎有效...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2015-12-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多