Artificial Intelligence - هوش مصنوعی  
انجمن را در گوگل محبوب کنيد :

بازگشت   Artificial Intelligence - هوش مصنوعی > متفرقه > نرم افزار MATLAB


 

تبليغات سايت
Iranian Association for the Advancement of Artificial Intelligence
ارسال تاپيک جديد  پاسخ
 
LinkBack ابزارهاي تاپيک نحوه نمايش
قديمي ۰۷-۱۵-۱۳۸۸, ۰۹:۵۰ قبل از ظهر   #1 (لینک دائم)
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,333 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Lightbulb ترفندهاي متلب!

ترفند متلب: ترسیم منحنی های سه بعدی در متلب

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

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


فرض کنید که بازه تغییرات متغیرهای x و y ، هر دو بین 2- و 2 باشد. به این منظور تعریف می کنیم:

كد:
>> x=-2:0.2:2;
>> y=-2:0.2:2;
برای ترسیم منحنی های سه بعدی، می بایست تمام نقاط موجود در بردار x، با تمام نقاط موجو در بردار y ترکیب شوند و مقدار تابع در نقطه به دست آمده، محاسبه شود. برای این منظور، از تابع meshgrid به صورت زیر استفاده می کنیم:

كد:
>> [X,Y]=meshgrid(x,y);
حال مختصات بعد سوم را به صورت زیر محاسبه می کنیم:

كد:
>> Z=exp(-(X.^2+Y.^2));
داده های مورد نیاز برای ترسیم انواع منحنی های سه بعدی، آمده شده اند. می توانیم با فراخوانی دستورهای مربوطه، منحنی های مختلفی را ترسیم نماییم. نمونه ای از دستورهای قابل اجرا بر روی داده های به دست آمده، به همراه نمودارهای مربوط به هر دستور، در ادامه آمده اند:

دستور mesh:

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

كد:
>> mesh(X,Y,Z);


دستور surf:

این دستور برای ترسیم نمودارهای سه بعدی سطحی (اسکلت به همراه سطح رنگی) به کار می رود. برای اجرای این دستور این عبارت را وارد می کنیم:

كد:
>> surf(X,Y,Z);


دستور contour:

این دستور سطح کانتوری مربوط به داده های سه بعدی را ترسیم می کند. هر چند نمودار به دست آمده پس از اجرای این تابع، یک نمودار دو بعدی است، اما برای ترسیم آن، می بایستی داده های سه بعدی ایجاد شده باشد. همچنین می توانید از دستورهای meshc و surfc برای ترکیب این نوع از نمودار با نمودارهای mesh و surf اسفتفاده نمایید. برای فراخوانی تابع contour این عبارت را وارد می کنیم:

كد:
>> contour(X,Y,Z);


در آینده منتظر ترفندها و نکات آموزشی بیشتری در این زمینه و سایر زمینه های برنامه نویسی متلب باشید.
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
aimaryam (۰۵-۱۵-۱۳۸۹), andr0meda (۰۸-۱۶-۱۳۹۲), mmsd54 (۰۸-۱۶-۱۳۸۸)

  #ADS
نشان دهنده تبلیغات
تبليغگر
 
 
 
تاريخ عضويت: -
محل سكونت: -
سن: 2010
پست ها: -
 

نشان دهنده تبلیغات is online  
قديمي ۰۷-۱۵-۱۳۸۸, ۰۹:۵۳ قبل از ظهر   #2 (لینک دائم)
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,333 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
پيش فرض

نکته ای برای افزایش سرعت اجرای برنامه ها

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

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

در متلب، برای تخصیص فضای اولیه (Pre-Allocation)، از توابع مختلفی استفاده می شود. ازمیان این توابع، پر کاربردترین آن ها، تابع zeros است. این تابع ابعاد ماتریس مورد نظر را می گیرید، و بخشی از حافظه را به همان اندازه، برای آرایه موزذ نظر تخصیص می دهد. این کار، در زبان C، با تابع malloc انجام می شود. برای آگاهی بیشتر از چگونگی کارکرد این تابع، به راهنمای آن در هلپ متلب، مراجعه کنید.

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

برنامه اول:

كد:
clear;
n=300000;
x(1)=0;
x(2)=1;
for k=3:n
    x(k)=x(k-1)+x(k-2);
end
برنامه دوم:

كد:
clear;
n=300000;
x=zeros(1,n);     % Pre-Allocation
x(1)=0;
x(2)=1;
for k=3:n
    x(k)=x(k-1)+x(k-2);
end
این دو برنامه، فقط در مورد تخصیص اولیه (خط سوم از برنامه دوم)، با هم اختلاف دارند. اما جالب است بدانید که مدت اجرای برنامه اول، در حدود 4 دقیقه بود. در حالی برنامه دوم، در کمتر از یک ثانیه اجرا می شود.
حال فرض کنید که در یک برنامه بزرگ، این مشکلات چقدر می تواند حادتر و شدیدتر باشد.

امیدوارم این نکته آموزشی، برایتان مفید باشد. منتظر نکات بعدی باشید.
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
andr0meda (۰۸-۱۶-۱۳۹۲), mmsd54 (۰۸-۱۶-۱۳۸۸), negar_a (۱۲-۲۱-۱۳۸۸), سيروس (۰۳-۲۱-۱۳۹۰)
قديمي ۰۷-۲۹-۱۳۸۸, ۱۲:۲۳ بعد از ظهر   #3 (لینک دائم)
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,333 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Wink وارد کردن دیتا با استفاده از دستور tdfread و textscan

وارد کردن دیتا با استفاده از دستور TDFREAD و TEXTSCAN

با متلب تقریبا همه جور فایلی رو میشه وارد (import) یا خارج (export) کرد . فایل های باینری ، فایل های نوشتاری (text) یا حتی فایل های تصویری مثل عکس یا ویدئو برای عملیاتی مثل پردازش تصویر . در واقع میشه یه سری دیتا رو از طریق یه فایل text وارد متلب کرد و یه سری پردازش های روی اون اطلاعات انجام داد و بعد نتایج حاصل رو در یه فایل دیگه ذخیره کرد. پس قبل از هرکاری احتیاج داریم این فایل حاوی اطلاعات رو یه جوری تو متلب بخونیمش ، برای این کار هم دستورهای مختلفی وجود داره که هر کدوم از اون ها معایب و محاسن خودشون رو دارن ، اما دو تا دستور هستن که بیشتر استفاده میشن ، یکی tdfread و دیگری textscan . کار خودمون رو با tdfread شروع میکنیم و به سراغ دومین دستور یعنی textscan میریم.

فرض کنید یه سری دیتا داریم در دو فرمت مختلف به این صورت :

The data as .txt
كد:
Region  State   Sales   Head Count
North   North Dakota    80078   81
North   Montana 90608   391
North   Michigan        4598    27
North   Wisconsin       11622   36
South   Florida 9788    73
South   Georgia 86456   385
South   Alabama 94766   91
South   Mississippi     13004   61
East    North Carolina  612     25
East    Virginia        85508   233
West    California      84419   262
West    Washington      92682   97
West    Oregon  53185   51
The data in .csv format:
كد:
i,Region,State,Sales,Head Count
1,North,North Dakota,80078,81
2,North,Montana,90608,391
3,North,Michigan,4598,27
4,North,Wisconsin,11622,36
5,South,Florida,9788,73
6,South,Georgia,86456,385
7,South,Alabama,94766,91
8,South,Mississippi,13004,61
9,East,North Carolina,612,25
10,East,Virginia,85508,233
11,West,California,84419,262
12,West,Washington,92682,97
13,West,Oregon,53185,51
یه توضیح کوچولو هم بدم که با برنامه excel میشه اطلاعات رو با فرمت cvs خارج کرد که تو این مثال ما از این فرمت استفاده کردیم. شما میتونید فایل های نمونه رو با فرمت txt از اینجا و با فرمت cvs از اینجا دریافت کنید.


استفاده ازTDFREAD

خیلی دستور ساده و در عین حال کارآمدی هست که به این صورت استفاده میشه : خروجی در متغیر quanData از نوع struct ذخیره میشن

quanData =

Region: [13x5 char]
State: [13x14 char]
Sales: [13x1 double]
Head_Count: [13x1 double]
در این قسمت دیتا به راحتی وارد متلب شد و آماده است تا هر جا که احتیاج باشد ، پردازش شود . همونطور که میبینید این دستور کار رو بسیار ساده کرده ، اما متاسفانه در اینجا نوشته شده که از ورژن R2007b بالاتر این دستور توسط متلب ساپورت میشه .

استفاده از TEXTSCAN

این دستور هم مثل قبلی راحته ( اما نه با اندازه ی اون ) و دیگه مشکل ساپورت رو نداره ، این بار توسط این دستور فایل با فرمت cvs رو ایمپرت میکنیم : باز هم دیتا در یک سل ذخیره شد و میتونیم ازش استفاده کنیم :

كد:
robData = 

    [13x1 double]    {13x1 cell}    {13x1 cell}    [13x1 double]    [13x1 double]
بهترین روش کدومه ؟

اصلا بهتر از این راه ، راه دیگه ای هم هست ؟ راستش رو بخواید باید بگم نه !! فکر نکنم از این راه ساده تر باشه ، شاید بهتره اول با استفاده از دستورات csvread, dlmread, load, importdata, tdfread خودتون تست بکنید ، تا به این نتیجه برسید ! البته بسته به نوع دیتایی که دارین ممکنه بعضی از پنج دستور کارتون رو راه نندازه و با مشکل مواجه بشید ، اما در آخر سر به نظر من دستور textscan بهترین نتیجه رو میده ، این دستور خیلی انعطاف پذیره و فرمت های زیادی رو ساپورت میکنه
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
andr0meda (۰۸-۱۶-۱۳۹۲), mmsd54 (۰۸-۱۶-۱۳۸۸), سيروس (۰۳-۲۱-۱۳۹۰)
قديمي ۰۸-۱۶-۱۳۸۸, ۰۸:۵۴ بعد از ظهر   #4 (لینک دائم)
عضو جدید
 
آواتار ibrahim habibi
 
تاريخ عضويت: آبان ۱۳۸۸
پست ها: 1
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

tashsakkor az reyhane
ibrahim habibi آفلاين است   پاسخ با نقل قول
قديمي ۰۹-۱۹-۱۳۸۸, ۱۰:۰۹ قبل از ظهر   #5 (لینک دائم)
عضو جدید
 
آواتار shmail
 
تاريخ عضويت: آذر ۱۳۸۸
محل سكونت: تهران
پست ها: 1
تشكرها: 4
4 تشكر در 1 پست
پيش فرض

سلام خسته نباشی ریحانهٰ میشه در خصوص آموزش متلب فیلم یا کتابی معرفی یا ارائه کنید .با تشکر فراوان
__________________
shmail آفلاين است   پاسخ با نقل قول
قديمي ۰۹-۱۹-۱۳۸۸, ۰۷:۱۶ بعد از ظهر   #6 (لینک دائم)
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,333 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Wink

نقل قول:
نوشته اصلي بوسيله shmail نمايش پست
سلام خسته نباشی ریحانهٰ میشه در خصوص آموزش متلب فیلم یا کتابی معرفی یا ارائه کنید .با تشکر فراوان
فیلم آموزشی برنامه نویسی مقدماتی متلب

کتابهاي فارسي آموزش Matlab
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
aimaryam (۰۵-۱۵-۱۳۸۹), combo_ci (۱۰-۲۸-۱۳۸۸)
پاسخ



كاربران در حال ديدن تاپيک: 1 (0 عضو و 1 مهمان)
 
ابزارهاي تاپيک
نحوه نمايش

قوانين ارسال
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is فعال
شکلکها فعال است
كد [IMG] فعال است
كدهاي HTML غير فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال




زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۹:۱۵ بعد از ظهر ميباشد.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

Teach and Learn at Hexib | Sponsored by www.Syavash.com and Product In Review

استفاده از مطالب انجمن در سایر سایت ها، تنها با ذکر انجمن هوش مصنوعي به عنوان منبع و لینک مستقیم به خود مطلب مجاز است

Inactive Reminders By Icora Web Design