[Bölüm 12] MATLAB’ta Sembolik Matematik (Türev – İntegral…)

Merhaba arkadaşlar, bu yazımda sizlere MATLAB üzerinde türev, integral gibi sembolik matematik işlemlerinin nasıl yapıldığından bahsedeceğim.

  • mupad komutu ile MATLAB üzerinde bilimsel işlem yapılabilen(limit, türev, integral, grafik çizimi vb.) bir işlem penceresi açılır.
  • x=sym(‘x^2 + 5*x’) ya da syms x komut yapılarıyla x değişkeni cebirsel bir sembol olarak MATLAB’a tanıtılır.
syms x
y=4*x^2+4*x+1;
z=2*x+1;
y/z

ans =
     (4*x^2 + 4*x + 1)/(2*x + 1)

ÖRNEK:

syms Q R T k0
k = k0*exp(-Q/(R*T))
k =

k0*exp(-Q/(R*T))

NOT: MATLAB üzerinde sayısal değişkenler kullanıldığı zaman en sade halini değil yazılı olan formülü çıktı olarak verir.

  • [num,den]=numden(a) komut yapısı değişkenler ile tanımlanmış denklemi payını ve paydasını ayrı ayrı belirtir.
syms x;
y = 2*(x+3)^2/(x^2+6*x+9);
[pay,payda]=numden(y)
pay =
     2
payda =
     1

MATLAB’ın ESKİ SÜRÜMÜNDE;

[pay,payda] = numden(y)
pay =
2*(x+3)^2
den =
     x^2+6*x+9
  • expand komutu cebirsel işlemleri yapıp denklemi açar.
a=(x+1)^2
a =
   (x + 1)^2

expand(a)
ans =
    x^2 + 2*x + 1
  • factor komutu normalde içerisinde belirtilen sayıyı asal çarpanlarına ayırır lakin eğer içerisinde cebirsel bir ifade var ise bu ifadeyi çarpanlarına ayırarak düzenli hale getirir.
a = x*2 + 2*x + 1
factor(a)
ans =
    (x+1)^2
  • collect komutu benzer terimleri toplar ve bir araya getirir.
a=(x+1)^2
a =
   (x + 1)^2

collect(a)
ans =
    x^2 + 2*x + 1
  • simplify(x) komutu içerisinde tanımlanmış olan x denklemini MuPad basitleştirme (sadeleştirme) kurallarına göre basite indirger.
z = sym('3*a-(a+3)*(a-3)^2')
simplify(z)
ans =
     3*a-(a-3)^2*(a+3)

w = sym('x^3-1 = (x-3)*(x+3)')
simplify(w)
ans =
     x^3 + 8 = x^2
  • simple komutu ile gerekli matematiksel işlemler yapılır ve ifade sadeleştirilir.
syms x
simple(sin(x)^2 + cos(x)^2)
ans=
    1
  • poly2sym(a) komutu içerisindeki matrisin elemanlarını katsayı olarak kabul eden bir polinom yazar.
  • sym2poly(b) komutu ise polinomun katsayılarını verir.(poly2sym komutunun tersi)
x=1:5 ;
y=poly2sym(x)
y =
   x^4 + 2*x^3 + 3*x^2 + 4*x + 5

z=sym2poly(y)
z =
   1  2  3  4  5
  • solve komutu ile MATLAB üzerinde değişkenler cinsinden yazılmış olan denklemler çözümlenir ve sıfıra eşitlenerek kökleri bulunur.
syms x
e1=x+y+z;
solve(e1)
ans =
     -y-z

syms a+b+c
e2=a-b+c;
solve(e2)
ans =
     b-a

syms x
solve(x^2+5*x+4)
ans =
     -4
     -1

syms x
y=x+9;
solve(y)
ans =
     -9

syms x
y=x^2+3*x+2;
solve(y)
ans =
     -1
     -2

syms x
solve('x^2+5*x+4')
ans =
    -4
    -1

solve('a*x^2+b*x +c')
ans =
    -(b + (b^2-4*a*c)^(1/2))/(2*a)
    -(b - (b^2-4*a*c)^(1/2))/(2*a)

solve('a*x^2+b*x +c', 'a')
ans =
    -(c+b*x)/x^2
  • Hangi kökün bulunması isteniyorsa aşağıdaki gibi virgül(,) ile ayrılarak gösterilir.
syms a b c x
solve(a*x*x^2+b*x+c, b)
ans =
    -(a*x^3+c)/x

E3 = sym('P = P0*exp(r*t)')
solve(E3,'t')
ans =
log(P/P0)/r

t = solve(E3,'t')
t =
   log(P/P0)/r
  • MATLAB çözümlerini DELTA yöntemi ile bulur. [ x1 , x2 = (-b ∓ √𝚫) / 2a ]
solve('5*x^2+6*x-7')
ans =
   -(2*11^(1/2))/5-3/5
    (2*11^(1/2))/5-3/5

double(ans)
ans =
    -1.9266
     0.7266

  • MATLAB üzerinde aşağıdaki komutlar uygulanarak birden fazla bilinmeyenli denklemler çözülür.
one = sym('3*x + 2*y -z = 10');
two = sym('-x + 3*y + 2*z = 5');
three = sym('x - y - z = -1');

answer = solve(one,two,three)
answer =
       x: [1x1 sym]
       y: [1x1 sym]
       z: [1x1 sym]

answer.x
ans =
    -2
answer.y
ans =
     5
answer.z
ans =
    -6


[x,y,z] = solve(one,two,three)
x =
  -2
y =
   5 
z =
  -6

double(x)
  • subs(değiştirilecek ifade, ‘modifiye edilecek ifade’, ‘eklenecek ifade’) komut yapısı ile denklemler üzerinde değişkenler değiştirilebilir, değişkenler yerine farklı değerler atanabilir.

E4 = sym(‘ax^2+bx+c’)

subs(E4,'x','y')
ans =
    a*(y)^2+b*(y)+c

E5 = subs(E4,'x','y')
E5 =
    a*(y)^2+b*(y)+c
E4
E4 =
    a*x^2+b*x+c

subs(E4,'x',3)
ans =
     9*a+3*b+c

E4 = sym(‘ax^2+bx+c’)

syms a b c x
subs(E4,x,4)
ans =
    16*a+4*b+c

subs(E4,{a,b,c,x},{1,2,3,4})
ans =
     27

E6 = subs(E4,{a,b,c},{1,2,3})
E6 =
    x^2+2*x+3

numbers = 1:5;
subs(E6, x , numbers)
ans =
     6  11  18  27  38
  • Matematiksel semboller ile oluşturulmuş denklemlerin grafiklerinin çizimi için ezplot(y) komutu kullanılır.
y = sym('x^2-2')
ezplot(y)

y = sym('x^2-2')
ezplot(y,[-10,10])

ezplot('x^2 + y^2 = 1',[-1.5,1.5])

veya

ezplot('x^2 + y^2 -1',[-1.5,1.5])

veya

z = sym('x^2 + y^2 -1')
ezplot(z,[-1.5,1.5])

ezplot('sin(t)','cos(t)')


ÖRNEK:

ezplot('sin(t)','cos(t)')

y1 = sym('sin(x)')
y2 = sym('sin(2*x)')
y3 = sym('sin(3*x)')

ezplot(y1)
hold on
ezplot(y2)
ezplot(y3)
hold off

NOT:

 y = sym('x^2-1'); ezplot(y)     =    ezplot('x^2-1')

NOT: Grafik çizme komutlarının başına ‘’ez’’ kelimesi getirilerek sembollerle oluşturulmuş denklemlerde de aynı grafik özelliklerine sahip grafik çizimi mümkündür. Aşağıda bu konu için örnekler verilmiştir.

subplot(2,2,1)
ezmesh(z)
title('ezmesh')

subplot(2,2,2)
ezmeshc(z)
title('ezmeshc')

subplot(2,2,3)
ezsurf(z)
title('ezsurf')

subplot(2,2,4)
ezsurfc(z)
title('ezsurfc')


ÖRNEK:

subplot(2,2,1)
ezcontour(z)
title ('ezcontour')

subplot(2,2,2)
ezcontourf(z)
title('ezcontourf')

subplot(2,2,3)
z = sym('sin(x)')
ezpolar(z)
title('ezpolar')

subplot(2,2,4)
x=sym('4+(3+cos(v))*sin(u)')
y=sym('4 + (3 + cos(v))*cos(u)')
z=sym('4+sin(v)')
ezsurf(x,y,z)
title('A Parameterized ezsurf Plot')

  • MATLAB üzerinde aşağıdaki komutlar ile türev alınır.
  • diff(f) : f fonksiyonunun varsayılan değişkene göre(x) türevini alır.
  • diff(f,’t’) : f fonksiyonunun t değişkeni cinsinden türevini alır.
  • diff(f,n) : f fonksiyonunun n. dereceden türevini alır.
  • diff(f,’t’,n) : f fonksiyonunun t değişkeni cinsinden n. dereceden türevini alır.
y=sym('x^3+z^2')
diff(y)
ans =
     3*x^2

y=sym('x^3+z^2')
diff(y,2)
ans =
     6*x

y=sym('x^3+z^2')
diff(y,'z')
ans =
     2*z

y=sym('x^3+z^2')
diff(y,'z',2)
ans =
     2
  • MATLAB üzerinde aşağıdaki komutlar ile integral alınır.
  • int(f) : f fonksiyonunun varsayılan değişkene göre(x) integralini alır.
  • int(f,’t’) : f fonksiyonunun t değişkenine göre integralini alır.
  • int(f,a,b) : f fonksiyonunun sınırları a’dan b’ye olan belirli integralini alır.
  • int(f,’t’,a,b) : f fonksiyonunun t cinsinden sınırları a sayısal değerinden b sayısal değerine kadar olan belirli integralini alır.
  • int(f,’t’,’a’,’b’) : f fonksiyonunun t cinsinden sınırları a’dan b’ ye olan belirli integralini alır.
y = sym('x^3+z^2')
int(y)
ans =
     1/4*x^4+z^2*x

y = sym('x^3+z^2')
int(y,2,3)
ans =
     65/4+z^2

y = sym('x^3+z^2')
int(y,'z')
ans =
     x^3*z+1/3*z^3

y = sym('x^3+z^2')
int(y,'z',2,3)
ans =
     x^3+19/3

y = sym('x^3+z^2')
int(y,'z','a','b')
ans =
     x^3*(b-a)+1/3*b^3-1/3*a^3
  • MATLAB üzerinde aşağıdaki komutlar ile differansiyel alınır. dsolve komutu kullanılır.dsolve(‘eşitlik1’,’eşitlik2’,….’eşitlik12’,’koşul1’,’koşul2’,…’koşul12’) ya da
    dsolve(‘eşitlik1 , eşitlik2 ,…. eşitlik12’ , ’koşul1 , koşul2 ,… koşul12’)
dsolve('Dy = y')
ans =
     C1*exp(t)

dsolve('Dy = 2*y/t','y(-1) = 1')
ans =
     t^2

dsolve('D2y = -y')
ans =
     C1*sin(t)+C2*cos(t)

dsolve('Dy = y','y(0) = 1')
ans =
     exp(t)

dsolve('Dy = 2*y/t','y(-1) = 1','t')
ans =
     t^2

dsolve('D2y = -y')
ans =
     C1*sin(t)+C2*cos(t)

a = dsolve('Dx = y','Dy = x')
a =
    x: [1x1 sym]
    y: [1x1 sym]

a.x
ans =
    C1*exp(t)-C2*exp(-t)

a.y
ans =
    C1*exp(t)+C2*exp(-t)


[x,y] = dsolve('Dx = y','Dy = x')
x=
   C1*exp(t)-C2*exp(-t)
y=
   C1*exp(t)+C2*exp(-t)
  • matlabFunction(dy) komut yapısı kullanılarak dy değeri f değişkenine anonim bir fonksiyon olarak tanımlanır.
syms x
y=cos(x) ;
dy=diff(y)
dy=
   - sin(x)

f=matlabFunction(dy)
f =
   @x –sin(x)
f(2)
ans =
     -0.9093


syms x
y=(exp(-x)-1)/x ;
dy=diff(y) ;
g=matlabFunction(dy)
g=
  @(x) -1./(x.*exp(x))-(1./exp(x)-1)./x.^2