Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 05.doc
Скачиваний:
8
Добавлен:
19.09.2019
Размер:
258.05 Кб
Скачать

7.2 Вычисления с использованием арифметики произвольной точности

MATLAB обычно ведет вычисления с числами, представленными в формате плавающей точки с двойной точностью. Это довольно высокая точность, обеспечивающая потребности практических вычислений в прикладных задачах. Однако, ряд задач теории чисел, численного кодирования и некоторых других требует выполнения вычислений вообще без какой – либо погрешности или со сколь угодно малой погрешностью. Такие вычисления не очень удачно называют арифметикой произвольной точности – правильнее говорить о точной арифметике.

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

R=vpa(S) – возвращает результат вычислений каждого элемента символьного массива S , используя арифметику произвольной точности с текущим числом цифр D , установленным функцией digits. Результат R имеет тип sym;

R=vpa(S,D) - возвращает результат вычислений каждого элемента массива S с текущим числом цифр D.

Примеры:

>>vpa(exp(1),50)

ans =

2.7182818284590455348848081484902650117874145507813

>>vpa([2*pi,exp(1),log(2)],10)

ans =

[ 6.283185308, 2.718281828, .6931471806]

Функция digits служит для установки числа цифр в числах арифметики произвольной точности. Она используется в одном из следующих вариантов:

digits – возвращает число значащих цифр в числах арифметики произвольной точности (по умолчанию 32);

digits(D) – устанавливает заданное число цифр D для арифметики произвольной точности.

Примеры вычисления числа π с 32 и 6 значащими цифрами:

>>digits

Digits = 32

>>vpa pi

ans =

3.1415926535897932384626433832795

>> digits 6

>> vpa pi

ans =

3.14159

7.3 Функции упрощения выражений – simplify, simple

Функция simplify(S) поэлементно упрощает символьные выражения массива S. Если упрощение невозможно, то возвращается исходное выражение. Примеры:

>>syms a b x

>>V=[sin(x)^2+cos(x)^2, log(a*b)]

V =

[ sin(x)^2+cos(x)^2, log(a*b)]

>>simplify(V)

ans =

[ 1, log(a*b)]

>>simplify((a^2-2*a*b+b^2)/(a-b))

ans =

a-b

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

Функция simple(S) выполняет различные упрощения символьных выражений массива S и выводит как промежуточные результаты, так и самый короткий результат. В другой форме – [R,HOW] = simple(S) – промежуточные результаты не выводятся. Результаты упрощений содержатся в векторе R , а в строковом векторе HOW указывается выполняемое преобразование. Следующие примеры иллюстрируют работу функции:

S R HOW

cos(x)^2+sin(x)^2 1 combine

2*cos(x)^2-sin(x)^2 3*cos(x)^2-1 simplify

cos(x)^2-sin(x)^2 cos(2*x) combine

[R,HOW]=simple(cos(x)^2-sin(x)^2)

R =

cos(2*x)

HOW =

combine

7.4 Функция расширения выражений – expand

Функция expand(S) расширяет символьные выражения массива S. Рациональные выражения она раскладывает на простые дроби, полиномы – на полиномиальные выражения и т.д. Функция работает со многими алгебраическими и тригонометрическими функциями. Примеры:

>>syms a b x;

>>S=[(x+2)*(x+3)*(x-4),sin(2*x)];

>>expand(S)

ans =

[ x^3+x^2-14*x-24, 2*sin(x)*cos(x)]

>>expand(sin(a+b))

ans =

sin(a)*cos(b)+cos(a)*sin(b)

>>expand((a+b)^3)

ans =

a^3+3*a^2*b+3*a*b^2+b^3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]