如何求矩阵中的最小值但不改变矩阵大小
问问大虾兄弟们:这里要求将一个矩阵中的元素全部取绝对值后,求不为0的最小值,要求不改变矩阵的大小,我用的程序
function absmin
c=[];
a=abs(c);
=min( a);
while min( a)==0
a(:,I)=[];
end
absmin=min( a)
是采用删除含0元素的那整列的方法,这样改变了矩阵的大小,若以后再引用这个矩阵,错误为:Index of element to remove exceeds matrix dimensions.大小不对了.
请问怎样做才能不改变大小而满足要求呢?
另外,弱问,调用这个子程序,我用f=absmin(c),就显示Subscript indices must either be real positive integers or logicals.,应该是matlab要求数组不能从0开始吧,那应该怎么调用呢?C确实也是个矩阵
[ 本帖最后由 eight 于 2008-1-21 20:13 编辑 ]
回复 楼主 的帖子
那你就一个一个比较,笨方法另外把
function absmin
c=[];
改成
function f=absmin(c)试试
谢谢主任
哦,谢谢主任了,如果那位兄弟眼熟,麻烦按这个要求给个程序吧,小弟用不久,有些命令挺不熟的,时间也算紧.看自己的程序总云里雾里,看别人的程序老是豁然开朗回复 3楼 的帖子
突然有个想法,只是不改变矩阵的大小找到0的项后,不要删,直接附值一个比较大的数
行不? a=[-1 2 0; 5 0 0];
a=abs(a);
b=find(a==0);
temp=99999;(取一个数组中没有的数字,比如有特征的数字)
a(b)=temp;
min(a(:))
暂时想到这么多 我也是这么想的;如有雷同纯属巧合:lol :lol a=[-1 2 0; 5 0 0];
b=sort(abs(a(:)),'ascend');
c=b(b>0);min=c(1)
谢谢大家
谢谢楼上,你们的方法确实很好,花主任的方法我用了,这里具体说下吧,我要做音频文件的水印嵌入和提取:我是先载入了一个声音文件
=wavread('D:\matlab\work\sound333333.wav');
然后运用小波变换DWT算法进行分解
=wavedec(a,3,'haar'); % returns the wavelet decomposition of the signal at
level 3, using 'haar'
再求近似分量的系数
ca3=appcoef(c,l,3,'haar'); % computes the approximation coefficients at level 3 using the wavelet decomposition structure
以上都不是关键,这里再要问的是,我得到的这些系数,用matlab显示出来是:
-0.0269
-0.0084
0.0114
0.0178
0.0223
0.0766
0.0678
0.0061
0.0526
0.0215
-0.0349
-0.0146
0.0319
0.0776
.
.
.
.
.
一长串数字,现在我要求这些数字取绝对值后,不为0的最小值
子程序我用的花主任的:
functionabsmin
a=[-1 2 0; 5 0 0];
b=sort(abs(a(:)),'ascend');
c=b(b>0);absmin=c(1)
经过调试没问题,单独debug结果是:
absmin =
1
主程序里我调用就是简单的:
q=absmin(ca3);
但最后就会显示这里调用有错误:
??? Error using ==> absmin
Too many input arguments.
Error in ==> watermarking at 14
q=absmin(ca3);
是那些系数不符合子程序的格式要求吗???麻烦大家和2位主任了 functionabsmin
应该为 function=absmin(x)
你连基本的函数调用还不懂啊
页:
[1]