Студопедия — Основні теоретичні відомості. Символічний тулбокс (Symbolic Toolbox)
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Основні теоретичні відомості. Символічний тулбокс (Symbolic Toolbox)






Символічний тулбокс (Symbolic Toolbox).

Символічний тулбокс використовується для роботи з символічними математичними виразами. Він вміщує близько декількох сотень символічних функцій, що діляться на кілька видів:

- спрощення та перетворення математичних виразів;

- диференціювання, інтегрування та знаходження границь функцій;

- операції з векторами та матрицями;

- вирішення алгебричних та диференційних рівнянь та систем рівнянь.

Символічний тулбокс також вміщує інтерфейс MuPAD, що оптимізований для зручного вирішення та перетворення символьних математичних виразів.

Символічні об’єкти – це спеціальний тип даних, який дозволяє виконувати математичні операції у MATLAB аналітично, без чисельних обчислень. Символічні об'єкти діляться на символічні змінні, символічні вирази, символічні масиви та символічні числа.

Розглянемо кожен з видів символьних об’єктів.

Символічні змінні

Символічні змінні являються об’єктами класу sym object. Для оголошення символьних змінних використовується команди syms, наприклад

syms x y

створить дві символічні змінні x та y.

Тепер можна виконувати математичні дії з цими змінними, наприклад

syms x y

x+x+y

На екрані з’явиться наступний результат

ans =

2*x + y

Використовуючи вже оголошені символічні змінні можна створювати символічні масиви та математичні вирази.

Символічні числа

Тулбокс також дозволяє перетворювати числа у символічні об’єкти. Щоб створити символічне число використовується команда sym, наприклад

a=sym('2');

Якщо потрібно створити дробове число, то одинарні лапки не ставляться

a=sym(0.75);

На екрані відобразиться створене число у формати звичайного дробу

a =

3/4

Також можна виконувати будь-які дії з символічними числами, наприклад

sym(2/5)+sym(1/3)

дає у результаті

ans =

 

11/15

Символічні вирази

Нехай потрібно задати змінну, яка є математичним виразом і не потребує спрощення, наприклад

.

Для цього достатньо застосувати команду sym

rho=sym('(1+sqrt(5))/2')

У результаті на екрані з’явиться

rho =

(1+sqrt(5))/2

Тепер створену змінну можна використовувати для створення більших математичних виразів, наприклад запис

f= rho^2-rho-1

дає у результаті на екрані

f =

(5^(1/2)/2 + 1/2)^2 - 5^(1/2)/2 - 3/2

Символічні масиви

Для створення будь – якого символічного масиву потрібно спочатку створити задати його елементи, як символічні змінні

syms a b c

Далі створюється матриця з існуючих символічних змінних так само, як матриця з звичайних чисел

A=[a b c; c a b; b c a];

На екрані з’явиться

A =

[ a, b, c]

[ c, a, b]

[ b, c, a]

Для створення масиву з символічних чисел дуже зручно застосовувати команду sym.

Наприклад, матриця створена з десяткових чисел

A=[1 0.5 0.4; 0.5 0.4 0.25; 0.4 0.25 0.2]

A =

1.0000 0.5000 0.4000

0.5000 0.4000 0.2500

0.4000 0.2500 0.2000

перетвориться за допомогою команди sym(A) у матрицю вигляду

ans =

[ 1, 1/2, 2/5]

[ 1/2, 2/5, 1/4]

[ 2/5, 1/4, 1/5]

Спрощення та перетворення алгебричних виразів

Нехай задані три різні символічні вирази

syms x f g h

f=x^3-6*x^2+11*x-6;

g=(x-1)*(x-2)*(x-3);

h=-6+(11+(-6+x)*x)*x;

Для покращення візуального сприйняття цих виразів існує команда pretty. У результаті запису

pretty(f); pretty(g); pretty(h)

на екрані відобразяться ці ж функції, але «покращеного» вигляду

3 2

x - 6 x + 11 x - 6

 

(x - 1) (x - 2) (x - 3)

 

x (x (x - 6) + 11) - 6

Існує також ряд команд для перетворення та спрощення виразів.

Команда collect знаходить та сумує всі коефіцієнти при однакових степенях змінної, наприклад

syms x f

f =(x - 1)*(x - 2)*(x - 3);

collect(f)

У результаті на екрані з’явиться

ans =

x^3 - 6*x^2 + 11*x – 6

Якщо записати більш громіздкий вираз

syms x a

f=(x+a)^4+(x-1)^3-(x-a)^2-a*x*x-3

d=collect(f)

Результат буде наступний

f =

(x - 1)^3 - a*x^2 + (a + x)^4 - (a - x)^2 - 3

d =

x*(4*a^3 + 2*a + 3) - x^2*(a - 6*a^2 + 4) + x^3*(4*a + 1) –

a^2 + a^4 + x^4 - 4

Команда expand розкладає вираз на суму добутків, наприклад

syms a x y f

f =a*(x + y);

expand(f)

Після виконання команди результат буде наступним

ans =

a*x + a*y

Команда factor використовується для поліномів із раціональними коефіцієнтами і виражає функцію у вигляді добутку поліномів. Якщо ж функція не розкладається на добуток, то команда видає цю ж саму функцію. Ця команда є зворотною до команди collect. Наприклад

syms x f

f =x^3 - 6*x^2 + 11*x – 6;

factor(f)

Результат буде наступним

ans =

(x - 3)*(x - 1)*(x - 2)

Також команда factor може представляти символьне число у вигляді добутку простих чисел, наприклад

syms a

a=sym('230010')

s=factor(a)

На екрані з’явиться наступне

s =

2*3*5*11*17*41

Команда simplify дозволяє спрощувати вирази, застосовуючи всі відомі математичні залежності, наприклад

syms x f

f =x*(x*(x - 6) + 11) - 6;

simplify(f)

На екрані з’явиться наступний результат

ans =

(x - 1)*(x - 2)*(x - 3)

Спростимо ще одну функцію

syms x f

f=(1-x^2)/(1-x);

simplify(f)

Спрощений вираз буде мати вигляд

ans =

x + 1

Команда simple перетворює математичний вираз у вираз з найменш можливою кількістю символів. Вона базується на застосуванні усіх попередніх функцій. Запис simple(f) видасть на екран кожне можливе спрощення та функцію, за допомогою якої воно відбулося, наприклад

syms x f

f=x^2-2*x-3;

simple(f)

У результаті на екрані з’явиться команди і результат їх виконання відносно заданої функції. Якщо не перетворюється застосованою командою, то у результаті її відобразиться така сама ж функція, як показано нижче

simplify:

x^2 - 2*x - 3

radsimp:

x^2 - 2*x - 3

simplify(100):

(x + 1)*(x - 3)

combine(sincos):

x^2 - 2*x - 3

combine(sinhcosh):

x^2 - 2*x - 3

combine(ln):

x^2 - 2*x - 3

factor:

(x + 1)*(x - 3)

expand:

x^2 - 2*x - 3

combine:

x^2 - 2*x - 3

rewrite(exp):

x^2 - 2*x - 3

rewrite(sincos):

x^2 - 2*x - 3

rewrite(sinhcosh):

x^2 - 2*x - 3

rewrite(tan):

x^2 - 2*x - 3

collect(x):

x^2 - 2*x - 3

mwcos2sin:

x^2 - 2*x - 3

ans =

x^2 - 2*x – 3

Команда subs дозволяє зробити підстановку одного виразу у інший. У загальному вигляді subs записується з трьома вхідними аргументами: ім’ям символічної функції, змінної, що має бути замінена, та виразом, що слід підставити замість змінної, наприклад

f=sym('(a^2+b^2)/(a^2-b^2)+a^4/b^4');

f=subs(f, 'a', '(exp(x)+exp(-x))');

f=subs(f, 'b', '(sin(x)+cos(x))');

pretty(f)

На екрані з’явиться наступний вираз

4 2 2

(exp(-x) + exp(x)) (cos(x) + sin(x)) + (exp(-x) + exp(x))

------------------- - ----------------------------------------

4 2 2

(cos(x) + sin(x)) (cos(x) + sin(x)) - (exp(-x) + exp(x))

Вирішення алгебричних рівнянь символічній формі

За допомогою символьних функцій можна вирішувати будь-які алгебричні рівняння записані аналітично. Команда solve вирішує рівняння наступним чином

syms a x

s=solve(x^3+a*x+1)

На екрані з’явиться розв’язок рівняння цього у символьному вигляді

s =

((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3) - a/(3*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3))

a/(6*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3)) - ((a^3/27 +

1/4)^(1/2) - 1/2)^(1/3)/2 - (3^(1/2)*i*(a/(3*((a^3/27 +

1/4)^(1/2) - 1/2)^(1/3)) + ((a^3/27 + 1/4)^(1/2) –

1/2)^(1/3)))/2

a/(6*((a^3/27 + 1/4)^(1/2) - 1/2)^(1/3)) - ((a^3/27 +

1/4)^(1/2) - 1/2)^(1/3)/2 + (3^(1/2)*i*(a/(3*((a^3/27 +

1/4)^(1/2) - 1/2)^(1/3)) + ((a^3/27 + 1/4)^(1/2) –

1/2)^(1/3)))/2

 

Якщо ж у рівняннях є декілька однакових виразів, то зручно застосовувати команду subexpr, яка замінить ці вирази новою змінною, наприклад для розв’язку попереднього рівняння

r=subexpr(s)

sigma =

(a^3/27 + 1/4)^(1/2) - 1/2

r =

sigma^(1/3) - a/(3*sigma^(1/3))

a/(6*sigma^(1/3)) - sigma^(1/3)/2-

(3^(1/2)*i*(a/(3*sigma^(1/3)) + sigma^(1/3)))/2

a/(6*sigma^(1/3)) - sigma^(1/3)/2+

(3^(1/2)*i*(a/(3*sigma^(1/3)) + sigma^(1/3)))/2

Як видно з прикладу, вираз (a^3/27 + 1/4)^(1/2) - 1/2 був замінений на sigma та підставлений у розв’язок системи.

Вирішення систем алгебричних рівнянь символічній формі

Нехай задано систему символічних алгебричних рівнянь

.

Щоб вирішити рівняння для x та y відносно спочатку створюються символічні змінні

syms x y alpha

Далі використовується команда для вирішення рівнянь solve, але у іншому форматі

[x, y]=solve(x^2*y^2, x-y/2-alpha)

Треба звернути увагу, що в дужках записуються ліві частини рівнянь, прирівняні до нуля, а масив розв’язків повинен містити стільки елементів, скільки змінних знаходиться у рівнянні, у даному випадку масив[x, y]містить два елемента x та y.

У результаті виконаня команди solve на екрані з’явиться наступне

x =

alpha

y =

(-2)*alpha

 

Вирішення диференційних рівнянь символічній формі

Для символічного вирішення диференційних рівнянь застосовується команда dsolve. При записі диференційних рівнянь у команді dsolve перша похідна позначається літерою D, друга D2, третя D3, і т.д. Запис D2y відповідає .

Початкові умови записують за допомогою окремих рівнянь. Якщо початкові умови не задані, в розв’язок будуть входити постійні інтегрування.

Розглянемо приклад. Нехай задане диференційне рівняння першого порядку

Команда dsolve буде мати наступний вигляд

syms t y

s=dsolve('Dy=2*y+t')

У результаті на екрані з’явиться наступне

s =

(C3*exp(2*t))/4 - t/2 - 1/4

Якщо відомі початкові умови, наприклад , то запис команди dsolve зміниться

syms t y

s=dsolve('Dy=2*y+t', 'y(0)=2')

Тоді у розв’язку вже не буде постійних інтегрування

s =

(9*exp(2*t))/4 - t/2 - 1/4

Якщо задане нелінійне диференційне рівняння, наприклад

із заданими початковими умовами , воно вирішується символічно наступним чином

syms x

s=dsolve('(Dx+x)^2=1', 'x(0)=0')

У результаті розв’язок буде наступним

s =

1/exp(t) - 1

1 - 1/exp(t)

Диференційні рівняння другого порядку і вище мають містити в собі позначення вищих похідних D2, D3 і т.д., наприклад рівняння

із заданими початковими умовами , вирішується наступним чином

syms x y

s=dsolve('D2y=cos(2*x)-y', 'y(0)=1', 'Dy(0)=0', 'x')

Запис 'x' означає, що відбувається диференціювання по змінній x, а не по t.

У результаті виконання команди на екрані з’явиться наступне

s =

(4*cos(x))/3 + cos(x)*(cos(3*x)/6 - cos(x)/2) +

sin(x)*(sin(3*x)/6 + sin(x)/2)

Розглянемо диференційне рівняння третього порядку

,

з початковими умовами , , .

Для вирішення цього рівняння потрібно записати наступне

syms x u

s=dsolve('D3u=u', 'u(0)=1', 'Du(0)=-1', 'D2u(0)=pi', 'x');

d=subexpr(s)

Результат буде наступним

sigma =

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

d =

(pi*exp(x))/3 - (cos(sigma)*(pi/3 - 1))/exp(x/2) –

(3^(1/2)*sin(sigma)*(pi + 1))/(3*exp(x/2))

Запис 'D3u' означає третю похідну , а 'D2u(0)=pi' початкову умову .

Вирішення систем диференційних рівнянь у символічній формі

Нехай задана система диференційних рівнянь

.

Ця система також може бути розв’язана у символічній формі за допомогою команди dsolve

 

syms f g

[s, p]=dsolve('Df=3*f+4*g', 'Dg=-4*f+3*g')

r=subexpr(s)

t=subexpr(p)

pretty(r)

pretty(t)

У результаті на екрані з’явиться наступні розв’язки

s =

(C59*i)/exp(t*(4*i - 3)) - C58*i*exp(t*(4*i + 3))

p =

C58*exp(t*(4*i + 3)) + C59/exp(t*(4*i - 3))

r =

(C59*i)/exp(t*(4*i - 3)) - C58*i*exp(t*(4*i + 3))

t =

C58*exp(t*(4*i + 3)) + C59/exp(t*(4*i - 3))

 

- C58 exp(t (3 + 4 I)) I + C59 exp(t (3 - 4 I)) I

 

C58 exp(t (3 + 4 I)) + C59 exp(t (3 - 4 I))

Розглянемо систему третього порядку

.

Записується команда dsolve

syms x1 x2 x3

[x y z]=dsolve('Dx1=2*x1-3*x2+3*x3-2*Dx2+Dx3', 'Dx2=3*x1+2*x2-x3+2*Dx1-5*Dx3', 'Dx3=x1-x2+x3+Dx1-Dx2');

pretty(x)

pretty(y)

pretty(z)

На екрані з’являться наступні розв’язки

/ 1/2 \ / 1/2 \

| 91 t 10 t | | 10 t 91 t |

C63 exp| ------- - ---- | C64 exp| - ---- - ------- |

\ 9 9 / \ 9 9 /

------------------------- + --------------------------- + C62 exp(t) -

10 10

 

/ 1/2 \ / 1/2 \

1/2 | 91 t 10 t | 1/2 | 10 t 91 t |

3 91 C63 exp| ------- - ---- | 3 91 C64 exp| - ---- - ------- |

\ 9 9 / \ 9 9 /

--------------------------------- + -----------------------------------

70 70

 

/ 1/2 \ / 1/2 \

| 10 t 91 t | | 91 t 10 t |

7 C64 exp| - ---- - ------- | 7 C63 exp| ------- - ---- |

\ 9 9 / \ 9 9 /

C62 exp(t) - ----------------------------- - --------------------------- +

10 10

 

/ 1/2 \ / 1/2 \

1/2 | 91 t 10 t | 1/2 | 10 t 91 t |

11 91 C63 exp| ------- - ---- | 11 91 C64 exp| - ---- - ------- |

\ 9 9 / \ 9 9 /

---------------------------------- - ------------------------------------

70 70

 

 

/ 1/2 \ / 1/2 \

| 91 t 10 t | | 10 t 91 t |

C63 exp| ------- - ---- | + C64 exp| - ---- - ------- | + C62 exp(t)

\ 9 9 / \ 9 9 /

 

Диференціювання символічних виразів

Щоб проілюструвати, як відбувається диференціювання у символічному тулбоксі, спочатку створимо символьний вираз:

syms x

f=sin(5*x);

Для диференціювання цього символьного виразу відносно x використовується команда diff

a=diff(f)

У результаті на екрані з’явиться

a =

5*cos(5*x)

Розглянемо ще один приклад

syms x

g=exp(x)*cos(x)

c=diff(g)

Результат буде наступним

c =

exp(x)*cos(x) - exp(x)*sin(x)

Для того, щоб продиференціювати вираз декілька разів потрібно записати команду diff стільки разів, якої величини потрібно узяти похідну, наприклад для подвійного диференціювання

syms x

g=exp(x)*cos(x);

c=diff(diff(g))

 

або записати наступним чином

c=diff(g, 2)

де 2 – порядок похідної.

У результаті написання будь-якої з вище описаних команд на екрані з’явиться

c =

(-2)*exp(x)*sin(x)

Для того, щоб взяти похідну від константи, її спочатку треба задати, як символьну змінну. У протилежному випадку відповіддю на диференціювання константи буде порожня множина, наприклад:

c=sym('5')

a=diff(c)

Результат буде наступним

a =

Якщо просто набрати diff(5), то у результаті буде

ans=[ ]

Часткові похідні від символічних виразів

Для того, щоб продиференціювати вираз, що вміщує більш ніж одну символьну змінну, потрібно зазначити змінну, за якою відбувається диференціювання. Тоді команда diff обраховує часткову похідну за заданою змінною, наприклад

syms s t

f=sin(s*t);

c=diff(f, t)

У результаті на екрані буде наступне

c =

s*cos(s*t)

Щоб продиференціювати той самий вираз за іншою змінною, наприклад s, потрібно написати

syms s t

f=sin(s*t);

c=diff(f, s)

Результатом буде

 

c =

t*cos(s*t)

Щоб обчислити другу похідну від цього ж виразу за змінною t, потрібно написати наступне

syms s t

f=sin(s*t);

c=diff(f, t, 2)

У результаті виконання команд на екрані з’явиться наступний розв’язок

c =

-s^2*sin(s*t)

Команда diff також може використовуватись для поелементного диференціювання масивів, наприклад

syms a x

A=[cos(a*x) sin(a*x); -sin(a*x) cos(a*x)];

C=diff(A)

Результат буде наступним

C =

[ -a*sin(a*x), a*cos(a*x)]

[ -a*cos(a*x), -a*sin(a*x)]

Обчислення границь символічних виразів

Нехай задана границя

.

Для обчислення границі від символічного виразу спочатку потрібно задати символічні змінні та використати до виразу команду limit. Першим вхідним аргументом цієї команди являється символічний вираз, другим – змінна, а третім – точка, в якій шукається границя. Тоді задана границя буде обчислюватися наступним чином

syms h x

s=limit((cos(h+x)-cos(x))/h, h, 0)

Результатом виконання команди буде

s =

-sin(x)

Розглянемо ще одну границю

 

Вирішується ця границя за допомогою наступної послідовності команд

syms n x

s=limit ((1+x/n)^n, n, inf)

і дає у результаті

s =

exp(x)

Функція limit також дозволяє знаходити односторонні границі. Для знаходження границі справа потрібно вказати четвертий додатковий аргумент 'right', а зліва – 'left'. Розглянемо дял прикладу дві границі

та .

Команди для вирішення цих границі наступні

syms x

s1=limit ((10+x)^(1/x), x, 0, 'left')

s2= limit ((10+x)^(1/x), x, 0, 'right')

У результаті на екрані відобразиться наступне

s1 =

s2 =

Inf

Інтегрування символічних виразів

Якщо f – це символьний вираз, то команда int намагається знайти інший символьний вираз F, так, що diff(F)=f.

Наприклад, потрібно обрахувати невизначений інтеграл . Застосуємо команду int

syms x n

f=x^n;

int(f)

На екрані з’являться наступні розв’язки

ans =

piecewise([n = -1, log(x)], [n < > -1, x^(n + 1)/(n + 1)])

Також у команді int можна задавати змінну, за якою буде проходити інтегрування, наприклад для визначення інтеграла

syms x n

f=(x^3)*exp(x);

I=int(f, x);

pretty(I)

У результаті на екрані з’явиться наступний розв’язок

3 2

exp(x) (x - 3 x + 6 x - 6)

Для обрахування визначених інтегралів необхідно задати межі інтегрування. Наприклад для інтеграла команда int виглядає наступним чином

syms x

f= sin(2*x);

I=int(f, x, 0, pi/2)

Результат буде наступним

I =

 







Дата добавления: 2014-11-10; просмотров: 678. Нарушение авторских прав; Мы поможем в написании вашей работы!



Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

В теории государства и права выделяют два пути возникновения государства: восточный и западный Восточный путь возникновения государства представляет собой плавный переход, перерастание первобытного общества в государство...

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия