meconglin 发表于 2011-7-4 11:26

如何在1stopt中实现顺序计算

       最近在算一个方程组,未知数并不是很多,如果按顺序计算可以很快得到正确的结果,但把几个方程放在一起,用1stiopt求解方程组的话,若不精确设定参数的初始值,最后的结果就会偏离很远,请问1stopt只能进行全局优化计算么?我用的是“麦夸特法(Levenberg-Marquardt) + 通用全局优化法”,如果换一种计算方法是不是可以实现不精确设定初始值而得到正确的解呢,如果可以的话,应该选则哪种方法使方程顺序计算呢?
方程组如下:
constant    x48=98.4,x46=2971,time=2e-3,mox=3.77e-7,x42=3.25e-5;
function   
               x58=mox+x42*time;                     // 1
               x58=x52*x46*1e-15;                  // 2
               x52=4*pi*(x49^3)/3-x51;             // 3
               x47=sqrt(x48^2+x49^2);             // 4      
               x51=pi*(x48+x49-x47)^2*(x47^2+2*x47*x49-3*x49^2+2*x47*x48+6*x49*x48-3*x48^2)/(12*x47); // 5

比较精确的解应该是:
               x47: 105.282661726041
               x49: 37.4416699819826
               x51: 66274.69708878
                x52: 153589.362371435
                x58: 4.42013158476194E-7
若设定参数初始值范围
Parameter   x47=110,x49=30,x51=65000,
                   x52=150000,x58;
是可以得到的,若不设定范围,计算的结果就会相差很远。而若根据已知参数,从方程1开始,把每一步计算得到的参数结果代入下一个方程逐个进行计算,也是可以得到上面的结果的,但实际的操作就变成了运行5次程序。
实际问题是打算用这个方程求解不用工况下的计算结果,而每次的初始值并不能事先精确计算出来,有什么办法可以运行一次程序就得到精确的解么?

dingd 发表于 2011-7-4 16:40

应该是有多解。

meconglin 发表于 2011-7-8 16:57

回复 2 # dingd 的帖子

谢谢dingd主任的回复,可是计算时若从方程1开始,把每一步计算得到的参数结果代入下一个方程,这样逐个进行计算,也是可以得到上面的结果的,所以原方程组应该不是有多解的呀。
页: [1]
查看完整版本: 如何在1stopt中实现顺序计算