数学建模社区-数学中国

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

作者: 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]8 q7 A( M9 D1 m2 Z

0 H, e6 [% O# V( i+ i
3 j7 }% ^* T% j) c: M5 p这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑 % ?2 C6 a: P& v4 K& A0 o/ k5 G- f

' b0 P/ b- f  A6 C! H2 _9 p随手编了一个,目测满足你的需求,有BUG再告诉我哈
% Y0 ]5 h1 v! A& _
9 Z% L" h( s$ HA=[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]
% f0 X. A  i# |: Z3 D0 P* W8 W
! Z6 q& E, f+ m  |mn=size(A);
  D. n* d% _% Z% {, _) f2 k5 v% W! HB=zeros(mn(2),2);
1 O! q8 h5 m! k) L) T5 v3 s+ z6 N/ J3 Y- ^5 o$ Z: }
num=0;! C, ], L- z! c  {2 ?% y) u$ [
for i=1:mn(2)
- o. Q' w1 {# y& u    for j=1:mn(1)  f8 a) K4 |1 _
        if(A(j,i)==1)! `( O5 y% }  T  J
            num=num+1;$ X, _, L/ f3 ~+ b% e0 G
            B(num,1)=j;
5 F7 r  z: V! ^1 @6 a2 H            B(num,2)=i;
1 n& ?8 }) w8 m8 D            break;
% H1 Z- \3 w$ ]* ]6 Y        end
+ J( k1 R1 D0 _' d1 X, E  k    end
  i+ s: f( g) F$ e( u2 send2 x8 l* J/ P# n3 }2 J+ O

9 \7 P. Z7 X5 _) N6 [5 x- IB- \  i  T5 ]# P$ @
num
' w6 E$ T; i9 \1 t( g! M4 F9 w$ ~: @2 r' m$ z
9 c% r; l, W1 X# d6 `* {( X: v0 l' }

作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09
9 [2 r& o) g- M% q) @. W! \/ A楼上对的

% S( _! u( i+ u1 C% h9 K谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =" Y' ~' `" l8 o1 i1 p, d) G& F
, }% X2 e1 F8 j- D; z
     6. Y7 G0 ~& H& {  A" w
B =& X; z% n+ i0 u2 h. |! K

! j& c- N( k" C0 B) P     2     1
2 _4 k: F7 R+ ~/ w3 f. ^3 D7 ?     3     2
1 a+ Z  X/ Y1 b6 K$ M, s" N     3     3
3 A# [& E3 T: L/ g. S     4     44 ~( b. `! y: N4 }; {* @
     4     5: b* @1 P6 w. u6 q4 m8 M
     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧
+ \( J. T/ p! o7 o7 h
作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24 # |# p2 {$ h/ a' S" m
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦

8 n2 `6 Q; f6 x+ _" y1 n; C6 A据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25
5 I; X! N4 H1 `5 c# @. h据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?

' }- q/ X8 M) S6 A尽量用内置的运算符,比如矩阵的自然运算。  }) T4 i, @$ Y, K% u
% u& G) C7 K# H+ A  u
比如 某行和另一行的倍数之类的 运算 ,就不用循环。
" w, n: {6 [* `. v2 y$ I2 @  d% Y/ X
# q2 M* L- z+ U8 U7 B, G: U但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评
( y+ c. ?/ G2 H( D- G: xA=[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 @: {# v: a0 r7 {, ^7 n. O- R, wout=[];
$ R% |/ z- u) T5 r0 kfor i=1:size(A,2): N& q- l- o0 K& x3 l% x) V
   index=find(A(:,i)==1) ;9 b, h4 z/ y9 E2 e
   if ~isempty(index)7 T- |; G6 S" Z. I+ K& l" \! f
       out=[out index(1)];%该列有1的元素就取第一个1所在的位置
# a( m: G7 j/ R9 q   else
4 K2 D/ U- Q& n5 l1 _       out=[out 0];%该列如果没有1的元素就置0: f8 |2 D* @) g) B8 ]
   end
( o# N. V5 ?9 _' kend
7 W/ E* l+ L* [  G& ~out=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58 / `0 a% J. D/ R
随手编了一个,目测满足你的需求,有BUG再告诉我哈
6 B' j4 W. j& C+ j4 P7 s  e. D# [8 ]7 m1 C
A=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...

* P4 E% h% h& g- i
作者: caps123    时间: 2012-10-6 17:46
牛人还是有的啊
作者: szy241    时间: 2012-10-6 18:05
直接用内置的find函数,你可以help一下来查看用法。尽量使用内置函数避免循环语句
作者: 老小冬    时间: 2012-10-6 19:09
个人意见只要不是多重循环,在matlab里用循环问题就不是太大。
1 a/ P, R6 e/ u/ ]1 Z但感觉如果巧用了向量或者矩阵的某些特点,有时候会有一些比循环快得多的方法




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