1

所以我有一个 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 

我把它作为输出

答案=

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

0在 MATLAB 中,和之间存在“大”差异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 
于 2013-09-20T08:53:09.160 回答
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 回答