آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله تصمیم داریم که به طور کاملا کاربردی با انواع دستورات توزیع نرمال در متلب به طور کامل آشنا شده و نحوه استفاده از این دستورات را به طور کامل به شما آموزش دهیم.
ابتدا به معرفی توزیع نرمال خواهیم پرداخت و سپس دستورات مربوط به توزیع نرمال تک متغیره و بعد از آن به توزیع نرمال چند متغیره خواهیم پرداخت.
این پست آموزشی یکی از 10ها مقالهی کاربردی آموزش کدنویسی در نرمافزار متلبِ وبسایت گام98 است. برای مشاهده سایر آموزشهای ما در حوزه متلب به صفحه « آموزش متلب » بروید.
کاربرد توزیع نرمال
در تئوری احتمالات تابع توزیع نرمال یا گوسین یک نوع از تابع توزیع احتمال پیوسته است که برای توزیع متغیرهای تصادفی استفاده میشود.
توزیع نرمال کاربردهای بسیار گستردهای در علوم مختلف دارد که از جمله این کاربردها میتوان به موارد زیر اشاره نمود:
1- اندازهگیری خطا : در بسیاری از موارد در آزمایشهای فیزیکی عمدتا خطا به صورت یک توزیع نرمال مدلسازی میشوند که البته این نوع مدلسازی یک مدلسازی محافظهکارانه برای راحتی مدلسازی میباشد.
2- زیست شناسی : در علم زیست شناسی متغیرهای مختلف تمایل به توزیع لوگ نرمال خواهند داشت. مانند اندازهگیری فشار خون انسان و مشخصات یک بافت زنده که تمایل به توزیع لوگ نرمال خواهند داشت.
3- در علم هیدرولوژی و تئوری امواج دریا نیز مشاهده میشود که توزیع دبی یا بارش یک رودخانه و همچنین تراز سطح امواج به توزیع نرمال میل پیدا میکنند. و ….
توزیع نرمال تک متغیره در متلب
در این بخش ابتدا به دستورات توزیع نرمال در حالت تک متغیره خواهیم پرداخت و با انواع دستورات مهم آن آشنا خواهیم شد و سپس به توزیع نرمال در حالت چندمتغیره خواهیم پرداخت.
توزیع نرمال در متلب : تابع چگالی احتمال(PDF)
همانطور که آشنایی دارید تابع توزیع چگالی احتمال (Probability Density Function) برای توزیع نرمال به صورت زیر بیان میشود:
که در رابطه فوق x برآمدی از متغیر تصادفی، μ مقدار میانگین توزیع و σ انحراف معیار توزیع میباشد. لازم به توزیع است که اگر میانگین صفر و انحراف معیار واحد باشد، به آن توزیع استاندارد نرمال تک متغیره خواهیم گفت.
شکل کلی یک تابع توزیع نرمال که البته بصورت استاندارد است را در تصویر زیر مشاهده میکنید:
همانطور که در تصویر بالا مشاهده میکنید 99.7 درصد از چگالی توزیع در فاصله 3 انحراف معیار از میانگین میباشد و نقاط بعد از آن دارای چگالی بسیار اندکی میباشند.
همچنین برای مقایسه توزیع نرمال در حالتهای مختلف دو تصویر زیر را حتما مشاهده کنید.
اینکه این نمودارها چطور ترسیم میشوند در « مقاله توزیعهای آماری در متلب » که حالت کلی برای همه توزیعها میباشد به آنها پرداختهایم اما به طور کلی در این مقاله با دستورات اختصاصی توزیع نرمال در متلب خواهیم پراخت.
اما اگر X یک توزیع استاندارد نرمال داشته باشد، Y که یک توزیع نرمال با میانگین و انحراف معیار دلخواه میباشد بصورت زیر بدست میآید :
برای بدست آوردن برآمدی از توزیع نرمال در متلب از دستور normpdf استفاده میکنیم.
نحوه استفاده از این دستور به این صورت است که ابتدا برآمد مورد نظر(x) ، سپس در ورودی دوم مقدار میانگین (μ) و در ورودی سوم مقدار انحراف معیار (σ) را به دستور میدهیم.
نکتهها : دقت نمایید که اگر دستور را فقط با یک ورودی برآمد فراخوانی کنیم، به طور خودکار میانگین صفر و انحراف معیار واحد در نظر گرفته خواهد شد که همان توزیع استاندارد نرمال میباشد.
اگر فقط برآمد و میانگین را به دستور بدهیم، به طور خودکار انحراف معیار واحد در نظر گرفته میشود.
همچنین میتوانیم این ورودیها را به صورت بردار و یا ماتریس برای چند برآمد مختلف به دستور بدهیم.
در یک مثال این دستور را بیان میکنیم:
1 2 3 4 5 6 7 |
sigma = 1 ; mu = 0 ; x = [-3 -2 -1 0 1 2 3] ; y = normpdf(x,mu,sigma) ; answer y = [0.0044 0.0540 0.2420 0.3989 0.2420 0.0540 0.0044] |
توضیحات مثال بالا :
دقت نمایید که در مثال بالا چندین برآمد مختلف برای یک توزیع احتمال یکسان ( با میانگین و انحراف معیار ثابت ) درخواست کردهایم که البته میتوانید برای هر برآمد این مشخصات(میانگین و انحراف معیار) را جداگانه و بصورت یک بردار تعریف نمایید.
این مثال بیانگر توزیع استاندارد نرمال است که همانطور که مشاهده میکنید با دورشدن از مقدار میانگین چگالی آن کاهش مییابد.
توزیع نرمال در متلب : تابع تجمعی احتمال (CDF)
در ادامه کار با توزیع نرمال در متلب همانطور که میدانید تابع تجمعی احتمال (Cumulative Distribution Function) که بیانگر احتمال کمتر بودن متغیر تصادفی از یک مقدار برآمد مشخص میباشد، بصورت زیر بیان میشود:
این مفهوم بیانگر انتگرالگیری از تابع چگالی احتمال از مقدار منفی بینهایت تا مقدار برآمد موردنظر میباشد. مشابه تصویر بالا که قسمت رنگی میباشد.
لازم به ذکر است که این انتگرال پاسخ تحلیلی ندارد و بصورت عددی توسط متلب حل میشود.
دقت نمایید که این تابع برای هر برآمد همیشه احتمال کمتربودن متغیر تصادفی از این برآمد را نشان میدهد و شکل کلی آن برای چند حالت مختلف بصورت زیر میباشد:
برای بدست آوردن این احتمال از دستور normcdf استفاده میشود. نحوه استفاده از این دستور کاملا مشابه قبل میباشد به این صورت که ابتدا برآمد ، سپس میانگین و در انتها انحراف معیار توزیع نرمال را وارد میکنیم و احتمال کمتر بودن از برآمد مورد نظر بدست میآید.
مشابه با مثال اول ، با یک مثال مقادیر احتمال را بدست میآوریم.
1 2 3 4 5 6 7 |
sigma = 1 ; mu = 0 ; x = [-3 -2 -1 0 1 2 3] ; p = normcdf(x,mu,sigma) answer p = [0.0013 0.0228 0.1587 0.5000 0.8413 0.9772 0.9987 ] |
همانطور که در نتایج خروجی میبینید با افزایش مقدار برآمد عملا سطح زیر نمودار تابع PDF افزایش یافته و احتمال کمتربودن از این برآمد بیشتر میشود که کاملا معقول میباشد.
سوال : اگر در سوالی از ما احتمال فراگذشت از یک متغیر نرمال را بپرسند باید چگونه این احتمال را بدست آوریم؟
پاسخ بسیار ساده است کافی است از قانون احتمال مکمل استفاده نماییم و احتمال فراگذشت را بصورت زیر محاسبه نماییم. این تابع را با عبارت CCDF نمایش میدهند.
(P(X>x)=1-P(X≤x
همچنین به شما پیشنهاد میکنیم با مراجعه به صفحه « پروژه های آماده متلب » از کدهای آمادهی جدیدِ گام98 در حوزه متلب بهره ببرید.
تابع معکوس تجمعی احتمال – (Inverse CDF)
در ادامه کار با توزیع نرمال در متلب در بسیاری از اوقات میخواهیم با داشتن احتمال کمتر بودن یا همان p مقدار برآمد متناظر با این احتمال را بدست آوریم. این رابطه با معکوسگیری از تابع CDF بصورت زیر بیان میشود:
که تابع F همان تابع تجمعی احتمال بصورت زیر میباشد:
برای بدست آوردن برآمد متناظر با احتمال تعیین شده از دستور norminv استفاده میشود.
نحوه استفاده از این دستور به این صورت است که در ورودی اول مقدار احتمال p موردنظر ، در ورودی دوم مقدار میانگین (μ) و در ورودی سوم مقدار انحراف معیار (σ) وارد میشود.
دقت شود که مشابه دستورات قبلی اگر فقط ورودی اول در اینجا مقدار احتمال به دستور داده شود، برآمد را برای توزیع استاندارد نرمال محاسبه خواهد نمود.
مثال زیر را خواهیم داشت :
1 2 3 4 5 6 7 |
sigma = 1 ; mu = 0 ; p = [0.1 0.25 0.75 0.9] ; x = norminv(p,mu,sigma) answer x= [-1.2816 -0.6745 0.6745 1.2816] |
همانطور که ملاحظه مینمایید برآمدها متناظر با احتمال داده شده میباشد که با مشاهده توزیع نرمال کاملا مشخص میباشد. دقت نمایید که حداکثر مقدار احتمال عدد یک میباشد.
محاسبه پارامترهای توزیع نرمال برای دادههای مشخص
در این بخش برای توزیع نرمال در متلب فرض نمایید اگر یکسری داده داشته باشیم و بخواهیم به این سری از اعداد یک توزیع نرمال fit نماییم و مشخصات توزیع که همان میانگین و انحراف معیار میباشد را بدست آوریم از دستور normfit استفاده میکنیم.
البته دستورات کلی دیگری مانند fitdist وجود دارد که برای همه توزیعها به کار میرود که در مقاله توزیعهای آماری در متلب به این دستور کلی و مشابه آن خواهیم پرداخت.
نحوه استفاده از دستور normfit به این صورت است که در حالت ساده شده و عمومی در ورودی اول دادهها به دستور داده شده شده و با گرفتن دو خروجی از دستور پارامترها محاسبه میشود.
خروجی اول مقدار میانگین توزیع برازش شده و خروجی دوم مقدار انحراف معیار توزیع میباشد.
عنوان مثال برای یک سری داده این کار را انجام میدهیم.
1 2 3 4 5 6 |
x = randn(1,100) ; [muhat,sigmahat] = normfit(x) answer muhat = -0.0551 sigmahat = 0.9548 |
توضیحات کد بالا : در تولید دادههای ورودی از دستور randn استفاده شده است که به تعداد سایز داده شده اعدادی با توزیع استاندارد نرمال تولید میکند. برای توضیحات بیشتر توصیه میکنیم حتما مقاله « تولید اعداد تصادفی در متلب » را مطالعه نمایید.
همانطور که مشاهده مینمایید مقدار میانگین و انحراف معیار به ترتیب نزدیک صفر و یک میباشند که هرچه تعداد دادههای ورودی به دستور randn بیشتر باشد این تقریب واقعا به مشخصات توزیع استاندارد نرمال نزدیکتر خواهد بود.
لازم به ذکر است که برای برازش توزیعهای آماری در حالت کلی میتوانید از دستورات fitdist و همراه با آن برای گرفتن اعداد از دستور pdf و یا در حالت سادهتر از تولباکس برازش توزیعهای آماری در متلب با دستور dfittool استفاده کنید که البته در مقاله توزیعهای آماری در متلب که در بالا به آن اشاره کردیم به طور جزئیتر به این دستورات خواهیم پرداخت.
تولید اعداد تصادفی با توزیع نرمال در متلب
در بسیاری از مواقع میخواهیم اعدادی با توزیع نرمال تولید نماییم.
برای توزیع استاندارد نرمال در مقاله تولید اعداد تصادفی در متلب دستور randn توضیح داده شده است.
اما برای توزیع نرمال با میانگین و انحراف معیار دلخواه از دستور normrnd استفاده میشود.
نحوه استفاده از این دستور به این صورت است که در ورودی اول و دوم به ترتیب مقدار میانگین و انحراف معیار موردنظر وارد میشود و سپس در ورودی بعدی سایز موردنظر برای اعداد تصادفی وارد میشود. این سایز میتواند به صورت چندبعدی باشد.
در یک مثال این دستور را برای تولید 100 عددی تصادفی با توزیع نرمال با میانگین 2 و انحراف معیار 5 را استفاده خواهیم کرد:
1 2 3 4 |
size =[1 100] ; sigma = 5 ; mu = 2 ; R = normrnd(mu,sigma,size) |
بخش دوم : توزیع نرمال چند متغیره در متلب
در این بخش میخواهیم دستورات مرتبط با توزیع احتمال چندمتغیره برای توزیع نرمال آشنا شویم که بسیار پرکاربرد میباشد زیرا توزیع نرمال دارای ویژگیهای بسیار خاصی است که در تحلیلهای مختلف از آن استفاده میشود.
یکی از کاربردهای مهم توزیع نرمال، استفاده از توزیع استاندارد نرمال چندمتغیره در تحلیل قابلیت اعتماد برای محاسبه احتمال خرابی یک سیستم یا سازه میباشد.
محاسبه شاخصهای آماری در متلب
انواع محاسبه شاخصهایی همچون میانگین، واریانس و انحراف معیار را در این مقاله بخوانید.
تابع چگالی احتمال برای توزیع نرمال چند متغیره در متلب
برای مشخص کردن برآمد خاصی از توزیع نرمال چندمتغیره از دستور mvnpdf استفاده میشود.
نحوه استفاده از این دستور کاملا مشابه با دستورات تابع نرمال تک متغیره میباشد.
به این صورت که در ورودی اول بردار برآمد متغیرهای تصادفی ، در ورودی دوم بردار میانگین آنها و در ورودی سوم ماتریس کوریانس وارد میشود.
برای آشنایی با ماتریس کواریانس حتما مقاله شاخصهای آماری در متلب را مطالعه نمایید.
اما در یک توضیح کوتاه میتوان به این نکته اشاره کرد که اگر این ماتریس قطری باشد، متغیرها از هم مستقل فرض میشوند و اینکه ضرایب روی قطر اصلی در حالت کلی همان واریانس متغیرهای تصادفی خواهند بود.
لازم به تکرار مجدد میباشد که اگر با یک ورودی بردار متغیرها دستور را فراخوانی کنیم مشابه دستورات قبلی توزیع از نوع استاندارد نرمال ولی بصورت چندمتغیره خواهد بود.
در یک مثال ساده برای حالت سه متغیره دستور mvnpdf را بررسی میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
X = [1 2 0] ; mu = [0 1 -1] ; s1 = 1 ; s2 = 2 ; s3 = 1.5 ; r_12 = 0.5 ; r_13 = 0.7 ; r_23 = 0.3 ; SIGMA = [s1^2 s1*s2*r_12 s1*s3*r_13 ;... s2*s1*r_12 s2^2 s2*s3*r_23 ;... s3*s1*r_13 s3*s2*r_23 s3^3] ; y = mvnpdf(X,mu,SIGMA); answer y = 0.0148 |
توضیحات مثال بالا : همانطور که مشاهده میکنید برای فهم بیشتر ماتریس کواریانس ابتدا انحراف معیارهای متغیرهای تصادفی (si) و سپس ضرایب همبستگی بین متغیرها (r_ij) تعریف شدهاند و سپس ماتریس کواریس تعریف شده است.
همچنین مقدار متناظر با این برآمد (X) مقدار 0.0148 بدست آمده است.
تابع تجمعی احتمال برای توزیع نرمال چند متغیره در متلب
برای بدست آوردن احتمال کمتر بودن از یک برآمد مشخص در توزیع نرمال چندمتغیره در متلب از دستور mvncdf استفاده میشود. روند استفاده از این دستور کاملا مشابه دستور قبلی میباشد.
برای همان مثال قبلی این احتمال را با دستور mvncdf محاسبه میکنیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
X = [1 2 0] ; mu = [0 1 -1] ; s1 = 1 ; s2 = 2 ; s3 = 1.5 ; r_12 = 0.5 ; r_13 = 0.7 ; r_23 = 0.3 ; SIGMA = [s1^2 s1*s2*r_12 s1*s3*r_13 ;... s2*s1*r_12 s2^2 s2*s3*r_23 ;... s3*s1*r_13 s3*s2*r_23 s3^3] ; p = mvncdf(X,mu,SIGMA); answer p = 0.4978 |
تولید اعداد تصادفی براساس توزیع نرمال چندمتغیره در متلب
در انتهای آموزش کار با توزیع نرمال در متلب برای تولید اعداد تصادفی براساس توزیع نرمال چند متغیره با میانگین و ماتریس کواریانس دلخواه از دستور mvnrnd استفاده میشود.
برای این منظور یک مثال بسیار ساده برای حالت دو متغیره بصورت زیر نشان میدهیم :
1 2 3 4 5 6 7 8 9 |
mu = [2,3]; SIGMA = [1,1.5;1.5,3]; r = mvnrnd(mu,SIGMA,200); figure plot(r(:,1),r(:,2),'d','MarkerSize',12) xlabel('r1','fontsi',20,'interpreter','latex') ylabel('r2','fontsi',20,'interpreter','latex') title('r1 - r2 ','fontsi',20,'interpreter','latex') |
توضیحات مثال بالا : در مثال بالا تعداد 200 عدد برای هر متغیر تصادفی مشخص شده است و چون در این مثال با توجه به ابعاد میانگین و ماتریس کواریانس 2 متغیر تعریف کردهایم ابعاد r برابر 200*2 خواهد بود که این دو متغیر را برحسب هم ترسیم کردهایم.
با توجه به نمودار فوق این دو داده چون هر دو از یک دستور تولید شدهاند از همبستگی نسبتا معقولی برخوردار میباشند که به این دلیل این همبستگی کاملا نیست که این دو متغیر بصورت تصادفی تولید شدهاند.
در پایان امیدوارم این مقاله برای شما مفید بوده باشد.
اگر سوال و یا مشکلی بود حتما در همینجا مطرح نمایید.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش صفر تا 100 کار با فایل اکسل در متلب بصورت کاربردی
در این مقاله به صورت کاملا کاربردی و آسان کار با فایل اکسل در متلب را به شما آموزش خواهیم داد که همه زیردستوارت و تنظیمات با توضیحات کامل شرح داده میشود.
10 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام من یک سوال دارم.درمورد توزیع نرمال میخواستم کمکم کنید اثباتی میباشد
با عرض سلام خدمت شما. اگر سوالتان مختصر میباشد همنیجا مطرح بفرمایید تا راهنمایی لازم انجام بدم و اگر طولانی میباشد از طریق صفحه ثبت سفارش اقدام نمایید.
با تشکر
سلام خسته نباشید
یه سوال داشتم خدمتتون که چطوری میشه متوجه شد که داده ها از چه نوع توزیع هستند مثلا برنولی یا نرمال و …؟
با سلام و عرض ادب
این امکان بصورت مستقیم که با یک دستور بتوان توزیع داده ها را مشخص کرد در نرم افزار متلب وجود ندارد.
اما میتوانید از نرم افزار دیگری به نام ایزی فیت استفاده کنید. در این نرم افزار انواع توزیعهای مختلف بصورت پیشفرض قرار داده شده است. کافیه داده هاتون رو در این نرم افزار وارد کنید تا خود نرم افزار براتون مشخص کنه که این داده ها از چه نوع توزیع هستند.
اگر میخواهید که حتما این کار در نرم افزار متلب انجام شود، میتوانید انواع توزیع ها را بر روی داده هاتون تست کنید و پاسخ رو چک کنید. آموزشی در این زمینه در وبلاگ منتشر شده که از لینک زیر در دسترس است:
آموزش کامل انواع دستورات توزیعهای آماری در متلب
سپاسگزارم
سلام وقت بخیر ممنون از توضیحات شما .
من یه سوال داشتم: چطوری بایدسطح زیر منحنی چگالی طیف توان رو در متلب بدست بیاریم؟
با سلام و درود فراوان
لطفا در گروه پرسش و پاسخ متلبِ گام98، در تلگرام به آیدی زیر مطرح کنید
@matlab_discussion
موفق باشید.
سلام. برای محاسبه سطح زیر نمودار از انتگرال استفاده میکنیم. اگر تابع رو دارید که با استفاده از دستور int میشه براحتی محاسبه انتگرال رو انجام داد. اما اگر دادههای عددی دارید و میخواهید سطح زیرش رو محاسبه کنید، دستور trapz میتونه کمک کنه. نحوه استفاده ازش هم خیلی راحته. کافیه بردارهای x و y رو بعنوان ورودی بهش بدید. در پست آموزش انتگرال در متلب، این موارد ذکر شده. (برای مشاهده، روی لینک قبل کلیک کنید)
موفق باشید.
سلام خسته نباشید ببخشید موضوع پایان نامه بنده در ارتباط با منحنی شکنندگی (fragility curve) هست که در آن با استفاده از تحلیل دینامیکی چند دسته رکورد زلزله که هر رکورد زلزله با شتاب های مختلف (سطوح مختلف آسیب) به سازه اعمال می شوند هدف بررسی احتمال آسیب یا فراگذشت از یک یا چند سطح آسیب است به طور مثال زلزله بم با شتاب های گوناگون اعمال می شود (به همراه 9 زلزله دیگر که هر کدام در شتاب های گوناگون اعمال می شوند) سوال بنده این است که تابع بنظر چند متغیره میاد ولی احتمال فراگذشت در قسمت تک متغیره بیان شده است برای حالت چند متغیره به چه صورت است ؟
درود فراوان
لطفا در گروه پرسش و پاسخ در تلگرام به آی دی matlab_discussion@ مطرح کنید.