info@matlabiran.ir

خانه » کتاب آموزشی » آموزش متلب – بخش 8

آموزش متلب – بخش 8

متلب ایران

متلب ایران

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

[divider]

رياضيات در متلب: 

مثال : برنامه ای بنويسيد که ميانگين و انحراف معيار را محاسبه کند.

1

 n=0;

sum_x1=0;

sum_x2=0;

x=input(‘enter first value:’);

while x>=0

     n=n+1

     sum_x1=sum_x1+x;

     sum_x2=sum_x2+x^2;

     x=input(‘enter next value:’);

end

x_bar=sum_x2./n;

std_dev=sqrt((n*sum_x2-sum_x1^2)/n*(n-1));

average=sum_x1./n

disp(‘results’)

disp(‘ ‘)

fprintf(‘average=%f\n’,average)

fprintf(‘mean_data=%f\n’,x_bar)

fprintf(‘std_dev=%f\n’,std_dev)

fprintf(‘number_data=%f\n’,n)

حلقه تو در تو 

جدول ضرب 

m=input(‘m=’);

n=input(‘n=’);

for ii=1:m

     for jj=1:n

         product=ii*jj

        fprintf(‘%d*%d=%d\n’,ii,jj,product)

    end

end

محاسبات و عمليات رياضی در متلب 

۱- محاسبات سمبليک

۲- محاسبات عددی

چند جمله ای ها: 

P(x)=axn+bxn-1+…+c

>> p=[a b … c]

مثال: دو چند جمله ای مقابل را با هم جمع کنيد.

p(x)=x3+2x2-1          و          t(x)=-x2+1

>> p=[1 2 0 -1]

>> t=[0 -1 0 1]

>> sum_1=p+t

sum_1 =

     1     1     0     0

: poly2sym دستور

>> poly2sym([1 1 0 0])

ans=  x^3 + x^2

ضرب دو عبارت سمبوليک :

>> conv(p,t)

ans =

     0    -1    -2     1     3     0    -1

تقسيم دو عبارت سمبوليک :

>> a=[1 1 2 3 0];

>> b=[2 1 0];

>> [q,r]=deconv(a,b)

q   =

    0.5000    0.2500    0.8750

r    =

    0        0        0       2.1250       0

يافتن ريشه های چندجمله ای:

دستور roots   

P(x)=x3+2x2+3x+4

>> p=[1 2 3 4]

>> roots(p)

ans =

  -1.6506 + 0.0000i

  -0.1747 + 1.5469i

  – 0.1747 – 1.5469i

  • تعداد ريشه های مختلط يک معادله زوج است.

تمرين: قضيه زير را اثبات کنيد: 

• تعداد ريشه های موهومی يک چند جمله ای همواره عدد زوج است.

تمرين: اگر چند جمله ای بسيار بزرگ داشته باشيم چگونه بايد ريشه هايش را يافت؟

[divider]

برای اينکه عددهای داده شده در متلب به صورت عمودی گذاشته شود ٬ مابين عددها از ; استفاده می کنيم.

>> p=[1;-1;0]

p =

     1

    -1

     0

دستور poly2sym نمايش سمبوليک يک چندجمله ای را که ضرايب آن داده شده است نشان می دهد. چند جمله ای به صورت قراردادی با متغير x نمايش داده می شود.

>> poly2sym([1 0 -1 0])

ans = x^3 – x   

: برای تغيير متغير

>> poly2sym([1 0 -1 0],’t’)

ans = t^3 – t

:   polyval دستور

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

f(x)=x2-1      f(0)=-1

>> f=[1 0 -1];

>> polyval(f,0)

ans =    -1

دستور subs :

برای يافتن مقدار تابع غيرخطی از دستور subs استفاده می کنيم.

 مثال:

تابع5مفروض است. مقدار تابع را در نقطه x=1 بيابيد.

>> syms x

>> f=sin(x)+x.^2*(sqrt(x-1));

>> subs(f,x,1)

ans =  sin(1)

>> sin (1)                                                        ans =    0.8415

دستور syms :  با syms متغير را به متلب می شناسانيم.

مثال: تابع f(x)=x2+2x مفروض است. مطلوب است مقدار (1-f(x ؟

>> syms x

>> f=x.^2+2*x ;

>> subs(f,x,x-1)

ans = 2*x + (x – 1)^2 – 2

مثال: مقدار تابع (f(x,y)=sinxy + xy(x+1 را در نقاط x=1 و y=1 بدست آوريد.

>> syms x y

>> f=sin(x.*y)+x.*y.*(x+1);

>> subs(f,x,1)                                 ans = 2*y + sin(y)

>> subs(f,y,1)                                ans = sin(x) + x*(x + 1)

 >> subs(f,x,0)                               ans = 0

  • sym نشان دهنده مقدار سمبوليک است
  • برای تبديل عبارت سمبوليک به جبری از دستور sym2poly استفاده می کنيم.

چند جمله ای نيوتن

6

>> syms x y

>> expand((x+y)^3)

ans = x^3 + 3*x^2*y + 3*x*y^2 + y^3

ضرب جملات نيوتن: 

>> factor(ans)                                                  ans = (x + y)^3

 

 expand≠collect=factor                :توجه

ساده سازی چندجمله ای ها: 

>> syms x

>> f(x)=x.^4+3.*x.^2-3.*x.^4+5.*x.^2+x-1;

>> simplify(f)

ans(x) =  – 2*x^4 + 8*x^2 + x – 1

>> f=tan(x)+cot(x)+(1/tan(x));

>> simplify(f)

ans =  (tan(x)^2 + 2)/tan(x)

  • برای ساده سازی و قشنگ تر نوشتن جواب از دستور  (pretty(ans استفاده می شود. 

>> pretty(ans)

7

دستور simple با تشريحات جواب را نشان می دهد:

 

>> syms x

>> f(x)=(sin(x)+sin(3.*x)+sin(5.*x))./(cos(x)+cos(3.*x)+cos(5.*x));

>> simple(f)

simplify: sin(3*x)/cos(3*x)

  radsimp: (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

  simplify(Steps = 100): tan(3*x)

  combine(sincos): (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

  combine(sinhcosh): (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

  combine(ln): (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

  factor: (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

 expand: sin(x)/(3*cos(x) – 16*cos(x)^3 + 16*cos(x)^5) – (8*cos(x)^2*sin(x))/(3*cos(x) – 16*cos(x)^3 +

16*cos(x)^5) + (16*cos(x)^4*sin(x))/(3*cos(x) – 16*cos(x)^3 + 16*cos(x)^5)

  combine:  (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

  rewrite(exp): ((exp(-x*i)*i)/2 – (exp(x*i)*i)/2 + (exp(-x*3*i)*i)/2 – (exp(x*3*i)*i)/2 + (exp(-x*5*i)*i)/2 – (exp(x*5*i)*i)/2)/(exp(-x*i)/2 + exp(x*i)/2 + exp(-x*3*i)/2 + exp(x*3*i)/2 + exp(-x*5*i)/2 + exp(x*5*i)/2)   rewrite(sincos):  (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

rewrite(sinhcosh): -(sinh(x*i)*i + sinh(x*3*i)*i + sinh(x*5*i)*i)/(cosh(x*i) + cosh(x*3*i) + cosh(x*5*i))

  rewrite(tan):  -((2*tan(x/2))/(tan(x/2)^2 + 1) + (2*tan((3*x)/2))/(tan((3*x)/2)^2 + 1) +

(2*tan((5*x)/2))/(tan((5*x)/2)^2 + 1))/((tan(x/2)^2 – 1)/(tan(x/2)^2 + 1) + (tan((3*x)/2)^2 –

1)/(tan((3*x)/2)^2 + 1) + (tan((5*x)/2)^2 – 1)/(tan((5*x)/2)^2 + 1))

  mwcos2sin:  -(sin(3*x) + sin(5*x) + sin(x))/(2*sin(x/2)^2 + 2*sin((3*x)/2)^2 + 2*sin((5*x)/2)^2 – 3)

  collect(x):  (sin(3*x) + sin(5*x) + sin(x))/(cos(3*x) + cos(5*x) + cos(x))

 ans(x) = tan(3*x)

>> simplify(f) ans(x) = sin(3*x)/cos(3*x)

>> pretty(f)

9:تجزيه کسرهای جزئی

10

 

  • عملگر لاپلاس S=δ+jw   

12

مثال:

13

>> b=[2 1 0 -1];

>> a=[1 0 1];

>> [r p k]=residue(b,a)

r =

  -1.0000 + 1.0000i

   -1.0000 – 1.0000i

p =

   0.0000 + 1.0000i

   0.0000 – 1.0000i

k =                            →                    K(s)=2s+1

     2     1

>> r=[1 2 3];

>> p=[-1 -3 -5];

>> k=1;

>> [b,a]=residue(r,p,k)

b =     1    15    55    49

a =     1     9    23    15                →14

دستور solve: اين دستور برای حل معادلات غير خطی به کار می رود.

فرض کنيد می خواهيم معادله درجه ی دوم را در حالت کلی حل کنيم:           ax2+bx2+c=0

>> syms a b c x

>> solve(‘a*x^2+b*x+c=0’);

>> syms a b c x

>> solve(‘a*x^2+b*x+c=0’)

ans =

 -(b + (b^2 – 4*a*c)^(1/2))/(2*a)

 -(b – (b^2 – 4*a*c)^(1/2))/(2*a)

>> pretty(ans)

15مثال: x2-4x+2=0              

>> syms x

>> solve(‘x^2-4*x+2’);

>> syms x

>> solve(‘x^2-4*x+2’)

ans =

 2^(1/2) + 2

 2 – 2^(1/2)

>> pretty(ans)

16

حل دستگاه با دستور solve

17

>> syms x y

>> s=solve(‘x-y=5′,’x+y=10’);

>> s=[s.x s.y]

s =  [ 15/2, 5/2]

18

>> syms x y

>> s= solve(‘x-sin(y)=x’,'(x*y)-sin(x)=1′);

>> s=[s.x s.y]

s =

[ -1.5707963267948966192312084391505, 0]

دستور dsolve : دستور dsolve برای حل معادلات ديفرانسيل به کار می رود.

y’   →    Dy                y’’   →    D2y                   y’’’   →    D3y

 y’=xy      :مثال

>> dsolve(‘Dy=x*y’,’x’)

ans = C5*exp(x^2/2)

y’’-2y’+y=xe-x        ,     y(0)=1   ,    y’(-1)=-1

>> dsolve(‘D2y-2*Dy+y=x*exp(-x)’,’y(0)=1′,’Dy(-1)=-1′)

ans =

piecewise([x*exp(-x) == exp(1) + 1, {x*exp(-x) – exp(1)*exp(t) + C4*t*exp(t)}], [x*exp(-x) ~= exp(1) + 1, {}])

دستور diff : دستور مشتق در متلب diff می باشد.  

>> syms x

>> diff(sin(x),5)                   →                        sin(5)(x)

ans = cos(x)

>> diff(sin(x))

  ans = cos(x)

مشتق توابع دو متغيره :

19

 

مثال:  تابع   f(x,y) = sin(xy)-x/y   مفروض است. 20را برای آن محاسبه کنيد.

  • برای تعريف تابع از دستورات روبرو استفاده می کنيم:            @ f(x)    –    inline(f)    –    function

>> syms x y

>> f=@(x,y)(sin(x.*y)-x./y);

>> diff(f,x)

ans = y*cos(x*y) – 1/y

>> diff(f,y)

  ans = x*cos(x*y) + x/y^2

>> diff(f,x,4)

  ans = y^4*sin(x*y)

>> diff(f,y,3)

  ans = (6*x)/y^4 – x^3*cos(x*y)

دستور limit : دستور حد در متلب ٬ limit می باشد. 

21

>> syms x

>> limit((1+1/x)^x,x,inf)

ans = exp(1)

22

>> limit(sin(x)/x,x,0)

ans = 1

دستورات انتگرال گيری در متلب به شرح زير است: 

–    انتگرال معين و نامعين  int

–    انتگرال معين (به روش عددی)   quad-quadl

23

>> syms x

>> int(sin(x))                  يا                 >> int(sin(x),x)

 ans = -cos(x)

24

>> int(sin(x),0,pi)
  ans = 2 يا

>> f=inline(sin(x));                            يا        >> quad(f,0,pi);

  >> quad(f,x)                  →                        جواب نمی دهد

>> quad(f,0,pi)

ans =    2.0000

  • دستور تعيين تابع نامشخص: (inline – @(x
  • معرفی تابع دو متغيره: @(x,y)

مثال: 

25

>> syms a x

>> int(x*exp(a*x),x)

  ans =  (exp(a*x)*(a*x – 1))/a^2

26

>> syms a x

>> int(exp(a*x)*sin(x),x)

  ans = -(exp(a*x)*(cos(x) – a*sin(x)))/(a^2 + 1)

 >> pretty(ans)

27

28

>> syms x y

>> int(int(1./(x+y)^2,y,0,x),x,1,exp(4))

  ans = log(960500813064011/17592186044416)/2

>> vpa(ans,4)                       جواب را تا ۴ رقم اعشار نشان می دهد.

 ans = 2.0

29

>> syms x y z

>> int(int(int(x*y*z,x,0,1),y,0,1),z,0,1)

  ans = 1/8

پاسخ دهید

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