数学建模社区-数学中国

标题: 大神们来帮帮我啊! [打印本页]

作者: newyear2012    时间: 2012-10-2 15:52
标题: 大神们来帮帮我啊!
A=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1 1 4;3 1 1 1 1 1;3 4 6 8 3 1]5 S' M8 w5 w& u- j

9 ]  q3 e0 \' l5 z2 @1 m, K! u/ x. a, n' s) m8 K
这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑 " Y( ^4 O3 U! i8 `* q, `3 a' J( F! n6 N
' y" L+ N/ [' v3 Z; s
随手编了一个,目测满足你的需求,有BUG再告诉我哈4 Z6 @1 e9 F' V* `% J" ]
& q9 [3 y8 n1 V  Q3 b1 _
A=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1 1 4;3 1 1 1 1 1;3 4 6 8 3 1]. [& F; z3 [) Y! G3 p! i4 r7 ~

# x6 ?2 u; w" L7 ^/ U/ l! _mn=size(A);
  }, R7 g. M; U1 }/ k+ e2 qB=zeros(mn(2),2);" _; N( B6 E! A' j

7 F5 `! d" ?: X' Q# Y' l* o7 Knum=0;( [8 L4 J; P- _( X. p. U& _
for i=1:mn(2)" G# r- ]/ u& T. j0 c7 t
    for j=1:mn(1)
5 W* E% M' a+ A& f- z        if(A(j,i)==1)4 c( {% J! }+ K) G
            num=num+1;* @2 u6 I' K  C
            B(num,1)=j;
  t" ^+ s7 l0 t8 f            B(num,2)=i;
9 e% E! R% f+ ~% J" q9 W5 m- t( d            break;
0 [! y  P! p) g  l9 V1 J        end
7 d5 M! W8 v2 M/ i5 ]6 ?    end0 k9 X: k  r0 m! n7 d4 V+ Y5 m5 k
end$ V" e/ j' ?6 i2 y" G# V/ y

/ Z' `" [  h' f6 ?) Z2 @. E! A* X5 N* TB
6 I& X# A1 f/ }num
* ?% Q2 D+ C$ q! u! p, n1 y' h* E2 n9 ]2 a

2 Z$ x& `+ k9 y( V% }
作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09 ) S  ?% I( u) h4 ~& t( @) b
楼上对的

9 y9 E# \, u9 d9 u4 k1 u谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =
  Z6 J  L. T7 P, o8 }7 v  Z" A1 o% V4 V
     6* K( O& B! ~* G
B =
3 D$ _, v, ^4 \8 n* m9 X7 A! P( p
' T$ V; H0 F- K+ h     2     1
2 e2 ^1 P5 h: d5 `; ~     3     2
5 k; e+ u2 r0 X' q# G4 I     3     3. N5 ^2 e( B' \0 k( k
     4     49 U4 x1 o  G8 n
     4     5
, m" n0 i9 S! E! g6 S1 Q  X     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧
7 c5 P+ C! x8 H: r' g
作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24 ) R. H/ ^: r6 |5 g$ f
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦

4 V+ R' v) M) ?5 [) P! `- A9 M& Y据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25
* }8 E' V: u- f+ \7 j! z据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
% ]  Q3 D. @/ _; H+ W% n4 S
尽量用内置的运算符,比如矩阵的自然运算。
% O8 a4 }+ K) V) P5 C7 K/ S0 [- B8 P/ u- P2 r$ a& w3 ~' H4 }9 A$ }
比如 某行和另一行的倍数之类的 运算 ,就不用循环。
( Z5 x" E4 k1 Y2 ^, d5 u5 m+ k6 ^, [; x3 f9 s( P* w
但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评
  K) }$ C$ \. `4 l  z: d+ pA=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1 1 4;3 1 1 1 1 1;3 4 6 8 3 1];4 a0 C& E1 S1 R' }
out=[];/ Z8 b: l5 h7 x
for i=1:size(A,2)
+ M6 X. l7 @4 u$ X! j! a   index=find(A(:,i)==1) ;
1 M7 w# ?. B  \; i1 a1 }1 m5 ]   if ~isempty(index)# q: h7 b( C. E2 F+ H6 ]
       out=[out index(1)];%该列有1的元素就取第一个1所在的位置& g4 T2 X! b4 }# {7 S* h8 ^
   else
: E8 p" j, M7 y6 P0 v2 B1 y       out=[out 0];%该列如果没有1的元素就置0# X: C' Z3 ?6 W0 Q; U4 m2 ]( t+ K
   end) m2 u6 e: C5 O
end! _$ l8 _1 c# k% \
out=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58
  x$ O% k% }7 o6 j随手编了一个,目测满足你的需求,有BUG再告诉我哈
1 |% c. x; D9 p5 X- E; J6 o
/ J) [' q6 g) b5 QA=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...
5 ^+ F. [& n& w& a8 a
牛
作者: caps123    时间: 2012-10-6 17:46
牛人还是有的啊
作者: szy241    时间: 2012-10-6 18:05
直接用内置的find函数,你可以help一下来查看用法。尽量使用内置函数避免循环语句
作者: 老小冬    时间: 2012-10-6 19:09
个人意见只要不是多重循环,在matlab里用循环问题就不是太大。
& x0 F, {4 p2 ?( |但感觉如果巧用了向量或者矩阵的某些特点,有时候会有一些比循环快得多的方法




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5