【问题标题】:Matlab function output , should be simplematlab函数输出,应该很简单
【发布时间】:2013-09-20 07:31:29
【问题描述】:

所以我有一个 1xn 矩阵 x,for 循环从条目 3 开始计算 x 的连续条目中差异的绝对值。

n=length(x);
for i=3:n
    y=abs(x(i)-x(i-1));

我需要我的输出是一个 2 列向量。第一列显示 x,第二列显示前两行的零,然后是 for 循环的结果。

x 是一个加载的向量

这是我的功能 函数 [ z ] = 圆顶(x)

n=length(x);
z = zeros(n, 2);
for i=3:n;

z(3:n,2)=abs(x(i)-x(i-1));
z(:,1) = x;


end 

我把这个作为输出

ans =

1.000000000000000 0 1.500000000000000 0 1.286953767623375 0.000009575517218 1.402540803539578 0.000009575517218 1.345458374023294 0.000009575517218 1.375170252816038 0.000009575517218 1.360094192761733 0.000009575517218 1.367846967592133 0.000009575517218 1.363887003884021 0.000009575517218 1.365916733390040 0.000009575517218 1.364878217193677 0.000009575517218 1.365410061169957 0.000009575517218 1.365137820669213 0.000009575517218 1.365277208524479 0.000009575517218 1.365205850297047 0.000009575517218 1.365242383718839 0.000009575517218 1.365223680225282 0.000009575517218 1.365233255742500 0.000009575517218

【问题讨论】:

    标签: matlab for-loop output


    【解决方案1】:

    你可以这样做。代码使用了matlab的diff函数。

    x = rand(1,10)   % vector of 1x10
    
    y = [x' [0 ; abs(diff(x))']];
    y(1:3,:) = [];
    

    这给了

    y =

    0.0462    0.2308
    0.0971    0.0510
    0.8235    0.7263
    0.6948    0.1286
    0.3171    0.3777
    0.9502    0.6331
    0.0344    0.9158
    

    如果你想保留for循环,这段代码

    Y = zeros(length(x), 2); %create the output matrix Y
    Y(1:2, 1) = x(1:2);      %popualte the first 2 row of column 1 with x(1:2) // thanks to @Dan
    
    for i=3:length(x);
        Y(i, 1) = x(i);             %populate the first column
        Y(i, 2) = abs(x(i)-x(i-1)); %populate the second column
    end
    

    给予

    Y =

    0.7513         0
    0.2551         0
    0.5060    0.2509
    0.6991    0.1931
    0.8909    0.1918
    0.9593    0.0684
    0.5472    0.4121
    0.1386    0.4086
    0.1493    0.0107
    0.2575    0.1082
    

    【讨论】:

    • 我肯定需要在那里的 for 循环,因为我只是将差异用作更简单的函数。我需要按顺序计算误差估计。你知道我如何将 for 循环的结果转换成矩阵吗?
    • 为了完整起见,我建议您在循环之前添加Y(1:2, 1) = x(1:2);
    【解决方案2】:

    在 MATLAB 中,00.0000 之间存在“巨大”差异。前者实际上为零,而后者几乎可以与0.00005 一样大。您可以通过使用format long 更改输出格式来“修复”它。您还需要在作业中使用i ...

    format long;
    n=length(x);
    z = zeros(n, 2);
    z(:,1) = x;
    for i=3:n;
      z(i,2)=abs(x(i)-x(i-1));
    end 
    

    【讨论】:

    • 我的格式很长,这是我的输出。它仅使用最终迭代作为第二列的值
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多