如何在满足指定条件之前循环拟合 MATLAB 中的幂律模型?

How can I fit power law model in MATLAB in a loop until a specified condition is met?

所以我有两个向量:xy,每个都有 1800 个元素。我需要做的如下:

  1. xy = ax^b 之间拟合幂律y 考虑 xy 中的所有元素(即所有 1800 个元素)。
  2. 根据得到的幂律参数ab计算ypredicted
  3. 计算偏差 (= (ypredicted - y)/y *100)比较 ypredictedy 的最后一个元素。
  4. 再次拟合xy之间的幂律,但这次只使用的1到1799的元素]xy。重复步骤 2 和 3。
  5. 对元素 1 到 1798 重复步骤 4,依此类推,直到 xy 的元素 1 到 50 .

最后,我需要循环中使用的所有 x 值,产生的偏差在 2.98% 和 3.02% 之间。

这方面请帮忙。如果需要更多信息来解释问题,请发表评论。

%example data
a = 2;
b = 1.45;
x = linspace(0,1E4,1800);
y = a*x.^b;
y = y.*(1+randn(1,1800)*0.02);
plot(x,y);

f = @(x,p) p(1)*x.^p(2); %function
sqerr = @(x,y,p) sum((y-f(x,p)).^2); %sum of squared errors
p = [1,1]; %starting conditions
vals=[];
for ct = 1800:-1:50
    p = fminsearch(@(p) sqerr(x(1:ct),y(1:ct),p),p); %fit
    dev = (f(x(ct),p)-y(ct))/y(ct); %devation (can be negative as well!)
    if dev>0.0298&&dev<0.0302
        vals=[vals,ct];
    end
end