我使用GAMS编写了一个简单的代码,该代码使用trapeziod集成确定滑翔机的最大作用范围。我想通过SImpson的集成重新创建相同的程序,但是,我无法理解结果。
这是带有梯形规则的功能代码:
private Map<Integer, Fragment> fragmentMap;
public RecordOrGalleryFragmentPagerAdapter(FragmentManager fm) {
super(fm);
this.fm = fm;
fragmentMap = new HashMap<Integer, Fragment>();
}
...
@Override
public Fragment getItem(int position) {
Fragment fragment = fragmentMap.get(position);
Log.i("test_fragment_inst", fragment+"");
if( position == 0 ) {
if(fragment == null) {
fragment = PicmixVideoGalleryChooserFragment.newInstance();
fragmentMap.put(position, fragment);
}
} else {
if(fragment == null) {
fragment = PicmixVideoRecordFragment.newInstance();
fragmentMap.put(position, fragment);
}
}
return fragment;
}
这是使用Simpson的有缺陷的产品:
$set n 50
set j /0*%n%/;
sets
jlast(j)
jnotlast(j);
jlast(j)$(ord(j)=card(j))=yes;
jnotlast(j)=not jlast(j);
scalar
n number of intervals /%n%/
m mass /5000/
S surface /21.55/
CD0 drag /0.023/
k ni idea /0.073/
hmax initial height /1000/
g gravity /9.81/
density density /1.225/
variable
gamma(j),
CL(j),
D(j),
CD(j),
L(j),
*x(j),
*y(j),
objective;
positive variable
x(j),
y(j),
v(j),
step;
equation
diffx(j),
diffy(j),
valueD(j),
valueL(j),
obj;
diffx[j]$(jnotlast(j)).. x[j+1]-x[j] =e=0.5*step*(v(j+1)*cos(gamma(j+1)) + v(j)*cos(gamma(j)) );
diffy[j]$(jnotlast(j)).. y[j+1]-y[j] =e=0.5*step*(v(j+1)*sin(gamma(j+1)) + v(j)*sin(gamma(j)) );
valueD[j].. m*g*sin(gamma(j))=e=0.5*density*S*v(j)*v(j)*(CD0+k*CL(j)*CL(j));
valueL[j].. m*g*cos(gamma(j))=e=0.5*density*S*v(j)*v(j)*CL(j);
obj .. objective =e= x('%n%');
x.fx('0') = 1.0e-12;
y.fx('0') = 1000;
y.fx('%n%') = 1.0e-12;
CL.up(j) =1.4;
y.up (j) = 1000;
gamma.up(j) = pi*0.5;
v.lo(j) = 1.0e-12;
y.lo(j) = 1.0e-12;
CL.lo(j) = 0;
gamma.lo(j) = 0;
model brahstron1 /all/;
option
nlp=ipopt;
solve brahstron1 using nlp maximize objective;
我所做的就是遵循这本书
使用非线性编程进行最优控制和估计的实用方法在第141页和第142页之间。由于我的控制未知,所以y_hat只是y_k + 1和y_k之和的平均值。在这些点上定义了变量D和L,然后在第141页中计算了y_k + 1-y_k的汇总方式。
但是,我没有看到如第一个代码中所示的变量,而是看到了一种怪异的循环。 This is my propper answer with trapezoid rule and this is my defective solution with Simpson's method。
非常欢迎提出关于我的一个或多个错误的所有建议。 感谢您的阅读。
答案 0 :(得分:0)
尝试了一段时间之后,我发现导致这些问题的原因是许可证问题。对代码进行简单的更改即可使其正常工作。
array.flat()