📄 optim_private_xplot.c
字号:
/*
* MATLAB Compiler: 2.0.1
* Date: Tue May 08 21:28:23 2001
* Arguments: "-B" "sgl" "-m" "-W" "mainhg" "-L" "C" "asufit.m" "absfun.m"
* "absfunfree.m" "absfunshift.m" "absfunwidth.m" "dispfit.m" "dispfitdisp.m"
* "dispfitfree.m" "dispfitwidth.m" "seqmodfree.m" "spcfun.m" "spcfun1.m"
* "atamult.m" "aprecon.m"
*/
#include "optim_private_xplot.h"
#include "subplot.h"
#include "title.h"
#include "xlabel.h"
#include "ylabel.h"
static double __Array0_r[2] = { -1.0, 1.0 };
/*
* The function "Moptim_private_xplot" is the implementation version of the
* "optim/private/xplot" M-function from file
* "C:\MATLABR11\toolbox\optim\private\xplot.m" (lines 1-87). It contains the
* actual compiled code for that M-function. It is a static function and must
* only be called from one of the interface functions, appearing below.
*/
/*
* function [figps] = xplot(it,vval,vfnrm,vflops,vpos,vdeg,vpcg)
*/
static mxArray * Moptim_private_xplot(int nargout_,
mxArray * it,
mxArray * vval,
mxArray * vfnrm,
mxArray * vflops,
mxArray * vpos,
mxArray * vdeg,
mxArray * vpcg) {
mxArray * figps = mclGetUninitializedArray();
mxArray * ans = mclInitializeAns();
mxArray * closebtn = mclGetUninitializedArray();
mxArray * currsubplot = mclGetUninitializedArray();
mxArray * figtr = mclGetUninitializedArray();
mxArray * itv = mclGetUninitializedArray();
mxArray * len = mclGetUninitializedArray();
mxArray * one = mclGetUninitializedArray();
mxArray * screensize = mclGetUninitializedArray();
mxArray * ypos = mclGetUninitializedArray();
mclValidateInputs(
"optim/private/xplot",
7,
&it,
&vval,
&vfnrm,
&vflops,
&vpos,
&vdeg,
&vpcg);
mclCopyArray(&vpos);
mclCopyArray(&vdeg);
/*
* %XPLOT 4 performance graphs
* %
* % figps = xplot(it,vval,vfnrm,vflops,vpos,vdeg,vpcg)
* %
* % PLOT 4 OUTPUT GRAPHS ON 2-BY-2 DISPLAY
*
* % Copyright (c) 1990-98 by The MathWorks, Inc.
* % $Revision: 1.3 $ $Date: 1998/07/09 16:30:10 $
*
* % This is to avoid closing the figps window by accident
* figtr = findobj('type','figure',...
*/
mlfAssign(
&figtr,
mlfFindobj(
mxCreateString("type"),
mxCreateString("figure"),
mxCreateString("Name"),
mxCreateString("Progress Information"),
NULL));
/*
* 'Name','Progress Information') ;
* if ~isempty(figtr)
*/
if (mlfTobool(mlfNot(mlfIsempty(figtr)))) {
/*
* closebtn = findobj(figtr,'name','Close optimization windows') ;
*/
mlfAssign(
&closebtn,
mlfFindobj(
figtr,
mxCreateString("name"),
mxCreateString("Close optimization windows"),
NULL));
/*
* set(closebtn,'enable','off') ;
*/
mclAssignAns(
&ans,
mlfNSet(
0,
closebtn,
mxCreateString("enable"),
mxCreateString("off"),
NULL));
/*
* end ;
*/
}
/*
*
* if it <= 0,
*/
if (mlfTobool(mlfLe(it, mlfScalar(0.0)))) {
/*
* return;
*/
goto return_;
/*
* end
*/
}
/*
*
* figps = findobj('type','figure',...
*/
mlfAssign(
&figps,
mlfFindobj(
mxCreateString("type"),
mxCreateString("figure"),
mxCreateString("Name"),
mxCreateString("Algorithm Performance Statistics"),
NULL));
/*
* 'Name','Algorithm Performance Statistics') ;
* if isempty(figps)
*/
if (mlfTobool(mlfIsempty(figps))) {
/*
* screensize = get(0,'ScreenSize') ;
*/
mlfAssign(
&screensize,
mlfGet(mlfScalar(0.0), mxCreateString("ScreenSize"), NULL));
/*
* ypos = floor((screensize(4) - 550)/2) ;
*/
mlfAssign(
&ypos,
mlfFloor(
mlfMrdivide(
mlfMinus(
mlfIndexRef(screensize, "(?)", mlfScalar(4.0)),
mlfScalar(550.0)),
mlfScalar(2.0))));
/*
* figps = figure('Name', 'Algorithm Performance Statistics', ...
*/
mlfAssign(
&figps,
mlfNFigure(
1,
mxCreateString("Name"),
mxCreateString("Algorithm Performance Statistics"),
mxCreateString("Position"),
mlfHorzcat(
mlfScalar(1.0), ypos, mlfScalar(560.0), mlfScalar(550.0), NULL),
NULL));
/*
* 'Position',[1 ypos 560 550]);
* end ;
*/
}
/*
* figure(figps) ;
*/
mclAssignAns(&ans, mlfNFigure(0, figps, NULL));
/*
* itv = (1:it)';
*/
mlfAssign(&itv, mlfCtranspose(mlfColon(mlfScalar(1.0), it, NULL)));
/*
* subplot(2,2,1),
*/
mclPrintAns(
&ans, mlfNSubplot(0, mlfScalar(2.0), mlfScalar(2.0), mlfScalar(1.0)));
/*
* %plot(itv,log10(vfnrm),'-',itv,log10(vfnrm),'go')
* semilogy(itv,vfnrm,'-',itv,vfnrm,'go')
*/
mclPrintAns(
&ans,
mlfNSemilogy(
0,
itv,
vfnrm,
mxCreateString("-"),
itv,
vfnrm,
mxCreateString("go"),
NULL));
/*
* %title('First-order Optimality (log 10)')
* title('Optimality progress per iteration');
*/
mclAssignAns(
&ans,
mlfNTitle(0, mxCreateString("Optimality progress per iteration"), NULL));
/*
* xlabel('iteration')
*/
mclPrintAns(&ans, mlfNXlabel(0, mxCreateString("iteration"), NULL));
/*
* ylabel('first-order optimality')
*/
mclPrintAns(
&ans, mlfNYlabel(0, mxCreateString("first-order optimality"), NULL));
/*
* %
*
* len = length(vpcg); itv = 1:1:len; itv = itv';
*/
mlfAssign(&len, mlfLength(vpcg));
mlfAssign(&itv, mlfColon(mlfScalar(1.0), mlfScalar(1.0), len));
mlfAssign(&itv, mlfCtranspose(itv));
/*
* currsubplot=subplot(2,2,2);
*/
mlfAssign(
&currsubplot,
mlfNSubplot(1, mlfScalar(2.0), mlfScalar(2.0), mlfScalar(2.0)));
/*
* plot(itv,vpcg,'-',itv,vpcg,'go');
*/
mclAssignAns(
&ans,
mlfNPlot(
0,
itv,
vpcg,
mxCreateString("-"),
itv,
vpcg,
mxCreateString("go"),
NULL));
/*
* if it < 6
*/
if (mlfTobool(mlfLt(it, mlfScalar(6.0)))) {
/*
* set(currsubplot,'Ytick',0:it);
*/
mclAssignAns(
&ans,
mlfNSet(
0,
currsubplot,
mxCreateString("Ytick"),
mlfColon(mlfScalar(0.0), it, NULL),
NULL));
/*
* end
*/
}
/*
* title('PCG iterations per iteration');
*/
mclAssignAns(
&ans, mlfNTitle(0, mxCreateString("PCG iterations per iteration"), NULL));
/*
* xlabel('iteration')
*/
mclPrintAns(&ans, mlfNXlabel(0, mxCreateString("iteration"), NULL));
/*
*
* itv = (1:length(vpos))';
*/
mlfAssign(
&itv, mlfCtranspose(mlfColon(mlfScalar(1.0), mlfLength(vpos), NULL)));
/*
* if length(vpos) > 1
*/
if (mlfTobool(mlfGt(mlfLength(vpos), mlfScalar(1.0)))) {
/*
* vpos(1,1) = vpos(2,1);
*/
mlfIndexAssign(
&vpos,
"(?,?)",
mlfScalar(1.0),
mlfScalar(1.0),
mlfIndexRef(vpos, "(?,?)", mlfScalar(2.0), mlfScalar(1.0)));
/*
* end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -