Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция _8_Символьные вычисления ML.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
174.08 Кб
Скачать

Преобразование символьных выражений

В математике с алгебраическими выражениями допустимы некоторые операции, например, можно вычислить значение выражения, упростить его, разложить на простые множители и т.д. Рассмотрим средства ML для решения подобных задач.

Функция subs () позволяет произвести подстановку одного выражения в другое. Она может вызываться с различным количеством аргументов. В общем случае она вызывается с тремя аргументами: именем символической функции, переменной, которую надо заменить и выражением, которое надо подставить. Рассмотрим различные варианты вызовов.

Можно вычислить значение функции в определённой точке, используется функция subs так:

% предварительно x была объявлена как символьная

>> syms x

% Значение функции f = sin (2*x) при х=1 (замена х на 1)

>> f = sin (2*x); x=1;

>> subs( f, 1)

ans =

0.9093

Либо такой вариант

>> syms x

>> x=1; f = sin (2*x); subs( f, x)

ans =

0.9093

или

>> x=1;

>> subs (f)

ans =

0.9093

Вычислим значение функции f=sin(2*x) при х=pi

>> subs (f, pi)

ans =

-2.4493e-016

Замена х на у в функции f=sin(2*x)

>> syms x, y

>> subs( f, y)

ans =

sin (2*y)

или так

>> subs( f, x, y)

ans =

sin(2*y)

Замена х на у+1 в ф-ции f=sin(2*x)

>> subs(f, y+1)

ans =

sin(2*y+2)

Если в выражение входит несколько переменных, то функцию subs() используют в другом формате.

Значение ф-ции d = (a+b)/(2*a) при a=1, а – не объявлена как символьная

>> subs(d, 'a', 1)

ans =

1/2+1/2*b

Значение функции d = (a+b)/(2*a) при a=1, b=2

>> subs ( subs (d,'a',1), 'b', 2)

ans =

1.5000

Сложные алгебраические и тригонометрические выражения в ML могут быть приведены к эквивалентным путем упрощения с помощью специальных функций expand, simple, simplify, collect, factor .

Такое преобразование, состоящее в упрощении выражения, может выполняться несколькими способами:

1). Функция expand (expr) представляет выражение в виде элементарных функций (суммой степеней без приведения подобных слагаемых)

>> syms x y

>> q=(x^2-y^2)/(x-y)

q =

(x^2-y^2) / (x-y)

В математическом виде

>> pretty (q)

( x2-y2/ x-y)

2 2

x - y

-------

x - y

>> expand (q)

ans =

1 / (x-y)*x^2-1/(x-y)*y^2

В математическом виде:

>> pretty (expand(q))

x2/x-y-y2/x-y

2 2

x y

----- - -----

x - y x - y

2). Упрощение выражений может производиться разными функциями, которые основаны на разных подходах. Функция simple (expr) упрощает символьное выражение. Используется несколько алгоритмов упрощения (выводятся их промежуточные результаты) и в качестве результата выбирается выражение, записанное меньшим количеством символов.

>> simple (q)

simplify:

x+y

radsimp:

x+y

combine(trig):

x+y

factor:

x+y

expand:

1/(x-y)*x^2-1/(x-y)*y^2

combine:

(x^2-y^2)/(x-y)

convert(exp):

(x^2-y^2)/(x-y)

convert(sincos):

(x^2-y^2)/(x-y)

convert(tan):

(x^2-y^2)/(x-y)

collect(x):

(x^2-y^2)/(x-y)

ans =

x+y

3). Функция simplify (expr) реализует более мощный алгоритм упрощения символьного выражения.

>> simplify(q)

ans =

x+y

4). Функция collect (expr, var) вычисляет коэффициенты полинома при степенях переменной var (раскрывает скобки и приводит подобные); если второй параметр отсутствует, то выбирается переменная х.

>> pol=y*(x+1)^2+(x-2)+(x+y)

pol =

y*(x+1)^2+2*x-2+y

Преобразуем к виду, содержащему степени х (коэффициенты при х)

>> collect (pol)

ans =

y*x^2+( 2*y+2) * x+2*y - 2

запись в математическом виде:

>> pretty(collect(pol))

2

y x + (2 y + 2) x + 2 y - 2

Преобразуем к виду, содержащему степени у (коэффициенты при у )

>> collect (pol, y)

ans =

((x+1) ^ 2+1) * y+2 * x - 2

В математическом виде:

>> pretty(collect(pol,y))

2

((x + 1) + 1) y + 2 x - 2

5). Функция factor (expr) раскладывает символьное выражение на простые множители

>> factor (pol) % Преобразование функции pol=y*(x+1)^2+(x-2)+(x+y)

ans =

y*x^2+2*y*x+2*y+2*x-2

>> factor (x^3-1) % Разложение функции x^3-1

ans =

(x-1)*(x^2+x+1)

>> factor (36) % Разложение числа 36

ans =

2 2 3 3