Символические вычисления в MatLab: Методические указания к лабораторной работе № 6, страница 3

Сложные алгебраические и тригонометрические выражения часто могут быть приведены к эквивалентным путем упрощения. 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)

                         2

 + 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