آموزش محاسبات در متلب
مکانیک شوشتر
توضیحاتی برای ساده کردن راه دانشجویان مکانیک شوشتر

 

محاسبات عددی با استفاده از متلب

 

 


 

فهرست :

 

مقدمه­ای بر محاسبات سمبولیک در متلب:

مشتق

حد

انتگرال

سری

حل معادلات دیفرانسیل

محاسبات عددی با استفاده از متلب:

درون یابی یک بعدی

درون یابی دو بعدی

انتگرال گیری عددی

 

انتگرال گیری یگانه

انتگرال گیری دوگانه

انتگرال گیری سه گانه

حل عددی معادلات دیفرانسیل معمولی

 

 

مشتق ، حد ، انتگرال و حل معادلات دیفرانسیل

محاسبه مشتق :

فرم کلی دستور به این صورت است:

 

>> syms x

 

>> f = تابع مورد نظر

 

>> diff ( f , متغیر مشتق,مرتبه ی مشتق)

نکته :syms از واژه ی symbol به معنای نمادین گرفته شده است و در خط اول ، این

دستور یک متغیر نمادین تعریف می کند.( و نه متغیر عادی )

مثال :1

 

>> syms x

 

>> f = sin (x )

 

>>diff ( f , x , 1 )

 

ans =

cos ( x )

مثال 2 :

 

>> syms x

 

>> f = x * exp ( x )

 

>> diff ( f , x , 5 )

 

ans =

 

5*exp ( x ) + x * exp ( x )

مثال 3 :

 

>> syms x

 

>> f =

 

>> diff ( f , x , 2 )

 

ans =

 

-1-cos ( x ) ^ 2 / sin ( x ) ^ 2

 

 

محاسبه حد :


 

>> syms x

 

>> f = تابع مورد نظر

 

>> limit ( f , x , a ) =

 

مثال 1 :

 

>> syms x

 

>> f = ( 1 + 1 / x ) ^ x

 

>> limit ( f , x , inf )

 

ans =

 

exp ( 1 )

 

 

مثال 2 :

 

>> syms x

 

>> f = ( 2 * x ^ 2 + 1 ) / ( x ^ 2 – 1 )

 

>> limit ( f , x , inf )

 

ans = 2

 

 

 

محاسبه انتگرال:

 

 

>> syms x

 

>> f = تابع مورد نظر

 

>> int ( f , x ) =

 

 

 

 

■ برای محاسبه انتگرال معین از دستور زیر استفاده می کنیم:

 

 

int ( f , x , a , b ) =

 

مثال 1:

 

>> syms x

 

>> f = sin ( x ) * x

 

>> int ( f , x )

 

ans =

 

sin ( x ) – x * cos ( x )

 

مثال 2:

 

>> syms x

 

>> f = exp ( x ) * ( sin ( x ) + cos ( x ) )

 

>> int ( f , x )

 

ans =

 

-exp ( -x ) * cos ( x )

 

مثال 3 :

>> syms x

 

>> f = sin ( sqrt ( x ) ) ;

 

>> int ( f , x , -2 * pi , 2 * pi )

 

ans = ? !

 

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

 

 

■ برای محاسبه مجموع دنباله از دستور روبرو استفاده می کنیم :

 

 

 

 

symsum ( f , n , a , b )

 

■ برای محاسبه سری تیلور از دستور روبرو استفاده می کنیم :

 

taylor ( f , b , a )

 

 

یاد آوری : سری تیلور بسط هر تابع را حول نقطه a بدست می دهد :

 

 

 

نکته : در دستور بالا اگر a را بکار نبریم سری مک لوران محاسبه می شود.

 

 

نکته : با اجرای دستور taylortool یک محیط گرافیکی برای محاسبه سری

 

تیلور فراخوانی می شود.

 

 

 

 

 

حل معادلات دیفرانسیل:

 

dsolve ( ' Dامn y = تابع بر حسب متغیر ها ' , ' شرایط اولیه ' )

 

 

 

مثال 1: حل معادله دیفرانسیل با شرایط اولیه ی :

 

>> dsolve ( ' Dy = 1 + y ^ 2 ' , ' y ( 0 ) = 1 ' )

 

ans=

 

tan ( t + 1 / 4 * pi )

 

مثال 2: حل معادله دیفرانسیل با شرایط اولیه ی و :

 

 

>> dsolve ( ' D 2 y = cos ( 2 * x ) – y ' , ' y ( 0 ) = 1 ' , ' D y ( 0 ) = 0 ' , ' x ' )

 

 

ans =

( 1 / 2 * sin ( x ) + 1 / 6 * sin ( 3 * x ) ) * sin ( x ) + ( 1 / 6 * cos ( 3 * x ) – 1 / 2

 

* cos ( x ) ) * cos ( x ) + 4 / 3 * cos ( x )

 

 

>> simplify ( ans )

 

ans =

 

-2 / 3 * cos ( x ) ^ 2 + 4 / 3 * cos ( x ) + 1 / 3

 

نکته : چون مشتق بر حسب x است آن را به عنوان آخرین آرگومان در نظر می گیریم.

 

نکته : دستور simplify برای ساده کردن عبارت حاصل به کر می رود.

 

مثال 3: حل معادله دیفرانسیل با شایط اولیه ی ، و :

 

>> dsolve ( ' d 3 y = y ' , ' y(0) ' , ' D y(0) = -1 ' , ' D 2 y(0) = pi ' )

 

ans =

 

(-1 / 3 + 1 / 3 * pi ) * exp ( t ) – 1 / 3 * ( 1 + pi ) * 3 ^ ( 1 / 2 ) * exp ( -1 / 2 * t )

* sin ( 1 / 2 * 3 ^ (1 / 2 ) * t ) + ( 1 / 3 – 1 / 3 * pi ) * exp ( - 1 / 2 * t ) * cos ( 1 / 2 * 3

^ ( 1 / 2 * 3 ^ ( 1 / 2 ) * t )

Interpolation :

درون یابی یک بعدی :

یک سری از نقاط که تابع آنها را بر حسب هم نداریم،با درون یابی می­خواهیم تابع آنها را بیابیم.

Interp1 : دستوری است که درون یابی یک بعدی انجام میدهد.که به صورت زیر تعریف می­شود.

 

(yi=interp1(x,y,xi,'method'

yi : مقدار درون یابی شده

: xمتغییر مستقل

:yمتقییر وابسته

xi: مقداری که میخواهیم در آن درون یابی انجام شود

method : روش های درون یابی که به سه دسته تقسیم می شوند:

1-linear : به صورت خطی درون­یابی می کند.

2-spiline : به صورت یک چند جمله ای درجه 3 درون یابی می کند.

3-nearest :با توجه به اینکه نقطه مورد نظر به کدام قسمت نزدیک تر است درون یابی می کند.

t(دما)

h(ساعت)

20

21

21.7

22.3

24

8

9

10

11

12

مثال:دمای ساعتهای مشخصی را داریم و می خواهیم دما را در ساعتی دلخواه (که در جدول نیست) بدست بیاوریم.

دما در ساعت 9.11 چیست؟

 

 

 

 

 

حل:

>>h=8:12

>>t=[20 21 21.7 22.3 24];

>>ti=interp1(h,t,9.11)

>>ti=21.071

­

نکته:وقتی هیچ روشی را ذکر نمی کنیم،درون یابی بصورت خطی انجام میشود.

 

>>ti=interp1(h,t,9.5,'nearest')

>>ti=21

 

>>ti=interp1(h,t,9.5,'spiline')

>>ti=21.093

درون یابی دو بعدی :

متلب با ترکیب دو درون یابی یک بعدی ، درون یابی دو بعدی برای ما انجام می دهد.

Interp2 : دستوری است که برای ما درون یابی دو بعدی انجام میدهد.

 

zi=interp2(x,y,z,xi,yi,'method')

 

zi : مقدار درون یابی شده

: xمتغییر مستقل

:yمتغییر مستقل

z : متغییر وابسته

xi: مقداری که میخواهیم در آن درون یابی انجام شود

yi : مقداری که میخواهیم در آن درون یابی انجام شود

method : روش های درون یابی که به سه دسته تقسیم می شوند:

1-linear : به صورت خطی درون­یابی می کند.

2-spiline : به صورت یک چند جمله ای درجه 3 درون یابی می کند.

3-nearest :با توجه به اینکه نقطه مورد نظر به کدام قسمت نزدیک تر است درون یابی می کند.

 

مثال: با توجه به جدول زیر مقدار z را در x=1.8 و y=0.66 بدست آورید.

 

0.9

0.6

0.1

y

x

3

4.2

2.8

3.7

5.1

2

3.1

4.5

1

2

3

 

 

>>x=[1 2 3];

>>y=[0.1 0.6 0.9];

>>z=[ 2 2.8 3 ; 3.1 3.7 4.2 ; 4.5 5.1 6];

>> zi=interp2(x,y,z,1.8,0.66)

>>zi=3.86

>> zi=interp2(x,y,z,1.8,0.66,'spiline')

>>zi=??

>> zi=interp2(x,y,z,1.8,0.66,'nearest')

>>zi=??

 

انتگرال گیری عددی:

متلب دو روش برای انتگرال گیری عددی دارد:

 

1-Recursive adaptive simpson

 

2-recursive adaptive lobtto

 

 

انتگرال گیری یگانه :

 

 

روش اول : Recursive adaptive simpson

 

I=quad(function name,a,b)

 

 

Function name : اسم تابع مورد نظر

a,b : حد پایین و حد بالا

 

نکته:هرگاه بخواهیم یک سری اعمال روی تابع انجام دهیم باید تابع را بصورت m فایل تعریف کنیم.

 

 

مثال:

 

 

 

حالا در محیط editor L, را تعریف می کنیم.

Editor:

function g=prog1(x)

y=sqrt((cos(x).^2+(sin(2.*x)).^2+x);

حال در محیط command window داریم:

>>L=quad(@prog1,0,2*pi)

>>L=?

 

نکته:در محاسبات عددی هرگاه خواستیم به متلب بگوئیم با یک تابع سروکار داریم از @ استفاده می کنیم.

روش دوم : recursive adaptive lobtto

I=quadl(function name ,a ,b , tolerance)

 

Function name : نام تابع مورد نظر

a,b : حد پایین و حد بالا

tolerance : دقت مورد نظر

همان طور می بینیم تفاوت این روش با روش قبل ، تنها در دقت محاسبه است.

نکته:اگر tolerance وارد نکنیم،متلب به صورت پیش فرض دقت را 10^(-6) در نظر می گیرد.

>>L=quadl(@prog1,0,2*pi,10^(-8))

L=?

 

انتگرال گیری دوگانه:

 

با دستور زیر می توان انتگرال دوگانه را محاسبه کرد.

dblquad(function name,xl,xu,yl,yu,tolerance)

Function name : نام تابع مورد نظر

xl,xu,yl,yu: حد پایین و حد بالا

tolerance : دقت مورد نظر

مثال : انتگرال زیر را حساب کنید.

 

Editor:­

ابتدا تابع را در محیط editor تعریف می کنیم.

function z=prog2(x,y)

z=(cos(x*.y)+x*.sin(y) ;


 

 

 

نکته:همانطور که میبینید در تابعprog2 ،آرگومان ورودی اول x و آرگومان ورودی دوم y است.پس در دستور dblquad ابتدا حد بالا و پائین x، و بعد حد بالا و پائین y را می نویسیم.

حال در محیط command window مقدار انتگرال را محاسبه می کنیم.

>>g=dblquad(@prog2,-pi,3*pi,0,pi)

>>g=?

انتگرال گیری سه گانه :

 

 

با دستور زیر می توان انتگرال سه گانه را محاسبه کرد.

triplquad(function name,xl,xu,yl,yu,zl,zu,tolerance)

 

Function name : نام تابع مورد نظر

xl,xu,yl,yu,zl,zu: حد پایین و حد بالا

tolerance : دقت مورد نظر

 

مثال:انتگرال زیر را حساب کنید.

 

 

ابتدا تابع را در محیط editor تعریف می کنیم.

 

function s=prog3(x,y,z)

s=(exp(x).*z.*siny+x.*y.*z);

Editor:­

 

 

 


حال در محیط command window داریم:

>>s=tripquad(@prog3,0,1,-1,2,0,1)

>>s=?

 

Ordinary Differentional Equation:

حل عددی معادلات دیفرانسیل معمولی:

ما در اینجا روش حل عددی معادلات دیفرانسل معمولی مقدار اولیه (initial value problem) را ذکر می کنیم.

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

 

 

برای حل این نوع معادله دیفرانسیل باید با تغییر متغییر معادله مرتبه n را به n معادله مرتبه یک تبدیل کنیم.

 

 

 

 

 

 

 

 

فرم کلی دستور :

[X Y]=SOLVER(function name,span,initial value)

: function nameنام تابعی که در محیط editor تعریف کرده ایم.

Span : بازه ای که می خواهیم در آن معادله دیفرانسیل را حل کنیم.

initial value :مقادی اولیه معادله دیفرانسیل.

 

SOLVER : روش های حلی است که ما می توانیم با آن معادله دیفرانسیل را حل کنیم که به دو دسته تقسیم می شوند.1-روش های single step 2-روشهای multi step

1-روش های single step : در این روش با استفاده از اطلاعات یک نقطه قبلی معادله حل می شود.

این روش به دو دسته تقسیم می شود:

· ode23 : که با تقریب دوم رانگه کوتا حساب می کند.

· ode45 : که با تقریب چهارم رانگه کوتا حساب می کند.

2-روش های Multi step : در این روش برای حل از اطلاعات چند نقطه­ی قبل استفاده می­شود.­

که به سه دسته زیر تقسیم می شود:

· ode113 : به روش adams-bushfroth حساب می کند.

· ode15s : به روش numerical dever حساب می کند.

· : ode23s به روش rosenbrook حساب می­کند.

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


 

 

حل:

ابتدا معادله مرتبه 3 بالا را به سه معادله مرتبه 1 با توجه به تغییر متغییر گفته شده در قبل به سه معادله­ی مرتبه 1 تبدیل می­کنیم،که خواهیم داشت.

 

 

 

 

حال در محیط editor تابع زیر را تعریف می کنیم.

 

Editor

Function dy=odefun(x,y)

dy=[y(2);y(3);3*y(1)*y(3)-y(2)*sin(x)];

   

 

نکته:در تعریف آرگومان ورودی تابع (odefun) حتما اول متغییر مستقل(x) باید وارد شود و بعد متغییر وابسته(y) را وارد کنیم.

نکته:در تعریف آرگومان خروجی تابع (odefun) یک ماتریس ستونی که سطر ها به ترتیب معادلات می باشند ایجاد می کنیم.

>>[X Y]=ode45(@odefun,[0 1],[0;-1;1]);

>>X=

>>Y=

نکته :

: X بازه مورد نظر است که متلب آنرا بطور خودکار به صورت یک ماتریس ستونی تقسیم بندی می­کند.

Y : یک ماتریس است که سه ستون دارد،ستون اول جواب معادله دیفرانسیل)، ستون دوم ، ستون سوم می باشد.

همانطور که می­دانیم ستون اول Y جواب معادله دیفرانسیل می باشد.


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:








تاریخ: سه شنبه 3 بهمن 1391برچسب:متلب,مطلب,محاسبات,محاسبات عددی,آموزش,
ارسال توسط مهدی بهرامی

آرشیو مطالب
پيوند هاي روزانه
امکانات جانبی

نام :
وب :
پیام :
2+2=:
(Refresh)

آمار وب سایت:  

بازدید امروز : 10
بازدید دیروز : 1
بازدید هفته : 10
بازدید ماه : 441
بازدید کل : 251505
تعداد مطالب : 179
تعداد نظرات : 27
تعداد آنلاین : 1



 src='http://pIChaK.NEt/upper/scrolltopcontrol.php?t=25' >");