matlab - 使用递归 MATLAB 函数还是优化?

标签 matlab recursion nonlinear-optimization

我正在尝试确定最有效且最精确的方法来计算名为 R 的值,该值只能取 01< 之间的值。现在我在下面的脚本中使用了以下函数,但我觉得我正在以非最佳方式执行此操作。目前,我得到了一个答案,并且必须(再次)提供该答案作为最初的“猜测”,以获得(下一个)最佳答案。我可以为此构建一个更好的递归或者使用 Matlab 的求解器之一吗?谢谢!

功能:

function f = Rfind(p,u,R)
    f = p .* (R.^u);
end

脚本:

R = 0.999995753651217; % initial guess
matches = false;
while ~matches && R < 1
    R = R + 0.0000000000000000001; % increment R for next guess
    Jtotal = sum(Rfind(p,u,R)); % find R
    if abs(Jtotal - R)*10000000000 < 5 % check precision of result
        matches = true; % if R matches R fed to function, successful
    end
end
Jtotal

我想确定的是:

查找 R 的值,该值等于数组 p 乘以 R 的数组 u 次幂之和>。数组 p 和数组 u 都具有相同数量的元素,即各 12 行 1 列。我的函数计算每个 pu 行的 R,然后增加其猜测值以找到下一个最接近的匹配项。一旦达到精度限制或输入R和输出总计相同,它就会停止。

示例数据:

数组p

0.00000693
0.00000231
0.00001386
0.00000924
0.00041360
0.00461657
0.03085337
0.01595235
0.09614154
0.06832660
0.11103563
0.67262800

数组u

50000
500
50
25
10
7.5
5
3.5
2.5
1.25
1
0

重要:我需要为此提供最佳精度,但我不希望它像上面的扩展那样花费 10 分钟。

最佳答案

您可以使用fminbnd为此:

% first assign p and u
% define the function that you want to minimize:
Rfind = @(R) abs(sum(p.*(R.^u)) - R)
% set the tolerance to maximum:
options = optimset('TolX',eps); 
% find the value between 0 to 1 that minimize the function Rfind:
[R, err] = fminbnd(Rfind,0,1,options) 

并获取(在不到一秒的时间内):

R =
   0.999995761369809
err =
     9.196743366857163e-11

关于matlab - 使用递归 MATLAB 函数还是优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44292597/

相关文章:

matlab - 在 MATLAB 中使用 SVM 实现 HOG 特征

matlab - 如何链接 yyaxis 子图中的两个 y 轴?

python - 如何跟踪这个递归程序

c++ - vector 返回负大小 C++

julia - Julia 非线性最小二乘包中的 Levenberg-Marquardt

matlab - Matlab 函数的多个工具提示输入建议

python - 激活 MATLAB 后使用 MATLAB Engine for Python 时出现 EngineError : Transport stopped.

sql - 递归 CTE (T-SQL) 返回意外结果

r - R 中 optim() 的优化(L-BFGS-B 需要 'fn' 的有限值)

math - 如何结合多个目标进行优化?