在GAMS中使用Simpson积分规则的问题

时间:2018-11-22 10:32:56

标签: gams-math simpsons-rule

我使用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

非常欢迎提出关于我的一个或多个错误的所有建议。 感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

尝试了一段时间之后,我发现导致这些问题的原因是许可证问题。对代码进行简单的更改即可使其正常工作。

array.flat()