From da0b2d435829d9d859a7561a2440073bf0e01b9d Mon Sep 17 00:00:00 2001 From: Enea Date: Wed, 22 Sep 2021 12:09:40 +0200 Subject: [PATCH] added input parser for icaopt in beamica --- beamica.m | 2 +- relica.m | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/beamica.m b/beamica.m index 2cac7b8..0749905 100755 --- a/beamica.m +++ b/beamica.m @@ -82,7 +82,7 @@ nP = length(P); P = permute(cat(3,P{:}),[3 2 1]); -fprintf('Running Beamica for %i iterations.\n',max_iter); +fprintf('Running Beamica for %i iterations. Using %d splits\n',max_iter, numsplits); for i=1:numsplits ranges{i} = 1+floor((i-1)*N/numsplits) : min(N,floor(i*N/numsplits)); end if usegpu diff --git a/relica.m b/relica.m index ee726ae..065312f 100644 --- a/relica.m +++ b/relica.m @@ -166,7 +166,23 @@ switch algo case 'beamica' if i==1; nrun = 1500; else; nrun = 1200; end % ensure real ICA is good - [Wf,Sf] = beamica(in,{},eye(size(in,1)),pinv(sqrtm(cov(in'))),mean(in,2),nrun,0.5,0.5,false,true,true,1); + % Parse beamica opts + p = inputParser; + addOptional(p, 'lrate', 0.5, @(x) isnumeric()); + addOptional(p, 'tradeoff', 0.5, @(x) isnumeric(x) && (x >= 0) && (x <= 1)); + addOptional(p, 'verbose', false); + addOptional(p, 'usegpu', true); + addOptional(p, 'convergence_check', false); + addOptional(p, 'numsplits', 1); + parse(p, g.icaopt{:}); + lrate = p.Results.lrate; + tradeoff = p.Results.tradeoff; + verbose = p.Results.verbose; + usegpu = p.Results.usegpu; + convergence_check = p.Results.convergence_check; + numsplits = p.Results.numsplits; + % Feed beamica with the parsed opts + [Wf,Sf] = beamica(in,{},eye(size(in,1)),pinv(sqrtm(cov(in'))),mean(in,2),nrun,lrate,tradeoff,verbose,usegpu,convergence_check,numsplits); W_ = Wf * Sf; A_ = pinv(W_);