Chapter 3: How to Use Minuit
- The Function FCN.
The user must always supply a Fortran subroutine which calculates the function value to be minimized or analyzed.
CALL FCN (NPAR,GRAD,FVAL,XVAL,IFLAG,FUTIL)
Input parameters
NPAR number of currently variable parameters. XVAL vector of (constant and variable) parameters.
IFLAG Indicates what is to be calculated (see example below).
FUTIL Name of utilitary routine (if needed, it must be declared EXTERNAL and provided by the user).
Output parameters
FVAL The calculated function value.
GRAD The (optional) vector of first derivatives).
Note that when Minuit is being used through an intermediate package such as HBOOK or PAW, then the FCN may be supplied by the this package.
Example of FCN routine
SUBROUTINE FCN(NPAR,GRAD,FVAL,XVAL,IFLAG,FUTIL)
IMPLICIT DOUBLE PRECISION (A-H,O-Z) ! for 32-bit machines
DIMENSION GRAD(*),XVAL(*)
EXTERNAL FUTIL ! (if needed and supplied by user)
C-
IF (IFLAG .EQ. 1) THEN
- read input data,
- calculate any necessary constants, etc.
ENDIF
IF (IFLAG .EQ. 2) THEN
- calculate GRAD, the first derivatives of FVAL
- (this is optional)
ENDIF
- Always calculate the value of the function, FVAL,
- which is usually a chisquare or log likelihood.
C Optionally, calculation of FVAL may involve
FTHEO = FUTIL(....)
C It is responsability of user to pass
C any parameter values needed by FUTIL,
C either through arguments, or in a COMMON block
IF (IFLAG .EQ. 3) THEN
- will come here only after the fit is finished.
- Perform any final calculations, output fitted data, etc.
ENDIF
RETURN
END
The name of the subroutine may be chosen freely (in documentation we give it the generic name FCN) and must be declared EXTERNAL in the userrsquo;s program which calls Minuit (in data-driven mode) or calls
9
10 Chapter 3. How to Use Minuit
Minuit subroutines (in Fortran-callable mode). The meaning of the parameters XVAL is of course defined by the user, who uses the values of those parameters to calculate his function value. The starting values must be specified by the user (either by supplying parameter definitions from a file, or typing them at the terminal, in data-driven mode; or by calling subroutine MNPARM in Fortran-callable mode), and later values are determined by Minuit as it searches for the minimum or performs whatever analysis is requested by the user. FUTIL represents the name of a function or subroutine which may be defined and supplied by the user and called from FCN. If the user does not use the FUTIL feature, the last argument may be given as zero, but if used, the name of FUTIL must be declared EXTERNAL and a subprogram of that name must be supplied at loading time.
It is possible, by giving them different names, to analyze several different FCNs in one job. However, one analysis must be completed before the next is started. In order to avoid interference between the analyses of two different FCNs, the user should call Minuit (in data-driven mode) or MNINIT (in Fortran-callable mode) each time a new FCN is to be studied.
- Running Minuit in Data-driven Mode.
Minuit can be run in two different modes: Data-driven mode means that the user drives Minuit with data, either typed interactively from a terminal or from a data file in batch; and Fortran-callable mode means that Minuit is driven directly from Fortran subroutine calls, without data. To some extent, the two modes may also be mixed. This section describes the first mode, and is valid for both interactive and batch running. The differences between interactive and batch are described in a separate subsection below.
In data-driven mode, the user must supply, in addition to the subroutine FCN, a main program which includes the following statements (the statements in upper case are required, those given in lower case are optional):
Example of main program when using Minuit in data driven mode
EXTERNAL FCN external futil
call mintio(ird,iwr,isav) CALL MINUIT(FCN,futil)
The name of FCN may be chosen freely, and is communicated to Minuit as its first argument. FUTIL is the generic name of a function or subroutine which the user may optionally call from FCN, and if he does call such a routine, he must declare it external and communicate its name to Minuit as well. If FUTIL is not used, then the second argument may be put equal to 0, and need not be declared EXTERNAL; if FUTIL is declared EXTERNAL, it must be supplied in the loading process.
|
3.2. Running Minuit in Data-driven Mode. |
11 |
CALL MINTIO (IREAD,IWRITE,ISAVE)
Action: The purpose of MINTIO is to communicate to Minuit the I/O units.
Input parameters
IREAD Fortran unit number for reading (default 5).
IWRITE Fortran unit number for writing (default 6).
Isave Fortran unit number for saving (default 7).
If the default values are acceptable, then it is not necessary to call MINTIO. It is the userrsquo;s responsibility that the I/O units are properly opened for the appropriate operations.
Note
In data-driven mode, that is with CALL MINUIT, you should not call MNINIT, since Minuit takes care of all initialization. To change unit numbers, call MINTIO before calling MINUIT.
In
剩余内容已隐藏,支付完成后下载完整资料
- :如何使用Minuit
3.1fcn函数
用户必须提供一个Fortran子程序计算函数值达到最小或分析。
叫FCN(NPAR、GRAD等,xVal,iflag,futil)
输入参数
NPAR数量目前可变参数。xVal载体(常量和变量)的参数。
iflag表明什么是计算(见下面的例子)。
常规的utilitary futil名称(如果需要的话,它必须声明为外部用户提供的)。
输出参数
未来值计算函数值。
梯度(可选)的一阶导数的向量)。
值得注意的是,当Minuit正在通过中间包如手册或爪子,然后算可以由这个包提供。
子程序的名称可以自由选择(在文件,我们给它的通用名称FCN)和必须声明为外部用户程序调用Minuit(数据驱动模式)或电话
Minuit子程序(FORTRAN调用模式)。参数的意思是当然xVal定义的用户,谁使用这些参数的值来计算其函数值。起始G的值必须是指定的用户(无论是通过提供参数的定义从一个文件,或打印在终端,在数据驱动的方式;或由FORTRAN调用子程序调用的mnparm模式),以及后来的值是由Minuit为它寻找最小或执行任何分析是按用户要求。futil代表一个函数或子程序的名字被定义和用户提供的,称为从FCN。如果用户不使用futil特征,最后一个参数可以为零,但如果使用,对futil名必须声明的外部D一个子程序的名称必须在加载时提供。
这是可能的,通过给他们不同的名称,分析几种不同的产生的工作。然而,一个分析必须在下一个开始之前完成。为了避免之间的干扰两个不同的FCNs的分析,用户应该叫Minuit(数据驱动模式)或mninit(FORTRAN调用模式)每一次新的函数是研究。
3.2 运行在数据驱动模式Minuit。
Minuit可以运行在两种不同的模式:数据驱动模式意味着用户驱动Minuit数据,要么交互式输入从一个终端或批量数据文件;和FORTRAN调用莫德意味着Minuit直接驱动的FORTRAN子程序调用,无数据。在某种程度上,这两种模式也可以混合。本节描述了第一个模式,并且对于两者都是有效的主动批处理。交互和批处理之间的差异在下面的单独部分中描述。
在数据驱动的方式,用户必须提供,除了子程序函数,主程序包括以下语句(大写的陈述是有要求的,那些低的CASE是可选的):
函数名称可以自由选择,并传达到Minuit作为其第一个参数。futil是一个函数或子程序,用户可以调用从FCN的总称,如果他并称这样的套路,他必须声明它的外部沟通其名称,Minuit也。如果futil是不能用的,然后第二个参数可能会等于0,而不需要声明外L;如果futil声明外,必须在加载过程中提供。
行动:mintio的目的是沟通,Minuit I/O单元。
输入参数
读我读语言单元数(默认为5)。
我写FORTRAN单元数(默认为6)。
我省节约FORTRAN单元数(默认为7)。
如果默认值是可以接受的,那么就没有必要叫mintio。这是用户的责任,I / O单元被适当地打开适当的操作。
注意:
在数据驱动模式中,即调用Minuit,您不应该调用mninit,因为Minuit负责所有初始化。要更改单位号码,请在致电Minuit之前致电民提哦。
为了使控制在调用Minuit之后返回到用户程序,应该返回科尔数据块中的最后一个命令。如果最后一个命令是退出或停止,则Minuit将执行一个fortran停止,如果最后一个命令结束,Minuit将从当前输入单元读取一个新的数据块。
3.2.1数据驱动Minuit
在数据驱动模式中,交互或成批读取用户提供的以下数据:
-标题: ( 50个字符或更少)可由用户自由选择,以帮助识别作业。
-参数定义:对于每个参数,一个记录给出:
( 1 )参数编号。这是数组xval中的索引,用户函数fcn将访问参数的值。
( 2 )参数名称。一串十个字符,帮助用户读取Minuit输出。
( 3 )参数的起始值。
( 4 )如果要成为可变参数,此参数的起始步长大小或预期不确定度。如果值为常数,则为空白或为零。
optionalthe下界(极限) ,其参数值不能变化。
optionalthe上限(极限)以上,参数值不能变化。
通常,用户不应指定参数的限制,这两者都应该留空。如果指定了一个限制,则必须指定两个限制。本文档的其他部分解释了限制的属性。
参数定义的格式可以是固定字段(宽度为十列的每个项),也可以是自由字段格式。在自由字段格式中,项目用空格或一个逗号分隔,参数名称必须在单引号之间。如果在行中找到两个单引号,程序将采用自由字段格式。参数名称将是空白-填充或被截断为10个字符长。
空白记录:指示参数定义的结束。
—如果用户fcn从与Minuit数据相同的输入流中读取输入数据(默认流为第5单元),则应在此处显示fcn数据。
-Minuit命令:这些命令指定应该由Minuit执行的操作。命令不能包含前导或嵌入的空格,但可以被截断为三个字符,并且可以在大写或小写。某些命令具有数值参数,这些命令可以以自由字段格式提供,以空格或一个comma1分隔。已识别的命令列表给出并解释如下。命令帮助使Minuit向输出流写入当前已识别的命令的列表。命令帮助显示列出可用的集合和show命令。
Minuit读取的所有以上数据都可以驻留在一个或多个不同的文件上,并且可以指示Minuit切换到使用集输入命令读取不同的文件。可选地,标题记录可以由以字符集标题开头的记录被重新标记,并且参数定义可以被以字符参数开头的记录重新标记。事实上,建议在准备数据文件时要始终包括这些可选记录,因为文件可以随时(而不是在Minuit运行的开头)读取,并且总是由Minuit正确地解释。
3.2.2批量交互运行。
在其初始化阶段,Minuit试图通过调用逻辑函数intrac来确定它是否以交互方式运行,它是欧洲核子研究中心程序库中的例程,可以为所有常用的计算机提供。为了我们的目的,我们定义“交互运行”,作为意义,输入来自在智能的控制下的终端,能够基于他在终点站收到。intrac并不总是很容易知道这是否是事实,因此,根据您的操作系统,Minuit在某些情况下可能被愚弄。当发生这种情况时,用户总是可以通过命令集批处理和设置交互来覆盖intrac的信念。命令显示交互通知用户当前模式。
根据是否相信它以交互方式运行,Minuit在以下方面的行为方式不同:
-如果交互,则在读取每个数据记录之前提示用户。
–如果交互,Minuit可以从许多误差条件中恢复,并提示用户输入正确的数据或指定其他必需的输入。如果相同的误差条件以批处理模式发生,程序将退出(如果没有纠正操作似乎可能)或忽略误差的数据(例如,它无法解释的命令)并继续。
-输出的默认页面大小为典型的终端dimension ( 80 by 24 )如果交互,如果批处理,典型的打印页面大小( 120 by 56 ) ,但是这些可以通过命令集覆盖。
宽度和设置线。
当交互式用户请求Minuit从外部文件(设置命令)进一步读取输入时,则进一步输入被视为临时以批处理模式,直到输入恢复到主输入流。
3.3运行FORTRAN调用模式Minuit。
以下Minuit子程序是为了让用户沟通并执行所有功能(Minuit Minuit定义参数,执行命令,等)直接从Fortran T通过子程序调用。以下列表中的子程序,输出参数是通过添加一个明星的名字显示。还应指出的是,对于双精度版本Minuit(建议所有32位机如IBM,VAX UNIX工作站等),所有真正的辩论下面必须声明双精度。
3.3.1mninit:初始化Minuit
输入参数:
输入到Minuit单位数。
输出从Minuit语音单元数。
IsaV单元数为使用保存命令。
3.3.2 mnseti:指定一个问题标题
输入参数:
ctitle字符串包含目前的工作识别文本最多50个字符或适合。
3.3.3 mnparm:定义一个参数,指定值的变量
输入参数:
Num参数由用户函数引用。
chnam字符最多10个字符的字符串包含指定给定参数的用户的名称。
stval起始值
步进步长或近似参数误差。
bnd1下界(极限)参数值,如果有(见下文)。bnd2上限(下限)参数值,如果有(见下文)。
输出参数:
ierflg返回误差代码:0如果没有误差,gt; 0如果请求失败。
如果bnd1 = bnd2 = 0,则参数是无界的,它是建议除非需要限制,使事情表现好。
3.3.4 mnpars:定义一个参数,指定值的字符串
输入参数:
chstr字符串指定通常在Minuit格式的参数定义,如在数据记录(见3.2.1)。领域是在相同的顺序来mnparm参数
输出参数:
icondn输出条件
输出条件的可能值:
icondn = 0的所有好
icondn = 1误差,尝试定义参数被忽略
icondn = 2端参数定义(参数数量为零)
3.3.5 mnexcm:执行Minuit命令
输入参数:
的功能分析(FCN名字被宣布外)
chcom字符串包含要执行的Minuit命令的名称(见下文)。arglis尺寸maxarg数组,包含数字命令参数(如果有的话),narG数
一个叫fcn函数futil名称(或= 0如果不使用)。如果使用此功能必须声明
外部。
输出参数:
ierflg返回误差代码:0如果命令执行正常,大于0则。
执行命令的调用mnexcm具有完全相同的效果,阅读的数据驱动模式相同的命令,除了几个命令将毫无意义,是不是可以在Fortran马蹄莲双模式(例如设置输入)。另一个差异是,控制返回到调用程序mnexcm,即使命令结束,退出,停止。
警告:如果只有一个参数,arglis可以给出一个数值不变,但如果你这样做,确保恒定是正确的数据类型,例如0.5d0,不是0.5,如果你在乌苏双精度模式。为了避免这个问题,可以使用mncomd反而更方便
mnexcm。
3.3.6 mncomd:执行一个指定为字符串Minuit命令
子程序mncomd原因的Minuit命令指定作为第二个参数执行。因此,就像mnexcm,除了它接受的参数为一个字符的命令字符串。这在许多情况下更方便,避免了字长匹配问题(双精度常数)。
输入参数:
的功能分析(FCN名字被宣布外)chstr论据充分Minuit命令(字符)
一个叫fcn函数futil名称(或= 0如果不使用)。如果使用此功能必须声明
外部。
输出参数:
icondn返回误差代码:0如果命令执行正常,大于0则。
一些异常情况:
icondn = 1指挥是空白的,忽略
icondn = 2命令行是不可读的,忽略
icondn = 3命令是未知的,忽略
icondn = 4异常终止(例如,migrad不收敛)
3.3.7 mnpout:得到一个参数的当前值
输入参数:
Num参数作为参考用户在FCN和有关信息是必需的。
输出参数:
chnam字符最多10个字符的字符串包含指定给定参数的用户的名称。
瓦尔电流参数值(如果合适的拟合值收敛),参数不确定性误差电流估计(或零如果常数)bnd1下限参数值,如果有任何(或零)。
bnd2上限参数值,如果有任何(或零)。
ivarbl内部参数个数,如果参数是可变的,或零,如果参数是恒定的,或否定如果参数是未定义的。
3.3.8 mnstat:得到最小化的现状
输出参数:
Fmin迄今发现的最好的功能价值
—估计剩余的最小垂直距离
errdef上定义的参数不确定性的价值
npari目前可变参数的数量
nparx最高(外)由用户定义的参数数量
国家地位的整数,协方差矩阵是多么好:
0根本不计算
1对角线近似,不准确
2全矩阵,但强制正定
3全面准确的协方差矩阵(后migrad,这是正常的收敛,指示)
3.3.9 mnemat:得到的协方差矩阵的电流值
输入参数:
ndim整型变量指定的行数和列数的夏天已经保留在EMAT存储矩阵元素。ndim至少应在可变参数的数量大通话时间,否则用户只会得到部分全矩阵。
输出参数:
EMAT数组声明为维EMAT(ndim,ndim)这是充满(外部)的协方差矩阵。
3.3.10 mnerrs:访问当前参数误差
输入参数:
Num参数。如果num gt; 0,这是一个外部参数;如果num<0,这是一个内部参数的负。
输出参数:
正羽正米诺斯误差参数的eminus负米诺斯误差(负数)。
eparab“抛物线”参数误差的误差矩阵。
glo
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[26276],资料为PDF文档或Word文档,PDF文档可免费转换为Word
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
