کارگاه محاسبه و ترسیم 3
(آموزش نرمافزار MATLAB)
تهیه و تدوین:
محسن قبادی
سال تحصیلی89-89
ایجاد یک m-file
برای نوشتن برنامههای کاربردی در نرمافزار MATLAB باید این برنامهها را در محیط یک فایل بنویسیم که به آن mfile گفته میشود. پنجره زیر روش ایجاد یک m-file را نشان میدهد.
با انجام مراحل فوق پنجرهای مطابق شکل زیر باز میشود که میتوان فرمولهای ریاضی و همه محاسبات را در آن انجام داد.
مثلا میخواهیم برنامهای بنویسیم که اضلاع یک مثلث را گرفته و محیط و مساحت آن را محاسبه نماید. با ایجاد یک M-file و نوشتن خطوط زیر این کار امکانپذیر میگردد. لازم به ذکر است که دانستن روابط ریاضی محیط و مساحت از روی اضلاع مثلث، ضروری است.
نکته: برای جذر گرفتن از روابط ریاضی میتوان از تابع sqrt() استفاده نمود.
نکته: نرمافزار بین حروف کوچک و بزرگ تفاوت قائل میگردد و توجه شود که شکل یک حرف خاص در کل برنامه ثابت بماند.
نکته: برای چاپ کردن حاصل محاسبات، باید در کنار روابط مورد نظر علامت ; را حذف نمود.
نکته: برای پاک کردن پنجره command window میتوان از دستور clc بهره برد.
نکته: برای پاک کردن حافظه نرمافزار از متغیرها از دستور clear all استفاده مینماییم.
تذکر: همواره در ابتدای برنامهها از دو دستور اشاره شده استفاده گردد.
تمرین: برنامهای بنویسید که محیط یک دایره را گرفته و مساحت آن را محاسبه نماید.
نکته: برای توان رساندن یک عدد از دستور ^ استفاده نمایید.
تمرین: برنامهای بنویسید که اضلاع یک مثلث را گرفته و زوایای آن را محاسبه نماید.
نکته: توابع مثلثاتی نرمافزار عبارتند از
Sin, sind, cos, cosd, tan, tand, asin, acos, asind, acosd
تمرین: برنامهای بنویسید که زاویههای داخلی یک پیمایش بسته پنج ضلعی را بر حسب گراد گرفته و خطای بست زاویهای را محاسبه نماید. مقدار زوایای سرشکن شده را نیز محاسبه نمایید.
نام زاویه |
A |
B |
C |
D |
E |
مقدار زاویه |
120 |
90 |
100 |
120 |
169.25 |
تمرین: در تمرین فوق اگر ژیزمان امتداد AB ، 20 گراد باشد، مطلوبست ژیزمان سایر امتدادها ( پیمایش مورد نظر ساعتگرد است).
دستور input
از این دستور میتوان برای دریافت داده از کاربر توسط صفحه کلید استفاده نمود. برای مثال، میخواهیم برنامه تمرین قبل را طوری بنویسیم که بعد از اجرای آن، مقدار زوایا از کاربر خواسته شود.
دستور input را به شکل زیر مورد استفاده قرار میدهیم:
a = input(' please enter a:');
با اجرای دستور فوق مقدار متغیر a از کاربر خواسته میشود.
تمرین: برنامه تمرین قبل را با استفاده دستور input برای پیمایش زیر بنویسید و زوایا را تعدیل نمایید.
مقدار زاویه( درجه) |
نام زاویه |
84.8922 |
A |
96.6236 |
B |
103.6766 |
C |
134.4950 |
D |
120.3055 |
E |
تمرین : زوایای خارجی یک پیمایش بسته 6 ضلعی از قرار زیر است. مقدار زوایای تعدیل شده را محاسبه نمایید.
مقدار زاویه ( گراد) |
نام زاویه |
320.3670 |
A |
234.9020 |
B |
277.4180 |
C |
308.4220 |
D |
253.7290 |
E |
205.1640 |
F |
دستورات format نمایش اعداد
Format short: نمایش اعداد تا چهار رقم اعشار
Format long: نمایش اعداد تا شانزده رقم اعشار. البته اگر تعداد رقمهای قبل از اعشار زیاد باشد، عدد مربوطه به شکل توانی از ده نمایش داده میشود.
Format short e: نمایش اعداد با تعداد ارقام اعشاری کم به شکل توانی از ده.
Format long e: نمایش اعداد با تعداد ارقام اعشاری زیاد به شکل توانی از ده.
معمولا در ابتدای برنامه باید یکی از انواع صحیح موارد فوق را وارد نماییم.
تعریف ماتریس
در بسیاری از موارد در پروژههای نقشهبرداری لازم است مجموعهای از اعداد را با اعمال روابط ریاضی به مجموعهای از اعداد دیگر تبدیل نمود. برای مثال، در تمرین قبل مقدار تصحیح زوایا محاسبه شده و در 6 خط برنامه این تصحیح به تک تک زاویهها اعمال میگشت. به جای انجام این کار میتوان با تعریف یک ماتریس که همه زوایای قرائت شده در درون آن قرار میگیرند، مقدار تصحیح را در یک خط به ماتریس زوایا اعمال نموده و سرعت اجرای برنامه را افزایش داده و حجم برنامه را کاهش دهیم.
برای تعریف ماتریس در این نرمافزار از روش زیر استفاده نمایید:
انجام عملیاتهای ماتریسی
همواره لازم است که چهار عمل اصلی و سایر عملیاتهای ریاضی بر روی ماتریسها انجام گردد. بدین منظور ماتریسهای زیر را در نظر بگیرید.
ضرب و تقسیم ماتریسها
بطور کل اگر بخواهیم دو ماتریس را در یکدیگر ضرب ماتریسی نماییم باید تعداد ستونهای ماتریس اول با تعداد سطرهای ماتریس دوم یکی باشد.
اما در بسیاری از مسائل نقشهبرداری لازم نیست که دو ماتریس در یکدیگر ضرب ماتریسی شوند بلکه ضرب یا تقسیم درایهای مورد توجه نقشهبردارها میباشد. به عبارت دیگر لازم است که درایههای ماتریس اول نظیر به نظیر در درایههای ماتریس دوم ضرب یا تقسیم گردند که در این حالت باید علامت . را در کنار علامتهای مورد نظر قرار داد. (*. یا /. یا ^.)
البته توابع سینوس و کسینوس و ... را نیز میتوان بر ماتریسها اعمال نمود.
تمرین: جدول زیر نشان دهنده طول اضلاع 10 مثلث میباشد. مطلوبست موارد زیر
الف) محیط
ب) مساحت
ج) زوایای هر یک از مثلثها
ضلع سوم |
ضلع دوم |
ضلع اول |
شماره مثلث |
10 |
10 |
12 |
1 |
13 |
13 |
10 |
2 |
15 |
15 |
8 |
3 |
12 |
12 |
5 |
4 |
14 |
14 |
6 |
5 |
6 |
6 |
9 |
6 |
15 |
15 |
12 |
7 |
12 |
12 |
10 |
8 |
10 |
10 |
17 |
9 |
18 |
18 |
20 |
10 |
نکته: برای جلوگیری از ایجاد پرانتزهای ناصحیح، در هنگام تایپ فرمولها میتوان ابتدا همه پرانتزها را از بیرونیترین آن نوشت و سپس متغیرها را در آن تایپ نمود.
آشنایی با خطاهای رایج برنامه نویسی
Undefined function or variable 'd’: یعنی متغیر ‘d’ در برنامه تعریف نشده است ولی در فرمول نوشته شده است.
Unbalanced or unexpected parenthesis or bracket.: یعنی تعداد پرانتزها یا براکتها صحیح نیست.
تمرین: مطابق جدول زیر یک ترازیابی بسته از نقطه A شروع شده و به این نقطه رسیده است. اگر ارتفاع نقطه A ، 1650 متر باشد، ارتفاع تصحیح شده سایر نقاط را به دست آورید. ( برای جمع زدن درایه های یک ماتریس از تابع sum() استفاده نمایید.)
F.S. |
B.S. |
نام نقطه |
|
2697 |
A |
1574 |
3176 |
B |
2968 |
2945 |
C |
3742 |
0732 |
D |
2592 |
1840 |
E |
1757 |
3290 |
F |
2868 |
2063 |
G |
1377 |
1159 |
H |
1040 |
|
A |
تمرین: با توجه به دادههای زیر، خطای بست زاویهای و ضلعی پیمایش را محاسبه نمایید.
AB = 53.68 , BC = 248.35 , CD = 129.17 , DA = 169.5
A = 62 51 30 , B = 124 35 20 , C = 30 51 30 , D = 141 42 40
D |
XA = 1000 , YA = 1000,
C |
GAB = 20
A |
B |
بعضی از توابع مفید
length : بیشترین تعداد سطر یا ستون یک ماتریس
size: تعداد سطرها و ستونها
min , max : بزرگترین و کوچکترین عضو یک ماتریس
mean : میانگین داده های یک ماتریس
var : واریانس داده های یک ماتریس
std: انحراف معیار دادههای یک ماتریس
cov : کووریانس دادههای یک ماتریس
sort : مرتب سازی داده های یک ماتریس
ترانهاده (‘) : برای تغییر محل سطرها و ستونها
sum : مجموع اعداد ستونها
abs : قدر مطلق یک عدد.
اعداد ثابت در نرم افزار
eps : کوچکترین عدد موجود در نرمافزار
pi : عدد 3.14
دستورات شرطی
در بسیاری از مسائل نقشهبرداری لازم است که در حین محاسبات یک شرطی را بررسی نماییم. به مثالهای زیر توجه نمایید:
1- در محاسبه ژیزمان معکوس لازم است ژیزمان مستقیم با عدد 180 درجه مقایسه گردد و در صورت بزرگتر بودن و یا کوچکتر بودن آن از عدد 180 درجه به ترتیب باید از ژیزمان مستقیم، عدد 180 را کم کرد و یا به آن اضافه نمود.
2- در نقشه برداری زاویه منفی معنا ندارد و اگر یک زاویه منفی شد با فرض صحیح بودن محاسبات، باید عدد 360 را به آن زاویه اضافه نمود.
3- در نقشه برداری ژیزمان بزرگتر 360 درجه معنا ندارد و در این صورت باید عدد 360 را از ژیزمان کم نماییم.
4- در محاسبه ژیزمان از روی مختصات نقاط، لازم است که شرط ربع آن امتداد بررسی شود و زاویه حامل را به ژیزمان تبدیل نماییم.
در هر یک از حالات فوق میتوان از دستورات شرطی نرمافزار استفاده نمود که عبارتند از:
if , else , elseif, while, switch, end , break , return
دستور شرطی if
از این دستور به شکل زیر استفاده میگردد:
if shart 1
dastoorat 1
else
dastoorat 2
end
مطابق خطوط بالا اگر shart 1 برقرار باشد، dastoorat 1اجرا میشود و برنامه به بعد از end میرود ولی اگر shart 1 برقرار نباشد، dastoorat 2 اجرا خواهد شد. به مثال زیر توجه نمایید:
a = input('please enter a : ');
b = input('please enter b : ');
c = input('please enter c : ');
if (a>b)
d = c*2;
else
d = c/2
end
در مثال فوق ابتدا سه عدد a , b , c از کاربر برنامه خواسته میشود. سپس متغیر a با متغیر b مقایسه میگردد و در صورت بزرگتر بودن a از b خط d = c*2 اجرا میگردد، در غیر اینصورت خط d = c/2 اجرا خواهد شد.
توجه گردد که بعد از پایان دستورات حتما از عبارت end استفاده گردد.
دستور شرطی elseif
این دستور همانند دستور if میباشد ولی در حالتی که چند شرط را بخواهیم در برنامه تست نماییم، از این دستور به صورت زیر استفاده مینماییم:
if (a>b)
d = c*2;
elseif (a==b)
d = c/2
elseif (b>a)
d = c^2
end
نکته: معمولا در حالتهای شرطی دو عدد با یکدیگر مقایسه میگردند که از نمادهای زیر برای مقایسه میتوان استفاده نمود:
a>b: a بزرگتر از b باشد.
a
a==b: a مساوی با b باشد.
a>=b: a بزرگتر یا مساوی با b باشد.
a<=b: a کوچکتر یا مساوی با b باشد.
a~=b: a مخالف b باشد.
نکته: در بعضی مواقع لازم است که بطور همزمان دو شرط مقایسهای مورد توجه قرار گیرند که در این حالت از علامت & و | به معنای " و" و "یا" میتوان استفاده نمود.
if (a>b&a>c)
d = c*2;
elseif (a>b|a>c)
d = c/2
elseif (b>a)
d = c^2
end
در دستورات فوق برای اینکه برنامه خط d = c*2 را اجرا نماید،لازم است که بطور همزمان a از b و a از c بزرگتر باشد (a>b&a>c). اما اگر a از b بزرگتر باشد یا اگر a از c بزرگتر باشد، d = c/2 را اجرا مینماید.
مثال: برنامهای بنویسید که مختصات دو نقطه را از کاربر گرفته و ژیزمان امتداد مورد نظر را محاسبه نماید.
حلقه تکرار for
برای تکرار یک سری دستورات به دفعات معین، از دستور for به شکل زیر میتوان بهره برد:
for i=1:n
dastoorat
end
مطابق خطوط بالا، عبارتهای مربوط به dastoorat به تعداد n دفعه تکرار میگردد.
مثال: برنامهای بنویسید که مختصات 5 جفت نقطه را گرفته و ژیزمان امتدادهای مورد نظر را محاسبه نماید.
نقطه نشانه روی |
نقطه استقرار |
||
1200 |
1200 |
1000 |
1000 |
1500 |
1000 |
1300 |
1500 |
1200 |
1500 |
1360 |
1250 |
4000 |
2000 |
3700 |
2560 |
1200 |
1000 |
1500 |
1000 |
D |
B |
مثال: مطابق جدول زیر مختصات سومههای یک مسیر از قرار زیر است. زاویه انحراف هریک از قوسها را محاسبه نمایید.
A |
E |
C |
y |
x |
|
2200 |
1520 |
A |
3400 |
2300 |
B |
2500 |
3300 |
C |
3500 |
4000 |
D |
3300 |
5100 |
E |
نظرات شما عزیزان:
پاسخ:سلام خسته نباشی دوست عزیز برنامه مطلب برای سرشکنی بهترین برنامس
پاسخ:ممنون که بهمون سر زدین امیدوارم بتونم پاسخ های شمارو جواب دهم . و از دانسته های شما استفاده کنم
نمونه ای از یک برنامه که زوایای پیمایش بشته را سرشکن می کند چطور می تونم پیدا کنم؟
پاسخ: در یک فایل اکسب براتون تو وبلاگ قرار دارم.
.: Weblog Themes By Pichak :.