【问题标题】:Is there any way to add perturbation to a variable in Matlab?有什么方法可以在 Matlab 中为变量添加扰动?
【发布时间】:2011-04-30 22:27:44
【问题描述】:

我有一个名为A101x82 大小矩阵。我试图最小化目标函数obj_fun,其值是使用A 间接计算的。

现在为了最小化这个目标函数obj_fun,我需要扰动A 的值。我想检查obj_fun 的值是否下降。如果不是,那么我需要对A 的值进行扰动/更改到某个百分比,以使其最小化obj_fun。继续扰动/改变A 的值,直到我们得到最小值obj_fun。在任何扰动之前,我的 A 平均值约为 1.1529e+003。

有没有人建议我该怎么做?另外,我有点关心速度,即方法/算法不应该太慢。谢谢。

【问题讨论】:

    标签: matlab minimize


    【解决方案1】:

    你可以给A添加随机高斯噪声:

    A = 0; % seed value for A with something more interesting than 0
    best = obj_fun(A);
    
    for iter = 1:max_iter % max_iter should be the maximum number of iterations
      newA = A + normrnd(0, 1, size(A));
      newObj = obj_fun(A);
      if( newObj < best )
        best = newObj;
        A = newA;
      end
    end
    

    【讨论】:

    • normrand 未显示为正确的函数 - normrand not found。另外,我想扰动A 的值,使得结果值的大小也接近A。我A的平均值是~1.1529e+003
    • 我的错,应该是normrndnormrnd 的前两个参数分别是您想要生成的扰动的平均值和标准差。如果您需要扰动以平均获得该值,则可以将示例中的 0 更改为 1.1529+003
    • 对了,你需要统计工具箱:mathworks.com/help/toolbox/stats/normrnd.html
    猜你喜欢
    • 2019-09-20
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多