محاسبات نمادین در متلب | دستور syms
به نام خدا و سلام.
به جلسه سی و چهارم از سری جلسات آموزش متلب خوش آمدید. آموزش متلب از وبسایت متلبپلاس به صورت تخصصی ارائه میشود. در این جلسه به آموزش محاسبات نمادین (Symbolic Toolbox) در متلب میپردازیم. جعبه ابزار سیمبولیک متلب، امکان انجام محاسبات تحلیلی (پارامتری) را فراهم میکند. از طرفی، محاسبات تحلیلی از مهمترین بخشهای محاسباتی ریاضی و مهندسی میباشد. در این جلسه دستورات موردنیاز برای محاسبات نمادین نیز معرفی میشوند. مباحثی مانند، فاکتورگیری، بسط دادن، ساده سازی، مقداردهی و حد یک عبارت ریاضی.
با متلب پلاس همراه باشید.
مقدمهای بر دادههای نمادین در متلب
در نرم افزار متلب، دادهها انواع مختلفی دارند. اعداد، متن، آرایه عددی، سلول و استراکچر از این موارد اند. نوع خاصی از این دادهها، دادههای نمادین (پارامتری یا سیمبولیک symbolic) میباشند. دادههای نمادین در تولباکس سیمبولیک (Symbolic Toolbox) نرم افزار متلب ارائه شدهاند. برای کار با دادههای نمادین، بایستی هنگام نصب نرم افزار متلب تیک این تولباکس فعال باشد. اگر نرم افزار متلب را نصب کردهاید اما هنوز این تولباکس برای شما فعال نیست، فرآیند نصب متلب را تکرار کنید. اما این بار فقط تیک همین تولباکس را بزنید و مابقی را غیرفعال کنید.
با استفاده از جعبه ابزار نمادین متلب، میتوان محاسبات پارامتری ریاضی را انجام داد. مثلا میتوان یک عبارت ریاضی (پارامتری) نوشت و آن را ساده سازی کرد. و یا میتوان مقداردهی به یک عبارت پیچیده را انجام داد. پس از تعریف متغیر نمادین در متلب، امکان انجام هر عملیات ریاضی روی آن وجود دارد. در ادامه آموزش متلب، به این موارد میپردازیم.
تعریف عدد نمادین در متلب
اعداد نمادین برخلاف اعداد اعشاری (با کلاس double) دارای نمایش دقیق هستند. برای تعریف عدد نمادین در متلب، از دستور sym استفاده میشود. کافیست عدد موردنظر را درون پرانتز مقابل sym بنویسیم. برای مثال عدد پی در فرمت نمادین به صورت زیر تعریف میشود.
sym(pi)
ans =
pi
همانطور که مشاهده میکنید پس از اجرا، عدد پی را به صورت pi نمایش دادهاست. در ابتدای تعریف هم گفتیم که اعداد نمادین به صورت دقیق هستند نه تقریبی. برای مشاهده اختلاف عدد پی به صورت نمادین و به صورت عادی (double) به مثال زیر دقت کنید.
pi
ans =
3.1416
این اختلاف گرچه بسیار کوچک است، اما در محاسبات هم رخ میدهد.مثلا اگر سینوس عدد پی را به صورت عادی و نمادین باهم مقایسه کنیم، داریم:
sin(sym(pi))
ans =
0
sin(pi)
ans =
1.2246e-16
مشاهده میشود که مقدار سینوس عدد پی در حالت نمادین، دقیق است. در حالی که برای سینوس پی (به صورت عدد double) مقدار بسیار کوچکی خطا داریم. این اختلاف بخاطر عدد پی در حالت نمادین (مقدار واقعی پی تا بینهایت رقم اعشار) و حالت double (با دقت 16 رقم اعشار) است.
تبدیل عدد نمادین به double در متلب
گاهی پس از انجام محاسبات نمادین (مشتق، انتگرال، حل معادله و…) میبینیم که متلب پاسخ خوبی ارائه نکردهاست. یعنی پاسخ درست است اما قابل درک نیست. برای تبدیل این عدد به فرمت double (که نمایش آن نیز اعشاری است) از double استفاده میکنیم. به مثال زیر دقت کنید.
a = sym(10/3)
a =
10/3
double(a)
ans =
3.3333
تعریف متغیر نمادین در متلب
مهمترین بخش این جلسه، تعریف متغیر سیمبولیک (پارامتری) در متلب است. برای تعریف متغیر نمادین در متلب از دستور syms استفاده میکنیم. طرز نوشتار این دستور به این صورت است که نام متغیرهای موردنظر بعد از syms میآیند. مثلا:
syms x y f(t)
پس از اجرای دستور فوق، 3 متغیر مستقل و یک متغیر وابسته در متلب تعریف میشوند. متغیرهای x و y و t متغیرهای مستقل و متغیر f نیز وابسته (به t) میباشند. به عبارت دیگر میتوان f را تابعی از t نامید.
دستور assume در متلب (فرض کردن شرایط)
چنانچه متغیرهایی که در متلب تعریف میکنیم دارای شرط باشند، با assume فرضیات را تعریف میکنیم. مثلا اگر یک متغیر مثبت، منفی، حقیقی، عدد صحیح و… باشد. برای این کار نام متغیر و شرایط را درون دستور assume مینویسیم. در آموزش حل معادله در متلب، شرایط مختلف و نحوه استفاده از دستور assume ارائه شد. در تصویر زیر این شرایط آمدهاست.
ستون سمت چپ در شکل بالا نحوه تعریف شرایط در متلب را نشان میدهد.
تعریف عبارت نمادین در متلب
حال به تعریف عبارت ریاضی نمادین در متلب میپردازیم. یک عبارت ریاضی از چندین متغیر و فرضیات مختلف تشکیل شده. نحوه تعریف متغیر و فرض هم در بالا ارائه شد. بنابراین عبارت نمادین به صورت زیر در متلب تعریف میشود.
syms a b c x
f = a*x^2 + b*x + c
f =
a*x^2 + b*x + c
در این مثال یک عبارت تعریف کردیم که شامل پارامترهای a,b,c و x است.
تعریف عبارت نمادین هیچ محدودیتی ندارد. تنها نکتهای که باید به آن توجه کنیم، نام متغیرها است. بهتر است نام متغیرها، نام توابع یا دستورات متلب نباشند. مثلا اگر متغیری به نام sin تعریف کنیم، در محاسبات با خطا مواجه میشویم.
عبارتهای نمادین میتوانند به صورت بردار یا ماتریس نیز باشند. مثلا میتوان یک ماتریس پارامتری تعریف کرد. به مثال زیر دقت کنید.
syms a b c d
M = [a b; c d]
M =
[ a, b]
[ c, d]
مثلا میتوان دترمینان این ماتریس را به صورت پارامتری محاسبه کرد:
det(M)
ans =
a*d - b*c
در واقع هر آنچه روی آرایه عددی انجام دادیم را روی پارامترهای سیمبولیک هم میتوان انجام داد. جذر، توان، دترمینان، جمع و تفریق، ضرب و تقسیم و… روی این پارامترها قابل انجام است. لیست کامل این موارد روی آرایههای عددی در عملیات ریاضی روی آرایهها در متلب ارائه شدهاست. برای مشاهده روی لینک قرمز رنگ کلیک نمائید.
دستور subs در متلب
پس از اینکه عبارت نمادین را در متلب تعریف کردیم، نوبت به مقداردهی آن میرسد. برای مقداردهی به متغیرها یا عبارتهای نمادین در متلب، از دستور subs استفاده میشود. subs مخفف substitution به معنای جایگذاری است. طرز نوشتار این دستور به صورت subs(s,old,new) است. که پارامتر (یا مقدار) new بجای پارامتر old در عبارت نمادین s جایگذاری میشود. به مثال زیر دقت کنید.
syms x
f = sin(x) + cos(x);
subs(f,x,2)
ans =
cos(2) + sin(2)
در مثال بالا، عبارت f دارای یک متغیر x بود که بجای آن مقدار 2 را قرار دادیم. اگر بخواهیم به چندین متغیر مقدار اختصاص دهیم آنها را درون براکت قرار میدهیم. مثلا عبارت ریاضی زیر را درنظر بگیرید. بجای متغیرهای x و y و z مقادیر 1 تا 3 را قرار میدهیم.
syms x y z
f = x*sin(y) + y*sin(x) + z*sin(x+y);
subs(f,[x y z],[1 2 3])
ans =
2*sin(1) + sin(2) + 3*sin(3)
با استفاده از دستور subs میتوان متغیر را با متغیر هم جایگزین کرد. در واقع، لزومی به وارد کردن مقدار جدید نیست. مثلا با دستور subs(f,x,y) میتوان x های عبارت f را با y جایگزین کرد.
تعریف تابع نمادین در متلب
با تعریف تابع نمادین در متلب میتوان عملیات ریاضی نظیر مشتق، انتگرال، حد و… را به راحتی انجام داد. برای تعریف تابع نمادین از دستور syms استفاده میکنیم. تابع با متغیرهای مستقل آن را پس از syms مینویسیم. مثلا syms f(x,y) تابع نمادین f(x,y) را در متلب تعریف میکند. این تعریف، به طور خودکار متغیرهای نمادین x و y را نیز ایجاد میکند. مثلا برای تعریف تابع دو متغیره sin(x+y) به صورت زیر عمل میکنیم.
syms f(x,y)
f(x,y) = sin(x+y)
f(x, y) =
sin(x + y)
مقداردهی به این توابع نیز بسیار راحت است. باتوجه به اینکه تابع را به صورت f(x,y) تعریف کردیم. میتوان مقداردهی نیز کرد. مثلا:
f(1,4)
ans =
sin(5)
محاسبات پارامتری در متلب
پس از تعریف تابع نمادین، هرگونه عملیات ریاضی روی آن قابل انجام است. در اینجا به این موارد میپردازیم.
مشتق نمادین در متلب
در جلسه 32 ام به آموزش مشتق گیری در متلب به طور کامل پرداختیم. پیش نیاز مشتق گیری در متلب، تعریف تابع نمادین است. مشتق با دستور diff(f,x,n) انجام میشود. که در آن مشتق مرتبه n تابع f برحسب متغیر x محاسبه میشود. (برای مشاهده مثال و جزئیات بیشتر به جلسه 32 ام مراجعه کنید. عبارت قرمز رنگ بالا👆)
انتگرال نمادین در متلب
در جلسه 31 ام به آموزش انتگرال گیری در متلب به طور کامل پرداختیم. انتگرال گیری نیز به تعریف متغیرهای نمادین نیاز دارد. انتگرال در متلب با دستور int(f,x,a,b) برای تابع f برحسب متغیر x از a تا b محاسبه میشود. اگر انتگرال نامعین مدنظر باشد، کرانهای a و b را از دستور فوق حذف میکنیم. جزئیات بیشتر درباره انتگرال عددی و انتگرالهای چندگانه را در جلسه 31 ام بخوانید. (عبارت قرمز رنگ بالا👆)
محاسبه حد در متلب
برای محاسبه حد در متلب از دستور limit استفاده میکنیم. دستور limit(f,var,a) حد تابع f را برحسب متغیر var در نقطه a محاسبه میکند. اگر حد چپ یا راست تابع مدنظر باشد، عبارت ‘left’ یا ‘right’ به انتهای دستور limit اضافه کنید. برای درک بهتر محاسبه حد در متلب به مثال زیر دقت کنید. در این مثال حد تابع sin(x)/x را در نقطه صفر بررسی میکنیم.
syms x
f = sin(x)/x;
limit(f,x,0)
ans =
1
دستور simplify در متلب
برای ساده سازی عبارتهای نمادین در متلب از دستور simplify استفاده میکنیم. این دستور سادهترین شکل ممکن از یک عبارت جبری را ارائه میکند. مثلا عبارت جبری زیر را درنظر بگیرید.
با دستور simplify عبارت سمت راست تساوی را ساده میکنیم.
syms x
f = 1 - 2*sin(x)^2;
simplify(f)
ans =
cos(2*x)
طرز استفاده از این دستور آسان است. کافی است عبارت جبری را نوشته و اجرا کنید.
دستور collect در متلب
دستور collect(f,var) عبارت جبری نمادین f را برحسب پارامتر var مرتب میکند. معمولا مرتب سازی براساس توانهای پارامتر وارد شده میباشد. مثلا عبارت جبری زیر را درنظر بگیرید.
برای مرتب سازی (فاکتور گیری) از این عبارت برحسب x به صورت زیر عمل میکنیم:
syms x y
f = x^2*y + 3*x*y^2 + x^2 - x;
collect(f,x)
ans =
(y + 1)*x^2 + (3*y^2 - 1)*x
دستور expand در متلب
برای بسط دادن (گسترش) یک عبارت جبری در متلب از دستور expand استفاده میکنیم. مثلا اگر 3(x+1) را در متلب اجرا کنید در حالت پیشفرض متلب آن را باز نمیکند.
syms x
f = (x + 1)^3
f =
(x + 1)^3
برای اینکه شکل باز شده (بسط داده شده) یک عبارت جبری را ببینیم از expand استفاده میکنیم. مثلا بسط عبارت جبری فوق به صورت زیر است.
syms x
f = (x + 1)^3
expand(f)
ans =
x^3 + 3*x^2 + 3*x + 1
و یا میتوان توابع مثلثاتی را با دستور expand در متلب بسط داد. مثلا بسط تابع sin(4x) را محاسبه میکنیم.
syms x
expand(sin(4*x))
ans =
8*cos(x)^3*sin(x) - 4*cos(x)*sin(x)
دستور factor در متلب
با استفاده از دستور factor میتوان یک عبارت جبری را فاکتورگیری کرد. این کار برای فاکتورگیری از چند جملهایها و یا عبارتهای جبری در متلب بسیار مفید است. مثلا عبارت جبری زیر را درنظر بگیرید.
تجزیه (فاکتورگیری) این عبارت جبری نیز نشان داده شده. حال میخواهیم با استفاده از متلب آن را تجزیه (فاکتورگیری) کنیم.
syms x
f = x^4 + 2*x^3 - 4*x^2 - 2*x + 3;
factor(f)
ans =
[ x + 3, x + 1, x - 1, x - 1]
یک نکتهی دیگر درباره دستور factor در متلب وجود دارد. اگر درون این دستور، عدد وارد کنیم آن را به عوامل اول تجزیه میکند. در واقع اعداد اولی که آن عدد را ساختهاند را به ما میدهد.
تمرینات این جلسه
در انتهای این جلسه 3 تمرین متلب مربوط به مباحث این جلسه ارائه شده است. لطفا این تمرینها را حل کرده و با پاسخ آن مقایسه کنید. پاسخ تمرینات متلب این جلسه در کانال تلگرام متلب پلاس منتشر میشود. از آیکونهای سمت راست صفحه میتوانید در این کانال عضو شوید.
تمرین اول) توابع مثلثاتی sin(5x) و cos(5x) را بسط دهید.
تمرین دوم) در عبارت جبری x2 + sin(x+y) – 3y جای متغیر x و y را باهم عوض کنید. (از دستور subs استفاده کنید)
تمرین سوم) حد چپ و راست تابع 1/x را در نقطه صفر محاسبه کنید. آیا این تابع حد دارد؟
جمعبندی
خب جلسه سی و چهارم از سری جلسات آموزش متلب به پایان رسید. این جلسه درباره محاسبات و عملیات ریاضی نمادین (محاسبات پارامتری در متلب) صحبت کردیم. عملیات ریاضی پارامتری بخش مهمی از دروس ریاضی و مهندسی را تشکیل میدهند. به همین دلیل، یادگیری نحوه پیاده سازی محاسبات نمادین در متلب اهمیت دارد. به مواردی چون توابع نمادین، مقداردهی، مشتق، انتگرال، حد، ساده سازی، بسط دادن، فاکتورگیری و… پرداختیم. در انتها چند تمرین برای یادگیری بیشتر به شما واگذار کردیم که پاسخ آنها در کانال تلگرامی متلب پلاس وجود دارد. بی صبرانه منتظر نظرات، سوال و ابهامات شما عزیزان هستیم. سعی میکنیم تا هرگونه سوال یا ابهامی که در این باره دارید را پاسخ دهیم.
توصیه میشود که حتما تمرینات این جلسه را انجام بدید و اگر سوال و ابهامی دارید در بخش نظرات (پایین همین صفحه) به ما بگید. از فهرست سمت راست هم میتونید به بقیه جلسات دسترسی داشته باشید.
4 Comments
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام وقت بخیر یه سوال داشتم من می خواستم دستور syms رو در متلب بنویسم اما این ارور ‘syms’ requires Symbolic Math Toolbox رو میده ممنون میشم راهنمایی کنید
با درود فراوان
شما تولباکس Symbolic Math را نصب نکردید، برای استفاده از دستور syms باید این تولباکس را نصب کنید.
با عرض سلام و سپاس برای چاپ یکی از توابع با متغیر سمبلیک باید چه دستوری رو اجرا کنیم
سلام و عرض ادب
دستور pretty برای نمایش عبارتهای نمادین (سمبولیک) بکار میرود.