【问题标题】:Optimize Runtime in an Integral Based Algorithm in MATLAB在 MATLAB 中优化基于积分的算法的运行时间
【发布时间】:2020-11-25 18:34:44
【问题描述】:

我想在 MATLAB 中创建一个算法,它计算一个特定的函数,然后对其进行积分以获得一个特定的值。 “结果”的尺寸基于代码开头的“大小”参数。例如,如果 size = 100,则结果将是 100x100 矩阵。由于积分()函数的高维度大小和使用,运行时间变得很长。我认为,这主要是因为积分()函数的运行时间。有没有办法优化这个算法的运行时间。复杂性和内存使用不是问题,只需要改进运行时。

size = 100;

y = zeros(2,size);
y(1,:) = 10*(randn(1,size) + 1i*randn(1,size));
y(2,:) = randn(1,size) + 1i*randn(1,size);

result = zeros(size);

for j=1:size
    for i=1:size
        fun = @(x) sin(x)*(y(1,i)-y(1,j)) + cos(x)*(y(2,i)-y(2,j));
        result(i,j) = integral(fun,0,100);
    end
end

【问题讨论】:

    标签: matlab optimization runtime integral


    【解决方案1】:

    integral 大约 36% 的时间用于处理您没有使用的可选输入参数,因此您可以复制积分函数并将其重命名为 myintegral.m 之类的名称。然后您可以编辑新函数以消除这行代码:

    opstruct = integralParseArgs(varargin{:});

    如果您在上面的行之后设置断点,您可以获取 opstruct 的内容并将其硬编码到您的新函数中,这样您就可以节省解析参数的时间。通过将 opstruct 设为持久变量,您可以节省更多时间。

    【讨论】:

    • 我不明白。我应该从 for 循环中删除函数并定义为函数吗? opstruct = integralParseArgs(varargin{:}); 也在哪里?去?能详细解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多