Grand total is 33 elements using 224 bytes
MatLab является объектно-ориентированной средой, числовые переменные double array образуют класс со своей функцией factor, а функция factor для символических переменных реализована в другой файл-функции. MatLab определяет по типу аргумента соответствующий класс, а затем и необходимую функцию.
Функция horner позволяет представить полином по схеме Горнера (Horner polynomial representation):
>> horner(p1)
ans =
336+(-532+(140+(105+(-56+7*x)*x)*x)*x)*x
Упрощение выражений общего вида производится при помощи функций simple, simplify, которые основаны на разных подходах. Функция simplify реализует мощный алгоритм упрощения выражений, содержащих как тригонометрические, экспоненциальную и логарифмическую функцию, так и специальные функции. Кроме того, функция simplify способна преобразовывать выражения, содержащие символическое возведение в степень, суммирование и интегрирование. Алгоритм, заложенный в simple, пытается получить выражение, которое представляется меньшим числом символов, чем исходное, последовательно применяя все функции упрощения ToolBox. При упрощении сложных выражений желательно применять обе функции, поскольку любая из них может дать лучший результат, чем другая. Рассмотрим следующий пример:
>> v=sym('(((2+sqrt(3))/(sqrt(2)+sqrt(2+sqrt(3))))+(2-sqrt(3))/(sqrt(2)-sqrt(2-sqrt(3))))^2')
>> pretty(v)
/ 1/2 1/2 \2
| 2 + 3 2 - 3 |
|------------------- + -------------------|
| 1/2 1/2 1/2 1/2|
\3/2 2 + 1/2 6 3/2 2 - 1/2 6 /
>> v2=simplify(v)
>> pretty(v2)
72
------------------------
1/2 2 1/2 2
(3 + 3 ) (-3 + 3 )
>> v1=simple(v)
v1 =
2
Таким образом, в этом примере лучший результат получен с помощью функции simple.
Функция subs позволяет произвести подстановку одного выражения в другое. В общем случае функция вызывается с тремя входными аргументами: именем символической функции, переменной подлежащей замене, и выражением, которое следует подставить в выражение. Функция subs, в частности, облегчает ввод громоздких символических выражений. Например:
>> f=sym('((N^2-x^2)/(N+x)^2)+(sin(2*x)/A)*(sqrt(B*C)) +(A/B)^2+(cos(x)/C)^2')
>> pretty(f)
2 2 1/2 2 2
N - x sin(2 x) (B C) A cos(x)
-------- + ----------------- + ---- + -------
2 A 2 2
(N + x) B C
>> f=subs(f,'A','sin(x)');
>> f=subs(f,'B','tan(x)');
>> f=subs(f,'C','cot(x)');
>> pretty(f)
2 2 1/2 2 2
N - x sin(2 x) (tan(x) cot(x)) sin(x) cos(x)
-------- + -------------------------- + ------- + -------
2 sin(x) 2 2
(N + x) tan(x) cot(x)
Упростим полученное выражение с помощью функции simple:
>> f2=simple(f)
f2 =
(2*sin(x)*N+sin(2*x)*N+sin(2*x)*x)/(N+x)/sin(x)
>> pretty(f2)
2 sin(x) N + sin(2 x) N + sin(2 x) x
------------------------------------
(N + x) sin(x)
Подстановка вместо переменной ее численного значения приводит к вычислению символической функции от значения аргумента, например:
>> f=sym('((N^2-x^2)/(N+x)^2)+(sin(2*x)/A)*(sqrt(B*C)) +(A/B)^2+(cos(x)/C)^2')
>> pretty(f)
2 2 1/2 2 2
N - x sin(2 x) (B C) A cos(x)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.