![]() |
ترفندهاي متلب!
ترفند متلب: ترسیم منحنی های سه بعدی در متلب
ترسیم منحنی و اشکال مختلف، بخش لاینفک بسیاری از کارهای علمی هستند. در بسیاری از موارد، می توان با یک شکل مناسب، به اندازه چندین پاراگراف و حتی چندین صفحه، مفهوم را به مخاطب منتقل نمود. نرم افزار متلب، در کنار قابلیتهای فراوانی که دارد، یکی از قوی ترین هسته های گرافیکی را برای ترسیم و مدیریت انواع منحنی ها و شکل ها دارا می باشد. توانایی استفاده از این امکانات نرم افزار متلب، یکی از ارکان کاربری آن می باشد. در این مطلب، در در آینده در مطالبی مشابه، نحوه کار با توابع ترسیم و گرافیکی متلب را مورد بررسی قرار خواهیم داد. در اینجا قصد داریم، نمودار مربوط به تابع زیر را در متلب ترسیم نماییم: فرض کنید که بازه تغییرات متغیرهای x و y ، هر دو بین 2- و 2 باشد. به این منظور تعریف می کنیم: كد:
>> x=-2:0.2:2; كد:
>> [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); در آینده منتظر ترفندها و نکات آموزشی بیشتری در این زمینه و سایر زمینه های برنامه نویسی متلب باشید. ;) |
نکته ای برای افزایش سرعت اجرای برنامه ها
زبان متلب، یک زبان مفسری است و برنامه های نوشته شده در آن، کامپایل نمی شوند. بنابراین طبیعی است که سرعت اجرای برنامه های متلب، در مقایسه با زبان های کامپایلری، مانند C، پایین باشد. اما آیا واقعا، همه تقصیرها متوجه متلب است؟ در این مقاله آموزشی کوچک، می خواهیم نشان دهیم که چگونه می توان با رعایت اصول ساده، حداکثر سرعت قابل دسترسی در متلب را، برای برنامه ها به دست آوریم. یکی از اشتباه هایی که بسیاری از برنامه نویسان متلب مرتکب می شوند، عدم تخصیص فضای مناسب برای آرایه ها و ماتریس ها، قبل از مقدار دهی است. زبان هایی مانند C یا #C (بخوانید سی شارپ)، در هنگام تعریف آرایه ها، اندازه آرایه ها را به صورت اجباری از برنامه نویس می خواهند و هر گاه در طول اجرای برنامه، بخواهیم که مقدار آرایه را در جایی که بیش از طول آرایه است، تغییر دهیم، برنامه خطا می دهد. اما متلب، از آن جا که سادگی را به عنوان محور اولیه در نظر گرفته است، چنین ضرورت هایی را به برنامه نویسی تحمیل نمی کند. اما مشکل دقیقا از همین جا شروع می شود. برای آرایه های کوچک، همه چیز به خوبی و خوشی تمام می شود. اما وقتی آرایه ها، از یک حد بزرگ تر می شوند، ایم مسأله واقعا دردسر ساز می شود. در متلب، برای تخصیص فضای اولیه (Pre-Allocation)، از توابع مختلفی استفاده می شود. ازمیان این توابع، پر کاربردترین آن ها، تابع zeros است. این تابع ابعاد ماتریس مورد نظر را می گیرید، و بخشی از حافظه را به همان اندازه، برای آرایه موزذ نظر تخصیص می دهد. این کار، در زبان C، با تابع malloc انجام می شود. برای آگاهی بیشتر از چگونگی کارکرد این تابع، به راهنمای آن در هلپ متلب، مراجعه کنید. دو برنامه زیر را در نظر بگیرید. این برنامه ها برای محاسبه تعداد زیادی از جملات سری فیبوناچی (Fibonacci)، نوشته شده است. در سری فیبوناچی، هر جمله با مجموع دو جمله قبل از خودش برابر است. جمله اول و دوم نیز، طبق قرارداد برابر با صفر و یک در نظر گرفته می شوند. برنامه اول: كد:
clear; كد:
clear; حال فرض کنید که در یک برنامه بزرگ، این مشکلات چقدر می تواند حادتر و شدیدتر باشد.:) امیدوارم این نکته آموزشی، برایتان مفید باشد. منتظر نکات بعدی باشید.;) |
وارد کردن دیتا با استفاده از دستور tdfread و textscan
وارد کردن دیتا با استفاده از دستور TDFREAD و TEXTSCAN
با متلب تقریبا همه جور فایلی رو میشه وارد (import) یا خارج (export) کرد . فایل های باینری ، فایل های نوشتاری (text) یا حتی فایل های تصویری مثل عکس یا ویدئو برای عملیاتی مثل پردازش تصویر . در واقع میشه یه سری دیتا رو از طریق یه فایل text وارد متلب کرد و یه سری پردازش های روی اون اطلاعات انجام داد و بعد نتایج حاصل رو در یه فایل دیگه ذخیره کرد. پس قبل از هرکاری احتیاج داریم این فایل حاوی اطلاعات رو یه جوری تو متلب بخونیمش ، برای این کار هم دستورهای مختلفی وجود داره که هر کدوم از اون ها معایب و محاسن خودشون رو دارن ، اما دو تا دستور هستن که بیشتر استفاده میشن ، یکی tdfread و دیگری textscan . کار خودمون رو با tdfread شروع میکنیم و به سراغ دومین دستور یعنی textscan میریم. فرض کنید یه سری دیتا داریم در دو فرمت مختلف به این صورت : The data as .txt كد:
Region State Sales Head Count كد:
i,Region,State,Sales,Head Count استفاده ازTDFREAD خیلی دستور ساده و در عین حال کارآمدی هست که به این صورت استفاده میشه : خروجی در متغیر quanData از نوع struct ذخیره میشن quanData = Region: [13x5 char] State: [13x14 char] Sales: [13x1 double] Head_Count: [13x1 double] در این قسمت دیتا به راحتی وارد متلب شد و آماده است تا هر جا که احتیاج باشد ، پردازش شود . همونطور که میبینید این دستور کار رو بسیار ساده کرده ، اما متاسفانه در اینجا نوشته شده که از ورژن R2007b بالاتر این دستور توسط متلب ساپورت میشه . استفاده از TEXTSCAN این دستور هم مثل قبلی راحته ( اما نه با اندازه ی اون ) و دیگه مشکل ساپورت رو نداره ، این بار توسط این دستور فایل با فرمت cvs رو ایمپرت میکنیم : باز هم دیتا در یک سل ذخیره شد و میتونیم ازش استفاده کنیم : كد:
robData = اصلا بهتر از این راه ، راه دیگه ای هم هست ؟ راستش رو بخواید باید بگم نه !! فکر نکنم از این راه ساده تر باشه ، شاید بهتره اول با استفاده از دستورات csvread, dlmread, load, importdata, tdfread خودتون تست بکنید ، تا به این نتیجه برسید ! البته بسته به نوع دیتایی که دارین ممکنه بعضی از پنج دستور کارتون رو راه نندازه و با مشکل مواجه بشید ، اما در آخر سر به نظر من دستور textscan بهترین نتیجه رو میده ، این دستور خیلی انعطاف پذیره و فرمت های زیادی رو ساپورت میکنه |
tashsakkor az reyhane
|
سلام خسته نباشی ریحانهٰ میشه در خصوص آموزش متلب فیلم یا کتابی معرفی یا ارائه کنید .با تشکر فراوان
|
نقل قول:
کتابهاي فارسي آموزش Matlab |
زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۲:۲۲ قبل از ظهر ميباشد. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.