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

📄 optim_private_xplot.c

📁 ASUFIT-Matlab-全局拟合程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -