所以我有一个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
答案 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中,0
和0.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