Matlab函数输出,应该很简单

时间:2013-09-20 07:31:30

标签: matlab for-loop output

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

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

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

x是加载的矢量

这是我的功能     function [z] = dome(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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在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