数学建模社区-数学中国

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

作者: 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]
/ U: b8 @% `, M: g& g. q) E8 A+ f! ]0 c! n" [! A& |+ z
' _1 [* k- j# X9 u" V2 |9 }
这个矩阵里  我想提取每列 从上到下 第一个等于1的元素的坐标。  即第一列有三个1  但是我要第一个1的坐标  即是(2,1)  求大神们能帮我编一个小程序解决   因为这样的矩阵倒是可以数出来   但是对于1000*1000的矩阵就不知道该怎么办了  谢谢了
作者: Vir    时间: 2012-10-2 16:58
本帖最后由 Vir 于 2012-10-2 17:00 编辑
2 d0 b9 Y* ~. A6 Q& R6 I% P3 L( t) ?  Z# S0 y3 Z7 t
随手编了一个,目测满足你的需求,有BUG再告诉我哈6 m* g3 d; R) q! z

8 v1 ^( ]2 U% G7 @$ K/ ]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]3 W2 A1 I" H: J3 J( U2 q" _% [3 [

1 l3 M5 i3 N" v! @mn=size(A);
, i1 g- Q9 U# C0 {+ |0 |B=zeros(mn(2),2);
. \  o1 R' m2 d, f) ~; n: a" J  I
num=0;, G8 L* R; O% H; c9 j6 C
for i=1:mn(2): C- v4 n% `# a9 f6 D' ^5 I
    for j=1:mn(1): U' x7 P# M& i2 g
        if(A(j,i)==1)
0 @+ V! e8 l: d( i  Z+ T8 e( p            num=num+1;! ~, g/ X5 q) ^" ~2 W/ c' L
            B(num,1)=j;* Q) E, _  N# L
            B(num,2)=i;& b& C1 R; S$ p) U# F: u
            break;
& a3 q, t/ u4 n0 h; A        end' m" P* v) g8 Z5 E. ?- X0 O& a' R
    end
3 z3 l9 Y. o/ Wend
* b4 U4 J4 W; \6 m# o) y3 S
+ h1 A5 A- I8 \3 _+ w( XB
& e* r* w2 D. i2 a' Z) znum
5 s( L9 i8 A' w$ U8 S0 `$ J. y
! c3 K% U) A% [8 \: C2 H7 y, u0 e/ z4 t! A* `4 v8 I

作者: kong1234    时间: 2012-10-2 18:09
        楼上对的
作者: Vir    时间: 2012-10-2 19:02
kong1234 发表于 2012-10-2 18:09
# E, C4 a) T, T' E4 m楼上对的
: v* _& ~1 i4 N7 w1 g
谢谢支持瓦~~~~~~
作者: kong1234    时间: 2012-10-2 19:14
num =
" f% S4 ^  J5 c! ?) i
9 d  l: p4 d' r; k) k3 `5 x& V/ `) Z: `     6
# x6 q. x4 f: k5 PB =+ s* M- D3 E, R6 a) G* s

: @6 f% n  f+ v* R1 @6 T. Z* f     2     1. U4 D+ d' S) a# x. r) o8 g
     3     2
/ Q6 m* P4 L! c7 ]- E/ X; ~$ k, n# K     3     3
+ z" v0 F4 _' [5 j# J! X7 F2 m7 k     4     4
* k2 ~( I6 ?! b8 `0 F5 {     4     5
9 }( q, b/ i5 t0 C. _6 q- Z' \     5     6
作者: kong1234    时间: 2012-10-2 19:15
不过这个也太简单了吧
/ F' A# p) \  O7 U8 `! \) L% _
作者: Vir    时间: 2012-10-2 19:24
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦
作者: wangluzhu    时间: 2012-10-2 19:25
Vir 发表于 2012-10-2 19:24 + Y3 Q2 N0 H) U
是瓦 ,希望大家认真学MATLAB  数学建模很大程度上学的有用的就是编程环节瓦

4 M5 ?- M5 G; j据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?
作者: Vir    时间: 2012-10-2 19:54
wangluzhu 发表于 2012-10-2 19:25 5 W: Y( P* G- r3 o) K6 A2 n4 z# w
据老师说MATLAB中循环的利用会导致效率很低下(但是我经常用……)您怎么看?

$ Z4 G( e6 e& V+ [* E2 o尽量用内置的运算符,比如矩阵的自然运算。% s% ]( a: i0 `" V2 T& \

1 z  W/ A5 A" T' j比如 某行和另一行的倍数之类的 运算 ,就不用循环。
6 o( P$ S  t3 N& Z+ m6 F  Q+ H% R: ^$ {5 i3 Y$ h, }/ U
但是当循环变得无法避免,或者不用循环就要用更加复杂的数学逻辑,就没必要,用循环是最好的
作者: -.|.低﹎    时间: 2012-10-4 09:44
顶....
作者: ccyu45    时间: 2012-10-4 12:53
这是我写的程序,希望大家指正与批评4 g: i$ O4 o+ l* r3 y2 X
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];
% P7 g  L* V- `0 d2 X! ]out=[];
/ s4 {9 m8 M" ~0 }" m- H; }for i=1:size(A,2); j0 n/ k3 u. v5 V4 W: D
   index=find(A(:,i)==1) ;" `/ W  h5 Y, C% j( C$ A
   if ~isempty(index)* Q8 B9 S* J. r/ {* K  L& C, v
       out=[out index(1)];%该列有1的元素就取第一个1所在的位置' X2 H9 O% B+ n- L
   else
, t2 g! \7 ^* g) h5 E       out=[out 0];%该列如果没有1的元素就置0
7 D2 |" r1 z9 o* R2 L: u% n- Y5 N   end# e2 |) O) D; `  o
end1 ^; d4 k) g( O6 s& f
out=[out;1:length(out)]';
作者: newyear2012    时间: 2012-10-5 11:54
Vir 发表于 2012-10-2 16:58
9 q( r# X) G  L0 P) P5 z0 i; {0 r随手编了一个,目测满足你的需求,有BUG再告诉我哈
0 L$ {3 U* }& w7 e* t- p5 T
- ~# k) B5 \) a2 Z& _A=[2 3 5 7 9 5;1 4 6 8 11 23;1 1 1 3 5 4;1 1 2 1  ...
0 D: D8 d) |3 p4 B4 N9 _1 ]5 @7 L

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




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