关于matlab 的一个循环内,只能保存最后一部分的问题

我是想实现从第一行20111106到最后一行20111116中间如果有缺少的日期,补齐所差日期,同行别的列就复制上一列的功能,但我只能补齐从20111113和20111114,却不能补齐20111108这一行,我的代码如下20111106 6 1000520
20111107 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111115 370 1000520
20111116 370 1000520

t=0;
for j=2:length(X)
n=X(j,1)-X(j-1,1);
if n>=2
t=t+1;
b1=[X(j-1,1)+1,X(j-1,2),X(j-1,3)];
for t=2:n-1
b1=[b1;X(j-1,1)+t,X(j-1,2),X(j-1,3)];
end
XNEW{i}=[X(1:j-1,:);b1;X(j:end,:)];
end
end

我不知道问题在哪儿啊,只能插入后面13、14两天的,08的不行,知道的告诉下,谢谢

问题的关键在于,XNEW必须是其自身的循环。

你的程序问题就是,XNEW总是在X的基础上操作,而X是不变的,所以XNEW没有将之前的操作累计下来。

运行下面的程序即可。
X=[20111106 6 1000520
20111107 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111115 370 1000520
20111116 370 1000520];
XNEW=X;% 赋予XNEW的初值
for j=2:length(X)
n=X(j,1)-X(j-1,1);
if n>=2
b1=[X(j-1,1)+1,X(j-1,2),X(j-1,3)];
for t=2:n-1
b1=[b1;X(j-1,1)+t,X(j-1,2),X(j-1,3)];
end
XNEW=[XNEW(1:j-1+n-2,:);b1;XNEW(j+n-2:end,:)]; % XNEW在其自身基础上循环
end
end
XNEW
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-29
t=0;%%没必要
for j=2:length(X)
n=X(j,1)-X(j-1,1);
if n>=2
t=t+1;%%没必要,不起作用
b1=[X(j-1,1)+1,X(j-1,2),X(j-1,3)];
for t=2:n-1
b1=[b1;X(j-1,1)+t,X(j-1,2),X(j-1,3)];
end
XNEW{i}=[X(1:j-1,:);b1;X(j:end,:)]; %%这句循环有问题,看下面的运行结果你就明白了,它只能保存最后一次插补的结果。因为你所做的插补一直都在原来的矩阵上,并没有在插补过后的新矩阵基础上进行插补。
end
end

>> X=[20111106 6 1000520
20111107 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111115 370 1000520
20111116 370 1000520];
for j=2:length(X)
n=X(j,1)-X(j-1,1);
if n>=2
b1=[X(j-1,1)+1,X(j-1,2),X(j-1,3)]
for t=2:n-1
b1=[b1;X(j-1,1)+t,X(j-1,2),X(j-1,3)]
end
XN=[X(1:j-1,:);b1;X(j:end,:)]
end
end

>>b1 =

20111108 154 1000520

>>XN =

20111106 6 1000520
20111107 154 1000520
20111108 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111115 370 1000520
20111116 370 1000520

>>b1 =

20111113 367 1000520

>>b1 =

20111113 367 1000520
20111114 367 1000520

>>XN =

20111106 6 1000520
20111107 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111113 367 1000520
20111114 367 1000520
20111115 370 1000520
20111116 370 1000520
第2个回答  2011-11-29
请把完整的程序贴出来,你这程序里X是什么?就是上面那个数据矩阵吗,为什么我不能运行?
而且程序里明显是有错的
XNEW{i}
MATLAB里是不用{ }的。追问

那个是元胞数组~~

第3个回答  2011-11-29
close all
clear,clc

X=[20111106 6 1000520
20111107 154 1000520
20111109 364 1000520
20111110 367 1000520
20111111 366 1000520
20111112 367 1000520
20111115 370 1000520
20111116 370 1000520]

XNEW = X;
NN = length(X);

j = 2;
while j<= NN
n = X(j,1)-X(j-1,1);
if n>=2
b1 = X(j-1,:);
b2 = repmat(b1, n-1,1)
b2(:,1) = [X(j-1,1)+1:X(j-1,1)+n-1]';
XNEW = [X(1:j-1,:);b2;X(j:length(X),:)];
X = XNEW;
NN = NN + n-1;
j = j + n-1;
else
j = j + 1;
end
end
XNEW

关于matlab 的一个循环内,只能保存最后一部分的问题
问题的关键在于,XNEW必须是其自身的循环。你的程序问题就是,XNEW总是在X的基础上操作,而X是不变的,所以XNEW没有将之前的操作累计下来。运行下面的程序即可。X=[20111106 6 1000520 20111107 154 1000520 20111109 364 1000520 20111110 367 1000520 20111111 366 1000520 20111112 367 1000520 2011111...

用matlab中的find函数我想得到多个返回值,为什么一个循环下来只得到最后...
因为n没有保存 你去掉分号 就能看到历次结果了 或者用n=[n find(strcmp(d,H(i))];

matlab循环语句,结果只存储了最后一个的值,前面的都为0,要怎么解决...
[x,y]=find(A==A(j));%求出A(j)的坐标 pit(i)=fs\/y break;else j=j+1;end end

matlab for循环中的结果为什么只有最后一个?其他的结果呢?我想要m从...
n0=(4*beta*ap^2\/m\/V)^0.5; 这个语句更新n0变量,并没有对上一次生成的n0进行保存。所以建议程序做一点小小的改动。在for循环之前,初始化一个变量N=[];同时for循环中增加一条语句:示例如下:for m=6000:1000:16000 n0=(4*beta*ap^2\/m\/V)^0.5; %油柱共振频率 N=[N,n0]; ...

matlab编程循环出现问题,只能进行最后一次循环。求大神指点
可这样写:Kz=magic(8);%此处Kz可替换为原数据 ib=[1,2,7,8]; nb=4; nc=4;for h=1:2*nc for pp=1:2*nc for i=1:4 if h==ib(i)if h==pp Kz(h,pp)=1;else Kz(h,pp)=0;end end end Kz(ib(1,nb),pp)=0;Kz(pp,ib(1,nb))=0;Kz(ib(1,nb),ib(1,nb...

MATLAB for循环只输出最后一个值怎么办?
外层循环为什么要重新赋值x来控制循环体呢?之前已经赋值过了。而且最内层循环都是进行单个元素计算,直接使用矢量运算就可以,还能提高计算速度

MATLAB for 循环,每次循环都输出,怎么让它只输出最后一次结果?
MATLAB输入分号就不会显示结果了。你可以在循环内部语句加入分号。在你想显示的地方(比如循环结束退出后的第一个语句,输入你要显示的对象名,此时不要有分号,就可以了

matlab中for循环只有一个结果是什么情况,下面是我的程序,可以帮忙看一...
根据你提供的代码,我看到 xx 和 yy 是在循环内部定义的数组,而 XX 和 YY 是在循环结束后定义的数组,且是通过将 xx 和 yy 转置得到的。因此,在你的代码中,只能得到最后一次循环的结果。如果你想要得到所有循环的结果,需要将 XX 和 YY 改为矩阵形式的变量,并在循环中不断将每次的结果添加...

matlab for 循环 如何保存最后几组数据
如果你只要最后一个那就简单!例如:sum=0 x=0 for i=1:5 x=x*3;sum=sum+x;end x %输出了就只有最后一个X的值,前面计算的被覆盖!sum 你要的是最后多个!subsum=0 subsumm=[];xx=0;xxx=[];for i=1:5 xx=xx*3;xxx=[xxx,xx];subsum=subsum+x;subsumm=[subsumm,subsum]...

用matlab中的save保存数据怎么只是第一个啊,我写的是循环,怎么能保存完 ...
save函数是一次性写进去的,你如果从循环体中写的话,应当是会覆盖掉以前的东西。你可以将这些保存在一个变量里,最后一次性save 另一种方案,就是用fopen、fprintf等函数。具体的你可以看一下fprintf函数的帮助。

相似回答
大家正在搜