找回密码
 注册
Simdroid-非首页
查看: 187|回复: 5

请教如何给维数不确定的矩阵赋值

[复制链接]
发表于 2010-12-10 01:24:54 | 显示全部楼层 |阅读模式 来自 德国
本帖最后由 Melvin1231 于 2010-12-10 05:21 编辑

通过循环,筛选出符合条件的三类数,Q,W,E,想把这三类数放到一个N行3列的矩阵中,Q放第一列,对应的W和E分别放在第二和第三例,但是因为不知道有多少组QWE满足条件,所以N没办法定下来,是用Cell吗?
发表于 2010-12-10 08:02:41 | 显示全部楼层 来自 河北秦皇岛
Simdroid开发平台
你可以先求出Q,W,E的长度然后用循环的方式进行你所想要的操作
回复 不支持

使用道具 举报

发表于 2010-12-10 09:21:42 | 显示全部楼层 来自 河北廊坊
几乎每一种语言都有判断长度的函数或者方法
而且都可以动态的添加数组的
matlab也不例外,我不明白你的意思是什么
如果可以的话,请你举个例子,给出数据
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-10 18:31:08 | 显示全部楼层 来自 德国
回复Walker,由于那个长度是未知的,所以求不出来的。
谢谢祁版主,程序还在写的过程中,其中一步就是生成这个行数不定的5列(不是3列)矩阵h,我试着举个简单的例子,还没有调试过的大致思路如下:
两个excel矩阵a和b,都是n*n的,元素是一些正负数,
for i1=1:n
   for j1=1:n
     for i2=1:n
       for j2=1:n
hangmax=n-abs(i1-i2);      
liemax=n-abs(j1-j2);      
if (i1-i2+1)<=0
   i3=1;
else  
   i3=i1-i2+1;                  
end
if (i2-i1+1)<=0
   i4=1;                             
else  
   i4=i2-i1+1;                  
end
if (j1-j2+1)<=0
   j3=1;
else  
   j3=j1-j2+1;               
end
if (j2-j1+1)<=0
   j4=1;
else  
   j4=j2-j1+1;              
end
i5=i3+hangmax-1;     
i6=i4+hangmax-1;   
j5=j3+liemax-1;        
j6=j4+liemax-1;        
w=b(i4:i6,j4:j6)-a(i3:i5,j3:j5);%生成一个新矩阵
      if any(w(:)+abs(b(i2,j2)+a(i1,j1))>=0)
         h(,1)=i1; %出现那个行数不定的5列矩阵h
         h(,2)=j1;
         h(,3)=i2;
         h(,4)=j2;
         h(,5)=abs(b(i21,j2)+a(i1,j1));
     end
  end
end
end
end
然后find到min的h(,5),之后再返回对应的i1i2i3i4i5i6j1j2j3j4j5j6。

请诸位大侠帮忙看看,急!拜谢了
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-10 19:34:50 | 显示全部楼层 来自 德国
本帖最后由 Melvin1231 于 2010-12-12 22:29 编辑

矩阵a和b是excel读入的,我试了如下程序,可是20分钟了,matlab显示一直为busy,
h=[];
for i1=1:n
   for j1=1:n
     for i2=1:n
       for j2=1:n
hangmax=n-abs(i1-i2);      
liemax=n-abs(j1-j2);      
if (i1-i2+1)<=0
   i3=1;
else  
   i3=i1-i2+1;                  
end
if (i2-i1+1)<=0
   i4=1;                             
else  
   i4=i2-i1+1;                  
end
if (j1-j2+1)<=0
   j3=1;
else  
   j3=j1-j2+1;               
end
if (j2-j1+1)<=0
   j4=1;
else  
   j4=j2-j1+1;              
end
i5=i3+hangmax-1;     
i6=i4+hangmax-1;   
j5=j3+liemax-1;        
j6=j4+liemax-1;        
w=b(i4:i6,j4:j6)-a(i3:i5,j3:j5);
      if any(w(:)+abs(b(i2,j2)+a(i1,j1))>=0)
         h=[h;i1 j1 i2 j2 abs(b(i2,j2)+a(i1,j1))];
     end
  end
end
end
end
h;
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-12 22:30:38 | 显示全部楼层 来自 德国
跑了一晚上,白天去一看out of memory
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-25 10:28 , Processed in 0.047270 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表