|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
最近在算一个方程组,未知数并不是很多,如果按顺序计算可以很快得到正确的结果,但把几个方程放在一起,用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[50,250],x49=30[0,200],x51=65000[2000,252000],
x52=150000[100000,45000000],x58[3.0e-7,3.77e-5];
是可以得到的,若不设定范围,计算的结果就会相差很远。而若根据已知参数,从方程1开始,把每一步计算得到的参数结果代入下一个方程逐个进行计算,也是可以得到上面的结果的,但实际的操作就变成了运行5次程序。
实际问题是打算用这个方程求解不用工况下的计算结果,而每次的初始值并不能事先精确计算出来,有什么办法可以运行一次程序就得到精确的解么?
|
|