如何在满足指定条件之前循环拟合 MATLAB 中的幂律模型?
How can I fit power law model in MATLAB in a loop until a specified condition is met?
所以我有两个向量:x 和 y,每个都有 1800 个元素。我需要做的如下:
- 在 x 和 y = ax^b 之间拟合幂律y 考虑 x 和 y 中的所有元素(即所有 1800 个元素)。
- 根据得到的幂律参数a和b计算ypredicted。
- 计算偏差 (= (ypredicted - y)/y *100)比较 ypredicted 和 y 的最后一个元素。
- 再次拟合x和y之间的幂律,但这次只使用的1到1799的元素]x 和 y。重复步骤 2 和 3。
- 对元素 1 到 1798 重复步骤 4,依此类推,直到 x 和 y 的元素 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
所以我有两个向量:x 和 y,每个都有 1800 个元素。我需要做的如下:
- 在 x 和 y = ax^b 之间拟合幂律y 考虑 x 和 y 中的所有元素(即所有 1800 个元素)。
- 根据得到的幂律参数a和b计算ypredicted。
- 计算偏差 (= (ypredicted - y)/y *100)比较 ypredicted 和 y 的最后一个元素。
- 再次拟合x和y之间的幂律,但这次只使用的1到1799的元素]x 和 y。重复步骤 2 和 3。
- 对元素 1 到 1798 重复步骤 4,依此类推,直到 x 和 y 的元素 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