Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lection_matlab_all / matlab_11

.pdf
Скачиваний:
23
Добавлен:
27.05.2015
Размер:
229.04 Кб
Скачать

После задания символьных переменных их можно без ограничений использовать в качестве элементов массивов и в вычислениях с массивами:

>>syms a b c d;

>>М=[а b; c d] М =

[а, b] [с, d]

>>inv(M)

ans =

[ d/(a*d-b*c), -b/(a*d-b*c) ]

[ - с / ( a*d - b*c ), a / (a*d - b*c) ]

>> det (M) → ans = a*d - b*c

Одной из часто используемых операций символьной математики является операция подстановки subs:

subs(S) — заменяет в символьном выражении s все переменные их символьными значениями, которые берутся из вычисляемой функции или рабочей области системы MATLAB;

subs (S,NEW) — заменяет все свободные символьные переменные в s из списка NEW;

subs (S, OLD, NEW) — заменяет OLD на NEW в символьном выражении s. При одинаковых размерах массивов OLD И NEW замена идет поэлементно. Если S и OLD — скаляры, a NEW — числовой массив или массив ячеек, то скалярырасширяются до массива результатов.

Примеры:

>>syms a b x у;

>>subs( х-у, у, 1 ) ans = х - 1

>>subs( sin(x) + cos(y), [х, у], [а, b] ) ans = sin(a) + cos(b)

>>subs( exp(a*x), a, -magic(3) )

ans =

[ exp(-8*x), exp(-x), exp(-6*x)]

[ exp(-3*x), exp(-5*x), exp(-7*x)] [ exp(-4*x), exp(-9*x), exp(-2*x)]

В отличие от современных систем символьной математики (Mathcad, Maple или Mathematica), MATLAB пока не способна выводить выражения и результаты их преобразований в естественной математической форме — с использованием общепринятых спецзнаков для отображения интегралов, сумм, произведений и т. д. Этот недостаток, однако, часто оборачивается достоинством — запись осуществляется в простом текстовом формате, облегчающем ввод выражений. Да и вывод символьных выражений в таком формате поддерживается практически всеми устройствами вывода.

Некоторые ограниченные текстовым форматом возможности близкого к математическому виду вывода обеспечивает функция pretty:

pretty(S) — дает вывод выражения s в формате, приближенном к математическому;

pretty(S, n) — аналогична предшествующей функции, но задает вывод в п позициях строки (по умолчанию n = 79).

В выражениях используются надстрочные показатели степени и знаки деления в виде горизонтальной черты. Однако для простых констант (например, 1/3) по-прежнему используется знак деления в виде наклонной черты.

C помощью функции ccode (S) можно представить выражения языка MATLAB S в форме, принятой в языке С.

Пример:

>>syms х у z

>>ccode( (1+х^2)/(у^2-z^2) ) → ans = (1.0+x*x)/(y*y-z*z);

>>S = х^2*у^3/z^4;

>>ccode(S) → ans = x*x*y*y*y/pow(z, 4.0);

Применение функции ccdode облегчает программистам создание библиотек программ на языке С и уменьшает вероятность ошибок в математических выражениях. Аналогично работает и функция fortran.

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

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

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

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

Пример:

>>digits( 6 )

>>pi → ans = 3.1416

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

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

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

Примеры:

>> vpa (exp(1), 50)

ans = 2.7182818284590450907955982984276488423347473144531

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

ans = [ 6.283185308, 2.718281828, .6931471806]

>> vpa pi

ans = 3.1415926535897932384626433832795

Соседние файлы в папке lection_matlab_all