【问题标题】:Best Fit Line with logarithmic axes (MATLAB)具有对数轴的最佳拟合线 (MATLAB)
【发布时间】:2013-08-24 12:05:00
【问题描述】:

我正在尝试在具有对数轴的概率密度函数上绘制一条最佳拟合线。 Y 轴 (PDF) 为 10^-12 至 10^-28,而 X 轴为 10^10 至 10^20。我试过polyfit,没有运气。有任何想法吗?附上我的代码。

谢谢, 凯文

clc;
clear all;

load Aug2005_basin_variables.mat

% Initialize

j_len = length(W_SH);
prob_dens_all = zeros(j_len,30);
ii = 1 : j_len;
count(1:30) = 0;
bin(1:30) = 0;

for i = 1 : 30
    bin(i) = 10^(11 + (0.3*i));
end


% Bin the Watts

for i = 1 : j_len
    if((log10(W_SH(i)) >= 11) && (log10(W_SH(i)) < 11.3))
        count(1) = count(1) + 1;
    end
    if((log10(W_SH(i)) >= 11.3) && (log10(W_SH(i)) < 11.6))
        count(2) = count(2) + 1;
    end
    if((log10(W_SH(i)) >= 11.6) && (log10(W_SH(i)) < 11.9))
        count(3) = count(3) + 1;
    end
    if((log10(W_SH(i)) >= 11.9) && (log10(W_SH(i)) < 12.2))
        count(4) = count(4) + 1;
    end
    if((log10(W_SH(i)) >= 12.2) && (log10(W_SH(i)) < 12.5))
        count(5) = count(5) + 1;
    end
    if((log10(W_SH(i)) >= 12.5) && (log10(W_SH(i)) < 12.8))
        count(6) = count(6) + 1;
    end
    if((log10(W_SH(i)) >= 12.8) && (log10(W_SH(i)) < 13.1))
        count(7) = count(7) + 1;
    end
    if((log10(W_SH(i)) >= 13.1) && (log10(W_SH(i)) < 13.4))
        count(8) = count(8) + 1;
    end
    if((log10(W_SH(i)) >= 13.4) && (log10(W_SH(i)) < 13.7))
        count(9) = count(9) + 1;
    end
    if((log10(W_SH(i)) >= 13.7) && (log10(W_SH(i)) < 14.0))
        count(10) = count(10) + 1;
    end
    if((log10(W_SH(i)) >= 14.0) && (log10(W_SH(i)) < 14.3))
        count(11) = count(11) + 1;
    end
    if((log10(W_SH(i)) >= 14.3) && (log10(W_SH(i)) < 14.6))
        count(12) = count(12) + 1;
    end
    if((log10(W_SH(i)) >= 14.6) && (log10(W_SH(i)) < 14.9))
        count(13) = count(13) + 1;
    end
    if((log10(W_SH(i)) >= 14.9) && (log10(W_SH(i)) < 15.2))
        count(14) = count(14) + 1;
    end
    if((log10(W_SH(i)) >= 15.2) && (log10(W_SH(i)) < 15.5))
        count(15) = count(15) + 1;
    end
    if((log10(W_SH(i)) >= 15.5) && (log10(W_SH(i)) < 15.8))
        count(16) = count(16) + 1;
    end
    if((log10(W_SH(i)) >= 15.8) && (log10(W_SH(i)) < 16.1))
        count(17) = count(17) + 1;
    end
    if((log10(W_SH(i)) >= 16.1) && (log10(W_SH(i)) < 16.4))
        count(18) = count(18) + 1;
    end
    if((log10(W_SH(i)) >= 16.4) && (log10(W_SH(i)) < 16.7))
        count(19) = count(19) + 1;
    end
    if((log10(W_SH(i)) >= 16.7) && (log10(W_SH(i)) < 17.0))
        count(20) = count(20) + 1;
    end
    if((log10(W_SH(i)) >= 17.3) && (log10(W_SH(i)) < 17.6))
        count(21) = count(21) + 1;
    end
    if((log10(W_SH(i)) >= 17.6) && (log10(W_SH(i)) < 17.9))
        count(22) = count(22) + 1;
    end
    if((log10(W_SH(i)) >= 17.9) && (log10(W_SH(i)) < 18.2))
        count(23) = count(23) + 1;
    end
    if((log10(W_SH(i)) >= 18.2) && (log10(W_SH(i)) < 18.5))
        count(24) = count(24) + 1;
    end
    if((log10(W_SH(i)) >= 18.5) && (log10(W_SH(i)) < 18.8))
        count(25) = count(25) + 1;
    end
    if((log10(W_SH(i)) >= 18.8) && (log10(W_SH(i)) < 19.1))
        count(26) = count(26) + 1;
    end
    if((log10(W_SH(i)) >= 19.1) && (log10(W_SH(i)) < 19.4))
        count(27) = count(27) + 1;
    end
    if((log10(W_SH(i)) >= 19.4) && (log10(W_SH(i)) < 19.7))
        count(28) = count(28) + 1;
    end
    if((log10(W_SH(i)) >= 19.7) && (log10(W_SH(i)) < 20.0))
        count(29) = count(29) + 1;
    end
    if((log10(W_SH(i)) >= 20.0) && (log10(W_SH(i)) < 20.3))
        count(30) = count(30) + 1;
    end
end


for i=1:30
    prob(i) = count(i)/sum(count);
    prob_dens(i) = prob(i)/bin(i);
end

% Check
sum(prob_dens.*bin);
prob_dens_all(i,:) = prob_dens(:);

%end

prob_dens_mean = zeros(1,30);


for i = 1 : 30
  prob_dens_mean(1,i) = mean(prob_dens_all(:,i));
  %prob_dens_std(1,i) = std(prob_dens_all(:,i));
end

% Plot

best_fit = polyfit(bin,log10(prob_dens_mean),11)

h = figure;
loglog(bin,prob_dens_mean,'ro','MarkerSize',10)
hold on;
plot(best_fit,'b')
t = title('Event Power Distribution, SHem, August 2005');
set(t, 'FontWeight', 'bold', 'FontSize', 12)
set(gca, 'FontWeight', 'bold', 'FontSize', 12)
xlabel('Event Power (W)');
ylabel('Probability Density');
print -dpng SHem_Wattage_PDF_AUG2005.png

【问题讨论】:

  • bin部分可以减少histc(log10(W_SH),11:0.3:20.3)
  • polyfitlog10(bin)log10(prob_dens_mean) 会是找到一些拟合系数的更好选择吗?我首先考虑的是线性图,然后是对数图。
  • 如果两个轴都在对数转换上正确,那么您是否有充分的理由不使用 polyfit(log(x),log(y),1) ?
  • 嗨,我用 best_fit = polyfit(log10(bin),log10(prob_dens_mean),1) 和 best_fit = polyfit(log(bin),log(prob_dens_mean),1 尝试了上面的代码),并且两者都没有绘制最佳拟合线。相反,我看到 best_fit 是“NaN”。有什么想法吗?

标签: matlab data-fitting probability-density


【解决方案1】:

我没有你的数据,但这里有一个使用一些随机正态分布随机数据的示例

x=randn(1000,1)+5; % create some data, keep numbers positive by adding 5
[n,xb]=hist(x); % Create the histogram
n = n/sum(n); % convert counts to a pdf
p=polyfit(log(xb), log(n), 3); % Do a 3rd order fit
loglog(xb,n, '*-', xb, exp(polyval(p, log(xb))), 'r')
grid on
legend('PDF', 'Fit', 0)

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2019-04-09
    • 1970-01-01
    • 2014-09-07
    • 2017-10-05
    • 2015-06-27
    相关资源
    最近更新 更多