PDA

查看完整版本 : [MATLAB基础] 求助:matlab中如何把矩阵中的实数找出来,并确定其相应的位置


舒子shu
2009-08-28, 08:49
:confused:例如有此数组A=[2-9i,6+4i,7,5-3i;i,4,5+8i,9],要将其中的实数给找出来,并确定实数的位置,我最后想要用[a,b]的形式表示实数的位置,因为接下来的工作中我要用a,b。
先谢了!

duguying2245
2009-08-29, 00:03
我编了个程序 针对你给的数据。不知道你的系统多大。大的话用for循环就不好了。希望对你有用 呵呵。
A=[2-9i,6+4i,7,5-3i;i,4,5+8i,9];
p=0;
for m=1:2
for n=1:4
x=imag(A(m,n));
if (x<1)&(x>-1)
p=p+1;
y(p)=m;z(p)=n;
number=p;

end
end
end

fprintf('\n*** 实数个数 = %2.0f \n',number);

%查看实数
for p=1:number
A(y(p),z(p))
end

barcelona
2009-08-29, 03:11
假定已知矩阵为a,则矩阵a中实数的位置x=find(imag(a)==0),得到的x的结果不是矩阵标准的行列形式,但是可以直接根据x获得相应位置上的实数数据b=a(x);如果要得到实数在矩阵中的确切行列信息,设已知矩阵为NXM形式,则由x到行列的转换满足以下关系:
列信息 c=x/N(x/N为整数时) or fix(x/N)+1;行信息r=N(x/N为整数) or x-fix(x/N)XN;
m文件程序简单实现:
x=find(imag(a)==0);

for jj=1:length(x)
b(jj)=a(jj);
end

z=[x;b];%%z的第一行表示实数位置;第二行表示相应位置下的实数值%%

舒子shu
2009-08-29, 12:16
我编了个程序 针对你给的数据。不知道你的系统多大。大的话用for循环就不好了。希望对你有用 呵呵。
A=[2-9i,6+4i,7,5-3i;i,4,5+8i,9];
p=0;
for m=1:2
for n=1:4
x=imag(A(m,n));
if (x<1)&(x>-1)
p=p+1;
y(p)=m;z(p)=n;
number=p;

end
end
end

fprintf('\n*** 实数个数 = %2.0f \n',number);

%查看实数
for p=1:number
A(y(p),z(p))
end
不好意思,我想问一下,在你的条件语句中对x取值的限定是如何选的,为什么要-1<x<1呢,我的矩阵里面的元素取值都比较小,基本上是在0.01左右,该怎样取这个范围呢?谢谢了!