繁体   English   中英

多项式的最大值

[英]maximum of a polynomial

我有一个N阶多项式(其中N是偶数)。 对于x减/加无穷大,该多项式等于负无穷大(因此它具有最大值)。 我现在正在做的是通过使用polyder多项式的导数,然后通过使用Matlab中的roots函数找到N-1阶多项式的roots ,该函数返回N-1个解。 然后我选择真正最大化多项式的真根。 问题是我正在更新我的多项式,并且在每一步我使用上述过程来找到最大化器。 因此,root函数需要花费太多的计算时间才能使我的应用程序变慢。 有没有办法在Matlab或提出的算法中以计算有效的方式实现这种最大化(即只找到一个解决方案而不是N-1解决方案)? 谢谢。

编辑:我也想知道是否有在Matlab常规,只有返回,而不是真正根源roots返回所有实/复杂的。

我想你可能运气不好。 如果多项式的系数在每个时间步以任意方式改变,那么最终你在每个阶段都面临着一个独特且无关的优化问题。 没有足够的信息可以考虑计算导数多项式的根的子集 - 你怎么知道哪个导数根提供多项式的最大静止点而不比较所有导数根的函数值? 如果你的多项式系数在每一步都被一个(有界的)少量或以可预测的方式扰动,那么可以想象你能够尝试迭代来改进每一步的解决方案(例如粗略的这样的东西)使用你以前的根作为一组新的牛顿迭代的起点来识别更新的衍生根),但问题并不表明这实际上就是这样,所以我只是在猜测。 我可能在这里完全错了,但你可能只是运气不好,除非你能提供更多关于在每一步产生的多项式之间存在某种关系的信息。

史蒂夫莫里斯提交了一份文件交换提交文件 ,它在给定的时间间隔内查找所有函数的真正根源。 它通过用Chebychev多项式插值多项式并找到它的根来实现。

您可以修改eig同伴矩阵的评价那里, eigs 这使您可以只找到一个(或几个)的根,节省时间(有一个公平的机会,它也有可能来计算切比雪夫的根或极值分析 ,虽然我无法找到一个很好的参考(甚至是坏一件事......))。

你可以在加快速度方面做出的另一个尝试是注意polyderpolyder做什么

Pprime = (numel(P)-1:-1:1) .* P(1:end-1);

对于你的多项式P 此外, roots找到伴随矩阵的特征值,因此您可以自己找到这些特征值,从而阻止对roots的调用。 这可能都是有益的,因为在循环内调用非内置函数会阻止Matlab的JIT编译器将循环转换为机器语言。 否则,这可能会给你一个很大的速度增益(100或更多的因素并不罕见)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM