⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getnewucpm2.m

📁 Continuous Profile Models (CPM) Matlab Toolbox.
💻 M
字号:
% function newU = getNewUCPM2(G,gammaSum3,gammaSum4,scalesExp,lambda)%% Solve for new u iteratively (or analytically if possible)% when using CPM2 -- which currently uses control points for% a linear splinefunction newU = getNewUCPM2(G,gammaSum3,gammaSum4,gammaSum5,...    gammaSum6,scalesExp)%load /u/jenn/newUPCM2.mat;C=G.numClass;scalesExpRep = repmat(scalesExp,[G.numSamples 1 G.numBins]);scalesExpRep = permute(scalesExpRep,[2 1 3]);theseClasses = getAllClass(G);zPhi = G.z(G.stateToScaleTau(:,2),theseClasses,:).*scalesExpRep;%B = zeros(G.numCtrlPts,G.numSamples);%D = zeros(G.numCtrlPts,G.numSamples);B = cell(G.numCtrlPts,1);D = cell(G.numCtrlPts,1);%% extra term has to do with the smoothing penalty relating to uif G.useBalancedPenalty    extraTerm = getExtraTerm(G,theseClasses);        %% same for all control points    extraTerm = repmat(extraTerm,[G.numCtrlPts 1]);end%sig2 = G.sigmas.^2;%sig2inv = 1./sig2';newU = zeros(size(G.u));  %% works for USE_CPM2 or notnewU = G.u;  %% so that we can debug by updating just one%% NO!!!%bin=1; % arbitrarily, since assuming same for all bins%sig2inv_t = G.sigmas(bin,:).^(-2);%% CORRECT WAY:sig2inv_t = G.sigmas.^(-2);if 0    for kk=1:G.numSamples        solvedU = helperCPM2(gammaSum3,gammaSum4,...            G,kk,gammaSum5,gammaSum6,scalesExp,sig2inv_t,...            extraTerm,zPhi);        newU(kk,:) = solvedU;    endelse    %% All together, far more efficient    solvedU = helperCPM3(gammaSum3,gammaSum4,...        G,gammaSum5,gammaSum6,scalesExp,sig2inv_t,...        extraTerm,zPhi);    newU = reshape(solvedU,size(G.u));endif any(isinf(newU)) | any(isnan(newU))    warning('newU is screwed up, look at sum(gammaX,1) ');    keyboard;endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%% solve all u_kt togetherfunction [newU,fval] = helperCPM3(gammaSum3,gammaSum4,...        G,gammaSum5,gammaSum6,scalesExp,sig2inv,extraTerm,zPhi);fval=NaN;tolx=NaN;if G.uType==1     %% With no prior on u_k:     error('not implemented');    keyboard;    elseif G.uType==2 %% With prior on u_k    % whatever log base I use here has to be the same as when I    % calculate the penalty term in the likelhiood.    tolx=1e-4;    startGuess=squeeze(G.u(:));    if 0        options=optimset('TolX',tolx,'DerivativeCheck','off',...            'GradObj','on','Display','off');        [newU2,fval2,exitflag,output,grad] = fminunc(@(u)uFunctionNew2(u,...            gammaSum3,gammaSum4,G,gammaSum5,gammaSum6,scalesExp,...            sig2inv,extraTerm,zPhi),startGuess,options);    else        numIter=50;        [newU, fval] = minimize(startGuess,'uFunctionNew2',numIter,...            gammaSum3,gammaSum4,G,gammaSum5,gammaSum6,scalesExp,...            sig2inv,extraTerm,zPhi);    end    %% check the derivative    if 0        keyboard;        %clear; load bug.mat;        y = startGuess;        if 1            y=rand(size(startGuess));            G.u = rand(size(G.u));            %G.u(find(G.u<0.7))=0.7;        end        e=1e-6;                [d anal fd] = checkgrad('uFunctionNew2',y,e,...            gammaSum3,gammaSum4,G,gammaSum5,gammaSum6,...            scalesExp,sig2inv,extraTerm,zPhi);        %figure,plot(fd-anal); title('fd-analy');                keyboard;    end    if any(newU<0)        keyboard;    end    if any(~isreal(newU))        keyboard;    endendreturn;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -