数学建模社区-数学中国

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

作者: 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]
; l, u; Y  i  r1 f& o+ g4 i4 s$ m7 D: [2 Z; I1 q1 \
0 J  a# T8 B) c0 q" f
这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑 : e$ t; a+ V5 [' B6 h3 E

1 f- I- T4 ]6 u+ {; _# u随手编了一个,目测满足你的需求,有BUG再告诉我哈
, X, Z. o5 A+ P+ m+ `7 }$ O7 }4 {3 R/ z1 _
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]8 Z9 ~% b! K+ ^

, o5 V9 j: j" H8 Q; E$ r+ umn=size(A);
" j, k( }5 c; e4 y0 O$ JB=zeros(mn(2),2);
# }& ~8 t7 i6 F2 B9 k1 z% k# x$ e4 F5 _
num=0;
% F$ R& U1 c2 p' kfor i=1:mn(2)* F) J9 {6 X: C4 S3 s
    for j=1:mn(1)
" L3 U& U3 P$ l& s        if(A(j,i)==1)/ J4 e5 j+ _5 A5 A
            num=num+1;$ L' J0 m0 t# c- k
            B(num,1)=j;; T+ \" C9 m4 w5 A7 o
            B(num,2)=i;" @# v( U. U2 V* f
            break;
: b. k6 V. {# g& l* u& h. G, S! U        end, B$ j& \( ?& E1 i
    end# S4 I: r1 I4 V) m3 ]3 I
end" h4 W2 e! k! f0 o# U
1 H- n) m* V: [* Y6 z
B# X, a3 |0 x* F  }" g
num) D. I* q) ~% n, y
4 a, n9 s, A: c3 G" l
3 X3 g9 W/ l2 ]9 r$ ^/ J

作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09 ; W: s* o# p8 j& G! c
楼上对的
% P# X2 N7 u, I0 j/ ~( P2 ^0 Z# T
谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =! Z* d; W- }& [$ `6 |7 y6 \& k

2 }. m0 D' i1 Y8 c" F; B- S     6/ `: ]! `5 g; f; o
B =+ E- y/ v8 w9 L" ~/ y

0 _/ E- h. \" @4 i2 T+ X     2     1
  @( R4 g: F3 W  M- {- K     3     21 o: [! r* u& j; e
     3     34 M. }% y$ c% \. i1 g
     4     4; x- b! T: a7 [5 g) I
     4     5
5 }+ [* W1 e5 m4 ~8 Y     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧+ @% r/ F$ s# Y; h5 C7 O; p

作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24
' |9 b- G% M2 ^$ ]* o5 B是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
: L% w8 j$ L$ [1 M
据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25 - Y6 l4 W" l; _' q7 A+ A! y
据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?

+ ~# x, S& N7 M& n/ D尽量用内置的运算符,比如矩阵的自然运算。
1 R2 x  D6 t( N, I* L" H  W+ C+ {, x3 `( d: u/ m2 \4 U
比如 某行和另一行的倍数之类的 运算 ,就不用循环。; }+ L6 q0 A2 R0 T) Z+ L

1 O+ R1 J3 T0 i8 i但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评
( C& |$ a: w6 |7 E' K- aA=[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];1 b9 l8 y$ X8 X7 h7 F
out=[];
! C9 a# w4 `; d0 W+ Ffor i=1:size(A,2)
. x" q$ Z; G% h; w   index=find(A(:,i)==1) ;5 h& F6 `' y' y# r+ i
   if ~isempty(index)3 ^/ O% x5 l: f! ~. Q6 ]7 A9 c
       out=[out index(1)];%该列有1的元素就取第一个1所在的位置' m2 Z) G; f5 V" ^7 M( [# W- u
   else6 Q; A' l- M- \2 G  z" a- ]' x
       out=[out 0];%该列如果没有1的元素就置0
* g5 ?9 o! `' k/ X. {   end/ K% y2 y  @' l7 F: t
end
/ {! X' D6 O$ H" G7 w0 D# y# a* Bout=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58 7 \% A: [  R+ `  H: i$ p; y; N+ B
随手编了一个,目测满足你的需求,有BUG再告诉我哈; Z6 D& r1 q1 ]' A+ d! f! ~. @

6 Z2 y$ ^* B5 e" KA=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...
) L, Q9 n% b  U; q. {7 I

作者: caps123    时间: 2012-10-6 17:46
牛人还是有的啊
作者: szy241    时间: 2012-10-6 18:05
直接用内置的find函数,你可以help一下来查看用法。尽量使用内置函数避免循环语句
作者: 老小冬    时间: 2012-10-6 19:09
个人意见只要不是多重循环,在matlab里用循环问题就不是太大。
4 R8 d) b! b1 S/ a0 V但感觉如果巧用了向量或者矩阵的某些特点,有时候会有一些比循环快得多的方法




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