loading...

انجام پروژه متلب

تمام مطالب به سایت خانه متلب matlabhome.ir انتقال پیدا کرده است. سفارش انجام پروژه متلب|پایان نامه ارشد و دکتری|دانلود رایگان فیلم کد متلب انجام پروژه های دانشجویی شبکه عصبی داده کاوی شبیه سازی کامپیوتری توالی عملیات و زمان بندی مدل سازی انجام پروپزال پایان نامه ارشد دکتری مهندسی صنایع مدیریت مهندسی برق و...

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:
 

 

 

 

افزایش کنتراست یک تصویر با دستور histeq در متلب

 

دستور histeq در متلب، برای افزایش کنتراست یک تصویر به کار می رود. چنانچه مقادیر مربوط به رنگ های به کار رفته در یک تصویر را مشاهده کنیم (این کار با دستور imhist در متلب، امکان پذیر می باشد)، آنگاه ممکن است که بخشی از رنگ ها، به مقدار زیاد، در تصویر به کار رفته باشند و بخشی دیگر، کمتر در تصویر باشند. افزایش کنتراست، باعث می شود که میزان به کار رفتن رنگ های مختلف، به هم نزدیکتر شود و دیگر تفاوت زیادی که ذکر شد، وجود نداشته باشد. به مثال زیر توجه کنید :

مثال :

 

clear all
close all
clc

img=imread(‘image.jpg’);
img=rgb2gray(img);
imshow(img);

figure
histeq(img);

نتیجه :

تصویر اصلی :

(matlab) آموزش متلب

تصویر پس از افزایش کنتراست :

(matlab) آموزش متلب

 

به دست آوردن تفریق دو تصویر با دستور imsubtract در متلب

 

با استفاده از دستور imsubtract در متلب، می توانیم یک تصویر را از تصویر دیگر تفریق کنیم. منظور از تفریق دو تصویر این است که رنگ هر پیکسل تصویر نهایی، از تفریق مقدار مربوط به رنگ پیکسل متناظر در دو تصویر اولیه به دست می آید. در واقع چون رنگ هر پیکسل تصویر، با یک عدد در متلب ذخیره می شود، با تفریق اعداد مربوط به دو تصویر، می توانیم یک تصویر به صورت تفریق آن دو تصویر اولیه بسازیم. باید دقت داشته باشید که اندازه دو تصویر یکسان باشد تا بتوانید از دستور imsubtract ، برای محاسبه تفریق آن دو، استفاده کنید. به مثال زیر توجه کنید :

مثال :

 

clear all
close all
clc

img_1=imread(‘image_1.jpg’);
imshow(img_1);

img_2=imread(‘image_2.jpg’);
figure
imshow(img_2);

img_3=imsubtract(img_1,img_2);
figure
imshow(img_3);

نتیجه :

تصویر اول :

(matlab) آموزش متلب

تصویر دوم :

(matlab) آموزش متلب

تصویر حاصل از تفریق دو تصویر :

(matlab) آموزش متلب

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1350 چهارشنبه 22 آبان 1392 زمان : 18:21 نظرات (0)

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:
 

 

 

نرم افزار متلب، این امکان را به وجود آورده است که در کامپیوترهای دارای پردازنده (CPU) چند هسته ای، از پردازش موازی (Parallel Computing) استفاده نماییم. در این مبحث آموزشی، قصد داریم که نحوه نوشتن کدهای متلب، برای پردازش موازی کدها را شرح بدهیم.

 

مثالی با متلب برای تشخیص متن,مجموع وزن دار,مجموعه آموزشی متلب,مجموعه فازی در matlab پردازش تصویر متلب لطفی زاده,مجموعه کامل آموزشی داده کاوی دست نویس انواع کد متلب,محاسبات تکاملی,محاسبات عددی در متلب,محاسبات نمادین,محاسبه انتگرال در متلب,محاسبه گرادیان برداری در متلب,محاسبه معادله رگرسیون از روی تابع تبدیل در متلب,محدودیت های مساله tsp,محصولات پردازش سیگنال

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 2620 چهارشنبه 22 آبان 1392 زمان : 18:21 نظرات (0)

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:
 

 

 

 

چک کردن مساوی بودن دو ماتریس با دستور isequal در متلب

چک کردن مساوی بودن دو ماتریس با دستور isequal در متلب : اگر دو ماتریس داشته باشیم و بخواهیم چک کنیم که آیا آن دو ماتریس برابر هستند یا نه، می توانیم از دستور isequal در متلب استفاده کنیم. چنانچه دستور isequal ، مقدار ۱ را برگرداند، یعنی دو ماتریس، با هم برابر هستند و اگر دستور isequal ، مقدار ۰ را برگرداند، یعنی دو ماتریس، با هم برابر نیستند. به مثال زیر توجه کنید : مثال : A=[1 2;3 4] B=[1 2;3 4] C=[1 2;3 5] D=isequal(A,B) E=isequal(A,C) نتیجه : A = 1 2 3 4 B = 1 2 3 4 C = 1 2 3 5 D = 1 E = 0 چون دو ماتریس A و B با هم برابر می باشند، بنابراین مقدار D برابر ۱ شده است و چون دو ماتریس A و C با هم برابر نیستند، بنابراین مقدار E برابر ۰ شده است.

 

تعیین عناصری که تنها در بردار A یا تنها در بردار B وجود دارند (اجتماع منهای اشتراک) با دستور setxor در متلب


رض کنید دو بردار A و B را داریم و آن دو را به صورت دو مجموعه در نظر می گیریم. با استفاده از دستور setxor در متلب، می توانیم عناصری (عضوهایی) را که تنها در بردار A (مجموعه A) وجود دارند یا تنها در بردار B (مجموعه B) وجود دارند (اجتماع منهای اشتراک دو مجموعه A و B) را تعیین کنیم. به مثال زیر توجه کنید :

مثال :

 

A=[1 2 3 4]
B=[1 2 5 6]
C=setxor(A,B)

نتیجه :

 

A =1     ۲     ۳     ۴

B =

1     ۲     ۵     ۶

C =

3     ۴     ۵     ۶

 

پاک کردن اطلاعات نمایش داده شده در پنجره command با دستور clc در متلب

 

دستور clc در متلب، برای پاک کردن اطلاعات نمایش داده شده در پنجره command به کار می رود. یعنی هر زمان که خواستید تمامی اطلاعات نمایش داده شده در پنجره command (البته تا این لحظه و نه برای اطلاعاتی که در آینده نمایش داده می شوند) ، پاک شوند، تنها کافی است که دستور زیر را بنویسید :

 

clc

البته روش دیگری نیز برای پاک کردن اطلاعات نمایش داده در پنجره command نیز وجود دارد که به صورت دستی است، برای این منظور، ابتدا باید بر روی پنجره command کلیک سمت راست نموده و سپس گزینه Clear Command Window را انتخاب کنید.

نکته :

بد نیست به این نکته اشاره کنم که یک شروع خوب برای کدهای یک برنامه متلب، به صورت زیر می باشد :

 

clear all
close all
clc

که در آن دستور clear all ، تمامی متغیرهایی که قبلا در متلب تعریف شده اند را پاک می کند، دستور close all ، تمامی پنجره های شکلی که قبلا در متلب باز شده اند را می بندد و دستور clc نیز تمامی اطلاعاتی که قبلا در پنجره command نمایش داده شده است را پاک می کند. بنابراین این سه خط کد، یک شروع خوب برای هر برنامه متلب می باشد تا برنامه بدون هیچ مشکل و تداخلی با اطلاعات قبلی اجرا شود.

تغییر فولدر مربوط به Current Folder با دستور cd

 

در صورتی که در دستورات save و load ، هیچ آدرسی را مشخص نکنیم، save و یا load کردن فایل ها، در فولدر مشخص شده در پنجره Current Folder ، صورت می گیرد و فایل ها در آن محل، ذخیره و یا بازخوانی می شوند. روش ساده برای تغییر این فولدر، کلیک بر روی بالای پنجره و تغییر مسیر به صورت دستی می باشد، اما ممکن است در برنامه ای مجبور شویم که فایل هایی را در فولدرهای مختلف save و یا load کنیم، بنابراین باید این عمل را با دستوراتی در وسط برنامه اجرا کنیم. دستور لازم برای تغییر فولدر مربوط به Current Folder ، دستور cd می باشد. به مثال زیر توجه کنید :

مثال :

فرض کنید بخواهیم آدرس فولدر مربوط به Current Folder را به C:\Project تغییر دهیم، می نویسیم :

 

cd C:\Project

نتیجه :

چنانچه به آدرس بالای پنجره Current Folder نگاه کنید، مشاهده خواهید کرد که آدرس آن به آدرس C:\Project تغییر یافته است.

دقت داشته باشید که چنانچه در مثال فوق، فولدر C:\Project وجود نداشته باشد، آنگاه نرم افزار متلب، یک پیام خطا را نمایش خواهد داد.

نمایش دستورات در پنجره Command با دستور echo

فرض کنید که برنامه ای دارید که دارای ۱۰۰ خط دستور می باشد و کل برنامه را در یک m-file نوشته اید. زمانی که برنامه را اجرا کنید، نتایج بخش های مختلف در پنجره Command نمایش داده می شوند، اما ممکن است که شما گیج شوید و فراموش کنید هر نتیجه مربوط به کدام دستور است. اگر هر دستور، قبل از اجرا، در پنجره Command نمایش داده شود، آنگاه نتیجه آن دستور، بلافاصله پس از آن نمایش داده خواهد شد و بنابراین می توانید هر دستور و نتیجه آن را پشت سر هم ببینید. با دستور echo ، می توان مشخص کرد که نرم افزار متلب، دستورات را در پنجره Command نمایش بدهد یا نه.

اگر دستور echo on را اجرا کنیم، دستورات نمایش داده می شوند و اگر دستور echo off را اجرا کنیم، دستورات نمایش داده نخواهند شد. همان طور که می دانید، پیش فرض نرم افزار متلب، عدم نمایش دستورات می باشد. به مثال زیر توجه کنید :

مثال :

 

echo on
A=2
B=3
C=A+B
echo off
D=A-B

نتیجه :

 

A=2

A =

2

B=3

B =

3

C=A+B

C =

5

echo off

D =

-1

مشاهده می کنید که سه دستور اول، در پنجره Command ، نمایش داده شده اند، اما دستور D=A-B ، نمایش داده نشده است.

 

انجام پروژه بازدید : 1461 چهارشنبه 22 آبان 1392 زمان : 18:21 نظرات (0)

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:
 

 

 

 

محاسبه مینیمم (min) یا ماکزیمم (max) یک ماتریس در متلب

در متلب برای به دست آوردن مینیمم (min) یا ماکزیمم (max) یک ماتریس، به ترتیب از دستور min و دستور max استفاده می شود.

محاسبه مینیمم (min) یک ماتریس در متلب :

در متلب، برای محاسبه مینیمم (min) یک ماتریس، از دستور min استفاده می شود. اگر A یک ماتریس دو بعدی باشد، دستور min(A) ، برداری را بر می گرداند که در آن مینیمم هر ستون ماتریس A ، مشخص شده است و دستور min(min(A)) ، مینیمم ماتریس A را محاسبه می کند. به مثال زیر توجه کنید :

مثال :

 

A=[1 2;3 4]
B=min(A)
C=min(min(A))

نتیجه :

 

A =

1     ۲
۳     ۴

B =

1     ۲

C =

1

محاسبه ماکزیمم (max) یک ماتریس در متلب :

در متلب، برای محاسبه ماکزیمم (max) یک ماتریس، از دستور max استفاده می شود. اگر A یک ماتریس دو بعدی باشد، دستور max(A) ، برداری را بر می گرداند که در آن ماکزیمم هر ستون ماتریس A ، مشخص شده است و دستور max(max (A)) ، ماکزیمم ماتریس A را محاسبه می کند. به مثال زیر توجه کنید :

مثال :

 

A=[1 2;3 4]
B=max(A)
C=max(max(A))

نتیجه :

 

A =

1     ۲
۳     ۴

B =

3     ۴

C =

4

مربع های (ماتریس های) جادویی (magic squares) در متلب

 

نگاهی به ماتریس زیر بیندازید :

 

16   ۳     ۲     ۱۳
۵    ۱۰    ۱۱    ۸
۹    ۶     ۷     ۱۲
۴    ۱۵    ۱۴    ۱

به این ماتریس، مربع جادویی (ماتریس جادویی) (magic square) می گویند و در گذشته، مردم اعتقاد داشتند که این ماتریس، خواص جادویی دارد. در ادامه شرح خواهیم داد که چرا مردم، در گذشته چنین باوری داشته اند.

با کدهای زیر، ماتریس فوق را با نام A ، در متلب تعریف می کنیم و همچنین خواص ویژه این ماتریس را به شما نشان خواهیم داد :

 

A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]
B=sum(A)

نتیجه :

 

A =

16     ۳     ۲    ۱۳
۵    ۱۰    ۱۱     ۸
۹     ۶     ۷    ۱۲
۴    ۱۵    ۱۴     ۱

B =

34    ۳۴    ۳۴    ۳۴

دستور sum ، برای محاسبه مجموع عناصر هر ستون یک ماتریس به کار می رود. بنابراین مثلا عنصر دوم از بردار B ، برابر مجموع تمامی عناصر ستون دوم ماتریس A می باشد. مشاهده می کنید که مجموع عناصر هر ستون ماتریس A برابر عدد ۳۴ می باشد.

اما این بار، مجموع عناصر هر ردیف ماتریس A را محاسبه می کنیم :

 

A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]
A’
B=sum(A’)’

نتیجه :

 

A =

16     ۳     ۲    ۱۳
۵    ۱۰    ۱۱     ۸
۹     ۶     ۷    ۱۲
۴    ۱۵    ۱۴     ۱

ans =

16     ۵     ۹     ۴
۳    ۱۰     ۶    ۱۵
۲    ۱۱     ۷    ۱۴
۱۳     ۸    ۱۲     ۱

B =

34
34
34
34

مشاهده می کنید که مجموع عناصر هر ردیف ماتریس A نیز برابر همان عدد ۳۴ می باشد. دقت کنید که علامت ‘ چنانچه پس از نام یک ماتریس بیاید، نتیجه همان ماتریس است که جای ستون ها و ردیف های آن عوض شده باشد و به این دلیل، از این علامت استفاده کرده ایم که دستور sum برای محاسبه جمع عناصر ستون ها می باشد، نه ردیف ها.

حال می خواهیم مجموع عناصر روی قطر اصلی ماتریس A را محاسبه کنیم. برای این منظور، ابتدا باید دستور diag را معرفی کنیم. دستور diag ، برداری را برمی گرداند که عناصر آن همان عناصر ماتریس اصلی می باشد. بنابراین برای مشخص کردن عناصر روی قطر اصلی ماتریس A ، کدهای زیر را اجرا می کنیم :

 

A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]
B=diag(A)

نتیجه :

 

A =

16     ۳     ۲    ۱۳
۵    ۱۰    ۱۱     ۸
۹     ۶     ۷    ۱۲
۴    ۱۵    ۱۴     ۱

B =

16
10
7
1

بنابراین با دستورات زیر، می توانیم مجموع عناصر قطر اصلی ماتریس A را محاسبه کنیم :

 

A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]
B=sum(diag(A))

نتیجه :

 

A =

16     ۳     ۲    ۱۳
۵    ۱۰    ۱۱     ۸
۹     ۶     ۷    ۱۲
۴    ۱۵    ۱۴     ۱

B =

34

مشاهده می کنید که مجموع عناصر قطر اصلی ماتریس A ، برابر همان عدد ۳۴ می باشد.

حال با دستور زیر، مجموع عناصر روی قطر غیراصلی ماتریس A را محاسبه می کنیم :

 

A=[16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1]
B=sum(diag(fliplr(A)))

نتیجه :

 

A =

16     ۳     ۲    ۱۳
۵    ۱۰    ۱۱     ۸
۹     ۶     ۷    ۱۲
۴    ۱۵    ۱۴     ۱

B =

34

باز هم نتیجه برابر عدد ۳۴ شد.

بنابراین توانستیم خواص ویزه ماتریس A را با استفاده از نرم افزار متلب ، مشاهده کنیم .

ساخت مربع های جادویی (ماتریس های جادویی) (magic squares) در متلب :

دستور magic در متلب، برای ساخت مربع های جادویی (magic squares)، با هر اندازه دلخواه، به کار می رود. به مثال زیر توجه کنید :

مثال :

یک مربع جادویی (magic square) با ۵ ردیف و ۵ ستون می سازیم :

 

A=magic(5)
B=sum(A)
C=sum(A’)’
D=sum(diag(A))
E=sum(diag(fliplr(A)))

نتیجه :

 

A =

17    ۲۴     ۱     ۸    ۱۵
۲۳     ۵     ۷    ۱۴    ۱۶
۴     ۶    ۱۳    ۲۰    ۲۲
۱۰    ۱۲    ۱۹    ۲۱     ۳
۱۱    ۱۸    ۲۵     ۲     ۹

B =

65    ۶۵    ۶۵    ۶۵    ۶۵

C =

65
65
65
65
65

D =

65

E =

65

با نتایج بالا، ثابت کردیم که ماتریس A ، یک مربع جادویی (magic square) می باشد.

 

الحاق (اتصال) ماتریس ها به یکدیگر در متلب

در متلب، می توانیم دو یا چند ماتریس را به یکدیگر متصل کنیم و یک ماتریس بزرگتر بسازیم. به مثال زیر توجه کنید :

مثال :

 

A=[1 2;3 4]
B=[5 6;7 8]
C=[A B]

نتیجه :

 

A =1     ۲
۳     ۴

B =

5     ۶
۷     ۸

C =

1     ۲     ۵     ۶
۳     ۴     ۷     ۸

مشاهده می کنید که ماتریس C ، از الحاق دو ماتریس A و B ساخته شده است.

 

تشخیص عناصر روی قطر اصلی ماتریس با دستور diag در متلب

در متلب، از دستور diag برای تشخیص عناصر روی قطر اصلی ماتریس استفاده می شود. دستور diag ، عناصر روی قطر اصلی ماتریس را به صورت یک بردار در خروجی نمایش خواهد داد. به مثال زیر توجه کنید :

مثال :

A=[1 2 3;4 5 6;7 8 9]
B=diag(A)

نتیجه :

A =1     ۲     ۳
۴     ۵     ۶
۷     ۸     ۹

B =

1
5
9

نکته :

چنانچه دستور diag ،برای یک بردار به کار رود، آنگاه دستور diag ، ماتریسی را در خروجی برمی گرداند که عناصر روی قطر اصلی آن ماتریس، برابر عناصر آن بردار باشد و سایر عناصر ماتریس، برابر صفر باشد.

نکته :

اگر از دستور diag ، برای ماتریس A ، به صورت diag(A,n) استفاده کنیم، آنگاه دستور diag ، قطر n ام ماتریس A را برمی گرداند. باید دقت داشته باشید که n می تواند مثبت یا منفی باشد. به مثال زیر توجه کنید :

مثال :

 

A=[1 2 3;4 5 6;7 8 9]
B=diag(A,0)
C=diag(A,1)
D=diag(A,2)
E=diag(A,-1)
F=diag(A,-2)

نتیجه :

 

A =1     ۲     ۳
۴     ۵     ۶
۷     ۸     ۹

B =

1
5
9

C =

2
6

D =

3

E =

4
8

F =

7

تکرار یک ماتریس برای ساخت یک ماتریس جدید با دستور repmat در متلب

 

با دستور repmat در متلب، می توانیم یک ماتریس را به تعداد دلخواه تکرار کنیم و از تکرارهای آن ماتریس، یک ماتریس جدید بسازیم. اگر دستور repmat را برای ماتریس A به صورت repmat(A,m,n) به کار ببریم، آنگاه ماتریس A به تعداد m*n تکرار خواهد شد. چیدمان تکرارهای ماتریس A ، به صورت m ردیف و n ستون خواهد بود. به مثال زیر توجه کنید :

مثال :

 

A=[1 2;3 4]
B=repmat(A,2,3)

نتیجه :

 

A =

1     ۲
۳     ۴

B =

1     ۲     ۱     ۲     ۱     ۲
۳     ۴     ۳     ۴     ۳     ۴
۱     ۲     ۱     ۲     ۱     ۲
۳     ۴     ۳     ۴     ۳     ۴

 

ساخت ماتریس همانی با دستور eye در متلب

 

ماتریس همانی، ماتریسی می باشد که عناصر روی قطر اصلی آن، برابر ۱ و سایر عناصر آن، برابر ۰ باشد. چنانچه از دستور eye به صورت eye(n) استفاده کنیم، آنگاه دستور eye ، یک ماتریس همانی با n ردیف و n ستون را برمی گرداند. به مثال زیر توجه کنید :

مثال :

 

A=eye(4)

نتیجه :

 

A =

1     ۰     ۰     ۰
۰     ۱     ۰     ۰
۰     ۰     ۱     ۰
۰     ۰     ۰     ۱

نکته :

همچنین با دستور eye می توان ماتریس هایی با تعداد ردیف و تعداد ستون غیر مساوی ساخت که عناصر روی قطر اصلی آنها، برابر ۱ و سایر عناصر آنها، برابر ۰ باشد. به مثال زیر توجه کنید :

مثال :

 

A=eye(4,3)

نتیجه :

 

A =

1     ۰     ۰
۰     ۱     ۰
۰     ۰     ۱
۰     ۰     ۰

انجام پروژه بازدید : 1129 چهارشنبه 22 آبان 1392 زمان : 18:21 نظرات (0)

وارد کردن اطلاعات از Excel به درون متلب

 

برای وارد کردن اطلاعات از Excel به درون متلب، احتیاج به دستور خاصی نیست و این کار کاملا ساده می باشد. مثلا فرض کنید اطلاعاتی را شامل ۴ مقدار، به صورت شکل زیر، در درون نرم افزار Excel بنویسیم :

(matlab) آموزش متلب

سپس این اطلاعات را به صورت یک فایل، با نام numbers.xlsx ، ذخیره می کنیم. اکنون درون نرم افزار متلب، از منوی File ، گزینه Open را انتخاب می کنیم. پنجره ای به شکل زیر باز می شود :

(matlab) آموزش متلب

در این پنجره، باید ابتدا باید گزینه روبروی عبارت Files of type را به All Files تغییر بدهیم و سپس به آدرس حاوی فایل numbers.xlsx رفته و آن را انتخاب کنیم و بر روی گزینه Open کلیک کنیم. در این مرحله، پنجره ای به شکل زیر نمایش داده می شود :

(matlab) آموزش متلب

بر روی گزینه Next ، کلیک می کنیم تا پنجره زیر نمایش داده شود :

(matlab) آموزش متلب

اگر بر روی دکمه Finish کلیک کنیم، متلب اطلاعات را به صورت یک ماتریس در Workspace ذخیره خواهد کرد و مثلا در شکل فوق، اسم پیش فرض data را برای این ماتریس انتخاب کرده است. اگر اسم دیگری مد نظرتان است، باید با موس، بر روی کلمه data کلیک کنید و آن را تغییر دهید. ما اسم A را انتخاب کرده و سپس بر روی گزینه Finish کلیک می کنیم. مشاهده خواهید کرد که ماتریس A به Workspace افزوده می شود. کد زیر را اجرا می کنیم تا مقادیر ماتریس A را مشاهده کنیم :

 

A

نتیجه :

 

A =

1     ۲
۳     ۴

مقادیر برابر همان مقادیر وارد شده در نرم افزار Excel می باشد.

 

 

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1080 چهارشنبه 22 آبان 1392 زمان : 18:20 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

الگوریتم لونبرگ-مارکارد روشی است برای یافتن کمینه یک تابع غیر خطی چند متغیره که به عنوان یک روش استاندارد برای حل مسئله کمینه مربعات برای توابع غیرخطی درآمده است.[۱]

الگوریتم لونبرگ-مارکارد(LMA)بین الگوریتم گاوس-نیوتون(GNA) و روش نزول گرادیانی درونیابی می‌کند. LMA از GNA مقاوم‌تر است، که یعنی در بسیاری مواقع، حتی اگر بسیار دورتر از کمینه نهایی شروع کرده باشد، جوابی را پیدا می‌کند. از دیگر سو، برای تابع‌های خوشرفتار و پارامترهای آغازین معقول، LMA کمی کندتر از GNA است. LMA پرطرفدارترین الگوریتم برازش خم است و کاربران کمی ممکن است به روش‌های دیگر برازش خم نیاز پیدا کنند.

 

مثال تقریب مدل غیر خطی,مثال حل شده توسط نرم افزار متلب,مثال حل شده داده کاوی,مثال حل معادله به روش دوبخشی در متلب,مثال روش k-medoids,مثال عددی الگوریتم مورچگان,مثال های برنامه نویسی متلب,مثال های عملی برای الگوریتم pso,مثال هایی از پرسپترون,مثالهای جند درجه ازادی ارتعاشات,مثالهای چند درجه ازادی ارتعاشات,مثالهای داده کاوی در متلب,مثالهایی از نرم افزار لاتکس,

محتویات

  • ۱ مسئله
  • ۲ راه حل
  • ۳ منابع
  • ۴ جستارهای وابسته

مسئله[ویرایش]

m تابع f_1,cdots,f_mاز n پارامتر p_1,cdots,p_n که m ge n داده شده‌اند. برای آسانی از نمادگذاری برداری برای هر دوی تابع‌ها و پارامترها استفاده می‌کنیم.

mathbf{f^T}=(f_1,cdots,f_m) و mathbf{p^T}=(p_1,cdots,p_n)

مساله کمترین مربعات شامل جستن بردار پارامترهای mathbf{p} است که برای آن تابع هزینه

S(mathbf{p})=mathbf{f^Tf}=sum_{i=1}^m{[f_i(mathbf{p})]}^2

کمینه می‌شود.

کاربرد اصلی در مسئله برازش خم کمترین مربعات است: مجموعه‌ای از جفت‌های تجربی داده به فرم (t_i,y_i) در دست است، می‌خواهیم mathbf{p} پارامترهای خم مدل c(t|mathbf{p}) را به گونه‌ای بهینه کنیم که مجموع مربعات انحراف‌ها

f_i(mathbf{p})=y_i-c(t_i|mathbf{p})

کمینه گردد.

(صحبتی دربارهٔ نمادگذاری: ما از حرف x به خاطر اینکه برخی اوقات به جای p و برخی اوقات به جای t استفاده می‌شود خودداری می‌کنیم)

راه حل[ویرایش]

مانند سایر الگوریتم‌های کمینه‌سازی عددی، الگوریتم لونبرگ-مارکارد یک رویه تکراری است. برای شروع کمینه‌سازی، کاربر باید یک حدس آغازین برای بردار mathbf{p} پارامترها ارائه کند. در بسیاری مواقع یک حدس ناآگاهانه استاندارد مانند mathbf{p^T}=(1,1,cdots,1) به خوبی کار می‌کند. در جاهای دیگر، الگوریتم تنها وقتی کار می‌کند که حدس آغازین تا حدی به جواب نهایی نزدیک باشد.

در هر گام تکرار، بردار mathbf{p} پارامترها با یک تخمین جدید mathbf{p+q} جایگزین می‌شود. برای دستیابی به mathbf{q} توابع f_i(mathbf{p+q}) با خطی‌سازیشان

mathbf{f(p+q)approx f(p)+Jq}

تخمین زده می‌شوند که mathbf{J} ژاکوبین mathbf{f} در mathbf{p} است.

در یک کمینه مجموع مربعات S، داریم nabla_qS=0. با خطی‌سازی بالا، از این به معادله زیر می‌رسیم

(mathbf{J^TJ})mathbf{q}=-mathbf{J^Tf}

که mathbf{q} را می‌توان از آن با وارون کردن mathbf{J^TJ} بدست آورد. کلید LMA جایگزینی این معادله با "نسخه میراشده" آن است

(mathbf{J^TJ}+lambda)mathbf{q}=-mathbf{J^Tf}

ضریب میرایی نامنفی lambda در هر تکرار تنظیم می‌شود. اگر کاهش S تند بود مقدار کوچک‌تری به آن می‌دهیم که الگوریتم را به GNA نزدیکتر می‌کند، اما اگر یک تکرار کاهش ناکافی نشان داد lambda را افزایش داده و یک گام را نزدیکتر به جهت نزول گرادیانی بر می‌داریم. ضریب میرایی مشابهی در ساماندهی تیخونوف دیده می‌شود که در حل مسائل خطی کژنمود سودمند است.

اگر یک طول قدم بازیابی شده یا کاهش مجموع مربعات برای آخرین مجموعه پارامترهای mathbf{p}از مقادیر از پیش تعیین شده کمتر باشند تکرار پایان می‌یابد و آخرین بردار پارامتر mathbf{p} به عنوان جواب در نظر گرفته می‌شود.

انجام پروژه بازدید : 2505 چهارشنبه 22 آبان 1392 زمان : 18:18 نظرات (0)

رسم نمودار در مطلب قسمت اول:

 از این قسمت به بعد تصمیم گرفتم رسم نمودار در مطلب رو به صورت خلاصه و مفید شروع کنم:

 مطلب نمودارهای مختلفی را رسم می کند و این بحث در مطلب خیلی گسترده است اما سعی

 می کنم آنچه را که لازم به نظر میرسد توضیح دهم.

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 929 چهارشنبه 22 آبان 1392 زمان : 18:18 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

  است .هر کا راکتر در دو بایت از حافظه ذخیره می شود .charیک رشته در مطلب آرایه ای از نوع

یک متغیر کاراکتری هنگامی که یک رشته بدان نسبت داده می شود خود به خود به وجود می آید

 

 

انجام پروژه بازدید : 632 چهارشنبه 22 آبان 1392 زمان : 18:17 نظرات (0)

 

رگرسیون خطی برای مدل کردن مقدار یک متغیر کمی وابسته که بر رابطة خطی‌اش با یک یا چند پیشگو بنا شده است به کار می‌رود.

 

مدل رگرسیون خطی

مدل رگرسیون خطی فرض می‌کند که یک رابطة خطی (یا خط مستقیم) بین متغیر وابسته و هر پیشگو وجود دارد. این رابطه در فرمول زیر توضیح داده شده است.

yi = b0 + b1xi1 + … + bpxip + ei

که در آن

yi: مقدار مورد iام متغیر کمی وابسته است.

p: تعداد پیشگوها می‌باشد.

bj: مقدار ضریب jام است، j= 0 , … , p

Xij: مقدار مورد iام از پیشگوی jام می‌باشد.

ei: خطای در مقدار مشاهده شده برای مورد iام است.

مدل خطی است زیرا با افزایش مقدار پیشگوی jام با یک واحد باعث افزایش مقدار وابسته واحدهای bi می‌شود. توجه کنید که b0 عرض از مبدأ است، که وقتی مقدار هر پیشگو برابر صفر می‌شود، b0 مقدار مدل پیشگوی متغیر وابسته می‌باشد.

به منظور آزمایش فرضیه‌های مربوط به مقادیر پارامترهای مدل، مدل رگرسیون خطی نیز فرضیات زیر را در نظر می‌گیرد:

ـ عبارت خطا یک توزیع نرمال با میانگین ۰ دارد.

ـ واریانس عبارت خطا در سرتاسر موارد ثابت می‌باشد و از متغیرها در مدل مستقل است. یک عبارت خطا با واریانس غیرثابت را heteroscedastic می‌نامند.

ـ مقدار عبارت خطا برای یک مورد داده شده مستقل از مقادیر متغیرها در مدل و مستقل از مقادیر عبارت خطا برای موارد دیگر می‌باشد.

استفاده از رگرسیون خطی برای پیشگویی زمان‌های پرداخت کاری

شرکتی یک خط تولید دارد که نیازمند به یک مرحله پرداخت کاری در فرآیند ساخت می‌باشد. برای برنامه‌ریزی زمان تولید، زمان‌های پرداخت کاری ۵۹ محصول، به همراه نوع محصول و اندازه‌های مرتبط با آن، ثبت شده است.

این داده‌ها در فایل Polishing.sav ذخیره شده است. از رگرسیون خطی برای تعیین زمان پرداخت کاری که با اندازة محصول می‌تواند پیشگویی شود استفاده نمایید.

قبل از اجرای رگرسیون، باید یک نمودار پراکنش از زمان پرداخت کاری نسبت به اندازة محصول تهیه کنید تا مشخص شود که آیا مدل خطی برای این متغیرها منطقی است.

 

ایجاد نمودار پراکنش متغیر وابسته نسبت به مستقل

۱ـ برای ایجاد یک نمودار پراکنش از متغیر diam بر حسب time، مسیر زیر را از نوار منو برگزینید:

Graphs > Scatter / Dot

2ـ دکمة Define را کلیک کنید.

۳ـ time را به عنوان متغیر y و diam را بعنوان متغیر x برگزینید.

۴ـ Ok را کلیک کنید. در نتیجه نمودار پراکنش ایجاد می‌شود.

 

۵ـ برای دیدن بهترین خطی که روی نقاط این نمودار قرار می‌گیرد، با دوبار کلیک کردن نمودار، آن را فعال نمایید.

۶ـ نقطه‌ای را در Chart Editor برگزینید.

۷ـ آیکن Add Fit Line را کلیک کنید و سپس پنجرة Chart Editor را ببندید.

 

 

 

نمودار پراکنش نتیجه با خط رگرسیون مناسب ظاهر می‌گردد.

a ـ تغییرپذیری زمان پرداخت کاری طوری ظاهر می‌شود که با افزایش اندازه، زیاد می‌شود.

b ـ نقطة موجود در بالا و سمت راست نمودار ممکن است تأثیر بیش از حدی در وضعیت خط رگرسیون بگذارد.

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1212 چهارشنبه 22 آبان 1392 زمان : 18:17 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

لینک دانلود کد رایگان الگوریتم پرندگان گسسته,ماتریس قید خطی,ماشین بردار پشتیبان,ماشین بردار پشتیبان در متلب,ماشین های بردار پشتیبان,مبانی مدلسازی شبیه سازی کامپیوتری مدل مخفی مارکوف دانلود,متاب سایت,متلب,متلب الگوریتم ژنتیک,متلب ایران موجک ویولت سی دی,متلب برای مهندسان هوافضا,متلب تابع objective,متلب رسم همزمان نمودار (sin(ix,متلب سایت,متلب سایت,متلب سایت anfis,متلب سایت ادرس ساختمان مرکزی,متلب سایت دانلود,متلب سایت دانلود رایگان کد الگوریتم درونیابی لاگرانژ lagrange,متلب سایت سیمولینک,متلب سایت گنجینه طلایی,متلب سایتگ,متلب فازی,متلب فرادرس,متلب هوش مصنوعی,متلب و الگوریتم ژنتیک,متلبسایت,متن کاوی با ژنتیک,متن مقاله حل مسئله کوچکترین درخت پوشا با الگوریتم رقابت استعماری,متن های اعداد,مثال الگوریتم جهش قورباغه,مثال الگوریتم ژنتیک در متلب,مثال برای الگوریتم رقابت استعماری,مثال پیش بینی با تابع خطی متلب,

 

 

ایجاد ماتریس:

A=[1,2,3 ; 4,5,6]

A=[1:10]

A=[1:2:10]

A=[10:-1:1]

A=zeros(2,3)   ایجاد ماتریس ۲ در۳ با مقادیر صفر

A=ones(4,6)        ایجاد ماتریس ۴ در۶ با مقادیر یک

 

 

ترانهاده ماتریس A:

T=A’

 

دستیابی به یک یا چند مقدار از یک ماتریس:

A(2,3)    عنصر سطر۲ ستون ۳

A(:,2)       عناصر ستون ۲

A(1,:)         عناصر سطر ۱

A(3:6, 2:4)          ستونهای ۲ تا ۴ از سطرهای ۳ تا ۶

 

دستیابی به ستون آخر یک ماتریس:

A(:,end)

 

مجموع ستونهای یک ماتریس دو بعدی (و یا مجموع مقادیر یک ماتریس یک بعدی):

sum(A)

sum(A’)’                             مجموع سطرهای یک ماتریس دو بعدی

 

بدست آوردن مقادیر روی قطر اصلی A:

diag(A)

 

ایجاد ماتریس جادویی n×n: (ماتریس جادویی ماتریسی است که مجموع تمام سطرها و ستونها و قطرهای آن برابر است)

magic(n)

 

می خواهیم جای ستونهای دوم و سوم در ماتریس B را جابه­جا کرده و نتیجه را در A ذخیره نماییم:

A=B(: , [1,3,2,4])

 

توابع مقدماتی پرکاربرد:

  • abs(A)
  • exp(A)
  • sin(A)
  • sqrt(A)
  • factorial(n)
  • log2(A)                        لگاریتم در مبنای ۲
  • log10(A)                       لگاریتم در مبنای ۱۰

برای مشاهده لیست توابع مقدماتی عبارت help elfun را تایپ کنید.

 

عملگرهای محاسباتی:

  • A=B+C                جمع ماتریسی
  • A=B-C                 تفریق ماتریسی
  • A=B*C                     ضرب ماتریسی
  • A=B .* C                   ضرب عناصر متناظر در یکدیگر
  • A=B ./ C                   تقسیم عناصر متناظر بر یکدیگر
  • A=B .^ C                   به توان رساندن هر عنصر به عنصر متناظرش

اگر B یک ماتریس n×m باشد و C یک عدد اسکالر (یک ماتریس ۱×۱) باشد آنگاه عملگرهای فوق مقدار موجود در C را در تک تک مقادیر B اِعمال می­کنند. بنابراین عبارت A=B+1 تک تک مقادیر B را با ۱ جمع کرده و در A ذخیره می­کند. عبارت A=B.^2 نیز تک تک مقادیر B را به توان ۲ رسانده و نتیجه را در A ذخیره می­کند.

 

روشی بدست آوردن باقیمانده تقسیم:

A=mod(B,C)

 

ایجاد یک ماتریس ۳×۴  از اعداد تصادفی که دارای توزیع یکنواخت بین ۰ تا ۱ می­باشند:

A=rand(3,4)

ایجاد یک ماتریس ۳×۴  از اعداد تصادفی بین a تا b

A=floor((b-a+1)*rand(3,4)+a)

 

 

ایجاد یک ماتریس ۱×n که اعداد صحیح ۱ تا n به ترتیب تصادفی در آن قرار گرفته­اند:

A=randperm(n)

ایجاد ماتریس با  n×m که در هر سطر عناصر ۱ تا m به طور تصادفی قرار داده شده اند

for i=1:n

A(i,:)=randperm(m);

end

 

 

روند کردن اعداد:

  • A=fix(B)               گرد کردن به سمت صفر
  • A=round(B)          گرد کردن به سمت نزدیک ترین عدد صحیح(براساس رقم اعشار)
  • A=ceil(B)              گرد کردن به سمت مثبت بینهایت
  • A=floor(B)            گرد کردن به سمت منفی بینهایت

 

 

مرتب کردن هر یک از ستونهای ماتریس B بطور جداگانه:

A=sort(B)

 

مرتب کردن سطرهای ماتریس B ابتدا بر اساس ستون اول سپس ستون دوم و الی آخر:

A=sortrows(B)

مرتب کردن سطرهای ماتریس B فقط بر اساس ستون سوم:

A=sortrows(B,3)

 

 

حذف ستون دوم ماتریس A:

A(: , 2) = []

 

میانگین هر یک از ستونهای ماتریس B:

A=mean(B)

 

میانه هر یک از ستونهای ماتریس B:

A=median(B)

 

انحراف از معیار هر یک از ستونهای ماتریس B:

A=std(B)

 

مینیمم هر یک از ستونهای ماتریس B:

A=min(B)

 

ماکسیمم هر یک از ستونهای ماتریس B:

A=max(B)

 

یافتن اندیس عددهای غیر صفر در ماتریس B:

A=find(B)

یافتن اندیس سطر و ستون خانه مساوی ۲ ماتریس B:

[i,j]=find(B==2)

 

یافتن اندیس سطر و ستون خانه مساوی ۲ در سطر سوم از ماتریس B:

[i,j]=find(B(3,:)==2)

 

یافتن اندیس عددهای بین ۱ تا ۵ در ماتریس B:

A=find(A>1 & A

 

جمع تجمعی عناصر ماتریس B:

A=cumsum(B)

 

حاصل ضرب عناصر ماتریس B:

A=prod(B)

 

تولید n عدد در فواصل مساوی که از a شروع و به b ختم می­شود:

A=linspace(a,b,n)

 

ترسیم دو بعدی y برحسب x:

plot(x,y)

 

ترسیم سه بعدی:

plot3(x,y,z)

 

دستور زیر مقادیری از B که از ۶ بزرگتر است را در A ذخیره می­کند:

A=B(B>6)

 

شیفت دادن چرخشی: دستور زیر ماتریس B را یک واحد در جهت عمودی (از بالا به پایین) و دو واحد در جهت افقی (از راست به چپ) شیفت چرخشی می­دهد.

A=circshift(B, [1, -2])

 

دستور زیر ابعاد یک ماتریس را برمی­گرداند:

size(A)

 

دستور زیر طول یک بردار را برمی­گرداند: (اگر A دارای بیش از یک بعد باشد، طول طولانی­ترین بعد برگردانده می­شود)

length(A)

 

با دستور زیر می­توان تابع f را در محیط editor مشاهده کرد و در صورت دلخواه آن را تغییر داد. با این دستور حتی می­توان توابع خود MATLAB را نیز ویرایش نمود.

edit f

 

دستور زیر ماتریس B را بصورت تنک (خلوت) در A ذیره می­کند. اگر تعداد زیادی از مقادیر یک ماتریس برابر با صفر باشد با این روش می­توان در تخصیص حافظه صرفه­جویی کرد.

A = sparse(B)

 

دستور زیر ماتریس B را از حالت تنک به حالت کامل تبدیل کرده و در A ذخیره می­کند.

A = full(B)

 

توابع مخصوص رشته­ها:

  • strcat               متصل کردن دو رشته
  • strcmp            مقایسه دو رشته
  • strcmpi           مقایسه دو رشته صرفنظر از بزرگ یا کوچک بودن حروف

 

تمام جایگشتهای ممکن مقادیر یک بردار:

perms(A)

 

حذف مقادیر تکراری از یک بردار:

unique(A)

 

نمایش هیستوگرام مقادیر یک ماتریس:

hist(A,…)

 

دستورات کار با تصاویر:

  • I=imread(‘pic1.jpg’)         خواندن تصویر
  • imshow(I)                         نمایش تصویر
  • imwrite(I, ‘pic2.gif’)        ذخیره تصویر
  • figure                                باز کردن پنجره جدید برای عکس بعدی تا عکس قبلی از بین نرود

 

اشتراک دو مجموعه:

intersect(A,B)

 

دستورات برنامه نویسی

 

حلقه ها

for i=start : end

دستورات

end

 

while(شرط)

دستورات

end

 

if(شرط)

دستورات

end

 

 

اجرای برنامه تا فشردن یک کلید متوقف می­ماند:

pause

 

اجرای برنامه به مدت n ثانیه متوقف می­ماند:

pause(n)

 

در عبارت زیر اولین گروه از دستورات اجرا می­شوند. اگر خطایی رخ دهد اجرای این دستورات متوقف شده و دومین گروه از دستورات اجرا می­شود.

try

statements

catch

statement

end

 

 

با دستور زیر می­توان محیط ایجاد رابط کاربر گرافیکی را مشاهده کرد.

guide

 

با دستور زیر می­توان مدت زمان اجرای هر یک از خطوط برنامه را مشاهده کرد.

profile {on, off, viewer}

 

نمایش پیغام: نحوه استفاده از این دستور همانند printf() در زبان C است.

fprintf(‘n i=%d’, i)

 

نمایش پیغام خطا و خروج از اجرای برنامه:

error(‘your error message’)

انجام پروژه بازدید : 2798 چهارشنبه 22 آبان 1392 زمان : 18:01 نظرات (2)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

  شبکه عصبی MLP

 

شبکه عصبی MLP

شبکه (MLP) مجموعه ای از نورون ها است که در لایه مختلفی پشت سر هم قرار گرفته اند. مقادیر ورودی پس از ضرب در وزن های موجود در گذر گاه های بین لایه ها به نورون بعدی رسیده و در آن جا با هم جمع می شوند و پس از عبور از تابع شبکه مربوطه خروجی نورون ها را تشکیل می دهند. در پایان خروجی به دست آمده با خروجی مورد نظر مقایسه شده و خطای به دست آمده جهت اصلاح وزن های شبکه به کار می رود ، این امر اصطلاحاً آموزش شبکه عصبی نامیده می شود.

 

 

قاعده فراگیری MLP

قاعده فراگیری پرسپترون چند لایه را «قاعده کلی دلتا[1]» یا «قاعده پس انتشار[2]» می گویند. این عناوین در سال 1986 رومل هارت ، مک کللند و ویلیامز پیشنهاد شد.

اولین گروهی بودند که نه تنها قاعده فراگیری پرسپترون را به طور مستقل کشف کردند بلکه با ترکیب آن ها پرسپترون چند لایه را ایجاد نمودند. کتاب آن ها به نام «پردازش توزیع شده موازی[3]» یکی از مهم ترین منابع این حوزه علمی می باشد.

نحوه عمل پرسپترون چند لایه ای مشابه پرسپترون تک لایه ای است. به این صورت که الگویی به شبکه عرضه می شود و خروجی آن محاسبه می گردد ، مقایسه خروجی واقعی و خروجی مطلوب باعث می گردد که ضرایب وزنی شبکه تغییر یابد به طوری که در مراحل بعد خروجی صحیح تری حاصل شود. وقتی به شبکه آموزش ندیده ای الگویی را عرضه می کنیم ، خروجی های تصادفی تولید می کند. ابتدا باید تابع خطایی را تعریف کنیم که تفاوت خروجی واقعی و خروجی مطلوب را نشان دهد. از آن جایی که خروجی مطلوب را می دانیم این نوع فراگیری را « فراگیری با سرپرستی [4]» می نامیم.

برای موفقیت در آموزش شبکه باید خروجی آن را به تدریج به خروجی مطلوب نزدیک کنیم. به عبارت دیگر باید میزان خطا را کاهش دهیم. برای رسیدن به هدف از قانون دلتا استفاده می کنیم.


[1] Delta rule

[2] Backpropagation

[3] Parallel Distributed Processing

[4] Supervised learning

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1208 چهارشنبه 22 آبان 1392 زمان : 17:09 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

در متلب توابعی وجود دارند که به منظور کار با صوت طراحی شده اند.در این مقاله طرز کار این توابع را با هم مرور می کنیم.

 

beep:

ساده ترین دستور تولید صدا در متلب دستورbeepاست که همانطوری که از اسمش پیداست یک صدای بیپ تولید می کند.این صدا برای اجرا به هنگام تولید پیامهای اخطار در برنامه هایتان می تواند مفید باشد.می توان حالت بیپ کامپیوتر را فعال و غیر فعال کرد.به این صورت:

beep on

beep off

 

اگر حالت بیپ کامپیوتر غیر فعال باشد دیگر دستورbeepتولید صدا نخواهد کرد.

 

 

 

wavrecord:

این تابع پس از فراخوانی،از یک دستگاه ورودی صدا مثلا میکروفون در زمان مشخصی تحت فرکانس تعیین شده ای صدا را ضبط می کند.توجه داشته باشید که برای ضبط صدا باید سیستم در حال ضبط باشد.برای این منظورvolume controlرا باز کنید.در ویندوزxpبه این آدرس بروید:

 

Start/All Programs/Accessories/Entertainment/Volume control

 

از منویOptionsگزینه یPropertiesرا انتخاب کنید.Mixer Deviceرا در یک حالتInputقرار داده و دکمه ی رادیوییRecordingرا انتخاب کنید.

ساختار تابع به این صورت است:

data=wavrecord(n,fs);

این تابع تعدادnنمونه از یک سیگنال صوتی را تحت فرکانسfsهرتز ضبط می کند و آن را در متغیرdataذخیره می کند.مقدار پیش فرضfsبرابر 11025هرتز است.حال به تناسب زیر توجه کنید:

1secàfs Hz

t secàt*fs Hz

همانطور که گفته شد تابعwavrecordتعدادnفرکانس را ضبط می کند.بنابراین اگر بخواهیمtثانیه صدا ضبط کنیم بایدt*fsفرکانس را ضبط کنیم.یعنی تابع را تحت این ساختار فراخوانی کنیم:

data=wavrecord(t*fs,fs);

wavwrite:

حال باید صدای ضبط شده را در یک فایل صوتی ذخیره کنیم.برای این منظور از تابعwavwriteاستفاده می شود.این تابع ماتریس حاوی صدای ضبط شده را در یک فایل با پسوند.wavذخیره می کند.فایل تولید شده قابل پخش در کلیه ی برنامه های پخش صداست.

wavwrite(data,fs,'filename');

به متغیرfsدر ساختار تابع توجه کنید.مقدار متغیرfsدر ساختار تابعwavwriteباید با مقدار متغیرfsدر ساختار تابعwavrecordبرابر باشد.در واقع باید صدا را با همان فرکانسی که ضبط کرده ایم در فایل ذخیره کنیم.در غیر این صورت صدا زیر یا بم می شود.

wavread:

این تابع یک فایل صوتی با پسوند.wavرا می خواند و آن را در متغیرdataو فرکانسش را در متغیرfsذخیره می کند.

[data fs]=wavread('filename');

wavplay:

این تابع ماتریس حاوی صوت را تحت فرکانس مشخصی پخش می کند.

wavplay(data,fs);

sound:

طرز کار این تابع مشابهwavplayاست.

sound(data,fs);

باز هم یادآور می شوم که برای پخش صدا باید فرکانس پخش با فرکانس ضبط برابر باشد.

 

 

انجام پروژه بازدید : 845 چهارشنبه 22 آبان 1392 زمان : 17:09 نظرات (0)

  الگوریتم کلونی مورچه ها Ant Colony Optimization

 

انسان هميشه براي الهام گرفتن به جهان زنده پيرامون خود نگريسته است. يکي از بهترين طرح هاي شناخته شده، طرح پرواز انسان است که ابتدا لئورناردو داوينچي(1519-1452) طرحي از يک ماشين پرنده را بر اساس ساختمان بدن خفاش رسم نمود. چهار صد سال بعد کلمان آدر ماشين پرنده اي ساخت که داراي موتور بود و بجاي بال از ملخ استفاده مي کرد.


هم اکنون کار روي توسعه سيستم هاي هوشمند با الهام از طبيعت از زمينه هاي خيلي پرطرفدار هوش مصنوعي است. الگوريتمهاي ژنتيک که با استفاده از ايده تکاملي دارويني و انتخاب طبيعي مطرح شده، روش بسيار خوبي براي يافتن مسائل بهينه سازيست. ايده تکاملي دارويني بيانگر اين مطلب است که هر نسل نسبت به نسل قبل داراي تکامل است و آنچه در طبيعت رخ مي دهد حاصل ميليون ها سال تکامل نسل به نسل موجوداتي مثل مورچه است.

 


الگوريتم کلوني مورچه براي اولين بار توسط دوريگو (Dorigo) و همکارانش به عنوان يک راه حل چند عامله (Multi Agent) براي مسائل مشکل بهينه سازي مثل فروشنده دوره گرد (TSP :Traveling Sales Person) ارائه شد.

 


عامل هوشند(Intelligent Agent) موجودي است که از طريق حسگر ها قادر به درک پيرامون خود بوده و از طريق تاثير گذارنده ها مي تواند روي محيط تاثير بگذارد.

الگوريتم کلوني مورچه الهام گرفته شده از مطالعات و مشاهدات روي کلوني مورچه هاست. اين مطالعات نشان داده که مورچه ها حشراتي اجتماعي هستند که در کلوني ها زندگي مي کنند و رفتار آنها بيشتر در جهت بقاء کلوني است تا درجهت بقاء يک جزء از آن. يکي از مهمترين و جالبترين رفتار مورچه ها، رفتار آنها براي يافتن غذا است و بويژه چگونگي پيدا کردن کوتاهترين مسير ميان منابع غذايي و آشيانه. اين نوع رفتار مورچه ها داراي نوعي هوشمندي توده اي است که اخيرا مورد توجه دانشمندان قرار گرفته است.بايد تفاوت هوشمندي توده اي(کلوني) و هوشمندي اجتماعي را روشن کنيم.

در هوشمندي اجتماعي عناصر ميزاني از هوشمندي را دارا هستند. بعنوان مثال در فرآيند ساخت ساختمان توسط انسان، زماني که به يک کارگر گفته ميشود تا يک توده آجر را جابجا کند، آنقدر هوشمند هست تا بداند براي اينکار بايد از فرغون استفاده کند نه مثلا بيل!!! نکته ديگر تفاوت سطح هوشمندي افراد اين جامعه است. مثلا هوشمندي لازم براي فرد معمار با يک کارگر ساده متفاوت است.

در هوشمندي توده اي عناصر رفتاري تصادفي دارند و بين آن ها هيچ نوع ارتباط مستقيمي وجود ندارد و آنها تنها بصورت غير مستقيم و با استفاده از نشانه ها با يکديگر در تماس هستند. مثالي در اين مورد رفتار موريانه ها در لانه سازيست.

جهت علاقه مند شدن شما به اين رفتار موريانه ها وتفاوت هوشمندي توده اي و اجتماعي توضيحاتي را ارائه مي دهم :

فرآيند ساخت لانه توسط موريانه ها مورد توجه دانشمندي فرانسوي به نام گرس قرار گرفت. موريانه ها براي ساخت لانه سه فعاليت مشخص از خود بروز مي دهند. در ابتدا صدها موريانه به صورت تصادفي به اين طرف و آن طرف حرکت مي کنند. هر موريانه به محض رسيدن به فضايي که کمي بالاتر از سطح زمين قرار دارد شروع به ترشح بزاق مي کنند و خاک را به بزاق خود آغشته مي کنند. به اين ترتيب گلوله هاي کوچک خاکي با بزاق خود درست مي کنند. عليرغم خصلت کاملا تصادفي اين رفتار، نتيجه تا حدي منظم است. در پايان اين مرحله در منطقه اي محدود تپه هاي بسيار کوچک مينياتوري از اين گلوله هاي خاکي آغشته به بزاق شکل مي گيرد. پس از اين، همه تپه هاي مينياتوري باعث مي شوند تا موريانه ها رفتار ديگري از خود بروز دهند. در واقع اين تپه ها به صورت نوعي نشانه براي موريانه ها عمل مي کنند. هر موريانه به محض رسيدن به اين تپه ها با انرژي بسيار بالايي شروع به توليد گلوله هاي خاکي با بزاق خود مي کند. اين کار باعث تبديل شدن تپه هاي مينياتوري به نوعي ستون مي شود. اين رفتار ادامه مي يابد تا زماني که ارتفاع هر ستون به حد معيني برسد. در اين صورت موريانه ها رفتار سومي از خود نشان مي دهند. اگر در نزديکي ستون فعلي ستون ديگيري نباشد بلافاصله آن ستون را رها مي کنند در غير اين صورت يعني در حالتي که در نزديکي اين ستون تعداد قابل ملاحظه اي ستون ديگر باشد، موريانه ها شروع به وصل کردن ستونها و ساختن لانه مي کنند.

تفاوتهاي هوشمندي اجتماعي انسان با هوشمندي توده اي موريانه را در همين رفتار ساخت لانه مي توان مشاهده کرد. کارگران ساختماني کاملا بر اساس يک طرح از پيش تعيين شده عمل مي کنند، در حالي که رفتار اوليه موريانه ها کاملا تصادفي است. علاوه بر اين ارتياط مابين کارگران سختماني مستقيم و از طريق کلمات و ... است ولي بين موريانه ها هيچ نوع ارتباط مستقيمي وجود ندارد و آنها تنها بصورت غير مستقيم و از طريق نشانه ها با يکديگر در تماس اند. گرس نام اين رفتار را Stigmergie گذاشت، به معني رفتاري که هماهنگي مابين موجودات را تنها از طريق تغييرات ايجاد شده در محيط ممکن مي سازد.

 

بهينه سازي مسائل بروش کلوني مورچه(ACO) 
همانطور که مي دانيم مسئله يافتن کوتاهترين مسير، يک مسئله بهينه سازيست که گاه حل آن بسيار دشوار است و گاه نيز بسيار زمانبر. بعنوان مثال مسئله فروشنده دوره گرد(TSP). در اين مسئله فروشنده دوره گرد بايد از يک شهر شروع کرده، به شهرهاي ديگر برود و سپس به شهر مبدا بازگردد بطوريکه از هر شهر فقط يکبار عبور کند و کوتاهترين مسير را نيز طي کرده باشد. اگر تعداد اين شهرها n باشد در حالت کلي اين مسئله از مرتبه (n-1)! است که براي فقط 21 شهر زمان واقعا زيادي مي برد:

روز1013*7/1 = S1016*433/2 = ms10*1018*433/2 = !20

با انجام يک الگوريتم برنامه سازي پويا براي اين مسئله ، زمان از مرتبه نمايي بدست مي آيد که آن هم مناسب نيست. البته الگوريتم هاي ديگري نيز ارائه شده ولي هيچ کدام کارايي مناسبي ندارند. ACO الگوريتم کامل و مناسبي براي حل مسئله TSP است.


مورچه ها چگونه مي توانند کوتاهترين مسير را پيدا کنند؟

مورچه ها هنگام راه رفتن از خود ردي از ماده شيميايي فرومون(Pheromone) بجاي مي گذارند البته اين ماده بزودي تبخير مي شد ولي در کوتاه مدت بعنوان رد مورچه بر سطح زمين باقي مي ماند. يک رفتار پايه اي ساده در مورچه هاي وجود دارد :

آنها هنگام انتخاب بين دو مسير بصورت احتمالاتي( Statistical) مسيري را انتخاب مي کنند که فرومون بيشتري داشته باشد يا بعبارت ديگر مورچه هاي بيشتري قبلا از آن عبور کرده باشند. حال دقت کنيد که همين يک تمهيد ساده چگونه منجر به پيدا کردن کوتاهترين مسير خواهد شد :

همانطور که در شکل 1-1 مي بينيم مورچه هاي روي مسير AB در حرکت اند (در دو جهت مخالف) اگر در مسير مورچه ها مانعي قرار ديهم(شکل 2-1) مورچه ها دو راه براي انتخاب کردن دارند. اولين مورچه ازA مي آيد و بهC مي رسد، در مسير هيچ فروموني نمي بيند بنابر اين براي مسير چپ و راست احتمال يکسان مي دهد و بطور تصادفي و احتمالاتي مسير CED را انتخاب مي کند. اولين مورچه اي که مورچه اول را دنبال مي کند زودتر از مورچه اولي که از مسير CFD رفته به مقصد مي رسد. مورچه ها در حال برگشت و به مرور زمان يک اثر بيشتر فرومون را روي CED حس مي کنند و آنرا بطور احتمالي و تصادفي ( نه حتما و قطعا) انتخاب مي کنند. در نهايت مسير CED بعنوان مسير کوتاهتر برگزيده مي شود. در حقيقت چون طول مسير CED کوتاهتر است زمان رفت و برگشت از آن هم کمتر مي شود و در نتيجه مورچه هاي بيشتري نسبت به مسير ديگر آنرا طي خواهند کرد چون فرومون بيشتري در آن وجود دارد.

نکه بسيار با اهميت اين است که هر چند احتمال انتخاب مسير پر فرومون ت توسط مورچه ها بيشتر است ولي اين کماکان احتمال است و قطعيت نيست. يعني اگر مسير CED پرفرومون تر از CFD باشد به هيچ عنوان نمي شود نتيجه گرفت که همه مورچه ها از مسيرCED عبور خواهند کرد بلکه تنها مي توان گفت که مثلا 90% مورچه ها از مسير کوتاهتر عبور خواهند کرد. اگر فرض کنيم که بجاي اين احتمال قطعيت وجود مي داشت، يعني هر مورچه فقط و فقط مسير پرفرومون تر را انتخاب ميکرد آنگاه اساسا اين روش ممکن نبود به جواب برسد. اگر تصادفا اولين مورچه مسيرCFD(مسير دورتر) را انتخاب مي کرد و ردي از فرومون بر جاي مي گذاشت آنگاه همه مورچه ها بدنبال او حرکت مي کردند و هيچ وقت کوتاهترين مسير يافته نمي شد. بنابراين تصادف و احتمال نقش عمده اي در ACO بر عهده دارند.

نکته ديگر مسئله تبخير شدن فرومون بر جاي گذاشته شده است. برفرض اگر مانع در مسير AB برداشته شود و فرومون تبخير نشود مورچه ها همان مسير قبلي را طي خواهند کرد. ولي در حقيقت اين طور نيست. تبخير شدن فرومون و احتمال به مورچه ها امکان پيدا کردن مسير کوتاهتر جديد را مي دهند.


مزيتهاي ACO

همانطور که گقته شد «تبخير شدن فرومون» و «احتمال-تصادف» به مورچه ها امکان پيدا کردن کوتاهترين مسير را مي دهند. اين دو ويژگي باعث ايجاد انعطاف در حل هرگونه مسئله بهينه سازي مي شوند. مثلا در گراف شهرهاي مسئله فروشنده دوره گرد، اگر يکي از يالها (يا گره ها) حذف شود الگوريتم اين توانايي را دارد تا به سرعت مسير بهينه را با توجه به شرايط جديد پيدا کند. به اين ترتيب که اگر يال (يا گره اي) حذف شود ديگر لازم نيست که الگوريتم از ابتدا مسئله را حل کند بلکه از جايي که مسئله حل شده تا محل حذف يال (يا گره) هنوز بهترين مسير را داريم، از اين به بعد مورچه ها مي توانند پس از مدت کوتاهي مسير بهينه(کوتاهترين) را بيابند.



کاربردهاي ACO

از کاربردهاي ACO مي توان به بهينه کردن هر مسئله اي که نياز به يافتن کوتاهترين مسير دارد ، اشاره نمود :
1. مسير يابي داخل شهري و بين شهري

2. مسير يابي بين پست هاي شبکه هاي توزيع برق ولتاژ بالا

3. مسير يابي شبکه هاي کامپيوتري



مسير يابي شبکه هاي کامپيوتري با استفاده از ACO

در ابتدا مقدمه اي از نحوه مسير يابي در شبکه هاي کامپيوتري را توضيح خواهيم داد :

اطلاعات بر روي شبکه بصورت بسته هاي اطلاعاتي کوچکي (Packet) منتقل مي شوند. هر يک از اين بسته ها بر روي شبکه در طي مسير از مبدا تا مقصد بايد از گره هاي زيادي که مسيرياب (Router) نام دارند عبور مي کنند. در داخل هر مسيرياب جدولي قرار دارد تا بهترين و کوتاهترين مسير بعدي تا مقصد از طريق آن مشخص مي شود، بنابر اين بسته هاي اطلاعاتي حين گذر از مسيرياب ها با توجه به محتويات اين جداول عبور داده مي شوند.

روشي بنام ACR : Ant Colony Routering پيشنهاد شده که بر اساس ايده کلوني مورچه به بهينه سازي جداول مي پردازيد و در واقع به هر مسيري با توجه به بهينگي آن امتياز مي دهد. استفاده از ACR به اين منظور داراي برتري نسبت به ساير روش هاست که با طبيعت ديناميک شبکه سازگاري دارد، زيرا به عنوان مثال ممکن است مسيري پر ترافيک شود يا حتي مسير يابي (Router) از کار افتاده باشد و بدليل انعطاف پذيري که ACO در برابر اين تغييرات دارد همواره بهترين راه حل بعدي را در دسترس قرار مي دهد.

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1116 چهارشنبه 22 آبان 1392 زمان : 17:09 نظرات (0)

  آشنایی با الگوریتم ژنتیک

 

الگوريتم ژنتيک تکنيک جستجويي در علم رايانه براي يافتن راه‌حل تقريبي براي بهينه‌سازي و مسائل جستجو است. الگوريتم ژنتيک نوع خاصياز الگوريتمهاي تکاملي است که از تکنيکهاي زيست‌شناسي فرگشتي مانند وراثت و جهش استفاده مي‌کند.

در واقع الگوريتم‌هاي ژنتيک از اصول انتخاب طبيعي داروين براي يافتن فرمول بهينه جهت پيش‌بيني يا تطبيق الگو استفاده مي‌کنند. الگوريتم‌هاي ژنتيک اغلب گزينه خوبي براي تکنيک‌هاي پيش‌بيني بر مبناي رگرسيون هستند. مختصراً گفته مي‌شود که الگوريتم ژنتيک يک تکنيک برنامه‌نويسي است که از تکامل ژنتيکي به عنوان يک الگوي حل مسئله استفاده مي‌کند.مسئله‌اي که بايد حل شود ورودي است و راه‌حلها طبق يک الگو کد گذاري مي‌شوند که تابع برازش يا تابع هزينه، هر راه حل کانديد را ارزيابي مي‌کند که اکثر آنها به صورت تصادفي انتخاب مي‌شوند.

کلاً اين الگوريتم‌ها از بخش هاي زير تشکيل مي‌شوند :

  • تابع برازش
  • نمايش
  • انتخاب
  • تغيير

 

موتور الگوريتم ژنتيک يک جمعيت اوليه از فرمول ايجاد مي‌کند. هر فرد در برابر مجموعه‌اي از داده‌ها‌ي مورد آزمايش قرار مي‌گيرند و مناسبترين آنها (شايد 10 درصد از مناسبترين‌ها) باقي مي‌مانند؛ بقيه کنار گذاشته مي‌شوند. مناسبترين افراد با هم جفتگيري (جابجايي عناصر دي ان اي) و تغيير (تغيير تصادفي عناصر دي ان اي) کرده‌اند. مشاهده مي‌شود که با گذشت از ميان تعداد زيادي از نسلها، الگوريتم ژنتيک به سمت ايجاد فرمول‌هايي که دقيقتر هستند، ميل مي‌کنند. در حالي که شبکه‌هاي عصبي هم غير‌خطي و غير‌پارامتريک هستند، جذابيت زياد الگوريتم‌هاي ژنتيک اين است نتايج نهايي قابل ملاحظه‌ترند. فرمول نهايي براي کاربر انساني قابل مشاهده خواهد بود، و براي ارائه سطح اطمينان نتايج مي‌توان تکنيک‌هاي آماري متعارف را بر روي اين فرمول‌ها اعمال کرد. فناوري الگوريتم‌هاي ژنتيک همواره در حال بهبود است و براي مثال با مطرح کردن معادله ويروس‌ها که در کنار فرمول‌ها و براي نقض کردن فرمول‌ها‌ي ضعيف توليد مي‌شوند و در نتيجه جمعيت را کلاً قويتر مي‌سازند.

 


عموماً راه‌حلها به صورت 2 تايي 0 و 1 نشان داده مي‌شوند، ولي روشهاي نمايش ديگري هم وجود دارد. تکامل از يک مجموعه کاملاً تصادفي از موجوديت‌ها شروع مي‌شود و در نسلهاي بعدي تکرار مي‌شود. در هر نسل، مناسبترين‌ها انتخاب مي‌شوند نه بهترين‌ها.


يک راه‌حل براي مسئله مورد نظر، با يک ليست از پارامترها نشان داده مي‌شود که به آنها کروموزوم يا ژنوم مي‌گويند. کروموزوم‌ها عموماً به صورت يک رشته ساده از داده‌ها نمايش داده مي‌شوند، البته انواع ساختمان داده‌هاي ديگر هم مي‌توانند مورد استفاده قرار گيرند. در ابتدا چندين مشخصه به صورت تصادفي براي ايجاد نسل اول توليد مي‌شوند. در طول هر نسل، هر مشخصه ارزيابي مي‌شود وارزش تناسب توسط تابع تناسب اندازه‌گيري مي‌شود. 

گام بعدي ايجاد دومين نسل از جامعه است که بر پايه فرآيندهاي انتخاب، توليد از روي مشخصه‌هاي انتخاب شده با عملگرهاي ژنتيکي است: اتصال کروموزوم‌ها به سر يکديگر و تغيير.


براي هر فرد، يک جفت والد انتخاب مي‌شود. انتخاب‌ها به گونه‌اي‌اند که مناسبترين عناصر انتخاب شوند تا حتي ضعيفترين عناصر هم شانس انتخاب داشته باشند تا از نزديک شدن به جواب محلي جلوگيري شود. چندين الگوي انتخاب وجود دارد: چرخ منگنه‌دار(رولت)، انتخاب مسابقه‌اي،... .


معمولاً الگوريتم‌هاي ژنتيک يک عدد احتمال اتصال دارد که بين 0.6 و 1 است که احتمال به وجود آمدن فرزند را نشان مي‌دهد. ارگانيسم‌ها با اين احتمال دوباره با هم ترکيب مي‌شوند. اتصال 2 کروموزوم فرزند ايجاد مي‌کند، که به نسل بعدي اضافه مي‌شوند. اين کارها انجام مي‌شوند تا اين که کانديدهاي مناسبي براي جواب، در نسل بعدي پيدا شوند. مرحله بعدي تغيير دادن فرزندان جديد است. الگوريتم‌هاي ژنتيک يک احتمال تغيير کوچک و ثابت دارند که معمولاً درجه‌اي در حدود 0.01 يا کمتر دارد. بر اساس اين احتمال، کروموزوم‌هاي فرزند به طور تصادفي تغيير مي‌کنند يا جهش مي‌يابند، مخصوصاً با جهش بيت‌ها در کروموزوم ساختمان داده‌مان.


اين فرآيند باعث به وجود آمدن نسل جديدي از کروموزوم‌ها‌يي مي‌شود، که با نسل قبلي متفاوت است. کل فرآيند براي نسل بعدي هم تکرار مي‌شود، جفت‌ها براي ترکيب انتخاب مي‌شوند، جمعيت نسل سوم به وجود مي‌آيند و .... اين فرآيند تکرار مي‌شود تا اين که به آخرين مرحله برسيم.


شرايط خاتمه الگوريتم‌هاي ژنتيک عبارتند از:

  • به تعداد ثابتي از نسل‌ها برسيم
  • زمان اختصاص داده‌شده تمام شود
  • يک فرد(فرزند توليد شده) پيدا شود که مينيمم (کمترين) ملاک را برآورده کند
  • بيشترين درجه برازش فرزندان حاصل شود يا ديگر نتايج بهتري حاصل نشود
  • بازرسي دستي
  • ترکيبهاي بالا

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 871 چهارشنبه 22 آبان 1392 زمان : 17:09 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

  آموزش دستورات کنترلی

 

کنترل ارتعاشات سازه,کنترل به کمک شبکه های عصبی,کنترل بهینه,کنترل بهینه lqr,کنترل بهینه با متلب,کنترل بهینه خطی درجه دو,کنترل خطا در مطلب,کنترل خطی متلب,کنترل سیستم های هیبرید سیمپلکس,کنترل عصبی فضای حالت,کنترل غیر خطی در متلب,کنترل فازی در متلب,کنترل فازی عصبی تطبیقی,کنترل فازی متلب,کنترل کننده pid,کنترل کننده برای سیستم درجه دو,کنترل کننده تناسبی,کنترل کننده های pid در متلب,کنترل کننده های کنترل خطی در متلب,کنترل کنندهpid,کنترل موجودی و تقاضای متغییر,کنترلlqr,کنفرانس الگوریتمهای تکاملی,کوله پشتی با الگوریتم pso,کوله پشتی با الگوریتم ژنتیک,کوله پشتی با ژنتیک,کوله پشتی در تحقیق در عملیات,گسسته سازی در متلب,گشتاورهای اماری,گوس,گوس سایدل,گوس سایدل در متلب,لاپلاس معکوس,لاگرانژ,لبه گذاری در انالیز تصویر,لگوریتم pcaدر نتلب,لینک دانلود کد الگوریتم ژنتیک ترکیب شده با الگوریتم پرندگان,

 

 

  1. مقادیر صفر و قطب های آن را بدست آورید
  2. تابع تبدیل حاصل از اعمال یک ورودی پله واحد به این سیستم را تجزیه نمایید
  3. پاسخ این سیستم را به یک ورودی پله به اندازه سه واحد بدست آورید
  4. پاسخ این سیستم را به یک ورودی ضربان واحد بدست آورید.
  5. مکان هندسی ریشه های معادله مشخصه سیستم را که دارای تابع تبدیل مدار باز فوق است رسم کنید.
  6. پاسخ فرکانسی این سیستم را بدست آورید و حاشه فاز آن را بدست آورید
  7. اگر تابع فوق دارای تاخیر انتقالی برابر 5 باشد با استفاده از تقریب pade رسته دوم پاسخ پله ای آن را بدست آورید و با سیستم بدون تقریب مقایسه نمایید
  8. اگر این فرایند با یک کنترل کننده تناسبی با بهره 2، کنترل شود و با تاخیر انتقالی 5 در مسیر پس خور باشد پاسخ مدار بسته سیستم را به یک ورودی پله بدست اورید

پاسخ پرسش های فوق با دستورات متلب:

 

 

G0=tf([1 2 3],[1 2 3 4])

[z,p,k]=zpkdata(G0,'v')

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

G1=tf([1],[1 0])

G2=G1*G0

[num,den]=tfdata(G2,'v')

[r,p,k] = residue(num,den)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Jan 2012  by www.mathworks.ir

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[y,t]=step(G0)

plot(t,3*y)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

impulse(G0)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rlocus(G0)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

bode(G0)

[Gm,Pm,Wg,Wp]=margin(G0)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

G6=G0

set(G6,’inputdelay’,5)

G7=pade(G6,2)

step(G7,G6)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

G8=tf([1],[1])

set(G8,'inputdelay',5)

G9=feedback(2*G0,G8)

step(G9)

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 2734 چهارشنبه 22 آبان 1392 زمان : 17:09 نظرات (0)

 

کد متلب برای پردازش تصویر,کد متلب برای تابع لیاپانوف,کد متلب برای روش گوس سایدل,کد متلب برای روش گوس سایدل در محاسبات عددی,کد متلب برای فیلتر کالمن تعمیم یافته,کد متلب جستجوی ممنوعه,کد متلب جستجوی ممنوعه بهینه سازی سبد,کد متلب خوشه بندی k-means,کد متلب درس محاسبات عددی,کد متلب درونیابی لاگرانژ,کد متلب روش حذفی گاوس,کد متلب روش نیوتن رافسون,کد متلب کلونی مورچه ها,کد متلب کوله پشتی الگوریتم ژنتیک,کد متلب گوس سایدل,کد متلب گوس سایدل بهبود یافته,کد مسئله کوله پشتی,کد مطلب hdb3,کد مطلب روش نیوتن,کد مطلب فروشنده دوره گرد,کد نویسی الگوریتم ژنتیک در متلب,کد نویسی حداقل مربعات در متلب,کد نیوتن رافسون در متلب,کد های اماری در متلب,کد های آماده متلب,کد: در matlabsite mvcnf109,

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 2037 چهارشنبه 22 آبان 1392 زمان : 17:08 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

مطالب مقدماتی برای آغاز کار با نرم افزار matlab

 

آرایه ها ماتریس ها داده ها ورودی و خروجی عملیات ابتدایی - راهنمای برنامه نویسی و قواعد کلی

 

عمليات و توابع منطقي آرایه ها ماتریس ها داده ها ورودی و خروجی عملیات ابتدایی

 

آرایه ها ماتریس ها داده ها ورودی و خروجی عملیات ابتدایی چند جمله ای ها

 

راهنمای برنامه نویسی و قواعد کلی معادلات دیفرانسیل

 

آموزش پردازش تصویر در matlab قسمت اول

 

آموزش پردازش تصویر در matlab قسمت دوم

 

آموزش پردازش تصویر در matlab قسمت سوم

 

آموزش رابط گرافيگي كاربر GUI

 

آموزش رابط گرافيگي كاربر Simulink(شبیه‌سازی)

 

شبکه عصبی

 

کنترل

 

الگوریتم ها قسمت اول

 

الگوریتم ها قسمت دوم

 

پردازش صوت

 

جعبه ابزار و تولباکس های متلب

 

سیستم های فازی

 

 

 ترسیم گرافیکی توابع در متلب با دستور ezplot

 

محاسبه دترمینان یک ماتریس با دستور det در متلب

 

مدل مخفی مارکوف و الگوریتمهای آموزش

 

Linear Regression رگرسیون خطی

 

پردازش موازی (Parallel Computing) در متلب

 

مباحث نوین قسمت اول

 

 

 

 بر روی لینک های زیر کلیک نمایید

 

  • دانلود رایگان کد های آماده MATLAB
  •  دانلود رایگان فیلم های آموزشی الگوریتم های بهینه سازی ، شبکه عصبی ، منطق فازی و ...
  • انجام پروژه های برنامه نویسی MATLAB
  • تدریس خصوصی ، دوره های آموزشی الگوریتم های بهینه سازی ، شبکه عصبی ، منطق فازی و ...
  • دانلود رایگان فایل های آموزشی

 

 

 

کدمتلب الگوریتم کوله پشتی,کدنویسی الگوریتم pca در متلب,کدنویسی الگوریتم ژنتیک در متلب,کدنویسی در متلب,کدنویسی روش گوس جردن,کدهای الگوریتم ژنتیک,کدهای آماده الگوریتم مورچگان,کدهای برنامه نویسی مطلب,کدهای پردازش تصویر در matlab به صورت کامل,کدهای متلب الگوریتم جستجوی ممنوع,کدهای متلب برای مقادیرویژه تعمیم یافته,کدهای متلب مربوط به الگوریتم ژنتیک,کدینگ تفاضلی,کدینگ محاسباتی توضیح,کلاس اموزش متلب,کلاس آموزش matlab,کلاس بندی در متلب,کلاس های آموزش matlab,کلاس های متلب,کلاسترینگ فازی,کلاسیفایر,کلامی هریس-کلونی مورچه,کلنی زنبور عسل مصنوعی مبنی بر نرم افزار نگرش بهینه سازی,کلونی زنبور عسل,کلونی مورچه,کلونی مورچه,کلونی مورچه ها,کلیپ اموزشی حل معادله دیفرانسیل در متلب,

انجام پروژه بازدید : 2109 چهارشنبه 22 آبان 1392 زمان : 17:08 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

نظریه آشوب

ظریه آشوب، به شاخه‌ای از ریاضیات و فیزیک گفته می‌شود که مرتبط با سیستمهایی است که دینامیک آنها در برابر تغییر مقادیر اولیه، رفتار بسیار حساسی نشان می دهد؛ به طوری که رفتار‌های آینده آنها دیگر قابل پیش‌بینی نمی‌باشد. به این سیستم‌ها، سیستم‌های آشوبی گفته می‌شود که از نوع سیستمهای غیرخطی دینامیک هستند و بهترین مثال برای آنها اثر پروانه‌ای، جریانات هوایی و دوره اقتصادی می‌باشد.

این نظریه، گسترش خود را بیشتر مدیون کارهای هانری پوانکاره، ادوارد لورنتس، بنوا مندلبروت و مایکل فایگن‌باوم می‌باشد. پوانکاره اولین کسی بود که اثبات کرد، مساله سه جرم (به عنوان مثال، خورشید، زمین، ماه) مساله‌ای آشوبی و غیر قابل حل است. شاخه دیگر از نظریه آشوب که در مکانیک کوانتومی به کار می‌رود، آشوب کوانتومی نام دارد. گفته می‌شود که پیر لاپلاس یا عمر خیام قبل از پوانکاره، به این مشکل و پدیده پی برده بودند.طی ۲۰ سال گذشته، در حوزه ریاضیات و فیزیک مدرن، روش علمی و تئوری جدید و بسیار جالبی به نام “آشوب” پا به عرصه ظهور گذاشته است. تئوری آشوب، سیستمهای دینامیکی بسیار پیچیده ای مانند اتمسفر زمین، جمعیت حیوانات، جریان مایعات، تپش قلب انسان، فرآیندهای زمین شناسی و … را مورد بررسی قرار می دهد. انگاره اصلی و کلیدی تئوری آشوب این است که در هر بی نظمی ، نظمی نهفته است. به این معنا که نباید نظم را تنها در یک مقیاس جستجو کرد؛ پدیده ای که در مقیاس محلی، کاملا تصادفی و غیرقابل پیش بینی به نظر می رسد چه بسا در مقیاس بزرگتر، کاملا پایا (Stationary) و قابل پیش بینی باشد

network

 

 ۱-    منظور از شبکه های کامپیوتری چیست ؟

ادغام کامپیوترها و ارتباطات تأثیر بسزایی در سازمان دهی سیستم های کامپیوتری داشته است .

مفهوم « مرکز کامپیوتر » بعنوان اتاقی که کارهای مشتریان را انجام دهد کهنه شده است و این مدل قدیمی که تمام نیازهای محاسباتی سازمانها را انجام می داد جای خود را به تعدادی از کامپیوترهای متصل به هم داده است . این سیستم ها شبکه های کامپیوتری نامیده می شود . اگر دو کامپیوتر با یکدیگر مبادله اطلاعاتی داشته باشند
می گویند این دو کامپیوتر به یکدیگر متصل اند . اگر کامپیوتری بتواند کامپیوتر دیگری را راه اندازی ، متوقف و کنترل کند مستقل نیستند . سیستمی با یک واحد کنترل و چند کامپیوتر پیرو شبکه نیست .

یک شبکه کامپیوتری سیستم ارتباطی برای تبادل داده هاست که چندین کامپیوتر و دستگاه جانبی مثل چاپگر ها، سیستم های ذخیره سازی انبوه ، کتابخانه های CD-ROM – مودم – فکس و بسیاری از دستگاههای دیگر را بهم متصل می کند . نرم افزار شبکه به کاربران شبکه امکان می دهد که از طریق پست الکترونیکی به تبادل اطلاعات بپردازند و به طور گروهی روی پروژه ها کار کنند . برنامه های کاربردی مجوز دار را به اشتراک بگذارند و به منابع مشترک دسترسی پیدا کنند . سرپرستان شبکه همه این منابع را مدیریت کرده و خط مشی های امنیتی برای تعیین حقوق دستیابی کاربران و محدودیت های وی اتخاذ می کنند .

اسنتفاده اشترکی از منابع – کاهش  هزینه  صرفه جویی در هزینه – امنیت اطلاعات – ایجاد ارتباط مابین افراد مختلف از موارد استفاده شبکه های کامپیوتری می باشد .

 

۲-      نمونه کاربردهای شبکه های کامپیوتری را شرح دهید :

شبکه ها و سازمانها : بسیاری از سازمانها کامپیوترهایی دارند که دور از یکدیگرند ابتدا ممکن است این کامپیوترها مستقل از یکدیگر کار کنند اما امکان دارد مدیریت در مقطعی از زمان تصمیم بگیرد آنها را متصل کند تا قادر به استخراج و ارتباط اطلاعات کل مؤسسه باشد ( اشتراک منابع ) اشتراک منابع کوششی در جهت خلاف محدودیتهای جغرافیایی است .

هدف بعدی فراهم کردن قابلیت اعتماد بالا با داشتن منابع متعدد است بعنوان مثال تمام تمام فایل ها می توانند برروی دو یا سه ماشین کپی شوند بنابر این اگر از آنها به دلیل سخت افزاری قابل استفاده نباشند می توان از دیگری استفاده کرد .

برای کاربرد های نظامی ، بانکداری ، کنترل ترافیک هوایی ، امنیت راکتور اتمی و بسیاری از کاربردهای دیگر توانایی ادامه عملیات در مواجهه با مشکلات سخت افزاری بسیار مهم است .

هدف دیگر کاهش هزینه هاست در کامپیوترهای کوچک ، نسبت قیمت به کارآیی بهتر از کامپیوترهای بزرگ است .

هدف دیگر شبکه ، قابلیت افزایش کارآیی سیستم ، با رشد بار کاری آن است که با افزودن پردازشگرهای بیشتر انجام می شود .

هدف دیگر شبکه به تکنولوژی وابسته است که شبکه کامپیوتری می تواند رسانه ارتباطی قدرتمندی بین افراد دور از هم فراهم آورد .

کاربرد دیگر ، دستیابی به سیستم های اطلاعاتی مثل شبکه جهانی است که حاوی اطلاعاتی راجع به هنر ها ، تجارت ، آشپزی ، بهداشت ، تاریخ ، سرگرمیها ، تفریح ، علم ، ورزشها ، مسافرت و مصنوعات بسیار دیگر است.

دسته دیگری از کاربرد شبکه ، برهمکنش شخص با شخص است ( پست الکترونیکی )

۳-     منظور از شبکه های مخابراتی چیست و برای چه نوع کاربردهایی استفاده می شود ؟

ماهواره های مخابراتی بیشتر از هوا برای انتقال اطلاعات استفاده می کنند . اگر جسمی در فاصله ۳۶۰۰ kmزمین باشد . دوره گردشش با زمین یکی است ( دوره گردش زمین ) ، ( ۲۴ ساعت ) پس آن را ثابت می بینیم .

از این اصل برای ماهواره های مخابراتی استفاده کرده اند . روی زمین یکسری ایستگاه داریم . یک ماهواره چندین آنتن زمینی را می توان پوشش دهد یک قسمت اطلاعات را به ماهواره می دهد و ماهواره آن را به زمین می دهد . (پخش می کند )

 

سیستمهای آشوبگون

در دهه های گذشته تحقیقات زیادی روی سیستمهای فازی و تئوری آشوب توسط مهندسین سیستم و کنترل انجام شده است. سیستمهای فازی جایگاه خود را در بسیاری صنایع مانند اتوماسیون و کنترل باز کرده اند. از طرف دیگر در دنیای مهندسی و زمانی که به کاربردهای عملی می اندیشیم، پدیده مهم آشوب خودنمایی می کند و لذا کنترل آشوب تاثیر زیادی روی افزایش عملکرد این گونه سیستمها به لحاظ زمان و انرژی خواهد داشت.

در کنار هم قرار دادن این دو مقوله در چارچوب مفهوم محاسبات نرم می باشد. استدلالگری تقریبی و دینامیک آشوبگونه مغز انسان می تواند دلیلی بر پردازش حجم عظیمی از اطلاعات به صورت یکجا باشد. بنابراین ترکیب کردن سیستمهای فازی و تئوری آشوب دارای پتانسیل زیادی برای تحقیقات علمی و مهندسی پیش رو می باشد.

فازی و آشوب

هرچند رابطه این دو هنوز به درستی درک نشده است ولی با این حال مطالعات روی برخورد این دو با یکدیگر به حدود دو دهه پیش باز می گردد. به خصوص در زمینه های کنترل فازی آشوب [۳۲و۳۳] سیستمهای فازی تطبیقی برای مدلسازی آشوب [۳۴] رابطه های تئوری میان فازی و آشوب [۳۵و ۳۶] مدلسازی فازی سیستمهای آشوب [۳۷ و۳۸] سیستمهای فازی TS آشوبگون [۳۹و۴۰و ۴۱ و ۴۲] .

منطق فازی و تئوری آشوب هر دو در حدود یک زمان پا به عرصه وجود گذاشته اند. در واقع، منطق فازی در سال ۱۹۶۵ توسط زاده و اولین مشاهدات آشوب توسط لورنز در سال ۱۹۶۳ به دنیای علم معرفی شده اند.

تئوری مجموعه های فازی سعی در مدل کردن استدلالهای انسانی دارد. در این روند از اطلاعات تقریبی و داده های نا دقیق برای تصمیم گیری در شرایط نایقینی استفاده می شود. این سیستمها در واقع نادقیقی موجود را به صورت ریاضی مدل کرده و ابزاری مناسب برای مسائل واقعی فراهم می آورند. از طرف دیگر تئوری آشوب به مطالعه کیفی رفتارهای ناپایدار و غیر نوسانی در سیستمهای غیرخطی و معین اختصاص دارد. تحقیقات نشان می دهند که توانایی مغز انسان در پردازش حجم عظیم اطلاعات به دلیل دینامیک آشوبگونه متغیر آن می باشد. لذا عقیده بر این است که منطق فازی و تئوری آشوب، هر دو به استدلال گری انسانی و پردازش اطلاعات مرتبط هستند.

بنابراین با توجه به مطالب بیان شده، یادگیری ارتباطات ما بین منطق فازی و تئوری آشوب اجازه درک بهتر از هوش انسانی را به ما خواهند داد.

 

دستور keyboard برای توقف موقتی برنامه و اجرای دستوراتی دیگر

 

شاید قبلا با دستور pause آشنا شده باشید و بدانید که مثلا دستور (۱۵)pause ، در میان کدهای یک برنامه، باعث می شود که نرم افزار متلب، ۱۵ ثانیه توقف کند و سپس اجرای سایر دستورات را ادامه بدهد. اما در برخی مواقع، ممکن است کاربر بخواهد در میانه برنامه، توقفی وجود داشته باشد و در عین حال بتواند با دستوراتی، بعضی از متغیرها و یا مواردی دیگر از برنامه را چک کند و در صورت نیاز، آنها را با دستوراتی که در صفحه Command می نویسد، تغییر دهد. برای این منظور، باید دستور keyboard در میانه برنامه نوشته شود. زمانی که نرم افزار متلب، به دستور keyboard برسد، به سراغ دستورات بعدی نخواهد رفت و متوقف خواهد شد، سپس در پنجره Command ، علامت <<K نمایش داده خواهد شد. در این زمان، شما می توانید دستورات خود را در پنجره Command نوشته و اجرا کنید. برای آنکه به متلب اعلام کنید که اجرای برنامه را ادامه بدهد، باید در پنجره Command ، کلمه return را تایپ کرده و کلید enter از کیبورد را فشار بدهید. به مثال زیر توجه کنید :

مثال :

 

A=2
B=3
C=A+B
keyboard
B=C^2

نتیجه :

متلب دو دستور اول را اجرا می کند و سپس اجرای دستورات متوقف شده و در پنجره Command ، علامت <<K نمایش داده می شود. در این زمان، هر دستوری را می توانید اجرا کنید. مثلا می توانید مقدار جدیدی برای متغیر C تعریف کنید (مثل C=10). برای ادامه اجرای برنامه، در پنجره Command کلمه return را تایپ کرده و کلید enter از کیبورد را فشار بدهید.

data warehouse

در سازمان­ها، داده­ها و اطلاعات معمولا به دو شکل در سیستم­ها پیاده­سازی می­گردند:سیستم­های عملیاتی (OLTP)[1] و سیستم­های اطلاعاتی یا تحلیلی (OLAP)[2]. سیستم­های عملیاتی جهت انجام عملیات روزمره بنگاه­ها و سازمان­ها، تهیه و تولید و توسط کاربران استفاده می­گردد. در حقیقت این سیستم­ها باعث می شود تا چرخ کسب وکار بگردد[۳]. در این سیستم­ها داده­های کسب­و­کار به پایگاه داده­ها[۴] (تراکنشی) وارد می­شود. اما سیستم­های تحلیلی در جهت تحلیل داده­های موجود در سیستم­های عملیاتی مورد استفاده قرار می­گیرد. این سیستم­ها باعث می­گردند تا چرخش کسب و کار را بنگرید[۵]. در این سیستم­ها، اطلاعات مورد نیاز مدیران از درون سیستم­های عملیاتی موجود، استخراج و در پایگاه داده­های تحلیلی[۶] بار می­شود. تعریف ارائه شده توسط اینمون[۷] برای پایگاه داده تحلیلی به صورت زیر است: “پایگاه داده تحلیلی، یک مجموعه موضوع-گرا، یکپارچه، متکی بر بازه­های زمانی متفاوت(زمانگرا) و تغییر ناپذیر از داده­هاست که برای پشتیبانی مدیریت پردازش تصمیم­گیری به کار می­رود[۱]“. پایگاه داده تحلیلی شامل اطلاعات مجتمع شده از چندین پایگاه داده عملیاتی است و اغلب این اطلاعات با فرمت­های خاص و در پایگاه داده­های عملیاتی ناهمگن وجود دارد. هر قدر که ناهمگنی در پایگاه داده ها (فایل مبنا، XML ، رابطه­ای و…) بیشتر باشد، بارگذاری روی پایگاه داده تحلیلی پیچیده تر می­شود.

الگوریتم پریم

الگوریتم پریم، پیدا کردن درخت فراگیر مینیمال

الگوریتم پریم، الگوریتمی در نظریه گراف‌ها است که زیردرخت پوشای کمینه را برای یک گراف همبند وزن دار پیدا می‌کند یعنی زیرمجموعه‌ای از یال‌ها را در آن گراف می‌یابد که درختی را تشکیل می‌دهند که همه رئوس را شامل می‌شود در حالیکه مجموع وزن همه آن یال‌ها کمینه شده‌است. این الگوریتم در سال ۱۹۳۰ توسط ریاضیدانی به نام جارنیک داده شد وسپس در سال ۱۹۵۷ پریم، دانشمند علوم کامپیوتر آن را مستقل از جارنیک کشف کرد و در سال ۱۹۵۹ دایکسترا دوباره به آن دست یافت. ازاین رو این الگوریتم گاهی با نام الگوریتم DJP نیز شناخته می‌شود که برگرفته از اسامی دایکسترا، جارنیک و پریم است.

شرح الگوریتم

در این روش، ابتدا با یک گره دلخواه آغاز می کنیم. این گره را می توان به عنوان ریشه درخت تلقی کرد. از آن پس عملیات در  مراحل  مختلف تکمیل  می شود و در هر مرحله یک لبه به درخت افزوده می گردد. الگوریتم  زمانی خاتمه

می یابد  که کلیه گره ها به درخت افزوده شود.

در ابتدا مجموعه B  شامل یک گره، که همان گره دلخواه آغاز است، خواهد بود و مجموعه T خالی فرض خواهد شد. در هر لحظه محموعه B  مجموه گره های انتخاب شده و مجموعه T  مجموعه لبه های انتخاب شده خواهد بود.

برای پیاده سازی الگوریتم فرض می کنیم گراف  G=(V,E)  به وسیله ماتریس ارزشها نمایش داده شده باشد.  به گراف ارزشگذاری شده شکل ۳-۵  ماتریس  ارزشهای این گراف نشان داده شده است. در ماتریس ارزشها، ارزش ارتباطی یک گره به خودش برابر و ارزش ارتباطی دو گره که بین آنها لبه ای وجود نداشته ندارد نیز  فرض شده است.

در الگوریتم gprim  که بعداً آمده است ماتریس  cost  ماتریس ارزشها است. گرافG  با n  گره در نظر گرفته شده  است. فرض کدره ایم گره ها از صفر تا n-1  شماره گذاری شده اند و هر گره را با شماره آن خواهیم شناخت.

 T  یک آرایه دو بعدی است که دارای n-1 ردیف و دو ستون است. هر ردیف T  یک لبه را مشخص می کند، هر لبه با گره مبدا و گره انتهای آن مشخص می گردد.B  مجموعه گره های انتخاب شده است که توسط یک آرایه یک بعدی نمایش داده شده است. چنانچه گره شماره i   در مجموعه B باشد B[i]=1  و در غیر این صورت ۰B[i]= خواهد بود. به الگوریتم gprim دقت کنید. بقیه توضیحات بعداً بیان خواهد شد. 

 

 

 

گره انتخاب نشده i  در  نظر بگیرید.  این گره  ممکن است به  وسیله لبه های متفاوتی با گره هایی  از  مجموعه B  تماس برقرار نماید.  ارزش  همه این لبه ها  یکسان نیست و یکی ( یا بیشتر)  از این  لبه ها کمترین  ارزش را  دارد.  گرهی از B  که این لبه بدان  وصل  شده  می گردد.  نزدیکترین  همسایه i   در  مجموعه  B است.  اگر i  یک گره انتخاب شده باشد در مکان  near[i]  عدد منفی  یک گذاشته  شده  است.  برای یافتن لبه ای با کمترین ارزش که تماس مجموعه گره های انتخاب  نشده  را  با  مجموعه  گره های  ارزش  ( با به کارگیری مفهوم نزدیکترین همسایه)  که تماس آن ر ا  با  مجموعه B برقرارکند،  پیدا می کنیم و ارزش این ارتباط را در آرایه یک بعدی mindist می گذاریم  و سپس در آرایه  mindist کمترین مقدار از بین مقادیر متناظر با گره های انتخاب نشده را پیدا می کنیم. بنابراین mindist[i]  ارزش ارتباطی گره انتخاب نشده I را با نزدیکترین همسایه اش در B مشخص می کند.

در الگوریتم   gprim ابتدا  مجموعه B  تهی می گردد  و  سپس گره  شماره  صفر به آن  افزوده  می شود.  با توضیحات قبلی باید near[0]=-1 گردد که این کار عملی می شود.

متغیر mincost ارزش ارتباطی درخت پوشای نهای را بما خواهد داد. مقدار این متغیر ابتدا صفر است و به تدریج که لبه ای به T افزوده می شود ارزش آن به mincost  اضافه خواهد شد. گره صفر نزدیکترین همسایه  ندارد.

 بنابراین mindist[0]=  منظور شده  که در عمل به جای  از MAXFLOAT استفاده شده است.نظر به اینکه در ابتدا تنها گره شماره صفر در مجموعه B قرارداده شده، نزدیکترین همسایه گره های انتخاب نشده همه گره ها گره صفر خواهد  بود  حتی اگر گره های پ لبه مشترکی با گره صفر نداشته  باشند می توانیم فرض کنیم که لبه مشترکی  با ارزش وجود دارد.اولین گرهی که با B  افزوده می شود کاملاً  دلخواه  است  و همان طور که گفته شد ما در این الگوریتم گره صفر را به این منظور انتخاب کرده ایم.بعد از  اقدامات اولیه ،مراحل اصلی الگوریتم آغاز می گردد .

در هر مرحله ابتدا مینیمم مقدار از بین مقادیر متناظر با گره های انتخاب شده در آرایه mindistپیدا می شود و ردیفی که این مقدار را دارد مشخص میگردد. این کار در زیر روال minedge انجام شده  وردیف مربوطه بر می گردد .

این ردیف،j ، شماره گره انتخاب نشده ای است که یتواند در این مرحله به وسیله لبه j , near[j]>>با B ارتباط برقرار کند .سپس این لبه به T  افزوده می گردد،  و B[j]،mindist[j]  وارزش لبه به mincost افزوده می شود.

آنچه در انتهای هر مرحله انجام می شود از اهمیت بسزایی برخوردار است .چون گره j به گره B  افزوده می گردد ممکن است برروی نزدیک ترین همسایه گره های انتخاب نشده اثر بگذارد و خود نزدیکترین همسایه برخی از گره ها بشود.اگر گره انتخاب نشده k  را داشته باشیم که فاصله اش با نزدیک ترین همسایه اش بیشتر از فاصله اش با j  باشد همسایه k  را باید تغییر دهیم .

با منظور کردن O(n) برای مرتبه زمانی minedge   مرتبه زمانی الگوریتم gprim برابر O(n) محاسبه می گردد .نکته ای که قابل بیان است این که ، می توان با کمی تغییر کارایی الگوریتم را اندکی بالا برد ، برای مثال آرایه B  را حذف و به جای آن از near  استفاده کرد .اما  این تغییرات بر  مرتبه زمانی الگوریتم اثری ندارد . باتوجه به پیچیده  بودن الگوریتم سعی بر تدوین ساده آن شده  است . از آن گذشته به عنوان یک اصل ،  اعتقاد ما بر این است  که از  این  متغیر تا  وقتی فعال است، تنها به یک منظور استفاده می شود . پیشنهاد  بالا  برای near   دو منظور مطرح می کند ، اول نزدیک ترین همسایه و دوم انتخاب شده بودن یا نبودن گره ها .

در این جا یک مثال می تواند به درک مطالب گفته شده کمک کند.

 

 

 

مثال ۱-۵:درخت پوشای گراف مرتبط بودن جهت شکل ۴-۵را به دست آورید.

 

 

 

 

 

                             

                                                        شکل ۴-۵:یگ گراف مرتبط بدون جهت

 

با توجه به الگوریتم gprim  ، عملیات مقدماتی الگوریتم در جدول شکل۵-۵الف خلاصه شده است .در این جدول M به مفهوم بزرگترین عدد اعشاری ویا همان فرض شده

 

 

 

 

 

 

                                                            شکل ۵-۵الف

مرحله اول عملیات در جدول شکل ۵-۵ ب خلاصه شده و حاصل با شکل نشان داده شده است.

 

 

                                                                         شکل۵-۵ب

 

مراحل دوم  تا پنجم نیز متشابها انجام ونتایج در شکل های ۵-۵پ تا ج آمده است .

 

 

 

 

 

                                             

                                                       شکل ۵-۵پ

 

 

 

 

                            

                                                         شکل ۵-۵ت

 

هزینه زمانی

یک پیاده سازی ساده، استفاده از نمایش گراف به صورت ماتریس مجاورت است که درآن به دنبال آرایه‌ای از وزنها باشیم و یال‌های با وزن کمینه را به مجموعه خود بیفزائیم. این روش ( (V۲) O زمان می‌برد. الگوریتم پریم بااستفاده از داده ساختار هیپ دودوئی ساده و نمایش لیست مجاورت می‌تواند در زمان ((E log V O( اجرا شود که در آن E تعداد یالها و V تعداد رئوس است. استفاده از مدل پیچیده تری به نام هیپ فیبوناچی باعث می‌شود این زمان تا حد

  (E + V log V )O کاهش یابد. سرعت این روش به خصوص زمانی آشکار می‌شود که در گراف رابطه (E = ω(V بین رئوس و یالها برقرار باشد.

مثال ۱

شکل

شرح
 

این شکل گراف وزن دار اصلی را نشان می‌دهد. اعداد کنارهر یال بیانگر وزن آن یال هستند.

 

راس D به طور دلخواه به عنوان نقطه شروع انتخاب شده‌است. رئوس A، B، E، F همگی با یالی به D متصل هستند. A نزدیک ترین راس به D است بنابراین همراه با یال AD برای درخت انتخاب می‌گردد.

 

راس بعدی که انتخاب می‌شود باید نزدیک ترین راس به A یاD باشد. فاصله B از D برابر ۹ و فاصله آن از A برابر ۷ است. فواصل E وF نیز به ترتیب ۱۵ و ۶ می‌باشد. راس F کمترین فاصله را دارد ینابراین این راس و کمان DF را انتخاب می‌کنیم.

 

الگوریتم مشابه بالا ادامه می‌یابد و راس B که فاصله اش از A برابر ۷ است انتحاب می‌شود.

 

در این حالت انتخاب ما بین C، E، G می‌تواند صورت گیرد. فاصه C از B برابر ۸، فاصله E ازآن برابر ۷ و فاصله G از F نیز ۱۱ است. مشاهده می‌شود که E نزدیک ترین راس است پس آن را همراه با کمان BE انتخاب می‌کنیم.

 

در اینجا تنها رئوس C و G باقی مانده‌اند. فاصله C از E برابر ۵ و فاصله G از آن ۹ است پس C انتخاب می‌شود و کمان CE نیز همزمان با آن وارد درخت می‌گردد.

 

تنها راس باقیمانده G است که چون فاصله اش از E کمتر از فاصله اش تا F می‌باشد، یال EG را انتخاب می‌کنیم.

 

در پایان همه رئوس انتخاب شده‌اند و درخت پوشای کمینه با رنگ سبز نشان داده شده‌است که وزنی برابر ۳۹ دارد.

 

 

 

انجام پروژه بازدید : 665 چهارشنبه 22 آبان 1392 زمان : 17:08 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

کی از مسائلی که در پردازش سیگنال توجهات را به خود معطوف نموده است، مدلسازی سیگنال است. انتخابهای مختلفی برای مدل کردن سیگنال و خصوصیات آن وجود دارد. از یک دیدگاه می توان مدلهای سیگنال را به دو دسته مدلهای معین[۱] و مدلهای آماری[۲] تقسیم بندی نمود. مدلهای معین عمدتا برخی خواص شناخته شده سیگنال را مورد استفاده قرار می دهند. در این حالت تشکیل مدل سیگنال سرراست است و تنها کافی ست مقادیر پارامترهای مدل تخمین زده شود. در مدلهای آماری سعی در ایجاد مدل با استفاده از خواص آماری سیگنال است. مدلهای گاوسی، زنجیره مارکوف و مدل مخفی مارکوف از جمله این روشها هستند. فرض اساسی در مدلهای آماری این است که می توان خواص سیگنال را به شکل یک فرآیند تصادفی پارامتری مدل نمود.

مدل مخفی مارکوف در اواخر دهه ۱۹۶۰ میلادی معرفی گردید و در حال حاضر به سرعت در حال گسترش دامنه کاربردها می باشد. دو دلیل مهم برای این مساله وجود دارد. اول اینکه این مدل از لحاظ ساختار ریاضی بسیار قدرتمند است و به همین دلیل مبانی نظری بسیاری از کاربردها را شکل داده است. دوم اینکه مدل مخفی مارکوف اگر به صورت مناسبی ایجاد شود می تواند برای کاربردهای بسیاری مورد استفاده قرار گیرد.

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1942 چهارشنبه 22 آبان 1392 زمان : 17:08 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

 

الگریتم,الگریتم apriori,الگریتم dbscan,الگریتم de,الگریتم fp-growth,الگریتم k-means,الگریتم k نزدیکترین همسایه,الگریتم knn,الگریتم lloyd,الگریتم pca برای کاهش بعد غیر خطی,الگریتم pso,الگریتم pso چند هدفه یا mopso در matlab,الگریتم pso چند هدفه یا mopso در متلب,الگریتم pso چند هدفه یا mopso در مطلب,الگریتم اجتماع ذرات,الگریتم ازدحام ذرات,الگریتم انتخاب تکثیری clonal selection algorithm یا csa,الگریتم انتخاب مبتنی بر پوش پارتو یا pesa,الگریتم انتخاب مبتنی بر شکل دهی پارتو,الگریتم بهینه سازی باکتری bacterial foraging optimization یا bfo,الگریتم بهینه سازی بیزی bayesian optimization algorithm یا boa,الگریتم بهینه سازی بیزی سلسله مراتبی یا hboa,الگریتم ترکیبی,الگریتم تکامل تفاضلی,الگریتم تکامل تفاضلی شامل مباحث تئوری و عملی,الگریتم تکامل مجتمع های مخلوط شده,الگریتم تکامل مجتمع های مخلوط شده یا sce-ua,الگریتم تکاملی,

 

با استفاده از دستور det در متلب، می توانیم دترمینان یک ماتریس را محاسبه کنیم. به مثال زیر توجه کنید :

مثال :

 

A=[1 2 3;4 5 6;7 8 9]
B=det(A)

نتیجه :

A =

1     ۲     ۳
۴     ۵     ۶
۷     ۸     ۹

B =

انجام پروژه بازدید : 2599 چهارشنبه 22 آبان 1392 زمان : 17:08 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

تاریخچه منطق فازی

زمانی که در سال 1965 پروفسور لطفی‌زاده، استاد ایرانی‌الاصل دانشگاه برکلی، اولین مقاله خود را در زمینه فازی تحت عنوان مجموعه‌های فازی (FUZZY TEST) منتشر کرد، هیچ کس باور نداشت که این جرقه‌ای خواهد بود که دنیای ریاضیات را به طور کلی تغییر دهد.

گرچه در دهه 1970 و اوایل دهه 1980 مخالفان جدی برای نظریه فازی وجود داشت، اما امروزه هیچ کس نمی‌تواند ارزش‌های منطق فازی و کنترل‌های فازی را منکر شود.
افتخار هر ایرانی است که پایه علوم قرن آینده از نظریات یک ایرانی می‌باشد؛ باید قدر این فرصت را دانست و در تعمیم نظریه فازی و استفاده از آن کوشش و تلاش کرد.
زمینه‌های پژوهش و تحقیق در نظریه فازی بسیار گسترده می‌باشد؛ پژوهشگران علاقه‌مند می‌توانند با پژوهش و تحقیق در این زمینه باعث رشد و شکوفایی هرچه بیشتر نظریه فازی شوند.

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 933 چهارشنبه 22 آبان 1392 زمان : 17:07 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

جعبه ابزار Symbolic Math

 

جعبه ابزار ریاضیات نمادین (Symbolic Math Toolbox) محاسبات نمادین را وارد محیط عددی MATLAB می سازد. این جعبه ابزار امکانات عددی و گرافیکی ®MATLAB را به وسیله ی نوع دیگری از محاسبات ریاضی که در زیر ذکر شده است تکمیل می کند. به زبان ساده در این جعبه ابزار به جای سرکار داشتن با اعداد با حروف یا همان نماد ها سر رو کار داریم.

  • حساب دیفرانسیل و انتگرال (مشتق، انتگرال، حد، مجموع سری، سری تیلور)
  • جبر خطی (معکوس، دترمینال، مقدار ویژه، تجزیه به مقادیر یکتا و صورت متعارفی یک ماتریس نمادین).
  • ساده سازی (روشهای ساده کردن یک عبارت جبری).
  • حل معادلات (راه حلهای نمادین و عددی معادلات جبری و معادلات دیفرانسیل).
  • توابع ریاضی خاص (توابع ریاضی خاص معمول).
  • محاسبات دقت متغییر (ارزیابی عددی عبارات ریاضی بر حسب دقت های تعریف شده).
  • تبدیل ها (فوریه، لاپلاس، z و تبدیل های معکوس آنها).

 

موتور محاسباتی که در این جعبه ابزار از آن استفاده می شود هسته ®MAPLE می باشد که اولین بار در دانشگاه واترلوی کانادا (Waterloo) و اخیرا در بخش فنی کالج ذوریخ توسعه یافت. MAPLE تحت پشتیبانی Waterloo Maple تحت فروش قرار گرفت.

 


این جعبه ابزار در MATLAB 6.0 و نسخه های بالاتر آن موجود می باشد. 

به طور کلی دو جعبه ابزار نمادین وجود دارد.
1- جعبه ابزار ریاضیات نمادین که مجموعه ای بیش از 100 تابع MATLAB است که دسترسی به هسته Maple را به وسیله توابعی که به شکل املای توابع MATLAB هستند را فراهم می کند. همچنین این جعبه ابزار به شما اجازه می دهد که دسترسی به توابع جبرخطی Maple داشته باشید.

2- جعبه ابزار نمادین تعمیم داده شده امکان دسترسی به بسته های (Packages) غیر گرافیکی Maple، ویژگی های برنامه نویسی Maple و زیر برنامه های تعریف شده توسط کاربر در Maple را برای شما فراهم می کند. 

به وسیله این دو جعبه ابزار می توان M-file هایی را تعریف نمود که در آن به توابع و فضای کاری Maple دسترسی داشت.

اگر شما از قبل یک کپی از نرم افزار Maple V داشته باشید، می توانید از آن به جای کتابخانه ای که توسط ریاضیات سمبولیک ارائه می شود استفاده کنید، به این ترتیب در فایل mapleinit.m که در دایرکتوری MATLAB وجود دارد به جای آدرس موجود آدرس محلی که Maple در آن نصب شده است را باید نوشت.

 

انجام پروژه بازدید : 1762 چهارشنبه 22 آبان 1392 زمان : 17:07 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

اعداد ويژه

 

علاوه بر اعداد حقيقي MATLAB ، قادر است حاصل عباراتي را كه از نظر جبري انجام پذير نيستند  را نيز پوشش دهد. تقسيم يك عدد بر صفر بي نهايت (Inf) و تقسيم صفر بر صفر غير قابل  محاسبه است. (NaN)

NaN=Not a Number

» x=[1 2 0]./[2 0 0]

Warning: Divide by zero.

x =

0.5000          Inf               NaN

همچنين اعداد موهومي را به سادگي اعداد حقيقي مي توانيد در محاسبات استفاده كنيد.

» y=sqrt(-1)

y =

0 + 1.0000i

توابع isreal ،isnan، isinf و finite به شما امكان مي دهد كه اين اعداد را شناسايي كنيد.

» finite(x)

ans =

1        0       0

» isinf(x)

ans =

0        1        0

» isnan(x)

ans =

0        0        1

» isreal(x)

ans =

1

» isreal(y)

ans =

0

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 810 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

 

بعد از نوشتن هر برنامه در متلب، این امکان وجود دارد تا تحلیل زمانی انجام شود و به صورت آماری مشخص شود که هر خط و هر تابع چه بخشی از زمان اجرا را به خود اختصاص می دهد و این گزینه در متلب تحت عنوان run & time وجود دارد.

این قابلیت زمانی اهمیت پیدا می کند که برنامه شما بخشی یک برنامه بزرگتر است و با هدف بهینه کردن برنامه، سعی در کوتاه کردن زمان اجرا دارید.

 

 

 

 

 

 

 

 

 

مابقی مطالب در ادامه مطلب

 

 

 

hybrid algorithm,ica,image histogram,image processing,image processing در matlab,image processing در متلب,image processing در مطلب,image processing دیجیتال,image processing و سیگنال,imahe enhancement,imperialist competitive algorithm,independent model,industrial engineering,inheritance,inheritance در تعریف کلاس ها در matlab,inheritance در تعریف کلاس ها در متلب,inheritance در تعریف کلاس ها در مطلب,intensity transform,interpolation,inventory control,iterative nonlinear reconstruction,kalman filter,kdd,kernel pca,k-fold cross-validation,k-means,knapsack problem,k-nearest neighbors,knn,knowledge discovery,knowledge discovery from data,kohenen learning rule,latex,layout,layout design,least squares,line detection,linear optimization,linear programming,linear quadratic Gaussian,linear quadratic regulator,linear regression,linear spatial filters,linprog,lloyd's algorithm,lookup table,low-pass filtering,lqg,lqg regulator,lqg tracker,lqr

انجام پروژه بازدید : 2220 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

دستور demo پنجره جديدي باز مي كند كه شما در آن مي توانيد مثالهاي متعددي از امكانات MATLAB را بيابيد. بسياري از اين مثالها نمودارهاي جالب و همراه با جزئيات توليد مي نمايند و  همچنين توضيحات مفيدي در باره نحوه استفاده از MATLAB ارائه مي دهند. توصيه مي شود كه حتما" تعدادي از اين مثالها را مشاهده كنيد تا متوجه شويد كه چه كارهايي مي توان با MATLAB انجام داد. بويژه دقت كنيد كه چگونه برنامه هاي ساده مي توانند نتايج پيچيده اي  توليد نمايند.

در صورتي كه بخواهيد در مورد دستور و يا تابع خاصي اطلاعاتي به دست بياوريد مي توانيد در پنجره MATLAB كلمه help و پس از آن نام دستور يا تابع مورد نظر را بنویسید:

استفاده از راهنمای متلب


» help magic
MAGIC Magic square.
MAGIC(N) is an N-by-N matrix constructed from the integers
1 through N^2 with equal row, column, and diagonal sums.
Produces valid magic squares for N = 1,3,4,5,...

روش ديگر استفاده از help بكار بردن دستور helpwin است.  اين دستور پنجره كمكی را باز مي كند و اجازه مي دهد تا توضيحات مورد نياز را در پنجره جداگانه اي بدست آوريد. توضيحات داده شده در اين پنجره همانهايي هستند كه دستور help ارائه مي نمايد.
لازم به توضيح است كه نام دستورات و توابع در help با حروف بزرگ آورده مي شوند در حاليكه MATLAB نسبت به بزرگ و كوچك بودن حروف حساس است و هنگام استفاده از اين دستورات و  توابع بايد آنها را با حروف كوچك بكار برد.

 

متلب چیست؟

نرم افزار  MATLAB برنامه كامپيوتري است كه براي كساني كه با محاسبات عددي، و بويژه جبر خطي سر و كار دارند، تهيه شده است.

نام اين نرم افزار از عبارت انگليسي MATrix LABoratory اقتباس شده و هدف اوليه آن قادر ساختن مهندسين و دانشمندان به حل مسائل شامل عمليات ماتريسي بدون نياز به نوشتن برنامه در زبانهاي برنامه نويسي متداول همچون FORTRAN و C  بود. با گذشت زمان قابليتهاي بسيار بيشتري به اين نرم افزار افزوده شده اند بطوري كه در حال حاضر MATLAB به ابزار پر قدرتي براي ترسيم داده ها، برنامه نويسي و انجام محاسبات مهندسي  و پژوهشي تبديل شده است.

کار کردن با ماتریس‌ها در Matlab بسیار ساده است. در حقیقت تمام داده‌ها در Matlab به شکل یک ماتریس ذخیره می‌شوند. برای مثال یک عدد (اسکالر) به شکل یک ماتریس ۱*۱ ذخیره می‌شود. یک رشته مانند «Whale is the biggest animal» به شکل ماتریسی با یک سطر و چندین ستون (که تعداد ستون‌ها به تعداد کاراکترهاست) ذخیره می‌شود. حتی یک تصویر به شکل یک ماتریس سه بعدی ذخیره می‌گردد که بُعد اول و دوم آن برای تعیین مختصات نقاط و بُعد سوم آن برای تعیین رنگ نقاط استفاده می‌شود. فایل‌های صوتی نیز در Matlab به شکل ماتریس‌های تک ستون (بردارهای ستونی) ذخیره می‌شوند. بنابراین جای تعجب نیست که Matlab مخفف عبارت Matrix Laboratory باشد. علاوه بر توابع فراوانی که خود Matlab دارد، برنامه‏نویس نیز می‏تواند توابع جدید تعریف کند.

استفاده از توابع Matlab برای نمایش داده‏ها بسیار راحت و لذت بخش است. ساخت رابط‌های گرافیکی یا Graphical User Interfaces مانند دیالوگ‌هایی که در محیط‌های ویژوال مانند بیسیک و C وجود دارند، در Matlab امکان‌پذیر است. این قابلیت، ارتباط بهتری را میان برنامه‏های کاربردی نوشته‏شده با Matlab و کاربران برقرار می‌کند.
متلب که از محصولات شرکت مت‌ورکس (The MathWorks) است، برای گروه‌های مختلف مهندسان رشته‌های مختلف از جمله مهندسی برق، مکانیک، رایانه و… کاربرد بسیاری دارد.
هسته متلب برای سرعت و کارایی بالا به زبان سی نوشته شده‌است ولی رابط گرافیکی آن به زبان جاوا پیاده سازی گشته‌است.
برنامه‌های متلب اکثراً متن‌باز هستند و در واقع متلب (مانند بیسیک) مفسر است نه کامپایلر. قدرت متلب از انعطاف‌پذیری آن و راحت بودن کار با آن ناشی می‌شود، همچنین شرکت سازنده و گروه‌های مختلف، از جمله دانشگاه‌های سرتاسر جهان و برخی شرکت‌های مهندسی هر ساله جعبه‌ابزارهای خاص-کاربردی به آن می‌افزایند که باعث افزایش کارآیی و محبوبیت آن شده‌است.

فهرستی از این جعبه‌ابزارها در زیر آمده ‌است:

  • * جعبه‌ابزار مخابرات متلب، توابع و ابزارهای محاسبات مهندسی مخابرات
  • * جعبه‌ابزار کنترل متلب، توابع و ابزارهای محاسبات مهندسی کنترل
  • * جعبه‌ابزار فازی متلب، توابع و ابزارهای محاسبات فازی
  • * جعبه‌ابزار محاسبات متلب، توابع و ابزارهای محاسبات عددی
  • * جعبه‌ابزار سیمولینک متلب، جعبه‌ابزاری برای شبیه‌سازی سیستم‌ها به صورت مجرد
  • * جعبه‌ابزار تخمین متلب، توابع و ابزارهای محاسبات بحث تخمین سیستم در مهندسی کنترل
  • * جعبه‌ابزار آمار متلب، توابع و ابزارهای محاسبات آمار
  • * جعبه‌ابزار جمع‌آوری داده متلب، توابع و ابزارهای جمع‌آوری داده
  • * جعبه‌ابزار شبکه عصبی متلب، توابع و ابزارهای محاسبات شبکه عصبی
  • * جعبه‌ابزار پردازش تصویر متلب، توابع و ابزارهای محاسبات پردازش تصویر
  • * جعبه‌ابزار پردازش صوت متلب، توابع و ابزارهای محاسبات پردازش صوت
  • * جعبه‌ابزار احتمالات متلب
  • * جعبه‌ابزار کارگاه بلادرنگ متلب، توابع و ابزارهای محاسبات سیستم‌های بلادرنگ

 

 

 

,lucy-richardson algorithm,mapcontainer,maple,market basket analysis,matlab,meta-heuristics,method,mimo,minimum spanning tree,minitab,mlp,mlp neural networks,modeling,moead,mopso,multicriteria optimization,multiobjective evolutionary algorithm based on decomposition,multiobjective optimization,mupad,naive bayesian classifier,network reliability,neural networks,neural networks training,nonlinear regression,nonlinear spatial filters,nonlinear system identification,nonlinear systems,normalizing,n-queens problem,nsga,nsga2,nsga-iI,oja learning rule,operation research,optimization,optimization toolbox,outlier detection,overfitting,,parallel machine scheduling,pareto envelope,pareto envelope-based selection algorithm

انجام پروژه بازدید : 1810 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (1)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

بررسی اجمالی

در این پست، ما ابتدا اصول اولیه استفاده از GPU با MATLAB را بیان و سپس به سمت حل معادله موج مرتبه 2 با استفاده از این قابلیت GPU حرکت می کنیم. از آنجا که نسخه ی نمایشی ساخته شده بود، توابع GPU موجود در MATLAB افزایش یافته است.قابلیت GPU نشان داده شده در این پست به جعبه ابزار محاسبات موازی (Parallel Computing Toolbox) احتیاج دارد.

سابقه و هدف GPU

GPU در اصل برای سرعت بخشیدن به اجرای (rendering) گرافیک استفاده می شود، GPU ها در حال حاضر به طور فزاینده در محاسبات علمی به کار روند. بر خلاف پردازنده های (CPUهای) قدیمی، که دارای تعداد انگشت شماری هسته اند، یک GPU تعداد بسایر زیادی آرایه ی موازی از  صحیح و ممیز شناور پردازندهها دارد، همچنین حافظه اختصاص داده شده، با سرعت بالا است. GPU به طور معمول شامل صدها پردازنده از این پردازنده های کوچک است. این پردازنده ها می توانند تا حد زیادی برای افزایش سرعت انواع خاصی از برنامه های کاربردی استفاده شوند.

یک قاعده سرانگشتی مناسب این است که مسئله شما ممکن است برای GPU مناسب باشد، اگر چنین باشد:

Massively parallel: محاسبات می تواند به صدها یا هزاران واحدهای مستقل از هم شکسته شود. شما بهترین کارایی را زمانی خواهید دید که همه هسته ها به کار گرفته شده اند (بهره گیری از خاصیت موازی بودن ذاتی GPU). به ظاهر ساده، محاسبات vectorized MATLAB روی آرایه با صدها هزار عنصر را اغلب می توان در این دسته جا داد.

Computationally intensive (محاسباتی فشرده): زمان صرف شده در محاسبات به طور قابل توجهی بیش از زمان صرف شده در انتقال اطلاعات به (از) حافظه GPU است. از آنجا که پردازنده گرافیکی (GPU) از طریق باس PCI Express به پردازنده میزبان (Host CPU) متصل شده، دسترسی به حافظه کندتر از CPU قدیمی است. این به این معنی است که به طور کلی افزایش سرعت محاسباتی با میزان انتقال داده ها محدود شده است که در الگوریتم شما جای می گیرد.

برنامه های کاربردی که این معیارها را ایفا نمی کنند ممکن است در عمل  بر روی یک GPU نسبت به یک CPU کندتر اجرا شوند.

 

 

 

آنچه ما در مورد GPU یاد می گیریم

با این زمینه، ما اکنون می توانیم کار با GPU در MATLAB را شروع کنیم.اجازه دهید با بررسی GPU مورد نظرمان تنها برای مشاهده آنچه با آن کار می کنیم، شروع کنیم:

gpuDevice

ans =

parallel.gpu.CUDADevice handle

Package: parallel.gpu

Properties:

Name: 'Tesla C2050 / C2070'

Index: 1

ComputeCapability: '2.0'

SupportsDouble: 1

DriverVersion: 4

MaxThreadsPerBlock: 1024

MaxShmemPerBlock: 49152

MaxThreadBlockSize: [1024 1024 64]

MaxGridSize: [65535 65535]

SIMDWidth: 32

TotalMemory: 3.1820e+009

FreeMemory: 2.6005e+009

MultiprocessorCount: 14

ClockRateKHz: 1147000

ComputeMode: 'Default'

GPUOverlapsTransfers: 1

KernelExecutionTimeout: 1

CanMapHostMemory: 1

DeviceSupported: 1

DeviceSelected: 1

ما یک Tesla C2050 را دنبال می کنیم.در حال حاضر، جعبه ابزار محاسبات موازی(Parallel Computing Toolbox) از GPUهای NVDIA با قابلیت محاسبه 1.3 یا بالاتر پشتیبانی می کند.

یک مثال ساده با استفاده از توابع غیرمنتظره (Overloaded Functions)

بیش از 100 نوع عملیات (به عنوان مثال FFT، IFFFT، EIG) در حال حاضر به عنوان توابع ساخته شده در MATLAB در دسترس هستند که می توانند به طور مستقیم بر روی پردازنده گرافیکی (GPU) با ارائه یک آرگومان ورودی از نوع آرایه GPU  اجرا شوند. این توابع فعال GPU یعنی (GPU-enabled functions) غیرمنتظره (overload) هستند، به عبارت دیگر، آنها متمایز از وابستگی به نوع داده آرگومان های داده شده به آنها عمل می کنند.

اجازه دهید یک آرایه GPU ایجاد و با استفاده از GPU یک FFT را اجرا کنیم.با این حال، اجازه دهید ابتدا این کار را بر روی CPU انجام دهیم تا بتوانیم تفاوت در کد و عملکرد را ببینیم:

A1 = rand(3000,3000);

tic;

B1 = fft(A1);

time1 = toc;

برای انجام عملیات مشابه بر روی GPU، ما ابتدا gpuArray را برای انتقال داده ها از فضای کاری MATLAB را به حافظه دستگاه به کار می بریم. سپس می توانیم FFT را اجرا کنیم که یکی از توابع غیرمنتظره روی آن داده است:

A2 = gpuArray(A1);

tic;

B2 = fft(A2);

time2 = toc;

 

مورد دوم بر روی GPU و نه روی CPU اجرا شده است چون ورودی اش (GPUArray) بر روی GPU قرار دارد. در نتیجه، B2، بر روی پردازنده گرافیکی (GPU) ذخیره شده است. با این حال، آن است که هنوز در فضای کاری MATLAB قابل مشاهده است. با اجرای کلاس (B2) ما می توانیم ببینیم که آن نیز یک GPUArray است.

class(B2)

 

ans =

parallel.gpu.GPUArray

 

برای آوردن اطلاعات به CPU، ما gather را اجرا می کنیم

 

B2 = gather(B2);

class(B2)

 

ans =

double

 

B2 در حال حاضر بر روی CPU است و یک کلاس از double دارد.

 

افزایش سرعت کارکرد برای مثال ساده ما

در این مثال ساده، ما می توانیم افزایش سرعت  اجرای FFT بر روی داده های خود را محاسبه کنیم.

speedUp = time1/time2;

disp(speedUp)

3.6122

 

به نظر می رسد مانند FFT ما روی پردازنده گرافیکی تقریبآ 3.5 برابر سریعتر در حال اجرا است  این بسیار خوب است، به ومخصوصآ چون FFT در هسته MATLAB چند رشته (multi-threaded) است. با این حال، برای انجام یک مقایسه واقعی، ما واقعا باید زمان صرف انتقال بردار به (و از) GPU را در نظر بگبریم. اگر ما این کار را انجام دهیم، پی می بریم که شتاب ما تا حد زیادی کاهش می یابد. بیایید ببینیم که اگر ما زمان را برای انجام انتقال داده هایمان در نظر بگیریم، چه اتفاقی می افتد.

 

tic;

A3 = gpuArray(A1);

B3 = fft(A3);

B3 = gather(B3);

time3 = toc;

 

speedUp = time1/time3;

disp(speedUp)

 

0.5676

 

درک و محدود کردن انتقال سرجمع (Overhead) داده های شما

انتقال سرجمع داده (Data transfer overhead) می تواند خیلی مهم باشد چون اجرای کلی برنامه کاربردی را تنزل می دهد، به خصوص اگر شما بارها و بارها بین CPU و GPU برای اجرای تعداد نسبتآ کمی عملیات محاسباتی فشرده تبادل داده کنید. با این حال همه امید از دست نرفته است! با محدود کردن انتقال اطلاعات بین GPU و CPU، ما هنوز هم می توانیم به سرعت کارکرد بالا دست یابیم.

 

به جای ایجاد داده ها در CPU و انتقال آن به GPU، ما می توانیم مستقیمآ بر روی GPU داده را ایجاد کنیم. بیایید ببینید که  اثرات زمان ما چگونه است. برای دقیق بودن، ما همچنین باید کد اصلی سریال از جمله زمان لازم برای تولید ماتریس تصادفی بر روی پردازنده retime کنیم.

 

tic;

A4 = rand(3000,3000);

B4 = fft(A4);

time4 = toc;

 

tic;

A5 = parallel.gpu.GPUArray.rand(3000,3000);

B5 = fft(A5);

B5 = gather(B5);

time5 = toc;

 

speedUp = time4/time5;

disp(speedUp);

 

 

1.4100

 

این بهتر است، اگر چه ما هنوز هم نفوذ جمع آوری داده ها از پردازنده گرافیکی را می ببینیم. در این نسخه ی نمایشی ساده، اثر اغراق آمیز است زیرا ما در حال اجرای عملیات سریع در GPU هستیم. این برای انجام عملیات مختلف بر روی داده ها تا زمانی که بر روی GPU باشد و آوردن اطلاعات CPU تنها زمانی که مورد نیاز است، کار آمدتر است.

 

حل معادله موج

 

در مثال بالا برای قرار دادن متن، اجازه دهید از قابلیت یکسان GPU در "دنیای واقعی" مسئله استفاده کنیم. برای این کار، ما می خواهیم برای حل معادله موج مرتبه دوم:

 

الگوریتمی که ما برای حل معادله موج به کار می بریم ترکیبی از روش طیفی در فضا و یک روش تفاضل متناهی مرکزی مرتبه دوم در زمان است. به طور خاص، ما روش طیفی چبیشف را به کار می بریم، که با استفاده از چند جمله ای های چبیشف به عنوان توابع پایه ای است.

تغییر کد برای اجرای الگوریتم بر روی GPU

در هنگام شتاب الگوریتم ما، ما روی بالا بردن سرعت کد در مدت زمان اصلی پله while-loop تمرکز می کنیم. عملیات در  بخشی از کد (به عنوان مثال FFT و ifft، ضرب ماتریس) همگی توابع غیرمنتظریه (overloaded functions)  هستند که با GPU کار می کنند. در نتیجه، ما نیازی به تغییر الگوریتم در هر راه برای اجرا بر روی GPU نداریم. ما به سادگی انتقال داده ها را به GPU و به CPU زمانی که به پایان رسید، می رسیم.

به دلیل طولانی شدن متن، ادامه ی مقاله در پست بعدی درج خواهد شد...

,pareto front,particle swarm optimization,partitioning clustering methods,path planning,pattern mining,pattern recognition,pca,pca غیر خطی,pesa,pesa-ii,pid,pid controller,pid controler in matlab,pid controler in متلب,pid controler in مطلب,point detection,pole assignment,popup menu,portfolio management,portfolio optimization,principal component analysis,project scheduling,property,pso,pso استاندارد پیوسته,pso چند هدفه,pso گسسته باینری,pso traveling salesman problem,pso travelling salesman problem,qap,quadprog,quadratic assignment problem,radial basis function,rbf,rcpsp,reference type,register transfer logic,regression,regular expressions,regularized filtering,reliability,resource allocation,response surface method,rsm,rtl,rule mining,sce-ua,scheduling,scm,self-organizing maps,sfla,sfla استاندارد,shufflee,shuffled frog leaping algorithmm,signal processing

انجام پروژه بازدید : 2622 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

در چند قسمت قصد دارم نحوه كار كردن با GUI رو به شما آموزش بدم.

همون‌طور كه مي‌دونيد(يا شايد هم نمي‌دونيد) به‌وسيله ابزار (GUI (Graphical User Interface شما مي‌تونيد برنامه خودتون رو بهتر به كاربران ديگه عرضه كنيد. براي شروع ابتدا guide رو صفحه متلب تايپ و اينتر كنيد يا از مسير File >> New >> GUI نيز مي‌تونيد استفاده كنيد همون‌طور كه مشاهده مي‌كنيد صفحه زير نمايش داده مي‌شه بدون هيچ تغييري OK كنيد.

 

 

 

 

 

 

 

 

 

 

 

بعد صفحه اصلي GUI براي شما ظاهر مي‌شه كه شما مي‌تونيد عناصر گرافيكي خودتون رو در اون قرار بديد. براي اينكه شما بتونيد يك GUI طراحي كنيد ابتدا بايد شما عناصر گرافيكي كه GUI در اختيار شما قرار مي‌ده بشناسيد من خلاصه‌اي از برخي عناصر رو كه بيشتر به كار ميان براي شما مي‌نويسم.

  • Push button : اين عنصر گرافيكي يك دگمه فشاري هستش كه هنگامي كه با ماوس روي اون فشار بديد Callback اون فعال مي‌شه.
  • Slider : اين عنصر يك كنترلر گرافيكي براي مقادير پيوسته است كه با دادن دو حد بالا و پايين به اون مي‌تونيد مقدارش رو بين دو حد بطور پيوسته تغيير بديد كه اين كار با كشيدن كنترلر آن با ماوس انجام مي‌شه و هر تغيير در اين كنترلر  Callback اون رو فعال مي‌كنه.
  • Radio Button : اين عناصر معمولاً به صورت گروهي به كار مي‌رن و از اون‌ها مي‌تونيد براي ايجاد گزينه‌هاي وابسته استفاده كنيد (گزينه‌هاي وابسته يعني حالت‌هايي كه هميشه يكي از اون‌ها مي‌تونن فعال باشن) زماني كه بر روي يكي از اون‌ها كليك كنيد  Callback مربوط به اون عنصر فعال شده و يك نطقه سياه درون دايره اون قرار مي‌گيره.
  • Check Box : با اين عناصر شما مي‌تونيد حالت‌هاي مستقل از هم ايجاد كنيد يعني حالت‌هايي كه همزمان مي‌تونن رخ بدن. زماني كه با ماوس روي اين عنصر كليك كنيد Callback اون فعال مي‌شه و اگر خاموش باشه(درون مربع چيزي نباشه) يك تيك سبز رنگ روي مربع اون نشون داده مي‌شه كه نشان دهنده روشن بودن اونه و اگر روشن باشه، خاموش مي‌شه.
  • Edit Text : اين عنصر يك متن قابل تغيير رو نشون مي‌ده كه شما مي‌تونيد محتويات اون رو تغيير بديد و سپس با فشردن دگمه اينتر  Callback اون رو فعال كنيد.
  • Static Text : اين عنصر يك متن ثابت رو نشون مي‌ده كه محتويات اون تحت كنترل برنامه‌ايست كه شما براي اون نوشته‌ايد و ديگه تحت كنترل شما نيست مگر اينكه بريد به سورس برنامه و كد اون رو تغيير بديد. از اين عنصر معمولاً براي نمايش خروجي عددي استفاده مي‌شه.
  • Pop-up Menu : اين عنصر گرافيكي تقريباً مانند Radio Button‌هاي گروهي عمل مي‌كنه و مي‌تونه تعدادي حالت رو در خودش ذخيره كنه و در يك زمان واحد فقط يكي از اون‌ها رو فعال كنه. شايد بشه گفت كه يكي از تفاوت‌هاي اون با Radio Button‌ها زماني باشه كه حالت‌هاي ما زياد هستند مثلاً بيش از پنج حالت، كه در اين صورت بهتره كه از اين عنصر استفاده كنيم چرا كه اگر بخواهيم از Radio Button‌ها استفاده كنيم GUI ما بزرگ و شايد هم بي‌ريخت بشه ولي در عنصر Pop-up Menu فقط حالت فعال نمايش داده مي‌شه و فقط زماني كه بخواهيم حالت رو تغيير بديم باقي حالت‌ها نمايش داده مي‌شن.
  • Listbox : اين عنصر نيز تقريباً كار Pop-up Menu رو انجام مي‌ده با اين تفاوت كه در Listbox تمامي حالت‌ها در يك صفحه نمايش داده مي‌شن و با كليك كردن بر اون‌ها مي‌تونيم Callback اون رو فعال كنيم.
  • Toggle Button : اين عنصر گرافيكي شبيه يك كليد دو وضعيته هست كه مي‌تونه در حالت روشن و خاموش قرار بگيره. با كليك كردن روي اون Callback مربوطه فعال مي‌شه.
  • Axes : اين عنصر گرافيكي وقتي به كار مياد كه خروجي ما منحني باشه و مثل Static Text محتويات اون تحت كنترل برنامه‌ايست كه به آن داده‌ايم.
  • Panel : اين عنصر مي‌تونه تعدادي شيء گرافيكي رو در خودش قرار بده و با داشتن يك نام از بقيه اشياء جدا كنه.
  • Button Group : شما زماني كه بخواهيد از گروهي از Radio Button‌ها استفاده كنيد به اين عنصر نياز خواهيد داشت.

البته آنچه كه در بالا مشاهده كرديد بخشي از امكاناتي است كه GUI در اختيار ما قرار داده است ولي براي شروع كار با GUI اين قطعات كافيست.

حالا فرض كنيد كه ما مي‌خواهيم يك ماشين حساب خيلي ساده درست كنيم به اين صورت كه دو عدد رو بگيره و چهار عمل اصلي رو به دلخواه كاربر روي دو عدد انجام بده براي اين كار ما احتياج به دو Edit Text داريم تا بتونيم اعداد ورودي رو به اون بديم و دو Static Text كه يكي براي نمايش خروجي و ديگري رو هم بعداً مي‌گم بعد مي‌تونيم از چهار Radio Button كه به صورت گروهي به كار مي‌رن، براي انتخاب يكي از چهار عمل اصلي استفاده كنيم طبعاً يك Button Group هم مي‌خواهيم.

پس از انتخاب قطعات، نوبت اون رسيده كه كارمون رو شروع كنيم در صفحه اصلي GUI در سمت چپ قطعاتي رو كه مي‌خواهيم ازشون استفاده كنيم مي‌بينيد تمام قطعات رو به تعدادي كه گفته شد به صفحه GUI وارد كنيد به اين صورت كه بر قطعه مورد نظر كليك مي‌كنيد و بدون رها كردن اون، قطعه رو توي صفحه GUI مي‌اندازيد و به‌صورت شكل زير در مي‌آوريد:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

عنصرهاي متني رو همون‌طوري كه مي‌بينيد بزرگ كردم تا اعداد بزرگ رو به راحتي نمايش بدن.

حالا بايد تنظيمات اين قطعات رو انجام بديم اول روي Edit Text اولي دوبار كليك كنيد و بعد عبارت مقابل String رو پاك كرده و به جاي آن 0 رو بنويسيد و در Tag اون هم x_edit بنويسيد و پنجره رو ببنديد.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

همين اعمال رو هم براي Edit Text دومي انجام مي‌ديد با اين تفاوت كه در Tag اون y_edit رو مي‌نويسيد. String در واقع همون عبارتي است كه روي Edit Text نوشته مي‌شه و Tag ناميه كه بوسيله اون GUI، عنصر مربوطه رو شناسايي مي‌كنه. در ادامه كار بر Static Text اولي دوبار كليك مي‌كنيد و در String اون علامت = رو قرار مي‌ديد سپس در پنجره تنظيمات Static Text دومي مقدار String رو 0 و مقدار Tag رو Result قرار بديد همون‌طور كه ديديد Static Text دومي نياز به Tag داره چرا كه مقدار اون قراره تغيير كنه و نتيجه عمليات رو نمايش بده حالا سراغ Radio Button‌ها مي‌ريم اول به روي Button Group دوبار كليك كنيد و مقدار Title اون رو مثلاً Selector يا هر چيز ديگه بزاريد(مهم نيست) بعد روي Radio Button اولي دوبار كليك كنيد و مقدار  sum_radiobutton رو در Tag و مقدار + رو در String مي‌نويسيد حالا همين كار رو براي سه‌تاي ديگه انجام مي‌ديد و در String‌هاشون به ترتيب - * / و در Tag‌هاشون به ترتيب diff_radiobutton براي دومي mult_radiobutton براي سومي و div_radiobutton رو براي چهارومي مي‌نويسيد.

حالا كار تنظيمات قطعات تموم شده و شكل زير رو داريد:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

حالا ديگه وقت كد نويسي شده.

روي فلش سبز رنگي كه در نوار بالايي صفحه قرار داره كليك كنيد و در ديالوگ باز شده Yes رو بزنيد و بعد يك نام دلخواه مثلاً calculator رو به عنوان نام GUI تايپ كنيد و دگمه Save رو بزنيد حالا مشاهده مي‌كنيد كه يك M-File كدنويسي شده و يك Figure كه همون GUI شماست به نمايش در آمده است. M-File مربوطه در واقع هسته اصلي GUI شماست حالا شما بايد مقداري كد به اين GUI اضافه كنيد تا قطعات شما وظايف خود رو بشناسن.

در ابتدا به صفحه اصلي GUI مي‌رويد و با راست كليك كردن بر Edit Text اولي به‌صورت زير Callback اون رو فراخواني مي‌كنيد:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

حالا در جايي كه مكان‌نما رفته كد زير رو بنويسيد:

i=get(hObject,'String');

i=str2num(i);

if(isempty(i))

set(hObject,'String','0')

end

guidata(hObject, handles);

 

در خط اول اين كد مقدار Edit Text به صورت String خوانده مي‌شه و در خط دوم به عدد تبديل مي‌شه در خطوط سه تا پنج بررسي مي‌شه كه آيا عددي وارد شده يا نه؟ اگه وارد شده باشه كه هيچ وگرنه مقدار 0 در اون قرار داده مي‌شه در خط آخر هم كه مقادير به روز مي‌شوند و نياز هستش كه در آخر هر Callback آورده‌شه تا مقادير آپديت بشن. سپس دقيقاً همين كار رو براي Edit Text دومي انجام بديد و همون كد رو هم بنويسيد.

حالا به سراغ Radio Button‌ها مي‌رين Callback اولي رو به همون صورتي‌كه گفته شد فراخواني مي‌كنين و كد مربوطه رو به همان صورتي‌كه مي‌بينيد، وارد كنيد. همون‌طوري‌كه مي‌بينيد بعد از تابع سه خط توضيحات اومده كه اون‌ها رو رد مي‌كنيد بعد كد رو مي‌نويسيد.

به اين صورت:

function sum_radiobutton_Callback(hObject, eventdata, handles)

% hObject    handle to sum_radiobutton (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x=get(handles.x_edit,'String');

y=get(handles.y_edit,'String');

x=str2num(x);

y=str2num(y);

result=x+y;

result=num2str(result);

set(handles.Result,'String',result);

guidata(hObject, handles);

 

چهار خط اول كه خودش وجود داشت خط پنجم و ششم مقدار x_edit رو درون x و مقدار y_edit رو درون y ذخيره مي‌كنه در دو خط بعدي مقدار x و y رو به عدد تبديل مي‌كنه در خط بعدي مجموع اون‌ها رو درون result مي‌ريزه و خط بعدي result رو از عدد به رشته تبديل مي‌كنه خط بعدي result رو درون Result(كه همون Static Text دومي باشه) مي‌ريزه و در نهايت هم در خط آخر مقادير به روز مي‌شن همون‌طوري كه قبلاً توضيح داده شد.

حالا براي سه Radio Button ديگه هم عيناً همين كد رو وارد مي‌كنيد فقط به جاي اينكه x و y رو با هم جمع كنيد اون‌ها رو براي دومي از هم كم مي‌كنيد و براي سومي در هم ضرب مي‌كنيد و براي چهارومي به هم تقسيم مي‌كنيد.

پس از انجام عمليات كدنويسي M-File مربوطه رو Save مي‌كنيد حالا ديگه GUI شما آماده شده و مي‌تونيد از اون استفاده كنيد.

به اين صورت:

 

 

 

 

 

 

 

 

 

 

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1954 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (1)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

تشخیص پلاک خودرو

تشخیص پلاک خودرو امروزه کاربردهای فراوانی از جمله در کنترل ترافیک ، پرداخت عوارض،ورودی و خروجی پارکینگ ها ، اندازه گیری سرعت متوسط خودروها و.... دارد و این امر هم چنین سبب جلوگیری از اشتباه و خطای دید ماموران راهنمایی و رانندگی می گردد.

سیستم تشخیص پلاک خودرو با عکس گرفتن از خودروعبوری، پلاک آن را استخراج می کند و این کار را باستفاده از علم پردازش تصویر و شبکه های عصبی انجام می دهد.

ابتدا باید محل پلاک تشخیص داده شده و لبه یابی شود سپس کاراکترهای آن  جداسازی و تشخیص داده شوند.و این امر با کمترین دخالت انسان انجام می گیرد.

این سیستم در صورتی که پلاک کثیف باشد و هم چنین در شرایط بارانی هم عمل خواهد کرد.

یک سیستم تشخیص پلاک خودرو از سه قسمت اصلی تشکیل شده است:

  1. تشخیص محل پلاک
  2. جداسازی کارکترها
  3. تشخیص کارکترها

که در این جا فقط به مرحله نخست می پردازیم

الگوریتم کلی کار به صورت زیر است:

روش های گوناگونی برای استخراج پلاک خودرو در پردازش تصویر وجود دارد، که از آن جمله می توان به ویژگی رنگ، لبه یابی، عملگرهای مورفولوژی، نبدیل هاف اشاره کرد. در روش های مبتنی برا رنگ عیب این روش این است که، هنگامی که شرابط نوری تغییر می کند رنگ نیز پایداری خود را از دست می دهد و عوض می شود. پلاک ها رنگی زمان پردازش زیادی نسبت به پلاک های با سطح خاکستری می گیرند لبه یابی به تنهایی کاربرد ندارد زیرا بسیاری از نفاط خارج از پلاک را هم به عنوان پلاک شناسایی می کند.

تبدیل هاف به تغییر شکل مرزهای پلاک خیلی حساس است و زمان پردازشی آن زیاد است.

از جمله روش های دیگر می توان به منطق فازی اشاره کرد. در این روش تعدادی قوانین شهودی تعریف شده، که با آن ها ناحیه پلاک تعریف می شود. این روش به رنگ و روشنایی پلاک خودرو بسیار حساس بوده و نیاز به زمان پردازش طولانی تری نسبت به روش های مبتنی بر رنگ دارد.

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 1904 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

يک فايل جديد باز مي‌کنيم که عکسي از دانه‌هاي برنج است. مي‌خواهيم دانه‌هاي برنج را درون عکس بشماريم. اين عکس از قسمت برنج مرغوبِ خط توليد يک کارخانه است. شمارش دانه‌هاي برنج به کارخانه برنج سازي کمک مي‌کند بداند چند درصد برنج‌هايش درجه يک هستند. اين دستورات را اجرا کنيد:

 

p=imread('rice.tif');

re=edge(p,'sobel');

imshow(re)

re2=edge(p,'canny');

figure, imshow(re2)

 

البته اول تصوير اصلي برنج‌ها را ببينيد و سپس مقايسه کنيد. دو روش Sobel  و Canny براي پيدا کردن لبه‌ها مورد آزمايش قرار گرفته است. مشخص است که روش Canny‌ اينجا بهتر جواب داده است. دو کار به عهده شماست.

 

 

 

  • الگوريتمي پيدا کنيد که تعداد برنج‌هاي درون عکس را بشمارد.‌(راهنمايي: اگر بتوانيد تعداد مسيرهاي بسته‌ی درون تصوير لبه‌ها را بشماريد تقريباً همه برنج‌ها را شمرده‌ايد)
  • کشف کنيد که روش Canny براي مشخص کردن لبه چه روشي است و چطور عمل مي‌کند و چرا از روش سادة Sobel بهتر است.

 

براي بهتر شده نتيجه کار با روش Sobel بهتر است از عملگرهاي ريخت‌شناسي (morphological) استفاده کنيم. سعي مي‌کنيم قسمت‌هاي نزديک به هم لبة هر برنج را به هم متصل کنيم. با اين کار لبة برنج‌ها را کامل مي‌کنيم و خوردگي‌ها را از بين مي‌بريم. اما قبل از ادامه کار دستور close all را امتحان کنيد. اين دستور همه figure هايي که باز هستند را مي‌بندد تا زياد شلوغ نشود! حالا اين دستورها را اجرا کنيد:

figure, imshow(re)

re4=bwmorph(re,'close');

re5=bwmorph(re4,'bridge');

figure, imshow(re5) , title(‘after morphological operations’)

 

آخرين تصوير لبه‌ها را با تصوير اوليه لبه‌ها که همان re است مقايسه کنيد. مي‌بينيد که در متصل کردن قطعات پيشرفت خوبي داشتيم. اولين دستور bwmorph عمل Closing را روي تصوير انجام مي‌دهد و دومين دستور عمل Bridge. براي اينکه بدانيد هرکدام از اين دستورات چکار مي‌کنند از help bwmorph استفاده کنيد.

براي اينکه بهتر کار با اين دستورها را ياد بگيريم سري به Demoهاي Matlab مي‌زنيم. در صفحه Matlab بنويسيد: demo و با اجرا کردن اين دستور ليست demo‌هاي مختلف ظاهر مي‌شود. Image Processing Toolbox را انتخاب کنيد. و در ليست کناري Edge Detection را انتخاب کنيد. بقيه ماجرا با خودتان! دستورهاي معرفي شده:edge, bwmorph, demo

 

 

هيستوگرام تصوير

تا به حال تصويرهاي Gray Scale را بررسي کرديم. از اين به بعد هم همين کار را مي‌کنيم! با اين تفاوت که اگر تصوير ورودي رنگي بود اول Gray Scale‌اش مي‌کنيم و بعد کارها را ادامه مي دهيم.

تصوير flowers.tif  را با دستور imread در ماتريس flowers ذخيره کنيد. از دستور rgb2gray براي تبديل فرمت رنگي تصوير به Gray Scale  استفاده کنيد. حالا هيستوگرام تصوير را رسم کنيد. بعد يکي از قله‌هاي نمودار هيستوگرام را انتخاب کنيدکه بين دوتا دره باشد. کاري کنيد که فقط اين قله درون هيستوگرام باقي بماند. بعد با دستور im2bw تصوير را از Gray Scale به سياه سفيد تبديل کنيد و نتايج را مقايسه کنيد!

چطور شد؟ توضيح مي‌دهم، اينطوري:

flowers=imread('flowers.tif','tif');

flowersgray=rgb2gray(flowers);

imhist(flowersgray)

من هيستوگرام را نگاه کردم و شما هم نگاه کنيد. (هيستوگرام تصوير را بادستور imhist کشيدم) قلة بين 50 و 100 را انتخاب مي‌کنم. حالا يک ماتريس جديد مي‌سازم طوري که فقط جاهايي که مقدار ماتريس flowersgray  در محدودة 50 تا 100 است، در ماتريس جديد 0 باشد و باقي جاها 1 باشد.

(يعني يک ماتريس باينري يا سياه سفيد)

 

f=ones(size(flowersgray));

f(find(flowersgray>50&flowersgray<100))=0;

imshow(f)

 

دستورهاي بالا به اين معني است: ماتريس f را هم‌اندازه ماتريس flowersgray بساز. همة درايه‌هايش را يک بگذار. بعد دستور find درون ماتريس flowersgray جستجو مي‌کند و شماره درايه‌هايي از ماتريس flowersgray را به من مي‌دهد که در شرط روبه‌رو برايش مشخص شده. (همان محدودة 50 تا 100). اين درايه‌هاي بخصوص را در ماتريس f از 1 به 0 تبديل مي‌شود. نتيجه را باهم ببينيم!

 

اگر دقت کنيم مي‌بينيم که مجموعة گلدون از پس زمينه جدا شد. آنهم تنها با انتخاب يک قله درون هيستوگرام... حالا من از کجا فهميدم که اين قله مهم است؟... لابد علم غيب داشتم؟... بعدا راجع به انتخاب قله‌ها بيشتر خواهيم فهميد.

 

حالا دستور  im2bw را - که تصوير را سياه سفيد مي‌کند -  امتحان کنيد.

bwflowers=im2bw(flowersgray,gray);

imshow(bwflowers)

دستور im2bw حدي تعيين مي‌کند و درايه‌هايي که از آن حد کمتر باشند را صفر و آنهايي که بيشتر هستند را يک مي‌کند. آيا متوجه تفاوت دو روش شده‌ايد؟ اگر به جاي گلدون در تصوير مورد نظر، عکس پرسنلي افراد بود چه اشکالي در روش im2bw وجود داشت؟

 

دستورات معرفي شده: rgb2gray, imhist, ones, find

 

اگر ما روبات بوديم...

خب فرض کنيد برنامه‌اي براي يک روبات مي‌نويسيد که با استفاده از يک دوربين به يک بازوي دقيق فرمان مي‌دهد که سکه‌هاي «اسکروچ» را بردارد و روي هم قرار دهد. براي اينکار لازم است محل دقيق سکه‌ها را تشخيص دهيم تا فرمان مناسب براي بازو صادر شود. برنامة زير اين کار را انجام مي‌دهد. دقت کنيد ببينيد که چطور اينکار را انجام مي‌دهد:

 

coins = imread('eight.tif');

BW=~im2bw(coins,.75);

imshow(BW)

L = bwlabel(BW);

stats = imfeature(L,'Centroid');

stats(7)

 

خروجي همان متغيير stats است. اين متغيير 7 عنصر دارد. درحالي که 4 سکه بيشتر درون تصوير وجود ندارد! اشکال از کجاست؟.... راه حلي هم براي اين به ذهنتان مي‌رسد؟

 

دستورهاي معرفي شده: bwlabel, imfeature

با اينترنت ياد بگيريم:

به آدرس www.ph.tn.tudelft.nl/hpise/index.html مراجعه کنيد و در کلاس آنلاينِ مجاني‌اش ثبت‌نام کنيد. من آنجا به اسم raminia عضو هستم. خيلي جالب است! حتما امتحانش کنيد.

 

 

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 2946 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (0)

 

 

 


مطالب به سایت خانه متلب انتقال پیدا کرده است .بر روی لینک های زیر کلیک نمایید:

 

آشکارسازی لبه در متلب

عملگرهای آشکارسازی لبه

  • مرتبه نخست: چلیپای رابرنز، پرویت، سوبل، کنی، اسپیسک
  • مرتبه دوم: لاپلاسی، مار- هیلدرث

اکنون عملگر کنی و پس از آن مار – هیلدرث بیشترین کاربرد را دارد. عملگرهای زیادی تاکنون منتشر شده اند اما هیچ یک برتری قابل ملاحضه ای بر عملگر کنی نداشته اند. کار بر روش های چند مقیاسی هنوز بیشتر در آزمایشگاه هاست.

عملیات لبه برداری بر روی تصاویر

آشکارسازی لبه (edge detection) معمولا برای تشخیص لبه های یک شی از بین چند شی دیگر مورد استفاده قرار می گیرد، برای این کار از تابعی به نام edge استفاده می شود.

تغییرات فیزیکی به صورت تغییر رنگ و تغییر شدت روشنایی به صورت لبه در تصویر نمایان می شوند. در محیط با مقادیر پیوسته، مشتق، تغییرات ناگهانی و شدت آن را مشخص می کند و در محیط گسسته محاسبه ی تغییرات نسبت به پیکسل های مجاور، تقریبی از مشتق را نمایان می سازد.

 

 

 

در عملیات لبه برداری ورودی یک تصویر به فرمت intensity می باشد و در خروجی تصویر binary داده می شود، که در تصویر حاصل مرزهای بیرونی تصویر به صورت 1 و مرزهای داخل به صورت 0 نشان داده می شود.

I=rgb2gray(i1);

Bw=edge(I,’sobel’)

Edge لبه ها را در تصاویر intensity پیدا می کند، این تابع یک تصویر باینری یا intensity را به عنوان ورودی می گیرد و یک تصویر باینری bw به همان اندازه ی تصویر اولی بر می گرداند، که جاهایی که تابع لبه ها را در تصویر پیدا می کند، در تصویر خروجی 1 می کند و جاهایی دیگر را 0 قرار می دهد.

برخی از الگوریتم های لبه برداری

-1الگوریتم soble

-2الگوریتم canny

-3الگوریتم Roberts

-4الگوریتم prewitt

-5الگوریتمzero-cross

الگوریتم soble : این متد لبه ها را با استفاده از تخمین زدن مشتق پیدا می کند، که لبه ها را در آن نقاطی بر می گرداند که گرادیان تصویر I ، max است.

Bw= edge(I,’sobel’,thresh)

مقدار thresh یک میزان آستانه را برای این متد مشخص می کند.

این تابع (edge) را از همه لبه هایی که قوی تر (بیشتر) از thresh نیستند چشم پوشی می کند و اگر ما مقدار این thresh را مشخص نکنیم یا اگر thresh خالی باشد {[]} ، تابع edge خود به طور اتوماتیک مقداری را انتخاب می کند.

Bw=edge(I,’sobel’,thresh,direction)

در این directin , syntax جهت را مشخص می کند، یعنی رشته ای است که مشخص می کند که این تابع لبه های افقی یا عمودی و یا هردو را جستجو کند که به طور پیش فرض هردو را جستجو می کند.

‘horizontal’  افقی:

‘vertical’عمودی:

Bw=edge(I,’sobel’,…,options)

در این دستور تابع یک رشته ی اختیاری به عنوان ورودی می گیرد که رشته nothinning سرعت عملیات الگوریتم را بالا می برد؛ به این علت که در مرحله ی نازک شدن لبه های اضافی می گذرد (می پرد) و اگر رشته ی nothinning را انتخاب کنیم، الگوریتم لبه های نازک شده را نیز درخواست می کند.

[Bw,thresh]=edge(I,’sobel’,…)

این دستور، مقدار threshold (آستانه) را برمی گرداند.

[Bw,thresh,gv,gh]=edge(….)

%Edge detection by mathworks.ir

در این دستور، لبه های افقی و عمودی (gv,gh) را با توجه به عملگرهای گرادیان بر می گرداند.

دو متد Roberts و prewitt نیز هم به همین گونه هستند.

الگوریتم canny: این متد ل لبه ها را با جستجوی max های محلی (موضعی) گرادیان I ، که گرادیان از روی مشتق فیلتر گاوس (Gaussian) محاسبه می شود.

این متد از دو آستانه (thresholds) استفاده می کند تا لبه های ضعیف و قوی را پیدا کند که فقط شامل لبه هایی ضعیف در خروجی می باشد که آنها متصل به لبه های قوی باشند.

این روش بیشتر به کشف لبه های ضعیف به درستی می پردازد و کمتر فریب نویز را می خورد و از بقیه روش ها بهتر است.

Bw= edge(I,’canny’,thresh)

این متد یک بدار آستانه (thresh) را مشخص می کند که المنت اول آن آستانه پایین و المنت دوم آن آستانه بالا را مشخص می کند.

اگر یک عدد را به عنوان (thresh) انتخاب کنیم این عدد به عنوان آستانه بالا (high threshold) و عدد (0.4×thresh) به عنوان آستانه پایین در نظر گرفته می شود و اگر هیچ عددی را برای thresh انتخاب نکنیم، تابع edge خود به طور اتوماتیک هردو المنت را انتخاب می کند.

[Bw,thresh]=edge(I,’canny’,…)

دستور بالا یک بردار دو المنتی را برمی گداند که میزان آستانه بالا و پایین را مشخص می کند.

 

 

 

مابقی مطالب در ادامه مطلب

انجام پروژه بازدید : 2484 چهارشنبه 22 آبان 1392 زمان : 15:39 نظرات (1)

تعداد صفحات : 80

درباره ما
Profile Pic
. سفارش انجام پروژه متلب|پایان نامه ارشد و دکتری|دانلود رایگان فیلم کد متلب انجام پروژه های دانشجویی شبکه عصبی داده کاوی شبیه سازی کامپیوتری توالی عملیات و زمان بندی مدل سازی انجام پروپزال پایان نامه ارشد دکتری مهندسی صنایع مدیریت مهندسی برق و...
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • موضوعات

  • انجام پروژه متلب انجام پروژه matlab سفارش پروژه های دانشجویی برنامه نویسی کدنویسی مهندسی صنایع برق الکترونیک
  • آموزش جامع متلب
  • دانلود رایگان فیلم های آموزشی
  • دانلود رایگان فایل های آموزشی
  • دانلود رایگان کد های آماده متلب
  • دوره های آموزشی و تدریس خصوصی
  • دانلود رایگان نرم افزار + آموزش
  • آمار سایت
  • کل مطالب : 2400
  • کل نظرات : 284
  • افراد آنلاین : 2
  • تعداد اعضا : 24606
  • آی پی امروز : 112
  • آی پی دیروز : 87
  • بازدید امروز : 2,530
  • باردید دیروز : 849
  • گوگل امروز : 17
  • گوگل دیروز : 13
  • بازدید هفته : 4,269
  • بازدید ماه : 6,817
  • بازدید سال : 38,347
  • بازدید کلی : 5,905,852