怎样使计算结果的目标函数值为零?
用1stopt做解方程组的计算时,结果总是不为零,最好的结果也只是0.04,希望在此能请教大家两个问题:1.请问哪一种计算方法更适合于解方程组更呢?按使用手册的说明,我把适用于解方程的几种计算方法都试了一遍,可还是不行。而且发现使用“简面体爬山法”时,若是以“允许误差/迭代次数“1E-10”为收敛判定条件,计算的就很快,但目标函数值却很大,有时是十几左右。若是以"最小残差小于1E-10"为条件,计算的就很慢,目标函数值虽然不为0,但会相对小一些,请问这二者有什么区别呢?
2.在一定计算方法中,是不是把“判断指标”的精度提高,就一定可以使计算的目标函数为零0呢?现在的计算中,已经将其值设为1E-30,可还是不行,那么应该多大合适呢?
谢谢大家。
把代码放上来! 本帖最后由 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:43 编辑
你能确保这50个公式在限定的参数范围内每个等式两边恒等从而使目标函数为0吗?用最新版算的最小值为0.006,太费时间,如果继续,也许还会更小一些。
页:
[1]