Читайте также: |
|
Сложные алгебраические и тригонометрические выражения часто могут быть приведены к эквивалентным путем упрощения. ToolBox Symbolic Math имеет целый ряд сервисных функций, предназначенных для различных преобразований символических выражений. Операции с полиномами реализуют четыре функции: collect, expand, factor, horner.
Вычисление коэффициентов при степенях независимой переменной производится с помощью функции collect. Введите полином и отобразите его в командном окне при помощи pretty:
>> p=sym('(x+a)^4+(x-1)^3-(x-a)^2-a*x+x-3');
>> pretty(p)
4 3 2
(x + a) + (x - 1) - (x - a) - a x + x - 3
Затем примените к полиному функцию collect:
>> pc=collect(p);
>> pretty(pc)
4 3 2 2 3 4 2
x + (1 + 4a)x + (-4 + 6a)x + (4 + a + 4a)x + a - 4 – a
По умолчанию в качестве независимой переменной в полиноме выбирается x, однако можно считать, что a - независимая переменная, а x входит в коэффициенты полинома, зависящего от a. Второй аргумент функции collect предназначен для указания переменной, при степенях которой следует найти коэффициенты:
>> pca=collect(p,'a');
>> pretty(pca)
4 3 2 2 3 4 3 2
a + 4xa + (-1 + 6x)a + (4x + x)a + x + (x -1)- x - 3 + x
Функция expand представляет полином суммой одночленов:
>> pe=expand(p);
>> pretty(pe)
4 3 2 2 3 4 3 2 2
x + 4ax + 6x a + 4xa + a + x - 4x + 4x - 4 + ax - a
Аргументом expand может быть не только полином, но и символическое выражение, содержащее тригонометрические, экспоненциальные и логарифмические функции:
>> pk=sym('(sin(x)+cos(x))^3+(sin(x)+cos(x))^2+(sin(x)+cos(x))')
pk =
(sin(x)+cos(x))^3+(sin(x)+cos(x))^2+(sin(x)+cos(x))
>> pk2=expand(pk);
>> pretty(pk2)
3 2 2 3 2
sin(x) + 3sin(x) cos(x) + 3sin(x)cos(x) + cos(x) + sin(x)
+ 2sin(x)cos(x) + cos(x) + sin(x) + cos(x)
Аргументами функций expand, collect может быть не только отдельно полином или тригонометрические, или экспоненциальные, или логарифмические функции, но и их сочетания, например:
>> p=sym('(x+a)^4+(x-1)^3+(sin(x)+cos(x))^4');
>> pretty(p)
4 3 4
(x + a) + (x - 1) + (sin(x) + cos(x))
>> p1=collect(p)
p1 =
x^4+(1+4*a)*x^3+(-3+6*a^2)*x^2+(3+4*a^3)*x+a^4-1+(sin(x)+cos(x))^4
>> p2=expand(p1)
p2 =
x^4+x^3+4*x^3*a-3*x^2+6*x^2*a^2+3*x+4*x*a^3+a^4-1+sin(x)^4+4*sin(x)^3*cos(x)+6*sin(x)^2*cos(x)^2+4*sin(x)*cos(x)^3+cos(x)^4
>> pretty(p2)
4 3 3 2 2 2 3 4 4
x + x + 4x a - 3x + 6x a + 3x + 4xa + a - 1 + sin(x)
3 2 2 3 4
+ 4sin(x) cos(x) + 6sin(x) cos(x) + 4sin(x)cos(x) + cos(x)
Символические полиномы разлагаются на множители функцией factor, если получающиеся множители имеют рациональные коэффициенты:
>> p=sym('7*x^5-56*x^4+105*x^3+140*x^2-532*x+336');
>> p1=factor(p)
p1 =
7*(x-2)*(x-3)*(x-4)*(x+2)*(x-1)
Функция factor может также представлять числа в виде произведения простых чисел
>> syms a
>> a=sym('2738470');
>> a1=factor(a)
a1 =
(2)*(5)*(7)*(19)*(29)*(71)
Обратите внимание, что обращение
>> a2=factor(2738470)
a2 =
2 5 7 19 29 71
выводит в командное окно аналогичный результат, однако переменная a1 является символьной, а переменная a2 - вещественной, в чем несложно убедиться при помощи whos:
>> whos a1 a2
Name Size Bytes Class
a1 1x1 176 sym object
a2 1x6 48 double array
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)
------------------------
1/2 2 1/2 2
(3 + 3) (-3 + 3)
>> v1=simple(v)
v1 =
Таким образом, в этом примере лучший результат получен с помощью функции 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)
-------- + ----------------- + ---- + -------
2 A 2 2
(N + x) B C
>> q=subs(f,'x',0)
q =
1+A^2/B^2+1/C^2
>> f3=sym('sin(x)+exp(x)+tan(x)');
>> q1=subs(f3,'x',0)
q1 =
Дата добавления: 2015-07-20; просмотров: 97 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Замечание 1 | | | Определение пределов, дифференцирование и интегрирование |