Символьные вычисления в среде MatLab

Автор работы: Пользователь скрыл имя, 18 Марта 2014 в 17:22, курсовая работа

Описание работы

Цель курсовой работы – это изучение основных операций с символьными величинами в среде Matlab.
Для достижения данной цели были поставлены следующие задачи:
изучить понятия переменных и функций;
рассмотреть способы представления матриц и векторов и работа с ними;
показать графическое представление функций в среде Matlab;
систематизировать изученные данные.

Содержание работы

ВВЕДЕНИЕ. 3
1 КРАТКИЕ СВЕДЕНИЯ О СИСТЕМЕ MATLAB 4
2 СИМВОЛЬНЫЕ ПЕРЕМЕННЫЕ И ФУНКЦИИ 6
2.1 Определение переменных и функций и работа над ними 6
2.2 Матрицы и векторы 9
2.3 Вычисления с символьными переменным 10
3 ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ ФУНКЦИЙ 13
4 УПРОЩЕНИЕ, ПРЕОБРАЗОВАНИЕ И ВЫЧИСЛЕНИЕ ПРИЛОЖЕНИЙ 16
ЗАКЛЮЧЕНИЕ 20
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 21

Файлы: 1 файл

Символьные вычисления.docx

— 182.06 Кб (Скачать файл)

[a*e,b*f]

[c*g,d*h]

 

Конструирование блочных символьных матриц не отличается от числовых, требуется следить за размерами соответствующих блоков:

>> D=[C A, B C]

D =

[ a*e+b*g, a*f+b*h, a, b, e, f, a*e+b*g, a*f+b*h]

[ c*e+d*g, c*f+d*h, c, d, g, h, c*e+d*g, c*f+d*h]

 

Обращение к элементам символьных матриц и векторов производится при помощи индексации, в том числе двоеточием и вектором со значениями индексов:

>> d2=D(2,:)

d2 =

[ c*e+d*g, c*f+d*h, c, d, g, h, c*e+d*g, c*f+d*h]

>> d=d2([1 3 4])

d =

[ c*e+d*g, c, d]

2.3 Вычисления с символьными переменными

 

Символьные операции позволяют находить точные значения выражений или значения со сколь угодно большой точностью. Для преобразования значения числовой переменной в символьную служит функция sym. Введем массив типа double array:

>> A= [1.3 -2.1 4.9

       6.9 3.7 8.5];

>> B=sym(A)

 

B =

 [ 13/10, -21/10, 49/10]

 [ 69/10,  37/10,  17/2]

При переходе от числовых к символьным выражениям по умолчанию используется запись чисел в виде рациональной дроби. Возможны и другие формы представления чисел в символьном виде, которые определяются значением второго входного аргумента функции sym.

Создадим вектор-столбец:

>> c=[3.2;0.4;-2.1]

и занесем в вектор d его символьное представление

>> d=sym(c);

Умножим матрицу B на вектор d – результат является символьной переменной, причем все вычисления проделаны над рациональными дробями.

>> e=B*d

e =

-697/100

  571/100

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

>> format long e

>> 1.0e+10+1.0e-10

ans =

1.000000000000000e+010

Запишем каждое из чисел в символьные переменные и снова вычислим сумму

>> large=sym(1.0e10);

>> small=sym(1.0e-10);

>> s=large+small

s =

100000000000000000001/10000000000

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

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

>> c=sym('sqrt(2)');

>> cn=vpa(c)

 

cn =

1.4142135623730950488016887242097

По умолчанию удерживается 32 значащие цифры. Второй дополнительный входной параметр vpa служит для задания точности:

>> cn=vpa(c,70)

 cn =

1.414213562373095048801688724209698078569671875376948073176679737990732

Замечание:

Второй аргумент vpa задает удерживаемое число значащих цифр только для данного вызова vpa. Для глобальной установки применяется функция digits, во входном аргументе которой указывается требуемое количество цифр.

Важно понимать, что выходной аргумент функции vpa является символьной переменной:

>> whos cn

  Name      Size            Bytes  Class    Attributes

  cn        1x1               266  sym  

Для перевода символьных переменных в числовые, т.е. переменные типа double array, используется функция double:

 

>> cnun=double(cn)

cnun =

1.414213562373095e+000

 

3 ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ ФУНКЦИЙ

 

Визуализация символьной функции одной переменной осуществляется при помощи ezplot. Самый простой вариант использования ezplot состоит в указании символьной функции в качестве единственного входного аргумента, при этом в графическое окно выводится график функции на отрезке [-2π, 2π]

>> f=sym('x^2+sin(x)');

>> ezplot(f)

По умолчанию в качестве отрезка, на котором строится график, принимается промежуток пересечения области определения функции и интервала [-2π,2π].

 

 

Рисунок 3.1 – График функции f=x^2+sin(x)

Вторым аргументом может быть задан вектор с границами отрезка, на котором требуется построить график функции

>> ezplot(f,[-3,2])

 

 

Рисунок 3.2 – График функции f = x^2+sin(x) на [-3;2]

 

Функция ezplot имеет некоторые отличия от своего аналога — функции fplot, применяемой к числовым функциям. В частности, возможно указание символьной функции, зависящей от двух аргументов:

>> z=sym('x^2+y^3');

>> ezplot(z,[-2 1 -3 4])

 

 

Рисунок 3.3 – График функции f = x^2+y^2

 

В данном случае выведется линия, на которой исследуемое выражение равно нулю.

 

Замечание:

Пределы изменения определяются названиями аргументов. Первые два числа соответствуют первому по алфавиту аргументу, а последние — второму, например в ezplot (z, [-2 1 -3 4]),где z = sym('x^2 + а^3'), считается, что а изменяется от -2 до 1, а х – от -3 до 4.

При помощи ezplot возможно также отображение параметрически заданных функций. Symbolic Math Toolbox предоставляет пользователю целый набор средств для визуализации символьных функций: ezmesh, ezmeshc, ezplot, ezplot3, ezpoiar, ezsurf, ezsurfс. Функция ezsurf отображает график символьной функции только для допустимых значений аргументов, остальные значения отбрасываются, что позволяет исследовать область определения функции двух переменных. Например, обращение

>> ezsurf('asin(x^y)',[0 6 -7 7])

приводит к графику, изображенному на рисунке:

 

     

Рисунок 3.4 – График функции f = asin(x^y)

 

4 УПРОЩЕНИЕ, ПРЕОБРАЗОВАНИЕ И ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЙ

 

Сложные алгебраические и тригонометрические выражения нередко могут быть приведены к эквивалентным путем упрощения. Symbolic Math Toolbox имеет ряд сервисных функций, предназначенных для различных преобразований символьных выражений. Пользователь может производить как стандартные операции над полиномами, так и использовать более общий алгоритм, предназначенный для упрощения выражений, которые содержат встроенные символьные функции.

Операции с полиномами реализуют четыре функции: collect, expand, homer и factor. Вычисление коэффициентов при степенях независимой переменной производится с использованием функции collect. Введем полином и отобразим eго в командном окне при помощи pretty.

>> p=sym('(x+a)^4+(x-1)^3-(x-a)^2-a*x+x-3');

>> pretty(p)

        3             4       2

x + (x-1) - ax + (a+x) - (a-x) - 3

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

>> pc=collect(p);

>> pretty(pc)

 

   3          2   2           3          2    4                      

  x (4a+1) + x (6a -4 ) + x(4a +a +4) - a  + a  + x  - 4

По умолчанию в качестве переменной выбирается х, однако можно было считать, что а — независимая переменная, а х входит в коэффициенты полинома, зависящего от а. Второй аргумент функции collect предназначен для указания переменной, при степенях которой следует найти коэффициенты

>> pca=collect(p,'a');

>> pretty(pca)

 

           3     3   2  2      4      3

  x + (x-1) + 4ax + a(6x-1) + a + a(4x + x) - x + x - 3

 

Функция expand представляет полином суммой степеней без приведения подобных слагаемых:

>> pe=expand(p);

>> pretty(pe)

   4       3     2 2   2       3     4   3   2   

  a + 4 a x + 6 a x - a + 4 a x + a x + x + x - 4 x + 4x - 4

Аргументом expand может быть не только полином, но и символьное выражение, содержащее тригонометрические, экспоненциальную и логарифмическую функции, например

>> f=sym('sin(arccos(3*x))+exp(2*log(x))');

>> fe=expand(f);

>> pretty(fe)

 

   2           2 1/2

  x  + (1 - 9 x )

 

Символьные полиномы разлагаются на множители функцией factor, если получающиеся множители имеют рациональные коэффициенты

>> p=sym('x^5+13*x^4+215/4*x^3+275/4*x^2-27/2*x-18');

>> pf=factor(p);

>> pretty(pf)

 

  (2x+1)(2x-1)(x+6)(x+4)(x+3)

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

                4

Представление числа в виде произведения простых чисел также выполняется при помощи factor:

>> syms a

>> a=sym('230010');

>> s=factor(a)

 

s =

 

2*3*5*11*17*41

Обратим внимание, что обращение

>> s1=factor(230010)

 

s1 =

 

     (2) (3) (5) (11) (17) (41)

выводит в командное окно аналогичный результат, но переменная s является символьной, a si — вещественной, поскольку для объектов класса sym метод factor переопределен.

Упрощение выражений общего вида производится при помощи функций simple и simplify, которые основаны на разных подходах. Функция simplify реализует мощный алгоритм упрощения выражений, содержащих как тригонометрические, экспоненциальную и логарифмическую функции, так и специальные: гипергеометрическую, Бесселя и гамма-функцию. Кроме того, simplify способна преобразовывать выражения, содержащие символьное возведение в степень, суммирование и интегрирование. Алгоритм, заложенный в simple, пытается получить выражение, которое представляется меньшим числом символов, чем исходное, последовательно применяя все функции упрощения Toolbox.

Функция subs позволяет произвести подстановку одного выражения в другое. В общем виде 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))

Заметим, что необязательно было производить подстановку сначала для а и затем для b. Одновременная замена переменных соответствующими выражениями требует указания массивов ячеек в фигурных скобках.

Последовательность команд

>>f=subs(f,{'a','b'},{'(exp(x)+exp(x))','(sin(x)+cos(x))'});

>> pretty(f)

обеспечивает тот же самый результат.

Подстановка вместо переменной ее числового значения приводит к вычислению символьной функции от значения аргумента, например:

>> f=sym('exp(x^3+2*x^2+x+5)');

>> q=subs(f,'x',1.1)

 

q =

 

    1.897732263918382e+004

Число можно заменить его символьным представлением и затем найти значение функции с произвольной точностью при помощи vpa:

>> q=subs(f,'x','1.1')

q =

18977.32263918380228952284447214

>> vpa(q,50)

 

ans =

18977.322639183802289522844472139578548917101383678

 

ЗАКЛЮЧЕНИЕ

 

В результате проведенного исследования были выполнены задачи:

 

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

В состав Matlab входит Symbolic Math Toolbox, предназначенный для вычислений в символьном виде. Преобразование выражений, разыскание аналитического решения задач линейной алгебры, дифференциального и интегрального исчисления, получение численного результата с любой точностью — вот далеко не полный перечень возможностей, предоставляемых данным Toolbox.

В целом Matlab – это уникальная коллекция реализаций современных численных методов для компьютеров, созданных за последние три десятка лет. Она вобрала в себя опыт, правила и методы математических вычислений, накопленные за тысячи лет развития математики.

Возможности Matlab весьма обширны, а по скорости выполнения задач система нередко превосходит своих конкурентов. Она применима для расчетов практически в любой области науки и техники и широко используется при математическом моделировании физических устройств и систем, относящихся к механике, в частности, к динамике, гидродинамике и аэродинамике, акустике и т.д.

Информация о работе Символьные вычисления в среде MatLab