zoublake 发表于 2008-1-16 10:15

如何求矩阵中的最小值但不改变矩阵大小

问问大虾兄弟们:

这里要求将一个矩阵中的元素全部取绝对值后,求不为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 编辑 ]

sigma665 发表于 2008-1-16 10:37

回复 楼主 的帖子

那你就一个一个比较,笨方法

另外把
function absmin
c=[];
改成
function f=absmin(c)试试

zoublake 发表于 2008-1-16 10:49

谢谢主任

哦,谢谢主任了,如果那位兄弟眼熟,麻烦按这个要求给个程序吧,小弟用不久,有些命令挺不熟的,时间也算紧.看自己的程序总云里雾里,看别人的程序老是豁然开朗

sigma665 发表于 2008-1-16 10:59

回复 3楼 的帖子

突然有个想法,只是不改变矩阵的大小
找到0的项后,不要删,直接附值一个比较大的数
行不?

re-us 发表于 2008-1-16 12:56

a=[-1 2 0; 5 0 0];
a=abs(a);
b=find(a==0);
temp=99999;(取一个数组中没有的数字,比如有特征的数字)
a(b)=temp;
min(a(:))

暂时想到这么多

re-us 发表于 2008-1-16 12:57

我也是这么想的;如有雷同纯属巧合:lol :lol

花如月 发表于 2008-1-16 13:13

a=[-1 2 0; 5 0 0];
b=sort(abs(a(:)),'ascend');
c=b(b>0);min=c(1)

zoublake 发表于 2008-1-16 22:28

谢谢大家

谢谢楼上,你们的方法确实很好,花主任的方法我用了,这里具体说下吧,我要做音频文件的水印嵌入和提取:
我是先载入了一个声音文件
=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位主任了

assist 发表于 2008-1-17 08:08

functionabsmin
应该为 function=absmin(x)

你连基本的函数调用还不懂啊
页: [1]
查看完整版本: 如何求矩阵中的最小值但不改变矩阵大小