matlab - 多次使用 Polyval 函数的性能改进

标签 matlab performance polynomial-math

我有一个关于在 Matlab 中使用 polyval 函数的简单性能问题。

目前,我有一个可能很长的 x 向量(>1000 个标量)。我想对每个 x 应用不同的多项式形式。

多项式形式存储在二维数组中,并应用在循环中,如下面的代码所示。由于 Polyval 已经过优化,代码相对较快,但循环可能会很长,而且性能至关重要,因为它是一个目标函数,可以在一个过程中计算数千次。

关于如何提高性能有什么想法吗?

谢谢

% ---------- Objective Function ------------------
function [obj] = obj(x, poly_objective)
    polyvalue = zeros(length(x),1);
    for index = 1: length(x)
        polyvalue (index) = polyval(poly_objective(index,:), x(index));
    end
    obj= -sum(polyvalue );
end
% -------------------------------------------------

最佳答案

您可以手动线性化 for 循环,下面是一个示例:

p = [3,2,1;  
     5,1,3];           %polynomial coeff
x = [5,6].';           %the query points
d = size(p,2)-1:-1:0;  %the power factors
res = sum(x.^d.*p,2);  %process all the polynome without for loop.

res =

    86
   189

此外,如果您要评估您可以使用的每个多项式的每个 x 值:

res = x.^d*p.'; %using only matrix multiplication

res =
       p1    p2
x1     86    133
x2     121   189

关于matlab - 多次使用 Polyval 函数的性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951217/

相关文章:

performance - 计算每条指令的周期

javascript - 如何将等式中的多项式项移到一边?

c++ - 在 MatLab 中读取二进制文件

c - 当递归也使用堆栈时,使用堆栈而不是递归如何在 C 中提供更好的性能?

matlab - 通过 COM 端口的多个变量

windows - 与 GUI 应用程序相比,相同的代码作为 Windows 服务运行得更慢

用于根据一组点估计多项式的 Java 库

java - 添加存储为链表的两个多项式

Matlab:使绘图中的网格对数

arrays - 查找两个数组之间的(多集)差异