有没有办法循环MATLAB内置的矩阵(图库)?

时间:2014-08-21 14:25:09

标签: matlab matrix

matlab中有许多内置的测试矩阵,由“gallery”函数调用,需要带有矩阵名称的字符串。有没有一种方便的方法来获取所有内置矩阵的列表或其他循环所有矩阵的方法?

2 个答案:

答案 0 :(得分:2)

通过查看gallery的来源,基本上有一个大的case语句,用于检查您在函数中添加的名称。因此,没有一种方法可以以编程方式提取所有名称。您将不得不复制并粘贴这些名称并自行获取。但是,因为我感觉很好,所以我决定通过该列表并将其编译成单元格数组。以下是单元格数组格式的列表:

listNames = {'binomial','chebspec','clement','cycol','dramadah','gearmat',...
     'frank','gallery3','gallery5','gcdmat','grcar','invol','ipjfact',...
     'lehmer','lesp','lotkin','minij','neumann', 'orthog', ...
     'parter','poisson','redheff','riemann','rando','ris','smoke', ...
     'wathen','wilk', 'cauchy','invhess','leslie', 'chebvand', ...
     'chow','forsythe','kahan','compar','house','qmult','randhess', ...
     'condex','randjorth', 'circul','fiedler','randcorr','randcolu','sampling', ...
     'dorr','hanowa','jordbloc','kms','lauchli','moler','pei',...
     'prolate','randsvd','triw', 'krylov', 'toeppd', 'toeppen', 'tridiag', ...
     'normaldata', 'uniformdata', 'integerdata'};

%// Sort alphabetically just for kicks
listNames = sort(listNames);

每种矩阵都有不同的参数,因此您可以自行查明这些参数,但gallery所接收的所有名称都在上面的单元格数组中。因此,您只需通过以下方式访问k th 名称:

nameMat = listNames{k};

答案 1 :(得分:1)

每个测试矩阵都与文件夹.m中的文件名(toolbox/matlab/elmat/private)相关联。

您可以使用

列出测试矩阵名称
filestrct = dir([matlabroot filesep 'toolbox' filesep 'matlab' filesep 'elmat' filesep 'private' filesep '*.m']);
filenames = {filestrct.name}';
testmat = cellfun(@(x) x(1:end-2), filenames, 'UniformOutput', 0);

它将为您提供一个名称的单元格数组。可以通过

检索每个元素
 testmat{k}