仅知道第一个和最后一个输入时的均匀间隔值数组

时间:2014-03-04 14:27:22

标签: matlab

我想创建一个N大小的数组,其输入均匀分布。为了澄清,我有一个数组的第一个和最后一个值,并希望用输入填充N大小的数组。

我使用了linspace

 bars = 10;
 DeapA = 1;
 DeapB = 10;
 diameter_pin = (linspace(DeapA, DeapB, bars))

给出了:

 diamter_p =

       1     2     3     4     5     6     7     8     9    10

但有没有办法通过填充数组来实现这一点?

我想这样做的原因是因为在上面更复杂的版本中,当我在方程中使用变量时,值没有被正确计算

2 个答案:

答案 0 :(得分:1)

不确定你想要做什么,所以这里有几个答案

包围

周围的数字
bars = 10;
DeapA = 1;
DeapB = 10;
diameter_pin = reshape(linspace(DeapA, DeapB, bars*bars), bars, bars)

给出一个数组,其中每列具有等间距的点,并且值通过列

不断增加
diameter_pin =

    1.0000    1.9091    2.8182    3.7273    4.6364    5.5455    6.4545    7.3636    8.2727    9.1818
    1.0909    2.0000    2.9091    3.8182    4.7273    5.6364    6.5455    7.4545    8.3636    9.2727
    1.1818    2.0909    3.0000    3.9091    4.8182    5.7273    6.6364    7.5455    8.4545    9.3636
    1.2727    2.1818    3.0909    4.0000    4.9091    5.8182    6.7273    7.6364    8.5455    9.4545
    1.3636    2.2727    3.1818    4.0909    5.0000    5.9091    6.8182    7.7273    8.6364    9.5455
    1.4545    2.3636    3.2727    4.1818    5.0909    6.0000    6.9091    7.8182    8.7273    9.6364
    1.5455    2.4545    3.3636    4.2727    5.1818    6.0909    7.0000    7.9091    8.8182    9.7273
    1.6364    2.5455    3.4545    4.3636    5.2727    6.1818    7.0909    8.0000    8.9091    9.8182
    1.7273    2.6364    3.5455    4.4545    5.3636    6.2727    7.1818    8.0909    9.0000    9.9091
    1.8182    2.7273    3.6364    4.5455    5.4545    6.3636    7.2727    8.1818    9.0909   10.0000

如果希望行增加,可以采用此矩阵的转置。

重复行/列

这里,每一行都是相同的

>> nRows = 5;
>> nCols = 10;
>> a = 1;
>> b = 10;
>> diameter_pin = repmat(linspace(a, b, nCols), nRows, 1)

diameter_pin =

     1     2     3     4     5     6     7     8     9    10
     1     2     3     4     5     6     7     8     9    10
     1     2     3     4     5     6     7     8     9    10
     1     2     3     4     5     6     7     8     9    10
     1     2     3     4     5     6     7     8     9    10

这里,每列都是相同的

>> nRows = 5;
>> nCols = 10;
>> a = 1;
>> b = 10;
>> diameter_pin = repmat(linspace(a, b, nRows)', 1, nCols)

diameter_pin =

    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000
    3.2500    3.2500    3.2500    3.2500    3.2500    3.2500    3.2500    3.2500    3.2500    3.2500
    5.5000    5.5000    5.5000    5.5000    5.5000    5.5000    5.5000    5.5000    5.5000    5.5000
    7.7500    7.7500    7.7500    7.7500    7.7500    7.7500    7.7500    7.7500    7.7500    7.7500
   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000   10.0000

从左上角到右下角的等间距点

在该矩阵中,每行以相同的差异等间隔,并且每列以相同的差异等间隔。如果行数和列数相同,那么整个矩阵的间隔相等!

首先是矩形矩阵:

>> nRows = 10;
>> nCols = 5;
>> a = 1;
>> b = 10;
>> x = linspace(a, b, nCols);
>> y = linspace(a, b, nRows);
>> [xx, yy] = meshgrid(x, y);
>> zz = mean(cat(3, xx, yy), 3)

zz =

    1.0000    2.1250    3.2500    4.3750    5.5000
    1.5000    2.6250    3.7500    4.8750    6.0000
    2.0000    3.1250    4.2500    5.3750    6.5000
    2.5000    3.6250    4.7500    5.8750    7.0000
    3.0000    4.1250    5.2500    6.3750    7.5000
    3.5000    4.6250    5.7500    6.8750    8.0000
    4.0000    5.1250    6.2500    7.3750    8.5000
    4.5000    5.6250    6.7500    7.8750    9.0000
    5.0000    6.1250    7.2500    8.3750    9.5000
    5.5000    6.6250    7.7500    8.8750   10.0000

现在您可以看到列间距相等:

>> diff(zz)

ans =

    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000

行间距相等

>> diff(zz')'

ans =

    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250
    1.1250    1.1250    1.1250    1.1250

如果希望整个矩阵间隔相等,则需要相同数量的行和列。这是您的代码的翻译:

>> bars = 10;
>> DeapA = 1;
>> DeapB = 10;
>> x = linspace(DeapA, DeapB, bars);
>> diameter_pin = nan(bars, bars, 2);
>> [diameter_pin(:, :, 1), diameter_pin(:, :, 2)] = meshgrid(x, x);
>> diameter_pin = mean(diameter_pin, 3)


diameter_pin =

    1.0000    1.5000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000
    1.5000    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000
    2.0000    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000
    2.5000    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000
    3.0000    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000
    3.5000    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000
    4.0000    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000    8.5000
    4.5000    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000    8.5000    9.0000
    5.0000    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000    8.5000    9.0000    9.5000
    5.5000    6.0000    6.5000    7.0000    7.5000    8.0000    8.5000    9.0000    9.5000   10.0000

此矩阵沿每个维度均匀分布。


那就是我能想到的一切。我建议您查看我调用的所有函数的MATLAB帮助文档。

答案 1 :(得分:0)

如果你想避免使用linspace(虽然我不明白为什么),你可以使用:

diameter_pin = DeapA : (DeapB-DeapA)/(bars-1) : DeapB;