如何自动确定图表在何处改变斜率,以便您可以适应 -Matlab
How to automatically determine where graph changes slope sou you can fit -Matlab
以下代码计算并绘制图形的拟合。问题是每次我都必须自己找到坡度变化的地方。见下图:
有没有办法自动找到它?
start=50; rd1start=1;
ending=100; rd1end=100;
relative=zeros(1,100);
W_esc_half=linspace(1,100,100); % x axis values
relative(1:50)=W_esc_half(1:50).^(1.2); % y axis values fof smaller times
relative(50:100)=W_esc_half(50:100).^(1.5); % y axis values for greater times
figure(1)
fitResults1 = polyfit(log10(W_esc_half(start:ending)),log10(relative(start:ending)),1);
pol=polyval(fitResults1,log10(W_esc_half(start:ending))); % Compute the fit coefficients
a=fitResults1(1);
b=fitResults1(2);
polyfit_str = ['<(?r)^2> ~ ? ^{' (num2str(a)) ' } '] ;
fit1=W_esc_half(start:ending).^a*10^(b);
hold on
loglog((W_esc_half(rd1start:rd1end)),(relative(rd1start:rd1end)),'blue-','LineWidth',2) % draw the original function
loglog((W_esc_half(start:(length(pol)+start-1))),fit1,'cyan--','LineWidth',2); % draw the fit
我通常喜欢通过在 diff
关闭信号
中搜索来快速完成
subplot(2,1,1)
plot(diff(relative),'.')
subplot(2,1,2)
findpeaks(diff(relative))
但是除了突然的变化之外,你还有一个缓慢增加的坡度。所以如果你的函数不是很好,你可能需要稍微调整一下 findpeaks
函数。另一方面,如果你有恒定的斜率和突然的变化,你也可以使用 find(abs(diff(relative)) > 1)
.
以下代码计算并绘制图形的拟合。问题是每次我都必须自己找到坡度变化的地方。见下图:
有没有办法自动找到它?
start=50; rd1start=1;
ending=100; rd1end=100;
relative=zeros(1,100);
W_esc_half=linspace(1,100,100); % x axis values
relative(1:50)=W_esc_half(1:50).^(1.2); % y axis values fof smaller times
relative(50:100)=W_esc_half(50:100).^(1.5); % y axis values for greater times
figure(1)
fitResults1 = polyfit(log10(W_esc_half(start:ending)),log10(relative(start:ending)),1);
pol=polyval(fitResults1,log10(W_esc_half(start:ending))); % Compute the fit coefficients
a=fitResults1(1);
b=fitResults1(2);
polyfit_str = ['<(?r)^2> ~ ? ^{' (num2str(a)) ' } '] ;
fit1=W_esc_half(start:ending).^a*10^(b);
hold on
loglog((W_esc_half(rd1start:rd1end)),(relative(rd1start:rd1end)),'blue-','LineWidth',2) % draw the original function
loglog((W_esc_half(start:(length(pol)+start-1))),fit1,'cyan--','LineWidth',2); % draw the fit
我通常喜欢通过在 diff
关闭信号
subplot(2,1,1)
plot(diff(relative),'.')
subplot(2,1,2)
findpeaks(diff(relative))
但是除了突然的变化之外,你还有一个缓慢增加的坡度。所以如果你的函数不是很好,你可能需要稍微调整一下 findpeaks
函数。另一方面,如果你有恒定的斜率和突然的变化,你也可以使用 find(abs(diff(relative)) > 1)
.