meconglin 发表于 2011-6-16 09:37

怎样使计算结果的目标函数值为零?

    用1stopt做解方程组的计算时,结果总是不为零,最好的结果也只是0.04,希望在此能请教大家两个问题:

    1.请问哪一种计算方法更适合于解方程组更呢?按使用手册的说明,我把适用于解方程的几种计算方法都试了一遍,可还是不行。而且发现使用“简面体爬山法”时,若是以“允许误差/迭代次数“1E-10”为收敛判定条件,计算的就很快,但目标函数值却很大,有时是十几左右。若是以"最小残差小于1E-10"为条件,计算的就很慢,目标函数值虽然不为0,但会相对小一些,请问这二者有什么区别呢?

    2.在一定计算方法中,是不是把“判断指标”的精度提高,就一定可以使计算的目标函数为零0呢?现在的计算中,已经将其值设为1E-30,可还是不行,那么应该多大合适呢?

    谢谢大家。

dingd 发表于 2011-6-19 19:28

把代码放上来!

meconglin 发表于 2011-6-20 15:19

本帖最后由 meconglin 于 2011-6-20 15:21 编辑

回复 2 # dingd 的帖子

谢谢dingd主任,程序如下:
Parameter   x1[-1,0],x2 ,x3[-1,0],x4, x5[-1,0],x6, x7 ,x8 ,x9 ,
                  x10=500e-6,
                  x11,x12,x13[-1,0],x14,x15[-1,0],x16,x17,x18,x19,x20,x21,
                  x22=200e-6 ,
                  x23,x24,x25,x26,x27,x28,x29[-1,0],x30,x31,x32,x33,
               x34,x(35:37),
                  x38=4000,x39=2500,x40,x41[-1,0],x42,x43,x44,
                  Y(1:6);
Constant      P=68 , Ramb=1000e-06,
            Rsurf=100e-06 , Tamb=2550,TCZ=4000 ,T=298.15,
            rod=0.36, bet=0.03,   la=0.6,         
            hsCO=-3950 ,hsCO2=-8950 , hsH2=0 ,hsH2O=-13443.9,
            hsAl2O= -1954.3 , hsAl= 12005.2,   hsAlxOx = -2848.6,
            CpsCO=1.04, CpsCO2=0.84, CpsH2=14.43 , CpsH2O=1.87 , CpsAl2O=0.62, CpsAl=0.79,
            CpsAlxOx = 0.63,CpCO=1.39,CpCO2=1.53, CpH2=17.6 , CpH2O=2.98 , CpAl=0.77,CpAlxOx=0.95,   
               hAl2O3TCZ= -10447 , hAlTsurf = 2765.2,
            aco=-4260.076, aco2=-9200.45, ah2=-4302.3, ah2o=-14001.44, aalxox=-3036.43,
            aal2o=-2139.15,aal=11775.62, aalo=1812.5,
            hAl2O3Tsurf=-11153.2, CpAl2O=0.83, CpAlO=0.9;   
Function    x1*(1/x10-1/Ramb)/(4*pi*rod*(1-bet)) = Ln ((x1*0.18-x2)/(x1*x6-x2));   // 1
             x1*(1/x10-1/Ramb)/(4*pi*rod*(1-bet)) = Ln ((x1*0.174-x3)/(x1*x7-x3));       // 2
             x1*(1/x10-1/Ramb)/(4*pi*rod*(1-bet)) = Ln ((x1*0.008-x4)/(x1*x8-x4));       // 3
             x1*(1/x10-1/Ramb)/(4*pi*rod*(1-bet)) = Ln ((x1*0.27-x5)/(x1*x9-x5));         // 4

             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln ((x11*x6-x12)/(x11*x18-x12));    // 5
             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln ((x11*x7-x13)/(-x13));                  // 6
             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln ((x11*x8-x14)/(x11*x19-x14));    // 7
             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln ((x11*x9-x15)/(-x15));                  // 8
             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln (-x16/(x11*x20-x16));                   // 9
             x11*(1/x22-1/x10)/(4*pi*rod*(1-bet)) = Ln (-x17/(x11*x21-x17));                   //10

             x23*(1/Rsurf-1/x22)/(4*pi*rod*(1-bet)) = Ln (x18/x24);                                 // 11
             x23*(1/Rsurf-1/x22)/(4*pi*rod*(1-bet)) = Ln (x19/x25);                                 // 12
         x23*(1/Rsurf-1/x22)/(4*pi*rod*(1-bet)) = Ln ((x23*x20-x29)/(x23*x26-x29)); // 13
         x23*(1/Rsurf-1/x22)/(4*pi*rod*(1-bet)) = Ln ((x23*x21-x30)/(x23*x27-x30)); // 14
             x23*(1/Rsurf-1/x22)/(4*pi*rod*(1-bet)) = Ln (-x31/(x23*x28-x31));                // 15

             x1=x2+x3+x4+x5;                                 // 16
             x11=x12+x13+x14+x15+x16+x17;      // 17
             x23=x29+x30+x31;                              // 18

             1=x6+x7+x8+x9+x32;                           // 19
             1=x18+x19+x20+x21+x33;                  // 20
             1=x24+x25+x26+x27+x28+x34;            // 21
                     
             Y1=x2*CpCO+x3*CpCO2+x4*CpH2+x5*CpH2O;                                                         // 44
             Y3=x12*CpCO+x13*CpCO2+x14*CpH2+x15*CpH2O+x16*CpAlxOx+x17*CpAl2O;    // 45
             Y5=x29*CpAlO+x30*CpAl2O+x31*CpAl;                                                                        // 46
             Y2=x2*aco+x3*aco2+x4*ah2+x5*ah2o;                                                                     // 47            
             Y4=x12*aco+x13*aco2+x14*ah2+x15*ah2o+x16*aalxox+x17*aal2o;                        // 48
             Y6=x29*aalo+x30*aal2o+x31*aal;                                                                                  // 49
             Y1*(1/x10-1/Ramb)/(4*pi*(1-bet)*la) = Ln ((Y1*Tamb+Y2-x35)/(Y1*TCZ+Y2-x35));   // 22
             Y3*(1/x22-1/x10)/(4*pi*(1-bet)*la) = Ln ((Y3*TCZ+Y4-x36)/(Y3*x38+Y4-x36));         // 23
             Y5*(1/Rsurf-1/x22)/(4*pi*(1-bet)*la) = Ln ((Y5*x38+Y6-x37)/(Y5*x39+Y6-x37));         // 24

             x37=0.593*(x29*hAl2O3Tsurf)+x31*hAlTsurf;                           // 25
             x36=x37;                                                                                    // 26
             x35=x36-x40*hAl2O3TCZ;                                                         // 27   
             x2/28.011 = -x3/44.011;                                                            // 28
             x4/2.016 = -x5/18.016;                                                            // 29
             (x13-x3)/44.011 = (x2-x12)/28.011;                                       // 30   
             (x15-x5)/18.016 = (x4-x14)/2.016;                                          // 31   
             x16/86+x17/35=(x13-x3)/44.011 +(x15-x5)/18.016;               // 32   
             x40=(102/70)*x17+(102/86)*x16;                                           // 33
             x30=-(70/172)*x29;                                                                   // 34   
             x41=-1.6e-4;                                                                              //50
             x41=-x31;                                                                                 // 35   
             x42=(-102/172)*x29;                                                               // 36   
             x31/27=(x16-x29)/43;                                                                // 37   
             x30=x17;                                                                                    // 38   
             x31/27 = -x13/44.011-x15/18.016 ;                                          // 39   
             x43/(x43+x44) = 0.122+0.000577*(x38-3500);                        // 40   
            
             -x29=(3653*(Rsurf^2)*P*(1-bet)*x26/43)/((x39^0.5)*(x24/28.011+x25/2.016+x26/43+x27/70+x28/27+x34/33.28));          // 41   
             P*(x28/27)/(x24/28.011+x25/2.016+x26/43+x27/70+x28/27+x34/33.28)= exp(12.43-34680/x39);    // 42      
             x43+x44=x20;                                                                              // 43
         
            这个程序与原来dingd主任曾经回答的帖子里的方程是相同的(http://forum.vibunion.com/thread-103505-1-1.html),但我在定义参数时,设定了取值范围,其实原来的那个也没有出现目标函数值为0的结果,我用的是麦夸特法+全局通用算法——
            收敛指标:1E-50;重复数:400;控制迭代数:300;收敛判断迭代数:200,
            我用的是1.5pj版,请问是版本的问题么?还是我选的算法不好呢?

dingd 发表于 2011-6-20 17:39

本帖最后由 dingd 于 2011-6-20 17:43 编辑

你能确保这50个公式在限定的参数范围内每个等式两边恒等从而使目标函数为0吗?用最新版算的最小值为0.006,太费时间,如果继续,也许还会更小一些。
页: [1]
查看完整版本: 怎样使计算结果的目标函数值为零?