数学建模社区-数学中国

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

作者: 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]
0 H3 ?9 [5 t9 j+ w
4 H0 G, k7 G3 ?; Z  e. K( h
* ]- ~7 H9 G" v4 o$ A这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑
1 ~- v6 ^7 S  ?- Y5 d* _: s4 O( E
3 b+ m3 u' `3 ~8 R5 |+ Q随手编了一个,目测满足你的需求,有BUG再告诉我哈
: S- A4 j3 q% Z
/ Z5 z" L- J& N; b& rA=[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]% V! [- L( [9 }! l; y/ K* h, {
: M8 c( `9 v! U: q" e- x* H) q
mn=size(A);
, u# ^! N$ I. JB=zeros(mn(2),2);; I2 D$ k: |) R' h' P7 l$ o
  b8 q& U4 G: {/ n0 [: T$ Z3 C  X
num=0;
1 b7 ]2 S" E4 s4 g3 c# Nfor i=1:mn(2)
+ s$ Z$ d, L, k7 |$ H8 Q    for j=1:mn(1)7 h6 ~1 A  z9 v/ g4 u
        if(A(j,i)==1)' X* x, W! ^% F
            num=num+1;
5 b- @4 B7 n( T; o' E; H( Y: a0 ^            B(num,1)=j;
1 E/ X! ~) u) d0 E# C            B(num,2)=i;7 K0 G. F# f* Q5 ]5 T* K" _9 j+ h8 D
            break;- i& j% U) D7 b0 S0 S
        end
! Y2 N8 R* L9 e4 }! F    end
6 o- G1 q7 P; V% a6 l: h+ Kend3 C! V. [# m1 c  D

# B* M/ j2 v) \% [; S7 }4 g( KB
& t4 \! c2 D6 C5 q/ Q6 Vnum1 g, J& H; N; c. g8 K9 \& n  n

1 \$ L9 w$ s- q4 l2 q. u. O# b
! V: v9 V- X. W, _! o, U- A
作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09 " K, y. Y4 o! x- H. W
楼上对的
$ R& Y+ e: V! S
谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =
" U; o, q+ p, i4 n+ i, n
: e# N; i- {4 \9 ]( ?) R% T     6) {4 S+ A2 t' F8 ?' P( u
B =: I" b2 f9 P; \4 ^
! t. P( e, m8 [% H; n
     2     1
3 b, m* p& {* g! X* x     3     29 D, W9 H% n, h. E7 f% K- b2 X9 R
     3     3/ s* @6 M, u+ W! F1 A
     4     4
2 h, y: {8 z4 s% D     4     5/ v* T" _1 K  r4 A$ h
     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧
" x1 x% @9 P* n' j# K8 D$ R# j
作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24
- p- U3 V# R  J是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
% u" D) ~/ N" r8 @! _
据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25 ! ~& d- L! R$ j) F$ U
据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
, C1 o# f& S( ~+ S5 |! F) I
尽量用内置的运算符,比如矩阵的自然运算。
& s# d5 d1 x9 ~
! O2 S- w: U# S& u6 W& ~% z% |% X比如 某行和另一行的倍数之类的 运算 ,就不用循环。4 Y, j+ B$ G6 [) v

! y6 A2 N% p% N2 [但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评  ^2 L7 u: p* E5 t* S/ |" G: [
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];9 i- B& B4 Q, v2 ], M
out=[];
5 S% B- j* n8 D2 d& a1 ^  m- dfor i=1:size(A,2)
7 Q$ q; [- u4 M  y" s( J. X   index=find(A(:,i)==1) ;
3 _+ n# Y/ P6 z1 c9 ?; [   if ~isempty(index)
- u! }) h, X$ A7 D       out=[out index(1)];%该列有1的元素就取第一个1所在的位置$ B  h: q' H4 u
   else
6 f& L1 g& g; ^5 N5 u       out=[out 0];%该列如果没有1的元素就置08 u; L& ^# W- g
   end
$ Q; l5 s+ ?: A& Y1 F& b3 e) Aend& R) S0 k, g; U& ?4 ^) S- F- W$ _
out=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58 , j. z+ B! Y7 R
随手编了一个,目测满足你的需求,有BUG再告诉我哈/ j, r/ i5 X$ `! T! x1 n" J

7 [. q! N' j0 r$ w. @A=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...

- M# R$ g1 z  K. D% Q' l+ t
作者: caps123    时间: 2012-10-6 17:46
牛人还是有的啊
作者: szy241    时间: 2012-10-6 18:05
直接用内置的find函数,你可以help一下来查看用法。尽量使用内置函数避免循环语句
作者: 老小冬    时间: 2012-10-6 19:09
个人意见只要不是多重循环,在matlab里用循环问题就不是太大。
: i. P' q; S$ L7 S3 o7 S9 q但感觉如果巧用了向量或者矩阵的某些特点,有时候会有一些比循环快得多的方法




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