上一页:液压制动1向上:../minpack.html下一步:hybrj1型


HYBRJ公司。

第1页MINPACK子程序HYBRJ的文档双精度版本阿贡国家实验室伯顿·S·加博(Burton S.Garbow)、肯尼思·希尔斯特罗姆(Kenneth E.Hillstrom)、豪尔赫·莫尔(Jorge J.More)1980年3月1.目的。HYBRJ的目的是找到N非-N变量线性函数的鲍威尔修正混合方法。用户必须提供一个计算-更新了函数和雅可比。2.子程序和类型语句。子程序HYBRJ(FCN、N、X、FVEC、FJAC、LDFJAC,XTOL、MAXFEV、DIAG、,*模式、因子、NPRINT、INFO、NFEV、NJEV、R、LR、QTF、,*WA1、WA2、WA3、WA4)整数N、LDFJAC、MAXFEV、MODE、NPRINT、INFO、NFEV、NJEV、LR双精度XTOL,系数双精度X(N)、FVEC(N)和FJAC(LDFJAC,N)、DIAG(N),R(LR)、QTF(N*WA1(N)、WA2(N)、WA3(N)、WA4(N)3.参数。指定为输入参数的参数必须指定在进入HYBRJ,退出时不更改,而参数指定为输出参数不需要在条目中指定和设置为退出HYBRJ时的适当值。FCN是用于计算的用户提供的子例程的名称函数和雅可比矩阵。FCN必须在用户调用程序中的EXTERNAL语句,应该是编写如下。子程序FCN(N、X、FVEC、FJAC、LDFJAC和IFLAG)整数N、LDFJAC、IFLAG双精度X(N)、FVEC(N)和FJAC(LDFJAC,N)----------如果IFLAG=1,计算X和的函数以FVEC形式返回此向量。请勿更改FJAC。如果IFLAG=2,计算X处的雅可比矩阵在FJAC中返回此矩阵。请勿更改FVEC。----------返回结束第2页FCN不得更改IFLAG的值,除非用户希望终止HYBRJ的执行。在这种情况下,设置IFLAG设置为负整数。N是一个正整数输入变量,设置为函数和变量。X是一个长度为N的数组。输入X必须包含一个初始值解向量的估计。输出X包含解向量的最终估计。FVEC是长度为N的输出数组,包含函数在输出X处进行评估。FJAC是一个输出N by N数组,其中包含正交最终近似值的QR分解产生的矩阵Q-伊玛特·雅各布。第6节包含有关雅可比近似。LDFJAC是一个不小于N的正整数输入变量其指定阵列FJAC的前导维度。XTOL是一个非负输入变量。终止发生于两个连续迭代之间的相对误差最多为XTOL公司。因此,XTOL测量近似解。第4节包含更多详细信息关于XTOL。MAXFEV是一个正整数输入变量。发生终止当IFLAG=1的FCN呼叫次数达到时MAXFEV公司。DIAG是一个长度为N的数组。如果MODE=1(见下文),则DIAG为内部设置。如果MODE=2,DIAG必须包含正极用作变量。MODE是一个整数输入变量。如果MODE=1,变量将在内部缩放。如果MODE=2,缩放比例为speci-由输入DIAG确定。MODE的其他值等效模式=1。FACTOR是用于确定ini的正输入变量-tial阶跃界限。此界限设置为FACTOR的乘积和DIAG*X的欧几里德范数(如果非零),或到FACTOR自身。在大多数情况下,FACTOR应位于区间(.1,100.).  100.是一个通常推荐的值。NPRINT是一个整数输入变量,用于启用受控如果为正,则打印迭代。在这种情况下,FCN是在第一次迭代开始时使用IFLAG=0调用以及此后和之前的每个NPRINT迭代返回,X和FVEC可用于打印。FVEC和FJAC不应更改。如果NPRINT不为正,则为否第3页对IFLAG=0的FCN进行特殊调用。INFO是一个整数输出变量。如果用户已终止执行时,INFO被设置为IFLAG的(负)值。请参见FCN的描述。否则,INFO设置如下。INFO=0输入参数不正确。INFO=1两次连续迭代之间的相对误差为最多XTOL。INFO=2已达到IFLAG=1的FCN呼叫次数MAXFEV公司。INFO=3 XTOL太小。没有进一步改进近似解X是可能的。信息=4迭代没有取得良好的进展根据最近五次雅可比估值的改进-评估。信息=5迭代没有取得良好的进展通过最近十次迭代的改进。第4节和第5节包含有关INFO的更多详细信息。NFEV是设置为调用次数的整数输出变量IFLAG=1的FCN。NJEV是设置为调用次数的整数输出变量IFLAG=2的FCN。R是长度为LR的输出数组,其中包含三角矩阵的QR分解最终近似雅可比矩阵,按行存储。LR是一个不小于(N*(N+1))/2。QTF是包含向量的长度为N的输出数组(Q转置)*FVEC。WA1、WA2、WA3和WA4是长度为N的工作数组。4.成功完成。HYBRJ的精度由收敛参数控制XTOL公司。此参数用于进行比较的测试在近似值X和解XSOL之间。HYBRJ术语-当测试满足时,显示。如果收敛参数小于机器精度(由MINPACK定义函数DPMPAR(1)),则HYBRJ仅尝试满足由机器精度定义的测试。没有取得进一步进展第4页通常是可能的。该测试假设函数和雅可比矩阵是编码的并且功能相当好表现良好。如果不满足这些条件,则HYBRJ可以错误地指示收敛。雅可比矩阵的编码可以通过MINPACK子例程CHKDER进行检查。如果Jaco-bian的编码正确,那么答案的有效性可以是例如,通过以更严格的公差重新运行HYBRJ进行检查-安斯。收敛测试。如果ENORM(Z)表示向量Z和D是对角矩阵,其条目为由数组DIAG定义,然后此测试尝试保证-穿那个ENORM(D*(X-XSOL))。拉丁美洲。XTOL*ENORM(D*XSOL)。如果XTOL=10**(-K)满足此条件,则D*X的较大分量有K个有效十进制数字INFO设置为1。有一种危险是,较小的化合物-D*X的分数可能有较大的相对误差,但速度较快HYBRJ的收敛性通常可以避免这种可能性。除非需要高精度解决方案,否则建议XTOL的值是机器精度的平方根。5.未成功完成。HYBRJ未成功终止可能是由于输入不当参数、算术中断、函数过多-或者缺乏良好的进展。输入参数不正确。如果为N,则INFO设置为0。拉丁美洲。0,或LDFJAC公司。LT.N或XTOL。LT.0.D0或MAXFEV。拉丁美洲。0,或因素。拉丁美洲。0.D0或LR。长期(N*(N+1))/2。算术中断。如果FCN中出现这些中断在计算的早期阶段,它们可以由HYBRJ不可接受的X选择导致。在此在这种情况下,可以通过重新运行来纠正这种情况HYBRJ的FACTOR值较小。函数求值次数过多。合理的价值MAXFEV为100*(N+1)。如果使用IFLAG=1达到MAXFEV,则表示例程从FVEC的进展来看,收敛非常缓慢,INFO设置为2。这种情况应该是不寻常的因为,如下所示,缺乏良好的进展通常是HYBRJ提前诊断,导致INFO=4终止或者INFO=5。缺乏良好的进展。HYBRJ搜索系统的零点通过最小化函数的平方和。在so中第5页这样,它可能会被困在一个最小不对应于系统的零点,在此位置-迭代最终未能取得良好的进展。特别是,如果系统没有零。如果系统为零,则从dif重新运行HYBRJ-不同的起点可能会有所帮助。6.算法的特点。HYBRJ是鲍威尔混合方法的改进。它的两个主要特征包括选择作为牛顿和比例梯度方向的凸组合,以及用Broy的秩1方法更新雅可比矩阵-兽穴。纠正保证的选择(在合理的情况下条件)远离解决方案和快速收敛速度。雅可比公式-在起始点延迟,但直到秩1方法未能产生令人满意的进展。时间安排。HYBRJ解决给定问题所需的时间取决于N、函数的行为、精度请求和起点。算术数HYBRJ需要处理的操作约为11.5*(N**2)函数的每次评估(使用IFLAG=1调用FCN)和1.3*(N**3)处理雅可比矩阵的每次评估(调用FCN,IFLAG=2)。除非可以评估FCN很快,HYBRJ的时机将受到以下因素的强烈影响在FCN中花费的时间。储存。HYBRJ要求(3*N**2+17*N)/2双精度存储位置,以及程序。没有内部声明的存储阵列。7.所需子程序。用户提供。。。。。。FCN公司MINPACK提供。。。小狗、DPMPAR、ENORM,QFORM、QRFAC、R1MPYQ、R1UPDTFORTRAN提供。。。DABS、DMAX1、DMIN1、DSQRT、MIN0、MOD8.参考文献。M.J.D.Powell,非线性方程的混合方法。非线性代数方程的数值方法,P.Rabinowitz,编辑。Gordon和Breach,1970年。9.示例。第6页问题是要确定x(1),x(2),…,的值。。。,x(9),解三对角方程组(3-2*x(1))*x(一)-2*x(2)=-1-x(i-1)+(3-2*x(i))*x(i)-2*x(i+1)=-1,i=2-8-x(8)+(3-2*x(9))*x(九)=-1C类**********C类HYBRJ示例的C驱动程序。C双精度版本C类C类**********INTEGER J、N、LDFJAC、MAXFEV、MODE、NPRINT、INFO、NFEV、NJEV、LR、NWRITE双精度XTOL,系数,FNORM双精度X(9)、FVEC(9),FJAC(9,9)、DIAG(9)和R(45)、QTF(9,*WA1(9)、WA2(9),WA3(9)和WA4(9)双精度环境,DPMPAR外部FCNC类逻辑输出单元假定为6号。C类数据NWRITE/6/C类N=9C类C以下起始值提供了一个粗略的解决方案。C类DO 10 J=1,9X(J)=-1.D010继续C类LDFJAC=9LR=45C类C将XTOL设置为机器精度的平方根。C除非需要高精度解决方案,C这是建议的设置。C类XTOL=DSQRT(DPMPAR(1))C类最大FEV=1000模式=2DO 20 J=1,9诊断(J)=1.D020继续系数=1.D2NPRINT=0C类致电HYBRJ(FCN、N、X、FVEC、FJAC、LDFJAC,XTOL、MAXFEV、DIAG、,*模式、因子、NPRINT、INFO、NFEV、NJEV、R、LR、QTF、,*WA1、WA2、WA3、WA4)FNORM=环境(N,FVEC)写入(NWRITE,1000)FNORM,NFEV,NJEV,INFO,(X(J),J=1,N)第7页停止1000格式(5X,31H残留物最终L2标准,D15.7//*5X,31H功能评估次数,I10//*5X,31H雅各布评估次数,I10//*5X,15H出口参数,16X,I10//*5X,27H最终近似解//(5X,3D15.7))C类C HYBRJ示例的最后一张驾驶员卡。C类结束子程序FCN(N、X、FVEC、FJAC、LDFJAC和IFLAG)整数N、LDFJAC、IFLAG双精度X(N)、FVEC(N)和FJAC(LDFJAC,N)C类C HYBRJ示例的子程序FCN。C类整数J,K双精度一,温度,温度1,温度2,三,二,零数据零、一、二、三、四/0.D0,1.D0,2.D0,3.D0、4.D0/C类如果(IFLAG.NE.0)转到5C类当NPRINT为正值时,在此处插入打印声明。C类返回5继续如果(IFLAG.EQ.2)转到20DO 10 K=1,N温度=(三-二*X(K))*X(K)温度1=零如果(K.NE.1)温度1=X(K-1)温度2=零如果(K.NE.N)温度2=X(K+1)FVEC(K)=温度-温度1-二*温度2+一10继续转到5020继续DO 40 K=1,NDO 30 J=1,NFJAC(K,J)=零30继续FJAC(K,K)=三-四*X(K)IF(K.NE.1)FJAC(K,K-1)=-一如果(K.NE.N)FJAC(K,K+1)=-240继续50继续返回C类C子程序FCN的最后一张卡片。C类结束使用不同编译器或机器获得的结果可能略有不同。第8页残渣最终L2标准0.1192636D-07功能评估次数11雅各布评估数量1退出参数1最终近似解-0.5706545D+00-0.6816283D+00-0.7017325D+00-0.7042129D+00-0.7013690D+00-0.6918656D+00-0.6657920D+00-0.5960342D+00-0.4164121D+00