数学建模社区-数学中国

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

作者: 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]
  G/ _4 q+ f; N6 f& V. |2 r' s' F4 l1 r5 i7 }
: g' J6 _5 K  ?! @: |& F
这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑
( @4 q1 Z' g- e: h% a% d
2 r0 o3 a9 B" Z# W! c; y* Y随手编了一个,目测满足你的需求,有BUG再告诉我哈( x& @* j, I; @6 D& Z
. y1 _+ j5 v8 Q1 \
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]
6 Z/ o, t% D" s% A" Q% q& @. f6 `+ r$ d, d7 e& @" v8 \8 X
mn=size(A);8 {0 L# k3 {6 ^: `8 D* {
B=zeros(mn(2),2);: ^2 j2 t2 T9 ^; Z* D9 h7 n
! W; A& E5 _' E
num=0;
% E, f4 S. p( {" pfor i=1:mn(2)& P* `: Q  g7 y9 z$ z
    for j=1:mn(1)
! F+ Z$ M" h1 C. J6 f7 N        if(A(j,i)==1)! \, g, O6 G; q& s2 U
            num=num+1;
7 w  j: J% G) X3 t2 ?& k            B(num,1)=j;
, V: b( V/ z6 D5 K            B(num,2)=i;: ?+ D! U/ a1 r1 ^, m
            break;* J. B) g4 h! n* T
        end
% p0 ?5 k4 M' {, ]: \    end
% j; F8 p) s( o: d; qend
) Z" L+ k; f/ T- f" j% U5 i& m7 N6 y+ X! X. l3 Y' l+ x1 i
B
' k% s3 E: L0 p# d2 D; Y# m, [5 Pnum
- u7 u% u. W4 q
3 K  R4 k% Y3 N
6 h+ t7 N9 c) ^/ c
作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09
% Q# F+ ~6 _; S: ~1 a! r楼上对的

" D, R0 f1 N# N谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =
/ f# x- r6 \, L5 t9 h- q; ~" A
. o- Y) X* w/ P& P2 l     6
4 E7 D& B% d; H* V' t" W% Y  n: OB =! u; _" p" X, A+ B  X

2 g! }+ Q# u+ s: P( G( n     2     1
4 `* o. J' R8 S% T$ \# Z     3     2' I* e- p$ e) h# X# ]5 k7 Z
     3     3
. v9 q4 ^& {6 m7 _  H     4     4
" r! p6 e0 W9 L, j     4     5; J; ?( A: h! n$ z& K- Q
     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧
3 C, p' O) Q& Z$ a
作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24 ; S! _7 I7 B6 x' ^
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦

+ @' j7 z5 L, P: G4 n  n据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25
6 t* I  {- t- P据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
$ o* D# i$ u! V
尽量用内置的运算符,比如矩阵的自然运算。
# Q1 ]! H$ F! ^) V/ z0 Y) W6 e* I. {0 [. o0 }0 }
比如 某行和另一行的倍数之类的 运算 ,就不用循环。
* y% }( y5 _  I$ T" G. f! N+ F! k7 _& o3 b3 x
但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评  |1 G: V5 T4 S8 ^
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];$ t  ~' z+ G2 v- D4 d, t3 d+ G: _" @
out=[];
$ P, ^* ^9 [7 S2 mfor i=1:size(A,2)
6 U* [( _$ B3 K. c, {% o% X8 E( a   index=find(A(:,i)==1) ;2 K/ B3 z/ h8 p' p
   if ~isempty(index)
$ k; h& Y( w0 t8 ~* P       out=[out index(1)];%该列有1的元素就取第一个1所在的位置( N# l6 g: R# a3 ^: M5 R- u( ^8 d
   else
/ f6 l1 |2 t0 e' J6 s9 {4 j# q       out=[out 0];%该列如果没有1的元素就置0
% c" S0 u: t6 v: \( A8 ~   end
; g; f! Q# h% [2 ^end
& x& o8 f/ Z1 q4 Dout=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58
& O* ]/ `  Y/ C' g; C8 N随手编了一个,目测满足你的需求,有BUG再告诉我哈
; F5 a6 H+ V- r! W! E& q
2 M9 o/ g" p3 }7 R4 J8 F+ `. nA=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...

3 X! W( u! G) C& W* ~' {
作者: caps123    时间: 2012-10-6 17:46
牛人还是有的啊
作者: szy241    时间: 2012-10-6 18:05
直接用内置的find函数,你可以help一下来查看用法。尽量使用内置函数避免循环语句
作者: 老小冬    时间: 2012-10-6 19:09
个人意见只要不是多重循环,在matlab里用循环问题就不是太大。
9 z" [& i+ [/ u, ~" P' F但感觉如果巧用了向量或者矩阵的某些特点,有时候会有一些比循环快得多的方法




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