how to plot exponential pdf over a distributed data ?
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
in order to find the best fit model
I want to produce this figure (a data & best fit over it):

so I try:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'*b')
ex=expfit(n);
E=exppdf(n,ex);
hold on
plot(v,E,'-r')
but it produce this figure:

how to modify the code to get the first figure?
1 件のコメント
Amr Hashem
2015 年 10 月 24 日
why there aren't any interaction?
採用された回答
Star Strider
2015 年 10 月 24 日
Fourteen hours ago I was asleep here in GMT-7 land.
I believe you are mistaking the exponential distribution for the exponential function.
This produces a good fit to your data:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'bp')
expfcn = @(b,x) b(1) + b(2).*exp(b(3).*x); % Three-Parameter Exponential Function
B0 = [50; -50; -0.5]; % Initial Parameter Estimates
B = nlinfit(v(:), n(:), expfcn, B0); % Estimate Parameters
E = expfcn(B,v); % Simulate Function
hold on
plot(v,E,'-r')
I used the nlinfit function because I know you have the Statistics Toolbox.
6 件のコメント
Amr Hashem
2015 年 10 月 24 日
Thanks
but I want to plot the " exponential distribution "
as I want to create the best curve fitting
so i want to try:
exponential distribution
poisson distribution
weibull distribution
that is explain why I use "exppdf"
waiting for your advices
You can fit it to whatever distribution you want (and are appropriate to your data). You simply cannot plot it as the plot you posted. All probablilty distributions to the best of my knowledge have a maximum amplitude of 1. What was plotted in the figure is an exponential function, not an exponential distribution.
The plot of the exponential distribution of your data are:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
ex=expfit(n);
E=exppdf(v,ex);
hold on
plot(E,'-r')
Amr Hashem
2015 年 10 月 25 日
編集済み: Amr Hashem
2015 年 10 月 25 日
Thanks , for your advice
that's work:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'bp')
expfcn = @(b,x) b(2).*exp(b(3).*x); % Three-Parameter Exponential Function
B0 = [50; 50; 0.5]; % Initial Parameter Estimates
B = nlinfit(v(:), n(:), expfcn, B0); % Estimate Parameters
E = expfcn(B,v); % Simulate Function
hold on
plot(v,E,'-r')
Now I have a question how to prolong the fitted curve to reach the x-axis?
My pleasure.
That requires an fzero call to find it, and to create an appropriate vector for ‘v’ that includes it.
The code changes slightly:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'*b')
expfcn = @(b,x) b(1) + b(2).*exp(b(3).*x); % Three-Parameter Exponential Function
B0 = [50; -50; -0.5]; % Initial Parameter Estimates
B = nlinfit(v(:), n(:), expfcn, B0); % Estimate Parameters
Y0 = fzero(@(x)expfcn(B,x), 1); % Find ‘v’ At E=0
vrng = linspace(Y0, max(v)); % Create Matching Vector
E = expfcn(B,vrng); % Simulate Function With ‘vrng’
hold on
plot(vrng,E,'-r')
fprintf(1, '\n\tE(%.3f) = 0\n', Y0)
The x-intercept is about 0.432.
Amr Hashem
2015 年 10 月 26 日
編集済み: Amr Hashem
2015 年 10 月 26 日
but when I try it on:
expfcn = @(b,x) b(2).*exp(b(3).*x);
x intercept at -7413 and the place of fitted curve changed I use
expfcn = @(b,x) b(2).*exp(b(3).*x);
as this the function of exponential i want
so I adjust the code to :
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'*b')
expfcn = @(b,x) ( b(2).*exp(b(3).*x)); % Three-Parameter Exponential Function
B0 = [50; -50; -0.5]; % Initial Parameter Estimates
B = nlinfit(v(:), n(:), expfcn, B0); % Estimate Parameters
vrng = linspace(-35, max(v)); % Create Matching Vector
E = expfcn(B,vrng); % Simulate Function With ‘vrng’
hold on
plot(vrng,E,'-r')
this is work, but I didn't know how to find the intercept I write it manually ?
The x-intercept, such as it is, fzero calculates as -20970.520.
You could probably find the intercept manually, but your code is incorrect when estimating the parameters.
My code here is the correct method:
v=1:25;
n=[10;7;6;21;14;18;23;33;28;31;34;30;32;48;43;46;39;47;40;45;51;47;45;45;23];
plot(v,n,'*b')
expfcn = @(b,x) b(1).*exp(b(2).*x); % Two-Parameter Exponential Function
B0 = [50; 0]; % Initial Parameter Estimates
B = nlinfit(v(:), n(:), expfcn, B0); % Estimate Parameters
Y0 = fzero(@(x)expfcn(B,x), 1); % Find ‘v’ At E=0
vrng = linspace(Y0, max(v)); % Create Matching Vector
E = expfcn(B,vrng); % Simulate Function
hold on
plot(vrng,E,'-r')
fprintf(1, '\n\tE(%.3f) = 0\n', Y0)
You are only fitting two parameters, so you can only specify two in the nlinfit argument list, and you have to refer to them correctly in the ‘expfcn’ objective function. Otherwise, nlinfit will attempt to fit all three of them, even though your function is using only two, and will likely return inaccurate results for the two it does estimate.
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Exponential Distribution についてさらに検索
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
