ترفند متلب: ریشه یابی و حل معادلات جبری در متلب (بخش اول)

ترفند متلب: ریشه یابی و حل معادلات جبری در متلب (بخش اول)

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

تعریف معادله جبری

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

$$ f(x) = x^3 + x -1 $$

در نرم افزار متلب، برای نمایش چند جمله ای ها، می توان از ضرایب چند جمله ای استفاده کرد. بنابراین، چند جمله ای فوق، با استفاده از بردار ضرایب زیر قابل تعریف است:

p = [1 0 1 -1];

با استفاده از تابع polyval می توان مقدار چند جمله متناظر با یک بردار ضرایب را ارزیابی نمود و از این مقادیر برای ترسیم نموداری از چند جمله ای فوق، استفاده کرد:

x = -2:0.1:2;
y = polyval(p,x);
plot(x,y)
title f
grid on

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

نمودار چند جمله ای مورد بررسی

همچنین می توان با استفاده از تعریف تابع (به صورت خطی و ناشناس) و با استفاده از تابع fplot نیز نمودار مورد نظر را ترسیم نمود:

f = @(x) x.^3 + x – 1;
fplot(f,[-2 2])
title f
grid on

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

نمودار چند جمله ای مورد بررسی

یافتن ریشه های معادله جبری تعریف شده

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

X = roots([1 0 1 -1])

که پس از اجرا پاسخی به صورت زیر را در بر خواهد داشت:

X =
-0.34116 + 1.1615i
-0.34116 – 1.1615i
0.68233

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

یکی از توابع جعبه ابزار بهینه سازی (Optimization Toolbox) در متلب، تابع fzero است که با دریافت یک نقطه شروع یا حدس اولیه، یک ریشه از تابعی را که در نزدیکی حدس اولیه است، پیدا می کند. برای استفاده از تابع fzero می توان از قطعه کد زیر استفاده کرد:

f = @(x) x.^3 + x – 1;
x0 = fzero(f,0.5)

که پس از اجرا نتیجه ای به صورت زیر خواهد داشت:

x0 =
0.68233

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

مطالب پیشنهادی‎

18 پاسخ
  1. مهدی
    مهدی says:

    سلام
    یک سوالی داشتم که آیا امکان این هست که برنامه نوشته در متلب را با پسوند exe ساخت؟اگر امکانش هست مرا راهنمایی کنید
    ممنون از مطالب سایت

    • smk
      smk says:

      سلام.

      بله تبدیل فایل های متلب به فایل های اجرایی مستقل EXE کاملا شدنی است. به زودی مطالبی در این خصوص در متلب سایت منتظر خواهد شد.

      اما برای راهنمایی شما می توانم مطالعه مطالب مندرج در این لینک را پیشنهاد نمایم:
      http://onecore.net/howtocreate-standalone-executable-for-matlab-file.htm

      لطفا به این موارد توجه فرمایید:
      ۱- حتما توجه فرمایید که نظر ارائه شده در خصوص هر مطلب، کاملا مرتبط با موضوع مطلب باشد.
      ۲- از حروف الفبای فارسی و زبان فارسی برای نگارش متن نظرات خود استفاده ببرید.

  2. مهران
    مهران says:

    با سلام زمانی که یک معادله را حل می کنم دارای دو جواب است و وقتی که یکی از جواب ها را استخراج می کنم متلب قادر به شناسایی عددی آن نیست
    چگونه می شود نوع متغیر ها را تغییر داد؟
    مرسی
    🙂

  3. محسن
    محسن says:

    با سلام من میخواستم به کمک pso ضرایب معادله ای به صورت
    y=ax+bz با فرض داشتن مقادیر x,y,z
    تخمین بزنم لطفا منو راهنمایی کنین
    میخواستم ببینم چطور میتونم کد متلب اونو بنویسم

  4. سارا
    سارا says:

    با سلام

    ببخشید من یه مشکلی دارم.

    میخوام ببینم چه جوری میشه تابع فازی رو در متلب حل کرد؟یعنی تابعی که یک جزئش عدد فازیه؟

  5. مجید
    مجید says:

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

  6. حسین
    حسین says:

    با سلام و تبریک عید.متلب از چه روشهای محاسباتی ریشه های معادلات را حل میکند؟مثلا از روش نیوتون؟یا بای سکشن؟یا مولر؟یا….یا همه روشها؟

    • (روابط عمومی)
      (روابط عمومی) says:

      در پاسخ حسین:

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

  7. فاطمه
    فاطمه says:

    سلام ببخشید اگه تعداد معادلاتمون کمتر از تعداد مجهولاتمون باشه مثلاً سه معادله با چهار مجهول داشته باشیم با چه دستوری باید مجهولات را حل کرد؟

    • مدیر روابط عمومی
      مدیر روابط عمومی says:

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

  8. علیرضا
    علیرضا says:

    ببخشید میشه راهنمایی کنید چطوری میشه با این نرم افزار یه معادله درجه دو رو حل کرد ؟

    • مدیر روابط عمومی
      مدیر روابط عمومی says:

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

  9. الهه
    الهه says:

    سلام
    باتشکر از سایت خوبتون
    من با دستور Fitresult=Fit (xdata,ydata,ft) داده هامو فیت کردم ولی دستور polyvalبرای آن ارور میده معادلی براش سراغ دارید؟

    • مدیر روابط عمومی
      مدیر روابط عمومی says:

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

بخش دیدگاه ها غیر فعال است.