首页 > 解决方案 > 寻找满足给定约束并在 MATLAB 中提供所需输出的数组的解决方案

问题描述

我正在处理的问题是我有一个测量了 versines 的数组:

EV = [0 2 -2 6 2 8 4 8 6 4 8 10 10 6 8 10 4 18 0 6 4 8 9 4 -4 6 16 4 -2 -2 -4 -6 -14 1 2 -2 -12 -8 -10 -14 -14 -18];

我需要优化这个数组,以产生更平滑的结果,减少尖峰,这将是第二个数组。但是,第二个数组需要有一定的规则,只是随机使它更平滑是行不通的,因为以下等式控制着由此计算的其他参数:

d(1,1) = 0;
ED(1,1) = 0;
M(1,1) = 0;
S(1,1) = 0;
d(1,i) = DV(1,i)-EV(1,i);
ED(1,i) = ED(1,i-1) + d(1,i-1);
M(1,i) = ED(1,i) + M(1,i-1);
S(1,i) = -2*(ED(1,i-1)+DV(1,i-1)-EV(1,i-1)+M(1,i-1));

DV 是我需要创建的第二个(优化/平滑)数组,它必须由整数组成。各个参数的结果取决于先前的值。例如:

ED(1,2) = ED(1,1) + d(1,1) 
M(1,2) = ED(1,2) + M(1,1)
S(1,2) = -2*(ED(1,1)+DV(1,1)-EV(1,1)+M(1,1))

我需要创建第二个数组,使得 S 的最后两个值是 0 所以: S(1,42) = 0 && S(1,41) = 0;

我首先尝试通过计算不同的排列来解决这个问题,但由于元素数量众多,这是不可能的。Mathworks 的一位研究员提出了一个使用 MATLAB 优化工具箱的解决方案。但是,如果我按照他的建议设置方程,它不会平滑原始数据并且它们有很多尖峰。另一种解决方案是使用最小二乘法,但这种方法以及第一种方法实际上不会产生整数,这是一个问题。有没有办法可以做到这一点?

非常感谢

标签: arraysmatlaboptimizationleast-squares

解决方案


推荐阅读