آموزش حل گرهای حل معادلات ode در نرم افزار متلب و سیمولینک

بسیاری از محققین و دانشجویان از نرم افزار متلب برای حل معادلات ordinary differential equation یا ode استفاده می کنند. برای حل معادلات ode نرم  افزار متلب حل گرهای متفاوتی را در اختیار کاربران قرار می‏دهد.  در این پست هدف بررسی حل گرهای معادلات ode و آموزش استفاده از حل گرها و حل معادلات به کمک آنها است. در ابتدا حل گر به صورت عمومی توضیح داده شده و سپس هر کدام از آپشن ها و خصوصیات مختلف دستور توضیح داده شده است.

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

حل گرهای معادلات ode در نرم افزار متلب

حلگر معادلات ode متلب

دستور اصلی نرم افزار متلب برای حل معادلات فوق به صورت زیر است.

[T,Y] = solver(odefun,tspan,y0,options)

Solver : در ابتدا به بررسی solver که معرف انواع حل گرها است پرداخته می‏شود. همانگونه که مشخص است برای حل معادلات ode در نرم افزار متلب باید به جای solver یکی از حل گر های ode23, ode45, ode113, ode15s, ode23s, ode23t, and ode23tb قرار داده شود. برای مثال برای حل معادلات با حل گر ode45 که حل گر عمومی نرم افزار متلب است به صورت زیر عمل می‏شود. هر کدام از حل گر ها دارای توانایی‏های متفاوتی هستند که در پست های آتی به طور مفصل مورد بررسی قرار خواهند گرفت.

[T,Y] = ode45(odefun,tspan,y0,options)

Odefun: نام تابعی است که قرار است مورد حل قرار بگیرد برای حل هر تابع دلخواه باید آن را به فرم استاندارد در آورد. فرم استاندارد فرمی است که کلیه مرتبه های بالاتر از یک به مرتبه‏ی یک و پایین تر تبدیل می شوند. در پست … و همچنین در شکل زیر نحوه ی استاندارد سازی یک معادله ی ساده نشان داده شده است.

پس از استاندارد سازی تابع باید آن را به فرم تابعی نوشت که برای حل گرهای متلب قابل استفاده باشد.برای مثال تابع زیربرای معادله ی مرتبه ی دوم به فرم استاندارد نوشته شده است. که با نام دلخواه odefun1 ذخیره شده است.

function dy = odefun1 (t,y)

    dy = zeros(2,1);    % a column vector

    dy(1) = y(2);

    dy(2) = 1000*(1 – y(1)^2)*y(2) – y(1);

end

 

Tspan: این پارامتر مربوط به زمان شبیه سازی معادله است و به صورت یک بردار دو پارامتری است برای مثال میخواهیم زمان حل معادله بین ۰ تا ۲ ثا نیه باشد. مقدار tspan=[0,2] قرار داده می شود.

y0: مربوط به شرایط اولیه برای شروع شبیه سازی است. که یک بردار است که به اندازه ی پارامترهای حالت تابع اصلی یا odefun است برای مثال برای تابع odefun1 که در بالا توضیح داده شد مقدار y0  یک بردار مرتبه ی دو است.

Options: یکی از ویژگی های مهمی که در حل مسائل ode بسیار اهمیت دارد این ویژگی است.که برای استفاده از ان از دستور odeset استفاده می شود. با استفاده از این ویژگی میتوان مشخصاتی از قبیل بیشترین گام حل و مقدار اولیه گام حل و پارامترهای نظیر تلورانس مطلق(برداری هم مرتبه با تعداد متغیر حالت) یا تلورانس نسبی(یک عدد) و سایر مشخصات مروبط به حل حل گر را تغییر داد. برای مثال اگر بخواهیم از حلگری با بیشترین گام۰٫۰۱ و گام اولیه ی ۰٫۰۰۱ استفاده شود و تلورانس نسبی ۰٫۰۰۱ و تلورانس مطلق  مشابه  ایجاد کینیم ین تغییرات به صورت زیر اعمال می شود.

options = odeset(‘InitialStep’,0.001,’MaxStep’,0.001,’RelTol’,.001,’AbsTol’,[0.001 .001]);

در نهایت دو مثال از روش استفاده از حل گر در دو کد مجزا نوشته خواهد شد.

مثال اول

%% ======================Example1==================================

function solve_ode

    tspan=[0 3000]

    y0=[2,0]

    [T,Y] = ode15s(@vdp1000,tspan,y0);

    plot(T,Y(:,1),’-o’)

    function dy = vdp1000(t,y)

        dy = zeros(2,1);    % a column vector

        dy(1) = y(2);

        dy(2) = 1000*(1 – y(1)^2)*y(2) – y(1);

    end

end

مثال دوم

%% ======================Example2==================================

function ode_2

    options = odeset(‘RelTol’,1e-4,’AbsTol’,[1e-4 1e-4 1e-5]);

    [T,Y] = ode45(@rigid,[0 12],[0 1 1],options);

    plot(T,Y(:,1),’-‘,T,Y(:,2),’-.’,T,Y(:,3),’.’)

    function dy = rigid(t,y)

        dy = zeros(3,1);    % a column vector

        dy(1) = y(2) * y(3);

        dy(2) = -y(1) * y(3);

        dy(3) = -0.51 * y(1) * y(2);

    end

end

 

حلگر

نوع مسئله

مرتبه ی دقت

زمان استفاده

ode45

Nonstiff

معمولی

Most of the time. This should be the first solver you try.

Ode23

Nonstiff

کم

For problems with crude error tolerances or for solving moderately stiff problems.

Ode113

Nonstiff

کم تا زیاد

For problems with stringent error tolerances or for solving computationally intensive problems

Ode15s

Stiff

کم تا متوسط

If ode45 is slow because the problem is stiff.

Ode23s

Stiff

کم

If using crude error tolerances to solve stiff systems and the mass matrix is constant.

Ode23t

Moderately Stiff

کم

For moderately stiff problems if you need a solution without numerical damping.

Ode23tb

Stiff

کم

If using crude error tolerances to solve stiff systems.

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

همه با هم در بالابردن سطح علمی ایران کمک کنیم
ایرانی شایسته است بهترین باشد.
مکانیک سافت

محسن رضایی

کارشناسی : مهندسی مکانیک جامدات، کارشناسی ارشد: مهندسی مکانیک طراحی کاربردی، دکتری: دانشجوی دکتری مکانیک گرایش دینامیک کنترل و ارتعاشات دانشگاه شیراز زمینه های تحقیقاتی: دینامیک، کنترل، ارتعاشات، دینامیک پرواز، دینامیک خودرو، آیروالاستیسته، بهینه سازی زمینه های کاری صنعتی: طراحی مکانیزم های خطوط تولید،طراحی جرثقیل ها،طراحی ماشین الات صنعتی،بررسی عیوب و بهینه سازی ماشین الات صنعتی نرم افزارهای مسلط: متلب-سیمولینک- سیم مکانیک-انسیس - انسیس ورکبنچ-آدامز-سالیدورکس-آباکوس سوابق کاری:استاد سابق دانشگاه ازاد اسلامی، دانشگاه علمی کاربردی،مدرس نرم افزارهای مکانیک مجتمع فنی تهران (شعبه ی شیراز) و آموزشگاه فواد، مشاور مهندسی و طراح در یک شرکت معتبر تلفن تماس: 09369074440 ایمیل : mechanic.soft[at]yahoo.com , info[at]mechanicsoft.ir نوشته‌های تازه

2 دیدگاه در“آموزش حل گرهای حل معادلات ode در نرم افزار متلب و سیمولینک

  • دی ۲۱, ۱۳۹۴ در۳:۲۷ ق.ظ
    پیوند یکتا

    سلام
    اگر امکانش هست در مورد ode event هم توضیح بدید

    پاسخ
    • دی ۲۱, ۱۳۹۴ در۱۰:۳۹ ب.ظ
      پیوند یکتا

      سلام. در اولین فرصت توضیحاتی در همین قسمت میدم.

      پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *