1

したがって、1xn 行列 x があり、for ループはエントリ 3 から始まる x の連続するエントリの差の絶対値を計算します。

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

私の出力が必要なのは、2 列のベクトルです。最初の列には x が表示され、2 番目の列には最初の 2 行のゼロが表示され、その後に 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

4

2 に答える 2

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
于 2013-09-20T07:53:33.667 に答える