"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

где Inf символизирует бесконечность. Тот же результат получается при попытке вычислить логарифм от нуля.
Комплексные числа и комплексные функции
Система MATLAB осуществляет вычисления как с вещественными, так и с комплексными числами. При этом никакой специальной маркировки, то есть предварительного описания числовых переменных, не требуется. Это справедливо и для вещественных, и для комплексных переменных. Все они автоматически имеют тип double. Естественно, что для записи комплексного числа требуется в два раза больше памяти компьютера, чем для записи вещественного числа, поскольку по 8 байт памяти отводится как для действительной, так и для мнимой части комплексного числа.
Комплексные числа в системе MATLAB записываются следующим образом:
2 + 3i ; -6.789 + 0.834е-2 * i ; 4 - 2j
Отсюда видно, что для записи мнимой единицы зарезервированы (на выбор) буквы i или j.
Система MATLAB производит комплексные вычисления, когда явно задаются комплексные значения для переменных или аргументов функций. Однако возможны случаи, при которых система MATLAB сама выходит в область комплексных чисел без специального на то указания со стороны пользователя. Это происходит, когда для математической функции задается вещественный аргумент, не позволяющий получить вещественное значение функции. Например, при вычислении функции sqrt ( -1 ) получается следующий результат (см. рис. 1.9).
Ясно, что вычислить sqrt( -1 ), оставаясь в рамках только вещественных чисел, нельзя. Поэтому система MATLAB перешла к комплексным вычислениям и получила результат, равный i. При этом, как мы видим из рисунка, самой системой MATLAB для обозначения мнимой единицы используется именно буква i (а не]).
В случае, когда коэффициентом при мнимой единице является не число, а переменная, нельзя писать просто х + iy, а нужно обязательно использовать знак умножения, то есть х + i * у.
MATLAB 5.x. Вычисления, визуализация, программирование 17
•> MATLAB Command Window
File Edit Window help
D G» л I'1- в' '¦> ¦ Ш tg ?
» sqrt(-l) ans =
0+1.0000i
H J"X Рисунок 1.9
Почти все элементарные функции допускают вычисления с комплексными аргументами. Например:
res = sin( 2 + 3i ) * atan ( 4i ) / ( 1 - 6i ) res=
-1.8009 - 1.9190i
Научившись выполнять вычисления с комплексными функциями, мы для примера можем проверить знаменитую формулу Эйлера
ехр( i * х ) = cos ( x ) + i * sin( x )
Придавая вещественной переменной х различные значения, вычисляем выражения из правой и левой частей этой формулы. Например, при х = 1 имеем как для левого, так и для правого выражения одно и то же значение: 0.5403 + + 0.84151. Для х = 2 обе стороны этого равенства дают снова одинаковый результат -0.4161 + 0. 9093i, ит. д.
Но в очевидных случаях о комплексных аргументах не может быть и речи. Действительно, какие могут быть комплексные аргументы у функции mod (x, у), вычисляющей остаток от деления х на у? Поэтому появление сообщения об ошибке в следующем примере абсолютно предсказуемо (см. рис. 1.10).
'} MATLAB Command Window
L":1 У-' .^« ! -иЬ
•г - • е • з
»mod(7,2i)
??? Iirror using ¦--> mod
Рисунок 1.10
18 Глава 1. Числовые массивы в системе MATLAB
Специально для работы с комплексными числами предназначены следующие функции: abs (абсолютное значение комплексного числа), conj (комплексно сопряженное число), imag (мнимая часть комплексного числа), real (действительная часть комплексного числа), angle (аргумент комплексного числа), isreal («истина», если число действительное).
Комплексные числа можно складывать, вычитать, перемножать и делить точно так же, как и вещественные числа. Поэтому в отношении арифметических операций ничего нового для комплексных чисел (по сравнению с вещественными) сказать невозможно. То же самое относится и к операциям отношения «равно» и »не равно». Другое дело - остальные операции отношения и логические операции.
В математике операции сравнения комплексных чисел на «больше-меньше» не определены: нельзя сказать, что одно комплексное число, например, больше другого. Исходя из этого, можно было бы предположить, что такие операции сравнения для комплексных операндов запрещены. Однако разработчики системы MATLAB реализовали более «щадящий» вариант. Эти операции работают и с комплексными операндами, но их результат вырабатывается исходя только из действительных частей этих операндов. Например,
с = 2 + 3i; d = 2i; с > d ans =
1
с = 5i; с <= d ans =
1
с >= d ans =
1
Логические операции трактуют операнды как ложные, если они равны нулю. Если же у комплексного операнда не равна нулю хотя бы одна его часть (вещественная или мнимая), то такой комплексный операнд трактуется как истинный. Отсюда вытекают результаты следующих логических операций:
с = 2 + 3i; d = 2i;

ans =
О
с & d ans. =
1
MATLAB 5.x. Вычисления, визуализация, программирование ' 19
В итоге не требуется жесткого контроля со стороны пользователя за типом числовых операндов. В одном выражении разрешается смешивать вещественные и комплексные операнды. Все же если нужно в процессе вычислений формально определить, является ли переменная комплексной (речь идет о ее значении), то можно вызвать функцию
isreal( х )
возвращающую «истину» (то есть 1), если числовая переменная х не является комплексной, и »ложь» в противном случае.