使用线段逼近函数

计算科学 优化 matlab
2021-12-03 11:41:39

我需要使用线段来逼近一个函数,f = 1/x。x 的范围是从 1 到 2048,间隔为 1。我将为 x 选择 10 个位置,并使用线段在两个相邻 x 之间插入 y。预计插值和实际值之间的误差最小。我正在使用 MATLAB 来实现。

问题是选取的点是有序的。如果修改了拾取点,则两个拾取点之间的点将相应更改。我该如何为这种情况编写目标函数?

我没有使用 MATLAB 进行优化的经验。如何编写需要优化的目标函数?

1个回答

首先,我想提一下,您定义为“错误”的内容非常重要。您可以根据各种不同的规范或误差度量来获得误差估计,每一个都最有可能导致略有不同的解决方案。最优性将始终取决于误差/成本函数。

接下来,我个人将其表述为加权非线性最小二乘问题,其中用于插值的每个 x 点的位置是寻求使用标准加权最小二乘样式成本函数进行优化的向量的一部分。

我第一次尝试在这个公式中使用梯度下降,尝试了一些不同的猜测结果。当我将其插入数值算法时,我什至在尝试进行数值计算之前就提出了一个猜测,发现它大致是最优的。

这个次优解析解是:

x=e(as)

在哪里a=ln(2048), 和s[0,1]. 对于这个问题,选择 10 个等距的值s开始于s= 0 并结束于s= 1。这会生成一组 x 值,这些值随着 x 的增加而越来越分散。

现在,我用我所做的方法得到了一些非常有价值的结果,但我不确定它是否完全符合我所做的成本函数。我建议使用更全局的优化方法来解决这个问题,例如粒子群优化遗传优化等。

以下是一些可能有用的参考资料

基本的Lp规范信息

最小二乘信息