Пример простейшего вычисления. Нажатие клавиш Shift-Enter является приказом системе Mathematica вычислить введенное выражение.
6^20 3656158440062976 |
Mathematica автоматически обрабатывает числа любого размера.
6^200 42682522381202740079697489151877373234298874535448942\ 94954790789351129295496197390190721393407570972968128\ 15466676129830954465240517595242384015591919845376 |
Вы можете работать в стандартной математической форме записи, используя палитры или специальные сочетания клавиш. Подробнее эти возможности будут описаны ниже.
6200 42682522381202740079697489151877373234298874535448942\ 94954790789351129295496197390190721393407570972968128\ 15466676129830954465240517595242384015591919845376 |
Вычисление собственных значений матрицы.
|
Решение уравнения в системе Mathematica. Корни уравнения есть функции зависящие от параметра.
|
Вычисление интеграла в системе Mathematica.
|
Двумерный график простой функции.
Plot[Sin[x]+Sin[1.6x],{x,0,40}] -Graphics- |
Трехмерный график функции. Пробел между x и y эквивалентен символу умножения. Опция PlotPoints->30 задает количество ячеек сетки.
Plot3D[Sin[x y],{x,0,4},{y,0,4},PlotPoints->30] -SurfaceGraphics- |
Вы можете воспользоваться большим количеством вычислительных возможностей системы Mathematica простым нажатием одной из кнопок в стандартных палитрах.
Эта команда генерирует матрицу размера 100x100, состоящую из случайных чисел. Точка с запятой в конце команды запрещает системе Mathematica вывод матрицы на экран.
m=Table[Random[ ],{100},{100}]; |
На большинстве компьютеров система Mathematica затрачивает меньше секунды на вычисление всех собственных значений этой матрицы и представление их модулей в виде графика.
ListPlot[Abs[Eigenvalues[m]]] -Graphics- |
1000! 40238726007709377354370243392300398571937486421071463\ 25437999104299385123986290205920442084869694048004799\ 88610197196058631666872994808558901323829669944590997\ 42450408707375991882362772718873251977950595099527612\ 08749754624970436014182780946464962910563938874378864\ 87337119181045825783647849977012476632889835955735432\ 51318532395846307555740911426241747434934755342864657\ 66116677973966688202912073791438537195882498081268678\ 38374559731746136085379534524221586593201928090878297\ 30843139284440328123155861103697680135730421616874760\ 96758713483120254785893207671691324484262361314125087\ 80208000261683151027341827977704784635868170164365024\ 15369139828126481021309276124489635992870511496497541\ 99093422215668325720808213331861168115536158365469840\ 46708975602900950537616475847728421889679646244945160\ 76535340819890138544248798495995331910172335555660213\ 94503997362807501378376153071277619268490343526252000\ 15888535147331611702103968175921510907788019393178114\ 19454525722386554146106289218796022383897147608850627\ 68629671466746975629112340824392081601537808898939645\ 18263243671616762179168909779911903754031274622289988\ 00519544441428201218736174599264295658174662830295557\ 02990243241531816172104658320367869061172601587835207\ 51516284225540265170483304226143974286933061690897968\ 48259012545832716822645806652676995865268227280707578\ 13918581788896522081643483448259932660433676601769996\ 12831860788386150279465955131156552036093988180612138\ 55860030143569452722420634463179746059468257310379008\ 40244324384656572450144028218852524709351906209290231\ 36493273497565513958720559654228749774011413346962715\ 42284586237738753823048386568897646192738381490014076\ 73104466402598994902222217659043399018860185665264850\ 61799702356193897017860040811889729918311021171229845\ 90164192106888438712185564612496079872290851929681937\ 23886426148396573822911231250241866493531439701374285\ 31926649875337218940694281434118520158014123344828015\ 05139969429015348307764456909907315243327828826986460\ 27898643211390835062170950025973898635542771967428222\ 48757586765752344220207573630569498825087968928162753\ 84886339690995982628095612145099487170124451646126037\ 90293091208890869420285106401821543994571568059418727\ 48998094254742173582401063677404595741785160829230135\ 35808184009699637252423056085590370062427124341690900\ 41536901059339838357779394109700277534720000000000000\ 00000000000000000000000000000000000000000000000000000\ 00000000000000000000000000000000000000000000000000000\ 00000000000000000000000000000000000000000000000000000\ 00000000000000000000000000000000000000000000000000000\ 000000000000000000000000 |
Mathematica способна проводить вычисления с любой заданной точностью. Здесь приведено значение числа pi, вычисленное с 500 знаками.
3.14159265358979323846264338327950288419716939937510\ 5820974944592307816406286208998628034825342117067982\ 1480865132823066470938446095505822317253594081284811\ 1745028410270193852110555964462294895493038196442881\ 0975665933446128475648233786783165271201909145648566\ 9234603486104543266482133936072602491412737245870066\ 0631558817488152092096282925409171536436789259036001\ 1330530548820466521384146951941511609433057270365759\ 5919530921861173819326117931051185480744623799627495\ 673518857527248912279381830119491 |
Mathematica легко справляется с алгебраическими преобразованиями, которые заняли бы годы ручной работы.
Разложение полинома на множители.
Factor[x99 + y99]
|
Система Mathematica использует изощренные алгоритмы для упрощения выражений. Здесь % заменяет собой результат предыдущего вычисления.
Simplify[%] x99 + y99 |
В качестве примера здесь приведено одно вычисление из теории чисел; при больших значениях аргумента это вычисление было впервые выполнено в системе Mathematica всего за несколько минут.
PartitionsP[8000] 783602643515683494905931450133645997190107693529858\ 6433111860020941782776452445099\ 0388402844164 |
Mathematica автоматически выбирает соответствующие алгоритмы для каждого вычисления.
FindRoot[Cos[x]==x+Log[x],{x,1}] {x->0.840619} |
NIntegrate[Log[x+Sin[x]],{x,0,2}] 0.555889 |
NSolve[x^5-6x^3+8x+1==0,x] {{x->-2.05411},{x->-1.2915},{x->-0.126515}, {x->1.55053},{x->1.9216}} |
Mathematica использует современные алгоритмы для разложения на множители целых чисел. Результат приведен в виде списка сомножителей и соответствующих показателей степеней.
FactorInteger[2^105-1] {{7,2},{31,1},{71,1},{127,1},{151,1},{337,1}, {29191,1},{106681,1},{122921,1},{152041,1}} |
Эта команда генерирует двумерную таблицу.
m=Table[2^i + x^j,{i,3},{j,4}] {{2+x,2+x2,2+x3,2+x4},{4+x,4+x2,4+x3,4+x4}, {8+x,8+x2,8+x3,8+x4}} |
Представление таблицы в форме матрицы.
MatrixForm[m] |
Вычисление ядра матрицы.
NullSpace[m] {{x+x2,-1-x-x2,0,1},{x,-1-x,1,0}} |
Mathematica может решать дифференциальные уравнения как численно, так и в аналитической форме.
Ниже Mathematica численно решает нелинейное дифференциальное уравнение. Ответ - интерполяционная функция, которая представляет решение в неявной форме.
NDSolve[{x''[t]+x[t]^3==Sin[t],x[0]==x'[0]==0},x, {t,0,50}] {{x->InterpolatingFunction[{{0.,50.}},<>]}} |
Параметрический график решения. Команда /. означает, что Mathematica должна подставить предыдущее решение вместо x[t].
ParametricPlot[Evaluate[{x[t],x'[t]}/.%],{t,0,50}] -Graphics- |
LegendreQ[3, x]
|
Система Mathematica может вычислять значения специальных функций с любыми параметрами и с любой точностью.
N[MathieuC[1+I,2 I,3],40] 3.92513113741251986434976461681583792036+1. 898823911543347241105274797143911577679 I |
![]() |
![]() |
![]() |
Система Mathematica может вычислять также конечные и бесконечные суммы и произведения.
![]() |
Большое количество подобных примеров содержится в демонстрационном документе Интегралы, суммы и произведения из раздела Демонстрация возможностей системы Mathematica 3.0.
Mathematica может решать широкий класс обыкновенных дифференциальных уравнений и уравнений в частных производных.
DSolve[y''[x]+y'[x]+x y[x]==0, y[x], x]
|
Встроенные алгоритмы системы Математика способны справиться с широким спектром математических задач.
![]() |
![]() True |
TrigReduce[Cos[x]4]
|
Нахождение миллиардного простого числа при совместном использовании встроенных таблиц и алгоритмов.
Prime[109] 22801763489 |
Вычисление собственных чисел матрицы.
Eigenvalues[{{3, 1}, {2, 6}}] |
Система Mathematica способна вычислять собственные значения даже тогда, когда элементы матрицы являются символьными параметрами. В результате получается компактное представление собственных чисел для любого значения b.
v = Eigenvalues[{{3, 1}, {2, b}}] |
Использование предыдущего результата для построения графиков функций, задающих собственные значения, в зависимости от параметра.
Plot[Evaluate[v], {b, -10, 10}] -Graphics- |
Вы можете найти значение b, при котором первое собственное значение равно нулю...
Solve[First[v] == 0, b] |
или найти интеграл от 0 до с от функции, задающей первое собственное значение.
|
Теперь можно найти частичную сумму ряда Тейлора функции, являющейся результатом предыдущего интегрирования.
Series[%, {c, 0, 5}] |
Численное нахождение корня уравнения на заданном отрезке.
FindRoot[int==1+c,{c,1}] {c->-0.554408} |
Простота работаты с формулами также важна при обработке данных.
Создание списка первых сорока простых чисел.
Table[Prime[i], {i, 40}] {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61, 67,71,73,79,83,89,97,101,103,107,109,113,127,131,137, 139,149,151,157,163,167,173} |
Приближение аппроксимирующей функцией.
Fit[%, {Log[x],x,x2}, x] 3.91287769352273429 x+0.0244902554054522703 x2-5.98809188219891908 Log[x] |
Вычисление суммы первых сорока простых чисел с применением аппроксимирующей функции.
Sum[%, {x, 1, 40}] 3090.16 |
Тот же результат, полученный точно.
Sum[Prime[i],{i,1,40}] 3087 |
Следующая команда объединяет в себе предыдущие и строит график разности между точными и приближенными значениями сумм простых чисел в зависимости от количества слагаемых.
-Graphics- |
Чтение данных из файла image.dat. Точка с запятой после команды запрещает системе Mathematica выводить данные на экран.
data=ReadList["image.dat",Number,RecordLists->True]; |
Визуализация данных в виде графика плотности.
ListDensityPlot[data,Mesh->False, FrameTicks->None]; |
Вы можете применять к данным любую функцию системы Mathematica.
ListDensityPlot[Exp[Sqrt[data]],Mesh->False, FrameTicks->None,ColorFunction->Hue]; |
Здесь осуществлен последовательный сдвиг данных вправо.
ListDensityPlot[MapIndexed[RotateRight,data], Mesh->False,FrameTicks->None, ColorFunction->Hue]; |
Представление данных в виде контурного графика.
ListContourPlot[data,ContourShading->False, Contours->6,FrameTicks->None]; |
График плотности данных с сохранивших только несколько Фурье-компонент.
ListDensityPlot[Re[InverseFourier[ MapIndexed[If[Max[#2]<60,#,0]&,Fourier[data],{2}]]], Mesh->False,FrameTicks->None];
|
Распределение градаций серого в данных.
ListPlot[Sort[Flatten[data]]]; |
Представление данных в виде трехмерного графика.
ListPlot3D[data,ColorFunction->Hue,Mesh->False, ViewPoint->{0.2,-2,5}];
|
Считывание всех элементов словаря.
data=ReadList["dictionary.dat",String]; |
Выбор первых 40 слов в словаре.
Take[data,40] {"a","AAA","AAAS","Aarhus","Aaron","ABA","Ababa", "aback","abacus","abalone","abandon","abase","abash", "abate","abbas","abbe","abbey","abbot","Abbott", "abbreviate","abc","abdicate","abdomen","abdominal", "abduct","Abe","abed","Abel","Abelian","Abelson", "Aberdeen","Abernathy","aberrant","aberrate", "abet","abetted","abetting","abeyance","abeyant", "abhorred"} |
Выбор слов, которые являются палиндромами и содержат более двух букв.
Select[data,(#==StringReverse[#] && StringLength[#]>2)&] {"AAA","ABA","ala","AMA","ana","bib","bob","bub","CDC", "civic","dad","deed","did","DOD","dud","eke","ere", "eve","ewe","eye","gag","gig","gog","huh","iii", "level","madam","minim","mum","non","noon","nun","pap", "PDP","peep","pep","pip","poop","pop","pup","radar", "refer","rever","rotor","sis","s's","tat","teet", "tenet","tit","TNT","toot","tot","wow"} |
Эта команда находит длины всех слов в словаре.
wordLengths=Map[StringLength,data]; |
Подсчет общего числа слов равной длины.
Table[Count[wordLengths,i],{i,Max[wordLengths]}] {26,131,775,2152,3093,3793,3929,3484,2969,1883,1052, 542,260,102,39,15,6,4,0,1,2,1} |
График распределения количества слов в словаре по длинам.
ListPlot[%,PlotStyle->PointSize[0.02]]; |
Трехмерный параметрический график с автоматическим выбором большинства опций.
![]() -Graphics3D- |
Тот же график с заданием ряда специфических опций.
![]() -Graphics3D- |
Эта команда генерирует длинный список графических примитивов, изображающих точку.
![]() |
Здесь из списка выбирается пять элементов.
Take[%,5]
|
График, соответствующий списку примитивов.
Show[Graphics[gr, Frame-> True]] -Graphics- |
Создание списка трехмерных примитивов, изображающих куб.
gr=Flatten[Table[If[Mod[Multinomial[x,y,z],2]==1, Cuboid[1.2{x,y,-z}],{}],{x,0,15}, {y,0,15},{z,0,15}]]; |
Выбор первых пяти элементов в списке.
Take[%,5] {Cuboid[{0,0,0}], Cuboid[{0,0,-1.2}], Cuboid[{0,0,-2.4}] ,Cuboid[{0,0,-3.6}], Cuboid[{0,0,-4.8}]} |
Эта команда рисует график, соответствующий списку примитивов.
Show[Graphics3D[gr]] - Graphics3D - |
Чтобы увидеть анимацию, щелкните мышью по графику.
Это еще один пример анимации.
Эта команда производит звук с заданной формой волны.
![]() -Sound-
|
Это обычный текст. Он может быть набран любым шрифтом и иметь любую форму, размер, цвет и т.д. Вы можете также вставлять в текст специальные символы типа , а также формулы
.
Система Mathematica упрощает создание таблиц и массивов.
![]() |
Mathematica позволяет легко выравнивать и позиционировать текст.
Подобно другим объектам в системе Mathematica ячейки в документе типа notebook и весь документ в целом в конечном счете - набор команд языка системы Mathematica. Используя стандартный интерфейс системы, Вы можете при помощи команды Show Expression увидеть внутреннее представление любой ячейки документа.
Пример типичной ячейки в документе системы Mathematica.
Это пример ячейки в документе notebook. |
Это внутреннее представление ячейки.
Cell["Это пример ячейки в документе notebook.", "Text", CellFrame->True, FontWeight->"Bold", FontSlant->"Italic", Background->RGBColor[0, 1, 1], CellTags->"T.8"] |
Эта команда, создающая три ячейки в стиле заголовка подраздела.
Do[StylePrint[StringJoin["Заголовок", ToString[i]], "Subsubsection"],{i,3}] |
Палитры и кнопки реализуют простой и полностью настраиваемый "мышиный" (point-and-click) интерфейс системы Mathematica.
Mathematica поставляется с несколькими стандартными палитрами.
Это часть палитры
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Палитры являются расширением Вашей клавиатуры.
Если в такой палитре нажать кнопку , то символ
вставится в ноутбук.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
В палитре символ означает позицию, в которую нужно вставить какое-либо выражение.
![]() |
![]() |
|
![]() |
![]() |
Нажатие кнопки вносит выделенное выражение под знак радикала.
Создать свою собственную палитру очень легко.
С помощью команды Create Table/Matrix/Palette в меню Input можно сделать свою палитру.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Можно создавать свои палитры для ввода любой функции или оператора
![]() |
![]() |
![]() |
При нажатии этой кнопки выделенное выражение разлагается на множители.
Ввод интеграла с использованием только обычных символов клавиатуры.
Integrate[Log[1+x]/Sqrt[x],x]
|
Тот же самый интеграл, введенный в естественной форме. Ввод в такой форме осуществляется с помощью палитр или непосредственно с клавиатуры.
![]() |
Mathematica всегда позволяет Вам отредактировать полученный результат и использовать его снова как исходное выражение.
![]() |
Система Mathematica может выводить результат в традиционном для математической литературе виде. Следует учесть, что запись в стандартной форме (StandardForm) абсолютно точна и однозначна, в то время как традиционная форма требует некоторой эвристики для интерпретации.
Вычисление интеграла и вывод результата в традиционной форме (TraditionalForm).
![]() |
Mathematica способна создавать высококачественные формулы любой сложности и величины.
![]() |
Большое количество математических формул, созданных в системе Mathematica, содержится в Галерее формул из раздела Демонстрация возможностей системы Mathematica 3.0.
Система Mathematica легко работает с абстрактной системой обозначений.
![]() |
Система Mathematica поддерживает свыше 700 специальных символов посредством своих новых шрифтов, оптимизированных как для печати, так и для вывода на дисплей.
Стандартная система Mathematica состоит из двух частей:
![]()
|
Документы типа notebook системы Mathematica полностью совместимы со всеми компьютерными системами.
Работая с одним документом notebook, Вы можете запускать несколько копий ядра системы Mathematica, причем как на локальном, так и на удаленных компьютерах.
Вы можете экспортировать графику и формулы в другие программам в форматах EPS, GIF и т.д., а затем манипулировать с ними.
Документы notebook системы Mathematica могут целиком экспортироваться в форматы HTML, TEX и RTF.
Выбор пункта Show Expression в меню Format позволяет увидеть текстовую форму выражений документа.
Это типичная ячейка в документе типа notebook
|
А это - то, что Вы получите, когда копируете интеграл во внешнее текстовое приложение типа программы работы с электронной почтой.
\!\(\[Integral]\(Log[1 + \[Xi]]\/\@\[Xi]\)\ [DifferentialD]\[Xi]\) |
Вывод списка всех файлов типа notebook в Вашем корневом каталоге.
files=FileNames["*.nb", $HomeDirectory] |
Список элементов.
{a,b,c} List[a,b,c] |
Алгебраическое выражение.
![]() Plus[Power[x,2],Sqrt[x]] |
Уравнение.
x==Sin[x] Equal[x,Sin[x]] |
Логическое выражение.
p&&!q And[p,Not[q]] |
Команда.
![]() AddTo[Part[m,1],a] |
Графика.
![]() Graphics[{Circle[{1,0},2],Circle[{-1,0},2]}] |
Абстрактная математическая запись.
![]() Tilde[CirclePlus[a,b], Subscript[c,Infinity]] |
Кнопка.
![]() ButtonBox["Press here"] |
Ячейка в документе системы Mathematica, содержащая текст.
A cell containing text Cell["A cell containing text","Text"] |
Химическая формула.
HNO3
Chemical[{Hydrogen,1},{Nitrogen,1},{Oxygen,3}] |
Электрическая цепь.
![]() Circuit[{Resistor["R"],Capacitor["C"]}] |
Команда /. служит сигналом системе Mathematica применить подстановку b - > 1 + x.
{a,b,c,d}/.b->1+x {a,1+x,c,d} |
Каждый символ x_ и y_ замещает любое выражение, так что шаблон x _ + y_ обозначает собой сумму любых двух объектов.
{a + b, c + d, a + c} /. x_ + y_ -> x2 + y2 {a2 + b2, c2 + d2, a2 + c2} |
{a + b, c + d, a + c} /. a + x_ -> x3 {b3, c + d, c3} |
Это стандартный способ определения функции для всех значений x.
![]() |
Изменение общего определения функции при фиксированном значении аргумента.
f[0]:=e |
Пример использования определенной выше функции f.
f[6]+f[a+b]+f[0]
|
Сброс определения функции f.
Clear[f] |
Определение функции g, аргументом которой является список, состоящий из двух элементов.
g[{x_,y_}]:=x+y g[{4,a b}] 4+a b Clear[g] |
Определение функции, имеющей смысл площади круга, аргументом которой является объект Circle.
![]() area[Circle[{2,3},u]]
|
Осуществление преобразования логического правила.
reduce[p_ && q_ || p_]:=p |
Mathematica объединяет в себе самые разные методы программирования, что позволяет Вам всегда применять в данный момент наиболее подходящие из них.
z=a; Do[Print[z*=z+i],{i,3}] a (1+a) a (1+a) (2+a (1+a)) a (1+a) (2+a (1+a)) (3+a (1+a) (2+a (1+a))) Clear[z] |
Многие операции автоматически работают со списками.
1 + {a, b, c}2 {1 + a2, 1 + b2, 1 + c2} |
Table[ij, {i, 4}, {j, i}] {{1},{2,4},{3,9,27},{4,16,64,256}} |
Объединение вложенных списков.
Flatten[%] {1,2,4,3,9,27,4,16,64,256} |
Разбиение предыдущего списка на подмножества длины 2.
Partition[%,2] {{1,2},{4,3},{9,27},{4,16},{64,256}} |
NestList[f,x,4] {x,f[x],f[f[x]],f[f[f[x]]],f[f[f[f[x]]]]} |
Здесь символ # является областью, замещаемой аргументом функции.
NestList[(1 + #)2 &, x, 3] |
p[x_+y_]:=p[x]+p[y] p[a+b+c] p[a]+p[b]+p[c] |
Символ _ замещает одно единственное выражение; символ __ замещает любую последовательность выражений.
s[{x__,a_,y__},a_]:={a,x,x,y,y} s[{1,2,3,4,5,6},4] {4,1,2,3,1,2,3,5,6,5,6} Clear[p, s] |
Задание трех свойств объекта h.
h/:h[x_]+h[y_]:=hplus[x,y] h/:p[h[x_],x_]:=hp[x] h/:f_[h[x_]]:=fh[f,x] |
Пример использования данного выше определения для объекта h.
h[a]+h[b]+f[h[r]]+h[h[x]] fh[f,r]+fh[h,x]+hplus[a,b] Clear[h] |
![]() |
Наиболее мощные операторы системы Mathematica объединяют в себе различные методы программирования.
Position[{1,2,3,4,5}/2,_Integer] {{2},{4}} |
MapIndexed[Power,{a,b,c,d}] {{a}, {b2}, {c3}, {d4}} |
![]() {100000,50000,25000,12500,6250,3125,3125} |
ReplaceList[{a,b,c,d,e},{x__,y__}->{{x},{y}}] {{{a},{b,c,d,e}},{{a,b},{c,d,e}},{{a,b,c},{d,e}}, {{a,b,c,d},{e}}} |
Дюжина способов определить факториал.
f=Factorial f[n_] := n! f[n_] := Gamma[n-1] f[n_] := n f[n-1] ; f[1] = 1 f[n_] := Product[i, {i, n}] f[n_] := Module[{t = 1}, Do[t = t*i, {i, n}]; t] f[n_] := Module[{t = 1, i}, For[i =1, i <=n, i++, t *= i]; t] f[n_] := Apply[Times, Range[n]] f[n_] := Fold[Times, 1, Range[n]] f[n_] := If[n == 1, 1, n f[n-1]] f = If[#1 == 1, 1, #1 #0[#1 - 1]]& f[n_] := Fold[#2[#1]&, 1, Array[Function[t, #t]&, n]] |
Эта команда сбрасывает значения, приписанные f.
Clear[f] |
Эта программа моделирует одномерное случайное блуждание.
RandomWalk[n_]:=NestList[(#+(-1) ^Random[Integer])&,0,n]
|
График, демонстрирующий первые 200 шагов случайного блуждания.
ListPlot[RandomWalk[200],PlotJoined->True];
|
Ясность программ системы Mathematica позволяет легко модифицировать их для более общих случаев.
Эта программа моделирует случайное блуждание в пространстве размерности d.
RandomWalk[n_,d_]:=NestList[(#+(-1) ^Table[Random[Integer],{d}])&,Table[0,{d}],n] |
График трехмерного случайного блуждания.
Show[Graphics3D[Line[RandomWalk[1000,3]]]];
|
Это программа для моделирования одного шага эволюции клеточной системы.
LifeStep[a_List] := MapThread[If[(#1 == 1 && #2 == 4) || #2 == 3, 1, 0]&, {a, Sum[RotateLeft[a, {i, j}], {i, -1, 1}, {j, -1, 1}]}, 2] |
А это пример оптимизированной программы, которая оперирует со списками живых клеток.
LifeStep[list_] := With[{u=Split[Sort[Flatten[Outer[Plus,list,N9,1] ,1]]]}, Union[Cases[u,{x_,_,_}->x], Intersection[Cases [u,{x_,_,_,_}->x],list]]] N9=Flatten[Array[List,{3, 3},-1], 1] ; |
Система Mathematica позволяет легко создавать программы, состоящие из нескольких компонент.
Здесь приведены составляющие программы, моделирующей поведение клеточных систем
CenterList[n_Integer]:=ReplacePart[Table[0, {n}], 1, Ceiling[n/2]] ElementaryRule [num_Integer] := IntegerDigits[num, 2, 8] CAStep[rule_List, a_List] :=rule[[ 8 - (RotateLeft[a] + 2 (a + 2 RotateRight[a])) ]] CAEvolveList[rule_List, init_List, t_Integer] :=NestList[CAStep[rule, #]&, init, t] CAGraphics[history_List] :=Graphics[Raster[1 - Reverse[history]], AspectRatio -> Automatic] |
Пример работы программы.
Show[CAGraphics[ CAEvolveList[ElementaryRule[30], CenterList[101], 50]] ];
|
Mathematica имеет компилятор для оптимизации программ, которые работают со списками и числами.
CAStep = Compile[{{rule, _Integer, 1}, {a, _Integer,1}}, rule[[ 8 - (RotateLeft[a] + 2 (a + 2 RotateRight[a])) ]]] |
Программы системы Mathematica зачастую являются прямой трансляцией теоретических положений справочной литературы.
Здесь вводятся необходимые определения для расчета импеданса электрической цепи.
![]() |
Использование данных выше определений.
![]() |
Пример электрической схемы, заданной при помощи символической спецификации.
![]() |
Обе эти программы аппроксимируют Золотое Сечение с точностью до k знаков.
![]() {1.6180339887498948482,1.6180339887498948482, 1.6180339887498948482} |
Эта программа соответствует недавно открытой приближенной формуле для нахождения количества простых чисел, меньших заданного числа.
![]() |
Сравнение приближенного результата с точным значением, полученным с помощью встроенной функции PrimePi.
![]() {168, 168} |
Это программа, отвечающая модели Kohmoto для спектра энергии квантовой частицы в одномерном квазипериодическом потенциале.
FareySequence[q_]:=Apply[Union,Array[Range[#-1]/#&,q]]
|
Пример работы программы.
Show[Graphics[SpectrumData /@ FareySequence[20]]] -Graphics- |
Пример ввода/вывода в стандартном интерфейсе системы Mathematica.
![]() |
Вы можете также обращаться к ядру системы Mathematica непосредственно с текстового терминала.
Integrate[Sqrt[Log[x]], x]
1 -(-) Sqrt[Pi] Erfi[Sqrt[Log[x]]] + x Sqrt[Log[x]] 2 |
Это код языка C для посылки некоторого выражения из внешней программы в систему Mathematica.
/* Integrate[Sqrt[Log[x]], x] */ MLPutFunction( stdlink, "EvaluatePacket", 1); MLPutFunction( stdlink, "Integrate", 2); MLPutFunction( stdlink, "Sqrt", 1); MLPutFunction( stdlink, "Log", 1); MLPutSymbol( stdlink, "x", 1); MLPutSymbol( stdlink, "x"); MLEndPacket( stdlink); |
Эта команда подключает компилируемую внешнюю программу C, которая выполняет поразрядные операции с целыми числами.
link=Install["bitops"]; |
Выполнение внешней функции BitAnd.
BitAnd[22222,33333] 516 |
Отключение внешней программы.
Uninstall[link]; |
Microsoft Word в качестве интерфейса системы Mathematica.
Web-страница, устанавливающая связь с системой Mathematica.
Microsoft Excel, связанный с системой Mathematica.
MathLink позволяет устанавливать шаблоны, чтобы точно определить, каким образом должны вызваться внешние программы. Это определяет связь с библиотекой подпрограмм языка C.
:Begin: :Function: anneal :Pattern: TSPTour[r:{{_, _}..}] :Arguments: {First[Transpose[r]], Last[Transpose[r]], Length[r], Range[Length[r]]} :ArgumentTypes: {RealList, RealList, Integer, IntegerList} :ReturnType: Manual :End: |
Создание в системе Mathematica трехмерного графика.
![]() |
Это изображение было получено с использованием возможностей внешнего графического редактора, в который оно было передано из системы Mathematica через протокол MathLink.
Вы можете использовать MathLink, чтобы управлять интерфейсом системы Mathematica из ее ядра.
Эта команда сообщает интерфейсу системы, что надо открыть окно, содержащее палитру цветов.
FrontEndTokenExecute["ColorSelectorDialog"] |
На большинстве компьютерных систем (обычно исключение составляет Macintosh) эта команда запускает дополнительное ядро системы Mathematica на Вашем компьютере.
link=LinkLaunch["MathKernel -mathlink"]; |
Команда чтения данных из дополнительного ядра.
LinkRead[link] InputNamePacket["In[1]:= "] |
Запись команды в дополнительное ядро.
LinkWrite[link,Unevaluated[$SessionID]] |
Считывание $SessionID из вспомогательного ядра.
LinkRead[link] ReturnPacket[20002811790628968292] |
Значение $SessionID в Вашем главном ядре будет отличаться.
$SessionID 20000841219624707995 |
Закрытие дополнительного ядра.
LinkClose[link]; |
Системе Mathematica посвящены сотни книг на более чем десяти языках.
Существуют специальные периодические издания, посвященные системе Mathematica.
Имеется растущая библиотека профессиональных прикладных программ, базирующихся на системе Mathematica.
Сотни учебных курсов были разработаны с использованием системы Mathematica.
Wolfram Research's MathSource - колоссальный архив материалов, относящихся к системе Mathematica.
При разработке и эксплуатации самых разнообразных изделий используется система Mathematica.
Web-представительство http://www.wolfram.com/ разработчика системы Mathematica компании Wolfram Research Inc. содержит тысячи страниц материала и постоянно обновляется.
MathCAD
Предисловие
Миллионы людей занимаются математическими расчетами, иногда в силу влечения к таинствам математики и ее внутренней красоте, а чаще в силу профессиональной или иной необходимости, не говоря уже об учебе. Ни одна серьезная разработка в любой отрасли науки и производства не обходится без трудоемких математических расчетов.
Вначале эти расчеты выполнялись на программируемых микрокалькуляторах [1] или с помощью программ на универсальных языках программирования, таких, как Бейсик [2] или Паскаль. Постепенно для облегчения расчетов ' были созданы специальные математические компьютерные системы [3—14].
Настоящая книга посвящена одной из самых мощных и эффективных математических систем — MathCAD 7.0. Она существует в двух вариантах:
стандартном MathCAD 7.0 Standard и профессиональном MathCAD 7.0 Professional Edition (PRO). Стандартная версия ориентирована на большинство пользователей, а профессиональная — на профессионалов, серьезно занимающихся математическими расчетами.
Системы MathCAD традиционно занимают особое место среди множества таких систем (Eureka, Mercury, MatLAB, Mathematica 2 и 3, Maple V R3 и R4 и др.) и по праву могут называться самыми современными, универсальными и массовыми математическими системами. Они позволяют выполнять как численные, так и аналитические (символьные) вычисления, имеют чрезвычайно удобный математико-ориентированный интерфейс и прекрасные средства графики [6, 15,16]. Системы начиная с версии 3.9 работают под управлением графических операционных систем Windows 3.1/3.11 [16,17], а новая версия MathCAD 7.0 - под Windows 95/NT.
Системы класса MathCAD предоставляют уже привычные, мощные, удобные и наглядные средства описания алгоритмов решения математических задач. Преподаватели и студенты вузов получили возможность подготовки с их помощью наглядных и красочных обучающих программ в виде электронных книг с действующими в реальном времени примерами. Новейшая система MathCAD PLUS 7.0 PRO настолько гибка и универсальна, что может оказать неоценимую помощь в решении математических задач как школьнику, постигающему азы математики, так и академику, работавшему со сложнейшими научными проблемами. Система имеет достаточные возможности для выполнения наиболее массовых символьных (аналитических) вычислений и преобразований [18, 19].
Более 600 000 только зарегистрированных пользователей владеют ранними версиями системы MathCAD во всем мире, а с выходом новых версии системы это число наверняка заметно увеличится. Ну а незарегистрированных пользователей, пожалуй, еще больше. О системе с такой вычислительной мощью, как у MathCAD 6.0/7.0 PRO, еще пару десятков лет назад не могли мечтать даже разработчики уникальной научной и космической аппаратуры. Но эта мощь нисколько не затрудняет удивительно простое и интуитивно предсказуемое общение с системой на общепринятом языке математических формул и графиков.
Исключительно велика роль систем класса MathCAD в образовании. Облегчая решение сложных математических задач, система снимает психологический барьер при изучении математики, делая его интересным и достаточно простым. Грамотное применение систем в учебном процессе обеспечивает повышение фундаментальности математического и технического образования, содействует подлинной интеграции процесса образования в нашей стране и наиболее развитых западных странах, где подобные системы применяются уже давно. Новые версии MathCAD позволяют готовить электронные уроки и книги с использованием новейших средств мультимедиа, включая гипертекстовые и гипермедиа-ссылки, изысканные графики (в том числе анимационные), фрагменты видеофильмов и звуковое сопровождение.
Шестая версия системы MathCAD русифицирована и получила широкое распространение в нашей стране, тогда как версия системы MathCAD 7.0 PRO пока существует только в англоязычном варианте, что, однако, вовсе не мешает готовить с ее помощью документы на русском языке.
В настоящее время существует острый дефицит в литературе по системам класса MathCAD. А по новой версии MathCAD 7.0 PRO, появившейся в середине 1997 г., книг у нас вообще не издавалось, хотя она резко отличается от предшествующей версии 6.0 [6, 14].
Данная книга восполняет этот пробел. Она продолжает серию справочных книг [1—6] и обзоров [7—13] автора, посвященных современным средствам автоматизации математических расчетов. В книге впервые в нашей литературе описаны оба варианта новейшей оригинальной (англоязычной) версии системы MathCAD 7.0.
Справочник написан в том же стиле, что и другие справочники автора, посвященные применению математических систем. Из них взяты и некоторые примеры для настоящей книги. Изложенный в ней материал является результатом многолетней работы автора со всеми версиями системы MathCAD, начиная от версий под MS-DOS [5]. При этом книга составлена так, что пользователи, работающие с более ранними версиями системы (MathCAD 3.0/4.0/5.0/PLUS 5.0/6.0/PLUS 6.0), получат не мало информации и о них, поскольку новые возможности седьмой версии оговорены особо.
Что в книге нового
Приступая к работе, автор вначале наивно полагал, что все сведется в основном к замене слов MathCAD 6.0 на MathCAD 7.0 в его недавно изданной книге [б], разве что придется сделать небольшие и непринципиальные дополнения. Но, увы (а может, к счастью?), этот номер не прошел! Версия MathCAD 6.0 подверглась настолько серьезной переработке, что даже рубрикацию книги пришлось серьезно изменить.
В справочник вошли новые материалы об интерфейсе пользователя системы, новых возможностях символьной математики, описаны центр информационных ресурсов MathCAD 7.0 PRO, системный интегратор MathConnex, язык его программирования Connex Script и др. Тем не менее опыт подготовки предыдущей книги [6] позволил в сжатые сроки создать данное руководство по версии MathCAD.
Итак, перед вами книга, посвященная версии 7.0 популярной системы MathCAD. Автор постарался написать ее так, чтобы она была полезна и владельцам ранних версий этой системы под Windows. Но различие в пользовательском интерфейсе новой и прежних версий настолько велико, что обучение работе со старыми версиями по данной книге едва ли целесообразно. Лучше для этого взять книгу по предыдущей версии [б]. Однако на уровне описания документов и примеров применения новая версия MathCAD мало чем отличается от старой (MathCAD 6.0).
Адреса для общения
Книга написана в рамках инициативных работ кафедры физической и информационной электроники Смоленского государственного педагогического института (СГПИ) и научно-исследовательской части Смоленской военной академии. Автор будет признателен всем читателям и организациям за отзывы о книге и пожелания. Их следует направлять по адресу издательства "СК ПРЕСС" или по месту работы автора: 214000, Смоленск, ул. Пржевальского 4, СГПИ.
О шрифтовых выделениях в книге
Для облегчения чтения книги в ней используются следующие шрифтовые выделения:
• обозначения скалярных величин (х, X, у, z и т. д.) и математические формулы в описании алгоритмов и математических методов даются курсивом;
• обозначения векторов, матриц (V, М, m и т. д.) и операций управления системой выделяются полужирным прямым шрифтом;
• имена встроенных функций и системных переменных [sin(x), ln(x), TOL и т. д.] выделяются также полужирным прямым шрифтом;
• полужирным прямым шрифтом выделяются и названия операций (только на языке оригинала), позиций подменю главного меню и основных кнопок управления в диалоговых и информационных окнах;
• примеры записей в документах MathCAD даются прямым шрифтом без какого-либо выделения.
Предупреждения
Автор и издательство сделали все возможное, чтобы материал книги был доступен, актуален, объективен и точен. Однако компьютерная алгебра — еще новое направление, терминология которого пока не устоялась, а это может привести к погрешностям и неточностям перевода отдельных терминов. Кроме того, MathCAD 7.0 PRO очень мощная и обширная система и нет гарантии того, что при подготовке книги в ее описании что-то не было упущено, так как эта книга не является прямым переводом фирменной документации по системе, а представляет собой авторское произведение.
В связи с этим автор и издательство предупреждают о том, что они не несут никакой ответственности за неправильное истолкование каких-либо терминов и положений, относящихся к системе MathCAD, и за невозможность ее применения при решении каких-то конкретных задач пользователя.
Об использовании диска с примерами программ для MathCAD 6.0
К книге [6] прилагалась дискета (3,5 дюйма) с десятью пакетами применений системы MathCAD PLUS 6.0 PRO. Все они могут быть использованы, причем без какой-либо доработки, и пользователями новой версии MathCAD 7.0 PRO.
Приложение дискеты с примерами к настоящей книге было признано нецелесообразным по следующим причинам:
• для обучения работе с MathCAD все же полезнее набрать описанные примеры и отладить их самостоятельно, чем просто загрузить с диска и просмотреть в готовом виде;
• наиболее интересные примеры из содержащихся на диске описаны в Главе 14 данной книги и (частично) в других главах;
• изготовление дискеты увеличивает стоимость книги и отдаляет сроки ее выхода в свет.
Глава 1 Основы работы с системой MathCAD 7.0 PRO
1.1. История создания и возможности системы
Вскоре после окончания второй мировой войны потребность в автоматизации математических расчетов привела к созданию компьютеров (computer — в буквальном переводе "счетная машина"). Но широкого применения первые поколения таких машин на электронных лампах не получили. Они были дороги и громоздки, а потому доступны лишь специалистам.
С развитием микроэлектроники появились специализированные, предназначенные для математических расчетов миниатюрные компьютеры личного пользования — программируемые калькуляторы [I]. Они широко применяются и сейчас. Однако в последние годы массовое распространение получили куда более мощные, быстрые и универсальные персональные компьютеры (ПК), имеющие превосходные графические возможности и используемые практически во всех сферах науки, производства, бизнеса и образования.
Одной из основных областей применения ПК и поныне являются математические и научно-технические расчеты. Бесспорным лидером среди массовых ПК стали IBM-совместимые ПК 486DX/Pentium/Pentium MMX/Pen-tium Pro/Pentium II, называемые так по типу используемых в них микропроцессоров. На них и ориентированы современные математические системы и, в частности, описываемая в этой книге новейшая система MathCAD 7.0 PRO, появившаяся в 1997 г.
Само по себе появление компьютеров не упрощало математические расчеты, а лишь позволяло резко повысить скорость их выполнения и сложность решаемых задач. Пользователям ПК, прежде чем начинать такие расчеты, нужно было изучать сами компьютеры, языки программирования и довольно сложные методы вычислений, применять и подстраивать под свои цели программы для решения расчетных задач на языках Бейсик [2] или Паскаль. Поневоле ученому и инженеру, физику, химику и математику приходилось становиться программистом, к сожалению, порою довольно посредственным.
Необходимость в этом отпала лишь после появления интегрированных математических программных систем для научно-технических расчетов: Eureka [З], PC MatLAB [4], MathCAD [5-7, II], Maple V [12], Mathematica 2 или 3 [13] и др. Большое число подобных разработок свидетельствует о значительном интересе к ним во всем мире и бурном развитии компьютерных математических систем.
Широкую известность и заслуженную популярность еще в середине 80-х годов приобрели интегрированные системы для автоматизации математических расчетов класса MathCAD, разработанные фирмой MathSoft (США). По сей день они остаются единственными математическими системами, в которых описание решения математических задач дается с помощью привычных математических формул и знаков. Такой же вид имеют и результаты вычислений. Так что системы MathCAD вполне оправдывают аббревиатуру CAD (Computer Aided Design), говорящую о принадлежности к наиболее сложным и продвинутым системам автоматического проектирования — САПР. Можно сказать, что MathCAD — своего рода САПР в математике [7, 8].
С момента своего появления системы класса MathCAD имели удобный пользовательский интерфейс — совокупность средств общения с пользователем в виде масштабируемых и перемещаемых окон, клавиш и иных элементов. У этой системы есть и эффективные средства типовой научной графики, они просты в применении и интуитивно понятны. Словом, системы MathCAD ориентированы на массового пользователя — от ученика начальных классов до академика.
MathCAD — математически ориентированные универсальные системы. Помимо собственно вычислений они позволяют с блеском решать задачи, которые с трудом поддаются популярным текстовым редакторам или электронным таблицам. С их помощью можно не только качественно подготовить тексты статей, книг, диссертаций, научных отчетов, дипломных и курсовых проектов, они, кроме того, облегчают набор самых сложных математических формул и дают возможность представления результатов, в изысканном графическом виде.
В последнее время особый интерес проявляется к системам компьютерной алгебры, способным выполнять не только числовые, но и аналитические вычисления. В 80-е годы школа советского академика В.М. Глушкова внесла большой вклад в разработку таких программных систем (язык Аналитик) и в создание инженерных мини-ЭВМ, аппаратно реализующих аналитические вычисления (серия «Мир»). К сожалению, эти ЭВМ были вытеснены вначале машинами класса ЕС-ЭВМ, а затем и персональными компьютерами, и теперь мы наблюдаем развитие нового поколения зарубежных систем компьютерной алгебры, ориентированных на современные массовые ПК.
Однако прошло много лет, прежде чем серьезные системы символьной математики (компьютерной алгебры) появились на массовых IBM-совместимых ПК. К ним и относится новое поколение систем MathCAD под Windows [8, 11] и ряд других математических систем, таких, как Derive [10], Maple V и Mathe-matica 2 и 3. Применение их облегчает самые сложные математические, статистические и финансово-экономические расчеты, для проведения которых раньше приходилось привлекать научную элиту — математиков-аналитиков.
Пользователи, работающие с математическими программами, особенно в области символьной математики, в недалеком прошлом не были избалованы удобными и красивыми интерфейсами этих программ. Все внимание было уделено математической корректности программ и богатству их функциональных возможностей.
Многие известные математические программы для ПК класса IBM PC — от некогда популярного языка символьных вычислений Reduce [18] до мощной, быстрой и легко развиваемой системы MatLAB под MS-DOS — имели примитивный интерфейс, заимствованный из опыта начинающих программистов и любителей «дедушки» Бейсика, в новых версиях почитаемого и поныне. А системы с более современным (в конце 80-х годов) многооконным интерфейсом, например Eureka фирмы Borland [3], серьезному математику казались примитивными.
К сожалению, нашим пользователям пока очень мало известны возможности систем символьной математики, поскольку соответствующей литературы до недавнего времени почти не было. Наконец, в 1996 г., спустя три года после объявления о предстоящем выходе, была издана книга автора [10] по системе символьной математики Derive под MS-DOS. Тем временем за рубежом каждой системе символьной математики уже посвящены десятки книг.
Неплохо бы соединить приятное с полезным! К такому выводу первой пришла фирма MathSoft (США), разработчик подлинного шедевра среди математических систем — MathCAD. Из обзоров автора [7, 8] и его справочной книги [5] многие читатели уже знают, что отличительной чертой интегрированных математических систем MathCAD является подготовка документов, которые объединяют задание исходных данных, математическое описание их обработки и результаты вычислений (в виде числовых данных, таблиц и графиков). Вид документа в MathCAD почти ничем не отличается от вида научной статьи. Удачно решена в MathCAD проблема передачи изменений числовых данных в формулах по всей цепочке вычислений.
В начале 90-х годов произошло давно ожидаемое событие: серьезная математика "в лице" интегрированной системы MathCAD 3.0 прорвалась в окна системы Windows [11]! Триумфальное шествие последней началось с того, что корпорация Microsoft наводнила рынок графических операционных систем своей многооконной и многозадачной системой Windows 3.0/3.1 с ее прекрасной графикой и удобным пользовательским интерфейсом. После этого почти все фирмы — разработчики программных средств наперегонки бросились дорабатывать свои программы под Windows.
Ко времени выпуска MathCAD 3.0 под Windows далеко не каждый наш пользователь имел под рукой ПК класса 386 или 486 с установленной на нем операционной системой Windows. Однако обзор западной литературы по информатике и тенденций развития вычислительной техники убедительно показывал, что система Windows стремительно выдвинулась на роль лидера среди современных операционных систем для персональных компьютеров. Большинство серьезных программных продуктов было переработано под Windows 3.1/3.11, а сейчас уже под 32-разрядную (в основном) операционную систему Windows 95. В то же время число программ под MS-DOS стремительно сокращается.
На Западе уже давно прекращен серийный выпуск ПК на микропроцессорах 286 и 386, сворачивается производство ПК на процессорах класса 486. В России ситуация также изменилась. Новое поколение ПК — это машины серии Pentium/ Pentiun MMX/Pentium Pro/Pentium II. Стоимость их постоянно снижается, и ПК этого класса становятся доступными не только для организаций, но и для домашних пользователей.
Сейчас наиболее часто приобретаемыми ПК уже становятся машины с микропроцессорами класса Pentium MMX 166/200, поддерживающими 57 новых команд для реализации средств мультимедиа. В последнее время парк ПК только в России ежегодно возрастает примерно на миллион машин, а общее число IBM-совместимых ПК превысило 200 миллионов.
Вероятно, уже в ближайшие год-два ПК с процессорами Pentium MMX и Pentium II (упрощенный вариант Pentium PRO с мультимедиа-командами) станут основным типом персональных компьютеров даже дома. Их производительность в сотни раз превышает производительность первых ПК IBM PC XT. Именно на машины этого класса и ориентированы версии MathCAD 7.0 и PLUS 7.0 PRO, хотя, в принципе, вполне возможна их работа и на ПК с микропроцессором 486 (с частотой работы не менее 66 МГц).
Все это создает предпосылки к массовому переходу на старшие версии системы MathCAD под Windows. Тем более что пользователи, работающие с системой MathCAD под MS-DOS, всегда ощущали определенный дискомфорт из-за присущих ей принципиальных пороков, унаследованных от операционной системы MS-DOS. К примеру, при альтернативной кодировке символов знакогенераторов дисплея и принтера пропадала большая часть греческих букв, широко используемых в математических формулах. Много недоразумений возникало при печати документов на принтерах, искажались некоторые математические спецзнаки, нарушались форматы таблиц и т. д. Качество печати также оставляло желать лучшего. Шрифты не имели сменных наборов стилей, их размеры были фиксированными.
Не только профессионалы-аналитики, но и просто любители и почитатели математики быстро теряли интерес к системе, как только возникала необходимость в выполнении даже простейших символьных вычислений: нужных для этого средств версии системы MathCAD под MS-DOS были попросту лишены. Да и набор математических формул (не говоря уже об их поиске в справочных книгах) был занятием далеко не самым легким и приятным, поскольку требовал знания десятков комбинаций различных клавиш.
Опыт работы автора даже с первой системой MathCAD под Windows (версия 3.0) позволяет сделать вывод, что студенты, аспиранты, инженеры и ученые получили превосходный инструмент для повседневной работы. Теперь для написания научной статьи или диссертации они могут обойтись только системой MathCAD под Windows и встроенными в Windows средствами.
К средствам новых версий MathCAD относятся настройка под любой мало-мальски известный тип печатающего устройства, богатый набор шрифтов, возможность использования всех инструментов Windows, прекрасная графика и современный многооконный интерфейс. А в версию MathCAD 7.0 PRO включены эффективные средства цветового оформления документов, создания анимационных (движущихся) графиков и звукового сопровождения. Тут же текстовый, формульный и графический редакторы, объединенные с мощным вычислительным потенциалом. Предусмотрена и возможность объединения с другими мощными математическими и графическими системами для решения особо сложных задач. Отсюда и название таких систем — интегрированные системы.
Математики, физики и ученые из других, смежных отраслей науки давно мечтали о математически ориентированном языке программирования для записи алгоритмов решения математических и научно-технических задач в наиболее удобной, компактной и доступной для понимания форме. Для этого они пытались приспособить различные языки программирования высокого уровня — Фортран, Алгол, Бейсик, Паскаль и др. Но их попытки так и не увенчались успехом: программы на этих языках, увы, ничем не напоминали привычные математические и физические символы и формулы, с которыми все привыкли работать и с помощью которых описываются решения математических задач.
Выпустив за какие-то три года целую серию систем MathCAD, ориентированных под Windows и имеющих некоторые средства для выполнения символьных операций компьютерной алгебры, фирма MathSoft наглядно показала свое несомненное лидерство в быстрой разработке популярных математических систем. Этому способствовало привлечение к разработкам систем MathCAD известной компании Waterloo Maple Software — создательницы одной из самых мощных и интеллектуальных систем компьютерной алгебры Maple V [12].
Совсем недавно лидером среди систем компьютерной алгебры признавалась система Mathematica 2 фирмы Wolfram [13]. Но сегодня ей на пятки уже наступает упомянутая система Maple V R3 с реализацией под Windows [12]. Появилась и новая версия этих систем — Maple V R4. Впрочем, уже есть и новая мощная версия системы Mathematica 3. Однако все эти системы имеют явный избыток средств символьной математики, что удобно для математиков высшей квалификации, но отнюдь не для массового пользователя.
Роль главной математической системы для большинства пользователей по-прежнему осталась за MathCAD. Системы этого класса отличает простота, удобный пользовательский интерфейс и тщательно продуманные, отобранные и ориентированные на нужды большинства пользователей математические возможности. К тому же системы ориентированы на ПК разных классов с различными аппаратными ресурсами — от обычных AT 386 с памятью 2 Мб до машин Pentium/Pentium MMX/Pentium PRO/Pentium II с ОЗУ не менее 12 Мб.
Оставаясь по-прежнему мощной системой для численных расчетов, MathCAD начиная с версии 3.0 приобрела возможности выполнения некоторых символьных операций, т. е. стала системой компьютерной алгебры. Для этого по лицензии фирмы Maple в систему MathCAD было введено несколько урезанное ядро символьных операций от системы Maple V. Число таких операций, доступных пользователю из меню, тщательно оптимизировалось и было ограничено тем разумным минимумом, который необходим массовому пользователю. Тем не менее символьные возможности систем расширялись от версии к версии; наиболее полно они представлены в версии MathCAD 7.0 PRO.
Начиная с версии 4.0 система MathCAD стала 32-разрядной. Это означает, что для ее работы задействованы самые быстрые и эффективные команды современных микропроцессоров, прежде всего класса Pentium и Pentium Pro. В результате, несмотря на заметное увеличение математических возможностей и улучшение пользовательского интерфейса, скорость работы системы не только не уменьшилась, но и заметно возросла.
Объективности ради надо отметить, что мультимедийные команды новых процессоров класса ММХ в MathCAD 7.0 PRO пока не задействованы, так что применение в ПК процессоров этого класса дает лишь незначительный выигрыш в производительности по сравнению с работой на ПК, оснащенных обычными процессорами Pentium. Этот выигрыш составляет порядка 7—10% и достигается за счет большей емкости кэш-памяти у процессоров класса ММХ и некоторых архитектурных улучшений.
Помимо ориентации на Windows 95 новые версии системы MathCAD содержат множество усовершенствований: удобное и простое управление мышью, более совершенный редактор документов, возможность выполнения наиболее распространенных символьных вычислений, объединенные в единый центр ресурсов встроенные электронные книги, мощная справочная система и многочисленные примеры применения — шпаргалки QuickSheets.
Системы реализуют типовые и весьма обширные возможности Windows, включая доступность множества шрифтов, поддержку всех типов принтеров, одновременное выполнение нескольких разнохарактерных задач и (в последних версиях) реализацию механизмов обмена объектами OLE2. В режиме редактирования возможна одновременная работа с восемью документами (точнее, с восемью окнами, из которых лишь одно является активным).
Предусмотрен импорт любых графических изображений — от простых и специальных графиков функций до многокрасочных репродукций художественных произведений. Введены средства анимации рисунков и проигрывания видеофайлов со звуковым стереофоническим сопровождением. Это значительно улучшает визуализацию самых сложных расчетов.
Справочная база данных о системе в MathCAD 7.0 PRO гораздо полнее и изящнее, чем в ранних версиях. Она позволяет ознакомиться с основными возможностями MathCAD, разумеется, если пользователь хорошо владеет английским языком. Увы, в отличие от русифицированных версий MathCAD PLUS 6.0 PRO справочная база данных в версии 7.0 реализована на английском языке (как и вся прочая документация), что и явилось главным побудительным мотивом к подготовке данной книги. В систему встроены прекрасные справочники по математическим формулам и таблицы с физическими и химическими характеристиками различных веществ.
Особый интерес представляют встроенные в систему электронные книги, содержащие справки (математические формулы), иллюстрации и примеры применения системы по ряду разделов математики, механики, физики, электротехники и радиотехники, а также по интерфейсу системы. Можно выделить нужную справку — формулу или рисунок — и перенести ее в текст документа. В сочетании с возможностью импорта графических файлов из других графических систем (таких, как VISIO, AutoCAD, PCAD, TurboCAD и др.) это позволяет готовить документы, в которых наряду с расчетной частью будут и высококачественные иллюстрации.
Существенно улучшены графические возможности системы. В ранних версиях при построении графиков функций перечисление их функций шло в одну строчку. Это приводило к смещению графика от левой части экрана вправо. Кроме того, было неясно (особенно при монохромном дисплее и распечатке документов не цветным принтером), к какой функции относится та или иная кривая.
Эти недостатки в основном устранены в версии 6.0 и практически полностью в версии 7.0. Теперь имена перечисляемых функций располагаются друг под другом вместе с указаниями на тип линии, ее цвет (в виде короткого отрезка соответствующих цвета и типа) и наличие меток того или иного типа (кружки, крестики, квадратики и т. д.). Существенно упрощен процесс перемещения рисунков и изменения их размеров (с помощью мыши), повышена точность позиционирования рисунков. Новой в системах MathCAD под Windows является и возможность управления с помощью мыши, которая в версиях под MS-DOS попросту отсутствовала.
Пользователи будут приятно удивлены тем, что все версии MathCAD под Windows позволяют работать как с латинскими буквами, так и с кириллицей (буквами русского алфавита), греческим алфавитом и вообще с любыми символами, доступными Windows. Более того, благодаря применению масштабируемых TTF-шрифтов можно управлять как размером символов, так и их стилем (делая буквы прямыми или наклонными, тонкими или жирными). Все это дает возможность готовить документы и электронные книги высокого качества как на английском, так и на русском языках. При этом такая возможность есть и в русифицированных, и в англоязычных версиях MathCAD.
Впрочем, не стоит забывать, что это достоинство — результат работы системы в среде Windows, которая может быть русифицированной. Греческие символы и математические спецзнаки раньше были недоступны в текстовых комментариях, теперь же и этот недостаток полностью устранен.
Последние версии системы MathCAD дают новые средства для подготовки сложных документов. В них предусмотрено красочное выделение отдельных формул, многовариантный вызов одних документов из других, возможность закрытия "на замок" отдельных частей документов, гипертекстовые и гипермедиа-переходы и т. д. Это позволяет создавать превосходные обучающие программы и целые книги по любым курсам, базирующимся на математическом аппарате. Здесь же реализуется удобное и наглядное объектно-ориентированное программирование сложнейших задач, при котором программа составляется автоматически по заданию пользователя, а само задание формулируется на естественном математическом языке общения с системой.
1997 год порадовал почитателей системы MathCAD выходом новейшей версии 7.0. Она не только вобрала в себя все возможности предшествующих версий, но и обогатилась рядом новых. И без того хороший интерфейс версии 6.0 стал теперь превосходным. С первого взгляда он даже несколько проще, но эта простота явно обманчива. Возможности ввода сложных математических выражений и текстов с самыми разнообразными выделениями заметно расширились.
В эту версию MathCAD добавлена функция задания некоторых типов графиков без определения ранжированных (имеющих диапазон значений) переменных, что резко упростило построение таких графиков для начинающих пользователей. Намного улучшилась справочная система и общее управление ею. Организована связь с другими математическими системами и использование их возможностей. С системой поставляется полное (но англоязычное) описание в формате файлов популярного Internet-браузера Acrobat Reader. Введено и принципиально новое средство — MathConnex — для симулирования систем, представленных состоящей из блоков функциональной схемой.
Новейшая версия, как и предыдущая, выпущена в двух основных вариантах:
MathCAD 7.0 STANDARD — упрощенная версия, удобная для большинства пользователей и применения в учебных целях;
MathCAD 7.0 PRO — профессиональная версия, ориентированная на математиков и научно-педагогических работников, заинтересованных в автоматизации своих достаточно сложных и трудоемких расчетов.
При этом особо важно отметить, что MathCAD не только средство для решения математических задач. Это, по существу, мощная математическая САПР, позволяющая готовить на высочайшем полиграфическом уровне любые относящиеся к науке и технике материалы: документацию, научные отчеты, книги и статьи, диссертации, дипломные и курсовые проекты и т. д. При этом в них одновременно могут присутствовать тексты сложного вида, любые математические формулы, графики функций и различные иллюстративные материалы. Позволяет MathCAD 7.0 готовить и высококачественные электронные книги с гипертекстовыми ссылками.
С выходом настоящей книги заинтересованный читатель получает достаточно полную информацию о MathCAD 7.0 PRO — и о практике ее применения в массовых общетехнических и математических расчетах. Из книги исключены подробные сведения о ранних версиях систем класса MathCAD.
В дальнейшем сокращения ради мы будем употреблять краткое название системы MathCAD 7.0 PRO просто как MathCAD (поскольку в данной книге описана только эта версия системы), а под Windows будем подразумевать операционные системы Windows 95 и Windows NT, имеющие практически идентичный интерфейс пользователя. С точки зрения работы в них системы MathCAD 7.0 разницы между этими операционными системами нет.
1.2. Инсталляция и запуск системы
Системы MathCAD 7.0 PRO поставляются на CD-ROM (возможна поставка минимальных версий и на 3,5-дюймовых дискетах). При этом полная инсталляционная версия MathCAD 7.0 PRO с документацией и демонстрационной версией программы Axum 5.0 (Техническая графика и анализ данных) занимает чуть более 100 Мб. Система ориентирована на операционные системы Windows 95 и Windows NT и имеет возможности подготовки документов в формате, принятом для глобальной сети Internet.
Для установки системы MathCAD 7.0 PRO нужен ПК класса 486 и выше (желателен Pentium/Pentium MMX/Pentium Pro/Pentium II) с емкостью ОЗУ не менее 12 Мб (рекомендуется 16 Мб и выше). Инсталляция в минимальном объеме требует 18 Мб на жестком диске, а типовая — даже 55 Мб. Для полного использования системы должны быть проинсталлированы приложения, с которыми она может работать совместно: Microsoft Internet Explorer 3.02, Excel, MatLAB 4.02 и Axum 5.0.
Как отмечалось, новые версии MathCAD дополнены возможностью вывода анимационных изображений, получивших название "живого" видео. Для реализации звукового сопровождения "живого" видео необходимо оснащение ПК аудиоадаптером, совместимым со звуковыми картами класса Sound Blaster, и звуковыми колонками.
Таким образом, полноценное использование MathCAD 7.0 возможно только на самых современных 32-разрядных ПК, оснащенных новейшими средствами мультимедиа. Разумеется, отказавшись от мультимедийных средств, вы сможете использовать все основные возможности системы MathCAD.
С учетом отмеченных особенностей инсталляция системы не вызывает каких-либо проблем и проходит довольно гладко. Если возникают специфические трудности (как правило, при неудачной и нетиповой конфигурации ПК), следует ознакомиться с довольно детальной инструкцией по инсталляции, приведенной в файле readme.
После инсталляции в рабочем окне системы Windows вы обнаружите окно с пиктограммами системы. Пиктограмма с изображением счетов и надписью MathCAD PLUS 7.0 служит для запуска системы. Однако это окно существует недолго и, закрывшись, более не появляется, переходя в рабочее меню операционной системы. На рис. 1.1 показано раскрытое рабочее меню операционной системы Windows 95 с позициями, в которых видны значки и наименования их для приложения MathCAD 7.0 PRO.
То, что система MathCAD 7.0 PRO предназначена для профессионалов, вовсе не означает, что для обычных пользователей работа с системой будет в чем-то сложнее, чем с упрощенной версией MathCAD 7.0 STANDARD. Эти версии имеют одинаковый пользовательский интерфейс и отличаются лишь полнотой набора встроенных операторов и функций и объемом сопроводительной документации Так что вопреки логике работа именно с версией PRO проще для любого пользователя, ведь именно эта версия содержит наиболее мощный справочно-информационный раздел и широчайшие возможности не медленного применения
Рис. 1.1 Группа значков MathCAD 7.0 PRO в рабочем меню операционной системы Windows 95
В прежних версиях MathCAD под Windows пиктограмма запуска имела вид калькулятора Некоторые пользователи поневоле из-за этого отождествляли MathCAD с микрокалькулятором в Windows Однако они отличаются примерно так же, как космический "челнок" отличается от бумажного голубка Видимо, учтя это, MathSoft изменила пиктограмму, изобразив ее в виде счетов, — вряд ли кто-либо заподозрит, что MathCAD 7 О PRO уподобляется этаким большим электронным счетам
Запустив MathCAD из Windows, вы на некоторое время (зависит от быстродействия ПК) увидите довольно скромное титульное окно (рис 1 2)
Оно вскоре сменится основным окном системы (рис 1 3) Последнее представляет собой некий гибрид типового окна Windows программ и диалогового окна, столь привычного для пользователей ранних версий MathCAD
Обычно при первой загрузке системы ее окно появляется не полностью открытым и вокруг него видны пиктограммы других приложений менеджера программ Windows 95 Однако на рис 1 3 основное окно MathCAD раскрыто на весь экран, пользователи Windows 95 знают, что для раскрытия окна надо активизировать среднюю из трех кнопок, расположенных в правом верхнем углу основного окна системы
При запуске системы в центре основного окна обычно появляется меньшее окно — Tip of the Day, — которое позволяет быстро ознакомиться с возможностями MathCAD Однако для наших пользователей польза от этого окна весьма сомнительна, поскольку описание дано на английском языке Для переключения тем служит кнопка Next Tip, а для перехода к работе с MathCAD — кнопка ОК Можно отключить появление этого окошка, удалив мышью птичку в прямоугольнике в нижнем левом углу окошка Tip of the Day
Рис. 1.2 Титульная заставка системы MathCAD PLUS 6.0 PRO
Рис.1.3 Окно системы MathCAD PLUS 7.0
Как известно, Windows 95 позволяет быстро переключаться с решения одной задачи на решение другой (в частности, путем одновременного нажатия клавиш Alt и Tab). Возможно также управление окнами различных приложений. Для этого в правом верхнем углу окна MathCAD помещены три кнопки в виде маленьких квадратов.
Левая кнопка сворачивает окно, сохраняя MathCAD активным. При этом в строке задач Windows 95 (внизу экрана) появляется кнопка с пиктограммой системы и ее названием. Если загружены и другие приложения Windows 95, то и их кнопки будут видны в строке задач; активизируя их, можно делать активным то или иное приложение.
Средняя кнопка, как отмечалось, выполняет функции переключения размеров окна: она раскрывает окно на весь экран или задает окно в уменьшенном размере. При этом окно можно растягивать в разных направлениях, уцепившись за его ограничительные линии или углы курсором мыши. В этом случае курсор приобретает вид тонких двухсторонних стрелок, указывающих на направление, в котором можно растягивать или сужать окно.
Третья кнопка (с жирным наклонным крестиком) служит для закрытия окна. При этом работа с приложением (MathCAD или другим) завершается в соответствии с определенными правилами. Обычно, если в приложение был загружен файл и он модифицировался, то при закрытии приложения появляется временное окно с предложением сохранить файл.
С помощью клавиш Alt и Tab (табуляция) в Windows можно быстро переключаться из одного приложения в другое, например из текстового редактора или программы AutoCAD в MathCAD. При этом (что является принципиальным отличием от работы в среде MS-DOS) работа каждого приложения временно прекращается в том состоянии, какое было перед переключением окон. С этого же состояния приложение начинает работать, как только его окно снова делается активным. Переключение приложений удобно осуществлять из строки задач операционной системы, обычно расположенной внизу экрана.
1.3. Основы пользовательского интерфейса
Под интерфейсом пользователя подразумевается совокупность средств графической оболочки MathCAD, обеспечивающих легкое управление системой как с клавишного пульта, так и с помощью мыши. Под управлением понимается и просто набор необходимых символов, формул, текстовых комментариев и т. д., и возможность полной подготовки в среде MathCAD документов (Worksheets) и электронных книг с последующим их запуском в реальном времени.
Пользовательский интерфейс системы создан так, что пользователь, имеющий элементарные навыки работы с Windows-приложениями, может сразу начать работу с MathCAD. Интерфейс системы внешне очень напоминает интерфейс широко известных текстовых процессоров Word 7.0/8.0 под Windows 95. Это, в частности, позволило несколько сократить описание общепринятых для Windows-приложений деталей работы с ними.
Окно редактирования
Сразу после запуска система готова к созданию документа с необходимыми пользователю вычислениями. Первая же кнопка панели инструментов (с изображением чистого листка бумаги) New Worksheet позволяет начать подготовку нового документа. Соответствующее ему окно редактирования получает название Untitled:N, где N — порядковый номер документа, который начинается с цифры 1. Вначале окно редактирования очищено (рис. 1.4). Задание различных стилей новых документов мы рассмотрим в следующей главе.
Если в систему с помощью второй кнопки (в виде открывающейся желтой папки) загружен файл документа, то последний появится в окне редактирования (рис. 1.5). На этом рисунке экран системы показан со скрытыми панелями инструментов (Tool Bar), форматирования (Format) и задания палитр математических символов и операторов (Math Pallete). При этом вид экрана почти не отличается от того, который знаком пользователям старых версий системы MathCAD под MS-DOS Для устранений панелей служат опции в главном меню, находящиеся в подменю позиции View
Если все окна редактирования закрыты, то экран системы приобретает вид, показанный на рис 1 6 некоторые детали интерфейса (сравните с рис. 1.4 и 1.5) могут отсутствовать, даже когда панели инструментов, форматирования и математических символов и операторов выведены. Нерезкое изображение ряда элементов интерфейса показывает, что в данном случае их функции недоступны На это же указывает и исчезновение отдельных позиций главного меню. Само окно редактирования отсутствует, на его месте — просто серый фон.
Рис.1.4 Экран системы MathCAD с очищенным окном редактирования
Рис. 1.5 Экран системы MathCAD с загруженным документом
Рис.1.6 Экран системы MathCAD со всеми закрытыми окнами документов
Позже будет описано, как модифицируется интерфейс системы. А пока стоит обратить внимание на некоторые типовые примеры вычислений в среде системы MathCAD. Первое, что бросается в глаза (см. рис. 1.5), — естественность записи математических выражений и результатов их вычислений, что является главной отличительной чертой систем класса MathCAD.
Основную часть экрана занимает окно редактирования, первоначально пустое. Полосы прокрутки на нижней и правой кромке текущего окна (иногда называемые слайдеры) предназначены для перемещения изображения на экране по горизонтали и вертикали. Для этого достаточно установить курсор-стрелку мыши на строке прокрутки (квадратик со стрелкой, указывающей направление перемещения) и нажать левую клавишу мыши. При этом будет обеспечено плавное, но медленное перемещение изображения в окне. Можно перемещать изображение намного быстрее, установив курсор-стрелку в поле ползунка и также нажав клавишу мыши. При этом длина ползунка соответствует полной длине документа, так что курсором можно сразу приблизительно указать на часть документа, выводимую в окно.
Вверху окна на рис. 1.4 видно несколько строк с типовыми элеменгами интерфейса. Верхняя строка — титульная. Она отображает название загруженного или вводимого с клавиатуры документа. В левой части строки помещена стандартная кнопка управления окном, а в правой части — три маленькие кнопки для свертывания окна, развертывания его во весь экран и закрытия. Уцепившись курсором мыши за титульную строку и держа нажатой левую клавишу мыши, можно с ее помощью передвигать окно (если оно не раскрыто на весь экран) по рабочему столу Windows 95.
Если используется русифицированная версия Windows, то левая кнопка титульной строки выведет на экран меню с русскими названиями позиций. Пользователям англоязычной версии MathCAD не стоит этому удивляться, как и названиям в меню, расположенной ниже кнопки. Дело в том, что эти кнопки типичны для всех Windows-приложений. Они относятся не к системе MathCAD как таковой, а ко всей системе Windows.
Полезно учесть, что нажатие правой клавиши мыши вызывает появление контекстно-зависимого меню. Позиции этого меню могут сильно отличаться от того, в каком режиме работает система и в каком месте был установлен курсор мыши перед нажатием правой ее клавиши. Заметим, что это также не свойство MathCAD — такая возможность предусмотрена в качестве элемента пользовательского интерфейса Windows.
Главное меню
Вторая строка окна системы — главное меню. Оно будет описано в дальнейшем, пока же отметим, что работа с документами MathCAD обычно не требует обязательного использования возможностей главного меню, так как основные из них дублируются кнопками быстрого управления. Панели (строки) с ними находятся под строкой главного меню. Их можно выводить на экран или убирать с него с помощью соответствующих опций позиции View (Вид) главного меню Windows.
Обычно имеются две такие панели: панель инструментов (дублирующая ряд наиболее распространенных команд и операций) и панель форматирования для выбора типа и размера шрифтов и способа выравнивания текстовых комментарий. Эти панели видны на рис. 1.3 и 1.4.
Наборные панели
Вместо столбикового переключателя математических знаков, применяемого в ранних версиях MathCAD, в седьмой версии используются более удобные перемещаемые наборные панели (в оригинале Palletes — палитры) с такими знаками. Они служат для вывода заготовок — шаблонов математических знаков (цифр, знаков арифметических операций, матриц, знаков интегралов, производных и т. д.).
Кнопки вывода наборных панелей занимают пятую сверху строку окна системы. На рис. 1.7 показано назначение этих кнопок. Наборные панели появляются в окне редактирования документов при активизации соответствующих пиктограмм — первая линия пиктограмм управления системой.
Как видно из рис. 1.7, панель выбора математических символов и операторов, как и другие панели, может быть смещена со своего места и представлена не только в виде линейного, но и иного расположения кнопок. Для перемещения панелей надо уцепиться за промежутки между кнопками панелей и, нажав левую клавишу мыши, перетягивать их в нужное место.
На рис. 1.8 представлены все наборные панели. С их помощью можно вводить в документы практически все известные математические символы и операторы. К сожалению, их так много, что вывод всех панелей (как это показано на рис. 1.5) обычно бесполезен, так как в окне редактирования не остается места для подготовки документов. Поэтому рекомендуется неиспользуемые в данное время панели закрывать, активизируя кнопку в конце их титульной строки с названием панели.
Панели операторов и символов намного удобнее столбикового переключателя в ранних версиях системы, у которого был виден лишь один столбец с математическими знаками. Их можно располагать в удобном месте окна редактирования, причем пользоваться сразу несколькими панелями (столбиковый переключатель открывает доступ к одной своей панели).
Рис. 1.7 Назначение кнопок панели с математическими знаками
Рис.1.8 Панели математических символов и операторов системы MathCAD 7.0 PRO
Используя общую наборную панель, можно вывести или все панели сра зу, или только те, что нужны для работы Для установки с их помощью необходимого шаблона (объекта) достаточно поместить курсор в желаемое место окна редактирования (красный крестик на цветном дисплее) и затем активизировать пиктограмму нужного шаблона, установив на него курсор мыши и нажав ее левую клавишу
Применение панелей для выбора шаблонов математических знаков очень удобно, поскольку не надо запоминать разнообразные сочетания клавиш, используемые для ввода специальных математических символов. Впрочем, и эта возможность сохранена, так что привыкшие к работе с клавиатурой пользователи, имевшие дело с более ранними версиями системы MathCAD (в том числе и под MS-DOS), могут воспользоваться навыками виртуозного набора формул и после перехода на новую версию системы.
Любую панель с математическими знаками можно переместить в удобное место экрана, уцепившись за ее верхнюю часть курсором мыши. Перемещая панель, левую клавишу мыши нужно держать нажатой. В верхнем левом углу каждой наборной панели помещена единственная маленькая кнопка с жирным знаком минуса, служащая для устранения панели с экрана, как только она становится ненужной.
Большинство кнопок на панелях выводят общепринятые и специальные математические знаки и операторы, помещая их шаблоны в место расположения курсора на документе. Позже мы последовательно рассмотрим все эти знаки, в том числе на первый взгляд не вполне очевидные.
Панель инструментов
Третью строку окна системы занимает панель инструментов (Toolbox). Она содержит несколько групп кнопок управления с пиктограммами, каждая из которых дублирует одну из важнейших операций главного меню. Глядя на эти пиктограммы (см. рис. 1.4), можно легко уяснить их функции. Стоит только остановить курсор мыши на любой из этих пиктограмм, как в желтом окошечке появится текст, объясняющий функции пиктограммы. На рис. 1.9 представлены названия кнопок панели инструментов и их краткое назначение.
Надо отметить, что панель инструментов тоже можно мышью превратить в наборную панель и поместить в любое место экрана. Ее можно закрыть с помощью кнопки с жирным минусом. Так интерфейс системы модифицируется, и пользователь может подстроить его под свой вкус. Рассмотрим действие кнопок быстрого управления системой (номера их соответствуют приведенным на рис. 1.9).
Рис.1.9 Назначение кнопок панели инструментов
Кнопки операций с файлами
Документы системы MathCAD являются файлами, т. е. имеющими имена блоками хранения информации на магнитных дисках. Файлы можно создавать, загружать (открывать), записывать и распечатывать на принтере. Возможные операции с файлами представлены в панели инструментов первой группой из трех кнопок (см. рис. 1.9):
New Worksheet (Создать) — создание нового документа с очисткой окна редактирования;
Open Worksheet (Открыть) — загрузка ранее созданного документа из диалогового окна;
Save Worksheet (Сохранить) — запись текущего документа с его именем. Ниже мы рассмотрим эти операции более подробно.
Печать и контроль документов
Эта группа представлена тремя кнопками:
Print Worksheet (Печать) — распечатка документа на принтере;
Print Preview (Просмотр) — предварительный просмотр документа;
Check Speling (Проверка) — проверка орфографии документа.
Их назначение довольно очевидно. Отметим лишь, что проверка орфографии действует только для англоязычных документов.
Кнопки операций редактирования
Во время подготовки документов их приходится видоизменять и дополнять — редактировать. Следующие четыре кнопки служат для выполнения операций редактирования документов:
Cut (Вырезать) — перенос выделенной части документа в буфер обмена (Clipboard) с очисткой этой части документа;
Copy (Копировать) — копирование выделенной части документа в буфер обмена с сохранением выделенной части документа;
Paste (Вставить) — перенос содержимого буфера обмена в окно редактирования на место, указанное курсором мыши;
Undo (Отменить) — отмена предшествующей операции редактирования.
Три последние операции связаны с применением буфера обмена. Его возможности и назначение хорошо известны пользователям Windows. Он предназначен для временного хранения данных и их переноса из одной части документа в другую либо для организации обмена данными между различными приложениями.
Кнопки размещения блоков
Документы состоят из различных блоков: текстовых, формульных, графических и т. д. Блоки просматриваются системой, интерпретируются и исполняются. Просмотр идет справа налево и снизу вверх. Две операции размещения блоков представлены кнопками следующей группы:
Align Across (Выровнять по горизонтали) — блоки выравниваются по горизонтали;
Align Down (Выровнять вниз) — блоки выравниваются по вертикали, располагаясь сверху вниз.
Пиктограммы этих кнопок изображают блоки и указанные варианты их размещения. Определенное размещение блоков в некоторых случаях имеет значение. Например, нередко результат операции желательно разместить в одной строке с заданием на операцию. А размещение блоков по вертикали характерно для больших документов.
Кнопки операций с выражениями
Формульные блоки часто являются вычисляемыми выражениями или выражениями, входящими в состав заданных пользователем новых функций. Для работы с выражениями служат пиктограммы:
Insert Function — вставка функции из списка, появляющегося (Вставить функции) в диалоговом окне;
Insert Utit (Вставить единицы) — вставка единиц измерения;
Calculate (Пересчитать) — вычисление выделенного выражения.
MathCAD имеет множество встроенных функций, от элементарных до сложных статистических и специальных математических. Синтаксис их записи порой легко забывается. Поэтому возможность вставки функции с помощью кнопки Insert Function очень удобна. Другая кнопка, Insert Unit, позволяет вставить нужную единицу измерения.
Если документы большие, то при их изменениях не всегда выгодно запускать вычисления с самого начала. Операция Calculate (Пересчитать) позволяет запускать вычисления для выделенных блоков, что может уменьшить время вычислений.
Доступ к новым возможностям MathCAD 7.0
Сравнивая набор кнопок панели инструментов версий 7.0 и 6.0, можно отметить, что он имеет ряд заметных различий. Несколько изменилась группировка кнопок, ряд кнопок в версии 7.0 исключен из панели инструментов, например для задания текстовых блоков. Однако в седьмой версии появились новые кнопки, дающие доступ к новым возможностям системы:
Insert Giperlink — обеспечивает создание гиперссылки;
(Включение гиперссылки)
Component Wizard — открывает окно Мастера, дающего удобный
(Мастер компонентов) доступ ко всем компонентам системы;
Run MathConnex — запуск системы для стимулирования блочно-(Запуск системы MathConnex) заданных устройств.
Кнопки управления ресурсами
Заключительная группа из двух пиктограмм обеспечивает обращение к центру ресурсов системы и к встроенной справочной базе данных системы:
Resource Center (Центр ресурсов) — дает доступ к центру ресурсов;
Help (Справка) — дает доступ к ресурсам справочной базы данных системы.
Указанных операций обычно вполне достаточно для работы с документами без применения других возможностей главного меню. Кнопка 21 служит для закрытия панели инструментов, при этом она исчезает с экрана.
Панели форматирования и статуса системы
Четвертая строка верхней части экрана содержит типовые средства управления шрифтами: переключатели типа символов, набора гарнитур и размеров шрифтов, три пиктограммы типа шрифтов (полужирный, наклонный, или курсивный, и подчеркнутый), а также три пиктограммы расположения букв в строке (рядом, надстрочное и подстрочное). Назначение объектов этой панели показано на рис. 1.10.
Рис.1.10 Назначение объектов панели форматирования
До тех пор пока не начат набор элементов документа, часть описанных кнопок и иных объектов пользовательского интерфейса находится в пассивном состоянии. В частности, в окнах переключателей панели форматирования нет надписей. Пиктограммы и переключатели становятся активными, как только появляется необходимость в их использовании.
Внизу экрана кроме полосы горизонтальной прокрутки расположена еще одна строка — строка состояния. В ней выводится служебная информация, краткие комментарии, номер страницы документа и др. Эта информация полезна для оперативной оценки состояния системы в ходе работы с нею.
Указанные объекты интерфейса можно перемещать по экрану с помощью мыши. Например, можно поместить строку форматирования рядом с пиктограммами наборных панелей, вынести в любое место экрана панель инструментов и т. д. Таким образом, интерфейс несложно подстраивать под запросы пользователя.
Изложение всех возможностей управления системой MathCAD под Windows потребует описания большей части возможностей Windows. Этим, кстати, грешат фирменное описание предшествующей версии системы и его перевод [14], что отчасти обусловливает их большой объем.
Между тем с правилами работы в Windows можно ознакомиться по книгам [16, 17]. К счастью, большая часть этих правил одинакова для любого приложения, функционирующего в системе Windows, и интуитивно понятна. К примеру, для изменения размера окна достаточно установить курсор-стрелку мыши на пограничную линию окна. Вид курсора изменится: стрелка станет двусторонней. Если теперь нажать и удерживать левую клавишу мыши, то можно перемещать границу окна, меняя его размеры. Точно так же (установив стрелку-курсор на верхнюю титульную линию окна) можно плавно перемещать окно по всему экрану.
Учитывая сказанное, закончим рассмотрение возможностей пользовательского интерфейса MathCAD. И посоветуем читателю получше изучить общие правила работы с приложениями под Windows, прежде чем всерьез осваивать MathCAD.
1.4. Входной язык системы MathCAD
Отличительной чертой MathCAD является работа с документами. Документы объединяют описание математического алгоритма решения задачи (или ряда задач) с текстовыми комментариями и результатами вычислений, заданными в форме символов, чисел, таблиц или графиков. В оригинале документы системы MathCAD названы английским словом "Worksheets". В научном мире длинные листы бумаги с текстами, формулами и графиками шутливо называют рабочими "простынями" — так буквально переводится слово "Worksheets".
Уникальное свойство MathCAD — возможность описания математических алгоритмов в естественной математической форме с применением общепринятой символики для математических знаков, таких, например, как квадратный корень, знак деления в виде горизонтальной черты, знак интеграла и т. д. Это делает документ, видимый на экране дисплея (см. рис. 1.5), чрезвычайно похожим на странички текста из математических книг и научных статей.
Такой подход значительно облегчает восприятие математической сущности задачи и избавляет пользователя от изучения некоторого промежуточного языка программирования (например, Фортрана, Бейсика, Паскаля и т. д.). Можно сказать, что в MathCAD идея решения математических задач без их программирования доведена до совершенства: подавляющее большинство задач требуют лишь корректного формульного описания и не нуждаются в подготовке программ в их общепринятом виде.
Разумеется, это не означает, что в системе нет своего языка программирования. В действительности он есть, но это математически ориентированный особый язык программирования сверхвысокого уровня, используемый в основном как входной язык для диалога с системой. В подавляющем большинстве расчетных задач этот язык позволяет задавать их решение в виде вводимых с помощью операторов и функций математических формул и указывать тип желаемых результатов (таблицы или графики). Специальные приемы введены лишь для задания циклического изменения переменных и создания так называемых ранжированных переменных — векторов.
Входной язык MathCAD относится к интерпретирующему типу. Это означает, что когда он опознает какой-либо объект системы, то тут же исполняет указанные в блоке операции. Языком реализации системы является язык Си++.
По существу, входной язык системы — это промежуточное звено между скрытым от пользователя языком связи документа с языком реализации системы. По мере того как пользователь создает (средствами текстового, формульного и графического редакторов) в окне редактирования объекты (тексты, формулы, таблицы и графики), система сама составляет программу на некотором промежуточном языке связи, которая хранится в ОЗУ до тех пор, пока не будет сохранена на диске в виде файла с расширением.mcd. Однако важно подчеркнуть, что от пользователя не требуется знать языки программирования (реализации и связи), достаточно освоить приближенный к естественному математическому языку входной язык системы.
В версии MathCAD 7.0 резко снижены требования даже к знанию входного языка. Практически все операторы, имеющие вид привычных математических символов, можно вводить мышью, а большинство математических функций (например, sin, cos, exp и т. д.) имеют естественную форму задания, например, sin(x) так и вводится как sin(x). К тому же есть возможность выбора из списка, имеющегося в специальном окне, что резко уменьшает вероятность ошибок при вводе функций.
Благодаря всему этому работа с системой приобрела характер визуального и объектно-ориентированного программирования. При этом решающим является задание объектов (с выбором их из соответствующей палитры наглядных знаков), а программу составляет сама система. Более того, в MathCAD эффективно решена проблема сквозной передачи данных от одного объекта к другому, например от одного математического выражения к другому, от него — к таблицам, от таблиц — к графикам и т. д. Поэтому изменение в любой формуле или в задании входных данных тут же ведет к пересчету задачи по всей цепи взаимодействия объектов (это не относится, однако, к символьным операциям, реализуемым из главного меню).
Лучшее враг хорошего! Это в полной мере можно сказать о входном языке предшествующих версий MathCAD. Этот язык был доведен до такого "совершенства", что в нем напрочь исчезли многие основополагающие средства программирования, например циклы, условные выражения, процедуры и т. д., в их привычном для программистов виде. В результате пользователь, привыкший к обычному программированию, испытывал большие неудобства от замены этих средств непривычными средствами системы MathCAD. Тем более что иногда описание задачи в общепринятом на языках программирования виде оказывается предпочтительным и более коротким.
Некоторые критики системы MathCAD, как правило, даже не работающие с нею, говорят, что реализация решения математических задач в среде MathCAD отучает пользователя от познания фундаментальных основ реализации математических численных методов обычными средствами программирования. Это обвинение абсолютно абсурдно. MathCAD как раз и позволяет описать любые алгоритмы реализации численных методов привычным для математиков языком обычных формул.
Впрочем, версии MathCAD PLUS 6.0 PRO и тем более MathCAD 7.0 избавились и от этого "недостатка". В них включены важнейшие средства программирования и предусмотрена возможность задания программных блоков — процедур с общепринятыми операторами программирования. В совокупности с иными средствами входного языка это делает его необычайно гибким, мощным и наглядным.
Как отмечалось, входной язык системы MathCAD — интерпретирующий. В интерпретаторах, например в добром старом Бейсике, листинг программы пользователя просматривается сверху вниз (а в пределах строки — слева направо), и любые указания в программе тут же выполняются. Так же просматриваются и блоки в системе MathCAD. При опознании блока система автоматически запускает внутренние подпрограммы выполнения необходимых действий, например вычисления по формуле, вывод таблицы значений вектора, построение рисунка по его шаблону и т. д. В общем, это напоминает интерпретацию высшего уровня, при которой пользователь не опускается до таких мелочей, как составление необходимых подпрограмм, хотя, как уже было сказано, теперь и это вполне возможно.
Интерпретаторы действуют медленно, поэтому не случайно пользователи, имевшие дело со старыми версиями MathCAD, отмечали медлительность систем, особенно при сложных вычислениях и при построении графиков. Медлительность является и следствием работы системы в графическом режиме, когда малейшее изменение содержания экрана требует его полной перерисовки.
В ряде предшествующих версий (и в новой) была введена экспертная система SmartMath. Она старается использовать при численных вычислениях конечные формулы, полученные в результате символьных преобразований. Порой это дает резкое ускорение вычислений в сравнении с их реализацией численными методами. Операция SmartMath (Быстрая математика) вводится оператором® и словами-директивами. Их число в версии MathCAD 7.0 PRO значительно увеличено, и для ввода операторов и директив символьной математики добавлена специальная палитра. Так что SmartMath превратилась в полноправного члена семьи MathCAD.
Начиная с версии MathCAD PLUS 5.0 в систему введена возможность ее расширения функциями, которые задаются обычными программами на языке Си или Си++. Однако это не позволяет эффективно и просто решить проблему расширения возможностей системы. На Си или Си++ хорошо программируют системные программисты, но они весьма редко разбираются в сути математических задач. Обычные пользователи, освоив возможности MathCAD, не захотят вернуться к тому, от чего уже ушли, — к программированию на достаточно сложном языке. В общем, как в расхожей фразе: "За что боролись, на то и напоролись"!
В связи с этим в версиях MathCAD PLUS 6.0/7.0 PRO появилась весьма изящная функция записи встроенных в документ программных модулей, реализующих типовые управляющие структуры и записанных в столь милом для программистов виде обычных программ.
1.5. Простейшие приемы работы
В простейшем случае работа с системой MathCAD сводится к подготовке в окне редактирования задания на вычисления и к установке форматов для их результатов. Для этого используются различные приемы подготовки блоков. Пока мы рассмотрим лишь вычислительные блоки. В дальнейшем поговорим о вводе текстовых блоков с комментариями и блоков с графикой.
Формульный редактор
Фактически система MathCAD интегрирует три редактора: формульный, текстовый и графический. Для запуска формульного редактора достаточно установить курсор мыши в любом свободном месте окна редактирования и щелкнуть левой клавишей. Появится визир в виде маленького красного крестика. Его можно перемещать клавишами перемещения курсора. Визир не надо путать с курсором мыши, он, как говорится, живет своей жизнью и имеет вид жирной наклонной стрелки.
Визир указывает место, с которого можно начинать набор формул — вычислительных блоков. Щелчок левой клавиши мыши устанавливает визир на место, указанное острием стрелки курсора мыши. В зависимости от места расположения визир может менять свою форму, к чему вы быстро привыкнете.
Так, в области формул визир превращается в синий уголок, указывающий направление и место ввода.
Наборные панели и шаблоны
Подготовка вычислительных блоков облегчается благодаря выводу шаблона при задании того или иного оператора. Для этого в MathCAD служат наборные панели с шаблонами различных математических символов.
Допустим, требуется вычислить определенный интеграл. Для этого вначале надо вывести панель операторов математического анализа; ее пиктограмма в строке инструментов имеет знаки интеграла и производной. Затем следует установить визир в то место экрана, куда выводится шаблон, и на панели сделать активной пиктограмму с изображением знака определенного интеграла (рис. 1.11).
Рис. 1.11 Задание шаблона определенного интеграла и начало его заполнения
В составе сложных шаблонов часто встречаются шаблоны для ввода отдельных данных. Они имеют вид небольших черных квадратиков. В шаблоне интеграла их четыре: для ввода верхнего и нижнего пределов интегрирования, для задания подынтегральной функции и для указания имени переменной, по которой идет интегрирование. На рис. 1.11 шаблон интеграла показан в верхнем левом углу окна редактирования документа.
Для ввода данных можно указать курсором мыши на нужный шаблон данных и, щелкнув левой ее клавишей для фиксации места ввода, ввести данные. На рис. 1.12 отражен момент ввода под знаком квадратного корня выражения для задания подынтегральной функции.
Для ввода подынтегральной функции в приведенном примере требуется совершить следующие действия:
• установив курсор мыши в стороне от места ввода, вывести панель набора арифметических операторов;
• подвести курсор мыши под шаблон ввода функции и щелкнуть левой клавишей для фиксации начала ввода;
• активизировать (мышью) кнопку со знаком квадратного корня на палитре математических символов;
• провести ввод выражения под знаком квадратного корня (при этом возможно редактирование данных с помощью стандартных операций редактирования).
Затем таким же способом надо заполнить остальные шаблоны, т. е. ввести
пределы интегрирования и имя переменной, по которой производится интег-
Рис.1.12 Продолжение заполнения шаблона интеграла
рирование. Установив знак равенства после полученного выражения, можно сразу увидеть результаг вычисления интеграла (см. рис. 1.13). На этом рисунке показаны примеры вычисления и других выражений (суммы, произведения и предела функции) с набором их с помощью палитр. Там же даны и примеры задания текстовых комментариев.
Рис. 1.13 Пример ввода и вычисления определенного интеграла и других выражений
Так же выполняются любые другие разовые вычисления, как простые, так и сложные. Разумеется, есть возможность задавать шаблоны для вычислительных блоков и с клавиатуры, о чем речь пойдет чуть ниже.
При задании сложных вычислений работа системы может быть долгой. Чтобы прервать ее, можно нажать клавишу Esc. MathCAD выведет надпись о прерывании вычислений и небольшое окно с двумя командами: OK — подтвердить прерывание и Cancel (Отмена) — отменить прерывание. После прерывания можно возобновить работу, нажав клавишу F9 или сделав активной пиктограмму с изображением жирного знака равенства.
Текстовый редактор
Текстовый редактор позволяет задавать текстовые комментарии. Они делают документ с формулами и графиками более понятным. В простейшем случае для открытия текстового редактора достаточно ввести символ " (одиночная кавычка). В появившийся прямоугольник можно начать вводить текст. В текстовом блоке визир имеет вид красной вертикальной черточки и отмечает место ввода. Текст редактируется общепринятыми средствами: перемещением места ввода клавишами управления курсором, установкой режимов вставки и замещения символов (клавиша Insert), стиранием (клавиши Del и Backspace), выделением, копированием в буфер обмена, вставкой из буфера и т. д.
Выделение и редактирование объектов
При редактировании математических выражений важной возможностью является выделение их целиком или в виде отдельных фрагментов. По существу это означает замену одномерного маркера в виде синей вертикальной черты на двумерный в виде выделяющего часть выражения синего уголка (см. рис. 1.12, на котором этот маркер выделяет введенное выражение).
В версии MathCAD 7.0 выделение с помощью мыши заметно улучшено и практически не отличается от хорошо известного выделения текстовых выражений. Напомним, что для этого достаточно установить текстовый курсор мыши на начало выделяемого фрагмента, нажать левую клавишу мыши и, удерживая ее, двигать маркер к концу выделяемого фрагмента. Выделенный текст помещается на темном фоне (см. на рис. 1.14 выделенное слово "Сразу" в правом нижнем углу экрана).
Выделение надписей обычно производится с целью изменения стиля, размера и типа шрифтов. Для этого достаточно выделить надпись и сменить шрифт или его параметр (рис. 1.14).
Выделения в математических выражениях, хотя и напоминают выделения в тексте, все же более сложны и требуют для быстрого проведения определенных навыков. Обычно выделения в выражениях задаются синим уголком. Он указывает направление ввода.
Выделение фрагментов математических выражений необходимо для изменения шрифтов, которыми набирается выражение. Например, для изменения шрифта в математических формулах достаточно выделить одну букву, установив выделение в виде жирной вертикальной черты сразу после буквы. Затем можно воспользоваться средствами модификации шрифтов.
Рис.1.14 Примеры выделения и редактирования надписей и организации гиперссылки
Следует отметить, что изменение параметров и типов шрифтов для определенных объектов (например, переменных или констант) действует глобально. Так, если увеличить размеры обозначения какой-либо переменной, то все обозначения других переменных тоже будут увеличены.
Создание гиперссылок
Выделение используется также для копирования в буфер обмена и организации гиперссылки. Гиперссылка в MathCAD 7.0 дает связь выделенного текстового фрагмента с некоторым файлом. Для этого вначале фрагмент выделяется, а затем нажимается кнопка панели инструментов Insert Hyperlink. В появившемся простом окне надо указать полное (с путем) имя файла, который будет загружаться и отображаться в момент активизации фрагмента — гиперссылки. Можно также задать сообщение об ошибке, если файл не будет найден. На рис. 1.14 показан случай, когда с гиперссылкой связан файл Demo с демонстрацией работы MathCAD, на рисунке виден угол окна с документом этого файла.
С помощью гиперссылок можно готовить в среде MathCAD 7.0 электронные учебники и книги высокого качества, имеющие множество гиперссылок, качественные тексты с разнообразными выделениями, математические формулы и графики. Важно отметить, что такие учебники являются "живыми": все примеры в них работают и их можно использовать с различными исходными данными, задаваемыми учениками.
О конструировании и редактировании математических выражений можно говорить много и долго, в книге [14] этой теме посвящена целая глава. Однако в целом этот процесс интуитивный и учитывает тонкости конструирования математических выражений. Главное здесь практика! Мы еще вернемся к описанию некоторых правил конструирования математических выражений (формул).
1.6. Создание, загрузка, сохранение и распечатка документа
Создание нового документа
Кнопка New Worksheet с изображением чистого листа служит для создания нового документа. Она очищает окно редактирования и задает имя документа Untitled N, где N — порядковый номер документа. После этого можно начинать вводить документ с клавишного пульта с применением (при необходимости) палитр математических знаков и функций.
Загрузка документа
Наряду с вводом своих простых документов с клавиатуры бывает полезно опробовать в работе ранее созданные (в том числе демонстрационные) документы. Для этого достаточно активизировать вторую пиктограмму с изображением открывающейся папки или воспользоваться командой Open (Открыть) в позиции File (Файл) главного меню системы. Тогда появится диалоговое окно поиска файла загружаемого документа (см. рис. 1.15).
Рис. 1.15 Диалоговое окно поиска файла документа
Диалоговое окно поиска файлов — типичное для Windows-приложений. С его помощью можно установить дисковый накопитель, просмотреть файловую систему текущего диска, установить каталог и найти файл. Затем, после активизации кнопки ОК диалогового окна, документ будет загружен и с ним можно начинать работу, например просматривая его листинг. Обычно по умолчанию работа идет в автоматическом режиме, так что в документе будут представлены не только задание, но и результаты вычислений.
Вид документа в большом окне MathCAD при использовании обычных средств подготовки документов ничем не отличается от вида документа в более ранних версиях системы 2.0—2.50, ориентированных на MS-DOS. На рис. 1.6 был показан вид основного окна MathCAD 7.0 с загруженным в него документом.
Документ является одновременно и программой, задающей на специальном входном языке алгоритмы решения нужной задачи, и результатами этого решения, представленными в форме чисел, символов, таблиц или графиков. Благодаря этому документ скорее напоминает текст книги по математическим или инженерно-техническим расчетам, чем текст обычной программы. Столь важное достоинство всех версий системы MathCAD сохранилось в новых версиях лишь с той разницей, что текст, формулы и таблицы теперь выводятся разными цветами, шрифтами и размерами.
Сохранение документа
Для сохранения документа с текущим именем достаточно нажать кнопку Save Worksheet с изображением магнитного диска. Файл документа будет записан в тот же каталог, откуда он был вызван. Если документ ранее не записывался, то появится диалоговое окно для его записи.
Печать документа
Для печати текущего документа достаточно нажать кнопку Print Worksheet с изображением принтера. Будет вызвано окно того принтера, который установлен операционной системой Windows 95. Вид окна зависит от примененного драйвера принтера.
1 .7. Основы работы с блоками документов
Выделение блоков
Как уже отмечалось, документ состоит из отдельных блоков. Они могут быть различного типа: тексты (комментарии), формулы, графики, таблицы и т. д. Каждый блок занимает в текущем окне определенную область прямоугольной формы. Для конструирования блоков служат три встроенных в систему редактора: текстовый, формульный и графический.
Для выделения областей блоков можно проделать следующий эксперимент. Поместите курсор мыши в нерабочую часть экрана и нажмите ее левую клавишу. Перемещая мышь по диагонали при удержанной нажатой клавише мыши, вы увидите, как на экране пунктирными черными линиями выделяется прямоугольник. Добейтесь, чтобы в него попало несколько объектов — формул, таблиц, графиков. Все они тут же окажутся обведены прямоугольниками из пунктирных линий (см. рис. 1.16).
Эти прямоугольники являются обычно невидимыми границами областей объектов. Несколько выделенных таким образом объектов образуют блок
Рис. 1.16 Документ с выделенными блоками
выделенных объектов. Он ведет себя как единое целое: его можно перемещать мышью, копировать в буфер обмена и стирать.
Копирование и вставка блоков в буфер обмена
Используя кнопки быстрого задания команд вырезки (Cut, F3 или Ctrl+X) и вставки (Copy, F4 или Ctrl+V), можно перенести выделенные блоки в буфер обмена и поместить их на новое место, указанное курсором мыши. Это дает возможность быстрого наведения порядка с блоками. Рис. 1.17 показывает вид документа после нажатия клавиши F3. Нетрудно заметить, что в данном случае все выделенные блоки исчезли — поступили в буфер обмена.
Рис. 1.17 Вид документа, показанного на
рис. 1.13, после нажатия
клавиши F3
Вставка блоков из буфера обмена в документ
Если нажать кнопку Paste или клавишу F4 (не меняя положения курсора мыши), исчезнувшие блоки вновь появятся на своем месте и вид документа будет подобен показанному ранее на рис. 1.13. Зацепив курсором мыши любой из выделенных блоков и нажав ее левую клавишу, можно (удерживая эту клавишу) перетаскивать блоки с одного места на другое.
Расположение блоков в документе
Расположение блоков в документе имеет принципиально важное значение. Как уже отмечалось, их выполнение происходит справа налево и сверху вниз. Поэтому блоки не должны взаимно перекрываться (хотя небольшое перекрытие обычно не существенно). Указанный порядок исполнения блоков означает, что, например, при построении графика функции или таблицы ее значений вначале должны исполняться блоки, задающие саму функцию и пределы изменения аргумента, а уже затем блок, задающий вывод таблицы или построение графика функции. Все это — следствие работы системы в интерпретирующем режиме.
Доступная область окна редактирования по горизонтали превышает видимую на экране. При этом область окна делится длинной вертикальной линией на две части, левую и правую Горизонтальными линиями документ делится на страницы
Можно разместить некоторые вспомогательные вычисления в правой, невидимой, части окна, а в левую, видимую, вынести задание исходных данных и вывод результатов расчетов Этот прием часто используется в пакетах с примерами применения системы, а также в учебно-демонстрационных программах На рис 118 показан пример подобного решения довольно сложной аэродинамической задачи по построению профиля крыла самолета и линий обтекания его воздушным потоком
Рис.1.18 Пример решения аэродинамической задачи (видимая часть решения)
Использование линеек прокрутки
Полосы прокрутки расположены снизу и справа в окне редактирования документа С их помощью можно перемещать окно просмотра документа по горизонтали и по вертикали Плавно это делается с помощью концевых кнопок прокрутки Можно также задать перемещение окна просмотра с помощью передвигаемого ползунка или установкой курсора мыши на полосу. Во всех случаях перемещение задается при нажатии и удержании левой клавиши мыши.
Если, воспользовавшись полосами прокрутки, вывести в текущее окно обычно невидимую часть документа, на экране дисплея появится расчетная часть задачи (рис 1 19). Она содержит довольно специфические вычисления над данными с применением аппарата вычислений в комплексной форме, поэтому нет смысла объяснять их
Создание документов с невидимой расчетной частью осложняется необходимостью выполнения блоков в строго заданном порядке. Так, при сложных расчетах их результаты могут оказаться намного ниже видимого текста документа. Заглядывая вперед, скажем о двух приемах, облегчающих решение этой задачи. Первый — использование оператора глобального присваивания (знак в виде трех горизонтальных черточек =) В этом случае присваивание может находиться в любой точке документа (например, в его начале или в самом конце) Второй прием — расположение блоков по вертикали так, чтобы исполняемые в первую очередь блоки были чуть выше тех, которые будут исполняться позже
Рис. 1.19 Вычисления в правой части документа, представленного на рис. 1.18
Другой любопытный и полезный прием был использован в прежних версиях системы под MS-DOS — выделение вычисления в невидимой правой части окна надписью /equations В этом случае все вычисления после их ло1 иче-ского вызова выполняются сверху вниз с возвратом к месту их вызова в левой части экрана. Из новой версии этот полезный прием по не совсем понятным мотивам исключен Возможно, разработчики сочли, что вполне достаточно описанных выше приемов
Интересно отметить, что с версией MathCAD PLUS 7 0 можно использовать документы, подготовленные в среде предшествующей версии Это позволяет считать последние версии систем практически совместимыми
1.8. Главное меню системы
Состав главного меню
Верхняя строка окна системы содержит указание на имя системы или текущего открытого окна Следующая строка содержит позиции главного меню Их назначение приведено ниже File (Файл) — работа с файлами, сетью Internet и электронной
почтой, Edit (Правка) — редактирование документов, View (Обзор) — изменение средств обзора, Insert (Вставка) установка вставок объектов шаблонов (включая
графику), Format (Формат) — изменение формата объектов, Math (Математика) — управление процессом вычислений, Graphics (Графика) — работа с графическим редактором, Symbolic (Символика) — выбор операций символьного процессора,
Window (Окно) — управление окнами системы;
Books (Книги) — работа с электронными книгами;
Help (?) — работа со справочной базой данных о системе.
Активизация главного меню
Каждая позиция главного меню может быть сделана активной. Для этого достаточно указать на нее курсором — стрелкой мыши и нажать ее левую клавишу. Можно также нажать клавишу F10 и использовать клавиши перемещения курсора вправо и влево. Затем выбор фиксируется нажатием клавиши ввода Enter.
Для активизации главного меню без применения мыши достаточно нажать клавишу Alt. После этого, нажимая клавиши перемещения курсора, можно перемещать световое выделение по позициям меню. Выбрав нужную позицию для фиксации ввода ее операции, достаточно нажать клавишу Enter.
Еще один быстрый путь входа в нужное подменю — нажатие клавиши Alt и одновременно клавиши с буквой, которая на экране подчеркнута снизу в названии нужной позиции главного меню. Для всех позиций главного меню это прописная буква их имени. Важно не путать регистры смены языков и вводить соответствующую операцию латинскими буквами.
Если какая-либо позиция главного меню делается активной, она выводит ниспадающее подменю со списком доступных и недоступных (но возможных в дальнейшем) операций (команд). Доступные в данный момент операции даны четким шрифтом, а недоступные — шрифтом с характерным затенением, но позволяющим все же прочесть название операции. Перемещение по списку подменю и выбор нужной операции производятся аналогично тому, как это описано для главного меню, с той лишь разницей, что при управлении с клавиатуры используются клавиши перемещения курсора по вертикали.
Подменю управления главным окном
В начале титульной строки имеется кнопка с изображением счетов на фоне буквы М. Она служит для ввода стандартных операций с главным окном системы, принятых в системе Windows 95. Если эта позиция активна, то появляется подменю со следующими операциями (см. рис. 1.20):
Restore (Восстановить) — раскрыть окно приложения из пиктограммы;
Move (Переместить) — переместить окно приложения;
Size (Размер) — изменить размер окна приложения;
Minimize (Свернуть) — свернуть окно в пиктограмму;
Maximize (Развернуть) — перейти в полноэкранный режим;
Close Alt-F4 (Закрыть) — закрыть окно и закончить работу в приложении.
Названия опций даны на английском и русском языках, поскольку возможно применение как русскоязычной, так и оригинальной (англоязычной) операционной системы Windows. He все из этих операций всегда доступны. Названия недоступных операций, как отмечалось, даны нечеткими (затененными) надписями. К примеру, если окно имеет максимальный размер, то операции Move, Size и Maximize недоступны.
Меню управления окном активного документа
Каждое окно активного в данный момент документа также имеет подобное меню, инициализируемое кнопкой в левом верхнем углу раскрытого окна. Это меню имеет ранее указанные позиции и еще одну дополнительную:
Рис. 1.20 Меню для работы с окнами
Next Ctrl-F6 (Следующий документ) — активизировать следующий документ
Если окно раскрыто полностью, то указанная кнопка располагается в самом начале строки с главным меню Система MathCAD может работать с многими окнами, т е одновременно с рядом задач Окно каждой задачи образуется после загрузки текста ее документа В дальнейшем операции с окнами будут описаны более подробно
1.9. Что нового в MathCAD 7.0 PRO?
Большинство пользователей системой MathCAD 7 О PRO наверняка знакомы с одной из предшествующих версий, скорее всего с MathCAD PLUS 6 О PRO Что нового ожидает их при переходе к версии 7 0 ? К радости одних пользователей и к печали (если не к ужасу) других, изменений оказалось довольно много Некоторые из них просто улучшили и расширили возможности системы, другие сделали ее использование более строгим и естественным, а вот третьи привели к отмене уже известных приемов работы с системами этого класса В целом пользовательский интерфейс системы и функции различных позиций главного меню приблизились к применяемым в таких известных приложениях операционной системы Windows 95, как текстовый редактор Word и электронные таблицы Excel
Перечислим основные отличия новой версии MathCAD от предыдущей.
• отсутствие проблемы 2000 года,
• существенно переработанный и приближенный к интерфейсу текстового процессора Word 95 пользовательский интерфейс,
• ввод новой строки в документе нажатием клавиши Enter (или Ctrl+F9),
• удаление новой строки нажатием клавиши Backspace (или Ctrl+FlO),
• естественное выделение в выражениях мышью,
• задание в первый раз значений переменных нажатием клавиши = (она при этом дает знак присваивания =, но может использоваться и для задания вывода при численных расчетах),
• быстрое построение (QuickPlot) графиков в декартовых и полярных координатах с автоматической установкой пределов изменения независимых переменных;
• новая палитра символьной математики с расширенными операторами;
• более удобный и наглядный синтаксис символьных операций;
• возможность обработки ошибок в ходе вычислений;
• новые операторы программирования on error, continue и return;
• применение в программах операторов символьных операций;
• новый тип строковых данных, констант и переменных;
• восемь новых функций для работы со строковыми данными;
• задание единиц измерений в системе СИ;
• возможность подготовки сложных документов разными пользователями, работающими в разных местах, с помощью операции Collaboratory;
• возможность обмена документами через сеть Internet и Web;
• появление более оперативного центра ресурсов (Resource Center) вместо быстрых "шпаргалок" QuickSheet, а также электронных книг, самоучителя и ДР.;
• моделирование (симулирование) работы сложных систем, построенных из функциональных блоков, с помощью системы MathConnex, имеющей 16 компонентов;
• возможность использования функций других систем (Excel, Axus, MatLAB и др.) и фактическая интеграция с ними.
Некоторые из указанных изменений можно отнести к разряду приятных мелочей; это, например, расширенное действие знака =. Другие, такие, как интеграция с иными системами и применение MathConnex, являются серьезными дополнениями системы, открывающими перед ней множество новых возможностей. Более подробно они будут описаны в дальнейшем (в Главе 13 "Интерпретатор приложений MathConnex").
Глава 2 Работа с файлами
2.1. Позиция главного меню File
Позиция File (Файл) главного меню служит для работы с файлами документов Файлом называют имеющую имя упорядоченную совокупность данных или кодов программ, размещенную на том или ином носителе, обычно на жестком или гибком диске либо CD-ROM Как уже отмечалось, файлы документов в MathCAD имеют расширение mcd, которое указывается сразу после имени файла Такие файлы имеют текстовый формат, и их легко прочитагь и модифицировать любым текстовым редактором.
Файлы документов MathCAD содержат полный текст программы, выводящей документ в окно редактирования, с указаниями координат расположения блоков, фактического содержания и характера выполняемых операций, форматов предоставления информации и т д Таким образом, файл является по сути программой, записанной на внутреннем (промежуточном) языке программирования системы Файлы могут содержать и результаты вычислений Предусмотрена возможность записи документов и в особом формате RTF, созданном для хранения сложных многокомпонентных данных (содержащих тексты и 1рафики)
Важно отметить, что даже при записи документов со сложными рисунками используется не запись их BitMap-копии, а именно программы вывода документа Поэтому файлы с расширением mcd невелики по размеру и их легко передавать по современным средствам телекоммуникаций, например по Internet Они требуют небольшого свободного пространства на дисках для записи
Помимо обычных операций работы с файлами (их запись на диск и загрузка с диска) предусмотрены возможности распечатки документов принтерами различного типа Если сделать позицию File (Файл) главного меню активной, появится ниспадающее подменю (см рис 2.1)
Рис. 2.1 Переднее панно системы MathCAD с активной позицией File главного меню
Подменю содержит ряд операций, разбитых на группы. В первую группу входят следующие операции работы с документами:
New [Ctrl+N] (Создать) — открыть окно для нового документа;
Open... [Ctrl+0] (Открыть) — открыть существующий документ;
Close [Ctrl+F4] (Закрыть) — закрыть документ.
Вторая группа команд служит для сохранения документов:
Save [F6] (Сохранить) — сохранить на диске текущий документ;
Save as... [Ctrl+S] — сохранить на диске текущий документ под (Сохранить как) новым именем.
Третья группа команд предназначена для работы с телекоммуникационными средствами:
Collaboratory... — установить связь с фирмой — разработчиком (Сотрудничество) системы для обеспечения совместной работы над документами;
Internet Setup... — установить модемную связь с Internet;
(Установка Internet)
Send... (Отправка) — отправить документ по электронной почте или по Internet.
Четвертая группа команд служит для подготовки к печати и самой печати документов:
Page Setup... — установить левый и правый отступы (Параметры страницы) на странице;
Print Preview... (Просмотр)— предварительно просмотреть документ перед печатью;
Print... [Ctrl+0] (Печать) — распечатать документ.
Последняя из этих операций позволяет распечатать весь текст документа с комментариями, математическими формулами, таблицами и графиками. Печать производится на принтере в графическом режиме и не очень быстро. Зато используются все шрифты и печатаются все математические спецзнаки. Можно печатать и части документа. Лазерные принтеры дают превосходное качество печати, но обычно черно-белой (цветные лазерные принтеры пока слишком дороги). Струйные принтеры могут легко реализовать печать в цвете.
Пятая группа представлена командой Exit [Alt+F4] (Выход) — выйти из среды MathCAD.
Перед этой командой имеется перечень последних файлов, с которыми работала система, что позволяет загрузить любой из них без предварительного поиска.
Вернемся к широко используемым операциям первой группы и рассмотрим их более подробно. Заметим, что некоторые из них могут быстро вводится нажатием функциональных клавиш (они указаны в квадратных скобках после наименования операции).
2.2. Подготовка к вводу нового документа (New)
Операция New [Ctrl+N] (Создать) обычно используется, когда пользователь намерен создать новый документ. Она выводит на экран новое текущее окно редактирования и переводит систему в режим редактирования.
Отличительной особенностью новой версии MathCAD является возможность выбора стиля нового документа. При исполнении операции New выводится окно выбора стиля документа, показанное на рис. 2.2.
Рис. 2.2 Окно выбора стиля документа
При этом только стиль Normal (Нормальный) создает пустое окно редактирования Другие стили создают окно с заготовками (шаблонами) докумен тов Эти заготовки пользователь может использовать для своего документа К сожалению, они англоязычные, но в них можно заменить (или дополнить) надписи надписями на русском языке, используя соответствующие наборы шрифтов
На рис 2 3 показана часть документа со стилем Bookone В шуточной форме показано заполнение ее в заданном стиле русскоязычными надписями Можно просмотреть и остальные стили и использовать их для своих целей Оформление документов в определенном стиле является одним из правил подготовки документов высокого полиграфического качества
Рис. 2.3 Часть документа в стиле Bookone
При открытии документа с пустым окном редактирования (в стиле Normal) графический курсор — маленький крестик (красный при работе с цветным дисплеем) — устанавливается в верхний левый угол окна с небольшим отступом от краев Становятся допупными все операции ввода объектов документа и их редактирования Текущий документ приобретает имя Untitled (в переводе "Безымянный"), и возле этого имени в верхней части окна указы вается номер документа Поскольку MathCAD — многооконная система, возможно существование нескольких окон с этим именем Список имен документов, с которыми пользователь работал последнее время, хранится системой и выводится перед позицией Exit подменю File (Файл) главного меню. Обычно после применения этой операции пользователь начинает ввод документа и его редактирование, используя для этого оконный редактор.
Операция New (Создать) дублируется кнопкой с пиктограммой в виде чистого листка, помещенной в панель инструментов. Разумеется, ее применение возможно только в том случае, когда эта панель (строка с пиктограммами) присутствует. При этом данная кнопка задает стиль нового документа Normal, так что при ее активизации получается просто чистое окно редактирования.
2.3. Ввод документа с диска (Open...)
Операция Open... [Ctrl+0] (Открыть) служит для загрузки документа из его файла с выбором из директории файлов. При исполнении этой операции появляется диалоговое окно выбора файла (см. рис. 1.15). К аналогичному действию приводит активизация пиктограммы в виде открывающейся папки в инструментальном ящике системы.
В этом окне с помощью меню выбора дискового накопителя и вертикального слайдера можно пройтись по всем именам дисков, их каталогам и файлам текущего каталога, чтобы выбрать нужный файл для загрузки. Имя файла и каталог можно указать в двух первых позициях окна. Для выбора файла или каталога используются мышь и клавиши перемещения курсора. Выбор завершается нажатием клавиши Enter или указанием курсора мыши на изображение кнопки ОК в окне выбора файлов с последующим нажатием левой клавиши мыши. Это приводит к загрузке документа в текущее окно системы. Использование кнопки Cancel позволяет отказаться от выбранной операции.
Можно поступить и иначе: указав курсором мыши на нужный файл, быстро нажать дважды левую клавишу мыши. Активизация курсором мыши кнопки Cancel диалогового окна (или нажатие клавиши пульта Esc) ведет к отказу от операций выбора файла.
Окно Open имеет четыре кнопки быстрого управления для перехода на различные уровни файловой системы. Перечислим их слева направо:
• На один уровень вверх
• Создание новой папки
• Список
• Таблица
Кнопка "На один уровень вверх" переводит окно в отображение более старшей папки (каталога), а кнопка "Создание новой папки" задает в текущем каталоге новую папку и предлагает ввести ее имя. На рис. 2.4 показан пример задания новой папки Myfile.
Две другие кнопки устанавливают отображение файлов в выбранной папке в форме списка (как на рис. 1.15) или в форме таблицы (как на рис. 2.4). Табличная форма менее компактна, но дает больше данных о каждом файле или каталоге.
После загрузки файла с документом его текст появляется в текущем окне и по умолчанию начинается исполнение документа в режиме автоматических вычислений. Можно отключить этот режим, тогда загруженный документ не будет исполняться до подачи команды на вычисления.
Рис. 2.4 Пример задания новой папки из окна Open
Для вызова одного из ранее использовавшихся документов достаточно указать курсором мыши его имя в списке, размещенном над операцией Exit в позиции File (Файл) главного меню. Щелкнув один раз левой клавишей мыши, можно загрузить выбранный файл в текущее окно редактирования.
При работе со многими документами возможна ситуация, когда все восемь окон окажутся уже заполненными. Тогда загрузка нового файла становится невозможной и система выводит сообщение об этом с предложением о закрытии окон командой Close (Закрыть).
2. 4. Запись документа на диск без переименования (Save)
Эта операция записывает файл на диск с использованием его текущего имени и с учетом всех изменений, которые вводились в документ в ходе его редактирования, доработки или дополнения. Такая операция удобна, если вы совершенствуете ранее созданный и имеющий свое имя документ. Она дает быстрый способ записи файла на диск без поиска его места в файловой структуре и без изменения имени.
Следует с осторожностью пользоваться этой командой в том случае, когда вы модернизируете какой-либо документ, но желаете сохранить оригинал. В случае применения операции Save [F6] (Сохранить) исходный файл-оригинал будет заменен новым. Чтобы этого не произошло, следует пользоваться командой записи Save As... (Сохранить как), описанной в следующем разделе.
Командой Save (Сохранить) рекомендуется пользоваться периодически при подготовке сложных документов. Это позволяет сохранить все изменения в документах и избежать потери документа при ошибочных действиях, например при случайном выключении компьютера до записи файла.
Команда Save (Сохранить), обозначавшаяся в предшествующих версиях как Save Document, выполняется без выдачи каких-либо предупредительных сообщений.
2.5. Запись документа на диск с переименованием (Save As...)
Операция Save As... [Ctrl+S] (Сохранить как) отличается от предыдущей тем, что перед записью файла на диск в диалоговом окне появляется запрос на ввод имени файла (рис. 2.5), что позволяет задать любое имя, в том числе отличное от имени дорабатываемого файла-оригинала. Тем самым можно отдельно записать доработанный документ и сохранить оригинал.
Рис. 2.5 Диалоговое окно для записи файла с указанием его имени
Имя файла может быть коротким, без указания имени диска и подкаталогов. Тогда файл будет помещен в текущий каталог. Однако можно указать и полное имя файла, например:
d:\wmcad\book\demo.mcd
В этом случае файл demo.mcd будет записан на диск d в подкаталог book, имеющийся в каталоге wmcad.
Такая операция особенно полезна при доработке и модификации файлов, например входящих в комплект поставки системы, когда надо сохранить оригинальные файлы в неприкосновенности. Для этого достаточно записать измененные файлы под новыми именами. MathCAD не предусматривает создания резервного bak-файла при использовании команды Save (Сохранить). Поэтому надо внимательно следить за ее использованием и применять команду Save As... (Сохранить как), когда есть подозрения даже в случайной модификации исходных файлов.
2.6. Закрытие документа (Close)
Эта операция закрывает окно с текущим документом, и система переходит к работе с окном предшествующего документа (либо к пустому первому окну, если другие документы не вводились).
Как уже отмечалось, система MathCAD для работы с каждым документом создает свое окно. Текущее окно обычно видно на переднем плане. Команда Close [Ctrl+F4] (Закрыть) позволяет убрать ставшее ненужным окно текущего документа и освободить память для ввода новых документов.
Если какой-либо из документов в закрываемых окнах подвергался модификации, то система спросит, надо ли записывать документ на диск (рис. 2.6).
Если документ не модифицировался, соответствующее окно просто закрывается. Окно, показанное на рис. 2.9, создает система Windows. Закрыть окно также можно, используя кнопку с треугольником, острие которого обращено вниз, или команду Close меню управления окном.
Следует помнить, что каждый загруженный документ занимает определенный объем памяти. Поэтому команда Close является эффективным средством освобождения памяти, особенно когда закрывается окно с большим документом. Не рекомендуется использовать более десятка окон.
Рис. 2.6 Диалоговое окно, появляющееся при закрытии окна модифицированного документа
Опыт показал, что иногда при заполнении всех окон вместо команды Close удобнее просто задать выход из системы с помощью команды Exit (Выход) Тогда все окна, содержащие документы, не подвергнутые модификации, закроются автоматически (см. ниже) Закрытие модифицированных документов сопровождается запросом о том, желаете ли вы сохранить документ в измененном виде или нет
Затем надо вновь загрузить MathCAD Быстро закрыть окна по одному без выхода из системы MathCAD можно, нажимая клавиши Ctrl и F4 (каждое такое нажатие закрывает очередное окно)
2.7. Групповая работа над документом (Collaboratory...)
Новая возможность шестой версии системы MathCAD — более активная поддержка средств телекоммуникаций Непременными условиями для этого являются оснащение ПК телефонным модемом и его инсталляция
MathCAD 7 О PRO пошла в этом направлении еще дальше в ней появилось средство для организации совместной работы над сложными документами (проектами) Если указанные выше условия выполнены, то можно через сервер фирмы MathSoft установить связь между различными пользователями для организации совместной работы Для этого служит команда Collaborato-гу... в подменю позиции File главного меню.
К сожалению, большинство наших пользователей пока не подключено к Internet, поэтому, когда они применяют команду Collaboratory..., вызывается окно с именем No Connected ("Нет подключения"), показанное на рис 2 7
Рис. 2.7 Окно No Connected, указывающее на отсутствие подключения к Internet
Если вы подключены к Internet, то в этом окне можно будет задать необходимые для совместной работы параметры. Работа с Math CAD 7.0 PRO в сети Internet рассмотрена в последней главе данной книги.
2.8. Установка входа в сеть (Internet Setup...)
Если ПК, на котором установлена система MathCAD, подключен к модемной сети, то с помощью команды Internet Setup... можно подключиться к Internet. Эта команда выводит довольно простое диалоговое окно, которое показано на рис. 2.8.
Рис. 2.8 Окно подключения к Internet
В этом окне надо установить имя пользователя (по умолчанию оно задается таким, каким было указано при регистрации системы), адрес для связи (по умолчанию задан сервер фирмы MathSoft) и адрес электронной почты. Кроме того, следует определить данные серверов, ресурсов Internet. Описание этих процедур выходит за рамки нашей книги, поскольку сильно зависит от конкретных условий подключения к Internet и к математическим способностям MathCAD прямого отношения не имеет.
2.9. Отправка документов по электронной почте (Send...)
С помощью команды Send... документы можно отправить и по электронной почте. Для этого следует выполнить ряд простых операций с применением так называемых Мастеров операционной системы Windows 95. Мастерами
Рис. 2.9 Начальное окно Мастера установки модемной сети
называют диалоговые окна, позволяющие разделить процесс инсталляции или установки периферийного оборудования на ряд довольно простых шагов.
На рис. 2.9 показано начальное окно Мастера установки связи по электронной почте. Нажимая кнопку Next, можно перейти к следующему шагу установки и т. д.
Дальнейшие действия пользователя зависят от обстоятельств установки сетевого оборудования и инсталляции его программного обеспечения.
2.10. Установка параметров страницы при печати (Page Setup...)
Печать документов — важная возможность системы. В общем случае она предполагает установку параметров печатаемой страницы, ее предварительный просмотр и затем уже печать на выбранном типе принтера с возможной коррекцией ее параметров.
Команда Page Setup... (Параметры страницы) служит для установки параметров печатаемых страниц. При ее выполнении появляется диалоговое окно, показанное на рис 2.10 в центре экрана.
Следует отметить, что это окно принадлежит системе Windows. Непосредственно подлежит установке ширина отступа (поля) со всех сторон бумажного листа: Left (левый), Right (правый), Тор (верхний) и Bottom (нижний). Отступы устанавливаются в дюймах. Кнопки Headers... и Footers... позволяют ввести колонтитулы вверху и внизу документа при его печати. Кнопка Cancel (Отмена) отменяет эту операцию, а ОК фиксирует ее данные.
Рис. 2.10 Диалоговое окно установки параметров печатаемой страницы
2.11. Предварительный просмотр страниц печати (Print Preview...)
Даже одна страница большого документа не видна полностью на экране дисплея. Поэтому перед печатью полезно просмотреть расположение элементов документа на странице. Для этого служит команда Print Preview... (Просмотр), которая выводит контрольное окно с изображением будущей напечатанной страницы (см. рис. 2.11). Такая весьма полезная команда появилась в системах MathCAD начиная с версии 5.0.
Рис. 2.11 Предварительный просмотр страницы перед печатью
Вверху окна видны кнопки управления просмотром страницы. Они становятся активными только в том случае, если просматривается объемный документ, не помещающийся на одной стандартной странице (формат А4). Треугольники на этих кнопках показывают на возможное направление просмотра. Внизу окна контроля имеются кнопки Print (Печать) для запуска печати, Close (Закрыть) для выхода из просмотра и закрытия диалогового окна и Page Setup... (Страница...) для вызова диалогового окна установки параметров страницы (описывалось выше).
2.12. Печать документов (Print...)
Команда Print... [Ctrl+0] (Печать) служит для запуска печати. Нередко эта команда используется как основная для печати, если формат страницы и установки принтера были заданы ранее и устраивают пользователя. Команда Print... имеет в панели инструментов дублирующую пиктограмму с изображением принтера.
При запуске команды Print... появляется диалоговое окно, показанное на рис. 2.12. Это окно также не принадлежит системе MathCAD — используется стандартное окно печати Windows.
Используя окно печати, имеется возможность установки параметров принтера. Поскольку разные принтеры имеют различное программное обеспечение (драйверы) печати, вид окна на рис. 2.12 может заметно отличаться от приведенного для известного лазерного принтера HP LaserJet 5L компании Hewlett Packard.
Windows позволяет осуществлять печать с помощью принтеров нескольких типов. Один из них задан как рабочий (основной). В диалоговом окне
Рис. 2.12 Окна печати и установки параметров принтера
можно указать диапазон страниц печати, число копий и разрешение принтера В целом диалог с компьютером при осуществлении этой операции прост и нагляден
Вид исходного документа при печати, как правило, сохраняется Естест венно, если он многостраничный, то печатаются отдельные страницы (они разделены характерной пунктирной линией) Современные принтеры (особенно лазерные и струйные) имеют более высокое разрешение при печати, чем разрешение дисплея Поэтому качество отпечатанного документа у них выше, чем видимое на экране
Документы MathCAD могут иметь двойную ширину и большую длину Тогда вначале печатаются все страницы левой половины широкого документа, а затем уже страницы правой половины, даже если они пустые (разумеется, при этом принтер вытолкнет пустой лист) Склеив страницы, вы получите полную распечатку документа
Прежние версии MathCAD, нелегально поставляемые на CD-ROM, в буквальном смысле наказывали пользователей таких версий отказом от печа ти документов в среде Windows 95 Новая версия этим пакостным свойством уже не обладает' проблем с печатью у новой версии уже не зафиксировано
2.13. Выход из системы (Exit)
Операция Exit [Alt+F4] (Выход) используется для окончания работы с системой. Перед этой операцией необходимо побеспокоиться, чтобы все загруженные ранее документы, подвергавшиеся редактированию и модификации, были сохранены на диске с помощью команды Save As... (Сохранить как) или Save (Сохранить) Тогда при использовании операции Exit можно на блюдать последовательное исчезновение окон документов Если пользователь забыл записать какой-либо документ на диск, система сообщит об этом, выдав запрос. Нужно ответить Y, если документ нужно сохранить, и N — если сохранения не требуется.
После выхода из системы MathCAD происходит возврат в среду Windows. Не следует применять эту команду, если вам необходимо временно выйти из системы. Тогда лучше свернуть MathCAD в пиктограмму, активизировав курсором мыши кнопку с жирной горизонтальной чертой в конце титульной строки окна. Можно также воспользоваться переключателем программ Windows, нажимая клавиши Alt и Tab и выбирая программу по названию, появляющемуся в верхней части экрана. Исключением из этого правила является описанный выше прием очистки всех окон с помощью команды выхода из системы. При этом выход из системы и ее повторная загрузка займут меньше времени, чем последовательная очистка всех окон.
Глава 3 Редактирование документов
3.1. Общие приемы редактирования документов (Edit)
Редактирование документов в ранних версиях системы MathCAD под MS-DOS было в определенном смысле искусством. Следовало помнить десятки сочетаний клавиш для ввода математических спецсимволов, шаблонов и греческих букв, правила стирания и вставки знаков в формулы и т. д. Все эти правила (несмотря на некоторые элементы их интуитивности) быстро забывались, и пользователю приходилось рыться в документах для их поиска или действительно полагаться на свою интуицию. Нередко это вело к тому, что замена в формуле какой-либо переменной или показателя степени легче обеспечивалась повторным набором блока целиком, чем применением напрочь забытых приемов редактирования.
Подобный недостаток полностью устранен в новой версии системы, в основном благодаря возможности конструирования формул с помощью мыши и готовых наборов (палитр) специальных математических символов. При этом разработчики новой версии MathCAD наконец-то решились на важный шаг — отказались от полного сохранения правил редактирования и ввода объектов, к которым привыкли пользователи ранних версий системы MathCAD. Многие из этих правил сохранены, но не все. Зато набор математических символов в MathCAD стал напоминать эту операцию в текстовом редакторе Word 95 из пакета Microsoft Office 95.
Большая часть процессов редактирования производится непосредственно с отображением объектов в текущем окне редактора. Разумеется, редактирование возможно только после ввода в текущее окно редактора одного или ряда шаблонов объектов. В противном случае часть операций редактирования осуществить будет нельзя и в меню редактирования Edit (Правка) такие операции будут указаны затененным шрифтом.
Ввод объектов (математических выражений, текстовых комментариев, графиков и др.) в текущее окно редактора производится по-разному. Он будет неоднократно описан по мере изложения последующего материала книги.
Здесь мы ограничимся парой простых примеров. Так, для задания переменной х=1 и вычисления значения функции sin(x) можно воспользоваться вводом с клавиатуры.
Нажимаемая клавиша |
Изображение |
Комментарий в окне |
х |
X |
Ввод имени переменной |
X:= |
Ввод символа присваивания:- |
|
1 |
x:= 1 |
Ввод числовой константы 1 |
Enter |
Фиксация ввода, скачок курсора |
|
s i n |
s si sin |
Ввод имени функции sin |
( |
sin( |
Ввод левой скобки ( |
х |
sin(x |
Ввод имени переменной х |
) |
sin(x) |
Ввод правой скобки) |
sin(x) = |
Ввод знака вывода = |
|
Enter |
sin(x) - 0.841 |
Вычисление sin(x)=sin(l) |
Даже на этом простом примере видны некоторые особенности входного языка общения с системой. Так, символ присваивания:= отличен от обычно используемого в математике знака равенства =. Это обстоятельство связано с тем, что знак равенства интерпретируется в математических выражениях по контексту. Например, х=у означает либо присвоение переменной х значения ранее определенной переменной у, либо просто факт логического равенства значения х значению у.
Такая двойственность недопустима в машинных программах. Поэтому в системах MathCAD долгое время знак = использовался только как знак вывода результатов вычислений, а для присваивания переменным значений применяется знак:=. Наконец, для обозначения отношения величин х и у как равенства используется жирный знак равенства.
В последней версии MathCAD знак = допустимо применять и как знак присваивания. Система автоматически заменяет его на знак:= при первой операции присваивания. Это происходит благодаря тому, что система "знает ", что перед первым присваиванием переменная не определена и, следовательно, знак = в качестве знака вывода значения переменной не может использоваться. Так что его можно применять для присваивания. Например, если вы введете в первый раз х=2, то система представит это в виде х:=2. Однако при втором присваивании надо писать х:=3 (если задать х=, то система тут же выдаст х=2, т. е. знак = будет уже означать вывод).
Интересно отметить, что для ввода знака:= предназначена клавиша с двоеточием (:). А клавиатурный знак \, к примеру, вводит обычное изображение квадратного корня. Если мы хотим создать вектор с именем V, элементы которого имеют значения от 1 до 5, придется набрать:
V:1;5
На экране дисплея в текущем окне появится:
V:=1..5
Здесь клавиша, содержащая точку с запятой (;), вводит символ перечисления значений "от до" в виде двух точек (..). Этот прием придает переменной V статус ранжированной, по существу вектора с элементами 1, 2, 3, 4 и 5 в нашем примере.
Можно огорчиться, когда узнаешь, что таких правил ввода десятки. Объясняется это тем, что многих математических спецсимволов нет в виде надписей на клавиатуре. Клавиатура ПК приспособлена для ввода простых текстов, а отнюдь не для ввода сложных математических формул и относящихся к ним математических знаков, например квадратного корня, знаков суммы и произведения, интеграла и т. д.
На самом деле проблема не столь ужасна, как кажется с первого взгляда (она действительно нервирует начинающих пользователей, работающих с ранними версиями системы MathCAD). Во-первых, многие знаки вводятся интуи-гивно, стоит вспомнить их начертание или смысл. Например, знак:"= вводится целиком с помощью начального двоеточия, а знак квадратного корня вводится знаком \ — частью его изображения. По мере описания системы будут указаны клавиши для ввода тех или иных операторов. Во-вторых, как уже отмечалось, в описанной версии MathCAD эта проблема практически снята благодаря возможности выбора спецсимволов из их наборов (палитр) в наборных панелях. Достаточно установить графический курсор в нужном месте окна и выбрать мышью пиктограмму соответствующего спецсимвола из выбранной палитры символов. Нажатие левой клавиши мыши вызовет вывод на место курсора шаблона спецзнака. Далее надо заполнить выделенные темными прямоугольниками места шаблона, и соответствующий объект будет полностью введен. Пример заполнения шаблона для интеграла мы уже приводили.
Для заполнения шаблонов операндов надо вначале наметить нужный шаблон с помощью клавиш перемещения курсора. Еще удобнее сделать это с помощью мыши, указав перемещаемым маркером мыши на нужный шаблон и нажав ее левую клавишу. Активный шаблон помечается синим уголком, указывающим направление ввода (ранее это делал синий прямоугольник со скосом). Теперь можно вводить операнд. Это повторяется для других шаблонов ввода операндов.
Оставив на потом описание некоторых других деталей ввода (например, выделение частей объектов, перемещение курсора по объектам и др.), рассмотрим операции, вводимые при активной позиции Edit (Правка) главного меню (см. рис. 3.1).
Рис. 3.1 Экран системы при активной позиции Edit главного меню
Как видно из рис. 3.1, позиция Edit главного меню выводит подменю, содержащее следующие операции:
Undo [Alt+BkSp] — отменить последнюю операцию (Отменить изменения) редактирования;
Redo (Повторить) — повторить последнюю операцию редактирования;
Cut [Ctrl+X] (Вырезать) — переместить выделенный объект в буфер обмена;
Copy [Ctrl+C] (Копировать) — скопировать выделенный объект в буфер об мена;
Paste [Ctrl+V] (Вставить) — вставить содержимое из буфера обмена в до кумент;
Paste Special... — вставить содержимое из буфера обмена (Специальная вставка) в различном формате (в формате Mathcad или BITMAP, например);
Delete [Ctrl+D] (Удалить) — стирание выделенных объектов;
Select All (Выделить все) — выделение всех объектов документа;
Find... [Ctrl+F5] (Найти) — найти заданную текстовую или математичес кую строку;
Replace... [Shift+F5] — найти и заменить математическую или
(Заменить) текстовую строку;
Go to Page... — расположить начало указанной страницы
(Перейти к странице) в начале рабочего документа MathCAD;
Check Speling... проверка орфографии (для англоязычных
(Контроль орфографии) документов);
Links... (Связи) — задание связи с документом;
Object (Объект) — редактирование вставленного в документ объ екта.
Здесь прежде всего надо отметить очередной казус совместной работы англоязычной MathCAD с русскоязычной (локализованной для российских пользователей) операционной системой Windows 95: последняя позиция Object в подменю Edit записана на русском языке!
Многие из операций редактирования используют буфер обмена (Clipboard). Так называется специально организованная и динамически изменяющаяся область памяти в операционной системе Windows. В нее могут помещаться различные (обычно предварительно выделенные) объекты и документы. Буфер обмена можно использовать для организации обмена частями документа как в пределах текущего документа, так и между различными документами и даже приложениями.
Рассмотрим операции редактирования более подробно.
3.2. Отмена операции редактирования (Undo) и ее повтор (Redo)
Команда Undo [Alt+BkSp] (Отменить) служит для устранения последней операции редактирования. Обычно она применяется, если в ходе редактирования установлено, что введен неправильный знак либо неверное имя или значение переменной. Тогда следует отменить последнюю операцию редакги-рования, что и делает команда Undo.
Надо отметить, что она применима только к тем блокам, в которые введен курсор и в которых начаты операции редактирования. В других случаях команда Undo неактивна. При ее применении восстанавливается то содержимое блока, которое было в нем до операции редактирования, например в введенном выражении
х:= exp(sin(l))
Вы решили исправить функцию sin на функцию cos и стали стирать имя функции sin, но вспомнили, что это исправление неверно Достаточно ввести команду Undo, и функция sin окажется восстановленной. Действие этой команды распространяется только на одну последнюю операцию
Бывает, однако, что, отменив последнюю операцию редактирования, пользователь все же решает ее ввести снова. Для этого служит операция Redo
3.3. Выделение объектов и перенос их в буфер обмена (Cut)
Операция Cut [Ctrl+X] (Вырезать) пересылает выделенный сплошным или пунктирным прямоугольником объект в буфер обмена системы Windows Вы делить сплошным прямоугольником объект можно, введя в него мышью гpaфический курсор и нажав дважды левую клавишу мыши. Пересылаемый one рацией Cut объект поступает в буфер обмена, а его изображение в окне редактирования исчезает (это напоминает вырезку рисунка и его наклейку в другое место — буфер). Для пересылки объекта в буфер обмена подходит и средство, использовавшееся в ранних версиях системы — нажатие клавиши F3.
Объект или группу объектов можно целиком выделить и другим путем. Подведите курсор к объекту (но не вводите в него) Нажмите левую клавишу мыши и, не отпуская, сдвиньте мышь по диагонали. На экране появится прямоугольник из пунктирных черных линий, размеры которого задаются перемещением мыши Как только в этот прямоугольник попадет хотя бы часть какого-либо объекта, этот объект окажется обведен прямоугольником из сплошных черных линий.
Как только левая клавиша мыши будет отпущена, основной прямоугольник исчезнет, но все выделения объектов останутся. Так можно выделить сразу несколько объектов В этом случае они будут выделены пунктирными
Рис. 3.2 Пример выделения объектов, расположенных в разных местах документа
линиями. Если надо выделить объекты поодиночке (рис. 3.2), делайте это с помощью мыши при нажатой и удерживаемой клавише Ctrl или Shift. Подведите курсор мыши к нужному объекту и щелкните левой клавишей — объект будет выделен пунктирным прямоугольником. Далее переходите к выделению другого объекта. Расположение выделяемых объектов и порядок их выделения при этом могут быть любыми.
Группа выделенных объектов ведет себя как единый блок, который можно перетаскивать при нажатой левой клавише мыши, что наглядно демонстрирует рис. 3.3. На нем выделенный на рис. 3.2 блок из трех объектов перенесен на новое место. Для переноса достаточно уцепиться курсором мыши за край выделения любого блока и добиться, чтобы курсор превратился в темное изображение ладони. Это будет означать возможность перемещения блоков. Напоминаем, что если курсор приобретает вид двусторонних стрелок, то это означает возможность растяжения выделенного блока.
Рис. 3.3 Пример перенесения выделенных блоков на новое место
В новой версии системы улучшено выделение выражений с помощью мыши. Используя мышь, легко выделять даже отдельные фрагмента формул, что иллюстрирует рис. 3.4. Это открывает обширные возможности конструирования формул из фрагментов набранных ранее формул. Сохранены и возможности изменения выделений с помощью клавиш управления курсором и клавиши пробела. Например, для расширения выделения на все выражение удобно применять клавиши пробела.
При выделении мышью текстовых надписей можно выделить и любой фрагмент текста, вплоть до одиночного символа. В формулах также можно выделить любую односимвольную переменную. Однако в математических выражениях нельзя выделять отдельные символы в именах функций — они выделяются целиком.
Команда Cut выполняется также комбинацией клавиш Shift+Del. Щелчок левой клавишей мыши при курсоре, помещенном за пределы выделенных объектов, снимает все выделения.
Рис. 3.4 Пример выделения мышью части математической формулы
3.4. Копирование объекта в буфер обмена (Copy)
Операция Copy [Ctrl+C] (Копировать) аналогична Cut (Вырезать), но с одним существенным отличием выделенный объект (или блок объектов) переносится в буфер обмена, но не уничтожается в окне редактирования. Эта операция обычно используется в том случае, когда нужно перенести заданный объект в несколько документов, оставив при этом оригинал на своем месте, или если объект либо блок объектов нужно повторить в другом месте документа.
Особенно полезна операция Copy при составлении документа из частей других документов (см. рис. 3.5). Если переключиться в другое окно, то скопированная и занесенная в буфер обмена информация может быть помещена в это окно с помощью операции Paste (Вставить), описанной ниже.
Рис. 3.5 Пример переноса выделенной в одном документе части выражения в окно другого документа
Для переноса ряда объектов из одного документа в другой не обязательно использовать буфер обмена. Можно перетаскивать объекты, зацепив их курсором мыши (в форме ладони), прямо из одного окна в другое. Начало такого переноса представлено на рис. 3.6. Этот перенос основан на реализованном в приложениях Windows 95 методе Drag and Drop ("Перетащи и брось"). Он намного облегчает перенос и делает его более наглядным.
Рис. 3.6 Перенос выделенных блоков из окна одного документа в окно другого документа
Если отпустить левую клавишу мыши, то объекты появятся в другом документе и исчезнут в первом (где они были до этого).
3.5. Копирование объекта из буфера обмена в окно (Paste)
Операция Paste [Ctrl+V] (Вставить) переносит изображения объектов из буфера обмена в окно и располагает их по текущему местоположению графического курсора. Помещенные в окно объекты выделяются пунктирными прямоугольниками. Для снятия выделения достаточно установить курсор в свободное поле окна и нажать левую клавишу мыши (или клавишу Enter). Эта операция выполняется также нажатием клавиши F4 и комбинацией клавиш Shift+Ins.
При применении операции Paste содержимое буфера обмена сохраняется и команду можно использовать неоднократно, что особенно удобно при необходимости дублирования объектов, когда, например, какая-либо формула или математическое выражение встречаются в тексте документа несколько раз.
С помощью описанных операций переноса и копирования объекта в буфер обмена и вывода его содержимого в окно (не обязательно исходное) можно переносить объекты из одного окна в другое. К сожалению, прямой перенос объектов без помощи буфера обмена (как пиктограмм в версии Windows 31) невозможен Однако он возможен для примеров QuickSheets
3.6. Специальная вставка (Paste Special...)
Операция специальной вс1авки позволяет вставлять в документ данные, представленные файлами различных форматов Выбор форматов обеспечивается с использованием простого диалогового окна Предусмотрены различные типы форматов текстовый, MathCAD, RTF и Bitmap Операция расширяет возможности подготовки многокомпонентных документов С ее помощью можно, например, подготовив рисунок в графическом редакторе PaintBrush, перенести его в документ системы MathCAD В остальном применение ко манды Paste Special... (Специальная вставка) подобно описанному для команды Paste (Вставить)
Рис 3 7 иллюстрирует технику выполнения специальной вставки В од ном из документов выделены объекты и исполнена операция специальной вставки Она вызывает появление окна вставки, в котором можно выбрать доступный для нее формат
Рис. 3.7 Демонстрация специальной вставки
Вставка может задаваться значком, причем с помощью дополнительного окна (оно также показано на рис 3 7) можно выбрать из предоставленного набора значков наиболее подходящий Причины появления в диалоговых окнах специальной вставки русскоязычных надписей уже обсуждались Эти окна являются общими для различных приложений и создаются не ими, а русифицированной операционной системой Windows 95
3.7. Уничтожение выделенного объекта (Delete)
Команда Delete [Ctrl+D] (Удалить) служит для уничтожения выделенного объекта (в том числе блока выделенных объектов) При этом в буфер обмена объекты не заносятся. Команда полезна для редактирования документов. В отличие от команды Cut (Вырезать) ее применение не загружает буфер обмена и предотвращает нехватку оперативной памяти. Будьте осторожны с этой операцией — можно легко стереть нужный объект, причем в этом случае его восстановить не удастся (придется создавать заново).
3.8. Выделение всех объектов (Select All)
Операция Select All (Выделить все) выделяет все объекты пунктирными прямоугольниками (см. рис. 3.8). Это позволяет не только отчетливо наблюдать взаимное расположение блоков, но и подмечать степень их перекрытия. Как правило, оно нежелательно.
Рис. 3.8 Пример выделения всех объектов командой Select All
При переносе объектов или при их редактировании возможно частичное II даже полное наложение блоков одних объектов на другие, когда может исчезнуть часть изображения некоторых объектов. Выделение всех объектов полезно для контроля такой ситуации.
3.9. Поиск подстроки (Find...)
Часто в ходе редактирования документа пользователь заранее знает, какая именно часть документа должна изменяться. Например, часто возникает необходимость исправить имя какой-либо переменной или скорректировать заведомо известную формулу. Возможно, потребуется изменение какой-либо фразы текстового сообщения При этом весьма полезна операция поиска изменяемого фрагмента по всему документу, особенно когда документ велик и заданное изменение надо повторить несколько раз.
Операция Find... [Ctrl+F5] (Найти) служит для поиска фрагментов текста или имен переменных в математических выражениях. При ее исполнении появляется окошко Find с запросом искомого фрагмента — подстроки (см. рис. 3.9). Можно вести поиск такого фрагмента по всему документу. При обнаружении указанной подстроки в формульном блоке курсор устанавливается в конец обнаруженной подстроки, после чего можно приступить к ее редактированию. В текстовом блоке найденная подстрока выделяется.
Рис. 3.9 Поиск заданного фрагмента текста (слова "символьном")
Окошко Find имеет две опции-кнопки Previous (Позади) и Next (Впереди). Первая опция задает поиск от текущего положения курсора вверх до первого обнаружения подстроки, вторая позволяет провести поиск подстроки от текущего положения курсора вниз. Если подстрока поиска не обнаружена, появляется окошко Error (Ошибка) с предупреждающей надписью: Stop Not found (He найдено).
3.10. Замена подстроки (Replace...)
Операция Replace... [Shift+F5] (Заменить) служит не только для поиска заданной подстроки (в тексте или математическом выражении), но и для ее замены другой подстрокой. При исполнении этой операции появляется окно с предложениями о вводе подстрок.
Find (Что): Искомая_строка Change to (Чем) Строка замены
Окно содержит также указания на характер замены, по всему документу, однократная замена, игнорирование замены (рис 3 10)
Как и в случае с операцией Find, операцию Replace... можно применять неоднократно К сожалению, в текстах на русском языке иногда могут возникнуть трудности при поиске и замене слов, поскольку система замены создавалась для англоязычных текстов Тем не менее обычно система поиска и замены работает и при русскоязычных надписях.
Рис. 3.10 Замена слова "символьном" на слово "аналитическом" с помощью операции Replace...
3.11. Проверка орфографии (Check Speling...)
Для проверки орфографии в англоязычных текстах служит операция Check Speling... (Контроль орфографии) Она обеспечивает проверку орфографического написания слов путем сравнения их с набором эталонных слов в специальном словаре системы. Процесс проверки иллюстрируется примером на рис 3.11
Рис. 3.11 Пример проверки орфографии
Как видно из приведенного примера, система орфографического контроля не только выявляет слова с ошибками и выделяет их цветом основы, но и предлагает варианты замены (см. рис. 3.12). Это говорит о том, что в данной системе есгь и тезаурус — перечень слов схожего назначения. Если ошибки не обнаружены или исправлены, то появляется окно с сообщением о завершении контроля. Это окно также показано на рис. 3.12.
Рис. 3.12 Конец проверки орфографии
Окно проверки орфографии имеет ряд кнопок:
Ignory — игнорировать найденное слово с ошибкой;
Change заменить слово подходящим из списка;
Add добавить слово в словарь;
Suggest представить расширенный список слов для замены;
Cancel - прекратить проверку.
Добавление слов в словарь расширяет его и позволяет проводить проверку специальных терминов, возможно, отсутствующих в словаре. Однако эту операцию следует проводить осторожно: словарь легко засорить случайно введенными неверными словами, чю снижает эффективность проверки орфографии.
Как уже говорилось, для наших пользователей ценность системы орфографического контроля заметно снижается из-за невозможности проверки русскоязычных текстов. При этом все русские слова отмечаются как ошибочные. Однако благодаря объектной связи нередко можно готовить тексты в редакторе Word 95 из офисного пакета Microsoft Office (он имеет мощную русскоязычную систему орфографического и грамматического контроля) и затем включать их в документы MathCAD.
3*12. Переход к заданной странице документа (Go to Page...)
Документ с достаточно сложными расчетами может занимать множество страниц. Для быстрого перехода к нужной странице используется команда
Go To Page... (Перейти к странице). При исполнении этой команды появляется диалоговое окно, показанное на рис. 3.13.
Рис. 3.13 Диалоговое окно команды Go To Page...
В этом окне следует указать страницу, к которой надо перейти: First Page (К первой странице), Last Page (К последней странице) или с Number Page (К странице №). Внизу окна отображается номер текущей и заданной для перехода страниц. Кнопка ОК исполняет переход, a Cancel отменяет его.
3.13. Связывание документов (Links...)
Операция Links... (Связи) используется после внедрения объектов с применением операций Insert Object и Paste Special. Она выводит диалоговое окно, показанное на рис. 3.14.
Рис. 3.14 Диалоговое окно операции Links...
С помощью этого окна можно редактировать связи с внедренным объектом, открывать и менять источник объектов и прерывать связь.
3.14. Редактирование внедренных объектов (Object)
С помощью операции Object (она вводится в позиции главного меню Insert) в документ можно вводить объекты из других приложений. На рис. 3.15 показан такой объект в виде формулы, созданной в редакторе формул приложения Microsoft Word 95.
Если внедренный объект выделен (прямоугольником из сплошных линий), то позиция подменю Edit Object (Объект) становится доступной, что и видно на рис. 3.15. При этом она открывает доступ к редактированию объекта с помощью того приложения, которое первоначально создало внедренный в документ объект.
Рис. 3.15 Объект в виде формулы, внедренный в документ
На рис 316 покачана подготовка к редактированию объекта Такой вид принимает окно MathCAD после исполнения команды Заменить
Как видно из рис 3 16, в окне редактирования объекта появляется набор ная панель редактора формул приложения Microsoft Word 95, породившего редактируемую панель Благодаря этому становится возможным полное ре дактирование внедренной формулы, вплоть до ее замены другой
Рис. 3.16 Пример редактирования внедренного объекта
Еще более наглядную картину редактирования дает применение операции "Открыть" Она открывает окно редактора формул, показанное на рис 317, позволяющего с полными удобствами редактировать введенное выражение.
Рис. 3.17 Редактирование внедренного объекта, формулы, с помощью редактора формул
На рис 317 показано также информационное окно редактора формул с данными о нем. Это окно прямо указывает на то, что используется именно редактор формул из пакета Microsoft Office 95 Сам процесс вставки объектов мы рассмотрим несколько позже при описании подменю позиции Insert глав ного меню
3.15. Редактирование с применением клавиатуры
Редактирование документов возможно как с применением мыши, так и с помощью клавиатуры. В любом случае прежде всего полезно знать функции графического курсора (маркера). При перемещении по документу он может принимать одну из трех приведенных ниже форм.
Формы курсора
Курсор может иметь следующие формы.
+ — крестообразный красный курсор (визир) служит для указания места для новых блоков (текстовых, формульных или графических). Курсор имеет такой вид только вне пространства блоков, т. е. на пу стом месте экрана, и может перемещаться клавишами управления курсором или устанавливаться мышью (для этого курсор мыши ставится в нужное место и нажимается ее левая клавиша), курсор в виде красной вертикальной черты (маркер ввода) служит для указания на отдельные элементы блоков, он обычно используется для ввода данных и заполнения шаблонов. В текстовых блоках используется для указания места вставки или удаления отдельных символов,
[ или ] — курсор в виде синих уголков разного размера, выделяющих отдельные части выражения или выражение целиком Вид курсора зависит от направления ввода Нажатие клавиши Ins или клавиш <— и —> перемещения курсора меняет направление ввода
Клавиши для выделения
Для выполнения выделений используются указанные ниже клавиши:
вверх — превращает маркер в выделяющий уголок и расширяет его;
вниз — сужает выделяющий уголок;
-» — перемещает маркер и меняет вид уголка;
<- — перемещает маркер и меняет вид уголка;
Shift Т — выводит курсор из выражения в верхнюю часть свободного поля, делая его крестообразным;
Shift вниз — выводит курсор из выражения в нижнюю часть свободного поля;
Shift -» — выводит курсор из выражения в правую половину свободного по ля;
Shift <— — выводит курсор из выражения в левую половину свободного поля;
Space — заключает в рамку операнд, действует как несколько нажатий кла виши Т и выводит курсор из выделенного выражения;
Ins — перемещает срез рамки из правого верхнего угла в левый верх ний угол
Клавиши и их комбинации для управления редактированием
По мере освоения системы все большую помощь в редактировании оказывает знание функций управляющих клавиш и их комбинаций. Ниже дан перечень осуществляемых ими операций:
Tab — в тексте перемещает курсор на начало следующего слова, в
уравнении управляет выделением частей блока (в частности, выделяя выражения в скобках);
Shift+Tab — в тексте перемещает курсор в начало очередного слова, в уравнении управляет выделением частей блока;
PgUp — перемещает курсор и вызывает скроллинг на пять строк вверх;
PgDn — перемещает курсор и вызывает скроллинг на пять строк вниз;
Ctrl+PgUp — вызывает скроллинг на одно окно вверх;
Ctrl+PgDn — вызывает скроллинг на одно окно вниз;
Home — устанавливает курсор в начало предшествующего блока, Ctrl+Home — вызывает скроллинг с установкой курсора в начало документа;
Ctrl+End — вызывает скроллинг с установкой курсора в конец документа.
Действия некоторых клавиш, связанные с выделением, неоднозначны, и для их интуитивного применения требуется определенный опыт работы. При редактировании текстовых блоков особых трудностей не возникает — оно выполняется так же, как в большинстве текстовых редакторов, и будет подробнее рассмотрено в дальнейшем.
Математические выражения не столько набираются, сколько конструируются При этом учитывается определенная структура выражений и иерархия выполняемых операций. Конструирование выражений облегчается средствами выделения отдельных фрагментов выражений. Полезно помнить, что все, что попадает в ходе выделения в уголки курсора, оказывается операндом для следующего вводимого оператора. Операторы возведения в степень, извлечения корня и деления являются "цепкими" операторами. После их ввода все, что набирается следом, становится показателем степени, подкоренным выражением или знаменателем. Для прекращения этого обычно приходится дважды нажать клавишу Space.
Как правило, удобно сочетать отметку начала выделения мышью, поскольку она позволяет сразу и точно указать место выделения, с последующим расширением или сужением места выделения с помощью управляющих клавиш. При определенном навыке все выделения можно выполнить, используя мышь и рассматривая область выделения с разных сторон, чтобы принять решение о расширении или сужении этой области в нужном направлении.
Нажатие клавиши Ins меняет направление ввода и расположение курсора, что позволяет оперативно управлять вводом фрагментов формул. Например, если курсор имеет вид J, то ввод будет идти вправо (курсор как бы поддерживает вводимое выражение). Пусть, например, вы хотите набрать выражение (а+Ь) и затем sin(a+b), т. е. сделать ранее набранное выражение аргументом функции. Для этого вначале нажмите клавиши (а+ Ь) — выражение (а+Ь) появится на экране и окажется заключенным в уголок J. Нажмите клавишу Ins — уголок приобретет вид ¦_ и переместится в начало выражения. Теперь введите имя функции sin — на экране будет sm(a+b).
Для замены числа или буквы в выражении поместите маркер ввода после цифры или буквы и щелкните левой клавишей. Маркер приобретет вид уголка J. Поскольку он расположен справа от цифры или буквы, то для ее стирания нажмите клавишу <— (Backspace), а если слева и имеет вид L — то клавишу Del. Пользуйтесь F3, чтобы стереть выделенное рамкой выражение с сохранением его в буфере, и F4 — для вызова выражения из буфера обмена.
При этом полезно знать, что всякое заключенное в рамку выражение становится операндом следующего вводимого оператора. Отметим также, что нажатие клавиши F3 убирает выделяемый фрагмент и помещает его в буфер обмена Windows (операция Cut). Нажатие клавиши F4 помещает фрагмент из буфера в текущее положение курсора.
Несмотря на эти и другие тонкости конструирования математических выражений, вряд ли стоит запоминать все правила манипуляции с клавишами или мышью. Конструирование выражений чаще всего осуществляется интуитивно, и просто нужно некоторое время для экспериментов с ним. После набора первых же нескольких достаточно сложных формул пользователь подсознательно обучится правилам ввода.
Клавиши редактирования
Редактирование фрагментов документа трудно отделить от некоторых других операций. Поэтому ниже приведено назначение ряда других функциональных клавиш и их сочетаний, используемых при комплексной работе с документами. Shift+F5 — замена одной подстроки на другую;
Enter или Ctrl+F9 — вставка пустой строки;
Backspace или Ctrl+FlO — удаление пустой строки;
Alt+Bksp — отмена последней операции редактирования;
Ctrl+Ins — копирование (Copy) выделенного объекта в
буфер обмена;
Shift+Del — перенос (Cut) выделенного объекта в буфер
обмена;
Shift+Ins — копирование объекта из буфера обмена в окно;
Ins — включение режима вставки (Insert).
Клавиши управления документами и окнами
Ctrl+Esc — вызов информации с перечнем исполняемых в настоящее время программ для их переключения;
Ctrl+F4 — закрытие документа,
Ctrl+F6 — активизация следующего окна,
Ctrl+0 — печать документа,
Alt+F4 — завершение работы с системой (команда Quit),
Ctrl+R — восстановление изображения на экране,
F1 — открытие окна помощи (Help);
F3 — удаление отмеченного объекта с переносом в буфер обмена,
F4 — вывод объекта из буфера обмена в текущее окно,
F5 — вызов окна загрузки файлов документов;
F6 — запись файла текущего документа на диск,
F7 — подготовка к созданию нового документа,
F9 — запуск вычислений;
Shift+Fl — вызов контекстно-зависимой справки.
Последняя операция требует некоторых пояснений При ее исполнении у курсора-стрелки появляется жирный знак вопроса. Если теперь указать на какой-либо объект или его часть (например, на имя функции или оператор), будет выведено окно с сообщением о назначении и правилах использования указанного объекта Для отмены этого режима помощи достаточно нажать клавишу Esc.
Клавиши (символы) для создания объектов
@ — создание шаблона двумерной графики (2D-графики), Ctil+® — создание шаблона трехмерной графики (ЗD-графики), Ctrl+% — создание шаблона импортируемого рисунка, Ctrl+G — замена латинской буквы на греческую;
Ctrl+V — задание шаблона вектора или матрицы, Ctrl+P — ввод греческой буквы "пи", Ctrl+Z — ввод математического символа бесконечности
Ряд других комбинаций клавиш для ввода математических и логических операторов будет рассмотрен одновременно с их описанием в следующих главах
Глава 4 Управление обзором (View)
4.1. Управление элементами интерфейса
Как уже не раз отмечалось, пользовательский интерфейс новых версий MathCAD содержит такие элементы, как панель инструментов, панель форматирования и наборные панели для ввода математических символов. Наряду с полезными функциями (облегчение начальной работы с системой) эти средства имеют и недостаток: они заметно сужают полезную область рабочего экрана, уменьшая ее примерно на 3—4 строки.
Существует три операции в подменю View (Обзор), позволяющие управлять выводом дополнительных элементов пользовательского интерфейса:
Toolbar (Панель — убирает или восстанавливает панель инструментов) ментов для быстрого управления системой;
Format Bar (Панель — убирает или восстанавливает панель форматирования) форматирования;
Math Pallete (Палитра — убирает или восстанавливает наборную математических знаков) панель вывода математических символов.
В Главе 1 приводился вид экрана системы MathCAD как с упомянутыми объектами интерфейса, так и без них. Все приведенные выше операции вполне очевидны, и нет смысла пояснять их более подробно. Нужно лишь отметить, что для установки соответствующей панели достаточно против ее названия в подменю View проставить жирный знак "птички". Для этого надо установить курсор мыши на нужную позицию подменю и щелкнуть левой клавишей мыши. "Птичку" также можно убрать, если заданный объект желательно устранить.
4.2. Выделение областей (Regions)
Документы составляются из отдельных блоков (областей), причем границы их обычно не видны. Опция Regions (Области) позволяет выделить все области и обеспечивает закраску промежутков между ними серым цветом. Сами блоки при этом выделены белым фоном. На рис. 4.1 показан вид документа с выделенными областями его объектов.
Выделение областей особенно полезно для оценки их взаимного расположения и наложения. Заглядывая вперед, отметим, что операция Separate Region (Разделить области) в позиции Format (Формат) главного меню позволяет автоматически раздвинуть блоки для устранения наложения их друг на друга.
4.3. Изменение масштаба документа (Zoom)
Иногда желательно изменить масштаб изображения документа. Для этого служит опция Zoom (Увеличение). Она выводит окно, показанное на рис. 4.2, со списком возможных масштабов.
Чтобы установить заданный масштаб, достаточно установить перед задающими его цифрами жирную точку. Для этого надо подвести к кружочку перед цифрой маркер мыши и щелкнуть левой клавишей Рис 4 2 показывает вид документа при масштабе 200% А на другом рисунке (рис 4 3) показан вид тою же документа при масштабе 75%
Рис. 4.1 Вид документа с выделенными областями
Рис. 4.2 Вид документа в увеличенном масштабе (200%)
Таким образом, на деле операция Zoom может не только увеличивать размеры блоков документа, но и уменьшать их Здесь пределы обычно ставит разрешающая способность дисплея При уменьшении масштаба до 50% на экране можно рассмотреть две страницы документа Отметим, что масштаб можно менять и иначе выбором разрешения дисплея Однако для работы с высоким разрешением желательно применять дисплеи с увеличенным размером экрана по диагонали (17, 19 или 21 дюйм)
Рис. 4.3 Вид документа в уменьшенном масштабе (75%)
4.4. Восстановление искажений экрана (Refresh)
При манипуляциях с объектами (например, при изменении их размеров и выделении) или при перемещении по полю окна редактирования на экране могут оставаться нежелательные объекты. Для их устранения следует использовать операцию Refresh Эта операция ничего не делает с объектами документа, а лишь уничтожает следы от них, если они возникают при работе с документом Операция полезна также в случаях, когда часть текстового блока не видна из-за наложения на него другого блока — формульного или графического
4.5. Анимация графиков (Animation)
Анимация (или оживление) графиков — новая возможность, введенная в последние версии MathCAD Раньше такую возможность обеспечивали системы MatLAB 4 0 и Mathematica 222B MathCAD анимация используется более удачно тут привлечены стандартная технология создания анимационных файлов с расширением avi и их воспроизведение с помощью программной системы Microsoft Video I 1 Эта система предварительно должна быть установлена на ПК в составе операционной системы Windows 95
Принцип анимации достаточно прост В системе имеется встроенная переменная FRAME, принимающая целочисленные значения, по умолчанию — от 0 до 9 с шагом 1. Любая функция (см. рис. 4.4), график которой планируется наблюдать в развитии, должна быть функцией этой переменной, являющейся по существу просто номером текущего кадра. Диапазон изменения переменной FRAME задается в диалоговом окне команды Animation (см. ниже) Не следует пытаться присваивать FRAME иные значения
При создании анимационных рисунков все кадры строятся с одинаковыми координатами углов и, следовательно, с одинаковыми размерами и положением на экране Их вывод один за другим с заданной скоростью (по умолчанию — 0 кадров в секунду) и создает живую картинку. Анимация осуществляется путем просмотра созданной последовательности кадров с помощью специального проигрывателя.
Рис. 4.4 Начало подготовки к построению анимационного графика
Для создания последовательности кадров анимации исполняется команда Animation, что ведет к появлению на экране ее диалогового окна (оно видно на рис. 4.4 в нижнем правом углу). В окне можно задать три основных параметра анимации: начальное значение FRAME, конечное значение FRAME и частоту смены кадров.
Затем следует выделить пунктирными черными линиями нужный фрагмент изображения и, нажав кнопку Animate, приступить к созданию последовательности анимационных кадров. При этом кадры будут видны в специальной зоне просмотра окна Animate, а под этой зоной можно наблюдать изменение переменной FRAME. В зону выделения могут попадать и другие объекты, например формулы или текстовые комментарии. В этом случае они тоже будут видны при проигрывании анимационного видеоролика.
С помощью кнопки Option можно выбрать тип сжатия видеофайлов и систему работы с ними. Кроме Microsoft Video 1,1 возможна работа и с рядом других видеосистем, разумеется, если они были проинсталлированы. Чем больше конечное значение FRAME и выше частота кадров, тем более плавно происходит считывание, но увеличивается объем AVI-файлов.
По окончании процесса создания серии кадров анимационного видеоролика появится проигрыватель анимационных кадров (см. рис. 4.5). Запустив его кнопкой пуска, имеющей вид треугольника, можно наблюдать изменение графика во времени.
Используя клавишу Save As..., можно вызвать стандартное окно записи файлов на диск. В этом окне можно найти папку, в которую будет помещен записываемый файл. Файл записывается с расширением.avi, принятым для файлов программной видеосистемы Microsoft Video for Windows. До записи в файл кадры видеоролика хранятся в оперативной памяти ПК, что ограничивает их число.
Рис. 4.5 Просмотр анима-ционных кадров с помощью проигрывателя
При создании анимационных картинок надо отключить все опции автоматического масштабирования графиков и перейти к ручному заданию масштаба Автоматическое изменение масштаба подчас ведет к скачкообразному изменению размеров графика, хотя на деле он должен меняться без скачков, точнее говоря, с дискретностью, определяемой только изменением FRAME = 0, 1,2,3 и т д.
4.6. Вызов проигрывателя (Playback)
Любой видеофайл с расширением avi (не обязательно с описанной выше ани-мационной графикой) может быть просмотрен с помощью проигрывателя, запускаемого опцией Playback (Воспроизвести) в подменю позиции главного меню Animation. При этом проигрыватель появляется на экране (см. рис. 4.6).
Рис. 4.6 Проигрыватель видеофайлов Playback
Проигрыватель управляется всего двумя кнопками. Первая (с пиктограммой треугольника) запускает проигрыватель. Однако для воспроизведения какого-либо видеоклипа его файл должен быть загружен. Для загрузки файлов используется вторая кнопка. Она выводит на экран окно Open AVI для загрузки файлов с расширением.avi. Это окно показано на рис. 4.6 под проигрывателем. Внизу окна проигрывателя расположен указатель текущего времени проигрывания в виде шкалы с бегунком. На рис. 4.7 изображен проигрыватель в процессе просмотра анимационного графика, полученного выше и записанного под именем da1.
Рис. 4.7 Проигрывание ранее записанного анимационного файла
Отметим два аспекта работы со средствами анимации. Первый аспект: в выделенную область анимации можно вводить как целиком графики, так и их части и даже формулы и надписи. Если выделенной области нет, то кнопка Animation неактивна.
Второй аспект более любопытен. Проигрыватель AVI-файлов способен проигрывать файлы, созданные иными мультимедиа-системами, причем со стереофоническим звуковым сопровождением. Рис. 4.8 иллюстрирует такую возможность — на нем показан стоп-кадр из рекламного ролика фирмы Intel.
Проигрыватель обладает типовыми средствами управления: регулировкой размеров изображения громкости и скорости просмотра, диалоговым окном поиска AVI-файлов и т. д. Некоторые из них (например, регулятор громкости) появляются только в том случае, когда они необходимы.
Когда в проигрыватель загружен файл, активизация кнопки управления (вторая из двух) приводит к появлению на экране меню операций управления. Они перечислены ниже. View (Вид) — управление размером окна просмотра;
Volume (Громкость) — управление громкостью (если AVI-файл содержит звук);
Рис. 4.8 Просмотр видеоклипа со звуковым сопровождением
Рис. 4.9 Вид проигрывателя с меню его опций
Speed (Скорость) — управление скоростью проигрыва ния, Open (Открыть) — вывод стандартного диалогового окна
загрузки AVI-файлов, Close (Закрыть) — закрытие текущего окна, Copy (Копировать) — копирование в буфер обмена, Configure... [Ctrl+D] (Настройка) — включение опций конфигурации, Command (Команда) — управление из командной строки Операция View (Вид) содержит меню из трех команд
Half Size [Alt+2] (Половинный размер) — уменьшение окна просмотра вдвое;
Normal Size [Ctrl+1] (Обычный размер) — установка нормального размера окна;
Double Size [Ctrl+2] (Двойной размер) — увеличение размера окна вдвое.
На рис. 4.9 показан вид проигрывателя в половинном размере с выведенным меню управления им. В меню видны позиции с описанными выше опциями.
На рис. 4.10 показано окно "Свойства видео", появляющееся при исполнении операции Configure... (Настройка). Это окно позволяет задать видеорежим Video Mode (В окне), т. е. обычный оконный Windows, и полноэкранный Full Screen (Во весь экран). При полноэкранном режиме изображение занимает весь экран.
Можно также задать увеличение размера экрана просмотра вдвое (опция Zoom). В нижней части диалогового окна помещается окно информации о проигрываемом файле. Кнопки ОК, Отмена и Применить служат соответственно для фиксации изменений опций, отказа от изменений и установки опций по умолчанию.
Рис. 4.10 Вид проигрывателя с окном "Свойства видео'
Применение проигрывателя заметно облегчает построение эффектных обучающих программ, и самоучитель Tutorial системы является наглядным тому свидетельством. В частности, можно готовить видеоролики о работе с самой системой. К сожалению, AVI-файлы требуют под их хранение весьма большого объема памяти на жестком диске, так что такие видеоролики приходится делать довольно короткими.
Глава 5 Работа со вставками
5.1. Подменю позиции Insert (Вставка) главного меню
Установка любого объекта в окно редактирования называется вставкой MathCAD реализует различные механизмы вставки — от просто вывода шаблона объекта до вставки объекта, созданного в другом приложении, через буфер обмена. В версии MathCAD 7 0 все виды вставок включены в новую позицию главного меню Insert (Вставка).
При активизации этой позиции появляется подменю со следующими операциями:
Graph (Графика) — вставка шаблонов графики, Matrix... [Ctrl+M] (Матрица) — вставка шаблонов матриц и векторов, Function... [Ctrl+F] (Функция) — вставка шаблонов встроенных функций, Unit... [Ctrl+U] (Единицы) — вставка единиц измерений размерных величин;
Picture [Ctrl+T] (Рисунок) — вставка шаблона импортируемого рисунка;
Math Region — вставка в текстовую область (Математическая область) шаблона математической области;
Text Region (Текстовая область) — вставка текстовой области;
Page Break (Разрыв страницы) — вставка линии разрыва страницы;
Hyperlink (Гиперссылка) — вставка гиперссылки;
Reference... (Ссылка) — вставка обращения к заданному файлу активизацией кнопки,
Component... (Компонент) — вставка других компонентов системы, Object... (Объект) — вставка объекта с установлением динамической связи с порождающим его приложением.
Вид подменю позиции Insert главного меню показан на рис. 5.1. Для создания графиков в системе MathCAD имеется программный графический процессор. Основное внимание при его разработке было уделено обеспечению простоты задания графиков и их модификации с помощью соответствующих опций. Процессор позволяет строить самые разные графики, например в декартовой и полярной системах координат, трехмерные поверхности, графики уровней и т д
Для построения графиков используются шаблоны Их перечень содержит подменю Graph (Графика) в позиции Insert (Включение) главного меню Большинство параметров графического процессора, необходимых для построения графиков, по умолчанию задается автоматически Поэтому для начального построения графика того или иного вида достаточно задать тип графика В подменю Graph содержится список из семи основных типов графиков. Они позволяют выполнить следующие действия X-Y Plot® (Декартов — создать шаблон двумерного графика график) в декартовой системе координат,
Рис. 5.1 Экран системы с открытым подменю Insert
Polar Plot [Ctrl+7] — создать шаблон графика в полярной системе (Полярный график) координат, Surface Plot [Ctrl+2] — создать шаблон для построения трехмерного (График поверхности) графика, Contour Plot [Ctrl+5] — создать шаблон для контурного графика (Карта линий уровня) трехмерной поверхности, 3D Scatter Plot создать шаблон для графика в виде точек (Точечный график) (фигур) в трехмерном пространстве, 3D Bar Chart (Трехмерная создать шаблон для изображения в виде гистограмма) совокупности столбиков в трехмерном про странстве, Vector Field Plot — создать шаблон для графика векторного (Векторное поле) поля на плоскости
Вид окна системы с подменю Insert Graph показан на рис 5.1. В этом подменю видны команды создания шаблонов указанных выше типов графиков В окне редактирования показаны также два одинаковых графика, но в разных местах и разного размера
5.2. Установка шаблона двумерных графиков (X-Y Plot @)
Графики в системе MathCAD могут иметь различные размеры и перемещаться в окне редактирования документа. Для наиболее распространенных графиков в декартовой и в полярной системах координат в MathCAD предусмотрен упрощенный и очень удобный способ построения графиков без предварительного задания функции и ранжирования независимой переменной.
Именно так построены графики на рис 5 1 Для упрощенного построения двумерных графиков некоторой функции f(x) надо вывести их шаблон, по вертикали указать эту функцию, а по горизонтали — независимую переменную х. Таким образом можно строить на одном рисунке и графики многих функций, просто опишите их у вертикальной оси, используя запятые для разделения описаний функций. Графики будут построены линиями разного типа и цвета.
Можно вначале записать функцию, а затем вывести шаблон графика;
функция окажется записанной у вертикальной оси, и останется только указать независимую переменную у горизонтальной оси. Такой простой способ наверняка порадует начинающих пользователей, плохо сознающих (на первых порах), что графики в MathCAD всегда строятся по векторам и матрицам их отдельных точек. При указанном упрощенном способе построения графиков они строятся при изменении независимой переменной от -10 до+10. В дальнейшем операцией форматирования этот диапазон и все иные данные графиков можно изменить (это называют изменением формата).
Для вывода шаблона двумерной графики в декартовой системе координат служит операция X-Y Plot® (декартов график). Она выводит в текущее положение курсора шаблон графиков 2D-rana или графиков в декартовых координатах. Напоминаем, что это обычный график на плоскости с воображаемыми (или действительно нарисованными) осями Х (горизонтальная) и Y (вертикальная), расположенными под прямым углом друг к другу.
Каждая точка декартова графика характеризуется своими координатами х и у=f(х), где х — абсцисса точки, а у — ее ордината. Точки соединяются друг с другом разнообразными линиями (сплошной, пунктирной и т. д.). Могут быть показаны и исходные (узловые) точки графика в виде жирных точек, квадратиков, кружков и т. д.; возможно и построение на одном рисунке графиков нескольких функций.
Перед применением этой команды необходимо определить функции, графики которых должны строиться, и изменение их аргумента (например, х) в заданном интервале. Впрочем, простые функции, если они в дальнейшем не используются, можно указать в шаблоне самого графика. Далее надо приблизительно наметить место левого верхнего угла графика и установить на него графический курсор. Затем следует ввести команду (используя соответствующую позицию меню или нажав клавиши, задающие символ @).
Рис. 5.2 показывает задание трех функций и вывод шаблона графика (внизу).
Незаполненный шаблон графика представляет собою большой пустой прямоугольник с шаблонами данных в виде темных маленьких прямоугольников, расположенных около осей абсцисс и ординат будущего графика. В средние шаблоны данных надо поместить имя переменной (х у оси абсцисс) и задать формулы для функций (у у оси ординат). Если строятся графики нескольких функций в одном шаблоне, то для их разделения следует использовать запятые. Чтобы перемещать по шаблонам метку их выбора и выделения, следует использовать клавиши перемещения курсора. Можно выбрать шаблон данных и прямо с помощью мыши, указав нужный шаблон ее курсором и нажав левую клавишу мыши.
Крайние шаблоны данных служат для указания предельных значений абсцисс и ординат, т. е. они задают масштабы графика. Если оставить эти шаблоны незаполненными, то масштабы по осям графика будут устанавливаться автоматически. Недостаток тут в том, что масштабы, скорее всего, окажутся
Рис. 5.2 Задание трех функций и вывод незаполненного шаблона графика
не вполне удобными (например, будут представлены неокругленными десятичными цифрами), для представления целиком всего графика в максимальном размере. Рекомендуется всегда вначале использовать автоматическое масштабирование и лишь затем изменять масштабы на более подходящие.
Чтобы произошло построение графика в автоматическом режиме вычислений, достаточно вывести курсор за пределы графического объекта. В ручном режиме вычислений для этого нужно еще нажать клавишу F9. При построении область графика во время вычислений ординат функций покрывается зеленой штриховкой, затем графики функций появляются в шаблоне (см. рис. 5.3).
Если что-либо в построенном графике не вполне удовлетворяет пользователя, можно применить описанные ниже операции изменения его формата.
Рис. 5.3 Пример построения двух графиков трех функций
Эти операции позволяют изменять заданные по умолчанию параметры графиков. Заметим, что окно задания форматов графиков появляется, если выделить график и, установив в его области курсор мыши, дважды быстро щелкнуть ее левой клавишей.
Графики можно перемещать по полю окна документа и изменять их размеры Для этого надо выделить график (он обводится сплошной линией) Проще всего это можно сделать так. поместить курсор мыши в область графика и щелкнуть один раз левой клавишей В правой части рис 5 3 показан тот же график после увеличения его размеров и завершения редактирования формата
Можно поступить и по-иному — поместить курсор мыши вблизи графика и, нажав ее левую клавишу, перемещать мышь в направлении графика наискосок Курсор начнет вычерчивать область выделения в виде прямоугольника из черных пунктирных линий Как только эта область захватит график и он тоже окажется обведен пунктирным прямоугольником, надо отпустить клавишу мыши График будет выделен
Стоит поместить графический курсор вблизи линий рамки, выделяющей область графика, при этом изображение курсора изменится: вмесго маленького красного крестика оно приобретет вид ладони. Если теперь нажать левую клавишу мыши и начать ее перемещать, то весь шаблон графика будет перемещаться по окну Установите его в нужное место и отпустите левую клавишу мыши. Рисунок окажется на новом месте.
Для изменения размеров рисунка нужно точно подвести графический курсор к специальным шаблонам на рамке, выделяющей рисунок Эти шаблоны имеют вид маленьких черных прямоугольников. Изображение курсора при этом заменяется на двустороннюю стрелку, указывающую, в каких направлениях можно растягивать рисунок. Нажав левую клавишу мыши, можно захватить соответствующую сторону или угол шаблона рисунка и, не отпуская клавишу, начать растягивать или сжимать шаблон. После того как клавиша будет отпущена, рисунок перестроится в новых размерах. Сжимать и растягивать графики можно в вертикальном, горизонтальном и диагональном направлениях
При любом виде выделения рисунка нажатие клавиши F3 стирает рисунок в окне и переносит его в буфер обмена. Переместив курсор, установленный на месте левого верхнего окна бывшего графика, в новое место и нажав клавишу F4, можно перенести рисунок на это место
Особо следует отметить возможность помещения текстовых комментариев в область графиков. Для этого вначале надо подготовить их в стороне от графика и выделить пунктирной линией Затем поместив курсор мыши в область текста, надо нажать ее левую клавишу и перенести текстовый блок в область рисунка. Установив текст в нужном месте, отпустите клавишу мыши Если при этих операциях или снятии выделений нанесенные на рисунок надписи исчезают, воспользуйтесь командой восстановления изображения на экране — Ctrl+R
Этим методом не стоит злоупотреблять, так как надписи сверху, снизу и сбоку графиков (в пределах области их определения) можно создавать с по мощью соответствующих средств задания формата графиков Они будут описаны несколько позже Такие надписи никогда не исчезают Чтобы надписи были на русском языке, следует использовать соответствующие наборы шрифтов. Поскольку шрифт в процессе ввода текста менять нельзя, есть определенные трудности с созданием таких надписей на русском языке
5.3. Установка шаблона графиков в полярной системе координат (Polar Plot)
В полярной системе координат каждая точка задается углом W, радиусом и длиной радиус-вектора R(W). График функции обычно строится при изменении угла W в определенных пределах, чаще всего от 0 до 2р. Опция Polar Plot (Полярный график) выводит шаблон таких графиков, показанный на рис. 5.4. Этот шаблон имеет форму окружности и содержит шаблоны данных.
Рис. 5.4 Шаблон графиков типа Polar Plot
Перед построением таких графиков надо задать изменение ранжированной переменной W(или с другим именем) в заданных пределах. После вывода шаблона следует ввести W в шаблон снизу и функцию R(W) в шаблон справа, а также указать нижний предел изменения длины радиус-вектора R(W) — Rmin и шаблоне справа внизу и верхний предел — Rmax в шаблоне справа и сверху.
На рис. 5.5 показано построение графиков в полярной системе координат:
слева — по описанному шаблону, справа — с помощью шаблона обычной двумерной графики X-Y Plot. Сейчас R(W)=i, так что в обоих случаях строится окружность (если дисплей имеет различные масштабы по вертикали и горизонтали, окружность превратится в эллипс).
При построении графика в полярной системе координат с использованием шаблона обычного 1рафика в прямоугольной системе координат надо по оси Х установить R(W)-cos(W), а по оси Y — R(W)-sin(W). Построение графиков в полярной системе координат с помощью шаблона обычной графики X-Y Plot в ряде случаев даже более предпочтительно, поскольку в математической литературе графики параметрически заданных функций чаще всего строятся именно таким образом. При задании даже простых функций R(W) графики в полярной системе координат могут иметь весьма причудливый вид.
Надо также отметить новую возможность прямого построения графиков функций в полярной системе координат, без определения диапазона изменения независимой переменной W. Пример такого построения дан на рис. 5.6.
Рис. 5.5 Графики функций в полярной системе координат
Рис. 5.6 Пример прямого построения графика параметрически заданной функции
При прямом построении графика достаточно просто заполнить ее шаблон. Саму функцию надо описать ее уравнениями, которые вписываются на места шаблонов по осям Х и Y. Стоит вывести графический курсор мыши из области графика, как последний будет построен.
5.4. Установка шаблона трехмерных графиков (Surface Plot)
Эта операция служит для построения трехмерной поверхности Z(X, Y), предварительно представленной матрицей М ординат Z. При этом выводится шаблон графика, левый верхний угол которого помещается в место расположения курсора. Шаблон, в свою очередь, содержит единственный шаблон данных — темный прямоугольник у левого нижнего угла основного шаблона. В него надо занести имя матрицы со значениями ординат ЗD-поверхности. Разумеется, прежде чем строить график ЗD-поверхности, нужно ее определить математически. На рис. 5.7 показан пример такого определения.
Рис. 5.7 Задание и построение трехмерной поверхности без удаления невидимых линий
Наглядность представления трехмерных поверхностей зависит от множества факторов: масштаба построений, углов поворота фигуры относительно осей, применения алгоритма удаления невидимых линий или отказа от него, использования функциональной закраски и т. д. Для изменения этих параметров следует использовать операцию установки формата графика (см. далее). На рис. 5.8 показано то же построение, что и описанное выше, но с применением алгоритма удаления невидимых линий.
Рис. 5.8 Задание и построение трехмерной поверхности с удалением невидимых линий
Нетрудно заметить, что применение алгоритма удаления невидимых линий делает рисунок трехмерной поверхности намного более наглядным. Дальнейшее повышение наглядности восприятия 3D-поверхностей обеспечивается применением функциональной закраски. По существу, она дает дополнительную информацию о третьем измерении; в нашем случае, чем ниже расположена поверхность фигуры, тем она темнее (см. рис. 5.9).
Рис. 5.9 Задание и построение трехмерной поверхности с функциональной закраской
С помощью описываемых ниже команд изменения формата можно получить множество разновидностей 3D-графики. В частности, возможен вывод координатных осей. "параллелепипеда", обрамляющего фигуру, и иных деталей подобных графиков, например титульных надписей.
Поскольку график строится на основе матрицы, содержащей только координаты высот фигуры, то истинные масштабы по осям Х и Y не известны и на рисунках не проставляются. Могут, впрочем, выводиться просто порядковые номера элементов матриц в заданном направлении (по Х и по Y). Надо также следить за тем, как сформировать векторы Х и Y, с тем чтобы фигура выглядела естественно и занимала нужное место в пространстве. Все это несколько затрудняет быстрое создание графиков трехмерных поверхностей нужного вида.
Большие возможности дает несколько иной способ задания трехмерных поверхностей — в параметрическом виде. При этом приходится формировать три матрицы — X, Y и Z — и указывать их в шаблоне в виде X, Y, Z. В Главе 14 (в разделе 14.1) дан ряд примеров такого задания трехмерных поверхностей.
5.5. Установка шаблона контурных ЗD-графиков (Contour Plot)
Еще один широко распространенный тип графиков для представления трехмерных поверхностей — график из линий равного уровня. Такие графики широко применяются, например, в картографии. Операция Contour Plot (Карта линий уровня) служит для построения шаблона таких графиков. Он подобен шаблону, описанному в предыдущем разделе (кстати, как и предшествующие выводу шаблона действия по созданию матрицы М).
На рис. 5.10 показано построение контурного графика в виде линий равного уровня. Численные значения уровней для разных кривых графика представлены рядом цифр.
Рис. 5.10 Контурный график 3D-поверхности
Такое представление графика удобно для количественных оценок. Однако в большинстве случаев указание количественных значений уровней загромождает график. Возможно задание высот 3D-поверхности с помощью функциональной окраски. Тогда можно выполнить построение этой поверхности в виде распределения плотности окраски (см. рис. 5.11).
При использовании цветной функциональной окраски описанные выше типы графиков выглядят весьма впечатляюще. Но неплохие результаты получаются и при задании монохромных графиков. В этом случае гамма цветов заменяется просто разной плотностью серого цвета, от ярко-белого до черного.
Иногда контурные графики получаются даже более информативными, чем просто трехмерные поверхности. У последних нередко одни части поверхности закрывают другие. Например, пик на переднем плане может закрыть меньшие пики или впадины на заднем плане. У контурных графиков такого эффекта нет, и на них легко обнаруживаются все пики и впадины, правда, при достаточно большом числе линий равного уровня и малом расстоянии между ними.
Рис. 5.11 График распределения плотности ЗD-поверхности
5.6. Установка шаблона точечного ЗD-графика (3D Scatter Plot)
Нередко трехмерные поверхности представляют в виде находящихся в этом пространстве точек, кружочков или иных фигур. Каждая из этих фигур несет информацию о геометрическом положении ее центра в трехмерном пространстве. Такой график создается операцией 3D Scatter Plot (Точечный график) — см. рис. 5.12.
Размеры точек, их вид и окраску можно изменять с помощью команды изменения формата ЗD-графика. Обычно достаточно наглядными являются графики с малыми фигурами, расположенными внутри параллелепипеда Однако в целом наглядность таких графиков не очень высока. Их стоит использовать не для показа трехмерных поверхностей, а лишь для демонстрации расположения на них небольшого числа объектов. Объекты могут быть не только в виде точек, но и иных фигур, крестиков, окружностей, квадратов и др
Рис.5.12 График ЗD-поверхности в виде разбросанных в пространстве точек
5.7. Установка шаблона SD-графиков в виде гистограммы (3D Bar Chart)
Весьма pacпpocтраненной формой представления ЗD-поверхностей является также представление ее рядом трехмерных столбиков, высота которых определяется значением координаты z(x, у) Для этого используется операция 3D Bar Chart (Трехмерная гистограмма) — см рис 513
Рис.5.13 Представление ЗD-поверхности трехмерными столбиками
Подобные графики широко применяются при анализе сложных статистических данных, например представленных тремя независимыми переменными Обычно их построение считается высшим пилотажем, но MathCAD превращает этот процесс в обыденную операцию При этом, как видно из рис. 513, достаточно наглядным является представление столбиками и сложных трехмерных поверхностей
5.8. Установка шаблона ЗD-графиков с векторным представлением (Vector Field Plot)
Еще один вид представления ЗD-поверхности векторное представление Оно задается построением коротких стрелочек векторов Стрелка обращена острием в сторону нарастания высоты поверхности, а плотность расположения стрелок зависит от скорости этого нарастания На рис 514 показан пример подобного графика Для его построения используется команда Field Plot (Векторное поле)
Рис. 5.14 Представление 3D-поверхности векторами
Эти графики применяются редко из-за трудностей построения множества стрелок, для каждой из которых надо рассчитывать градиент поля Но MathCAD дает удобную возможность широкого применения этого вида графиков Он особенно подходит для представления электромагнитных, тепловых, гравитационных и иных полей
5.9. Установка шаблона матриц и векторов (Matrix...)
Операция Matrix... (Матрицы) обеспечивает задание векторов или матриц Как известно, матрица является заданным своим именем объектом в виде массива данных MathCAD использует одномерные массивы — векторы и двумерные — собственно матрицы
Матрица характеризуется числом строк (Rows) и числом столбцов (Columns). Таким образом, число элементов матрицы или ее размерность равны Rows x Columns Элементами матриц могут быть числа, константы, пере менные и даже математические выражения Соответственно матрицы могут быть численными и символьными
Если использовать операцию Matrix..., то в текущем окне появится не большое окошко, позволяющее задать размерность вектора или матрицы (см рис 515 справа) Для этого нужно указать число строк Rows и число сголбцов Columns Нажав клавишу Enter или указав курсором мыши на изображение клавиши Insert (Вставить) в окошке, можно вывести шаблон матрицы или вектора (вектор имеет один из параметров размерности, равный 1)
Шаблон содержит обрамляющие скобки и темные маленькие прямоугольники, обозначающие места ввода значений (числовых или символьных) для элементов вектора или матрицы. Один из прямоугольников можно сделать активным (отметив его курсором мыши). При этом он заключается в уголок. Это указывает на то, что в него будут вводиться значения соответствующего элемента. С помощью клавиш перемещения курсора можно по горизонтали пробежаться по всем прямоугольникам и ввести все элементы вектора или матрицы.
Рис. 5.15 Вывод шаблонов вектора и матрицы и их заполнение
Пока идет ввод элементов векторов или матриц, пустые шаблоны отображаются без каких-либо комментариев. Однако, если закончить ввод до полного заполнения шаблонов, система выведет сообщение об ошибке — незаполненный шаблон приобретет красный цвет. Вывод несуществующей матрицы или ошибочное указание ее индексов также отображается красным цветом.
Если использовать операцию Insert (Включение) при уже выведенном шаблоне матрицы, то матрица расширяется и ее размер увеличивается. Кнопка Delete (Стирание) позволяет убрать расширение матрицы, вычеркнув из нее строку или столбец.
Каждый элемент матрицы характеризуется индексированной переменной, и его положение в матрице обозначается двумя индексами: один указывает номер строки, другой — номер столбца. Для набора индексированной переменной прежде надо ввести имя переменной, а затем перейти к набору индексов нажатием клавиши, вводящей символ]. Прежде указывается индекс строки, а затем через запятую индекс столбца. Примеры вывода индексированных переменных (элементов матрицы М) также даны на рис. 5.14.
Вырожденная в одну строку или в один столбец матрица является вектором. Его элементы — индексированные переменные с одним индексом. Нижняя граница индексов задается значением системной переменной ORIGIN. Обычно ее значение задают равным 0 или 1.
5.10. Вывод функций (Choose function...)
Как правило, при подготовке документов имена функций пользователь вводи г самостоятельно. Поскольку функций, встроенных в систему, очень много (около 250), запомнить их все довольно сложно. Это и не нужно, ведь в MathCAD есть средство для ввода имен функций из их общего списка (каталога).
Операция Choose function... (Вставить функцию) выполняет следующие действия:
• выводит полный перечень встроенных в ядро системы функций;
• кратко поясняет назначение каждой функции;
• позволяет корректно ввести шаблон с именем функции в место расположения курсора, установленного в математическом выражении.
Для реализации этих возможностей команда выводит диалоговое окно, показанное на рис. 5.16.
Рис. 5.16 Диалоговое окно встроенных функций
Обратите внимание на то, что запись каждой функции дается в полной синтаксической форме. Это исключает довольно частые ошибки в формулах, вызванные неточностями записи функций. На месте параметров в выведенной функции имеются шаблоны данных для их ввода. Приведенное окно дает полный список встроенных в систему MathCAD функций и является хорошим средством для ознакомления с ними.
5.11. Установка единиц измерения размерных величин (Units...)
Операция Units... (Единицы) служит для установки единиц измерения размерных величин в заданной системе. Размерные величины широко используются в физических и в научно-технических расчетах.
При использовании операции Units... появляется окно, имеющее список размерных величин Dimension и относящихся к ним единиц измерения Unit. В окне есть также указание на то, какая система единиц System используется. Вид окна показан на рис. 5.17. По умолчанию используется система единиц SI.
Рис. 5.17 Диалоговое окно вставки единиц измерения размерных величин
Операция Options... в подменю Math главного меню служит для смены используемой системы единиц
Окно вставки единиц измерения размерных величин имеет три кнопки Insert — вставляет выбранную единицу измерения с сохранением окна, OK — вставляет выбранную единицу измерения и закрывает окно, Cancel — отменяет операцию вставки размерных величин
При работе с размерными величинами MathCAD производит необходимые преобразования и выводит числовые значения величин вместе с единицами их измерения
5.12. Установка шаблона импортируемого рисунка (Picture)
Ценной возможностью систем MathCAD является импорт графических файлов, создаваемых другими графическими системами, например графическими редакторами класса PaintBrush, системами AutoCAD, PCAD и др Это позво ляет включать в документы MathCAD высококачественные графические иллюстрации, что крайне необходимо при создании электронных книг
Перед импортом файла надо подготовить его в соответствующем прило жении и записать в виде файла в текущий каталог работы Файл может иметь расширение.bmp (BitMap) Воспринимаются и файлы с расширением msc из прежних версий системы MathCAD
Для импорта файла с рисунком достаточно выполнить операцию Picture (Рисунок) — появится шаблон рисунка с единственным маленьким шабло ном в левом нижнем углу В нем надо записать имя файла и, отведя курсор мыши в сторону от рисунка, щелкнуть ее левой клавишей На рис 518 показано, как рисунок из файла Columbia msc с созданным с помощью системы AutoCAD изображением космического челнока встраивается в документ системы MathCAD
Рис. 5.18 Пример импорта графического изображения
Импортируемый рисунок можно, как и любой другой, перемещать с помощью мыши по экрану, растягивать его, выделять и помещать в буфер обмена и т. д. Заглядывая вперед, отметим, что можно перенести в текст документов и множество рисунков из электронного справочника системы. Это заметно облегчает подготовку в среде MathCAD хорошо иллюстрированных учебных программ.
Помимо импорта рисунков из файлов система MathCAD допускает копирование рисунков из буфера обмена системы Windows. Для этого надо ввести рисунок в этот буфер (например, используя графический редактор Windows Paint Brush или операции Copy либо Cut прикладных Windows-программ). Затем, перейдя к работе с системой MathCAD, нужно установить курсор на место верхнего левого угла будущего рисунка и выполнить операцию Paste в позиции Edit главного меню (или нажать клавишу F4).
5.13. Вставка текстовой области (Text Region...)
Текстовые области вставляются в документы MathCAD для создания текстовых комментариев. В MathCAD 7.0 PRO оставлена операция вставки расширяемой текстовой области — Text Region... (Текстовая область). Перед ее применением нужно установить курсор мыши (красный крест) в то место окна редактирования, откуда должен начинаться текст — это левый верхний угол будущей текстовой области. После этого исполняется данная операция и на месте курсора появляется прямоугольник (шаблон текстовой области) с текстовым маркером внутри него — см. рис. 5.19.
Рис. 5.19 Операции ввода текста и математических символов в текстовые области
Перед вводом русскоязычного текста рекомендуется выбрать подходящий шрифт. У многих русскоязычных (кириллических) шрифтов в названии имеется слово "Суг". Если в начале ввода выяснилось, что введена буква не русского алфавита, то при попытке ее стирания шаблон текстовой области исчезает и его придется выводить снова.
5.14. Вставка в текстовую область математических формул (Math Region...)
В текстовые области нередко надо вставлять математические формулы. Такие объекты не должны быть исполняемыми в отличие от формул в формульных блоках. Эти формулы в ряде случаев (например, при символьных операциях) могут модифицироваться.
Для вставки в текстовые блоки математических формул надо выполнить операцию Math Region... (Математическая область). Кстати, эта операция доступна только в том случае, когда текстовый маркер установлен в нужное место текстовой области. Тогда выполнение операции Math Region... приведет к появлению в текстовой области шаблона в виде маленького черного квадрата. В этом квадрате можно задавать математические формулы, в том числе используя наборные панели с математическими символами (см. пример на рис. 5.19).
5.15. Вставка линии разрыва страницы (Page Break)
Большие документы нередко занимают много страниц. Бывает крайне нежелательно, когда при печати таких документов какой-нибудь график или таблица обрываются линией раздела страниц. Недопустимы и ситуации, когда заголовок раздела оказывается на одной странице, а непосредственно сам раздел начинается на другой.
Для предотвращения таких ситуаций желательно прервать страницу в заданном месте. Для этого служит операция Page Break (Разрыв страницы), вставляющая в документ горизонтальную линию разрыва страницы. На рис. 5.19 эта линия показана внизу окна редактирования.
5.16. Вставка гиперссылки (Hyperlink)
Гиперссылки — важный элемент создания сложных документов, обучающих программ и справочных систем. Напомним, что гиперссылка в системе MathCAD представляется подчеркнутым словом, при активизации которого вызывается связанный с ней документ (файл).
Для создания гиперссылки должен быть создан текстовый блок, в котором нужно выделить некоторый фрагмент текста, чаще всего какое-либо слово. Начало создания гиперссылки показано на рис. 5.20.
После этого надо выполнить операцию Hyperlink (Гиперссылка) с опцией New (Новая) для вывода диалогового окна задания гиперссылки Оно также показано на рис 5.20 под текстовым блоком В этом окне следует указать в верхнем свободном поле полное имя файла, который будет вызываться данной гиперссылкой В другом поле можно ввести текст сообщения, которое будет появляться в строке состояния (внизу экрана системы) при установке курсора мыши на гиперссылку.
Обычно точное имя файла (с полным путем доступа к нему) запомнить трудно Поэтому, активизируя клавишу Browse (Обзор) окна задания гиперссылки, можно вызвать окно поиска файла — см. рис. 521.
После нахождения файла его полное имя появляется в верхнем поле окна гиперссылки, теперь в нижнее поле можно ввести текст сообщения (см. рис. 5.22).
Рис. 5.20 Подготовка к заданию гиперссылки
Рис. 5.21 Поиск файла, который связывается с гипер-ссылкой
Для завершения создания гиперссылки достаточно нажать кнопку ОК окна создания гиперссылки. При отказе от ее создания надо нажать кнопку Cancel.
Если установить курсор мыши на гиперссылку, то в строке состояния (внизу экрана системы) появится сообщение, которое было задано ранее (оно видно на рис. 5.23). Такие сообщения очень полезны при большом числе ги-перссылок, поскольку позволяют судить об их назначении.
Для осуществления гиперссылки достаточно установить курсор мыши на подчеркнутое слово, гиперссылку, и быстро дважды щелкнуть левой клавишей мыши. Текстовое сообщение, в котором имеется гиперссылка, станет выделенным, и на экране появится вызываемый гиперссылкой документ — см. рис. 5.24.
Рис. 5.22 Завершение создания гиперссылки
Рис. 5.23 Вид экрана после задания гиперссылки
После ознакомления с вызываемым документом его можно закрыть. До этого возможно редактирование документа. Объектами гиперссылок Могут быть не только документы. Можно, к примеру, дать гиперссылку на рисунок, создаваемый графическим редактором, на электронную таблицу и т. д. Все это позволяет готовить вполне современные и удобные в применении документы не только расчетного, но и информационно-справочного и учебного характера.
Гиперссылку можно убрать с помощью опции Erase (Уничтожить), а также отредактировать, используя опцию Edit... (Редактировать), выводящую окно редактирования гиперссылки.
Рис. 5.24 Использование гиперссылки
5.17. Вставка обращения к заданному файлу активизацией кнопки (Reference...)
Есть еще один удобный способ обращения к заданным файлам путем создания ассоциированного с ними графического объекта — использование кнопок Для этого существует операция Reference... (Ссылка) Она выводит окно задания такой ссылки, показанное на рис 5 25
В этом окне надо либо явно указать полное имя файла (на рис 5 25 это относится к файлу Demo1 mcd), пибо найти его, воспользовавшись кнопкой вызова окна просмотра Browse Нажав далее кнопку ОК, можно вывести по
Рис. 5.25 Задание гиперссылки в виде кнопки, ассоциированной с файлом
месту расположения курсора мыши кнопку гиперссылки с указанным после нее именем вызываемого ею файла (вид этой кнопки показан на рис. 5.25 под окном задания гиперссылки). Активизация кнопки ОК ведет к появлению окна с вызываемым документом (см. рис. 5.26).
Рис. 5.26 Использование гиперссылки в виде кнопки
Два вида гиперссылок, реализованных в системе MathCAD, расширяют возможности подготовки сложных документов, а возможности использования гиперссылок делают более разнообразными.
5.18. Связь с другими компонентами системы (Component...)
Одной из главных отличительных особенностей системы MathCAD 7.0 PRO является возможность подключения к ней других математических систем — компонентов и использование входящих в них средств и функций, что намного увеличивает возможности объединенной вычислительной системы.
Для подключения к MathCAD новых компонентов используется операция Component... (Компоненты), выводящая диалоговое окно с перечнем компонентов, с которыми можно общаться после установления связи с тем или иным компонентом. Это окно показано на рис. 5.27.
В этом окне можно выбрать одну из систем и подключить ее к MathCAD. После этого, нажав кнопку Finish (Конец), можно наблюдать загрузку системы. Работу с расширенной системой мы опишем позже, после более детального знакомства с собственными (и достаточно обширными) возможностями самой системы MathCAD.
5.19. Вставка объектов (Object...)
Вставка объектов — пожалуй, самая мощная возможность системы MathCAD. Впрочем, она присуща большинству серьезных приложений для операционных систем класса Windows 95. Благодаря этой возможности легко устанавливается связь с самыми различными приложениями этой операционной системы, в том числе с довольно далекими от математических систем, такими, например, как текстовый процессор Word или база данных Acess из офисного пакета Microsoft Office 95.
Рис. 5.27 Окно связи с другими компонентами системы MathCAD
Для реализации вставки объектов из других приложений надо выполнить операцию Object... (Объект). Она выводит окно с перечнем приложений, с которыми может осуществляться объектная связь (см. рис. 5.28).
Рис. 5.28 Окно объектной связи с приложениями
После выбора приложения для объектной связи с MathCAD на месте курсора мыши появляется пиктограмма с изображением объекта. Вид этой пиктограммы можно менять, если активизировать кнопку Смена значка... При этом появляется окно, в котором можно выбрать подходящий значок (пиктограмму), устраивающий пользователя (см. рис. 5.29).
На рис. 5.30 показан случай, когда в качестве объекта для вставки используются документы текстового редактора Word 95 из пакета Microsoft Office 95. Пиктограмма этого объекта показана в левом верхнем углу окна редактирования текущего документа.
Рис. 5.29 Выбор значка для обозначения вставляемого объекта
Рис. 5.30 Установление объектной связи с текстовым редактором Word 95
Если активизировать значок-пиктограмму, то появится окно текстового редактора Word 95, которое также показано на рис. 5.30. В этом окне можно подготовить любой документ, и он в дальнейшем будет вызываться активизацией значка объекта.
Объекты для связи с MathCAD могут быть самыми разнообразными; это текстовые и графические данные, таблицы и записи из баз данных, музыкальные фрагменты, видеоклипы и т. д. По существу, этот способ связи позволяет свести воедино самые различные приложения и обеспечить между ними полноценный обмен данными.
Глава 6 Установки форматов объектов системы MathCAD
6.1. Позиция Format главного меню
Под форматом объектов подразумевается некоторый набор их характеристик:
размеры изображения объекта на экране, размеры и стиль символов математических выражений и текстовых комментариев, установки цвета и т. д. Начинающие пользователи системы MathCAD, как правило, вполне удовлетворены всеми форматами, которые заданы по умолчанию. И это не случайно — форматы выбраны с учетом устоявшейся практики научно-технических вычислений и технических характеристик современных ПК.
Однако по мере освоения системы те или иные форматы нужно будет изменить. К примеру, пользователя может не удовлетворить точность представления дробных чисел всего тремя цифрами после запятой или отсутствие изображения осей на графике, либо, напротив, их присутствие. Может потребоваться изменение размеров математических символов в формулах или шрифтов в текстовых комментариях.
В соответствии с новой концепцией пользовательского интерфейса системы MathCAD 7.0 PRO, ориентированной на стандартный Windows-интерфейс, все операции изменения формата сведены в подменю позиции Format (Форматирование) главного меню. В прежних версиях MathCAD операции форматирования были разбросаны по разным позициям главного меню.
Подменю Format (Формат) имеет следующие позиции:
Number... (Формат числа) — установка формата чисел;
Equation... (Формат выражений) — установка формата выражений;
Text... (Формат текста) — установка формата текста;
Paragraph... (Формат параграфа) — установка формата параграфа;
Style... (Формат стиля) — установка формата стиля;
Properties... (Свойства) — установка свойств;
Graph (Формат графиков) — установка формата графиков;
Color (Цвет) — установка цвета;
Separate Region — разделение областей (блоков);
(Разделение областей)
Align Region — задание расположения областей вывода
(Расположение областей) символьных вычислений;
Lock Region — создание закрытых (недоступных (Запирание областей) для редактирования) областей;
Header/Footer... (Колонтитулы) — создание колонтитулов.
Ниже рассмотрено действие всех этих операций.
6.2. Установка формата чисел (Number...)
Операция Number... (Формат числа) выводит диалоговое окно (см. рис. 6.1), сообщающее о формате числовых данных системы. Все имеющиеся в этом окне форматы могут быть изменены.
Рис. 6.1 Окно для установки формата чисел
Это окно содержит три выделенные части В первой — Radix — устанавливается тип основания чисел Decimal (десятичное), Hex (шестнадцатиричное) или Octal (восьмеричное) Примеры вывода чисел в этих форматах даны на рис 6 1 Шестнадцатеричные числа отмечаются в конце символом "h", a восьмеричные — символом "о" Эти числа находят применение в основном для описания адресной системы компьютеров
Вторая часть Precision (точность) — задает погрешность вычислений в виде показателя степени -n для числа 10 в этой степени Задаются число отображаемых знаков Displayed (точность вывода), границы представления чисел в экспоненциальной форме Exponential Threshold (диапазон показателя), допустимая граница для комплексных чисел Complex Tolerance (комплексная точность) и допустимая граница для действительных чисел Zero Tolerance (точность нуля)
В третьей части — Imaginary (мнимая единица) — задается знак мнимой единицы для комплексных чисел 1 или J (напомним, что мнимая единица есть квадратный корень из -1) Комплексное число имеет представление вида
Z = а+ i * b,
где а = Re(Z) — действительная часть комплексного числа, a b = Im (Z) комплексная часть Z.
Если Re(Z)/Im(Z)>10n, то комплексное число Z выводится как действительное, а если Im(Z)/Re(Z)>10n, то число Z выводится как мнимое Значения п для этих представлений задает параметр Complex Tolerance Если действительное число больше числа 10 в степени п или меньше, чем 10 в степени -п, где п — значение параметра Exponencial Threshold, то число представляется в экспоненциальной форме Если значения чисел по модулю меньше указанных параметром Zero Tolerance, числа представляются в виде нулей Все это особенно важно при научно-технических расчетах, когда излишняя гоч-ность представления чисел ни к чему хорошему не ведет
С помощью диалогового окна можно сделать формат глобальным (Global) или локальным (Local) Последнее возможно, если соответствующее значение отмечено выделением Глобальный формат задает представление для всех числовых данных документа, а локальный — только для того блока, rде использовалась операция изменения формата
Для массивов чисел их вывод задается в виде матрицы, если поставить птичку" в прямоугольнике включения опции Display as Matrix (отображение в виде матрицы) Однако для больших массивов это может быть неприемлемо, так как такая матрица выходит за пределы экрана и даже страницы документа (см рис 6 2)
Рис. 6.2 Представление большого массива чисел в виде матрицы
Рис. 6.3 Представление большого массива в виде электронной таблицы
Если опция Display as Matrix отключена, то большие массивы отображаются как электронные таблицы (со слайдерами для просмотра всего массива, появляющимися при активизации ячейки таблицы) Такая форма представления показана на рис 6 3.
Отображение больших массивов в виде электронной таблицы, несомненно, более компактно и удобно Но оно не совсем соответствует традиционной матричной форме представления двумерных массивов, принятой в математике. Следует обратить внимание на то, что при выделении таблицы появляются затемненные графы, в которых видны индексы ячеек таблицы (элементов массива)
6.3. Форматирование математических выражений (Equation...)
Математические выражения имеют довольно сложную структуру, они содержат переменные, константы, операторы и специальные знаки Все они могут иметь различный размер, чго иногда приводит к несоответствию вида этих объектов Чаще всего это связано с отказом от применения типовых устано вок MathCAD (по умолчанию) и неудачным форматированием математических выражений
Шрифты для математических символов привязаны к определенным их классам, например к числовым константам, переменным, надписям на графиках и т д Можно сказать, что они имеют определенные атрибуты Для переменных и надписей на графиках MathCAD по умолчанию использует шрифт Times Roman с размером 10 пунктов. Однако с помощью операции Equations... (Выражения) можно назначить для них, а также чисел и других символов в математических выражениях иной шрифт с иным размером Эта операция выводит диалоговое окно Format Equation, показанное на рис 6 4
Рис. 6.4 Окно форматирования математических выражений
Это окно устанавливает группу объектов в математических выражениях, шрифтовое оформление которых подлежит модификации. К таким объектам относятся переменные (Variables), константы (Constant) и объекты пользователя (User N, где N — номер группы от 1 до 7).
Окно обеспечивает выбор шрифтового оформления для указанных выше объектов. При этом появляется окно с каталогом шрифтов и необходимыми для их задания опциями. На рис. 6.5 приведен вид такого окна для выбора шрифта для переменных.
Рис. 6.5 Окна выбора шрифтов для переменных
Параметры шрифтов устанавливаются раздельно для указанных выше объектов, но для всех подобных объектов в заданном документе остаются идентичными. Это позволяет выбрать стиль представления математических выражении, наиболее удобный для пользователя. Например, можно добиться приемлемого размера и стиля для всех составляющих математических выражений.
Следует отметить, что окно установки объектов можно активизировать и из окна выбора шрифтов, установив курсор мыши на маленький прямоугольник у правого верхнего угла этого окна и нажав левую клавишу мыши.
6.4. Замена латинских букв на греческие (Ctrl+G)
К специфическим операциям форматирования можно отнести замену латинских букв на греческие. Греческие буквы можно ввести сразу выбором одной из пиктограмм в палитре греческих букв. Однако для этого надо пользоваться мышью, что не всегда удобно.
Есть и второй, порою более быстрый путь ввода греческих букв: достаточно ввести ассоциированную с греческой буквой латинскую букву и нажать одновременно клавиши Ctrl и G. В результате латинская буква заменится греческой. На рис. 6.6 показаны таблицы соответствия между латинскими и греческими буквами.
Рис. 6.6 Таблица ввода греческих букв
Большинство греческих букв легко ассоциируются с латинскими Помни те, что есть комбинации клавиш для ввода математических спецсимволов Так, нажатие клавиш Ctrl+P вводит константу "пи ', a Ctrl+Z — знак беско нечности
6.5. Форматирование текста (Text...)
Форматирование текста означает изменение типа шрифтов и их параметров Операция Text... (Текст) доступна лишь по отношению к выделенному фраг менту текста и активна только в том случае, когда курсор мыши находится в текстовой области Эта операция позволяет выбрать шрифт из имеющегося набора и изменить его в выделенной области текста При использовании операции Text... появляется окошко Text Format с каталогом шрифтов (см рис 67)
Рис. 6.7 Диалоговое окно форматирования текста
Это окно содержит три перекчючателя для выбора стиля набора и разме ра шрифтов
Font Style (Стиль) — стиль шрифтов, Font (Шрифт) — набор шрифтов, Size (Размер) — размер шрифтов
Набор шрифтов определяется тем, какие шрифты инсталлированы в системе Windows, в которой работает MathCAD. Стиль шрифтов может быть нормальный (особо не называется) или-Bold (Полужирный) - полужирный шрифт;
Italic (Наклонный) - наклонный шрифт;
Underline (Подчеркивание) - подчеркнутый снизу шрифт
Эти три стиля шрифтов можно использовать в любой комбинации и с любым набором шрифтов Они могут быстро вводиться пиктограммами с буквами В, / и ц, размещенными в строке символов.
Имеется также ряд включаемых или выключаемых опций под именем Effect (Эффект):
Strikeout (Зачеркнутый) — перечеркнутые посередине символы;
Underline (Подчеркнутый) подчеркнутые снизу символы;
Substript (Подстрочный) — подстрочные символы;
Superscript (Надстрочный) — надстрочные символы.
Как обычно, кнопка ОК диалогового окна фиксирует выбор, а кнопка Cancel позволяет отказаться от модификации текстовых надписей На рис. 6 8 представлены образцы шрифтов для набора SchoolBook, содержащего буквы как латинского, так и русского алфавитов
Рис. 6.8 Образцы шрифтов набора SchoolBook
Многие шрифты, в частности наиболее распространенный True Type (ТТ), допускают изменение их размеров (см. пример внизу на рис. 6.8), что также задается в указанном окошке. Можно, например, для заглавия документа выбрать большие жирные и наклонные буквы, а текстовые сообщения задать прямыми буквами малого или среднего размера с обычной жирностью Выбор типа шрифта зависит в основном от вкусов пользователя.
6.6. Изменение формата параграфа (Paragraph...)
Если курсор мыши находится в текстовом блоке, то для форматирования параграфа можно использовать операцию Format Paragraph... (Формат параграфа) Она выводит диалоговое окно, показанное на рис. 6 9.
Рис. 6.9 Окно установки формата параграфа
Окно установки формата параграфа имеет две опции Indent (Отступы):
All Lines (Для всех строк) — установка отступа для всех строк, First Lines (Для первых строк) — установка отступа для первых строк
Можно задать абзацный отступ как для всех строк, так и только для первой строки Кроме того, можно задать тип равнения строк Alignment (Выравнивание)
Left (Слева) — по левому краю абзаца, Right (Справа) — по правому краю абзаца, Center (По центру) — по центру абзаца
На рис 6 10 показаны примеры различного выравнивания текста При выравнивании текста слева задан абзацный отступ для первой строки
Рис.6.10 Примеры выравнивания текста
В прежних версиях MathCAD было два типа текстовых блоков в виде блока с малой шириной и в виде абзаца с полной шириной, равной ширине страницы В новой версии остался лишь один блок, с его помощью можно задавать как узкие надписи, так и надписи во всю ширину страницы
6.7. Задание стиля текстовых комментариев (Style...)
Под стилем текстовых комментариев подразумевается совокупность параметров различных текстовых объектов заголовков различного уровня, абзацев, списков (листов) и т д Все они должны иметь свой определенный шрифт, размеры симво лов и иные параметры Подготовка текстовых комментариев в определенном сти ле необходима при создании документов высокого полиграфического качества
Операция Style... (Формат стиля) позволяет устанавливать стили для различных текстовых объектов. При ее выполнении выводится окно выбора стилей Text Styles, показанное на рис. 6.11 сверху.
Рис. 6.11 Работа со стилями текстовых комментариев
Окно выбора стилей имеет перечень стилей и ряд кнопок для задания следующих операций:
Apply (Применить) — применить выбранный стиль;
New... (Новый) — задать новый стиль;
Modify... (Модифицировать) — модифицировать выбранный стиль;
Delete (Стереть) — стереть заданный стиль;
Close (Закрыть) — закрыть окно и отказаться от выбора стиля.
На рис. 6.11 справа показаны примеры применения различных стилей к надписям с названиями соответствующих стилей. Они дают наглядное представление о стилях, которое явно заимствовано из стилевого оформления текстовых документов в редакторе Word 95.
Операция New... позволяет задать новый стиль со своим именем, а операция Modify... — модифицировать уже имеющийся стиль. На рис. 6.11 показаны дополнительные окна, которые появляются при выполнении операции Modify... (операция New... отличается от нее только вводом заголовка нового стиля).
В окне модификации стиля можно выбрать нужный набор символов (кнопка Font...) и задать параметры параграфа (кнопка Paragraph...). Задание нового стиля дополняет уже указанный список стилей.
6.8. Установка свойств (Properties...)
Одно из определяющих понятий в операционных системах Windows 95/NT — свойства различных объектов. Это могут быть цвета выделений, характер эволюции математических выражений и т. д. Операция Properties... (Свойства) позволяет устанавливать свойства различных объектов. Таким образом, это контекстно-зависимая операция и ее диалоговые окна могут несколько отли чаться для разных объектов. Выбор объектов, как обычно, задается установкой в них курсора мыши.
На рис. 6.12 показано окно установки свойств для объекта — математического выражения.
Рис. 6.12 Установка свойств математического выражения
В данном случае окно имеет панельный переключатель с двумя позициями:
Displayed (Отображение) — свойства вывода;
Calculation (Вычисления) — свойства вычислений.
К свойствам вывода в данном случае относится лишь наличие или отсутствие подкраски фона математического выражения. Активизируя кнопку Choose Color... (Выбрать цвет), можно вызвать окно задания цвета фона выражений, оно показано справа от окна установки свойств на рис. 6.12.
Панель Calculation (см. рис. 6.13) предназначена для отключения или включения эволюции математических выражений. Под эволюцией математических выражений подразумевается их активность. Напоминаем, что обычно математические выражения активны и выполняют определенные действия. Однако, используя опцию Dissable Evalution (Отключение эволюции), выражение можно сделать пассивным, т. е. просто комментарием.
Рис. 6.13 Окно свойств с включенной панелью Calculation
Еще одно важное свойство математических выражений — их оптимизация. Опция Enable Optimization (Включить оптимизацию) включает режим оптимизации. При этом выражение, если оно вычисляется, представляется в аналитическом виде всегда, когда это возможно. Это свойство может привести к заметному ускорению вычислений в тех случаях, когда оптимизирующее выражение проще исходного. Особенно заметен выигрыш в скорости вычислений при использовании функций (например, функций вычисления интегралов или производных) численными методами.
6.9. Установка формата двумерной графики (X-Y Plot)
Позиция Graph в подменю Format задает форматы графиков. Начнем с операции X-Y Plot... (Формат декартовых графиков). Она выводит в центр текущего окна окно с опциями формата графиков 2D-типа (см. рис. 6.14). Следует помнить, что для изменения формата уже построенного графика необходимо выделить его. Выделенный график обводится сплошной линией с маркерами его растяжения.
Рис. 6.14 Окно с опциями задания формата 2D-графика
Как видно из рис. 6.14, диалоговое окно формата имеет панельный переключатель на четыре позиции:
X-Y Axes (X-Y Оси) — управление опциями осей;
Traces (Графики) — управление линиями графика;
Labels (Надписи) — управление метками (надписями) у осей;
Defaults (По умолчанию) — задание опций по умолчанию.
Важно отметить, что все установки опций графиков, которые видны в окнах формата, относятся к выделенному графику и могут при необходимости изменяться.
Форматирование осей графика
В панели X-Y Axes содержатся следующие основные опции, относящиеся к осям Х и Y (Axis X и Axis Y):
Log Scale (Лог. масштаб) — установка логарифмического масштаба;
Crid Lines (Линии сетки) — установка линий масштабной сетки;
Numbered (Пронумеровать) — установка цифровых данных по осям, Autoscale (Автомасштаб) — автоматическое масштабирование графика;
Show Markers (Нанести риски) — установка делений по осям;
Auto Grid (Автосетка) — автоматическая установка масштабных линий;
No. of Grids (Число интервалов) — установка заданного числа масштабных линий.
Все эти опции достаточно очевидны. Отметим лишь, что если опция Grid Lines отключена, то масштабная сетка графика не строится, хотя на осях размещаются короткие деления. Опция Numbered обеспечивает редактирование цифровых данных (указаний на масштаб). Например, она полезна для округ ления нижнего и верхнего пределов изменений значений абсцисс и ординат, которые при автоматическом выборе масштаба могут оказаться десятичными числами с дробной частью.
Возможна также установка следующих опций координатных осей (Axes Style):
Boxed (Рамка) — оси в виде прямоугольника;
Crossed (Репер) — оси в виде креста;
None (Ничего) — отсутствие осей;
Equal Scales (Равные деления) — установка равенства масштабов по осям графика.
В нижней части панели имеются следующие клавиши:
Close (OK) — закрытие окна;
Cancel (Отмена) — выход из установок;
Apply (Применить) — применение опций к выделенному графику, Help (Справка) — вывод подсказки.
Форматирование линий графиков
Следующая панель, Traces (Графики), показанная на рис. 6.15, служит для управления отображением линий, которыми строится график.
С помощью опций этой панели можно управлять следующими параметрами линий графика:
Legend Label (Имя кривой) — указание типа линий у оси ординат, Symbol (Маркер) — выбор символа, который помещается на линию;
Line (Линия) — установка типа линий (сплошная, пунктирная и др.);
Color (Цвет) — цвет линий;
Type (Тип) — тип графиков;
Weight (Толщина) — толщина линий.
В средней части окна опций формата содержится каталог линий графиков с указанием следующих их установок:
Symbol (Маркер) — установка символа отметки базовых точек графика, Line (Линия) — установка типа линии;
Color (Цвет) — установка цвета линии и базовых точек;
Trace type (Тип) — установка типа графика
Рис. 6.15 Панель Traces
Узловые точки графиков (для которых вычисляются координаты) часто требуется выделить какой-либо фигурой кружком, крестиком, прямоугольником и т д Опция Symbol (Маркер) позволяет задать следующие отметки базовых точек графика каждой из функции none (ничего) — без отметки, x's — наклонный крестик, +'х — прямой крестик, box (квадрат) — квадрат, dmnd(ромб) ромбик, o's — окружность
Графики отдельных функций можно также выделять, используя для их построения линии различного типа Опция Line задает построение следующих типов линий
none (ничего) — линия не строится, solid (сплошная) — непрерывная линия, dash (пунктир) — пунктирная линия, dadot (штрих-пунктир) — штрих-пунктирная линия
Другой распространенный способ выделения линии, относящихся к раз личным кривым на графике, заключается в изменении их цвета Разумеется, этот метод эффективен при применении цветного дисплея и цветного (например, струйного) принтера для распечатки графиков Опция Color (Цвет) задает следующие основные цвета линии и базовых точек red — красный, blu — синий, gm — зеленый, суа — голубой, bm — коричневый, Ыс черный
Задание типа линий графиков
Важное значение имеет и тип графика Опция Туре (Тип) задает следующие типы графика
line (линия) — построение линиями;
points (точки) — построение точками;
err (интервалы) — построение вертикальными черточками с оценкой интервала погрешностей;
bar (столбец) — построение в виде столбцов гистограмм;
step (ступенька) — построение ступенчатой линией step;
draw (протяжка) — построение протяжкой от точки до точки.
Возможные конфликты с отметкой символами и типами линий автоматически устраняются. При этом приоритет отдается опции Type (Тип), а конфликтные типы линий или точек отмечаются тремя звездочками. Каждая из указанных опций имеет свое меню с традиционными правилами его использования.
Еще две опции связаны с возможностью удаления с графика вспомогательных надписей:
Hide Argument — прячет обозначения математических (Скрыть переменные) выражений по осям графика;
Hide Legend (Скрыть имена) — прячет обозначения имен кривых графика.
Задание надписей в графиках
Панель меток Label (Надписи) позволяет вводить в рисунок дополнительные надписи, что иллюстрирует рис. 6.16. Эта панель появляется, если уже создан текущий график.
Рис. 6.16 Панель задания дополнительных надписей
Для установки надписей служат небольшие окошки:
Title (Заголовок) - установка титульной надписи к рисунку;
X-Axis (Х-ось) - установка надписи по оси X;
Y-Axis (Y-ось) - установка надписи по оси Y.
В разделе Title содержатся опции Above (Сверху) и Below (Снизу) для установки титульной надписи либо над рисунком, либо под ним. Активизация этих опций задается установкой жирной точки в кружке. Кроме того, опция Show Title (Показать заголовок) позволяет включать или выключать отображение титульной надписи. Для ее активизации служит квадратное окошко, пустое при отказе от вывода надписи и с крестом — при выводе надписи.
Графические установки по умолчанию
Панель Defaults (По умолчанию), как показано на рис. 6.17, служит для установки опций графиков Change to Defaults (Вернуть значения по умолчанию) и Use for Defaults (Использовать для значений по умолчанию). Установленные и зафиксированные опции используются в дальнейшем при построении графиков функций одной переменной.
Рис. 6.17 Панель установки и фиксации опций
С помощью комбинаций этих опций можно создавать различные виды графиков, например: с обозначением функций или без них, с обозначением аргумента или без него и др. Обозначения исчезают, если задано, что они должны исчезнуть, как только будет снято выделение графика.
Примеры на форматирование 2D-графиков
Влияние некоторых опций показано на графиках, расположенных слева от диалогового окна установки опций. Напоминаем, что для визуализации оп ций при выведенном окне их установки служит клавиша Apply (Применить) каждого диалогового окна. Эта клавиша позволяет начать наблюдение за сделанными изменениями еще до закрытия окна задания опций, что заметно облегчает экспериментирование с различными форматами графиков.
В целом перечисленные опции предоставляют возможность создавать графики самых различных видов, удовлетворяющие любым запросам пользователя (см., например, шесть типов одного и того же графика на рис. 6.18).
Задание различных форматов графики позволяет уверенно различать кривые на графике и соотносить их с той или иной функцией, а введение дополнительных надписей (титульной и по осям) — дополнительно разнообразить графики.
Рис.6.18 Графики функции, построенные с применением различных форматов
Применение графического маркера
Еще одной возможностью при работе с 2D графиками является применение специального графического маркера в виде двух перекрещивающихся пунктирных линий Они появляются при выполнении операции X-Y Trace При этом появляегся перемещаемое окно этой операции, показанное на рис 6.19
Рис. 6.19 Работа с графическим маркером
При выключенной опции Track Data Points (Перемещение по точкам данных) маркер свободно перемещается по графику При этом его координаты отображаются в окне этой опции Поместив маркер на какую-либо интересную точку графика, можно примерно определить ее координаты
Однако вручную трудно точно совместить маркер с выбранной точкой графика. Поэтому предусмотрен режим слежения за кривой графика. Он реализуется включением опции Track Data Points. При этом перемещение маркера происходит по кривой графика, и можно легко установить его точно на любую точку этой кривой.
Просмотр части графиков с увеличением
Еще одна новая особенность при работе с 20-графиками заключается в возможности их просмотра с увеличением отдельных частей этих графиков. Она реализуется операцией X-Y Zoom, которая выводит информационное окно, показанное на рис. 6.20.
Рис. 6.20 Подготовка к просмотру части графика
Перемещением мыши с нажатой левой клавишей можно выделить определенную часть графика. При этом минимальная и максимальная координаты по осям Х и Y отображаются в окне данной операции. После этого можно реализовать три варианта просмотра:
Zoom (Увеличение) — просмотр вырезанного участка;
Unzoom (Отмена увеличения) — отмена просмотра вырезанного участка;
Full View (Полный обзор) — полный просмотр.
Эти действия настолько очевидны, что дальнейшее их описание лишено смысла. В целом надо отметить, что форматирование графиков в декартовой системе координат позволяет получать практически все типы таких графиков, используемых в математической и научно-технической литературе.
6.10. Установка форматов графиков в полярной системе координат (Polar Plot...)
Позиция Polar Plot... (Формат полярных графиков) главного меню обеспечивает задание форматов графиков, которые строятся в полярной системе координат. Она выводит окно с панельным переключателем (см. рис. 6.21).
Рис. 6.21 Окно с панельным переключателем для установки форматов графиков в полярной системе координат
Переключатель содержит следующие позиции:
Polar Axes (Оси) — установка форматов отображения осей;
Traces (Графики) — управление линиями графика;
Labels (Надписи) — управление метками (надписями);
Defaults (По умолчанию) — задание опций по умолчанию.
На рис. 6.21 переключатель установлен в положение Polar Axes. При этом задаются форматы отображения радиус-вектора (Radial) и его угла (Angular). Возможные опции были описаны ранее, и нет смысла их повторять. Раздел Axes Style (Стиль осей) позволяет задать стиль отображения координатных осей в виде окружности вокруг графика Perimeter (Обрамление), в виде расположенных крестом осей Crossed (Визир) и без представления координатных осей None (Ничего).
Рис. 6.22 Панель Labels окна установки форматов графиков в полярной системе координат
Опции панелей Traces и Labels также аналогичны ранее описанным. Панель Labels упрощена (рис 6.22), на ней предусмотрена установка только дополнительной титульной надписи.
Панель Defaults позволяет зафиксировать введенные опции и использовать их в дальнейшем как опции по умолчанию. Таким образом, вы можете один раз настроить систему под нужный вид графиков и в дальнейшем использовать сделанные установки для построения других графиков
Трассирование графика Format
В полярной системе координат, как и в декартовой предусмотрена возможность трассирования графиков с помощью графического маркера. Она реализуется операцией Format Trace, которая выводит информационное окно, показанное на рис. 6 23
Рис. 6.23 Трассирование графика в полярной системе координат
Трассировка в данном случае производится вращательными движениями мыши и перемещением ее курсора по кругу На графике появляется радиальный отрезок пунктирной прямой и пунктирная окружность Отрезок прямой задает угол радиус-вектора, а окружность — положение его конца, т. е. расстояние от центра координатной системы до точки пересечения вращающегося отрезка с окружностью. Координаты (угол и расстояние) показывает окно трассировки.
Трассировка возможна без слежения за кривой рисунка и со слежением. Для осуществления слежения надо поставить "птичку" в прямоугольном окошечке опции Track Data Point. С помощью кнопок Copy Angle и Copy Radius положение конца радиус-вектора текущей точки (угла и длины радиус-вектора) можно скопировать в буфер обмена. А с помощью команды Paste в позиции Edit главного меню можно перенести это значение в математическое выражение, в котором оно нужно
Просмотр части графика
Операция Format Zoom... позволяет просматривать выделенную часть графика в полярной системе координат Выделение производится изменением радиуса выделяющей пунктирной окружности Нажав кнопку Zoom окна просмотра, можно получить график выделенной части с увеличением (см рис 6.24)
Рис. 6.24 Просмотр части графика в полярной системе координат
Назначение остальных кнопок окна просмотра то же, что и у окна просмотра графиков в декартовой системе координат
6.11. Установка форматов графиков трехмерных поверхностей (3D Plot...)
Позиция 3D Plot... (Формат 3D-графика) подменю Format служит для установки форматов представления 3D-графиков (см рис 6 25)
Панельный переключатель окна установки форматов 3D-графиков содержит следующие позиции
View (Вид) — установка опций обзора 3D-фигур, Axes (Оси) — установка опций представления осей;
Color&Lines (Цвет и линии) — установка цвета и типа линий, Title (Заголовок) — установка титульной надписи
Рассмотрим эти операции, начиная с обзора трехмерной поверхности
Обзор трехмерной поверхности
На рис 6 25 панельный переключатель показан в положении View При этом возможна установка ряда параметров обзора SD-фигур, объединенных в несколько групп
Группа View (Вид) содержит опции. Rotation (Вращение) — задание угла поворота (от 0 до 180 градусов);
Tilt (Наклон) здание угла наклона (от 0 до 90 градусов),
Vertical Scale (Верт. масштаб) — задание относительного размера по вертикали (от 1до100%).
Группа Axes (Оси) задает тип отображения осей:
Perimeter (Периметр) — по периметру;
Comer (Репер) — в углу;
None (Ничего) — без вывода осей.
Группа Black Plans (Грани) содержит опции:
Show (Показать) — отображение в цвете;
Fill Color... (Закрасить) — установка цвета координатных плоскостей;
Enge Color... (Цвет ребер) — установка цвета ребер с целью выделения контуров граней и линий сетки.
При установке цветов появляется диалоговое окно выбора цвета. Выбор цвета определяется возможностями применяемого видеоадаптера. Группа Display As... (Отобразить как) служит для задания общего типа ЗD-графиков:
Surface Plot (Поверхность) — в виде ЗD-поверхности;
Contour Plot (Линии уровня) — в виде линий равного уровня;
Data Point (ЗD-точки) — в виде отдельных точек в ЗD-пространстве;
3D Bar Chart (ЗD-гистограмма) — в виде трехмерных гистограмм.
И наконец, группа Frames (Рамки) служит для установки опций видимости ограничительных элементов графиков:
Show Border (Показать обрамление) — задает рисунок в рамке;
Show Box (Показать ящик) — задает рисунок в трехмерном параллелепипеде.
На рис. 6.25 показан график трехмерной поверхности с функциональной цветовой окраской и построением видимых линий каркаса (невидимые линии удалены). К сожалению, цвета графика в книге не различаются, так как печать черно-белая. Вместо цветов видна раскраска серым цветом разной плотности. Рядом с графиком помещена панель форматирования, которая дает информацию о всех опциях просмотра (панели View).
Рис. 6.25 Панель установки форматов 3D-графиков
Форматирование координатных осей
Опции форматирования координатных осей сосредоточены в полях панели Axes (Оси). Она показана на рис. 6.26.
Рис. 6.26 Панель Axes для 3D Plot Format
С помощью этой панели для каждой координатной оси устанавливаются следующие опции:
Grid Lines (Линии сетки) — вывод масштабных линий;
Numbered (Пронумеровать) — оцифровка линий;
Auto Grid (Автосетка) — автоматический выбор числа линий;
No. of Grids (Число интервалов) — прямое задание числа интервалов;
Min. Val (Мин.) — минимальное значение координаты;
Max. Val (Макс.) — максимальное значение координаты.
Поскольку эти опции достаточно очевидны, ограничимся лишь их упоминанием.
Форматирование цветов и линий
Панель Color&Lines (Цвета и линии), как показано на рис. 6.27, служит для установки цветовых параметров 3D-графики.
Она устанавливает следующие опции группы Shading (Раскраска):
Color (Цветная) — цветная раскраска;
None (Нет) — отсутствие раскраски;
Grayscale (Черно-белая) — раскраска точками с разной плотности.
Если используются возможности построения фигур с интерполяцией Interpolated Mesh (Сетка интерполяции), то панель Color&Lines позволяет установить число строк (No. of Rows) и столбцов (No. of Columns) для узловых точек фигуры.
Опция Hide Mesh (Невидимые линии) группы Fill Style (Стиль заполнения) позволяет включать или выключать алгоритм удаления невидимых линий каркаса изображения. Опция Path Plot (Площадки) этой группы задает особый вид графика — площадочный. Он показан на рис. 6.27.
Рис. 6.27 Панель Color&Lines для 3D Plot Format
Для демонстрации отличий в виде 3D графиков на рис 6 28 показан тот же график, что на рис 6 27, но при отключенной опции Path Plot Нетрудно заметить, насколько резко изменится вид графика
Рис. 6.28 Трехмерная поверхность при отключенной опции Path Plot
В графике на рис 6 28 применена функциональная закраска типа Gray Scale (оттенками серого цвета) Она целесообразна, если устройства вывода (например, матричные или лазерные принтеры) не способны дать изображение в цвете
Последняя группа опций — Contours (Уровни) — задает параметры построения контурных графиков Для графиков, имитирующих объемность поверхности, эта группа опций недоступна. Поэтому мы опишем их действие несколько позже, при рассмотрении контурных графиков.
Задание надписей над и под графиком поверхности
Панель.Title (Заголовок), как показано на рис. 6.29, позволяет расположить введенную в окно Title титульную надпись. Опции Above (Сверху) и Below ( Снизу) устанавливают местоположение надписи относительно рисунка, опция Show Title (Показать заголовок) позволяет показать или скрыть титульную надпись.
Рис. 6.29 Панель задания и вывода титульных надписей Title для 3D-графиков
Выведенные таким образом надписи органично присущи графику. Поэтому они не исчезают при перестройке графиков, что иногда случается с надписями, которые выполняются в виде текстовых блоков, наложенных на блоки графиков.
6-12. Форматирование контурных графиков
Контурные графики строятся линиями равного уровня. Такие линии получаются, если трехмерная фигура пересекается рядом параллельных плоскостей. Этот вид графики широко применяется в картографии. Полезен он и для оценки числа пиков и впадин сложных поверхностей; нередко при обычном построении графиков эти пики и впадины попросту не видны, поскольку заслоняются передним планом фигуры.
Построение таких графиков — достаточно трудоемкая задача. MathCAD же делает ее ничуть не более сложной, чем построение обычного графика трехмерной поверхности. Если контурный график построен, то позиция Graph подменю Format будет содержать операцию установки формата таких графиков — 3D Plot.
Эта операция выводит окно форматирования контурных графиков. Большинство опций в этом окне уже описывалось. Наиболее важными являются те из них, которые находятся в панели Color&Lines (см. рис. 6.30):
Contour Lines (Линии уровня) — показать контурные линии;
Numbered (Пронумеровать) — оцифровать контурные линии;
Auto Contour (Автолинии) — автоматически установить количество контурных линий;
No. Of Contours (Число линий) — установить заданное количество контур ных линий.
Рис. 6.30 Панель Color&lines окна форматирования контурных 3D-графиков
Интересным моментом форматирования контурных графиков является оцифровка линий уровня. Однако обычно она загромождает график. Последний на рис. 6.30 представлен без оцифровки, но с применением функциональной закраски.
Рис. 6.31 Построение графиков фрактальных поверхностей
Прекрасной иллюстрацией применения контурных графиков является построение фрактальных поверхностей. Эту возможность иллюстрирует рис. 6.31, на котором приведены графики двух таких поверхностей.
Еще две фрактальные поверхности показаны на рис. 6.32. Этот рисунок является просто продолжением рис. 6.31. Нетрудно заметить, что комбинация двух целых ранжированных чисел (меняющихся от О до 10) и третьего числа (заданного константой) позволяет строить весьма необычные рисунки.
Рис. 6.32 Продолжение документа, показанного на рис. 6.31
Фракталы — это как раз тот пример, когда полезна именно контурная графика. Вы можете построить графики (см. рис. 6.31) в виде графиков трехмерных поверхностей. Хотя они тоже выглядят необычно, но не имеют того эстетического вида, который характерен для фракталов в виде графиков с линиями равного уровня.
6.13. Форматирование графика типа 3D Data Points
График типа 3D Data Points — разновидность ЗD-rpaфикa. Этот тип графика представляет расположение точек в пространстве, заданное матрицей М. При этом точки могут быть заданы различными фигурами, например кружками или прямоугольниками, прямыми и наклонными крестиками и т. д.
Окно форматирования таких графиков подобно уже описанному для обычных ЗD-гpaфикoв. На рис. 6.33 оно представлено с открытой панелью выбора цветов и линий.
Результат форматирования — график типа 3D Data Points — представлен слева от окна форматирования. Графики такого типа редко бывают наглядными Их надо применять лишь по прямому назначению — для отображения облака точек (или иных фигурок) в пространстве.
Рис. 6.33 Форматирование графика типа 3D Color&Lines
6.14. Форматирование графиков типа 3D Ваг
Еще один вид графиков трехмерной поверхности — 3D Bar Chart — задается столбиками, высота которых определяется координатой функции z(x, у). Окно форматирования в данном случае практически такое же, как и для других видов трехмерной графики. На рис. 6.34 оно показано при открытой панели Color&Line с заданием функциональной окраски столбиков графика.
Рис. 6.34 Форматирование графика 3D Bar Chart
Графики этого типа довольно специфичны. Однако их удобно использовать для построения гистограмм, представляющих данные матриц.
На рис. 6.35 представлены три типа гистограмм: Matrix, Stacked и Side By Side. Установка типа гистограмм производится в панели Color&Lines окна форматирования графика типа 3D Bar Chart.
Рис. 6.35 Три основных типа гистограмм (график 3D Bar Chart)
Графики в виде гистограмм, показанные на рис. 6.35, широко применяются для отображения данных экономических, статистических и финансовых расчетов.
6.15. Примеры на применение графиков различного вида
Богатые возможности графики системы MathCAD позволяют выполнять детальный анализ сложных трехмерных поверхностей путем построения различного типа графиков одной и той же поверхности. Во многих случаях благодаря этому можно выяснить с помощью второго графика особенности, мало заметные или вообще исчезающие при построении первого графика (см. рис. 6.36).
На рис. 6.37 показано два графика, которые были приведены на рис. 6.31. Здесь они переформатированы под столбиковые диаграммы (при этом матрица А на левом графике взята со знаком минус).
Хотя эти графики выглядят не столь занимательно, как исходные (рис. 6.31), но они позволяют понять, как образуются фрактальные кривые. Позже мы еще не раз будем пользоваться мощными средствами графической визуализации результатов математических вычислений, представляемыми MathCAD.
Графики трехмерных поверхностей, а также импортируемые рисунки могут перемещаться в любом направлении в нужное место окна текущего документа. Можно также плавно менять их размеры. Все эти действия осуществляются точно так же, как в случае с 2D-гpaфикaми.
С каждой версией MathCAD графические возможности системы улучшались и в версии 7.0 PRO достигли высокой степени совершенства. Это позволило создавать математические графики практически всех типов Особенно удачно решено построение трехмерных графиков которое можно осуществ лять с удалением и без удаления невидимых линий каркаса с монохромной и цветной функциональной закраской с различными углами поворота и т д
Рис. 6.36 Два графика одной поверхности
Рис. 6.37 Графики, показанные на рис б 31, но представленные теперь в виде столбиковых диаграмм
6.16. Форматирование цвета (Color)
Для изменения цветов существует позиция Color (Форматирование цветов) подменю Format Она выводит подменю со следующими командами Background... (Фон) — выбрать цвет фона окна
Highlight... (Подсвеченное выражение) — выбрать цвет выделения выражений;
Annotation Color... (Аннотации) — выбрать цвет аннотаций.
Любая из этих команд выводит стандартное диалоговое окно, показанное на рис. 6.38. Каждое окно обладает титульной строкой с названием соответствующей команды.
Рис. 6.38 Диалоговое окно задания цветов
Помимо указанных опций есть еще две, которые возможны только в том случае, если видеосистема компьютера может дать 256 цветов и выше:
Use Default Pallette — задание исходной цветовой палитры;
Optimize Pallette — оптимизация цветовой палитры для BitMap-рисунков.
С помощью указанных средств графическая оболочка системы MathCAD может быть подстроена под вкус любого пользователя. Подменю Color открывает доступ к командам цветового оформления документов, позволяющим придать им наглядный и эстетически приятный вид, удовлетворяющий самым изысканным запросам. Однако если предполагается печать документов монохромным принтером или их просмотр на монохромном дисплее, то к цветовым выделениям надо относиться внимательно.
6.17. Разделение областей (Separate Regions)
Области различных объектов в документах могут налагагься друг на друга. Это не только нарушает эстетический вид документов, но и приводит в ряде случаев к возникновению ошибочных ситуаций из-за невыполнения требуемой последовательности просмотра блоков.
Перемещение блоков в сложном и плотно заполненном блоками документе вручную — процесс весьма трудоемкий, к тому же делать это очень неудобно. Лучше воспользоваться операцией Separate Regions (Разделить области), обеспечивающей автоматическое разделение перекрывающихся областей. Эту операцию можно вводить также нажатием клавиш Ctrl+S.
К сожалению, данная операция не всегда приводит к успеху. Проиллюстрируем это следующим примером. На рис. 6.39 показана попытка построить график функции f(x). Она оказалась неудачной, поскольку шаблон графика налез на шаблон функции.
Можно было бы ожидать, что при выполнении операции Separate Region этот конфликт будет улажен. Но увы, как видно из рис. 6.40, попытка разделения областей хотя и удалась (области разделились!), но область задания функции была перемещена под область с шаблоном графика. В результате
Рис. 6.39 Попытка построить график функции
график остался непостроенным и буква f в названии функции оказалась выделенной красным цветом ошибки.
Рис. 6.40 Разделение областей не позволило построить график функции
В подобных случаях целесообразна все же ручная коррекция положения областей в документе. Рис. 6.41 показывает, что в этом случае проблем с построением графика нет.
Вообще надо отметить, что эта операция (увы!) в новой версии работает неустойчиво. Отмечались случаи, когда при большом числе перекрывающихся областей она отказывалась выполнить их разделение. Возможно, фирма MathSoft устранит этот недостаток при доводке версии MathCAD 7.0 PRO. Вообще же говоря, при подготовке документов надо заранее побеспокоиться о правильном расположении блоков в них.
Рис. 6.41 Пример построения графика функции после ручной коррекции положения областей
6.18. Выравнивание областей (Align)
Операция Align Region служит для организации специального выравнивания областей различных блоков. Она выводит подменю с двумя позициями:
Across (Вдоль) — выровнять выделенные области вдоль горизонтальной
линии, расположенной посередине между верхними краями высшей и низшей из выделенных областей;
Down (Вниз) — выровнять выделенные области вдоль вертикальной линии, расположенной посередине между левыми краями самой правой и самой левой из выделенных областей. Эти операции применяются как элемент комбинированного форматирования документов. Подлежащие перемещению блоки должны быть предварительно выделены. На рис. 6.42 показано произвольное расположение трех блоков документа и их выделение с помощью мыши (напоминаем, что оно выполняется перемещением мыши при нажатой левой клавише).
Если нужно расположить блоки строго друг под другом, то в данном случае надо использовать операцию Align Down. Результат выполнения этой операции представлен на рис. 6.43: все блоки расположены друг под другом и выровнены по левому краю.
Рассматриваемые операции следует применять осторожно, поскольку иногда блоки могут перекрываться. Так, в данном примере применение операции Align Across приведет к наложению блоков. Вообще говоря, полезно при подготовке документов сразу избегать наложения блоков друг на друга.
6.19. Создание закрытых областей в документе (Lock Regions)
В ряде случаев в документе желательно создать некоторые закрытые (т. е. недоступные для редактирования посторонними лицами) области. Это может
Рис. 6.42 Пример документа с произвольно расположенными блоками
Рис. 6.43 Пример выравнивания блоков по вертикали
потребоваться, например, в обучающих программах, где в такие области можно помещать примеры, запрещенные к применению учащимися.
Операция Lock Regions (Закрытые области) позволяет реализовать эту возможность. Она выводит подменю со следующими операциями по созданию и управлению такими областями:
Set Lock Area... (Область) — определить защищаемую область рабочего документа;
Lock Area... (Закрыть) — включить защиту области;
Unlock Area... (Открыть) — редактировать защищаемую область.
Первая из этих операций устанавливает на экран дисплея две горизонтальные черты — ограничители закрытой области с пиктограммой открытого замка в их начале (см рис 644) Пространство между ними и есть будущая закрытая область
Рис. 6.44 Установка ограничителей закрытой области
Oграничители закрытой области можно, как и любые объекты, выделять и перемещать вверх или вниз по документу Таким образом можно регулировать высоту закрываемой области После установки ограничителей закрываемой области надо поместить в нее те объекты, доступ к которым закрывается После этого надо исполнить операцию Lock Arrea..., которая вызывает появление окна с предложением о вводе пароля (см рис 6 45)
Рис. 6.45 Окно с предложением о вводе пароля
Если не ввести пароль, то область будет закрыта навсегда Ввод пароля (рис 6 46) означает, что в дальнейшем область можно будет сделать откры той Обычно стоит предусмотреть такую возможность
Рис. 6.46 Ввод пароля закрываемой области
Учтите, что при вводе пароля вместо символов нажимаемых клавиш в поле ввода (посередине окна) выводятся звездочки Это сделано для того, чтобы никто не мог посмотреть сзади, какой вы ввели пароль Пароль надо вводить такой, чтобы его можно было запомнить (неплохо записать его в свою записную книжку)
После ввода пароля выделенная область закрывается, а пользователь лишается возможности ее модернизации (см рис 6 47)
Рис. 6.47 Документ с закрытой областью
Как видно из рис 6 47, после изображения замков выводятся данные о времени создания закрытой области Если теперь попытаться модифицировать введенное в нее математическое выражение или перетащить его на другое место, то из этого просто ничего не выйдет
Операция Unlock Area позволяет в случае необходимости открыть Закрытую область и выводит уже описанное окно ввода пароля Если в нем вве сти ранее заданный пароль, то замки в ограничителях закрытой области откроются и она станет открытой Выделив ограничители, их можно убрать (например, нажатием клавиши F3 или с помощью операции Delete в подменю позиции Edit главного меню) Ограничители задаются сразу парой и стираются одновременно
6.20. Форматирование колонтитулов (Headers/Footers)
При печати документов нередко требуется внести в заголовок (Header) или нижнюю строку (Footer) каждой страницы некоторую служебную информацию либо надпись, например имя файла, номер с границы, дату создания и др Такие надписи называют колонтитулами (верхними или нижними)
Эта возможность реализуется командой Headers/Footer (Колонтитулы) в позиции Edit главного меню, выводящей диалоговое окно, показанное на рис 6 48
Рис. 6.48 Диалоговое окно обрамления документов
В основном окне можно установить, какой колонтитул создается верхний, Headers, или нижний, Footers (в нужной позиции устанавливается жир ная точка) Опция Enable (Включить), будучи введенной (знак х), обеспечи вает печать колонтитулов, в противном случае колонтитулы не печатаются
Это окно содержит три окна ввода надписей Left (Слева), Center (По центру) и Right (Справа) Соответственно и введенные надписи будут печататься в выбранном колонтитуле с выравниванием по левому краю, по центру или по правому краю.
Имеется ряд кнопок для автоматического занесения в колонтитулы следующих данных:
Filename (Файл) — имя файла;
Page # (Стр №) — номер страницы;
Date (Дата) — текущая дата;
Time (Время) — текущее время.
Эти данные заносятся по месту расположения курсора после нажатия соответствующей кнопки внизу основного окна. Клавиша Fonts (Шрифты) дает возможность выбора подходящего шрифта для текстов колонтитулов.
Кроме тот о, клавиша Fonts выводит стандартное окно выбора шрифта, которым набираются упомянутые выше надписи. Они появляются только на распечатках документов (рис. 6.49), но не в видимом окне редактирования.
Рис. 6.49 Документ с колонтитулами, выведенный в режиме просмотра
Четыре кнопки внизу окна Fonts служат для вставки в панель окна ввода колонтитулов следующих данных:
Filename — имя файла;
Page # — номер страницы;
Date — дата;
Time текущее время.
Указанные выше данные вставляются в колонтитулы в символической форме, но отображаются при просмотре и печати страницы в явном виде.
Глава 7 Управление вычислительными процессами
7.1. Вычисление в пределах экрана (Calculate)
По умолчанию MathCAD работает в режиме автоматических вычислений. Однако иногда бывает удобнее работать в ручном режиме, например, если вычисления объектов при их изменении выполняются заново и долго. Ручной режим вводится операцией Calculate (Вычисления) из главного меню. Для ее выполнения надо нажать кнопку со знаком = в панели инструментов или клавишу F9. Разумеется, режим автоматических вычислений при этом должен быть отключен.
Из рис. 7.1, иллюстрирующего работу MathCAD в режиме ручных вычислений видно, что вычислений не происходит. В частности, выражение х= не выводит, как в автоматическом режиме, вектор значений х,а в шаблоне графика нет собственно графика.
Рис. 7.1 Документ в режиме ручных вычислений до ввода операции Calculate
Чтобы начались вычисления, надо выполнить операцию Calculate любым из описанных выше способов. Вид документа после ввода этой операции показан на рис. 7.2. Нетрудно заметить, что теперь выведен вектор значений х и построен график функции.
Если, однако, пролистать документ дальше и перейти к ниже расположенному экрану, то можно обнаружить, что блоки в нем не выполнялись. Это иллюстрирует рис. 7.3, в котором виден неисполненный блок построения функции tan(x).
Итак, операция Calculate исполняет только те блока, которые видны на текущем экране. Для исполнения последующих блоков надо вновь исполнять операцию Calculate. Другой способ исполнения последующих блоков описан ниже.
Рис. 7.2 Документ в режиме ручных вычислении после ввода операции Calculate
Рис. 7.3 Демонстрация неполного исполнения документа при вводе операции Calculate
Кстати говоря, график на рис 7 3 не отличается высокой представитель ностью" Это связано с тем, что задано слишком малое число точек Так что этот график наглядно показывает, что малое число точек может сильно иска зить графическую визуализацию функции В нашем случае это не важно, надо было лишь проиллюстрировать исполнение блоков
7.2. Исполнение всего документа (Calculate Worksheet)
Если после подготовки документа с невычисленными блоками нужно исполнить весь документ от начала до конца, то следует использовать операцию Calculate Worksheet (Вычисление документа) На рис 7 4 показана та же часть документа, что и на рис 7 3, но после выполнения этой операции Нетрудно заметить, что теперь оба графика на ДВУХ экранах оказались построенными
Рис. 7.4 Вид части документа после исполнения операции Calculate Worksheet
Разумеется, такой же вид имел бы приведенный фрагмент документа при повторном исполнении команды Calculate
7.3. Вычисления в автоматическом режиме (Automatic Calculation)
Операция Automatic Calculation (Автоматические вычисления) в подменю Math обеспечивает переключение между ручным и автоматическим режимами вычислений Если против названия этой операции мышью установить "птичку", то будет работать автоматический режим вычислений, в противном случае, когда "птички" нет, — ручной.
Как правило, автоматический режим вычислений намного удобнее ручного, поэтому он установлен по умолчанию
7.4. Оптимизация вычислений (Optimization)
Oптимизация вычислений достигается заменой сложной функции или мате матического выражения их аналитическим представлением (если оно, конечно, есть) Для иллюстрации техники оптимизации рассмотрим рис 7 5
Рис. 7.5 Пример на оптимизацию вычислений
На рисунке вначале показано вычисление тройного интеграла обычным способом. Поскольку вычисления производятся численным методом, то они достаточно трудоемки и задержка выдачи результата заметна даже на скоростных ПК с процессором Pentium.
Во втором случае использовалась техника оптимизации. Выражение для интеграла, оформленное как функция 1(n), было выделено, а затем исполнена операция Optimize (Оптимизация), после чего скорость вычислений увеличилась в несколько раз
Признаком оптимизации выражения является появление после него красной звездочки — знака *. Кроме того, установив в оптимизированное выражение курсор мыши и щелкнув ее левой клавишей, можно наблюдать появление окна с оптимизированным выражением; на рис. 7.5 это окно также показано. Нетрудно заметить, что в нашем примере довольно сложный интеграл оказался замененным достаточно простым аналитическим выражением
Разумеется, вычисление по такому выражению намного проще, чем по полному интегралу. Особенно большой выигрыш оптимизация может дать при многократном вычислении сложных функций, содержащих интегралы, производные, суммы, произведения и ряды. Бывают, впрочем, случаи, когда исходное выражение превращается в не менее сложное оптимизированное выражение. Тогда оптимизация оказывается бесполезной Оптимизацию можно задать в тексте документа специальными словами — директивами, но эта возможность будет рассмотрена позже
7.5. Установка опций (Options...)
В позиции Options... (Опции) сосредоточены различные опции вычислительных процессов Если активизировать эту позицию, то на экран будет выведено окно с панельным переключателем, показанным на рис 7.6
Рис. 7.6 Диалоговое окно установки опций
Это окно имеет следующие панели:
Built-in Variables... — установить значения встроенных (Встроенные переменные) (системных) переменных, Units System (Единицы — вывести подменю с позициями, Dimension (Размерность) — установить размерность величин.
Рассмотрим назначение опций в каждой из этих панелей
Установка значений системных переменных (Built-in Variables...)
В системе MathCAD имеется несколько так называемых системных переменных. У них есть свои имена и значения, присваиваемые системой по умолчанию. Действие системных переменных глобальное, т е. они доступны в любом месте программы и их значения можно изменить также в любом месте программы.
Операция Built-in Variables... (Встроенные переменные) служит для установки значений системных переменных:
TOL [0.001] — погрешность численных расчетов;
ORIGIN [0] — нижняя граница значения индекса индексации векторов и матриц;
PRNPRECISION [4] - число столбцов для WRITEPRN, PRNCOLWIDTH [8] — число десятичных знаков, используемых для записи числовых данных в WRITEPRN
При применении этой операции появляется окошко со списком указанных переменных (в квадратных скобках указаны их заданные значения) — см. рис. 7.6
Можно откорректировать значения системных переменных. К назначению двух последних переменных мы вернемся позднее, при описании оператора записи данных на диск WRITEPRN Значения переменных можно вывести, указав после их имени знак =
Опции установки системы единиц
System Utits выводит диалоговое окно для выбора систем единиц для размерных величин, показанное на рис. 7 7.
В этом окне можно выбрать одну из следующих систем единиц для размерных величин. SI, MKS, CGS, US и None (не используется ни одна из этих систем).
Рис. 7.7 Диалоговое окно изменения системы единиц размерных величин
Форматирование размерных величин (Dimensions)
Для изменения формата размерных величин служит панель Dimensions (Размерности) Она выводит диалоговое окно, показанное на рис 7 8
Рис. 7.8 Изменение формата размерных величин
Эта панель выводит перечень размерностей, который можно при необходимости редактировать Для этого надо установить "птичку" в прямоугольнике опции Display Dimensions (Просмотр размерностей)
Глава 8 Работа с символьным процессором
8.1. Возможности символьного процессора (Symbolic)
Системы компьютерной алгебры снабжаются специальным процессором для выполнения аналитических (символьных) вычислений. Его основой является ядро, хранящее всю совокупность формул и формульных преобразований, с помощью которых производятся аналитические вычисления. Чем больше этих формул в ядре, тем надежней работа символьного процессора и тем вероятнее, что поставленная задача будет решена, разумеется, если такое решение существует в принципе (что бывает далеко не всегда).
Ядро символьного процессора системы MathCAD — несколько упрощенный вариант ядра известной системы символьной математики Maple V фирмы Waterloo Maple Software [12, 18], у которой MathSoft (разработчик MathCAD) приобрела лицензию на его применение, благодаря чему MathCAD стала (начиная с версии 3.0) системой символьной математики.
Прямой доступ к большинству операций ядра (возможный в системе Maple V R3/R4), для пользователя MathCAD, к сожалению, закрыт. К примеру, библиотечный модуль Maple V содержит около 100 функций линейной алгебры, тогда как в модуле MathCAD 3.0 есть только три важнейшие функции из этого раздела. Многие функции и правила преобразования в ядре используются лишь для получения промежуточных преобразований.
Тем не менее это обстоятельство нельзя считать уж слишком большим недостатком системы MathCAD. Во-первых, потому, что ее назначение иное — прежде всего решение задач в численном виде, а во-вторых, потому, что система Maple V явно избыточна (в ее ядре около 2800 функций и правил преобразования) и ориентирована на пользователей с весьма далекими от средних потребностями в решении задач компьютерной алгебры (символьной математики) [12].
Введение в систему MathCAD символьных вычислений придает ей качественно новые возможности, которые отсутствовали у прежних версий системы [5—7]. Теоретические сведения об алгоритмах компьютерной алгебры можно найти в книге [19]. Куда важней, что символьные вычисления выполняются в конечном счете столь же просто (для пользователя), как, скажем, вычисление квадрата х.
Операции, относящиеся к работе символьного процессора, содержатся в подменю позиции Symbolic (Символика) главного меню (см. рис. 8.1).
Чтобы символьные операции выполнялись, процессору необходимо указать, над каким выражением эти операции должны производиться, т е надо выделить выражение (правила выделения неоднократно описывались выше) Для ряда операций следует не только указать выражение, к которому они относятся, но и наметить переменную, относительно которой выполняется та или иная символьная операция. Само выражение в таком случае не выделяется. ведь и так ясно, что если маркер ввода выделяет переменную какого-либо выражения, то это выражение уже отмечено наличием в нем выделяемой переменной
Рис. 8.1 Вид экрана системы с подменю позиции Symbolic главного меню
Символьные операции разбиты на пять характерных разделов Первыми идут наиболее часто используемые операции Они могут выполняться с выра жениями, содержащими комплексные числа или имеющими решения в комплексном виде
Операции с выделенными выражениями
К операциям с выделенными выражениями относятся следующие Evaluate (Вычислить) — преобразовать выражение с выбором вида преоб разований из подменю,
Simplify (Упростить) — упростить выделенное выражение с выполнением таких операций, как сокращение подобных слагае мых, приведение к общему знаменателю, использова ние основных тригонометрических тождеств и т д, Expand (Разложить — раскрыть выражение [например, для по степеням) (Х+ Y) (Х- Y) получаем X2- Y2}, Factor (Разложить — разложить число или выражение на множи-на множители) тели [например X2-Y2 даст (X+Y) (X-Y)], Collect (Разложить — собрать слагаемые, подобные выделенному по подвыражению) выражению, которое может быть отдельной переменной или функцией со своим аргументом (ре зультатом будет выражение, полиномиальное от носительно выбранного выражения),
Polynomial Coefficients — найти коэффициенты полинома по заданной
(Полиномиальные переменной, приближающего выражение,
коэффициенты) в котором эта переменная использована
Операции с выделенными переменными
К числу операций с выделенными переменными относятся
Solve (Решить — найти значения выделенной переменной,
относительно переменной) при которых содержащее ее выражение становится равным нулю (решить уравнение или неравенство относительно выделенной переменной);
Substitute (Заменить — заменить указанную переменную содержи-
переменную) мым буфера обмена;
Differentiate — дифференцировать все выражение, содержа-(Дифференцировать щее выделенную переменную, по отношению по переменной) к этой переменной (остальные переменные рассматриваются как константы);
Integrate (Интегрировать — интегрировать все выражение, содержащее
по переменной) выделенную переменную, по этой переменной;
Expand to Series... — найти несколько членов разложения выра-(Разложить в ряд) жения в ряд Тейлора относительно выделен ной переменной;
Convert to Partial Fraction — разложить на элементарные дроби выраже-(Разложить на элементарные ние, которое рассматривается как рацио-дроби) нальная дробь относительно выделенной пе ременной.
Операции с выделенными матрицами
Операции с выделенными матрицами представлены позицией подменю Matrix (Матричные операции), которая имеет свое подменю со следующими операциями:
Transpose (Транспонировать) — получить транспонированную матрицу;
Invert (Обратить) — создать обратную матрицу;
Determinant (Определитель) — вычислить детерминант (определитель) матрицы.
Операции преобразования
В MathCAD 7.0 PRO в позиции Symbol содержится раздел операций преобразования, создающий подменю со следующими возможностями:
Fourier Transform — выполнить прямое преобразование Фурье
(Преобразование Фурье) относительно выделенной переменной;
Inverse Fourier Transform — выполнить обратное преобразование
(Обратное преобразование Фурье относительно выделенной
Фурье) переменной;
Laplace Transform — выполнить прямое преобразование (Преобразование Лапласа) Лапласа относительно выделенной пере менной (результат — функция от пере менной s);
Inverse Laplace Transform — выполнить обратное преобразование (Обратное преобразование Лапласа относительно выделенной Лапласа) переменной (результат — функция от переменной t);
Z Transform (Z-преобразование) — выполнить прямое Z-преобразование вы ражения относительно выделенной пере менной (результат — функция от пере менной z);
Inverse Z Transform — выполнить обратное Z-преобразование (Обратное Z-преобразование) относительно выделенной переменной (результат — функция от переменной n)
Стиль эволюции
К стилю эволюции относится одна операция-
Evaluation Style... — задать вывод результата символьной операции под
(Стиль эволюции) основным выражением, рядом с ним или вместо него
В последующих разделах этой главы каждая из упомянутых выше операций будет рассмотрена более подробно с необходимыми примерами.
8.2. Выделение объектов символьных операций
Для проведения символьных операций нужно прежде всего выделить объект, над которым эти операции будут выполняться. Если объект отсутствует, доступа к соответствующим операциям в позиции Symbolic главного меню нет, а сами операции выделены затененным шрифтом. Объектом операции может быть самостоятельное математическое выражение, часть такого выражения или заданной пользователем функции, результат предшествующей операции и т д.
Напомним, что есть два вида выделения: пунктирными линиями и сплошными. Чтобы отметить объект пунктирной линией, достаточно установить на него курсор-крестик, нажать клавишу Ctrl или Shift и воспользоваться правой клавишей мыши.
Можно установить курсор около выбранного объекта и, нажав правую клавишу мыши, перемещать ее по столу При этом появляется пунктирный прямоугольник, который перемещением мыши можно расширять в различных направлениях. Как только этот прямоугольник захватывает один или несколько объектов, они оказываются также выделенными — обведенными пунктирной линией, отмечающей область, занимаемую объектом в окне.
Выделение пунктирной линией используется для перемещения объектов по окну. Для этого достаточно внутрь отмеченного объекта (выражения) поместить курсор мыши, нажать правую клавишу и, удерживая ее нажатой, перемещать мышь. При этом объект (или сразу несколько объектов) будет перемещаться по экрану и его можно оставить (отпустив клавишу мыши) на новом месте Напоминаем, что нажатие клавиши F3 ведет к переносу выражений в буфер обмена и стиранию их в окне. Нажатие клавиши F4 переносит выражения из буфера обмена на место, указанное курсором. Курсор можно перемещать как мышью, так и обычными клавишами управления им.
Для выполнения операций с символьным процессором нужно выделить объект (целое выражение или его часть) сплошными линиями, синими на экране цветного дисплея. Для выделения некоторой переменной в объекте нужно подвести к ее концу курсор мыши и нажать левую клавишу. Переменная будет отмечена жирной чертой (синей на экране цветного дисплея), расположенной сразу после переменной Перемещая курсор по полю объекта и нажимая левую клавишу повторно, можно выделить отдельные части выражения или выражение целиком.
Часть символьных операций производится указанием на объект как на выражение или его часть. Например, расширение или упрощение выражений требуют такого указания на объект Другие операции, такие, как вычисление производной или интеграла, требуют указания переменной, относительно которой производится операция, допустим, дифференцирования или интегрирования.
Если заданная операция невыполнима, система выводит в дополнительном окне сообщение об ошибке или просто повторяет выделенное выражение. Последнее означает, что операция задана корректно, но результат не может быть получен, например, если делается попытка разложить на множители объект, уже разложенный или не содержащий такого разложения в принципе.
При выполнении символьных операций иногда приходится сталкиваться с неприятной и трудной проблемой — "разбуханием" результатов, как промежуточных, так и конечных. Решения, которые хорошо известны профессиональному математику (и даже студенту), система обычно выдает с блеском — в виде, который описан в справочнике или учебнике. Примером может служить решение квадратного уравнения или вычисление простого неопределенного интеграла
Но даже незначительное усложнение задачи порою может породить очень сложное и громоздкое решение. Пример тому — решение кубического уравнения. В этом случае решение (по запросу системы) можно поместить в буфер обмена и использовать его для оценки пользователем (но не для дальнейших преобразований системой в автоматическом режиме).
Система MathCAD содержит пять типов символьных операций, выполняемых над объектами — выделенными математическими выражениями. При этом под математическим выражением подразумевается как полная математическая формула, так и функционально полная часть какой-либо формулы. Ниже представлено описание символьных операций над выражениями
8.3. Выполнение символьных вычислений (Evaluate Symbolically)
Символьная операция Evaluate Symbolically [Shift+F9] (Вычислить) обеспечивает работу с математическими выражениями, содержащими встроенные в систему функции и представленными в различном виде: полиномиальном, дробно-рациональном, в виде сумм и произведений, производных и интегралов и т. д. Операция стремится произвести все возможные численные вычисления и представить выражение в наиболее простом виде. Она возможна над матрицами с символьными элементами. Производные и определенные интегралы, символьные значения которых вычисляются, должны быть представлены в своей естественной форме.
Особо следует отметить возможность выполнения численных вычислений с повышенной точностью — 20 знаков после запятой. Для перехода в такой режим вычислений нужно числовые константы в вычисляемых объектах задавать с обязательным указанием десятичной точки, например 10.0 или 3.0, а не 10 или 3. Этот признак является указанием на проведение вычислений такого типа.
На рис. 8.2 показаны типовые примеры действия операции Evaluate Symbolically.
Здесь слева показаны исходные выражения, подвергаемые символьным преобразованиям, а справа — результат этих преобразований. Так представлены и другие примеры, приведенные в этой главе.
Рис. 8.2 Действие операции Evaluate Symbolically
Операция Evaluate Symbolically одна из самых мощных. Как видно на рис. 8.2, она позволяет в символьном виде вычислять суммы (и произведения) рядов, производные и неопределенные интегралы, выполнять символьные и численные операции с матрицами.
Эта операция содержит подменю со следующими командами:
Evaluate Symbolically [Shift+F9] — выполнить символьное вычисление (Вычислить в символах) выражения;
Floating Point Evaluation... — выполнить арифметические (С плавающей точкой) операции в выражении с результатом в форме числа с плавающей точкой;
Complex Evaluation — выполнить преобразование с пред-(В комплексном виде) ставлением в комплексном виде.
Команда Evaluate Symbolically тут наиболее важная. Назначение других команд очевидно: они нужны, если результат требуется получить в форме комплексного или действительного числа. К примеру, если вы хотите вместо числа л получить 3.141..., используйте команду Floating Point Evaluation. В режиме символьных вычислений результат может превосходить машинную бесконечность системы — см. пример на вычисление ехр( 1000.0) на рис. 7.2. При этом число точных значащих цифр результата практически не ограничено (или, точнее говоря, зависит от емкости ОЗУ).
8.4. Упрощение выражений (Simplify)
Символьная операция Simplify (Упростить) — одна из самых важных. Эта операция позволяет упрощать математические выражения, содержащие алгебраические и тригонометрические функции, а также выражения со степенными многочленами (полиномами).
Упрощение означает замену более сложных фрагментов выражений на более простые. Приоритет тут отдается простоте функций. К примеру, функция tan(x) считается более сложной, чем функции sin(x) и cos(.x). Поэтому tan(x) упрощается так, что получает представление через соотношение этих функций, что несколько неожиданно, так как в некоторых пакетах символьной математики, например Derive, ситуация иная: они заменяют отношение sin(x)/cos(x) функцией tan(x).
Эта команда открывает широкие возможности для упрощения сложных и плохо упорядоченных алгебраических выражений. На рис. 8.3 даны примеры применения операции Simplify.
Рис. 8.3 Действие операции Simplify
Два последних примера на приведенном рисунке показывают, как с помощью операции Simplify можно выполнять символьные вычисления производных и определенных интегралов. Результатом вычислений могут быть специальные математические функции (см. последний пример, в котором символьное значение интеграла дает результат, выраженный через интегральный синус). Вполне возможно вычисление производных высшего порядка. На рис. 8.4 показано последовательное применение операции Simplify для вычисления производных алгебраического выражения, от первой до пятой включительно.
Система MathCAD содержит встроенную функцию для вычисления значений определенных интегралов приближенным численным методом. Ею целесообразно пользоваться, когда нужно просто получить значение определенного интеграла в виде числа. Однако команда Simplify применительно к вычислениям определенных интегралов делает гораздо больше — она ищет аналитическое выражение для интеграла. Более того, она способна делать это и при вычислении кратных интегралов, пределы которых — функции. Наглядный пример этому дает рис. 8.5.
На рис. 8.6 показано применение операции Simplify для вычисления сумм и произведений символьных последовательностей. Результат операции, как и следовало ожидать, получается в символьной форме (если она существует).
Приведенные примеры могут создать впечатление, что MathCAD лихо справляется со всеми производными, интегралами, суммами и произведения-
Рис. 8.4 Вычисление производных алгебраического выражения с порядком от 1 до 5
Рис. 8.5 Вычисление двойных и тройных определенных интегралов
ми с помощью операции Simplify. К сожалению, это далеко не так. Нередко система не справляется с кажущимися простыми справочными примерами. Надо помнить, что символьный процессор системы MathCAD обладает заметно урезанной библиотекой функций и преобразований (в сравнении с библиотекой системы Maple V). Поэтому часто система не находит решение в замкнутом виде, хотя оно и приводится в справочнике. Тогда система повторяет введенное выражение или сообщает об ошибке.
Следует также отметить, что при выполнении командами меню Symbol символьных вычислений выражения необходимо указывать явно. Например, недопустимо вводить некоторую функцию пользователя F(x) и пытаться найти ее производные или интеграл. Это существенное ограничение, и котором надо всегда помнить. Однако оно преодолимо при выполнении вычислений с помощью функций системы SmartMath, которая описывается в дальнейшем;
Рис. 8.6 Вычисление сумм и произведений символьных последовательностей
главное в том, что для вывода символьных вычислений в этом случае используется оператор —>.
В результате преобразований могут появляться специальные функции — как встроенные в систему (функции Бесселя, гамма-функция, интеграл вероятности и др.), так и ряд функций, дополнительно определенных при загрузке символьного процессора (интегральные синус и косинус, интегралы Френеля, эллиптические интегралы и др.) Последние нельзя использовать при создании математических выражений.
8.5. Расширение выражений (Expand)
Действие операции Expand (Разложить по степеням) в известном смысле противоположно действию операции Simplify. Подвергаемое преобразованию выражение расширяется с использованием известных (и введенных в символьное ядро) соотношений, например алгебраических разложений многочленов, произведений углов и т. д Разумеется, расширение происходит только в том случае, когда его результат однозначно возможен Иначе нельзя считать, что действие этой операции противоположно действию операции Simplify. К примеру, операция Simplify преобразует сумму квадратов синуса и косинуса в 1, тогда как обратное преобразование многозначно и потому в общем виде невыполнимо
При преобразовании выражений операция Expand Expression старается более простые функции представить через более сложные, свести алгебраические выражения, представленные в сжатом виде, к выражениям в развернутом виде и т д Примеры действия операции Expand Expression даны на рис. 8 7
Последний пример на этом рисунке показывает, что результатом операции может быть специальная математическая функция, которая считаегся более сложным выражением, чем порождающее ее выражение С виду, однако, выражения со специальными математическими функциями обычно выглядят гораздо проще, чем исходные выражения
Рис. 8.7 Действие операции Expand Expression
8.6. Разложение выражений (Factor)
Операция Factor Expression (Разложить на множители) используется для факторизации — разложения выражений или чисел на простые множители Она способствует выявлению математической сущности выражений, к примеру, наглядно выявляет представление полинома через его действительные корни, а в том случае, когда разложение части полинома содержит комплекс-
Рис. 8.8 Действие операции Factor Expression
но-сопряженные корни, порождающее их выражение представляется квадратичным трехчленом. Примеры действия этой операции даны на рис. 8.8.
В большинстве случаев (но не всегда) операция факторизации ведет к упрощению выражений. Термин факторизация не является общепризнанным в отечественной математической литературе, но мы его оставляем в связи с созвучностью с англоязычным именем этой операции.
8.7. Комплектование по выражениям (Collect)
Операция Collect (Разложить по подвыражению) обеспечивает замену указанного выражения выражением, скомплектованным по базису указанной переменной, если такое представление возможно. В противном случае появляется окно с сообщением о невозможности комплектования по указанному базису. Эта команда особенно удобна, когда заданное выражение есть функция ряда переменных и нужно представить его в виде функции заданной переменной, имеющей вид степенного многочлена. При этом другие переменные входят в сомножители указанной переменной, представленной в порядке уменьшения ее степени. На рис. 8.9 показаны примеры действия этой операции.
Рис. 8.9 Действие операции Collect
В том случае, когда комплектование по базису указанной переменной невозможно, система выдает сообщение об этом. Оно выводится в отдельном небольшом информационном окошке.
8.8. Вычисление коэффициентов полиномов (Polynomial Coefficients)
Операция Polynomial Coefficients (Полиномиальные коэффициенты), в ранних версиях MathCAD отсутствующая, служит для вычисления коэффициентов полинома. Операция применяется, если заданное выражение — полином
Рис. 8.10 Примеры применения операции Polynomial Coefficients
(степенной многочлен) или может быть представлено таковым относительно выделенной переменной На рис 810 показаны примеры применения этой операции
Результатом операции является вектор с коэффициентами полинома Операция полезна при решении задач полиномиальной аппроксимации и регрессии
8.9. Дифференцирование по заданной переменной (Differentiate)
Следующая группа символьных операций выполняется с выражениями, требующими указания переменной, по отношению к которой выполняется операция Для этого достаточно установить на переменной курсор ввода Само выражение при этом не указывается отдельно, поскольку указание в нем на переменную является одновременно и указанием на само выражение. Если выражение содержит другие переменные, то они рассматриваются как константы Изучим операции этой группы, начиная с операции дифференцирования
Нахождение символьного значения производной — одна из самых рас пространенных задач в аналитических вычислениях. Операция Differentiate (Дифференцировать по переменной) возвращает символьное значение производной выражения по той переменной, которая указана курсором Для вычисления производных высшего порядка (свыше 1) нужно повторить вычисление необходимое число раз На рис 811 показано применение операции дифференцирования
В трех последних примерах на рис 811 показано, что в выражениях, производная которых вычисляется, могут стоять и встроенные в систему специальные математические функции Они могут появляться и в результатах вычислений
Рис. 8.11 Примеры символьного дифференцирования
Особое внимание стоит обратить на последний пример. Попытка вычислить производную от функции Бесселя здесь ведет к тому, что результат направляется в буфер обмена, поскольку представлен в виде функций или действий, содержащихся в ядре символьных операций системы, но недоступных символьному процессору. Поэтому результат дифференцирования вызывается из буфера обмена командой Paste (Вставить). Такой результат нельзя использовать в других операциях прямо, но он вполне подходит для творческого осмысления пользователем. Тот и решает, полезен результат или нет
8.10. Интегрирование по заданной переменной (Integrate)
Другая не менее важная операция при символьных вычислениях — вычисление интегралов (или нахождение первообразных) для аналитически заданной функции. Для этого используется операция Integrate (Интегрировать по переменной). Она возвращает символьное значение неопределенного интеграла по указанной курсором ввода переменной. Выражение, в состав которого входит переменная, является подынтегральной функцией.
На рис. 8.12 показаны примеры символьного интегрирования по переменной х. Визуализация таких вычислений (как и описанных выше), прямо скажем, не велика если бы не поясняющие текстовые комментарии, то было бы совсем неясно, откуда берутся выражения в документе и резульгаты чего они представляют
Как и для операции дифференцирования, в состав исходных выражений и результатов символьного интегрирования могут входить встроенные в систему специальные математические функции. На это указывают два последних примера из приведенных на рис. 8.12.
Рис. 8.12 Примеры символьного интегрирования
8.11. Решение уравнения относительно заданной переменной (Solve)
Если задано некоторое выражение F(x) и отмечена переменная х, то операция Solve (Решить) возвращает символьные значения указанной переменной х, при которых F(x)==0. Это очень удобно для решения алгебраических уравнений, например квадратных и кубических, или для вычисления корней полинома. Рис. 8.13 содержит примеры решения квадратного уравнения и нахождения комплексных корней полинома четвертой степени.
Рис.8.13 Примеры решения уравнений
Ранее отмечалось, что усложнение уравнения, например переход от квадратного уравнения к кубическому, может вызвать и существенное усложнение результата. Тогда система представляет решение в более компактном виде (но без общепринятой математической символики) и предлагает занести его в буфер обмена.
С помощью операции Paste (Вставить) в позиции Edit (Правка) главного меню можно перенести решение в основное окно системы, но оно имеет уже тип текстового комментария, а не математического выражения, пригодного для дальнейших преобразований. Впрочем, часть его можно (опять-таки с помощью буфера обмена) ввести в формульные блоки для последующих преобразований и вычислений.
Более того, форма представления результата в таком случае отличается от принятой в системе MathCAD (например, в качестве знака деления используется косая черта, для возведения в степень — составной знак** и т. д.). Это сделано ради компактности представления результатов вычислений. Рис. 8.14 показывает результат решения кубического уравнения в символьном виде.
Рис. 8.14 Решение кубического уравнения в символьном виде
Последний пример наглядно иллюстрирует проблему "разбухания" результатов. Если при решении квадратного уравнения получены простые выражения, известные даже школьникам (рис. 8.13 — первый пример), то при увеличении порядка уравнения всего на единицу результат оказался представленным весьма громоздкими и малопригодными для анализа формулами. Хорошо еще, что существующими!
В случаях, подобных приведенному, пользователю надо реально оценить свои силы в упрощении решения. Это придется сделать вручную. При технических расчетах специалист нередко знает, какие из параметров решения несущественны и может отбросить их. Однако для строгих математических расчетов это не всегда возможно, поэтому даже громоздкий результат может быть весьма полезным с познавательной точки зрения.
8.12. Подстановка для заданной переменной (Substitute)
Операция Substitute (Подстановка) возвращает новое выражение, полученное путем подстановки на место указанной переменной некоторого другого выражения. Последнее должно быть подготовлено и скопировано (операциями Cut или Copy) в буфер обмена. Наряду с получением результата в символьном виде эта команда позволяет найти и числовые значения функции некоторой переменной путем замены ее на числовое значение. На рис. 8.15 представлены примеры операций с подстановкой.
Рис. 8.15 Примеры операций с подстановкой
Подстановки и замены переменных довольно часто встречаются в математических расчетах, что делает эту операцию весьма полезной. Кроме того, она дает возможность перейти от символьного представления результата к числовому.
8.13. Разложение в ряд Тейлора по заданной переменной (Expand to Series...)
Операция Expand to Series... (Разложить в ряд) возвращает разложение в ряд Тейлора выражения относительно выделенной переменной с заданным по запросу числом членов ряда n (число определяется по степеням ряда). По умолчанию задано п=6. Разложение возможно для функции заданной переменной. В разложении указывается остаточная погрешность разложения. На рис. 8.16 представлено применение этой операции для разложения функции sin(x)/x. Минимальная погрешность получается при малых х (см. графическое представление функции и ее ряда).
Символьные операции нередко можно комбинировать для решения сложных задач. Рис. 8.17 показываег интересное решение одной из таких задач — вычисление определенного интеграла, который не берется в замкнутой форме.
Рис. 8.16 Пример на разложение функции в ряд Тейлора
Рис. 8.17 Взятие определенного интеграла в символьной форме с заменой подынтегральной функции ее разложением
Если пользователя (например, инженера) интересует просто числовое значение интеграла, надо лишь поставить после интеграла знак вывода = и значение интеграла будет вычислено адаптивным численным методом Симп-сона. Однако вычислить такой интеграл с помощью операции Simplify (Упростить) не удастся после долгих попыток система сообщит, что интеграл в замкнутой форме не берется.
Прием, который иллюстрирует рис. 8.17, заключается в замене подынтегральной функции ее разложением в ряд Тейлора. Вначале получим такое разложение с избытком — для 10 членов ряда (однако учтенных нечетных членов тут нет, такова специфика функции). Далее, выделив четыре первых реальных члена и используя операции Copy (Копировать) и Paste (Вставить) в позиции Edit (Правка) главного меню, поместим это разложение на место шаблона подынтегральной функции. Теперь проблем с вычислением интеграла операцией Simplify не будет
Интеграл получен в форме числа е=ехр(1), помноженного на дробный множитель, представленный в рациональной форме (отношения целых чисел) Это обстоятельство, возможно, бесполезное для рядового пользователя, наверняка будет весьма положительно воспринято математиком, поскольку здесь напрашиваются определенные аналитические выводы (которых нельзя сделать при вычислении интеграла численными методами)
8.14. Разложение на правильные дроби (Convert to Partial Fraction)
Операция Convert to Partial Fraction (Разложить на элементарные дроби) возвращает символьное разложение выражения, представленное относительно заданной переменной в виде суммы правильных целых дробей. На рис 8 18 даны примеры такого разложения
Рис. 8.18 Примеры разложения на дроби
Как видно из представленных примеров, применение этой операции в большинстве случаев делает результат более длинным, чем исходное выражение Однако он более нагляден и содействует выявлению математической сущности исходного выражения
8.15. Транспонирование матрицы (Transpose)
Символьный процессор системы MathCAD обеспечивает проведение в символьном виде трех наиболее распространенных матричных операций' транспонирование и обращение матриц, а также вычисление их детерминанта.
Эти операции в подменю Matrix обозначены так: Transpose (Транспонировать), Invert (Обратить) и Determinant (Найти определитель). Если элементы матрицы — числа, то выполняются соответствующие операции в числовой форме.
Транспонирование матрицы означает перестановку строк и столбцов. Оно реализуется операцией Transpose (Транспонировать). Подлежащая транспонированию матрица должна быть выделена.
8.1 б. Обращение матриц (Invert)
Обращение матриц означает создание такой матрицы А-1, для которой произведение ее на исходную матрицу А дает единичную матрицу, т. е. матрицу с диагональными элементами, равными 1, и остальными — нулевыми. Обращение допустимо для квадратных матриц с размером NxN, где N> 1 — число строк и столбцов матрицы. Такую же размерность имеет и обращенная матрица.
Обращение матриц — широко распространенная математическая задача. Существует множество программ на разных языках программирования, решающих эту задачу с той или иной степенью успеха. Для MathCAD это рутинная задача. На рис. 8.19 приведены примеры выполнения типовых матричных операций. Последняя из них — обращение матрицы в символьной форме с помощью операции Invert.
Рис. 8.19 Примеры матричных операций в символьной форме
При выполнении матричных операций в символьной форме проблема "разбухания" результатов становится весьма серьезной. Если, к примеру, для обратной матрицы с размером 2х2 или 3х3 еще можно получить ответ, размещающийся в окне документа, то для матриц большего размера это становится невозможным. Впрочем, большинство аналитических задач очень редко оперирует такими матрицами.
8.17. Функции преобразований Фурье, Лапласа и Z-преобразований
Для выполнения широко распространенных в технических и научных приложениях преобразований Фурье (Fourie и Inverse Fourie), Лапласа (Laplace и Inverse Laplace) и Z-преобразований (Z и Inverse Z) служат соответствующие операции в подменю позиции Symbolic главного меню
Для применения этих операций следует записать исходное выражение и отметить в нем переменную, относительно которой будет производиться преобразование Тогда указанные выше операции становятся доступными и выделяются четкими надписями
Не вдаваясь в суть перечисленных достаточно известных преобразований, приведем простейшие примеры их применения, они показаны на рис 8 20 Здесь даны примеры как прямого, так и обратного (Inverse) преобразования каждого типа
Рис. 8.20 Примеры применения функций преобразования Фурье, Лапласа и Z-преобразований
Не следует полагать, что для всех случаев результаты преобразования будут в точности совпадать со справочными и что результат двойного преобразования (вначале прямого, а затем обратного) приведет к первоначальной функции Указанные преобразования довольно сложны, и грамотное применение их требует соответствующих математических познаний Не случайно в ранние версии MathCAD (например, 3 0) они не были включены в виде команд
8.18. Установка стиля эволюции символьных выражений (Evolution Style...)
Последняя позиция подменю Symbolic — Evalution Style... — служит для установки стиля эволюции выражений, над которыми выполняются символьные операции Напомним, что под эволюцией математических выражений в данном случае подразумеваеюя изменение их вида в результате символьных преобразований.
Данная операция выводит окно с установками стиля эволюции, показанное на рис. 8.21.
Рис. 8.21 Окно установки стиля эволюции
В этом окне можно установить три тина вывода результата символьных преобразований:
Vertically, inserting lines — расположение результата под основным
(Вертикально, включая линии) выражением с включением пустых линий,
Vertically, without inserting lines — расположение результата прямо под
(Вертикально, без линий) основным выражением;
Gorizontally (По горизонтали) — расположение результата рядом (по го ризонтали) с основным выражением.
Кроме того, установкой знака "птички" в прямоугольниках можно ввести еще две опции:
Show Comments — наблюдать комментарии;
(Просмотр комментариев)
Evaluate in Place (Замещать) — заместить исходное выражение резуль татом его символьного преобразования.
Все варианты стиля вывода результатов символьных операций представлены на рис. 8.21. В ряде случаев предпочтительно применение символьного оператора вывода —>, который делает символьные преобразования более наглядными.
8.19. Интерпретация результатов символьных операций в буфере обмена
Необходимо отметить, что не всегда результат символьных операций выводится в окно редактирования. Иногда он оказывается настолько громоздким, что MathCAD использует специальную компактную форму его представления и помещает его в буфер обмена. Уже оттуда его можно вызвать в текстовом формате в окно редактирования, нажав клавишу F4 или клавиши Shift+ Ins. To же самое можно сделать с помощью команды Copy (Копировать) в позиции Edit (Правка) главного меню.
Записи математических выражений в буфере обмена напоминают их записи на языке Фортран:
• справедливы операторы арифметических операций+, -,* и /;
• возведение в степень обозначается как**;
• первая производная функции f(x) записывается в виде diff(f(x),x), а п-я производная в виде diff(f(x),x$n);
• частная производная обозначается как D, п-го порядка (D,n) и по п-му аргументу как (D[n]);
• интеграл с подынтегральной функцией/^) записывается как int(f(x),x);
• операторы суммы и произведения обозначаются как sum() и product();
• композиция функций указывается символом @ [например, (exp@cos) (x) означает exp(sin(x))\,
• кратная композиция указывается символами @@ [например, (f(@@3) (x) означает f(f(f(x)))};
• замещение любого корня уравнения указывается записью RootOf (уравнение) [например, оба корня i и -г уравнения Z**2+1=0 представляются записью RootOf(Z**2+l)].
С помощью команды Save As... (Сохранить как) в позиции File папки обмена можно сохранить последнее содержимое буфера обмена в виде текстового файла. Это может быть полезным для осмысления и анализа полученного результата. В Windows 95 доступ к папке обмена обеспечивает приложение "Просмотр папки обмена", которое находится в папке "Стандартные" меню программ.
8.20. Применение преобразований Лапласа для
аналитического решения дифференциальных уравнений
Итак, если результаты символьных вычислений включают функции, не содержащиеся во входном языке системы, они помещаются в буфер обмена по запросу системы и могут быть вызваны оттуда командой Paste (Вставить). Тогда результаты имеют статус текстовых комментариев, т. е. в явном виде с ними дальнейшие действия проводить невозможно.
Однако это совсем не означает бесполезности таких результатов. Напротив, пользователь, владеющий приемами аналитических вычислений, может успешно использовать такие результаты для решения серьезных математических задач. Здесь мы остановимся на задаче получения аналитического решения для линейных дифференциальных уравнений. Сразу отметим, что системы компьютерной алгебры Mathematica 2.2.2 или Maple V R3/R4 легко решают подобные задачи встроенными средствами. Рассмотрим, как это можно сделать в системе MathCAD 6.0 PRO, таких средств не имеющей.
Для получения решения можно воспользоваться преобразованиями Лапласа. Это иллюстрирует рис. 8.22, на котором подробно показан процесс получения результата. Приходится вручную запускать прямое преобразование Лапласа, по его результатам составлять алгебраическое уравнение и после решения запускать обратное преобразование Лапласа — оно дает решение в виде временной зависимости
Рис. 8.22 Пример решения дифференциального уравнения второго порядка с применением преобразований Лапласа
На рис 8.23 приведено решение другого дифференциального уравнения Используется тот же метод решения, что и в предыдущем примере.
Оба примера наглядно показывают, что помещаемый в буфер обмена результат символьных операций может быть очень полезным и порой предоставлять возможности, которые нельзя получить прямым образом. Это расширяет области применения системы MathCAD
Рис. 8.23 Пример решения другого дифференциального уравнения
Глава 9 Работа с окнами
9.1. Подменю для работы с окнами (Window)
Как и большинство программ, работающих в среде Windows, система MathCAD унаследовала от нее многооконный и удобный пользовательский интерфейс. Мы уже видели, что после загрузки системы появляется окно, содержащее полосы прокрутки для скроллинга изображения и средства управления для свертывания окна в пиктограмму и развертывания его на часть экрана или на весь экран. Окна появляются при выборе соответствующих опций меню или подменю, а также при выводе сообщений об ошибках. Традиционны для Windows и средства перемещения окон и плавного изменения их размеров.
Система MathCAD позволяет одновременно работать со многими задачами. Под каждую задачу она отводит свое окно. Одно из них обычно является активным — то, с которым происходит работа в настоящий момент. Состояние других документов "замораживается", но их можно пустить в работу в любое время без новой загрузки и без исполнения связанной с окном программы.
Основные операции с окнами сосредоточены в позиции Window (Окно) главного меню (см. рис. 9.1).
Рис. 9.1 Вид экрана MathCAD с подменю Window главного меню
Ниже указаны эти операции:
Cascade (Каскад) — расположить окна документов друг под дру гом так, чтобы были видны заголовки;
Horizontal (По горизонтали) расположить окна документов горизонтально;
Vertical (По вертикали) — расположить окна документов вертикально;
Arrange Icons — упорядочить размещение пиктограмм (Упорядочить пиктограммы) рабочих документов вдоль нижней границы окна приложения.
Кроме этих операций в подменю позиции Window имеется список окон, которые в данный момент открыты. Он позволяет быстро сделать активным указанное окно.
Рассмотрим действие основных команд управления окнами. Они позволяют пользователю подстроить графический интерфейс системы под свои вкусы и привычные возможности.
9.2. Каскадное расположение окон (Cascade)
Операция Cascade (Каскад) задает каскадное расположение окон. При этом окна располагаются последовательно, частично закрывая друг друга. У закрытых окон обычно видна лишь титульная строка с именем окна, повторяющим имя загруженного на исполнение документа. Окно, расположенное поверх остальных, видно полностью.
Верхнее окно можно закрыть, указав курсором мыши на квадратик с треугольником, обращенным вершиной вниз. Окно при этом свертывается в пиктограмму, а следующее за ним выходит на передний план. Указание на квадратик с треугольником, обращенным вершиной вверх, развертывает окно почти во весь экран. На рис. 9.2 показано каскадное расположение окон.
Рис. 9.2 Расположение окон после выполнения операции Cascade
Каскадное расположение окон удобно для их переключения. Оно позволяет видеть имена сразу всех файлов, документы которых загружены в окна, и дает достаточно места для обзора активного окна. Однако при таком расположении окон затруднен перенос объектов из одного окна в другое.
9.3. Расположение окон по горизонтали (Horizontal)
Операция Horizontal выводит на экран сразу все окна, причем они имеют одинаковый размер и расположены по горизонтали. Размер окон тем меньше, чем больше окон выведено. В каждом окне видна лишь часть загруженного в
нею документа Рис. 9.3 показывает вид экрана после выполнения этой операции. В нашем случае использованы оба варианта разделения экрана — и по горизонтали, и по вертикали.
Рис. 9.3 Расположение окон после выполнения операции Gorizontal
Равномерное расположение окон может оказаться наиболее удобным, если требуется скопировать блок из одного окна в другое. Однако здесь есть некоторая трудность: в уменьшенном по размеру окне видны не все блоки Поэтому не следует увлекаться одновременным выводом большого числа окон. Практика показывает, что чаще всего достаточно работать с двумя-тремя окнами И наконец, надо помнить, что в каждом окне возможен свой скроллинг изображений, поэтому несложно найти нужный объект, даже если он вначале не попал в видимую область окна.
9.4. Расположение окон по вертикали (Vertical)
Операция Vertical выводит на экран сразу все окна, причем они имеют одинаковый размер и расположены вертикально Размер окон тем меньше, чем больше окон выведено. В каждом окне видна лишь часть загруженного в него документа. Рис. 9.4 показывает вид экрана после выполнения этой операции
Строго горизонтальное или вертикальное расположение окон получается, если окон немного, например два или три. При большем числе окон деление экрана происходит как по горизонтали, так и по вертикали (см рис 9 5)
Выбор оптимального расположения окон зависит от характера работы с MathCAD Система позволяет перетаскивать мышью объекты из одного окна в другое Для такого перетаскивания достаточно выделить объект (или группу объектов — блок) и, удерживая нажатой левую клавишу мыши, перетащить объект (или блок) в другое окно. Для этой операции, облегчающей компоновку сложных документов, удобное расположение окон имеет важное значение.
Рис. 9.4 Расположение окон после выполнения операции Vertical
Рис. 9.5 Расположение большого числа окон после выполнения операции Vertical
9.5. Приведение в порядок пиктограмм (Arrange Icon)
Если перевести часть окон в неактивное состояние, то они будут представлены на экране своими пиктограммами. Эти пиктограммы можно перемещать куда угодно, что нередко ведет к "захламлению" экрана (см. рис. 9.6).
Операция Arrange Icon (Упорядочить значки) означает наведение порядка с пиктограммами. При ее выполнении пиктограммы размещаются строго в нижней части экрана, как показано на рис. 9.7.
Рис. 9.6 Экран,"захламленный" пиктограммами неактивных окон
Рис. 9.7 Экран после выполнения операции Arrange Icon
Если в результате ваших действий пиктограммы оказались разбросанными по текущему окну, применение этой операции позволит собрать их вместе в левом нижнем углу текущего окна системы Такая операция типична для всех программных систем, работающих в среде операционной системы Windows Она избавляет нас от ручного перетаскивания пиктограмм и точной установки их в нужном месте
9.6. Переключение окон и управление ими
Помимо перечисленных операции в позиции Window главного меню предусмотрена возможность переключения текущего окна Все введенные в систему документы регистрируются в специальном каталоге, который помещается в нижней части подменю позиции Window. Из каталога можно легко выбрать любое нужное сейчас окно и переключиться в режим редактирования и исполнения содержащегося в нем документа.
Каждое окно системы MathCAD содержит характерный для приложений под Windows квадратик с жирной короткой чертой (такой квадратик, но с длинной чертой содержит главное окно системы). Если активизировать эту область, указав ее курсором мыши и нажав левую клавишу, то из квадратика выпадет Windows-меню, содержащее следующие операции:
Restore (Восстановить) — восстановление обычного вида окна;
Move (Переместить) — перемещение окна по экрану;
Size (Размер) — изменение размеров окна;
Minimize (Свернуть) — свертывание окна в пиктограмму;
Maximize (Развернуть) — развертывание окна;
Close [Ctrl+F4] (Закрыть) — закрытие текущего окна;
Next [Ctrl+F6] (Следующее) — переход к следующему окну.
Эти операции характерны почти для всех прикладных программ, работающих в среде Windows, и на них не стоит останавливаться. Русскоязычная система Windows имеет это окно, естественно, с надписями на русском языке.
Если окон оказалось слишком много (ограничение в виде восьми окон в новой версии снято), то система откажется от ввода дополнительных документов и сообщит то этом в информационном окне. Для продолжения работы нужно очистить текущее окно командой New (Создать) в позиции File (Файл) главного меню или закрыть часть ставших ненужными окон. Для этого используется команда Close (Закрыть) из Windows-меню каждого окна. Вообще говоря, держать открытыми слишком много окон не рекомендуется в любом случае, так как это загромождает экран и уменьшает ресурсы ПК (прежде всего объем доступной памяти).
Глава 10 Работа с информационными ресурсами
10.1. Информационные ресурсы системы MathCAD 7.0 PRO
К информационным ресурсам системы MathCAD 7.0 PRO относятся подсказка начального уровня Tip of the Day, электронный справочник по системе обучающая программа по ней, примеры применения (шпаргалки), электронные книги, справочные таблицы, доступ в Internet и др. Доступ ко всем этим ресурсам сосредоточен в подменю позиции Help (Справка) главного меню (рис. 10.1).
Рис. 10.1 Экран системы MathCAD 7.0 PRO с открытым подменю позиции Help главного меню
Как видно из рис. 10.1, подменю Help имеет следующие позиции:
Mathcad Help [Fl] — вызов справочной системы MathCAD;
(Справка по MathCAD)
Resource Center (Центр ресурсов) — вызов центра информационных ресурсов;
Tip of the Day — вызов оперативной подсказки;
(Оперативная подсказка)
Open Book... (Открыть книгу) — вызов окна оперативной справки;
Using Help (Использование — вызов информации о справочной
справочной системы) системе;
About Matchcad... — краткая информация о системе
(О системе MathCAD) MathCAD.
10.2. Работа со справочной системой (MathCAD Help)
Справочная система MathCAD 7.0 PRO — это большая база данных, объем которой намного превосходит объем данной книги (хотя она также является справочником). Однако назначение обычных справочных книг и назначение электронного справочника по системе принципиально различны.
Вначале в большинстве программных средств электронная справочная система была сокращенным вариантом обычного описания. Сейчас ситуация стала прямо противоположной — электронные справочные системы современных программных средств настолько разрослись, что публикация их содержания в обычном виде стала нецелесообразной.
Теперь обычный справочник является "выжимкой" наиболее важных сведений о системе, а электронный содержит детальную и полную информацию о ней.
Несмотря на удобство пользования обычной книгой электронная справочная система имеет свои явные достоинства:
• большой (и почти не ограниченный) объем информации;
• быстрый поиск информации;
• прекрасное оформление (в том числе цветовое);
• возможность немедленного исполнения примеров и их переноса в документы;
• естественное совмещение с системой.
Тем не менее такая система имеет и существенные недостатки:
• требует для применения компьютера;
• неудобна для систематического начального знакомства с системой;
• закрывает документ, с которым работает пользователь;
• требует обновления вызова после получения очередной справки;
• написана на языке оригинала (в нашем случае — на английском).
Последний недостаток особенно неудобен для русскоязычных пользователей. Многие считают, что это перечеркивает все достоинства электронной справочной системы и делает ее, по существу, бесполезной. К сожалению, это в основном так: большинство наших пользователей просто не пользуются электронным справочником системы MathCAD. Однако опытные пользователи, даже плохо владеющие английским языком, все же нередко обращаются к электронной справочной системе, поскольку она дает ответ на ряд редких и второстепенных вопросов, которые могут не попасть в обычные книги вследствие ограничения их объема (настоящая книга исключением не является)
Для вызова справочной системы можно:
• исполнить операцию Mathcad Help в подменю позиции Help главного меню;
• нажать клавишу F1;
• активизировать кнопку со знаком "?" в конце панели инструментов.
При этом появляется окно справочной системы, показанное на рис. 10.2. Следует отметить, что справочная система является самостоятельным приложением и ее можно запускать независимо от собственно системы MathCAD.
Как видно из рис. 10.2, окно справочной системы имеет три панели, которые вводят три вида справок: Содержание, Предметный указатель и Поиск. О причинах, по которым эти (и некоторые другие) надписи даны на русском языке, уже говорилось: окна справочной системы MathCAD заимствует из
Рис. 10.2 Окно справочной системы
русскоязычной версии операционной системы Windows 95 Само же содержание справок, естественно, дано на английском языке (см рис 10 3, например)
Рис. 10.3 Пример получения справки
Вторая панель окна справки (рис 104) дает доступ к индексному указателю справочной системы Достаточно в поле 1 ввести хотя бы часть наименования темы справки, как в поле 2 появится перечень ближайших ее разделов
После выбора нужного раздела его просмотр выполняется так, как это было описано выше Индексный указатель — мощное средство поиска нужных сведений
Рис. 10.4 Панель индексного указателя справочной системы
10.3. Построение и применение профессиональной справочной базы данных
Третья панель, Поиск, позволяет создать профессиональную справочную базу данных но системе MathCAD 7.0 PRO. Эта база данных дает возможность найти все разделы справочной системы, в которых упоминается заданное слово или хотя бы его начальная часть. Поскольку для базы данных нужна дополнительная память на диске, она при инсталляции обычно не создается. Открытие панели Поиск ведет к выводу окна установки профессиональной справочной базы данных о сисгеме, показанного на рис. 10.5.
Рис. 10.5 Окно создания профессиональной справочной базы данных
Это окно является первым окном мастера подготовки профессиональной базы данных. Выбрав вид создаваемой базы и пройдя по этапам ее подготовки, можно получить окно поиска этой базы, показанное на рис 10.6
Рис. 10.6 Окно поиска темы профессиональной справочной базы данных
Найденная тема отображается подобно тому, как показано на рис 103. К сожалению, выйдя на показ интересующей пользователя темы, справочное окно закрывается вместе с окном справочной базы данных.
10.4. Работа с центром информационных ресурсов (Resource Center)
Позиция Resource Center подменю Help открывает доступ к новой возможности системы MathCAD 7 О PRO центру информационных ресурсов. Центр ресурсов представляет собой мощную базу данных, объединяющую встроенные в систему введение, электронные книги, обучающую систему, быстрые примеры (шпаргалки), средства общения с фирмой — разработчиком системы и сетью Internet, средства регистрации и доступа к Web-библиотеке MathCAD и т. д.
При активизации позиции Resource Center открывается окно с перечнем (в виде красочных пиктограмм) входящих в центр ресурсов средств Это окно показано на рис. 10.7.
Доступ к тому или иному средству центра ресурсов выполняется активизацией его пиктограммы курсором мыши и двойным щелчком левой ее клавиши В качестве примера на рис 10.8 представлена титульная заставка раздела центра, относящегося к быстрым примерам — шпаргалкам Quicksheets Стоит выбрать нужный пример — и к вашим услугам появится документ с соответствующей шпаргалкой.
Окна со шпаргалками имеют обычный для Windows-приложений вид. На рис. 10.9 показано полноэкранное окно одной из шпаргалок; она посвящена применению при программировании условного оператора IF
Рис. 10.7 Окно центра ресурсов
Рис. 10.8 Титульная заставка центра ресурсов, относящаяся к шпаргалкам
Тут надо отметить, что шпаргалки содержат сотни интересных (как простейших, так и сложных) примеров на применение системы MathCAD в практике математических и научно-технических расчетов
Большой интерес (даже у наших пользователей) вызовут справочные таблицы Reference Tables Они заменяют обычные таблицы физико химических и иных свойств различных веществ В качестве примера на рис 10 10 показана периодическая система элементов с данными об одном из элементов
Большой материал по применению системы MathCAD содержится в трех встроенных в центр ресурсов электронных книгах
Рис. 10.9 Окно одной из шпаргалок
Рис. 10.10 Пример применения периодической системы элементов
Solving — пособие по технике вычислений;
Practical Statistics — руководство по статистическим вычислениям;
Programming — руководство по программированию в среде
MathCAD 7.0 PRO.
Следует отметить, что приведенные в данной книге многочисленные примеры в основном оригинальны. Так что примеры из упомянутых книг могут существенно расширить кругозор пользователя и лучше подготовить его к профессиональному применению системы. Хотя эти книги написаны (как и все в центре ресурсов) на английском языке, многие примеры достаточно понятны, тем более что комментарии к ним довольно кратки.
Тексты, формулы, графики (словом, любые объекты) можно легко перетаскивать из электронных таблиц и книг в документы MathCAD, что облегчает пользователю составление своих документов и обучающих программ.
10.5. Электронная подсказка (Tip of the Day)
Весьма полезной для начального освоения системы является электронная подсказка Tip of the Day. Она вводится соответствующей операцией в подменю позиции Help главного меню. Эта подсказка построена по принципу ответа на вопрос "А знаете ли вы, что...".
Окно электронной подсказки было показано на рис. 1.3. Работа с подсказкой настолько проста, что не нуждается в более полном описании, чем то, что было дано выше.
10.6. Открытие электронных книг (Open Book...)
Отдельных электронных книг в типовом комплекте поставки системы MathCAD 7.0 уже нет. Точнее, они вошли в центр ресурсов вместе с иными информационными средствами. Однако фирма MathSoft продолжает создавать электронные книги по самым различным вопросам. Поэтому возможность работы с электронными книгами сохранена и о них стоит упомянуть.
Электронными книгами в системе MathCAD называются взаимосвязанные наборы объединенных в тематические разделы документов, относящихся к самым различным сферам применения системы. Документы вызываются друг из друга, обеспечивая гипертекстовые перекрестные ссылки. Количество взаимосвязанных документов в одной книге может быть большим, до несколько сотен. В конечном счете оно определяется объемом дисковой памяти ПК.
Электронной книгой можно пользоваться, как обычной, для получения нужной информации. Конечно, для этого необходим компьютер с установленной на нем системой MathCAD. Однако преимущества электронных книг перед обычными весьма существенны:
• электронные книги имеют значительно улучшенное оформление материала по сравнению обычными (цветные графика и текст, различные приемы выделения математических выражений и т. д.);
• поиск информации в электронных книгах облегчен гипертекстовыми ссылками;
• электронные книги — действующие (работающие) объекты, т. е. вы можете изменить любые данные в них и примеры расчетов и тут же получить новые результаты;
• электронные книги допускают их модификацию пользователем (например, замену текстов, ввод новых комментариев и т. д.);
• статьи из электронных книг можно распечатать на принтере:
• электронные книги занимают мало места — на одном CD-ROM можно разместить информацию, эквивалентную размещенной в десятках обычных книг крупного формата;
• электронные книги могут посылаться по электронной почте и по сети Internet.
Для загрузки электронных книг служит операция Open Book (Открыть книгу). Она открывает окно загрузки и поиска файлов с электронными книгами, имеющих расширение.hbk. Это окно показано на рис. 10.11.
Рис. 10.11 Окно поиска и загрузки файлов с электронными книгами
MathCAD позволяет пользователю создавать свои книги или использовать уже готовые В частности, с русифицированной версией системы MathCAD 6 0 поставляется набор из трех встроенных книг на русском языке Desktop Reference — справочник по математическим расчетам, Book Sampler — примеры применений системы, Tutorial — самоучитель по правилам работы с системой MathCAD
Указанные книги содержат обширный материал Так, книга Desktop Reference — довольно полный справочник по математическим формулам и таблицам, в том числе относящимся к физике, химии, механике, электротехнике, радиотехнике и т д Использование этой книги избавляет пользователя от необходимости часто обращаться к обычной справочной литературе
Книга Book Sampler содержит сотни примеров применения системы в практике математических расчетов А книга Tutorial является небольшим самоучителем по системе, использующим мультимедийные возможности MathCAD, она содержит элементы динамической графики, поясняющие в какой последовательности пользователь должен выполнять действия в ходе проведения математических расчетов В основном книга учит элементам пользовательского интерфейса системы
Все эти книги могут пригодиться и пользователям версии системы MathCAD 7 О PRO, поскольку на уровне файлов новая и прежняя версии системы совместимы Это наглядно демонстрирует рис 10 12, на котором показана титульная страница русскоязычной книги Book Sampler
Кроме указанных, имеются десятки книг по самым различным областям применения системы MathCAD
• математические вычисления общего характера,
• реализация численных методов,
• расчеты в физике, механике, оптике, электро- и радиотехнике,
• статистические и экономические вычисления и т д
После инсталляции (ее процедура ничем не отличается от инсталляции в среде Windows любых приложений) указанные книги пополняют набор книг,
Рис. 10.12 Титульная страница книги Book Sampler
входящих в систему, и с ними можно работать так же, как со встроенными книгами Это обеспечивает обширные возможности расширения системы и ее адаптации к интересующим пользователя задачам и проблемам Начат выпуск и отдельных книг на русском языке Пример работы с такой книгой приведен на рис 1013
Рис. 10.13 Пример работы с русскоязычной книгой по экономическим расчетам
К сожалению, с точки зрения наших пользователей, у большинства книг есть существенный недостаток — они подготовлены на английском языке Учитывая, что в книгах используются многие специальные термины, перевод и понимание их достаточно сложны Однако в русифицированной версии MathCAD встроенные электронные книги имеют тексты на русском языке
Даже беглый обзор встроенных электронных книг и пакетов применений систем MathCAD требует большого места и выходит за рамки настоящей книги. Поэтому тут описываются лишь основные приемы работы с такими книгами.
Иллюстрации в книгах и содержащиеся в них математические формулы и тексты можно перенести в текст документа. Для этого надо просто активизировать специальную метку (звездочка с двумя точками под ней) около рисунка или формулы. Рисунок или формула будут перенесены на место, соответствующее местоположению курсора (не забудьте передвинуть его при очередном сеансе переноса рисунка или формулы).
Поскольку книги, в сущности, представляют собою обычные документы MathCAD, они просматриваются в окне редактирования этой системы и их можно редактировать, пополнять и модифицировать. Например, не выходя из системы, можно перевести тексты книг на русский язык. При этом система сохранит как измененную книгу, так и исходную. Так что оригинал всегда можно восстановить после модернизации.
10.7. Использование справочной системы (Using Help...)
Сама по себе справочная система MathCAD достаточно сложна, хотя работа с нею интуитивно предсказуема. Тем не менее благодаря операции Using Help... (Использование справки) можно получить справку об использовании самой справочной системы (рис. 10.14).
Рис. 10.14 Окно с информацией о применении справочной системы
Уже говорилось, что кое-где надписи в окнах справочной системы англоязычных версий MathCAD появляются на русском языке. Окно, показанное на рис. 10.14, вообще может озадачить: в нем абсолютно все надписи даны на русском языке, хотя использовалась оригинальная англоязычная версия системы MathCAD 7.0 PRO.
Причина этого нового казуса тоже в том, что операция Using Help... запускает стандартную справочную систему Windows. В данном случае использовалась русифицированная версия Windows 95. Поэтому на рис. 10.14 окно справочной системы MathCAD содержит все надписи на русском языке.
10.8. Общие сведения о системе (About MathCAD)
Операция About MathCAD (0 программе MathCAD) мало что прибавляет к знаниям о системе MathCAD, она лишь выводит красочную заставку с указанием фирмы-разработчика и названия программного продукта (см. рис. 10.15).
Рис.10.15 Заставка MathCAD 7.0 PRO, выведенная при выполнении операции About MathCAD
Впрочем, кое-что любопытное в этой заставке есть; из нее, например, можно узнать, что MathSoft начала работу в 1986 г. и что разработка данного программного продукта выполнена уже в 1997 г.
Глава 11 Входной язык системы MathCAD 7.0
11.1. Базовые понятия входного языка системы
Система MathCAD практически избавляет нас от необходимости программировать решение многих задач. Уходит в прошлое подход, когда пользователь, прежде чем вычислить определенный интеграл или производную заданной функции либо просто рассчитать ряд ее значений, был вынужден изучать основы программирования на Фортране, Бейсике или Паскале, а затем составлять свои простенькие и не очень надежные программы или же разыскивать их в статьях и книгах, подобных [2], и самостоятельно загружать эти программы в ПК.
Впрочем, нельзя не отметить, что такие программы (если они составлены корректно и профессионально) обеспечивают существенно большую скорость проведения вычислений, чем MathCAD. Однако время, необходимое на их создание, намного превышает время на подготовку задач к решению в системе MathCAD.
MathCAD прежде всего требует от пользователя корректного описания алгоритма решения математической задачи на входном языке, очень напоминающем общепринятый язык описания математических и научно-технических расчетов. Естественно, это описание должно быть исчерпывающе полным и абсолютно точным. Тем не менее сказанное не означает, что решение задач в системе MathCAD нельзя назвать программированием. Просто MathCAD обладает специализированным входным языком программирования очень высокого уровня, ориентированным на математические расчеты.
Поэтому, рассматривая входной язык системы как язык программирования, мы можем выделить в нем типичные понятия и объекты, такие, как идентификаторы, константы, переменные, массивы и другие типы данных, операторы и функции, управляющие структуры и т. д. Четкое представление об их возможностях и правилах применения (синтаксисе) весьма полезно при решении задач умеренной и высокой сложности.
Ниже описан входной язык системы MathCAD PLUS 7.0. Он содержит все операторы и функции, которые были во всех предшествующих версиях системы - MathCAD 3.0/4.0/5.0/ PLUS 5.0/6.0/PLUS 6.0 PRO, что позволяет использовать материал этой главы пользователям, работающим с любой из указанных версий. Для этого в приведенных ниже изображениях экрана, как правило, удалены элементы интерфейса, характерные для MathCAD 7.0 PRO. Функции, имеющиеся только в профессиональных версиях (с приставкой PRO в названии), выделены символом Ф.
Алфавит MathCAD 7.0 PRO
Алфавит входного языка системы определяет совокупность символов и слов, которые используются при задании команд, необходимых для решения интересующего пользователя класса задач. Алфавит системы MathCAD содержит:
• строчные и прописные латинские буквы;
• строчные и прописные греческие буквы;
арабские цифры от 0 до 9;
системные переменные;
операторы;
имена встроенных функций;
спецзнаки;
строчные и прописные буквы кириллицы (при работе с русифицированными документами).
К укрупненным элементам языка относятся типы данных, операторы, функции пользователя и управляющие структуры. Все эти элементы присущи и любому другому языку программирования.
К типам данных относятся числовые константы, обычные и системные переменные, массивы (векторы и матрицы) и данные файлового типа. По числу типов данных система MathCAD несколько уступает современным языкам программирования (к примеру, в ней нет данных типа записей, множеств и др.). Это связано с определенной специализацией языка, направленной на математические расчеты общего характера. Впрочем, тенденция расширения типов данных в MathCAD налицо; в конце этой главы описан новый тип данных (строковые), которые появились в MathCAD 7.0 PRO.
Числовые константы
Константами называют поименованные объекты, хранящие некоторые значения, которые не могут быть изменены. В качестве имени числовых констант используются их числовые значения (к примеру, значения констант 0 и 1 есть соответственно ноль и единица). В системе MathCAD используются и числовые константы, значениями которых являются числа с разной системой исчисления: десятичные, восьмеричные или шестнадцатеричные.
Числовые константы задаются с помощью арабских цифр, десятичной точки (а не запятой) и знака - (минус). Например:
123 — целочисленная десятичная константа;
12.3 — десятичная константа с дробной частью;
12.3*10-5 —десятичная константа с мантиссой (12.3) и порядком-5.
Эти формы представления числовых констант естественны, и их не стоит обсуждать, за исключением двух важных аспектов. Порядок числа вводится умножением мантиссы на 10 в степени, определяющей порядок. Во многих языках программирования принят ввод чисел в виде 12.3е-5, где разделительный символ е указывает на порядок. Этот не вполне естественный для математики ввод числа в системе MathCAD устранен.
Далее надо отметить, что знак умножения* при выводе числа на экран меняется на привычную математикам точку, а операция возведения в степень (с применением спецзнака ^) отображается путем представления порядка в виде надстрочного элемента. Десятичные числа имеют основание 10. Диапазон их возможных значений лежит в пределах от 10^07 до 10^307 (это машинная бесконечность и машинный ноль).
Восьмеричные и шестнадцатеричные числа
Система MathCAD может работать с восьмеричными и шестнадцатеричными числами. Восьмеричные числа имеют основание 8, так что один их разряд может иметь значения от 0 до 7. Такие числа в конце отмечаются латинской буквой О (от слова octal — восьмеричное).
Шестнадцатеричные числа имеют основание 16, и их разряд может иметь значения:
HEX 0123456789ABCDEF DEC О 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Шестнадцатеричные числа имеют в конце отличительный признак в виде буквы h или Н (от слова hexagonal — шестнадцатеричное). Под сокращенным названием этих чисел HEX приведены их десятичные значения DEC (от decimal — десятичное).
Применение восьмеричных и шестнадцатеричных чисел в обычной математике ограничено, и в дальнейшем мы эти числа (а также константы на их основе) использовать не будем. Однако отметим, что если шестнадцатеричное число начинается с буквы (например, АВС0), то система будет путать его с возможным именем переменной. Для устранения потенциальных ошибок такие числа надо начинать с цифры 0 (ноль). В математических выражениях можно комбинировать числа различного типа (например, 10+ 0eh = 18H).
Комплексные числа
Большинство вычислений система выполняет как с действительными, так и с комплексными числами, которые обычно представляются в алгебраическом виде:
Z = ReZ+ i*ImZ или Z = ReZ+j*ImZ
Здесь ReZ — действительная часть комплексного числа Z, ImZ — его мнимая часть, а символы i или j обозначают мнимую единицу, т. е. корень квадратный из -1. Такое представление характерно и для системы MathCAD (за исключением того, что знак равенства не есть знак присваивания). Итак, если ReZ = 2, а ImZ = 3, то комплексная числовая константа в системе MathCAD должна быть задана в виде 2+ г*3 или 2+j*3.
Однако система не всегда знает, какой символ применить для обозначения мнимой единицы. Поэтому перед использованием любых операций с комплексными числами полезно вначале определить i или,/' как мнимую единицу (т. е. присвоить им значение квадратного корня из -1).
Единицы измерения
В системе может применяться особый вид констант — единицы измерения размерных величин. Помимо своего числового значения они характеризуются еще и указанием на то, к какой физической величине они относятся. Для этого указания используется символ умножения. В системе MathCAD заданы следующие основные типы физических величин: time (время), length (длина), mass (масса) charge (заряд) и др. При необходимости их можно изменить на другие.
Строковые константы
В описываемую версию MathCAD включены данные строкового типа. Как обычно, строковая константа — это строка, заключенная в кавычки, например:
"My_name" или "My first example". В строковую константу могут входить один или несколько символов либо слов.
Переменные
Переменные являются поименованными объектами, имеющими некоторое значение, которое может изменяться по ходу выполнения программы. Имена констант, переменных и иных объектов называют идентификаторами. Тип переменной определяется ее значением; переменные могут быть числовыми, строковыми, символьными и т. д.
Идентификаторы в системе MathCAD могут иметь практически любую длину, и в них могут входить любые латинские и греческие буквы, а также цифры. Однако начинаться идентификатор может только с буквы, например:
х, xl, alfa, X_coordinate. Кроме того, идентификатор не должен содержать пробелов. Некоторые спецсимволы (например, знак объединения _) могут входить в состав идентификаторов, другие (например, знаки операторов арифметических действии) — недопустимы. Нельзя использовать для идентификаторов буквы русского языка. Строчные и прописные буквы в идентификаторах различаются. Идентификаторы должны быть уникальными, т. е. они не могут совпадать с именами встроенных или определенных пользователем функций.
Переменные могут также быть строкового типа, например N:="My_name". Для обработки строковых констант и переменных в MathCAD 7.0 PRO введен ряд строковых функций, которые мы рассмотрим в дальнейшем. Заметим, что этот вид данных в прежних версиях системы MathCAD отсутствовал.
Системные переменные
В MathCAD содержится небольшая группа особых объектов, которые нельзя отнести ни к классу констант, ни к классу переменных. Их правильнее считать системными переменными, имеющими предопределенные системой начальные значения. Ниже указаны эти объекты и приведены их начальные значения (в скобках):
Объект Ввод Назначение
л Ctrl+P Число "пи" (3.14..)
е е Основание натурального
логарифма (2.71..)
Ctrl+Z Системная бесконечность (1(^307)
% % Процент (0.01)
TOL Погрешность численных методов (0.001)
ORIGIN Нижняя граница индексации массивов (0)
PRNCOLWIDTH Число столбцов оператора WRITEPRN (8)
PRNPRECISSION Число десятичных знаков, используемых оператором WRITEPRN (4)
FRAME Переменная счетчика кадров при работе с анимационными рисунками (0)
Пять последних переменных вводятся набором их имен. Значения системных переменных, как и обычных, могут быть в дальнейшем изменены путем присваивания им новых значений. К примеру, значение е можно изменить так, что эта переменная будет означать заряд электрона, а вовсе не основание натурального логарифма. Однако рекомендуется этого не делать во избежание двойного истолкования таких переменных.
Операторы
Операторы представляют собой элементы языка, с помощью которых можно создавать математические выражения. К ним, например, относятся символы арифметических операций, знаки вычисления сумм, произведений, производной и интеграла и т. д. После указания операндов (параметров операторов) операторы становятся исполняемыми по программе блоками. MathCAD позволяет задавать и свои новые операторы.
Функции встроенные и задаваемые пользователем
MathCAD имеет множество встроенных функций, которые обладают особым свойством: в ответ на обращение к ним по имени с указанием аргумента (или списка аргументов) они возвращают некоторое значение — символьное, числовое, вектор или матрицу. В систему встроен ряд функций, например функция вычисления синуса sin(x) аргумента х, логарифма \п(х) и т. д. Наряду со встроенными функциями могут задаваться и функции пользователя, отсутствующие в MathCAD. Благодаря встроенным функциям обеспечивается расширение входного языка системы и его адаптация к задачам пользователя.
Математические выражения
Функции (наряду с операторами) могут входить в математические выражения. Например, в выражении
У := 2*ln(x)+i
Y — переменная, 1 и 2 — числовые константы,* и+ — операторы, ln(x) — встроенная функция с аргументом х. Напоминаем, что встроенные функции в данной книге выделяются полужирным шрифтом (за исключением примеров их записей в документах, где специальных выделений нет).
При выполнении символьных операций переменные р и е используются только в символьном виде. Это значит, что их числовые значения не вычисляются при выводе результатов вычислений. К примеру, число 2л=6.141... выводится как 2п, а не как приближенное численное значение.
Присваивание переменным значений
Обычные переменные отличаются от системных тем, что они должны быть предварительно определены пользователем, т. е. им необходимо хотя бы однажды присвоить значение. В качестве оператора присваивания используется знак:=, тогда как знак = отведен для вывода значения константы или переменной. Попытка использовать неопределенную переменную ведет к выводу сообщения об ошибке — переменная окрашивается в ярко-красный цвет. Существует также жирный знак равенства, который используется либо как признак неравенства в операциях сравнения, либо как оператор приближенного равенства (в прежних версиях этот знак имел вид =).
В версии MathCAD 7.0 допустимо при первом присваивании вводить знак = (например, х=123). Система сама заменит его на знак:=. Эта возможность скорее исключение, чем правило; знаком присваивания все же является знак:=.
Если переменной присваивается начальное значение с помощью оператора:=, такое присваивание называется локальным. До этого присваивания переменная не определена и ее нельзя использовать. Однако с помощью знака = (три горизонтальные черточки) можно обеспечить глобальное присваивание, т. е. оно может производиться в любом месте документа. К примеру, если переменной присвоено таким образом значение в самом конце документа, то она будет иметь это же значение и в начале документа. Разумеется, в дальнейшем значение можно изменить и с помощью операции локального присваивания (см. рис. 11.1).
Рис. 11.1 Особенности локального и глобального присваивания переменным их числовых значений
Переменные могут использоваться в математических выражениях, быть аргументами функций или операндом операторов. Далее мы рассмотрим особые виды переменных, в частности индексированные (элементы векторов и матриц), а также переменные с заданными пределами их изменения (ранжированные переменные).
Статус присваивания не следует путать со статусом самих переменных. Все переменные, описанные выше, являются глобальными, поскольку можно определять их в любом месте документа и также в любом месте изменять их значение. Локальные переменные в системе MathCAD содержатся в телах функций пользователя. Эти функции будут рассмотрены ниже.
Переменные могут быть и размерными, т. е. характеризоваться не только своим значением, но и указанием физической величины, значение которой они хранят. Для присваивания значений таким переменным используется знак =. На рис. 11.2 представлены примеры работы с размерными переменными.
Проведение расчетов с размерными величинами и переменными особенно удобно при решении различных физических задач. При этом правильная
Рис. 11.2 Примеры задания и применения размерных переменных
размерность результата является дополнительным фактором, свидетельствующим о корректности таких расчетов
Использование незаданной переменной ошибочно Такая переменная отмечается красным цветом (в предшествующих версиях MathCAD — черным фоном) Использование несуществующих переменных в математических выражениях может привести к различным ошибкам Все они диагностируются и требуют исправления для продолжения вычислений
11.2. Ранжированные переменные и таблицы вывода
Задание ранжированных переменных
Ранжированные переменные — особый класс переменных, который в системе MathCAD зачастую заменяет управляющие структуры, называемые циклами (однако полноценной такая замена не является) Эти переменные имеют ряд фиксированных значений (либо целочисленных, либо в виде чисел), с определенным шагом меняющихся от начального значения до конечного.
Ранжированные переменные характеризуются именем и индексом каждого своего элемента Для создания ранжированной переменной целочисленного типа используется выражение
Name Nbegin Nend
где Name — имя переменной, Nbegin — ее начальное значение, Nend — конечное значение, — символ, указывающий на изменение переменной в заданных пределах (он вводится знаком точки с запятой,). Если Nbegin < Nend, то шаг изменения переменной будет равен+1, в противном случае -1
Для создания ранжированной переменной общего вида используется выражение
Name = Nbegin, (Nbegin+ Step) Nend
Здесь Step — заданный шаг изменения переменной (он может быть положительным, если Nbegin < Nend или отрицательным в противном случае).
Таблицы вывода
Ранжированные переменные широко применяются для представления числовых значений функций в виде таблиц, а также для построения их графиков. Любое выражение с ранжированными переменными после знака равенства инициирует таблицу вывода. Несколько таких таблиц показано на рис. 11.3.
Рис. 11.3 Примеры типового применения ранжированных переменных
Полезно учитывать некоторые свойства таблиц вывода:
• число строк в них не может быть больше 50 (большие таблицы придется составлять из нескольких малых);
• числа в таблицах можно задавать в требуемом формате с помощью операций задания формата чисел;
• при использовании в таблице единиц размерности все данные таблицы будут содержать единицы размерности (поделите результат с размерными переменными на размерность для указания ее только в заголовке таблицы вывода);
Есть три способа показать значения векторов:
Х,= выводится обычная таблица вывода;
Х= выводится вектор, если число его элементов меньше 10;
Х= выводится таблица вывода со слайдером, если число элементов вектора больше 10.
В таблицы вывода можно и вставлять числовые значения, и корректировать их. Естественно, это меняет значения элементов соответствующего вектора.
Применение ранжированных переменных
Важно отметить, что в сущности задание ранжированных переменных эквивалентно заданию конечных циклов. Сами ранжированные переменные являются векторами, что видно из выдачи их значений (столбец со всеми значениями переменных). Это означает, что объем памяти, занимаемый такими переменными, больше занимаемого обычными переменными.
Индексированные переменные, образующиеся в результате задания ранжированных переменных, могут применяться в последующих фор-мульных блоках. Однако в этих блоках необходимо соблюдать соответствие результатов (конечных и промежуточных) векторному типу этих переменных.
Привыкшие к обычному программированию пользователи часто забывают, что ранжированная переменная — вектор. Поэтому они пытаются выполнять с такими операциями действия, корректные лишь для обычных (скалярных) переменных. Например, задают выражение вроде f:=i*2, используя обычную переменную f, что приведет к явной ошибке — система укажет (красным цветом), что f не соответствует векторному типу. Однако если использовать выражение, например, вида
f,:= i^2
то будет получен новый вектор с именем f, элементы которого в нашем случае являются квадратами значений элементов вектора i. Более подробно особенности задания и применения векторов рассматриваются далее.
Ранжированные переменные широко применяются при построении графиков. Например, для построения графика некоторой функции f(x) прежде всего надо позаботиться о создании ряда значений переменной х, для этого она должна быть ранжированной.
11.3. Массивы, векторы и матрицы
Понятие о массивах
Важным типом данных в системе MathCAD являются массивы. Массив — имеющая уникальное имя совокупность конечного числа числовых или символьных элементов, упорядоченных заданным образом и имеющих определенные адреса. В системе MathCAD используются массивы двух наиболее распространенных типов: одномерные (векторы) и двумерные (матрицы).
Массивы-векторы
Ниже представлено три пятиэлементных массива-вектора:
Номер элемента 0 1 2 3 4 Значение О 1 4 9 16 Значение а Ь с d e Значение 0 х 2*x^2 3*x^3 4*х4
Первый из представленных массивов — числовой, два других — символьные.
Индексация элементов массивов
Порядковый номер элемента, который является его адресом, называется индексом. Напоминаем, что нижняя граница индексации задается значением системной переменной ORIGIN, которая может принимать значение 0 или 1.
Имя массива естественно увязать с именами индексированных переменных, значениями которых являются элементы массива. Для этого достаточно в виде подстрочного индекса указать индекс элемента. Например, если третий из представленных массивов имеет имя V, то его элементами при ORIGIN=0 будут индексированные переменные:
Vo=0 V1=x V2=2x2 Vз-Зх3 V4=4x4
Векторы могут быть двух типов: векторы-строки и векторы-столбцы. Например:
Несмотря на то что два этих вектора имеют одни и те же числовые значения элементов, они различны по типу и дадут разные результаты при векторных и матричных операциях, чувствительных к типу векторов.
Матрицы
Матрица может рассматриваться как совокупность ряда векторов одинаковой длины, например:
Элементы матриц являются индексированными переменными, имена которых совпадают с именами матриц. Но в этом случае для каждой индексированной переменной указываются два индекса: один — для номера строки, другой — для номера столбца. Например, для указанной матрицы М средний элемент обозначается как М1,1, а последний как М;2,2
Для задания векторов и матриц можно воспользоваться операцией Matrix... (Матрицы...) в позиции Math (Математика) основного меню, нажав клавиши Ctrl+V или введя пиктограмму с изображением шаблона матрицы. Это вызывает вначале появление диалогового окна, в котором надо указать размерность матрицы, т. е. количество ее строк т и столбцов п. Для векторов один из этих параметров должен быть равен 1. При m=1 получим вектор-столбец, а при п=\ — вектор-строку. Матрица является двумерным массивом с числом элементов тхп. Элементы векторов и матриц помещаются между большими квадратными скобками.
Ввод элементов векторов и матриц
Для указания подстрочных индексов после имени переменной вводится знак открывающей квадратной скобки:
Ввод Изображение в окне
V3 [ 2 : V32 :=
Для элементов матрицы подстрочные индексы вводятся в круглых скобках с разделением их запятыми:
Ввод Изображение в окне редактирования
М [ ( 1, 2 ) : M1,2 : =
Индексы могут иметь только целочисленные значения Они могут начинаться с нуля или с целого числа, например с единицы, в соответствии со значением системной переменной ORIGIN
Задание векторов и матриц
В отношении индексированных переменных действуют те же правила присваивания и вывода, что и для обычных В частности, с помощью операций присваивания можно создать вектор или матрицу заданной размерности и заданного типа без ручного вывода их шаблоном и без их заполнения. Это иллюстрирует рис. 11.4, на котором показано задание нулевой, единичной и специальной матриц путем поэлементного их формирования.
Рис.11.4 Задание матриц без применения их шаблонов
Такой способ задания матриц очень напоминает применяемый в обычных программах метод, при котором значения элементам матриц присваиваются в двух вложенных циклах с управляющими переменными и г. Однако это сходство чисто внешнее, так как в нашем случае ранжированные переменные i и j — векторы.
11 .4. Данные файлового типа
Еще один важный тип данных системы MathCAD — файловые данные В сущности, это те же векторы и матрицы, но с элементами, которые могут записываться в виде файлов, имеющих свои имена. Файлы данных в системе представляет собою запись матриц в их естественной форме как последовательных текстовых файлов. Это простейший тип файлов, который легко обрабатывается в программах на различных языках программирования и может создаваться такими программами, благодаря чему возможен обмен данными между системой MathCAD и другими программами.
В ходе создания файла система считывает значения элементов векторов и матриц поэлементно (для матриц слева направо и сверху вниз) и по ходу считывания преобразует числовые значения элементов в их символьные эквиваленты, использующие ASCII-коды цифр и символы, относящиеся к заданию чисел. Эти символьные значения и записываются в виде данных файлов.
Существует семь файловых операций, рассматриваемых ниже. Создаваемые или используемые ими файлы легко просмотреть любым текстовым редактором, воспринимающим тексты в виде ASCII-кодов. При считывании файлов система обеспечивает обратное преобразование символьных представлений значений элементов в их числовые значения. Начнем рассмотрение этих операций с операции считывания файла, содержащего данные векторы.
1. READ(Имя_файла)
Эта операция-функция считывает данные из файла с указанным именем Имя_файла и возвращает значение — вектор. Обычно она используется для присваивания значений векторам, например:
V:= READ(DATA)
Здесь элементы вектора V получают значения, считанные из файла с именем DATA. Естественно, что такой файл должен существовать на диске, иначе ситуация будет считаться ошибочной. Для указания полного имени файла (если он не в текущем каталоге системы) следует использовать общеупотребительные для MS-DOS составные имена, например D:\EXPER\DATA, если файл DATA расположен на диске D в каталоге EXPER.
2. WRITE(Имя_файла)
Эта операция записывает данные в файл и присваивает ему указанное имя. Данные могут порождаться математическим выражением, например:
WRITE(Имя_файла):= Выражение
Разумеется, выражение должно создавать данные векторного типа.
3. APPEND(Имя_файла)
Эта операция подобна операции WRITE, но она дописывает данные в конец уже существующего файла. Нельзя использовать другие функции для до-писывания данных, поскольку эти функции уничтожают прежние данные в файле и заносят новые.
4. READPRN(Имя_файла)
Эта операция подобна READ, но считывает данные в виде двумерного массива — матрицы. Функция READPRN возвращает матрицу, значения элементов которой однозначно связаны со значениями элементов файла. Точнее, каждая строка или столбец возвращаемой матрицы подобны соответствующим строкам или столбцам текстового представления файла.
5. WRITEPRN(Имя_файла)
Эта операция подобна WRITE, но применяется для записи матричного выражения (или матрицы) в файл с указанным именем. Структура файла подобна структуре матрицы.
6. APPENDPRN(Имя_фaйлa)
Глава 12 Оптимизация вычислений и программирование
12.1. Система SmartMath и ее возможности
Назначение системы SmartMath
Начиная с версии 4.0 система MathCAD обзавелась новым средством оптимизации вычислений — SmartMath. Это фактически экспертная система, ускоряющая вычисления в тех случаях, когда это возможно. При запущенной системе SmartMath процессор численных операций, приступая к вычислению формульного блока, запрашивает символьный процессор о том, может ли тот произвести упрощение или иное преобразование исходной формулы. Если это возможно, то вычисления производятся уже по упрощенной формуле.
Помимо оптимизации вычислений второе важное назначение системы SmartMath заключается в визуализации символьных вычислений и преобразований. Тут дело в том, что символьные вычисления, выполняемые из позиции главного меню Symbolics не наглядны: результат их помещается рядом или под исходным выражением либо замещает его. Откуда он взялся и что именно делается для получения этого результата, в данном случае неясно. К примеру, при вычислении производной некоторого выражения из результата не видно, что вычисляется именно производная, и непонятно, какого она порядка.
Хотя при выполнении символьных операций можно задать опцию вывода комментариев, лишь с применением системы SmartMath процесс символьных преобразований стал очевидным даже в том случае, когда он имеет несколько стадий и выполняется с рядом специальных указаний — директив, которые при этом отображаются в документе.
Система SmartMath более полно использует ядро символьных операций, чем символьные вычисления из подменю позиции Symbolics главного меню, и снимает некоторые ограничения на их выполнение. Например, возможно использование в преобразуемых выражениях функций пользователя. Еще важнее то, что результаты символьных преобразований, выполняемых системой SmartMath, автоматически меняются при изменении исходных символьных данных. Этого, увы, не происходит при символьных вычислениях с помощью команд в позиции Symbolics главного меню.
Описание системы SmartMath не случайно включено в эту главу вместе с разделами по программированию. Она в сущности и является частью программных средств MathCAD, реализующих линейные программы символьных вычислений. При этом блоки символьных вычислений по своей конструкции и идеология их построения очень напоминают программные блоки.
Оператор символьного вывода
Вначале для визуализации результатов символьных преобразований был введен специальный символ — удлиненная горизонтальная стрелка —>. Ее можно вызвать нажатием клавиш Ctrl+. (точка) или вызовом из палитр математических символов (для ввода отношений и символьных операций). Шаблон этого знака имеет вид • —>, где на месте черного прямоугольника вводится подвергаемое символьному преобразованию исходное выражение.
Указанный символ можно рассматривать как простой оператор символьного вывода. Если задать исходное выражение и вывести курсор из формуль-ного блока с ним, то система помещает результат его символьных преобразований после стрелки (оператора символьного вывода). Это и есть первый этап работы с системой SmartMath.
Оператор расширенного символьного вывода
В версию системы MathCAD 7.0 PRO введен еще один расширенный оператор символьного вывода. Он задается нажатием клавиш Ctrl+Shift+. (точка) или выбором из палитры символьных операций. Этот оператор имеет вид • • —>. В первый шаблон-прямоугольник вводится исходное выражение, а во второй — директивы символьных преобразований. Они будут описаны чуть позже; задаются эти директивы или вводом соответствующих ключевых слов, или из палитры символьных операций.
Кроме того, в один такой оператор можно ввести другой, с тем чтобы получить составной расширенный оператор символьного вывода и место для записи нескольких директив. Это позволяет намечать заданный путь символьных преобразований. На рис. 12.1 приведены простейшие примеры применения символьных операций без использования системы SmarthMath и с ее использованием.
Несмотря на простоту примеров, приведенных на рис. 12.1, они дают наглядное представление об отличительных особенностях реализации символьных операций с помощью операторов символьного вывода, которые были указаны выше.
Рис. 12.1 Простейшие примеры применения символьных операций
12.2. Директивы системы SmartMath и их применение
Состав директив
При вводе стрелки —> после выражения фактически (по умолчанию) над ним исполняется операция Simplify (Упростить). Но что подразумевается под этим, ясно далеко не всегда, даже несмотря на то, что многие символьные операции система выполняет вполне очевидно, например вычисление интеграла или производной в символьном виде.
При необходимости выполняемую операцию можно изменить с помощью ряда ключевых слов:
simplify — упрощение выражений;
expand — разложение выражения по степеням;
factor — разложение выражения на простые дроби;
complex — преобразования в комплексной форме;
assume — присваивание переменным неопределенного значения, даже если до этого им были присвоены значения и заданы ограничения на значения переменных;
series — разложение в ряд по заданным переменным;
float — преобразование в формат чисел с плавающей точкой;
literally — запрет символьного преобразования для последующего выражения;
ФBparfac — разложение на элементарные дроби;
Фcoeffs — возвращает коэффициенты полинома;
ФBfourier — прямое преобразование Фурье;
Фlaplace — прямое преобразование Лапласа;
Фztrans — прямое Z-преобразование;
ФBinvfourier — обратное преобразование Фурье;
Фinvlaplace — обратное преобразование Лапласа;
Фinvztrans — обратное Z-преобразование;
ФMT ---> — транспонирование матрицы;
ФМ-1—» — инвертирование матрицы;
Ф¦М¦-> — вычисление детерминанта матрицы;
ФModifier — модифицированные команды:
* assume — вводное слово для приведенных ниже определений;
* real — для var=real означает вещественное значение var;
* RealRange — для var=RealRange(a,b) означает принадлежность вещественной var к интервалу [а,Ь];
» trig — задает направление тригонометрических преобразований.
Ключевые слова допустимо набирать только строчными буквами (кроме Modifier — первая буква в этом слове должна быть прописной). В новой версии MathCAD директивы охватывают все возможные символьные преобразования. При этом их даже больше, чем при использовании операций позиции Symbolics главного меню.
Примеры применения символьных директив
Простейшие примеры на символьные операции даны на рис. 12.2. В этих примерах полезно обратить внимание на множественность применения директив, особенно в примере на применение директивы подстановки substitute.
Рис. 12.2 Примеры символьных преобразований с помощью системы SmartMath
Как видно из рис. 12.1 и 12.2, блоки системы SmartMath имеют следующие отличительные свойства:
дают хорошее визуальное представление операций;
имеют шаблоны для задания параметров и опций;
обеспечивают работу с функциями пользователя;
обеспечивают передачу данных от формулы к формуле;
допускают расширение, позволяющее использовать сразу несколько директив;
имеют конструкцию, схожую с конструкцией программных блоков.
На рис. 12.3 показано еще несколько примеров применения символьных вычислений. Здесь особенно полезно присмотреться к технике применения разложения в ряд Тейлора и преобразования Лапласа.
Рис. 12.3 Примеры применения символьных вычислений
Рис. 12.4 Примеры на применение директив complex, assume и coeffs
Как нетрудно заметить, директива упрощения simplify не имеет параметров Директива разложения в ряд Тейлора series требует указания двух параметров задания начального значения переменной х и указания числа членов ряда Директивы преобразования Лапласа laplace и решения уравнений solve требуют одного параметра — указания имени переменной (в нашем случае х) С помощью директивы solve можно решать и системы уравнений — тогда ее параметр будет вектором неизвестных
Применение директив complex, assume и coeffs поясняет рис 124 Тут важно обратить внимание на двойственность применения ключевого слова assume Оно может применяться для отмены значений переменных (берется
Рис. 12.5 Символьные операции с матрицами
Рис. 12.6 Символьное вычисления интегралов
прямо из палитры символьных директив) и для указания статуса и ограничении переменных (берется из дополнительной палитры Modifiers)
Выполнение матричных операций в символьной форме особой специфики не имеет На рис 125 показаны основные операции с матрицами, включая их транспонирование и вычисления обратной матрицы и детерминанта матрицы. Для наглядности взята матрица небольшого (2х2) порядка
Рис. 12.6 показывает применение символьных директив для вычисления интегралов Здесь, пожалуй, полезно обратить внимание на применение директивы float, позволяющей вычислить значение интеграла в виде обычного вещественного числа
Итак, мы рассмотрели большую часть символьных директив С оставшимися читатель может поработать самостоятельно, тем более что правила их применения уже были описаны
12.3. Операторы вычисления пределов функций
Для вычисления пределов функций начиная с версии MathCAD PLUS 5 0 в систему введен символьный оператор limit Помимо ввода с наборной панели Calculus Pallete его в трех формах можно ввести нажатием следующих комбинаций клавиш
Ctrl+L — ввод шаблона оператора вычисления предела функции при х, стремящемся к заданному значению,
Ctrl+A — ввод шаблона вычисления предела функции слева от заданной точки, Ctrl+B — ввод шаблона вычисления предела функции справа от заданной точки
На рис. 127 показаны примеры вычисления пределов При вычислении пределов нужно заполнить шаблоны, входящие в главный шаблон для вычисления пределов, а затем ввести функцию, имя переменной, по которой ищется предел, и значение переменной — аргумента функции
Рис. 12.7 Примеры вычисления пределов функций
Для получения результата установите после блока вычисления предела стрелку с острием, направленным вправо. Предел (если он существует) будет вычислен и появится в шаблоне у острия стрелки. Если функция не имеет предела, вместо результата появится надпись Undefine
12.4. Задание операторов пользователя
Еще одна экзотическая возможность, присущая новым версиям системы MathCAD, — задание новых операторов пользователя Такой оператор задается практически так же, как функция пользователя, но вместо имени выбирается какой-либо подходящий знак Например, можно задать оператор деления
в виде:
/(А,В):= A/B задание нового оператора деления;
/(6,2) =3 — применение функции деления;
6/2 = 3 — применение нового оператора деления.
При кажущейся простоте такого задания здесь есть проблемы. Встроенные в систему операторы нельзя переопределить. Поэтому набор доступных знаков для обозначения новых операторов ограничен. К примеру, нельзя задать новый оператор деления знаком / (он уже использован), но можно взять знак /поскольку этот символ системой не используется.
Вторая проблема связана с вводом символа нового оператора. Скорее всего, его напрямую ввести нельзя. Придется воспользоваться типовыми приемами ввода новых символов в документы Windows. Один из этих приемов — использование приложения, выдающего таблицу символов, с возможностью его экспорта из этой таблицы в документ другого приложения (в нашем случае — в документ MathCAD).
Можно также воспользоваться подходящим знаком из набора Extra Math Symbol, имеющегося в составе шпаргалок QuickSheet, доступ к которым дает центр ресурсов На рис 12.8 показан такой вариант задания нового оператора
пользователя Для перетаскивания знака можно скопировать его в буфер об мена с помощью операции Copy, а затем ввести в документ, используя операцию Paste
Рис. 12.8 Задание оператора пользователя с выбором имени из набора знаков
После того как оператор задан, его можно использовать как функцию и как оператор Примеры показаны на рис 12.8. Для применения нового оператора надо вывести его шаблон с помощью панели математических знаков (она также показана на рис 12 8) В нашем случае следует нажать кнопку xfy этой панели — она выводит особый шаблон вида • • • Введите операнды, например 6 и 2, в крайние прямоугольники, а символ оператора — в средний. Поставив после этой конструкции знак равенства, увидите результат — число 3.
Разумеется, можно задать и другие операторы, например для работы с одним операндом Так, вы можете задать оператор для пересчета значения температуры по шкале Цельсия, с тем чтобы определить соответствующее ему значение по шкале Фаренгейта, следующим образом
°С(х)=9/5 х+32 °F.=1
Затем, используя кнопку xf наборной панели символов отношения, можно выполнять операцию пересчета в виде.
37°С-986 °F
Большинство пользователей MathCAD вправе спросить и зачем только нужны эти сложности? И в самом деле, проще и естественней задать нужную операцию с помощью функции пользователя Однако есть области математики и физики, где задание новых операторов необходимо, поскольку является частью специфического языка их описания Те, кто работает в этих областях, по достоинству оценят предоставляемую возможность, несмотря на определенные неудобства, связанные с назначением новых операторов и их использованием
12.5. Задание программных модулей
Программные операторы
Вплоть до появления последних версий системы MathCAD возможности программирования в них были крайне ограниченными. Фактически MathCAD позволяла реализовать лишь линейные программы, в основе которых лежит понятие функции. Функция if и ранжированные переменные в отдельных случаях могли заменить условные выражения и циклы, но с серьезными ограничениями. Отсутствовала возможность задания завершенных программных модулей.
Эти возможности наконец появились в версии MathCAD PLUS 6.0 PRO и в расширенном варианте имеются в описываемой версии MathCAD 7.0 PRO. Они сосредоточены в наборной панели программных элементов, показанной на рис. 12.9.
Рис. 12.9 Задание программных блоков
Как видно из рис. 12.9, программный модуль в системе MathCAD превратился в самостоятельный модуль, выделяемый в тексте документа жирной вертикальной чертой. Он может вести себя как безымянная функция, не имеющая параметров, но возвращающая результат — первый пример на вычисление квадратного корня из числа 12. Программный модуль может выполнять и роль тела функции пользователя с именем и параметрами — второй пример.
Обзор программных операторов
Нетрудно заметить, что набор программных элементов для создания программных модулей весьма ограничен. Ниже приводится их перечень. Add Line — создает и при необходимости расширяет жирную вертикальную линию, справа от которой в шаблонах задается запись программного блока;
<— — символ локального присваивания (в теле модуля);
if — оператор условного выражения;
for — оператор задания цикла с фиксированным числом повторении;
while — оператор задания цикла типа "пока" (цикл выполняется, пока выполняется некоторое условие);
otherwise — оператор иного выбора (обычно применяется с if);
break — оператор прерывания;
Фcontinue — оператор продолжения;
Фreturn — оператор возврата;
Фоn error — оператор обработки ошибок.
Оператор Add Line
Оператор Add Line выполняет функции расширения программного блока. Расширение фиксируется удлинением вертикальной черты программных блоков или их древовидным расширением. Благодаря этому в принципе можно создавать сколь угодно большие программы.
Оператор <-
Оператор <— выполняет функции внутреннего локального присваивания. Например, выражение х <— 123 присваивает переменной х значение 123. Локальный характер присваивания означает, что такое значение х сохраняет только в теле программы. За пределами тела программы значение переменной х может быть неопределенным либо равным значению, которое задается операторами локального:= и глобального = присваивания вне программного блока.
Оператор if
Оператор if является оператором условного выражения. Он задается в виде:
Выражение if Условие
Если Условие выполняется, то возвращается значение Выражения. Совместно с этим оператором часто используются оператор прерывания break и оператор иного выбора otherwise.
Оператор for
Оператор for служит для организации циклов с заданным числом повторений. Он записывается в виде:
for Var e Nmin.. Nmax
•
Эта запись означает, что если переменная Var меняется с шагом+1 от значения Nmin до значения Nmax, то выражение, помещенное в шаблон, будет выполняться. Переменную счетчика Var можно использовать в выражениях программы.
Оператор while
Оператор while служит для организации циклов, действующих до тех пор, пока выполняется некоторое Условие. Этот оператор записывается в виде:
while Условие
•
Выполняемое выражение записывается на место шаблона.
Оператор otherwise
Оператор иного выбора otherwise обычно используется совместно с оператором if. Это поясняет следующая программная конструкция:
f(x):= 1 if х>0 возвращает 1, если х > О
-1 otherwise возвращает -1 во всех иных случаях
Оператор break
Оператор break вызывает прерывание работы программы всякий раз, когда он встречается. Чаще всего он используется совместно с оператором условного выражения if и операторами циклов while и for, обеспечивая переход в конец тела цикла.
Оператор continue
Оператор continue используется для продолжения работы после прерывания программы. Обычно он применяется совместно с операторами задания циклов while и for, обеспечивая после прерывания возврат в начало цикла.
Оператор return
Оператор return прерывает выполнение программы и возвращает значение своего операнда, стоящего следом за ним. Например, в приведенном ниже случае
return 0 if x<0
будет возвращаться значение 0 при любом х < 0.
Оператор on error
Оператор on error является оператором обработки ошибок, позволяющим создавать конструкции обработчиков ошибок. Этот оператор задается в виде:
Выражение_1 on error Выражение_2
Если при выполнении Выражения_1 возникает ошибка, то выполняется Выражение_2. С оператором on error связана функция error, которая обычно используется для возврата текстового сообщения об ошибке.
12.6. Примеры программирования
Несмотря на столь скромный набор программных средств, они дают системе MathCAD именно те возможности, которые ранее попросту отсутствовали: задание функций с аппаратом локальных переменных, задание различных видов циклов (в том числе вложенных), упрощение алгоритмов с помощью операций присваивания и реализация по классическим алгоритмам итерационных и рекурсивных процедур. Рекомендуется внимательно изучить рис. 12.10, на котором показана часть этих возможностей.
Обратите особое внимание на второй пример вычисления факториала. Здесь использовано задание одного программного модуля внутри другого. Вообще говоря, для нескольких подмодулей, которые должны выполняться в составе циклов, надо использовать их объединение в виде жирной вертикальной черты. Для этого, как и для исходного задания блока, служит
Рис. 12.10 Примеры задания программных блоков
команда Add Line, добавляющая в модуль дополнительную вертикальную черту для подмодуля.
Программный модуль в сущности является функцией, но описанной с применением упомянутых сугубо программных средств. Эта функция может возвращать значение, определяемое последним оператором. Это значит, что после такого модуля, выделенного как целый блок, можно поставить знак равенства для вывода значения функции. В блоке могут содержаться любые операторы и функции входного языка системы. Для передачи в блок значений переменных можно использовать переменные документа, которые ведут себя в блоке как глобальные переменные.
Обычно модулю присваивается имя со списком переменных, после которого идет знак присваивания:=. Переменные в списке являются локальными,
Рис. 12.11 Применение директив on error и return
и им можно присваивать значения при вызове функции, заданной модулем Локальный характер таких переменных позволяет присваивать им те же имена, что и глобальным переменным документа. Однако лучше этого не делать и использовать разные имена для локальных переменных программных модулей и переменных документа.
На рис. 12.11 показано применение операторов on error и return, а также действие функции error, задающей вывод надписи в желтом прямоугольнике при активизации мышью выражения, содержащего ошибку.
В этих примерах надо обратить внимание на два момента. Первый — возможность применения оператора on error вне программного блока для задания функции y(x)=sin(x)/x с исключительным значением 1 при х=0. Второй — применение этого оператора для решения уравнения, имеющего комплексные корни. Когда при таком решении задается действительное начальное приближение для х, то функция root(f,x) дает ошибку. Она исправляется с помощью оператора on error при задании функции RF(f,x), имеющей обработчик ошибок.
Задание программных модулей позволяет реализовать любые специальные приемы программирования и может служить мощным средством расширения системы путем задания новых функций.
Теперь рассмотрим достаточно сложный и поучительный пример применения программного блока. На рис. 12.12 показан документ, в котором программный модуль вычисляет коэффициенты Фурье для заданной функции — пилообразного импульса (его можно менять).
Рис. 12.12 Вычисление коэффициентов А и В разложения функции в ряд Фурье
Тут вычисление коэффициентов ряда Фурье выполнено по их классическим интегральным представлениям. Это хорошо иллюстрирует возможность применения в программных блоках весьма мощных средств входного языка системы. Продолжение этого документа, реализующее гармонический синтез, представлено на рис.12.13.
На рис. 12.13 показаны векторы коэффициентов, приведена формула гармонического синтеза исходной функции по ее гармоническому ряду и на графике проведено сопоставление исходной функции с ее представлением рядом Фурье с ограниченным числом гармоник N
Рис. 12.13 Реализация гармонического синтеза
Еще один пример применения программного модуля для задания точек некоторой функции в трехмерном пространстве показан на рис 12 14 Там же представлено построение этих точек внутри параллелепипеда
Рис. 12.14 Применение программного модуля для построения точек заданной функции в пространстве
Разумеется, подобные задачи могут в системе MathCAD решаться и без использования в явном виде программных средств Однако эти средства облегчают решение сложных задач, особенно когда имеется описание их программной реализации на каком-либо языке программирования Тогда несложно перевести реализацию решения задачи с этого языка на язык программирования системы MathCAD
Вообще, надо отметить, что проблема включения в документы программных блоков в MathCAD решена изящно и красиво, такие блоки подчас просто украшают документы и позволяют пользоваться всеми средствами не только математически ориентированного входного языка MathCAD, но и классического программирования.
Много интересного и поучительного можно найти в примерах задания и применения программных модулей раздела QuickSheet (Шпаргалки), доступного из центра ресурсов системы. Нельзя не отметить, что характер задания программных модулей в MathCAD весьма удачен: модули прекрасно вписываются в документы, выглядят просто и естественно.
Следует также отметить, что система MathCAD PLUS 7.0 допускает расширение путем включения в нее новых функций, написанных на языке Си или Си++. Впрочем, возможности системы настолько широки, что трудно себе представить необходимость в таком кардинальном шаге. Это расширение скорее может оказаться полезным для разработчиков системы, чем для подавляющего большинства ее пользователей.
Интересующиеся этой возможностью могут воспользоваться описанием ее в [14].
12.7. Погрешности вычислений и сообщения об ошибках
Большинство вычислений в системе реализовано с помощью численных методов, принципиально имеющих конечную погрешность вычислений. Так, для вычислений производной используется конечно-разностный метод с изменением шага между узлами и его подстройкой под заданную погрешность. Интегралы вычисляются методом Симпсона с заданной погрешностью, а для вычисления корней функций применяется метод секущих.
Для всех методов погрешность вычислений задается с помощью специальной системной переменной TOL. Хотя истинная погрешность может
Рис. 12.15 Влияние переменной TOL на погрешности вычисления производных и интегралов
оказаться значительно меньше значения TOL, ее влияние на результаты вычислений все же заметно (см. рис. 12.15).
При выполнении вычислений возможны ошибки. Система выводит сообщения об ошибках, закрашивая ошибочные имена идентификаторов в ярко-красный цвет. В прежних версиях MathCAD сообщения об ошибках появлялись в красных прямоугольниках с линией, отходящей от места ошибки к прямоугольнику с сообщением о ней. Однако это загромождало документ, и от такого способа в новой версии отошли. В новой версии MathCAD подробное сообщение об ошибке можно получить также, установив на выражение с ошибкой курсор мыши и нажав ее левую клавишу.
Ниже представлен список основных сообщений об ошибках:
array size mismatch — несоответствие размера массива;
cannot be defined — не может быть определено;
cannot take subscript — не содержит верхних (нижних) индексов, definition stack overflow — переполнение стека определений;
did not find solution — решение не найдено;
dimension to non real power — размерность массива — не целое число;
domain error — ошибка области определения;
duplicate — дублирование;
equation too large — слишком большое выражение;
error in constant — ошибка в константе;
error in list — ошибка в списке;
error in solve block — ошибка в блоке;
file error — ошибка в файле;
file not found — файл не найден;
illegal array operation — неверная операция с массивом;
illegal context — неверный контекст;
illegal factor — неверный множитель;
illegal function name — неверное имя функции;
illegal ORIGIN — неверное употребление ORIGIN;
illegal range — неправильный диапазон;
illegal tolerance — некорректная точность аппроксимации;
incompatible units — несовместимые единицы;
index out of bounds — индекс вне границ;
interrupted — решение прервано;
invalid order — неверный порядок;
list too long — длинный входной список;
misplased comma — неуместная запятая;
missing operand — пропущенный операнд;
missing operator — пропущенный знак операции;
must be 3-vector — должен быть трехмерный вектор;
must be array — должен быть массив;
must be dimensionless — должен быть безразмерным;
must be increasing — должен быть возрастающим;
must be integer — должен быть целым;
must be nonzero — должен быть ненулевым;
must be positive — должен быть положительным;
must be range — должен быть диапазон;
must be real — должен быть вещественным;
must be scalar — должен быть скаляром;
must be vector — должен быть вектором;
nested solve block — следующий блок решения;
no matching Given — нет соответствующего Given;
no scalar value — нескалярная величина;
not a name — не является именем;
not converging — не конвертируется;
only one array allowed — допустим только один массив;
overflow — переполнение;
significance lost — потеряны значащие цифры;
singularity — деление на нуль;
stack overflow — переполнение стека;
subscript too large — слишком большой нижний индекс;
too few arguments — слишком мало аргументов;
too few constraints — слишком мало ограничений;
too few elements — слишком мало элементов;
too few subscripts — мало нижних индексов;
too large to display — слишком велико, чтобы быть отображенным;
too many arguments — слишком много аргументов;
too many constraints — слишком много ограничений;
too many points — слишком много точек;
too many subscripts — слишком много индексов;
undefindet — не определено;
unmatched parenthesis — дисбаланс скобок;
wrong size vector — неверный размер вектора.
Сообщения об ошибках кратки, но их анализ не вызывает особых затруднений. Заметим, что приведенный список содержит далеко не все ошибки, а лишь наиболее распространенные.
12.8. Реализация численных методов в MathCAD 7.0 PRO
Серьезные пользователи, работающие с математическими системами, зачастую бывают недовольны отсутствием информации о реализованных в таких системах численных методах. Связано это с тем, что нередко от этих методов зависит успех решения особых задач, с которыми может столкнуться каждый пользователь. Поэтому немного остановимся на сути численных методов, реализованных в системе MathCAD 7.0 PRO.
Прежде всего отметим, что выражения 0*x, 0/х и 0/0 система вычисляет как 0. Точнее говоря, встречая 0 в числителе любого выражения, она не вычисляет это выражение, а просто полагает его значение равным 0. При реализации численных методов MathCAD дает точными 15 десятичных цифр для результатов вычислений, но при выводе задает число знаков в соответствии с выбранным форматом чисел.
Определенные интегралы система вычисляет методом Ромберга. Этот метод широко описан в нашей литературе (см., например, [1,2]). Поэтому, не описывая его подробно, отметим лишь, что он является вариантом метода трапеций с делением на два интервала интегрирования с итерационным уточнением решения до достижения заданной точности (она определяется значением системной переменной TOL).
Если за заданное число итераций точность не достигнута, используется более точный метод Ромберга с открытыми концами. При нем число интервалов утраивается на каждом шаге интегрирования. Этот метод увеличивает число шагов интегрирования там, где подынтегральная функция меняется более резко (например, если она имеет разрыв).
К достоинствам метода можно отнести то, что он делает все возможное, чтобы вычислить интеграл даже при сложной функции. Но для простых функций это ведет к увеличению времени вычислений. При наличии у подынтегральной функции особенностей время вычисления может резко возрастать из-за перехода от одной реализации метода Ромберга к другой. Поэтому нередко бывает оправданным применение достаточно точных формул интегрирования, например формул Ньютона — Котесса с легко предсказуемыми узлами, которые можно выбрать вдали от особых точек подынтегральной функции. Примеры такого подхода даны в Главе 14.
Для вычисления производных порядка от 0 до 5 система использует метод Риддера. Подробности о нем можно найти в [14]. Главное то, что метод вычисляет первую производную с погрешностью до 7—8 верных цифр результата, а с повышением производной на порядок число верных цифр уменьшается на единицу. Метод Риддера — итерационный (на каждой итерации шаг дифференцирования уменьшается), но число итераций ограничено. Если при реализации этого метода указанная точность не достигается, MathCAD сообщает об отсутствии сходимости.
При решении систем уравнений и неравенств используется итерационный метод Левенберга — Маркардта, содержащийся в известном и свободно распространяемом пакете алгоритмов численных методов MINPACK. Этот метод пытается найти нули или минимум среднеквадратичной погрешности при решении заданной системы уравнений или системы неравенств. При решении с применением аппарата комплексных чисел раздельно решаются действительная и мнимая части уравнений.
При решении вычисляется также вектор невязки. Если его величина меньше TOL, система возвращает вектор переменных-неизвестных. Если для решения используется функция find, при величине вектора невязки больше TOL система сообщает, что решение не найдено. Когда используется функция minerr, вектор неизвестных возвращается даже в том случае, когда значение вектора невязки больше TOL. Наконец, если не обнаружено схождение за заданное число итераций, выдается сообщение об отсутствии сходимости (как при применении функции find, так и minerr). В любых случаях величина вектора невязки определяется значением переменной ERR.
Для вычисления определителей матрицы и ее инвертирования используется LU-разложение. При этом матрица М разлагается в произведение нижней треугольной матрицы L и верхней U (т. е. M=L-U). Такой метод хорошо известен. В частности, он позволяет:
• вычислить определитель исходной матрицы как произведение диагональных элементов матриц L и U;
• вычислить обратную матрицу из решения матричного уравнения M*Vj=ej, где е — вектор с единицей на j-м месте и нулями в остальных позициях, V— вектор решения, который образует столбцы обратной матрицы для каждогоj;
Глава 13 Интегратор приложений MathConnex
13.1. Что такое MathConnex?
MathConnex — новое средство, примененное в системе MathCAD 7.0 PRO. Оно выполняет две важнейшие и чрезвычайно мощные функции:
• служит для интеграции различных приложений с системой MathCAD и обеспечения их совместной работы с использованием объектных связей OLE2;
• выполняет функции имитационного моделирования моделей, представленных типовыми блоками в виде функциональной схемы.
В сущности MathConnex является вполне самостоятельным приложением, включенным в систему MathCAD и выполняющим функции системного интегратора. Благодаря ему возможно простое и наглядное установление сложных взаимосвязей между различными приложениями: математической системой MathCAD, матричной системой MatLAB, графической системой Axum, электронными таблицами Excel из пакета Microsoft Office и др. Мощь такой объединенной системы возрастает многократно, позволяет использовать для решения задач пользователя целый арсенал различных программных систем, включая встроенные в них специфические и подчас уникальные функции.
В то же время применение системы MathConnex имеет и недостатки:
• эффективное использование этой системы требует знакомства с целым рядом новых программных средств, что порой не под силу начинающим пользователям и даже пользователям средней квалификации;
• медлительность работы системы ощущается даже на ПК класса Pentium 166/200 ММХ;
• MathConnex имеет свой собственный язык программирования, требующий усилий по его освоению;
• имеются трудности при задании текстовых комментариев на русском языке;
• подготовка проектов (документов) для MathConnex требует больших затрат времени.
Все это свидетельствует о том, что MathConnex представляет интерес для опытного пользователя, способного по достоинству оценить уникальные возможности этой системы и уверенно их применять. Это средство особенно полезно, если необходимо блочное представление и описание сложной системы, работу которой необходимо имитировать. Можно считать, что в системе MathConnex на новом (цифровом) уровне реализована идея аналоговых ЭВМ (таких, как МН-7): подготовка блок-схем моделируемых устройств и имитация (или симуляция) их работы.
Представленное ниже описание рассчитано на начальное знакомство с системой. При этом предполагается, что опытный пользователь может освоить систему более детально по множеству имеющихся в ее составе примеров и по описанию (на английском языке), входящему в комплект поставок на CD-ROM.
13.2. Описание пользовательского интерфейса системы MathConnex
Общий обзор окна
Для запуска системы MathConnex используется кнопка в инструментальной панели MathCAD с пиктограммой в виде красного шарика и трех разноцветных прямоугольников (блоков). После запуска появляется главное окно MathConnex, показанное на рис. 13.1.
Рис. 13.1 Главное окно системы MathConnex
Окно имеет строку главного меню и расположенную под ним панель инструментов (Toolbar). В правой части главного окна (экрана) системы находится большое окно для рабочего документа (Worksheet). Первоначально оно пустое. В левой части расположена палитра компонентов (Component Pallete) в виде 12 кнопок и так называемый Исследователь (Explorer).
Главное меню MathConnex
Главное меню системы имеет типичный для Windows-приложений набор позиций и относящихся к ним подменю. Поскольку главное меню MathCAD было описано, то можно опустить описание главного меню MathConnex. Укажем лишь, что все его операции относятся к деталям интерфейса MathConnex и к документам этой системы. Документы имеют расширение..mxp.
Кроме того, надо отметить специфическую для MathConnex позицию Run главного меню. Она выводит подменю со следующими операциями:
Run (Пуск) — пуск имитации работы документа;
Pause (Пауза) — пауза в имитации;
Step (Шаг) — имитация для следующего блока в режиме пошаговой работы;
Stop (Стоп) — остановка имитации;
Single Step Mode — переход к пошаговой имитации;
(Пошаговый режим)
Highlight Components — установка подсветки исполняемого компонента.
(Подсветка компонентов)
Панель инструментов MathConnex
Панель инструментов MathConnex содержит ряд кнопок, аналогичных по своему виду и назначению тем, что используются в системе MathCAD. Однако есть две новые группы кнопок, отмеченные ниже. Кнопки управления имитацией.
Run — пуск имитации;
Pause — пауза в имитации;
Step — пошаговое выполнение имитации;
Stop — остановка имитации.
Кнопки управления уровнем исполнения и размерами документа:
Back — переход к предыдущему по уровню блоку;
Zoom in — увеличение размеров документа;
Zoom out — уменьшение размеров документа.
Палитра компонентов
Палитра компонентов содержит кнопки с приведенными ниже обозначениями. Они разбиты на пять групп. Компоненты ввода и вывода данных:
Input — блок ввода;
File Read or Write — считывание или запись файла;
Ramp — блок генерации последовательностей;
Global Variable — блок задания глобальной переменной. Компоненты просмотра (инспекции) результатов:
Inspector — блок Инспектора — просмотра вычислений;
Graph — блок вывода графики;
Axum — блок графической системы Axum. Подключаемые компоненты:
MathCAD — блок математической системы MathCAD;
Excell — блок системы Excel (электронные таблицы);
MatLAB — блок математической системы MatLAB;
Connex Script — блок с описанием на языке Connex Script.
Компоненты контроля потоков данных:
Conditional — блок ввода условий;
Initialize — блок инициализации;
Wire Breaker — блок выключателя;
Stop or Pause — блок остановки и паузы. Компонента вставки текстового комментария:
Text — блок вставки текстового комментария.
13.3. Подготовка документов в MathConnex
Подготовка документов в системе MathConnex сводится к созданию блок-схемы решаемой задачи. Блок-схема может содержать указанные выше компоненты, связи между ними и текстовые комментарии. Все это размещается в окне документов.
Для ввода блоков в документы достаточно указать курсором мыши на кнопку нужного блока и, нажав и удерживая левую клавишу мыши, начать перетаскивать блок в нужное место окна редактирования документа. Отпустив левую клавишу мыши, можно зафиксировать блок в нужном месте. Таким образом реализуется известный метод перетаскивания объектов drag and drop ("перетащи и брось"). В ряде случаев система выводит диалоговые установочные окна для задания числа вводов и выводов (обозначаемых треугольниками) и некоторых других параметров.
На рис. 13.2 показан простейший пример работы с системой MathConnex. В окно документов перенесен блок системы MathCAD, и в нем построен график двух функций. Обратите внимание, что при установке блока системы MathCAD появляется панель палитр математических символов.
Рис.13.2 Пример вывода и применения блока MathCAD
Входы и выходы блоков в общем случае соединяются соответствующим образом с помощью активизации их курсором мыши, превращающимся в кисть руки, держащей карандаш На рис 13 3 показан более сложный случай подготовки документа из четырех блоков со связями между ними
Рис. 13.3 Пример построения блок-схемы из четырех блоков
Блок Input0 вводит число 123 Следующий б ток системы MathCAD Функция in0 возвращает значение числа, которое задает блок Input0 Это обеспечивает интерфейс связи между блоком ввода и блоком вычислений системы MathCAD. Поскольку данный пример чисто иллюстративный, то в математическом блоке задано суммирование числа из блока ввода с числом 57 Результат передается на выход блока с помощью интерфейсной функции out0 С помощью блока Инспектора можно наблюдать результат вычислений, а блок останова останавливает их
Для пуска имитации достаточно активизировать кнопку пуска (ее пиктограмма имеет вид зеленого треугольника) Освоив пару-другую подобных примеров, можно научиться составлять свои блок-схемы, причем не только линейные, но и со сложной разветвленной структурой
В функциональную схему имитируемых устройств могут входить блоки с описанием их довольно сложных функций на языке системы MathConnex — Connex Script Ею описание дано в конце этой главы
13.4. Редактирование блоков и документов системы MathConnex
В панели Project (Проект) Исследователя в левой части экрана виден полный перечень блоков, вставленных в окно документов Установив курсор мыши на любую позицию этого перечня и нажав быстро левую клавишу мыши, можно выделить заштрихованной рамкой соответствующий блок в окне документа Уцепившись курсором мыши за эту рамку, б ток легко переместить в любое место окна документа Это же можно сделать, указав блок курсором мыши и прямо в окне документов. Кроме того, используя шаблоны в виде маленьких темных прямоугольников по сторонам рамки, блок растягивается по вертикали, по горизонтали и по диагонали.
Двойной щелчок левой клавишей мыши позволяет ввести режим редактирования блока. При этом автоматически запускается создавшее блок приложение. На рис. 13.4 показан пример редактирования в блоке MathCAD, в котором число 57 изменено на число 456. Изменение результата в Инспекторе произойдет только после запуска имитации. Окно документа при редактировании приобретает элементы интерфейса, присущие приложению, в котором создается редактируемый блок (см. рис. 13.4).
Рис. 13.4 Пример редактирования в блоке MathCAD
После редактирования нужно установить курсор мыши на свободное поле окна редактирования и щелкнуть ее левой клавишей. При этом выделение блока исчезнет и документ предстанет в виде, готовом для пуска его имитации.
Для редактирования блоков полезно также контекстно-зависимое меню, появляющееся при нажатии правой клавиши мыши. Оно содержит различные операции, которые относятся к выделенному блоку. Это могут быть операции стирания блока, редактирования его свойств и т. д.
Одной из важных является операция редактирования свойств Properties. Она выводит диалоговое окно, показанное на рис. 13.5 для блока Input0. Такое окно позволяет (с помощью панели General) установить номер блока и задать к нему текстовый комментарий. Заметим, что MathConnex автоматически проставляет номера блоков по мере их задания, что не всегда удобно. В панели Display можно задать параметры отображения чисел в блоке.
При отладке документов полезен режим пошаговой работы. При этом на каждом шаге исполняется один блок документа. Обычно исполнение блока заметно лишь по изменению входящих в него данных, результатов вычислений и графических построений. Однако включив режим подсветки Highlight Components, можно наблюдать выделение исполняемого блока (компонента) двойной рамкой с ярко-зеленой окраской (см. рис.13. 6).
Рис. 13.5 Окно MathConnex с окном установки свойств блока Input0
Итак, редактирование и отладка блоков достаточно просты. Пожалуй, куда большие трудности представляет само составление блок-схемы для решения поставленной задачи. К сожалению, тут мало помогают рекомендации
Рис. 13.6 Иллюстрация пошагового исполнения документа с выделением исполняемого блока
общего характера, так что воздержимся от них и рассмотрим возможности системы MathConnex на примерах, включенных в комплект ее поставки.
13.5. Использование внешних систем
Главным достоинством системы MathConnex является ее интеграция с другими математическими и графическими системами. Отметим особенности и возможности последних.
Графическая система Axum
Прежде всего эта система ориентирована на построение 2D- и ЗD-графиков, способных удовлетворить самые изысканные требования в области графической визуализации. К примеру, Axum позволяет строить сложные трехмерные поверхности с функциональной окраской и с одновременным построением их проекции в виде линий равного уровня на плоскости, расположенной под этой поверхностью. Это заметно повышает степень визуализации построений.
Axum ориентирована также на быструю и наглядную обработку данных. Она содержит множество математических и статистических функций и удобный редактор математических формул, обладает большими возможностями импорта и экспорта данных.
Демонстрационная версия системы Axum поставляется на CD-ROM в комплекте поставки системы MathCAD 7.0 PRO. Ее можно найти в Internet на сервере фирмы MathSoft.
Электронные таблицы Excel
Табличный процессор Excel входит в самый популярный пакет автоматизации офисной деятельности — Microsoft Office 95 (уже появился и Office 97, но возможность его стыковки с MathConnex пока не ясна). Excel — одна из самых мощных и гибких электронных таблиц. Эта система может работать не только с двумерными, но и с трехмерными таблицами, представленными листами с двумерными таблицами.
Excel широко используется для подготовки прекрасно иллюстрированных финансово-экономических и иных документов. Она содержит сотни математических и экономических функций. Применение системы для математических расчетов всегда вызывало определенные сомнения (хотя бы в силу весьма специфических названий функций), но будучи интегрированной с системой MathCAD, табличная система Excel открывает колоссальные возможности по обработке объемных и сложных данных.
Матричная математическая система MatLAB
MatLAB одна из самых древних и глубоко почитаемых специалистами математических систем, ориентированных на численные расчеты. MathConnex обеспечивает объединение MathCAD 7.0 PRO с одной из последних версий этой матричной системы — MatLAB 4.2 (последней является версия 5.0, но возможности ее работы под управлением MathConnex пока не вполне понятны).
MatLAB, будучи изначально матричной системой, позволяет быстро и эффективно решать сложные задачи, базирующиеся на матричных методах.
Профессионалы особенно почитают MatLAB (несмотря на некоторую архаичность пользовательского интерфейса) за огромный набор ее подчас уникальных функций и возможность поистине неограниченного и весьма простого расширения. Вам достаточно в редакторе системы задать свою новую функцию, и она становится столь же доступной, как любая элементарная функция. Благодаря этому свойству на основе системы MatLAB были созданы десятки новых математических систем.
Специалистов привлекает также высокая скорость выполнения вычислений, она намного выше, чем при решении подобных задач только средствами MathCAD. Поэтому объединение функций систем MathCAD и MatLAB открывает перед серьезными пользователями систем компьютерной математики новые и почти неограниченные возможности эффективного решения сложных математических задач.
Система символьной математики Maple V
Как ни странно, но установка связей с маститым патриархом символьной математики — системой Maple V — с помощью MathConnex не предусмотрена. Возможно, фирма MathSoft посчитала для себя вполне достаточным альянс с фирмой Maple Software, который привел к включению в MathCAD несколько сокращенного ядра символьной математики системы Maple V.
По видимому, это самый серьезный недостаток MathCAD 7.0 PRO. Однако скорее всего разработчики системы пошли на это сознательно: полное объединение MathCAD с Maple V превратило бы новую систему в необычайно мощный инструмент, владеть которым должны суперпрофессионалы, а не рядовые пользователи. Но тогда имидж MathCAD как системы для всех был бы сильно подорван, несмотря на большие перспективы роста возможностей в области компьютерной алгебры.
Тем не менее нельзя не считаться с тем, что символьные вычисления MathCAD выполняет с помощью ядра Maple V: таким образом, интеграция с этой системой налицо, хотя лишь частичная — ведь новая реализация Maple V R4 содержит около 2800 (!) доступных функций, тогда как в MathCAD 7.0 PRO их порядка трех сотен. Это сравнение будет выглядеть еще более впечатляюще если учесть, что функций символьной математики в MathCAD гораздо меньше — всего-то около двух десятков.
Пример объединения MathCAD с MatLAB
Но рассмотрим конкретный пример объединения MathCAD с другой математической системой. Все, что надо сделать для использования специфических возможностей MatLAB, — это включить в состав документа блоки этой системы. При первом запуске такого документа из среды MathConnex можно
Рис. 13.7 Загрузка системы MatLAB из MathConnex
наблюдать появление характерной заставки пакета MatLAB 4.2, что показано на рис. 13.7.
На рис. 13.8 показано решение задачи на построение сферы, состоящей из шести- и пятиугольников. При этом используются матричные функции и графика системы MatLAB. На рисунке хорошо видны блоки системы MatLAB — матрицы вращения фигуры и построения ее графика. По перемещению выделяющих рамок можно судить об этапах имитации документа. В частности, будет видно, что быстрее всего исполняется блок вычислений с матрицей вращения системы MatLAB.
Рис. 13.8 Пример работы с документом, использующим функции матричной системы MatLAB 4.2
Рис. 13.9 Окно редактора MatLAB, вызванное из документа MathConnex
Данный документ иллюстрирует технику простейшей анимации. Показанная на рис. 13.8 фигура вращается, правда, с черепашьей скоростью (несмотря на просмотр на ПК Pentium 166 ММХ). Это лишний раз свидетельствует о некоторой медлительности имитации сложных процессов с помощью системы MathConnex. Но тут ничего не поделаешь: чем сложнее система имитации, тем медленнее она в работе!
Если (после остановки вычислений) выделить блок с матрицей вращения системы MatLAB и дважды щелкнуть левой клавишей мыши, то можно вызвать окно редактора MatLAB с записанной в нем функцией. Это иллюстрирует рис. 13.9. Теперь в этом окне можно редактировать документы MatLAB и входящие в них функции и математические выражения.
Этот пример наглядно показывает полный доступ к ресурсам системы MatLAB, который обеспечивается интегратором приложений MathConnex.
13.6. Примеры применения системы MathConnex
Система MathConnex поставляется с рядом примеров ее применения, соответствующие файлы которых расположены в папке Sample. Рассмотрим некоторые из этих примеров, дающие хорошее представление о возможностях системы MathConnex и технике ее применения.
На рис. 13.10 дан один из самых простых примеров: беря данные из таблицы (координаты х и у точек), документ выполняет полиномиальную регрессию, вычисляет коэффициент полинома и коэффициент корреляции.
Рис. 13.10 Пример проведения полиномиальной регрессии
Активизировав блок системы MathCAD, можно просмотреть документ, выполняющий регрессию, и входящий в него график функции регрессии и узловых точек (см. рис. 13.11).
На рис. 13.12 показан пример построения в параметрической форме объемной спирали. Матричные преобразования и построение графика здесь обеспечиваются с помощью блоков системы MathCAD. Построение кривой (довольно медленное) можно видеть в развитии.
Рис. 13.11 Часть документа системы MathCAD, вызванная из документа MathConnex
Рис. 13.12 Пример построения пространственной кривой
На рис. 13.13 приведен пример синтеза сложных колебаний и их спектрального анализа с применением метода быстрого преобразования Фурье. И хотя детали документа здесь разглядеть трудно, но, запустив его на своем ПК, вполне можно будет разобраться с этим достаточно сложным примером
Этот пример дает представление о создании с помощью MathConnex виртуальной (т. е. кажущейся) физической лаборатории, оснащенной самыми современными приборами, например осциллографом и анализатором спектра (последний из-за его высокой цены встретишь далеко не во всякой лаборатории).
Рис. 13.13 Синтез сложных колебаний и их спектральный анализ
Наконец, на рис. 13.14 дан хотя и простой пример, но с применением программной системы Visio, предназначенной для технических графических построений. С ее помощью выполнен показанный в документе рисунок RC-цепи, переходной процесс в которой имитируется.
Рис. 13.14 Пример имитации документа, созданного с применением системы Visio
Ознакомившись с другими примерами применения MathConnex, пользователь наверняка сумеет не только оценить ее интересные возможности, но и плодотворно применить на практике для решения своих задач.
13.7. Интеграция MathCAD с текстовым процессором Word 95
Когда пользователь работает над курсовой работой, дипломным проектом, диссертацией или даже книгой, то наверняка большую часть времени он тратит все же на подготовку текста, а не на математическое решение задач. Такой пользователь, возможно, еще не владеет математической системой, но, несомненно, пользуется текстовым процессором Word (например, Word 95 из известного пакета Microsoft Office 95/97).
MathConnex напрямую позволяет вставлять документы Word в свои документы. Кроме того, существует ряд ограничений на подготовку русскоязычных текстов в системах MathCAD и MathConnex. К примеру, проверку орфографии в среде MathCAD можно использовать только для англоязычных текстов, поскольку русскоязычный словарь в эту систему на входит. Есть проблемы и с подготовкой русскоязычных комментариев в документах MathConnex.
В принципе в этих системах можно установить объектную связь с текстовым процессором Word через операцию Object в подменю позиции Insert главного меню. Однако мы поступим, как говорится, с точностью до наоборот учитывая более важную и первичную роль текстового процессора Word для большинства пользователей, рассмотрим его интеграцию с системой MathCAD через объектную связь.
На рис. 13.15 показан начальный этап объектной связи Word 95 с системой MathCAD. Перед вами окно объектной связи процессора Word с другими приложениями. В нем в списке объектов необходимо найти объект MathCAD Document, установить связь в виде значка и нажать кнопку ОК.
Рис. 13.15 Установка связи текстового процессора Word 95 с системой MathCAD 7.0
После этих операций в текст документа редактора Word будет включен значок математической системы MathCAD. Это показано на рис. 13.16.
Указав на этот значок курсором мыши и дважды щелкнув ее левой клавишей, можно вызвать систему MathCAD и воспользоваться ее возможностями
Рис. 13.16 Экран редактора Word со значком MathCAD Document в документе
для подготовки нужного математического выражения или графика Это иллюстрирует рис 13 17 на примере задания интеграла.
Рис. 13.17 Пример входа в окно MathCAD и начало задания интеграла
Завершив ввод интеграла и вычисление его символьного значения, можно вернуться в среду Word закрыв окно MathCAD (см рис 13 18) Все это вы можете сделать, не покидая документа редактора Word
Указав курсором мыши на формулу и щелкнув левой ее клавишей, можно выделить формулу характерной рамкой с шаблонами. С их помощью мышью можно растягивать формулу и менять ее размеры, что показано на рис 13 19
Удобным средством для подготовки сложных документов является вставка объекта в кадр. Рис. 13.20 поясняет вставку в кадр введенной формулы.
Рис. 13.18 Завершение вставки формулы в документ редактора Word
В отличие от простой вставки вставка в кадр обеспечивает обтекание текстом введенной формулы.
Рис. 13.19 Выделенная формула, которую можно перемещать и растягивать
Рис. 13.20 Пример вставки формулы в кадр и обтекания кадра текстом
Рис. 13.21 Вызов окна MathCAD для редактирования формулы
Таким образом, вставка в текстовый процессор объектов из математической системы MathCAD дает полноценный доступ ко всем возможностям и средствам последней. Как лучше поступать: работать в Word, вставляя объекты из MathCAD, или, работая в системе MathCAD, вставлять в нее объекты из Word, — каждый пользователь должен решать самостоятельно.
Разумеется, таким же образом можно связать друг с другом MathCAD и другие, не упоминавшиеся выше системы. Необходимо лишь одно — возможность установления объектной связи. Большинство приложений, разработанных для работы в среде операционной системы Windows 95/97, такой особенностью обладают. Это открывает (даже для рядового пользователя)
Рис.13.22 Пример вставки в документ рисунка из системы MathCAD
возможности создания сложных программных систем, решающих самые разнообразные и сложные математические задачи.
13.8. Язык программирования системы MathConnex
Назначение языка программирования Connex Script
Как было показано выше, система MathConnex может использовать свои собственные блоки с вычислительными операциями. В этих блоках могут использоваться и программные конструкции, составленные на основе специального языка программирования — Connex Script. Применение таких блоков заметно расширяет возможности подготовки сложных документов. Ниже дано достаточно полное описание этого языка.
Типы данных
Connex Script имеет данные вещественного и комплексного типа. Вещественные числа задаются с двойной точностью в IEEE-формате. Числа задаются в виде:
314 3.14 5.78е14
и т. д. Для задания комплексных чисел используется знак мнимой единицы i или J, например:
5.78i 0.5e10i 4.0+ 8.7j
Бесконечность задается словом "Inf". Слово "NaN" (Not-a-Number) означает нечисловое значение, например:
х = Inf у = NaN
Операторы и функции
Операторы Connex Script имеют хорошо известный вид и назначение:
=+ -* / А — арифметические операторы;
.*./.л — матричное умножение, деление и возведение в степень;
- (NOT) xor &(AND) ¦(OR) — логические операторы;
\= >= <= > < — операторы сравнения.
Операнды логических операторов располагаются по обе стороны от них (кроме операнда - для NOT, например А&В&С или 2!=3). Такие выражения возвращают логические значения.
Connex Script содержит следующие встроенные функции:
abs — абсолютное значение;
ceil — ближайшее очередное целое;
ехр — экспонента;
floor — ближайшее предшествующее целое;
log10 — логарифм по основанию 10;
log2 — логарифм по основанию 2;
In — натуральный логарифм;
max — максимальное значение;
min — минимальное значение;
mod — остаток от деления;
nelem — число элементов в переменной;
round — округленное до ближайшего целого значение;
sign — функция знака;
sqrt — квадратный корень;
time — время в секундах с начала 1980 г.;
trunc — число десятичных позиций;
gamma — гамма-функция.
Имеются встроенные функции комплексного переменного:
conj — комплексно-сопряженное число;
im — мнимая часть аргумента;
re — действительная часть аргумента.
Тригонометрические функции представлены следующим набором: cos, sin, tan, sec, csc, cot, pi, acsc, acos, acot, asec, asin, atan.
Гиперболические функции представлены набором: cosh, coth, csch, sech, sinh, tanh, acsch, acosh, acoth, asech, asinh, atanh.
Матричные функции: cols — число столбцов матрицы, rows — число строк матрицы и det — детерминант матрицы.
Зарезервированные слова и идентификаторы
Зарезервированные слова, которые нельзя использовать в качестве идентификаторов для задаваемых пользователем объектов:
break cols complex delete else elseif end error for function if in list load nelem new real repeat return rows static until while xor
Примеры задания имен (идентификаторов) переменных:
this_is_my_variable tl х_5 R2D2
Имена должны быть заданы одним словом (допускается соединение нескольких слов символов объединения — горизонтальная черта снизу) и начинаться с буквы. Имена переменных допускается задавать только латинскими буквами.
Интерфейсные переменные
Интерфейсные переменные служат для организации обмена данными между блоками в документах MathConnex:
in0, inl,... — организуют ввод данных в блок с выходов других блоков;
out0, out1,... — организуют вывод данных из блока.
Интерфейсные переменные могут использоваться и в блоках системы MathCAD.
Создание списков, векторов и матриц
MathConnex может оперировать списками следующего вида:
{ ехрг, ехрг; ехрг, ехрг}
Списки создаются в фигурных скобках. Для разделения данных одного порядка используется запятая, а для данных разного порядка — точка с запятой.
Примеры задания списков:
Х = { 1, 2, 3} — задан вектор Х из трех элементов;
М= { 1, 2, 3; 4, 5, 6} — задана матрица М с размером 2х3.
Для задания векторов с элементами-числами можно использовать выражения вида:
start_expr: step_expr: end_expr
где start_expr — условие, задающее начальное значение списка чисел; step_ ехрг — шаг изменения ряда чисел; end_expr — условие, задающее конечное значение чисел в списке.
Например, выражение
Х-1:2:100
создает вектор чисел с именем X, у которого первое число равно 1, а последующие (до значения 100) идут с шагом нарастания 2. Другие примеры:
Y = 1:5 — вектор чисел Х от 1 до 5 с шагом по умолчанию 1;
Z = 10:1 — вектор чисел Z от 10 до 1 с шагом по умолчанию -1;
Запись выражений
Запись выражений выполняется в обычной алгебраической форме, например:
7 7+ 8* 19 / 3.3 х х+8х/у*8 х = у[5] А[3] = В[5,3]* х
Вычисление функций также задается, как обычно, например:
у = sin(x)
При этом функция возвращает значение в ответ на обращение к ней с указанием параметра функции — переменной или выражения.
Неисполняемый однострочный комментарий задается после символа двойного слэша (//), например:
х = А[ 1,2;0] // take first element from 2nd and 3rd row
Многострочный комментарий помещается между символами (/*) и (*/).
Выражения размещаются в строках. Для их разделения можно использовать символ (;), например:
х = у+ 5; z = х^
х = 0; for i in 0:5; x = x+ i; end
Для переноса длинных выражений с одной строки на другую используется символ подчеркивания ( _) в конце переносимой строки, например:
^-{i,2,3;_ 4, 5, 6;
7,S,9}//3-by-3matrix
Условный оператор if
Условный оператор if используется для создания типовой конструкции:
if boolean_expr statement 1 statement2
elseif boolean_expr statements
else statement4
end Пример применения оператора if:
if( x > у & x!- 0)
z=y/x
q = log(2-z)
elseif( у >= x & у!= 0)
z-x/y
q=2'\z
else
z-0
q=l
end
Поскольку действие таких конструкций хорошо известно, воздержимся от их подробного описания.
Конструкция цикла типа for
Для определения цикла с заданным числом повторений используется конструкция с оператором for:
for identifier in expr
statement 1
statement2
end
Например, оператор с заголовком for i in 1:10 выполняет 10 циклов, поскольку переменная цикла меняется от 1 до 10 с шагом+1. Оператор break, встречаясь в цикле, ведет к немедленному его прерыванию. Обычно этот оператор вводят в составе условного выражения с оператором if.
Глава 14 Примеры применения системы
MathCAD 7.0 PRO
14.1. Общие замечания
В этой главе описаны наиболее интересные примеры из десяти пакетов при менений систем MathCAD, размещенных на дискете, прилагаемой к книге [б]. Примеры охватывают решения широкого круга практических задач в об ласти математики, физики, электро- и радиотехники, электроники [20-39].
В педагогической среде нередко звучат нарекания, что в системах Math CAD скрыты методы реализации численных расчетов и потому последние не наглядны. Такие нарекания абсурдны, поскольку именно MathCAD позволя ет описать алгоритм любого численного метода на естественном математичес ком языке, не прибегая к таким (скорее программистским, чем математичес ким) понятиям, как условные переходы, циклы и т. д. (хотя реализация алгоритмов с ними также возможна с помощью аппарата ранжированных пе ременных, не говоря уже о применении программных блоков).
При подготовке описанных здесь примеров определенное внимание уде лялось реализации численных методов типовыми возможностями системы MathCAD, причем даже тех методов, которые реализованы встроенными функциями систем. Это, во-первых, демонстрирует возможности системы MathCAD в наглядной реализации таких методов, во-вторых, позволяет ре шать относящиеся к ним задачи с использованием тех версий системы, у ко торых соответствующих функций нет, а в-третьих, дает заметное ускорение вычислении.
Разбор описанных примеров позволит читателю существенно углубить свои знания о возможностях систем класса MathCAD и полнее использовать их в своей учебе, на практике и в научном творчестве, а также заметно умень шить затраты времени на освоение системы, поскольку избавит вас от необхо димости самостоятельно придумывать учебные примеры.
14.2. Параметрическая трехмерная графика
При построении трехмерных поверхностей и объемных фигур можно использовать параметрическое задание описывающих их функций. Фигуры задаются значениями координат х, у и z всех точек фигуры. При этом в шаблоне 3D-графики указываются три матрицы, хранящие массивы этих координат, — X, Y и Z. Ниже представлены интересные примеры применения такой графики.
Построение сферы
На рис. 14.1 показано построение в трехмерном пространстве сферы. Сфера строится из каркаса, причем число деления ее по вертикали N задается в начале построения. Затем вычисляются массивы опорных точек каркаса, которые представлены матрицами X, Y и Z.
Рис. 14.1 Построение сферы
Используя различные форматы 3D-графиков, можно выполнить рисунок сферы в различных стилях, в том числе с цветной или черно-белой окраской. Однако в таком случае каркасное построение с применением алгоритма удаления невидимых линий дает, пожалуй, наиболее наглядное представление о характере этой простой объемной фигуры. На рис. 14.1 представлено два варианта построения сферы с применением различной функциональной окраски.
Параметрическое задание трехмерной поверхности позволяет эффективно применять форматирование их графиков, в частности задавая углы обзора 3D-фигур и меняя их функциональную окраску. К тому же визуализацию таких фигур можно существенно улучшить.
Построение фигуры вращением линии вокруг оси Х
Интересные объемные фигуры можно получить, вращая некоторую кривую вокруг той или иной оси. При этом необходимо обеспечить пересчет координат всех узловых точек фигуры по известным из геометрии формулам. На рис. 14.2 показано построение такой фигуры вращением линии, заданной функцией f(x), вокруг оси X.
В документе на рис. 14.2 приведены все необходимые формулы для пересчета координат узловых точек фигуры при ее вращении. Даны также графики исходной кривой (слева внизу) и фигуры, полученной ее вращением (справа внизу). Фигура напоминает опрокинутую рюмку, лежащую на плоскости. Она построена без применения функциональной окраски, но с использованием алгоритма удаления невидимых линий.
Построение фигуры вращением линии вокруг оси Y
Таким же способом можно построить фигуру, полученную вращением исходной кривой вокруг оси Y. Это демонстрирует документ, показанный на рис. 14.3.
Чтобы показать возможности задания различного стиля рисунков, в нашем случае фигура построена с удалением невидимых линий каркаса и с при-
Рис. 14.2 Построение фигуры вращением линии вокруг осиХ
Рис. 14.3 Построение фигуры вращением линии вокруг оси Y
менением функциональной окраски. Нетрудно заметить, что это делает фигуру очень наглядной.
Построение графика объемной спирали
3D Scatter Plot — вид трехмерных графиков, особенно удобный для представления пространственного расположения множества мелких объектов, условно называемых точками. На рис. 14.4 показано применение этого графика для построения 100 точек, лежащих на пространственной спирали, напоминающей растянутую пружину.
Для каждой точки в этом случае необходимо располагать тремя координатами — X, Y и Z. Их совокупность образует три одноименных вектора. Вви-
Рис. 14.4 Построение графика вида 3D Scatter Plot для точек пространственной спирали
ду простоты алгоритма построения необходимости в более подробном его описании нет. Заметим лишь, что число точек N можно менять.
Построение пространственной фигуры — узлов, образованных толстыми "канатами"
О больших возможностях графики MathCAD PLUS 7.0 PRO свидетельствует пример, приведенный на рис. 14.5. Он же иллюстрирует применение типовых матричных функций для описания и пространственного преобразования сложной трехмерной фигуры — узлов, образованных толстыми "канатами".
Рис. 14.5 Построение фигуры — узлов, образованных толстыми "канатами" (начало документа)
Сама фигура, построенная по алгоритму, представленному на рис 145, изображена на рис 146
Рис. 14.6 Вид фигуры (конец документа)
Изменяя параметр К, можно получить множество других объемных фигур Функциональная окраска придает фигуре весьма реалистичный вид Этот пример наглядно показывает, что по возможностям графики система MathCAD 7 О PRO уже приближается к системе Mathematica 222, лидеру среди систем символьной математики для персональных компьютеров
14.3. Финансово-экономические расчеты
Финансово-экономические расчеты со сложными процентами
В наше время перехода к рыночным отношениям финансово-экономические расчеты могут интересовать многих читателей настоящей книги MathCAD не содержит специальных функций для проведения таких расчетов Однако все они легко выполняются встроенными в систему средствами
Документ на рис 147 иллюстрирует наиболее распространенные расчеты с единичным вкладом Все они основаны на применении сложных процентов, и их не так давно (в период государственной монополии на банковские расче ты и стабильных процентов годовых) можно было использовать для оценки финансовой ситуации с нашими вкладами на сберкнижках
Разумеется, вы можете подставить в них те параметры, которые соответствуют текущему положению дел в нашей рыночной экономике
Финансовые операции с регулярными вкладами
Если ваша заработная плата превышает прожиточный минимум, простой жи тейский опыт подсказывает, что лучше не копить деньги "в чулке", а периоди чески (N раз в год) относить их в Сбербанк Документ на рис 148 показывает возможные ситуации при операциях с ежегодными регулярными вкладами
Рис. 14.7 Примеры расчетов с единичными вкладами и сложными процентами
Рис. 14.8 Примеры расчетов с регулярными вкладами
При таких операциях, разумеется, не имеет значения, какие деньги вы вкладываете (рубли, марки или доллары). Главное, чтобы это были какие-то одни денежные единицы
Финансовые операции с начальным и регулярными вкладами
Если вы имели возможность внести некоторый начальный вклад и затем намерены регулярно пополнять его ежегодно N раз, расчеты придется вести по несколько иным формулам. Они приведены в документе на рис. 14.9.
Здесь особый интерес вызывает последний пример — вычисление процента годовых.
Рис. 14.9 Операции с начальным и регулярными ежегодными вкладами
14.4. Реализация численных методов
Быстрые операции с полиномами-векторами
В математических расчетах широко применяются степенные многочлены — полиномы вида
Р(х) = аn xn+ an 1 хn 1+ + а1 х1 + а0
Ценность полиномов заключается в том, что они могут достаточно точно аппроксимировать многие функции (особенно непрерывные) единообразным способом При этом, поскольку полиномы содержат суммы простых членов
Рис. 14.10 Быстрые операции с полиномами
вида an 1 xn 1, легко аналитически вычислять производные полиномов и интегралы с подынтегральной функцией в виде многочленов.
Коэффициенты полинома удобно задать как элементы вектора а. Тогда их запись (как элементов вектора) совпадает с общепринятой. При этом помимо своих коэффициентов полином характеризуется порядком п. В документе на рис. 14.10 представлены задание полинома Р(х) и примеры выполнения ряда операций с полиномом: вычисление значений полинома по заданному аргументу x, вычисление производной полинома Р'(х) и определенного интеграла с полиномом Р(х) в виде подынтегральной функции.
Для вычисления производной и интеграла используются аналитические выражения, что заметно уменьшает время вычислений и позволяет проводить их с предельно малой погрешностью. Все отмеченные вычисления оформлены в виде функций пользователя, что позволяет использовать эти функции в приложениях, связанных с применением полиномов.
Интегрирование таблично заданных функций
Часто возникает необходимость в вычислении определенного интеграла для таблично заданной функции. Тогда прямое применение встроенного в систему оператора вычисления интеграла оказывается невозможным, так как он предполагает задание подынтегральной функции в аналитическом виде.
Документ на рис. 14.11 иллюстрирует три способа вычисления определенного интеграла при табличном задании подынтегральной функции. Первые два способа (методом трапеций и Симпсона) используют довольно хорошо известные формулы интегрирования табличных данных. Третий способ использует встроенный оператор вычисления интеграла. При этом таблично заданная функция интерполируется линейной зависимостью или набором сплайновых функций (полиномов третьей степени).
Рис. 14.11 Интегрирование табличных данных
В качестве исходных данных взяты ординаты квадратичной параболы, что позволяет вычислить интеграл без этих ухищрений. Такое вычисление представлено для контроля в конце документа. Нетрудно заметить, что лишь интегрирование методом Симпсона и интегрирование со сплайн-интерполяцией дают полное совпадение с прямым интегрированием (не стоит забывать, что установленный формат цифровых данных выводит результат только с шестью значащими цифрами после десятичной точки).
Поиск минимума функции Розенброка
С помощью функции minerr возможен поиск экстремума и функций ряда переменных. Типичной тестовой функцией двух переменных является функция Розенброка, обычно применяемая для тестирования программ минимизации функций ряда переменных. На рис. 14.12 показан поиск минимума функции Розенброка с применением функции minerr.
Рис. 14.12 Поиск минимума тестовой функции Розенброка
Рис. 14.13 График функции Розенброка (окончание документа, представленного на рис. 14.12)
Поиск задается вычислительным блоком, открываемым словом Given. Фактически решается система уравнений. Два уравнения после слова Given приближенно задают условия минимума, третье уравнение (с функцией minегг) отыскивает решение, в максимальной степени удовлетворяющее заданным условиям минимума.
Функция Розенброка имеет очевидные значения х=у=\ в точке минимума. Графическое представление функции напоминает овраг (см. рис. 14.13), что затрудняет поиск минимума рядом простых методов.
Следует отметить, что тут заведомо известно, что функция имеет минимум. Если бы этого не было, пришлось бы ввести условия на значения вторых производных функции по каждой переменной.
Интерполяция по общей формуле Лагранжа
В этом пакете рассматриваются функции одной переменной вида у(х), как правило, заданные в табличном виде, т. е. рядом значений х и соответствующих им значений у. Именно так обычно задаются данные эксперимента, получаемые на различных физических или электронных измерительных установках.
Важной задачей математической обработки подобных данных является и их представление в виде некоторой математической зависимости, допускающей проведение над нею обычных математических операций, например вычисление у(х) при х, не совпадающих с исходными (узловыми) точками, интегрирование или дифференцирование функций, проведение их статистической обработки (сглаживания или фильтрации) и т. д.
Одной из самых распространенных задач такого рода является ингерпо-ляция таблично заданных функций, т. е. вычисление их значений в промежутках между узловыми точками. В математической литературе общепринято представление многих специальных функций в виде математических таблиц [14], ориентированных на интерполяцию по заданному числу узловых точек (обычно от 2 до 6).
В систему MathCAD встроены функции линейной и сплайн-интерполяции, при которых отдельно на каждом промежутке функция представляется отрезком прямой или кубическим многочленом. Последний вычисляется так, чтобы обеспечить стыковку в узловых точках как значений функции, так и ее первых двух производных (что и дает необходимую гладкость графика функции).
Эти мощные средства интерполяции имеют, однако, существенный недостаток: параметры интерполирующей функции различны на различных участках интерполяции. Другими словами, такая интерполяция не может быть сведена к одной интерполирующей формуле, что затрудняет интерполяцию математических таблиц, за исключением линейной интерполяции, дающей довольно низкую точность.
На рис. 14.14 представлен документ, задающий обобщенную формулу интерполяции методом Лагранжа. Эта формула синтезирует полином Лагранжа, используя два вектора: с координатами xi и yi узловых точек. Преимущества такого подхода в том, что число узловых точек и их расположение может быть любым (в том числе неравномерным), а для интерполяции используется единая интерполирующая формула f(x), к сожалению, довольно сложная.
При интерполяции полиномом Лагранжа степень полинома п однозначно связана с числом узловых точек. Она на единицу меньше этого числа Значения ординат интерполирующей функции в узловых точках совпадают со зна-
Рис. 14.14 Интерполяция табличных данных по формуле Лагранжа
чениями ординат узловых точек, поэтому график интерполирующей функции f(x) точно проходит через эти точки. К сожалению, при высокой степени полинома (более 5—6) погрешность вычислений его значений заметно возрастает, поэтому выбор п выше 6 на практике нецелесообразен. А это означает, что функция у(х) должна быть представлена небольшим числом достаточно точных значений.
К недостаткам интерполяции по обобщенной формуле Лагранжа относится и довольно большое время вычислений, поскольку формула интерполяции далеко не проста.
Линейное сглаживание по пяти точкам
Один из полезных видов статистической обработки функции у(х), заданной п точками, заключается в статистической обработке каждой точки с учетом положения нескольких ближайших точек. Например, простейший способ такой обработки усредняет значения этой точки и нескольких других, окружающих ее слева и справа. В результате будет получен вектор ys сглаженных значений у(х). Некоторую проблему представляет вычисление сглаженных значений точек, примыкающих к концевым, но можно вывести формулы сглаживания и для этих точек.
MathCAD 7 О PRO имеет встроенную функцию сглаживания Однако полезно проверить работу известных алгоритмов сглаживания по ряду точек. Так, линейное сглаживание по пяти точкам демонстрируег документ, показанный на рис. 14.15. На нем вначале задан вектор параболической зависимости, на которую наложены сильные случайные компоненты, создаваемые генератором случайных чисел. Далее заданы пять формул сглаживания: по две для крайних двух точек слева и справа и одна для других (эта формула просто находит среднее значение для центральной точки и окружающих ее четырех ближайших точек). Фактически кривая сглаживания состоит из ряда отрезков прямых линий, откуда и название — линейное сглаживание.
На приведенном рисунке видно, что сглаженная кривая проходит внутри облака точек и неплохо вписывается в него. При этом число сглаженных точек равно числу исходных точек (в нашем случае их 50) Разумеется, при таком большом числе сглаженных точек эффективность сглаживания оказывается заметно ниже, чем, например, при проведении регрессии с большим числом исходных точек
Рис. 14.15 Линейное сглаживание по пяти точкам
Можно повысить эффективность сглаживания, увеличивая число точек, используемых для статистической обработки заданной точки, и перейдя к кривой сглаживания в виде отрезка полинома более высокой степени, чем 1 Так, известны формулы нелинейного сглаживания по семи точкам [1,2, 28] Этих формул семь по три для крайних точек и одна для остальных Для нели нейных зависимостей, близких к параболическим или содержащих отрезки парабол, нелинейное сглаживание гораздо более эффективно, чем линейное Тем не менее и здесь гладкость кривой сглаживания невелика
Единого мнения о целесообразности повторения процедуры сглаживания у математиков нет Одни считают, что повторное сглаживание делает кривую сглаживания более плавной Другие не рекомендуют применение повторного сглаживания В целом сглаживание — эффективный инструмент предварительной обработки исходных данных Затем можно использовать более тонкие методы их обработки, например фильтрацию на основе спектрального анализа и синтеза, полиномиальную регрессию с применением полинома определенного порядка и т д
Решение дифференциального уравнения первого порядка методом Рунге — Кутта
Решение дифференциальных уравнений широко применяется в практике научно-технических расчетов Это связано с тем, что дифференциальные уравнения (и системы из них) описывают поведение различных объектов в динамике, например переходные процессы в электронных схемах или работу часового маятника Линейные дифференциальные уравнения имеют решения в виде специальных функций (скажем, функций Бесселя) Однако многие физические системы нелинейны и описываются нелинейными дифференциальными уравнениями, не имеющими аналитического решения. В этом случае приходится использовать численные методы решения дифференциальных уравнений.
Версия MathCAD 7.0 PRO содержит мощные средства для реализации численных методов решения дифференциальных уравнений. Поэтому может возникнуть вопрос: а нужно ли создавать свои документы для реализации таких методов? Ответ на него не однозначен. Если ваша цель — решение конкретной задачи, то проще воспользоваться готовыми функциями MathCAD. Они были описаны выше. Однако нередко педагоги и специалисты без должных оснований говорят о трудности реализации в системе MathCAD обычных численных методов. Это неверно! Реализация таких методов в системе MathCAD легка и наглядна. Более того, она позволяет вмешиваться в алгоритмическую реализацию методов решения, что способствует созданию новых или улучшенных методов решения дифференциальных уравнений, ориентированных на решение интересующих пользователя задач.
Здесь мы остановимся на реализации решения дифференциального уравнения i/=f(x,y) хорошо известным методом Рунге — Кутта. Пусть h — шаг приращения переменной х, i — индекс, имеющий значения от 1 до N (N — число интервалов решения с шагом h). Метод Рунге — Кутта четвертого порядка дает погрешность решения порядка h(4, что удовлетворяет самым при-щрчивым требованиям к точности численных методов. Он неоднократно подробно описывался в [6, 8, 14]. Его реализация показана на рис. 14.16.
Рис. 14.16 Начало документа, иллюстрирующего решение дифференциального уравнения методом Рунге — Кутта
Документ на рис. 14.16 состоит из двух частей. Первая часть (она и показана на рисунке) содержит ввод исходных данных и вывод графика решения. Для решения надо задать функцию f(x,y), начальное (startx) и конечное (endx) значения х, число точек решения п и начальное значение (inity) переменной у. При построении графика функции указываются нижний (L) и верхний (U) пределы изменения искомой зависимости у(х).
Вторая часть документа (см. рис. 14.17) в действительности располагается справа от первой части и размещается в обычно невидимой части документа Поэтому пользователь избавлен от созерцания тривиальных или просто не интересующих его математических формул и может сосредоточить внимание лишь на вводе исходных данных и функции f(x,y) и выводе результатов
Рис. 14.17 Конец документа, иллюстрирующего решение дифференциального уравнения методом Рунге Кутта
Рассматривая рис 14 17, нетрудно сделать вывод о наглядности реализа ции метода Рунге — Кутта По существу приведенные уравнения повторяют известные формулы этого метода часто встречающиеся в учебной литературе по численным методам решения дифференциальных уравнений
14.5. Спектральный синтез и анализ
Гармонический синтез меандра
Одним из фундаментальных положений математики, ранее казавшимся абст рактным а затем нашедшим широчайшее практическое применение, является возможность описания любой периодической функции, имеющей конечное число разрывов и непрерывность производных между ними, с помощью три гонометрического ряда Фурье [29, 30]
где k — порядковый номер гармоники, f1 — частота колебания Этот ряд со держит бесконечное число косинусных и синусных составляющих — гармо ник, причем амплитуды этих составляющих а^ и Ь^ являются коэффициента ми Фурье, определяемыми приводимыми несколько позднее интегральными выражениями
Приведенный ряд содержит бесконечное число членов и при таком пред ставлении оказывается бесполезным, поскольку время вычисления в этом случае также равно бесконечности К счастью, амплитуды гармоник для ре альных зависимостей y(t) довольно быстро уменьшаются по мере роста номеpa гармоники k. Поэтому на практике обычно приходится иметь дело с ограниченными по числу гармоник рядами Фурье.
Помимо упомянутой формы ряд Фурье можно представить в виде:
где амплитуда гармоник М^ и их фаза (р^ определяются выражениями:
Преимущество ряда в этой форме в том, что для вычисления каждого члена ряда нужно лишь один раз обращаться к довольно медленному вычислению тригонометрической функции. В дальнейшем будут приведены формулы, позволяющие вычислять коэффициенты Фурье (либо амплитуды и фазы гармоник) для любой функции y(t). Это является задачей спектрального анализа. Здесь же мы рассмотрим обратную задачу — синтеза зависимости y(t) путем вычисления ряда Фурье с ограниченным числом членов.
Теория спектрального анализа и синтеза хорошо развита, и для многих зависимостей y(t) заведомо известны значения коэффициентов Фурье или законы изменения (с частотой или номером гармоники) амплитуд и фаз гармоник. Это позволяет синтезировать наиболее распространенные зависимости y(t).
Рис. 14.18 Гармонический синтез меандра
Документ, представленный на рис. 14.18, реализует синтез периодических прямоугольных импульсов со скважностью, равной 2 (меандра). Ряд Фурье для таких импульсов содержит только синусные члены, причем лишь с нечетными k. Это упрощает синтез, который в документе реализован для 3, 7 и 15 гармоник.
Меандр — не самая удачная для синтеза зависимость, поскольку он содержит резкие скачки. Для не очень сведущего в математике пользователя
удивительно, что такого рода зависимость вообще синтезируется из синусоид, которые представляют собою гладкие функции без всяких скачков Естественно, что для получения скачков нужно брать очень большое число гармоник Тем не менее уже при 15 гармониках синтезированный сигнал напоминает меандр и отличается от него конечным временем перепада и характерной волнистостью Она усиливается после быстрых перепадов и является проявлением так называемого эффекта Гиббса [30].
Эффект Гиббса, к сожалению, невозможно устранить (и даже ослабить) лишь увеличением числа гармоник при синтезе В этом случае просто возрастает частота волнообразных колебаний, но их относительная амплитуда меняется незначительно — она доходит до 18% от амплитуды синтезируемых колебаний.
Эффект Гиббса — явление крайне нежелательное Он фактически вводит в синтезируемые колебания новые компоненты, на деле отсутствующие Это может замаскировать или сильно исказить компоненты колебания, которые интересуют исследователя. Поэтому обычно стремятся ослабить эффект Гиббса, даже за счет уменьшения точности синтеза В дальнейшем будут обстоятельно рассмотрены приемы ослабления этого эффекта
Гармонический синтез пилообразных колебаний
В литературе можно найти множество примеров разложения в ряд Фурье самых разнообразных зависимостей y(t) Используя приведенные для них значения коэффициентов Фурье, можно синтезировать самые разнообразные за висимости (сигналы) Еще одним примером может служить показанный на рис. 14 19 гармонический синтез треугольных колебаний
Рис. 14.19 Гармонический синтез треугольных колебаний
Может возникнуть вполне закономерный вопрос зачем столь сложным способом синтезировать такие простые зависимости, если они легко описываются целиком или по частям с помощью простых аналитических выражений? Действительно, если нужно просто смоделировать сигнал как временную функцию, нет необходимости синтезировать его по множеству гармоник
Однако существует большое количество теоретических методов анализа сигналов и практических устройств, основанных именно на спектральном подходе. Примером могут служить частотные фильтры и даже целые радиотехнические системы. При их анализе сигнал y(t) часто приходится разлагать в ряд Фурье для проведения в дальнейшем операций с гармониками. Имея сигнал y(t) уже в виде гармоник, можно заметно сократить время обработки сигнала и вообще убрать этап задания функции в виде временной зависимости. Во многих странах до сих пор выпускаются синтезаторы сложных колебаний, основанные на суммировании их гармонических составляющих с разными амплитудой и фазой.
Спектральный анализ методом Берга
Для некоторых простых зависимостей y(t) амплитуды гармоник могут выражаться аналитически. Примером служат отрезки синусоиды, получаемые выделением только верхней ее части. На практике такие колебания широко используются в радиотехнике, где обрезание нижней части синусоиды обусловлено работой электронных приборов (например, ламп или транзисторов) в нелинейном режиме.
Доля периода синусоиды, используемой для анализа гармоник, оценивается углом отсечки 9 (далее он измеряется в радианах). Он, к примеру, равен к, если обрезается нижняя половина синусоиды. Удобно вычислять относительную амплитуду k-тл гармоники (по отношению к усеченной амплитуде синусоидального импульса). Этот параметр для разных k впервые был вычислен Бергом.
Рис. 14.20 Спектральный анализ методом Берга
В документе на рис. 14.20 представлены формулы для вычисления коэффициентов Берга о.О (относительная постоянная составляющая сигнала), а.1 (относительная амплитуда первой гармоники) и сот (относительная амплитуда п-й гармоники). Коэффициенты Берга являются функциями угла отсечки.
График в нижней части этого документа дает наглядное представление об изменении первых четырех коэффициентов Берга с изменением угла отсечки.
Нетрудно заметить существование максимумов у этих зависимостей. Например, максимальная амплитуда первой гармоники будет достигнута при угле отсечки 120 градусов, второй гармоники — 60 градусов и т. д. Знать эти углы полезно при проектировании умножителей частоты (например, удвоителей или устроителей), работа которых основана на фильтрации одной из высших гармоник.
Спектральный анализ прямоугольного импульса с применением БПФ
Встроенные в систему MathCAD средства быстрого преобразования Фурье (БПФ) существенно упрощают процедуру приближенного спектрального анализа. БПФ — быстрый алгоритм переноса сведений о функции, заданной 2" отсчетами во временной области, в частотную область. Если речь идет о спектральном анализе функции y(t), ее нужно задавать действительными отсчетами и использовать функцию fft(V), где V — вектор, элементы которого хранят отсчеты функции y(t). Результатом будет также вектор А с комплексными элементами — отсчетами в частотной области (их вдвое меньше, чем отсчетов во временной области). Фактически действительная и мнимая части этого вектора есть коэффициенты Фурье а^ и Ъ^ что существенно упрощает их получение.
Документ на рис. 14.21 поясняет проведение спектрального анализа с применением функции fft прямого БПФ. В начале документа (левый верхний угол) задан вектор с восемью единичными отсчетами и с остальными (всего их 32) — нулевыми. Затем вычислен вектор А — результат БПФ.
Рис. 14.21 Спектральный анализ прямоугольного импульса с применением БПФ (начало документа)
В заключение (см. рис. 14.22) вычислены амплитуды гармоник и их фазы для представления импульса рядом Фурье. Завершает документ построение графиков амплитуд (модулей) и фаз первых десяти гармоник.
Чтобы лучше понять закономерности спектрального анализа, целесообразно провести его и для импульсов другой формы, например пилообразного импульса. Рекомендуем читателю проделать это самостоятельно.
Глава 15 MathCAD 7.0 PRO в Internet
15.1. Web-страница фирмы MathSoft
В настоящее время ни одна программная система не может претендовать на высокое место в рейтинге качества, если она не поддерживает работу с Internet. Система MathCAD 7.0 PRO такую поддержку обеспечивает, она позволяет напрямую (т. е. непосредственно из ее среды) отправлять файлы своих документов по электронной почте. Более того, система предоставляет возможность ведения совместной работы над документами, в частности серьезными математическими проектами.
Понять организацию совместных работ в системе MathCAD легче всего, ознакомившись с Web-страницей фирмы MathSoft, имеющей адрес www.mathsoft.com. Для доступа к ней достаточно запустить браузер Microsoft Internet Explorer, входящий в состав операционной системы Windows 95 (или любой другой браузер). Спустя некоторое время (какое именно, зависит от производительности ПК и скорости передачи информации по каналам связи), на экране появится ею основная страница (см. рис. 15.1).
Рис. 15.1 Основная страница браузера Microsoft Internet Explorer
После того как основная страница браузера (она может быть разной у разных провайдеров сети Internet) будет выведена на экран, надо в поле адресов набрать адрес фирмы MathSoft, который был приведен выше. Нажав клавишу Enter, можно через короткий промежуток времени увидеть основную с границу фирмы MathSoft, показанную на рис. 15.2. На этой странице, помимо рекламного изображения новой системы Fibonachi фирмы MathSoft, видны пиктограммы гипермедиа-ссылок и главное меню окна, также выполненное в виде этих ссылок. Активизируя их, можно путешествовать по довольно обширной странице фирмы MathSoft.
Рис. 15.2 Основная Web-страница фирмы MathSoft
Кроме кратких описаний программных продуктов, выпускаемых Mdth-Soft ее страница содержит полезные утилиты для модернизации программных продуктов, сотни файлов, содержащих информацию о применении этих продуктов, последние новости о работе фирмы и множество иных сведений К примеру, можно получить файлы расширения библиотек MathCAD 7 О PRO со многими новыми функциями, а также сервисные пакеты по улучшению этой системы Некоторые инструменты предоставляются бесплатно, другие — за довольно скромную плату
Особое место на странице занимает раздел Collaboratory (совместная работа), назначение которого заключается в объединении усилий различных пользователей в работе над совместными проектами Страница этого раздела
Рис. 15.3 Начало страницы Collaboratory
показана на рис. 15.3. Она поясняет правила совместной работы пользователей системы MathCAD 7.0 над определенными тематическими проектами, при этом пользователи могут находиться в самых разных странах. Такой вид работы носит соревновательный характер и может не только существенно ускорить решение той или иной математической или физической задачи, но и привести к зарождению взаимно полезных связей между участниками совместных проектов, в том числе международных.
Дойдя до конца страницы, можно найти гипермедиа-ссылку, открывающую доступ к тематическому перечню совместных проектов (см. рис. 15.4.) Этот перечень содержит такие темы, как математика, физика, химия, электричество, электроника и др. и фактически является перечнем имен папок, в которых хранятся файлы документов системы MathCAD. Ознакомившись с различными проектами, можно решить, в каких из них стоит принять участие или какой новый проект предложить для совместной разработки.
Рис. 15.4 Тематический перечень совместных проектов
Рис. 15.5 Страница с перечнем совместных проектов по определенной тематике
Активизировав гипертекстовую ссылку одного из разделов тематического перечня, можно получить список проектов по этому разделу (см. рис. 15.5). В сущности проекты — это обычные файлы документов MathCAD, включая краткие данные о проектах с указанием адресов, по которым можно эти проекты получить. Как правило, документы имеют подробный заголовок с указанием фамилии и имени авторов, впервые вынесших проекты на совместную разработку.
Выбрав любой документ, вы получаете возможность записать его на диск своего ПК и опробовать в работе. Впрочем, надо отметить, что есть немало документов, для которых приведена лишь ссылка (чаще всего в виде адреса электронной почты) на то, где этот документ можно добыть и на каких условиях его автор согласен на совместную работу над ним.
15.2. Настройка MathCAD 7.0 PRO для работы с Internet
Итак, через браузер Internet можно получить доступ к страницам фирмы MathSoft с проектами задач для совместной работы. Однако разработчики системы MathCAD пошли намного дальше: они обеспечили доступ к таким проектам прямо из системы MathCAD 7.0 PRO. Но прежде чем постоянно пользоваться этой возможностью, надо настроить систему на работу с Internet. Для этого служит операция Setup Internet в позиции File главного меню. При ее исполнении появляется окно установок, показанное на рис. 15.6.
В этом окне вначале надо установить адрес электронной почты (Email) пользователя. Затем надо указать адрес сервера фирмы MathSoft и данные о типе сервера, а также номере порта, с которым он работает. Все необходимые данные показаны на рис. 15.6. Кнопки внизу окна выполняют обычные функции: OK — фиксация установок, Cancel — отказ от установок и возврат к работе с документом, Help — получение справки по установкам.
Рис. 15.6 Окно установок для работы с Internet
нажав клавишу ОК, можно перейти к установке конфигурации системы. Окно этой установки показано на рис. 15.7. В этом окне можно задать тип конфигурации системы, т. е. выбрать, с каким конкретно программным обеспечением будет происходить работа в Internet (в нашем случае это приложение Outlook из пакета Microsoft Office).
Рис. 15.7 Окно установки конфигурации
Обычно серверы Internet относятся к типу HTTP. Однако возможна работа и с давно известными серверами типа FTP и GOPHER. Например, файловые серверы FTP удобны для перекачки больших файлов. Многие
Рис. 15.8 Организация тестового сеанса связи по электронной почте
программы для работы с такими серверами позволяют переписывать оставшуюся часть файла даже после прерывания связи с удаленным компьютером. Что греха таить — нередко случается, что связь прерывается в момент, когда уже затрачен не один десяток минут на перекачивание большого файла и до окончания этого процесса остается лишь пара минут. При общении через сервер HTTP в таком случае считывание файла начинается с самого начала.
Упомянутое приложение Outlook работает с типовой программой организации электронной почты — Microsoft Exchange. Завершив установку, следует провести тестовый сеанс связи по электронной почте (см. рис. 15.8). При этом программа Microsoft Exchange загружается автоматически.
Для проверки связи по электронной почте не обязательно сразу выходить на "почтовый ящик" фирмы MathSoft. Проще опробовать связь с кем-либо из своих знакомых, чей адрес электронной почты вам хорошо известен. Для проведения сеанса связи надо нажать большую кнопку с изображением желтого конверта в конце строк с адресами (или аналогичную кнопку меньших размеров в начале панели инструментов). На экране появится небольшое окно установки связи (см. рис. 15.9), в нем можно проследить за этапом набора номера абонента (сам номер, впрочем, не отображается). Компьютер, с которым вы устанавливаете связь, принято называть удаленным.
Рис. 15.9 Начало установки связи с удаленным компьютером
Если набор номера абонента прошел успешно, появляется темное окно терминала (см. рис. 15.10). В этом окне надо повторить набор своего имени и пароля, нажимая в конце набора клавишу Enter. He исключено, что эту клавишу придется нажать два-три раза и для вывода сообщения о начале набора имени. Обратите внимание на то, что в ходе набора пароля вводимые символы не отображаются. Это сделано для того, чтобы находящиеся сзади вас люди не видели, какой пароль вы вводите.
Сама передача невидима, хотя при передаче больших по размерам файлов можно увидеть типичное окошко Windows 95, в котором бумажки, представляющие файлы, эффектно перелетают из одной корзинки в другую. Если сеанс связи состоялся, кричите "Эврика!", ведь это значит, что все ваше Internet-хозяйство (модем, телефонная линия, программное обеспечение) работает нормально и можно приступать к спокойной работе в Internet.
Рис. 15.10 Конец установки связи с удаленным компьютером через терминал
15.3. Доступ к совместной работе прямо из MathCAD 7.0 PRO
После единовременной настройки на работу с Internet вы получаете постоянную возможность прямой работы над совместными проектами непосредственно из системы MathCAD. Все, что для этого нужно, — исполнить операцию Collaboratory в позиции File главного меню (см. рис. 15.11).
Рис. 15.11 Начало вхождения в сеанс совместной работы над проектами
Если вы проделываете эту операцию при отключенном сеансе связи с удаленным компьютером (вашего провайдера), то придется повторить установку сеанса связи, описанную выше. После этого (или сразу, если вы приступаете к совместной работе с уже установленной связью с удаленным компьютером) открывается окно доступа к файлам совместных проектов, показанное на рис. 15.12.
Рис. 15.12 Окно доступа к файлам совместных проектов
Нетрудно заметить, что в этом окне в левой панели представлен перечень тем проектов, идентичный тому, что был показан на странице фирмы MathSoft. Выбрав нужный проект в нижней части окна, можно наблюдать появление всех данных о выбранном проекте (файле) с указанием полного Web-адреса разработчика проекта (см. рис. 15.13).
Рис. 15.13 Выбор проекта и его загрузка в ваш ПК
Остается установить связь (см. группу кнопок в правой части окна) с разработчиком проекта и получить от него нужный файл с документом по проекту. Полученный документ размещается прямо в окне редактирования вашей системы MathCAD, теперь его можно изучать и модифицировать. Как это делается, было описано в предыдущих главах. Остается пожелать читателю с успехом использовать эту новую, интересную и мощную возможность системы MathCAD 7.0 PRO.
Заключение
Итак, мы довольно полно рассмотрели новейшую универсальную математическую систему MathCAD 7.0 PRO. Эта система достигла весьма высокого уровня развития: самые изысканные математические возможности здесь сочетаются с естественным и удобным пользовательским интерфейсом и богатой графикой. При этом интерфейс системы существенно изменен. К принципиальным новинкам можно отнести появление интегратора с другими программными системами MathConnex, возможности имитационного моделирования блочных систем и работу с данными строкового типа.
Означает ли это, что предыдущие версии системы (начиная с версии MathCAD 3.0) потеряли свое значение? Вероятно, нет, по крайней мере до тех пор, пока все еще значительное число пользователей имеют доступ лишь к персональным компьютерам с ОЗУ емкостью менее 8 Мбайт. Для многих из них возможности профессиональной версии MathCAD PLUS 7.0 PRO явно избыточны, и их вполне удовлетворит работа даже с версиями MathCAD 3 О или 4.0.
К сожалению, в отличие от самих версий системы MathCAD электронные книги для новой версии системы с примерами применений у нас крайне дефицитны и мало распространены. А на русском языке их вообще пока практически нет.
Между тем пользователь системы нуждается не только в учебных примерах работы с системой и знакомстве с ее пользовательским интерфейсом и набором операторов и функций (чему посвящена большая часть настоящей книги), но и в примерах решения реальных и массовых математических и иных задач. Этих примеров все еще явно недостаточно в существующей литературе по системе MathCAD. Заключительная глава настоящей книги частично устраняет этот пробел. Однако разработка новых пакетов применений MathCAD и электронных книг остается одной из важнейших задач внедрения этих математических систем MathCAD в практику учебных и научно-технических расчетов.
Предисловие
Автор данной книги, как и многие почитатели компьютерных вычислений, прошел долгий путь их реализации: от программируемых микрокалькуляторов до работы на малых и персональных ЭВМ, использующих универсальные языки программирования высокого уровня. Это нашло отражение в его ранних книгах [1-3]. Совсем недавно пользователь ЭВМ, решая даже простые численные задачи, был вынужден осваивать основы программирования и готовить кустарные программы, вряд ли нужные кому-либо еще, кроме их создателя. Между тем возможности компьютеров постоянно росли. Сейчас персональный компьютер (ПК) с микропроцессором класса Pentium II, III или 4 намного превосходит по своим возможностям первые ЭВМ, занимавшие целые комнаты и залы. А скорость вычислений нынешних ПК в сотни раз превосходит скорость вычислений легендарных IBM PC XT и AT (первых ПК) и вплотную приближается к скорости вычислений суперЭВМ недавнего прошлого.
В связи с этим стал меняться взгляд на назначение компьютера. На первое место вышло применение их для работы с текстовыми процессорами (например, Microsoft Word) и прикладными программными системами для автоматизации офисной деятельности. Увы, при этом многие пользователи стали забывать о том, что ЭВМ изначально создавались для вычислений, а вовсе не для замены ими популярной, но ставшей неудобной пишущей машинки. Развитие мультимедиа привело к бурному применению компьютеров в роли игровых автоматов. В результате главный стимул развития «электронного помощника» создается отнюдь не высокоинтеллектуальными задачами.
Однако времена меняются и вечные ценности, к коим принадлежат разум и образование, вновь возвращаются. В последние годы во всем мире существенно возрос интерес к серьезному применению ПК, в том числе в области математических расчетов. Этому в большой степени способствовала разработка специальных компьютерных математических программных систем, резко снизивших потребность в написании собственных программ при решении математических задач. Первое поколение таких систем [4-10] было ориентировано на операционную систему MS-DOS и появилось, казалось бы, совсем недавно — в начале 90-х гг. Так или иначе, но компьютерный мир вновь заговорил об «искусственном интеллекте», понимая под этим способность электронной машины выдавать нетривиальные решения и обучаться решению новых задач. Интерес к компьютерному моделированию в самых широких областях заметно возрос после шахматных баталий между суперкомпьютером фирмы IBM и бывшим чемпионом мира по шахматам Гарри Каспаровым. Как известно, они завершились триумфальной победой машины — или, точнее говоря, коллективного разума тех, кто создал ее и ее программное обеспечение.
В последние годы показателем интеллектуальной мощи компьютеров, в том числе и персональных, стали уже не программы для игры в шахматы, а новейшие программные системы символьной математики или компьютерной алгебры [17-38]. Созданные для проведения символьных преобразований математических выражений, эти системы были доведены до уровня, позволяющего резко облегчить, а подчас и заменить, труд самой почитаемой научной элиты мира — математиков: теоретиков и аналитиков. Уже появились открытия, сделанные с помощью таких систем — но не ими самими! Вряд ли есть хоть один действительно серьезный научный проект, связанный с математикой, где они не применялись бы в деле.
Системы символьной математики долгое время были ориентированы на большие компьютеры, С появлением ПК класса IBM PC и Macintosh и с ростом их возможностей эти системы были переработаны под них и доведены до уровня массовых серийных программных систем. Сейчас системы символьной математики (или компьютерной алгебры) выпускаются самого разного «калибра» — от рассчитанной «на всех» системы Mathcad [11-21], поразительно компактной, быстрой и удобной для простых символьных вычислений системы Derive [22-24] и до компьютерных монстров Mathematica [26-28], MATLAB [29-31] и Maple [32-38], имеющих тысячи встроенных и библиотечных функций и изумительные возможности графической визуализации вычислений:
Все эти системы работают на персональных компьютерах, оснащенных популярными операционными системами класса Windows 95/98/NT/2000. Но не только на них — есть версии под операционные системы Linux, Unix, Mac и др. Они давно знакомы пользователям больших компьютеров и даже суперкомпьютеров.
К среднему уровню таких систем относятся интенсивно развиваемые системы класса Mathcad," имеющие (в дополнение к прекрасным средствам числовых вычислений) приобретенное по лицензии у фирмы Waterloo Maple Inc. (создателя систем Maple) ядро символьных вычислений. Ядро системы Maple используется и в другой маститой системе — MATLAB, придавая ей необычные для нее возможности символьной математики.
В данной книге впервые дается достаточно полное описание одной из самых мощных и интеллектуальных систем компьютерной алгебры — Maple под Windows, ее последней реализации — Maple 7. Эта система была создана группой ученых, занимающихся символьными вычислениями (The Symbolic Group), организованной Кейтом Геддом (Keith Geddes) и Гастоном Гонэ (Gaston Gonnet) в 1980 году в университете Waterloo, Канада. Вначале она была реализована на больших компьютерах и прошла долгий путь апробации, вобрав в свое ядро и библиотеки большую часть математических функций и правил их преобразований, выработанных математикой за столетия развития. Есть реализации программы на платформах ПК Macintosh, Unix, Sun и др.
Системам класса Maple посвящены сотни книг. Отметим лишь некоторые из них [39-56], изданные за рубежом. Достаточно полный список (около 400 наименований) книг по системам Maple можно найти на сайте разработчика этой системы — компании Waterloo Maple Software (www.maplesoft.com). Однако книг по системе Maple 7 (за исключением фирменных руководств по ней) на момент сдачи рукописи данной книги в этом списке не было.
Вряд ли эта мощная математическая система, разделяющая претензии на мировое лидерство с системами Mathematica фирмы Wolfram Research Inc., нужна секретарше или даже директору небольшой коммерческой фирмы. Но, несомненно, любая серьезная научная лаборатория или кафедра вуза должны располагать подобной системой, если они всерьез заинтересованы в автоматизации выполнения математических расчетов любой степени сложности. Несмотря на свою направленность на серьезные математические вычисления, системы класса Maple необходимы довольно широкой категории пользователей: студентам и преподавателям вузов, инженерам, аспирантам, научным работникам и даже учащимся математических классов общеобразовательных и специальных школ. Все они найдут в Maple многочисленные достойные возможности для применения.
По мнению автора данной книги, сравнение системы Maple 7 с лидером среди систем компьютерной математики — системой Mathematica 4.1 — непродуктивно. У каждой программы есть свои достоинства и недостатки. А главное — у них есть свои приверженцы, которых бесполезно убеждать, что иная система в чем-то лучше. Это все равно, что сравнивать великих исполнителей джазовой и рок-музыки Луи Амстронга и Би Би Кинга. Все, кто всерьез применяют системы компьютерной математики, должны работать с несколькими системами, ибо только это гарантирует высокий уровень надежности сложных вычислений.
И все же надо отметить, что интерфейс Maple 7 более интуитивно понятен, чем у строгой Mathematica 4.1. Maple 7 на первый взгляд имеет несколько менее мощную графику, но простота управления параметрами и легкость подготовки графических процедур часто позволяет визуализировать решения математических задач с меньшими усилиями, чем при использовании системы Mathematica 4.1. Обе системы в последних реализациях сделали качественный скачок в направлении эффективности решения задач в численном виде, в частности за счет повышения скорости выполнения матричных операций.
Особенно эффективно использование Maple при обучении математике. Высочайший «интеллект» этой системы символьной математики объединяется в ней с прекрасными средствами математического численного моделирования и просто потрясающими возможностями графической визуализации решений. Применение таких систем, как Maple, возможно при преподавании и самообразовании от самых основ до вершин математики.
Практика (да и личный опыт автора) показывает, что самым трудным является первый этап освоения системы. Первое знакомство с программой многих пользователей просто подавляет — убедившись в невероятном множестве возможностей системы и не имея ее систематизированного описания (а оно поставляется в виде трех книг приличного размера, включая книги учебного характера [39, 40]), многие пользователи помещают систему в архив, где она «пылится» без дела.
Эта книга впервые основательно знакомит читателя с новейшей версией системы Maple — Maple 7 в форме подробного учебного курса. Книга написана на основе ранее изданного учебного курса по системе Maple 6 [37], существенно переработанного и дополненного. Среди новых материалов, появившихся в книге, следует отметить:
Основное внимание в книге уделено обучению основам и приемам эффективной работы с системой Maple 7. На роль всеобъемлющего справочного руководства книга не претендует, хотя во многих случаях способна выполнять роль справочника или руководства пользователя Maple 7. Хотя эта книга одна из самых обширных среди русскоязычных книг, посвященных системе Maple, автор был вынужден ограничить описание ряда важных возможностей программы. Основной акцент в книге сделан на описание возможностей системы в области математических расчетов и интерфейса пользователя. Менее подробно, а порой просто не описаны средства расширения системы и пакеты узкоспециального назначения (электронная база данных по системе Maple 7 дает полное представление о всех свыше 3000 операторов и функций этой системы, большинство из которых используется крайне редко).
Хотя книга посвящена версии Maple 7, большинство материала может использоваться и пользователями предшествующей версии Maple 6. В частности, это достигнуто выделением новых возможностей Maple 7 в отдельные разделы книги. Остальные разделы книги без каких-либо ограничений могут быть отнесены к наиболее распространенной версии Maple — Maple 6.
Структура книги
Книга содержит 17 уроков и составлена так, что эти уроки постепенно знакомят читателя с возможностями системы. Уже после прохождения урока 1 вы сможете начать осмысленно и плодотворно работать с системой. Этот урок является как бы ознакомительным курсом по работе с системой Maple 7. Он может быть полезен как для быстрого самостоятельного освоения системы не слишком требовательным пользователем, так и как основа вводного курса по системе в вузах и школах, где для основательного изучения Maple 7 не предусмотрено достаточного количества учебных часов. Кроме того, этот урок знакомит читателя с основами интерфейса пользователя и правилами работы с панелями инструментов и форматирования выражений. По сравнению с учебным курсом по системе Maple 6 [37] этот урок существенно переработан и дополнен. В частности, подробно описана инсталляция системы Maple 7 и аппаратные требования для работы с ней. Последующие уроки расширяют заведенное знакомство и постепенно готовят читателя к серьезной самостоятельной работе практически без применения какой-либо иной документации, кроме встроенной в систему справочной базы данных. Урок 2 посвящен знакомству с мощной справочной базой данных системы Maple 7 и информационной поддержкой этой системы в Интернете. Данные разделы намеренно вынесены в начало книги, поскольку успех освоения системы Maple 7 до профессионального уровня требует обучения работе со справочной базой данных. В уроке 3 описаны основные приемы работы с файлами документов, которые готовятся в Maple 7. Урок 4 дает систематизированное описание интерфейса, хотя и без многих подробностей, известных всем пользователям операционных систем класса Windows 95/98/NT/2000.
Остальные уроки посвящены базовым математическим возможностям системы Maple 7 и основам практической работы в ней. В уроке 5 описаны основные типы данных системы, а в уроке 6 — основные виды встроенных операторов и функций. Урок 7 посвящен основам программирования в среде Maple 7. Читатель должен понимать, что все описанные и в других главах команды системы Maple 7 являются одновременно и командами ее языка программирования. Именно это позволяет считать язык программирования Maple 7 языком программирования сверхвысокого уровня, проблемно ориентированным на математические расчеты. Урок 8 является одним из наиболее важных. Он посвящен решению типовых задач математического анализа, таких как вычисление сумм и произведений последовательностей, производных и интегралов, разложений функций в ряд и т. д. При этом особое внимание уделяется технике аналитических вычислений, где возможности системы Maple 7 вызывают особый интерес. Но и техника численных расчетов рассмотрена достаточно детально, в частности арифметика высокой точности. Работа с функциями и степенными многочленами (полиномами) описана в уроке 9. Урок 10 посвящен изучению главной «козырной карты» системы Maple 7 — ее возможностям в области символьной математики. Здесь описано много тонкостей работы с математическими выражениями и другими объектами системы, позволяющими выполнять множество математических преобразований и подстановок.
Два больших урока — уроки 11 и 12 — посвящены графическим возможностям системы. При этом урок 11 описывает обычные графические средства, а в уроке 12 дается описание расширенных средств, позволяющих эффективно решать задачи визуализации решений математических проблем — вплоть до подготовки графиков с элементами анимации.
Учитывая огромную роль дифференциальных уравнений в решении ряда математических, физических и технических задач, работе с ними посвящен отдельный урок 13. Наряду с решением одиночных дифференциальных уравнений первого и второго порядка рассматривается решение систем линейных и нелинейных дифференциальных уравнений как аналитическими, так и численными методами. Большое внимание уделено графической визуализации решений и построению наглядных фазовых портретов решения. В уроке отражены новые возможности Maple 7 в решении дифференциальных уравнений.
В уроке 14 рассмотрены важнейшие пакеты системы Maple 7 математической направленности. Эти пакеты поставляются вместе с системой, и применение функций из них столь же важно, как и применение средств ядра системы. Описанные в уроке 14 пакеты рассмотрены достаточно полно.
В отдельный урок 15 вынесены широко используемые на практике средства решения задач линейной алгебры. Это операции с векторами и матрицами, различные их преобразования и техника решения систем линейных уравнений. Здесь описаны такие важные пакеты, как linalg (стандартные средства линейной алгебры) и LinearAlgebra. В последний пакет входят новые средства линейной алгебры повышенной эффективности на основе алгоритмов, заимстованных из знакомого математикам пакета программ NAG (Numbering Algorithms Group). Впервые описан новый пакет анализа линейных функциональных систем LinearFunctionalSystems, появившийся в версии Maple 7.
Остальные пакеты, относящиеся к сравнительно узким областям математики и п-редставляющие ограниченный интерес для большинства читателей, рассмотрены обзорно или в виде аннотации в уроке 16. К сожалению, материал по всем пакетам расширения Maple 7 настолько обширен, что его невозможно отразить в одной книге (тем более в форме учебного курса). Тем не менее в отличие от учебного курса по системе Maple 6 [37] этот урок существенно расширен и в нем впервые описан ряд новых пакетов системы Maple, в частности пакеты PolymomialTools, OrthogonalSeries, RandomTools, MathML и XMLTools.
Последний урок 17 описывает законченное решение ряда конкретных и интересных задач из области математики, физики и радиоэлектроники. Таким образом, читатель получает возможность познакомиться с широким спектром применения системы Maple 7 — от примеров простых расчетов и вычислений (таких в книге тысячи) до решения конкретных научных и технических проблем. Материал книги иллюстрируется многими сотнями копий экрана как в виде отдельных рисунков, так и фрагментов вычислений и программных процедур в тексте книги. Они дают наглядное представление о реальном диалоге с системой и о форматах ввода и вывода.
Большинство примеров в книге оригинальны и отражают взгляд автора на методологию изучения системы Maple. В то же время в книге использованы и лучшие (и наиболее поучительные) примеры, которые приведены в обширной библиотеке процедур, составленных пользователями систем Maple разных реализаций со всего мира, и примеры из ряда учебников по системе — в том числе новейших электронных (таких; как Power Tools), размещенных в Интернете. Все заимствованные примеры также специально адаптированы применительно к новейшей версии системе Maple 7, описанной в книге.
Урок 1.
Краткая характеристика систем класса Maple
Назначение и место систем Maple
Maple — система компьютерной математики, рассчитанная на широкий круг пользователей. До недавнего времени ее называли системой компьютерной алгебры, Ито указывало на особую роль символьных вычислений и преобразований, которые способна осуществлять эта система. Но такое название сужает сферу применения системы. На самом деле она уже способна выполнять быстро и эффективно не только символьные, но и численные расчеты, причем сочетает это с превосходными средствами графической визуализации и подготовки электронных документов.
Казалось бы, нелепо называть такую мощную систему, как Maple 7 математической системой «для всех». Однако по мере ее распространения она становится полезной для многих пользователей ПК, вынужденных в силу обстоятельств (работа, учеба, хобби) заниматься математическими вычислениями и всем, что с ними связано. А все это простирается от решения учебных задач в вузах до моделирования сложных физических объектов, систем и устройств, и даже создания художественной графики (например, фракталов).
Для наших читателей (в том числе и для математиков-профессионалов) возможности систем символьной математики, реализованных на массовых ПК класса IBM PC, порой являются полной неожиданностью и вызывают вполне заслуженное удивление и восхищение, но иногда и резкое отрицание. Впрочем, последнее характерно скорее для тех, кто с системой Maple просто не работал и относится к ней, как дама из анекдота о паровозе — увидев паровоз впервые, она воскликнула: «Не может быть, что он едет без лошадей!» Maple — тщательно и всесторонне продуманная система компьютерной математики. Она с равным успехом может использоваться как для простых, так и для самых сложных вычислений и выкладок. Заслуженной популярностью системы Maple (всех версий) пользуются в университетах — свыше 300 самых крупных университетов мира (включая и наш МГУ) взяли эту систему на вооружение. А число только зарегистрированных пользователей системы уже давно превысило один миллион. Ядро системы Maple используется в ряде других математических систем, например в MATLAB и Mathcad, для реализации в них символьных вычислений.
Добавьте к этому куда большее число незарегистрированных пользователей — ведь система записана на многих компакт-дисках, лихо продаваемых в России по вполне доступным ценам. Если учесть все это, то оказывается, что популярность системы Maple ничуть не ниже, а то и выше, чем у гораздо более простых систем, таких как Derive и Mathcad. Вот и решайте, какая из систем и впрямь рассчитана на всех!
Maple — типичная интегрированная система. Она объединяет в себе:
Ко всем этим средствам имеется полный доступ прямо из программы. Maple — одна из самых мощных и «разумных» интегрированных систем символьной математики, созданная фирмой Waterloo Maple, Inc. (Канада).
Во многих обзорах систем компьютерной алгебры Maple справедливо считается одним из первых кандидатов на роль лидера среди них. Это лидерство она завоевывает в честной конкурентной борьбе с другой замечательной математической системой — Mathematica 4.1. Каждая из данных двух систем имеет свои особенности, но в целом эти две лидирующие системы практически равноценны. Однако надо отметить, что появление новейшей версии Maple 7 означает очередной виток в соревновании этих систем за место лидера мирового рынка. Причем виток на этот раз раньше сделала система Maple 7.
Система Maple прошла долгий путь развития и апробации. Она реализована на больших ЭВМ, рабочих станциях Sun, ПК, работающих с операционной системой Unix, ПК класса IBM PC, Macintosh и др. Все это самым положительным образом повлияло на ее отработку и надежность (в смысле высокой вероятности правильности решений и отсутствия сбоев в работе). Не случайно ядро системы Maple V используется целым рядом других мощных систем компьютерной математики, например системами класса Mathcad и MATLAB. А совсем недавно упрощенная версия Maple для операционной системы Windows СЕ стала использоваться в миниатюрных компьютерах фирмы Casio — Cassiopeia.
Известен ряд версий системы Maple, называемых реализациями. Одной из самых известных реализаций является реализация Maple V R5. В ней появилась возможность работы с электронными таблицами, несколько улучшен интерфейс пользователя (введены палитры для ввода математических символов и расширены возможности управления мышью), стала возможной запись файлов в формате HTML и введена возможность обмена объектами между документами методом перетаскивания (Drag and Drop).
Основное достоинство предшествующей версии Maple 6 — это существенное ускорение вычислений с большими матрицами, достигнутое применением алгоритмов матричных вычислений известного пакета NAG (Numbering Algorithms Group). Хотя данная книга посвящена новейшей реализации системы Maple 7, ее основной материал будет полезен и пользователя реализации Maple 6.
Новейшая версия систем Maple — Maple 7 появилась 21 июня 2001 г. Корпорация Waterloo Maple оценивает ее появление как новый виток в борьбе за мировое лидерство в области автоматизации математических вычислений — как численных, так и, в особенности, символьных. Являясь одними из лучших и надежных систем компьютерной математики, Maple 6 и Maple 7 становятся мировым стандартом в области математических вычислений.
На многих пользователей систем символьной математики удручающее впечатление может произвести наличие хотя и редких, но ошибочных решений. В самом деле, мы немедленно стерли бы с жесткого диска табличный процессор, давший ошибку в бухгалтерских расчетах, и перестали бы доверять системе проверки орфографии, дающей ошибки при проверке. Впрочем, последнее случается сплошь и рядом — пока нет таких систем, которые корректно проверяли бы орфографию и грамматику. Тот же текстовый процессор Word 97/2000 постоянно ошибается при проверке орфографии текстов, в чем автор не раз убеждался, готовя с его помощью большие книги.
У систем компьютерной алгебры нет проблем с обработкой естественного языка — математика полностью формализованная наука. Однако в них много своих условностей и неоднозначностей, которые здесь как бы заранее запрограммированы. К примеру, что считать более простым выражением: tan(x) или sin(x)/cos(x)? Система Derive полагает более простым выражением tan(x) и преобразует к нему выражение sin(x)/cos(x). А вот система Maple V ничуть не менее справедливо считает, что функции sin(x) и cos(x) математически более простые, чем tan(.r), и вообще — tan(x), по сути, не самостоятельная функция, a sin(x)/cos(x). Поэтому Maple V везде вместоtm(x) будет выводить sin(x)/cos(x).
Представьте себе, что таких условностей десятки и вы ничего об этом не знаете. Поэтому не стоит удивляться, что символьное значение какой-либо производной или интеграла может заметно отличаться по виду от приводимого в том справочнике, из которого взято исходное выражение для проверки правильности работы системы. Часто, чтобы получить результат в необходимом виде, необходимо приложить определенные усилия либо дать конкретные указания системе о типе преобразований в ходе вычислений. Указания реализуются в виде параметров к командам и функциям системы.
По образному выражению автора обзора [40], решение задач в символьном виде напоминает переход через поле, густо напичканное минами. Удивительно не то, что системы символьной математики могут ошибаться и «взрываться», а то, что число этих ошибок мало и уже на нынешнем этапе развития таких систем это не мешает их серьезному практическому применению. Стоит еще раз подчеркнуть, что Maple в этом отношении является одной из лучших систем, реализованных на ПК класса IBM PC и Macintosh с достаточно умеренными техническими характеристиками. Кстати говоря, для ПК Macintosh последней реализацией пока что является Maple V R4.
Один знакомый автор любил говорить, что компьютеры делают умных людей умнее, а глупых — глупее. Пожалуй, это более чем справедливо для людей, сидящих у ПК с установленной на нем системой символьной математики. Лишь те, кто понимают суть математических вычислений и имеют должную математическую интуицию и подготовку, могут получить от таких систем самые серьезные и даже новые результаты. Те же, кто думает, что системы символьной математики заменят им математические знания, глубоко ошибаются и могут получить красочно выглядящие, но абсолютно неверные и даже псевдонаучные результаты!
Однако вряд ли следует утрировать вероятность выдачи системами символьной математики ошибочных результатов — даже самые опытные математики-аналитики тоже могут ошибаться в своих вычислениях. В разработке таких систем, как Maple или Mathematica принимают участие крупные математические школы всего мира! Эти системы — кладезь математических понятий, сведений и знаний. Они способны заменить самые серьезные справочники по математическим вычислениям в любой области науки, техники и образования. Кроме того, они имеют множество средств для проверки корректности выполняемых вычислений, например путем подстановки полученных результатов в исходные выражения.
Кстати, одно из самых действенных приемов проверки таких средств — решение задачи одновременно на нескольких системах символьной математики. Не случайно уже сейчас можно заметить тенденцию к объединению математических систем. Эта новая и безусловно прогрессивная тенденция в ближайшее время приведет к созданию автоматизированных рабочих мест математиков и ученых других близких специальностей. Разработки таких рабочих мест (разумеется, компьютер на них — главный инструмент), в том числе с использованием систем Maple, уже появились и о них немного говорится в заключении. В добавление к сказанному надо отметить, что Maple 7 — одна из самых надежных систем компьютерной математики. Надежных прежде всего в смысле высокой достоверности получения правильных результатов при сложных символьных вычислениях. Эта первая система компьютерной математики, успешно прошедшая полное тестирование на задачах повышенной сложности, предлагаемых для оценки качества подобных систем.
Основой для работы с символьными преобразованиями в Maple является ядро системы. Оно содержит сотни базовых функций и алгоритмов символьных преобразований. В новых реализациях объем ядра достигает 6-7 Мбайт. Имеется также основная библиотека операторов, команд и функций. Многие встроенные в нее функции, как и функции ядра, могут использоваться без какого-либо объявления, другие нуждаются в объявлении. Кроме того, имеется ряд подключаемых пакетов (packages).
Дополнительные функции из пакетов могут применяться после объявления подключения пакета с помощью команды with(name), где name — имя применяемого пакета. Общее число функций, с учетом встроенных в ядро и размещенных в пакетах в системе Maple V R4 приближается к 2500, в реализации R5 — к 2700, а в Maple бив Maple 7 оно уже превышает 3000. Это означает, что большинство задач может решаться в режиме прямого диалога с системой без использования каких-либо средств программирования.
Maple способна решить огромное число задач вообще без какого-либо программирования в общепринятом смысле этого понятия. Достаточно лишь описать алгоритм решения задачи и разбить его на отдельные вопросы, на которые система Maple способна дать ответы. Более того, есть тысячи задач, алгоритмы решения которых уже реализованы в виде функций и команд системы. Тем не менее это вовсе не означает, что в Maple нельзя программировать. На самом деле Maple поддерживает три собственных языка: входной, реализации и программирования.
Maple имеет входной язык сверхвысокого уровня, ориентированный на решение математических задач практически любой сложности. Он служит для задания системе вопросов или, говоря иначе, задания входных данных для последующей их обработки. Это язык интерпретирующего типа и по своей идеологии напоминает добрый старый Бейсик. И такое сходство вовсе не недостаток, а огромное достоинство — ведь именно с Бейсика начался подлинный диалог пользователя напрямую с компьютером! Входной язык имеет большое число заранее определенных математических и графических функций, а также обширную библиотеку, подключаемую по мере необходимости.
Имеет Maple и свой язык процедурного программирования — Maple-язык. Этот язык имеет вполне традиционные средства структурирования программ: операторы циклов, операторы условных и безусловных переходов, операторы сравнения, логические операторы, команды управления внешними устройствами, функции пользователя, процедуры и т. д. Он также включает в себя все команды и функции входного языка, ему доступны все специальные операторы и функции. Многие из них являются весьма серьезными программами, например символьное дифференцирование, интегрирование, разложение в ряд Тейлора, построение сложных трехмерных графиков и т. д.
Не следует путать входной язык и язык программирования системы (Maple-язык) с языком ее реализации. Им является один из самых лучших и мощных универсальных языков программирования — Си. На нем написано ядро системы, содержащее тщательно оптимизированные процедуры. Большинство же функций, которые содержатся в пакетах, написаны на Maple-языке, благодаря чему их можно модифицировать и даже писать свои собственные библиотеки. По разным оценкам, лишь от 5 до 10 % средств Maple создано на языке реализации — все остальное написано на Maple-языке. Таким образом, система имеет развитые возможности для расширения и адаптации к задачам пользователя. Для подготовки программ на языке Maple могут использоваться внешние редакторы, но система имеет и свой встроенный редактор, вполне удовлетворяющий требованиям большинства пользователей. Он открывается командами New и Open в меню File. Этот редактор можно использовать для редактирования файлов программ или математических выражений. Версии Maple для MS-DOS имеют свой редактор программ и отладчик с функциями проверки синтаксиса. После версии Maple V для Windows необходимость в этих средствах практически отпала.
Синтаксис структурных операторов языка Maple напоминает смесь Бейсика и Паскаля. Это облегчает знакомство с ним тем, кто имеет хотя бы начальный опыт программирования на этих языках. По близким к Бейсику правилам (и при помощи общепринятых математических сокращений) выполняется и ввод математических выражений в диалоговом режиме работы с системой.
Вообще говоря, системы Maple ориентированы на решение сложных задач, хотя и решение в них простых задач вполне возможно и уместно. Возможно, для решения таких задач вполне подойдет весьма простая, быстрая и надежная система Derive или система Mathcad, в которую (начиная с версии 3.0 под Windows) включен приобретенный по лицензии фирмы Waterloo Maple упрощенный символьный процессор Maple. Однако по числу доступных пользователю математических функций эти скромные системы не идут ни в какое сравнение с патриархом символьной математики — системой Maple.
Система Maple 7 может с успехом применяться для решения самых серьезных математических задач аэродинамики, теории поля, теплопроводности и диффузии, теоретической механики и др. Решение таких задач нередко является многолетним трудом элитных научных коллективов.
Впрочем, поскольку система может быть установлена на любом современном ПК, ее можно (да и нужно) применять как можно чаще и по любому поводу. Это способствует как приобретению практических навыков работы с Maple, так и росту математических познаний тех, кто с ней работает.
Перечислим основные возможности предшествующей версии системы Maple 6.
Интерфейс:
Символьные и численные вычисления:
Работа с уравнениями в численном и символьном виде:
Работа с функциями:
Линейная алгебра:
Графическая визуализация результатов вычислений:
Программирование:
Система Maple 7 приобрела ряд новых возможностей. Кратко отметим их:
В сочетании с сохраненными возможностями предшествующей версии системы это дает новой версии Maple 7 обширные возможности в эффективном решении широкого класса математических и научно-технических задач, а также задач в области образования.
В этой книге рассматривается реализация системы Maple 7, требующая:
Установка системы производится обычно с компакт-диска. Обычно компакт-диск с инсталляционной версией Maple 7 стартует автоматически. При этом появляется окно Мастера установки со шкалой выполнения предварительной подготовки, показанное на рис. 1.1.
Затем Мастер автоматически переходит к окну, в котором просит ввести серийный номер программного продукта, который имеется в документации к системе или указан на конверте с компакт-диском.
Для продолжения установки следует щелкнуть на кнопке Next. Это приводит к появлению следующего окна и т. д. В каждом окне после указания необходимых данных нужно нажать кнопку Next или Yes. Работа с остальными окнами мастера установки описана ниже.
Рис. 1.2. Окно с приглашением к установке системы Maple 7
На рис. 1.3 показано следующее окно Мастера, которое служит для задания папки, в которой будут установлены файлы Maple 7. Вы можете оставить предлагаемую по умолчанию папку, а можете ввести любую другую.
Если папка, заданная по умолчанию в поле Destination Folder вас не устраивает, то вы можете определить другую. Для этого щелкните на кнопке Browser. Появится стандартное окно Choose Folder, показанное на рис. 1.4. В этом окне можно задать желаемую папку, либо явно указав ее имя в поле Path, либо выбрав существующую в дереве Directories.
Система Maple 7 может быть установлена как для индивидуального пользователя, так и для многих пользователей (сетевой вариант). Данный выбор можно осуществить в следующем окне Мастера установки, показанном на рис. 1.5. В этом окне надо задать вариант установки, щелкнув в соответствующем положении переключателя. Здесь же можно уточнить директорию (по умолчанию Users) для хранения файлов пользователей.
Следующий этап установки — определение имени ярлыка, активизацией которого в дальнейшем будет запускаться система. Для этого служит окно Мастера установки, показанное на рис. 1.6. В этом окне можно оставить имя ярлыка Maple 7, предлагаемое по умолчанию, ввести вместо него другое или выбрать имя из списка, представленного в нижней части окна. Разумно согласиться с предложенным Мастером именем.
Рис. 1.3. Окно задания папки для размещения файлов системы Maple 7
Рис. 1.4. Задание имени папки для размещения файлов системы Maple 7
Рис. 1.5. Выбор установки системы Maple 7 для одного пользователя или для многих пользователей
Рис. 1.6. Выбор ярлыка для запуска системы Maple 7
На этом предварительная часть установки завершается, и нажатием кнопки Next в окне рис. 1.6 можно перейти к этапу копирования файлов в намеченную папку (учтите, что часть файлов копируется и в папки с операционной системой Windows, установленной на вашем ПК). В процессе копирования файлов окно Мастера установки сменяется информационными окнами, которые сообщают о возможностях Maple 7. Одно из таких окон представлено на рис. 1.7. Кроме того, на экране будет отображаться окно с индикатором процесса копирования файлов, который позволяет судить о том, какая часть работы уже проделана, а также какие файлы копируются в данный момент.
Рис. 1.7. Информационное окно и индикатор процесса копирования файлов
В процессе копирования файлов могут быть ситуации, когда встречается файл с таким же именем, что и копируемый. В этом случае Мастер установки сообщит вам об этом с помощью соответствующего сообщения. Чаще всего такая ситуация встречается, если Maple 7 устанавливается поверх прежней версии системы Maple. Если пользователь твердо намерен установить новую версию системы, то рекомендуется предварительно удалить предшествующую версию (с помощью соответствующих программ и средств, разумеется). В противном случае придется решать, какой файл будет занимать место на диске — останется старый или его заменит новый (естественно, рекомендуется установить новый файл).
По завершении копирования файлов появляется окно Мастера с запросом о том, надо ли помещать ярлык запуска системы на рабочий стол, изображенное на рис. 1.8.
Рис. 1.8. Запрос о размещении ярлыка запуска Maple 7 на рабочий стол
Рис. 1.9. Окно Мастера установки с сообщением о ее завершении
Вы можете отказаться от такого размещения и запускать Maple 7 из меню Пуск или из Проводника. Но, если вы намерены работать с Maple 7 часто, то рекомендуется поместить ярлык на рабочий стол Windows.
Установка завершается вывбдом окна Мастера установки, в котором сообщается о ее успешном завершении. Данное окно представлено на рис. 1.9.
В этом окне достаточно нажать кнопку Finish для завершения установки. Maple 7 будет установлена на вашем компьютере и готова к работе.
Проблемы, связанные с установкой и возможными конфликтами, описаны в файле readme.txt, который рекомендуется просмотреть перед инсталляцией системы. К сожалению, он подготовлен па английском языке, как и вся встроенная в Maple 7 документация.
Запуск Maple 7 производится, как обычно, из меню Пуск (рис. 1.10). Найдя строчку Maple 7, необходимо открыть подменю и щелкнуть на команде Maple 7 (рис. 1.10).
Рис. 1.10. Запуск Maple 7 из меню Пуск
Возможен также запуск с помощью ярлыка, помещенного на рабочий стол. В любом случае, вначале на некоторое время появляется красочное окно-заставка, показанное в центре рис. 1.1. После этого появляется рабочее окно системы, изображенное на рис. 1.11.
Рис. 1.11. Окно системы Maple 7
Долгое время системы Maple имели довольно архаичный (хотя и неплохой) пользовательский интерфейс, ориентированный на операционную систему MS-DOS. Но затем версия Maple V R3, далее Maple V R4, Maple V R5 и, наконец, Maple 6 и Maple 7 приобрели вполне современный графический пользовательский интерфейс, характерный для приложений операционных систем Windows. Это намного повысило удобство работы с Maple и обеспечило интеграцию со многими другими программными продуктами.
Как у всех приложений под Windows интерфейс Maple 7 имеет ряд характерных элементов, видимых на рис. 1.11 и перечисленных ниже:
Пользовательский интерфейс Maple 7 позволяет готовить документы, содержащие одновременно текстовые комментарии, команды входного языка (с возможным преобразованием их в естественную математическую форму), результаты вычислений в виде обычных математических формул и графические данные. Это обеспечивает понятное представление исходных данных и результатов вычислений, а также удобство их повторного использования.
В основе пользовательского интерфейса Maple 7 лежит графический многооконный интерфейс операционной системы Windows. Управление системой Maple 7 возможно с помощью главного меню, панелей инструментов и палитр, а также «горячих» клавиш. Поддерживаются также многие возможности мыши, присущие приложениям под Windows.
Важно отметить и прекрасно реализованную справочную систему Maple 7. Преодолев первые трудности общения с системой, пользователь быстро осваивает систему справки, которая позволяет без какой-либо бумажной документации получить исчерпывающую информацию о любом операторе, функции или пакете (разумеется, на английском языке). На каждой странице справки нахддит-ся по несколько примеров, причем их можно скопировать и перенести в редйк-тор или в окно исполняемых документов системы. Это способствует быстрому обучению пользователя. Подробное описание справочной системы Maple 7 дано в уроке 2.
Пользователь Maple 7 (как и ряда других математических систем) работает с документами, которые являются одновременно описаниями алгоритмов решения задач, программами и результатами их исполнения. Все данные команды и результаты размещаются в соответствующих ячейках. Графические построения выполняются как в ячейках документа, так и в отдельных окнах, и имеют свои меню для оперативного управления параметрами.
Наиболее полные возможности управления предоставляет главное меню системы Maple 7. Оно, как обычно, расположено непосредственно под строкой заголовка. Меню предоставляет доступ к основным операциям и параметрам пользовательского интерфейса системы. Ниже дан перечень меню, доступных при наличии открытого документа:
Главное меню Maple 7 является контекстно-зависимым. Это означает, что его вид может меняться в зависимости от текущего состояния (контекста) системы. Например, если все документы закрыты, то главное меню содержит только три заголовка меню: File, Options и Help. При этом место для окон документов пусто и окрашено в серый цвет. Вид меню также меняется в зависимости от того, какие объекты в документе выделены. Более подробно работу с меню системы Maple 7 мы рассмотрим позже, начиная с урока 3.
Полезно сразу обратить внимание на возможность модификации интерфейса системы Maple 7 с помощью команд меню View. В этом меню (оно показано на рис. 1.11 в открытом состоянии) можно увидеть список палитр Palettes, предназначенных для ввода математических знаков. Установив флажки соответствующих палитр, можно вывести их на экран и переместить в любое место. Все четыре палитры математических символов представлены на рис. 1.11. При этом палитра VECTOR введена в Maple 7 впервые.
Назначение знаков в палитрах очевидно из их названий:
SYMBOL — ввод отдельных символов (греческих букв и некоторых математических знаков);
EXPRESSION — ввод шаблонов математических операторов и операций;
MATRIX — ввод шаблонов матриц разных размеров;
VECTOR — ввод шаблонов векторов разных размеров и типов (векторы-столбцы или векторы-строки).
Следует отметить, что не всегда введенный на палитре символ буквально повторяет представленный на кнопке. Например, вместо символа а может быть введено слово alpha. Так происходит, если установлен действующий по умолчанию Maple-режим представления символов. Палитра ввода векторов введена в Maple 7 впервые, что сделало ввод векторов более удобным.
Еще один важный и полезный элемент интерфейса — всплывающие подсказки. Они появляются, если навести курсор мыши на тот или иной элемент интерфейса. На рис. 1.11 показана одна из всплывающих подсказок. Подсказки имеют вид облачка, которое вытекает из указанного элемента интерфейса. Особенно удобны подсказки для пояснения назначения кнопок палитр и панелей инструментов. В дальнейшем мы будем неоднократно приводить примеры всплывающих подсказок при работе с интерфейсом.
После загрузки и запуска системы можно начать диалог с ней, используя ее операторы и функции (с параметрами) для создания и вычисления математических выражений.
ВНИМАНИЕ
Во избежании грубых ошибок при исполнении того или иного примера рекомендуется перед этим исполнить команду restart которая снимает определения со всех использованных ранее переменных и позволяет начать вычисления «с чистого листа».
На рис. 1.12 представлен реальный диалог с системой (в виде копии экрана) при решении простейших арифметических задач и построении графика функции sin(x)/x.
Рис. 1.12. Начало диалога с системой Maple 7
Уже из этого простого примера видны особенности диалога с Maple и синтаксиса ее входного языка, то есть языка, на котором системе задаются вопросы. Диалог идет в стиле: «задал вопрос, получил ответ». Вопросы и ответы занимают отдельные блоки, выделяемые в левой части квадратными скобками. Длина квадратных скобок зависит от размера выражений — исходных (вопроса) и результатов вычислений (ответов на вопросы). Знак > является знаком приглашения к заданию вопроса. Мигающая вертикальная черта | — маркер ввода (курсор).
Ввод выражений (вопросов) задается по правилам, давно принятым для строчных редакторов. Они хорошо известны, и мы не будем на них останавливаться подробно. Отметим лишь, что клавиша Ins позволяет задавать два основных режима ввода — замены и вставки. В режиме замены вводимый символ заменяет существующий символ, который отмечен маркером ввода. А в режиме вставки новый символ вставляется в текст, не уничтожая имеющиеся символы.
Перемещение маркера ввода осуществляется клавишами перемещения курсора <- и -> Клавиша Backspace стирает символ слева от маркера ввода, а клавиша Del — справа от маркера ввода. Для ввода любого символа надо нажать соответствующую клавишу. Клавиша Shift включает верхний регистр для ввода заглавных (прописных) букв, а клавиша Caps Lock переключает верхний и нижний регистры клавиш с буквами (они меняются местами).
Знак фиксации конца выражения : (точка с запятой) указывает, что результат его вычисления должен быть выведен на экран, а знак : (двоеточие) отменяет вывод и может использоваться как знак разделителя при записи нескольких выражений в одной строке. Клавиши перемещения курсора позволяют передвигаться по ранее введенным строкам на экране.
Важным понятием системы Maple 7 (да и математики вообще) является понятие функции. Функция возвращает результат некоторого преобразования исходных данных — параметров функции. Maple 7 имеет множество встроенных функций, включенных в его ядро и в пакеты.
Функция в выражениях задается вводом ее имени и списка параметров функции (одного или нескольких), заключенного в круглые скобки, например sqrt(2) задает функцию вычисления квадратного корня с параметром 2 (численной константой). Основным признаком функции является возврат значения в ответ на обращение к ней по имени (идентификатору) с указанием списка параметров функции. Например:
Обратите внимание на особую роль десятичной точки — здесь она служит указанием к выполнению вычисления значения sin( 1.0) (или, что то же самое, sin( 1.)). А вот синус целочисленного аргумента 1 не вычисляется — считается, что вычисленное значение менее ценно, чем точное значение sin(1).
В данном случае надо понимать, что Maple предпочитает иметь с дело точными значениями функций. Логично, что точное значение синуса от 1 записывается в виде sin(f). — Прим. ред.
Ради единства терминологии мы будем пользоваться расширительным понятием функции, относя к нему и те объекты, которые в некоторых языках программирования именуют процедурами или командами. Например, слова plot и plot3d мы также будем называть функциями, которые возвращают графики аргументов. Под командами же мы будем подразумевать прежде всего команды, содержащиеся в меню. Помимо функций в математических системах для записи математических выражений используются специальные знаки — операторы. К примеру, вычисление квадратного корня часто записывается с помощью его специального знака — V. Достаточно хорошо известны операторы сложения +, вычитания -, умножения *, деления / и некоторые другие. Операторы обычно используются с операндами в виде констант или переменных, например в записи 2* (3+4) числа 2, 3 и 4 — это операнды, а знаки * и + — операторы. Скобки используются для изменения порядка выполнения операций. Так, без них 2*3+4=10, тогда как 2*(3+4)=14, поскольку вначале вычисляется выражение в скобках. Пожалуй, самым распространенным оператором является оператор присваивания ':=. Он используется для задания переменным конкретных значений, например:
Этот простой пример наглядно иллюстрирует эволюцию переменных и особую роль оператора присваивания в системе Maple. В частности, в этом примере переменные х, у и z взаимосвязаны с помощью операций присваивания. Поэтому задание значения 2 переменной z приводит к тому, что и переменные у и х принимают то же значение.
Другой распространенный оператор — оператор равенства = — используется для задания равенств и логических условий (например, а=b), указания областей изменения переменных (например, 1=1..5 означает формирование диапазона изменения i от 1 до 5) и определения значений параметров в функциях и командах (например, color=b1ack для задания черного цвета у линий графиков).
Операторы сами по себе результат не возвращают. Но они, наряду с функциями и своими параметрами (операндами), позволяют конструировать математические выражения, которые при их вычислении также возвращают результат. В силу этого математические выражения, содержащие операторы и операнды, могут быть параметрами функций. Выражения в Maple бывают очень простыми (например, имена переменных х и у или константы 1 и 2), а могут содержать многие тысячи знаков. С позиции канонов символьной математики квадратный корень из двух уже является основным результатом вычислений. Поэтому такая функция обычно не вычисляется в численном виде, а выводится в естественном виде с применением знака квадратного корня V. Для вычисления в привычном виде (в виде десятичного числа с мантиссой и порядком) надо воспользоваться функцией evalf(sqrt(2)) — эта функция обеспечивает вычисление символьного выражения, заданного ее параметром (числом 2).
При работе с системой Maple 7 надо строго придерживаться правил корректного ввода выражений и иных объектов Maple-языка, называемых синтаксисом языка. Однако, как гласит русская пословица, не ошибается только тот, кто ничего не делает. Даже у опытного пользователя возможны ошибки в ходе ввода выражений и задания алгоритмов вычислений.
Алгоритмические, но синтаксически корректные ошибки часто могут не распознаваться системой. Например, если в выражении a*sin(x) вы вместо аргумента х взяли аргумент b, то есть записали a*sin(b), то такую ошибку Maple 7 распознать не может, ибо синтаксически как a*sin(x), так и a*sin(b) абсолютно корректны. Если вы перепутаете синус с косинусом и запишете a*cos(x), то такая ошибка также не будет распознана.
ПРИМЕЧАНИЕ
Ошибки в записи выражений, описывающих те или иные алгоритмы вычислений, не нарушающие синтаксическую корректность, системой Maple 7 не распознаются. Контроль за такими ошибками целиком лежит на пользователе.
Приведем еще один характерный пример ошибки, которую Maple 7 не может распознать. Вводя выражение X/Y*Z, мы можем предположить, что это означает X/(Y*Z). Однако в Maple 7 приоритет операций деления и умножения одинаков. Поэтому Maple 7 вначале делит X на Y, а затем полученный результат умножает на Z:
Ошибки такого рода называют семантическими. Если бы мы не проверили вывод с помощью оператора вычисления предыдущего выражения (%), то эта ошибка осталась бы нераспознанной. Выявление и устранение семантических ошибок выполняется на этапе отладки вычислений и программ.
ПРИМЕЧАНИЕ
Используйте блокировку вычислений с помощью знака двоеточия только в том случае, когда вы абсолютно уверены в правильности записи выражения. Иначе вы можете не заметить вкравшейся в вычисления серьезной ошибки.
В нашем примере мы получили бы верный результат, заключив выражение Y*X в круглые скобки. Как обычно, они предназначены для задания явного приоритета выполнения операций — в нашем случае вначале будет вычислено выражение в скобках (Y*Z), а затем уже X будет поделено на это выражение:
Но вернемся к ситуации с синтаксическими ошибками, которые система Maple 7 распознает с помощью встроенного в нее синтаксического анализатора. Например, если вы задали неправильное имя функции, то это будет опознано синтаксическим анализатором и вычисления не будут выполняться. Maple 7 просто повторит выражение в строке вывода:
В этом примере вместо имени функции sin введено ошибочное имя son. Maple воспринимает его как некую введенную пользователем функциональную зависимость и потому просто повторяет запись и не выводит сообщение об ошибке. А вот другая ситуация — имя функции sin введено верно, но вместо десятичной точки при задании вещественного числа 1.0 использована запятая:
В данном случае Maple 7 «знает», что работа идет с его встроенной функцией синуса, которая должна иметь единственный аргумент. Задание (1,0) означает, что растяпа-пользователь ввел вместо вещественного числа два целочисленных числа, разделенных запятой. Этого синтаксический анализатор Maple 7 стерпеть уже не смог, и он отреагировал выдачей сообщения об ошибке (на экране дисплея оно имеет малиновый цвет). Исправьте ошибку, и синус единицы будет благополучно вычислен:
А вот еще одна типичная ситуация — в последовательности выражений опущен знак-разделитель (двоеточие или точка с запятой):
Тут Maple 7 не только реагирует на ошибку, но и пытается подсказать, что именно пропущено. Более того, маркер ввода в виде мигающей вертикальной черточки будет помещен на место ошибки и вы сможете тут же устранить ошибку. Правда, подсказки не всегда точны — в нашем случае явно пропущен разделитель в виде двоеточия, a Maple 7 сообщает о пропуске точки с запятой. Впрочем, откуда системе знать, хотим мы вывести результат операции Y:=4 сразу (для этого нужен разделитель в виде точки с запятой) или откладываем на потом (с помощью символа двоеточия).
Вот еще один пример характерной ошибки — три знака * подряд:
Здесь Maple 7 подсказывает, что один оператор * надо убрать — два знака * подряд означают вполне законный вариант оператора — возведение в степень. При этом маркер ввода вновь указывает место ошибки. Проанализируйте следующие простые примеры:
В этом примере Maple 7 вначале вычисляет функцию синуса, затем производит возведение в степень и лишь потом операцию умножения. Впрочем, такой приоритет операций принят практически во всех системах компьютерной математики и в языках программирования.
Некоторые пользователи версии системы Maple V R5 наблюдали, что русская буква «я» в конце программного комментария (он вводится после символа #) вела к зависанию программы, что требовало ее перезагрузки. В Maple 7 этот недостаток устранен:
> #Буква "я" в конце комментария уже не вызывает зависания
>
Позже, при описании программирования в Maple 7, мы опишем более развитые средства контроля над допускаемыми пользователем ошибками. Пока же ограничимся приведенными 'Выше сведениями, полезными уже в начале диалога с системой.
Для управления состоянием ячеек можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Если установить указатель мыши на входной ячейке, то это меню будет содержать три команды:
Также в зависимости от состояния буфера обмена и наличия выделения в контекстном меню могут присутствовать команды Cut, Copy и Paste.
Левая кнопка мыши может использоваться для передачи фокуса управления или переноса маркера ввода, а также выделения частей документа.
На рис. 1.12 показано, как задается функция пользователя f(x) с одним параметром х. Нетрудно заметить, что параметр указывается в скобках после имени функции а для записи выражения функции используется знак присваивания := (двоеточие со знаком равенства). Для построения графика функции f (х) используется функция plot в форме:
Нетрудно заметить, что при наличии нескольких параметров функции (в нашем случае их два) они разделяются запятыми. Выражение х=-15. .15 задает, во-первых, указание, относительно какой переменной строится график, а во-вторых, говорит, в какой области значений меняются значения этой переменной — в нашем случае от -15 до +15. Шаг изменения переменной выбирается автоматически в зависимости от размеров и вида графика.
Столь же просто, как и график обычной функции в декартовой системе координат, можно построить график трехмерной поверхности. Это показано на примере рис. 1.13. В данном случае задана функция двух переменных z(x,y) :=sin(x*y) и ее график строится с использованием графической функции plot3d. Правила задания пределов изменения переменных х и у соответствуют описанным выше.
Рис. 1.13. Построение графика трехмерной поверхности
Возможно, многих читателей вполне удовлетворят уже описанные возможности, но сила системы Maple 7 прежде всего в возможности выполнения аналитических (символьных) вычислений. Поэтому мы перейдем к обсуждению некоторых из них.
Форматы математических выражений
Приведенные выше примеры реализуют обычную форму представления документа. В нем имеются текстовые комментарии (для их ввода надо нажать клавишу F5), сформулированные на Maple-языке задания на вычисления, результаты вычислений в виде обычных математических формул и, там где это указано, графики.
Эта выстраданная форма представления документов является компромиссом между наглядностью и простотой ввода исходных данных. Может показаться, что в этом отношении намного дальше продвинулись системы класса Mathcad — у них исходные данные и описание алгоритмов вычислений давно задаются в виде естественных математических символов и формул. За исключением, правда, функций символьных вычислений, пока не имеющих общепринятых специальных математических символов и вводимых путем указания их имен.
Однако это достоинство кажется явным лишь на первый взгляд. Ввод сложных формул довольно трудоемок и требует специфических навыков, отсутствующих даже у самых опытных пользователей. В Mathcad эту проблему решили созданием панелей (палитр) с полным набором всех математических символов и шаблонов для представления сложных формул, таких как интегралы, суммы и произведения рядов, производные и т. д. Однако, хотя при этом их ввод и становится более простым, легким его не назовешь, а монотонность операций нервирует многих пользователей.
В Maple 7 ввод исходных данных производится привычными для языков программирования средствами — с помощью функций и операторов, задаваемых в командной строке. Зато результаты вычислений получаются по умолчанию в виде обычных формул (хотя есть возможность их представления в другом виде, например принятом в редакторе LaTeX или языках программирования Fortran и С). Тем не менее вид документа с таким специфическим заданием формул может озадачить математика и любого пользователя, не слишком знакомого с основами программирования. В целом он отрицательно сказывается на восприятии документов.
Для устранения подобного недостатка (а скорее, противоречия) Maple 7 предлагает ряд средств. Во-первых, это текстовые комментарии, в которые можно вводить формулы. Во-вторых, это инертные функции, которые не вычисляются, но дают вывод на экран в естественной математической форме (рис. 1.14). И в-третьих, это возможность быстрого преобразования строковых выражений ввода в естественные математические формулы.
Об инертных функциях мы поговорим позже более подробно. Отметим лишь, что имена таких функций начинаются с большой буквы и функции выводят математическое выражение в естественной математической нотации. С помощью ряда функций, например evalf, можно вычислить математическое выражение, полученное инертной функцией. На рис. 1.14 внизу дан пример такого вычисления для предела функции sin(x)/x.
Рис. 1.14. Примеры применения инертных функций
Теперь остановимся на преобразовании исполняемых выражений ввода на Maple-языке в обычные математические формулы. Для этого достаточно, выделив входное выражение, нажать первую кнопку контекстной панели — соответствующее выражение тут же приобретет вид обычной математической формулы. На рис, 1.15 показаны примеры вычислений интеграла при его задании в строках ввода в виде текстового выражения и в обычной математической нотации.
Таким образом, всегда можно получить формульное представление входных выражений. Более того, другой кнопкой их можно превратить в инертную форму, тогда выражение перестает вычисляться и становится, по существу, обычным комментарием.
Следует, однако, учитывать, что представление входных выражений в виде формул обычно занимает заметно больше места на экране и в документе, чем описание выражения на Maple-языке, поэтому оно используется довольно редко. Кроме того, далеко не всякое входное выражение может быть представлено в виде математической формулы — многие функции ядра и библиотек Maple 7попросту не имеют общепринятых обозначений в виде специальных математических знаков.
Рис. 1.15. Примеры вычислений интеграла при его задании в текстовой и математической нотации
Простой пример символьных вычислений
Maple 7 открывает обширные возможности выполнения символьных (аналитических) вычислений. Начнем с простого примера — требуется найти сопротивление трех параллельно включенных резисторов R1, R2 и R3 произвольной величины. Из курса электротехники известно, что можно задать следующее равенство, определяющее суммарное сопротивление R0:
Теперь достаточно использовать функцию решения уравнений solve, чтобы найти значение R0 в общей аналитической форме:
Нетрудно проверить, что результат может быть получен и в численном виде для конкретных значений R1, R2 и R3: > Rl:=a.:R2:-2:R3:=3:RO:
На рис. 1.16 показано несколько примеров выполнения символьных вычислений математического характера: преобразование тригонометрического выражения с помощью функции упрощения simplify, вычисление суммы ряда функцией sum и вычисление неопределенного интеграла функцией int.
Рис. 1.16. Примеры символьных вычислений
Обратите внимание на результат выполнения последнего примера. Он выделен. Выделение можно осуществить протаскиванием указателя мыши с нажатой левой кнопкой.
Вычисления производных и интегралов в .символьном виде, пожалуй, являются наиболее характерными областями применения систем символьной математики. На рис. 1.17 показаны примеры таких вычислений с применением функции dif для вычисления производной и int для вычисления определенных интегралов.
Рис. 1.17. Примеры вычисления производной и интегралов
Обратите внимание на функцию Int — инертную форму функции int. Как уже отмечалось, инертная форма служит для вывода записи интеграла в естественной математической форме, но с отложенным «на потом» выводом результата вычислений. Как отмечалось, это один из путей наглядного представления входных выражений. Все инертные функции имеют имена, начинающиеся с большой буквы, тогда как обычные функции имеют имена, начинающиеся с маленькой буквы.
На другом рисунке (рис. 1.18) показано вычисление интеграла, который не имеет представления через функции системы Maple 7, но может быть вычислен ею в численном виде.
Рис. 1.18. Численное вычисление значения интеграла, не имеющего аналитического представления
Одной из проблем систем компьютерной алгебры является «разбухание» результатов — как оконечных, так и промежуточных. Связано это с тем, что аналитическое представление порою может оказаться весьма громоздким даже для простых задач — пожалуй, это главная причина прохладного отношения к аналитическим вычислениям со стороны инженеров, особенно практиков. К примеру, численное решение кубического уравнения не вызовет трудностей даже на калькуляторе [1], тогда как системы символьной математики выдают его в виде формул, едва помещающихся на экране. Это и иллюстрирует рис. 1.19, на котором показано решение квадратного уравнения (его знает каждый мало-мальски преуспевающий в учебе школьник) и решение кубического уравнения (оно вызывает бурный восторг или легкий шок — в зависимости от отношения учащегося к математике).
Щепетильность системы в ее стремлении выдать полный и математически предельно точный результат, безусловно, очень важна для математиков. Но для многих прикладных задач, с которыми имеют дело инженеры и техники, она оборачивается неудобствами. Инженеры часто прекрасно знают, какие из членов математических формул можно преспокойно отбросить, тогда как для математика-теоретика или аналитика такое действо — типичное кощунство. Порою системы компьютерной алгебры выдают настолько «заумный» и огромный результат, что его упрощение может занять куда больше времени, чем получение более простого результата с заранее выполненными упрощениями. Впрочем, каждому свое! И Maple имеет множество функций, обеспечивающих преобразование результатов в ту или иную форму.
Рис. 1.19. Решение квадратного и кубического уравнений в символьной форме
Приведем еще один характерный пример — решение системы линейных уравнений с помощью функции solve (рис. 1.20). Обратите внимание на форму задания уравнений и выдачи результатов и поразительную естественность решения задачи. Значение переменной z на рис. 1.20 выделено, где видно, что Maple отображает его поле под панелью инструментов.
Слова solve, diff и int с их аргументами являются именами встроенных в систему функций, возвращающих символьные значения результатов. Нормальному пользователю может стать дурно, если вспомнить, что таких функций с их вариантами система Maple 7 имеет около трех тысяч! Да к тому же многие функции (та же solve для решения уравнений) подчас могут применяться во многих случаях и имеют массу параметров и директив для уточнения направлений решения и расширения областей применения.
Рис. 1.20. Решение системы из пяти линейных уравнений
В утешение можно отметить три важных обстоятельства:
Необходимые функции и правила их преобразования система черпает в библиотеке размером около 40 Мбайт (она содержит файлы maple.hdb, maple.lib, maple.ind и maple.cmd). Это иногда занимает заметное время, особенно при первом использовании определенной группы операторов (например, тригонометрических). При повторном использовании этой группы система заметно убыстряется, так как использует уже загруженные средства.
Пока что мы при проведении вычислений пользовались лишь простейшими средствами управления системой — вводом выражений и текстовых надписей с клавиатуры. Теперь пора расширить представления о работе с Maple. Прежде чем начать работать с ее меню, надо отметить, что для многих (особенно начинающих) пользователей оказывается удобнее использовать кнопки, расположенные на панелях инструментов, которые находятся прямо под строкой меню.
На рис. 1.21 показано назначение кнопок панели инструментов (Tool Bar). Эти кнопки дублируют наиболее важные операции главного меню и имеют наглядные и типовые для Windows-приложений обозначения. Назначение кнопок и других деталей интерфейса также показаны на рис. 1.21.
Рис. 1.21. Панель инструментов
При необходимости панели инструментов можно убрать с помощью команд меню View (см. рис. 1.11). Если графика выводится в отдельное окно, там имеется своя панель инструментов, которая будет описана ниже.
Другое полезное средство для облегчения работы по форматированию текстов, заданию параметров входных математических выражений и графиков — контекстная панель инструментов. Как следует из названия, контекстная панель Context Bar является контекстно-зависимой — ее содержание зависит от текущего положения маркера ввода или выделения.
Контекстная панель содержит следующие элементы при вводе текста комментария (рис. 1.22):
Рис. 1.22. Контекстная панель инструментов для текста комментария
На рис. 1.15 была показана контекстная панель в случае, когда маркер ввода находится в строке ввода. Там же поясняется назначение кнопок панели для данного случая. Особо остановимся на кнопке со значком (V), которая обеспечивает проверку синтаксиса вводимого выражения до того, как оно завершено символами двоеточия или точки с запятой.
Поясним на примере. Допустим, мы ввели ошибочное выражение для интеграла, забыв указать показатель степени в подынтегральном выражении x^n:
> int(x^,x)
Если нажать кнопку автокоррекции, оно примет вид:
> int(x^ %? ,х)
Maple явно указывает на необходимость ввода показателя степени — в нашем случае переменной n.
А вот другой пример — мы забыли ввести закрывающую скобку в выражение:
> int(x*n ,x
Если теперь нажать кнопку автокоррекции, то вставка скобки произойдет автоматически:
> int(x^n ,x)
Таким образом, данная кнопка может быть полезна для оперативного контроля синтаксиса и исправления грубых ошибок при вводе выражений в формате Maple Input. Однако необходимо делать это до их исполнения.
Заметим, что пока формула является входным выражением в математической форме, она может редактироваться — но не сама по себе, а в виде текстового выражения, отображающегося в поле редактирования на контекстной панели. При этом изменение записи выражения в поле редактирования немедленно влечет соответствующее изменение вводимой формулы. Это тоже довольно удобное средство, имеющее свои преимущества перед прямым редактированием формулы — в MathCAD, например, прямое редактирование формул требует определенных навыков и усваивается довольно туго.
Рис. 1.23. Контекстная панель инструментов для выражений, представленных в математической нотации
Рисунок 1.23 показывает назначение кнопок контекстной панели при установке маркера ввода в строку, содержащую входное выражение в математической нотации. Нетрудно заметить, что в этом случае контекстная панель несколько изменяется — в частности, в ней появляется поле ввода, в котором выведено выделенное выражение на Maple-языке. Такой же вид контекстной панели будет, если выделено выражение или его часть в строке вывода.
Двумерные графики строятся с заданием ряда параметров, определяющих общий стиль графика. Эти параметры задают цвет и стиль линий графика, вывод координатных осей и т. д. Все параметры имеют значение по умолчанию — они и определяют вид графика, при формировании которого параметры не указаны.
Однако ряд параметров можно изменять, щелкая на соответствующих кнопках контекстной панели. На рис. 1.24 показано назначение кнопок контекстной панели инструментов для редактирования параметров двумерных графиков. Такая панель появляется, если двумерный график выделен или на нем находится маркер ввода.
Рис. 1.24. Контекстная панель инструментов для двумерного графика
Действие большинства кнопок этой формы контекстной панели достаточно очевидно, и вы легко сможете опробовать эти кнопки в работе. Так, график на рис. 1.18 построен точками при нажатии кнопки, задающей стиль Point style. Кроме того, в функции plot построения графика явно использована опция co1or=blue, которая задает синий цвет точек графика.
Полезно отметить, что в левой части контекстной панели есть поле с координатами текущей выделенной точки графика. Чтобы выделить точку, надо подвести к ней указатель мыши и щелкнуть левой ее кнопкой.
При построении контурных графиков и графиков плотности имеется возможность заливки их областей между линиями уровня с выводом линии сетки, на которой рассчитываются линии уровня, и без вывода линий сетки.
Свой вид контекстной панели имеют и трехмерные графики. Назначение ее элементов представлено на рис.-1.25.
Рис. 1.25. Контекстная панель инструментов для трехмерных графиков
С помощью контекстной панели трехмерных графиков можно задать 7 стилей построения трехмерных графиков и 4 стиля вывода координатных осей. Возможны следующие стили трехмерных графиков (группа из семи кнопок в середине панели): функциональная окраска с видимыми линиями каркаса, функциональная окраска без линий каркаса, функциональная окраска с контурными линиями, цветной каркас с видимыми линиями, цветные контурные линии, цветной каркас со всеми (в том числе невидимыми) линиями и поверхность, построенная точками.
Два расположенных слева счетчика позволяют задавать нужный угол обзора, причем Maple сразу же отражает заданный поворот построенной фигуры. Ее также можно вращать мышью, поместив указатель в область графика и держа нажатой левую кнопку. При этом счетчики будут отображать изменяющиеся при перемещении мыши углы обзора. Это очень удобное средство для наблюдения за деталями трехмерных поверхностей и фигур, которые строит функция plot3d.
При работе с Maple полезно следить за информацией в строке состояния системы, расположенной внизу экрана. В ней появляются надписи, поясняющие исполняемые операции. Кроме того, в полях на правой части выводится текущее время, объем используемой оперативной памяти и объем доступной памяти на жестком диске, на котором установлена система.
Хотя панели инструментов и строка состояния удобны для быстрого управления системой, они обладают одним существенным недостатком — занимают часть полезной площади экрана. Однако в меню View имеются команды, позволяющие убрать с экрана любые из этих элементов. Действие этих команд вы можете заметить, если внимательно присмотритесь к предыдущим рисункам.
Для открытия меню можно использовать одновременное нажатие клавиши Alt и клавиши, которая подчеркнута в названии меню. Вызов команды при одновременном нажатии нескольких клавиш получило название «горячих» клавиш управления (Hot Keys).
Таблица 1.1. Горячие клавиши для открытия меню
Edit |
Alt+E |
File |
Alt+F |
Format |
Alt+R |
Help |
Alt+H |
Insert |
-> Alt+I |
Options |
Alt+0 |
View |
Alt+V |
Spreadsheet |
Alt+S |
Window |
Alt+W |
«Горячие» клавиши присвоены и многим другим, наиболее распространенным операциям. Они облегчают и ускоряют (наряду с кнопками панелей инструментов) быстрое управление программой. Ниже в таблицах приведен список наиболее используемых «горячих» клавиш, разбитых на ряд категорий.
Таблица 1.2. Горячие клавиши для задания начертания символов и режимов ввода текста
Полужирное начертание |
Ctrl+B |
Курсивное начертание |
Ctrl+I |
Подчеркнутое начертание |
Ctrl+U |
Включение/выключение ввода текста |
F5 |
Установка режима ввода (Input Mode) |
Ctrt+M |
Задание режима ввода текста (Text Input Mode) |
Ctrl+T |
Таблица 1.3. Горячие клавиши для операций выделения
Выделение символа слева |
Shift*- |
Выделение символа справа |
Shift*» |
Выделение строки вверх |
Shift+- |
Выделение строки вниз |
Shift+? |
Выделение от маркера ввода до начала строки |
Shift+Home |
Выделение от маркера ввода до конца строки |
Shift+End |
Выделение от маркера ввода и до начала документа |
Shift+PgUp |
Выделение от маркера ввода и до конца документа |
Shift+PgDn |
Таблица 1.4. Горячие клавиши операций удаления, копирования и вставки
Выделить все |
Ctrl+A |
Копирование выделения в буфер |
Ctrl+C |
Перенос выделения из документа в буфер |
Ctrl+X |
Вставка содержимого буфера в документ |
Ctrl+V |
Удаление строки ввода (параграфа) |
Ctrl+Delete |
Закрытие выделенной секции |
Ctrl*. |
Поиск |
Ctrl+F |
Вставка параграфа после маркера |
Shift+Ctrl+J |
Вставка параграфа до маркера |
Shift+Ctrl+K |
Восстановление закрытых секций |
Ctrl+, |
Вставка исполняемой группы после маркера |
Ctrl+0 |
Вставка исполняемой группы до маркера |
Ctrl+K |
Вставка конца страницы |
Ctrl+Enter |
Вставка выражения в стандартной математической форме |
Ctrl+R |
Вставка выражения в форме Standart Math Input |
Ctrl+G |
Таблица 1.5. Горячие клавиши переходов по документу
Переход к началу строки |
Ноте |
Переход в конец документа |
Ctrl+End |
Переход к концу строки |
End |
Переход в начало документа |
Ctrl+Home |
Создание новой строки |
Shift+Enter |
Переход к следующей строке ввода |
Tab |
Переход к предыдущей строке ввода |
Shift+Tab |
Переход к справке по контексту |
CtrU-Fl или-Fl |
Переход на предшествующий уровень вложенности секций |
Ctrl+UpArrow |
Таблица 1.6. Горячие клавиши команд для работы с файлами
Создание нового документа |
Ctrl+N |
Открытие документа |
Ctrl+0 |
Сохранение документа |
Ctrl+S |
Печать документа |
Ctrl+P |
Закрытие активного окна (документа) |
Ctrl+F4 |
Завершение работы с Maple |
Alt+F4 |
Таблица 1.7. Горячие клавиши команд просмотра документа
Перерисовка экрана (Redraw Screen) |
Ctrl+L |
Просмотр групп ячеек (Show Group Ranges) |
F9 |
Показ секций (Show Section Ranges) |
Shift+F9 |
Разделение строки на две части "(Split Group) |
F3 |
Объединение смежных строк (Join Group) |
F4 |
Разделение секции на две части (Split Section) |
Shift F3 |
Объединение смежных секций (Join Section) |
Shift F4 |
Отмена предшествующей операции (Undo) |
Ctrl+Z |
Таблица 1.8. Горячие клавиши установки масштаба (Zoom Factor)
50% |
Ctrl+1 |
100% |
Ctrl+2 |
150% |
Ctrl+3 |
200% |
Ctrl+4 |
300% |
Ctrl+5 |
400% |
Ctrl+6 |
Разумеется, можно успешно работать с системой, вообще ничего не зная про «горячие» клавиши. Многие так и делают! Однако быстрая и профессиональная работа в Maple 7 невозможна без использования этих клавиш, поскольку они существенно экономят время пользователя.
При работе с русифицированной версией Windows латинские буквы в обозначениях «горячих» клавиш нередко заменяются русскими буквами, не несущими никакой смысловой связи с выполняемой операцией. В этом случае полезно знать, что соответствующая латинская буква (или иной знак) и указанная в меню русская находятся на одной клавише (например, комбинация клавиш для сохранения документа (Ctrl+S) может быть показана как Ctrl+ы).
В меню Help системы Maple 7 сосредоточены средства доступа к справке по всем функциям системы. Детально работу со справочной базой данных Maple 7 мы рассмотрим в следующей главе. Здесь лишь отметим, что справку по любой функции можно получить, просто установив на ее имени маркер ввода и нажав клавишу F1. На рис. 1.26 показано окно с началом справки по функции cos(x).
Рис. 1.26. Пример справки по функции косинуса
Как видно из рис. 1.26, окно справки содержит пятиступенчатый контекстный указатель, позволяющий последовательно отыскивать нужный раздел справки. Когда справка запрашивается по конкретной теме (функции), то сразу появляется посвященный ей раздел, точнее начало этого раздела.
Примеры из справочной системы можно модифицировать, для этого их нужно скопировать в буфер и перенести в окно документа Maple 7 (см. следующую главу). Также в Maple 7 есть специальный раздел справки, дающий доступ к примерам и без их копирования. Для осуществления такого доступа в окне справки достаточно выбрать тему ExampleWorksheets в первом же разделе контекстного указателя. Откроется окно (теперь уже документа) с индексным каталогом примеров (рис. 1.27).
Каталог примеров дает доступ к огромному числу примеров применения Maple 7. Просмотр одного из них (вычисление эллиптических интегралов) показан на рис. 1.27 справа. Рисунок 1.27 иллюстрирует также технику работы с двумя окнами документов.
Рис. 1.27. Работа с каталогом примеров
В этой книге использованы некоторые наиболее интересные примеры из справочной базы данных системы Maple 7. Однако большинство примеров книги не повторяет помещенные в справку Maple, носит оригинальный характер и отражает результаты исследования возможностей системы Maple 7 автора. В связи с этим читателю рекомендуется просмотреть не только примеры в данной книге, но и примеры, представленные в справочной системе по интересующим читателя функциям.
В этом уроке мы научились:
Справочной системе Maple 7 принадлежит исключительная роль — только в ней можно найти полную информацию обо всех почти трех тысячах функций Maple 7. Использование англоязычной справочной системы может быть полезно и для тех, кто и «двух слов по-английски связать не может», поскольку в ней приведен синтаксис функций и операторов, а также многочисленные примеры их применения — по самым скромным подсчетам их свыше десяти тысяч. К сожалению, справочная система Maple 7 очень громоздка. Но это нельзя считать недостатком справочной системы, поскольку просто велик объем входящего в нее материала. В справочной системе имеются все присущие современным базам данных возможности для быстрого поиска нужной информации и даже для ее структурирования и пополнения.
Основные команды по работе со справочной системой Maple 7 сосредоточены в меню Help, показанном на рис. 2.1.
Рис. 2.1. Меню Help справочной системы Maple 7
Оно содержит команды, объединенные в несколько групп. В первую группу входят следующие команды:
Второй раздел меню содержит команды:
В третьем разделе имеются две команды для работы с базой данных:
Остальные разделы представлены следующими командами:
Рассмотрим детально работу справочной системы Maple 7. Следует отметить, что ценность справочной системы для наших читателей намного снижается из-за того, что она написана на английском языке. Учитывая громоздкость справочной системы и необходимость в наличии компьютера для ее использования, для знакомства с системой Maple 7 более подходят обычные книги, тогда как справочную систему следует применять при необходимости ознакомиться с тонкими деталями применения тех или иных операторов, функций и иных средств Maple 7.
Команда Introduction в меню справки запускает справочную систему на странице введения (рис. 2.2).
В введении определено назначение Maple 7 как системы компьютерной алгебры и дается ссылка на сайт фирмы — разработчика системы (www.maplesoft.com). Щелкнув на гиперссылке, вы перейдете на начальную страницу web-сервера фирмы. На странице введения имеются также гиперссылки на обучающий курс (New User's Tour), на страницы с обзором новых возможностей Maple 7 и справки по различным элементам интерфейса.
Рис. 2.2. Окно справочной системы с введением
Обратите внимание на оригинальный подход к представлению пути нужной справки. Для его определения служат 5 окон-списков. На рис. 2.2 используется только одно окно, а остальные 4 пока пусты. Выбирая последовательно по элементу из каждого списка, вы сможете достигнуть требуемой справочной информации. Подробнее навигация по справочной системе будет описана позже.
Оперативная справка по контексту — сравнительно новая возможность справочных систем. Она особенно удобна при разборе примеров, содержащих незнакомые пользователю функции и иные объекты системы Maple. Полезна она и в том случае, когда пользователь знаком с применяемым объектом, но хотел бы уточнить его свойства и синтаксис.
Для получения оперативной справки по контексту достаточно установить курсор на соответствующий объект, например на имя какой-либо функции, и открыть меню Help. В нем можно обнаружить, что операция Help on Context модифицируется и приобретает вид Help on "...", где на месте многоточия стоит слово, на котором остановился курсор. На рис. 2.1 таким словом является имя функции, вычисляющей синус, — sin.
Допустим, что в тексте документа в строке ввода есть функция sin(x). Если теперь выполнить команду Help on "..." — тут же появится окно со справкой о функции синуса. Существуют и горячие клавиши для этой команды — Ctrl+Fl (или просто F1). Пример справки по функции sin представлен на рис. 2.3.
Рис. 2.3. Пример справки по функции sin
Как видно из рис. 2.3, справка по контексту позволяет судить о назначении функции, синтаксических правилах ее задания и примерах применения. Реализована она по единым правилам справочной системы и содержит открываемые разделы и гипертекстовые ссылки.
В этом примере уже хорошо видна техника использования окон в верхней части справки для уточнения необходимого раздела. Так, обнаруженная функция cos (кстати не sin, это любопытное свойство справки Maple — наличие «союзных» разделов) находится уже в четвертном окне. Последовательность доступа к ней следующая: Mathematics-Basic Mathematics-Exponential, Trig and Hyperbolic-cos. Очевидно, что функция cos найдена потому, что она выступает в паре с функцией sin, — на странице справки приведены примеры и к той, и к другой функции. Учитывая огромное число функций системы Maple 7 и соответственно разделов справки, подобный способ поиска информации представляется очень удобным. Он, кстати, стал использоваться и в Mathematica 3/4 — ближайшем конкуренте Maple.
Команда New User's Tour открывает окно курса по обучению основам пользования Maple, показанное на рис. 2.4.
Рис. 2.4. Окно курса обучения основам Maple
В конце страницы (рис. 2.4) имеется гиперссылка Click here to begin the New User's Tour. Она открывает окно обучающего курса по Maple с перечнем ее разделов, представленное на рис. 2.5. Наименования разделов являются гиперссылками. Как видно из рис. 2.5, обучающий курс имеет следующие разделы:
Активизация любой из этих гиперссылок приводит к выводу соответствующего раздела обучающего курса. На рис. 2.6 представлено начало раздела 3, посвященного численным вычислениям.
Рис. 2.5. Окно с перечнем разделов обучающего курса
Рис.2.6. Начало раздела обучающего курса по численным вычислениям
Основные достоинства обучающего курса в том, что он (в отличие от справочной базы данных) дает обычное описание работы с системой Maple 7 с «живыми» примерами, которые не надо копировать в документы. Фактически обучающая система является просто набором документов системы. Вначале примеры даны без ячеек вывода, которые появляются после исполнения команды Edit> Execute> Worksheet. Это иллюстрирует рис. 2.7.
Рис. 2.7. Начало раздела обучающей системы по численным вычислениям после исполнения команды Edit> Execute > Worksheet
Пользователь может модифицировать любой пример и немедленно получить новые результаты (попробуйте, например, заменить вычисление 200! на 100! или 500!). К сожалению, написан обучающий курс на английском языке и в отличие от обычной книги для работы с ним нужен компьютер.
Пользователи, знакомые с предшествующими версиями системы Maple, обычно хотят узнать, что нового введено в последней версии. Однако, как у нас говорят, «лучшее — враг хорошего» — при большом числе новых возможностей (и особенно при модификации старых возможностей) появляется несовместимость между документами для старых и новых версий системы. Несмотря на меры, предпринятые по предотвращению такой несовместимости, ее проявление вполне возможно, в частности документы, созданные в Maple 7, уже нельзя использовать в предшествующих версиях из-за различий в их внутренних форматах.
Выполнение команды What's New открывает окно с описанием новых возможностей Maple 7. Оно показано на рис. 2.8.
Рис. 2.8. Окно справки с описанием новых возможностей системы Maple 7
С помощью гиперссылок на этой странице можно получить достаточно подробное описание всех появившихся в Maple 7 возможностей. Мы уже отмечали их в уроке 1.
Справочная система Maple 7, по существу, является мощной базой данных с обширными возможностями поиска нужной информации и многочисленными примерами применения Maple 7. Работа с такой системой может вызвать затруднения у начинающих пользователей, поэтому в состав справочной системы включено описание правил ее использования. При исполнении команды Using Help появляется страница с перечнем разделов описания справочной системы (рис. 2.9).
Рис. 2.9. Окно с перечнем разделов описания справочной системы
Мы не будем подробно описывать содержание страницы и гиперссылок, поскольку весь материал данного урока и является, по существу, таким описанием.
Команда Topic Search (предметный поиск) — одна из самых мощных функций справки. Она выводит окно поиска (рис. 2.10), содержащее в верхней части поле для ввода образца. Образцом может быть слово (например, имя функции) или даже часть слова. В окне под этим полем появляется список всех объектов Maple 7, в индекс которых входит заданный образец (рис. 2.10).
Теперь остается из заданного списка слов выбрать нужное, что приведет к появлению окна справки с информацией по данному слову. Иногда индекс по данному слову будет иметь несколько ссылок, на появившейся странице вам придется уточнить, справку по какому объекту вы хотите получить. Окно предметного поиска в правой части имеет четыре кнопки со следующим назначением:
Кроме того, имеется возможность задания двух параметров:
Заметим, что если установлен флажок Auto-Search, то кнопка Search становится недоступна, поскольку отпадает необходимость в ней.
Предметный поиск с полным обзором текста справки (Full Text Search) — еще один эффективный метод получения справочной информации. Он напоминает ранее рассмотренный, но вхождение заданного образца ищется во всем тексте справочной системы, а не только по индексу, составленному создателями Maple. При этом выводится окно, подобное показанному на рис. 2.11. Обратите внимание на то, что в большом Поле этого окна указано существенно больше разделов справки, чем при поиске по индексу — очевидно, что большинство из них будет случайным упоминанием данного образца.
Рис. 2.10. Окно предметного поиска
Рис. 2.11. Окно предметного поиска с полным обзором текста справки
В этом окне используются те же кнопки управления, что и для окна поиска справки по образцу. Флажок Goodness of Match включает вывод статистики повторяемости образца в текстах разделов справочной системы.
Было замечено, что пользователь, занятый решением определенного класса задач, обычно неоднократно возвращается к ранее просмотренным разделам справочной системы. Чтобы не искать их всякий раз заново, справочная система хранит список разделов, просмотренных в данном сеансе работы. Он выводится операцией History (рис. 2.12).
Достаточно найти в этом окне нужный раздел справки и нажать кнопку ОК, чтобы вывести его на экран. Кнопка Apply позволяет просматривать каждый новый раздел в своем окне.
Рис. 2.12. Список ранее просмотренных разделов справки
В справочной базе данных предусмотрена возможность ее расширения путем записи текущего документа, составленного пользователем, в указанный раздел. При выполнении операции Save to Database выводится специальное окно, в котором надо указать соответствующие данные о модернизируемом разделе справки. Вид окна представлен на рис. 2.13.
Ограничимся этим указанием, учитывая, что для нашего пользователя модернизация англоязычной справочной базы данных явно отдает экзотикой.
Для удаления разделов базы данных служит команда Remove Topic. Она выводит окно, показанное на рис. 2.14.
Обратите внимание, что модернизации в обоих случаях подвергается один и тот же файл базы данных maple.hdb.
Рис. 2.13. Окно дополнения базы данных
Рис. 2.14. Окно удаления разделов справочной базы данных
На первом этапе знакомства с пользовательским интерфейсом системы Maple 7 удобно использовать всплывающие подсказки. Они вводятся при установке флажка Balloon Help. Для получения подсказки по какому-либо объекту достаточно задержать на пару секунд указатель мыши на этом объекте. Пример вывода всплывающей подсказки показан на рис. 2.1 — она указывает на назначение команды меню Help — Help on "sin".
Команда Register Maple 7 меню справочной системы открывает окно регистрации системы Maple 7. Это окно позволяет вызвать браузер Интернета, с помощью которого выполняется регистрация.
Последняя команда меню Help — About Maple 7 — выводит окно с информацией о версии Maple 7 (рис. 2.15). В этом окне содержатся данные, необходимые для регистрации системы Maple 7 (номера лицензии и самого продукта), а также данные о времени выпуска системы.
Рис. 2.15. Окно с данными о системе Maple 7
Обратите внимание, что данный продукт датирован концом мая 2001 г. Как уже отмечалось в уроке 1, официально он выпущен на рынок 21 июня 2001 г.
В этом уроке мы научились:
Система Maple работает с документами в стиле notebooks («блокноты» или «записные книжки»). Как было показано в уроке 1, документы содержат текстовые и формульные блоки, результаты вычислений, графики разного типа и другие компоненты. Документы могут готовиться с нуля или существовать в готовом виде — подготовленные кем-то ранее. Хранятся документы на внешних устройствах памяти в виде файлов. Файлом называют имеющую имя упорядоченную совокупность данных, размещенную на том или ином носителе — обычно на жестком, гибком или компакт-диске.
В Maple 7 используются файлы различных форматов, который указывается расширением файла (знак * означает произвольное имя файла):
Файлы документов содержат все необходимые данные для правильного отображения содержимого документа в окне редактирования с указаниями координат расположения блоков, фактического содержания и характера выполняемых операций, форматов предоставления информации и т. д. [Таким образом, файл содержит кроме текста, отображаемого на рабочем листе, специальные команды, адресованные Maple, аналогично файлам HTML, имеющим теги, предназначенные для интерпретации браузером.
Предусмотрена возможность записи документов и в особом формате LaTeX, предназначенном для создания книг и статей по математике. Текстовые файлы (с расширением .txt) можно просматривать и редактировать текстовыми редакторами, работающими с ASCII-кодировкой.
Важно отметить, что даже при записи документов со сложными рисунками используется не прямая запись их растровой или векторной копии, а сохранение данных для построения графиков. Поэтому размеры файлов Maple 7 невелики и их легко передавать по современным средствам телекоммуникаций, например по сети Интернет. Они требуют небольшого свободного пространства на дисках для записи. Тем не менее, чем сложнее график, содержащийся в документе, тем больше объем памяти, необходимой для хранения файла. Помимо обычных операций по работе с файлами (запись „а диск и загрузка с диска) предусмотрены возможности распечатки документов принтерами различного типа.
Меню File содержит основные операции для работы с файлами документов (рис, 3.1).
Рис. 3.1. Меню File и пустое окно нового документа
Меню содержит ряд операций, разбитых на группы. В первую группу входят следующие операции по работе с документами (в скобках приведены горячие клавиши):
Вторая группа команд относится к печати документов:
Вторая из этих команд позволяет распечатать весь текст документа с комментариями, математическими формулами, таблицами и графиками. Печать производится принтерами в графическом режиме, поэтому и не очень быстро. Зато печатаются все шрифты и математические спецзнаки. Можно напечатать и отдельные части документа.
После этой группы команд имеется список документов (файлов с расширением .ms), которые были загружены в систему в предшествующие сеансы работы. Выбрав в этом списке название одного из файлов, можно быстро загрузить его, не тратя времени на открытие файла через команду Open. Последняя группа представлена единственной командой:
ПРИМЕЧАНИЕ
Если вы работаете в русифицированной версии Windows, то горячие клавиши могут содержать вместо латинских букв русские эквиваленты. Например, команда New имеет горячие клавиши Ctrl+N, тогда как в меню они могут быть обозначены как Ctrl+T (см. рис. 3.1). На самом деле, как обозначать клавишу: русской буквой или латинской — дело вкуса.
Вернемся к широко используемым операциям первой группы и рассмотрим их более подробно. Заметим, что к некоторым из них можно быстро обратиться с помощью «горячих» клавиш (они указаны в скобках после названия команды). Команда New используется для создания нового документа. Она открывает новое пустое окно редактирования и переводит Maple в режим редактирования (рис. 3.1).
При создании нового документа в его начале появляется ячейка со знаком приглашения >, после которой виден мигающий маркер ввода в виде вертикальной черты |. Ячейка ввода обрамляется открывающей квадратной скобкой. Созданный документ приобретает имя Untitled (N) (в вольном переводе — «Безымянный под номером N», где N — целое число). Следуя приглашению программы, можно приступать к работе в Maple.
Операция New дублируется кнопкой со значком в виде чистого листа, размещенной на панели инструментов. Разумеется, нажать ее вы сможете, только если панель инструментов выведена на экран.
Команда Open служит для открытия созданного ранее документа. Вначале открывается диалоговое окно выбора файла (рис. 3.2). Для быстрого доступа к команде служит значок в виде открывающейся папки на панели инструментов.
Рис. 3.2. Окно открытия документа
В окне Открытие файла вам нужно найти нужный файл, а затем дважды щелкнуть на его имени или на кнопке ОК. Данное окно — пример единых диалоговых окон для всех приложений Windows.
Maple 7 — далеко не первая из версий системы компьютерной алгебры. Каждая очередная версия может иметь модифицированные элементы Maple-языка. Поэтому иногда возникает проблема частичной несовместимости документов, подготовленных в разных версиях системы Maple. Разработчики системы по мере возможностей учли это и предусмотрели автоматическое определение версии Maple, в которой был создан документ. Если выбранный документ был сохранен в старой версии программы, то перед его загрузкой появляется окно, представленное на рис. 3.3.
Рис. 3.3. Окно с предупреждением о загрузке документа другой версии Maple
Нажмите кнопку ОК, и документ будет открыт. Не следует думать, что загруженный документ старой версии Maple непременно будет полностью работоспособен. К сожалению, это не так — некоторые документы требуют коррекции, прежде чем Maple 7 сможет их исполнить.
ПРИМЕЧАНИЕ
Вас не должно удивлять появление в отдельных случаях элементов интерфейса с русскоязычными надписями — например, окно открытия файла (рис. 3.2). Они обусловлены тем, что Maple использует некоторые типовые элементы интерфейса операционной системы Windows. И если последняя русифицирована, то вполне возможно появление элементов интерфейса с русскоязычными надписями.
После загрузки документа его содержимое появляется в новом окне (см., например, рис. 1.16 или 1.17) и можно приступать к работе с ним. Во многих системах открытие нового окна командой New или Орел отменяет все предыдущие действия (значения переменных, функции и т. д.). Но в Maple 7 это не так — поскольку система предполагает совместную работу в нескольких окнах, каждое новое окно будет «знать» о происходившем в других окнах. Если же вы хотите начать с нуля в новом окне — исполните в нем команду restart. Maple 7 позволяет работать и с документами, представленными в HTML формате и имеющими URL-адрес. Для загрузки таких документов служит команда Open URL. Она открывает простое окно с полем для ввода URL-адреса. Работа с ним очевидна.
Команда Save записывает содержимое активного в данный момент окна в виде файла на диск с использованием его текущего имени. Исключением будут документы, созданные командой New и не переименованные, тогда действие команды будет аналогично выполнению команды Save as, обсуждаемой ниже. Следует с осторожностью пользоваться командой Save в том случае, когда вы модернизируете какой-либо документ, но желаете сохранить оригинал в неизмененном виде, ведь содержимое модернизированного файла будет записано «поверх» оригинала. Чтобы этого не произошло, для сохранения файла следует воспользоваться командой Save as, описанной в следующем разделе. При подготовке сложных документов рекомендуется периодически (в некоторых ситуациях довольно часто) давать команду Save, сохраняя сделанные изменения. Это позволяет избежать потери хотя бы части проделанной работы в случае сбоя компьютера. (Не важно, чем будет вызвано выключение или зависание компьютера — халтурной работой электрика или программиста или шалостью вашего ребенка — если вы лишний раз сохраните файл, вам придется меньше сил потратить на его восстановление.) Выполнение команды Save не приводит к выдаче сообщений и окон (кроме уже упомянутого исключения), и поэтому ее не обременительно дать лишний раз, особенно если вы запомните «горячие» клавиши для нее — Ctrl+S.
Команда Save As отличается от предыдущей тем, что перед записью файла на диск в появившемся диалоговом окне вы можете изменить имя файла (рис. 3.4).
Таким образом можно сохранить доработанный документ и в то же время оставить неизменным оригинал.
Рис. 3.4. Диалоговое окно для записи файла с указанием его имени
В списке Папка нужно найти папку, в которую вы хотите поместить файл, а в поле Имя файла вам нужно указать новое имя. Впрочем, не обязательно новое — если вы выберете другую папку, то можете сохранить и ее старым именем — оригинал не пострадает. , Maple позволяет сохранить файл в следующих форматах (список внизу окна):
Формат HTML — новый для Maple формат, позволяющий записывать файлы документов в виде web-страниц. .
Команда Save as особенно полезна при доработке и модификации файлов, например входящих в комплект поставки системы, когда надо сохранить оригинальные файлы в неприкосновенности. Для этого достаточно записать измененные файлы под новыми именами.
Maple 7 имеет возможность экспорта файлов в различные форматы. Команда Export As открывает подменю, содержащее форматы, запись в которых поддерживает Maple После выбора нужного формата в подменю появляется окно, аналогичное окну для сохранения файла.
Maple экспортирует файлы в следующие форматы:
Графики Maple может записывать в следующих форматах: DFX, EPS, GIF, JPEG, POV, WMF и BMP.
Команда Close закрывает окно вместе с текущим документом, и система переходит к работе со следующим окном (либо к пустому серому окну, если был закрыт последний документ).
Если закрываемый документ подвергался модификации, то система спросит, надо ли сохранять изменения (рис. 3.5).
Рис. 3.5. Диалоговое окно, появляющееся при закрытии модифицированного документа
Следует помнить, что каждое окно, будучи сложным графическим объектом, занимает определенный и вовсе не малый объем памяти. Поэтому команда Close является эффективным средством освобождения оперативной памяти, особенно когда закрывается большой документ. Однако надо помнить, что бывшие в нем определения (например, значения переменных, введенные функции пользователя и т. д.) сохраняются в памяти, даже когда документ закрыт, естественно, пока вы не дадите команду restart.
Быстро закрыть документ можно, нажав клавиши Ctrl+F4.
Для записи сделанных настроек Maple в меню File предусмотрены две команды: Save Settings и Auto Save Settings. Последняя команда — это флажок, при установке которого новая настройки Maple будут записываться автоматически при завершении работы.
Команда Exit служит для выхода из Maple. Тогда при использовании операции Exit можно наблюдать последовательное исчезновение окон документов. Если пользователь забыл записать какой-либо документ на диск, система сообщит об этом, выдав запрос. Нужно ответить Yes (Да), если документ нужно сохранить, и No (Нет), если сохранение не требуется. Однако стоит сохранить документы, подвергавшиеся редактированию и модификации, заранее — вдруг вы по ошибке нажмете не ту кнопку.
Не следует применять команду Exit, если вам необходимо временно переключиться в окно другой программы, так как повторная загрузка Maple занимает много времени.
Команда Print служит для печати документа. Она имеет кнопку с изображением принтера на панели инструментов для быстрого доступа.
После того как отдана команда Print, появляется диалоговое окно, показанное на рис. 3.6, — стандартное окно печати в Windows.
Рис. 3.6. Окно печати
Нажатие кнопки Свойства в окне печати открывает окно свойств выбранного принтера. Вид окна зависит от типа принтера, функции его элементов достаточно очевидны, поэтому мы воздержимся от обсуждения работы с ним.
Таким образом, в списке вверху окна печати прежде всего следует установить принтер. Можно просто оставить установленный по умолчанию. В диалоговом окне также можно указать диапазон страниц для печати и число копий, а также установить флажок для разбора страниц по копиям. В целом диалог с компьютером при осуществлении операции печати прост и нагляден.
Даже одна страница документа может не поместиться на экране монитора. Поэтому перед печатью полезно просмотреть расположение элементов документа на странице. Для этого служит команда Print Preview, которая выводит окно' с изображением текущей страницы (рис. 3.7).
Рис. 3.7. Предварительный просмотр страницы, предназначенной для печати
У окна просмотра имеется ряд элементов управления. Прежде всего это полосы прокрутки для перемещения изображения документа в окне просмотра. Кроме того, имеется ряд кнопок, назначение которых указано ниже:
Использование команды Print Preview может сэкономить не один лист читой бумаги и картридж краски.
Печать документов — одна из основных функций любой среды подготовки документов. В общем случае она предполагает установку параметров принтера. Для этого служит команда Printer Setup, приводящая к открытию диалогового окна, показанного на рис. 3.8.
Рис. 3.8. Диалоговое окно настройки параметров принтера
Следует отметить, что вид этого окна будет варьироваться в зависимости от принтера и может существенно отличаться от приведенного на рисунке. Однако большинство параметров, которые требуют пользовательского вмешательства, очевидны.
Как видно из рис. 3.9, меню Edit содержит различные операции редактирования. Они делятся на ряд групп. Первая группа содержит следующие операции:
Рис. 3.9. Меню Edit
Операции первой группы используют буфер обмена (Clipboard). Так называется специально организованная и динамически изменяющаяся область памяти в операционной системе Windows. В нее могут помещаться различные (обычно предварительно выделенные) объекты, документы и даже файлы. Буфер можно использовать для обмена объектами как в пределах текущего документа, так и между различными документами и даже приложениями.
ПРИМЕЧАНИЕ
Очень часто некоторые операции меню Edit будут недоступны — они отображены серым шрифтом это означает, что в данный момент не существует объекта, к которому может быть применена команда. Однако в демо-версии Maple команды копирования и вставки будут недоступны всегда — таково ограничение создателей.
Несколько следующих групп представлены одной операцией:
Последняя команда позволяет менять режим строк ввода — они могут содержать математические выражения или неисполняемые текстовые комментарии. Именно благодаря текстовым комментариям документы Maple 7 приобретают достаточно наглядный вид. Наглядность документов дополнительно повышается благодаря возможности представления результатов вычислений (а иногда и вводимых выражений) в естественной математической форме. Восьмая группа команд открывает подменю, содержащие команды с ячейками и секциями документа:
Команды подменю Split or Join позволяют легко модифицировать вид документов путем разделения и объединения строк и секций.
Команда Undo Delete служит для отмены последней операции редактирования. Она позволяет удалить до 5 последних операций. Если вы случайно удалили нужный текст — вам придет на помощь команда Undo. В меню, а также во всплывающей подсказке указывается название последней операции редактирования — той, которую вы собрались отменить.
Команда Redo позволяет вернуть отмененную операцию, если в этом возникает необходимость. Действие этой команды, естественно, тоже распространяется не более чем на пять операций. Команды Undo и Redo имеют кнопки (с изображением стрелок) на панели инструментов для быстрого доступа к себе.
Команда Cut копирует выделенный объект в буфер обмена и удаляет его из документа. Выделить объект или группу объектов можно, обведя его мышью при нажатой левой кнопке. Можно также использовать клавиши перемещения курсора при нажатой клавише Shift. Выделенный фрагмент отмечается черным фоном и инверсией цвета входящих в него символов (на рис. 3.9 выделена первая строка).
Графические объекты не инвертируют свои цвета при выделении, к тому же их можно вырезать и копировать, когда на них находится маркер ввода. Вырезанный командой Cut объект поступает в буфер обмена, а его изображение в окне редактирования исчезает. Эта команда выполняется также комбинациями клавиш Shift+Del и Ctrl+X (в зависимости от настроек операционной системы). На рис. 3.10 показан результат выполнения команды Cut — видно исчезновение выделенного на предыдущем рисунке фрагмента в документе.
Рис. 3.10. Документ с рис. 3.9 после выполнения команды Cut
Щелчок левой кнопкой мыши за пределами выделенных объектов снимает все выделения.
Команада Сору аналогична Cut, но с одним существенным отличием — выделенный объект (или блок объектов) не удаляется в окне редактирования. Эта команда обычно используется в том случае, когда нужно перенести заданный объект в другое место, сохранив при этом оригинал, — продублировать объект. Особенно полезна операция Сору при составлении документа из частей других документов, в том числе страниц справочной системы Maple (рис. 3.11). Переключаясь между окнами с помощью команд Сору и Paste, описанных ниже, можно с легкостью составить достаточно большой документ, не написав ни строки.
Рис. 3.11. Пример переноса выделенной в одном документе строки в окно другого документа
В данном случае титульная надпись, удаленная командой Cut, перенесена в другой, пустой, документ.
В Maple 7 имеется возможность переноса объектов из одного окна в другое методом перетаскивания (Drag and Drop). Для этого на группу выделенных объектов надо навести указатель мыши и при нажатой левой кнопке начать перенос объектов в новое место или новое окно. Отпустив левую кнопку мыши, можно наблюдать перенос объектов на новое место. Если все время держать нажатой клавишу Ctrl, то переносимый блок объектов будет сохранен и на старом месте.
Команда Copy As Maple Text используется в тех случаях, когда необходимо, чтобы скопированная в буфер информация была представлена в текстовом формате. При этом в буфер копируются выражения как из строк ввода, так и строк вывода — все в текстовом формате. Используя в этом случае команду Paste можно вывести из буфера все выражения как из входных, так и из выходных строк в текстовом формате (рис. 3.12).
Рис. 3.12. Пример использования операций Copy as Maple Text и Paste
Обратите внимание, что графическое представление интеграла в строке вывода превратилось в его отображение в текстовом формате. То же имеет место в отношении представления производных, сумм, произведений и т. д. Обратите также внимание на то, что текстовый комментарий в данном случае выводится стандартным шрифтом. Атрибуты (признаки) стиля, цвета и размера символов теряются.
Команда Paste копирует содержимое буфера обмена, помещенное туда командами Сору или Cut, в место, указанное маркером ввода. При этом сохраняются форматы всех объектов документа, если они были скопированы (рис. 3.13).
Как видно из рис. 3.13, возможно применение этой операции не только в пределах окна одного документа, но и при переносе данных из одного окна в другое.
Надо отметить, что при копировании в буфер обмена математической формулы из ячейки вывода и вставке ее в строку ввода формат формулы меняется — она автоматически превращается в текстовое выражение. Это иллюстрирует рис. 3.14.
Рис. 3.13. Пример использования операций Сору и Paste
Рис. 3.14. Пример копирования формулы из ячейки вывода одного документа в ячейку ввода другого документа
Различные варианты преобразования форматов при использовании операций копирования и вставки надо учитывать при подготовке сложных документов.
Операция Paste As Maple Text служит для вставки данных из буфера обмена с одновременным их преобразованием в текстовый формат.
Если данные в буфер обмена поступили в результате выполнения операции Сору as Maple Text, то при операции Paste Maple Text в документ будут скопированы только данные из строк ввода в формате Maple-текста. Это показано на рис. 3.15.
Рис. 3.15. Пример использования операций Copy as Maple Text и Paste Maple Text
Любопытно сравнить две пары операций, действие которых демонстрируют рис. 3.12 и 3.15.
Команда Delete Paragraph служит для уничтожения блока ввода, на котором расположен курсор. При этом в буфер обмена удаленный текст не заносится. В отличие от операции вырезания Cut ее применение не загружает буфер и предотвращает нехватку оперативной памяти. Если вы случайно удалите нужную строку — есть время спохватиться — дайте команду Undo.
Команда Select All выделяет все объекты документа. Это полезно, например, для вставки всего документа в другой документ.
Команда Find служит для поиска указанного фрагмента в тексте документа. Она открывает окно Find, в котором можно указать искомую фрагмент-подстроку (рис. 3.16). При нажатии кнопки Next будет производиться поиск следующего вхождения (ниже по тексту), а при использовании Previous — предыдущего. Если искомое слово не найдется, выводится окно с сообщением (слева на рис. 3.17).
Рис. 3.16. Поиск заданного фрагмента текста
При обнаружении указанного фрагмента он выделяется, и маркер ввода устанавливается в начало найденной подстроки. После этого можно приступить к ее редактированию.
С помощью команды Find возможна также замена подстроки. Для этого надо указать текст замены в нижнем поле окна. Чтобы заменить найденную подстроку, надо нажать кнопку Change, чтобы заменить все подстроки, — Change All.
Рис. 3.17. Пример замены одной подстроки другой
Maple 7 позволяет вводить в ячейки текст комментариев и исполняемые математические выражения (для того чтобы ввести в одну ячейку комментарий и функцию Maple, надо воспользоваться командами меню Insert). Операция Input mode служит для переключения между режимами ввода. Горячая клавиша команды — F5. Если режим ввода текста комментария включен, приглашение в виде знака > исчезает. Если этот режим отменен, то можно вводить исполняемые математические выражения, придерживаясь синтаксиса языка Maple.
Команда Split or Join служит для разделения или объединения объектов документа, она открывает подменю со следующими операциями:
Команда Execute служит для запуска вычислений во всех выделенных ячейках или во всех ячейках документа. Соответственно она имеет подменю с двумя командами:
Заметим, что альтернативой является нажатие клавиши Enter для каждой исполняемой строки документа, что при больших документах довольно нудное занятие.
Команда Remove Output служит для удаления из документа всех ячеек вывода. Это полезно для редактирования ячеек ввода, поскольку объем документа при этом заметно сокращается. Она открывает подменю с двумя командами:
Рассмотрим, к примеру, документ, который был представлен на рис. 3.16. После выполнения для него команды Remove Output From Worksheet документ принимает вид, показанный на рис. 3.18.
Заметим, что документ с рис. 3.18 можно вернуть к исходному виду, выполнив команду Execute Worksheet, описанную выше. Однако в данном конкретном случае исполнение команды value(") даст сообщение об ошибке, поскольку в версиях Maple 6 и 7 данная команда должна быть записана в виде valueU).
Рис. 3.18. Документ после удаления всех ячеек вывода
Документ системы Maple 7 состоит из различных объектов — текстовых областей, областей ввода, ячеек, абзацев, секций, подсекций и т. д. Некоторые из них формируются автоматически по мере ввода и исполнения документа. Но, кроме того, в меню Insert (рис. 3.19) сосредоточены основные команды по обеспечению вставки различных объектов в редактируемый документ. Это позволяет быстро модифицировать документ и добиться его большей выразительности.
Рис. 3.19. Меню Insert
Следует отметить, что меню Insert является контекстно-зависимым. К примеру, оно исчезает, если выделен график.
Меню вставки разделено на две группы. В первой группе содержатся следующие команды:
Во второй группе содержатся следующие команды:
Перейдем к более подробному рассмотрению этих команд.
Команда Text приводит к исчезновению знака приглашения , после чего можно сразу же начинать ввод текста комментария. Данная команда позволяет формировать ячейку, содержащую текст комментария и исполняемые функции.
Команда Standard Math выводит в строке ввода вопросительный знак. После этого в поле ввода строки форматирования можно начинать ввод неисполняемого математического выражения (рис. 3.20).
Рис. 3.20. Ввод математического выражения по команде Standard Math
По завершении ввода надо нажать клавишу Enter, и выражение появится в строке ввода (рис. 3.21). При этом выражение будет выделено.
Рис. 3.21. Завершение ввода по команде Standard Math
Команда Maple Input в меню Insert превращает текущую строку в строку ввода исполняемых математических выражений. В начале строки появляется приглашение ко вводу в виде значка , после чего можно начинать ввод выражения. Кнопка со знаком х в начале контекстной панели позволяет представить вводимое выражение в естественной математической форме, если таковая возможна. В таком случае ввод выражения осуществляется в поле на контекстной панели инструментов.
Команда Standard Math Input выводит новую строку ввода со знаком вопроса в ней. После этого ввод начинается в поле ввода строки форматирования. По завершении ввода нажимается клавиша Enter и введенное выражение появляется в строке ввода (обычно с выделенной последней частью).
Команда Execution Group обеспечивает вывод подменю с двумя командами:
Напоминаем, что признаком исполняемых ячеек является знак приглашения . Данные команды позволяют ввести в любом месте документа новые входные ячейки, что часто бывает нужно при модификации документов.
Электронные таблицы были впервые введены в реализацию Maple V R5. В системе Maple 7 для вставки электронных таблиц используется команда Insert Spreadsheet. Она выводит шаблон пустой таблицы, показанный на рис. 3.22. Как видно из рис. 3.22, электронная таблица представляет собой двумерный массив ячеек, имеющих адресацию по строкам и столбцам. Номера строк задаются цифрами, а номера столбцов — латинскими буквами. Верхняя левая ячейка имеет адрес А1, где А - номер столбца и 1 - номер строки. Если одиночные буквы в номерах столбцов заканчиваются, происходит переход на двухбуквенные адреса (АА, АВ, АС и т. д.). Такая адресация используется в функциях обработки табличных данных.
Рис. 3.22. Вставка шаблона электронной таблицы
По команде Insert Spreadsheet вставляется пустая электронная таблица, во всех ячейках которой нет никаких данных. Однако помимо заполнения таблицы с помощью соответствующих операций можно провести заполнение вручную. Для этого достаточно мышью выделить ячейку, щелкнув в ней левой кнопкой. Ячейка обводится черным контуром (ячейка А1 на рис. 3.22), и появляется контекстное меню с полем для ввода выражения. Во время ввода выражения ячейка покрывается серой сеточкой. Если после набора выражения нажать клавишу Enter, то числовое значение выражения будет помещено в ячейку А1 таблицы. К примеру, на рис. 3.23 показано введенное выражение 2+3. Однако в поле редактирования сохраняется исходное выражение (рис. 3.23).
Если маркер ввода находится в одной из ячеек электронной таблицы, становится доступным меню Spreadsheet (рис. 3.23).
Для работы с таблицами в Maple 7 появилось отдельное меню Spreadsheet (рис. 3.23). Оно содержит набор команд, обеспечивающих работу с табличными данными:
Рис. 3.23. Шаблон электронной таблицы и меню Spreadsheet
Если таблица активизирована (курсор находится внутри таблицы), то нажатие правой клавиши мыши вызовет появление контекстного меню. Его вид аналогичен виду описанного выше меню Spreadsheet.
Возможности Maple 7 в обработке табличных данных намного превосходят возможности обычных табличных процессоров. В частности, наряду с текстовыми и численными данными электронные таблицы Maple 7 могут работать с символьными данными — формулами.
Для ввода данных в ячейку таблицы достаточно щелкнуть на ней мышью. После этого можно вводить нужные данные в поле ввода контекстной панели (она видна на рис. 3.22 и 3.23 под панелью инструментов). Контекстная панель в режиме редактирования таблиц имеет четыре кнопки. Их назначение (слева направо) следующее:
Основным способом ввода данных является активизация ячейки таблицы мышью и ввод данных (объектов) в поле ввода контекстной панели. Нажатие третьей кнопки (Accept the input and evaluate it) или нажатие клавиши Enter приводит к вводу данных в ячейку и их исполнению.
Имеется ряд возможностей для автоматического заполнения ячеек таблицы. Например, можно заполнить ряд ячеек, примыкающих к заданной ячейке, предварительно наметив направление заполнения. Для этого курсор помещается в заданную ячейку, а затем мышь перемещается в нужном направлении при нажатой левой кнопке. На рис. 3.24 показан случай, когда в заданную ячейку А1 помещено число 2 и затем мышью выделены первые ячейки столбца А. Теперь, нажав первую кнопку (Fill a range of cells) на контекстной панели форматирования (или исполнив команду Spreadsheet Fill Down в меню), можно вывести окно автоматического заполнения ячеек таблицы — Fill. Это окно также показано на рис. 3.24. В этом окне можно задать направление заполнения (обычно по умолчанию задано уже направление заполнения при выделении ячеек) и указать шаг изменения аргумента и значение, которого он не должен превышать. Например, на рис. 3.24 заданы шаг 3 и конечное значение 21. Нажав кнопку ОК, можно увидеть автоматическое заполнение таблицы. При этом она принимает вид, показанный на рис. 3,25.
В ячейки таблиц можно вносить различные математические формулы в соответствии с синтаксисом языка Maple 7. При этом возможно сослаться на любую другую ячейку. Такая ссылка указывается значком тильда (-) перед адресом ячейки. Так, обозначение ~А1 означает, что будут подставлены данные из ячейки А1.
В качестве примера составим таблицу значений n, интеграла int(x^n.x) и производной diff (x^n, x) для n = 1.. 9. В готовом виде эта таблица представлена на рис. 3.26.
Подготовка такой таблицы проходит в три этапа. Вначале формируется первый столбец вводом в ячейку А1 имени переменной n, а в ячейку А2 — значения 1. После этого выделяются ячейки от А2 до А10 и с применением автоматического заполнения они заполняются числами от 1 до 9.
Рис. 3.24. Подготовка к автоматическому заполнению ячеек под заданной ячейкой
Рис. 3.25. Электронная таблица с рис. 3.24 после автоматического заполнения ячеек первого столбца
Рис. 3.26. Электронная таблица с символьными данными
Затем во втором столбце в ячейку В1 вводится инертная формула Int(x^-Al.x), a в ячейку В2 — исполняемая формула int(x*~A2.x). После этого выделяются ячейки от В2 до В10 и исполняется команда Spreadsheet Fill Down. В результате формируется столбец с символьными значениями интегралов. Аналогично (третий этап) задается формирование столбца с символьными значениями производной от x^n (рекомендуем сделать это самостоятельно для закрепления навыков работы с электронными таблицами в среде Maple 7).
ПРИМЕЧАНИЕ
Выше описаны лишь основы работы с электронными таблицами в среде Maple 7. Для более полного знакомства с техникой применения электронных таблиц нужно обратиться к справочной системе Maple 7.
Для вставки строки текстовой области служит операция Paragraph. Она создает строку без приглашения >, в которую можно вводить текст. Единственным отличием этой команды от команды Text является то, что она вставляет новую строку, не меняя статуса имеющихся строк. При вводе длинных текстов число строк ввода автоматически увеличивается.
Команда Section служит для установки кнопки, указывающей начало секции (см. рис. 2.6 с такой кнопкой) и служащей для открытия/закрытия секции. Секция может состоять из различных объектов: текстовых комментариев, строк ввода, строк вывода, графиков и других секций (подсекций).
Как и в операционной системе Windows, значок *+» указывает на закрытую секцию, значок «-» — на открытую. Секции предоставляют дополнительную свободу управления документом.
Подсекцией называют секцию, размещенную внутри другой секции. Создавая подсекции, можно строить документы со сложной древообразной структурой, напоминающей разделы книги с хорошей рубрикацией. Это может оказать большую помощь в создании электронных вариантов книг и обучающих программ в среде Maple 7.
Команда Subsection создает кнопку секции внутри уже созданной секции. Все, сказанное о секциях, распространяется и на подсекции!
Еще одна возможность сделать документы более удобными в работе заключается в создании гиперссылок. Гиперссылка — это текстовая надпись, подчеркнутая снизу, при щелчке на которой Maple перейдет к сопоставленному с ней объекту. Гиперссылку можно связать со следующими объектами:
Для создания гиперссылки надо установить на место будущей ссылки маркер ввода и выполнить операцию HyperLink. При этом появится окно связывания гиперссылки с объектом, показанное на рис. 3.27.
В окне надо задать заголовок гиперссылки (в виде короткой текстовой надписи) и выбрать одно из трех положений переключателя, перечисленных выше. Если вы намерены сослаться на документ, то следует использовать кнопку просмотра Browse для поиска нужного файла. Появляющееся окно показано на рис. 3.27 справа.
Как уже говорилось, гиперссылка выглядит как надпись, подчеркнутая снизу. Активизируя ее, можно вызвать объект, связанный с ней, — в нашем случае другой документ, файл которого находится на жестком диске. Использование гиперссылки на другой документ в Maple 7 реализовано не очень удачно. Дело в том, что в этом случае исходный документ по умолчанию закрывается. Если последние изменения в нем не были сохранены, то появляется окно с предупреждением об этом.1 Оно показано на рис. 3.28.
Можно избежать закрытия документа, щелкнув на кнопке New Window; Maple предоставит открывающемуся документу новое окно. Это иллюстрирует рис. 3.29. В нем также показано контекстное меню гиперссылки. Это меню содержит три команды:
Рис. 3.27. Пример создания гиперссылки
Рис. 3.28. Окно с предупреждением о закрытии документа при переходе по гиперссылке и необходимости сохранения изменений
Рис. 3.29. Результат активизации гиперссылки
Гиперссылки позволяют создавать сложные структуры документов, содержащие множество объектов, вызываемых в произвольном порядке. Например, для возврата в исходный документ можно организовать обратную гиперссылку в вызываемом документе. Лучшим примером такого применения гиперссылок является справочная система Maple 7. Гиперссылки также широко используются при создании web-страниц. Maple 7 позволяет сохранять документы в виде web-страниц (формат HTML), которые без каких-либо преобразований можно публиковать в сети Интернет.
Весьма привлекательной кажется возможность организации гиперссылок на разделы справочной системы. Она позволяет создавать учебные программы со ссылками на справки системы Maple 7.
Операции форматирования служат для придания отдельным объектам и документу в целом определенного стиля путем изменения как общего вида объектов, так и ряда их частных характеристик, например цвета и размера надписей, выбранного набора шрифтов и т. д. При этом возможна подстройка под вкус любого пользователя и подготовка документов высокого полиграфического качества. Стиль является центральным понятием для современных документов, будь то документы текстового процессора класса Word или системы символьной математики Maple 7.
Команды форматирования в меню Format разбиты на шесть подгрупп. В первой подгруппе содержатся две команды:
Во второй подгруппе имеются три наиболее распространенные команды изменения начертания надписей:
Заметим, что все они дублируются кнопками на панели инструментов и горячими клавишами. При редактировании документов использование кнопок и горячих клавиш более удобно.
В третью группу попали команды выравнивания текста:
В четвертой группе находятся следующие команды:
В последнюю группу попала еще одна команда, не имеющая непосредственного отношения к форматированию символов:
Рассмотрим применение команд форматирования.
Команда Styles является основной, поскольку позволяет задать стиль текста — определенный набор значений доступных параметров: размещение на странице, выравнивание, шрифт, начертание, цвет, размер и т. д. Единство стилей документов важно при включении их в отчеты, курсовые и дипломные проекты, диссертации и иные документы. Придерживаться определенных стилей — это правило хорошего тона при работе как с текстовыми процессорами, так и с математическими системами. Именно поэтому ориентация на определенный стиль подготовки документов стала неотъемлемой частью пользовательского интерфейса системы Maple 7.
Операция Styles выводит диалоговое окно Style Management, в котором можно как изменить уже существующий стиль, так и создать новый (рис. 3.30).
Рис. 3.30. Окно задания и модернизации стилей
В большинстве случаев пользователя Maple 7 вполне удовлетворят стили, заданные по умолчанию. Более того, надо помнить, что задание своего стиля неизбежно означает повышение риска несовместимости при обмене документами Maple 7. Поэтому без особой на то необходимости изменять стандартный стиль не рекомендуется.
Однако бывают принципиальные обстоятельства, когда изменение стиля необходимо. Например, при выводе титульных надписей для графиков Maple 7 используют стандартный англоязычный шрифт Courier New. При вводе русскоязычных надписей Maple 7 воспринимает их вывод как ошибку, поскольку набор символов при вводе не соответствует набору символов, заданному в стиле. Таким образом, для организации вывода русскоязычных надписей необходимо сменить набор символов (шрифт), то есть изменить стиль. Покажем, как это делается. Вначале в списке стилей надо выбрать наименование Title, после чего нажать кнопку Modify. Появится окно Paragraph Style с параметрами стиля Title (рис. 3.31).
В этом окне надо нажать кнопку Font. Появится новое окно (оно также показано на рис. 3.31) для выбора шрифта. В нашем случае достаточно заменить шрифт по умолчанию Courier New на шрифт Courier New Cyr. Он содержит символы кириллицы, то есть буквы русского языка. После этого задание титульных надписей для графиков на русском языке перестает быть проблемой.
Рис. 3.31. Окна установки параметров абзацного стиля для абзаца и для выбора шрифта
Разумеется, в понятие стиля входит не только шрифт, но и размер, начертание, цвет и т. д. Все это можно настраивать, используя описанные выше окна. При необходимости изменения стиля можно записать его в специальный файл, используя кнопку Save As Default. При этом измененный стиль становится принятым по умолчанию. Кнопка Revert As Default позволяет вернуться к типовым стилям, которые заданы разработчиками системы. Если стили подверглись небольшим изменениям, то можно сохранить их с помощью кнопки Merge Existing.
Для форматирования абзацев служит команда Paragraph. Она сразу выводит окно установки параметров абзаца. Это окно было показано на рис. 3.31. Правила работы с этим окном уже были описаны выше, так что нет смысла их повторять.
Команда Character открывает окно задания стиля символов: шрифта, размера, начертания и цвета.
Ранее описывалась операция вставки кнопки секции. При выполнения вставки сама секция еще пуста и ее надо заполнять. Команда Indent (или комбинация клавиш Ctrl+.) позволяет оформить в виде секции уже введенные ячейки. На рис. 3.32 показано такое оформление для ячейки документа с вычислением интеграла. Кнопка при этом имеет знак «минус», что указывает на ее открытое состояние.
Рис. 3.32. Применение операции Indent для одной из ячеек документа
Если щелкнуть на кнопке со знаком «минус», то секция свернется и вместо нее останется только кнопка со знаком «плюс» (рис. 3.33).
Хотя данная книга посвящена одной Maple 7, надо особо отметить, что эта программа способна взаимодействовать с рядом других программ, например с текстовым процессором Word, табличным процессорам Excel и даже с другими системами компьютерной математики, например, MATLAB. Это может быть копирование через буфер обмена или связь с применением механизма OLE. В роли объектов могут выступать ячейки из данного или других документов, текстовые фрагменты и файлы, рисунки в различных форматах и т. д. Работа с объектами существенно расширяет возможности пользователя по части создания полноценных и удобных в работе документов.
Для организации вставки объекта используется команда Insert > Object. Она выводит окно со списком тех приложений, с которыми возможна связь с применением механизма OLE. Это окно показано на рис. 3.34. Maple 7 использует стандартное окно вставки объектов из операционной системы Windows, поэтому если она русифицирована, то окно имеет русскоязычные надписи.
Рис. 3.34. Окно вставки объекта
Если оставить переключатель в первом положении, то объект может быть создан заново с помощью подходящего приложения, например редактора Paint. Этот процесс показан на рис. 3.35.
Рис. 3.35. Подготовка объекта в графическом редакторе PhotoShop
После того как объект готов, достаточно выйти из приложения, в котором он создавался, — в нашем случае из редактора Paint. Для этого в меню редактора имеется команда File > Exit. Окно Paint исчезнет, а сам объект появится в той ячейке Maple 7 (рис. 3.36), в которой был установлен маркер ввода в момент дачи команды вставки объекта.
Рис. 3.36. Пример документа со вставленным объектом-рисунком
Вместо рисунка (или другого объекта) можно поместить в документе Maple 7 значок — гипермедиа-ссылку. Для этого в окне на рис. 3.34 надо установить флажок В виде значка. Щелчок на вставленном в документ значке вызовет появление объекта. Этот способ удобен, когда объекты, например рисунки, имеют большой размер и их постоянное присутствие на экране нецелесообразно.
Необязательно каждый раз создавать объект с нуля — можно загрузить его из файла, в этом случае следует установить положение переключателя Создать из файла. Для поиска нужного файла пригодится кнопка Обзор. После выбора файла надо решить, какой вид будет иметь значок связи с файлом — вид стандартного значка или уменьшенной копии изображения.
Если объект выделен (как обычно, щелчком мыши), то команда Edit > Object становится активной и может даже модифицироваться в зависимости от вида объекта, с которым установлена связь. Например, если объектом является .рсх-файл, то эта строка меню открывает подменю с тремя командами:
Редактирование объекта производится в среде того приложения, с которым объект связан. Естественно, что изменение файла повлечет за собой отражение в документе его измененного варианта. Следует отметить, что в некоторых копиях программы Maple 7 операция Object не работает. Однако сохраняется возможность редактирования объекта в создавшей его программе после двойного щелчка на нем.
В этом уроке мы научились:
Для управления видом интерфейса и документа служит меню View. Оно содержит ряд флажков и несколько команд управления общим видом программы (рис. 4.1). Установленные флажки, управляющие показом элементов интерфейса, распространяют свое действие на все открытые документы. При выходе из системы (командой Exit) все установки сохраняются, так что при новом запуске системы внешний вид интерфейса будет определяться именно ими.
Рис. 4.1. Меню View
Команды меню View разбиты на несколько групп. Первая группа содержит флажки, относящиеся к управлению показом главной и контекстной панелей инструментов, а также строки состояния системы:
Вторая группа задает показ палитр и представлена одной командой, открывающей подменю управления показом палитр Palettes, содержащей флажки:
И команды:
Третья группа в меню View задает масштаб отображения документа на экране и установку закладок (bookmarks):
Четвертая группа обеспечивает переходы по гиперссылкам:
Данные команды аналогичны командам браузера и управляются историей переходов по гиперссылкам. Поэтому, если вы не использовали ни одной гиперссылки, данные команды будут недоступны. В основном данные команды и соответствующие кнопки панели инструментов необходимы при работе со справкой Maple.
Пятая группа представлена командой Hide content, открывающей подменю скрытия элементов документа:
Шестая группа параметров управляет показом некоторых объектов документа:
В седьмой группе содержатся следующие команды:
Действие всех перечисленных команд более подробно описано ниже. Рекомендуется поэкспериментировать с командами — когда вы уясните их действие, вы сможете настроить интерфейс Maple на свой вкус.
Панель инструментов (Toolbar) служит для быстрого управления системой без обращения к командам меню. Она позволяет вызывать наиболее часто используемые команды нажатием кнопки. Назначение всех кнопок этой панели было описано выше и представлено на рис. 1.21.
Несмотря на удобства, предоставляемые панелью инструментов, в ряде случаев она не нужна. Например, для ввода исходных данных и их редактирования достаточно иметь на экране только контекстную панель. Панель инструментов полезна при общей отладке документов, открытии нового документа, загрузке имеющегося документа, записи документа на диск, печати документа и т. д. В ряде случаев она просто занимает часть места, нужного для лучшего обзора документа.
Флажок Toolbar управляет показом панели инструментов.
Панель Context Bar служит для размещения кнопок быстрого доступа к операциям с текущим объектом.
Флажок Context Bar задает отображение контекстной панели на экране. Поскольку панель форматирования весьма удобна для оперативной работы, единственным мотивом временного ее удаления является необходимость высвободить больше , места на экране монитора для работы с документом.
Строка состояния внизу экрана, как отмечалось, выводит контекстно-зависимую информацию о состоянии программы в данный момент времени. В ряде случаев ее можно считать элементом контекстно-зависимой справки. Флажок Status Bar служит для управления показом строки состояния.
Палитры математических символов, впервые введенные в версии Maple V R5, являются очень удобным средством для облегчения набора математических выражений начинающим пользователям. Они выводятся на экран командой Palettes и показаны на рис. 1.11. Всего имеются четыре палитры:
Ввод осуществляется на место маркера ввода. Щелчок на кнопке палитры — символ или его аналог окажется в точке ввода. Параметры, которые необходимо указать, при математической нотации выражений имеют вид вопросительного знака, а при Maple-нотации — %?.
Итак, в строке ввода введенный оператор или символ не обязательно повторит оператор или символ палитры. Это хорошо видно из рис. 4.2, на котором показан ввод с помощью палитры выражений шаблона определенного интеграла и его последовательное заполнение. Для наглядности заполнение каждого параметра дано в новой строке ввода.
Рис. 4.2. Пример ввода шаблона определенного интеграла из палитры выражений
Команда Zoom Factor задает масштаб отображения текущего документа. Он задается в процентах относительно масштаба просмотра, заданного по умолчанию, — он принят за 100 %. Команда выводит подменю с перечнем возможных масштабов просмотра. На рис. 4.3 показано, как будет выглядеть документ при установке масштаба просмотра в 150 %. На этом рисунке показано подменю выбора масштаба в открытом виде.
Нетрудно заметить, что все символы документа увеличились при этом в размерах в полтора раза. Эта возможность, безусловно, полезна для пользователей с ослабленным зрением или для учителей, желающих показать примеры решения задач в среде Maple крупным планом для группы учащихся.
Рис. 4.3. Вид документа при масштабе просмотра в 150 %
При работе с большими документами, как и при чтении книг, полезно устанавливать специальные маркеры — закладки. Для установки такой закладки достаточно поместить в нужное место документа маркер ввода и выполнить команду View > Bookmarks > Edit Bookmarks. Она выводит окно добавления и модификации закладки (рис. 4.4). Кнопка ОК вводит новую закладку, а кнопка Cancel позволяет отказаться от выполнения данной операции.
Если теперь вновь посмотреть подменю Bookmarks, в нем появится строка с созданной закладкой (рис. 4.5).
В нашем случае в списке представлены две ранее созданные закладки с именами «Это определенный интеграл» и «А это значение определенного интеграла».
При переходе по закладке строка, в которой установлена закладка, размещается в верхней части окна редактирования и маркер ввода устанавливается в место, которое определено закладкой. Таким образом, закладки — эффективное средство для быстрого перехода в отмеченные места документа. Однако надо помнить, что в отличие от закладок в книгах закладки в документах Maple 7 не видны — они имеются лишь в списке закладок, открываемом командой Bookmarks (рис. 4.5). Удалить созданную закладку не так-то просто: вам нужно перейти по закладке, дать команду View > Bookmarks > Edit Bookmarks и удалить текст в поле имени. Теперь нажатие кнопки ОК приведет к окну с предупреждением об удалении закладки. Нажмите ОК в обоих окнах — и закладка исчезнет.
Рис. 4.4. Пример создания и редактирования закладки
Рис. 4.5. Просмотр закладок
Документы Maple 7 состоят из ряда основных элементов. Это ячейки (строки) ввода и вывода, графики и электронные таблицы. При подготовке различных электронных книг, учебников и статей возникает необходимость скрыть тот или иной компонент документа. Например, педагог может захотеть скрыть от учащихся строки ввода, чтобы они могли мысленно представить функции, отображаемые показанными в документе графиками. Или, наоборот, скрыть графики, чтобы учащиеся назвали их особенности исходя из записи функций. Все эти возможности и обеспечивает команда View > Hide Content.
Для примера на рис. 4.6 показан документ, у которого скрыты все строки ввода и оставлены только строки вывода.
Рис. 4.6. Документ со скрытыми ячейками ввода
Разумеется, можно вернуть показ строк ввода, просто повторно дав эту команду Hide Input в подменю команды View > Hide Content > Hide Input (рис. 4.6). Co скрытием других компонентов документов читатель может разобраться самостоятельно.
В любом документе незримо присутствуют различные непечатаемые символы, например управляющие символы перевода строки или пробелы. Это хорошо известно читателям, работающим с текстовым процессором Word. Иногда полезно вывести эти символы — например, если вам неясно, сколько пробелов стоит между какими-то словами.
Для вывода непечатаемых символов служит команда-флажок Show Invisible Characters (рис. 4.7). Ее можно также дать, нажав кнопку на панели инструментов с изображением управляющего символа перевода строки — «fl». Этот символ, кстати, и является одним из наиболее часто встречающихся управляющих непечатаемых символов.
Рис. 4.7. Вид документа с выводом непечатаемых управляющих символов
Помимо символа перевода строки вы увидите множество символов пробела в виде точки на середине строки. По числу точек между словами можно судить о том, сколько пробелов установлено между ними. Проявятся также табуляции и другие управляющие операции, встречающиеся в документах Maple 7.
Понятие о секциях и подсекциях
Как уже отмечалось, документ Maple 7 состоит из отдельных ячеек (в оригинале — групп, groups). Они выделяются слева длинными тонкими квадратными скобками. Есть еще один способ выделения ячеек — объединение их в секции. Секция начинается с кнопки со знаком «плюс» или «минус» (рис. 4.8), управляющей ее состоянием: открытым или закрытым.
Рис. 4.8. Пример документа с открытой секцией и закрытой подсекцией
Для создания секции или подсекции необходимо дать команду Insert > Section (или Insert > Subsection), что указано на рис. 4.8. Секция выделяется вертикальной одиночной линией, а подсекция — двойной линией.
Секции и подсекции выгодно отличаются от ячеек тем, что они могут быть при необходимости закрыты и представлены только кнопкой со знаком «плюс». Таким образом, в секции удобно помещать различные вспомогательные вычисления, которые не стоит обозревать постоянно. Хотите посмотреть на них — нажмите кнопку, и содержимое секции появится под ней с выделением вертикальной чертой (рис. 4.9).
Секции весьма удобно применять и для подготовки документов в форме электронных книг. В этом случае секции снабжаются текстовыми заголовками и, по существу, являются главами книги, а подсекции — параграфами. Этот способ представления документов нашел широкое применение в сети Интернет, где он (наряду с гипертекстовыми и гипермедиа-ссылками) используется при создании web-страниц. Версия Maple 7 позволяет готовить и сохранять на диске документы в формате HTML, что позволяет напрямую готовить web-страницы.
Рис. 4.9. Пример документа с рис. 4.8 с открытой подсекцией
Итак, обычно секции и подсекции выделяются вертикальными линиями, заканчивающимися короткими горизонтальными штрихами. Это позволяет судить о размерах области экрана, представляющей секцию, особенно если секция большая и целиком не помещается на экране.
Тем не менее в окончательно отлаженном документе необходимость в применении линии показа области секции или подсекции отпадает. С помощью флажка Show Section Ranges можно управлять показом линий выделения областей секций и подсекций. Если этот флажок установлен, то линии показа областей секций и подсекций видны, как на рис. 4.9. Если его снять, то эти линии исчезнут (рис. 4.10).
Обратите внимание, что линии выделения групп (ячеек) остаются.
Рис. 4.10. Вид документа с рис. 4.9 при снятии показа областей секции и подсекции
Команда Show Group Ranges служит для управления показом областей ячеек (групп), то есть длинных квадратных скобок, обрамляющих ячейки слева. Если флажок установлен, то линии показа областей ячеек видны. Если его снять, то эти линии исчезают, как показано на рис. 4.11, где убраны линии выделения как секции и подсекции, так и ячеек.
Убирать линии показа областей ячеек целесообразно, если документ уже отлажен. В таком документе необходимость показа областей выделения ячеек, секций и подсекций отсутствует, хотя иногда их разумно оставлять, так как они способствуют систематизации содержимого документов.
Все секции и подсекции документа можно закрыть командой Collapse All Sections. К примеру, если применить ее к документу, показанному на рис. 4.9, то документ примет вид, показанный на рис. 4.12.
Рис. 4.11. Документ с рис. 4.10 после удаления линий показа областей ячеек
Рис. 4.12. Документ с рис. 4.9 при закрытии всех секций
Документ с закрытыми секциями (и подсекциями) занимает на экране (и при распечатке принтером) минимальное место. При этом, естественно, содержимого секций и подсекций не видно.
Для раскрытия всех секций служит команда Expand All Sections. Она открывает и все подсекции. К примеру, если применить эту операцию к документу, показанному на рис. 4.12, то он вернется к исходному виду (рис. 4.9).
Таким образом, Maple 7 имеет достаточно простые, но в то же время полные средства по управлению видом пользовательского интерфейса (окна) системы и видом имеющегося в нем документа. Это позволяет пользователю настраивать интерфейс и вид документа в соответствии со своими привычками, обеспечивая комфортную работу с программой.
Помимо ряда уже рассмотренных команд в меню Options сосредоточены средства для установки некоторых глобальных параметров ввода и вывода документов. Их число в Maple 7 существенно увеличено.
Первая группа команд содержит две команды:
Во второй группе всего одна команда Browser — задание броузера для перехода по URL.
Третья группа также представлена одной командой:
Четвертая группа содержит 6 команд:
Пятая и шестая группы содержат по одной команде:
С помощью этих параметров можно настроить систему на наиболее приемлемые формы вывода результатов вычислений без задания специальных команд в документе. Однако последние могут отменять параметры, заданные с помощью меню.
Команда Replace Output задает вывод результатов вычислений, заданных в ячейке, в одно и тоже место. Это означает, что если входные данные меняются, то при установленном флажке каждый последующий результат будет замещать предыдущий. Если же флажок снят, то каждый новый результат будет помещаться в новое место, то есть в документе будут выведены подряд (сверху вниз) все результаты вычислений.
Поясним на примере. Допустим, в какой-то строке ввода мы задаем вычисляемое выражение
2+3:
> 2+3; 5
Результат (в данном случае в Maple-нотации) появляется снизу. Теперь в той же строке ввода вычислим 3+4, а затем 4+5. Получим:
> 4+5; 9
Мы заметим, что результат появится на месте прежнего, и в конечном счете мы будем иметь в качестве результата число 9. Теперь снимем флажок Replace Output и проделаем все те же вычисления в новой строке ввода. Получим следующее:
> 4+5; 5
7
9
Здесь видны уже три ячейки вывода. Не следует следует устанавливать флажок Replace Output в том случае, когда желательно знать суть промежуточных преобразований и самих исходных выражений, поскольку они (а возможно, и предшествующие результаты преобразований) при ее использовании исчезают.
Этот флажок, будучи установленным, обеспечивает при нажатии клавиши Enter ввод новой пустой ячейки. Если флажок снят, то такая вставка не осуществляется.
Если работа с системой происходит в форме простейшего диалога, по типу «задать вопрос — получить ответ», то рекомендуется установить режим вставки 'новой ячейки. При этом по окончании вычислений в последней ячейке тут же появляется новая пустая ячейка для последующих вычислений.
Для открытия документов web-страниц (по URL-адресу) Maple 7 использует какой-либо из установленных на компьютере браузеров Интернета. Для этого необходимо указать путь к браузеру с помощью команды Browser. Она открывает окно, показанное на рис. 4.13.
Рис. 4.13. Окно задания браузера Интернета
В этом окне можно установить флажок Use System Default (использовать браузер, заданный в операционной системе по умолчанию). В противном случае путь к браузеру надо указать явно, введя его в поле или отыскав его с помощью кнопки Browse.
Команда Input Display выводит подменю, позволяющее выбрать режим представления выражений в строке ввода:
В качестве примера ниже даны две формы задания ввода двойного интеграла с помощью палитры выражений:
Верхняя строка соответствует Maple-нотации, а нижняя — стандартной математической нотации.
Команда Output Display раскрывает подменю, имеющее четыре команды, влияющие на вид результатов вычислений — вывода:
Рисунок 4.15 наглядно иллюстрирует эти формы вывода. Последняя форма наиболее наглядна и задается по умолчанию.
Рис. 4.15. Демонстрация вывода в различных формах
Первая форма наиболее компактна, но менее всего наглядна. Вторая форма имитирует построение формул с помощью отдельных знаков, расположенных на разных уровнях (строках). Эти две формы позволяют использовать Maple даже в том случае, когда имеются устройства вывода (дисплеи и принтеры), работающие только в текстовых режимах. Третья форма дает вывод в виде обычных математических формул, но без возможности их редактирования.
Четвертая форма позволяет представить результат вывода, там, где это возможно, в виде обычных математических формул с применением типовых математических знаков — интегралов, производных, сумм, произведений, квадратных корней и т. д. В большинстве случаев именно эта форма вывода является наиболее наглядной. Она подобна третьей форме, но допускает редактирование выражений. Как отмечалось, нажатием кнопки с символом «х» в панели инструментов документа можно попытаться и вводимое выражение представить в виде обычной математической формулы. Однако это не всегда удается, поскольку далеко не все однострочные функции системы Maple 7 можно представить таким образом.
На переменные в Maple 7 могут быть наложены различные условия. Для этого используется специальная функция assume. Например, если переменная х может принимать только положительные значения, то для этого достаточно исполнить команду assume(x>0). Будем называть такие переменные предполагаемыми, поскольку предполагается, что они имеют какие-то дополнительные ограничения, помимо накладываемых на них типом.
В подменю Assume Variables меню Options имеются три команды, управляющие контролем признаков предполагаемых переменных:
Предполагаемые переменные при выводе обычно обозначаются значком тильды (-) после их имени. Этот знак отображается при установки флажка Trailing Tildes (по умолчанию она включена). Однако с помощью флажка No Annotation можно отключить как это обозначение, так и короткий текстовый комментарий, который сопровождает предполагаемые переменные. Наконец, флажок Phrase включает вывод текстовых комментариев. Рисунок 4.16 наглядно иллюстрирует применение этих параметров.
Благодаря применению предполагаемых переменных облегчается реализация ряда алгоритмов, критичных к выбору переменных. Например, если использовать вычисление квадратного корня без привлечения понятия о комплексных числах, то на численные значения переменных надо наложить условие их положительности. Контроль за статусом таких переменных и дают описанные параметры.
Рис. 4.16. Применение параметров контроля предполагаемых переменных
Графические результаты могут быть представлены прямо в документе в ячейках вывода или в отдельных окнах. Это обеспечивается двумя командами подменю Plot Display:
На рис. 4.17 показан пример вывода двух графиков — один выводится с применением Inline в ячейку документа (сразу после ввода), а другой с применением Window в отдельное окно. Какой из этих двух вариантов предпочтительнее, зависит от привычек пользователя.
Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.
Рис. 4.17. Пример построения двух графиков с выводом одного из них в отдельное окно
Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.
Двумерные графики обычно строятся с применением функции plot. На рис. 4.18 (и на рис. 1.24 с графиком в документе) представлено назначение кнопок контекстной панели инструментов двумерной графики. Кнопки обозначены номерами под ними, а в окне документа дано их краткое назначение.
Панель инструментов графиков появляется только при активном окне графики или при выделении графика в ячейке документа.
Рис.4.18. Окно двумерного графика и его панель инструментов
Трехмерные графики имеют свою контекстную панель инструментов (рис. 4.19; см. также рис. 1.25 с графиком в документе), с кнопками задания наиболее распространенных параметров для построения трехмерных графиков. Следует отметить, что панели инструментов графических окон дают доступ лишь к части параметров графиков. Более подробно состав и назначение параметров будут рассмотрены в дальнейшем при описании средств создания графиков. -Читателю настоятельно рекомендуется опробовать действие кнопок управления различными форматами графиков, что позволит быстрее освоить огромные возможности Maple 7 в создании цветных и монохромных графиков.
При серьезной работе в среде Maple 7 пользователь нередко вынужден работать одновременно с несколькими документами. Удобства такой работы зависят от того, как окна расположены в пределах экрана. Maple 7 дает возможность расположить их любым стандартным способом.
Основные команды по установке расположения окон сосредоточены в меню Window (рис. 4.20).
Рис. 4.20. Меню Window
Это меню содержит следующие команды:
При выполнении команды Tile устанавливается расположение окон мозаикой показанное на рис. 4.22. При этом окна не перекрываются, имеют примерно одинаковый размер. К сожалению, при большом числе окон область просмотра оказывается настолько мала, что работать с документами при таком расположении окон становится неудобно.
Расположение окон мозаикой достаточно удобно при работе с двумя (или на большом экране тремя) окнами. Оно может быть полезно, например, при переносе содержимого отдельных ячеек с одного документа в другой путем перетаскивания. Можно также копировать объекты в одном окне, а затем, переключившись в другое окно, вставлять содержимое буфера обмена в нужную ячейку, используя команду Paste.
Рис. 4.22. Расположение окон мозаикой
При использовании команды Horizontal окна оказываются расположенными на экране в виде горизонтальных полос (рис. 4.23). Этот вариант расположения окон, как и каскадное расположение, дает обзор заголовков документов, если область просмотра каждого документа расположена сверху окна. Последнее условие может нарушаться при перемещении окон документов.
Команда Vertical задает расположение окон в виде вертикальных полос (рис. 4.24). Такое расположение окон удобно, если содержимое ячеек документов представлено короткими выражениями.
Следует отметить, что описанным командам подчиняются только развернутые в данный момент окна — расположение вновь открытого или развернутого окна не зависит от данных до этого команд.
Рис. 4.23. Горизонтальное расположение окон
Рис. 4.24. Вертикальное расположение окон
Свернутые окна представлены значками. Они могут перемещаться мышью по всему пространству экрана, поэтому иногда значки оказываются хаотично разбросанными (рис. 4.25).
Рис. 4.25. Хаотическое расположение значков свернутых окон
Для наведения порядка с расположением значков можно, разумеется, переместить каждый из них в удобное место. Но это довольно утомительное занятие. Лучше воспользоваться специальной командой Arrange Icons, которая автоматически наводит порядок в расположении значков свернутых окон, аккуратно располагая их снизу экрана. Действие этой команды показано на рис. 4.26. Как и окно, каждый значок имеет строку заголовка с четырьмя маленькими кнопками. Первая из них открывает меню управления, а три другие используются соответственно для восстановления размера, развертывания на весь экран и закрытия окна.
Команда Close All служит для закрытия всех окон одновременно. Эта команда будет выполнена сразу только в том случае, когда все документы не модифицировались или были записаны на диск после внесения исправлений. Если какой-либо документ был изменен, но еще не сохранен, то в центре экрана появится предупреждающее сообщение об этом (рис. 4,27).
Рис. 4.26. Вид экрана после выполнения команды Arrange Icons
Рис. 4.27. Окно, предупреждающие о том, что закрываемый документ был изменен
Разумеется, такое окно будет появляться столько раз, сколько имеется модифицированных документов.
В Maple 7 использована многооконная справочная система с гипертекстовыми ссылками. Поэтому при работе с ней экран системы довольно быстро оказывается забитым окнами справочной системы. Разумеется, их можно последовательно закрывать одно за другим, но это очень неудобно и долго. Команда Close All Help обеспечивает закрытие разом всех окон справочной системы, что позволяет продолжить работу с текущим документом. На окна загруженных документов операция Close All Help влияния не оказывает.
Заканчивая рассмотрение меню Window, надо отметить, что оно завершается списком всех открытых в Maple 7 документов и соответственно окон (рис. 4.26). Щелкнув на той или иной строке этого списка, можно открыть соответствующее окно и сделать его активным.
В этом уроке мы научились:
Язык Maple (или Maple-язык) является одновременно входным языком общения с Maple 7 и языком ее программирования. Входящие в него средства (прежде всего операторы и функции) подобраны настолько полно и удачно, что при решении подавляющего большинства типовых математических задач от пользователя не требуется знаний даже основ программирования. Для решения нужной задачи обычно достаточно составить алгоритм и подобрать набор нужных для его реализации функций и иных средств Maple-языка.
В то же время Maple-язык — один из самых мощных языков программирования математических задач, содержащий почти 3000 операторов, команд и функций, входящих в ядро, основную библиотеку и пакеты функций Maple 7. При этом относящаяся к традиционному программированию часть Maple-языка реализована с помощью довольно скромного набора специальных знаков и зарезервированных слов.
Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.
Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):
"и** [ и (| ] и |) { и (* } и *)
К специальным одиночным и составным знакам относятся элементы синтаксиса языка:
Комментарии в программе, не выводимые в ячейки вывода, задаются после символа #. В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов недопустимо.
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 42 зарезервированных слов Maple 7 дан ниже.
and |
break |
by |
catch |
description |
do |
done |
el if |
else |
end |
error |
export |
fi |
finally |
for |
from |
global |
if |
in |
intersect |
local |
minus |
mod |
module |
next |
not |
od |
option |
options |
or |
proc |
quit |
read |
return |
save |
stop |
then |
to |
try |
union |
use |
while |
|
|
|
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак - (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи --3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например 5-2 или а-b. Соответственно двойное назначение имеет и знак •+, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ * (например, 2*1(Г100 или 2*1(Г-100). Для возведения числа в степень наряду с оператором *• можно использовать и составной оператор ** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (а+b)/с эквивалентно (а + b) / с.
По набору операторов и функций Maple-язык намного превосходит любой универсальный язык программирования. Это позволяет наряду с обычными программными конструкциями задавать множество специальных конструкций, подчас резко упрощающих запись математических выражений. К примеру, возможна работа со списками имен функций. Язык Maple имеет множество операций над символьными выражениями и гибкий аппарат создания и преобразования типов данных и результатов вычислений.
Для большинства пользователей возможности языка Maple кажутся явно избыточными, и большинство наиболее распространенных операций в нем реализуется несколькими способами. Однако каждый пользователь волен выбирать из множества возможностей именно те, которые ему необходимы в конкретной предметной области. Поскольку таких областей превеликое множество, то обширные возможности Maple лишними не являются.
Фактически Maple 7 — это система для манипулирования математическими выражениями.
Выражение в системе Maple — это объект, вполне соответствующий сути обычного математического выражения. Оно может содержать операторы, операнды и функции с параметрами. В этом уроке выражения записываются на Maple-языке без использования специальных средств для их представления в естественном математическом виде. Благодаря этому запись выражений и приводимых примеров одинаково пригодна для любой реализации системы Maple — даже под MS-DOS. Такая запись получается наиболее короткой, ее можно выводить и распечатывать без применения графических средств. Кроме того, она соответствует виду, принятому в справочной системе Maple.
Однако пользовательский интерфейс системы Maple 7 для Windows позволяет представлять как вводимые, так и выводимые выражения в самых различных формах, в том числе в естественном математическом виде — примеры этого многократно приводились и будут приводиться в дальнейшем. Maple 7 имеет многочисленные функции преобразования форматов, позволяющие менять форму представления данных.
Выражения в Maple могут оцениваться и изменяться в соответствии с заданными математическими законами и правилами преобразований. Например, функция упрощения выражений simplify способна упрощать многие математические выражения, записанные в качестве ее параметра (в круглых скобках):
Символьные преобразования и вычисления математических выражений более подробно будут рассмотрены в следующем уроке.
Для выполнения любых математических операций необходимо обеспечить ввод в систему исходных данных — в общем случае математических выражений. Для ввода их и текстовых комментариев служат два соответствующих типа строк ввода. Переключение типа текущей строки ввода осуществляется клавишей F5. Строка ввода математических выражений имеет отличительный символ >, а строка ввода текстов такого признака не имеет.
В строке ввода может располагаться несколько выражений. Фиксаторами (указанием, что выражение окончено) их могут быть символы ; (точка с запятой) и : (двоеточие). Символ «:» фиксирует выражение и задает вывод результатов его вычисления. А символ «:» фиксирует выражение и блокирует вывод результатов его вычисления. Фиксаторы выполняют также функцию разделителей выражений, если в одной строке их несколько.
Ввод выражения оканчивается нажатием клавиши Enter. При этом маркер ввода (жирная мигающая вертикальная черта) может быть в любой позиции строки. Если надо перенести ввод на новую строку, следует нажимать клавиши Shift и Enter совместно. С помощью одного, двух или трех знаков % (в реализациях до Maple V R5 это был знак прямых кавычек ") можно вызывать первое, второе или третье выражение с конца сессии:
Особая роль при вводе выражений принадлежит знакам прямого апострофа (одиночного ' или двойного ''). Заключенное в такие знаки выражение освобождается от одной пары (закрывающего и открывающего знаков '):
Некоторые другие возможности обрамления выражений апострофами мы рассмотрим позже. Наиболее важная из них — временная отмена выполненного ранее присваивания переменным конкретных значений.
Для завершения работы с текущим документом достаточно исполнить команду quit, done или stop, набранную в строке ввода (со знаком ; в конце).
Встречая выражение, Maple 7 оценивает его, то есть устанавливает возможность его вычисления. Если выражение — скалярная переменная, то ее значение будет выведено в ячейке вывода. Для переменных более сложных типов выводится не их значение, а просто повторяется имя переменной. Просто повторяются также имена неопределенных переменных.
Для оценивания выражений различного типа существует группа функций, основные из которых перечислены ниже:
Для функции evalf параметр n является необязательным, при его отсутствии полагается n=10, то есть вещественные числа выводятся с мантиссой, имеющей десять цифр после десятичной запятой.
В выражении ехрr могут использоваться константы, например Pi, exp(l), и функции, такие как ехр, 1 n, arctan, cosh, GAMMA и erf. В матричном выражении mexpr для функции evalr могут использоваться операнды в виде матриц и матричные операторы &*, +, - и ^. В комплексных выражениях mexpr наряду с комплексными операндами вида (а + I*b) могут использоваться многие обычные математические функции:
sin |
cos |
tan |
CSC |
sec |
cot |
sinh |
cosh |
tanh |
csch |
sech |
coth |
arcsin |
arccos |
arctan |
arccsc |
arcsec |
arccot |
arcsinh |
arccosh |
arctanh |
arccsch |
arcsech |
arccoth |
exp |
In |
•sqrt |
* |
abs |
conjugate |
polar |
argument |
signura |
csgn |
Re |
Im |
Ei |
LambertW |
dilog |
surd |
|
|
Примеры применения функций оценивания даны ниже:
В дальнейшем мы многократно будем применять функции оценивания для демонстрации тех или иных вычислений.
Maple 7 может работать не только с одиночными выражениями, но и с последовательностями выражений. Последовательность выражений — это ряд выражений, разделенных запятыми и завершенных фиксатором:
Для автоматического формирования последовательности выражений применим специальный оператор $, после которого можно указать число выражений или задать диапазон формирования выражений:
Для создания последовательностей выражений можно использовать также функцию seq:
При выполнении порой даже простых операций результаты получаются чрезвычайно громоздкими. Для повышения наглядности выражений Maple 7 выводит их с выделением общих частей выражений и с присваиванием им соответствующих меток. Метки представлены символами #N, где N — номер метки. Помимо меток при выводе результатов вычислений могут появляться и другие специальные объекты вывода, например корни RootOf, члены вида О(х"), учитывающие погрешность при разложении функций в ряд, и обозначения различных специальных функций, таких как интегральный синус, гамма-функция и др. Примеры такого вывода приведены ниже:
Часто встречаются также знаки ~ для отметки предполагаемых переменных, постоянные интегрирования и другие специальные обозначения. По мере упоминания в тексте таких объектов вывода они будут описаны.
Maple 7 работает с числами следующего типа: целыми (О, 1, 123, -456 и т. д.), рациональными в виде отношения целых чисел (7/9, -123/127 и т. д.), вещественными с мантиссой и порядком (1.23Е5, 123.4567Е-10). Признаком вещественного числа является десятичная точка (запятая). Примеры простых операций с числами приведены ниже:
Как видно из этих примеров, ввод и вывод чисел имеет следующие особенности:
Десятичная точка в числах имеет особый статус — указание ее в любом месте числа, даже в конце, делает число вещественным и ведет к переводу вычислений в режим работы с вещественными числами. При этом количеством выводимых после десятичной точки цифр можно управлять, задавая значение системной переменной окружения Digits:
Для работы с числами Maple 7 имеет множество функций. Они будут рассмотрены в дальнейшем. На комплексной плоскости числа задаются координатами точек (х, у) (рис. 5.1).
Рис. 5.1. Представление обычных и комплексных чисел на плоскости
Для представления чисел на рис. 5.1 используется функция pointplot(list), где list — список координат точек. Эта функция становится доступной при подключении пакета plots командой with(plots). Кроме того, использована функция вывода ряда графических объектов на один график — display (см. далее описание представления комплексных чисел).
С помощью функции convert Maple 7 может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатеричные) в десятичные числа:
При символьных вычислениях Maple 7 реализует точную арифметику. Это значит, что результат может быть получен с любым числом цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например таких, как приведены ниже:
Maple 7, естественно, может работать с комплексными числами. Мнимая единица в комплексном числе (корень квадратный из -1) обозначается как I. Функции Re(x) и Im(x) возвращают действительную и мнимую части комплексных чисел. Примеры задания комплексного числа и вывода его действительной и мнимой частей представлены ниже:
Комплексные числа обычно представляют на так называемой комплексной плоскости, у точек которой координата х задает действительную часть комплексного числа, а у (мнимая ось) показывает мнимую часть такого числа. На рис. 5.1 показано задание в виде радиус-векторов комплексного числа z = 4+3I, -z и комплексно-сопряженного числа 4-3I.
Окружность радиуса abs(z)=sqrt(a2 + b2) представляет абсолютное значение комплексного числа z=a+b*I. Она является геометрическим множеством комплексных чисел, образованных концом вращающегося радиус-вектора числа z вокруг его начала в точке (0, 0) комплексной плоскости. Позже мы рассмотрим ряд функций для работы с комплексными числами.
Числа могут служить объектами ввода, вывода и константами, входящими в математические выражения. Функция type(x, numeric) позволяет выяснить, является ли х числом. Если является, то она возвращает логическое значение true (истина), а если нет, то false (ложь). Например:
Функции type(x, integer), type(x, rational) и type(x, fraction) можно использовать для проверки того, имеет ли х значение соответственно целого числа, рационального числа или простой дроби:
В Maple возможна работа с числами, имеющими различное основание (base), в частности с двоичными числами (основание 2 — binary), восьмеричными (основание 8 — octal) и шестнадцатеричными (основание 16 — hex). Функция convert позволяет легко преобразовывать форматы чисел:
Помимо приведенных вариантов функция convert имеет еще ряд других форм. С ними можно познакомиться с помощью справки по этой мощной функции. В дальнейшем будет приведен ряд других применений этой функции.
Любые выражения могут включаться также в наборы. Такие наборы в виде множеств создаются с помощью фигурных скобок { }:
Отличительная черта множеств — автоматическое устранение из них повторяющихся по значению элементов. Кроме того, Maple 7 расставляет элементы множеств в определенном порядке — числа в порядке увеличения значения, а символы и строки в алфавитном порядке. Для множеств нет строгого математического определения, и мы будем считать их наборами, удовлетворяющими перечисленным выше признакам.
Для создания упорядоченных наборов — списков — служат квадратные скобки [ ]:
> [10,2+3.4+4,8,5,1]: [10,5,8,8,5,1]
Как нетрудно заметить, элементы списков преобразуются и выводятся строго в том порядке, в каком они были заданы. Списки широко применяются для задания векторов и матриц.
В ряде случаев, например при подготовке данных для двумерных графиков, возникает необходимость в подготовке парных списков — скажем, координат точек (х, у) графика. Для этого можно использовать функцию zip(f, u, v) или zip(f, u, v, d). Здесь f — бинарная функция, u, v — списки или векторы, d — необязательное значение. Примеры применения функции zip даны ниже:
Рисунок 5.2 показывает применение этих средств для построения точек, представляющих множество действительных чисел на плоскости. Для этого использована функция pointplot из пакета plots.
Как отмечалось, важным типом данных являются списки (lists). Они создаются с помощью квадратных скобок, например:
Для создания векторов (одномерных массивов) и матриц (двумерных массивов) служит функция array. Обычно она используется в следующих формах:
Рис. 5.2. Представление множества чисел на плоскости
Двумерные списки часто путают с матрицами. Следует помнить, что векторы и матрицы создаются с помощью функции array и являются отдельным типом данных. Элементами векторов и массивов могут быть константы, переменные, выражения, списки и иные объекты. Эти элементы являются индексированными переменными и их положение указывается индексами. Имеется множество функций для работы со списками, массивами и матрицами. Они будут рассмотрены в дальнейшем. В принципе, размерность массивов, создаваемых списками, не ограничена и массивы могут быть многомерными.
Еще одним важным типом множественных данных являются таблицы. Они задают данные с произвольной индексацией. Для создания таблиц служит функция table, которая при вызове в простейшем виде table[] создает шаблон пустой таблицы:
Пустая таблица резервирует память под данные. Когда параметром функции table является список выражений, он выводится в естественном порядке расположения элементов таблицы, но с произвольным порядком индексации:
В конце приведенных примеров показано, как можно выделить отдельные компоненты таблицы и вывести значения и индексы таблицы с помощью функций entries и indices. Следующие примеры показывают, что таблицу можно использовать для выполнения математических преобразований:
Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на отрицательный синус и синуса на косинус.
Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев. Строки должны каким-либо образом выделяться, чтобы Maple не отождествляла их с именами констант и переменных. Для этого строки-комментарии имеют внутренний разделительный признак, который устанавливается при их вводе (нажатием клавиши F5, которое приводит к исчезновению знака >).
В других случаях последовательность символов рассматривается как строка, если она заключена в обратные апострофы, то есть в знаки '. Два апострофа подряд формируют апостроф как знак символьной строки, например `abc``def ` дает строку abc`def. Любое математическое выражение может входить в строку, разумеется, оно при этом не выполняется:
> '2+2 не всегда "четыре"';
2+2 не всегда 'четыре'
Часто возникает необходимость в задании программных комментариев. Любой текст после знака # рассматривается как невыводимый (неисполняемый) программный комментарий — даже если это математическое выражение. При этом он не вычисляется. Например:
> 2+3;#Это прииер. А это выражение не вычисляется: 4+5
.5
Комментарии полезны в программах на Maple-языке и обычно используются для объяснения особенностей реализованных алгоритмов.
Константы - это простейшие именованные объекты, несущие заранее предопределенные значения. Их имена (идентификаторы) также заранее определены и не могут меняться. Подробную информацию о константах можно найти, исполнив команду ?constant.
Обычные числовые константы не имеют имени и представлены просто числами, типы которых были указаны выше. Можно считать, что именем такой константы является само ее значение. Например, в выражении 2*sin(1.25) числа 2 и 1.25 являются числовыми константами. При этом указание десятичной точки делает константу действительным числом — например, 2 — это целочисленная константа, а 2., 2.0 или 1.25 — это уже действительные константы.
Строковыми константами являются произвольные цепочки символов, заключенные в обратные апострофы, например 'Hello', 'Привет', 'My number' и т. д. Числа, заключенные в апострофы, например '123456', также становятся строковыми константами, которые нельзя использовать в арифметических выражениях. Строковые константы представляют значения строковых переменных. В них можно использовать символы кириллицы при условии, что соответствующий шрифт имеется.
Есть также ряд констант, которые правильнее считать заведомо определенными глобальными переменными:
Любопытно, что в этот список не входит основание натурального логарифма — число е. В качестве этой константы рекомендуется использовать ехр(1). Она отображается как жирная прямая буква Е. A exp(l.0) выводит 2.71828... (что и следовало ожидать).
Имена встроенных констант (как и имена функций) защищены специальным атрибутом protected. Поэтому (без его снятия) константам нельзя присваивать какие-либо значения:
Стоит упомянуть о такой экзотической возможности, как задание в Maple 7 собственных констант путем описания алгоритма генерации входящих в константу цифр (это позволяет получать в представлении константы любое число цифр). Большинство пользователей довольствуется применением вместо таких констант обычных переменных подходящего типа. Зато истинные математики соревнуются друг с другом в создании все новых и новых констант и алгоритмов их вычислений. Примеры этого творчества можно найти на сайте фирмы Wateloo Maple.
Как следует из самого названия, переменные — это объекты, значения которых могут меняться по ходу выполнения документа. Пока мы рассматриваем лишь глобальные переменные, доступные для модификации значений в любом месте документа. Тип переменной в системе Maple 7 определяется присвоенным ей значением — это могут быть целочисленные (integer), рациональные (rational), вещественные (real), комплексные (complex) или строчные (string) переменные и т. д. Переменные могут также быть символьного типа (их значением является математическое выражение) или типа списка (см. далее). Для явного указания типа переменных используется конструкция:
name::type
где name — имя (идентификатор) переменной, type — тип переменной, например целочисленный (integer), вещественный с плавающей точкой (float), с неотрицательным значением (nonneg), комплексный (complex) и т. д.
Переменные задаются своим именем — идентификатором, который должен начинаться с буквы и быть уникальным. Это значит, что ключевые слова языка Maple нельзя использовать в качестве имен переменных. Хотя имена ряда команд и функций можно использовать в качестве идентификаторов переменных, делать это крайне нежелательно. Ограничений на длину идентификатора практически нет — точнее, она не должна превышать 524 275 символов! Так что сложностей с подбором идентификаторов для переменных у вас не будет.
Имена переменных могут содержать одну букву (например, х, Y или Z) либо ряд букв (Xmin или Хmах). В любом случае имя переменной надо начинать с буквы. Некоторые символы, например знак _, могут использоваться в именах (например, Var_l, Var_2). Нельзя, однако, вводить в имена переменных знаки, обозначающие операторы, — например, а/b или а-b будет истолковано как деление а на b или вычитание из переменной а переменной b.
Имена могут задаваться в обратных апострофах. При этом они просто тождественны именам без апострофов:
Строчные и прописные буквы в идентификаторах различаются, так что Varl и varl — это разные переменные.
Для проверки предполагаемого имени на уникальность достаточно выполнить команду ?name, где name — выбранное имя. Если при этом откроется окно справки с этим именем, значит, оно уже использовано в Maple. Лучше воздержаться от его применения, так как связанная с этим именем команда или функция перестает работать, как только это имя закрепляется за какой-либо переменной.
Поскольку Maple 7 прежде всего система символьной математики, то по умолчанию любые переменные рассматриваются как объекты символьного типа. Благодаря этому такие переменные могут фигурировать в математических выражениях (таких, как sia(x)/x) без их предварительного объявления. В отличие от обычных языков программирования такое использование переменных не влечет за собой появления сообщений об ошибках и является более естественным. Для присваивания переменным конкретных значений используется комбинированный символ присваивания «:=», например:
Правая часть выражения присваивания определяет тип переменной. Например, она может быть целочисленной, действительной, строковой, индексированной (элемент массива) и т. д.
Переменная, имеющая какое-либо значение, занимает в памяти намного больше места, чем неопределенная переменная. У последней место в памяти занимают только символы идентификатора. Поэтому нередко целесообразно отменить присваивание у тех переменных, которые в дальнейшем можно не использовать. Это может понадобиться и в том случае, когда какую-либо переменную с численным или иным значением нужно использовать просто как неопределенную переменную. Рассмотрим следующий пример:
Здесь не удалось вычислить интеграл с подынтегральной функцией х"2 из-за того, что переменная х уже определена ранее как целочисленная переменная со значением 10, тогда как для вычисления интеграла она должна быть необъявленной или строковой (убедитесь в этом сами).
Для отмены присваивания надо использовать следующее выражение:
Итак, заключение имени переменной в прямые апострофы ликвидирует присваивание. Так что запись х:='х' означает, что переменной х возвращается статус неопределенной переменной. Теперь можно вычислить интеграл:
Можно сделать переменную х неопределенной и с помощью выражения вида x:=evaln(x). Это поясняет следующий пример:
Для отмены присваивания значений разом всем переменным (и введенным функциям пользователя) можно использовать команду restart. Следующий пример поясняет ее применение:
Следует отметить, что команда restart отменяет все предшествующие определения, что иногда чревато осложнениями. Применяйте ее только тогда, когда вы уверены, что предшествующая заданной часть документа (или даже ряда документов) действительно не важна.
Важно отметить, что Maple сохраняет в памяти все определения и присваивания, которые были сделаны во всех загруженных в систему документах. Поэтому результаты вычислений в текущем документе могут зависеть от определений в других документах. Команда restart позволяет исключить эту зависимость.
В большинстве расчетов пользователей Maple вполне удовлетворяет статус переменных, соответствующий присвоенным им значениям. Однако серьезные расчеты предполагают, что переменные могут иметь определенные ограничения — например, они не должны принимать отрицательных значений при обычном вычислении квадратного корня или логарифма числа.
Для придания переменным статуса предполагаемых используется функция assume: assume(x.prop): где х — переменная, имя или выражение, prop — свойство. Следующие примеры показывают применение функции assume:
Обратите внимание, что в этом примере переменная х помечена как положительная и при выводе сопровождается знаком тильды -, как бы предупреждающим нас о ее особом статусе. Это не означает, что она не может принять отрицательное значение. Однако с помощью функции is можно убедиться в ее особом статусе и при необходимости программным путем исключить вычисления для х <0. Кроме того, о свойствах переменной можно узнать с помощью функции about (name).
Иногда к уже имеющимся признакам надо добавить новые. Для этого используется функция additionally:
В этом примере переменной а вначале задан признак положительности, а затем а<=0. Оба признака удовлетворяются только при a= 0, что и подтверждает вывод информации о статусе этой переменной функцией about (а).
Предполагаемую переменную можно также изменить путем присваивания ей нового значения, противоречащего ее статусу:
Для отмены переменным статуса предполагаемых используются те же приемы, что и при отмене присвоенного значения. Например, запись х:=' х' отменяет статус предполагаемой для переменной х.
В этом уроке мы научились:
Операторы во входном языке и языке программирования Maple служат для конструирования выражений. Формально операторы представлены своими идентификаторами в виде специальных математических знаков, слов и иных имен. Операторы, как это вытекает из их названия, обеспечивают определенные операции над данными, представленными операндами.
Имеется пять основных типов операторов:
Для просмотра операторов и их свойств можно использовать следующие команды:
> ?operators[binary];
> ?operators[unary];
> ToperatorsCnullary];
> ?operators[precedence];
> ?operators[functional]:
А для изучения примеров применения операторов нужно задать и исполнить команду:
> ?operators[examples];
Команда:
> Tdefine:
позволяет ознакомиться с функций define. С ее помощью можно определять новые операторы.
Бинарные (инфиксные) операторы используются с двумя операндами, обычно размещаемыми по обе стороны от оператора. В ядро Maple 7 включено около трех десятков бинарных операторов. Основные из них перечислены в табл. 6.1.
Tаблица 6.1. Бинарные операторы
Обозначение |
Оператор |
+ |
Сложение |
- |
Вычитание |
* |
Умножение |
/ |
Деление |
** или ^ |
Возведение в степень |
mod |
Остаток от деления |
$ |
Оператор последовательности |
. |
Разделительная точка |
@ |
Оператор композиции |
@@ |
Повторение композиции |
, |
Разделитель выражений |
:= |
Присваивание |
. .. |
Задание интервала |
/ |
Разделитель выражений |
&* |
Некоммутативное умножение |
&<string> |
Нейтральный оператор |
|| |
Конкатенация (объединение) |
Примеры использования бинарных операторов:
Оператор композиции @@ может использоваться для создания сложных функций, содержащих цепные дроби:
А вот еще один пример применения этого оператора для составления цепного радикала и вычисления ряда таких цепочек в цикле:
Для данных типа «множество» определены следующие бинарные операторы:
В любом случае, в результирующем множестве устраняются повторяющиеся элементы. Действие этих операторов поясняют следующие примеры:
Напоминаем, что эти операторы заданы ключевыми словами. Обратите внимание на то, что в Maple 7 результат применения оператора union представлен членами, расположенными в довольно произвольном порядке.
Унарные операторы используются с одним операндом. Они могут быть префиксными, если оператор стоит перед операндом, и постфиксными, если он стоит после операнда. К унарным относятся семь операторов, приведенных в табл. 6.2.
Таблица 6.2. Унарные операторы
Обозначение |
Оператор |
+ |
Унарный плюс (префикс) |
- |
Унарный минус (префикс) |
; |
Факториал (постфикс) |
. |
Десятичная точка (префикс или постфикс) |
$ |
Последовательность (префикс) |
not |
Логическое отрицание (префикс) |
&string |
Метка (префикс) |
Примеры применения унарных операторов:
Мы уже неоднократно отмечали, что оператор % обеспечивает подстановку в строку ввода (или в выражение) последнего результата операции, Х% — предпоследнего и %%% — третьего с конца. Есть еще одна иногда полезная возможность проследить за ходом частных вычислений внутри документа — применение команды-функции history. В Maple V R5 это была библиотечная функция, которая требовала вызова из библиотеки. В Maple 7 такого вызова уже не требуется. Функция history (ехрr) или history() создает список переменных вида от, где индекс f = 1, 2, 3.... Этим переменным можно присваивать значения в диалоговом режиме и отслеживать результаты вычислений. Команда off;, вводимая после использования данной функции, завершает работу с ней. Ниже представлен диалог с применением функции history:
К сожалению, полученный результат и значения глобальных переменных 01 после завершения работы с данной функцией становятся недоступными, так что практической пользы от ее применения не так уж много. Разумеется, внутри блока history вы можете присвоить результат другой переменной и он сохранится (попробуйте это сделать сами). При каждом очередном применении функции history нумерация переменных 0i начинается с начала, так что какой-либо преемственности при использовании этой функции нет.
Функция history может применяться в качестве средства начальной отладки вычислений. Внутри фрагмента программы, заданного функцией history, можно задавать построения графиков. Например, при исполнении фрагмента программы:
будет построен график синусоиды. В целом работа с функцией history отличается не слишком высокой стабильностью, так что возможности этой функции пока остаются не слишком востребованными.
Логические (или булевы) операторы указывают на логическую связь величин (или выражений). Прежде всего они представлены рядом бинарных операторов, приведенных в табл. 6.3.
Таблица 6.З. Бинарные логические операторы
Обозначение |
Оператор |
< |
Меньше |
<» |
Меньше или равно |
> |
Больше |
>= |
Большее или равно |
- |
Равно |
О |
Не равно |
and |
Логическое «и» |
or |
Логическое «или» |
Конструкции с этими операторами, такие как х=у, возвращают логическое значение — константу true, если условие выполняется, и false, если оно не выполняется. Кроме того, к логическим операторам относится унарный оператор not — он представляет логическое «нет». Для возврата логических значений выражений с этими операторами используется функция evalb(условие), например:
Логические операторы часто используются в управляющих структурах программ, составленных на языке программирования Maple. Такое их применение мы рассмотрим позже.
Операторы в Maple описывают операции по преобразованию данных, в частности выражений. Последние, в свою очередь, можно отнести к данным абстрактного типа. Могут быть описаны следующие типы операторов:
Оператор относится к неопределенным, если он не был заранее определен. Такой оператор не выполняет никаких действий и просто повторяется в строке вывода:
> restar:f(1,2,а):
f(l,2,a)
Композиционные операторы (на базе знака @) мы уже применяли. Другие типы операторов рассмотрены ниже.
Функциональные операторы Maple-языка являются альтернативами функций и записываются в двух формах.
Нотация |
Запись оператора |
«arrow» (стрелочная) |
vars -> result |
«angle bracket» (в угловых скобках) |
<result | vars> |
Данные операторы могут использоваться для реализации подстановок. Например, запись х -> х^2 означает подстановку х*2 на место переменной х. Возможны и такие подстановки в множественной форме:
Функциональный оператор в Maple 7 часто используется для задания функций пользователя, которое будет рассмотрено несколько позднее.
Для создания нейтральных (задаваемых пользователем и в момент задания неисполняемых) операторов, определяемых пользователем, служит знак амперсанда — &. Синтаксис нейтрального оператора следующий:
&name
Имя оператора строится по правилам задания допустимых идентификаторов. Также в качестве имени может быть использована последовательность (один и более) специальных символов. В последовательности специальных символов не должно быть букв, цифр, подчеркивания, а также следующих символов:
& | () {} [] :: '' # <перевод строки> <пробел>
Максимальная длина имени — 495 символов. Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного нейтрального оператора приведены ниже:
Большие возможности для создания операторов с заданными свойствами предоставляет специальный оператор define. Он записывается в следующей форме:
define(oper, property1, property2. ._)
Здесь ореr — имя определяемого оператора, property!, property2 и т. д. — наименования свойств. В принципе, оператор define позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов и функций, встроенных в систему.
Могут быть указаны следующие свойства операторов:
Следующий пример задает линейный оператор L:
Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f(x)=value. Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет n-е число Фибоначчи (n > 2):
Обратите внимание на то, что соотношения fib(0)=l и fib(l)=l задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения, — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующих чисел Фибоначчи.
Последний пример иллюстрирует применение системной функции time для определения времени, затраченного на вычисление значения функции fib(20). Это время задается в секундах. Нетрудно заметить, что даже для ПК с процессором Pentium II 350 МГц это время оказалось довольно значительным (более 3 с), поскольку каждое новое число Фибоначчи вычисляется заново.
Maple 7 имеет полный набор элементарных математических функций. Все они, кроме арктангенса двух аргументов, имеют один аргумент х, например sin(x). Он может быть целым, рациональным, дробно-рациональным, вещественным или комплексным числом. В ответ на обращение к ним элементарные функции возвращают соответствующее значение. Поэтому они могут быть включены в математические выражения. Все описанные здесь функции называются встроенными, поскольку они реализованы в ядре системы.
Как правило, если аргументом функции является фундаментальная константа, целое или рациональное число, то функция выводится с таким аргументом без получения результата в форме действительного числа с плавающей точкой. Например:
Нетрудно заметить, что есть и исключения из этого правила — например, на экране монитора ехр(1) будет выведено как константа е, а значение функции arcsin( 2) все же вычислено и результат получен как 1/6 от константы Pi. Вообще говоря, если результат выражается через фундаментальную математическую константу, то он будет вычислен и представлен ею. В противном случае функция с целочисленным и рациональным аргументом или с константой просто повторяется в строке вывода в установленном для этой строки формате.
Для получения подробной информации о некоторой произвольной функции <f> достаточно задать команду:
?<f>
Ввиду общеизвестности элементарных функций мы не будем обсуждать ни их свойства, ни допустимые для них пределы изменения аргумента.
Ниже представлены наиболее распространенные целочисленные функции Maple 7, используемые в теории чисел:
Примеры применения:
В последних двух примерах применения оператора факториала полезно обратить внимание, что запись n!! означает лишь (n!)!, а не n!! = 2*4*6*..., то есть произведение четных целых чисел. Действие других функций очевидно.
В ядре Maple определены следующие тригонометрические функции:
Все эти функции являются периодическими (с периодом 2л, кроме тангенса и котангенса, у которых период равен л) и определены для действительного и комплексного аргументов. Примеры вычислений:
Многие свойства тригонометрических функций можно оценить, рассматривая их графики. Для построения таких графиков можно использовать функцию pi ot. На рис. 6.1 сверху показаны графики ряда тригонометрических функций.
Рис. 6.1. Графики ряда тригонометрических и обратных тригонометрических функций
Из графиков тригонометрических функций (рис. 6.1, сверху) хорошо видна их периодичность. Функция тангенса имеет разрывы, и ее значение в этих точках в пределе равно бесконечности. Поэтому для наглядного ее представления вместе с функциями синуса и косинуса (их экстремальные значения по модулю равны 1) приходится вводить ограничения на масштаб графика по оси у.
ПРИМЕЧАНИЕ
Обратите внимание на параметр color=black в функции построения графиков plot. Он задает построение всех графиков черным цветом, что сделано для более четкой печати их в книге. Если убрать этот параметр, то графики разных функций будут строиться с использованием разных цветов, что облегчит их различение. Другие способы выделения отдельных кривых будут описаны в дальнейшем при описании графических возможностей системы Maple 7.
К обратным тригонометрическим относятся следующие функции:
Примеры вычислений:
К этому классу функций принадлежит еще одна полезная функция: arctan(y.x) = argument(x+I*y)
Она возвращает угол радиус-вектора в интервале от -Pi до Pi при координатах конца радиус-вектора х и у (см. пример ниже):
Графики ряда обратных тригонометрических функций показаны на рис. 6.1.
Гиперболические функции представлены следующим набором:
Примеры применения гиперболических функций представлены ниже:
На рис. 6.2 сверху представлены графики гиперболического синуса, косинуса и тангенса. По ним можно судить о поведении этих функций.
Рис. 6.2. Графики основных гиперболических и обратных гиперболических функций
ПРИМЕЧАНИЕ
В отличие от тригонометрических гиперболические функции не являются периодическими. Функция гиперболического тангенса имеет симметричную кривую с характерными ограничениями. Поэтому она широко используется для моделирования передаточных характеристик нелинейных систем с ограничением выходного параметра при больших значениях входного параметра.
Как и тригонометрические функции, гиперболические имеют свои обратные функции:
Примеры применения:
Графики обратных гиперболических синуса, косинуса и тангенса представлены на рис. 6.2 снизу.
К степенным и логарифмическим относятся следующие функции системы Maple 7:
Примеры применения:
Графики ряда алгебраических функций показаны на рис. 6.3.
Рис. 6.З. Графики ряда алгебраических функций
На рис. 6.3 показаны также графики синусоиды с экспоненциально падающей и нарастающей амплитудой. Читателю рекомендуется попробовать свои силы в построении графиков комбинаций различных функций.
В алгоритме вычисления ряда функций заложено сравнение результата с некоторым опорным значением. К таким функциям относятся:
Для комплексного аргумента х эти функции определяются следующим образом:
Для введения определения значения floor(x) от комплексного аргумента прежде всего запишем а = Re(x) - fооr(Re(x)) и b = Im(x) - floor(Im(x)). Тогда flооr(x) = floor(Re(x)) + I*floor(Im(x)) + X, где
Наконец, функция ceil для комплексного аргумента определяется следующим образом:
cell(x) = -fооr(-х)
Примеры применения:
Для комплексных чисел и данных, помимо упомянутых в предшествующем разделе, определен следующий ряд базовых функций:
Примеры применения:
Специальные математические функции обычно являются решениями линейных дифференциальных уравнений различного типа и выражаются в виде интегралов, не представимых через элементарные функции. Maple 7 имеет практически полный набор таких функций. Их представления можно найти в справочной литературе, а также в справочной базе данных Maple. В связи с этим ограничимся приведением названий наиболее важных специальных функций:
Ввиду большого числа специальных функций и наличия множества примеров их вычисления в справочной системе Maple 7 ограничимся несколькими примерами вычисления наиболее распространенных специальных функций. По их подобию читатель может опробовать в работе и другие специальные функции.
На рис. 6.4 даны примеры применения ряда специальных функций. Обратите особое внимание на первый пример. Он показывает, как средствами системы Maple 7 задается определение функций Бесселя. Показано, что функции Бесселя являются решениями заданного на рис. 6.4 дифференциального уравнения второго порядка. Maple 7 способна вычислять производные и интегралы от специальных функций.
Рис. 6.4. Примеры применения специальных функций
Еще несколько примеров работы со специальными функциями представлены на рис.6.5. Как видно из приведенных примеров, на экране монитора можно получить математически ориентированное представление специальных функций, обычно более предпочтительное, чем представление на Maple-языке или в текстовом формате. Записи функций при этом выглядят как в обычной математической литературе.
Рис. 6.5. Примеры работы со специальными математическими функциями
На рис. 6.5 показаны примеры разложения специальных функций в ряды и применения функции convert для их преобразования.
Много информации о поведении специальных функций дает построение их графиков. На рис. 6.6 показано построение семейства графиков функций Бесселя BesselJ разного порядка и гамма-функции. Эти функции относятся к числу наиболее известных. Если читателя интересуют те или иные специальные функции, следует прежде всего построить и изучить их графики.
Подробное описание специальных функций можно найти в справочниках [43-45] и в справочной базе данных Maple 7.
Рис. 6.6. Графики функций Бесселя и гамма-функции
Элементы векторов и матриц являются индексированными переменными, то есть место каждого элемента вектора определяется его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают как i (номер строки матрицы или порядковый номер элемента вектора) iij (номер столбца матрицы). Допустимы операции вызова нужного элемента и присваивания ему нового значения:
V[1] — вызов i-го элемента вектора V;
M[i, j] — вызов элемента матрицы М, расположенного на г-н строке в j-ы столбце;
V[i]:=x — присваивание нового значения х i-му элементу вектора V;
M[i,j]:=x — присваивание нового значения х элементу матрицы М.
Прежде всего надо обратить внимание на то, что векторы и матрицы хотя и похожи на списки, но не полностью отождествляются с ними. В этом можно убедиться с помощью следующих примеров, в которых функция type используется для контроля типов множественных объектов (векторов и матриц):
Однако, используя функцию преобразования данных convert, можно преобразовывать одномерные списки в векторы, а двумерные — в матрицы. Функция type используется в следующих формах:
Здесь параметры vector и matrix используются для указания того, какой тип объекта проверяется.
ПРИМЕЧАНИЕ
Обратите внимание на то, что матрицы отображаются иначе, чем двумерные списки, без двойных квадратных скобок. Отображение вектора подобно отображению одномерного списка, поэтому здесь особенно важен контроль типов данных.
Важное достоинство систем компьютерной алгебры, к которым относится и Maple 7, заключается в возможности выполнения аналитических (символьных) операций над векторами и матрицами.
Приведем примеры операций над векторами:
В этих примерах используется функция evalm(M), осуществляющая вычисление матрицы или вектора М.
ПРИМЕЧАНИЕ
Рекомендуется перед проведением символьных операций с векторами и матрицами очистить память от предшествующих определений с помощью команды restart. Если какие-то элементы векторов или матриц были ранее определены, это может привести к очень сильным искажениям вида конечных результатов. Очистка памяти устраняет возможность ошибок такого рода.
Над матрицами с численными элементами можно выполнять разнообразные операции. Ниже приведены основные из них:
ПРИМЕЧАНИЕ
Рекомендуется внимательно изучить эти примеры и попробовать свои силы в реализации простых матричных операций. Мы вернемся к гораздо более серьезному описанию матричных операций и функций в дальнейшем.
Ниже представлены примеры символьных операций, осуществляемых над квадратными матрицами одного размера:
Приведем еще ряд примеров выполнения символьных операций с одной матрицей:
Среди других функций для работы с матрицами полезно обратить внимание на функцию mар, которая применяет заданную операцию (например, функции дифференцирования diff и интегрирования int) к каждому элементу матрицы. Примеры такого рода даны ниже:
В результате возвращаются матрицы, каждый элемент которых представлен производной или интегралом. Аналогично можно выполнять над матрицами и другие достаточно сложные преобразования.
В дальнейшем мы продолжим изучение матричных функций и операций, включенных в пакеты Maple 7.
Контроль типа строковых данных
Напоминаем, что строковые данные представляются совокупностью любых символов в обратных апострофах, например *Привет* или `2+2`. Для контроля объектов на принадлежность к строковым данным служит функция type с параметром string:
Из приведенных примеров видно, что контроль строкового типа осуществляется не очень строго, — в частности, единичные символы рассматриваются как строковые и без заключения их в апострофы. В строках могут быть символы кириллицы, но гарантии в правильности обработки таких символов нет — надо мириться с тем, что Maple — англоязычная программа и ее возможности в поддержке других языков ограниченны.
Для интерактивного ввода строк можно использовать функцию readline(filename), задав в качестве имени файла terminal или опустив имя файла. В этом случае ввод строки осуществляется с клавиатуры компьютера:
> s:=read1ine();
> Привет мой друг!
s:="Привет мой друг!"
ПРИМЕЧАНИЕ
Полезно обратить внимание на то, что запрос в ходе интерактивного ввода может быть сделан на русском языке (если установленный для запросов шрифт имеет символы кириллицы). Нужно также, чтобы и шрифт строки вывода содержал кириллицу, иначе в строке вывода будет типичная «абракадабра» — смесь непонятных символов.
Имеется ряд функций для работы со строками. Из них наиболее важны следующие:
Примеры применения этих функций (в виде продолжения ранее приведенных примеров) представлены ниже:
Эти функции дают достаточно средств для обработки данных строкового типа, которые можно применять не только для создания текстовых комментариев, но и для управления вычислительным процессом в программах.
Часто возникает необходимость в интерактивном вводе математических выражений. Для ввода с запросом выражения используется функция readstat(promt), где promt — строка с текстовым комментарием. Пример ее применения дан ниже:
Альтернативой может стать ввод строкового выражения с последующим преобразованием его в математическое выражение с помощью функции parse:
Обратите внимание на то, что функция evaln не смогла вычислить строковое выражение `2+3` поскольку оно не является числовым типом данных. Однако функция parse преобразовала это выражение в числовое, что и привело к его вычислению.
В этом уроке мы научились:
Упрощенные функции пользователя
Хотя ядро Maple 7, библиотека и пакеты содержат свыше 3000 функций, всегда может оказаться, что именно нужной пользователю (и порою довольно простой) функции все же нет. Тогда возникает необходимость в создании собственной функции, именуемой функцией пользователя. Начнем описание с обычных функций пользователя, задающих некоторую зависимость от одной или ряда переменных в явном виде.
Основным средством расширения Maple-языка являются модули — процедуры. Однако на первый взгляд они довольно сложны. Есть и более простые способы задания функций пользователя. Один из таких способов заключается просто в присваивании введенной функции (в виде выражения) некоторой переменной: Name:-выражение
Этот прием фактически означает просто операцию присваивания. Следующие примеры иллюстрируют технику работы с такими функциями:
Заданный таким образом объект все же не является полноценной функцией пользователя, и прежде всего потому, что в нем используются только глобальные переменные (х и у) и нет объявленного списка параметров, от которых зависит значение функции. При этом значения переменных функции приходится заведомо задавать отдельно, используя операции присваивания. Подобные конструкции нельзя ввести в библиотеки Maple 7.
Более гибкий способ задания полноценных функций пользователя базируется на применении функционального оператора. При этом используется следующая конструкция:
name:=(x,y,...)->expr
После этого вызов функции осуществляется в виде name(x.y,...), где (х.у,...) — список формальных параметров функции пользователя с именем name. Переменные, указанные в списке формальных параметров, являются локальными. При подстановке на их место фактических параметров они сохраняют их значения только в теле функции (ехрr). За пределами этой функции переменные с этими . именами оказываются либо неопределенными, либо сохраняют ранее присвоенные им значения. Следующие примеры иллюстрируют сказанное:
Нетрудно заметить, что при вычислении функции m(х.у) переменные х и у имели значения 3 и 4, однако за пределами функции они сохраняют нулевые значения, заданные им перед введением определения функции пользователя. Еще один способ задания функции пользователя базируется на применении функции unapply: name:=unapply(expr.varl.var2,...) Ниже даны примеры такого задания функции пользователя:
Последний пример показывает возможность проведения символьных операций с функцией пользователя.
В ряде случаев весьма желательна визуализация результатов выполнения функций пользователя. Порой она может давать неожиданный результат. На рис. 7.1 представлены примеры задания двух функций пользователя от двух переменных и построение их графиков с помощью функции plot3d.
а
Рис. 7.1. Примеры задания функций пользователя двух переменных с построением их графиков
ВНИМАНИЕ
При задании функций пользователя рекомендуется просмотреть их графики в нужном — диапазоне изменения аргументов. К сожалению, наглядными являются только графики функций одной и двух переменных.
Другой важный класс функций, которые нередко приходится задавать, — импликативные функции, в которых связь между переменными задана неявно, в виде какого-либо выражения. Самый характерный пример такой функции — это выражение для задания окружности радиуса r: х^2 + у^2 = r^2.
Итак, импликативные функции записываются как уравнения. Соответственно их можно решать с помощью функции solve. Следующие примеры иллюстрируют задание уравнения окружности в общем и в частном (численном) виде:
Для графической визуализации импликативных функций служит функция implicitplot пакета plots. На рис. 7.2 представлено задание двух импликативных функций и построение их графиков.
Рис. 7.2. Задание двух импликативных функций и построение их графиков
В данном случае задано построение двух эллипсов. Верхний — это окружность, сплюснутая по вертикали, а второй — наклонный эллипс.
Для подготовки разветвляющихся программ в Maple-язык программирования включен оператор if, позволяющий создавать следующую конструкцию:
if <Условие сравнения? then <Элементы>
|elif «Условие сравнения> then <Элементы>|
|e1se <Элементы>|
fi:
В вертикальных чертах | | указаны необязательные элементы данной конструкции. Следующих два вида условных выражений чаще всего используются на практике:
В задании условий используются любые логические конструкции со знаками сравнения (<, <=, >, >=, =, <>) и логические операторы and, or и not, конструкции с которыми возвращают логические значения true и false. Рассмотрим следующий простой пример:
> х:-5:
> if x<0 then print('Negative') fi;
Negative
> x:-l: > if x<0 then print('Negative') fi;
В этом примере анализируется значение х. Если оно отрицательно, то с помощью функции вывода print на экран выводится сообщение «Negative». А вот если х неотрицательно, то не выводится никакого сообщения. В другом примере если х неотрицательно, то выводится сообщение «Positive»:
> х.— 5:
> if x<0 then print('Negative') else print('Positive') fi;
Negative > x:-l:
> if x<0 then printСNegative") else printC'Positive') fi;
Positive
Приведем еще один пример, показывающий особую форму задания конструкции if-then-else-fi:
> х:=-5:
> 'if (x<0, printCNegative').print('Positive'));
Negative
> х:=1:
> *1f (х<0. print("Negative'),printrPositive'));
Positive
В этой конструкции вида 'if '(Условие. Выражение1, Выражение2)
если Условие выполнятся, то будет исполнено Выражение!, в противном случае будет исполнено Выражение2. Ввиду компактности записи такая форма условного выражения нередко бывает предпочтительна, хотя она и менее наглядна. На рис. 7.3 представлено применение данной конструкции для моделирования трех типов сигналов.
а
б
Рис. 7.3. Применение конструкции с функцией if для моделирования сигналов
К сожалению, функции на базе конструкции if не всегда корректно обрабатываются функциями символьной математики. Поэтому надо тщательно контролировать полученные в этом случае результаты.
Зачастую необходимо циклическое повторение выполнения выражения заданное число раз или до тех пор, пока выполняется определенное условие. Maple 7 имеет обобщенную конструкцию цикла, которая задается следующим образом:
| for <name>| |from <exprl>| |to <expr3>| |by <expr2>| (while <expr4>| do Statement sequence> od;
Здесь name — имя управляющей переменной цикла, exprl, ехрr2 и ехрrЗ — выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, ехрr4 — выражение, задающее условие, пока цикл (набор объектов между словами do и od) будет выполняться.
В ходе выполнения цикла управляющая переменная меняется от значения exprl до значения ехрr2 с шагом, заданным ехрrЗ. Если блок by <ехрr2> отсутствует, то управляющая переменная будет меняться с шагом +1 при ехргКехрг2. Это наглядно поясняет следующий пример:
> for i front 1 to 5 do printd) od;
1
2
3
4
5
В нем выводятся значения переменной i в ходе выполнения цикла. Нетрудно заметить, что она и впрямь меняется от значения 1 до значения 5 с шагом +1. Следующий пример показывает, что границы изменения управляющей переменной можно задать арифметическими выражениями:
> for i from 7/(2+5) to 2+3 do printd) od:
1
2
3
4
5
А еще один пример показывает задание цикла, у которого переменная цикла меняется от значения 1 до 10 с шагом 2:
> for i from 1 to 10 by 2 do printd) od: 1 3 5 7 9
8 этом случае выводятся нечетные числа от 1 до 9. Шаг может быть и отрицательным:
> for i from 9 to 1 by -2 do print(i) od:
9
7
5
3
1
Следует отметить, что если exprl>expr2 задать заведомо невыполнимое условие, например, ехрr1>ехрг2 и положительное значение шага, то цикл выполняться не будет. Цикл можно прервать с помощью дополнительного блока while <ехрr4>. Цикл с таким блоком выполняется до конца или до тех пор, пока условие ехрг4 истинно.
> for i from 1 to 10 by 2 while i<6 do print(i) od:
1
3
5
Таким образом, конструкция цикла в Maple-языке программирования вобрала в себя основные конструкции циклов for и while. Есть еще одна, более специфическая конструкция цикла:
|for <name>| |in <exprl>| |whi1e <expr2>| do statement sequence> od:
Здесь exprl задает список значений, которые будет принимать управляющая переменная name. Цикл будет выполняться, пока не будет исчерпан список и пока выполняется условие, заданное выражением ехрг2. Следующий пример иллюстрирует сказанное:
> for i in [1.2,5,-1.7.12] do print(i) od;
1
2 5 -1 7
12 > for i in [1,2.5.-1,7.12] while i>0 do print(i) od:
1
2 5
В цикле этого вида управляющая переменная может меняться произвольно. Циклы могут быть вложенными. Это иллюстрирует следующий пример, создающий единичную матрицу на базе заданного массива М:
Этот пример имеет не более чем познавательное значение, поскольку для создания такой матрицы Maple 7 имеет функцию identity, с помощью которой функция array позволяет сразу создать единичную матрицу:
В заключение отметим, что возможна упрощенная частная конструкция цикла типа while:
while expr do statseq od:
Здесь выражения statseq выполняются, пока выполняется логическое условие ехрr. Пример такого цикла:
> n:=1:
n:=1 .
> while n<16 do n:»2*n od;
n:=2
n := 4
n := 8
n :=16
В этом примере идет удвоение числа n с начальным значением n = 1 до тех пор, пока значение n меньше 16.
Иногда бывает нужным пропустить определенное значение переменной цикла. Для этого используется оператор next (следующий). Приведенный ниже пример иллюстрирует применение оператора next в составе выражения if-fi для исключения вывода значения i = -2:
> for 1 in [1,2.3.-2.4] do if i--2 then next else print(i) fi od:
1
2 .3
4
Другой оператор — break — прерывает выполнение фрагмента программы (или цикла). Его действие поясняет слегка модифицированный предшествующий пример:
> for i in [1.2.3.-2,4] do if i=2 then break else print(i) fi od:
1
2
3
В данном случае при значении i = -2 произошло полное прекращение выполнения цикла. Поэтому следующее значение 4 переменной z присвоено не было и это значение на печать не попало.
Любой из операторов quit, done или stop обеспечивает также прерывание выполнения текущей программы (в частности, цикла), но при этом окно текущего документа закрывается.
Процедурой называют модуль программы, имеющий самостоятельное значение и выполняющий одну или несколько операций, обычно достаточно сложных и отличных от операций, выполняемых встроенными операторами и функциями.
Процедуры являются важнейшим элементом структурного программирования и служат средством расширения возможностей системы Maple 7 пользователем. Каждая процедура имеет свое уникальное имя и список параметров (он может быть пустым). Процедуры вызываются так же, как встроенные функции, — указанием их имени со списком фактических параметров. При этом просто процедуры обычно не возвращают каких-либо значений после своего исполнения, хотя могут присваивать значения входящим в них переменным. Процедуры-функции в ответ на обращение к ним возвращают некоторое значение. Они как бы являются новыми функциями, задаваемыми пользователем. Описанные ранее функции пользователя фактически являются процедурами-функциями с несколько упрощенной структурой. Простейшая форма задания процедуры следующая:
name :=ргос(Параметры)
Тело процедуры
end;
Параметры процедуры задаются перечислением имен переменных, например ргос(х) или proc(x.y.z). С помощью знака :: после имени переменной можно определить ее тип, например в объявлении prog(n::Integer) объявляется, что переменная п является целочисленной. При вызове процедуры выражением вида:
name(Фактические_параметры)
фактические параметры подставляются на место формальных. Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.
В качестве примера ниже приведена процедура вычисления модуля комплексного числа г — в данном случае это единственный параметр процедуры:
ПРИМЕЧАНИЕ
После ввода заголовка процедуры под строкой ввода появляется сообщение: «Warning, premature end of input». Оно указывает на то, что ввод листинга процедуры не закончен и должен быть продолжен до тех пор, пока не будет введено завершающее слово end листинга процедуры. Если после этого слова поставить символ точки с запятой, то листинг процедуры будет выведен на экран дисплея.
Теперь для вычисления модуля достаточно задать обращение к процедуре modc(z), указав вместо z конкретное комплексное число:
> modc(3.+I*4.); 5.000000000
Нетрудно заметить, что при знаке : после завершающего слова end текст процедуры повторяется в строке вывода (в общем случае в несколько ином виде). Если это повторение не нужно, после слова end надо поставить знак двоеточия. Обратите также внимание на то, что для обозначения действительной и мнимой частей процедуры в ее тексте появились готические буквы.
Как отмечалось, процедуры, которые возвращают значение результата в ответ на обращение к ним, во многом тождественны функциям. Будем называть их процедурами-функциями. Обычно процедура возвращает значение последнего выражения в ее теле или выражения, намеченного к возврату специальным оператором RETURN:
Параметром оператора RETURN может быть любое выражение. В Maple не принято выделять процедуры-функции в какой-то отдельный класс. Действует правило — если не использован оператор RETURN, процедура возвращает значение последнего выражения в ее теле. Для устранения выдачи значений выражений внутри процедуры-функции после них просто надо установить знак двоеточия.
Переменные, которые указываются в списке параметров (например, г, в нашем случае), внутри процедуры являются локальными. Это означает, что изменение их значений происходит лишь в теле процедуры, то есть локально. За пределами тела процедуры эти переменные имеют то значение, которое у них было до использования процедуры. Это хорошо поясняет следующий пример:
> restart:z:=l;
z :=
> modc:=proc(z)
> evalf(sqrt(Re(z)"2+Im(z)"2));
> end;
mode := proc(z) evalf(sqrt(<R(z)A2 + 3(z)A2)) endproc > modc(3.+I*4.):
5.000000000
> z;
1
Нетрудно заметить, что внутри процедуры 2 = 3 + I*4, тогда как вне ее значение z= 1, Таким образом, имена переменных в списке параметров процедуры могут совпадать с именами глобальных переменных, используемых за пределами процедуры.
Переменные, которым впервые присваивается значение в процедуре, также относятся к локальным. Кроме того, переменные, применяемые для организации циклов, являются локальными. Все остальные переменные — глобальные.
Если в теле процедуры имеются операции присваивания для ранее определенных (глобальных) переменных, то изменение их значений в ходе выполнения процедуры создает так называемый побочный эффект. Он способен существенно изменить алгоритм решения сложных задач и, как правило, недопустим. Поэтому Maple-язык программирования имеет встроенные средства для исключения побочных эффектов. Встречая такие операции присваивания, Maple-язык корректирует текст процедуры и вставляет в нее объявление переменных локальными с помощью ключевого слова local и выдает предупреждающую надпись о подобном применении:
> restart:m:=0;
m := 0
> modc:=proc(z)
> m:=evalf(sqrt(Re(zr2+Im(zr2)):RETURN(m)
> end:
Warning, 'm' is implicitly declared local to procedure 'mode'
mode := proc (z) local т; т := evalf(sqrt(9*(z)A2 + 3(z)A2)); RETURN(m) end proc
> modc(3.+I*4.): 5.000000000
> m;
0
Обратите внимание на то, что в тело процедуры было автоматически вставлено определение local m, задающее локальный статус переменной т. Оператором print можно вывести текст процедуры:
> print(modc);
proc(z) local m; m := evalf(sqrt(R(z)^2 + J(z)^2)); RETURN(m) endproc
Говорят, что запретный плод сладок! Что бы ни говорили о нежелательности - работы с глобальными переменными, бывает, что их применение желательно или даже необходимо. Чтобы сделать переменные внутри процедуры глобальными, достаточно объявить их с помощью ключевого слова global, после которого перечисляются идентификаторы переменных.
Следующий пример поясняет применение оператора global в процедуре:
> а:=1;b:=1:
а := 1
b := 1
> fg:=proc(x,y)
> global a,b;
> a:-x^2:b:=y^2:
> RETURN(sqrt(a+b));
> end;
fg := proc (x, y) global a, b; a := x^2; b := y^2; RETURN( sqrt( a + b)) end proc
> fg(3.4):
5 > [a.b]:
[9,16]
В примере переменным а и b вначале присвоены значения 1. Поскольку они в процедуре объявлены глобальными, то внутри процедуры они принимают новые значения х2 и у2. В результате при выходе из процедуры они имеют уже новые значения. Это и есть побочный эффект при исполнении данной процедуры. Если пользователь не знает (или не помнит), что та или иная процедура имеет побочный эффект, то он рискует получить самые неожиданные (и неверные) результаты своих вычислений.
ПРИМЕЧАНИЕ
Следует отметить, что нельзя делать глобальными переменные, указанные в списке параметров процедуры, поскольку они уже фактически объявлены локальными. Такая попытка приведет к появлению сообщения об ошибке следующего вида «Error, argument and global'x' have the same name». При этом соответствующие переменные останутся локальными.
При профессиональной подготовке процедур пользователь должен предусмотреть их поведение при возможных ошибках. Например, если он готовит процедуру или функцию, вычисляющую квадратный корень из действительных чисел, то надо учесть, что такой корень нельзя извлекать из отрицательных чисел (будем, исключительно в учебных целях, считать, что комплексные числа в данном примере недопустимы).
Для контроля за типом данных обычно используются различные функции оценки и тестирования. При выявлении ими ошибки, как правило, предусматривается вывод соответствующего сообщения. Для этого используется функция ERROR:
ERROR(expr_1. expr_2. ...)
где ехрr_1, ... - ряд выражений (возможно, пустой). Наиболее часто ERROR выводит просто строковое сообщение об ошибке, например ERROR (`strings'). Полное сообщение об ошибке имеет вид:
Error, (in name) string. ...
Приведем пример процедуры, в которой предусмотрен вывод сообщения об ошибке при задании переменной х < 0:
> f := ргос (х) if x<0 then error "invalid variable x: XI". x else x*(l/2) end if end proc; f:= proc (x) if x < 0 then error "invalid variable x: %1" x else sqrt(x) end if end proc
> f(3.): 1.732050808
> f(-3.);
Error, (in f) invalid variable x: -3.
> lasterror;
"invalid variable x: %1" -3.
> lastexception;
f, "invalid variable x: %1", -3.
Эта процедура вычисляет квадратный корень из числа х. При х < 0 выводится заданное сообщение об ошибке. Еще раз обращаем внимание читателя на учебный характер данного примера, .поскольку вычисление квадратного корня (в том числе из комплексных и отрицательных действительных чисел) реализовано встроенной функцией sqrt.
В объявление процедуры можно включить ключевые слова, вводимые словом
options opseq
Иногда их называют расширяющими ключами. Предусмотрены следующие ключи:
Ключ remember
Ключ remember обеспечивает занесение результатов обращений к процедуре в таблицу памяти, которая используется при исполнении процедуры. Функция ор позволяет вывести таблицу:
> f:=proc(x) options remember; х^3 end:
> f(2):
8
> f(3):
27
> op(4,eval(f)): table([2 = 8, 3 = 27]) ,
Ключ remember особенно полезен при реализации итерационных процедур. К примеру, в приведенной ниже процедуре (без использования ключа remember) время вычисления n-го числа Фибоначчи растет пропорционально квадрату n:
> f:=proc(n) if n<2 then n else f(n-l)+f(n-2) fi end;
f:=proc(w)if n <2 then и else f(n - l) + ft>-2)endif endproc
> time(f(30)): 27.400
> f(30): 832040
Вычисление f(30) по этой процедуре на ПК с процессором Pentium II 350 МГц занимает около 30 с — см. контроль этого времени с помощью функции time (результат в секундах).
Стоит добавить в процедуру ключ remember, и время вычислений резко уменьшится:
> restart;
> fe:-proc(n) options remember: if n<2 then n else fe(n-l)+fe(n-2) fi end:
> fe(30);
832040
> time(fe(30));
0.
При этом вычисление fe(30) происходит практически мгновенно, так как все промежуточные результаты в первом случае вычисляются заново, а во втором они берутся из таблицы. Однако это справедливо лишь тогда, когда к процедуре было хотя бы однократное обращение. Обратите внимание на то, что данные процедуры являются рекурсивными — в их теле имеется обращение к самим себе.
Ключ builtin
Ключ builtin придает процедуре статус встроенной. Он должен использоваться всегда первым. С помощью функции eval(name) можно проверить, является ли функция с именем name встроенной:
> eval(type);
proc() option builtin; 268 end proc
> eval(print);
proc() option builtin; 229 end proc
Числа в теле процедур указывают системные номера функций. Следует отметить, что в новой версии Maple 7 они существенно отличаются от принятых в предшествующих версиях.
Ключ system
Этот ключ придает процедуре статус системной. У таких процедур таблица памяти может быть удалена. У обычных процедур таблица памяти не удаляется и входит в так называемый «мусорный ящик» (garbage collector).
Ключи operator и arrow
Эта пара ключей задает процедуре статус оператора в «стрелочной» нотации (->). Это достаточно пояснить следующими примерами:
Ключ trace
Ключ trace задает вывод отладочной информации:
> о:=ргос(х,у) option trace, arrow; x-sqrt(y) end:
о := proc (x, y) option trace, arrow, x - sqrt(y) end proc
> o(4,2.);
{--> enter o, args = 4,2.
2.585786438
<-- exit о (now at top level) = 2.585786438}
2.585786438
Ключ copyright
Этот ключ защищает тело процедуры от просмотра. Это поясняют следующие два примера:
> o:=proc(x,y) x-sqrt(y) end:
о := proc (x, у) х- sqii(y) end proc
> oo:=proc(x.y) option Copyright; x-sqrt(y) end;
oo := proc(x,y) ... endproc
> oo(4.2);
2.585786438
Нетрудно заметить, что во втором примере тело процедуры уже не просматривается. Для отмены защиты от просмотра можно использовать оператор interfасе(verboseproc=2).
Выше мы рассмотрели основные частные формы задания процедур. Все они могут быть объединены в общую форму задания процедуры:
name:-proc(<argseq>) # объявление процедуры
local<nseq>; # объявление локальных переменных
g1oba1<nseq>; # объявление глобальных переменных
options<nseq>; # объявление расширяющих ключей
description<stringseq>; # объявление комментарий
<stateq> # выражения - тело процедуры
end; (или end:) # объявление конца процедуры
Эта форма охватывает все описанные выше частные формы и позволяет готовить самые сложные и надежно работающие процедуры.
Большая часть функций и операторов системы Maple 7 реализована в виде процедур, написанных на Maple-языке программирования. Благодаря возможности их просмотра пользователь получает неисчерпаемый источник примеров программирования на этом языке. Кроме того, пользователь может создавать свои собственные процедуры.
Для контроля и отладки процедур прежде всего надо уметь вывести их текст. Для этого служит функция:
print(name);
где name — имя процедуры.
Однако перед тем, как использовать эту функцию, надо исполнить команду:
> interfасе(verboseproc=2,prettyprint-l.version);
Maple Worksheet Interface, Maple 7, IBM INTEL NT, May 28 2001 Build ID 96223
Ее смысл будет пояснен ниже. Пока же отметим, что эта команда обеспечивает полный вывод текста процедур библиотеки. Встроенные в ядро процедуры, написанные не на Maple-языке, в полном тексте не представляются. Поясним это следующими примерами:
> print(evalf);
proc() option builtin, remember; 167 end proc
> print(erf);
proc(x::algebraic)
local Re_x, Im_x, sr, si, xr, xi;
option ' Copyright (c) 1994 by the University of Waterloo. All rights reserved`.;
if nargs <> 1 then error "expecting 1 argument, got %1", nargs
elif type(x, 'complex(float)') then evalf('erf (x)) elif x = 0 then 0 elif type(x, 'infinity') then
if type(x, {'cxjnfinity', 'undefined'}) thenundefined + undefined*!
elif type(Re(x), 'infinity') then CopySign(l, Re(x))
elif type(x, 'imaginary') then x
else infinity + infinity*I
end if
elif type(x, 'undefined') then x*undefined elif type(x, 'complex(numeric)')
then
if csgn(x) = -1 then -erf(-x) else 'erf'(x)
end if elif type(x, '*')
and type(op(l, x), 'complex(numeric)')
and csgn(op(l, x)) = -1 then -erf(-x) elif type(x, ' +')
and traperror(sign(x)) = -1 then -erfC-x)
else erf(x) := 'erf'(x) end if end proc
Здесь вначале выполнен вывод сокращенного листинга встроенной в ядро процедуры evalf, а затем выведен полный листинг процедуры вычисления функции ошибок erf. Эта функция имеет довольно короткую процедуру — многие важные функции и операторы задаются гораздо более сложными и большими процедурами.
Но вернемся к функции interface. Эта функция служит для управления выводом и задается в виде: interface( arg1. arg2, ... ) где аргументы задаются в виде равенств вида name=va1ue и слов-указателей:
ansi |
autoassign |
echo |
error-break |
errorcursor |
imaginaryunit |
indentamount |
labelling |
label width |
latexwidth |
"longdelim |
patchl evel |
plotdevice |
plqtoptions |
plotoutput |
postplot |
preplot |
prettyprint |
prompt |
quiet |
rtablesize |
screenheight |
screenwidth |
showassuraed |
verboseproc |
version |
warnl evel |
|
|
|
К сожалению, объем и характер данной книги не позволяют остановиться на всех вариантах использования этой очень мощной функции, тем более что в ней может использоваться множество аргументов. Мы рассмотрим только некоторые, наиболее важные возможности.
Указание verboseproc=n задает степень детальности вывода листинга процедур. При n=0 текст не выводится, при n=1 выводится текст только заданных пользователем процедур, а при n=2 — всех процедур на Maple-языке. Пример этого был дан выше. Указание prettyprint=0 или 1 управляет выводом стандартных сообщений. Указание plotdevice=string управляет выводом графики, например plotdevice=gif указывает на то, что запись графиков в виде файлов будет происходить в формате .gif.
Одним из основных средств отладки процедур является функция трассировки trace(name). Детальность ее работы задается системной переменной printlevel (уровень вывода). При printlevel :=n (значение n = 1 по умолчанию) выводится результат только непосредственно исполняемой функции или оператора. Для вывода информации о выполнении k-ro уровня вложенности надо использовать значение этой переменной от 5*k до 5*(k+i). Так, при п от 1 до 5 выводятся результаты трассировки первого уровня, при и от 6 до 10 — второго и т. д. Максимальное значение п = 100 обеспечивает трассировку по всем уровням вложенности процедуры name. Следующий пример показывает осуществление трассировки для функции int(x^n,x):
Действие функции трассировки отменяется командой untrace:
При отладке алгоритмов выполнения вычислений надо тщательно следить за сообщениями об ошибках. Для этого в Maple предусмотрены функция traceerr и системная переменная lasterr, в которой сохраняется последнее сообщение об ошибке. При каждом обращении к tracerr переменная lasterr очищается:
> 2/0;
Error, numeric exeption:division by zero
> 2/4;
1/2
> 2/.3;
6.666666667
> lasterror:
"division by zero"
> traperror(3/4);
3/4
> lasterror;
lasterror
> traperror(5/0);
Error, numeric exeption:division by zero
> lasterror:
"numeric exeption:division by zero"
Этот пример показывает, как может быть проведено отслеживание ошибок в ходе вычислений. Вообще говоря, пользователь системы Maple 7 редко привлекает описанные средства, поскольку проще отладить вычислительный алгоритм прежде, чем на его основе будет составлена процедура. При правильном построении процедур ошибочные ситуации заведомо предусматриваются и должным образом обрабатываются.
В большинстве случаев составители программ (процедур) редко прибегают к пошаговой их отладке. Средства общей диагностики Maple 7 развиты настолько хорошо, что позволяют выявлять грубые ошибки в процедурах при их выполнении. Иногда, правда, для этого приходится неоднократно «прогонять» процедуру, пока она не начнет работать как задумано. Тем не менее для отладки процедур служит специальный интерактивный отладчик (debugger). Опишем, как его запустить и как с ним работать.
Допустим, мы составили некоторую процедуру demo, вычисляющую сумму квадратов чисел (1^2+2^2+...+n^2):
> demo:=proc(n::integer) local y,i:
> y:=0:
> for i to n do y:=y+i^2 od
> end;
demo := proc (n::integer) local y, i; у := 0;
for i to n do у := у + i^2 end do end proc
> demo(3):
14
Чтобы включить отладчик в работу, надо исполнить команду stopat:
> stopat(demo);
[demo]
> demo(3);
demo:
1* y:=0;
DBG>
Признаком, указывающим на работу отладчика, является изменение приглашения к вводу со знака > на DBG> (как нетрудно догадаться, DB6 означает debugger). Теперь, подавая команды next (следующий), step (шаг) и stop (остановка), можно проследить выполнение процедуры:
DBG> next
0
demo:
2 for i to n do
end do
DB6> step
0
demo:
3 y:=y+i^2
DBG> Step
1
demo:
3 y:=y+i^2
DB6> step
5
demo:
3 y:=y+iA2
DBG> step
14
В последнем случае процедура по шагам дошла до конца вычислений; на этом работа отладчика завершается сама собой.
Можно также вывести листинг процедуры с помощью команды showstat:
> showstat(demo):
demo :=proc(n::integer)
local у, i;
1* y:=0;
2 for i to n do
3 y:=y+i^2
end do end proc
Обратите внимание, что в этом листинге строки вычисляемых элементов пронумерованы. Это сделано для облегчения разбора работы процедуры.
В общем случае отладчик выключается при выполнении команд stopat, stopwhen или stoperr. Если используется команда stopat, то вывод на экран соответствует исполнению последней выполненной команды. Для отмены этой команды используется команда unstopat.
Команда stopwhen позволяет установить точку наблюдения за указанной в команде переменной. Отменить ее можно командой unstopwhen. Команда stoperror позволяет задать остановку при появлении определенной ошибки. Для отмены этой команды используется команда unstoperror.
Команда cont используется для продолжения работы до следующей точки прерывания, установленной указанными выше командами, или до конца процедуры. Для прерывания отладки можно использовать команду quit. После команды stop можно вычислить любое Maple-выражение.
В действительности команд отладчика намного больше и их функции более развиты, чем это описано выше. Пользователи, заинтересованные в серьезной работе с отладчиком (скорее всего, их немного), могут просмотреть его подробное описание. Для этого в разделе справочной системы Context найдите раздел Programming, а в нем — раздел Debugging.
Считывание и запись программных модулей
В уроке 2 рассматривалась работа с файлами документов. Вводимые в текущий документ программные модули хранятся вместе с ним, так что при отказе от загрузки какого-либо документа все его программные блоки не могут использоваться в других документах. Кроме того, порой неудобно загружать объемный документ ради использования одного или нескольких модулей, например процедур. Поэтому в Maple 7 введены средства, позволяющие записывать нужные модули (в том числе результаты вычислений) на диск и считывать их в случае необходимости.
Для записи на диск используется оператор save:
Считывание имеющегося на диске файла filename осуществляется оператором read:
read <filename>
При считывании все имеющиеся в файле определения становятся доступными для рабочих документов Maple. При записи файлов отдельных определений используется специальный внутренний Maple-формат файлов. Для загрузки файлов типа *.m из стандартной библиотеки используется функция readlib. А для записи файлов в качестве библиотечных достаточно в имени filename оператора save указать расширение .т. Разумеется, можно считывать такие файлы и оператором read, указав в имени файла расширение .m:
> save my_proc,4myJib.nT: # запись файла пу_ргос и
> # библиотечного файла my_lib.m:
> load 'myjlib.m': # считывание библиотечного файла
> # myjib.m.
Если приведенные выше примеры составления процедур кажутся вам простыми, значит, вы неплохо знаете программирование и, скорее всего, уже имеете несколько полезных процедур, которые вы хотели бы сохранить — если не для потомков, то хотя бы для своей повседневной, работы. Сделать это в Maple 7 довольно просто.
Прежде всего надо определить имя своей библиотеки, например mylib, и создать для нее на диске каталог (папку) с заданным именем. Процедуры в Maple 7 ассоциируются с таблицами. Поэтому вначале надо задать таблицу-пустышку под будущие процедуры:
> restart;
> mylib:=tab1e():
mylib := table([])
Теперь надо ввести свои библиотечные процедуры. Они задаются с двойным именем — вначале указывается имя библиотеки, а затем в квадратных скобках имя процедуры. Для примера зададим три простые процедуры с именами fl, f2 и f3:
> mylib[fl]:=proc(x: Anything) sin(x)+cos(x) end:
> mylib[f2]:=proc(x:anything) sin(x)^2+cos(x)^2 end:
> mylib[f3]:=proc(x::anything) if x=0 then 1 else sin(x)/x fi end:
Рекомендуется тщательно проверить работу процедур, прежде чем записывать их на диск. Ограничимся, скажем, такими контрольными примерами:
Можно построить графики введенных процедур-функций. Они представлены на рис. 7,4.
Рис. 7.4. Построение графиков процедур-функций f1, f2 и f3
С помощью функции with можно убедиться, что библиотека mylib действительно содержит только что введенные в нее процедуры. Их список должен появиться при обращении with (mylib):
> with(mylib);
[f1,f2,f3]
Теперь надо записать эту библиотеку под своим именем на диск с помощью команды save:
> save(mylib,`c:/ mylib.m);
Обратите особое внимание на правильное задание полного имени файла. Обычно применяемый для указания пути знак \ в строках Maple-языка используется как знак продолжения строки. Поэтому надо использовать либо двойной знак \\, либо знак /. В нашем примере файл записан в корень диска С. Лучше поместить библиотечный файл в другую папку (например, в библиотеку, уже имеющуюся в составе системы), указан полный путь до нее.
После всего этого надо убедиться в том, что библиотечный файл записан. После этого можно сразу и считать его. Для этого вначале следует командой restart устранить ранее введенные определения процедур:
> restart;
С помощью команды with можно убедиться в том, что этих определений уже нет:
> with(mylib):
Error, (in pacman:-pexports) mylib is not a package
После этого командой read надо загрузить библиотечный файл:
> read('c:/mylib.m');
Имя файла надо указывать по правилам, указанным для команды save. Если все выполнено пунктуально, то команда with должна показать наличие в вашей библиотеке списка процедур fl, f2 и f3:
> with(mylib):
[f1. f2. f3]
И наконец, можно вновь опробовать работу процедур, которые теперь введены из загруженной библиотеки:
> fl(x):
sin(x) + cos(x) > simplify(f2(y});
1 > f3(0):
1 > f3(1.);
.8414709848
Описанный выше способ создания своей библиотеки вполне устроит большинство пользователей. Однако есть более сложный и более «продвинутый» способ ввода своей библиотеки в состав уже имеющейся. Для реализации этого Maple 7 имеет следующие операции записи в библиотеку процедур si, s2, ... и считывания их из файлов filel, file2, ...:
savelib(s1. s2, .... sn, filename)
readlib(f. file1. file2. ...)
С помощью специального оператора makehelp можно задать стандартное справочное описание новых процедур:
makehelp(n.f.b).
где n — название темы, f — имя текстового файла, содержащего текст справки (файл готовится как документ Maple) и b — имя библиотеки. Системная переменная libname хранит имя директории библиотечных файлов. Для регистрации созданной справки надо исполнить команду вида:
libname:-libname. '/mylib":
С деталями применения этих операторов можно ознакомиться в справочной системе.
К созданию своих библиотечных процедур надо относиться достаточно осторожно. Их применение лишает ваши Maple-программы совместимости со стандартной версией Maple 7. Если вы используете одну-две процедуры, проще поместить их в те документы, в которых они действительно нужны. Иначе вы будете вынуждены к каждой своей программе прикладывать еще и библиотеку процедур. Она нередко оказывается большей по размеру, чем файл самого документа. Не всегда практично прицеплять маленький файл документа к большой библиотеке, большинство процедур которой, скорее всего, для данного документа попросту не нужны. Особенно рискованно изменять стандартную библиотеку Maple 7.
Впрочем, идти на это или нет — дело каждого пользователя. Разумеется, если вы готовы создать серьезную библиотеку своих процедур, то ее надо записать и тщательно хранить. С Maple 7 поставляется множество библиотек полезных процедур, составленных пользователями со всего мира, так что и вы можете пополнить ее своими творениями (см. урок 14).
Обширные возможности Maple 7 делают привлекательным применение этой программы для автоматической обработки данных, поступающих от каких-либо экспериментальных установок. Для этого установки снабжаются интерфейсными платами (например, аналого-цифровыми преобразователями) и необходимым программным обеспечением. Возможна и передача данных, полученных с помощью Maple 7, в экспериментальные установки.
Обмен информацией между Maple 7 и внешней средой (к ней, кстати, относятся и другие программы) чаще всего осуществляется через файлы текстового формата, поскольку именно с такими файлами могут работать практически все программы. Для записи данных в файл служит оператор writedata:
writedata[APPEND](fileID. data)
writedata[APPEND](fileID, data, format)
writedata[APPEND](filelD, data, format, default)
Здесь filelD — имя или дескриптор файла данных, data — список, вектор или матрица данных, format — спецификация формата данных (integer, float или string), default — процедура, задающая запись нечисловых данных, например:
writedata(F.A.float.proc(f.x) fprintf(f/CMPLX(%g,%g)',Re(x).Im(x)) end):
Необязательный указатель APPEND используется, если данные должны дописываться в уже созданный файл. Считывание из файла filename обеспечивает функция readdata:
readdata(filelID. n)
readdata(fileID, format, n)
readdata(fileID. format)
Здесь n — целое положительное число, задающее число считываемых столбцов. Ниже представлены примеры этих операций:
Maple 7 имеет также типичные файловые операции:
Их реализация, однако, зависит от платформы, на которой установлена система, и от ее настройки.
Maple 7 имеет ряд средств для общения с другими программами. Часть из них, в основном относящаяся к обмену через файлы, уже была описана. Однако Maple 7 способна генерировать коды для прямого их включения в такие программы, причем не только математические.
Для подготовки математических статей и книг широкое распространение получили редакторы ТеХ и LaTeX. Для подготовки выражений или файлов в их формате служит функция:
latex(expr.filename)
Параметр filename не обязателен, если достаточно получить нужное выражение в ячейке вывода Maple 7:
> latex(a*x^2+b*x+c):
а{х}^{2}+bх+с
> latex(diff(xAn.x$2));
{\frac {{х}^{n}{n}^{2}}{{х}^{2}}{\frас {{х}^{n}n}{{х}^{2}}}
Язык Фортран вот уже многие десятилетия используется для программирования вычислительных задач. Накоплены обширные библиотеки решения таких задач на Фортране. Почитателей этого языка Maple 7 порадует тем, что она позволяет готовить коды для программ на Фортране. Для этого вначале надо загрузить библиотечную функцию:
> with(codegen.fortran);
[fortran ]
После этого может использоваться функция fortran:
fortran(expr.filename=str.optimized)
Два последних параметра не обязательны при выводе выражения ехрr в форме, присущей языку Фортран:
> fortran(a*x*2+b*x+c);
t0 = a*x**2+b*x+c
> fortran(diff(x"n,x$2));
t0 = x**n*n**2/x**2-x**n*n/x**2
Параметр optimize позволяет генерировать оптимизированные коды:
> fortran(a*x*2+b*x+c.optimized);
t1 = x**2 t4 = a*tl+b*x+c
При этом вычислительный процесс строится так, чтобы минимизировать число арифметических операций.
Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система Maple 7 создана на языке С.
Для генерации кодов на языке С вначале надо подключить соответствующую функцию:
> with(codegen.C); [С]
Затем можно использовать функцию С:
С(ехрг.folename=str.optimi zed)
Эта функция используется по аналогии с функцией fortran, что и показывают приведенные ниже примеры:
> C(d1ff(x4>,x$2));
t0 = pow(x,1.0*b)*b*b/(x*x)-pow(x,1.0*b)*b/(x*x);
> C(diff(xAb,x$2),optimized);
tl = pow(x,1.0*b);
t2 = b*b;
t4 = x*x;
t5 = l/t4; '
t9 = tl*t2*t5-tl*b*t5;
Обширные возможности преобразования выражений в различные формы предоставляет функция convert. А функция interface позволяет управлять выводом. К сожалению, объем книги не позволяет рассмотреть все многочисленные варианты применения этих функций.
В большинстве случаев Maple-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции al i as можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция alias записывается в виде:
alias(e1. е2. .... еN)
где e1, e2, ..., eN — ноль или более равенств.
Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции BesselJ на более короткое имя BJ достаточно параметром функции alias записать BJ=BesselJ:
> alias(BJ-BesseU):
BJ,Fx
> [BJ(0.1.),Besse1J(0,1.)]:
[.7651976866, .7651976866]
Можно также переназначить функцию пользователя:
Для отмены переназначения, например BJ, используется та же функция alias с повтором переназначения:
> a1ias(B>BJ): Fx
> BJ(0,1.); BJ(0,1.)
Обратите внимание на то, что BJ исчезло из списка переназначений и функция BJ(0,1.) уже не вычисляется, поскольку ее больше нет.
Модули придают языку программирования Maple 7 некоторые свойства языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — объединения данных и процедур их обработки. Модули задаются ключевым словом module с пустыми скобками () и завершаются словами end module или просто end:
name := module()
export eseq; local Iseq; global gseq:
option optseq: description desc:
Тело модуля
end module (или просто end)
Хотя структура модуля во многом напоминает структуру процедуры, включая объявление локальных и глобальных переменных, параметров и описаний, между ними есть существенная разница:
Следующий пример демонстрирует создание модуля pt, в котором заданы две операции (сложения plus и умножения times) и показан доступ к ним:
> pt:= module()
export plus, times;
plus := (a.b) -> a + b;
times := (a.b) -> a * b: end module:
pt := module () export plus, times; end module
> pt:-p1us(3,5);
8
> pt:=times(3,7);
21
Детальную информацию о модулях и о конструкторах объектов можно найти в справках по ним. Некоторые пакеты Maple 7 (в основном сравнительно новые) реализованы уже не в виде процедур, а в виде модулей (например, в виде модуля сделан пакет LinearAlgebra). В простейшем виде модули могут использоваться всеми пользователями системы Maple 7, но их серьезное применение (например, с целью создания полноценных пакетов Maple 7) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги.
Макрос — это макрокоманда, короткая запись длинных определений. По сравнению с переназначениями макросы более гибки и могут использоваться для сокращения операций загрузки новых определений из библиотеки и пакетов. Макросы создаются с помощью функции macro:
macrc(e1, e2, .... en)
где el, е2, ....,, en — ноль или более равенств.
В следующем примере функция numbperm с помощью макроса заменена на пр:
> numbperm([l,2,3,4]);
24
> macro(np=numbperm(V));
nр
> V:=[1.2.3.4]:
F:=[l,2,3,4]
> np(V);
24
Макросы могут быть использованы для конструирования выражений из их макроопределений.
Maple 7 имеет команду system(string), с помощью которой можно исполнить любую команду MS-DOS, записанную в виде строки string. Например, для форматирования гибкого диска из среды Maple 7 можно использовать стандартную команду MS-DOS:
> system(`format a:`);
На экране появится окно MS-DOS с начальным диалогом форматирования диска А. Это окно показано на рис. 7.5.
При работе в операционной системе Windows эта возможность практически бесполезна, поскольку форматирование диска с большими удобствами можно выполнить средствами Windows.
Внешние вызовы командой system куда более полезны для MS-DOS-реализаций Maple, которые кое-где используются и по сей день. Но поскольку данная книга посвящена самым современным Windows-реализациям системы Maple 7, более подробное рассмотрение операций внешних вызовов не имеет особого смысла.
Рис. 7.5. Результат выполнения команды форматирования гибкого диска
Maple 7 имеет средства для вызова внешних откомпилированных процедур, написанных на языке С. Такая необходимость для подавляющего числа пользователей Maple 7 вызывает большие сомнения в силу следующих причин:
Учитывая сказанное, мы отметим лишь, что для использования внешних процедур (например, остро нужных пользователю или более быстрых, чем аналогичные процедуры Maple) используется специальная команды define_external, которая генерирует две интерфейсные программы — на языке С и на языке Maple соответственно. Программа на языке С компилируется вместе с внешней процедурой, которая будет использоваться. Результирующий код создает динамически подключаемую бублиотеку DLL. В свою очередь, программа на языке Maple служит как интерфейсная для организации взаимодействия с вызываемой внешней процедурой. Более подробное описание возможностей работы с внешними процедурами можно найти в справке по ним.
В этом уроке мы научились:
Основные формулы для вычисления сумм последовательностей
Применение систем символьной математики особенно эффективно при решении задач математического анализа. Maple 7 обладает богатейшей базой данных по формулам математического анализа и может полноценно заменять тома книг со справочными данными. При этом важно, что Maple не только «знает» многие формулы, но и может успешно использовать их при решении достаточно сложных задач в аналитическом (символьном) виде.
Начнем рассмотрение таких операций с вычисления сумм последовательностей. Вычисление суммы членов некоторой последовательности f(k) при изменении целочисленного индекса k от значения m до значения n с шагом +1, то есть выражения:
является достаточно распространенной операцией математического анализа. Для вычисляемой и инертной форм сумм последовательностей служат следующие функции:
sum(f.k): sum(f,k=m..n); sum(f,k=alpha):
Sum(f.k); Sum(f,k=m..n); Sum(f,k=a1pha);
Здесь f — функция, задающая члены суммируемого ряда, k — индекс суммирования, тип — целочисленные пределы изменения k, alpha — RootOf-выражение. Значение n может быть равно бесконечности. В этом случае для n используется обозначение ? или infinity.
Допустимо (а зачастую рекомендуется с целью исключения преждевременной оценки суммы) заключение f и k в прямые кавычки, например sum('f', 'k'=m. .n). Это сделано во всех примерах справочной системы Maple 7, относящихся к функции sum. Мы, однако, отказываемся от этого в тех случаях, когда результат идентичен при заключении f и k в кавычки и без такового. Во избежание путаницы, связанной с этой тонкостью синтаксиса функции sum, рекомендуется все примеры проверять после команды restart, убирающей предыдущие определения f и k.
Простейшими являются суммы последовательностей с фиксированным числом членов. Ниже даны примеры применения этих функций:
Обратите внимание, что во втором примере система отказалась от вычисления, а в третьем даже выдала сообщение об ошибке, связанной с тем, что переменной k перед вычислением сумм было присвоено численное значение 2. После заключения выражения и переменной индекса k в прямые кавычки ошибка исчезла, поскольку такая операция означает, что переменной придается неопределенное значение.
Особый класс образуют последовательности, у которых предел задается в общем виде значением переменной. Ниже представлен ряд последовательностей, у которых предел задается как 0.. n или 1.. n:
Такого рода последовательности, как видно из приведенных примеров, нередко имеют аналитические выражения для своего значения. Его вычисление намного проще, чем формирование заданной последовательности с прямым суммированием ее членов. Некоторые из таких сумм выражаются через специальные математические функции.
Даже школьники хорошо знают, что от перестановки слагаемых сумма не изменяется. Однако Maple 7 (кстати, как и большинство других систем компьютерной математики) при вычислении сумм, увы, этому правилу не следует. Приведенные ниже примеры наглядно показывают этот просчет системы:
ВНИМАНИЕ
При вычислении сумм последовательностей надо строго соблюдать прямой (нарастающий) порядок задания значений индексной переменной суммы. Нарушение этого порядка чревато грубыми ошибками.
Могут встречаться множественные суммы по типу «сумма в сумме». Ограничимся приведением примера двойной суммы, имеющей аналитическое значение:
При конкретном значении N такую сумму нетрудно вычислить подстановкой:
> subs( N = 100, %);
8670850
Как видно из приведенных примеров, средства вычисления сумм последовательностей Maple 7 позволяют получать как численные, так и аналитические значения сумм, в том числе представляемые специальными математическими функциями.
Основные формулы для произведения членов последовательностей
Аналогичным образом для произведений членов f(i) некоторой последовательности, например вида:
используются следующие функции:
product(f,k); product(f,k=m..n): product (f,k=alpha):
Product(f,k); Product(f,k=m..n): Product(f,k=alpha).
Обозначения параметров этих функций и их назначение соответствуют приведенным для функций вычисления сумм. Это относится, в частности, и к применению одиночных кавычек для f и k.
Примеры применения функций вычисления произведений даны ниже:
Как и в случае вычисления сумм, вычисление произведений возможно как в численной, так и в аналитической форме — разумеется, если таковая существует. Это показывает следующий пример:
Нетрудно понять, что при i, стремящемся к бесконечности, перемножаемые члены последовательности стремятся к нулю, а потому к нулю стремится и их произведение. Вопросы доказательства подобных утверждений находятся за рамками данного учебного курса, ибо он посвящен не математике как таковой, а конкретной программе для математики — Maple 7.
Хотя произведение не зависит от порядка расположения сомножителей, их перестановка в Maple 7 недопустима. Это иллюстрируют следующие примеры:
ВНИМАНИЕ
При вычислении произведений надо строго соблюдать прямой (нарастающий) поря-— док задания значений индексной переменной произведения. Нарушение этого порядка чревато грубыми ошибками.
Функции дифференцирования выражений diff и Diff
Вычисление производных функций fn(x) = dfn(x)/dxn n-го порядка — одна из самых распространенных задач математического анализа. Для ее реализации Maple 7 имеет следующие основные функции:
diff(a., xl, х2, .... xn) diff(a, [xl, х2, .... хn])
Diff(a, xl, x2, .... xn) Diff(a, [xl, x2, .... хn])
Здесь а — дифференцируемое алгебраическое выражение, властности функция f(xl. x2, .... хn) ряда переменных, по которым производится дифференцирование. Функция Diff является инертной формой вычисляемой функции diff и может использоваться для естественного воспроизведения производных в документах. Первая из этих функций (в вычисляемой и в инертной форме) вычисляет частные производные для выражения а по переменным xl, х2, ..., .хn. В простейшем случае diff(f(x),x) вычисляет первую производную функции f(x) по переменной х. При n, большем 1, вычисления производных выполняются рекурсивно, например diff (f (х), х, у) эквивалентно diff(diff (f(x), х), у). Оператор $ можно использовать для вычисления производных высокого порядка. Для этого после имени соответствующей переменной ставится этот оператор и указывается порядок производной. Например, выражение diff (f(x) ,x$4) вычисляет производную 4-го порядка и эквивалентно записи diff (f (х) ,х,х,х.х). A diff (g(x,y) ,x$2,y$3) эквивалентно diff(g(x,y),x,x.y,y,y) ;
Примеры вычисления производных:
Как видно из приведенных примеров, функции вычисления производных могут использоваться с параметрами, заданными списками. Приведенные ниже примеры показывают эти возможности и иллюстрируют дифференцирование функции пользователя для двух переменных:
Получаемые в результате дифференцирования выражения могут входить в другие выражения. Можно задавать их как функции пользователя и строить графики производных.
Для создания функций с производными может также использоваться дифференциальный оператор D. Порою он позволяет создавать более компактные выражения, чем функции diff и Diff. Дифференциальный оператор можно записывать в следующих формах: D(f) или D[i](f), где параметр f — выражение или имя функции, i — положительное целое число, выражение или последовательность. Оператор D(f) просто вычисляет имя производной от f, поскольку в этой форме он эквивалентен unnaplyCdiff (f (х) ,х) ,х). В форме D(f) (х) этот оператор подобен diff (f (x) ,x).
Приведем примеры дифференцирования функций, заданных только именами, и функций с одним параметром:
Следующий пример показывает дифференцирование функции пользователя fun с применением дифференциального оператора D и функции diff:
Дифференциальный оператор можно применять и для дифференцирования функций нескольких переменных по заданной переменной:
Пример применения дифференциального оператора для функции f, заданной программным объектом-процедурой, представлен ниже:
Этот пример показывает реализацию схемы Горнера для полинома b степени n от переменной х. При этом применение оператора дифференцирования возвращает процедуру. Ряд интересных возможностей по вычислению производных предоставляет пакет расширения student.
Вычисление неопределенных интегралов
Вычисление неопределенного интеграла обычно заключается в нахождении первообразной функции. Это одна из широко распространенных операций математического анализа.
Для вычисления неопределенных и определенных интегралов Maple V предоставляет следующие функции:
int(f.x); int(f.x=a..b); int(f.x=a..b,continuous):
Int(f.x); Int(f,x=a..b): Int(f,x=a..b,continuous):
Здесь f — подынтегральная функция, х — переменная, по которой выполняются вычисления, а и b — нижний и верхний пределы интегрирования, continuous — необязательное дополнительное условие.
Maple 7 старается найти аналитическое значение интеграла с заданной подынтегральной функцией, Если это не удается (например, для «не берущихся» интегралов), то возвращается исходная запись интеграла. Для вычисления определенного интеграла надо использовать функцию evalf(int(f ,х=а. .b)). Ниже приведены примеры вычисления интегралов:
Обратите внимание, что в аналитическом представлении неопределенных интегралов отсутствует произвольная постоянная С. Не следует забывать о ее существовании. Для вычисления кратных интегралов (двойных, тройных и т. д.) следует применять функцию int (или Int) внутри такой же функции, делая это столько раз, сколько нужно. В отличие от функции дифференцирования для функции интегрирования нельзя задавать подынтегральные функции в виде списка или множества. Возможно вычисление сумм интегралов и интегралов сумм, а также интегралов от полиномов:
ПРИМЕЧАНИЕ
Maple 7 успешно берет большинство справочных интегралов. Но не всегда форма представления интеграла совпадает с приведенной в справочнике. Иногда требуется доводка ее до нужной формы, а иногда Maple 7 упорно дает иное выражение (в большинстве случаев правильное). Тем не менее следует помнить, что всегда может найтись интеграл, который окажется «не по зубам» и Maple 7.
В некоторых случаях Maple 7 не может вычислить интеграл. Тогда она просто повторяет его. С помощью функций taylor и convert можно попытаться получить аналитическое решение в виде полинома умеренной степени, что демонстрирует следующий характерный пример:
Естественно, что в этом случае решение является приближенным, но оно все же есть и с ним можно работать, например построить график функции, представляющей данный интеграл.
Система Maple непрерывно совершенствуется. Например, в Maple V R4 интеграл с подынтегральной функцией ехр(x^4) не брался, а система Maple 7 с легкостью берет его:
Хотя полученный результат, выраженный через гамма- функцию, нельзя назвать очень простым, но он существует и с ним также можно работать. Например, можно попытаться несколько упростить его, используя функцию simplify:
Разумеется, существует также множество иных возможностей и приемов для выполнения операции интегрирования. В дальнейшем мы неоднократно будем рассматривать и другие, более специфические функции для осуществления интегрирования и вычисления интегральных преобразований. В частности, ряд средств вычисления интегралов реализован в пакете student.
Другой важной операцией является нахождение в аналитической или численной форме определенного интеграла:
Определенный интеграл удобно трактовать как площадь, ограниченную кривой f(x), осью абсцисс и вертикалями с координатами, равными а и b. При этом площадь ниже оси абсцисс считается отрицательной. Таким образом, значение определенного интеграла — это число или вычисляемое выражение.
Для вычисления определенных интегралов используются те же функции int и Int, в которых надо указать пределы интегрирования, например х=а.. b, если интегрируется функция переменной х. Это поясняется приведенными ниже примерами:
Как видно из этих примеров, среди значений пределов может быть бесконечность, обозначаемая как infinity.
Выше мы уже сталкивались с примерами вычисления «каверзных» интегралов. Немного продолжим эту важную тему и заодно рассмотрим приемы визуализации вычислений, облегчающие понимание их сущности.
В Соросовском образовательном журнале (№ 6, 2000, с. 110) приводятся не совсем удачные примеры вычислений определенного интеграла с применением системы Mathematica, при которых якобы встречаются настолько большие трудности, что они не под силу любому калькулятору или компьютеру. При некоторых попытках вычисления этого интеграла он давал нулевое значение. Но Maple 7 (кстати, как и Mathematica 4) с легкостью берет этот интеграл и позволяет сразу и без какой-либо настройки вычислить для него как точное, так и приближенное значение:
Хотя первое из решений является самым кратким и, скорее всего, единственным точным решением, оно может и должно насторожить опытного пользователя. Дело в том, что в полученном выражении фигурируют большие числа, и потому для правильного приближенного решения (в виде вещественного числа в научной нотации) нужно заведомо использовать аппарат точной арифметики и ни в коем случае не полагаться на погрешность, заданную по умолчанию, — вот в чем основная ошибка в упомянутой статье.
Именно поэтому левая и правая части приближенного решения (выполненного с точностью до 30 цифр) заметно различаются. Знак равенства между ними вызывает чувство протеста у истинных математиков. На самом деле, не надо забывать, что знак равенства здесь был введен просто как текстовый комментарий, — вы можете попробовать сами заменить его на более приемлемый здесь знак приближенного равенства. Любопытно, что предшествующая версия Maple 6 при задании погрешности по умолчанию вычисляла значение этого интеграла также как 0, тогда как Maple 7 «поумнела» уже настолько, что дает значение 0.01835046770 даже в этом случае.
При таких условиях многие читатели могут сомневаться в корректности конечного результата. Между тем Maple 7 позволяет наглядно проиллюстрировать характер промежуточных вычислений подобных интегралов. Например, для этого можно вычислить неопределенный интеграл подобного вида:
Нетрудно заметить, что решение распадается на множество слагаемых, соответствующих общеизвестному интегрированию по частям. В каждом слагаемом имеются большие числа, и потому принципиально необходимо применение арифметики высокой точности (или разрядности). Maple 7 такими средствами, причем превосходными, обладает.
Продолжим изучение данного «каверзного» интеграла. Опробуем силы Maple 7 на интеграле более общего вида, где конкретный показатель степени заменен на обобщенный —п. Здесь нас ожидает приятный сюрприз — Maple 7 с легкостью выдает аналитическое решение для данного определенного интеграла:
Однако радоваться несколько преждевременно. Многие ли математики знают, что это за специальная функция — WhittakerM? Студенты, любящие подшучивать над своим профессором, могут попробовать спросить у него об этом. Скорее всего, профессор стушуется, а потом будет долго копаться в литературе, прежде чем найдет ее определение и сможет разъяснить, что это такое. Но хуже другое — Maple 7 при конкретном n = 20 дает грубо неверное решение — 0 (почему — уже объяснялось). Забавно, что при этом сама по себе функция WhittakerM вычисляется для n = 20 без проблем:
> WhittakerM(10,10.5.1);
6353509348
А теперь присмотритесь к новому результату вычисления злополучного интеграла. Оказывается, он уже не содержит больших чисел, свойственных прямому решению! Зная значение WhittakerM с погрешностью по умолчанию, можно уверенно вычислить приближенное численное значение интеграла с тойже погрешностью, уже не прибегая к арифметике высокой точности:
> (exp(-.5)*WihittakerM(10,10.5.1))/21;
01835046770
Итак, мы вычислили нужный интеграл несколькими разными способами. В этом и проявляется могущество современной математики, достойно представленной такими системами, как Maple 7. Заинтересованный читатель может попытаться найти еще ряд методов решения данного интеграла и преуспеть в этом! Мы же как торжество Maple 7 приведем график зависимости значений данного интеграла от показателя степени n при его изменении от 0 до 50 (рис. 8.1). Надо ли говорить о том, что полученный результат имеет куда более важное значение, чем вычисление нашего злополучного интеграла при конкретном n = 20? А плавный ход графика показывает, что в вычислении данного интеграла нет никаких признаков неустойчивости решения при изменении n, если соблюдать правило выбора погрешности вычислений.
Наличие у функции особых (сингулярных) точек нередко затрудняет выполнение с ней ряда операций, таких как численное интегрирование. В этом случае могут помочь соответствующие параметры. Например, вычисление следующего интеграла дает явно неудобное выражение в виде набора значений, разных для разных интервалов измененияа:
б
Рис. 8.1. Значение интеграла от х^n*ехр(-х) как функция n
Увы, попытка вычислить по этому выражению значение интеграла не всегда дает корректный результат. Например, при х от -2 до 0 получаются бесконечные значения. Да и график зависимости значения интеграла от параметра a имеет подозрительный вид (рис. 8.2). Это как раз тот случай, когда с ходу доверяться результатам Maple 7 рискованно.
В данном случае приходится констатировать давно известный факт — системы компьютерной математики (и Maple 7 в их числе) не всесильны и всегда можно найти интегралы даже с обманчиво простым внешним видом, которые поставят систему в тупик или дадут неверные результаты в той или иной области изменения аргументов. Особенно, опасны интегралы от кусочных функций с разрывами и интегралы, представляемые такими функциями. Именно к ним и относится обсуждаемый сейчас интеграл. Не меньше проблем вызывают интегралы от функций, области определения которых заданы некорректно или просто не изучены.
Между тем ситуация вовсе не является безнадежной. Надо просто знать, что предпринять, чтобы подсказать системе правильный путь решения. Например, в нашем случае, применив параметр continuous (в апострофах), можно получить куда более простое выражение:
б
Рис. 8.2. Построение графика зависимости значений интеграла с подынтегральной функцией 1/(х+а)^2 от параметра а
Рисунок 8.3 показывает это решение с двумя важными дополнениями — оно представляется функцией пользователя, а ее график строится при изменении а от -10 до 10.
Приведем еще один пример «каверзного» интеграла довольно простого вида:
> int(l/x^3,x=-1..2);
undefined
Этот интеграл вообще не берется функцией int без указания параметров (в строке вывода сообщается об этом). Но введение параметра CauchyPrinci pal Value позволяет получить значение интеграла:
Возьмем еще один наглядный пример — вычисление интеграла от синусоидальной функции при произвольно больших пределах, но кратных 2я! Очевидно, что при этом (учитывая равность площадей положительной и отрицательной полуволн синусоиды) значение интеграла будет равно 0. Например:
> int(sin(x),x-1000*pi..l000*pi);
0
Рис. 8.3. Зависимость значения интеграла с подынтегральной функцией 1/(х+а)^2 и пределами от 0 до 2 от параметра а
Однако распространение этого правила на бесконечные пределы интегрирования является грубейшей ошибкой. Интеграл такого рода уже не берется (или говорят, что он не сходится), и Maple 7 дает соответствующий результат:
> int(sin(x),x=-infinity..infinity);
undefined
Во многих областях техники часто употребляются выражения «затухающая синусоида» или «нарастающая синусоида». Иногда говорят и о «синусоиде с уменьшающейся или возрастающей амплитудой». Бесполезно утверждать, что эти названия принципиально ошибочны — в рамках допущений, принятых в технических расчетах, такие утверждения весьма наглядны и эта, в частных случаях вполне оправданная, наглядность с позиций математики идет в ущерб точности фундаментальных определений.
Возьмем, к примеру, широко распространенную функцию: y(t) = exp(-t)sin(2*Pi*t). Построим ее график и вычислим определенный интеграл от этой функции с пределами от 0 до oo (рис. 8.4).
С первого взгляда на график видно, что Каждая положительная полуволна функции (затухающей «синусоиды») явно больше последующей отрицательной полуволны. К тому же осцилляции функции быстро затухают и через десяток-другой периодов значение функции становится исчезающе малым. Вот почему Maple 7 уверенно вычисляет интеграл с такой подынтегральной функцией. Ее свойство — неопределенность при t->oo исчезает.
Рис. 8.4. График «затухающей синусоиды» и интеграл от нее с пределами от 0 до бесконечности
Однако называть такую функцию «затухающей синусоидой», безусловно, неточно. Умножение sin(2pt) на множитель, зависящий от времени t, лишает функцию главного свойства синусоиды — ее строгой симметрии. Так что exp(-t)sin(2pt) — это совсем новая функция со своими отличительными свойствами. Главные из них — несимметрия при малых t и исчезающе малые значения при больших t. Ни тем, ни другим свойством обычная синусоида не обладает. А теперь возьмем антипод этой функции — «синусоиду с экспоненциально нарастающей до стационарного значения 1 амплитудой». Такая функция записывается следующим образом:
Y(t) = (1 - exp(-t)) sin(2*Pi*t).
Ее график и попытки вычисления интеграла с такой подынтегральной функцией приведены на рис. 8.5.
Обратите внимание на то, что здесь прямое вычисление интеграла к успеху не привело, хотя из графика функции видно, что каждая положительная полуволна в близкой к t = 0 области явно больше по амплитуде, чем последующая отрицательная полуволна. Однако в отличие от предыдущей функции при больших значениях аргумента данная функция вырождается в обычную синусоиду с неизменной (и равной 1) амплитудой. Вот почему трудяга Maple 7 честно отказывается вычислять интеграл от такой коварной функции.
Рис. 8.5. График «экспоненциально нарастающей синусоиды» и интеграл от нее с пределами от 0 до бесконечности
На этом примере очень четко отслеживается разница в мышлении инженера и математика. Инженер скажет, что интеграл с такой функций должен быть, поскольку вначале положительные площади явно меньше отрицательных, а в дальней области они выравниваются, и потому площадь каждого «периода» функции становится примерно нулевой. По-своему инженер прав — если его не интересует точное определение подынтегральной области в заоблачных высотах бесконечности, то мы должны получить то же значение интеграла, что в предшествующем примере, но со знаком «минус». И в самом деле (см. рис. 8.5), интегрируя в пределах от 0 до100п, мы получаем именно это значение (опять-таки в пределах погрешности по умолчанию).
И все же прав здесь математик — переход от интегрирования с конечным (да еще и кратным 2тс) пределом к интегрированию с бесконечным пределом — далеко не простая операция. Она требует учета поведения функции при значении аргумента, стремящегося к бесконечности, а тут говорить о нулевой алгебраической площади синусоиды некорректно, ибо никакой кратности величине 2л у бесконечности нет! Остается лишь радоваться тому, что система Maple 7 может примирить математиков и инженеров, дав им в руки средства, позволяющие решать подобные задачи с приближениями, приемлемыми для тех или иных категорий пользователей.
Мы подробно рассмотрели этот класс задач потому, что многие важные интегральные преобразования (например, преобразование Фурье) оперируют с подобными подынтегральными функциями и надо тщательно разбираться в областях их применения.
ПРИМЕЧАНИЕ
Приведенные выше примеры показывают, что интегрирование является гораздо более тонким делом, чем это кажется на первый взгляд. Тут уместно напомнить, что и студент вуза, и профессор математики университета должны очень внимательно исследовать возможности вычисления интегралов того или иного типа разными математическими системами. Иными словами, применять системы компьютерной математики должны только пользователи, обладающие не столько учеными званиями и степенями, сколько культурой выполнения математических вычислений.
К интересному классу интегралов относятся определенные интегралы с переменными пределами интегрирования. Если обычный определенный интеграл представлен числом (или площадью в геометрической интерпретации), то интегралы с переменными пределами являются функциями этих пределов.
На рис. 8.6 показано два примера задания простых определенных интегралов с переменным верхним пределом (сверху) и обоими пределами интегрирования (снизу).
Рис.8.6. Примеры интегралов с переменными пределами интегрирования
На этом рисунке построены также графики подынтегральной функции (это наклонная прямая) и функции, которую задает интеграл.
Функции int и Int могут использоваться для вычисления кратных интегралов, например двойных и тройных. Для этого функции записываются многократно:
Обратите внимание на нечеткую работу функции evalf в последнем примере. Эта функция уверенно выдает значение evalf (Pi) в форме вещественного числа с плавающей точкой, но отказывается вычислить значение интеграла, в которое входит число Pi. Этот пример говорит о том, что отдельные недостатки у Maple 7 все же есть, как и поводы для ее дальнейшего совершенствования.
Описанная возможность вычисления кратных интегралов функциями Int и int не является вполне законной. В пакете расширения student имеются дополнительные функции интегрирования, которые дополняют уже описанные возможности. В частности, в этом пакете есть функции для вычисления двойных и тройных интегралов.
Для вычисления пределов функции f в точке х =а используются следующие функции:
limit(f,x=a); limit(f,x=a.dir);
Limit(f.x=a); Limit(f.x-a.dir);
Здесь f - алгебраическое выражение, х - имя переменной, dir - параметр, указывающий на направление поиска предела (left — слева, right — справа, real — в области вещественных значений, complex — в области комплексных значений). Значением а может быть бесконечность (как положительная, так и отрицательная). Примеры применения этих функций для вычисления пределов в точке приведены ниже:
Обратите внимание на то, что в первом примере фактически дано обозначение предела в самом общем виде. Рисунок 8.7 показывает вычисление пределов функции tan(x) в точке х=n/2, а также слева и справа от нее. Для указания направления используются опции right (справа) и left (слева). Видно, что в самой точке предел не определен (значение undefined), а пределы справа и слева уходят в бесконечность.
Рис. 8.7. Пример вычисления пределов функции tan(x) и построение ее графика
Показанный на рис. 8.7 график функции tan(x) наглядно подтверждает существование пределов справа и слева от точки х = П/2 и отсутствие их в самой этой точке, где функция испытывает разрыв от значения +oo до -oo.
Огромное разнообразие функций давно заставляло математиков задумываться над возможностями их приближенного, но единообразного представления. К таким представлениям относятся различные ряды, сходящиеся к значениям функций в окрестности заданной точки. Для разложения функции или выражения ехрr в обычный степенной ряд служат функции series(ехрr, eqn) и series(expr, eqn, n). Здесь ехрr — разлагаемое выражение, eqn — условие (например, в виде х=а) или имя переменной (например, х) и n — необязательное и неотрицательное целое число, задающее число членов ряда (при его отсутствии оно по умолчанию берется равным 6, но может переустанавливаться системной переменной Order). Если в качестве eqn задано имя переменной, то это соответствует разложению по этой переменной в области точки с ее нулевым значением. Задав eqn в виде х=х0, можно получить разложение по переменной х в окрестности точки х = х0.
Разложение получается в форме степенного многочлена, коэффициенты которого задаются рациональными числами. Остаточная погрешность задается членом вида 0(х)^n. При точном разложении этот член отсутствует. В общем случае для его удаления можно использовать функцию convert. Ниже представлены примеры разложения различных выражений в ряд:
Здесь видно, что член, обозначающий погрешность, отсутствует в тех разложениях, которые точны, например, в разложениях степенных многочленов. Для визуализации приближения рядами заданных аналитических зависимостей очень полезно построить на одном графике кривые аналитической зависимости и разложения в ряд. Мы это покажем чуть позже на примере ряда Тейлора.
Для разложения в ряд Тейлора используется функция taylor(expr, eq/nm, n). Здесь ехрr — разлагаемое в ряд выражение, eq/nm — равенство (в виде х=а) или имя переменной (например, х), n — необязательный параметр, указывающий на порядок разложения и представленный целым положительным числом (при отсутствии указания порядка он по умолчанию принимается равным 6). При задании eq/nm в виде х=а разложение производится относительно точки х =а. При указании eq/nm в виде просто имени переменной разложение ищется в окрестности нулевой точки, то есть фактически вычисляется ряд Маклорена.
Ниже представлены примеры применения функции taylor:
Не все выражения (функции) имеют разложение в ряд Тейлора. Ниже дан пример такого рода:
> taylor(l/x+x^2,x,5):
Error, does not have a taylor expansion, try seriesQ
> series(l/x+x^2,x,10);
je-4*2
> taylor(l/x+x*2,x=l,5);
2 +x - 1 + 2(x - 1f - (x - 1 )3 +(x - 1 )4 +O((x- 1 )5)
Здесь Maple 7 отказалась от вычисления ряда Тейлора в окрестности точки х = 0 (по умолчанию) и предложил воспользоваться функцией series. Однако эта функция просто повторяет исходное разложение. В то же время в окрестности точки х = 1 ряд Тейлора вычисляется.
Для разложения в ряд Тейлора функций нескольких переменных используется библиотечная функция mtaylor:
mtaylor(f. v)
mtaylorCf. v. n)
mtaylor(f. v, n, w)
Здесь f — алгебраическое выражение, v — список имен или равенств, n — необязательное число, задающее порядок разложения, w — необязательный список целых чисел, задающих «вес» каждой из переменных списка v. Эта функция должна вызываться из библиотеки Maple 7 с помощью команды readlib:
Для получения только коэффициента при k=м члене ряда Тейлора можно использовать функцию coeftayl (expr,var,k). Если ехрr — функция нескольких переменных, то k должен задаваться списком порядков коэффициентов.
Полезно сочетать разложение выражений (функций) в ряд Тейлора с графической визуализацией такого разложения. Рассмотрим документ, в котором наглядно показаны возможности представления функции рядами Тейлора и Маклорена. На рис. 8.8 показана первая часть документа. Она дает пример разложения в ряд Тейлора функции sin(x) с построением ее графика и графика по разложению в ряд. Поскольку выбрано разложение относительно точки х = 0, то полученный ряд является рядом Маклорена. Это хороший пример визуализации результатов математических вычислений — здесь наглядно видно, что при малых значениях х график ряда практически повторяет разлагаемую функцию, но затем начинает сильно от нее отходить.
Обратите внимание, несмотря на то что мы задали шестой порядок ряда, последний член имеет только пятый порядок. Это связано со спецификой данного разложения — в нем просто отсутствуют члены четного порядка. Можно буквально в считанные секунды попробовать изменить число членов ряда или диапазон изменения переменной х, что и показано на рис. 8.9 (вторая часть документа). При этом легко убедиться в том, что при больших х поведение ряда не имеет ничего общего с поведением разлагаемой в ряд функции, в частности нет и намека на периодичность разложения, которая присуща тригонометрической функции sin(x).
В заключительной (третьей) части этого документа (рис. 8.10) представлено уже истинное разложение синуса в ряд Тейлора в окрестности смещенной от нуля точки х = 1. При смещении точки, относительно которой ведется разложение, выражение для ряда Тейлора существенно изменяется. В нем, во-первых, появляются члены четных степеней, а во-вторых, фигурирует аргумент вида (х- 1)n. Нетрудно заметить, что даже при представлении такой «простой» функции, как sin(x), приемлемая погрешность представления одного периода достигается при числе членов ряда Тейлора порядка 10 и более. Однако существенное повышение порядка ряда нецелесообразно из-за резкого возрастания вычислительных погрешностей. Кроме того, серьезным недостатком аппроксимации рядом Тейлора является непредсказуемое поведение полинома вдали от точки, относительно которой задается представление. Это хорошо видно на всех трех приведенных примерах.
Рис. 8.8. Разложение функции sin(x) в ряд Маклорена 6-го порядка и построение ее графика
Рис. 8.9. Разложение функции sin(x) в ряд Маклорена 12-го порядка и построение ее графика
a
Рис. 8.10. Разложение функции sin(x) в ряд Тейлора 12-го порядка относительно точки х = 1 и построение ее графика
Помимо указанных выше разложений в ряд Maple 7 имеет множество функций для иных разложений. Например, в пакете numapprox имеется функция laurent(expr,var,n), позволяющая получить разложение в ряд Лорана, функция chebyshev(expr, eq/nm, eps) дает разложение в форме полиномов Чебышева и т. д.
Решение линейных и нелинейных уравнений и неравенств — еще одна важная область математического анализа. Maple 7 имеет мощные средства для такого решения. Так, для решения линейных и нелинейных уравнений в аналитическом виде используется достаточно универсальная и гибкая функция solve(eqn, var) или so1ve({eqnl,eqn2,.. .}.{varl,var2,...}), где eqn — уравнение, содержащее функцию ряда переменных, var — переменная, по которой ищется решение, Если при записи eqn не используются знак равенства или знаки отношения, считается, что solve ищет корни уравнения eqn=0.
Характер решений можно изменить с помощью глобальных переменных:
В решениях могут встречаться следующие обозначения:
В форме solve[subtopic] возможны параметры subtopic функции solve следующих типов:
floats functions identity ineq linear
radical scalar series system
При решении систем уравнений они и список переменных задаются как множества, то есть в фигурных скобках. При этом и результат решения получается в виде множества. Чтобы преобразовать его к обычному решению, нужно использовать функцию assign, которая обеспечивает присваивание переменным значений, взятых из множества.
Функция solve старается дать решение в аналитическом виде. Это не означает, что ее нельзя использовать для получения корней уравнений в численном виде. Просто для этого придется использовать функции evalf или convert. Если результат решения представлен через функцию RootOf, то зачастую можно получить все корни с помощью функции all values.
Решение одиночных нелинейных уравнений вида f(x) = 0 легко обеспечивается функций solve(f,(x),x). Это демонстрируют следующие примеры:
Часто бывает удобно представлять уравнение и его решение в виде отдельных объектов, отождествленных с определенной переменной:
В частности, это позволяет легко проверить решение (даже если оно не одно, как в приведенном примере) подстановкой (subs):
Сводящиеся к одному уравнению равенства вида f1(x)=fl(x) также решаются функцией solve(fl(x)=f2(x),x):
Обратите внимание в этих примерах на эффективность применения функции evalf, позволяющей получить решения, выраженные через функцию RootOf, в явном виде.
Функция solve может использоваться для решения тригонометрических уравнений:
Однако из приведенных примеров видно, что при этом найдено только одно (главное) решение. Периодичность тригонометрических функций и связанная с этим множественность решений оказались проигнорированы. Однако можно попытаться найти все периодические решения, выполнив следующую команду:
> _EnvAllSolutions:=true;
EnvAllSolutions := true
Указанная в ней системная переменная отвечает за поиск всех периодических решений, когда ее значение равно true, и дает поиск только главных решений при значении false, принятом по умолчанию. Так что теперь можно получить следующее:
На рис. 8.11 показан более сложный случай решения нелинейного уравнения вида f1(x)=f2(x). где f1(х) = sin(x) и f2(x) = cos(x) - 1. Решение дано в графическом виде и в аналитическом для двух случаев — нахождения главных значений корней и нахождения всех корней.
В решениях встречаются переменные _В1- и _Z1~, означающие ряд натуральных чисел. Благодаря этому через них можно представить периодически повторяющиеся решения.
Примеры решения уравнений с обратными тригонометрическими функциями показаны ниже:
Рис. 8.11. Пример решения уравнения, имеющего периодические решения
Для решения систем линейных уравнений созданы мощные матричные методы, которые будут описаны отдельно. Однако функция solve также может с успехом решать системы линейных уравнений. Такое решение в силу простоты записи функции может быть предпочтительным. Для решения система уравнений и перечень неизвестных задаются в виде множеств (см. приведенные ниже примеры).
Рисунок 8.12 дает два примера решения систем из двух линейных уравнений. В первом примере функция solve возвращает решение в виде значений неизвестных х и у, а во втором отказывается это делать.
В чем дело? Оказывается, в том, что во втором случае система просто не имеет решения. Импликативная графика пакета расширения plots дает прекрасную возможность проиллюстрировать решение. Так, нетрудно заметить, что в первом случае геометрическая трактовка решения сводится к нахождению точки пересечения двух прямых, отображающих два уравнения. При этом имеется единственное решение, дающее значения х и у.
Рис. 8.12. Примеры решения системы из двух линейных уравнений с графической иллюстрацией
Во втором случае решения и впрямь нет, ибо уравнения задают параллельно расположенные прямые, которые никогда не пересекаются. Рекомендуем читателю самостоятельно проверить и третий случай — бесконечного множества решений. Он имеет место, если оба уравнения описывают одну и ту же зависимость и их графики сливаются в одну прямую.
Решение систем из трех линейных уравнений также имеет наглядную геометрическую интерпретацию — в виде точки, в которой пересекаются три плоскости, каждая из которых описывается функцией двух переменных. Для наглядности желательно представить и линии пересечения плоскостей. Это позволяет сделать функция импликативной трехмерной графики tmplicitplotSd, что и показано на рис. 8.13. Для объединения графиков площадей использована функция display.
Некоторые проблемы с решением систем из трех линейных уравнений иллюстрируют примеры, приведенные на рис. 8.14, В первом примере решения вообще нет. График показывает, в чем дело, — линии пересечения плоскостей идут параллельно и нигде не пересекаются. Во втором примере все три плоскости пересекаются по одной линии.
Рис. 8.13. Пример решения системы из трех линейных уравнений с графической иллюстрацией решения
Рис. 8.14. Графическая иллюстрация особых случаев решения системы из трех линейных уравнений
Следующий пример показывает решение системы из четырех линейных уравнений:
Эта система имеет решение, но его простая графическая иллюстрация уже невозможна.
Случай решения неполной системы уравнений (уравнений — 3, а неизвестных — 4) иллюстрирует следующий пример:
Как видно из приведенных примеров, функция solve неплохо справляется с решением систем линейных уравнений.
Функция solve может использоваться для решения систем нелинейных и трансцендентных уравнений. Для этого система уравнений и перечень неизвестных задаются в виде множеств. Ниже приведены примеры решения уравнений:
В этих примерах хорошо видна техника работы с функциями solve и assign. В конце примеров показано восстановление неопределенного статуса переменных х и у с помощью функции unassign и снятие определения переменных с помощью заключения их в прямые апострофы.
В решениях уравнений нередко появляется функция RootOf, означающая, что корни нельзя выразить в радикалах. Эта функция применяется и самостоятельно в виде RootOf(ехрr) или RootOf(ехрr, х), где ехрr — алгебраическое выражение или равенство, х — имя переменной, относительно которой ищется решение. Если х не указана, ищется универсальное решение по переменной _Z. Когда ехрr задано не в виде равенства, решается уравнение ехрr=0. Для получения решений вида RootOf в явном виде может использоваться функция all values. Примеры применения функции RootOf:
Итак, функция RootOf является эффективным способом представления решения в компактном виде. Как уже отмечалось, наряду с самостоятельным применением она часто встречается в составе результатов решения нелинейных уравнений.
Неравенства в математике встречаются почти столь же часто, как и равенства. Они вводятся знаками отношений, например: > (больше), < (меньше) и т. д. Решение неравенств существенно расширяет возможности функции solve. При этом неравенства задаются так же, как и равенства. Приведенные на рис. 8.15 примеры поясняют технику решения неравенств.
Из приведенных примеров очевидна форма решений — представлены критические значения аргумента, вплоть до не включаемых значений области действия неравенства (они указываются словом Open). Всегда разумным является построение графика выражения, которое задает неравенство, — это позволяет наглядно убедиться в правильности решения. Приведем еще несколько примеров решения неравенств в аналитической форме:
б
Рис. 8.15. Примеры, иллюстрирующие решение неравенств
В последних примерах показано решение систем неравенств." При этом выдаются области определения нескольких переменных.
Для получения численного решения нелинейного уравнения или системы нелинейных уравнений в форме вещественных чисел удобно использовать функцию:
fsolve( eqns. vars. options )
Эта функция может быть использована со следующими параметрами:
Функция fsolve дает решения сразу в форме вещественных или комплексных чисел, что и показывают следующие примеры:
Заметим, что локализация поиска корней в заданном интервале позволяет отыскивать такие решения, которые не удается получить с помощью функций solve и fsolve в обычном применении. В последнем из приведенных примеров дается решение системы нелинейных уравнений, представленных уравнениями f и д.
Чтобы еще раз показать различие между функциями solve и fsolve, рассмотрим пример решения с их помощью одного и того же уравнения erf(x) = 1/2:
> so1ve(erf(x)=l/2,x);
RootOf(2erf(_Z)-l)
> fsolve(erf(x)=l/2);
.4769362762
Функция solve в этом случае находит нетривиальное решение в комплексной форме через функцию RootOf, тогда как функция fsolve находит обычное приближенное решение.
Функция solve имеет ряд родственных функций. Одну из таких функций — fsolve — мы рассмотрели выше. В справочной системе Maple 7 можно найти ряд и других функций, например rsolve для решения рекуррентных уравнений, isolve для решения целочисленных уравнений, msolve для решения по модулю m и т. д. Здесь мы рассмотрим решение уравнений важного класса — рекуррентных. Напомним, что это такие уравнения, у которых заданный шаг решения находится по одному или нескольким предшествующим шагам.
Для решения рекуррентных уравнений используется функция rsolve:
rsolve(eqns, fens) ,
rsolve(eqris. fens, 'genfunc'(z))
rsolve(eqns, fens, 'makeproc')
Здесь eqns — одиночное уравнение или система уравнений, fens — функция, имя функции или множество имен функций, z — имя, генерирующее функциональную переменную.
Ниже представлены примеры применения функции rsolve:
А теперь приведем результат вычисления функцией rsolve n-го числа Фибоначчи. Оно задается следующим выражением:
> eql :- (f(n+2) = f(rn-l) + f(n) . f(0) - 1 . f(l) - 1}:
eql~{f(n+2) = f(n + \) + f(n),f(0)=\,f(l)=l}
В нем задана рекуррентная формула для числа Фибоначчи — каждое новое число равно сумме двух предыдущих чисел, причем нулевое и первое числа равны 1. С помощью функции rsolve можно получить поистине ошеломляющий результат:
Числа Фибоначчи — целые числа. Поэтому представленный результат выглядит как весьма сомнительный. Но на самом деле он точный и с его помощью можно получить числа Фибоначчи. Ниже показан процесс получения чисел Фибоначчи для n = 5, 7, 10 и 20:
> [normal(subs(n=5,al).expanded).normal(subs(n-7.al).expanded).
normal(subs(n=10,al),expanded),normal(subs(n=20.al),expanded)];
[8,21,89,10946]
Иногда бывает нужен результат в форме только целых чисел. Для этого используется функция isolve(eqns, vans), дающая решение в виде целых чисел. Приведем примеры ее применения:
> iso1ve({2*x-5=3*y}):
{x = 4 + 3_Zl,y=\ + 2_Z1]
> iso1ve(y^4-z^2*y^2-3*x*z*y*2-x^3*z);
Во втором из приведенных примеров в выводе появилась вспомогательная переменная %1, которая упрощает запись результата при текстовом формате его вывода (Character Notation). Напоминаем, что в стандартной математической нотации вспомогательная переменная вида %N не формируется. В этом случае упомянутый пример будет выглядеть следующим образом:
Результат вычислений одинаков при любом формате вывода, но иногда вывод в текстовом формате с выделением вспомогательных переменных имеет преимущество, поскольку выглядит более компактным.
Функция msolve(eqns,vars.m) или msolve(eqns,m) обеспечивает решение вида Z mod m (то есть при подстановке решения левая часть4 при делении нат дает остаток, равный правой части уравнения). При отсутствии решения возвращается объект NULL (пустой список).
Ниже даны примеры использования функции msolve:
> mso1ve({3*x-4*y=l,7*x+y=2}.12);
{у = 5,х=3}
> msolve(2^i=3.19);
{(=13 + 18_Z7~}
> mso1ve(8*j-2,x,17);
{/ = 3 + 8*}
На этом мы завершаем рассмотрение функций для решения уравнений, неравенств и систем с ними.
В этом уроке мы научились:
Выражения (ехрr) или уравнения (eqn) обычно используются как сами по себе, так и в виде равенств или неравенств. В последнем случае объекты с выражениями имеют левую и правую части. Для простейших манипуляций с выражениями полезны следующие функции:
Ввиду очевидности действия этих функций ограничимся наглядными примерами их применения:
ПРИМЕЧАНИЕ
Обратите внимание на то, что в предшествующих версиях Maple загрузка библиотеч ной функции cost выполнялась иначе — командой readlib(cost). Это обстоятельство может служить причиной неверной работы документов, созданных в старых версиях Maple, в среде описываемой версии Maple 7.
В общем случае выражения могут быть многоуровневыми и содержать объекты, расположенные на разных уровнях вложенности. Приведем две функции для оценки уровней выражений и списков:
Ниже представлены примеры применения этих функций:
Рекомендуется просмотреть и более сложные примеры на применение этих функций в справке.
Многие математические выражения имеют различные тождественные формы. Порою преобразование выражения из одной формы в другую позволяет получить результат, более удобный для последующих вычислений. Кроме того, различные функции Maple 7 работают с разными формами выражений и разными типами данных. Поэтому большое значение имеет целенаправленное преобразование выражений и данных.
Основной функцией для такого преобразования является функция convert:
convert(expr. form, аrgЗ. ...)
Здесь ехрr — любое выражение, form — наименование формы, аrg3, ... — необязательные дополнительные аргументы.
convert — простая и вместе с тем очень мощная функция. Ее мощь заключается в возможности задания множества параметров. Их полный перечень (76 штук!) можно найти в справке по функции convert. Многие из этих параметров очевидны с первого взгляда, поскольку повторяют наименования типов чисел, данных или функций. Например, опции binary, decimal, hex и octal преобразуют заданные числа в их двоичное, десятичное, шестнадцатеричное и восьмеричное представление. Параметр vector задает преобразование списка в вектор (напоминаем, что список и вектор — разные типы данных), а параметр matrix — в матрицу. Приведем примеры применения функции convert:
Из этих примеров (их список читатель может пополнить самостоятельно) следует, что функция преобразования convert является одной из самых мощных функций Maple. С ее помощью можно получить множество различных форм одного и того же выражения.
Еще одним мощным средством преобразования выражений является функция combine. Она обеспечивает объединение показателей степенных функций и преобразование тригонометрических и некоторых иных функций. Эта функция -может записываться в трех формах:
combine(f)
combinef(, n)
combine(f. n. optl. opt2. ...)
Здесь f — любое выражение, множество или список выражений; n — имя, список или множество имен; optl, opt2, ... — имена параметров. Во втором аргументе можно использовать следующие функции:
@@ |
abs |
arctan |
conjugate |
exp |
In |
piecewise |
polylog |
power |
product |
Ps |
radical |
range |
signum |
trig |
Примеры применения функции combine представлены ниже:
Эти примеры далеко не исчерпывают возможностей функции combine в преобразовании выражений. Рекомендуется обзорно просмотреть примеры применения функции combine с разными параметрами, приведенные в справочной системе Maple 7.
Выражения и их части в Maple 7 рассматриваются как объекты. В ходе манипуляций с ними важное значение имеет контроль за типом объектов. Одной из основных функций, обеспечивающих такой контроль, является функция whattype(object), возвращающая тип объекта, например string, integer, float, fraction, function и т. д. Могут также возвращаться данные об операторах. Примеры применения этой функции даны ниже:
> whattype(2+3);
integer
> whattype(Pi):
symbol
> whattype(123./5)
float
> whattype(l/3i:
fraction
> whattype(sin(x));
function
> whattype([1.2.3,a,b,c])
;list
> whattype(a+b+c);
+
> whattype(a*b/c):
*
> whattype(a'b):
^
> whattype(H-2+3=4);
=
С помощью функции type(object.t) можно выяснить, относится ли указанный объект к соответствующему типу t, например:
> type(2+3,integer):
true
> type(s1n(x).function);
true
> typeChello,string);
false
> type("hello",string);
true
> typed/3.fraction):
true
При успешном соответствии типа объекта указанному (второй параметр) функция type возвращает логическое значение true, в противном случае — false.
Для более детального анализа объектов может использоваться функция hastype(expr. t), где ехрr — любое выражение и t — наименование типа подобъекта.
Эта функция возвращает логическое значение true, если подобъект указанного типа содержится в выражении ехрr. Примеры применения этой функции даны ниже:
> hastype(2+3,integer);
true
> hastype(2+3/4.integer):
false
> hastype(2*sin(x).function);
true
> hastype(a+b-c/d,'+'):
true
Еще одна функция — has(f.x) — возвращает логическое значение true, если подобъект х содержится в объекте f, и false в ином случае:
> has(2*sin(x),2);
true
> has(2*sin(x).V);
false
> has(2*sin(x),3-l);
true
Следует отметить, что соответствие подобъекта выражения указанному подобъекту понимается в математическом смысле. Так, в последнем примере подобъект «3 - 1», если понимать его буквально, в выражении 2*sin(r) не содержится, но Maple-язык учитывает соответствие 3 - 1 = 2, и потому функция has в последнем примере возвращает true.
Функциональные преобразования подвыражений
Нередко бывает необходимо заменить некоторое подвыражение в заданном выражении на функцию от этого подвыражения. Для этого можно воснользоваться функцией applyop:
Ниже даны примеры применения этой функции:
Еще две функции, реализующие операции подстановки, указаны ниже:
map(fcn, expr. arg2. .... argn)
map2(fcn, argl, expr. arg3, .... argn)
Здесь fen — процедура или имя, expr — любое выражение, argi — необязательные дополнительные аргументы для fen.
Первая из этих функций позволяет приложить fen к операндам выражения ехрr. Приведенные далее примеры иллюстрируют использование функции mар.
Из этих примеров нетрудно заметить, что если второй параметр функции mар — список, то функция (первый параметр) прикладывается к каждому элементу списка, так что возвращается также список. Из последнего примера видно, что если за вторым параметром идет перечисление аргументов, то они включаются в список параметров функции.
Функция mар2 отличается иным расположением параметров. Ее действие наглядно поясняют следующие примеры:
Подстановки в общем случае служат для замены одной части выражения на другую. Частными видами подстановок являются такие виды операций, как замена одной переменной на другую или замена символьного значения переменной ее численным значением. Основные операции подстановки выполняют следующие функции: .,
Все эти функции возвращают измененное после подстановки выражение. Ниже показаны примеры применения функций подстановок:
Следует обратить внимание на то, что результат подстановок, полученный с помощью функции subop, порой может не совпадать с ожидаемым. Поэтому полезно контролировать получаемые в результате подстановок выражения на их корректность.
Одним из важных применений подстановок является проверка правильности решений уравнений и систем уравнений. Ниже дан пример такой проверки:
Здесь задана система из трех нелинейных уравнений, которая затем решена функцией solve. В конце примера с помощью функции подстановки выполнена проверка правильности решения. Оно верно, поскольку у всех уравнений значение левой части совпадает со значением правой части.
Сортировка и селекция выражений широко используются в практике символьных преобразований. Для выполнения сортировки служит функция sort, применяемая в одной из следующих форм:
sort(L) sort(L. F) sort(A) sort(A. V)
Здесь L — список сортируемых значений, F — необязательная булева процедура с двумя аргументами, А — алгебраическое выражение, V — необязательные дополнительные переменные.
ПРИМЕЧАНИЕ
Вы можете проверить, что функция sort в Maple 7 способна сортировать буквы и даже слова русского языка.
Если функция сортировки меняет порядок расположения членов в выражении (или порядок расположения выражений), то другая функция — select — служит для выделения требуемого выражения:
select(f, e)
select(f, е. Ы. ..., bn)
Как бы обратной ей по действию служит функция remove, устраняющая заданные выражения:
remove(f, e)
remove(f, е, b1.... bn)
В этих функциях f — процедура, возвращающая логическое значение, е — список, множество, сумма, произведение или функция, b1, ..., bn — необязательные дополнительные аргументы.
Далее даны примеры применения этих функций.
Maple имеет также оператор селекции А[ехрr]. Его действие поясняют следующие примеры:
Функция simplify — одна из самых мощных в системах символьной математики. Она предназначена для упрощения математических выражений. «Все гениальное просто», — любим мы повторять, хотя это далеко не всегда так. Тем не менее стремление представить многие математические выражения в наиболее простом виде поощряется в большинстве вычислений и нередко составляет их цель. В системе Maple 7 функция упрощения используется в следующем виде:
Функция simplify — многоцелевая. Она обеспечивает упрощение математических выражений, выполняя следующие типовые действия (для простоты обозначим их как ->):
Несмотря на свою гибкость, функция simplify не всегда способна выполнить возможные упрощения. В этом случае ей надо подсказать, в какой области ищутся упрощения и где можно найти соответствующие упрощающие преобразования.
С этой целью в функцию simplify можно включать дополнительные параметры.
В качестве параметров могут задаваться имена специальных математических функций и указания на область действия упрощений: Bessell, BesselJ, BesselK, BesselY, Ei, GAMMA, RootOf, LambertW, dilog, exp, In, sqrt, polylog, pg, pochhammer, trig (для всех тригонометрических функций), hypergeom, radical, power и atsign (для операторов). Полезен также параметр symbolic, явно указывающий на проведение символьных преобразований.
Возможно также применение функции simplify в форме simplify[<name>], где <name> — одно из следующих указаний: atsign, GAMMA, hypergeom, power, radical, RootOf, , sqrt, trig. Ниже даны примеры применения функции Simplifу:
Действие функции simplify существенно зависит от областей определения переменных. В следующем примере упрощение выражения не произошло, поскольку результат этой операции неоднозначен:
Однако, определив переменные как реальные или положительные, можно легко добиться желаемого упрощения:
Читателю настоятельно рекомендуется просмотреть все разделы справочной системы, относящиеся к примерам применения функции simplify (в том числе с другими функциями символьных преобразований), поскольку их число очень велико и эти примеры наглядно демонстрируют необходимость правильного применения разнообразных параметров для придания упрощениям нужного характера. Если функция simplify не способна выполнить упрощение выражения ехрr, то она просто его повторяет. Это сигнал к применению опций.
Даже в жизни мы говорим: «не все так просто». Порою упрощенное выражение скрывает его особенности, знание которых является желательным. Функция expand «расширяет» выражение ехрr и записывается в виде:
expanc(expr, expr1, ехрг2, .... ехрrn)
где ехрr — расширяемое выражение, exprl, ехрг2, ..., ехрrn — необязательные подвыражения — опции. Имеется также инертная форма данной функции — Expand (ехрr). Кроме того, возможно применение операторной конструкции frontend(expans,[expr]).
Функция expand раскладывает рациональные выражения на простые дроби, полиномы на полиномиальные разложения, она способна раскрыть многие математические функции, такие как sin, cos, tan, sinh, cosh, tanh, det, erf, exp, factorial, GAMMA, In, max, min, Psi, binomial, sum, product, int, limit, bernoulli, euler, abs, signum, pochhammer, polylog, BesselJ, BesselY, Bessell, BesselK, AngerJ, Beta, Hankel, Kelvin, Struve, WeberE и функция piecewise. С помощью дополнительных аргументов expr1, ехрr2, ..., exprh можно задать расширение отдельных фрагментов в ехрr.
Примеры применения функции expand приведены ниже:
Разложение целых и рациональных чисел
Для разложения целых или рациональных чисел на множители в виде простых чисел служит функция:
ifactor(n)
или
ifactor(n,method)
где n — число, method — параметр, задающий метод разложения. Другая библиотечная функция, if actors(n), возвращает результат разложения в форме вложенных списков:
Для алгебраических выражений функция факторизации записывается в вычисляемой и не вычисляемой (инертной) формах:
factor(a) Factor(a)
factpr(a.K) Factor(а.К)
Здесь а — полином с несколькими переменными, К — необязательное алгебраическое расширение. Для получения результата от инертной формы функции факторизации надо использовать функции вычисления evala или evalgf.
Главная цель факторизации это нахождение максимального числа независимых сомножителей выражения, линейных по заданным переменным с коэффициентами наиболее простой формы. Ниже представлены примеры применения функции factor:
Еще одна функция общего назначения — collect — служит для комплектования выражения ехрr по степеням указанного фрагмента х (в том числе множества либо списка). Она задается в одной из следующих форм:
collect(a. x)
collect(a. x. form, func)
Во второй форме этой функции дополнительно задаются параметры form (форма) и func (функция или процедура). Параметр form может иметь два значения- recursive (рекурсивная форма) и distributed (дистрибутивная форма). Параметр func позволяет задать имя функции, по которой будет идти комплектование ехрr. Примеры применения функции collect представлены ниже:
Реализация итераций Ньютона в символьном виде
Найти достаточно простую и наглядную задачу, решение которой отсутствует в системе Maple 7, не очень просто. Поэтому для демонстрации решения задачи с применением аналитических методов воспользуемся примером, ставшим классическим, — реализуем итерационный метод Ньютона при решении нелинейного уравнения вида f(x) - 0.
Как известно, метод Ньютона сводится к итерационным вычислениям по следующей формуле:
xi+1=x1+f(x1)/f'(x1);
Реализующая его процедура выглядит довольно просто:
Для получения итерационной формулы в аналитическом виде здесь используется функция unapply. Теперь, если задать решаемое уравнение, то можно получить искомое аналитическое выражение:
Далее, задав начальное приближение для х в виде х = х0, можно получить результаты вычислений для ряда итераций:
Нетрудно заметить, что, испытав скачок в начале решения, значениях довольно быстро сходятся к конечному результату, дающему корень заданной функции. Последние три итерации дают одно и то же значение х. Заметим, что этот метод дает только одно решение, даже если корней несколько. Вычислить другие корни в таком случае можно, изменив начальное условие.
Можно попробовать с помощью полученной процедуры получить решение и для другой функции:
Здесь итерационная формула имеет (и вполне естественно) уже другой вид, но сходимость к корню также обеспечивается за несколько итераций. ;
Возможна и иная форма задания итерационной процедуры с применением оператора дифференцирования D и заданием исходной функции также в виде процедуры:
Вообще говоря, в программных процедурах можно использовать любые операторы и функции, присущие Maple-языку, в том числе и те, которые реализуют символьные вычисления. Это открывает широкий простор для разработки новых процедур и функций, обеспечивающих выполнение символьных операций.
Рассмотрим следующий пример:
Прежние версии системы Maple не брали этот интеграл, поскольку он не имеет аналитического представления через обычные функции. Maple 7 блестяще вычисляет этот «крепкий орешек», но полученное выражение довольно сложно.
Из математики известно, что такой интеграл может быть представлен в следующем виде:
Используя эту формулу, мы можем создать простую процедуру для численного и аналитического вычисления данного интеграла:
Результат в аналитическом виде довольно прост для данного интеграла с конкретным значением т. Более того, мы получили несколько иной результат и дляп в общем случае. Но точен ли он? Для ответа на этот вопрос продифференцируем полученное выражение:
Результат дифференцирования выглядит куда сложнее, чем вычисленный интеграл. Однако с помощью функции simplify он упрощается к подынтегральной функции:
Это говорит о том, что задача вычисления заданного интеграла в аналитической форме действительно решена. А что касается громоздкости результатов, так ведь системы, подобные Maple 7, для того и созданы, чтобы облегчить нам работу с громоздкими вычислениями — в том числе аналитическими.
Теперь мы подошли к важному моменту, о котором читатель наверняка уже давно догадался — в составляемых пользователем процедурах можно использовать ранее составленные им (или кем-то еще) другие процедуры! Таким образом, Maple-язык позволяет реализовать процедуры, вложенные друг в друга. Для иллюстрации применения вложенных процедур рассмотрим операцию интегрирования по частям. Пусть нам надо вычислить интеграл:
где р(х) — выражение, представляющее полином.
Приведенный ниже пример подготовлен в реализации Maple 7 [38]. Вначале подготовим процедуру IntExpMonomialR, реализующую вычисление уже рассмотренного ранее интеграла, но рекурсивным способом:
Теперь составим процедуру для вычисления по частям нашего интеграла:
В этой процедуре имеется обращение к ранее составленной процедуре IntExpMonomialR. Обратите внимание на то, что в процедуре введено предупреждение об определенных проблемах, связанных с использованием функции degree (сообщение начинается с символов ###). Тем не менее процедура работает, в чем убеждают по крайней мере следующие примеры:
В заключение остается отметить, что данный пример в Maple V R4 дает неточный результат, хотя никаких сообщений об ошибках не выводится.
В этом уроке мы научились:
Основные возможности двумерной графики
Maple 7 реализует все мыслимые (и даже «немыслимые») варианты математических графиков. Строятся как графики простых функций в декартовой и полярной системах координат, так и графики, показывающие реалистические образы сложных, пересекающихся в пространстве фигур с их функциональной окраской. Возможны наглядные графические иллюстрации решений самых разнообразных уравнений, включая системы дифференциальных уравнений.
В само ядро Maple 7 встроено ограниченное число функций построения графиков. Это прежде всего функция для построения двумерных графиков plot и функция для построения трехмерных графиков plotSd. Они позволяют строить графики наиболее распространенных типов. Для построения специальных графиков (например, векторных полей градиентов, решения дифференциальных уравнений, построения фазовых портретов и т. д.) в пакеты системы Maple 7 включено большое число различных графических функций. Для их вызова необходимы соответствующие указания.
Вообще говоря, средства для построения графиков в большинстве языков программирования принято считать графическими процедурами, или операторами. Однако мы сохраним за ними наименование функций, в силу двух принципиально важных свойств:
О графические средства Maple V возвращают некоторые графические объекты, которые размещаются в окне документа — в строке вывода или в отдельном графическом объекте;
О эти объекты можно использовать в качестве значений переменных, то есть переменным можно присваивать значения графических объектов и выполнять над ними соответствующие операции (например, с помощью функции show выводить на экран несколько графиков).
Графические функции заданы таким образом, что обеспечивают построение типовых графиков без какой-либо особой подготовки. Для этого нужно лишь указать функцию, график которой строится, и пределы изменения независимых переменных. Однако с помощью дополнительных необязательных параметров можно существенно изменить вид графиков — например, настроить стиль и цвет линий, вывести титульную надпись, изменить вид координатных осей и т. д.
В математике широко используются зависимости вида y(x) или у(х). Их графики строятся на плоскости в виде ряда точек y1(x1), обычно соединяемых отрезками прямых. Таким образом, используется кусочно-линейная интерполяция двумерных графиков. Если число точек графика достаточно велико (десятки или сотни), то приближенность построения не очень заметна.
Для построения двумерных графиков служит функция plot. Она задается в виде:
plot(f, h, v)
plot(f, h, v, о)
где f — визуализируемая функция (или функции), h — переменная с указанием области ее изменения, v — необязательная переменная с указанием области изменения, о — параметр или набор параметров, задающих стиль построения графика (толщину и цвет кривых, тип кривых, метки на них и т. д.).
Самыми простыми формами задания этой функции являются следующие:
Диапазон изменения независимой переменной х задается как xmin. xmax, где xmin и xmax — минимальное и максимальное значение х, .. (две точки) — составной символ, указывающий на изменение независимой переменной. Разумеется, имя х здесь дано условно — независимая переменная может иметь любое допустимое имя.
Помимо построения самой кривой у(х) или f(x) необходимо задать ряд других свойств графиков, например вывод координатных осей, тип и цвет линий графика и др. Это достигается применением параметров графика — специальных указаний для Maple. Графики обычно (хотя и не всегда) строятся сразу в достаточно приемлемом виде. Это достигается тем, что многие параметры задаются по умолчанию и пользователь, по крайней мере начинающий, может о них ничего не знать. Однако язык общения и программирования Maple 7 позволяет задавать управляющие параметры и в явном виде.
Для двумерного графика возможны следующие параметры:
В основном задание параметров особых трудностей не вызывает, за исключением задания титульной надписи с выбором шрифтов по умолчанию — в этом случае не всегда поддерживается вывод символов кириллицы (русского языка). Подбором подходящего шрифта эту проблему удается решить. Модификация графиков с помощью управляющих параметров подробно рассматривается ниже.
Специальный параметр adaptive задает работу специального адаптивного алгоритма для построения графиков наилучшего вида. При этом Maple автоматически учитывает кривизну изменения графика и увеличивает число отрезков прямых в тех частях графиков, где их ход заметно отличается от интерполирующей прямой. При задании adaptive=false адаптивный алгоритм построения графиков отключается, а при adaptive=true включается (значение по умолчанию).
В версии Maple 7 параметр coords задает 15 типов координатных систем для двумерных графиков. По умолчанию используется прямоугольная (декартова) система координат (coords=cartesian). При использовании других координатных систем координаты точек для них(и, v) преобразуются в координаты (х, у) как (n, v) —> (х, у). Ниже приведены наименования систем координат (значений параметра coords) и соответствующие формулы преобразования.
bipolar: |
x = sinh(v)/(cosh(v)-cos(u)) у - sin(u)/(cosh(v)-cos(u)) |
cardioid: |
x = l/2*(u^2-v^2)/(u^2+v^2)^2 у = u*v/(u^2+v^2)^2 |
cartesian: |
x = u У = v |
cassinian: |
x = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+1)^(1/2) + exp(u)*cos(v)+1^(l/2) у = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+1)^(1/2) -exp(u)*cos(v)-1)^(l/2)] |
elliptic: |
x = cosh(u)*cos(v) у = sinh(u)*sin(v) |
hyperbolic: |
x = ((u^2+v^2)^(l/2)+u)^(l/2) у = ((u^2+v~2)^(l/2)-u)^(l/2) |
invcassinian: |
x = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)^(l/2) + exp(u)*cos(v)+1)^(1/2)/(exp(2*u)+2*exp(u)*cos(v)+1)^(l/2) у = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)^(l/2) -exp(u)*cos(v)-l)^(l/2)/(exp(2*u)+2*exp(u)*cos(v)+l)^(l/2) |
invelliptic: |
x = a*cosh(u)*cos(v)/(cosh(u)*2-sin(v)*2) у = a*sinh(u)*sin(v)/(cosh(u)^2-sin(vr2) |
logarithmic: |
x = a/Pi*ln(u^2+v^2) у = 2*a/Pi*arctan(v/u) |
logcosh: |
x = a/Pi*ln(cosh(ur2-sin(vr2) у =2*a/Pi*arctan(tanh(u)*tan(v)) |
maxwell : |
x - a/Pi*(u+l+exp(u)*cos(v)) у = a/Pi*(v+exp(u)*sin(v)) |
parabolic: |
x = (u^2-v^2)/2 • у - u*v |
polar: |
x = u*cos(v) у = u*sin(v) |
rose: |
x = ((u^2+v^2)^(l/2)+u)^(l/2)/(u^2+v^2)^(l/2) у - ((u^2+v^(1/2)+u)^(1/2)/(u^2+v^2)^(1/2) |
tangent: |
x = u/(u^2+v^2) у =v/(u^2+v^2) |
Maple 7 позволяет воспроизводить на одном графике множество кривых. При этом возникает необходимость как-то идентифицировать их. Для этого можно использовать построение линий разными стилями, разными цветами и с разной толщиной. Набор средств выделения кривых позволяет уверенно различать их как на экране цветного дисплея и в распечатках, сделанных цветным струйным принтером, так и при печати монохромными принтерами. Параметр style — позволяет задавать следующие стили для линий графиков:
Если задано построение графика точками, то параметр symbol позволяет представить точки в виде различных символов, например прямоугольников, крестов, окружностей или ромбов.
Другой параметр — color — позволяет использовать обширный набор цветов линий графиков:
aquamarine |
black |
blue |
navy |
coral |
cyan |
brown |
gold |
green |
gray |
grey |
khaki |
magenta |
maroon |
orange |
pink |
plum |
red |
sienna |
tan |
turquoise |
violet |
wheat |
white |
yellow |
Различные цветовые оттенки получаются благодаря использованию RGB-комбинаций базовых цветов: red — красный, gray — зеленый, bluе — синий. Приведем перевод ряда других составных цветов: black — черный, white — белый, khaki — цвет «хаки», gold — золотистый, orange — оранжевый, violet — фиолетовый, yellow — желтый и т. д. Перевод цветов некоторых оттенков на русский язык не всегда однозначен и потому не приводится. Средства управления стилем графиков дают возможность легко выделять различные кривые на одном рисунке, даже если для выделения не используются цвета.
При построении графика одной функции она записывается в явном виде на месте шаблона f. Примеры построения графика одной функции представлены на рис. 11.1. Обратите внимание на то, что график функции sin(x)/x строится без характерного провала в точке х = 0, который наблюдается при построении графиков этой функции многими программами. Он связан с используемым в них правилом — функция задается равной нулю, если ее числитель равен нулю. Данная функция в этой точке дает устранимую неопределенность 0/0->1, что и учитывает графический процессор системы Maple 7.
Рис. 11.1. Примеры построения графиков одной функции
При построении графиков одной функции могут быть введены описание диапазонов и различные параметры, например: для задания цвета кривой, толщины линии, которой строится график функции, и др. К примеру, запись в списке параметров color=black задает вывод кривых черным цветом, а запись thikness=2 задает во втором примере рис. 11.1 построение графика линией, удвоенной по сравнению с обычной толщиной. Кстати говоря, запись color=red дает красный цвет, color=green — зеленый цвет, color=blue — синий цвет и т. д. При черно-белой печати цвета представляются оттенками серого цвета.
Для управления отображаемой на графике области служит задание диапазонов принимаемых значений для переменной и функции. В ряде случаев их можно не применять, тогда Maple автоматически задает приемлемые диапазоны. Однако их явное указание позволяет управлять областью графика вручную. Иногда соответствующее задание диапазонов случайно или целенаправленно ведет к отсечению части графика — например, на рис. 11.2 в первом примере отсечена верхняя часть графика.
Рис. 11.2. Построение графиков функции с явным указанием масштаба
Правильный выбор диапазонов повышает представительность графиков функций. Рекомендуется вначале пробовать строить графики с автоматическим выбором диапазонов, а уже затем указывать их вручную.
Изредка встречаются графики функций f(x), которые надо построить при изменении значениях от нуля до бесконечности или даже от минус бесконечности до плюс бесконечности. Бесконечность в таких случаях задается как особая константа infinity. В этом случае переменной х, устремляющейся в бесконечность, откладывается значение аrctan(x). Рисунок 11.2 (второй пример) иллюстрирует сказанное.
Некоторые функции, например tan(x), имеют при определенных значениях х разрывы, причем случается, что значения функции в этом месте устремляются в бесконечность. Функция tan(x), к примеру, в точках разрывов устремляется к +? и -?. Построение графиков таких функций нередко дает плохо предсказуемые результаты. Графический процессор Maple 7 не всегда в состоянии определить оптимальный диапазон по оси ординат, а график функции выглядит весьма непредставительно, если не сказать безобразно (рис. 11.3, первый пример).
Рис. 11.3. Построение графиков функций с разрывами
Среди аргументов функции plot есть специальный параметр discont. Если задать его значение равным true, то качество графиков существенно улучшается, см. второй пример на рис. 11.3. Улучшение достигается разбиением графика на несколько участков, на которых функция непрерывна, и более тщательным контролем за отображаемым диапазоном. При discont=false данный параметр отключен и строятся обычные графики.
ПРИМЕЧАНИЕ
Следует отметить, что вид графика можно улучшить, просто задав диапазон по оси у например введя в параметры функции запись у=-10..10). При этом в точках разрыва могут появиться вертикальные линии. Иногда это бывает полезно.
Важное значение имеет возможность построения на одном рисунке графиков нескольких функций. В простейшем случае (рис. 11.4, первый пример) для построения таких графиков достаточно перечислить нужные функции и установить для них общие интервалы изменения.
Рис. 11.4. Графики трех функций на одном рисунке
Обычно графики разных функций автоматически строятся разными цветами. Но это не всегда удовлетворяет пользователя — например, при распечатке графиков монохромным принтером некоторые кривые могут выглядеть слишком блеклыми или даже не пропечататься вообще. Используя списки параметров color (цвет линий) и style (стиль линий), можно добиться выразительного выделения кривых — это показывает второй пример на рис. 11.4 для случая, когда линии графиков выделяются стилем. Однако если кривые задаются разным цветом, то при черно-белой печати они могут перестать различаться.
На рис. 11.5 показан еще один пример такого рода. Здесь построен график функции sin(x)/x и график ее полиномиальной аппроксимации. Она выполняется настолько просто, что соответствующие функции записаны прямо в списке параметров функции plot.
Рис. 11.5. График функции sin(x)/x и ее полиномиальной аппроксимации
В данном случае сама функция построена сплошной линией, а график полинома точками — ромбами. Хорошо видно, что при малых х аппроксимация дает высокую точность, но затем с ростом х ее погрешность резко возрастает.
Рисунок 11.6 показывает построение нескольких любопытных функций, полученных с помощью комбинаций элементарных функций. Такие комбинации позволяют получать периодические функции, моделирующие сигналы стандартного вида: в виде напряжения на выходе двухполупериодного выпрямителя, симметричных прямоугольных колебаний (меандр), пилообразных и треугольных импульсов, треугольных импульсов со скругленной вершиной.
Рис. 11.6. Построение графиков нескольких любопытных функций
В этом рисунке запись axes=NONE убирает координатные оси. Обратите внимание, что смещение графиков отдельных функций вниз с целью устранения их наложения достигнуто просто прибавлением к значению каждой функции некоторой константы.
Показанный на рис. 11.5 график полинома, построенный ромбиками, не означает, что полином представлен отдельными точками. В данном случае просто выбран стиль линии в виде точек. Однако часто возникает необходимость построения графиков функций, которые представлены просто совокупностями точек. Такая совокупность может быть создана искусственно, как на рис. 11.7, либо просто задаваться списком координат х и значений функции.
В данном случае переменная Р имеет вид списка, в котором попарно перечислены координаты точек функции sin(x). В этом нетрудно убедиться, заменив знак «:» после выражения, задающего Р, на знак «;». Далее по списку Р построен график точек в виде крестиков, которые отображают отдельные значения функции sin(x).
На рис. 11.8 показано построение графиков функций по точкам при явном задании функции списком координат ее отдельных точек. В первом примере эти точки соединяются отрезками прямых, так что получается кусочно-линейный график. Видно также, что указание типа точек после указания стиля линии игнорируется (а жаль, было бы неплохо, чтобы наряду с кусочно-линейной линией графика строились и выделенные окружностями точки).
Рис. 11.7. Формирование списка отдельных точек функции и их построение на графике
Рис. 11.8. Построение графика функции, явно заданной отдельными точками
Во втором примере рис. 11.8 показано построение только точек заданной функциональной зависимости. Они представлены маленькими кружками. Читателю предлагается самостоятельно совместить оба подхода к построению графиков по точкам и создать график в виде отрезков прямых, соединяющих заданные точки функции, представленные кружками или крестиками.
Способность Maple 7 к упрощению работы пользователя просто поразительна — жаль только, что многие возможности этого становятся ясными после основательного изучения программы, на что уходят, увы, не дни, а месяцы, а то и годы. Применительно к графикам одной из таких возможностей является построение графиков функций, заданных только их функциональными именами — даже без указания параметров в круглых скобках. Такую возможность наглядно демонстрирует рис. 11.9.
Рис. 11.9. Построение графиков четырех функций, заданных только их именами
Этот пример показывает, что возможно построение графиков функций даже без указания в команде plot диапазонов. При этом диапазон по горизонтальной оси устанавливается равным по умолчанию -10.. 10, а по вертикальной оси выбирается автоматически в соответствии с экстремальными значениями функций в указанном диапазоне изменения независимой переменной (условно х).
Часто возникает необходимость построения графика точек, ординаты которых являются элементами некоторого вектора. Обычно при этом предполагается равномерное расположение точек по горизонтальной оси. Пример построения такого графика дан на рис. 11.10.
Рис. 11.10. Построение графика точек с ординатами, заданными элементами вектора
Из этого примера нетрудно заметить, что данная задача решается составлением списка парных значений координат исходных точек — к значениям ординат точек, взятых из вектора, добавляются значения абсцисс. Они задаются чисто условно, поскольку никакой информации об абсциссах точек в исходном векторе нет, так что фактически строится график зависимости ординат точек от их порядкового номера n.
Некоторые виды функций, например кусочные, удобно задавать процедурами. Построение графиков функций, заданных процедурами, не вызывает никаких трудностей и иллюстрируется рис. 11.11.
Рис. 11.11. Построение графика функций, заданных процедурами
Здесь, пожалуй, полезно обратить внимание на то, что в функции plot указывается имя процедуры без списка ее параметров.
Еще одна «экзотическая» возможность функции plot — построение графиков функций, заданных функциональными операторами. Она иллюстрируется рис. 11.12.
Имена функций (без указания списка параметров в круглых скобках) тоже, по существу, являются функциональными операторами. Так что они также могут использоваться при построении графиков упрощенными способами.
В ряде случаев для задания функциональных зависимостей используются заданные параметрически уравнения, например х = f1(t) и у =f2(t) при изменении переменной t в некоторых пределах. Точки(х, у) наносятся на график в декартовой системе координат и соединяются отрезками прямых. Для этого используется функция plot в следующей форме:
Рис. 11.12. Построение графиков функции, заданной функциональными операторами
plot([fl(t),f2(t),t-tmin..tmax].h,v.p)
Если функции f1(£) и f2(0 содержат периодические функции (например, тригонометрические), то для получения замкнутых фигур диапазон изменения переменной t обычно задается равным 0. .2*Pi или -Pi..Pi. К примеру, если задать в качестве функций f1(t) и f2(t) функции sin(t) и cos(t), то будет получен график окружности. Рисунок 11.13 показывает другие, чуть менее тривиальные примеры построения графиков такого рода.
Задание диапазонов для изменений h и v, а также параметров р не обязательно. Но, как и ранее, они позволяют получить вид графика, удовлетворяющий всем требованиям пользователя.
Графики в полярной системе координат представляют собой линии, которые описывают конец радиус- вектора r(t) при изменении угла t в определенных пределах — от t до t . Построение таких графиков также производится функцией plot, которая для этого записывается в следующем виде:
Рис. 11.13. Построение функций, заданных параметрически
plot([r(t),theta(t),t=tmin..tnrax],h,v,p,coords-polar)
Здесь существенным моментом является задание полярной системы координат параметром coords=polar. Рисунок 11.14 дает примеры построения графиков функций в полярной системе координат.
Графики параметрических функций и функций в полярной системе координат отличаются огромным разнообразием. Снежинки и узоры мороза на стеклах, некоторые виды кристаллов и многие иные физические объекты подчиняются математическим закономерностям, положенным в основу построения таких графиков.
Особенности применения функции plot3d
Трехмерными называют графики, отображающие функции двух переменных z(х,у). Каждая точка zi таких графиков является высотой (аппликатой) точки, лежащей в плоскости XY и представленной координатами (х,у). Поскольку экран монитора компьютера в первом приближении является плоским, то на деле трехмерные графики представляют собой специальные проекции объемных объектов.
Рис. 11.14. Построение графиков функций в полярной системе координат
Для построения графиков трехмерных поверхностей Maple имеет встроенную в ядро функцию pi ot3d. Она может использоваться в следующих форматах:
plot3d(exprl. x=a..b. y=c..d,p)
plot3d(f, a..b. c..d.p)
plot3d([exprf.exprg.exprh]. s=a..b, t=c..d.p)
plot3d([f.g.h]. a..b, c..d,p)
В двух первых формах plot3d применяется для построения обычного графика одной поверхности, в других формах — для построения графика с параметрической формой задания поверхности. В приведенных формах записи f, g и h — функции; exprl — выражение, отражающее зависимость от -х и у; exprf, exprg и exprh — выражения, задающие поверхность параметрически; s, t, а и b — числовые константы действительного типа; end — числовые константы или выражения действительного типа; х, у, s и t — имена независимых переменных; р — управляющие параметры.
С помощью параметров р можно в широких пределах управлять видом трехмерных графиков, выводя или убирая линии каркасной сетки, вводя функциональную окраску поверхностей, меняя угол их обзора и параметры освещения, изменяя вид координатных осей и т. д. Следующие параметры функции p1ot3d задаются аналогично их заданию для функции plot:
axesfont font color coords font ,
labelfont linestyle numpoints scaling style
symbol t hickness title titlefont
Однако функция plot3d имеет ряд дополнительных специфических параметров:
Для трехмерных графиков возможно задание 31 типа координатных систем с помощью параметра сооrds= Тип _ координатной _ системы. Поскольку на экране монитора поверхность отображается только в прямоугольной системе координат и характеризуется координатами х, у и z, то для представления поверхности, заданной в иной системе координат с координатами u, v и w, используются известные [46, 47] формулы для преобразования (u, v, w) --> (х, у, z). Ниже перечислены типы трехмерных координатных систем и соответствующие формулы преобразования.
bipolar-cylindrical:
х = a*sinh(v)/(cosh(v)-cos'(u))
у = a*sin(u)/(cosh(v)-cos(u))
z = w
bispherical:
x = sin(u)*cos(w)/d
у = sin(u)*sin(w)/d
z = sinh(v)/d где d - cosh(v) - cos(u)
cardioidal:
x = u*v*cos(w)/(u^2+v^2)^2
у -=u*v*sin(w)/(u^2+v^2)^2
z = (u^2-v^2)/2/(u^2+v^2)^2
cardioidcylindrical:
x = (u^2-v^2)/2/(u^2+v^2)^2
у - u*v/(u^2+v^2)^2
z =w
casscylindhcal:
x = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)^(l/2)+exp(u)*cos(v)+l)^(l/2)
у = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)^(l/2)-exp(u)*cos(v)-l)^(l/2)
z =w
confocalellip:
x = ((a^2-u)*(a^2-v)*(a^2-w)/(a^2-b^2)/(a^2-c^2))^(l/2)
у = ((b^2-u)*(b^2-v)*(b^2-w)/(b^2-a^2)/(b^2-c^2))^(l/2)
z = ((c^2-u)*(c^2-v)*(c^2-w)/(c^2-a^2)/(c^2-b^2))^(l/2)
confocalparab:
x = ((a^2-u)*(a^2-v)*(a^2-w)/(b^2-a^2)^(l/2)
у = ((b^2-u)*(b^2-v)*(b^2-w)/(b^2-a^2))^(l/2)
z = (a^2+b^2-u-v-w)/2
conical:
x = u*v*w/(a*b)
у = u/b*((v^2 - b^2)*(b^2-w^2)/(a^2-b^2))^(l/2)
z= u/a*((a^2 - v^2)*(a^2 - w^2)/(a^2-b^2))6(l/2)
cylindrical:
x = u*cos(y)
у = u*sin(y)
z = w
ellcylindrical:
x =a*cosh(u)*cos(v)
у = a*sinh(u)*sin(v)
z = w
ellipsoidal:
x = u*v*w/a/b
у = ((u^2-b^2)*(u^2-b^2)*(b^2-w^2)/(а^2-b^2)^(1/2)/b
z = ((u^2-a^2)*(a^2-v^2)*(a^2-w^2)/(a^2-b^2)^(l/2)/a
hypercylindrical:
x = ((u^2+v^2)^(l/2)-ni)^(l/2)
у = ((u^2+v^2)^(l/2)-u)^(l/2)
z = w
invcasscylindrical:
x = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+l)^(l/2) +
exp(u)*cos(v)+1)^(l/2)/(exp(2*u)+2*exp(u)*cos(v)+1)^(l/2)
у = a*2^(l/2)/2*((exp(2*u)+2*exp(u)*cos(v)+1)^(l/2) -
exp(u)*cos(v)-1)^(l/2)/(exp(2*u)+2*exp(u)*cos(v)-1)^(l/2)
z = w
invellcylindrical:
x = a*cosh(u)*cos(v)/(cosh(u)^2-sin(v)^2)
у = a*sinh(u)*sin(v)/(cosh(u)^2-sin(v)^2)
z = w
invoblspheroidal:
x = a*cosh(u)*sin(v)*cos(w)/(cosh(u)^2-cos(v)^2)
у = a*cosh(u)*sin(v)*sin(w)/(cosh(u)^2-cos(v)^2)
z = a*sinh(u)*cos(v)/(cosh(u)^2-cos(v)^2)
invprospheroldal:
x = a*s1nh(u)*sin(v)*cos(w)/(cosh(u)^2-sin(v)^2)
у = a*sinh(u)*sin(v)*sin(w)/(cosh(u)^2-sin(v)^2)
z = a*cosh(u)*cos(v)/(cosh(u)^2-s1n(v)^2)
logcyllndrical:
x = a/Pi*ln(u^2+v^2)
у = 2*a/Pi*arctan(v/u)
z = w
logcoshcylindrical:
x = a/Pi*ln(cosh(u^2-sin(v)^2)
у = 2*a/Pi*arctan(tanh(u)*tan(v))
z = w
maxwell cylindrical:
x = a/P1*(u+l+exp(u)*cos(v))
у = a/Pi*(v+exp(u)*sin(v))
z = w
oblatespheroidal:
x = a*cosh(u)*s1n(v)*cos(w)
у = a*cosh(u)*sin(v)*sin(w)
z = a*s1nh(u)*cos(v)
parabololdal:
x = u*v*cos(w)
у = u*v*sin(w)
z = (u^2 - v^2)/2
paraboloidal2:
x = 2*((u-a)*(a-v)*(a-w)/(a-b)^(l/2)
у = 2*((u-b)*(b-v)*(b-w)/(a-b))^(l/2)
z = u+v+w-a-b
paracylindrical:
x = (iT2 - v*2)/2
у =u*v
z = w
prolatespheroidal:
x = a*sinh(u)*sin(v)*cos(w)
y=a*s1nh(u)*sin(v)*sin(w)
z=a*cosh(u)*cos(v)
rectangular:
x = u
у = v
z = w
rosecylindrlcal:
х =((u^2+v^2)^(l/2)-Hi)^(l/2)/(u^2+v^2)^(l/2)
у = ((u^2+v^2)^(l/2)-u)^(l/2)/(u^2+v^2)^(l/2)
z =w
sixsphere:
x = u/(u^2+v^2+w^2)
у = v/(u^2+v^2+w^2)
z = w/(u^2+v^2+w^2)
spherical:
x = u*cos(v)*sin(w)
у = u*sin(v)*sin(w)
z = u*cos(w)
tangentcylindrical:
x = u/(u^2+v^2) '
у = v/(u^2+v^2)
z = w
tangentsphere:
x = u*cos(w)/(u^2+v^2)
у = u*sin(w)/(u^2+v^2)
z = v/(u^2+v^2)
toroidal:
x = a*sinh(v)*cos(w)/d
у = a*sinh(v)*sin(w)/d
z = a*sin(u)/d где d = cosh(v) - cos(u)
Эти формулы полезно знать, поскольку в литературе встречаются несколько отличные формулы пересчета. Вид графиков трехмерных поверхностей очень сильно различается в разных координатных системах. По умолчанию трехмерные графики строятся в прямоугольной системе координат — rectangular.
Построение поверхностей с разными стилями
На рис. 11.15 показано два примера простейших построений графиков трехмерной поверхности. По умолчанию в Maple 7 строится поверхность с функциональной окраской и стилем style=patch (верхний рисунок). Функциональная окраска делает рисунки более информативными, но, увы, на рисунках в книге она превращается в окраску оттенками серого цвета.
Параметр style=hidden строит каркасную поверхность с функциональной окраской тонких линий каркаса и удалением невидимых линий. Чтобы график выглядел более четким, построение во втором примере задано линиями/черного цвета с помощью параметра color=black (см. нижний рисунок на рис. (11.15).
Помимо значения patch для построения трехмерных поверхностей можно задавать ряд других стилей: point — точками, contour — контурными линиями, line — линиями, hidden — линиями каркаса с удалением невидимых линий, wireframe — линиями каркаса со всеми видимыми линиями, patchnogrid — с раскраской, но без линий каркаса, patchcontour — раскраска с линиями равного уровня.
Рис. 11.15. Примеры простейшего построения трехмерных поверхностей
Цвет трехмерного графика может задаваться (как и для двумерного) параметром соlог=с, где с — цвет (оттенки цвета перечислялись ранее). Возможно еще два алгоритма задания цвета:
Удачный выбор углов обзора фигуры и применение функциональной окраски позволяют придать построениям трехмерных фигур весьма эффектный и реалистический вид.
Как отмечалось, вид графика трехмерной поверхности существенно зависит от выбора координатной системы. Рисунок 11.16 показывает пример построения нелинейного конуса в цилиндрической системе координат. Для задания такой системы координат используется параметр coords=cylindrical.
Рис. 11.16. Нелинейная цилиндрическая поверхность
При построении этой фигуры также использована цветная функциональная окраска. Кроме того, этот пример иллюстрирует вывод над рисунком титульной надписи (кстати, сделанной на русском языке).
Приведем еще один пример построения трехмерной поверхности — на этот раз . в сферической системе координат (рис. 11.17). Здесь функция задана вообще элементарно просто — в виде числа 1. Но, поскольку выбрана сферическая система координат, в результате строится поверхность шара единичного радиуса.
О том, насколько необычным может быть график той или иной функции в различных системах координат, свидетельствует рис. 11.18. На нем показан график параметрически заданной функции от одной координаты t = sin(t3), построенный в сферической системе координат.
Кстати, рис. 11.18 иллюстрирует возможность одновременного наблюдения нескольких окон. В одном окне задано построение графика, а в другом построен сам график. При построении графика в отдельном окне появляется панель форматирования графика. С помощью ее довольно наглядных кнопок можно легко скорректировать вспомогательные параметры графика (окраску, наличие линий каркаса, ориентацию и др.).
Рис. 11.17. Построение шарообразной поверхности в сферической системе координат
Рис. 11.18. График еще одной поверхности в сферической системе координат
На рис. 11.19 показано построение поверхности при полном ее параметрическом задании. В этом случае поверхность задается тремя формулами, содержащимися в списке.
Рис. 11.19. График трехмерной поверхности при полном параметрическом ее задании
В данном случае функциональная окраска задана из меню, поэтому в состав функции соответствующий параметр не введен. Обратите внимание на технику удаления частей фигуры путем задания соответствующего диапазона изменения параметров t и n.
Следующий пример показывает построение простого тороида — цилиндра, свернутого в кольцо (рис. 11.20). Здесь также использован прием удаления части фигуры, что делает ее представление более наглядным и красочным. Кроме того, введены параметры, задающие функциональную окраску.
Тор на рис. 11.20 выглядит, как произведение искусства. Он дает полное и наглядное представление об этой фигуре.
Полезно обратить внимание на параметр масштаба scalling=constrained, явно введенный в документ рис. 11.20. Его можно было бы и не вводить, поскольку этот параметр задается по умолчанию. Он выравнивает масштабы представления фигуры по осям координат, обычно используется по умолчанию и позволяет снизить до минимума геометрические искажения фигур — тор, например, при этом виден как круглая труба, свернутая в кольцо. У таких графиков есть специфический недостаток — они занимают малую часть окна вывода.
Рис. 11.20. Тор с функциональной окраской поверхности
Задание параметра scaling=unconstrained означает отказ от равного масштаба по осям. График при этом увеличивается в размерах, но становятся заметны его искажения по осям координат. В итоге тор превращается в толстую сплющенную трубу с эллиптическим сечением (рис. 11.21).
Весьма важным является учет углов, под которыми наблюдается трехмерная поверхность или объект. К примеру, построение рис. 11.21 неудачно в том плане, что оно не показывает наличия у тора дырки. В общем, как в поговорке: «кому бублик, а кому дырка от бублика» — ведь бублик и есть материально реализованный тор. Простейший и очень удобный способ изменить угол обзора заключается во вращении фигуры на рисунке мышью при нажатой левой кнопке. При этом можно повернуть фигуру так, что ее геометрические особенности будут видны (рис. 11.22).
В Maple есть способ явно задать углы обзора с помощью параметра orientation=[theta, phi], где theta и phi — углы, через которые задаются параметрические уравнения трехмерной фигуры или поверхности. Рисунок 11.23 дает пример такого задания фигуры, которую можно назвать «квадратным» тором. Обратите внимание, что значения заданных углов обзора повторяются в полях углов на контекстной панели инструментов. Разумеется, последние будут меняться, если начать вращать фигуру на рисунке мышью.
Рис. 11.21. Тор, построенный с применением значения параметра seating-unconstrained
Рис. 11.22. Тор с рис. 11.21 после поворота мышью демонстрирует, что он и впрямь имеет дырку
Рис. 11.23. «Квадратный» тор, представленный под заданными углами обзора
Параметрическое задание уравнений поверхности открывает почти неисчерпаемые возможности построения занимательных и сложных фигур самого различного вида. Приведем пару построений такого рода.
На рис. 11.24 показан тор, сечение которого имеет вид сплюснутой шестиконечной звезды. Вырез в фигуре дает прекрасный обзор ее внутренней поверхности, а цветная функциональная окраска и линии сетки, построенные с применением алгоритма удаления невидимых линий, дают весьма реалистичный вид фигуры. Замените параметр scaling=unconstrained на scaling=constrained, и вы получите тор с неискаженным сечением.
На рис. 11.25 показан еще один тор. На этот раз он круглого сечения, но сверху и снизу имеет вид пятиконечной звезды.
ПРИМЕЧАНИЕ
В приведенных на рис. 11.19-11.25 программах построения различных поверхностей — и трехмерных фигур имеется ряд характерных констант и математических выражений, определяющих как вид фигур, так и их размеры и положение. Рекомендуется тщательно проанализировать эти примеры и попробовать их в работе с несколько измененными теми или иными данными. Полезно построить ряд подобных примеров самостоятельно. Все это будет способствовать привитию учащимся специального геометрического стиля мышления, при котором геометрические особенности фигур связываются с их расчетным описанием.
Рис. 11.24. Тор с сечением в виде шестиконечной звезды
Рис. 11.25. Тор круглого сечения в виде пятиконечной звезды
Двумерная быстрая графика — smartplot
В последние реализации системы Maple (5, 6 и 7) введены новые функции быстрого построения графиков. Функция smartplot(f) предназначена для создания двумерных графиков. Параметр f может задаваться в виде одиночного выражения или набора выражений, разделяемых запятыми. Задание управляющих парамтеров в этих графических функциях не предусмотрено; таким образом, их можно считать первичными, или черновыми. Для функции построения двумерного графика по умолчанию задан диапазон изменения аргумента -10.. 10. Рисунок 11.26 иллюстрирует применение функции smartplot для построения трех (верхний пример) и двух (нижний пример) графиков функций на одном рисунке.
Рис. 11.26. Построение графиков с помощью функции smartplot
Обратите внимание на второй пример применения функции smartplot. Здесь график выражения 5sin(y)/y построен относительно вертикальной оси. Поэтому он развернут на 90° относительно графика, построенного обычным образом.
ПРИМЕЧАНИЕ
На графиках, построенных командой smartplot(x), присутствует надпись «Live», что — видно на рис. 11.26.
Быстрое (не в смысле ускорения самого построения, а лишь в смысле более быстрого задания построения графиков) построение трехмерных графиков обеспечивает функция smartplot3d Для этой функции задан диапазон изменения обоих аргументов -5..5. Рисунок 11.27 поясняет применение функции smartplot3d.
Рис. 11.27. Примеры применения функции smartplot3d
Как видно из второго примера, представленного на рис. 11.27, функция smartplot3d обеспечивает построение не только отдельных поверхностей, но и ряда Пересе, кающихся поверхностей. При этом линии пересечения поверхностей строятся вполне корректно.
Трехмерный график как графический объект
Принадлежность функций plot и plot3d к функциям (в ряде книг их именуют операторами, командами или процедурами) наглядно выявляется при создании графических объектов. Графический объект — это, в сущности, обычная переменная, которой присваивается значение графической функции. После этого такая переменная, будучи вызванной, производит построение соответствующего графика. Пример этого дан на рис. 11.28.
Рис. 11.28. Пример задания и вывода трехмерного графика — графического объекта
В данном случае строится лента Мебиуса, свойства которой (например, плавный переход с одной стороны ленты на другую) уже много веков будоражат воображение людей.
Поскольку можно говорить, что вызов переменной возвращает графический объект, то это дает повод считать plot и plot3d графическими функциями.
Язык программирования Maple 7 допускает применение в процедурах любых внутренних функций, в том числе графических. Пример такого применения дает рис. 11.29.
Рис. 11.29. Пример создания и применения процедуры трехмерной графики
Этот пример показывает еще один способ задания и построения кольца Мебиуса. Практически любые графические построения можно оформлять в виде процедур и использовать такие процедуры в своих документах.
Функция plot3d позволяет строить одновременно несколько фигур, пересекающихся в пространстве. Для этого достаточно вместо описания одной поверхности задать список описаний ряда поверхностей. При этом функция plot3d обладает уникальной возможностью — автоматически вычисляет точки пересечения фигур и показывает только видимые части поверхностей. Это создает изображения, выглядящие вполне естественно. Пример такого построения для двух функций показан на рис. 11.30.
Рис. 11.30. Пример построения двух трехмерных фигур, пересекающихся в пространстве
Понятие о графических структурах
Функции PLOT и PLOT3D (с именами, набранными большими буквами) позволяют создавать графические структуры, содержащие ряд графических объектов si, s2, s3 и т. д. Каждый объект может представлять собой точку или фигуру, полигон, надпись и т. д., позиционированную с высокой точностью в заданной системе координат. Координатные оси также относятся к графическим объектам. Важно отметить, что функции PLOT и PLOT3D одновременно являются данными, описывающими графики. Их можно записывать в виде файлов и (после открытия файлов) представлять в виде графиков. Особые свойства этих функций подчеркиваются их записью прописными буквами.
Графическая структура двумерной графики задается в виде:
PLOT(s1, s2, s3....,0);
где si, s2, s3 ... — графические объекты (или элементарные структуры — примитивы), о — общие для структуры параметры.
Основными объектами являются:
При задании графических объектов (структур) si, s2, s3 и т. д. можно использовать описанные выше параметры и параметры, например, для задания стиля построения - STYLE (POINT, LINE/PATCH, PATCHNOGRID); толщины линий, - THICKNESS (кроме координатных осей); символа, которым строятся точки кривых — SYMBOL (BOX, CROSS, CIRCLE, POINT, DIAMOND и DEFAULT); стиля линий - LINESTYLE; цвета -COLOR (например, COLOR(HUE.O) для закраски непрерывной области), типа шрифта — FONT; вывода титульной надписи — TITLE (string); имени объекта — NAME (string); стиля координатных осей - AXESSTYLE (BOX, FRAME, NORMAL, NONE или DEFAULT) и т. д.
Следует отметить, что параметры в графических структурах задаются несколько иначе — с помощью круглых скобок. Например, для задания шрифта TIMES ROMAN с размером символов 16 пунктов надо записать FONT(TIMES,ROMAN, 16), для задания стиля координатных осей в виде прямоугольника — AXESSTYLE (BOX) и т. д.
На рис. 11.31 показан пример графических построений при использовании основных структур двумерной графики.
Как видно из этого примера, графическая двумерная структура позволяет задавать практически любые двумерные графики и текстовые надписи в пределах одного рисунка.
Рис. 11.31. Пример использования двумерных структур
Графические структуры трехмерной графики строятся функцией PLOT3D:
PLOT3D(s1,s2,s3.....o)
В качестве элементарных графических структур можно использовать уже описанные выше объекты POINTS, CURVES, POLYGONS и TEXT — разумеется, с добавлением в списки параметров третьей координаты. Пример такого построения дан на рис. 11.32.
Кроме того, могут использоваться некоторые специальные трехмерные структуры. Одна из них — структура GRID:
На рис. 11.33 показан пример создания структуры трехмерной графики на базе GRID. Изображение .представляет собой линии, соединяющие заданные точки.
Еще один тип трехмерной графической структуры — это MESH:
Рис. 11.32. Пример создания структуры трехмерной графики
Рис. 11.33. Пример задания графической структуры типа GRID
Обычная форма задания этой структуры следующая:
MESH([[[x11,y11,z11]....[x1n,y1n,z1n]]. [[x21,y21,z21]....[x2n,y2n,z2n]]. ...[[xm1,ym1,zm1]...[xmn,ymn,zmn]]])
Пример задания такой структуры представлен на рис. 11.34.
Рис. 11.34. Пример задания графической структуры типа MESH
Описанные структуры могут использоваться и в программных модулях. Много таких примеров описано в книгах, поставляемых с системой Maple 7.
В этом уроке мы научились:
Урок 12.
Расширенные средства графики
Общая характеристика пакета plots
Пакет plots содержит почти полсотни графических функций, существенно расширяющих возможности построения двумерных и трехмерных графиков в Maple 7:
> with(plots);
[animate, animate3d, animatecurve, changecoords, complexplot, complexplotSd, conformal, contourplot, contourplotSd, coordplot, coordplotld, cylinderplot, densityplot, display, displayed, fteldplot,fieldplot3d, gradplot, gmdplotSd, implicitplot, implicitplot3d, inequal, listcontplot, HslcontplotSd, listdensityplot, listplot, Iistplot3d, loglogplot, logplot, matrixplot, odeplot>pareto,pointplot, pointplotSd, polarplot, polygonplot, polygonplotSd, palyhedrajsupported, polyhedraplot, replot, rootlocus, semilogplot, setoptions, setoptionsSd, spacecurve, sparsematrixplot, sphereplot, surfdata, textplot, textplotSd, tubeplot]
Ввиду важности этого пакета отметим назначение всех его функций:
Среди этих функций надо отметить прежде всего средства построения графиков ряда новых типов (например, в виде линий равного уровня, векторных полей и т. д.), а также средства объединения различных графиков в один. Особый интерес представляют две первые функции, обеспечивающие анимацию как двумерных (animate), так и трехмерных графиков (animate3d). Этот пакет вполне заслуживает описания в отдельной книге. Но, учитывая ограниченный объем данной книги, мы рассмотрим лишь несколько характерных примеров его применения. Заметим, что для использования приведенных функций нужен вызов пакета, например командой with(plots).
Построение графиков функций в двумерной полярной системе координат
В пакете plots есть функция для построения графиков в полярной системе координат. Она имеет вид polarplot(L,o), где L — объекты для задания функции, график которой строится, и о — необязательные параметры. На рис. 12.1, сверху, представлен пример построения графика с помощью функции polarplot. В данном случае для большей выразительности опущено построение координатных осей, а график выведен линией удвоенной толщины. График очень напоминает лист клена, весьма почитаемого в Канаде и ставшего эмблемой Maple.
Построение двумерных графиков типа implicitplot
В математике часто встречается особый тип задания геометрических фигур, при котором переменные х и у связаны неявной зависимостью. Например, окружность задается выражением х2 + у2 =R2, где R — радиус окружности. Для задания двумерного графика такого вида служит функция импликативной графики:
implicitplot(eqn,x=a..b,y=c..d,options)
Пример построения окружности с помощью этой функции показан на рис. 12.1, снизу. Чуть ниже мы рассмотрим подобную функцию и для трехмерного графика.
Рис. 12.1. Графики, построенные с помощью функций polarptot и impticitplot
Построение графиков линиями равного уровня
Графики, построенные с помощью линий равного уровня (их также называют контурными графиками), часто используются в картографии. Эти графики получаются, если мысленно провести через трехмерную поверхность ряд равноотстоящих плоскостей, параллельных плоскости, образованной осями X иY графика. Линии равных высот образуются в результате пересечения этих плоскостей с трехмерной поверхностью.
Для построения таких графиков используется функция contourplot, которая может использоваться в нескольких форматах:
contourplot(exprl,x=a..b,y=c..d)
contourplot(f,a..b,c..d)
contourplot([exprf ,exprg,exprh ] S=a. .b,t=c. .d)
contourplot([f.g.h ],a..b,c..d)
contourp1ot3d(exprl,x=a..b,y=c. .d)
contourplot3d(f,a..b,c..d)
contourplot3d([exprf,exprg,exprh],s=a..b,t=c,.d)
contourplot3d([f.g.h ],a..b,c..d)
Здесь f, g и h — функции; exprl — выражение, описывающее зависимость высоты поверхности от координат х и у; exprf, exprg и exprh — выражения, зависящие от s и t, описывающие поверхность в параметрической форме; а и b — константы вещественного типа; end — константы или выражения вещественного типа; х, у, s и t — имена независимых переменных.
На рис. 12.2 показано построение графика линиями равного уровня для одной функции. Параметр filled=true обеспечивает автоматическую функциональную окраску замкнутых фигур, образованных линиями равного уровня. Порою это придает графику большую выразительность, чем при построении только линий равного уровня.
Рис. 12.2. Пример построения графика функции линиями равного уровня
Обратите внимание на то, что данная функция по умолчанию строит легенду — она видна под графиком в виде линий с надписями. К сожалению, в данном варианте окраски сами контурные линии получаются черными и их невозможно отличить. Однако если убрать параметр filled=true, то контурные линии (и линии легенды) будут иметь разный цвет и легко различаться.
Функция contourplot позволяет строить и графики ряда функций. Пример такого построения показан на рис. 12.3. Множество окружностей на этом рисунке создается четырьмя поверхностями, заданными функциями cl, с2, сЗ и с4.
Рис. 12.3. Пример построения графиков многих функций линиями равного уровня
ВНИМАНИЕ
Обратите внимание, что на многих графиках Maple 7 по умолчанию вписывает легенду,то есть список линий с обозначениями. Иногда (как, например, на рис. 12.3) этот список оказывается просто некстати. Легенду можно убрать, расширив заодно место для графика, сняв флажок Show Legend в меню Legend, которое появляется при двойном щелчке на графике (это меню видно на рис. 12.3). То же самое можно сделать с помощью той же команды в контекстном меню. Заодно запомните, что легенду можно редактировать, выполнив команду Edit Legend.
Следует отметить, что хотя графики в виде линий равного уровня выглядят не так эстетично и естественно, как обычные графики трехмерных поверхностей (ибо требуют осмысления результатов), у них есть один существенный плюс - экстремумы функций на таких графиках выявляются порой более четко, чем на обычных графиках. Например, небольшая возвышенность или впадина за большой «горой» на обычном графике может оказаться невидимой, поскольку заслоняется «горой». На графике линий равного уровня этого эффекта нет. Однако выразительность таких графиков сильно зависит от числа контурных линий.
График плотности
Иногда поверхности отображаются на плоскости как графики плотности окраски — чем выше высота поверхности, тем плотнее (темнее) окраска. Такой вид графиков создается функцией densityplot. Она может записываться в двух форматах:
densityplot(exprl.x=a..b,y=c..d)
densityplot(f,a..b,c..d)
где назначение параметров соответствует указанному выше для функции contourplot. На рис. 12.4 (верхняя часть) дан пример построения графика такого типа. Нетрудно заметить, что в плоскости XY график разбит на квадраты, плотность окраски которых различна. В нашем случае плотность окраски задается оттенками серого цвета.
Рис. 12.4. Графики плотности и поля векторов
Обычно графики такого типа не очень выразительны, но имеют свои области применения. К примеру, оттенки окраски полупрозрачной жидкости могут указывать на рельеф поверхности дна емкости, в которой находится эта жидкость.
Двумерный график векторного поля
Еще один распространенный способ представления трехмерных поверхностей —-графики полей векторов. Они часто применяются для отображения полей, например электрических зарядов. Особенность таких графиков в том, что для их построения используют стрелки, направление которых соответствует направлению изменения градиента поля, а длина — значению градиента. Так что термин «поле векторов» надо понимать в смысле, что поле графика заполнено векторами.
Для построения таких графиков в двумерной системе координат используется функция fieldplot:
fieldplot(f, r1, r2)
fieldplot(f, r1, r2. ...)
где f — вектор или множество векторов, задающих построение; r1 и r2 — пределы.
На рис. 12.4 в нижней части документа показан вид одного из таких графиков. Следует отметить, что для получения достаточного числа отчетливо видных стрелок надо поработать с форматированием графиков. Иначе графики этого типа могут оказаться не очень представительными. Так, слишком короткие стрелки превращаются в черточки и даже точки, не имеющие острия, что лишает графики наглядности.
Несколько позже мы рассмотрим построение на одном рисунке графиков плотности и векторного поля, а также создание более наглядных толстых стрелок.
Трехмерный график типа implicitplot3d
Трехмерные поверхности также могут задаваться уравнениями неявного вида. В этом случае для построения их графиков используется функция implicitplot3d:
implicitplot3d(exprl,x=a..b,y=c.,d,z=p..q,<options>)
implicitplot3d(f,a..b,c..d,p..q,<options>)
На рис. 12.5 показаны два примера построения объемных фигур с помощью функции implicitplot3d.
Эти примеры хорошо иллюстрируют технику применения функции implicitplot3d. С ее помощью можно строить весьма своеобразные фигуры, что, впрочем, видно и из приведенных примеров. Для наглядности фигур на рис. 12.5 они несколько развернуты в пространстве с помощью мыши.
Графики в разных системах координат
В пакете plots имеется множество функций для построения графиков в различных системах координат. Объем книги не позволяет воспроизвести примеры всех видов таких графиков, ибо их многие сотни. Да это и не надо — во встроенных в справочную систему примерах можно найти все нужные сведения. Так что ограничимся лишь парой примеров применения функции tubeplot(C, options), позволяющей строить весьма наглядные фигуры в пространстве, напоминающие трубы или иные объекты, образованные фигурами вращения.
Рис. 12.5. Примеры применения функции implidtplot3d
На рис. 12.6 показана одна из таких фигур. Она поразительно напоминает раковину улитки. Функциональная окраска достигнута доработкой графика с помощью панели форматирования.
Эта функция может использоваться и для построения ряда трубчатых объектов в пространстве. При этом автоматически задается алгоритм удаления невидимых линий даже для достаточно сложных фигур. Это наглядно иллюстрирует пример на рис. 12.7, показывающий фигуру «цепи». Не правда ли, реалистичность этой фигуры поражает воображение?
Можно долго размышлять о том, как те или иные математические закономерности описывают предметы реального мира, положенные в основу тех или иных геометрических объектов, или, возможно, о гениальности людей, сумевших найти такие закономерности для многих из таких объектов. В наше время Maple 7 открывает огромные возможности для таких людей.
Графики типа трехмерного поля из векторов
Наглядность ряда графиков можно существенно увеличить, строя их в трехмерном представлении. Например, для такого построения графиков полей из векторов можно использовать графическую функцию fieldplot3d. В отличие от функции fieldplot она строит стрелки как бы в трехмерном пространстве (рис. 12.8).
Рис. 12.6. Построение графика- «улитки»
Рис. 12.7. Фигура «цепи», построенная с применением функции tubeplot
Рис. 12.8. Построение поля в трехмерном пространстве с помощью векторов
Все сказанное об особенностях таких двумерных графиков остается справедливым и для графиков трехмерных. В частности, для обеспечения достаточной наглядности нужно тщательно отлаживать форматы представления таких графиков.
Контурные трехмерные графики
В отличие от векторных графиков контурные графики поверхностей, наложенные на сами эти поверхности, нередко повышают восприимчивость таких поверхностей — подобно изображению линий каркаса. Для одновременного построения поверхности и контурных линий на них служит функция contourplot3d. Пример ее применения показан на рис. 12.9.
Для повышения наглядности этот график доработан с помощью контекстной панели инструментов графиков. В частности, включена функциональная окраска и подобраны углы обзора фигуры, при которых отчетливо видны ее впадина и пик.
Рис. 12.9. График поверхности с контурными линиями
Техника визуализации сложных пространственных фигур
Приведенные выше достаточно простые примеры дают представление о высоком качестве визуализации геометрических фигур с помощью пакета plots. Здесь мы рассмотрим еще несколько примеров визуализации трехмерных фигур. Многие видели катушки индуктивности, у которых провод того или иного диаметра намотан на тороидальный магнитный сердечник. Некую математическую абстракцию такой катушки иллюстрирует рис. 12.10.
В документе рис. 12.10 для функции tubeplot использовано довольно большое число параметров. Не всегда их действие очевидно. Поэтому на рис. 12.11 показано построение трех взаимно пересекающихся торов с разными наборами параметров. Этот рисунок дает также наглядное представление о возможности построения нескольких графических объектов (представленных функциями pi, р2 и рЗ) с помощью функции tubeplot.
Рис. 12.10. Тор с обмоткой — толстой спиралью
Рис. 12.11. Три пересекающихся тора с разными стилями построения
Наконец, на рис. 12.12 показано построение тора с тонкой обмоткой. Рекомендуется внимательно посмотреть на запись функции tubeplot в этом примере и в примере, показанном на рис. 12.11. Можно также поэкспериментировать с управляющими параметрами графика, от которых сильно зависят его представительность и наглядность.
Рис. 12.12. Тор с тонкой обмоткой
В ряде случаев наглядно представленные фигуры можно строить путем объединения однотипных фигур. Пример графика подобного рода представлен на рис. 12.13. Здесь готовится список графических объектов s, смещенных по вертикали. С помощью функции display они воспроизводятся на одном графике, что повышает реалистичность изображения.
Последний пример имеет еще одну важную особенность — он иллюстрирует задание графической процедуры, в теле которой используются функции пакета plots. Параметр п этой процедуры задает число элементарных фигур, из которых строится полная фигура. Таким образом, высотой фигуры (или шириной «шины») можно управлять. Возможность задания практически любых графических процедур средствами Maple-языка существенно расширяет возможности Maple.
Наглядность таких графиков, как графики плотности и векторных полей может быть улучшена их совместным применением. Такой пример показан на рис. 12.14.
Рис. 12.13. Построение фигуры, напоминающей шину автомобиля
Рис. 12.14. Пример совместного применения графиков плотности и векторного поля
Этот пример иллюстрирует использование «жирных*- стрелок .для обозначения векторного поля. Наглядность графика повышается благодаря наложению стрелок на график плотности, который лучше, чем собственно стрелки, дает представление о плавности изменения высоты поверхности, заданной функцией.
Техника анимирования графиков
Визуализация графических построений и результатов моделирования различных объектов и явлений существенно повышается при использовании средств «оживления» "(анимации) изображений. Пакет plots имеет две простые функции для создания анимированных графиков.
Первая из этих функций служит для создания анимации графиков, представляющих функцию одной переменной F(x):
animatecurve(F, r, ...)
Эта функция просто позволяет наблюдать медленное построение графика. Формат ее применения подобен используемому в функции plot. При вызове данной функции вначале строится пустой шаблон графика. Если активизировать шаблон мышью, то в строке главного меню появляется меню Animation. Меню Animation содержит команды управления анимацией. Такое же подменю появляется и в контекстном (рис. 12.15). Указанное подменю содержит следующие команды анимации:
При исполнении команды Play происходит построение кривой (или нескольких кривых). В зависимости от выбора команд Faster или Slower построение идет быстро или медленно. Команда Next выполняет один шаг анимации -построение очередного фрагмента кривой. Переключатель Backward/Forward позволяет задать направление построения кривой - от начала к концу или от конца к началу. Построение может быть непрерывным или циклическим в зависимости от состояния позиции Continiuus/Singlecycle в подменю управления анимацией. При циклической анимации число циклов задается параметром frames=n.
Рис. 12.15. Пример анимационного построения графика функцией animatecurve
Проигрыватель анимированной графики
При включенном выводе панели форматирования во время анимации она приобретает вид панели проигрывателя клипов (рис. 12.15). Эта панель имеет кнопки управления с обозначениями, принятыми у современных магнитофонов:
1. Поле координат перемещающейся точки графика.
2. Остановка анимации.
3. Пуск анимации.
4. Переход к следующему кадру (фрейму).
5. Установка направления анимации от конца в начало.
6. Установка направления анимации из начала в конец (по умолчанию).
7. Уменьшение времени шага анимации.
8. Увеличение времени шага анимации.
9. Установка одиночного цикла анимации.
10. Установка серии циклов анимации.
Итак, кнопки проигрывателя, по существу, повторяют команды подменю управления анимацией.
Нажав кнопку пуска (с треугольником, острием обращенным вправо), можно наблюдать изменение вида кривой для функции sin(x)/(x). Другие кнопки управляют характером анимации. Проигрыватель дает удобные средства для демонстрации анимации, например, во время занятий со школьниками или студентами.
Построение двумерных анимированных графиков
Более обширные возможности анимации двумерных графиков обеспечивает функция animate:
ammate(F, х, t)
animate(F,x, t, о)
В ней параметр х задает пределы изменения переменной х, а параметр t — пределы изменения дополнительной переменной t. Суть анимации при использовании данной функции заключается в построении серии кадров (как в мультфильме), причем каждый кадр связан со значением изменяемой во времени переменной t. Если надо явно задать число кадров анимации N, то в качестве о следует использовать frame=N.
Рисунок 12.16 показывает применение функции animate.
Рис. 12.16. Анимация функции sin(i*x)/(i*x) на фоне неподвижной синусоиды
В документе рис. 12.16 строятся две функции — не создающая анимации функция sin(x) и создающая анимацию функция sin(i*x)/(i*x), причем в качестве переменной t задана переменная i. Именно ее изменение и создает эффект анимации. Проигрыватель анимационных клипов и меню, описанные выше, могут использоваться для управления и этим видом анимации. Обратите внимание на вызов графических функций в этом примере командой with и на синтаксис записи этих функций.
К сожалению, картинки в книгах всегда неподвижны и воспроизвести эффект анимации невозможно. Можно лишь представить несколько текущих кадров анимации. Представленная на рис. 12.16 картина соответствует последнему кадру анимации.
Еще один пример анимации представлен на рис. 12.17. Этот документ показывает кадр анимированного процесса улучшения приближения синусоидальной функции рядом с различным числом членов (и порядком последнего члена ряда). Результирующая картина, изображенная на рис. 12.17, показывает как приближаемую синусоидальную функцию, так и графики всех рядов, которые последовательно выводятся в ходе анимации.
Рис. 12.17. Анимационная демонстрация приближения синусоиды рядом с меняющимся числом членов
Анимация графиков может найти самое широкое применение при создании учебных материалов. С ее помощью можно акцентировать внимание на отдельных параметрах графиков и образующих их функций и наглядно иллюстрировать характер их изменений.
Построение трехмерных анимационных графиков
Аналогичным образом может осуществляться и анимирование трехмерных фигур. Для этого используется функция animate3d:
animate3d(F,x, y,t,o)
Здесь F — описание функции (или функций); х, у и t — диапазоны изменения переменных х, у и t Для задания числа кадров N надо использовать необязательный параметр о в виде frame=N.
На рис. 12.18 показано построение анимированного графика. После задания функции, график которой строится, необходимо выделить график и запустить проигрыватель, как это описывалось для анимации двумерных графиков.
Рис. 12.18. Подготовка трехмерного анимационного графика
На рис. 12.18 показано также контекстное меню поля выделенного графика. Нетрудно заметить, что с помощью этого меню (и содержащихся в нем подменю) можно получить доступ к параметрам трехмерной графики и выполнить необходимые операции форматирования, такие как включение цветовой окраски, выбор ориентации фигуры и т. д.
Назначение параметров, как и средств управления проигрывателем анимационных клипов, было описано выше.
Анимация с помощью параметра insequence
Еще один путь получения анимационных рисунков — создание ряда графических объектов pi, р2, рЗ и т. д. и их последовательный вывод с помощью функций display или display3d:
display (pl,p2.p3.....insequence=true)
display3d ( pi. p2. p3..., i nsequence=t rue)
Здесь основным моментом является применение параметра insequence=true. Именно он обеспечивает вывод одного за другим серии графических объектов pi, р2, рЗ и т. д. При этом объекты появляются по одному и каждый предшествующий объект стирается перед появлением нового объекта.
Графика пакета plottools
Инструментальный пакет графики plottools служит для создания графических примитивов, строящих элементарные геометрические объекты на плоскости и в пространстве: отрезки прямых и дуг, окружности, конусы, кубики и т. д. Его применение позволяет разнообразить графические построения и строить множество графиков специального назначения. В пакет входят следующие графические примитивы:
arc |
arrow |
circle |
cone |
cuboid |
curve |
cutln |
cutout |
cylinder |
disk |
dodecahedron |
ellipse |
ellipticArc |
hemisphere |
hexahedron |
hyperbola |
icosahedron |
line |
octahedron |
pieslice |
point tetrahedron |
polygon torus |
rectangle |
semi torus |
sphere |
ПРИМЕЧАНИЕ
Вызов перечисленных примитивов осуществляется после загрузки пакета в память компьютера командой with(plottools). Только после этого примитивы пакета становятся доступными. Обычно примитивы используются для задания графических объектов, которые затем выводятся функцией display. Возможно применение этих примитивов совместно с различными графиками.
Большинство примитивов пакета plottools имеет довольно очевидный синтаксис. Например, для задания дуги используется примитив агс(с, r, а..b,...), где с — список с координатами центра окружности, к которой принадлежит дуга, г — радиус этой окружности, а.. b — диапазон углов. На месте многоточия могут стоять обычные параметры, задающие цвет дуги, толщину ее линии и т. д. Конус строится примитивом cone(c,r,h...), где с — список с координатами центра, г — радиус основания, h — высота и т. д. Все формы записи графических примитивов и их синтаксис можно найти в справочной системе. В необходимых случаях стоит проверить синтаксис того или иного примитива с помощью справки по пакету plottools.
Примеры применения двумерных примитивов пакета plottools
На рис. 12.19 показано применение нескольких примитивов двумерной графики для построения дуги, окружности, закрашенного красным цветом эллипса и отрезка прямой. Кроме того, на графике показано построение синусоиды. Во избежание искажений пропорций фигур надо согласовывать диапазон изменения переменной х. Обычно параметр scalling=constrained выравнивает масштабы и диапазоны по осям координат, что гарантирует отсутствие искажений у окружностей и других геометрических фигур. Однако при этом размеры графика нередко оказываются малыми. Напоминаем, что- этот параметр можно задать и с помощью подменю Projection.
Рис. 12.19. Примеры применения примитивов двумерной графики пакета plottools
Рисунок 12.20 иллюстрирует построение средствами пакета plottools четырех разноцветных стрелок, направленных в разные стороны. Цвет стрелок задан списком цветов с, определенным после команды загрузки пакета. Для построения стрелок используется примитив arrow с соответствующими параметрами.
Рис. 12.20. Построение разноцветных стрелок, направленных в разные стороны
Примитивы могут использоваться в составе графических процедур, что позволяет конструировать практически любые типы сложных графических объектов. В качестве примера на рис. 12.21 представлена процедура SmithChart, которая строит хорошо известную электрикам диаграмму Смита (впрочем, несколько упрощенную). В этой процедуре используется примитив построения дуг arc. При этом задается верхняя часть диаграммы, а нижняя получается ее зеркальным отражением.
ПРИМЕЧАНИЕ
Обратите внимание на то, что, начиная с рис. 12.21, мы не указываем загрузку паета plottools, поскольку она уже была проведена ранее. Однако надо помнить, что все примеры этого раздела предполагают, что такая загрузка обеспечена. Если вы использовали команду restart или только что загрузили систему Maple 7, то для исполнения примера рис. 12.21 и последующих примеров надо исполнить команду with(plottools).
Рис. 12.21. Построение диаграммы Смита
Примеры применения трехмерных примитивов пакета plottools
Аналогичным описанному выше образом используются примитивы построения трехмерных фигур. Это открывает возможность создания разнообразных иллюстрационных рисунков и графиков, часто применяемых при изучении курса стереометрии. Могут строиться самые различные объемные фигуры и поверхности — конусы, цилиндры, кубы, полиэдры и т. д. Использование средств функциональной окраски делает изображения очень реалистичными.
Рисунок 12.22 показывает построение цилиндра и двух граненых шаров. Цилиндр строится примитивом cylinder, а граненые шары — примитивом icosahedron.
Другой пример (рис. 12.23) иллюстрирует построение на одном графике двух объемных фигур, одна из которых находится внутри другой фигуры. Этот пример демонстрирует достаточно корректное построение вложенных фигур. На рис. 12.24 показано совместное построение двух пересекающихся кубов и сферы в пространстве. Нетрудно заметить, что графика пакета приблизительно (с точностью до сегмента) вычисляет области пересечения фигур. С помощью контекстно-зависимого меню правой кнопки мыши (оно показано на рис. 12.24) можно устанавливать условия обзора фигур, учитывать перспективу при построении и т. д. В частности, фигуры на рис. 12.24 показаны в перспективе.
Рис. 12.22. Построение цилиндра и двух граненых шаров
Рис. 12.23. Построение двух объемных фигур
Рис. 12.24. Примеры применения примитивов трехмерной графики пакета plottools
Построение еще одной забавной трехмерной фигуры — «шкурки ежа» — демонстрирует рис. 12.25. В основе построения лежит техника создания полигонов. Построение фигур, очень напоминающих улитки, показано на рис. 12.26. При построении этих фигур используется функция tubeplot. Обратите внимание на то, что строятся две входящие друг в друга «улитки».
Наконец, на рис. 12.27 показано построение фигуры — бутылки Клейна. Фигура задана рядом своих фрагментов, определенных в процедуре cleinpoints. Эта процедура является еще одним наглядным примером программирования графических построений с помощью Maple-языка.
С другими возможностями этого пакета читатель теперь справится самостоятельно или с помощью данных справочной системы. Много примеров построения сложных и красочных фигур с применением пакета plottools можно найти в Интернете на сайте фирмы Maple Software, в свободно распространяемой библиотеке пользователей системы Maple и в книгах по этой системе.
Построение графиков из множества фигур
В ряде случаев бывает необходимо строить графики, представляющие собой множество однотипных фигур. Для построения таких графиков полезно использовать функцию повторения seq(f ,i=a. .b). На рис. 12.28 показано построение фигуры, образованной вращением прямоугольника вокруг одной из вершин.
Рис. 12.25. Построение трехмерной фигуры — «шкурки ежа»
Рис. 12.26. Построение фигуры «улитка»
Рис. 12.27. Построение фигуры «бутылка Клейна»
В этом примере полезно обратить внимание еще и на функцию поворота фигуры — rotate. Именно сочетание этих двух функций (мультиплицирования и поворота базовой фигуры — прямоугольника) позволяет получить сложную фигуру, показанную на рис. 12.28.
Анимация двумерной графики в пакете plottools
Пакет plottools открывает возможности реализации анимационной графики. Мы ограничимся одним примером анимации двумерных графиков. Этот пример представлен на рис. 12.29. В этом примере показана анимационная иллюстрация решения дифференциального уравнения, описывающего незатухающий колебательный процесс. Строится качающийся объект — стрелка с острием вправо, решение дифференциального уравнения в виде синусоиды и большая стрелка с острием влево, которая соединяет текущую точку графика синусоиды с острием стрелки колеблющегося объекта.
Этот пример наглядно показывает возможности применения анимации для визуализации достаточно сложных физических и математических закономерностей. Перспективы применения системы Maple 7 в создании виртуальных физических и иных лабораторий трудно переоценить.
Анимация трехмерной графики в пакете plottools
Хорошим примером ЗD-анимации является документ, показанный на рис. 12.30. Представленная на нем процедура springPlot имитирует поведение упругой системы, первоначально сжатой, а затем выстреливающей шар, установленный на ее верхней пластине. Упругая система, состоит из неподвижного основания, на котором расположена упругая масса (например, из пористой резины), и верхней пластины.
Рис. 12.28. Построение фигуры, образованной вращением прямоугольника
Рис.12.29. Пример анимации двумерной графики
Рис. 12.30. Имитация отстрела шара сжатой упругой системой
Управление анимацией, реализованной средствами пакета plottools, подобно уже описанному ранее. Последний пример также прекрасно иллюстрирует возможности применения Maple 7 при математическом моделировании различных явлений, устройств и систем.
Расширенные средства графической визуализации
Построение ряда графиков, расположенных по горизонтали
Обычно если в строке ввода задается построение нескольких графиков, то в строке вывода все они располагаются по вертикали. Это не всегда удобно, например, при снятии копий экрана с рядом графиков, поскольку экран монитора вытянут по горизонтали, а не по вертикали. Однако при применении функций plots и display можно разместить ряд двумерных графиков в строке вывода по горизонтали. Это демонстрирует пример, показанный на рис. 12.31. Этот пример достаточно прост и нагляден, так что читатель может пользоваться данной возможностью всегда, когда ему это нужно.
Рис. 12.31. Пример расположения трех графиков в строке вывода по горизонтали
Визуализация решения систем линейных уравнений
Мы уже не раз использовали графические возможности Maple для визуализации решений математических задач. Так, многие особенности даже функций одной переменной вида f(x) могут быть выявлены с помощью графика этой функции. Затем можно точно вычислить корни функции (точки перехода через 0), экстремумы, "крутизну наклона (производную) в заданных точках и т. д. Еще более информативна в этом отношении трехмерная графика — для большинства функций двух переменных вида z(x, у) нужно очень богатое математическое воображение, чтобы представить их вид — особенно в одной из многих десятков координатных систем.
Однако некоторые виды графиков трудно представить себе даже при наличии такого воображения. В этом отношении Maple 7 предоставляет поистине уникальные возможности, обеспечивая простую и быструю визуализацию решений. Ниже мы рассмотрим несколько наиболее характерных примеров такой визуализации. Системы линейных уравнений могут решаться как с помощью функции solve, так и с помощью матричных методов. Замечательной возможностью функции solve является возможность решения относительно ограниченного числа переменных. Например, систему линейных уравнений с переменными х, у, z, t и v можно решить относительно только первых трех переменных х, у и г. При этом решения будут функциями относительно переменных t и v и можно будет построить наглядный график решения (рис. 12.32).
Рис. 12.32. График, представляющий решения системы линейных уравнений
На рис. 12.32 система задана пятью равенствами: el, е2, еЗ, е4 и е5. Затем функцией solve получено вначале решение для всех переменных (для иллюстрации), а затем для трех переменных х, у и z. Для получения решения в виде списка, а не множества, как в первом случае для всех переменных, использована функция подстановки subs. После этого функция plot3d строит плоскость решения в пространстве.
Визуализация решения систем неравенств
Пожалуй, еще более полезным и наглядным средством является визуализация решения системы уравнений в виде неравенств. В пакете plots имеется специальная графическая функция inequal, которая строит все граничные линии неравенств и позволяет раскрасить разделенные ими области различными цветами:
inequal(ineqs, xspec, yspec, options)
Параметры этой функции следующие: ineqs — одно или несколько неравенств или равенств или список неравенств или равенств; xspec — xvar=min_x. .max_x; yspec — yvar=min_y. .max_y; о — необязательные параметры, например указывающие цвета линий, представляющих неравенства или равенства, и областей, образованных этими линиями и границами графика. Пример применения этой функции представлен на рис. 12,33.
Рис. 12.33. Пример графической интерпретации решения системы неравенств
Обратите внимание на задание цветов: optionsfeasible задает цвет внутренней области, для которой удовлетворяются все неравенства (равенства), optionsopen и optionsdosed задают цвета открытых и закрытых границ областей графика, optionsexcluded используется для цвета внешних областей. График дает весьма наглядную интерпретацию действия ряда неравенств (или равенств).
Конформные отображения на комплексной плоскости
Объем данной книги не позволяет объяснить столь тонкое понятие, как конформные отображения на комплексной плоскости. Ограничимся лишь указанием на то, что в пакете plots имеется функция для таких отображений:
conformal(F,rl,r2,о);
где F — комплексная процедура или выражение; rl, г2 — области, задаваемые в виде а. .Ь или name=a. .b; о — управляющие параметры. Таким образом, для построения нужного графика достаточно задать нужное выражение и области изменения г! и г2. Пример построения конформных изображений для трех выражений дан на рис. 12.34.
Рис. 12.34. Конформное отображение на комплексной плоскости графиков трех зависимостей
Средства конформного отображения в Maple 7, к сожалению, остаются рудиментарными и вряд ли достаточными для специалистов в этой области математики.
Графическое представление содержимого матрицы
Многие вычисления имеют результаты, представляемые в форме матриц. Иногда такие результаты можно наглядно представить графически, например в виде гистограммы. Она представляет собой множество столбцов квадратного сечения, расположенных на плоскости, образованной осями строк (row), и столбцов (column) матрицы. При этом высота столбцов определяется содержимым ячеек матрицы.
Такое построение обеспечивает графическая функция matrixplot из пакета plots. На рис. 12.35 показано совместное применение этой функции с двумя функциями пакета linalg, формирующими две довольно экзотические матрицы А и В.
Рис. 12. 35. Графическое представление матрицы
На рис. 12.35 показана графическая визуализация матрицы, полученной как разность матриц А и В. Для усиления эффекта восприятия применяется функциональная закраска разными цветами. Для задания цвета введена процедура F.
Визуализация ньютоновских итераций в комплексной области
Теперь займемся довольно рискованным экспериментом — наблюдением ньютоновских итераций с их представлением на комплексной плоскости. На рис. 12.36 задана функция /(г) комплексного аргумента. Проследить за поведением этой функции на комплексной плоскости в ходе ньютоновских итераций позволяет графическая функция complexplot3d из пакета plots.
Наблюдаемая картина весьма необычна и свидетельствует о далеко не простом ходе итерационного процесса.
Рис. 12.36. Наблюдение за процессом ньютоновских итераций в трехмерном пространстве
ВНИМАНИЕ
Риск работы с этим примером заключается в том, что в системе Maple 7 он иногда вызывает фатальные ошибки, ведущие к прекращению работы с системой. Обычно при запуске этого примера сразу после загрузки системы Maple такого не происходит, но, когда память загружена, сбой вполне возможен. Объективности ради надо заметить, что в системах Maple 6 и 7 подобное поведение системы не было замечено. Тем не менее рекомендуется записывать подобные примеры на диск перед их запуском.
Визуализация корней случайных полиномов.
Наряду с традиционной для математических и статистических программ возможностью генерации случайных чисел Maple 7 предоставляет довольно экзотическую возможность генерации случайных полиномов с высокой максимальной степенью. Для этого используется функция:
randpoly(var,o)
Она возвращает случайный полином переменной var, причем максимальная степень полинома птах может указываться параметром о вида degree=nmax.
Приведем примеры генерации случайного полинома с максимальной степенью 50:
С помощью функции аllvalues можно построить список SA корней случайного полинома. А с помощью команды вида:
> with(plots):
complexplot(SA.x=-1.2..1.2.style=point):
построить комплексные корни полученного случайного полинома в виде точек • на комплексной плоскости. Один из таких графиков (их можно построить множество) показан на рис. 12.37.
Рис. 12.37. Расположение корней случайного полинома на комплексной плоскости
Можно заметить любопытную закономерность — точки, представляющие корни случайного полинома, укладываются вблизи окружности единичного радиуса с центром в начале координат. Однако этот пример, приводимый в ряде книг по Maple, показывает, что порою вычисления могут давать довольно неожиданные результаты. Кстати говоря, аналитически можно вычислять корни полинома с максимальной степенью не более четырех.
Визуализация поверхностей со многими экстремумами
Maple 7 дает прекрасные возможности для визуализации поверхностей, имеющих множество пиков и впадин, другими словами, экстремумов. Рисунок 12.38 показывает задание «вулканической» поверхности с глубокой впадиной, окруженной пятью пиками. Здесь полезно обратить внимание на способ задания такой поверхности f(a, b, с) как функции трех переменных a, b и с. Он обеспечивает индивидуальное задание координат каждого экстремума и его высоты (отрицательной для впадины).
Рис. 12.38. Построение графика поверхности с множеством экстремумов
Наглядность этого графика усилена за счет применения функциональной окраски и контурных линий, нанесенных на саму поверхность. Все эти возможности обеспечивают параметры основной функции plot3d.
А на рис. 12.39 представлен еще один способ задания поверхности — с помощью функции двух угловых переменных f(theta, phi).
При построении этого рисунка также используются функциональная окраска и построение контурных линий.
Визуализация построения касательной и перпендикуляра
В ряде геометрических построений нужно отроить касательную и перпендикуляр к кривой, отображающей произвольную функцию f(x) в заданной точке х =а. Рисунок 12.40 поясняет, как это можно сделать. Линии касательной Т(х) и перпендикуляра N(x) определены аналитически через производную в заданной точке.
Во избежание геометрических искажений положения касательной и перпендикуляра при построении графика функцией plot надо использовать параметр scaling=constrained.
Рис. 12.39. Построение графика поверхности, заданной функцией двух угловых переменных
Рис. 12.40. Построение касательной и перпендикуляра к заданной точке графика функции f(x)
Визуализация вычисления определенных интегралов
Часто возникает необходимость в геометрическом представлении определенных интегралов в виде алгебраической суммы площадей, ограниченных кривой подынтегральной функции f(x), осью абсцисс х и вертикалями х =а их =b (пределами интегрирования). При этом желательно обеспечение закраски верхней и нижней (отрицательной и положительной) площадей разными цветами, например зеленым для верхней площади и красным для нижней. Как известно, численное значение определенного интеграла есть разность этих площадей.
К сожалению, в Maple 7 нет встроенной функции, явно дающей такое построение. Однако ее несложно создать. На рис. 12.41 представлена процедура a_plot, решающая эту задачу. Параметрами процедуры являются интегрируемая функция/(д:) (заданная как функция пользователя), пределы интегрирования а и b и пределы слева am и справа bm, задающие область построения графика f(x).
Рисунок 12.41 дает прекрасное представление о сущности интегрирования для определенного интеграла. Приведенную на этом рисунке процедуру можно использовать для подготовки Эффектных уроков по интегрированию разных функций.
Рис. 12.41. Графическое представление определенного интеграла
Визуализация теоремы Пифагора
Еще один пример наглядного геометрического представления математических понятий — визуализация известной теоремы Пифагора (рис. 12.42).
В этом примере используется функция построения многоугольников. Наглядность построений усиливается выбором разной цветовой окраски треугольников и квадрата.
Рис. 12.42. Графическая иллюстрация к теореме Пифагора
Визуализация дифференциальных параметров кривых
Дифференциальные параметры функции f(x), описывающей некоторую кривую, имеют большое значение для анализа ее особых точек и областей существования. Так, точки с нулевой первой производной задают области, где кривая нарастает (первая производная положительна) или убывает (первая производная отрицательна) с ростом аргументах. Нули второй производной задают точки перегиба кривой.
Следующая графическая процедура служит для визуализации поведения кривой /, = /(.г) на отрезке изменениях от а до b:
В этой процедуре заданы следующие цвета (их можно изменить): Таблица 12.1. Цвета при визуализации в процедуре shape_plot
Изменение /(х) |
Цвет |
Возрастание |
Синий |
Убывание |
Красный |
Площадь |
Цвет |
Над минимумом |
Зеленый |
Под максимумом |
Коралловый |
Например, для функции:
построенный график будет иметь вид, представленный на рис. 12.43 (естественно, в книге цвета — лишь оттенки серого).
Рисунок 12.43 дает наглядное представление о поведении заданной функции. Рекомендуется опробовать данную процедуру на других функциях. Следует отметить, что, поскольку процедура использует функции ntiroimize и maximize, она может давать сбои при исследовании сложных функций, содержащих специальные математические функции или особенности. Иногда можно избежать такой ситуации, исключив особенность. Например, для анализа функции sin(x)/x можно записать ее в виде:
>f:=x->if x=0 then 1 else sin(x)/x
end if;
shape_plot(f(x),-10,10);
Исполнение приведенной выше строки ввода дает график, представленный на рис. 12.44.
Рис. 12.43. Визуализация поведения функции f(х)
Рис. 12.44. Визуализация поведения функции sin(x)/x
Данная процедура дает хорошие результаты при анализе функций, представленных полиномами. Вы можете сами убедиться в этом.
Иллюстрация итерационного решения уравнения f (х) = х
Классическим методом решения нелинейных уравнений является сведение их к виду х =f(x) и применение метода простых итераций xk =s(xk-1) при заданном значениих0. Приведем пример такого решения:
>f :=x ->3*1n(x+l);
f:=x-> 3ln(x+1)
>x||0 := 0.5:
x0:=5
>x0 := .5;
x0:=.5
>for k from 1 to 16 do x||k := evalf( f(x||(k-l) )): od;
xl := 1.216395324
x2 := 2.387646445
x3 := 3.660406248
x4:= 4.617307866
x5:= 5.177557566
x6:= 5.462768931
x7:= 5.598173559
x8:= 5.660378631
x9 := 5.688529002
xl0:= 5.701181910
x11 := 5.706851745
x12 := 5.709388956
x13:= 5.710523646
x14 — 5.711030964
xl5:= 5.711257755
x16:= 5.711359134
Нетрудно заметить, что значения xk в ходе итераций явно сходятся к некоторому значению. Проведем проверку решения, используя встроенную функцию solve:
Результат выглядит необычно — помимо довольно "очевидного корнях x= 0 значение другого корня получено в виде специальной функции Ламберта. Впрочем, нетрудно найти и его численное значение:
> evalf(%);
0., 5.711441084
Однако как сделать процесс решения достаточно наглядным? Обычно для этого строят графики двух зависимостей — прямой х и кривой f(x) — и наносят на них ступенчатую линию перемещения точки xk. Специальной функции для графиков подобного рода Maple 7 не имеет. Однако можно составить специальную процедуру для их построения .Ее листинг, заимствованный из примера, описанного в пакете обучения системе Maple 7 - PowerTools, представлен ниже:
Параметрами этой процедуры являются: f1 — функция f(x); а и b — пределы изменениях при построении графика; х0 — значение х, с которого начинаются итерации. Исполнив команду:
>rec_p1ot( f(x), 0, 8, х0):
можно наблюдать график, иллюстрирующий итерационный процесс. Он представлен на рис. 12.45.
Рис. 12.45. Иллюстрация процесса итераций
Нетрудно заметить, что для данной функции процесс итераций хотя и не очень быстро, но уверенно сходится к точке пересечения прямой у = х и кривой y=f(x). Вы можете, меняя зависимость f(x), провести исследования сходимости уравнений х = f(x).
Построение сложных фигур в полярной системе координат
Некоторые виды математической графики имеют определенную художественную ценность и фигурируют в символике различных стран и общественных организаций. Остановимся на нескольких таких примерах применительно к графике в полярной системе координат. Представим фигуры, образованные множеством линий на плоскости.
Рисунок 12.46 демонстрирует одну из таких фигур. Это семейство из 10 кардиоид разного размера. Параметр scallIng=constrained обеспечивает правильное отображение фигур — каждая кардиоида вписывается в огибающую ее невидимую окружность. Размер кардиоид задается значением параметра а.
Рис.12.46. Семейство кардиоид на одном графике
Еще одно семейство кардиоид, на сей раз шестилепестковых, представлено на рис. 12.47. Здесь также изменяемым параметром каждой фигуры является ее размер, заданный параметром а.
Фигуре, представленной на рис. 12.48, трудно дать определенное название. Назовем ее волнообразной спиралью.
По образу и подобию приведенных фигур читатель может опробовать свои силы в создании новых красочных фигур в полярной системе координат. Некоторые из них поразительно напоминают снежинки, картинки в калейдоскопе и изображения морских звезд. Если убрать параметр color=black, .введенный ради черно-белой печати картинок в книге, то можно усилить красочность фигур за счет их разноцветной окраски.
Рис. 12.47. Семейство шестилепестковых кардиоид
Рис. 12.48. Фигура— волнообразная спираль
Построение сложных фигур импликативной графики
Импликативные функции (см. урок 7) нередко имеют графики весьма любопытного вида. Ограничимся парой примеров построения таких графиков, представленных на рис. 12.49. Эти фигуры напоминают контурные графики функции двух переменных.
Приведенные примеры дают весьма наглядное представление о больших возможностях визуализации решений самых различных задач в системе Maple V. Можно значительно расширить их, эффектно используя описанные ранее приемы анимации изображений. В целом надо отметить, что графические возможности Maple 7 дают новый уровень качества графики современных математических систем, о котором с десяток лет тому назад можно было только мечтать.
Рис. 12.49. Построение сложных фигур, заданных импликативными функциями
Расширенная техника анимации
Анимирование разложения импульса в ряд Фурье
Анимирование изображений является одним из самых мощных средств визуализации результатов моделирования тех или иных зависимостей или явлений.
Порою изменение во времени одного из параметров зависимости дает наглядное представление о его математической или физической сути.
Здесь мы расширим представление об анимации и рассмотрим не вполне обычный пример — наблюдение в динамике за гармоническим синтезом некоторой произвольной функции f(x) на отрезке изменения л; от 0 до 1. Значения функции f(x) могут быть одного знака или разных знаков. В этом примере можно наблюдать в динамике синтез заданной функции рядом Фурье с ограниченным числом синусных членов (гармоник) — до 1, 2, 3..JV. На рис. 12.50 представлен документ, реализующий такое разложение и затем синтез для пилообразного линейно нарастающего импульса, описываемого выражением f(x) = -1 + 2 *х. На графике строится исходная функция и результат ее синтеза в динамике анимации.
Рис. 12.50. Один из первых стоп-кадров анимации разложения импульса в ряд Фурье
Рисунок 12.51 показывает завершающий стоп-кадр анимации, когда число гармоник N равно 30. Нетрудно заметить, что такое число гармоник в целом неплохо описывает большую часть импульса, хотя в. его начале и в конце все еще заметны сильные отклонения.
Для f(x) = 1 строится приближение для однополярного импульса с длительностью 1 и амплитудой 1, при f(x) =х — приближение для пилообразного линейно нарастающего импульса, при f(x) =х^2 — приближение для нарастающего по параболе импульса, при f(x)=signum(x-l/2) — приближение для симметричного прямоугольного импульса-меандра и т. д. Фактически можно наблюдать анимационную картину изменения формы импульса по мере увеличения числа используемых для синтеза гармоник. Выбор используемого числа гармоник осуществляет амплитудный селектор — функция a= f(t,k), основанная на применении функции Хевисайда.
Рис. 12.51. Второй (завершающий) кадр анимации
Самым интересным в этом примере оказывается наблюдение за зарождением и эволюцией эффекта Гиббса — так называют волнообразные колебания на вершине импульса, связанные с ограничением числа гармоник при синтезе сигнала. С ростом числа гармоник эффект Гиббса не исчезает, просто обусловленные им выбросы вблизи разрывов импульса становятся более кратковременными. Амплитуда импульсов может достигать 18% от амплитуды перепадов сигнала, что сильно ухудшает приближение импульсных сигналов рядами Фурье и вынуждает математиков разрабатывать особые меры по уменьшению эффекта Гиббса.
Можно ли наблюдать одновременно все фазы анимации? Можно! Для этого достаточно оформить анимационную картину, созданную функцией animate, в виде отдельного графического, объекта например g, после чего можно вывести все его фазы оператором display. Это и иллюстрирует рис. 12.52. На этот раз задано f(x) = signum(x-l/2) и N = 25. Таким образом рассматриваются симметричные прямоугольные импульсы - меандр. У каждого рисунка координатные оси с делениями удалены параметром axes=none.
Рис. 12.52. Иллюстрация получения всех кадров анимации двумерного графика
Любопытно отметить, что при определенных числах гармоник связанная с колебательными процессами неравномерность вершины импульса резко уменьшается. Наблюдение этого явления и является наиболее интересным и поучительным при просмотре данного примера.
При внимательном просмотре рис. 12.52 заметно, что после некоторого периода установления фазы анимационной картинки практически повторяются. Это связано с известным обстоятельством — установившийся спектр меандра содержит только нечетные гармоники. Поэтому, к примеру, вид спектрального разложения при 22 гармониках будет тот же, что и при 21 гармонике, при 24 гармониках тот же, что при 23, и т. д. Однако эта закономерность проявляется только при установившемся (стационарном) спектре.
Наблюдение надрав анимации поверхности
Наблюдение за развитием поверхности производит на многих (особенно на студентов) большое впечатление. Оно позволяет понять детали создания сложных трехмерных графиков и наглядно представить их математическую сущность. Рассмотрим анимацию поверхности на примере рис. 12.18.
Как и для случая анимации двумерного графика, большой интерес представляет построение всех фаз анимации на одном рисунке. Делается это точно так Же, как в двумерном случае. Это иллюстрирует рис. 12.53. На нем представлены 8 фаз анимации трехмерной поверхности cos(t*x*y/3), представленной функцией трех переменных t, х и у. При этом изменение первой переменной создает фазы анимации поверхности.
Рис. 12.53. Фазы анимации трехмерной поверхности
Применение анимации дает повышенную степень визуализации решений ряда задач, связанных с построением двумерных и трехмерных графиков. Следует отметить, что построение анимированных графиков требует дополнительных и достаточно существенных затрат оперативной памяти. Поэтому злоупотреблять числом стоп-кадров таких графиков не стоит.
Новая функция для построения стрелок arrow
В пакет plots системы Maple 7 введена новая функция построения стрелок arrow. Она задается в виде arrow(u,[v,]opts) или arrow(U,opts)
Построение стрелок задается одномерными массивами координат начала стрелок и их направления и и v или двумерным массивом U, которые могут быть представлены векторами, списками или множествами. Вид стрелок задается параметром opts, который может иметь значения shape, length, width, head_width, head_length или plane и задает вид стрелок (форму, длину, ширину и т. д.). Детали задания параметров можно найти в справке по данной функции. Рисунок 12.54 дает наглядное представление о ее возможностях.
Рис. 12.54. Построение стрелок с помощью функции arrow
Построение сложных комбинированных графиков
В заключение этой главы рассмотрим построение с помощью системы Maple 7 достаточно сложных комбинированных графиков, содержащих различные графические и текстовые объекты. Пример построения такого графика представлен на рис. 12.55.
Рис. 12.55. Пример построения сложного объекта, состоящего из 8 графических и текстовых объектов
Представленный на рис. 12.55 объект задает построение восьми графических объектов от р! до р8. Среди них цилиндр, две пересекающие его плоскости и иные (в том числе текстовые) объекты. Обратите внимание на способ вывода этих объектов функцией display3d. Этот пример показывает, что с помощью графических программных средств Maple 7 можно строить достаточно замысловатые графики, которые могут использоваться для визуализации тех или иных геометрических и иных объектов.
Что нового мы узнали?
В этом уроке мы научились:
Урок 13.
Решение дифференциальных уравнений
Важное место в математических расчетах занимает решение дифференциальных уравнений. К нему, в частности, обычно относится анализ поведения различных систем во времени (анализ динамики), а также вычисление различных полей (тяготения, электрических зарядов и т. д.). Трудно переоценить роль дифференциальных уравнений в моделировании физических и технических объектов и систем, Maple 7 позволяет решать одиночные дифференциальные уравнения и системы дифференциальных уравнений как аналитически, так и в численном виде. Разработчиками системы объявлено о существенном расширении средств решения дифференциальных уравнений и о повышении их надежности в смысле нахождения решений для большинства классов дифференциальных уравнений. Поэтому данный урок целиком посвящен решению уравнений данного класса. Для решения системы простых дифференциальных уравнений (задача Коши) используется функция dsolve в разных формах записи:
dsolve(ODE)
dsolve(ODE, y(x), extra_args)
dsolve((ODE, ICs}, y(x), extra_args)
dsolve({sysODE, ICs}, {funcs}, extra_args)
Здесь ODE — одно обыкновенное дифференциальное уравнение или система из дифференциальных уравнений первого порядка с указанием начальных условий, у(х) — функция одной переменной, Ics — выражение, задающее начальные условия, {sysODE} —множество дифференциальных уравнений, {funcs} —множество неопределенных функций, extra_argument — опция, задающая тип решения. Параметр extra_argument задает класс решаемых уравнений. Отметим основные значения этого параметра:
Для решения задачи Коши в параметры dsolve надо включать начальные условия, а при решении краевых задач — краевые условия. Если Maple способна найти решение при числе начальных или краевых условий меньшего порядка системы, то в решении будут появляться неопределенные константы вида _С1, _С2 и т. д. Они же могут быть при аналитическом решении системы, когда начальные условия не заданы. Если решение найдено в неявном виде, то в нем появится параметр _Т.
По умолчанию функция dsolve автоматически выбирает наиболее подходящий метод решения дифференциальных уравнений. Однако в параметрах функции dsolve в квадратных скобках можно указать предпочтительный метод решения дифференциальных уравнений. Допустимы следующие методы:
quadrature | linear | Bernoulli | separable |
inverse linear |
homogeneous |
Chini |
lin_sym |
exact | Abel | pot_sym |
Информацию о каждом методе можно получить, используя команду Tdsolve, method и указав в ней конкретный метод. Например, команда Tdsolve,linear вызовет появление страницы справочной системы с подробным описанием линейного метода решения дифференциальных уравнений.
Производные при записи дифференциальных уравнений могут задаваться функцией diff или оператором D. Выражение sysODE должно иметь структуру множества и содержать помимо самой системы уравнений их начальные условия.
Решение ОДУ первого порядка
Начнем рассмотрение практических примеров с решения одиночных обыкновенных дифференциальных уравнений (ОДУ) первого порядка:
Следующие примеры иллюстрируют возможность решения одного и того же дифференциального уравнения ode_L разными методами:
Объем данной книги не позволяет остановиться на всех тонкостях аналитического решения дифференциальных уравнений. Множество примеров такого решения дано в справочной базе данных Maple,. 7- К ней нужно обратиться в случае, если решение того или иного дифференциального уравнения выходит за рамки учебного курса.
Решение дифференциальных уравнений второго порядка
Здесь видно, что для задания производной используется ранее рассмотренная функция diff. С помощью символа $ можно задать производную более высокого порядка. Ниже представлено решение двух дифференциальных уравнений второго порядка:
Обратите внимание на решение второго из этих уравнений. Здесь использован прием визуализации исходного дифференциального уравнения, и оно задается значением переменной de. Кроме того, и это особенно важно, решение осуществляется при заданных начальных условиях. Именно поэтому в решении отсутствуют произвольные постоянные вида _СN.
Решение систем дифференциальных уравнений
На рис. 13.1 представлено решение системы из двух дифференциальных уравнений различными методами — в явном виде, в виде разложения в ряд и с использованием преобразования Лапласа. Здесь следует отметить, что решение в виде ряда является приближенным. Поэтому полученные в данном случае аналитические выражения отличаются от явного решения и решения с применением преобразования Лапласа.
Рис. 13.1. Решение системы из двух дифференциальных уравнений различными методами
Следует отметить, что, несмотря на обширные возможности Maple 7 в области аналитического решения дифференциальных уравнений, оно возможно далеко не всегда. Поэтому, если не удается получить такое решение, полезно попытаться найти решение в численном виде.
Численное решение дифференциальных уравнений
Большинство нелинейных дифференциальных уравнений не имеет аналитического решения. Кроме того, часто аналитическое решение и не нужно, но требуется получить ответ в виде графических зависимостей.
В таких случаях для решения дифференциальных уравнений в численном виде используется функция dsolve с параметром numeric или type=numeric. При этом решение возвращается в виде специальной процедуры, по умолчанию реализующей широко известный метод решения дифференциальных уравнений Рунге—Кутта—Фелберга порядков 4 и 5 (в зависимости от условий адаптации решения к скорости его изменения). Эта процедура называется rkf45 и символически выводится (без тела) при попытке решения заданной системы дифференциальных уравнений. Последнее достаточно наглядно иллюстрирует рис. 13.2.
Рис. 13.2. Решение системы дифференциальных уравнений численным методом rkf45 с выводом графика решения
Указанная процедура возвращает особый тип данных, позволяющих найти решение в любой точке или построить график решения (или решений). Для графического отображения Maple 7 предлагает ряд возможностей, и одна из них представлена на рис. 13.2 — см. последнюю строку ввода. При этом используется функция plot[odeplot] из пакета odeplot, предназначенного для визуализации решений дифференциальных уравнений.
В список параметров функции dsolve можно явным образом включить указание на метод решения, например опция mathod=dverk78 задает решение непрерывным методом Рунге—Кутта порядка 7 или 8. Вообще говоря, численное решение дифференциальных уравнений можно производить одним из следующих методов:
Обилие используемых методов расширяет возможности решения дифференциальных уравнений в численном виде. Большинство пользователей Maple 7 вполне устроит автоматический выбор метода решения по умолчанию. Однако в сложных случаях возможна прямая установка одного из указанных выше методов. С деталями реализации методов можно ознакомиться по справочной системе.
С помощью параметра ' abserr' =аеrr можно задать величину абсолютной погрешности решения, а с помощью 'minerr'=mine — минимальную величину погрешности. В большинстве случаев эти величины, заданные по умолчанию, оказываются приемлемыми для расчетов.
Maple 7 реализует адаптируемые к ходу решения методы, при которых шаг решения h автоматически меняется, подстраиваясь под условия решения. Так, если прогнозируемая погрешность решения становится больше заданной, шаг решения автоматически уменьшается. Более того, система Maple способна автоматически выбирать наиболее подходящий для решаемой задачи метод решения.
Еще один пример решения системы дифференциальных уравнений представлен на рис. 13.3. Здесь на одном графике представлены зависимости у(х) и z(х), представляющие полное решение заданной системы. При этом процедура имеет особый вид listprocedure и для преобразования списка выходных данных в векторы решения Y и Z используется функция subs.
Для решения достаточно сложных задач полезны специальная структура DESol для решения дифференциальных уравнений и инструментальный пакет DEtools, содержащий самые изысканные средства для графической визуализации результатов решения дифференциальных уравнений. Эти средства мы более подробно рассмотрим в дальнейшем.
Рис. 13.3. Решение системы дифференциальных уравнений численным методом с выводом всех графиков искомых зависимостей
ВНИМАНИЕ
При решении некоторых задач физики и радиоэлектроники выбираемый поумолчанию шаг изменения аргументах или t - Л может привести к неустойчивости решения. Неустойчивости можно избежать рядом способов. Можно, например, нормировать уравнения, избегая необходимости использования малого шага. А можно задать заведомо малый шаг. Например, при method=classical для этого служит параметр stepsize-h. Примеры такого подхода будут даны в уроке 17 (см. Решение физических задач и моделирование цепи на туннельном диоде).
Дифференциальные уравнения с кусочными функциями
Функции кусочного типа широко используются при математическом моделировании различных физических объектов и систем. В основе такого моделирования обычно лежит решение дифференциальных уравнений, описывающих поведение объектов и систем. Покажем возможность применения кусочных функций для решения дифференциальных уравнений.
Ниже представлено задание дифференциального уравнения первого порядка, содержащего кусочную функцию:
Используя функцию dsolve, выполним решение этого дифференциального уравнения:
Нетрудно заметить, что результат получен также в форме кусочной функции, полностью определяющей решение на трех интервалах изменениях. Приведем пример решения дифференциального уравнения второго порядка с кусочной функцией:
В конце этого раздела приведем пример решения нелинейного дифференциального уравнения Риккати с кусочной функцией:
В ряде случаев желательна проверка решения дифференциальных уравнений. Ниже показано, как она делается для последнего уравнения:
ПРИМЕЧАНИЕ
Как видно из приведенных достаточно простых и наглядных примеров, результаты решения дифференциальных уравнений с кусочными функциями могут быть довольно громоздкими. Это, однако, не мешает эффективному применению функций данного класса.
Структура неявного представления дифференциальных уравнений — DESol
В ряде случаев иметь явное представление дифференциальных уравнений нецелесообразно. Для неявного их представления в Maple 7 введена специальная структура:
DESol(expr.vars)
где exprs — выражение для исходной системы дифференциальных уравнений, vars — заданный в виде опции список переменных (или одна переменная). Структура DESol образует некоторый объект, дающий представление о дифференциальных уравнениях, чем-то напоминающее RootOf. С этим объектом можно обращаться, как с функцией, то есть его можно интегрировать, дифференцировать, получать разложение в ряд и вычислять численными методами. На рис. 13.4 показаны примеры применения структуры DESol. Обратите внимание на последний пример — в нем структура- DESol использована для получения решения дифференциального уравнения в виде степенного ряда.
Рис. 13.4. Примеры применения структуры DESol
Инструментальный пакет решения дифференциальных уравнений DEtools
Решение дифференциальных уравнений самых различных типов — одно из достоинств системы Maple 7. Пакет DEtools предоставляет ряд полезных функций для решения дифференциальных уравнений и систем с такими уравнениями:
> with(DEtools);
Warning, the name adjoint has been redefined
[DEnormal, DEplot, DEplot3d, DEplot_pofygon, DFactor, DFactorLCLM, DFactorsols, Dchangevar, GCRD, LCLM, PDEchangecoords, RiemannPsols, Xchange, Xcommutator, Xgauge, abelsoL, adjoint, autonomous, bernoullisol, buildsol, buildsym, canoni, caseplqt, casesplit, checkrank, chinisol, clairautsol, constcoeffsols, convertAlg, convertsys, dalembertsol, dcoeffs, de2diffop, dfieldplot, diffop2de, dsubs, eigenring, endomorphism_charpoly, equinv, etajc, eulersols, exactsol, expsols, exterior'_power,firint,firtest, formal_sol, gen_exp, generate_ic, genhomosol, gensys, hamilton_eqs, indicialeq, infgen, initialdata, integrate_sols, intfactor, Invariants, kovacicsols, leftdivision, liesol, line_int, linearsol, matrixDE, matrix_riccati, moserjreduce, muchange, mult, mutest, newtonjpolygon, normalG2, odeadvisor, odepde, parametricsol, phaseportrait, poincare, polysols, ratsols, redode, reduceOrder, reduce_order, regular_parts, regularsp, remove_RootOf, riccati_system, riccatisol, rifsimp, rightdivision, rtaylor, separablesol, solvejgroup, super_reduce, symgen, symmetric_po\ver, symmetric^product, symtest, transinv, translate, untranslate, varparam, zoom]
Этот пакет дает самые изысканные средства для аналитического и численного решения дифференциальных уравнений и систем с ними. По сравнению с версией Maple V R5 число функций данного пакета в Maple 7 возросло в несколько раз. Многие графические функции пакета DEtools были уже описаны. Ниже приводятся полные наименования тех функций, которые есть в реализациях R5, 6 и 7 системы Maple:
Применение этих функций гарантирует совместимость документов реализаций Maple R5, 6 и 7.
Основные функции пакета DEtools
Ввиду обилия функций пакета DEtools дать их полное описание в данной книге не представляется возможным. Поэтому выборочно рассмотрим наиболее важные функции этого пакета. Функция:
autonomous(des.vars,ivar)
тестирует дифференциальное уравнение (или систему) des. Ее параметрами помимо des являются независимая переменная ivar и зависимая переменная dvar. Следующие примеры поясняют применение этой функции:
> automou(sin(z(t)-z(t)^2)*(D@@4)(z)(t)-cos(z(t))-5,z.t);
true
> DE:=diff(x(s),s)-x(s)*cos(arctan(x(s)))=arctan(s):
> autonomous(DE.{x},s);
false
Функция Dchangevar используется для обеспечения замен (подстановок) в дифференциальных уравнениях:
Dchangevar(trans,deqns, c_tvar, rMvar)
Dchangevar(tranl, tran2, .... tranN, deqns, c_ivar, n_ivar)
В первом случае trans — список или множество уравнений, которые подставляются в дифференциальное уравнение, список или множество дифференциальных уравнений deqns. При этом c_ivar — имя текущей переменной, n_ivar — имя новой переменной (его задавать необязательно). Во второй форме для подстановки используются уравнения tranl, tran2, .... Ниже представлены примеры применения функции Dchangevar:
Следует отметить, что подстановки являются мощным средством решения дифференциальных уравнений. Нередки случаи, когда дифференциальное уравнение не решается без их применения. Дополнительные примеры использования подстановок можно найти в справочной базе данных системы Maple 7.
Функция нормализации ОДУ DEnormal синтаксически записывается в виде:
DEnormal(des,ivar,dvar)
где des — система дифференциальных уравнений, 1var — независимая переменная и dvar — зависимая переменная. Применение этой функции поясняют следующие примеры:
Функция convertAlg(des,dvar) возвращает список коэффициентов формы системы дифференциальных уравнений des с зависимыми переменными dvar. Это поясняют следующие примеры:
Для изменения переменных в системах дифференциальных уравнений используется функция convertsys:
convertsys(deqns, inits, vars, ivar, yvec, ypvec)
Здесь deqns — одно дифференциальное уравнение или список (множество), представляющие систему дифференциальных уравнений первого порядка, inits — множество или список начальных условий, vans — зависимые переменные, ivar — независимые переменные, yvec — вектор решений и ypvec — вектор производных. Функция:
indicialeq(des.ivar,alpha.dvar)
обеспечивает полиномиальное представление для линейного однородного дифференциального уравнения второго порядка des. Параметр alpha намечает точку сингулярности.
Функция:
reduceOrder(des.dvar,partsol, solutionForm)
обеспечивает понижение порядка дифференциального уравнения des (или системы уравнений, представленных списком или множеством) при зависимых переменных dvar, частном решении partsol (или списке частных решений) и флаге solutionForm, показывающем, что решение происходит явным методом (explicitly). Для демонстрации действия этой функции воспользуемся примером из ее справочной страницы:
Функция:
regularsp(des,ivar,dvar)
вычисляет регулярные особые (сингулярные) точки для дифференциального уравнения второго порядка или системы дифференциальных уравнений des. Следующий пример поясняет применение данной функции:
> coefs := [21*(х^2 - х + 1),0,100*х^2*(х-1)^2]:
> regularsp(coefs. х);
[0,1]
Еще две функции пакета DEtools:
translate(des,ivar.pt,dvar)
untranslate(des,ivar,pt,dvar)
выполняют особую операцию трансляции дифференциального уравнения (или списка дифференциальных уравнений) из центрированного относительно 0 в центрированное относительно 1 и наоборот. С деталями этого специфического процесса заинтересованный читатель может познакомиться в справочной базе данных. И еще одна полезная функция пакета:
varparam(sols.v.ivar)
находит общее решение дифференциального уравнения (или системы уравнений) sols методом вариации параметров. Параметр v задает правую часть уравнения; если он равен 0, ищется только частичное решение:
Более подробную информацию об этих функциях читатель найдет в их справочных страницах, а также в информационном документе detdols.mws содержащем систематизированное описание пакета DEtools с многочисленными примерами его применения.
Графическое представление решений дифференциальных уравнений
Применение функции odeplot пакета plots
Для обычного графического представления результатов решения дифференциальных уравнений может использоваться функция odeplot из описанного выше пакета plots. Эта функция используется в следующем виде:
odep1ot(s,vars.r,o)
где s — запись (в выходной фирме) дифференциального уравнения или системы дифференциальных уравнений, решаемых численно функцией dsolve, vars — переменные, г — параметр, задающий пределы решения (например, а. .Ь), и о — необязательные дополнительные опции.
На рис. 13.5 представлен пример решения одиночного дифференциального уравнения с выводом решения у(х) с помощью функции odeplot.
В этом примере решается дифференциальное уравнение:
y'(x)=cos(x2y(x))
при у(0) = 2 и x, меняющемся от-5 до 5. Левая часть уравнения записана с помощью функции вычисления производной diff. Результатом построения является график решения у(х).
В другом примере (рис. 13.6) представлено решение системы из двух нелинейных дифференциальных уравнений. Здесь с помощью функции odeplot строятся графики двух функций. —у(х) и z(x).
В этом примере решается система:
у'(х)=z(х),
z'(x) = 3 sin(y(x))
при начальных условиях y(0)=0, z(0) = 1 их, меняющемся от -4 до 4 при числе точек решения, равном 25.
Иногда решение системы из двух дифференциальных уравнений (или одного дифференциального уравнения второго порядка) представляется в виде фазового портрета — при этом по осям графика откладываются значения у(х) и z(х) при изменении х в определенных пределах. Рисунок 13.7 демонстрирует построение фазового портрета для системы, представленной выше.
Обычное решение, как правило, более наглядно, чем фазовый портрет решения. Однако для специалистов (например, в теории колебаний) фазовый портрет порою дает больше информации, чем обычное решение. Он более трудоемок; для построения, поэтому возможность Марle 7 быстро строить фазовые портреты трудно переоценить.
Рис. 13.5. Пример решения одиночного дифференциального уравнения
Рис. 13.6. Пример решения системы из двух дифференциальных уравнений
Рис. 13.7. Представление решения системы дифференциальных уравнений в виде фазового портрета
Функция DEplot из пакета DEtools
Специально для решения и визуализации решений дифференциальных уравнений и систем с дифференциальными уравнениями служит инструментальный пакет DEtools. В него входит ряд функций для построения наиболее сложных и изысканных графиков решения дифференциальных уравнений. Основной из этих функций является функция DEplot. Функция DEplot может записываться в нескольких формах:
DEplot(deqns, vars. trange. eqns)
DEplot(deqns, vans, trange. inits. eqns)
DEplot(deqns. vars. trange, уrange, xrgnge, eqns) .
DEplot(deqns. vars, trange. Inits, xrange. yrange, eqns)
Здесь deqns — список или множество, содержащее систему дифференциальных уравнений первого порядка или одиночное уравнение любого порядка; vars — зависимая переменная или список либо множество зависимых переменных; trange — область изменения независимой переменной t; Inits — начальные условия для решения; yrange — область изменения для первой зависимой переменной, xrange — область изменения для второй зависимой переменной; eqns — опция, записываемая в виде keyword-value. Замена имен переменных другими в данном случае недопустима.
Эта функция обеспечивает численное решение дифференциальных уравнений или их систем при одной независимой переменной t и строит графики решения. Для автономных систем эти графики строятся в виде векторного поля направлений, а для неавтономных систем — только в виде кривых решения. По умолчанию реализуется метод Рунге—Кутта 4-го порядка, что соответствует опции methodiclassical[rk4]. С функцией DEplot могут использоваться следующие параметры:
На рис. 13.8 показано решение системы диффкренциальных уравнений
x'(t)=x(t)(1-y(t)
y'(t)= 0,3y(t)(x(t)-1),
описывающих модель Лотки—Вольтерра при заданных в документе изменениях t, x(t) и y(t). Решение представлено в виде векторного поля стрелки которого являются касательными к кривым решения (сами эти кривые не строятся). Обратите внимание на функциональную закраску стрелок векторного поля, делающую решение особенно наглядным (правда, лишь на экране цветного дисплея, а не на страницах книги).
Рис. 13.8. Решение системы дифференциальных уравнений Лотки—Вольтерра , с выводом в виде графика векторного поля
Еще интересней вариант графиков, представленный на рис. 13.9. Здесь помимо векторного поля несколько иного стиля построены фазовые портреты решения с использованием функциональной закраски их линий. Фазовые портреты построены для двух наборов начальных условий:
x(0) = y(0) = 1,2 и x(0) = 1 и у(0)=0,7.
Следует отметить, что функция DEplot может обращаться к другим функциям пакета DEtools для обеспечения специальных графических возможностей, таких как построение векторного поля или фазового портрета решения.
Рис. 13.9. Пример построения двух фазовых портретов на фоне векторного поля
Функция DEplotSd из пакета DEtools
В ряде случаев решение систем дифференциальных уравнений удобно представлять в виде пространственных кривых — например, линий равного уровня или просто в виде кривых в пространстве. Для этого служит функция DEplot3d:
DEplot3d(deqns, vars, trarige, initset, о)
DEplot3d(deqns, vars, trang, yrange, xrange, initset, o)
Назначение параметров этой функции аналогично указанному для функции DEplot.
Рисунок 13.10 поясняет применение функции DEPlqt3d для решения системы из двух дифференциальных уравнений с выводом фазового портрета колебаний в виде параметрически заданной зависимости x(t), y(t). В данном случае фазовый портрет строится на плоскости по типу построения графиков/линий равной высоты.
Другой пример (рис. 13.11) показывает решение системы из двух дифференциальных уравнений с построением объемного фазового портрета. В этом случае используется трехмерная координатная система и графические построения соответствуют параметрическим зависимостям x(t), y(t) и z(t). Вид фазового портрета напоминает разворачивающуюся в пространстве объемную, спираль.
Функциональная окраска делает график пикантным.
Рис. 13.10. Пример решения системы из двух дифференциальных уравнений с помощью функции DEptot3d
Возможности функции DEplot3d позволяют решать системы, состоящие более чем из двух дифференциальных уравнений. Однако в этом случае число решений, представляемых графически, выходит за пределы возможного для трехмерной графики. При этом от пользователя зависит, какие из зависимостей опускаются при построении, а какие строятся.
Функция PDEplot пакета DEtools
Еще одна функция пакета DEtools — DEtools[PDEp1ot] — служит для построения графиков решения систем с квазилинейными дифференциальными уравнениями первого порядка в частных производных.
Эта функция используется в следующем виде:
PDEplotCpdiffeq, van, i_curve, srange, о)
PDEplot(pdiffeq, var, i_curve. srange, xrange, yrange, urange, o)
Рис. 13.11. Пример решения системы из двух дифференциальных уравнений с построением трехмерного фазового портрета
Здесь помимо упоминавшихся ранее параметров используются следующие: pdiffeq — квазилинейные дифференциальные уравнения первого порядка (PDE), vans — независимая переменная и i_curve — начальные условия для параметрических кривых трехмерной поверхности. Помимо опций, указанных для функции DEplot, здесь могут использоваться следующие опции:
Рисунок 13.12 демонстрирует применение функции PDEplot. Этот пример показывает, насколько необычным может быть решение даже простой системы дифференциальных уравнений в частных производных.
Рис. 13.12. Пример применения функции PDEplot
В данном случае решение представлено трехмерной фигурой весьма нерегулярного вида.
Другой пример использования функции PDEplot показан на рис. 13.13. Он иллюстрирует комбинированное построение графиков решения разного типа с применением функциональной закраски, реализуемой по заданной формуле с помощью опции initcolor.
Еще раз отметим, что, к сожалению, рисунки в данной книге не дают представления о цвете выводимого Maple графика. Поэтому наглядность решений, видимых на экране монитора, существенно выше.
Графическая функция dfieldplot
Графическая функция dfieldplot служит для построения поля направления с помощью векторов по результатам решения дифференциальных уравнений. Фактически эта функция как бы входит в функцию DEplot и при необходимости вызывается последней. Но она может использоваться и самостоятельно, что демонстрирует рис. 13.14, на котором показан пример решения следующей системы дифференциальных уравнений:
x'(t) =x(t)(1- y(t)),
y'(t) = 0,3y(t)(x(t) - 1).
Рис. 13.13. Построение комбинированного графика с помощью функции PDEplot
Обратите внимание на использование опций в этом примере, в частности на вывод надписи на русском языке. В целом список параметров функции phaseportrait аналогичен таковому для функции DEplot (отсутствует лишь задание начальных условий).
Графическая функция phaseportrait
Графическая функция phaseportrait служит для построения фазовых портретов по результатам решения одного дифференциального уравнения или системы дифференциальных уравнений deqns. Она задается в следующем виде:
phaseportrait(deqns,vars,traf,1n1ts,o)
При задании уравнений достаточно указать их правые части. На рис. 13.15 представлен пример применения функции phaseportrait для решения системы из трех дифференциальных уравнений первого порядка.
В этом примере система дифференциальных уравнений задана с помощью оператора дифференцирования D. Функциональная окраска линии фазового портрета достигается использованием параметра linecolor, в правой части которого задана формула для цвета.
Рис. 13.14. Построение фазового портрета в виде графика векторного поля
Рис. 13.15. Построение фазового портрета с помощью функции phaserportrait
Еще более интересный пример решения дифференциального уравнения представлен на рис. 13.16. Здесь построены фазовые портреты для асимптотических решений.
В целом надо отметить, что возможности визуализации решений дифференциальных уравнений с помощью системы Maple 7 весьма велики и приведенные выше примеры лишь частично иллюстрируют сказанное. В справочной системе можно найти ряд других весьма эффектных решений систем дифференциальных уравнений с визуализацией последних. ,
Рис. 13.16. Построение асимптотического решения на фоне графика векторного поля
Углубленный анализ дифференциальных уравнений
Задачи углубленного анализа ДУ
Maple 7 существенно доработана по части решения дифференциальных уравнений (ДУ) и систем с ДУ. Эта доработка прежде всего направлена на получение верных решений как можно большего числа ДУ разных классов и систем с ДУ.
В частности, расширен круг нелинейных дифференциальных уравнений, для которых Maple7способна дать аналитические решения.
Весь арсенал средств решения ДУ-и методика их применения вполне заслуживают отражения в отдельной большой книге. Мы ограничимся описанием только трех средств системы Maple 7 - проверки ДУ на автономность, углубленным анализом решения с помощью контроля уровня выхода и получением приближенного полиномиального аналитического решения. Более подробное знакомство с новыми возможностями решения дифференциальных уравнений можно получить из соответствующей статьи справки symbolics в разделе What is new.
Проверка ДУ на автономность
Одиночное дифференциальное уравнение или система дифференциальных уравнений называются автономными, если их правая часть явно не зависит от независимой переменной. Для автономных дифференциальных уравнений или систем при построении графиков решений функцией DEplot не обязательно задавать начальные условия, но нужно указывать диапазон изменения искомых переменных.
Для проверки уравнений (или систем) на автономность используется функция:
autonomous(des,vars,ivar)
где des — заданное дифференциальное уравнение или (в виде списка) система дифференциальных уравнений, vars — зависимые переменные; ivar — независимая переменная. Если система автономна, то эта функция возвращает true, в противном случае false.
Примеры:
В первом случае система дифференциальных уравнений (модель. Лотки-Воль-терра) автономна, а во втором случае дифференциальное уравнение не автономно.
Контроль уровня вывода решения ДУ
Для углубленного анализа аналитического решения ДУ (или системы ДУ) можно использовать специальную возможность управления уровнем вывода решения с помощью системной переменной infilevel(dsolve)=level. Значение level =all дает обычный вывод решения без Комментариев, уровень 1 зарезервирован для информации, которую может сообщить пользователь, уровень 2 или 3 дает более детальный вывод (включая сообщения об использованном алгоритме и технике решения) и, наконец, уровни 4 и 5 дают наиболее детальную информацию (если тиковая есть в дополнение к той информации, которую дает уровень 2 или 3).
Приведем пример .аналитического решения ДУ третьего порядка с контролем уровня вывода решения:
В данном случае повышение уровня вывода до 4 или 5 бесполезно, поскольку вся информация о решении сообщается уже при уровне 2 (или 3).
Приближенное полиномиальное решение ДУ
Во многих случаях аналитические решения даже простых ДУ оказываются весьма сложными, например содержат специальные математические функции. При этом нередко полезна подмена такого решения другим, тоже аналитическим, но приближенным решением. Наиболее распространенным приближенным решением в этом случае может быть полиномиальное решение, то есть замена реального решения полиномом той или иной степени. При этом порядок полинома задается значением системной переменной Order, а для получения такого решения функция dsolve должна иметь параметр series.
На рис. 13.17 представлено решение ДУ третьего порядка различными методами: точное аналитическое и приближенное в виде полинома с максимальным заданным порядком 10 и 60. График дает сравнение этих решений для зависимости y(t).
Дадим небольшой комментарий. Нетрудно заметить, что точное аналитическое решение весьма сложно и содержит специальные функции Бесселя и гамма- функции. При порядке полинома 8 (он несколько меньше заданного максимального) решение практически совпадает с точным до значений t < 2, а при максимальном заданном порядке 60 область совпадения расширяется до значений t < 5,5. Затем приближенное решение резко отходит от точного.
Этот пример, с одной стороны, иллюстрирует хорошо известный факт — быстрое нарастание погрешности полиномиального приближения за пределами области хорошего совпадения решений. С другой стороны, он показывает, что степень полинома более 60 (и даже выше) вовсе не так уж бесполезна, как это утверждается во многих статьях и книгах по полиномиальному приближению. Точность полиномиальных вычислений Maple 7 достаточно высока, чтобы обеспечить получение приближенных полиномиальных выражений со степенью порядка десятков и иногда даже сотен. Другое дело, что столь «длинный» полином не всегда удобен для аналитических расчетов, даже несмотря на его структурную простоту.
Рис. 13.17. Примеры решения ДУ третьего порядка
Что нового мы узнали?
В этим уроке мы научились:
Урок 14.
Математические пакеты
Как уже отмечалось, некоторые функции системы Maple помимо их нахождения в ядре могут быть расположены в стандартной библиотеке и в пакетах, входящих в поставку системы. Это значит, что их не надо приобретать дополнительно, однако перед использованием таких функций надо загрузить их или отдельно, или вместе с целым пакетом, если большинство его функций представляет интерес для пользователя.
Обзор пакетов
В этом уроке дается выборочная информация о функциях, содержащихся в пакетах. Напоминаем, что список пакетов можно получить, используя команду:
>?packages
Этот список приведен ниже:
Как следует из просмотра этого обширного списка, пакеты Maple 7 охватывают многие крупные разделы математики и существенно дополняют возможности системы, предоставляемые средствами ее ядра. Пакеты расширения пишутся на Maple-языке программирования, поэтому они могут легко модернизироваться и пополняться. Этим, в частности, объясняется тот факт, что набор пакетов расширения в Maple 7 существенно пополнен по сравнению с предшествующими реализациями системы.
Новые пакеты Maple 7
Система Maple 7 пополнилась рядом новых пакетов:
Из этих пакетов надо особо выделить пакет приближения кривых. Он содержит наиболее важные функции для приближения кривых, которые до сих пор были разбросаны по ряду пакетов. В конце данного урока содержится описание пакета CurveFitting. Там же имеется описание другого нового и полезного пакета — PolynomialTools.
Получение информации о конкретном пакете
С помощью команды:
>?name_package;
можно получить информацию о любом пакете расширения и найти список входящих в него функций. Названия пакетов были приведены выше.
Для обращения к функциям того или иного пакета используется его полная загрузка командой:
>with(package):[:]
Знак : блокирует вывод списка функций пакета а знак ; указывает вывести этот список.
Если вам необходима какая-то одна функция пакета или небольшая их часть, то не стоит загружать пакет целиком. Это может привести к избыточным затратам памяти компьютера и даже нарушить нормальную работу некоторых функций — следует помнить, что нередко пакеты переопределяют некоторые функции ядра. Для загрузки избранных функций используется команда with в форме
>with(package. fl. f2. ...):
или
>with(package, [fl. f2. ...]):
При этом загружаются функции fl, f2, ... из пакета с именем packages.
Может показаться, что было бы лучше иметь все функции в ядре. Однако создание ядра, реализующего все функции системы (в версии Maple 7 их около 3000), неразумно. Такое ядро занимало бы много места в памяти, имело большое время загрузки и затрудняло бы поиск конкретных нужных функций.
Поэтому ядро Maple 7 содержит определенный (и довольно обширный) минимум хорошо апробированных функций, а большинство других функций размещается в стандартной библиотеке и пакетах. Они готовятся на Maple-языке программирования и могут легко модернизироваться. К тому же пакеты могут модифицироваться (что не очень желательно) или дополняться (что приветствуется) пользователями. Некоторой платой за это является необходимость вызова того или иного пакета или функции перед их применением.
В этом разделе описана структура пакетов Maple 7, имеющих математическую направленность. Ограниченный объем книги и огромное число функций в пакетах не позволяют остановиться даже на описании синтаксических правил применения всех функций этих пакетов. Очевидно, что в этом нет и особого смысла — подавляющее большинство функций представляет малый интерес для конкретного пользователя. Те же, кто ими интересуются, могут легко восполнить пробелы в их описании с помощью справочной системы. Однако в описании состава каждого пакета в данном уроке упомянуты имена всех без исключения его функций. Это позволяет оценить полноту того или иного пакета и без труда вызвать справочные страницы для любой функции. Описание функций пакетов в уроке дано выборочно, при этом предпочтение отдавалось тем функциям, которые используются в массовых математических и научно-технических расчетах и представляют интерес для достаточно широкого круга читателей. Полезно отметить, что большинство функций имеет вполне понятные имена, отражающие их суть и назначение. К примеру, назначение функций animate или даже textplot в пакете plots или Diff, Int и Limit в пакете student понятны, пожалуй, всем. Но и в гораздо более специализированных пакетах имена входящих в них функций в значительной мере знакомы специалистам, поскольку почти всегда ассоциируются с общепринятыми названиями тех или иных специализированных функций или с их комбинациями.
Пакеты функций комбинаторики
Функции комбинаторики достаточно известны из обычного курса математики. При вызове пакета выводится (если вывод не заблокирован двоеточием) список его функций:
> with(combinat);
Warning, the protected name Chi has been redefined and unprotected
[Chi,bell, binomialcartprod, character, choose, composition, conjpart, decodepart, encodepart,fibonacci,firstpart, graycode, inttovec, lastpart, multinomial, nextpart, numbcomb, numbcomp, numbpart, numbperm, partition, permute, powerset, prevpart, randcomb, randpart, randperm, Stirling], stirling2, subsets, vectoint]
Ввиду важности функций комбинаторики приведем их полные определения:
Ниже даны примеры применения некоторых из этих функций:
> choose(4,3);
[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
> choose([a,a,b,c].3):
[[a,a,b],[a,a,c],[atb,c]]
> composition(3,2):
{[2,1],[1,2]}
> decodepart(4,2);
[1,1,2]
> fibonacci(l0);
55
> seq(fibonacci(1),i-l..l2):
1,1,2,3,5,8,13,21,34,55,89,144
> partition(5);
[[1,1,1,1,1], [1,1,1,2], [1,2,2], [1,1,3], [2,3], [1,4], [5]]
> firstpart(3):
[1,1,1]
> nextpart(%);
[1,2]
> prevpart(%);
[1,1,1]
> 1astpart(3):
[3]
> conjpart(%):
[1,1,1]
> multinomial(8,2,3,3);
560
> numbcomp(8,5):
35
> nuropart(3);
numpart(3)
> numbperm(4);
24
> numbperm([a,b]):
2
> numbperm({a,b,c},2);
6
> permute(3,2);
[[l,-2],[l,3],[2,l],[2,3],[3,l],[3,2]]
> permute([a,a,b],2):
[[a,a],[a,b],(b,a]]
> powerset([a,a,b]):
[[],[а],[b],[а,Ь],[а,а],[а,а,b-]]
> randcomb([a,b,c,d],3):
[a,c,d]
> randcomb([a,b,c,d],3);
[a,b,d]
> randpart(l0);
[2,8]
> randpart(l0):
[10]
> stirling(10,5);
-269325
> stirling2(10,5):
42525
> S:=subsets({l,2}):
> while not S[finished] do S[nextva1ue]() od:
{ }
{1}
{2}
{1,2}
> vectoint([l,0,0]);
1
> inttovec(6,3);
[1,0,1]
Читателю, желающему использовать данный пакет, рекомендуется внимательно ознакомиться с этими простыми примерами и просмотреть примеры из справочной базы данных для имеющихся в пакете функций.
Пакет combstruct
Еще девять функций, относящихся к структурам комбинаторики, содержит пакет combstruct:
> with(combstruct):
[allstructs, count, draw,finished, gfeqns, gfseries, gfsolve, iterstritcts, nextstruct]
Эти функции служат для создания случайно однородных объектов, принадлежащих заданному комбинаторному классу. Ограничимся приведением примеров применения этих функций:
> alltructs(Subset({one,two}));
{{ },{one, two}, {two}, {one}}
> anstructs(Permutation([x,y,z]),size=2):
[[x,y],[x,z],[y,x],[y,z],[z,x],[z,y]]
> count(Subset({l,2,3}));
8
> draw(Combiination(5),size=4);
{1,3,4,5}
> count(Permutation([a,a,b])): .
3
> 1t :=iterstructs(Permutation([a,a,b]),size=2);
it := table([finished = false, nextvalue = (pmc() ... endproc )])
> draw(Partition(9));
[2,2,2,3]
> allstructs(Composition(3), size=2):
[[2,l],[l,2]]
Для более полного знакомства с этими специфическими функциями обратитесь к справочной системе.
Пакет финансово-экономических функций finance
Пакет финансово-экономических расчетов открывается командой:
> with(finance)
[amortization, annuity, blackscholes, cashflows, effectiverate,futurevalue, growingannuity, growingperpetuity, levelcoupon, perpetuity, presentvalue, yieldtomaturity]
Этот пакет представлен рядом указанных выше функций в двух формах:
function(args)
finance[function](args).
Благодаря правилам задания аргументов можно реализовать практически все известные финансово-экономические расчеты, такие как амортизация, накопления и платежи по вкладам и т. д. В свете задач рыночной экономики эти функции полезны для приверженцев решения всего на свете без выхода из оболочки Maple. Все же надо отметить, что малозаметные тонкости в определении финансово-экономических функций затрудняют их применение. Есть множество специальных финансово-экономических пакетов, например «Бухгалтерия 1C», которые лучше подходят для наших экономических реалий, чем «заумный» и прозападный Maple 7.
Полный перечень функций можно найти в справке по этому пакету. Ограничимся упоминанием нескольких наиболее характерных функций, связанных с использованием вкладов:
Примеры применения этих функций даны ниже:
Поскольку формулы и обозначения в финансово-экономических расчетах в различной литературе порою заметно различаются (особенно сильны различия между нашей и западной литературой), это может создать серьезные ошибки при вычислениях. К примеру, в формулах Maple на самом деле используются не проценты начислений или обесценивания вкладов, а соответствующие им относительные единицы, например 10% соответствует 0,1.. В нашей литературе проценты обычно задаются в явном виде, то есть rate = 10 при 10%. Надо следить и за знаком величины rate, поскольку она может трактоваться как процент начислений или процент обесценивания денег по вкладам, что соответствует различным ее знакам.
Расчеты такого рода для Maple 7 относятся к достаточно простым, так что даже начинающий пользователь может составить свои функции для таких расчетов по вполне понятным ему и апробированным формулам. Надо отметить, однако, что, используя символьное задание параметров функций, легко получить вывод именно тех формул, которые использует система Maple, и сравнить их со своими формулами. В случае совпадения применение функций Maple возможно и предпочтительно.
ПРИМЕЧАНИЕ
В целом применение Maple 7 как системы с символьной и точной арифметикой весьма предпочтительно в финансово-экономических и статистических расчетах, поскольку обеспечивает принципиально повышенную точность и устойчивость таких расчетов.
Пакет ортогональных многочленов orthopoly
Ортогональные многочлены (полиномы) находят самое широкое применение в различных математических расчетах. В частности, они широко используются в алгоритмах интерполяции, экстраполяции и аппроксимации различных функциональных зависимостей. В пакете orthopoly задано в функци:
> with(orthopoly);
[G,H,L,P,T,U]
Однобуквенные имена этих функций отождествляются с первой буквой в наименовании ортогональных полиномов. Вопреки принятым в Maple 7 правилам, большие буквы в названиях этих полиномов не указывают на инертность данных функций — все они являются немедленно вычисляемыми. В данном разделе функции этого пакета будут полностью описаны. Отметим определения указанных функций:
Свойства ортогональных многочленов хорошо известны. Все они характеризуются целочисленным порядком n, аргументом х и иногда дополнительными параметрами а и b. Существуют простые рекуррентные формулы, позволяющие найти полином n-го порядка по значению полинома (n - 1)-го порядка. Эти формулы и используются для вычисления полиномов высшего порядка. Ниже представлены примеры вычисления ортогональных полиномов:
Представляет интерес построение графиков ортогональных многочленов. На рис. 14.1 построены графики ряда многочленов Гегенбауэра и Эрмита.
Рис. 14.1. Графики ортогональных многочленов Гегенбауэра и Эрмита
На рис. 14.2 построены графики ортогональных многочленов Лагерра и Лежандра.
Наконец, на рис. 14.3 даны графики ортогональных многочленов Чебышева Т(n, х) и U(n, х).
Приведенные графики дают начальное представление о поведении ортогональных многочленов.
Рис. 14.2. Графики ортогональных многочленов Лагерра и Лежандра
Рис. 14.3. Графики ортогональных многочленов Чебышева
К примеру, многочлены Чебышева имеют минимальное отклонение от оси абсцисс в заданном интервале изменениях. Это их свойство объясняет полезное применение таких многочленов при решении задач аппроксимации функций. Можно порекомендовать читателю по их образу и подобию построить графики ортогональных многочленов при других значениях параметра и и диапазонах изменения аргумента х.
В отличие от ряда элементарных функций ортогональные многочлены определены только для действительного аргументах. При комплексном аргументе просто повторяется исходное выражение с многочленом:
> eva1f(U(2,2+3*I))):
Р(2,2 + 3I)
> evalf(sqrt(2+3*I)));
1.674149228+ .8959774761I
Ортогональные многочлены неопределены также и для дробного показателя n. Впрочем, надо отметить, что такие многочлены на практике используются крайне редко.
Пакет для работы с суммами sumtools
Этот инструментальный пакет предназначен для работы со специальными суммами. Он содержит указанные ниже функции:
> with(suintools);
[Hypersum, Sumtohyper, extended_gosper, gosper, hyperrecursion, hypersum, hyperterm, simpcomb, sumrecursion, sumtohyper]
Назначение функций данного пакета перечислено ниже:
Пакет реализации степенных разложений powseries
Степенные разложения часто используются в математических расчетах для приближенного представления разнообразных функций и обеспечения единообразия такого представления. В пакете powseries сосредоточены расширенные средства по реализации таких разложений. Они представлены 22 функциями:
> with(powseries);
[compose, evalpow, inverse, multconst, multiply, negative, pawadd, powcos, powcreate, powdijff, powexp, powint, powlog, powpoly, powsin, powsolve, powsqrt, quotient, reversion, subtract, template, tpsform ]
Ниже представлено определение этих функций:
В выражении ехрr могут использоваться операторы +, -, *, / и ^. С ними могут комбинироваться встроенные функции и функции пользователя, например /(g). Кроме того, могут использоваться следующие функции:
Powexp |
powi nv |
powlog |
powneg |
powrev |
Powdiff |
powi nt |
powquo |
powsub |
powcos |
Powtan |
powsec |
powcsc |
powcot |
powsinh |
Powcosh |
powtanh |
powsech |
powcsch |
powcot h. |
Powsqrt |
powadd |
multiply |
Примеры применения пакета powseries
Назначение большинства этих функций очевидно из их названий — они возвращают соответствующую функцию (указанную после слова pow в имени) в виде разложения в ряд или полинома. Например, powexp раскладывает выражения с экспоненциальными функциями в ряд.
Получаемые функциями ряды представляются в специальном формате. Поэтому для их применения в обычном виде необходимо использовать функцию tpsform в следующих видах:
Здесь р — имя степенного ряда, var.— переменная, относительно которой записан ряд, order — порядок ряда. Если параметр order не указан, используется значение глобальной переменной Order. Ниже даны примеры, иллюстрирующие технику работы со степенными разложениями:
Применение функций этого пакета достаточно просто и прозрачно, так что заинтересованный читатель может сам опробовать на примерах работу тех функций, которые не были использованы в приведенных примерах.
Пакет числовой аппроксимации numapprox
Этот пакет содержит небольшое число безусловно очень важных функций:
> with(numapprox);
[chebdeg, chebmult, chebpade, chebsort, chebyshev, confracform, hermite_pade, hornerform, infnorm, laurent, minimax, pade, remez]
В их числе функции интерполяции и аппроксимации полиномами Чебышева, рядом Тейлора, отношением полиномов (Паде-аппроксимация) и др. Все они широко применяются не только в фундаментальной математике, но и при решении многих прикладных задач. Рассмотрим их, начиная с функций аппроксимации аналитических зависимостей.
Паде-аппроксимация аналитических функций
Для аппроксимации аналитических функций одной из лучших является Паде-аппроксимация, при которой заданная функция приближается отношением двух полиномов. Для осуществления такой аппроксимации используется функция pade:
pade(f. x=a, [m.n])
pade(f.,х, [m.n])
Здесь f — аналитическое выражение или функция, х — переменная, относительно которой записывается аппроксимирующая функция, а — координата точки, относительно которой выполняется аппроксимация, m, n — максимальные степени полиномов числителя и знаменателя. Технику аппроксимации Паде поясняет рис. 14.4.
На рис. 14.4 представлена аппроксимация синусоидальной функции, а также построены графики этой функции и аппроксимирующей функции. Под ними дан также график абсолютной погрешности для этого вида аппроксимации. Нетрудно заметить, что уже в интервале [-л, я] погрешность резко возрастает на концах интервала аппроксимации.
Важным достоинством Паде-аппроксимации является возможность довольно точного приближения разрывных функций. Это связано с тем, что нули знаменателя у аппроксимирующего выражения способны приближать разрывы функций, если на заданном интервале аппроксимации число разрывов конечно. На рис. 14.5 представлен пример Паде-аппроксимации функции tan(x) в интервале от -4,5 до 4,5, включающем два разрыва функции.
Как видно из рис. 14.5, расхождение между функцией тангенса и ее аппроксимирующей функцией едва заметно лишь на краях интервала аппроксимации. Оба разрыва прекрасно приближаются аппроксимирующей функцией. Такой характер аппроксимации подтверждается и графиком погрешности, которая лишь на концах интервала аппроксимации [-4,0, 4,0] достигает значений 0,01 (около 1%).
Рис. 14.4. Аппроксимация Паде для синусоидальной функции
Рис. 14.5. Аппроксимация Паде для разрывной функции тангенса
Паде-аппроксимация с полиномами Чебышева
Для многих аналитических зависимостей хорошие результаты дает аппроксимация полиномами Чебышева. В общем случае применяется Паде-аппроксимация отношением таких полиномов. Она реализуется функциями chebpade:
chebpade(f, x=a..b, [m.n])
chebpade(f., x, [m.n])
chebpade(f, a..b, [m,n])
Здесь а..b задает отрезок аппроксимации, тип— максимальные степени числителя и знаменателя полиномов Чебышева. Приведенный ниже пример показывает аппроксимацию Паде полиномами Чебышева для функции f=cos(x):
Наилучшая минимаксная аппроксимация
Минимаксная аппроксимация отличается от Паде-аппроксимации минимизацией максимальной абсолютной погрешности во всем интервале аппроксимации. Она использует алгоритм Ремеза (см. ниже) и реализуется следующей функцией:
mimmax(f, x=a..b, [m.n], w, 'maxerror')
minimax(f, a..b, [m,n], w, 'maxerror')
Здесь помимо уже отмеченных параметров w — процедура или выражение, maxerror — переменная, которой приписывается значение miniraax-нормы. Ниже дан пример аппроксимации функции cos(x) в интервале [-3, 3]:
Наилучшая минимаксная аппроксимация по алгоритму Ремеза
Для получения наилучшей полиномиальной аппроксимации используется алгоритм Ремеза, который реализует следующая функция:
remez(w, f, a, b, m, n,_crit, 'maxerror')
Здесь w — процедура, представляющая функцию w(x) > 0 в интервале [a, b], f — процедура, представляющая аппроксимируемую функцию а и b — числа,' задающие интервал аппроксимации fa,b], m и n — степени числителя и знаменателя аппроксимирующей функции, crit — массив, индексированный от 1 до m + n + 2 и представляющий набор оценок в критических точках (то есть точек максимума/минимума кривых погрешности), mахеrrоr — имя переменной, которой присваивается минимаксная норма w abs(f -r).
Следующий пример иллюстрирует применение данной функции для аппроксимации функции erf(x):
Другие функции пакета
Отметим назначение других функций пакета numapprox:
Действие этих функций очевидно, и читатель может самостоятельно опробовать их в работе.
Пакет интегральных преобразований inttrans
Это один из пакетов, наиболее важных для общематематических и научно-технических приложений. Он содержит небольшой набор функций:
> with(inttrans):
[addtable,fourier,fouriercos,fouriersin, hankel, hilbert, invfourier, invhilbert, invldplace, invmellin, laplace, mellin, savetable]
Однако эти функции охватывают такие практические важные области математики, как ряды Фурье, прямые и обратные преобразования Лапласа и Фурье и ряд других интегральных преобразований. Ниже они обсуждены более подробно.
В предшествующих реализациях системы Maple функции прямого и обратного Z-преобразований также входили в пакет inttrans, однако в Maple 6 и 7 они перенесены в ядро системы.
Прямое и обратное преобразования Лапласа
Прямое преобразование Лапсаса заключается в переводе некоторой функции времени f(t) в операторную форму F(p). Это преобразование означает вычисление интеграла
Для осуществления прямого преобразования Лапласа Maple 7 имеет функцию
laplace(expr,t,p)
Здесь ехрr— преобразуемое выражение, t — переменная, относительно которой записано ехрr, и р — переменная, относительно которой записывается результат преобразования.
Обратное преобразование Лапласа означает переход от функции F(p) к функции (t) с помощью формулы
Для вычисления этого интеграла служит функция:
invlaplace(expr,p, t)
где ехрr — выражение относительно переменной р, t — переменная, относительно которой записывается результирующая зависимость. Оба преобразования широко применяются в практике научно-технических вычислений и отражают суть операторного метода. При этом прямое преобразование создает изображение а обратное —оригинал функции. Ниже приведены примеры применения прямого и обратного преобразований Лапласа:
Нетрудно заметить, что в данном случае последовательное применение прямого, а затем обратного преобразования восстанавливает исходную функцию sin(t) + acos(t).
Прямое и обратное преобразования Фурье
Прямое преобразование Фурье преобразует функцию времени f(t) в функцию частот и заключается в вычислении следующей интегральной функции:
Оно реализуется следующей функцией пакета интегральных преобразований inttrans:
fourier(expr,t,w)
Здесь ехрr — выражение (уравнение или множество), t — переменная, от которой зависит ехрr, и w — переменная, относительно которой записывается результирующая функция. Обратное преобразование Фурье задается вычислением интеграла:
Оно фактически переводит представление сигнала из частотной области во временную. Примеры применения преобразования Фурье представлены ниже:
Обратите внимание на то, что даже в простом первом примере применение обратного преобразования Фурье вслед за прямым не привело к буквальному восстановлению исходной функции sin(t). Потребовалась: команда simplify, чтобы перевести результат в виде представления синуса через экспоненциальные функции к обычному виду sin(t).
Вычисление косинусного и синусного интегралов Фурье
Разложение функции f(t) в ряд Фурье требует вычисления интегралов следующего вида:
Они получили название косинусного и синусного интегралов Фурье и фактически задают вычисление коэффициентов ряда Фурье, в который может быть разложена функция ./(t). Для вычисления этих интегралов в пакете используются следующие функции:
fouriercos(expr,t,s)
fouriersln(expr,t,s)
Поскольку формат задания этих функций вполне очевиден, ограничимся примерами их применения:
Интегральное преобразование Ханкеля
Интегральное преобразование Ханкеля задается следующим выражением:
и выполняется функцией:
hankel(expr, t, s, nu)
Здесь ехрr — выражение, равенство (или множество, или список с выражениями/равенствами), t — переменная в ехрr, преобразуемая в параметр преобразования s, nu— порядок преобразования. Следующий пример демонстрирует применение функции Ханкеля:
Прямое и обратное преобразования Гильберта
Прямое преобразование Гильберта задается следующим выражением:
и превращает функцию f(t) в F(s).
Обратное преобразование Гильберта означает нахождение f(f) по заданной F(s).
Эти преобразования выполняются функциями:
hilbert(expr, t, s)
invhilbert(expr, t,s)
где назначение параметров очевидно.
Приведенные ниже примеры иллюстрируют выполнение этих преобразований:
Как видно из этих примеров, обратное преобразование Гильберта, осуществленное над результатом прямого преобразования, не восстанавливает функцию f(t) буквально.
Функция addtable
Как видно из приведенных примеров, не всегда интегральные преобразования дают результат в явном виде. Получить его позволяет вспомогательная функция:
addtable(tname,patt,ехрr,t,s)
где tname — наименование преобразования, для которого образец patt должен быть добавлен к таблице поиска. Остальные параметры очевидны.
Следующие примеры поясняют применение этой функции:
Пакет приближения кривых CurveFitting.
Общая характеристика пакета CurveFitting
Новый пакет приближения кривых CurveFitting весьма полезен тем, кто занимается столь распространенной задачей, как приближение кривых. Он содержит ряд функций:
> with(CurveFitting);
Доступ к функциям пакета возможен с помощью конструкций:
CurveFitting[function](arguments)
function(arguments)
Число функций пакета невелико и все они описаны ниже.
Функция вычисления В-сплайнов Bspline
Функция BSpline(k, v, opt) служит для вычисления В-сплайнов. Она имеет следующие параметры: k — порядок сплайна (целое число), v— имя и opt — параметр в виде knots=knotlist, где knotlist — спискок из k+1 элементов алгебраического типа. Используя функцию CurveFitting[BSplineCurve], можно строить кривые В-сплайнов. Примеры применения этой функции представлены ниже:
Как нетрудно заметить из этих примеров, функция Bspline возвращает результат в виде кусочных функций типа piecewise.
Функция построения В-сплайновых кривых BsplineCurve
Функция BsplineCurve служит для построения кривых в B-cплайнов. Она Может использоваться в формах:
BSpl1neCurve(xydata, v, opts)
BSpllneCurve (xdata, ydata, v, opts)
Здесь:
xydata — список, массив или матрица точек в форме [[xl.ylj, [х2,у2],..., [хn,уn]];
xdata — список, массив или вектор значений независимой переменной [xl,x2,... ,хn];
ydata — список, массив или вектор значений зависимой переменной в форме [у1,у2,...,уn];
v — имя независимой переменной;
opts — необязательный параметр в форме одного или более выражений вида order=k или knots=knot1ist.
Примеры применения функции BSplineCurve с порядком, заданным по умолчанию, и с третьим порядком (кубический В-сплайн) представлены на рис. 14.6.
Рис. 14.6. Применение функции BSplineCurve
Следует отметить, что при малом, числе точек аппроксимация В-сплайнами дает невысокую точность, что и видно из рис. 14.6
Функция реализации метода наименьших квадратов LeastSquares
Функция LeastSquares служит для реализации аппроксимации по методу наименьших квадратов:
LeastSquares (xydata, v, opts)
LeastSquares(xdata, ydata, v.,opts)
Все входящие в нее параметры были определены выше (см. параметры функции BSplineCurve). Параметр opts задается в форме выражений weight=wlist, curve=f или params=pset.
Следующие примеры иллюстрируют применение функции LeastSquares:
Функция полиномиальной аппроксимации PolynomialInterpolation
Функция PolynomialInterpolation реализует полиномиальную интерполяцию и может использоваться в виде:
Polynomiallnterpolation (xydata, v)
Polynomiallnterpolation(xdata, ydata, v)
Параметры функции были определены выше. Параметр v может быть как именем, так и численным значением. Примеры применения функции представлены ниже:
Функция рациональной аппроксимации RacionalInterpolation
Функция рациональной интерполяции задается в Виде:
Rational Interpolation (xydata, z, opts)
RationalInterpolation(xdata, ydata, z, opts)
где необязательный параметр opts задается выражениями methochmethodtype или degrees=[dl,d2]. Функция возвращает результат в виде отношения двух полиномов. Параметр methodtype может иметь значения 4lookaround или subresultant, задающие учет или пропуск сингулярных точек.
Пример применения функции Rational Interpolation (загрузка пакета опущена, но предполагается):
Функция аппроксимации непрерывными дробями ThieleInterpolation
Функция ThieleInterpolation осуществляет интерполяцию на основе непрерывных дробей (Thiele's-интерполяцию). Она задается в виде:
Thielelnterpolation (xydata, v)
Thielelnterpolation(xdata, ydata, v)
Примеры применения данной функции представлены ниже:
Пакет для работы с полиномами PolynomialTools
Обзор возможностей пакета PolynomialTools
Пакет для работы с полиномами PolynomialTools предназначен для выполнения ряда специальных операций с полиномами или создания полиномов с заданными свойствами. Этот пакет имеет небольшое число функций:
> with(PolynomialTools):
[IsSelfReciprocal, MinimalPolynomial, PDEToPolynomial, PolynomialToPDE, Shorten, Shorter, Sort, Split, Splits, Translate]
В пакет входят функции расщепления, сортировки и преобразования полиномов (в том числе в дифференциальные уравнения и наоборот) и др.
Функции для работы с полиномами
Рассмотрим несколько функций пакета PolynomialTools общего характера. Примеры применения этой функции представлены ниже:
ПРИМЕЧАНИЕ
Функция IsSelfReciprocat(a, х, 'р') проверяет полином а(х) на условие coeff(a,x,k) =coeff(a,x,d-k) для всех k = 0. .d, где d = degree(a; х) — порядок полинома. Если это условие выполняется, то возвращается логическое значение true, иначе — false. Если порядок d четный и если задан третий аргумент р, то р будет представлять полином Р порядка d/2, такой, что x^(1/2)*P(x+l/x) = а. При нечетном d полином а будет взаимообратным, что подразумевает деление на х+1. В этом случае; если р указано, результат вычисляется в форме а/(х+1).
Функция MinimalPolynomial (r, n, асе) возвращает полином минимальной степени не превышающей n, имеющий корень г. Необязательный аргумент асе задает погрешность приближения. Функция MinimalPolynomia(r, n) использует решетчатый алгоритм и находит полином степени п (или менее) с наименьшими целыми коэффициентами. Корень г может быть действительным или комплексным. Результат зависит от значения переменной окружения Digits. По умолчанию асе задано как 10*(Digits-2). Примеры применения данной функции:
Функция Split(a, х, b) служит для расщепления полинома а с независимой переменной х. Параметр b — необязательный. Функция Split(a, х) осуществляет комплексную факторизацию инвариантного полинома а по х. Если третий аргумент b задан, он представляет множество элементов {tl,... ,tm}, таких что полином а расщепляется над K=Q(tl,... ,tm), где Q означает поле рациональных чисел. Примеры:
В пакете определена еще одна подобная функция Splits, с которой можно познакомиться по справке на нее.
Функция Translate(a, х, х0) преобразует полином а(х) с подстановкой х - х + х0, где x0 — константа. Примеры применения этой функции даны ниже:
Функции сортировки полиномов
Для сортировки полиномов предназначены следующие три функции:
Shorter(f, g, х)
Sort(v, х)
Shorten(f, x)
Здесь f и g полиномы, v — список полиномов их — независимая переменная. Функции отличаются характером сортировки.
Функция Shorter определяет полином f как более короткий, чем g, по следующим признакам: меньшая длина, меньшее имя независимой переменной х, не дробный и меньшая степень других переменных. Функция Sort сортирует лист полиномов х по признакам, определяемым Shorter. Функция Shorten использует преобразования Мебиуса. Многочисленные детали ее применения можно найти в справке по данной функции. Примеры применения функций сортировки:
Функции преобразования полиномов в РDЕ и обратно
Функция PolynomialToPDE(polys, vars, depvars) преобразует полиномы polys пo независимым переменным vans в дифференциальные уравнения с частными производными (PDE). Другая функция PDEToPolynomia(pdes, vans, depvars) осуществляет обратное преобразование.
Следующие примеры иллюстрируют применение этих функций:
Что нового мы узнали?
В этом уроке мы научились:
Урок 15.
Пакеты линейной алгебры и функциональных систем
Основные определения линейной алгебры
Прежде чем перейти к рассмотрению обширных возможностей пакетов Maple 7 по части решения задач линейной алгебры, рассмотрим краткие определения, относящиеся к ней.
Матрица (m х n) — прямоугольная двумерная таблица, содержащая m строк и n столбцов элементов, каждый из которых может быть представлен числом, константой, переменной, символьным или математическим выражением (расширительная трактовка матрицы).
Квадратная матрица — матрица, у которой число строк m равно числу столбцов n. Пример квадратной матрицы размера 3x3:
Сингулярная (вырожденная) матрица — квадратная матрица, у которой детерминант (определитель) равен 0. Такая матрица обычно не упрощается при символьных вычислениях. Линейные уравнения с почти сингулярными матрицами могут давать большие погрешности при решении.
Единичная матрица — это квадратная матрица, у которой диагональные элементы равны 1, а остальные элементы равны 0. Ниже представлена единичная матрица размера 4x4:
Сингулярные значения матрицы А — квадратные корни из собственных значений матрицы АТ=А, где Ат - транспонированная матрица А (см. ее определение ниже);Транспонированная матрица — матрица, у которой .столбцы и строки меняются . местами, то есть элементы транспонированной матрицы удовлетворяют условию AT(i,j)=A(j,i). Приведем простой пример. Исходная матрица:
Транспонированная матрица:
Обратная матрица — это матрица М-1, которая, будучи умноженной на исходную квадратную матрицу М, дает единичную матрицу Е.
Ступенчатая форма матрицы соответствует условиям, когда первый ненулевой элемент в каждой строке есть 1 и первый ненулевой элемент каждой строки появляется справа от первого ненулевого элемента в предыдущей строке, то есть все элементы ниже первого ненулевого в строке — нули.
Диагональ матрицы — расположенные диагонально элементы Ai,i матрицы А. В приведенной ниже матрице элементы диагонали представлены заглавными буквами:
Обычно указанную диагональ называют главной диагональю — для матрицы А, приведенной выше, это диагональ с элементами А, Е и L. Иногда вводят понятия под диагоналей (элементы d и k) и над диагоналей (элементы b и f). Матрица, все элементы которой, расположенные кроме как на диагонали, под диагонали и над диагонали, равны нулю, называется ленточной.
Ранг матрицы — наибольший из порядков отличных от нуля миноров квадратной матрицы.
След матрицы — сумма диагональных элементов матрицы.
Определитель матрицы — это многочлен от элементов квадратной матрицы, каждый член которого является произведением n элементов, взятых по одному из каждой строки и каждого столбца со знаком произведения, заданным четностью перестановок:
где M1<j> — определитель матрицы порядка n - 1, полученной из матрицы А вычеркиванием первой строки и j-гo столбца. В таком виде определитель (он же детерминант) легко получить в символьных вычислениях. В численных расчетах мы будем подразумевать под определителем численное значение этого многочлена.
Матрица в целой степени — квадратная матрица в степени n (n — целое неотрицательное число), определяемая следующим образом:
М° = Е, М1 = М, М2 = ММ ..., Мn =Мn-1М.
Идемпотентная матрица — матрица, отвечающая условию Р2 = Р.
Симметрическая матрица — матрица, отвечающая условию Ат = А.
Кососимметрическая матрица — матрица, отвечающая условию Ат = -A. Ортогональная матрица — матрица, отвечающая условию Ат =А-1.Нуль-матрица — матрица, все элементы которой равны 0.Блок-матрица — матрица, составленная из меньших по размеру матриц, также можно представить как матрицу, каждый элемент которой — матрица. Частным случаем является блок-диагональная матрица — блок-матрица, элементы-матрицы которой вне диагонали — нуль-матрицы.
Комплексно-сопряженная матрица — матрица А, полученная из исходной матрицы А заменой ее элементов на комплексно-сопряженные. Эрмитова матрица — матрица А, удовлетворяющая условию А = А .Собственный вектор квадратной матрицы А — любой вектор х е V", х* О, удовлетворяющий уравнению Ах = gx, где g — некоторое число, называемое собственным значением матрицы А.
Характеристический многочлен матрицы — определитель разности этой матрицы и единичной матрицы, умноженный на переменную многочлена, — |А - gE|. Собственные значения матрицы — корни ее характеристического многочлена. Норма — обобщенное понятие абсолютной (величины числа. Норма трехмерного вектора ||х|| — его длина. Норма матрицы — значение sup(||Ax||/||x||).
Матричная форма записи системы линейных уравнений — выражение АХ = В, где А — матрица коэффициентов системы, X — вектор неизвестных и В — вектор свободных членов. Один из способов решения такой системы очевиден — X = А-1В, где А-1 — обратная матрица.
Пакет решения задач линейной алгебры linalg
Несомненно, что уникальной возможностью системы Maple 7, как и других систем компьютерной алгебры, является возможность решения задач линейной алгебры в символьном (формульном, аналитическом) виде. Однако такое решение представляет скорее теоретический, чем практический интерес, поскольку даже при небольших размерах матриц (уже при 4-5 строках и столбцах) символьные результаты оказываются очень громоздкими и труднообозримыми. Они полезны только при решении специфических аналитических задач, например с разреженными матрицами, у которых большинство элементов имеют нулевые значения.
Поэтому разработчики Maple 7 были вынуждены реализовать в своей системе численные методы решения задач линейной алгебры, которые широко используются в основных сферах ее приложения — математическом моделировании систем и устройств, расчетах в электротехнике, механике, астрономии и т. д.
В ядро Maple 7, как отмечалось, введены очень скромные и минимально необходимые средства для решения задач линейной алгебры. Основной упор в их реализации сделан на подключаемые пакеты. Основным из них, унаследованным от предшествующих реализаций системы, является пакет решения задач линейной алгебры Unalg. Это один из самых обширных и мощных пакетов в области решения задач линейной алгебры. Он содержит свыше ста функций:
> with(linalg);
Warning, the names fibonacci, inverse and multiply have been redefined Warning, the protected names norm and trace have been redefined and unprotected[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselimfifibonacci,forwardsub,frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert,htranspose, thermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszerojacobian, Jordan, kernel, laplacian, leastsqrs, linsolve,matadd, matrix, minor, minpoly, mulcol, /им/row,multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector, sumbasis, swapcol, swaprow, Sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian]
Ниже указано назначение тех функций пакета linalg, которые подробно не описаны:
Ниже мы рассмотрим более подробно наиболее часто используемые функции из этого пакета. С деталями синтаксиса (достаточно разнообразного) для каждой из указанных функций можно ознакомиться в справочной системе Maple. Для этого достаточно использовать команду
?name; где name — имя функции (из приведенного списка).
Основные функции для задания векторов и матриц
В библиотечном файле Unalg имеются следующие функции для задания векторов и матриц:
Ниже показано применение этих функций:
Обратите внимание на последние примеры — они показывают вызов индексированных переменных вектора и матрицы.
Функции для работы с векторами и матрицами
Для работы с векторами и матрицами Maple 7 имеет множество функций, входящих в пакет linalg. Ограничимся приведением краткого описания наиболее распространенных функций этой категории.
Операции со структурой отдельного вектора V и матрицы М:
Основные векторные и матричные операции:
Приведем примеры применения некоторых из этих функций:
Читатель, понимающий суть матричных вычислений, легко справится с тестированием других функций, входящих в пакет linalg. В приведенных примерах полезно обратить внимание на то, что многие матричные функции способны выдавать результаты вычислений в аналитическом виде, что облегчает разбор выполняемых ими операций.
Решение систем линейных уравнений
Ниже представлен простой пример составления и решения трех систем линейных уравнений с применением функций, входящих в пакет linalg:
А теперь рассмотрим пример решения матричного уравнения в символьном виде:
Следующий пример показывает решение более сложной системы линейных уравнений с комплексными коэффициентами:
На этот раз решение получено использованием функций умножения матриц и вычисления обратной матрицы в виде X = А-1 В, то есть в матричном виде. В конце примера показано преобразование результатов с целью их получения в обычной форме комплексных чисел с частями, представленными в форме чисел с плавающей точкой.
Пакет линейной алгебры с алгоритмами NAG LinearAlgebra
Назначение и загрузка пакета LinearAlgebra
В последние годы разработчики систем символьной математики осознали, что малая скорость выполнения векторных и матричных операций при решении задач линейной алгебры оборачивается потерей заметной части рынка систем компьютерной математики. Новые версии таких систем (Mathematica 4/4.1 и Maple 6/7) отличаются от прежних прежде всего резким повышением эффективности решения задач линейной алгебры в численном виде.
В новых реализациях систем Maple и MATLAB была сделана ставка на использование давно апробированных быстрых алгоритмов линейной алгебры, предложенных создателями Number Algorithm Group (NAG). Эти алгоритмы издавна применяются на больших ЭВМ и суперкомпьютерах, обеспечивая ускорение численных матричных операций от нескольких раз до нескольких десятков раз. Их применение обеспечивает эффективное использование систем символьной математики в решении задач, сводящихся к задачам линейной алгебры. В числе таких задач многочисленные задачи теоретической электротехники, механики многих объектов, моделирования электронных устройств и т. д. В Maple 7 использование алгоритмов NAG является одной из первых отличительных черт новой версии системы. Оно реализуется новым пакетом LinearAlgebra. Для его загрузки используются следующие команды:
> restart; with(LinearAlgebra):
[Add, Adjoint, BackwardSubstitute, BandMatrix, Basis, BezoutMatrix, BidiagonalForm, BilinearForm, CharacteristicMatrix, CharacteristicPolyhomial, Column, ColumnDimension, ColumnOpemtion, ColumnSpace, CompanionMatrix, CondittonNumber, ConstantMatrix, ConstantVector, CreatePermutation, CrossProduct, DeleteColumn, DeleteRow, Determinant, DiagonalMatrix, Dimension,
Dimensions, DotProduct, Eigenvalues, Eigenvectors, Equql, FonyardSubstitute, FrobeniusForm, GenerateEquations, GenerateMatrix, GetResuNDataType, * GetResultShape, GivensRotationMatrix, GramSchmidt, HarikelMatrix, HermiteForm, HermitianTranspose, HessenbergForm, HilbertMatrix, Households-Matrix, IdentityMatrix, IntersectionBasis, IsDefinite, IsOrthogonal, IsSimilar, IsUnitary,
JordanBlockMatrix, JordanForm, LA_Main, LUDecomposition, LeastSquares, LinearSolve, Map, Map2, MatrixAdd, Matrixlnverse, MatrixMatrixMultiply, MatrixNorm, MatrixScalarMultiply, MatrixVectorMultiply,Minimal/Polynomial, Minor, Multiply, NoUserValue, Norm, Normalize, NullSpace, OuterProductMatrix, Permanent, Pivot, QRDecomposition, RandomMatrix, RandomVector, Rank, Row,
RowDimension, RowOperation, RowSpace, ScalarMatrix, ScalarMultiply, ScalarVector, SchurForm, SingularValues, SmithForm, SubMatrix, SubVector, SumBasis, SylvesterMatrix, ToeplitzMatrix, Trace, Transpose, TridiagonalForm, UnitVector, VandermondeMatrix, VectorAdd, VectorAngle, VectorMatrixMultiply, VectorNorm, VectorScalarMultiply, ZeroMatrix, Zero Vector, Zip ]
> 1nfolevel[LinearA1gebra]:=l:
infolevelLinearAlgebra:=1
Нетрудно заметить, что многие функции этого пакета повторяет по назначению функции более старого пакета linalg, описанного выше. Поэтому мы не будем останавливаться на их повторном описании. Главное то, что эти функции задействуют возможности быстрых алгоритмов NAG и в отличие от функций пакета linalg ориентированы на численные расчеты в формате обработки вещественных чисел, характерном для компьютерной платформы. Знающий матричные методы читатель легко поймет назначение функций пакета LinearAlgebra по их составным названиям. Например, DeleteColumn означает удаление столбца матрицы, ToeplitzMatrix означает создание матрицы Теплица, ZeroMatrix — создание матрицы с нулевыми элементами и т. д. Все имена функций этого пакета начинаются с заглавной буквы.
Примеры матричных операций с применением пакета LinearAlgebra
Применение алгоритмов NAG особенно эффективно в том случае, когда используется встроенная в современные микропроцессоры арифметика чисел с плавающей запятой. С помощью специального флага такую арифметику можно отключать или включать:
> UseHardwareFloats := false; # use software floats
UseHardwareFloats :=false
> UseHardwareFloats := true: # default behaviour
UseHardwareFloats :=true
Матрицы в новом пакете линейной алгебры могут задаваться в угловых скобках, как показано ниже:
После этого можно выполнять с ними типовые матричные операции. Например, можно инвертировать (обращать) матрицы:
Обратите внимание, что Maple 7 теперь выдает информационные сообщения о новых условиях реализации операции инвертирования матриц с вещественными элементами, и в частности об использовании алгоритмов NAG и арифметики, встроенной в сопроцессор. (
Следующий пример иллюстрирует создание двух случайных матриц Ml и М2 и затем их умножение:
Параметр inplace в функции умножения обеспечивает помещение результата умножения матриц на место исходной матрицы Ml — излюбленный прием создателей быстрых матричных алгоритмов NAG. Поскольку матрицы Ml и М2 за- -даны как случайные, то при повторении этого примера результаты, естественно, будут иными, чем приведенные.
Следующий пример иллюстрирует проведение хорошо известной операции/ LU-разложения над матрицей М, созданной функцией Matrix:
Конечной целью большинства матричных операций является решение систем линейных уравнений. Для этого пакет LinearAlgebra предлагает великое множество методов и средств их реализации. Мы ограничимся простым примером одновременного решения сразу трех систем уравнений. Дабы не загромождать книгу массивными выражениями, ограничимся решением систем из двух линейных уравнений, матрица коэффициентов у которых одна, а векторы свободных членов разные. Ниже показан пример решения такой системы:
На этом, учитывая ограниченный объем книги, мы завершаем обзор пакета LmearAlgebra. Читатель, познающий или знающий методы линейной алгебры, может опробовать в работе любые функции этого пакета самостоятельно или познакомиться со множеством примеров, размещенных в справочной системе Maple 7. Возможности пакетов linalg и LinearAlgebra удовлетворят самых требовательных специалистов в этой области математики.
Интеграция Maple 7 с MATLAB
Несмотря на обширные средства линейной алгебры (да и многие другие), имеющиеся у системы Maple 7, есть системы компьютерной математики, решающие некоторые классы задач более эффективно, и прежде всего быстрее. В области линейной алгебры к таким системам, безусловно, относится система MATLAB, созданная компанией Math Works, Inc. Ее название происходит именно от слов MATrix LABoratory — матричная лаборатория.
MATLAB содержит в своем ядре многие сотни матричных функций и является одной из лучших матричных систем для персональных компьютеров. Она реализует самые современные алгоритмы матричных операций, включая, кстати, и алгоритмы NAG. Однако главное достоинство MATLAB — наличие множества дополнительных пакетов как по классическим разделам математики, так и по самым новейшим, таким как нечеткая логика, нейронные сети, идентификация систем, обработка сигналов и др. Знаменитым стал пакет моделирования систем и устройств Simulink, включаемый в пакет поставки системы MATLAB. Последней версией системы является MATLAB 6.0. В то же время нельзя не отметить, что MATLAB — одна из самых громоздких математических систем. Инсталляция ее полной версии занимает около 1,5 Гбайт дискового пространства. Несмотря на это, интеграция различных математических систем с данной системой, похоже, становится своеобразной модой. Такая возможность предусмотрена и в системе Maple 7 с помощью пакета Matlab.
Загрузка пакета расширения Matlab
Для загрузки пакета Matlab используется команда: .
> with(Matlab);
[chol, closelink, defined, del, dimensions, eig, evalM,fft, getvar, inv, Iu,ode45, openlink, qr, setvar, size, square, transpose ]
Использование этой команды ведет к автоматическому запуску системы MATLAB (гарантируется работа с версиями MATLAB до 5.3.1 включительно) и установлению необходимой объектной связи между системами Maple 7 и MATLAB.
ПРИМЕЧАНИЕ
Как нетрудно заметить, данный пакет дает доступ всего к 18 функциям системы MATLAB (из многих сотен, имеющихся только в ядре последней системы). Таким образом, есть все основания полагать, что возможности MATLAB в интеграции с системой Maple 7 используются пока очень слабо и носят рудиментарный характер. Стоит ли ради этих функций иметь на компьютере огромную систему MATLAB, пользователи должны решать сами. Если ответ положительный, то, скорее всего, пользователь решает тот класс задач, для которых лучше подходит MATLAB, и надо задуматься уже над тем, нужен ли в этом случае Maple.
Типовые матричные операции пакета расширения Matlab
Большинство функций пакета Matlab (не путайте с системой MATLAB, имя которой надо записывать прописными буквами) реализуют самые обычные матричные операции, что и иллюстрируют приведенные ниже примеры.
Зададим матрицу М в формате Maple:
Ниже даны примеры транспонирования матрицы, ее инвертирования, вычисления детерминанта и собственных значений матрицы:
Можно проверить, является ли матрица квадратной:
Можно также проверить, является ли данная матрица матрицей системы MATLAB:
Здесь надо иметь в виду, что форматы матриц в системах Maple и MATLAB различны. Выполним LU-преобразование матрицы:
Таким образом, видно, что пакет Maple в данном случае реализует типовые матричные операции, но средствами системы MATLAB. Загрузка последней происходит автоматически при загрузке пакета Matlab. Если система MATLAB не установлена на вашем компьютере, то доступ к функциям пакета Matlab будет отсутствовать, a Maple 7 при попытке использования данных функций будет выдавать сообщения об ошибках.
Выделение сигнала на фоне шумов
Среди небольшого числа доступных функций системы MATLAB в пакете Matlab нельзя не выделить особо функции быстрого прямого и обратного преобразований Фурье. В системе MATLAB эти функции реализуют наиболее эффективные алгоритмы быстрого преобразования Фурье (БПФ), обеспечивающие решение крупноразмерных задач (например, обработки сигналов, представленных векторами и матрицами больших размеров) в десятки раз быстрее, чем при обычных методах выполнения преобразований Фурье.
Покажем возможность применения БПФ на ставшем классическим примере — выделении спектра полезного сигнала на фоне сильных помех. Зададим некоторый двухчастотный сигнал, имеющий 1500 точек отсчета:
> num := 1500:
Time := [seq(.03*t. t=1..num)]:
data := [seq((3.6*cos(Time[t]) + cos(6*Time[t])), t=1..num)]:
p1ots[pointp1ot](zip((x,y)->[x,y],Time,data), style=line);
График сигнала представлен на рис. 15.1.
Рис. 15.1. График исходного сигнала
Теперь с помощью генератора случайных чисел наложим на этот сигнал сильный «шум» (слово «шум» взято в кавычки, поскольку речь идет 6 математическом моделировании шума, а не о реальном шуме физической природы):
> tol := 10000:
r := rand(0..to1):
noisyjlata :=[seq(r()/(tol)*data[t], t=l..num)]:
plots[pointp1ot](zip((x,y)->[x,y],T1me,noisy_data), sty1e=1ine);
Нетрудно заметить, что теперь форма сигнала настолько замаскирована шумом (рис. 15.2), что можно лишь с трудом -догадываться, что сигнал имеет периодическую составляющую малой амплитуды. Эта высокочастотная составляющая сигнала скрыта шумом.
Подвергнем полученный сигнал (в виде временной зависимости) прямому преобразованию Фурье, реализованному функцией fft:
> ft := fft(noisy_data):
> VectorOptions(ft, datatype):
complex8
Эта операция переводит задачу из временного представления сигнала в частотное, что позволяет использовать частотные методы анализа сигнала. Выделим, к примеру, действительную и мнимую части элементов вектора ft и проверим его размер:
Пакет анализа линейных функциональных систем LinearFunctionalSystems
Назначение пакета LinearFunctionalSystems
Пакет LinearFimctionalSystems содержит набор функций для решения задач, связанных с анализом линейных функциональных систем. Обычно такие системы описываются линейными дифференциальными уравнениями, имеющими то или иное решение. Пакет LinearFunctionalSystems позволяет провести тестирование подготовленной системы, оценить ряд ее параметров и получить решение одним из ряда методов.
Вызов всех функций пакета осуществляется командой:
> with(LinearFunctionalSystems):
[AreSameSolution, CanonicalSystem, ExtendSeries, Homogeneous System, IsSolution,
MatrixTriangularization, PolynomialSolution, Properties, RationalSolution,
SeriesSolution, UniversalDenominator]
Тестовые функции пакета LinearFunctionalSystems
Прежде чем рассматривать основные функции пакета, рассмотрим две тестовые функции. Они представлены следующими формами записи:
IsSolution(sol,sys, vars) IsSolution(sol, A, b, x, case)
IsSolution(sol, A, x, case) AreSameSolutior(sol, soil)
В них: sol — тестируемое решение, sys — система функциональных уравнений, х — независимая переменная решения, А и b — матрица и вектор с рациональными элементами, case — имя метода решения ('differential', 'difference' или 'qdifference').
Функции решения линейных функциональных систем
Группа основных функций пакета LinearFunctionalSystems имеет идентичный синтаксис и записывается в виде:
name(sys,vars,[method])
или
name(A[.b],x, case, [method]}
Здесь name — одно из следующих имен:
Система функциональных уравнений задается либо в виде полной системы sys со списком переменных vars, либо в матричном виде с заданием матриц коэффициентов, системы А и вектора свободных членов b (может отсутствовать) с указанием независимой переменной х и параметра case, имеющего значения 'differential', 'difference' или 'qdifference'. Параметр method, задающий метод EG-исключения, может иметь значения 'quasimodular' или 'ordinary'.
Вспомогательные функции
Несколько вспомогательных функций пакета LinearFunctionalSystems представлено ниже:
Что нового мы узнали?
В этом уроке мы научились:
Урок 16.
Обзор пакетов специального назначения
Задачи линейной оптимизации важны как в фундаментальных, так и в прикладных приложениях математики. В пакете simplex имеется небольшой, но достаточно представительный набор функций и определений для решения таких задач:
> with(simplex);
Warning, the protected names maximize and minimize have been redefined and unprotected
[basis, convexhull, cterm, deftne_zero, display, dual,feasible, maximize, minimize,pivot, pivoteqn, pivotvar, ratio, setup, standardize ]
Приведем краткое назначение этих функций:
Функции maximize и minimize
Главными из этих функций являются maximize и minimize, оптимизирующие задачу симплекс-методом. Они записываются в следующих формах:
maximize(f, С)
minimize(f, С)
maximize(f , С, vartype)
nrinimize(f , С, vartype)
maximize(f , С,vartype, 'NewC', 'transform')
m'inimize(f , C, vartype, 'NewC', 'transform')
Здесь f — линейное выражение, С — множество или список условий, vartype — необязательно задаваемый тип переменных NONNEGATIVE или UNRESTRICTED, NewC и transform — имена переменных, которым присваиваются соответственно оптимальное описание и переменные преобразования. Ниже даны^примеры применения этих функций:
Прочие функции пакета simplex
Функция basis(C) возвращает базис для системы линейных уравнений С. Например:
> basisC [ х - 2*z+w , z - 2*у - w ] );
[x,z]
Функция convexhull(ps) возвращает выпуклую оболочку множества точек ps:
> convexhum{[0,0],[l,l],[2,-l],[1,1/3],[1,1/2]}):
[[0,0],[2,-1],[1, 1]]
Для определения констант для системы линейных уравнений или неравенств служит функция cterm(C):
> cterm([2*х+у<=6.7*y-z-3-4]);
[6,7]
Функция define_zero(C) возвращает ближайшее ненулевое значение, зависящее от установки переменной Digits:
Функция display(C) имеет еще и форму display(C,[X, у, z]). Она задает вывод линейных уравнений и неравенств в матричной форме:
Функция dual(f, С, у) имеет следующие параметры: f — линейное выражение y, С множество неравенств и у — имя. Эта функция возвращает сопряженное с f выражение:
> dual( x-y,{2*x+3*y<=5.3*x+6*y<=15},z);
115zl +5z2, {1_<3z1+2z2,-l_<6z1+3z2}
Функция feasible может быть задана в трех формах:
feasible(C)
feasible(C,vartype)
feasible(C,vartype,'NewC','Transform')
Здесь параметр vartype может иметь значения NONNEGATIVE или UNRESTRICTED. Эта функция определяет систему как осуществимую или нет:
> feasible({2*x+3*y<-5, 3*x+6*y<"15}, NONNEGATIVE);
true
> feasib1e({2*x+3*y<-5, 3*х+б*у<—15}, NONNEGATIVE);
false
Если функция возвращает логическое значение true, то заданная система осуществима, а если false — неосуществима, то есть ни при каких значениях переменных не способна удовлетворить записанным неравенствам и равенствам. Функция pivot (С, х, eqn) конструирует новую систему с заданным главным элементом:
Функция pivoteqn(C, var) возвращает подсистему для заданного диагонального элемента С:
> pivoteqnC {_SL1 - 5-3*х-2*у. _SL2 - 4-2*х-2*у}. х );
[_SLl = 5-lx-2y]
Функция pivotvar(f, List) или pivotvar(f) возвращает список переменных, имеющих положительные коэффициенты в выражении для целевой функции:
Функция ratio(C, x) возвращает список отношений, задающих наиболее жесткие ограничения:
Функция setup может иметь три формы:
setup(C)
setup(C, NONNEGATIVE)
setup(C, NONNEGATIVE, 't')
Она обеспечивает конструирование множества уравнений с переменными в левой части:
Последняя функция — standartlze(C) — конвертирует список уравнений (неравенств) в неравенства типа «меньше или равно»:
> standardize({2*x+3*y<-5.3*x+5*yl5});
{2х + Зу<5,Зх + 5у<15,-Зх-5у<-15}
Пакет планиметрии geometry
Пакет геометрических расчетов geometry в системе Maple 7 получил как бы второе рождение число его функций по сравнению с версией этого пакета в системе Maple V R5 возросло в несколько раз. Теперь загрузка пакета возвращает весьма внушительный список из более чем 100 функций:
> with(geometry);
[Appolonius, AreCollinear, AreConcurrent, AreConcyclic, AreConjugate, AreHarmonic, AreOrthogonal, AreParallel, ArePerpendicular, AreSimilar, AreTangent, CirdeQfSimilitude,CrossProduct, CrossRatio, DefinedAs, Equation, EulerCircle, EulerLine, Exterior Angle, ExternalBisector, FindAngle, GergonnePoint, GlideRefledion, HorizontalCoord, HorizontalName, InteriorAngle, IsEquilateral,
IsOnCircle, IsOnLine, IsRightTriangle, MajorAxis, MakeSquare, MinorAxis,NagelPoint, OnSegment, ParallelLine, PedalTriangle, PerpenBisector, PerpendicularLine, Polar, Pole, RadicalAxis, RadicalCenter, RegularPolygon, RegularStarPolygon, SensedMagnitude, SimsonLine, SpiralRotation, StretchReflection, StretchRotation, TangentLine, VerticalCoord, VerticalName,
altitude, apothem, area, asymptotes, bisector, center, centroid, circle, circumcircle, conic, convexhull, coordinates, detail, diagonal, diameter, dilatation, directrix, distance, draw, dsegment, ellipse, excircle, expansion, foci, focus, form, homology, homothety, hyperbola, incircle, inradius, intersection, inversion, line, medial, median, method, midpoint, orthocenter, parabola, perimeter, point, powerpc, projection,
radius, randpoint, reciprocation, reflection, rotation, segment, sides, similitude, slope, square, stretch, tangentpc, translation, triangle, vertex, vertices}
Этот пакет содержит средства расчета основных параметров ряда геометрических объектов. Для каждого объекта возможно задание различных исходных величин, так что пакет охватывает практически все виды классических геометрических расчетов на плоскости. Несомненно, этот пакет заинтересует всех, кто работает в области геометрии и смежных областях.
Обратите внимание на то, что многие функции этого пакета вовсе не рисуют на экране соответствующие фигуры, а лишь выполняют типовые геометрические расчеты. Разумеется, в дальнейшем, используя результаты этих расчетов, можно построить соответствующую фигуру с помощью графических функций.
Пример применения расчетных функций пакета geometry
К сожалению, описание всех функций этого пакета потребует привести справочные данные практически по всей геометрии на плоскости, объем которых намного превышает объем данной книги. Учитывая идентичность идеологии при работе с функциями этого пакета, большинство из которых имеет вполне прозрачные имена (правда, англоязычные), работу с пакетом поясним на примере одной из функций — circle. Она позволяет математически задать окружность и определить все ее геометрические параметры. Функция может иметь несколько форм записи. Например, в форме:
circle(c,. [А. В. С], n, 'centername'=m)
она определяет построение окружности, проходящей через три точки А, В и С. Необязательный параметр n — список с именами координатных осей. Параметр ' centername' =m задает имя центра.
В форме circle(c. [А. В], n, 'centername'=m) задается окружность, проходящая через две точки А и В, а в форме circle(c, [A, rad], n, 'centername'=m) задается окружность, проходящая через одну точку А с заданным (и произвольным) радиусом rad и центром с. Наконец, функция circle в форме circle (с, eqn, n, 'centername'=m) позволяет задать окружность по заданным уравнению eqn и центру с. Проиллюстрируем применение функции circle на следующих примерах. Зададим характеристические переменные:
> EnvHorizontalName := m: _EnvVertlcalNane :=n;:
Определим окружность c1, проходящую через три заданные точки А, В и С с указанными после их имен координатами, и найдем координаты центра этой окружности:
Далее найдем радиус окружности:
и уравнение окружности, заданное в аналитическом виде:
Наконец, с помощью функции detail получим детальное описание окружности:
Заинтересованный в таких расчетах читатель может самостоятельно ознакомиться с другими функциями аналогичным образом, тем более, что в справочной системе этого пакета имеется множество примеров работы с его функциями.
Визуализация геометрических объектов с помощью пакета geometry
Одно из важных достоинств пакета geometry - возможность наглядной визуализации различных геометрических понятий, например графической иллюстрации доказательства теорем или геометрических преобразований на плоскости. Проиллюстрируем это на нескольких характерных примерах, заодно показывающих технику работы с рядом функций этого пакета.
Рисунок 16.1 показывает построение из множества окружностей фигуры - кардиоиды. Вопреки обычному построению этой фигуры, используется алгоритм случайного (но удовлетворяющего требованиям построения данной фигуры) выбора положений центров и радиусов окружностей.
Рис. 16.1. Построение кардиоиды из окружностей
Рисунок 16.2 дает графическую иллюстрацию к одной из теорем Фейербаха. Здесь эффектно используются средства выделения геометрических фигур цветом, что, увы, нельзя оценить по книжной черно-белой иллюстрации.
На следующем рисунке (рис. 16.3) показано построение фигуры, образованной вращением множества квадратов относительно одной из вершин. Это хороший пример применения функций point, square,.rotation и draw из пакета geometry.
Рисунок 16.4 показывает гомологические преобразования квадрата. Заинтересовавшийся читатель может легко разобраться с деталями простого алгоритма этой программы.
ПРИМЕЧАНИЕ
Обратите особое внимание на последний параметр в функции draw. Он задает построение титульной надписи с заданными шрифтом и размером символов. Сравните титульные надписи на рис. 16.4 и 16.3, где титульная надпись сделана шрифтом, выбранным по умолчанию. Приятно, что в обоих случаях нет преград для использования символов кириллицы и создания надписей на русском языке.
Наконец, на рис. 16.5 показан пример построения трех окружностей, имеющих две общие точки. Обратите внимание на вывод надписей «о», «ol» и «о2», указывающих положение центров окружностей на рисунке.
Рис. 16.2. Графическая иллюстрация к теореме Фейербаха
Рис. 16.3. Фигура, полученная вращением квадрата
Рис. 16.4. Гомологические преобразования квадрата
Рис. 16.5. Три окружности, имеющие две общие точки
Множество примеров применения всех функций пакета geometry дано в справочной системе Maple 7. Рекомендуется просмотреть те из них, которые нужны вам.
Пакет стереометрии geom3d
Помимо существенного расширения пакета geometry в систему Maple 7 введен новый геометрический пакет geonfld. Он предназначен для решения задач в области трехмерной геометрии. При загрузке пакета появляется доступ к большому (свыше 140) числу новых функций:
> with(geom3d);
[Archimedean, AreCollinear, AreConcurrent, AreConjugate, AreCoplanar, AreDistinct, AreParallel, ArePerpendicular, AreSameObjects, AreSamePlane, AreSkewLines, DefinedAs, DirectionRatios, Equation,'FindAngle, FixedPoint, GlideReflect, GlideReflection, GreatDodeeahedron, Greatlcosahedron, GreatRhombicuboctahedron, GreatRhombiicosidodecahedron,
GreatStellatedDodecahedron,HarmonicConjugate,
HexakisIcosahedron,Hexakis Octahedron, JnRadius,
Is Archimedean, IsEquilateral, IsFacetted,
IsOnObject, IsQuasi,hRegular,
IsRightTriangletIsStellated,IsTangent,
MidRadius, NormalVector, OnSegment, ParallelVector, PentagonalHexacontahedron, PentagonallcositetrahedronjPentakisDodecahedron, QuasiRegularPolyhedron,
RadicalCenter, RadicalLine,RadicalPlane, RegularPolyhedron, RhombicDodecahedron, RhombicTriacontahedron, Rotatory Reflect, Rotatory Reflection, ScrewDisplace, ScrewDisplacement, SmallRhombicubactahedron, SmallRhombiicosidodecahedron, SmallStellatedDodecahedron, SnubCube, SnubDodecahedron, StereographicProjection, StretchRotate, TangentPlane,
TetrakisHexahedron, TrapezoidalHexecontahedron, Trapezoidallcositetrahedron, Triakislcosahedron, TriakisOctahedron, TriakisTetrahedron, TruncatedCuboctahedron, TruncatedDodecahedron,TruncatedHexahedron, Truncatedlcosahedron, Truncatedlcosidodecahedron, TruncatedOctahedron, TruncatedTetrahedron, altitude, area, center, centroid, circle, coordinates, cube,
cuboctahedron, detail, dilate, distance, dodecahedron, draw, dsegment, duality,faces, facet, form, gtetrahedron, hexahedron, homology, homothety, icosahedron, icosidodecahedron, identity, incident, intersection, inverse, inversion, line, midpoint, octahedron, parallel, parallelpiped, plane, point, polar, pole, powerps, projection, radius, rqndpoint, reflect^ reflection, rotate, rotation, schlafli, segment, sides, sphere, stellate, tetrahedron, tname, transform, translate, translation, transprod, triangle, unit, valuesubs, vertices, volume, xcoord, xname, ycoord, yname, zcoord, zname ]
Функции этого пакета обеспечивают задание и определение характеристик и параметров многих геометрических объектов: точек в пространстве, сегментов, отрезков линий и дуг, линий, плоскостей, треугольников, сфер, регулярных и квазирегулярных полиэдров, полиэдров общего типа и др. Для описания функций этого пакета пришлось бы воспроизвести обширное справочное руководство по стереометрии. В то же время назначение функций ясно из их названия, а характер применения тот же, что для функций описанного выше пакета geometry.
Пример применения пакета geom3d
Учитывая сказанное, ограничимся единственным примером применения этого пакета (рис. 16.6).
Рис. 16.6. Иллюстрация применения пакета geom3d
Напоминаем, что цель пакета не в построении рисунков геометрических фигур, а в аналитическом представлении объектов в пространстве. Поэтому в обширной базе данных справочной системы по этому пакету вы встретите очень много рисунков.
Пакет для работы с алгебраическими кривыми algcurves
Пакет для работы с алгебраическими кривыми прекрасно дополняет возможности геометрических пакетов. При обращении к нему он дает доступ к полутора десяткам функций:
> restart;with(algcurves);
[Weierstrassform, differentials, genus, homogeneous, homology, integral_basis, isjiyperelliptic, j_invariant, monodromy,parametrization ,periodmatrix,plot_knot,puiseux, singularities ]
Ввиду важности функций пакета и их сравнительно небольшого числа приведем полную форму записи функций и их назначение:
Построение алгебраических кривых класса knot
Функция plot_knot позволяет строить одну или несколько алгебраических кривых — узлов. Пример построения целого семейства узлов показан на рис. 16.7.
Рис. 16.7. Семейство узлов
Для лучшего обзора таких кривых рекомендуется воспользоваться возможностью вращения трехмерных фигур мышью для уточнения угла, под которым рассматривается фигура — в нашем случае семейство алгебраических кривых. Построение на рис. 16.7 выполняется довольно медленно — даже на компьютере с процессором Pentium III 600 МГц оно занимает около минуты.
Новая функция Maple 7 plot_real_curve
В пакет расширения algcurves добавлена новая функция импликативной графики plot_real_curve. Она строит алгебраическую кривую для действительной части полиномиального выражения и записывается в виде:
plot_real_curve (p, х, у, opt)
Функция имеет следующие параметры:
Функция plot_real_curve вычисляет и строит алгебраическую кривую по точкам и может (при использовании параметра opt) строить стрелки-векторы по касательным и перпендикулярным направлениям к каждой точке или к части точек. Возможно задание разных цветов для кривой и стрелок. Применение функции plot_real_curve показывает рис. 16.8.
При задании построения стрелок касательные стрелки строятся по внешней части кривой и указывают направление ее построения. Перпендикулярные стрелки строятся по внутренней части кривой. Нетрудно заметить, что острие стрелки указывается только для длинных стрелок. Короткие стрелки острия не имеют и отображаются как отрезки прямых линий. Построение стрелок оказывается не вполне точным, если разнятся масштабы графика по горизонтали и вертикали, что можно подметить при внимательном рассмотрении графика на рис. 16.8, сверху.
Рис. 16.8. Примеры применения функции plot_real_curve
Пакет функций теории графов networks
Графы широко используются при решении многих прикладных и фундаментальных задач. Пользователей, занятых решением таких задач, наверняка порадует пакет networks, содержащий весьма представительный набор функций:
> with(networks);
Warning, the names diameter, draw and vertices have been redefined[acycpoly, addedge, addvertex, adjacency, allpairs, ancestor, arrivals,bicomponents, charpoly, chrompoly, complement, complete, components, connect, connectivity, contract, countcuts, counttrees, cube,cycle, cyclebase, daughter, degreeseq, delete, departures, diameter,dinic, djspantree, dodecahedron, draw, duplicate, edges, ends,eweight,flow,flowpoly,fundcyc, getlabel, girth, graph, graphical,gsimp,gunion,
head, icosahedron, incidence, incident, indegree, induce, isplanar,maxdegree, mincut, mindegree, neighbors, new, octahedron, outdegree,path,petersen, random, rank, rankpoly, shortpathtree, show,shrink, span, spanpoly, spantree, tail, tetrahedron, tuttepoly, vdegree,vertices, void, vweight]
Объективности ради надо отметить, что в Maple 7 из этого пакета удалено несколько второстепенных функций, которые были в версии Maple V R5. Теория графов используется достаточно широко даже при решении прикладных задач — например, для вычисления оптимальных маршрутов движения железнодорожных составов, наиболее целесообразной раскройки тканей и листов из различных материалов и т. д.
Примеры применения пакета networks
Рассмотрим некоторые избранные функции этого пакета, которые наиболее часто используются при работе с графами. Детали синтаксиса функций можно найти в справочной базе данных Maple 7.
Функции создания графов:
Функции с типовыми возможностями графов:
Каждая из этих команд имеет одну или несколько синтаксических форм записи. Их можно уточнить с помощью справочной системы. С ее помощью можно ознакомиться и с назначением других функций этого обширного пакета. Проиллюстрируем его применение на нескольких типичных примерах.
На рис. 16.9 показан пример создания Графа, имеющего четыре вершины, и графа Петерсона с выводом их графиков графической функцией draw.
На рис. 16.10 показан другой пример работы с графами — построение графа функцией complete и затем его преобразование путем удаления части вершин. Исходный и преобразованный графы строятся функцией draw.
В третьем примере (рис. 16.11) граф формируется по частям — вначале задается пустой граф функцией new, а затем с помощью функций addvertex и addedge в него включаются вершины и ребра. Далее функция connect соединяет вершину а с вершиной с, делая граф замкнутым. Функция draw строит сформированный таким образом граф, а функции head и tail используются для выявления «голов» и «хвостов» графа.
В четвертом примере, представленном на рис.,16.12, показано создание графа G2 (его изображение было приведено на рис. 16.10) с вычислением для этого графа максимального потока от вершины 1. Обратите внимание, что в параметрах функции flow, использованной для этого, заданы две переменные: eset — принимает значение множества с ребрами, по которым проходит максимальный поток, и соmр — принимает значение множества, в котором содержатся вершины, по которым проходит максимальный поток. Значения этих переменных выведены в области вывода. В заключительной части этого примера показано применение функции shortpathtree, ищущей наиболее короткий путь от вершины 1 до других вершин.
Рис. 16.9. Построение графов
Рис. 16.10. Преобразование графа удалением части вершин
Рис. 16.11. Формирование графа и определение его «голов» и «хвостов»
Рис. 16.12. Пример вычисления максимального потока и наиболее коротких путей для заданного графа
Получение информации о графе
Еще один пример, приведенный ниже, иллюстрирует работу функции show, выдающей таблицу с полной информацией о графе, созданном функцией complete:
Разумеется, приведенные примеры далеко не исчерпывают всех задач, которые можно решать с применением графов. Но они наглядно демонстрируют, что для большинства пользователей пакет networks превращает графы из окутанного ореолом таинственности модного средства в простой рабочий инструмент.
Пакет статистических расчетов stats
Мир математических систем сейчас насыщен статистическими системами, например такими, как Statistica или StatGraphics. Они прекрасно приспособлены для решения задач статистической обработки обширных массивов данных. Тем не менее проведение статистических расчетов в Maple 7 возможно и в ряде случаев весьма целесообразно — например, когда они являются частью исследовательского проекта.
Пакет stats для таких расчетов представлен всего двумя многоцелевыми статистическими функциями:
stats[subpackage, functionj(args)
subpackage[function](args)
Однако благодаря специальной форме задания параметров (в частности, в виде подпакетов — subpackages) возможно вычисление самых разнообразных статистических функций. Имеются следующие подпакеты:
Генерация случайных чисел с заданным распределением
Основой этого подпакета является функция random:
random[distribution] (quantity,unifarm,method)
или
stats[random, distribution] (quantity,unifofm,method)
где
Возможно задание дискретных и непрерьвных распределений, например binomiald --дискретное биномиальное распределение, discreteumform — дискретное 'равномерное распределение, empirical — дискретное эмпирическое распределение, poisson — дискретное распределение Пуассона, beta — бета-распределение, cauchi — .распределение Коши, exponential — экспоненциальное и др. (есть функции практически для всех известных распределений).
Следующие примеры демонстрируют технику получения случайных чисел с заданным законом распределения;
Графика статистического пакета stats
Статистический пакет stats имеет свою небольшую библиотечку для построения графиков. Она вызывается в следующем виде:
stats[statplots, function](args)
или
statplots[function](args)
Вид графика задается описанием function: boxplot, histogram, notehedbox, quantile, quantile2, scatterld, scatter2d и symmetry. Данные функции обеспечивают построение типовых графиков, иллюстрирующих статистические расчеты. В качестве примера на рис. 16.13 показано задание множества случайных точек и его отображение на плоскости в ограниченном прямоугольником пространстве.
Рис. 16.13. Создание случайных точек и построение их на плоскости
По равномерности распределения точек можно судить о качестве программного генератора случайных чисел, встроенного в Maple 7.
Довольно часто для визуализации вычислений используется построение гистограмм. Для их создания пакет stats имеет функцию histogram:
stats[statplotsб histogram](data) :
statplots[h1stogram](data)
stats[statplots, histogram[scale](data)
statp1ots[histogram[scale](data)
Здесь data — список данных, scale — число или описатель. Детали применения этой простой функции поясняет рис. 16.14. На нем дан два примера — построение столбцов заданной ширины и высоты и построение гистограммы 100 случайных чисел с нормальным распределением.
Рис. 16.14. Построение гистограмм
Обратите внимание на то, что для второго примера гистограмма будет несколько меняться от пуска к пуску, так как данные для ее построения генерируются случайным образом.
Регрессионный анализ
Под регрессионным анализом (или просто регрессией) обычно подразумевают нахождение некоторой формальной аналитической зависимости, которая приближенно (по критерию минимума среднеквадратической ошибки) аппроксимирует исходную зависимость. Последняя чаще всего бывает представлена некоторым набором точек (например, полученных в результате эксперимента).
Для проведения регрессионного анализа служит функция fit, которая вызывается следующим образом:
stats[fit,leastsquare[vars,eqn.parms]](data)
или
fit[leastsquare[vars,eqn.parms]](data)
где data — список данных, vars — список переменных для представления данных, eqn — уравнение, задающее аппроксимирующую зависимость (по умолчанию линейную), parms — множество параметров, которые будут заменены вычисленными значениями.
На приведенных ниже примерах показано проведение регрессии с помощью функции fit для зависимостей вида у(х):
> with(stats):Digits:=5;
Digits := 5
> fit[leastsquare[[x,y]]]([[l,2,3,4].[3,3.5,3.9,4.6]]);
у = 2.4500 + .52000 х
>fit[leastsquare[[x,y], y=a*x"2+b*x+c]]([[l.2,3.4],[1.8,4.5,10,16.5]]);
2
у = .95000 х + .21000 х + .55000
В первом примере функция регрессии не задана, поэтому реализуется простейшая линейная регрессия, и функция fit возвращает полученное уравнение регрессии для исходных данных, представленных списками координат узловых точек. Это уравнение аппроксимирует данные с наименьшей среднеквадратичной погрешностью. Во втором примере задано приближение исходных данных степенным многочленом второго порядка. Вообще говоря, функция fit обеспечивает приближение любой функцией полиномом.
Рисунок 16.15 показывает регрессию для одних и тех же данных Полиномами первой, второй и третьей степени с построением их графиков и точек исходных данных. Нетрудно заметить, что лишь для полинома третьей степени точки исходных данных точно укладываются на кривую полинома, поскольку в этом случае (4 точки) регрессия превращается в полиномиальную аппроксимацию. В других случаях точного попадания точек на линии регрессии нет, но обеспечивается минимум среднеквадратической погрешности для всех точек — следствие реализации метода наименьших квадратов.
Функция fit может обеспечивать регрессию и для функций нескольких переменных. При этом надо просто увеличить размерность массивов исходных данных. В качестве примера ниже приведен пример регрессии для функции двух переменных:
>f:=fit[1eastsquare[[x,y,z],z=-a+b*x+c*y,{a,b,c}]]\
([[l,2,3.5,5],[2.4,6,8.8],[3,5,7,10,Weight(15,2)]]):
f:=z=l + 13/3x-7/6y
> fa:=unapply(rhs(f),x,y);
fa:=(x,y)->l + 13/3x-7/6y
z > fa(1.,2.);
2.999999999
>fa(2,3):
37/6
Рис. 16.15. Примеры регрессии полиномом и первой, второй и третьей степени
В данном случае уравнение регрессии задано в виде z = a + bx + cy. Обратите внимание на важный момент в конце этого примера — применение полученной функции регрессии для вычислений или построения ее графика. Прямое применение функции f в данном случае невозможно, так как она представлена в не вычисляемом формате. Для получения вычисляемого выражения она преобразуется в функцию двух переменных fa(x,y) путем отделения правой части выражения для функции f. После этого возможно вычисление значений функции fa(x,y) для любых заданных значений х и у:
К сожалению, функция fit неприменима для нелинейной регресии. При попытке ее проведения возвращается структура процедуры, но не результат регресии — см. пример ниже:
Для проведения нелинейной регрессии произвольного вида нужно обратиться к средствам нового пакета CurveFitting, включенного в состав Maple 7. Этот пакет был описан в главе 14.
Пакет для студентов student
Пакет student — это, несомненно, один из пакетов, наиболее привлекательных для студентов и аспирантов. В нем собраны наиболее распространенные и нужные функции, которые студенты университетов и иных вузов обычно используют на практических занятиях, при подготовке курсовых и дипломных проектов. Набор этих функций, разумеется, не ограничивается «скромными» потребностями студентов — просто это наиболее распространенные функции, в основном относящиеся к математическому анализу. Наряду со студентами эти функции широко используют профессионалы-математики и ученые, применяющие математические методы в своей работе.
В этом пакете имеется почти полсотни функций:
Функции интегрирования пакета student
В пакетах Maple 7 можно найти множество специальных функций для вычисления интегралов различного типа. Например, в пакете student имеются следующие функции:
Ниже дан пример применения функции Tripleint пакета student:
Объективности ради надо отметить, что вычисление тройного интеграла с помощью функции Tripleint занимает много времени (около 20 с на компьютере с процессором Pentium II 350 МГц). 'Однако тот же результат (см. последний пример) получается за доли секунды при использовании тройного интегрирования с помощью функции int.
Иллюстративная графика пакета student
Пакет student имеет три графические функции для иллюстрации интегрирования методом прямоугольников:
Здесь f (x) — функция переменной х, х — переменная интегрирования, а — левая граница области интегрирования, b — правая граница области интегрирования, n — число показанных прямоугольников, color — цвет прямоугольников, о — параметры (см. ?plot,options).
Рис. 16.16. Примеры иллюстративной графики пакета student
В этих функциях прямоугольники строятся соответственно слева, справа и по середине относительно узловых точек функции f(x), график которой также строится. Кроме того, имеется функция для построения касательной к заданной точке х = а для линии, представляющей f(x):
showtangent (f(x), x = а)
Рисунок 16.16 показывает все эти возможности пакета student. Три вида графиков здесь построены в отдельных окнах.
Графические средства пакета student ограничены. Но они предоставляют как раз те возможности, которые отсутствуют в основных средствах построения графиков.
Пакет для работы с тензорами tensor
Этот пакет впервые появился в реализации Maple V R5. Он дает средства для работы с тензорами и вычислениями, используемыми в общей теории относительности. В нем использован специальный тип данных tensor_type в виде таблиц с двумя полями: компонентов и характеристик индексов. Поле компонентов — массив с размерностью, эквивалентной рангу объекта. Поле характеристик индексов задается списком чисел 1 и -1. При этом 1 на i-й позиции Означает, что соответствующий индекс контрвариантный, а -1 — что он ковариантный.
Процедура tensor_type возвращает логическое значение true, если ее первый аргумент удовлетворяет свойствам тензора, и false, если он этому свойству не удовлетворяет.
Каждому тензору соответствуют еще две таблицы. Таблица коэффициентов вращения задает коэффициенты вращения Ньюмена—Пенроуза, которые вычисляются функцией tensor[npspin] и индексируются именами греческих букв alpha, beta, gamma, epsilon и т. д. Другая таблица (компонент кривизны) содержит компоненты кривизны Ньюмена—Пенроуза. Они представлены тремя полями: полем Phi в виде массива размерности (0..2.0..2) с компонентами Риччи, поле Psi с массивом размерности (0. .4) с компонентами Вейля и полем R со скаляром Риччи.
Объявление:
> with(tensor);
[Christoffell, Christoffel2, Einstein, Jacobian, Killing_eqns, LevijCivita, Lie_diff, Ricci, Ricciscalar, Riemann, RiemannF, Weyl, act, antisymmetrize, change_basis, commutator,
compare, conj, connexF, contract, convertNP, cov_diff,
create,dlmetric, d2metric, directional_diff, displayGR, display_allGR, dual, entermetric, exteriorjiiff, exterior_prod, frame,geodesic_eqns, get_char, get_compts,get_rank, init, invars, invert, lin_com, lower, npcurve, npspin, partial_diff, permute_indices, petrov, prod, raise, symmetrize, tensorsGR, transform}
дает доступ к следующим функциям пакета:
Примеры применения этого пакета можно найти в справочной базе данных системы. Пакет представляет интерес для физиков-теоретиков, работающих в области общей теории относительности и ее приложений/Для них (но не для большинства пользователей) приведенные данные полезны и понятны.
Пакет Domains
Этот небольшой пакет служит для создания доменов — таблиц операций для вычислений. При его загрузке появляется сообщение о переопределениях объектов и список из всего лишь шести функций:
>restart;with(Domains):
Domains version 1.0
Initially defined domains are Z and Q the integers and rationale Abbreviations, e.g. DUP for DenseUnivariatePolynomial, also made Warning, the protected names Array, Matrix and Vector have been redefined and unprotected [Array, Matrix, Matrixlnverse, Vector, init, show]
Пакет допускает применение следующих конструкций:
Domains[domain] Doma1ns[evaldomains]
Domains[example] Domains[coding]
Приведенный ниже пример поясняет создание и использование доменов Q (для рациональных
данных) и Z (для целочисленных данных):
> Q['+'](l/2,2/5,3/8);
51/40
> Z[Gcd](660,130);
10
Следующая операция показывает, что домен Z является таблицей:
> type(Z,table);
true
А функция show позволяет вывести полный перечень всех операций, доступных для домена Z:
> show(Z,operations);
Signatures for constructor Z'
note: operations prefixed by -- are not available
*: (Integers,Z) ->Z
* :(Z,Z*) ->Z
+ :(Z,Z*) ->Z
-: (Z,Z) -> Z'
- :Z ->Z
0:Z
1:Z
< :(Z,Z) -> Boolean
<= : (Z.Z) -> Boolean
<> : (Z.Z) -> Boolean
=:(Z.Z) -> Boolean
>: (Z.Z) -> Boolean
>-: (Z.Z) -> Boolean
Abs : Z ->Z
Characteristic : Integers
Coerce : Integers-> Z
Div : (Z.Z) -> Union(Z,.FAIL)
EuclideanNorm : Z -> Integers
Factor : Z -> [Z,.[[Z,Integers]*]]
Gcd : Z* -> Z
Gcdex : (Z,Z,Name) ->Z
Gcdex : (Z,.Z,Name,Name) -> Z
Input : Expression -> Union(Z,.FAIL)
Inv : Z -> Union(Z,FAIL)
Lcm : Z* -> Z
Max : (Z,Z*) -> Z
Min : (Z,.Z*)-> Z
Modp : (Z,.Z) ->Z
Mods : (Z.Z)--> Z
ModularHoraomorphlsm : () -> (Z -> Z.Z)'
Normal : Z -> Z
Output : Z -> Expression
Powmod : (Z,Integers,Z) -> Z
Prime : Z -> Boolean
Quo : (Z,.Z,Name) ->Z
Quo : (Z,.Z) -> Z
Random : О ->Z
RelativelyPrime : (Z,.Z) -> Boolean'
Rem : (Z,.Z,.Name)-> Z
Rera : (Z,Z) -> Z
Sign : Z -> UNIONU,.-l,0)
SmallerEuclideanNorm : (Z,.Z) -> Boolean
Sqrfree : Z ->[Z,.[[Z,.Integers]*]]
Type : Expression -> 'Boolean'
Unit : Z -> Z
UnitNormal : Z -> [Z,.Z,.Z]
Zero : Z -> Boolean
^ : (Z,Integers) -> Z.
Домены позволяют передавать в качестве параметра процедур набор функций в виде единого целою, что и объясняет название этих объектов. Предполагается, что это может привести к заметному сокращению кодов программ вычислений в будущих реализациях системы Maple. Пока же возможности доменов скорее выглядят как очередная экзотика, чем как реальное средство для оптимизации вычислений. Потребуется время, чтобы показать, что это не так.
Обзор пакетов узкого назначения
Мы уже не раз обращали внимание читателя на выборочный характер описания системы Maple 7 в данной книге. Хотя она и является одной из самых полных книг по данной системе, книга не претендует на роль детального справочника по Maple 7: Более того, такого справочника в виде книги нет и, вероятно, учитывая быстрые темпы модернизации программы, так и не будет. Для подобного описания Maple пришлось бы подготовить многотомное издание, охватывающее практически все области математики.
Учитывая это, мы вынуждены отказаться от попытки описать ряд пакетов специального назначения. Такими пакетами интересуются серьезные специалисты в области математики и им (не без труда, разумеется) под силу разобраться с назначением функций таких пакетов и примерами их применения, приведенными в справочной системе Maple 7. В связи с выше сказаннным, мы ограничимся перечислением оставшихся неизученными пакетов.
Пакет функций теории чисел numtheory
В этом обширном пакете собрано 46 функций, относящихся к теории чисел:
> with(numtheory);
Warning, the protected rame order has been redefined and unprotected
[GIgcd, bigomega, cfrac, cfracpol, cyclotomic, divisors ;factorEQ,factorset,fermat, imagunit, index, integral_basis, invcfrac, invphi, issqrfree,jacobi, kronecker, Я,legendre, mcombine, mersenne, minkowski, mipolys, mlog, mobius, mroot, msqrt, nearestp, nthconver, nthdenom, nthnumer, nthpow, order,pdexpand, ф,n,pprimroot,primroot, quadres, rootsunity, safeprime, o,sq2factor, sum2sqr, т,thue ]
В новой реализации Maple 7 число функций было уменьшено. Большинство функций этого пакета достаточно просты и заинтересовавшийся читатель вполне в состоянии провести их тестирование самостоятельно.
Пакет для работы с р-адическими числами padic
Этот весьма специфический пакет содержит следующие функции для работы с р-адическими числами:
> with(padic);
[arccoshp, arccosp,arccothp, arccotp, arccschp, arccscp, arcsechp, arcsecp, arcsinhp, arcsinp, arctanhp, arctanp, coshp, cosp, cothp, cotp, cschp, cscp, evalp, expansion, expp, Icoeffp, logp, orderp, ordp, ratvaluep, rootp, sechp, seep, sinhp,sinp, sqrtp, tanhp,tanp, valuep]
В Maple 7 число функций этого пакета увеличено почти в четыре раза. Однако ввиду специфичности данных функций их изучение мы оставляем за читателем для самостоятельной работы.
Пакет для работы с гауссовыми целыми числами Gausslnt
Гауссово целое число — это число вида а + I*b, где а и b — любые целые рациональные числа. Таким образом, они образуют решетку всех точек с целыми координатами на плоскости комплексных чисел. Пакет Gausslnt содержит достаточно представительный набор функций для работы с этими числами:
> with(GaussInt):
Warning, the name GIgcd has been redefined
[GIbasis, Glchrem, GIdivisor, GIfacpoly, GIfacset, GIfactor, GIfactors, GIgcd, GIgcdex, Glhermite, Glissqr, Gllcm, GImcmbine, GInearest, GInodiv, GInorm, Glnormal, Glorder, GIphi, GIprime, Glquadres, Glquo, GIrem, GIroots, GIsieve, GIsmith ,GIsqrfree, GIsqrt, Glunitnormal ]
Нетрудно заметить, что в этот набор входят уже известные числовые функции, к именам которых добавлены буквы 61. Например, функция GIfactor(c) раскладывает гауссово число (в том числе комплексное) на простые множители, GIgcd(cl, с2) находит наибольший общий делитель гауссовых чисел cl и с2 и т. д. Функции этого пакета достаточно просты, так что ограничимся приведенными примерами. Гауссовы целые числа в большинстве научно-технических расчетов встречаются крайне редко. Так что этот пакет рассчитан на специалистов-математиков, работающих в области теории чисел.
Пакет алгебры линейных операторов Ore_algebra
Пакет Ore_algebra содержит набор функций алгебры линейных операторов, состав которого виден после обращения к пакету:
> with(0re_algebra);
[OrejoJDESol, Ore_to_RESol, Orejojdiff, Ore_to_shift, annihilators, applyopr, diff_algebra, poly, algebra, qshiji_algebra, rand_skew_poly, shift_algebra, skew_algebra, skewjslim, skewjgcdex, skewjydiv, skewjxrwer, skew_prem, skew_product]
Этот пакет поддерживает решение задач в области алгебры линейных операторов.
Инструментальный пакет для линейных рекуррентных уравнений LREtools
Этот пакет полезен математикам, часто использующим рекуррентные отношения и формулы. Он дополняет функцию rsolve основной библиотеки и содержит следующие функции: :
> with(LREtools):
[REcontent, REcreate, REplot, REprimpart, REreduceorder, REtoDE,REtodelta, REtoproc, autodispersion, constcoeffsol,
5,dispersion, divconq, firstlin, hypergeomsols, polysols,ratpolysols, riccati, shift]
С назначением функций этого пакета можно познакомиться по справочной системе Maple 7.
Пакет функций дифференциальных форм difforms
В пакете дифференциальных форм содержится следующий ряд функций:
> with(difforms);
[&^, d, defform,formpart,parity, scalarpart, simpform, wdegree]
Демонстрационные материалы по применению этого пакета входят в поставку Maple 7.
Пакет для работы с рациональными производящими функциями genfunc
В пакете genfunc, предназначенном для работы с производящими функциями, содержатся следующие средства:
> with(genfunc);
[rgf_charseq, rgf_encode, rgf_expqnd, rgfjindrecur, rgfjiybrid, rgfjiorm, rgf_pfrac, rgf_relate, rgf_sequence, rgf_simp, rgfjerm,termscale]
Эти функции представляют специальный интерес для пользователей, работающих в области теории чисел и рациональных функций.
Пакет операций для работы с конечными группами group
Этот пакет содержит довольно представительный набор функций для работы с конечными группами:
> with(group);
[DerivedS, LCS, NormalClosure, RandElement, SnConjugates, Sylow,areconjugate, center,
centralizer, core, cosels, cosrep, derived, elements,groiipmember,grouporder, inter, invperm, isabelian, isnormal,issubgroup, mulperms, normalizer, orbit, parity,
permrep, pres, transgroup ]
Функции этого пакета представляют интерес для математиков, работающих в области конечных групп. Но вряд ли они будут полезны большинству пользователей. Тем не менее, наличие таких функций говорит о полноте функциональных возможностей системы Maple 7.
Пакет для работы с симметрией Ли liesymm
В этом пакете, являющемся реализацией алгоритма Харрисона-Эстабрука, имеется ряд функций:
> withCllesymm);
Warning, the protected name close has been redefined and unprotected
[ c£A,&mod, H,Lie, Lrank, TD, annul, autosimp, close, d, depvars, determine, dvalue, extgen, extvars, getcoeff, getform, hasclosure, hook, indepvars, makeforms, mixpar, prolong, reduce, setup, translate, vfix, wcollect, wdegree, wedgeset, wsubs]
Эти функции достаточно специфичны и могут пригодиться лишь узким специалистам.
Пакет команд для решения уравнений SolveTools
Пакет команд с весьма многообещающим названием SolveTools на самом деле содержит вовсе не средства для решения уравнений, а несколько весьма специфических функций:
> with(SolveTools):
[Basis, Complexity, GreaterComplexity, RationalCoefficients, SortByComplexity]
Функции этого пакета позволяют найти базис выражений, дескрипторы и рациональные коэффициенты. Примеры применения этого пакета очень просты, и с ними несложно ознакомиться. Однако при этом возникает вопрос «Зачем это надо?», который (увы!) остается без ответа.
Пакет для работы с таблицами Spread
Загрузка этого пакета дает средства для работы с таблицами:
> with(Spread);
{CopySelection, CreateSpreddsheet,, EvaluateCurrentSelection, EvahiateSpreadsheet,
GetCellFormula, GetCellVabe, GetFormulaeMatrix, GetMaxCok, GetMaxRows, GetSelection, GetValuesMatrix, lnsertMatrixIntoSelection , IsStale, SetCellFormula, SetMatrix, SetSelection]
Функции пакета не имеют самостоятельного значения и призвана поддерживать работу с электронными таблицами, которая уже была подробно описана. Они дают такие средства, как создание в документе шаблона таблиц, проведение операций по заполнению и редактированию ячеек таблиц, копированию содержимого таблиц в буфер памяти и т. д. Назначение функций достаточно очевидно из их составных имен.
Пакет генерации кодов codegen
Пакет codegen представляет собой набор команд, предназначенных для организации взаимодействия системы Maple 7 с другими программными средствами:
> with(codegen);
[С, GRAD, GRADIENT, HESSIAN, JACOB1AN, cost, declare, dontreturn, eqnjortran, homer, intrep2maple,joinprocs, makeglobal, makeparam, makeproc, makevoid, maple2intrep, optim ize, packargs, packlocals, packparams, prep2trans, renamevar, split, swapargs ]
Этот пакет очень полезен программистам, занимающимся разработкой сложных программных комплексов. Пакет позволяет создавать процедуры на языке Maple 7 и транслировать их в программные модули, записанные на других языках программирования, таких как Фортран или Си.
Пакет создания контекстных меню context
Пакет context служит для создания контекстных меню. Он содержит небольшое число функций:
> with(context):
[buildcontext, clearlabels, defaultcontext,
display, installcontext, restoredefault,
testactions, troubleshoot]
Этот пакет используется довольно редко и в основном пользователями, решающими в среде Maple не вычислительные, а системные задачи. Описание таких задач выходит за рамки данной книги.
Пакет организации многопроцессорной работы process )
Этот узкоспециализированный пакет содержит ряд функций по организации работы на нескольких процессорах:
> with(process):
[block, ey.ec, fork, kill, pclose, pipe, popen, wait ]
Данные функции представляют интерес для пользователей операционной системы UNIX, так что в проблематику данной книги не входят.
Новые пакеты системы Maple 7
Пакет поддержки вычислений с размерными величинами Units
При выполнении большинства вычислений рекомендуется использовать безразмерные величины. Однако в некоторых областях науки и техники, например в физике, широко используются размерные величины, у которых помимо их значения указываются единицы измерения. Довольно развитую поддержку таких расчетов обеспечивает новый пакет расширения системы Maple 7 — Units. Он содержит следующие функции:
> with(Units);
[AddBaseUnit, AddDimension,AddSystem, AddUnit, Converter, GetDimension, GetDimensions, GetSystem, GetSystems, GetUnit, GetUnits, HasDimension, HasSystem, HasUnit, Natural, RemoveDimension, RemoveSystem, Standard, Unit, UseContexts, UseSystem, UsingContexts, UsingSystem]
Большинство функций этого пакета достаточно просты и даже очевидны. В связи с этим ограничимся несколькими характерными примерами их применения:
Пакет для работы с рядами ортогональных многочленов OrthogonalSeries
Новый пакет для работы с рядами ортогональных многочленов OrthogonalSeries имеет довольно представительный набор функций:
> with(OrthogonalSeries);
[Add, Apply Operator, ChangeBasis, Coefficients, ConvertToSum, Copy, Create, Degree, Derivate, DerivativeRepresentation, Evaluate, Getlnfo, Multiply, PolynomialMultiply, ScalarMultiply, SimplifyCoefficients, Truncate]
Поскольку этот пакет представляет интерес в основном для опытных математиков, мы не будем рассматривать его функции (в целом достаточно простые) подробно и ограничимся несколькими примерами. В следующем примере с помощью функции Create создается бесконечный ряд с ортогональным многочленом Эрмита в составе базового выражения ряда:
В другом примере показано представление полиномиального выражения в новом базисе с ортогональными многочленами Чебышева с помощью функции ChangeBasis:
Обратите внимание на то, что новое выражение после исполнения команды Evaluate приняло вид исходного выражения.
Следующий пример демонстрирует создание ряда на основе ортогональных многочленов Чебышева и его копирование с помощью функции Сору:
> S:=Create((-irn/n!,ChebyshevT(n,x));
Вычисление производной от ряда с ортогональными многочленами представлено ниже:
Еще один пример демонстрирует операцию скалярного умножения ряда с помощью функции ScalarMultiply:
Приведенные примеры показывают, что применение этого пакета достаточно просто. С деталями (порой довольно многочисленными) применения функций этого пакета можно познакомиться по справке на данный пакет.
Пакет поддержки стандарта MathML
Для представления математической информации на страницах Интернета в последние годы был создан специальный язык MathML. Пока для большинства пользователей MathML — просто «экзотика», но так как наряду с XML его поддерживает World Wide Web Consortium, его вынуждены поддерживать все солидные фирмы — причем не только создающие системы Компьютерной математики. Среди них такие крупные корпорации, как Intel, IBM и Microsoft. В Maple 7 предусмотрена новая возможность поддержки стандарта MathML 2.O. Для такой поддержки используются MathML Viewer (см. урок 2) и пакет MathML.
Пакет MathML дает минимальный набор функций для использования языка MathML:
> with(HathML);
[Export, ExportContent, ExportPresentation, Import, ImportContent]
В нем всего 5 функций, что позволяет разобрать их достаточно детально. Первые три функции служат для экспорта выражений:
Еще две функции служат для импорта строки в формате MathML и его преобразования в Maple-выражение:
Import(mnlstring) и ImportConterrt(mmlstnng)
Следующий пример наглядно иллюстрирует применение функций пакета расширения MathML для преобразования математического выражения а*х+b вначале в запись на MathML, а затем преобразование этой записи str в Maple-выражение:
> str:=MathML[Export]
( а*х + b );
str := "<math xmlns-http://www.w3.org/1998/Math/MathML'> <semanticsXmrow xrfe f='id5'xmrow xref='id3'xnii xref='idl '>a</mi><mo>⁢</moXml xref='id2'>x</mi></mrowxmo>+</mo><mixref='id4'>b</mi>
</mrowXannotati on-xml encodrag='MathML-Content'><apply id='id5'><plus/><apply id='id3'xtft mes/xci id='idl'> a</ci><ci id='id2'>x</cix/applyxci id='id4'>b</ci></apply>\ </annotation-xml> <annotationencoding='Maple'> a*x+b </annotationx/semantics\ ></math>" > Import(str):a x + b
Этот пример показателен тем, что дает представление о виде записей на языке MathML. Нетрудно заметить, что это достаточно громоздкий язык. Функции, представленные выше, автоматизируют процесс составления записей на языке MathML обычных математических выражений, что делает доступной для обычных пользователей подготовку публикации в Интернете, содержащей математические выражения.
Пакет ХМLTools
В Maple 7 резко расширены средства интеграции с Интернетом. Это сделано не только на уровне специфических для математических приложений средств, таких как рассмотренный выше пакет MathML, но и на уровне обычных языков сети, таких как HTML и XML.
Пакет XMLTools служит для поддержки средств языка XML. Этот пакет предоставляет весьма внушительное число функций для этого:
> with(XMLTools):
[AddAttribute, AddCfiild, AttrCont, AttributeCount, AttributeNames, AttributeValue, AttributeValueWithDefault, Attributes, CData, CDataData, CleanXML, Comment,
CommentText, ConfentModel, ContentModelCount, Element,
ElementName, ElementStatistics,Equal, FirstChild, FromString, GetAttribute, GetChild, HasAttribute, HasChild,
IsCData, IsComment, IsElement, IsProcessinglnstruction,
IsTree, JoinEntities, LastChild, MakeElement, Print, PrintToFile, PrintToString, ProcessAttributes, ProcessingInstruction, ProcessinglnstructionData, ProcessinglnstructionName, ReadFile, RemoveAttribute, RemoveAttributes, RemoveChild, RemoveContent, SecondChild, Select Attributes, SelectContent, SelectRemoveAttributes, SelectRemoveContent, SeparateEntities, Serialize,
Strip Attributes, StripComments, SubsAttribute, SubsAttributeName, ThirdChild, ToString, WriteFile]
Рассмотрение этих средств (как и средств поддержки HTML) далеко выходит за пределы тематики данной книги, хотя многие из них достаточно просты. Поэтому ограничимся единственным примером применения функции Print для получения программы на языке XML соответствующей программе задания выражения, рассмотренного в предшествующем разделе:
> XMLTools[Print](К );
<math xmlns='http://www.w3.org/1998/Math/MathML1>
<semantics>
<mrowxref='id5'>
mrowxref='id3'>
<mixref='idl'>a</mi>
<mo>⁢</mo>
<mixref='id2'>x</mi>
</mrow> <mo>+</mo>
<mixref='ld4'>b</m1>
</mrow>
<annotation-xml encoding='MathML-Content'>
apply id='id5'>
<plus/>
<apply id='id3'>
<times/>
<ci id='idl'>a</ci>
<ci id='id2'>x</ci>
</apply>
<cild='id4'>b</ci>
</apply>
</annotation-xml>
<annotat1on encoding='Maple'>a*x+b</annotation>
</semantics>
</math>
Пакет создания внешних программ ExternalCalling
Пакет ExternalCalling служит для создания внешних программ, записанных на языке Maple (или C++). Состав пакета представлен небольшим числом функций:
Детальное знакомство с этим пакетом мы опускаем. Заинтересованный читатель найдет нужные сведения в справке по этому пакету.
Пакет линейных операторов Linear-Operators
Пакет линейных операторов LmearOperators — новый пакет, содержащий средства для работы с линейными операторами. Состав пакета виден из его вызова:
> with(LinearOperators);
[Apply, DEToOrePoly, FactoredAnnihilator, FactoredGCRD,
FactoredMinimalAnnihilator,FactoredOrePolyToDE, FactoredOrePolyToOrePoly, FactoredOrePolyToRE, IntegrateSols, MinimalAnnihilator, OrePolyToDE, OrePofyToRE, REToOrePoly, dAlembertianSolver}
Набор функций пакета достаточно представителен. Но, поскольку область применения пакета весьма специфична, рекомендуется знакомиться с его возможностями по справкам на его функции и обзорной статье по нему, имеющейся в обзоре новых пакетов расширения Maple 7 (также размещенной в справочной базе данных пакета).
Пакет для работы со случайными объектами RandomTools
Пакет для работы со случайными объектами RandomTools служит для расширения базовых возможностей системы Maple 7 (для большинства пользователей и так вполне достаточных) в части генерации различных случайных объектов, таких как числа различных форматов, векторов, матриц, строковых символов, таблиц и т. д. Они образно названы Flavor (в буквальном переводе «букет (вина)»), что подчеркивает возможную сложность структуры создаваемых объектов.
Пакет представлен небольшим числом основных функций:
> with(RandomTools);
[AddFlavor, Generate, GetFlavor, GetFlavors, HasFlavor, RemoveFlavor]
Однако функции AddFlavor и Generate могут использоваться с внушительным набором типов случайных объектов:
Choose |
complex |
exprseq |
float |
identical |
Integer |
list |
listlist |
negative |
negint |
Nonnegative |
nonnegint |
nonposint |
nonpositive |
nonzero |
Nonzeroint |
polynom |
posint |
positive |
rational |
Set |
structured |
truefalse |
|
|
Действие большинства из них вполне очевидно из названий. Основной функцией является функция генерации случайных объектов Generate(expr). Если тип объекта не задан (например, функцией AddFlavor), то использование функции Generate будет порождать сообщение об ошибке. Примеры применения функций представлены ниже:
Функция GetFlavor(flvr) представляй случайный объект (или объекты) в форме процедуры:
> AddF1avor(a = rand(1..20)):
Generate(a):
15
> GetFlavor(a);
procO localt; global_seed;
_seed := irem(ax_seed,p);
t :=_seed;
toconcats do_seed:=irem(ax_seed,p);
t := sxt + _seed end do ;
irem(t, divisor) +offset endproc
> GetFlavor(integer);
module () localDefaults;
exportMain;
end module
Другая функция GetFlavors () возвращает все типы случайных объектов:
> GetFlavorsO;
a, alphachar, choose, complex, exprseq, float, integer, list, listlist, negative, negint, nonnegative, nonnegint, nonposint, nonpositive, nonzero, nonzeroint, polynom, posint, positive, rational, set, string, truefalse
Функция HasFlavor(flvr) служит для проверки наличия объекта данного типа в списке типов объектов, а функция RemoveFl avor(f1vr) — для удаления типа объекта. Следующие примеры иллюстрируют применение этих функций:
> HasFlavor(a):
true
> RemoveFlavor(a);
> HasFlavor(a):
false
> GetFlavors();
alphachar, choose, complex, exprseq, float, integer, list, listlist, negative, negint, nonnegative, nonnegint, nonposint, nonpositive, nonzero, nonzeroint, polynom, posint, positive, rational, set, string, truefalse
Обратите внимание на то, что после уничтожения объекта типа а он исчез из списка, выводимого функцией GetFlavors. Этот пакет, несмотря на довольно специфические возможности, наверняка будет полезен тем читателям, которые всерьез заняты реализацией «продвинутых» методов Монте-Карло, основанных на моделировании случайных объектов и ситуаций. Он служит серьезным дополнением к пакету статистических расчетов stats, описанному в этом уроке выше.
Пакет для работы со списками ListTools
Новый пакет ListTools содержит ряд полезных команд для работы со списками. Их набор представлен ниже:
> with(ListTools):
Warning, the assigned name Group now has a global binding
[BinaryPlace, BinarySearch, Categorize, DotProduct, FindRepetitions, Flatten, FlattenOnce, Group, Interleave, Join, JoinSequence, MakeUnique, Pad, PartialSums, Reverse, Rotate, Sorted, Split, Transpose ]
Пакет содержит набор известных функций для работы со списками, например скалярного умножения списков, их обращения, транспонирования, поворота, объединения и т. д. Ограничимся примером на вычисление скалярного произведения векторов:
> L := [0., .84, .91, .14, -.76, -.96, -.28, .66, .99, .41, -.54]:
L := [0., .84, .91, .14, -.76, -.96, -.28, .66, .99, .41, -.54]
> М := [1., .54, -.42, -.99, -.65, .28, .96, .75, -.15, -.91, -.84];
М:= [ 1., .54, -.42, -.99, -.65, .28, .96, .75, -.15, -.91, -.84]
> DotProduct(L, L):
5.0063
> DotProduct(L, M):
.3162
Другие новые пакеты, CurveFitting и LinearFunctionalSystem, мы рассмотрели ранее достаточно подробно (см. уроки 14 и 15). В целом надо отметить, что состав пакетов Maple 7 существенно расширен по сравнению с предшествующими версиями системы. В то же время все пакеты, вошедшие в состав Maple 6, сохранены в новой версии программы — Maple 7, что гарантирует полную совместимость с ней. Практически это было подтверждено проверкой всех (а их многие сотни) примеров применения системы Maple 6 применительно к новой версии Maple 7.
Что нового мы узнали?
В этом уроке мы научились:
Урок 17.
Примеры решения научно-технических задач
Выше при изложении данного учебного курса приводились многие сотни примеров применения системы Maple 7. При этом намеренно подбирались достаточно простые примеры, занимающие немного места и не требующие чрезмерных ухищрений для решения.
Многие читатели полагают, что системы компьютерной математики хорошо работают на таких простых примерах, но от них мало толку при решении реальных задач математики, физики или радиоэлектроники. Это, конечно, заблуждение. Дело просто в том, что при решении таких задач руководящая роль пользователя сильно возрастает. Вы должны понимать, что не Maple 7 решает вашу задачу, а вы! И система Maple 7 лишь помогает в этом трудном деле. Так что при неудачах в решении своих специфических задач следует прежде всего пенять на себя и на свое незнание возможностей системы Maple 7, а вовсе не на свою помощницу.
В том, что Maple можно успешно использовать при решении вполне конкретных научных и практических задач, призваны убедить примеры, приведенные ниже. Разумеется, и их нельзя отнести к таким сложнейшим задачам, как проектирование ядерного реактора или расчет траектории полета космического корабля, — не стоит забывать, что такие расчеты делают на суперкомпьютерах, а не на домашнем компьютере, который стоит перед вами. И объем материалов по сопровождению и результатам таких расчетов многократно превосходит объем всей этой книги. Тем не менее в этом уроке вы встретите решение вполне реальных и полезных задач в области математики, физики и радиоэлектроники. Почему не в механике, гидродинамике или в оптике? Да потому, как верно сказал наш народный пророк Козьма Прутков: «нельзя объять необъятное». Приведенные примеры отчасти обусловлены личными пристрастиями автора, но они полезны каждому пользователю, желающему всерьез оценить возможности Maple 7.
Описанные в этом уроке задачи являются реальными документами, созданными и отлаженными в среде Maple 7 и лишь затем перенесенными в рукопись книги. Так что они заодно служат примерами того, как надо оформлять такие документы. В то же время от некоторых «излишеств» оформления (например, закрывающихся и открывающихся секций) мы отказались, дабы не усложнять описание документов явно второстепенными деталями. Начнем этот урок с решения весьма актуальной для многих областей применения математики задачи — аппроксимации сложной функции.
Выбор аппроксимации для сложной функции
Задание исходной функции и построение ее графика
Трудно представить себе область более широкую и>й6читаемую, чем аппроксимация различных функциональных зависимостей. С получения простой аппроксимации сложной зависимости нередко начинаются (а часто и заканчиваются) научные исследования во многих областях как прикладной, так и фундаментальной науки. Покажем возможности в этом системы Maple 7 на одном из примеров, давно помещенных в библиотеку пользователей системы Maple V R2, и переработанных для Maple 7.
Воспользуемся возможностями пакета numapprox, для чего прежде всего подключим его:
> restart:with(numapprox):
[chebdeg,chebmult,chebpade,chebsort,chebyshev, confracform,hermite_pade,hornerform, infnorm,laurent,minimax,pade,remez]
Будем искать приемлемую аппроксимацию для следующей, отнюдь не простой, тестовой функции:
График этой функции представлен на рис. 17.1. С первого взгляда — это простой график, но тут как раз тот случай, когда простота обманчива. Вы сразу Заметите, что график строится необычно медленно, поскольку в каждой из множества его точек системе Maple 7 приходится вычислять значение интеграла с подынтегральной функцией, содержащей довольно каверзную гамма- функцию. И делает это Maple 7 по сложному и медленному алгоритму адаптивного численного интегрирования.
Рис. 17.1. График аппроксимируемой функции
Итак, вычисление f(x) по ее интегральному представлению совершенно не эффективно. Наша цель состоит в разработке процедуры вычислений, которая дала бы 6 точных цифр результата в интервале [0..4] и требовала, по возможности, наименьшего числа арифметических операций для каждого вычисления. Втайне не вредно помечтать о том, чтобы после аппроксимации время вычислений уменьшилось бы хотя в несколько раз. Что получится на деле, вы увидите чуть позже. А пока войдем в дебри аппроксимации.
Аппроксимации рядом Тейлора
Начнем с аппроксимации функции хорошо известным рядом Тейлора степени 8 относительно середины интервала (точки с х=2):
Такой ряд позволяет использовать для вычислений только арифметические действия, что само по себе здорово! Для удобства преобразуем аппроксимацию в функцию, чтобы она соответствовала форме, указанной для первоначальной функции f(x). Тогда мы сможем построить график кривой ошибок для аппроксимации полиномом Тейлора:
Кривая ошибок для аппроксимации полиномом Тейлора строится командой:
> plotd(f- TaylorApprox,0..4,.co1or=black);
и имеет вид, представленный на рис. 17.2. Эта кривая нас, прямо скажем, не слишком радует, поскольку погрешность в сотни раз превышает заданную.
Рис. 17.2. Кривая погрешности при аппроксимации рядом Тейлора
Типичное свойство аппроксимации рядом Тейлора состоит в том, что ошибка мала вблизи точки разложения и велика вдали от нее. В данном случае самая большая ошибка имеет место в левой оконечной точке. Чтобы вычислить значение ошибки в точке х =0, что ведет к делению на нуль (см. определение для f(x)), мы должны использовать значение предела:
> maxTaylorError := abs( Limit(f(x), х-0) - ТауlorАрргох(0) );
maxTaylorError := .0015029620
Итак, в самом начале наших попыток мы потерпели полное фиаско. Но отчаиваться не стоит, ибо, как говорят, «даже у хорошей хозяйки первый блин — комом».
Паде-аппроксимация
Теперь опробуем рациональную аппроксимацию Паде (Fade) функции f(x) степени (4,4). Приближения по этому разложению будут аппроксимировать функцию более точно, и потому ошибки округления в вычислениях станут более заметными. Поэтому зададим еще два дополнительных знака для точности вычислений.
Кривая ошибки для интервала [0, 4] строится командой:
и имеет вид, показанный на рис. 17.3.
Рис. 17.3. Кривая погрешности при Паде- аппроксимации степени (4,4)
Как и при аппроксимации рядом Тейлора, ошибка здесь мала вблизи точки разложения и велика вдали от нее. Мы снова видим из графика, что для указанной функции, самая большая ошибка — в левой оконечной точке. Однако максимальная ошибка в Паде- аппроксимации уже на порядок меньше, чем при аппроксимации полиномом Тейлора:
Это успех, показывающий, что мы на верном пути. Но пока погрешность остается слишком большой по сравнению с заданной.
Аппроксимация полиномами Чебышева
Знатоки техники аппроксимации знают, что лучшие приближения на заданном интервале могут быть получены при использовании разложения в ряд Чебышева. Это связано с тем, что ортогональные полиномы Чебышева позволяют получить аппроксимацию, погрешность которой в заданном диапазоне изменения аргумента распределена более равномерно, чем в предшествующих случаях. Выбросы погрешности на краях интервала аппроксимации в этом случае исключены.
Разложим функцию f(x) на [0, 4] в ряд Чебышева с точностью 1*10-8. Это означает, что все члены с коэффициентами меньше чем эта величина, будут опущены. Такая точность обеспечивается полиномом 13 степени:
Можно проверить для этого примера, что кривая ошибки при аппроксимации рядом Чебышева колеблется. Поскольку ряд Чебышева был оборван на члене 8-й степени (как и полином ряда Тейлора), то максимальная ошибка оказалась равной приблизительно 0,6* 10-5. Эта величина уже на два порядка меньше, чем ошибка при Паде- аппроксимации, вычисленная выше. Но все же немного не дотягивает до наших требований.
Для последующих вычислений полезно заметить, что мы можем использовать процедуру для нахождения численных значений f(x), которая будет намного эффективнее, чем прямое определение, которое требует численного интегрирования для каждого значениях. А именно определим процедуру численной оценки, основанную на разложении в ряд Чебышева степени 13, так как максимальная ошибка при такой аппроксимации меньше чем 10~8, и обеспечивает для нашей цели достаточную точность. Мы определим полином Чебышева Т(х) из пакета orthopoly и затем для эффективной оценки преобразуем его в форму Горнера:
Схема Горнера минимизирует число арифметических операций, заменяя операции возведения в степень операциями последовательного умножения.
Аппроксимация Чебышева-Паде
Теперь рассмотрим еще более точную рациональную аппроксимацию Чебышева-Паде. Это такая рациональная функция r[m, n](х) с числителем степени т и знаменателем степени п такой же, как и для разложения в ряд Чебышева. Функция r [m, n](х) согласуется с разложением в ряд Чебышева f(x) членом степени m+n. Мы вычислим аппроксимацию Чебышева-Паде степени (4,4), подобную обычной Паде- аппроксимации, успешно выполненной ранее:
Построим кривую ошибок:
> with(orthopoly, Т):
> plot(F = ChebPadeApprox, 0..4,color=black):
Она представлена на рис. 17.4.
Максимальная ошибка и на этот раз имеет место в левой оконечной точке. Величина максимальной ошибки несколько меньше, чем ошибка при аппроксимации рядом Чебышева. Главное преимущество представления в виде рациональной функции — высокая эффективность вычислений, которая может быть достигнута преобразованием в непрерывную (цепную) дробь (см. ниже). Однако полученная максимальная ошибка чуть-чуть больше заданной:
Рис. 17.4. Кривая ошибки при Паде-Чебышева рациональной аппроксимации
> maxChebPadeError :=abs( F(0) - ChebPadeApprox(O) );
maxChebPadeError= .1236746 10-5
Мы достигли впечатляющего успеха и остается сделать еще один шаг в направлении повышения точности аппроксимации.
Минимаксная аппроксимация
Классический результат теории аппроксимации заключается в том, что минимакс как наилучшая аппроксимация рациональной функции степени (т, п) достигается, когда кривая ошибки имеет m+n+2 равных по величине колебаний. Кривая ошибки аппроксимации Чебышева-Паде имеет нужное число колебаний, но эта кривая должна быть выровнена (по амплитуде выбросов кривой ошибки) с тем, чтобы обеспечить наилучшее минимаксное приближение. Эта задача решается с помощью функции minimax:
Максимальная ошибка в аппроксимации MinimaxApprox дается значением переменной maxerror. Заметим, что мы наконец достигли нашей цели получения аппроксимации с ошибкой меньшей, чем 1*10-6:
> maxMinimaxError := maxerror;
maxMinimaxError := .585025375366 10-6
Построим график погрешности для данного типа аппроксимации:
> plot(F = MinimaxApprox,0..4,color=black):
График ошибки, представленный на рис. 17.5, показывает равные по амплитуде колебания.
Рис. 17.5. График ошибки при минимаксной аппроксимации
Таким образом, мы добились блестящего успеха в снижении погрешности до требуемого и довольно жесткого уровня. Если бы мы задались целью получить только четыре или пять точных знаков аппроксимации, что в целом ряде случаев вполне приемлемо, то могли бы получить нужный результат гораздо раньше. Нам остается оптимизировать полученную аппроксимацию по минимуму арифметических операций и проверить реальный выигрыш по времени вычислений.
Эффективная оценка рациональных функций
Полиномы числителя и знаменателя в минимаксной аппроксимации уже выражены в форме Горнера (то есть в форме вложенного умножения). Оценка полиномом степени п в форме Горнера при n-умножениях и n-суммированиях — это наиболее эффективная схема оценки для полинома в общей форме. Однако для рациональной функции степени (т, п) мы можем делать кое-что даже лучше, чем просто представить выражения числителя и знаменателя в форме Горнера. Мы можем нормализовать рациональную функцию так, что полином знаменателя будет со старшим коэффициентом, равным 1. Мы можем также заметить, что вычисление рациональной функции степени (т, п) в форме Горнера требует выполнения все m+n сложений , m+n-1 умножений и 1 деления. Другими словами, общий индекс действия есть:
Вычисление рациональной функции можно значительно сократить и далее, преобразуя ее в непрерывную (цепную) дробь. Действительно, рациональная функция степени (т, п) может быть вычислена, при использовании только:
Например, если m = n, тогда эта новая схема требует выполнения только поло-, вины числа действий умножения/деления по сравнению с предшествующим методом. Для рациональной функции MlnimaxApprox вычисление в форме, выраженной выше, сводится к 9 действиям умножения/деления и 8 действиям сложения/вычитания. Число операций умножения/деления можно сократить до 8, нормализуя знаменатель к форме monic. Мы можем теперь вычислить непрерывную (цепную) дробь для той же самой рациональной функции. Вычисление по этой схеме, как это можно видеть из вывода Maple, сводятся только к 4 действиям деления и 8 действиям сложения/вычитания:
> MinimaxApprox := confracform(MinimaxApprox):
> lprint(MinimaxApprox(x));
-.468857770747е-1+1.07858705749/(х+4.41994843227+16.1901737091/ (х+4.29121842830+70.1948525272/(х-10.2912843004+ 4.77536150167/(х+1.23883665458))))
Сравнение времен вычислений
Теперь определим время, необходимое для вычисления функции/(л:) в 1000 точек, используя первоначальное интегральное определение, и сравним его с временем, требующимся для схемы MinimaxApprox в виде непрерывной дроби. Так как наше приближение будет давать только 6 точных цифр, мы также потребуем 6 точных цифр и от интегрального представления функции:
> Digits :=б: St :=time():
> seq( evalf(f(i/250.0)), i = 1..1000 ):
> oldtime := time() - st;
oldtime-81.805
В процессе вычислений с использованием представления рациональной функции в виде непрерывной дроби иногда требуется внести несколько дополнительных цифр точности для страховки. В данном случае достаточно внести две дополнительные цифры. Итак, новое время вычислений:
> Digits := 8: st := tirae():
> seq( MinimaxApprox(i/250.0), i = 1..1000 ):
> newtime :» time()- st;
newtime:= .694
Ускорение вычисления при аппроксимации есть:
> SpeedUp := oldtime/newtime;
SpeedUp:=U7.S7464
Мы видим, что процедура вычислений, основанная на MinimaxApprox, выполняется почти в 120 раз быстрее процедуры с использованием исходного интегрального определения. Это просто феноменальный успех, полностью оправдывающий время, потерянное на предварительные эксперименты по аппроксимации и ее оптимизации! Разумеется, при условии, что вы будете применять эту аппроксимацию многократно.
Преобразование в код Фортрана или С
Один из поводов разработки эффективной аппроксимации для вычисления математической функции заключается в создании библиотек подпрограмм для популярных языков программирования высокого уровня, таких как Фортран или С. В Maple имеются функции преобразования на любой из этих языков. Например, мы можем преобразовывать формулу для минимаксной аппроксимации в код Фортрана.
Итак, нами показано, что правильный выбор аппроксимации для сложной функции обеспечивает уменьшение времени ее вычисления более чем на два порядка (!) при весьма приличной точности в б верных знаков и при использовании для вычислений минимального числа арифметических операций. Применение при этом средств системы Maple 7 позволяет генерировать разложения в различные ряды, быстро вычислять рациональные аппроксимации функций и выполнять преобразования в различные специальные формы, сочетая это с мощными средствами интерактивной работы и графической визуализации, в частности с построением графиков функции и кривых ошибок при разных видах аппроксимации. Все это обеспечивает идеальную среду для решения таких задач.
Моделирование физических явлений
Расчет траектории камня с учетом сопротивления воздуха
Вы хотите метнуть камень в огород вашего вредного соседа? Разумеется, во время его отсутствия. Давайте промоделируем эту ситуацию, предположив два актуальных случая: дело происходит на Луне и на Земле. В первом случае сопротивления воздуха (как и его самого) нет, а в другом — сопротивление воздуха есть и его надо учитывать. Иначе камень упадет в ваш огород, а не в огород соседа!
Итак, пусть подвернувшиеся под руку камни с массой 500 и 100 г брошены под углом 45° к горизонту со скоростью Vo = 20 м/с. Найдем их баллистические траектории, если сила сопротивления воздуха Fтр=А*V, где А=0,1 Н*с/м. Сравним их с траекториями, получающимися без учета сопротивления воздуха.
Начнем с подключения пакета plots, нужного для визуализации данной задачи:
> restart;
> with(plots):
Warning, the name changecoords has been redefined
Составим параметрические уравнения для проекций скорости на оси координат:
> Vox:=Vo*cos(a1pha):Voy:=Vo*sin(alpha):
Vox:= Focos(a)
Voy :=Vo sin(a)
Мы рассматриваем два случая: камень массой 500 г и камень массой 100 г. Поскольку для каждого случая мы предусматриваем расчет в двух вариантах (с учетом сопротивления воздуха и без такого учета), то мы должны составить 4 системы дифференциальных уравнений (ДУ). Каждая система состоит из двух ДУ второго порядка и вид этих систем известен из курса физики. Ниже представлено задание этих систем ДУ (для первой системы дан вывод ее вида):
Зададим исходные числовые безразмерные данные для расчета:
Выполним решение заданных систем ДУ:
Создадим графические объекты — результаты решения систем ДУ:
Построим графики траекторий для первого случая:
Графики траекторий полета камня с массой 500 г представлены на рис. 17.6.
Рис. 17.6. Баллистические траектории камня с массой 500 г
Теперь построим графики траекторий для второго случая:
> display({a3,a4,t1},title='Tpaeкт. полета тела массой 100 г, labels=[x.у], labelfont=[TIMES.ROMAN,14]):
Они представлены на рис. 17.7.
Рис. 17.7. Баллистические траектории камня при массе 100 г
Из проведенных расчетов и графиков видно, что при учете силы сопротивления воздуха дальность и высота полета сильно уменьшаются по сравнению с полетом в вакууме, и эта разница зависит от массы тела, поэтому при небольшой массе тела сопротивлением воздуха пренебрегать нельзя.
Движение частицы в магнитном поле
От реального мира перейдем к микромиру. Пусть микрочастица массой 9* 10-31 кг и зарядом +1,6*10"19 Кл влетает в магнитное поле с индукцией В = 0,1 Тл под углом а=80°. Рассчитаем траекторию движения частицы при начальной скорости Vo= 1*107м/с:
> restart;
Сила Лоренца, действующая на движущуюся частицу F = q*(E+[v, В]). Проекции векторного произведения [v, В] на оси х, у, z:
[v.B]x=vy*Bz-vz*By [v,B]y=vz*Bx-vx*Bz [v,B]z=vx*By-vy*Bz
В соответствии с этим известные из курса физики дифференциальные уравнения, описывающие траекторию полета частицы по осям х, у, z имеют вид:
Зададим исходные числовые данные (опустив размерности):
> q:=-1.6e-19: massa:=9.1e-31: V:=le7: alpha:=80*Pi/180:
> Vx:=V*cos(alpha): Vy:=V*sin(alpha): Ex:=0:Ey:=0:Ez:=0: Bx:=0.1:By:=0: Bz:=0:
Построим траекторию движения частиц в пространстве:
> with(DEtools):DEplot3d({sys},{x(t),y(t),z(t)},t=0..2e-9, [[x(0)=O,D(x)(0)=Vx,y(0)==0,D(y)(0)=Vy,z(0)=0,D(z)(0)=0]], stepsize=le-ll,orientation=[24.117]):
Полученная траектория представлена на рис. 17.8. Она имеет вид спирали в пространстве. При этом скорость движения частицы вдоль оси х неизменна, а вдоль осей у и z имеет характерную колебательную компоненту. Случай явно куда менее тривиальный, чем полет камня, описанный выше.
Рис. 17.8. Траектория движения частицы в магнитном поле
Мы можем найти аналитическое представление для траектории частицы в виде параметрически заданной (с параметром времени t) системы из трех уравнений:
Моделирование движения заряженной частицы в пространстве с магнитным полем показывает, что для принятых для моделирования параметров решаемой задачи, движение частицы происходит по спиралеобразной траектории. Получен как график траектории движения частицы, так и аналитические уравнения, описывающие это движение.
Разделение изотопов
Рассмотрим еще одну классическую задачу ядерной физики — разделение изотопов (атомов с одинаковым зарядом ядра, но разной массой). Для этого используют различные способы. В частности, это может быть масс-спектроскопический метод. Из точки А вылетают однозарядные ионы (q = е = 1.6*10-19 Кл) разной массы (от 20 до 23 а.е.м.) и под разными углами в пределах от 80 до 100° к оси х в плоскости ху (рис. 17.9). Вдоль оси z приложено магнитное поле В=10-2 Тл. Рассчитаем траектории полета частиц. Будем надеяться, что это подскажет способ разделения изотопов.
Приступим к решению данной задачи. Сила Лоренца, действующая на движущуюся частицу, F = q*(E+[v, В]). Проекции векторного произведения [v, В] на оси х, у, z заданы выражениями:
[v.B]x-vy*Bz-vz*By [v,B]y-vz*Bx-vx*Bz [v,B]z=vx*By-vy*Bz
Рис. 17.9. Иллюстрация к методу разделения изотопов
В соответствии с этим дифференциальные уравнения, описывающие траекторию полета частицы по осям х, у, z имеют вид:
Зададим исходные числовые данные для расчета:
> q:=1.6e-19:V:=le4:
> Vx:=V*cos(a1pha):Vy:=V*sin(a1pha):Ex:=0:Ey:=0:Ez:=0:Bx:=0: By:=0:Bz:=le-2:
Выполним решение составленной выше системы дифференциальных уравнений:
Построим графики решения:
Эти графики показаны на рис. 17.10.
Рис. 17.10. Траектории движения частиц
Полученные графики (рис. 17.10) наглядно показывают на одну из возможностей разделения изотопов. Как говорится, осталось подставить «стаканчик» в нужное место для ловли нужных изотопов. Разумеется, это только изложение идеи одного из методов разделения изотопов. Увы, на практике приходится использовать сложнейшие и дорогие физические установки для решения этой актуальной задачи.
Моделирование рассеивания альфа- частиц
Одним из фундаментальных доказательств существования ядра у атомов стал опыт с бомбардировкой тонкой фольги из металла альфа- частицами с высокой энергией. Если бы «массивных» ядер не существовало, то альфа- частицы должны были бы спокойно пролетать сквозь тонкую фольгу, практически не отклоняясь. Однако, как физики и ожидали, некоторая часть частиц испытывала сильное отклонение и даже поворачивала назад. Очевидно, что имели место отскоки (упругие столкновения) с малыми, но массивными ядрами металла фольги.
В нашем распоряжении, увы (а может быть и к счастью), нет ускорителя альфа- частиц. Так что мы, не опасаясь облучения и очередной Чернобыльской катастрофы, сможем смоделировать это интереснейшее физическое явление с помощью математической системы Maple 7. Причем спокойно сидя перед своим домашним компьютером и глубокомысленно наблюдая за траекториями полета альфа- частиц.
Итак, пусть в нашем теоретическом опыте альфа- частицы с энергией 4 МэВ рассеиваются тонкой золотой фольгой. Рассчитать траекторию частицы, приближающейся к ядру атома Аи. Прицельное расстояние р равно 2*10-15 м. Приступим к решению задачи и зададим вначале систему дифференциальных уравнений для траектории альфа- частицы:
Введем исходные числовые данные для вычислений:
> ql:=2*i;6e-19:q2:=79*1.6e-19:massa:=4*1.67e-27:EO:=8.85e-12: a:=4e-13:
p:=5e-15:T:=4e6*1.6e-19:V0x:=sqrt(2*T/massa):
Создадим графическую структуру решения нашей системы дифференциальных уравнений для нескольких расчетных отклонений линии движения альфа- частицы от центра ядра атома, находящегося на ее пути:
> with(DEtools):ss:=DEplot({sys},{y(t),x(t)},t=0..7e-20.
[[x(0)=-a,D(x)(0)=VOx,y(0)=p,D(y)(0)=0].
[x(0)=-a,D(x)(0)=VOx,y(0)=p*4.D(y)(0)=0],
[x(0)=-a,D(x)(0)=VOx,y(0)=p*8,D(y)(0)=0],
[x(0)=-a,D(x)(0)=VOx,y(0)=p*12,D(y)(0)=0].
[x(0)=-a;D(x)(0)=VOx,y(0)=p*16,D(y)(0)=0],
[x(0)-a.D(x)(0)-VOx.y(0)-p*20,D(y)(0)-0].
[x(0)=-a,D(x)(0)=VOx,y(0)=p*24,D(y)(0)=0],
[x(0)=-a,D(x)(0)=VOx,y(0)=p*28,D(y)(0)=0]],
x(t)=-a..a,scene=[x(t),y(t)],stepsize=le-21,1inecolor=bl ack):
> with(plottools):yy:=circle([0.0],2E-14,color=red,thickness=2):
Warning, the name translate has been redefined
Построим центр ядра (кружок со знаком +) и траектории альфа- частиц:
> ss2:=PLOT(TEXT([0.-0.3e-14],'+'), FONT(HELVETICA, OBLIQUE.14)):
Осталось построить график траекторий движения альфа- частиц вблизи центра атома: i
> with(plots):
Warning, the name changecoords has been redefined
> disp1ay([ss,yy,ss2],tit1e='Pacceивание а-частиц',axes=framed);
График траекторий движения альфа- частиц вблизи ядра представлен на рис. 17.11. Этот график настолько нагляден, что не требует пояснения.
Моделирование движения альфа- частиц вблизи малого и «массивного» ядра атома дает наглядное представление о математической и физической сути данного опыта. Надо лишь помнить, что нельзя нацеливать альфа- частицы прямо в центр ядра. Более сложные, чем приведенные, расчеты показывают, что при этом альфа-частица настолько близко подходит к ядру, что надо учитывать новые факторы, возникающие при близком взаимодействии. Они могут привести к тому, что частица будет поглощена ядром- Но это уже тема нового разговора,, выходящего за рамки данной книги.
Рис. 17.11. Траектории движения альфа- частиц вблизи ядра атома
Моделирование и расчет электронных схем
Нужно ли применять Maple для моделирования и расчета электронных схем?
Нужно ли применять системы компьютерной математики для анализа, расчета и моделирования электронных схем? Ответ на этот вопрос не так прост, как кажется с первого взгляда. С одной стороны, к услугам пользователя компьютера сейчас имеется ряд программ схемотехнического моделирования, например Micro-CAP, Electronics Workbench, PSpice, Design Labs и др., автоматически составляющих и решающих большие системы уравнений состояния электронных схем и моделирующих работу бесчисленного множества электронных схем без кропотливого «ручного» составления уравнений.
Но, с другой стороны, анализ схем в таких программах настолько автоматизирован, что начисто теряется его физическая и математическая сущность. Это не так уж страшно, когда моделируются типовые схемы на давно известных или, скорее, просто хорошо знакомых электронных приборах. Но это явно плохо, когда объектом исследования и моделирования являются новые нетрадиционные схемы на новых или малоизвестных приборах или когда знание физических и математических основ работы таких схем принципиально необходимо. Например, при изучении их в вузах и университетах. В этом случае применение систем компьютерной математики не только возможно, но и принципиально необходимо.
Малосигнальный анализ усилителя на полевом транзисторе
Рассмотрим классический усилительный каскад на полевом транзисторе, схема которого приведена на рис. 17.12, а. Его эквивалентная малосигнальная схема представлена на рис. 17.12, б.
Рис. 17.12. Принципиальная (о) и эквивалентная(6) схемы усилителя на полевом транзисторе
Наша цель заключается в расчете характеристик усилителя операторным методом. Подключим нужный нам пакет plots:
> restart:with(plots):
Warning, the name changecoords has been redefined
Из законов Киргофа вытекает, что сумма токов, втекающих в каждый узел и вытекающих из него равна 0. Следовательно, для узлов эквивалентной схемы рис. 17.12 можно записать следующую систему уравнений в операторной форме:
Переменные напряжения на узлах схемы находятся из аналитического решения данной системы. При этом заблокируем вывод их аналитических значений, поскольку он очень громоздок. Тем не менее вы можете посмотреть на полученные формулы, поставив знак точки с запятой вместо знака двоеточия в приведенных ниже выражениях:
> solve({eql,eq2,eq3.eq4}б{Vl,V2.V3,Vo}):
Обеспечим присвоение переменным Vo, VI, V2 и V3 найденных из решения системы уравнений значений:
> assign(%):
Теперь найдем операторную передаточную функцию в аналитическом виде:
В соответствии с выбранным операторным методом анализа введем обозначения:
Это позволяет найти Н как функцию от частоты f также в аналитическом виде:
Это тоже довольно громоздкое выражение, и его применение при «ручном» анализе потребовало бы от нас немало изобретательности. Между тем Maple 7 позволяет «в два счета» определить из него амплитудно-частотную (AVM) и фазо- частотную (PhaseAV) характеристики усилителя как функции частоты:
> AVM=-evalc(abs(H)):
> PhaseAV:=evalc(argument(H)):
Преобразуем AVD в логарифмическую характеристику, выражающую усиление в децибелах (dB):
> AVdB:=20*1og10(AVM):
Такая характеристика более привычна для специалистов в радиоэлектронике. Соответственно фазо-частотную характеристику выразим в градусах:
> R2D:=evalf(360/(2*Pi));R2D := 57.29577950
> AVdeg:=R2D*PhaseAV:
Теперь можно перейти к обычным численным расчетам. Зададим конкретные значения компонент эквивалентной схемы усилителя:
> Rl:=100: R2:=100000: R3:=1000: R4:=10000: Cl:=1.*10^(-6): С2:=5*10^(-12): СЗ:=1*10^(-6): mu:=50:
Построим амплитудно-частотную характеристику усилителя:
> gaindata:-NULL:
phasedata:=NULL:
for a from 0 to 8 do:
for i from 2*10^a to l(T(a+l) by 10^a do
gaindata:=gaindata, [1. evalf(subs(f=i,AVdB))];
phasedata:=phasedata, [i, eva1f(subs(f=i,AVdeg))]:
od: od:
> 1oglogp1ot([gaindata]. thickness»2, color=black, style=1ine, axes=boxed,
title=`Коэффициент усиления K(f)`,1abels=['Частота (Hz)VK(d8)']):
Она показана на рис. 17.13.
Рис. 17.13. Амплитудно-частотная характеристика усилителя
Далее зададим построение фазо-частотной характеристики усилителя:
> 1og1ogplot([phasedata], thickness=2, color=b1ue, style=line, axes=boxed, title='Фаэовый сдвиг (в градусах)`, labels=['Частота (Hz)','Фаза']);
Она представлена на рис. 17.14.
Рис. 17.14. Фазо-частотная характеристика усилителя
Найдем номинальный коэффициент усиления на частоте f=1000 (Гц):
> AVmid:=eva1f(subs(f=1000, AVdB)):
AVmid=33.12074854
Имея аналитическое выражение для амплитудно-частотной характеристики, можно составить уравнения для вычисления граничных частот (по спаду усиления на -dAV в dB):
> dAV:=3: #Ослабление (в dB на граничных частотах)
> eq5:=AVmid-dAV=20*log10(AVM):
Теперь можно найти эти частоты — нижнюю и верхнюю:
> flow:=fsolve(eq5,f. f-10..2000):flow:= 23.61659476
> fhigh:=fsolve(eqS,f, f-2000..100*10*6);
fliigh := .5737800225 107
Мы можем построить и более наглядную амплитудно-частотную характеристику с точками, соответствующими граничным частотам:
> with(plottools) :h:=log10(AVnvid-dAV):
aplot:= Loglogplot([gaindata], thickness=2, color=b1ack. style=line, axes=boxed,
title='Частоты flow и fhigh среза', labels=['Частота (Hz)VK(dB)']):
bplot:=line([0.1,h], [7.1,h], color=black, linestyle=3):
cplot:=line([log10(flow),0.58],[logHK flow). 1.6], color=blue, linestyle=3):
dplot:=line([log10(fh1gh).0.58],. [log10(fhigh).1.6],. color=red,. 1inestyle=3):
display([aplot.bplot,cplotJ,dplot]):
Эта характеристика показана на рис. 17.15.
На ней проставлены синяя и красная пунктирные вертикали, соответствующие найденным граничным частотам flow и fhigh, а также пунктирная горизонталь, соответствующая коэффициенту усиления на этих частотах. Это позволяет наглядно оценить частотный диапазон работы усилителя.
Таким образом, задача расчета усилителя в малосигнальном режиме полностью решена. Мы получили значение номинального коэффициента усиления, рассчитали нижнюю и верхнюю граничные частоты, получили аналитические выражения для амплитудно-частотной и фазо-частотной характеристик усилителя и построили их наглядные графики.
Рис. 17.15. Амплитудно-частотная характеристика с выделенными точками граничных частот
Расчет аналогового фильтра на операционном усилителе
Теперь рассмотрим проектирование аналогового полосового фильтра на операционном усилителе, схема которого приведена на рис. 17.16.
Рис. 17.16. Схема полосового фильтра на интегральном операционном усилителе
Подготовимся к расчету фильтра:
> restart:
Зададим основные уравнения, описывающие работу фильтра на малом сигнале:
Введем круговую частоту:
> omega := 2*Pi*f;
W := 2пf
Найдем коэффициент передачи фильтра и его фазо-частотную характеристику как функции от частоты:
> gain := abs(eva1c(Vo/Vi)):
> phase := evalc(op(2,convert(Vo/Vi.polar))):
Для просмотра громоздких аналитических выражений для этих параметров замените знаки двоеточия у выражений для gain и phase на знак точки с запятой. Далее введем конкретные исходные данные для расчета:
> R3 :=1000:
> R4 := 3000:
> СЗ :=0.08*10^(-6):
> С4 := 0.01*10^(-6):
Построим АЧХ фильтра как зависимость коэффициента передачи в децибелах (dB) от частоты f в Гц:
> plot(DogWf), 20*log10(gain), f=[10..50000], color=black, title='Коэффициент передачи dB как функция от частоты f в Гц'):
Эта характеристика представлена на рис. 17.17. Здесь полезно обратить внимание на то, что спад усиления на низких и высоких частотах происходит довольно медленно из-за малого порядка фильтра.
Рис. 17.17. АЧХ фильтра на операционной усилителе
Далее построим фазо-частотную характеристику фильтра как зависимость фазы в радианах от частоты f в Гц:
> plot ([log10(f),phase, f=10..50000], color=black, title=*Фазо-частотная характеристика фильтра*);
Фазо-частотная характеристика (ФЧХ) фильтра показана на рис. 17.18
На ФЧХ фильтра можно заметить характерный разрыв, связанный с превышением фазовым углом граничного значения я. Такой способ представления фазового сдвига общепринят, поскольку его изменения стремятся вписать в диапазон от -я до п.
Рис. 17.18. ФЧХ фильтра на операционном усилителе
Проектирование цифрового фильтра
Основной недостаток аналоговых активных фильтров, подобных описанному выше, заключается в их малом порядке. Его повышение за счет применения многих звеньев низкого порядка ведет к значительному повышению габаритов фильтров и их стоимости. От этого недостатка свободны современные цифровые фильтры, число ячеек которых N даже при однокристальном исполнении может достигать десятков и сотен. Это обеспечивает повышенную частотную селекцию.
Спроектируем фильтр N+1-ro порядка класса FIR (Finite Impulse Response или с конечной импульсной характеристикой). Каждая из N ячеек временной задержки фильтра удовлетворяет следующей зависимости выходного сигнала у от входного х вида:
Подключим пакет расширения plots, нужный для графической визуализации проектирования:
> restart:with(p1ots):
Warning, the name changecoords has been redefined
Зададим исходные данные для проектирования полосового цифрового фильтра, выделяющего пятую гармонику из входного сигнала в виде зашумленного меандра с частотой 500 Гц:
> N := 64: # Число секций фильтра (на 1 меньше порядка фильтра)
> fs:= 10000: # Частота квантования
> fl = 2300: # Нижняя граничная частота
> fh = 2700: # Верхняя граничная частота
> m := 10: # 2^m > N - число точек для анализа
Вычислим:
Вычислим FIR-коэффициенты для прямоугольного окна фильтра:
> С :-=(n) -> limit(g,t=n):h := aray(0..N): N2:=N/2:
> for n from 0 to N2 do h[N2-n]:= evalf(C(n)); h[N2+n] := h[N2-n]; od:
Определим массивы входного x(n) и выходного у(n) сигналов:
> х := array(-N..T): y := аггау(0..Т):
Установим значение х(n) равным 0 для времени меньше 0 и 1 для времени >=0:
> for n from -N to -1 do x[n] := 0; od:
> for n from 0 to Т do x[n] := Dirac(n); od:
Вычислим временную зависимость для выходного сигнала:
> for n from 0 to Т do y[n] := sum(h[k]*x[n-k],k=0..N): od:
Построим график импульсной характеристики фильтра, отражающей его реакцию на сигнал единичной площади с бесконечно малым временем действия:
> р := [seq([j/fs,y[j]],j=0..T)3:
> plot(p, time=0..3*N/fs, labels=[time,output], axes=boxed, xtickmarks=4, title-'Иипульсная характеристика фильтра',color=black);
Он показан на рис. 17.19. Нетрудно заметить, что эта характеристика свидетельствует об узкополосности фильтра, поскольку его частоты fl и fh различаются несильно. В этом случае полосовой фильтр по своим свойствам приближается к резонансному, хотя само по себе явление резонанса не используется.
Рис. 17.19. Импульсная характеристика цифрового фильтра
Вычислим АЧХ фильтра, используя прямое преобразование Фурье. Оно после подготовки обрабатываемых массивов реализуется функцией FFT:
> rо := array (1..T+1): io := arrayd. .T+l):
> for n from 0 to Т do ro[n+l] :- y[n]; io[n+l] := 0; od:
> FFT(m,ro,io):
Построим график АЧХ фильтра:
> р :=[seq([j*fs/(T+l),abs(ro[j+l]+io[j+l]*I)3,j=O..T/2)]:
> plot(p, frequency=0..fs/2, tabels=[frequency,gain], tit1e='AЧX фильтра',со1ог=black);
Он представлен на рис. 17.20. Нетрудно заметить, что и впрямь АЧХ фильтра напоминает АЧХ резонансной цепи — она имеет вид узкого пика. Вы можете легко проверить, что раздвижением частот fl и fh можно получить АЧХ с довольно плоской вершиной и резкими спадами (говорят, что такая характеристика приближается к прямоугольной).
Рис. 17.20. АЧХ цифрового полосового фильтра
Теперь приступим к тестированию фильтра. Зададим входной сигнал в виде зашумленного меандра с частотой 500 Гц и размахом напряжения 2 В:
> 1 :=round(fs/2/500):
> for n from 0 by 2*1 to Т do
> for n2 from 0 to 1-1 do
> if n+n2 <= Т then
> x[n+n2] := evalf(-l+rand()/10^12-0.5);
> fi:
> if n+n2+1 <= Т then
> x[n+n2-H] :-=eva1f(l+ranoX)/10^12-0.5);
> fi;
> od:
> od:
Временная зависимость синтезированного входного сигнала представлена на рис. 17.21.
Рис. 17.21. Синтезированный входной сигнал
Вычислим реакцию фильтра на входной сигнал:
> for n from 0 to T do
> y[n] := sum(h[k]*x[n-k],k=0..N);
> od:
Построим график выходного сигнала:
> р := [seq([j/fs, x[j]], j=0..T)]:q:= [seq([j/fs , y[j]] , j =0..Т)]:
> plot(p,time=0..T/fs/4,1abels=[time,volts],title='Входной сигнал\сolor=black);
> plot(q,tine=0..T/fs/4,1abels=[tirae,volts], titlе='Выходной сигнал",color=black);
Временная зависимость выходного сигнала показана на рис. 17.22. Нетрудно заметить, что в конце концов выходной сигнал вырождается в пятую гармонику входного сигнала, но этому предшествует довольно заметный переходной процесс. Он связан с узкополосностью данного фильтра.
Рис. 17.22. Временная зависимость выходного сигнала цифрового фильтра
Вычислим спектры входного и выходного сигналов, подготовив массивы выборок сигналов и применив прямое преобразование Фурье с помощью функции FFT:
> Н := array(l..T+l):1i :=array(1..Т+1):
> for n from 0 to T do ,
> ri[n+l] := x[n]*2/T: ii[rn-l] := 0;
> ro[n+l] := y[n]*2/T; Io[rrfl] := 0;
> od:
> FFT(m.ri,ii):rTT(m,ro,io):
Построим график спектра входного сигнала, ограничив масштаб по амплитуде значением 0,5 В:
> р := [seq([j*fs/(T+l),abs(n[j+l]+ii[j-H]*I)],j=0..T/2)]:
> q := [seq([j*fs/(T-H),abs(ro[j-H]+To[j+l]*I)],j=0..T/2)]:
> plot(p, frequency=0..fs/2,y0..0.5,labe1s=[Частотa.V],title='Частотный спектр входного сигнала',color=black);
Этот график представлен на рис. 17.23. Из него хорошо видно, что спектральный состав входного сигнала представлен только нечетными гармониками, амплитуда которых убывает по мере роста номера гармоники. Пятая гармоника на частоте 2500 Гц находится посередине полосы пропускания фильтра, ограниченной граничными частотами фильтра 2300 и 2700 Гц. Заметны также беспорядочные спектральные линии шума сигнала в пределах полосы прозрачности фильтра.
Теперь построим график спектра выходного сигнала:
> p1ot(q, frequency=0..fs/2,y=0..0.5,labe1s=[Частотa,V], title='Частотный спектр выходного сигнала'бcolor=black);
Он представлен на рис.17.24. Хорошо видно эффективное выделение пятой гармоники сигнала и прилегающей к ней узкой полосы шумового спектра.
Рис. 17.23. Спектрограмма входного сигнала
Рис. 17.24. Спектрограмма выходного сигнала цифрового фильтра
Приведенные данные свидетельствуют, что спроектированный фильтр полностью отвечает заданным требованиям и обеспечивает уверенное выделение пятой гармоники зашумленного меандра. По образу и подобию данного документа можно выполнить проектирование и других видов цифровых фильтров.
Моделирование цепи на туннельном диоде
А теперь займемся моделированием явно нелинейной цепи. Выполним его для цепи, которая состоит из последовательно включенных источника напряжения Es, резистора Rs, индуктивности L и туннельного диода, имеющего N-образную вольтамперную характеристику (ВАХ). Туннельный диод обладает емкостью С, что имитируется конденсатором С, подключенным параллельно туннельному диоду. Пусть ВАХ реального туннельного диода задана выражением:
> restart:
> A:=.3t: а:=10: В:=1*10^(-8): b:=20:
> Id:=Ud->A*Ud*exp(-a*Ud)+B*(exp(b*Ud-D):
Id:=Ud->AUde(-aUd)+Be(bUd-1)
Построим график ВАХ:
> plot(Id(Ud), Ud=-.02..0.76,color=black):
Этот график представлен на рис. 17.25. Нетрудно заметить, что ВАХ туннельного диода не только резко нелинейна, но и содержит протяженный участок отрицательной дифференциальной проводимости, на котором ток падает с ростом напряжения. Это является признаком того, что такая цепь способна на переменном токе отдавать энергию во внешнюю цепь и приводить к возникновению колебаний в ней различного типа.
Работа цепи описывается системой из двух дифференциальных уравнений:
di/dt=(Es-i(t)*Rs-u(t))/L
du/dt=(i(t)-Id(u(t))/C
Рис. 17.25. ВАХ туннельного диода
Пусть задано Es = 0,35 В, Rs= 15 Ом, С = 10*10-12, L = 30*10-9 и максимальное время моделирования tm=10*10-9. Итак, задаем исходные данные:
> Es:=.35:Rs:=15:C:=10*10^(-12):L:=30*10^(-6):tm:=10*10^(-9):
Составим систему дифференциальных уравнений цепи и выполним ее решение с помощью функции dsolve:
Поскольку заведомо известно, что схема имеет малые значения L и С, мы задали с помощью параметров достаточно малый шаг решения для функции dsolve — stepsize=l(T(-11) (с). При больших шагах возможна численная неустойчивость решения, искажающая форму колебаний, получаемую при моделировании. Используя функции odeplot и displ ay пакета plots, построим графики решения в виде временных зависимостей u(t) и 10*i (t) и линии, соответствующей напряжению Es источника питания:
> gu:=odeplot(F,[t,u(t)],0,tm,color=black,
labels=['tVu(t),10*i(tr]):
> gi:=odeplot(F,[t,10*i(t)],0..tm.color-black):
> ge:=odeplot(F,[t,Es].0..tm.color=red): .
> display(gu.gi,ge);
Эти зависимости представлены на рис. 17.26. Из них хорошо видно, что цепь создает автоколебания релаксационного типа. Их форма сильно отличается от синусоидальной.
Рис. 17.26. Временные зависимости напряжения на туннельном диоде и тока
Решение можно представить также в виде фазового портрета, построенного на фоне построенных ВАХ и линии нагрузки резистора Rs:
> gv:=plot({Id(Ud),(Es-Ud)/Rs},Ud=-.05..0.75,color=black,
labels=[Ud,Id]):
> gpp:=odeplot(F.[u(t),i(t)],0..tm,color=blue):
> display(gv,gpp);
Фазовый портрет колебаний показан на рис. 17.27.
Рис. 17.27. Фазовый портрет колебаний на фоне ВАХ туннельного диода и линии нагрузки резистора Rs
О том, что колебания релаксационные можно судить по тому, что уже первый цикл колебаний вырождается в замкнутую кривую — предельный цикл, форма которого заметно отличается от эллиптической.
Итак, мы видим, что данная цепь выполняет функцию генератора незатухающих релаксационных колебаний. Хотя поставленная задача моделирования цепи на туннельном диоде успешно решена, в ходе ее решения мы столкнулись с проблемой обеспечения малого шага по времени при решении системы дифференциальных уравнений, описывающих работу цепи. При неудачном выборе шага можно наблюдать явную неустойчивость решения.
Применение интеграла Дюамеля для расчета переходных процессов
Вернемся к линейным цепям и рассмотрим еще один полезный метод расчета электрических цепей — с помощью интеграла Дюамеля. При нем можно рассчитать временную зависимость выходного напряжения u2(t) цепи по известному входному сигналу ul(t) и переходной характеристике цепи a(t). Возьмем в качестве первого классического примера дифференцирующую RC-цепь и вычислим ее реакцию на экспоненциально нарастающий перепад напряжения.
Представлены заданные зависимости ul(t) и a(t), аналитическое выражение для интеграла Дюамеля (одна из 4 форм) и аналитическое выражение для искомой зависимости u2(t). Пока последнее выражение довольно простое. В конце этого фрагмента документа построены графики зависимостей ul(t), a(t) и u2(t).
Обратите внимание на то, что выражение для u2(t), получаемое с помощью интеграла Дюамеля, стало намного сложнее. Тем не менее получено как аналитическое выражение для реакции цепи u2(t), так и графики ul(t), a(t) и u2(t). Они показаны внизу графика.
Что нового мы узнали?
В этом уроке мы научились:
Анализ функций
Важным разделом математики является исследование аналитических функций. Оно обычно заключается в определении координат особых точек функции и ее значений в этих точках, а также в выяснении особенностей функции, таких как наличие точек разрыва, асимптот, точек перегибов, разрывов и т. д. К сожалению, пока нет средств, сразу выявляющих все особенности функций, поскольку даже средства, решающие частные задачи анализа функций, довольно сложны и специфичны. Достаточно отметить проблему поиска экстремумов функций (особенно функций нескольких переменных). Поэтому функции приходится анализировать индивидуально.
С помощью функции fsolve легко находятся значения независимой переменной х функций вида f(x), при которых f(x)=0 (корни этого уравнения). При этом данная функция позволяет (в отличие от функции solve) изолировать корни функции f(x) указанием примерного интервала их существования. Ряд функций служит для вычисления экстремумов, максимумов и минимумов функций, а также для определения их непрерывности. Одна из таких функций, extrema, позволяет найти экстремумы выражения ехрr (как максимумы, так и минимумы) при ограничениях constcs и переменных vans, по которым ищется экстремум: extrema(expr. constrs) extrema(expr, constrs, vars) extrematexpr, constrs, vans, V)
Ограничения contrs и переменные vars могут задаваться одиночными объектами или списками ряда ограничений и переменных. Найденные координаты точки экстремума присваиваются переменной 's'. При отсутствии ограничений в виде равенств или неравенств вместо них записывается пустой список {}. Эта функция в предшествующих версиях Maple находилась в стандартной библиотеке и вызывалась командой readlib(extrema). Но в Maple 7 ее можно использовать без предварительного объявления. В этом убеждают приведенные ниже примеры:
Как видно из приведенных примеров, функция extrema возвращает как значения экстремумов, так и значения аргументов, при которых экстремумы наблюдаются.
Для проверки оптимизационных алгоритмов существует ряд тестовых функций. Одна из таких функций — функция двух переменных Розенброка. В представленном ниже примере она задана как rf(x.y):
Как нетрудно заметить, минимум этой функции при значениях х =у = 1, равный О, функцией extrema не обнаружен. Однако это не недостаток данной функции, а просто неудачное ее применение. Функция Розенброка имеет минимум значения, и для его обнаружения надо использовать функцию minimize, описанную ниже.
ПРИМЕЧАНИЕ
Функция extrema дает неплохие результаты при поиске экстремумов простых аналитических функций, не имеющих особенностей. Однако при анализе сложных функций, содержащих функции со сравнением аргумента (например, abs(x), signum(x) и др.), функция extrema часто отказывается работать и просто повторяет запись обращения к ней.
Часто нужно найти минимум или максимум заданной функции. Для поиска минимумов и максимумов выражений (функций) ехрr служат функции стандартной библиотеки:
minimize(expr, optl, opt2, .... optn)
maximize(expr, optl. opt2. .... optn)
Эти функции могут разыскивать максимумы и минимумы для функций как одной, так и нескольких переменных. С помощью опций optl, opt2,..., optn можно указывать дополнительные данные для поиска. Например, параметр `infinity` означает, что поиск минимума или максимума выполняется по всей числовой оси, а параметр location (или locatiorrtrue) дает расширенный вывод результатов поиска — выдается не только значение минимума (или максимума), но и значения переменных в этой точке.
Примеры применения функции minimize приведены ниже:
Приведем подобные примеры и для функции поиска максимума — maximize:
Обратите внимание на то, что в предпоследнем примере Maple 7 явно «оскандалилась» и вместо максимума функции sin(x)/x, равного 1 при х=0, выдал результат в виде бесконечности. Другими словами, система обнаружила, что в данном случае ей незнакомо понятие предела sin(x)/x при х—>0. Эта ситуация кажется более чем странной, если учесть, что в этом примере Maple 6 давал правильный результат.
Применим функцию minimize для поиска минимума функции Розенброка. Рисунок 9.1 показывает, что minimize прекрасно справляется с данной задачей. На рис. 9.1 представлено также построение функции Розенброка, хорошо иллюстрирующее ее особенности.
Рис. 9.1. Поиск минимума функции Розенброка и построение ее графика
Трудность поиска минимума функции Розенброка связана с ее характерными особенностями. Из рис. 9.1 видно, что эта функция представляет собой поверхность типа «глубокого оврага с почти плоским дном», в котором и расположена точка минимума. Такая особенность этой функции существенно затрудняет поиск минимума. То, что система Maple 7 справляется с данной тестовой функцией, вовсе не означает, что трудности в поиске минимума или максимума других функций остаются позади.
Для исследования функций на непрерывность Maple 7 имеет функцию iscont, записываемую в ряде форм:
iscont(expr. х - а .. Ь)
iscont(expr. х = а .. b, 'closed')
iscont(expr. х - а .. b, 'open')
Она позволяет исследовать выражение ехрr, заданное в виде зависимости от переменной х, на непрерывность. Если выражение непрерывно, возвращается логическое значение true, иначе — false. Возможен также результат типа FAIL. Параметр 'closed1 показывает, что конечные точки должны также проверяться, а указанный по умолчанию параметр 'open' — что они не должны проверяться.
Работу функции iscont иллюстрируют следующие примеры:
> iscont(l/x^2,x=-l..l);
false
> iscont(l/x^2.x=-l..l,'closed');
false
> iscont(l/x,x-0..1);
true > iscont(l/x,x=0..1.'closed'); ,
false ,--v > iscont(l/(x+a).x=-l..l);
FAIL
Рекомендуется внимательно присмотреться к результатам этих примеров и опробовать свои собственные примеры.
Функции, не имеющие непрерывности, доставляют много хлопот. Поэтому важным представляется анализ функций на непрерывность. В Maple 7 функция discont(f,х) позволяет определить точки, в которых нарушается непрерывность функции f(x). Она вычисляет все точки в пределах изменениях от -? до +?. Результаты вычислений могут содержать особые экстра переменные с именами вида _Zn- и _NNn-. В частности, они позволяют оценить периодические нарушения непрерывности функций.
Примеры применения функции discont приведены ниже:
> discont(l/(x-2).x);
{2}
> discont(l/((x-l)*(x-2)*(x-3)).x):
{1,2,3}
> discont(GAMMA(x/2),x):
{-2_NN1~}
Весьма рекомендуется наряду с применением данной функции просмотреть график анализируемой функции.
ПРИМЕЧАНИЕ
В ряде примеров в выводе используются специальные переменные вида _NameN~, где Name — имя переменной иN— ее текущий номер. После выполнения команды restart отсчет N начинается с 1. Если вывод с такими переменными уже применялся, то их текущие номера могут казаться произвольными. Специальные переменные часто используются для упрощения выводимых выражений.
Многие операции, такие как интегрирование и дифференцирование, чувствительны к особенностям функций, в частности к их разрывам и особым точкам. Функция singular (ехрr, vars) позволяет найти особые (сингулярные) точки выражения ехрг, в которых она испытывает разрывы. Дополнительно в числе параметров может указываться необязательный список переменных.
Примеры применения этой функции приведены ниже:
Важным достоинством системы Maple является наличие в ней ряда функций, позволяющих выполнять детальный анализ функций. К такому анализу относится вычисление асимптотических разложений функций, которые представляются в виде рядов (не обязательно с целыми показателями степени). Для этого используется следующая функция:
asympt(f.x) asympt(f,x,n).
Здесь f — функция переменной х или алгебраическое выражение; х — имя переменной, по которой производится разложение; n — положительное целое число (порядок разложения, по умолчанию равный 6). Ниже представлены примеры применения этой функции:
Ниже мы рассмотрим типичный анализ достаточно «сложной» функции, имеющей в интересующем нас интервале изменения аргумента х от -4 до 4, нули, максимумы и минимумы. Определение функции f(x), ее графики и график производной dF(x)/dx даны на рис. 9.2. Этот рисунок является началом полного документа, описываемого далее, i
Функция F(x) на первый взгляд имеет не совсем обычное поведение вблизи начала координат (точки с х =у = 0). Для выяснения такого поведения разумно построить график функции при малых х и у. Он также представлен на рис. 9.2 (нижний график) и наглядно показывает, что экстремум вблизи точки (0, 0) является обычным минимумом, немного смещенным вниз и влево от начала координат. Теперь перейдем к анализу функции F(x). Для поиска нулей функции (точек пересечения оси х) удобно использовать функцию f sol ve, поскольку она позволяет задавать область изменениях, внутри которой находится корень. Как видно из приведенных ниже примеров, анализ корней F(x) не вызвал никаких трудностей, и все корни были уточнены сразу: Поиск нулей функции
> fsolve(F(x),x,-2...-l):
-1.462069476 > fso1ve(F(x),x,-.01..0.01);
0.
> fsolve(F(x).x.-.05..0);
-.02566109292
> fsolve(F(x),x,1..2);
1.710986355
> fsolve(F(x),x,2.5..3):
2.714104921
Нетрудно заметить, что функция имеет два очень близких (но различных) корня прих, близких к нулю.
Анализ функции на непрерывность, наличие ее нарушений и сингулярных точек реализуется следующим образом:
Анализ функции на непрерывность, наличие ее нарушений и наличие сингулярных точек
Рис. 9.2. Задание функции F(x) и построение графиков функции и ее производной
Этот анализ не выявляет у заданной функции каких-либо особенностей. Однако это не является поводом для благодушия — попытка найти экстремумы F(x) с помощью функции extrema и минимумы с помощью функции minimize завершаются полным крахом:
Неудачный поиск экстремумов и минимумов функции
>extrema(F(x).{},x, 's');s;
>minimize(F(x),x=-.l...l);
minimize (.05x + xe (-|x|) * sm(2x),x = -.1 .. 1)
>minimize(F(x),x=-2.5..:2);S
minimize (.05x + xe(-|x|) sin(2*),*'=-2.5 ..-2)
Приходится признать, что в данном случае система Maple 7 ведет себя далеко не самым лучшим образом. Чтобы довести анализ F(x) до конца, придется вспомнить, что у функции без особенностей максимумы и минимумы наблюдаются в точках, где производная меняет знак и проходит Через нулевое значение. Таким образом, мы можем найти минимумы и максимумы по критерию равенства производной нулю. В данном случае это приводит к успеху:
Поиск минимумов по критерию равенства нулю производной
> fso1ve(d1ff(F(x),x)=0,x,-.5...5);
-.01274428224
>xm:=%;
хт:= -.0003165288799
>[F(xm),F(xnn-.001),F(xm-.001)]:
[-.00001562612637, .00003510718293, -.00006236451216]
>fsolve(diff(F(x),x)-0.x,-2.5..-2);
-2.271212360 '
>fso1ve(diff(F(x),x)=0,x.2..2.5):
2.175344371
Неудачный поиск максимума
>maximize(F(x) ,x--l.. - .5);
maximize(.05х + хе (-|x|) * sin(2x),x = -l .. -.5)
Поиск максимумов по критерию равенства нулю производной
>fso1ve(diff(F(x).x),x,-l..-.5);
-.8094838517
>fso1ve(diff(F(x),x),x..5..2):
.8602002115
>fsolve(diff(F(x),x),x.-4..-3);
-3.629879137
>fsolve(diff(F(x),x).x,3..4);
3.899664536
Итак, все основные особые точки данной функции (нули, минимумы и максимумы) найдены, хотя и не без трудностей и не всегда с применением специально предназначенных для такого поиска функций. В уроке 12 будет описана процедура, которая автоматизирует процесс анализа не очень сложных функций и обеспечивает его наглядную визуализацию.
Создание функций из отдельных кусков
Для создания функций, составленных из отдельных кусков, Maple 7 располагает интересной функцией:
piecewise(cond_l,f_l. cond_2,f_2. .... cond_n,f_n. f_otherwise)
где f_i — выражение, cond_i — логическое выражение, f_otherwise — необязательное дополнительное выражение. В зависимости от того или иного условия эта функция позволяет формировать соответствующую аналитическую зависимость. К кусочным функциям (подчас в скрытой форме) приводят функции с элементами сравнения аргумента, например abs, signum, max и др. Поэтому в Maple 7 введен достаточно мощный аппарат обработки и преобразований таких функций по частям.
Рисунок 9.3 показывает задание функции f(x), содержащей три характерных участка. По определенной через функцию пользователя зависимости f(x) можно, как обычно, построить ее график.
Рис. 9.3. Пример задания и применения функции, составленной из отдельных кусков
Важно отметить, что созданная с помощью функции piecewise зависимость может участвовать в различных преобразованиях. Например, на рис. 9.3 показано, что она легко дифференцируется и можно построить график производной этой функции. При этом каждая часть функции обрабатывается отдельно.
С функциями типа piecewise можно работать, как с обычными функциями. При этом необходимые операции и преобразования осуществляются для каждой из частей функции и возвращаются в наглядной форме.
Ниже приведен пример задания функции f в аналитической форме:
Для выявления характера функции воспользуемся функцией convert и создадим объект g в виде кусочной функции:
Выполним дифференцирование и интегрирование функции:
Как нетрудно заметить, результаты получены также в виде кусочных функций. Можно продолжить работу с функцией f и выполнить ее разложение в степенной ряд:
> series(f, х);
-1+.Х + О(x6)
Чтобы убрать член с остаточной погрешностью, можно выполнить эту операцию следующим образом:
> series(g, x);
-1 + х
Обратите внимание на то, что поскольку разложение в ряд ищется (по умолчанию) в окрестности точки х=0, то при этом используется тот кусок функции, в котором расположена эта точка. Читатель может продолжить работу с кусочными функциями и далее.
К числу наиболее известных и изученных аналитических функций относятся степенные многочлены — полиномы. Графики полиномов описывают огромное разнообразие кривых на плоскости. Кроме того, возможны рациональные полиномиальные выражения в виде отношения полиномов. Таким образом, круг объектов, которые могут быть представлены полиномами, достаточно обширен, и полиномиальные преобразования широко используются на практике, в частности, для приближенного представления других функций.
Под полиномом в системе Maple 7 понимается сумма выражений с целыми степенями. Многочлен для ряда переменных —многомерный полином. К одномерным полиномам относятся степенной многочлен:
а также отдельная переменная х и константа. Большое достоинство полиномов состоит в том, что они дают единообразное представление многих зависимостей и для своего вычисления требуют только арифметических операций (их число значительно сокращается при использовании хорошо известной схемы Горнера). Производные от полиномов и интегралы с подынтегральными функциями-полиномами легко вычисляются и имеют простой вид. Есть и достаточно простые алгоритмы для вычисления всех (в том числе комплексных) корней полиномов на заданном промежутке.
Для выделения коэффициентов полиномов в Maple 7 служат следующие функции:
Ниже даны примеры применения этих функций:
ПРИМЕЧАНИЕ
Следует обратить внимание на то, что при выполнении операции collect в прежних версиях Maple довольно часто возникала фатальная ошибка. Как видно из приведенных примеров, в Maple 7 такой ошибки уже не возникает.
Полином может быть неполным, то есть не содержать членов со степенями ниже некоторой. Функция lcoeff возвращает старший, а функция tcoeff — младший коэффициент полинома нескольких переменных. Эти функции задаются в виде:
lcoeff(p) tcoeff(p)
Icoeff(p. x) tcoeff(p, x)
Icoeff(p. x. 't') tcoeff(p, x. 't')
Функции Icoeff и tcoef f возвращают старший (младший) коэффициент полинома р относительно переменной х или ряда переменных при многомерном полиноме. Если х не определено, Icoeff (tcoeff) вычисляет старший (младший) коэффициент относительно всех переменных полинома р. Если третий аргумент t определен, то это имя назначено старшему (младшему) члену р. Если х — единственное неизвестное и d — степень р по х, то lcoeff(p, x) эквивалентно coef f (p. x, d). Если х — список или множество неизвестных, lcoeff (tcoef f) вычисляет старший (младший) коэффициент р, причем р рассматривается как полином многих переменных. Имейте в виду, что р должен быть разложен по степеням неизвестного х до вызова функций lcoeff или tcoef f.
Приведем примеры применения функций lcoeff, tcoef f и coeffs:
Функция degree возвращает высшую степень полинома, а ldegree — низшую степень. Эти функции задаются следующим образом:
degree(a.x) ldegree(a.x)
Функции degree и ldegree используются, чтобы определить высшую и низшую степени полинома от неизвестного (неизвестных) х, которое чаще всего является единственным, но может быть списком или множеством неизвестных. Полином может иметь отрицательные целые показатели степеней при х. Таким образом, degree и ldegree могут возвратить отрицательное или положительное целое число. Если выражение не является полиномом от х данным параметром, то возвращается FAIL.
Чтобы degree и ldegree возвратили точный результат, полином обязательно должен быть сгруппирован по степеням х. Например, для выражения (х + 1) (х+ 2) - х2 функция degree не обнаружит аннулирование старшего члена и неправильно возвратит результат 2. Во избежание этой проблемы перед вызовом degree следует применять к полиному функции collect или expand. Если х — множество неизвестных, degree/ ldegree вычисляет полную степень. Если х — список неизвестных, degree/ldegree вычисляет векторную степень. Векторная степень определяется следующим образом:
degree(p.[]) =0
degree(p.[xl.x2,...]) =degree(p.xl) degree(lcoeff(p.xl),[x2....])
Полная степень тогда определяется следующим образом:
degree(p.{xl....,xn}) - maximum degree(p.{xl....xn})
или
degree(p,{xl....,xn}) = degree(p.[xl,....xn])
Обращаем внимание на то, что векторная степень зависит от порядка перечисления неизвестных, а полная степень не зависит.
Примеры применения функций degree и ldegree:
Для разложения полинома р по степеням служат инертные функции AFactor(р) и AFactors(p). Полином может быть представлен в виде зависимости от одной или нескольких переменных.
Функция Afactor(p) выполняет полную факторизацию (разложение) полинома р от нескольких переменных с коэффициентами в виде алгебраических чисел над полем комплексных чисел. При этом справедливо отношение evala(AFactor(p) )=factor(p,complex). Таким образом, эта функция является, по существу, избыточной.
В случае одномерного полинома полное разложение на множители является разложением на линейные множители. Функция AFactors аналогична функции Afactor, но создает структуру данных формы [u,[[f[l],e[l]],....[f[n],e[n]]]] так, что p=u*f[l]xe[l]*...*f[n]^e[n], где каждый f[i] — неприводимый полином.
Ниже даны примеры применения функции Afactor:
Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.
Для вычисления действительных и комплексных корней полиномов служит уже известная нам функция solve(p.x), возвращающая список корней полинома р одной переменной. Кроме того, имеются следующие функции для вычисления корней полиномов:
roots(p) , roots(p. К) ,
roots(p. x), roots(p. x. К)
Эти функции вычисляют точные корни в рациональной или алгебраической области чисел. Корни возвращаются в виде [ [rl.ml], .... [rn.mn] ], где ri — это
корень полинома, a mi — порядковый номер полинома. С действиями этих функций можно разобраться с помощью приведенных ниже примеров:
С полиномами могут выполняться различные операции. Прежде всего отметим некоторые функции, которые относятся к одному полиному:
Действие этих функций достаточно очевидно, поэтому ограничимся приведением примеров их использования:
Обратите внимание на то, что для использования некоторых из приведенных функций необходим вызов их из стандартной библиотеки. Для функции randpoly приведенные результаты случайны, так что, скорее всего, их повторение невозможно.
С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:
В целом надо отметить, что аппарат действий с полиномами в Maple 7 хорошо развит и позволяет выполнять с ними практически любые математические операции. В частности, можно вычислять производные от полиномов и интегралы, у которых полиномы являются подынтегральными функциями:
Хотя в подавляющем большинстве случаев используются степенные многочлены (полиномы) с положительными степенями, Maple 7 не накладывает особых ограничений и на многочлены с отрицательными степенями. Например, можно задать такой степенной многочлен:
Нетрудно показать, что с ним можно выполнять различные операции:
ПРИМЕЧАНИЕ
Maple 7 не накладывает ограничений на применение степенных многочленов (полиномов) с отрицательными степенями. Однако свойства таких полиномов заметно отличаются от свойств полиномов с положительными степенями, поэтому при применении первых надо проявлять известную осторожность.
Интерполяция, экстраполяция и аппроксимация
Вычисление многих функций, особенно специальных, требует больших затрат времени. Поэтому до сих пор широко применяются таблицы таких функций. Достаточно отметить знаменитые на весь мир таблицы в книге «Справочник по специальным функциям с формулами, графиками и таблицами» под редакцией М. Абрамовица и И. Стиган [59].
Если некоторая зависимость у(х) представлена рядом табличных отсчетов y(x), то интерполяцией принято называть вычисление значений у(х) при заданном х, расположенном в интервале между отсчетами. За пределами общего интервала определения функции [а,b], то есть при х < а и х > b, вычисление у(х) называют экстраполяцией (или иногда предсказанием значений функции). В данном случае речь идет об одномерной интерполяции, но возможны двумерная интерполяция функций двух переменных z(x, у) и даже многомерная интерполяция для функций многих переменных.
Интерполяция и экстраполяция часто выполняются по некоторой скрытой, но подразумеваемой зависимости. Например, если узловые точки функции соединить отрезками прямых, то будем иметь многоинтервальную линейную интерполяцию данных. Если использовать отрезки параболы, то интерполяция будет параболической. Особое значение имеет многоинтервальная сплайн-интерполяция, области применения которой уже сейчас весьма обширны и непрерывно расширяются. Интерполяция рядом Фурье (набором синусоидальных функций) также достаточно хорошо известна; она эффективна при интерполяции периодических функций.
Аппроксимацией в системах компьютерной математики обычно называют получение приближенных значений какого-либо выражения. Однако под аппроксимацией функций подразумевается получение некоторой конкретной функции, вычисленные значения которой с некоторой точностью аналогичны аппроксимируемой зависимости. Обычно предпочитают найти одну зависимость, приближающую заданный ряд узловых точек. Часто для этого используют степенные многочлены — полиномы.
Здесь мы будем рассматривать такие виды аппроксимации, которые дают точные значения функции у(х) в узловых точках в пределах погрешности вычислений по умолчанию. Если аппроксимирующая зависимость выбирается из условия наименьшей среднеквадратической погрешности в узловых точках (метод наименьших квадратов), то мы имеем регрессию или приближение функций по методу наименьших квадратов.
Если функция задана аналитически, то наиболее простым способом нахождения ее аппроксимирующей зависимости является применение функции convert. Это поясняют следующие примеры:
На рис. 9.4 представлен пример полиномиальной аппроксимации хорошо известной статистической функции erfc(x). Для полинома задана максимальная степень 12, но ввиду отсутствия в разложении четных степеней максимальная степень результата оказывается равна 11.
Рис. 9.4. Пример полиномиальной аппроксимации функции erfc(x)
Как видно из приведенного рисунка, в интервале изменениях от -1,5 до 1,5 аппроксимирующее выражение почти повторяет исходную зависимость. Однако затем график аппроксимирующей функции быстро отходит от графика исходной зависимости. При этом он ведет себя иначе даже качественно, никоим образом не показывая асимптотическое поведение, характерное для исходной зависимости.
Если данные некоторой зависимости у(х) заданы векторами X и Y ее дискретных значений, то для получения интерполяционного степенного многочлена достаточно записать многочлен для всех N пар значений yi(xi) при i=1...N (или i =0...N- 1, если индексы отсчетов начинаются с нуля). Полученная при этом система линейных (относительно коэффициентов полинома) уравнений после решения дает коэффициенты аппроксимирующего полинома. Степень полинома на 1 меньше N, а вычисляемые при х значения у(х) совпадают с табличными (узловыми) в пределах вычислительной погрешности.
На самом деле все это делать не нужно, поскольку Maple 7 имеет реализующую данный алгоритм встроенную функцию interp(X,Y,v) или в инертной форме Interp(X,Y,v).
Переменная v указывает имя переменной интерполяционного полинома. Векторы X и Y должны содержать n + 1 =N координат точек исходной зависимости, где и — степень интерполирующего полинома.
Рисунок 9.5 показывает технику применения полиномиальной аппроксимации на основе функции interp с построением графика исходных точек и аппроксимирующего полинома. Нетрудно заметить, что график полинома проходит точно через исходные точки — они показаны квадратиками.
В этом примере полезно присмотреться к визуализации результатов вычислений и совместному построению графика интерполирующего полинома и исходных точек. В частности, для построения последних использована обычная функция plot, позволяющая выводить на график точки с заданными координатами, причем не только в виде окружностей, но и в виде точек, маленьких крестиков, кружков, квадратов и других фигур. Для выбора типа точек и других параметров графика его надо выделить (установив указатель мыши в поле графика и щелкнув левой кнопкой) и нажать правую кнопку мыши — появится контекстно-зависимое меню с операциями форматирования графика. Это меню показано на рис. 9.5.
Приведем еще несколько примеров использования функции Interp:
Рис. 9.5. Пример осуществления полиномиальной аппроксимации
Точность полиномиальной аппроксимации катастрофически падает при увеличении степени аппроксимирующих полиномов. От этого недостатка можно избавиться, используя для аппроксимации отрезки полиномов невысокой степени, применяемые для представления части узловых точек. Самым известным методом такой аппроксимации является сплайн-аппроксимация на основе применения отрезков кубических полиномов. При этом аппарат сплайн- аппроксимации позволяет получить полиномы, которые дают в узловых точках непрерывность не только представляемой ими функции, но и ее первых и даже вторых производных.
Наглядно сплайн-функцию можно представить в виде гибкой стальной линейки, закрепленной в узловых точках и плавно изгибающейся. Благодаря указанным свойствам сплайнов они неплохо описывают функции, представленные как небольшим числом узловых точек (благодаря плавности сплайн- кривых), так и функции, представляемые очень большим числом узловых точек (поскольку порядок полиномов от этого числа уже не зависит). Недостатком сплайн- аппроксимации является отсутствие общего выражения для всей кривой. Фактически приходится использовать набор сплайн- функций для различных интервалов между узловыми точками.
Для получения сплайн- интерполяций используется Maple-функция spline (X, Y, var, d).
Здесь X и Y — одномерные векторы одинакового размера, несущие значения координат узловых точек исходной функции (причем в произвольном порядке), var — имя переменной, относительно которой вычисляется сплайн-функция, наконец, необязательный параметр d задает вид сплайна. Он может иметь следующие значения: 1inear — линейная функция, или полином первого порядка, quadratic — квадратичная функция, или полином второго порядка, cubic — полином третьего порядка, quartiс — полином четвертого порядка. Если параметр d опущен, то сплайн-функция будет строиться на основе полиномов третьего порядка (кубические сплайны).
Технику сплайновой аппроксимации наглядно поясняет рис. 9.6. На нем представлено задание векторов узловых точек X и Y и четырех сплайновых функций, по которым построены их графики. Для одной из функций (с линейной интерполяцией между узлами) показан вид сплайновой функции.
Рис. 9.6. Задание сплайновой аппроксимации и построение графиков полученных функций
Как видно из рис. 9.6, сплайновая функция представляет собой кусочную функцию, определяемую на каждом отдельном интервале. При этом на каждом участке такая функция описывается отдельным полиномом соответствующей степени. Функция plot «понимает» такие функции и позволяет без преобразования типов данных строить их графики. Для работы с кусочными функциями можно использовать функции convert и piecewise.
Прямое и обратное Z-преобразования функций широко используются при решении задач автоматического управления. Эти преобразования задаются следующими функциями:
Заметим, что прямое Z-преобразование базируется на соотношении ztrans(f (n) ,n,z)= = sum(f(n)/z~n,n=0. .infinity), записанном на Maple-языке. В первых версиях системы Maple Z-преобразования выполнялись средствами библиотеки и требовали вызова командой readlib(ztrans). Но в Maple 7 они включены в ядро системы и предварительного вызова уже не требуют. В этом убеждают следующие примеры:
Родственные Z-преобразованиям интегральные преобразования Лапласа и Фурье реализуются с помощью пакета inttrans (интегральные преобразования).
В этом уроке мы научились:
Выполнять поиск экстремумов функций.
Заключение
Программа Maple корпорации Waterloo Maple Inc. — патриарх в мире систем компьютерной математики. Эта система, снискавшая себе мировую известность и огромную популярность, является одной из лучших среди систем символьной математики, позволяющих решать математические задачи в аналитическом виде. Эта книга познакомила читателей с новейшей версией Maple — Maple 7. Она вобрала в себя не только обширные и мощные возможности- предшествующих реализаций системы, но и предоставила в распоряжение пользователя ряд новых возможностей. Прежде всего это целый букет пакетов: CurveFitting, PolynomialTools, OrthogonalSeries и др.
Maple как система компьютерной математики развивается по ряду характерных направлений. Одно из них — повышение мощности и достоверности аналитических (символьных) вычислений. Это направление представлено в Maple наиболее сильно. Maple 7 уже сегодня способна выполнять сложнейшие аналитические вычисления, которые нередко не под силу даже опытным математикам. Конечно, Maple не способна на «гениальные догадки», но зато рутинные и массовые расчеты система выполняет с блеском. В новой версии ее возможности существенно расширены, особенно в области решений дифференциальных уравнений. : Другое важное направление — повышение эффективности численных расчетов. И тут успехи налицо — начиная с версии Maple 6 в систему включены эффективные алгоритмы группы NAG, лидирующей в области численных расчетов. Повышена эффективность и алгоритмов самой системы Maple 7. В результате этого заметно возросла перспектива использования Maple в численном моделировании и выполнении сложных численных расчетов — в том числе с произвольной точностью.
Интеграция Maple с другими программными средствами — еще одно важное направление развития этой системы. Ядро символьных вычислений Maple уже включено в состав целого ряда систем компьютерной математики — от систем «для всех» класса Mathcad до одной из лучших систем для численных расчетов и моделирования — MATLAB. Имеется целый ряд автоматизированных рабочих мест для математиков на основе ядра системы Maple: Math Office, Scientific Word, Scientific Workplace и др.
Предусмотрена и интеграция Maple 7 с Excel 2000 и MATLAB. Однако альянс Maple 7 с Excel трудно назвать удачным. Во-первых, потому, что куда более распространенная версия Excel 97 связь с Maple 7 не поддерживает. Во-вторых, введенные в Maple 7 средства работы с таблицами (в том числе новые) в большинстве случаев оказываются более удобными, чем обычные средства работы с таблицами у Excel. Достаточно отметить, что таблицы в Maple могут работать с формульными данными и построение рисунков в Maple не требует создания таблицы данных для них, как это нужно в Excel.
Существенно расширена поддержка системы Maple через Интернет. Появление на сайте корпорации Waterloo Maple Inc. массы информационных материалов, и прежде всего обучающих программ и примеров применения Maple, разгрузило саму программу и предоставило ее пользователям обширные возможности в пополнении своих знаний и навыков работы с Maple 7.
С другой стороны, резко повышены возможности Maple 7 для создания web-страниц — основы Интернета. Здесь прежде всего надо отметить включение в пакеты средств поддержки языков HTML, XML и (что особенно важно) MathML.
Все эти возможности в сочетании с прекрасно выполненным и удобным пользовательским интерфейсом и мощной справочной системой делают Maple 7 первоклассной программной средой для решения самых разнообразных математических задач: от самых простых до самых сложных. Особо следует отметить возможность создания превосходных электронных документов, статей, книг и учебников в среде Maple 7 с «живыми» и модифицируемыми примерами.
Maple — быстро развивающаяся система, и работа с ней не только полезна, но и приятна для всех категорий пользователей и учащихся. Автор надеется, что эта книга привлечет внимание наших читателей, и прежде всего специалистов, преподавателей вузов, аспирантов, студентов и даже школьников, к такому уникальному программному продукту, как система компьютерной математики Maple 7, и поможет им в решении учебных и реальных научно-технических задач.
Самоучитель по MatLab
|
Введение
В наши дни компьютерная математика получила должную известность и интенсивно развивается как передовое научное направление на стыке математики и информатики. Это нашло отражение в крупной монографии и в целом ряде книг и обзоров автора данной книги, начавшего осваивать это направление еще в начале 80-х гг. прошлого века.
Программируемые микрокалькуляторы и персональные компьютеры уже давно применяются для математических расчетов. Для подготовки программ использовались различные универсальные языки программирования. В начале 90-х гг. на смену им пришли специализированные системы компьютерной математики (СКМ).
Среди них наибольшую известность получили системы Eureka, Mercury, Mathcad, Derive, Mathematica 2/3/4, Maple V R3/R4/R5 и Maple 6 и др. Каждая из этих систем имеет свои достоинства и недостатки и заслуживает отдельного рассмотрения. Повышенный интерес наших пользователей к подобным системам подтверждают результаты выпуска в последние годы целого ряда книг на русском языке, посвященных указанной теме. В списке литературы данной книги даны лишь основные из этих публикаций. За рубежом по каждой серьезной СКМ на web-сайтах их разработчиков можно найти перечни, включающие сотни наименований книг.
В данной книге рассматривается система MATLAB®, прошедшая многолетний путь развития от узко специализированного матричного программного модуля, используемого только на больших ЭВМ, до универсальной интегрированной СКМ, ориентированной на массовые персональные компьютеры класса IBM PC и Macintosh и рабочие станции UNIX и имеющей мощные средства диалога, графики и комплексной визуализации . MATLAB представляет собой хорошо апробированную и надежную СКМ, рассчитанную на решение самого широкого круга математических задач с представлением данных в универсальной (но не навязываемой пользователям) матричной форме, предложенной фирмой Math Works, Inc.
Система MATLAB предлагается разработчиками (фирма Math Works, Inc.) как лидирующий на рынке, в первую очередь в системе военно-промышленного комплекса, в аэрокосмической отрасли и автомобилестроении, язык программирования высокого уровня для технических вычислений с большим числом стандартных пакетов.прикладных программ. Система MATLAB вобрала в себя не только передовой опыт развития и компьютерной реализации численных методов, накопленный за последние три десятилетия, но и весь опыт становления математики за всю историю человечества. Около миллиона легально зарегистрированных пользователей уже применяют эту систему. Ее охотно используют в своих научных проектах ведущие университеты и научные центры мира. Популярности системы способствует ее мощное расширение Simulink, предоставляющее удобные и простые средства, в том числе визуальное объектно-ориентированное программирование, для моделирования линейных и нелинейных динамических систем, а также множество других пакетов расширения системы.
К сожалению, в России неоправданно мало публикаций по системе MATLAB. Помимо обзоров и первой книги по этой системе, в течение ряда лет серьезных изданий, посвященных MATLAB, практически не было. Наконец, в 1997-1999 гг. появились книги, содержащие перевод части фирменных справочников по системе MATLAB 4.0/5.2. При этом книга описывает лишь отдельные средства упрощенной студенческой версии системы MATLAB 5.0. Стали появляться и книги по пакетам расширения этой системы, и учебные курсы по системе MATLAB. Между тем за рубежом системе MATLAB посвящены сотни книг (их список можно найти на Web-узле фирмы Math Works, Inc., разработавшей эту систему), и еще сотни книг посвящены системе Maple V Release 5, ядро которой входит в состав пакетов расширения MATLAB 6.
Таким образом, интерес к системе MATLAB остается у нас неудовлетворенным. Особенно это относится к учебной литературе по новейшим реализациям системы MATLAB, в первую очередь MATLAB 6. Система MATLAB 6.0 появилась в конце 2000 г., а система MATLAB 6.1 (в которой весьма существенно переработаны пакеты расширения, но в ядро системы добавлены лишь две команды для работы со звуком и команда strfind, дополняющая возможности подробно описанной в книге функции findstr) — в июле 2001 г. MATLAB 6 является последней (на момент подготовки рукописи этой книги) реализацией системы MATLAB. В новой реализации системы не только расширены ее возможности, но и радикально переработан и улучшен интерфейс пользователя, существенно обновился состав пакетов расширений.
Хотя учебный курс по MATLAB 5.3 был выпущен в начале 2001 г., на момент подготовки рукописи данной книги публикаций по новейшей версии MAT-LAB 6 на русском языке вообще не было. Настоящая книга призвана ликвидировать этот пробел. Она подготовлена на основе существенно переработанного учебного курса, но в отличие от него посвящена уже новейшей 12-й реализации системы MATLAB, известной также как MATLAB 6. MATLAB 6 сразу получила широкую известность у нас в России. Как это ни печально, известность пришла во многом благодаря появлению большого числа «пиратских» компакт-дисков, содержащих полные и вполне работоспособные поставки MATLAB 6.0 со всеми ее дорогостоящими пакетами расширения (но, естественно, без русскоязычной документации).Данная книга представляет собой учебный курс по системе MATLAB 6, построенный в виде доступных и органично связанных друг с другом уроков. Описание пакетов расширения MATLAB ввиду большого объема материала по ним было решено вынести в отдельную книгу. При этом предполагаются ее существенно переработанные переиздания, посвященные каждой из версий MATLAB 6. Кроме того, существует учебный курс издательства «Питер» по визуальному моделированию в среде MATLAB, фокусирующийся на средствах Simulink [44]. Впрочем, некоторые примеры применения пакетов расширения в данную книгу включены, как и довольно подробный обзор этих пакетов (урок 23).
Отличия новой реализации MATLAB 6 от предшествующих версий 5.* настолько значительны, что вряд ли стоит пользоваться настоящим изданием для знакомства с предшествующими версиями MATLAB. Читателям, использующим MATLAB 5.*, в том числе любителям Macintosh, VAX/micro VAX и SunOS, можно рекомендовать уже упомянутую ранее изданную литературу по этим системам, все еще верой и правдой служащим многим пользователям. MATLAB 5 — развивающаяся система, которая будет обслуживать пользователей RISC- и VAX-станций Compaq в системах реального времени, пользователей компьютеров Apple, компьютеров на базе процессоров семейства Motorola 68000 и всех тех, кому важна совместимость с Macintosh, Next или RISC-серверами и рабочими станциями под управлением OpenVMS. Новейшие патчи к системам MATLAB 5 можно всегда получить с web-узла фирмы Math Works.
Оглавление книги может служить подробным тематическим указателем, а помещенный в конце книги алфавитный указатель поможет читателю быстро найти интересующие его сведения. Операторы и функции MATLAB 6 описаны настолько подробно, что книга может служить руководством пользователя по этой системе и выполнять функции самоучителя. В целом книга имеет вполне законченный характер и полезна всем, кто собирается изучать или уже использует любую реализацию системы MATLAB 6.
Урок №1.
Знакомство с матричной лабораторией MATLAB
История появления системы MATLAB
Современная компьютерная математика предлагает целый набор интегрированных программных систем и пакетов программ для автоматизации математических расчетов: Eureka, Gauss, TK Solver!, Derive, Mathcad, Mathematica, Maple V и др. Возникает вопрос: «А какое место занимает среди них система MATLAB?»
MATLAB — одна из старейших, тщательно проработанных и проверенных временем систем автоматизации математических расчетов, построенная на расширенном представлении и применении матричных операций. Это нашло отражение в названии системы — MATrix LABoratory — матричная лаборатория. Однако синтаксис языка программирования системы продуман настолько тщательно, что эта ориентация почти не ощущается теми пользователями, которых не интересуют непосредственно матричные вычисления.
Матрицы широко применяются в сложных математических расчетах, например при решении задач линейной алгебры и математического моделирования статических и динамических систем и объектов. Они являются основой автоматического составления и решения уравнений состояния динамических объектов и систем. Примером может служить расширение MATLAB — Simulink. Это существенно повышает интерес к системе MATLAB, вобравшей в себя лучшие достижения в области быстрого решения матричных задач.
. Однако в настоящее время MATLAB далеко вышла за пределы специализированной матричной системы и стала одной из наиболее мощных универсальных интегрированных СКМ. Слово «интегрированная» указывает на то, что в этой системе объединены удобная оболочка, редактор выражений и текстовых комментариев, вычислитель и графический программный процессор. В новой версии используются такие мощные типы данных, как многомерные массивы, массивы ячеек, массивы структур, массивы Java и разреженные матрицы, что открывает возможности применения системы при создании и отладке новых алгоритмов матричных и основанных на них параллельных вычислений и крупных баз данных.
В целом MATLAB — это уникальная коллекция реализаций современных численных методов компьютерной математики, созданных за последние три десятка лет. Она вобрала в себя и опыт, правила и методы математических вычислений, накопленные за тысячи лет развития математики. Это сочетается с мощными средствами графической визуализации и даже анимационной графики. Систему с прилагаемой к ней обширной документацией вполне можно рассматривать как фундаментальный многотомный электронный справочник по математическому обеспечению ЭВМ — от массовых персональных компьютеров до супер-ЭВМ.
Увы, пока представленный полностью лишь на английском и частично на японском языках!
Система MATLAB была разработана Молером (С. В. Moler) и с конца 70-х гг. широко использовалась на больших ЭВМ. В начале 80-х гг. Джон Литл (John Little) из фирмы MathWorks, Inc. разработал версии системы PC MATLAB для компьютеров класса IBM PC, VAX и Macintosh. В дальнейшем были созданы версии для рабочих станций Sun, компьютеров с операционной системой UNIX и многих других типов больших и малых ЭВМ. Сейчас свыше десятка популярных компьютерных платформ могут работать с системой MATLAB. К расширению системы были привлечены крупнейшие научные школы мира в области математики, программирования и естествознания. И вот теперь появилась новейшая версия этой системы — MATLAB 6. Одной из основных задач системы было предоставление пользователям мощного языка программирования, ориентированного на математические расчеты и способного превзойти возможности традиционных языков программирования, которые многие годы использовались для реализации численных методов. При этом особое внимание уделялось как повышению скорости вычислений, так и- адаптации системы к решению самых разнообразных задач пользователей.
Возможности MATLAB весьма обширны, а по скорости выполнения задач система нередко превосходит своих конкурентов. Она применима для расчетов практически в любой области науки и техники. Например, очень широко используется при математическом моделировании механических устройств и систем, в частности в динамике, гидродинамике, аэродинамике, акустике, энергетике и т. д. Этому способствует не только расширенный набор матричных и иных операций и функций, но и наличие пакета расширения (toolbox) Simulink, специально предназначенного для решения задач блочного моделирования динамических систем и устройств, а также десятков других пакетов расширений.
В обширном и постоянно пополняемом комплексе команд, функций и прикладных программ (пакетов расширения, пакетов инструментов, (toolbox)) [Пакет инструментов, пакет расширения, прикладная программа — почти синонимы при переводе термина toolbox, но пакет инструментов собственно MATLAB 6 рассматривается как один из toolbox всей системы, включающей MATLAB 6, Simulink и другие пакеты. Редакция старалась максимально сохранить авторский стиль, но следует помнить, что и под прикладной программой, и иод пакетом расширения автор имеет в виду toolbox в терминах MATLAB. — Примеч. ред.
] системы MATLAB содержатся специальные средства для электротехнических и радиотехнических расчетов (операции с комплексными числами, матрицами, векторами и полиномами, обработка данных, анализ сигналов и цифровая фильтрация), обработки изображений, реализации нейронных сетей, а также средства, относящиеся к другим новым направлениям науки и техники. Они иллюстрируются множеством практически полезных примеров. К разработкам расширений для системы MATLAB привлечены многие научные школы мира и руководящие ими крупные ученые и педагоги университетов.
Важными достоинствами системы являются ее открытость и расширяемость. Большинство команд и функций системы реализованы в виде текстовых m-файлов (с расширением .m) и файлов на языке Си, причем все файлы доступны для модификации. Пользователю дана возможность создавать не только отдельные файлы, но и библиотеки файлов для реализации специфических задач.
Поразительная легкость модификации системы и возможность ее адаптации к решению специфических задач науки и техники привели к созданию десятков пакетов прикладных программ (toolbox), намного расширивших сферы применения системы. Некоторые из них, например Notebook (интеграция с текстовым процессором Word и подготовка «живых» электронных книг), Symbolic Math и Extended Symbolic Math (символьные вычисления с применением ядра системы Maple V R5) и Simulink (моделирование динамических систем и устройств, заданных в виде системы блоков), настолько органично интегрировались с системой MATLAB, что стали ее составными частями. Аннотационное описание этих и ряда других пакетов дано в уроке 23. Более подробно, хотя в версиях для выпуска 11.
Возможности систем MATLAB
Возможности прежних версий MATLAB 4.x
Уже первые ориентированные на Microsoft Windows версии системы (MATLAB 4.x) обладали мощными средствами. В области математических вычислений:
В области реализации численных методов:
В области программирования:
В области визуализации и графики:
Эти средства сочетались с открытой архитектурой систем, позволяющей изменять уже существующие функции и добавлять свои собственные. Входящая в состав MATLAB программа Simulink дает возможность имитировать реальные системы и устройства, задавая их моделями, составленными из функциональных блоков. Simulink имеет обширную и расширяемую пользователями библиотеку блоков и простые средства задания и изменения их параметров.
Возможности версий MATLAB 5.x
В версиях системы MATLAB 5.x введены новые мощные средства. Улучшенная среда программирования:
Графический интерфейс пользователя (GUI):
Новые типы данных:
Средства программирования:
Математические вычисления и анализ данных:
Новые возможности обычной графики:
Презентационная графика и звук:
Интерактивная документация:
Версия MATLAB 5.3.1 (выпуск 11.1) интегрирует в своем составе 42 программных продукта, среди которых основу составляют базовая система MATLAB и новая реализация пакета расширения Simulink 3.1. В систему введен ряд новых компонентов, включая следующие:
Из других возможностей версии MATLAB 5.3.1 наиболее значимыми являются следующие:
Возможности новейшей версии MATLAB 6
Новейшая версия системы MATLAB 6 не только имеет перечисленные выше возможности предшествующих версий, но и характеризуется целым рядом новых и важных возможностей:
Simulink поступает к пользователям с более 100 встроенными блоками, в состав которых входят наиболее необходимые функции моделирования. Блоки сгруппированы в библиотеки в соответствии с их назначением: источники сигнала, приемники, дискретные, непрерывные, нелинейные, математика, функции и таблицы, сигналы и системы. В дополнение к обширному набору встроенных блоков Simulink имеет расширяемую библиотеку блоков благодаря функции создания пользовательских блоков и библиотек. Вы можете настраивать не только функциональность встроенных и пользовательских блоков, но также пользовательский интерфейс, используя значки и диалоги. Например, вы можете создать блоки для моделирования поведения специальных механических, электрических и программных компонентов, как, например, моторы, преобразователи, серво-клапаны, источники питания, энергетические установки, фильтры, шины, модемы,
Все это говорит о том, что двенадцатый выпуск системы (MATLAB 6.0 + Simu-link 4.0 + Stateflow 4.0 + ...) подвергся не косметической, а самой серьезной переработке, выдвигающей эту систему на абсолютно новый уровень развития и применения.
Интеграция с другими программными системами
В последние годы разработчики математических систем уделяют огромное внимание их интеграции и совместному использованию. Это не только расширяет класс решаемых каждой системой задач, но и позволяет подобрать для них самые лучшие и наиболее подходящие инструментальные средства. Решение сложных математических задач сразу на нескольких системах существенно повышает вероятность получения корректных результатов — увы, как математики так и математические системы способны ошибаться, особенно при некорректной постановке задач неопытными пользователями.
С системой MATLAB могут интегрироваться такие популярные математические системы, как Mathcad, Maple V и Mathematica. Есть тенденция и к объединению
математических систем с современными текстовыми процессорами. Так, новое средство последних версий MATLAB — Notebook — позволяет готовить документы в текстовом процессоре Word 95/97/2000 [Здесь и далее Word 95 и Word 97 — синонимы соотвественно Microsoft Word 7 из пакета Microsoft Office 95 и Microsoft Word 8 из пакета Microsoft Office 97. — Примеч. ред.] со вставками в виде документов MATLAB и результатов вычислений, представленных в численном, табличном или графическом виде. Таким образом, становится возможной подготовка «живых» электронных книг, в которых демонстрируемые примеры могут быть оперативно изменены. Так, вы можете менять условия задач и тут же наблюдать изменение результатов их решения. В версии MATLAB 6 предусмотрены также улучшенные средства для экспорта графики в слайды презентационной программы Microsoft PowerPoint.
В MATLAB задачи расширения системы решаются с помощью специализированных пакетов расширения — наборов инструментов (Toolbox). Многие из них содержат специальные средства для интеграции с другими программами, поддержки объектно-ориентированного и визуального программирования, для генерации различных приложений. Краткое описание пакетов расширения дано в уроке 23. Кроме того, этой теме посвящены отдельные книги.
В состав системы MATLAB входит ядро одной из самых мощных, популярных и хорошо апробированных систем символьной математики (компьютерной алгебры) Maple V Release 5. Оно используется пакетами расширения Symbolic Math Toolbox и Extended Symbolic Math Toolbox, благодаря которым в среде MATLAB стали доступны принципиально новые возможности символьных и аналитических вычислений.
Новые свойства системе MATLAB придала ее интеграция с программной системой Simulink, созданной для моделирования динамических систем и устройств, заданных в виде системы блоков. Базируясь на принципах визуально-ориентированного программирования, Simulink позволяет выполнять моделирование сложных устройств с высокой степенью достоверности и с прекрасными средствами представления результатов. Помимо естественной интеграции с пакетами расширения Symbolic Math и Simulink MATLAB интегрируется с десятками мощных пакетов расширения, описанными в уроке 23, и значительно более подробно, хотя в версиях для выпуска И, в монографии.
В свою очередь, многие другие математические системы, например Mathcad и Maple, допускают установление объектных и динамических связей с системой MATLAB, что позволяет использовать в них эффективные средства MATLAB для работы с матрицами. Эта прогрессивная тенденция интегрирования компьютерных математических систем, несомненно, будет продолжена.
Ориентация на матричные операции
Напомним, что двумерный массив чисел или математических выражений принято называть матрицей. А одномерный массив называют вектором. Примеры векторов и матриц даны ниже:{l, 2, 3, 4} — вектор из 4 элементов;
1 2 3 4
5 6 7 8 матрица размера 3x4;
9 8 7 6
а | а+b | а+b/с |
х | у*х | z |
1 | 2 | 3 |
матрица с элементами разного типа.
Векторы и матрицы характеризуются размерностью и размером. Размерность определяет структурную организацию массивов в виде строки (размерность 1), страницы (размерность 2), куба (размерность 3) и т. д. Так что вектор является одномерным массивом, а матрица представляет собой двумерный массив с размерностью 2. MATLAB допускает задание и использование многомерных массивов, но в этой главе мы пока ограничимся только одномерными и двумерными массивами — векторами и матрицами.
Размер вектора — это число его элементов, а размер матрицы определяется числом ее строк т и столбцов п. Обычно размер матрицы указывают как тхп. Матрица называется квадратной, если m = n, то есть число строк матрицы равно числу ее столбцов.
Векторы и матрицы могут иметь имена, например V — вектор или М — матрица. В данной книге имена векторов и матриц набираются полужирным шрифтом. Элементы векторов и матриц рассматриваются как индексированные переменные, например:
Система MATLAB выполняет сложные и трудоемкие операции над векторами и матрицами даже в режиме прямых вычислений без какого-либо программирования. Ею можно пользоваться как мощнейшим калькулятором, в котором наряду с обычными арифметическими и алгебраическими действиями могут использоваться такие сложные операции, как инвертирование матрицы, вычисление ее собственных значений и принадлежащих им векторов, решение систем линейных уравнений, вывод графиков двумерных и трехмерных функций и многое другое.
Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размера 1x1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Данная операция обычно называется векторизацией. Векторизация обеспечивает и упрощение записи операций, производимых одновременно над всеми элементами вектрров и матриц, и существенное повышение скорости их выполнения. Это также означает, что большинство функций может работать с аргументами в виде векторов и матриц. При необходимости вектора и матрицы преобразуются в массивы, и значения вычисляются для каждого их элемента.
Расширяемость системы
Какой бы мощной ни была та или иная математическая система, она не способна включить в себя все средства, которые могут потребоваться сотням тысяч пользователей. Поэтому важно, чтобы система была достаточно гибкой и способной адаптироваться к различным задачам пользователей самых разных категорий — начинающих и опытных математиков, инженеров и научных работников, аспирантов и студентов вузов и даже школьников.
MATLAB — расширяемая система, и ее легко приспособить к решению нужных вам классов задач. Ее огромное достоинство заключается в том, что это расширение достигается естественным путем и реализуется в виде так называемых т-файлов (с расширением .m). Иными словами, расширения системы хранятся на жестком диске компьютера и в нужный момент вызываются для использования точно так же, как встроенные в MATLAB (внутренние) функции и процедуры.
Благодаря текстовому формату m-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и затем пользоваться ими столь же просто, как и встроенными операторами или функциями. При этом в отличие от таких языков программирования, как Бейсик, Си или Паскаль не требуется никакого объявления этих новых функций. Это роднит MATLAB с языками Лого и Форт, имеющими словарную организацию операторов и функций и возможности пополнения словаря новыми определениями-словами. Но, поскольку новые определения в системе MATLAB хранятся в виде файлов на диске, это делает набор операторов и функций практически неограниченным.
В базовый набор слов системы входят спецзнаки, знаки арифметических и логических операций, арифметические, алгебраические, тригонометрические и некоторые специальные функции, функции быстрого преобразования Фурье и фильтрации, векторные и матричные функции, средства для работы с комплексными числами, операторы построения графиков в декартовой и полярной системах координат, трехмерных поверхностей и т. д. Словом, MATLAB предоставляет пользователю обширный набор готовых средств (большая часть из них — это внешние расширения в виде m-файлов).
Дополнительный уровень системы образуют ее пакеты расширения (toolbox). Они позволяют быстро ориентировать систему на решение задач в той или иной предметной области: в специальных разделах математики, в физике и в астрономии, в области нейтронных сетей и средств телекоммуникаций, в математическом моделировании, проектировании событийно-управляемых систем и т. д. Благодаря этому MATLAB обеспечивает высочайший уровень адаптации к решению задач конечного пользователя.
Мощные средства программирования
Многие математические системы создавались исходя из предположения, что пользователь будет решать свои задачи, практически не занимаясь программированием. Однако с самого начала было ясно, что подобный путь имеет недостатки
и, вообще говоря, порочен. Ведь многие задачи нуждаются в развитых средствах программирования, которые упрощают запись алгоритмов задач и порой открывают новые методы создания алгоритмов.
С одной стороны, MATLAB содержит огромное число операторов и функций, которые решают множество практических задач, для чего ранее приходилось готовить достаточно сложные программы. К примеру, это функции обращения или транспонирования матриц, вычисления значений производной или интеграла и т. д. и т. п. Число таких функций с учетом пакетов расширения системы уже достигает многих тысяч и непрерывно увеличивается.
Но, с другой стороны, система MATLAB с момента своего создания создавалась как мощный математико-ориентированный язык программирования высокого уровня. И многие рассматривали это как важное достоинство системы, свидетельствующее о возможности ее применения для решения новых, наиболее сложных математических задач.
Система MATLAB имеет входной язык, напоминающий Бейсик (с примесью Фортрана и Паскаля). Запись программ в системе традиционна и потому привычна для большинства пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью любого привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Отказ от присущего системе Mathcad «шика» — задания задач в виде формул — компенсируется заметным увеличением скорости вычислений — при прочих равных условиях она почти на порядок выше, чем у системы Mathcad. А это немаловажное достоинство!
Язык системы MATLAB в части программирования математических вычислений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и (средствами Simulink) визуальное программирование. Это дает опытным программистам необъятные возможности для самовыражения.
Визуализация и графические средства
В последнее время создатели математических систем уделяют огромное внимание визуализации решения математических задач. Говоря проще, это означает, что постановка и описание решаемой задачи и результаты решения должны быть предельно понятными не только тем, кто решает задачи, но и тем, кто в дальнейшем их изучает или просто просматривает. Большую роль в визуализации решения математических задач играет графическое представление результатов, причем как конечных, так и промежуточных.
Визуализация постановки задачи в MATLAB решается применением приложения Notebook и назначением именам функций достаточно ясных имен (идентификаторов). А визуализация результатов вычислений достигается применением обширных средств графики, в том числе анимационной, а также использованием (там, где это нужно) средств символьной математики.
Новая версия MATLAB напрочь избавилась от некоторой примитивности графиков, которая была присуща первым версиям этой системы. Теперь новые графические средства Handle Graphics (дескрипторная или описательная графика) позволяют создавать полноценные объекты графики высокого разрешения, как геометрического, так и цветового. Возможности этой графики поддерживаются объектно-ориентированным программированием, средства которого также имеются в языке программирования системы MATLAB.
Реализуются, причем с повышенной скоростью, построения графиков практически всех известных в науке и технике типов. Широко практикуется функциональная закраска сложных поверхностей, в том числе с интерполяцией по цвету. Возможен учет всевозможных световых эффектов — вплоть до бликов на поверхности сложных фигур при освещении их различными источниками света и с учетом свойств материалов отражающих поверхностей. Применение дескрипторной графики позволяет создавать и типовые элементы пользовательского интерфейса — кнопки, меню, информационные и инструментальные панели и т. д., то есть реализовать элементы визуально-ориентированного программирования.
Графики выводятся отдельно от текстов в отдельных окнах. На одном графике можно представить множество кривых, отличающихся цветом (при цветном дисплее) и отличительными символами (кружками, крестиками, прямоугольниками и т. д.). Графики можно выводить в одно или в несколько окон. Наконец, в статьях и книгах формата Notebook, реализованных при совместной работе системы MATLAB с популярным текстовым процессором Microsoft Word 95/97/2000, графики могут располагаться вместе с текстом, формулами и результатами вычислений (числами, векторами и матрицами, таблицами и т. д.). В этом случае степень визуализации оказывается особенно высокой, поскольку документы класса Notebook по существу являются превосходно оформленными электронными книгами с действующими (вычисляемыми) примерами.
Особенно привлекательной выглядит возможность построения трехмерных поверхностей и фигур. Если в MATLAB 4 рендеринг трехмерных фигур осуществлялся только при помощи фирменного механизма painters, а в MATLAB 5 был добавлен программный рендеринг при помощи Z-буфера, то в MATLAB б основным является индустриальный стандарт Open GL. Он может поддерживаться аппаратно графическими ускорителями. Система автоматически подбирает наиболее оптимальный механизм рендеринга. По сравнению с системой Mathcad построение трехмерных фигур средствами MATLAB происходит почти на порядок быстрее. Кроме того, при построении таких графиков используется достаточно совершенный алгоритм удаления невидимых линий, что наряду с большими размерами графиков и возможностью интерполяции по цвету делает построенные трехмерные поверхности и фигуры весьма эстетичными и наглядными. Фигуры могут быть прозрачными. Уже в ранних версиях была введена эффектная возможность быстрого вращения графиков в любом направлении. В MATLAB 5.3.1 и 6 она улучшена — теперь вращать в пространстве можно даже плоскость с двумерными графиками.
Введен также ряд средств на основе графического интерфейса пользователя (GUI — Graphic User Interface), привычного для операционных систем Windows 95/98/Ме/ 2000/NT4. Это панели инструментов, редактор и отладчик m-файлов, красочная
демонстрация возможностей и т. д. Есть и возможность создавать свои средства пользовательского интерфейса.
Техническая документация по системе
Система MATLAB поставляется с обширной технической документацией и с развитой справочной системой. Система помощи реализована как в стандартном для систем MATLAB варианте — в интерактивном командном режиме, так и в форме гипертекстовых страниц с просмотром их браузером помощи. Кроме того, имеется обширный пакет электронных документов в формате PDF (отдельный компакт-диск в версии 6.0), для просмотра которых используется приложение Acrobat Reader (распространяется бесплатно) или Adobe Acrobat. Ниже перечислены наиболее важные из этих документов (далеко не все) для версии MATLAB 6.0 с указанием их объема в страницах: О «Getting Started with MATLAB» — начальное знакомство с системой MATLAB.
Итак, объем фирменной документации только по системе MATLAB 6.0 достигает почти 5000 страниц, что делает ее трудно обозримой. Тем более с учетом того, что эта документация является англоязычной.
Состав документации может несколько меняться в зависимости от типа поставок. Помимо этого, различные поставки системы могут содержать и другую техническую документацию, руководство по работе с системой Simulink, описание пакета символьных вычислений и т. д.
Документацию по системе MATLAB можно рассматривать как многотомный электронный (и обычный) справочник по современным численным методам и средствам их реализации на ЭВМ, включая персональные компьютеры. Одновременно — это одно из самых полных электронных справочных пособий по математике и многочисленным сферам ее применения. К сожалению, пока указанная документация поставляется с системой только на английском и на японском языках. Поскольку эта документация доступна каждому пользователю, рискнувшему установить достаточно полную версию MATLAB 6.0 на свой компьютер, ссылок на нее в списке литературы данного издания нет.
Данная книга дает достаточно полное описание почти всех средств базовой системы MATLAB. Тем не менее настоятельно рекомендуется обращаться к указанной документации всякий раз, когда требуется полное знакомство с той или иной областью применения системы, с ее редкими функциями, операторами или иными средствами, которые не нашли отражения в данной книге ввиду ограниченного (в сравнении с объемом указанной документации) объема.
MATLAB в Интернете
Представление математических систем в глобальной сети Интернет сегодня становится нормой. Свои сайты (страницы) в Интернете имеют все фирмы-разработчики математических систем.
Главная страница фирмы MathWorks
Рис. 1.1. Главная страница web-сайта фирмы MathWorks
Math Works, Inc. — создатель системы MATLAB — также имеет свой, регулярно обновляемый сайт (www.mathworks.com). О важности общения с ним говорит то обстоятельство, что в меню версии MATLAB 6.0 появилась позиция Web, дающая доступ к основным разделам этой страницы. Первая же команда позиции меню The Math Works Web Site дает выход на главную страницу web-сайта фирмы Math Works (рис. 1.2).
Следует отметить, что данная команда исполняется только в том случае, если на компьютере установлен какой-либо из браузеров для работы в сети Интернет, например входящий в состав операционной системы Windows 98 браузер Microsoft Internet Explorer 5.0. Приведенные далее копии экрана, иллюстрирующие отражение MATLAB в Интернете, получены при использовании именно этого браузера. В команной строке можно набрать команду support, которая откроет этот же сайт в окне браузера помощи, входящего в состав самой MATLAB.
Непосредственное подключение к Интернету изначально не требуется. Однако, разумеется, вы можете выйти на web-страницу фирмы Math Works и прямо с помощью браузера даже без установленной на вашем ПК системы MATLAB. Этот процесс подробно описан в книге и в других книгах об Интернете.
Регистрация через Интернет
Если вы удостоились чести стать легальным пользователем системы MATLAB, то первое, что надо сделать, — это установить систему на ваш компьютер и зарегистрироваться в фирме Math Works.
Рис. 1.2. Интернет-страница MATLAB Access фирмы MathWorks
Отдельный урок 2 посвящен тому, как надо устанавливать (инсталлировать) систему. Если система у вас уже установлена, то остается зарегистрироваться. Это можно сделать по телефону (номер указан в документации), по обычной почте (слишком долго и муторно) и через Интернет (проще всего, если есть доступ).
Math Works обычно дает срок в 30 суток для регистрации. До истечения этого срока вы можете ставить систему на свой ПК и спокойно работать с ней, например, оценивая то, нужна ли она вам или нет. Однако спустя этот срок возможность запуска системы будет заблокирована и вам придется вспомнить о необходимости регистрации. Лучше, естественно, сделать это быстрее, не откладывая это не слишком сложное дело на долгий срок.
Для регистрации через Интернет надо исполнить команду Membership в уже упомянутой позиции Web меню. После этого автоматически будет запущена система соединения с вашим Интернет-провайдером и начнется загрузка страницы MATLAB Access (доступ в MATLAB) с указанным адресом. На рис. 1.2 показано, как выглядит эта страница при использовании браузера Microsoft Internet Explorer 5.0.
Рис. 1.3. Раздел страницы фирмы MathWorks с регистрационной формой
Эта страница содержит гиперссылки на другие страницы сайта. На ней можно найти и раздел, посвященный регистрации MATLAB (рис. 1.3). Как нетрудно заметить, форма начинается с поля, в которое надо ввести номер лицензии. Он указывается в документации, поставляемой с получаемой системой.
Регистрационную форму следует заполнить, чтобы стать официально зарегистрированным пользователем системы MATLAB. Только в этом случае фирма MathWorks обеспечивает техническую и иную поддержку системы MATLAB. После
регистрации пользователь получает быстрый доступ к ресурсам web-сайта фирмы Math Works. Фамилия пользователя и его данные заносятся в базу данных о пользователях системы, и она появляется над строкой основных гиперссылок основной страницы — рис. 1.4. Разумеется, что фамилия и гиперссылка над ней с именем «access» (доступ) появляются только на странице пользователя, выполнившего регистрацию, и отсутствуют при просмотре web-страницы другими пользователями.
Рис. 1.4. Меню гиперссылок главной страницы Web-сайта фирмы MathWorks с фамилией легального
пользователя системы MATLAB 6.0
Заметим, что основная страница фирмы MathWorks регулярно обновляется и на рис. 1.1 она представлена на момент подготовки рукописи этой книги (март 2001 г.). На ней рекламируется 12-я реализация (12-й выпуск) системы (система MAT-LAB 6.0 с интегрированными пакетами расширения, включая пакет Simulink 4.0).
Поддержка системы MATLAB фирмой MathWorks
Зарегистрированные пользователи (а частично и другие) могут воспользоваться специально организованной фирмой MathWorks службой поддержки системы MATLAB. Для выхода на web-страницу такой поддержки из системы MATLAB достаточно исполнить команду Technical Support Knowledge Base. Будет загружена страница с разделом Support, показанная на рис. 1.5.
На этой странице имеется множество гипертекстовых ссылок (подчеркнутых снизу), открывающих доступ к различным ресурсам web-сайта фирмы MathWorks.
Рис. 1.5. Страница с разделом Support фирмы MathWorks
MATLAB в образовании
Как уже отмечалось, MATLAB широко используется в технике, науке и образовании.
Рис. 1.6. Web-страница, посвященная использованию MATLAB в образовании
Рис. 1.7. Web-страница, посвященная книгам по системе MATLAB
В качестве примера на рис. 1.6 показана web-страница, иллюстрирующая применение MATLAB в образовании. На этой странице сообщается о существовании студенческих версий системы MATLAB и специальных академических лицензий для приобретения MATLAB работниками науки и образования по льготным ценам.
Рис. 1.8. Фрагмент web-страницы
На одной из страниц (рис. 1.7) можно найти данные о публикациях по системе MATLAB. (всех версий). Уже из начала этой страницы видно, что число опубликованных книг по этой системе и ее компонентам и расширениям превышает 400. Это говорит об огромном интересе к системе MATLAB во всем мире.
Книги классифицируются по отношению к тому или иному компоненту системы. Есть и раздел по книгам на разных языках (не на английском). Увы, в разделе по русскоязычным книгам имеется только одна книга, показанная на странице, приведенной на рис. 1.8.
На сайте фирмы можно найти информацию как о программных продуктах фирмы, так и о пакетах ее расширения, примеры решения различных задач и т. д.
Обновление системы MATLAB через Интернет
Интернет позволяет производить обновление программных продуктов. Так, обратившись на сайте фирмы Math Works к странице Downloads (рис. 1.9), вы получите доступ к FTP (File Transfer Protocol) серверу фирмы Math Works и сможете загрузить студенческую версию системы MATLAB.
Рис. 1.9. Web-страница с анкетой, открывающей доступ к разделу Downloads (перекачка файлов)
Можно также получить версии системы с ограниченным 30 днями сроком действия — Trial (Пробные). Однако следует отметить, что перекачка даже упрощенных версий системы по нашему Интернету — большая проблема, поскольку файлы системы очень громоздки, и надо много часов для их перекачки. Вы можете заказать у фирмы компакт-диски с системой. Таким же образом делается обновление прежних версий системы, например MATLAB 5.3.1 до новейшей версии 6.0.
Некоторые пользователи ухитряются растягивать время работы с демонстрационной (и вполне работоспособной) версией MATLAB, переводя часы компьютера на то время, в течение которого доступ к этой версии открыт. Судя по тому что MathWorks снисходительно смотрит на это (допуская такую возможность), то для многих это и впрямь неплохой способ продлить удовольствие от общения с системой MATLAB на длительное время. Однако надо помнить, что в этом случае вы уже лишаетесь официальной технической и прочей поддержки фирмы MathWorks. Да и неудобств от этого более чем достаточно. Не говоря уже о моральной ущербности такого трюка.
Доступ к FTP-серверу фирмы MathWorks
Еще одна полезная услуга — доступ к FTP-серверу фирмы MathWorks, на котором хранится великое множество файлов системы MATLAB и файлов с примерами ее применения. Рис. 1.10 показывает одну из страниц FTP-сервера с файлами раз-тела Toolbox системы MATLAB. В этом разделе имеется множество папок с фай-ами. Адрес этой страницы виден в поле адресов браузера.
Рис. 1.10. Страница FTP-сервера фирмы MathWorks
Процесс загрузки файлов хорошо известен пользователям Интернета, и нет смысла описывать его в деталях. Ограничимся примером, показывающим, как можно скачать файл одной из функций Бесселя (рис. 1.11). Этот файл сразу же загружается в редактор m-файлов системы MATLAB и готов к немедленному использованию. Фактически это означает возможность расширения и модификации системы через Интернет.
Эта возможность полезна и в том случае, если вы случайно стерли или неудачно модифицировали какой-то из m-файлов системы. Вы можете получить из Интернета его оригинальную копию и восстановить работу вашей системы MATLAB.
Рис. 1.11. Пример перекачки m-файла системы MATLAB прямо в редактор m-файлов
Данные о системных ресурсах и пакетах расширения
Если вас интересуют данные о системных ресурсах или пакетах расширения системы MATLAB, то их тоже нетрудно получить из Интернета.
Страница, показанная на рис. 1.12, дает представление о всех продуктах и услугах фирмы Math Works. Она открывается исполнением команды Product в позиции Web меню системы MATLAB 6.0.
На этой странице есть и данные о многочисленных пакетах расширения системы MATLAB 6.0.
Приведенных данных достаточно для знакомства с Web-узлом фирмы MathWorks и оценки предлагаемых ею услуг по получению и сопровождению программных продуктов.
Версии Windows 98, Millennium Edition, NT4,2000, как и Windows 95 OSR2 и старше, поступают к вам с уже установленным программным обеспечением OpenGL. Но для того, чтобы использовать новый, впервые введенный в MATLAB 6 режим рендеринга графики Open GL, на компьютеры Windows 95 версий ниже OSR2 вам необходимо предварительно установить программное обеспечение Open GL.
Это можно сделать, скачав программу с FTP-сервера фирмы Microsoft_ftp:// ftp.microsoft.com/softlib/msfiles/opengl95.exe или зайдя на web-узел поддерживаемой Silicon Graphics организации Open GL Foundation.www.sgi.com. С MATLAB 6 проверено программное обеспечение Open GL Microsoft для Windows 95 и NT, CosmoGL (версия Open GL компании Cosmo Software — дочерней фирмы Silicon Graphics) и совместимое с OpenGL программное обеспечение Mesa (www.mesa3d.org).
Рис. 1.12. Web-страница с данными о продукции фирмы MathWorks
Но даже.если вы имеете Windows95 OSR2 и старше, вам есть смысл зайти на web-узел www.sgi.com. Там вы сможете установить последние драйверы Open GL для своих видеокарт (в том числе и интегрированных в материнские платы), даже если вы не знаете точное название своей видеокарты.
Теперь для того, чтобы MATLAB 6 могла ненавязчиво продемонстрировать свои новые эффекты трехмерной графики в стиле «Терминатора» и «Парка Юрского периода», вам достаточно щелкнуть на кнопках управления вашей версии Windows Пуск > Настройка > Панель управления > Экран > Настройка > Цветовая палитра > True Color. Приключения начинаются!
Что нового мы узнали?
В этом уроке мы научились:
Урок №2.
Установка системы и первые навыки работы
Установка и файловая система MATLAB
Запуск MATLAB и работа в режиме диалога
Первый опыт работы
MATLAB в роли суперкалькулятора
Числа, константы и системные переменные
Текстовые комментарии
Переменные, их создание, изменение и уничтожение
Операторы и функции
Сообщения об ошибках и исправление ошибок
Работа с векторами и матрицами
Сохранение и загрузка рабочей области сессии
Ведение дневника
Завершение работы с системой
Установка и файловая система MATLAB
Новая версия системы MATLAB 6 — весьма громоздкий программный 1 комплекс, который (при полной установке) требует до 1000-1500 Мбайт дисковой памяти (в зависимости от конкретной поставки, полноты справочной системы и числа устанавливаемых пакетов прикладных программ). Поэтому он поставляются исключительно на компакт-дисках. Полный комплект системы размещается на двух компакт-дисках только для чтения (CD-ROM), на одном из которых размещены PDF-файлы документации.
Для успешной установки MATLAB необходимы следующие минимальные средства:
компьютер с микропроцессором не ниже Pentium и математическим сопроцессором, рекомендуются процессоры Pentium PRO, Pentium II, Pentium III, Pentium IV или AMD Athlon;
устройство считывания компакт дисков (привод CD-ROM) (для установки), мышь, 8-разрядный графический адаптер и монитор, поддерживающие не менее 256 цветов;
операционная система Windows 95/98 (оригинальная или второе издание) / Me (Millennium Edition) /2000/ (допускается также NT4 с сервис-пакетами 5 или 6а);
ОЗУ емкостью 64 Мбайт для минимального варианта системы (рекомендуется иметь память не менее 128 Мбайт);
до 1500 Мбайт дискового пространства при полной установке всех расширений и всех справочных систем.
Для использования расширенных возможностей системы нужны графический ускоритель, Windows-совместимые звуковая карта и принтер, текстовый процессор Microsoft Word 95/97/ 2 2000 для реализации Notebook, компиляторы языков Си/Си++ и/или ФОРТРАН для подготовки собственных файлов расширения и браузер Netscape Navigator 4.0 и выше или Microsoft Internet Explorer 4.0 и выше. Для просмотра файлов справочной системы в формате PDF нужна программа Adobe Reader или Adobe Acrobat 3.0 и выше.
Компилятор Compaq Visual Fortran 5.0 или 6.1;
Microsoft Visual Си/С++ версий 5.0 или 6.0;
Borland Си/С++ версий 5.0, 5.02;
Borland C++Builder версий 3.0, 4.0 или 5.0;
WATCOM Си/Си++ версий 10.6 или 11 (фирмой Sybase более не поставляется версия этих компиляторов, необходимая для работы управляющих компьютеров под DOS);
LCC 2.4 (в комплекте с MATLAB).
Только в Linux версии поддерживается компилятор .GNU C++.
Мы рассматриваем систему, ориентированную на IBM PC (Intel80X86/ Pentium) — совместимые компьютеры под управлением Microsoft Windows как наиболее распространенные. Math Works рекомендует графические видеокарты Accel Eclipse фирмы Accel Graphics для аппаратной поддержки новых, введенных в MATLAB 6, эффектов трехмерной графики (расчет сцены и рендеринг Open GL) на этой платформе. Но наряду с ними MathWorks тщательно протестировала чисто программные драйверы операционных систем Windows. Если ваш графический ускоритель, аппаратно поддерживающий Open GL, другого типа, фирма MathWorks, Inc. его не протестировала со своей обычной легендарной скрупулезностью. Но это не значит, что искажения трехмерной графики неизбежны. Если у вас будут сомнения, вы всегда сможете программно отключить аппаратную поддержку Open GL, прежнему эффективно используя свой графический ускоритель для обработки шгонов, и задействовать только тщательно проверенное MathWorks программное обеспечение Open GL.
Возможна работа MATLAB 6 на ряде других компьютерных платформ: Lintel (ядро Linux 2.2x на Intel Pentium или AMD Athlon), Sun SPARC/UltraSPARC (Solaris 2.6, 2.7, 2.8), Silicon Graphics (рабочие станции на процессорах R12000, R10000, R5000 под IRIX64, IRIX 6.5x), Compaq(DEC) Alpha (Tru64UNIX 4.0f, 5.0), HP (HP700 (HP-UX10.2), HP9000 (HP-UX10.2 или HP-UX11), IBM RS/6000 (AIX 4.3.3). MathWorks протестировала графические ускорители Sun 3D Creator (Solaris 2.6, 2.7, 2.8) и ускорители моделей Silicon Graphics на платформах IRIX/IRIX 64 6.5x для проверки поддержки Open GL на UNIX платформах. Отличия между платформами, таким образом, в основном связаны со скоростью выполнения, в особенности при выводе трехмерной графики при расчете сцены и рендеринге новым, введенным только в данной версии, механизмом Open GL, и с отдельными деталями интерфейса. Как гарантирует MathWorks, отличия совсем (или для платформ HP и IBM почти) не затрагивают базового набора возможностей ядра и пакетов прикладных программ. Например, пользователи Linux Red Hat 7.0 и Slackware 7.0, 7.1, как и пользователи на RISC-платформах IBM и HP, не должны использовать виртуальную машину Java и должны запускать MATLAB 6.0 с параметром nojvm (matl ab-nojvm). Но и это ограничение не распространяется на пользователей RedHat 6.2, Mandrake 7.1, SuSE 6.4, Debian 2.1 и 2.2. Поэтому читатели, работающие с MATLAB 6.0 на любой платформе, могут пользоваться всеми или большей частью материалов данной книги. Для Macintosh поддерживается только версия MATLAB 5.2.1, для пользователей OpenVMS рекомендуется стабилизированная на этой платформе MATLAB 5.2.
Установка системы обычно не имеет никаких специфических особенностей и подобна установке других программных продуктов. Но в среде Windows 2000/NT4 установить и первый раз запустить систему должен администратор системы. От вас требуется задать свое имя (фамилию), сокращенное название организации и пароль, который указывается на установочном компакт-диске или в имеющемся на нем файле. Возможны типичная установка и выборочная, в ходе которой вам предлагается выбор компонентов системы. Последняя предпочтительнее, так как из-за огромного объема системы ее полная установка не всегда возможна.
Прежде чем начинать установку системы, рекомендуется ознакомиться с описанием компонентов. В уроке 23 дается аннотационное (а в монографии — более подробное, хотя в версиях для выпуска 11) описание наиболее важных пакетов прикладных программ — дополнительных компонентов (пакетов инструментов, пакетов расширения, (toolbox)) системы MATLAB. Нет никакого смысла использовать все компоненты, поскольку вы всегда сможете по мере необходимости изменить набор установленных компонентов системы. Установив только нужные компоненты, вы можете уменьшить затраты памяти на жестком диске в несколько раз.
Рис. 2.1. Начало установки — открытие окна Мастера установки
Для установки системы на ПК достаточно вставить первый установочный компакт-диск в устройство считывания компакт-дисков. Диск запускается автома тически, и Мастер установки проверяет, нет ли необходимости обновить или установить виртуальную машину Java фирмы Microsoft. Если такая необходимость есть, то вам надо согласиться с предложением Мастера установки. После того как Мастер установки установит или обновит виртуальную машину Java Microsoft, нужно обязательно ответить согласием на предложение перезагрузить компьютер (restart). Если Мастер установки не предложил вам обновить вашу виртуальную машину Java, но в процессе установки сообщит, что необходимый класс Java отсутствует, не прерывайте установку и не извлекайте компакт-диск. Вам достаточно выбрать Пуск > Выполнить > Обзор, выбрать в папке msutils вашего первого установочного компакт-диска файл msjavx86.exe и запустить его. После установки виртуальной машины Java и перезагрузки компьютера установка MATLAB продолжится автоматически. В самом начале установки собственно MATLAB Мастер установки выводит временное окно — заставку системы. При этом копируются вспомогательные файлы MathWorks Installer (Мастера установки), что показано на рис. 2.1.
Установка осуществляется с помощью ряда окон Мастера установки. Одно из них и показано на рис. 2.1. Прочтя его текст, надо нажать кнопку Next (Далее). Появится подббное окно с запросом на ввод персонального номера лицензии — рис. 2.2. Введя номер лицензии и подтвердив его щелчком на кнопке Next (Далее), можно получить окно с текстом лицензионного соглашения — рис. 2.3. Если вы с ним согласны, следует вновь щелкнуть кнопку Next (Далее).
Рис. 2.2. Окно с запросом персонального номера лицензии
Следующее окно (рис. 2.4) требует ввода пользователем своего имени и названия организации. Их можно сократить, как показано на рис. 2.4.
Рис. 2.3. Окно с текстом лицензии
Выполнив эти установки и щелкнув кнопку Next (Далее) (она становится доступной, если данные введены верно), можно получить окно с полем для указания имени папки, в которую будет установлена система, и с полным перечнем компонентов системы. Это окно представлено на рис. 2.5. В нем следует установить флажки напротив названий нужных компонентов.
Рис. 2.4. Окно установки имени пользователя и организации
Рис. 2.5. Окно выбора компонентов системы MATLAB
Здесь обратите особое внимание на указание свободного места в выбранном разделе жесткого диска и на данные о занимаемом системой объеме дискового пространства. Он должен быть заметно меньше, чем объем свободного пространства выбранного раздела диска, поскольку в нем, как правило, размещаются и служебные файлы операционной системы Windows 95/98/Me/ 2000/NT4, в частности временные файлы.
Рис. 2.6. Предупреждение об отсутствии папки для установки системы MATLAB 6.0
Если объема выбранного раздела явно недостаточно, то, во-первых, просмотрите другие разделы жесткого диска, а во-вторых, умерьте свои аппетиты в части установки расширений системы. Скорее всего, большинство этих расширений вам просто не понадобится, поскольку относится к не интересующим вас разделам науки и техники. Кроме того, система помощи может, например, оставаться на компакт-диске, так как вы сможете установить путь к файлам справочной системы на компакт-диске из пользовательского интерфейса после установки системы.
Обратите внимание и на выбор папки для размещения файлов системы MAT-LAB 6.0 — их тысячи! Если вы решили сменить предложенное вам название и место размещения папки для системы, то в случае отсутствия папки, название которой было введено вами, Мастер установки. (MathWorks Installer) выведет окно с сообщением об этом (рис. 2.6).
Вы должны согласиться с предложением о задании новой папки, щелкнув кнопку Yes (Да), или вернуться к окну рис. 2.5, щелкнув кнопку No (Нет). После этого и после выбора необходимых компонентов надо щелкнуть кнопку Next (Далее). Затем начинается самый длительный этап установки. Все файлы системы разар-хивируются и переносятся в создаваемые для них папки. Этот процесс сопровождается контролем по линейным индикаторам (рис. 2.7).
Рис. 2.7. Процесс установки системы MATLAB
Иногда возможно появление окон с сообщением о наличии на вашем компьютере каких-либо файлов, которые входят в состав системы MATLAB. В этом случае вам предоставляется возможность сохранить существующий файл или записать на его место новый файл системы MATLAB. Последнее, пожалуй, более целесообразно, так как MATLAB — очень сложная и объемная система и лучше не рисковать устанавливать ее с «чужими» файлами.
Процесс установки на компьютере Pentium II 350 МГц с 32-скоростным приводом CD-ROM идет довольно медленно и занимает больше часа при полной установке системы. Он может затянуться на несколько часов на менее мощном ПК. После установки надо произвести перезагрузку компьютера или временно отложить ее.
Запуск MATLAB без перезагрузки компьютера не рекомендуется, поскольку может протекать некорректно. Так что если вы отложили перезагрузку компьютера, не забудьте провести ее перед первым запуском системы MATLAB.
Система MATLAB состоит из многих тысяч файлов, находящихся в множестве папок. Полезно иметь представление о содержании основных папок, поскольку это позволяет быстро оценить возможности системы — например, узнать, какие операторы, функции или графические команды входят в систему.
В MATLAB особое значение имеют файлы двух типов — с расширениями .mat и .т. Первые являются бинарными файлами, в которых могут храниться значения переменных. Вторые представляют собой текстовые файлы, содержащие внешние программы, определения команд и функций системы. Именно к ним относится большая часть команд и функций, в том числе задаваемых пользователем для решения своих специфических задач. Нередко встречаются и файлы с расширением .с (коды на языке Си), файлы с откомпилированными кодами MATLAB с расширением .тех и другие. Исполняемые файлы имеют расширение .ехе.
Особое значение имеет папка MATLAB/TOOLBOX/MATLAB. В ней содержится набор стандартных m-файлов системы. Просмотр этих файлов позволяет детально оценить возможности поставляемой конкретной версии системы. Ниже перечислены основные подпапки с этими файлами (деление на категории условно, на самом деле все подпапки находятся в общей папке MATLAB/TOOLBOX/MATLAB).
Подпапка команд общего назначения:
General — команды общего назначения: работа со справкой, управление окном MATLAB, взаимодействие с операционной системой и т. д.
Подпапки операторов, конструкций языка и системных функций:
ops — операторы и специальные символы;
tang — конструкции языка программирования;
strfun — строковые функции;
iofun — функции ввода/вывода;
timefun — функции времени и дат;
datatypes — типы и структуры данных.
Подпапки основных математических и матричных функций:
elmat — команды создания элементарных матриц и операций с ними;
elfun — элементарные математические функции;
specfun — специальные математические функции;
matfun — матричные функции линейной алгебры;
datafun — анализ данных и преобразования Фурье;
polyfun — полиномиальные функции и функции интерполяции;
funfun — функции функций и функции решения обыкновенных дифференциальных уравнений;
soarfun — функции разреженных матриц.
Подпайки команд графики:
graph2d — команды двумерной графики;
graph3d — команды трехмерной графики;
specgraph — команды специальной графики;
graphics — команды дескрипторной графики;
uitools — графика пользовательского интерфейса.
Полный состав файлов каждой подпапки (их список содержится в файле соп-tents.m) можно вывести на просмотр с помощью команды help имя, где имя — название соответствующей подпапки.
Запуск MATLAB и работа в режиме диалога
В этой книге предполагается, что MATLAB используется в среде операционной системы Windows 95 или Windows 98/Me/2000. Копии сеансов работы MATLAB даны именно для этих случаев. Однако пользователи, работающие с Windows NT4, также могут обращаться к материалам данной книги без каких-либо ограничений, поскольку отличия касаются лишь мелких деталей пользовательского интерфейса. Это справедливо, хотя в меньшей мере, и для пользователей систем MATLAB на иных платформах.
Рис. 2.8. Подготовка к запуску MATLAB
Рис. 2.8 иллюстрирует подготовку к запуску системы MATLAB 6.0 из главного меню операционной системы Windows 98 со стандартным видом рабочего стола, подобным использованному в Windows 95. Для раскрытия главного меню активизируется кнопка Пуск (Start), расположенная внизу рабочего стола слева, или можно щелкнуть на значке с логотипом системы на рабочем столе Windows.
Далее мы не всегда будем повторять полное название системы — MATLAB 6.0 — и ограничимся сокращенным названием MATLAB.
После запуска MATLAB (см. рис. 2.8) на экране появляется основное окно системы MATLAB, показанное на рис. 2.9. Обычно это окно раскрыто не полностью и занимает часть рабочего стола. Вы можете раскрыть окно полностью, щелкнув на средней из трех кнопок, расположенных в конце титульной (верхней) строки окна. Левая кнопка сворачивает окно в кнопку с именем приложения, помещаемую в панель задач Windows 95/98, а правая закрывает окно и прекращает работу с MATLAB. Система готова к проведению вычислений в командном режиме. При этом вы можете не обращать внимания на новации пользовательского интерфейса, привнесенного операционными системами Windows 95 и 98/Me/2000/NT4, в виде расширяемого окна и панели инструментов. Мы обсудим их роль позже. Тем не менее сразу бросается в глаза существенное изменение интерфейса у системы MATLAB 6.0 по сравнению с предшествующей версией MATLAB 5.3.I.
Для уточнения версии системы следует вывести окно с информацией о системе (команда About MATLAB (О MATLAB) в меню Help (Помощь). Это окно представлено на рис. 2.10 в центре. Из него видно, что запущена версия 6.0 (R12) от 22 сентября 2000 г. Поскольку номер лицензии имеет конфиденциальный характер, вместо него на рисунке показан 0.
Рис. 2.9. Окно системы MATLAB после запуска и выполнения простых вычислений
Рис. 2.10. Окно с логотипом системы MATLAB 6.0
Полезно знать, что в начале запуска автоматически выполняется команда rnatl abrc, которая исполняет загрузочный файл matlabrc.m и файл startup.m, если таковой существует. Эти файлы выполняют начальную настройку терминала системы и задают ряд ее параметров. В частности, могут быть заданы пути доступа к другим файлам, необходимым для корректной работы системы MATLAB. Таким образом, опытные пользователи могут выполнить настройку системы под свои запросы. Однако в большинстве случаев особой необходимости в этом нет. Поскольку указанные файлы имеют текстовый формат, их легко просмотреть с помощью какого-либо текстового редактора или с помощью команды type в командном режиме работы MATLAB.
Сеанс работы с MATLAB принято именовать сессией (session). Сессия, в сущности, является текущим документом, отражающим работу пользователя с системой MATLAB. В ней имеются строки ввода, вывода и сообщений об ошибках. Входящие в сессию определения переменных и функций, расположенные в рабочей области памяти, но не саму сессию, можно записать на диск (файлы формата .mat), используя команду save (Сохранить). Команда load (Загрузить) позволяет считать с диска данные рабочей области. Фрагменты сессии можно оформить в виде дневника с помощью команды diary (Дневник). Позже мы обсудим эти команды подробно.
Новый и старый облик системы MATLAB 6.0
Пользователи, уже имеющие опыт работы с системами MATLAB, будут приятно (а кое-кто, напротив, неприятно) удивлены новациями пользовательского интерфейса системы MATLAB 6.0. В новой версии пользовательского интерфейса не осталось и следа от прежней строгой скромности.
В новой версии вид окна системы (рис. 2.9) уже вполне отвечает канонам современного интерфейса. Пользовательский интерфейс многооконный и имеет ряд средств прямого доступа к различным компонентам системы. Бросается в глаза новый пункт меню — Web. Он дает прямой выход в Интернет (см. урок 1).
В панели инструментов добавлена позиция ввода ранее отмененной операции и меню просмотра файловой системы с кнопкой его открытия. Но самые решительные изменения произошли в левой части общего окна системы — здесь появились окна доступа к компонентам системы Launch Pad/Workspace (Панель запуска/ Рабочая область) и окно Current Directory (текущей папки).
Надо прямо признать, что особой необходимости в этих новациях нет, поскольку старые пользователи уже привыкли к крайней простоте интерфейса систем MATLAB. Учтя это, разработчики системы ввели в позицию View (Вид) меню команду Desktop Layout > Command Windows Only (Только командное окно). Стоит ее исполнить, как вид окна системы будет очень напоминать добрый старый интерфейс версий MATLAB 5.* — рис. 2.11.
Рис. 2.11. Упрощенный интерфейс системы MATLAB 6.0
Если вы все же хотите вкусить прелести нового интерфейса, то исполните в той же позиции меню команду Desktop Layout > Default (Интерфейс по умолчанию). Там же вы найдете и другие возможности модификации вида интерфейса системы MATLAB 6.0.
Операции строчного редактирования
При работе с MATLAB в командном режиме действует простейший строчный редактор. Его команды перечислены в табл. 2.1.
Таблица 2.1. Команды строчного редактора MATLAB
Ctrl+b |
Перемещение курсора вправо на один символ |
Ctrl+f |
Перемещение курсора влево на один символ |
Ctrl +r |
Перемещение курсора вправо на одно слово |
Ctrl +1 |
Перемещение курсора влево на одно слово |
Home или Ctrl+a |
Перемещение курсора в начало строки |
End или Ctrl +e |
Перемещение курсора в конец строки |
Ctrl+рu Ctrl+n |
Перелистывание предыдущих команд вверх или вниз для подстановки в строку ввода |
Del или Ctrl+d |
Стирание символа справа от курсора |
Ctrl+h |
Стирание символа слева от курсора |
Ctrl+k |
Стирание до конца строки |
Esc |
Очистка строки ввода |
Ins |
Включение/выключение режима вставки |
PgUp |
Перелистывание страниц сессии вверх |
PgDn |
Перелистывание страниц сессии вниз |
Эти возможности кажутся примитивными, но позволяют пользователю быстро работать в стиле первых версий MATLAB для MS-DOS. Они обеспечивают важное свойство новых версий систем — их совместимость со старыми версиями в части преемственности навыков работы. Позже вы увидите, что в новых версиях есть вполне современный редактор со средствами отладки создаваемых документов — m-файлов.
Обратите особое внимание на применение клавиш вверх и вниз. Они используются для подстановки после маркера строки ввода » ранее введенных строк, например для их исправления, дублирования или дополнения. При этом указанные клавиши обеспечивают перелистывание ранее введенных строк снизу вверх или сверху вниз. Такая возможность существует благодаря организации специального стека, хранящего строки с исполненными ранее командами.
Команды управления окном
Полезно сразу усвоить некоторые команды управления окном командного режима:
clс — очищает экран и размещает курсор в левом верхнем углу пустого экрана.
home — возвращает курсор в левый верхний угол окна.
echo <file_name> on — включает режим вывода на экран текста Script-файла (файла-сценария).
echo <file_name> off — выключает режим вывода на экран текста Script-файла.
echo <fi1e_name> — меняет режим вывода на противоположный.
echo on all — включает режим вывода на экран текста всех m-файлов.
echo off all — отключает режим вывода на экран текста всех m-файлов.
mоrе on — включает режим постраничного вывода (полезен при просмотре больших m-файлов).
mоrе off — отключает режим постраничного вывода (в этом случае для просмотра больших фалов надо пользоваться линейкой прокрутки).
В версии MATLAB 6.0 обе команды clc и home действуют аналогично — очищают экран и помещают курсор в левый верхний угол окна командного режима работы. Команды echo позволяют включать или выключать отображение текстов m-файлов при каждом обращении к ним. Как правило, отображение текста файлов сильно загромождает экран и часто не является необходимым. При больших размерах файлов начало их текста (листинга) убегает далеко за пределы области просмотра (текущего окна командного режима). Поэтому для просмотра длинных листингов файлов полезно включить постраничный вывод командой more on. Различие между m-файлами сценариев и функций мы обсудим позже.
MATLAB в роли суперкалькулятора
Система MATLAB создана таким образом, что любые (подчас весьма сложные) вычисления можно выполнять в режиме прямых вычислений, то есть без подготовки программы. Это превращает MATLAB в необычайно мощный калькулятор, который способен производить не только обычные для калькуляторов вычисления (например, выполнять арифметические операции и вычислять элементарные функции), но и операции с векторами и матрицами, комплексными числами, рядами и полиномами. Можно почти мгновенно задать и вывести графики различных функций — от простой синусоиды до сложной трехмерной фигуры.
Работа с системой в режиме прямых вычислений носит диалоговый характер и происходит по правилу «задал вопрос, получил ответ». Пользователь набирает на клавиатуре вычисляемое выражение, редактирует его (если нужно) в командной строке и завершает ввод нажатием клавиши ENTER. В качестве примера на рис. 2.9 уже были показаны простейшие вычисления — вычисление выражения 2+3 и значения sin(l).
Даже из таких простых примеров можно сделать некоторые поучительные выводы:
для указания ввода исходных данных используется символ »;
данные вводятся с помощью простейшего строчного редактора;
для блокировки вывода результата вычислений некоторого выражения после него надо установить знак ; (точка с запятой);
если не указана переменная для значения результата вычислений, то MATLAB назначает такую переменную с именем ans;
знаком присваивания является привычный математикам знак равенства =, а не комбинированный знак :=, как во многих других языках программирования и математических системах;
результат вычислений выводится в строках вывода (без знака »);
встроенные функции (например, sin) записываются строчными буквами, и их аргументы указываются в круглых скобках;
диалог происходит в стиле «задал вопрос — получил ответ».
Следующий пример (он показан на рис. 2.11) иллюстрирует применение системы MATLAB для выполнения простых векторных операций. В этом примере задается четырехэлементный вектор V со значениями элементов 1, 2, 3 и 4. Далее (сосредоточьте на этом внимание!) вычисляются функции синуса и экспоненты с аргументом в виде вектора, а не скаляра.
Две записи для вектора — V=[l 2 3 4] и V=[1,2,3.4] — являются идентичными. Таким образом, векторы задаются списком своих элементов, разделяемых пробелами или запятыми. Список заключается в квадратные скобки. Для выделения п- го элемента вектора V используется выражение V(n). Оно задает соответствующую индексированную переменную.
В большинстве математических систем вычисление sin(V) и exp(V), где V — вектор, сопровождалось бы выдачей ошибки, поскольку функции sin и ехр должны иметь аргумент в виде скалярной величины. Однако MATLAB — матричная система, а вектор является разновидностью матрицы с размером 1х n. Поэтому в нашем случае результат вычислений будет вектором того же размера, что и аргумент V, но элементы возвращаемого вектора будут синусами или экспонентами от элементов вектора V.
Рис. 2.12. Простейшие операции с матрицей
Еще один пример (рис. 2.12) демонстрирует простейшие операции с матрицей. Здесь задана матрица М с размером 2x2 и вычислена матрица MX=sin(M).
Матрица задается в виде ряда векторов, представляющих ее строки и заключенных в квадратные скобки. Для разделения элементов векторов используется пробелили запятая, а для отделения одного вектора от другого — точка с запятой. Для выделения отдельного элемента матрицы М используется выражение вида M(j,i), где М — имя матрицы, j — номер строки и 1 — номер столбца.
Как видно из приведенных примеров, ввод исходных выражений для вычислений в системе MATLAB осуществляется в самом обычном текстовом формате. В этом же формате выдаются результаты вычислений, за исключением графических. Приведем пример записи вычислений, показанных на рис. 2.8 и 2.9:
То get started, select "MATLAB Help" from the Help menu.
» 2+3
ans=
5
» sin(l)
ans=
0.8415
» type sin
sin is a built-in function.
» help sin
SIN Sine.
SIN(X) is the sine'of the elements of X.
Overloaded methods
help sym/sin.m
» V=[l 2 3 4]
V =
1 2 3 4 » sin(V) ans =
0.8415 0.9093 0.1411 -0.7568
» 3*V
ans =
3 6 9 12
» V^2
??? Error using ==> ^
Matrix must be square.
» V.^2
ans=
1 4 9 16
» V+2
ans =
3 4 5 6
»
Примечание
Обратите внимание на форму ответов при выполнении простых операций без указания переменной, которой присваивается результат. В таких случаях MATLAB сам назначает переменную ans, которой присваивается результат и значение которой затем выводится на экран.
Сравните эти записи с записями в реальных сессиях (рис. 2.9 и 2.11). Вы наверняка отметите, что они практически идентичны. Разве что в текстовых вариантах примеров для экономии бумаги, на которой печаталась эта книга, убраны пропуски между строками. Мы будем показывать представление сессий в виде прямых копий экрана только в том случае, когда это связано со спецификой проведения вычислений, например когда они сопровождаются выводом графиков или демонстрацией элементов пользовательского интерфейса. В остальных случаях будет использоваться представление сессии прямо в тексте книги в представленном выше текстовом формате — основном для командного режима работы с системой MATLAB. При этом строки ввода будут отмечаться маркером ввода » в их начале. Ради компактности записи пустые строки будут опускаться.
О переносе строки в сессии
В некоторых случаях вводимое математическое выражение может оказаться настолько длинным, что для него не хватит одной строки. В этом случае часть выражения можно перенести на новую строку с помощью знака многоточия «...» (3 или более точек), например:
s = 1-1/2 + 1/3- 1/4 + 1/5 - 1/6 + 1/7 ... 1/8 + 1/9 - 1/10 + 1/11 - 1/12:
Этот прием может быть весьма полезным для создания наглядных документов, у которых предотвращается заход строк в невидимую область окна. Вообще говоря, максимальное число символов в одной строке командного режима — 4096, а в m-файле — не ограничено, но со столь длинными строками работать неудобно. В ранних версиях в одной строке было не более 256 символов.
Основные объекты MATLAB
Понятие о математическом выражении
Центральным понятием всех математических систем является математическое выражение. Оно задает то, что должно быть вычислено в численном (реже символьном) виде. Вот примеры простых математических выражений:
2+3
2.301*sin(x)
4+ехр(3)/5
sqrt(y)/2
sin(pi/2)
Математические выражения строятся на основе чисел, констант, переменных, операторов, функций и разных спецзнаков. Ниже даются краткие пояснения сути этих понятий.
Действительные и комплексные числа
Число — простейший объект языка MATLAB, представляющий количественные данные. Числа можно считать константами, имена которых совпадают с их значениями. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа.
Ниже приводятся примеры представления чисел:
0
2
-3
2.301 0.00001 123.45бе-24
-234.456е10
Как нетрудно заметить, в мантиссе чисел целая часть отделяется от дробной не запятой, а точкой, как принято в большинстве языков программирования. Для отделения порядка числа от мантиссы используется символ е. Знак «плюс» у чисел не проставляется, а знак «минус» у числа называют унарным минусом. Пробелы между символами в числах не допускаются.
Числа могут быть комплексными: z =Rе(x)+Im(x)*i. Такие числа содержат действительную Re(z) и мнимую Im(z) части. Мнимая часть имеет множитель i или j, означающий корень квадратный из -1:
3i
2j
2+3i
-3.141i
-123.456+2.7e-3i
Функция real (z) возвращает действительную часть комплексного числа, Re(z), a функция imag(z) — мнимую, Im(z). Для получения модуля комплексного числа используется функция abs(z), а для вычисления фазы — angle(Z). Ниже даны простейшие примеры работы с комплексными числами:
»i
ans=
0 +1.0000i
» j
ans =
0 + 1.0000i
» z=2+3i
z =
2.0000 + 3.0000i
» abs(z)
ans =
3.6056
» real(z)
ans=
2
» imag(z)
ans =
3
» angle(z)
ans =
0.9828
В MATLAB не принято делить числа на целые и дробные, короткие и длинные и т. д., как это принято в большинстве языков программирования, хотя задавать числа в таких формах можно. Вообще же операции над числами выполняются в формате, который принято считать форматом с двойной точностью. Такой формат удовлетворяет подавляющему большинству требований к численным расчетам, но совершенно не подходит для символьных вычислений с произвольной (абсолютной) точностью. Символьные вычисления MATLAB может выполнять с помощью специального пакета расширения Symbolic Math Toolbox.
Константы и системные переменные
Константа — это предварительно определенное числовое или символьное значение, представленное уникальным именем. Числа (например 1, -2 и 1.23) являются безымянными числовыми константами.
Другие виды констант в MATLAB принято назвать системными переменными, поскольку, с одной стороны, они задаются системой при ее загрузке, а с другой — могут переопределяться. Основные системные переменные, применяемые в системе MATLAB, указаны ниже:
i или j — мнимая единица (корень квадратный из -1);
pi - число п - 3.1415926...;
eps — погрешность операций над числами с плавающей точкой (2- 52 );
realmin — наименьшее число с плавающей точкой (2- 1022 );
realmax — наибольшее число с плавающей точкой (2 1023 );
inf — значение машинной бесконечности;
ans — переменная, хранящая результат последней операции и обычно вызывающая его отображение на экране дисплея;
NaN — указание на нечисловой характер данных (Not-a-Number).
Вот примеры применения системных переменных:
»
2*pi ans =
6.2832
» eps
ans =
2.2204е-016
» real min
ans=
2.2251e-308
» realmax
ans=
1.7977e+308
» 1/0
Warning: Divide by zero,
ans=
Inf
» 0/0
Warning: Divide by zero,
ans =
NaN
Как отмечалось, системные переменные могут переопределяться. Можно задать системной переменной eps иное значение, например eps=0.0001. Однако важно то, что их значения по умолчанию задаются сразу после загрузки системы. Поэтому неопределенными в отличие от обычных переменных системные переменные не могут быть никогда.
Символьная константа — это цепочка символов, заключенных в апострофы, например:
'Hello my friend!'
'Привет'
'2+3'
Если в апострофы помещено математическое выражение, то оно не вычисляется и рассматривается просто как цепочка символов. Так что ' 2+3' не будет возвращать число 5. Однако с помощью специальных функций преобразования символьные выражения могут быть преобразованы в вычисляемые. Соответствующие функции преобразования будут рассмотрены в дальнейшем.
Текстовые комментарии
Поскольку MATLAB используется для достаточно сложных вычислений, важное значение имеет наглядность их описания. Она достигается, в частности, с помощью текстовых комментариев. Текстовые комментарии вводятся с помощью символа %, например так:
Bit is factorial function
Примечание
В каждой большой программе есть свои «ложки дегтя». В MATLAB 6 такой «ложкой дегтя» является перевод строки при вводе буквы «с» русского алфавита в командной строке. В итоге ввод комментариев в командной строке на русском языке превращается в проблему. Пока автор может порекомендовать заменять русское «с» на английское, что на виде текстового комментария никак не сказывается. Не рекомендуется вводить русскоязычные комментарии и в тесты m-файлов при подготовке их в редакторе/отладчике (он будет описан позже). Это нередко делает программы неработоспособными. Жаловаться тут бесполезно — MATLAB англоязычный продукт и официальной локализованной под Россию версии этой системы пока нет.
Обычно первые строки m-файлов служат для описания их назначения, которое выводится на экран дисплея после команды » help Имя_файла.
Считается правилом хорошего тона вводить в m-файлы достаточно подробные текстовые комментарии. Без таких комментариев даже разработчик программных модулей быстро забывает о сути собственных решений. В текстовых комментариях и в символьных константах могут использоваться буквы русского алфавита — при условии, что установлены содержащие эти буквы наборы шрифтов (см. примечание . выше).
Переменные и присваивание им значений
Переменные — это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными.
В системе MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства =:
Имя_переменной - Выражение
Типы переменных заранее не декларируются. Они определяются выражением, значение которого присваивается переменной. Так, если это выражение — вектор или матрица, то переменная будет векторной или матричной.
Имя переменной (ее идентификатор) может содержать сколько угодно символов, но запоминается и идентифицируется только 31 начальный символ. Имя любой переменной не должно совпадать с именами других переменных, функций и процедур системы, т. е. оно должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена переменных пробелы и специальные знаки, например +,.-, *, / и т. д., поскольку в этом случае правильная интерпретация выражений становится невозможной.
Желательно использовать содержательные имена для обозначений переменных, например speed_l для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'.
Уничтожение определений переменных
В памяти компьютера переменные занимают определенное место, называемое рабочей областью (workspace). Для очистки рабочей области используется функция clear в разных формах, например:
clear — уничтожение определений всех переменных;
clear x — уничтожение определения переменной х;
clear a, b, с — уничтожение определений нескольких переменных.
Уничтоженная (стертая в рабочей области) переменная становится неопределенной. Использовать неопределенные переменные нельзя, и такие попытки будут сопровождаться выдачей сообщений об ошибке. Приведем примеры задания и уничтожения переменных:
» x=2*pi
х =
6.2832
» V=[l 2345]
V =
12345
» MAT
??? Undefined function or variable 'MAT'.
» MAT=[1 2 3 4; 5 6 7 8]
MAT=
1234
5678
» clear V
» V
??? Undefined function or variable 'V'.
» clear
» x
??? Undefined function or variable 'x'.
» M
??? Undefined function or variable 'M'.
Обратите внимание на то, что сначала выборочно стерта переменная V, а затем командой clear без параметров стерты все остальные переменные.
Операторы и функции
Оператор — это специальное обозначение для определенной операции над данными — операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 2+3 знак + является оператором сложения, а числа 2 и 3 — операндами.
Следует отметить, что большинство операторов относится к матричным операциям, что может служить причиной серьезных недоразумений. Например, операторы умножения * и деления / вычисляют произведение и частное от деления двух многомерных массивов, векторов или матриц. Есть ряд специальных операторов, например, оператор \ означает деление справа налево, а операторы . * и . / означают соответственно поэлементное умножение и поэлементное деление массивов.
Следующие примеры поясняют сказанное на примере операций с векторами:
» Vl=[2 4 6 8]
V1=
2468
» V2=[l 2 3 4]
V2 =
1234
» V1/V2
ans =
2
» V1.*V2
ans=
2 8 18 32
» V1./V2
ans =
2 2 2 2
Полный список операторов можно получить, используя команду » help ops. Постепенно мы рассмотрим все операторы системы MATLAB и обсудим особенности их применения. А пока приведем только часть полного списка операторов, содержащую арифметические операторы:
» help ops
Operators and special characters.
Arithmetic operators.
|
|
|
|
|
|
Plus |
- Plus |
+ |
|
|
Up! us |
- Unary plus |
+ |
|
|
Minus |
- Minus |
— |
|
|
Umlnus |
- Unary minus |
- |
|
|
Mtimes |
- Matrix multiply |
* |
|
|
|
|
|
|
|
|
|
|
|
|
times |
- Array multiply |
* |
|
|
mpower |
- Matrix power |
^ |
|
|
poWer |
- Array power |
.^ |
|
|
mldlvlde |
- Backslash or left matrix divide |
\ |
|
|
mrdlvlde |
- Slash or right matrix divide |
/ |
|
|
Idi-vide |
- Left array divide |
.\ |
|
|
rdlvlde |
- Right array divide |
./ |
|
|
kron |
- Kronecker tensor product |
kron |
|
|
|
|
|
|
Функции — это имеющие уникальные имена объекты, выполняющие определенные преобразования своих аргументов и при этом возвращающие результаты этих преобразований. Возврат результата — отличительная черта функций. При этом результат вычисления функции с одним выходным параметром подставляется на место ее вызова, что позволяет использовать функции в математических выражениях, например функцию sin в 2*sin(pi/2).
Функции в общем случае имеют список аргументов (параметров), заключенный в круглые скобки. Например, функция Бесселя записывается как bessel(NU.X). В данном случае список параметров содержит два аргумента — NU в виде скаляра и X в виде вектора. Многие функции допускают ряд форм записи, отличающихся списком параметров. Если функция возвращает несколько значений, то она записывается в виде [Yl. Y2....]=func(Xl. X2...)
где Yl. Y2,... — список выходных параметров и XI, Х2.... — список входных аргументов (параметров).
Со списком элементарных функций можно ознакомиться, выполнив команду hel p elfun, а со списком специальных функций — с помощью команды help specfun. Функции могут быть встроенными (внутренними) и внешними, или т-функциями. Так, встроенными являются наиболее распространенные элементарные функции например, sin(x) и ехр(у), тогда как функция sinh(x) является внешней функцией. Внешние функции содержат свои определения в m-файлах. Задание таких функций с помощью специального редактора m-файлов мы рассмотрим в уроке 5. Встроенные функции хранятся в откомпилированном ядре системы MATLAB, в силу чего они выполняются предельно быстро.
Применение оператора: (двоеточие)
Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны для создания векторов или значений абсциссы при построении графиков. Для этого в MATLAB используется оператор : (двоеточие):
Начальное_значение:Шаг:Конечное_значение
Данная конструкция порождает возрастающую последовательность чисел, которая начинается с начального значения, идет с заданным шагом и завершается конечным значением. Если Шаг не задан, то он принимает значение 1. Если конечное значение указано меньшим, чем начальное значение, — выдается сообщение об ошибке. Примеры применения оператора : даны ниже:
» 1:5
ans =
12345
» i=0:2:10
i = 0 2 4 6 8 10
» j=10:-2:2
j =10 8 6 4 2
» V=0:pi/2:2*pi;
» V
V =
0 1.5708 3.1416 4.7124 6.2832
» X= l:-.2:0
X=
1.0000 0.8000 0.6000 0.4000 0.2000 0
» 5:2
ans=
Empty matrix:1-by-0
Как отмечалось, принадлежность MATLAB к матричным системам вносит коррективы в назначение операторов и приводит при неумелом их использовании к казусам. Рассмотрим следующий характерный пример:
» х=0:5
х=
0 1 2 3 4 5
» cos(x)
ans =
1.0000 0.5403 -0.4161 -0.9900 -0.6536 0.2837
» sin(x)/x
ans = -0.0862
Вычисление массива косинусов здесь прошло корректно. А вот вычисление массива значений функции sin(x)/x дает неожиданный, на первый взгляд, эффект — вместо массива с шестью элементами вычислено единственное значение!
Причина «парадокса» здесь в том, что оператор / вычисляет отношение двух матриц, векторов или многомерных массивов. Если они одной размерности, то результат будет одним числом, что в данном случае и выдала система. Чтобы действительно получить вектор значений sin(x) /x, надо использовать специальный оператор поэлементного деления массивов — . /. Тогда будет получен массив чисел:
» sin(x)./x
Warning: Divide by zero.
ans =
NaN 0.8415 0.4546 0.0470 -0.1892-0.1918
Впрочем, и тут без особенностей не обошлось. Так, при х = 0 значение sin(x)/x дает устранимую неопределенность вида 0/0=1. Однако, как и всякая численная система, MATLAB классифицирует попытку деления на 0 как ошибку и выводит соответствующее предупреждение. А вместо ожидаемого численного значения выводится символьная константа NaN, означающая, что неопределенность 0/0 — это все же не обычное число.
Выражения с оператором : могут использоваться в качестве аргументов функций для получения множественных их значений. Например, в приводимом ниже примере вычислены функции Бесселя порядка от 0 до 5 со значением аргумента 0.5:
» bessel(0:l:5,l/2)
ans =
0.9385 0.2423 0.0306 0.0026 0.0002 0.0000
А в следующем примере вычислено шесть значений функции Бесселя нулевого порядка для значений аргумента от 0 до 5 с шагом 1:
» bessel(0.0:1:5)
ans =
1.0000 0.7652 0.2239 -0.2601 -0.3971 -0.1776
Таким образом, оператор : является весьма удобным средством задания регулярной последовательности чисел. Он широко используется при работе со средствами построения графиков. В дальнейшем мы расширим представление о возможностях этого оператора.
Сообщения об ошибках и исправление ошибок
Важное значение при диалоге с системой MATLAB имеет диагностика ошибок. Вряд ли есть пользователь, помнящий точное написание тысяч операторов и функций, входящих в систему MATLAB и в пакеты прикладных программ. Поэтому никто не застрахован от ошибочного написания математических выражений или команд. MATLAB диагностирует вводимые команды и выражения и выдает соответствующие сообщения об ошибках или предупреждения. Пример вывода сообщения об ошибке (деление на 0) только что приводился.
Рассмотрим еще ряд примеров. Введем, к примеру, ошибочное выражение » sqr(2)
и нажмем клавишу ENTER. Система сообщит об ошибке:
??? Undefined function or variable 'sqr'.
Это сообщение говорит о том, что не определена переменная или функция, и указывает, какая именно — sqr. В данном случае, разумеется, можно просто набрать правильное выражение. Однако в случае громоздкого выражения лучше воспользоваться редактором. Для этого достаточно нажать клавишу вниздля перелистывания предыдущих строк. В результате в строке ввода появится выражение » sqr(2)
с курсором в его конце. В версии MATLAB 6 можно теперь нажать клавишу Tab. Система введет подсказку, анализируя уже введенные символы. Если вариантов несколько, клавишу Tab придется нажать еще раз. Из предложенных системой трех операторов выбираем sqrt. Теперь с помощью клавиши вниз вновь выбираем нужную строку и, пользуясь клавишей влево , устанавливаем курсор после буквы г. Теперь нажмем клавишу вверх, а затем клавишу ENTER. Выражение примет следующий вид:
» sqrt(2)
ans= 1.4142
Если бы был только один вариант окончания введенных символов, то после нажатия клавиши Tab система бы закончила наш ввод без перевода строки. Вычисления дают ожидаемый результат — значение квадратного корня из двух.
В системе MATLAB внешние определения используются точно так же, как и встроенные функции и операторы. Никаких дополнительных указаний на их применение делать не надо. Достаточно лишь позаботиться о том, чтобы используемые определения действительно существовали в виде файлов с расширением .m. Впрочем, если вы забудете об этом или введете имя несуществующего определения, то система отреагирует на это звуковым сигналом (звонком) и выводом сообщения об ошибке:
» hsin(1)
??? Undefined function or variable 'hsin'.
» sinh(1)
ans= 1.1752
В этом примере мы забыли (нарочно), какое имя имеет внешняя функция, вычисляющая гиперболический синус. Система подсказала, что функция или переменная с именем hsin не определена ни как внутренняя, ни как m-функция. Зато далее мы видим, что функция с именем sinh есть в составе функций системы MATLAB — она задана в виде М-функции. Между тем в последнем примере мы не давали системе никаких указаний на то, что следует искать именно внешнюю функцию! И это вычисление прошло так же просто, как вычисление встроенной функции, такой как sin. Разумеется, скорость вычислений по внешним определениям несколько ниже, чем по встроенным функциям или операторам.
При этом вычисления происходят следующим образом: вначале система быстро определяет, имеется ли введенное слово среди служебных слов системы. Если да, то нужные вычисления выполняются сразу, если нет, система ищет m-файл с соответствующим именем на диске. Если файла нет, то выдается сообщение об ошибке, и вычисления останавливаются. Если же файл найден, он загружается с жесткого диска в память машины и исполняется. Этот алгоритм аналогичен применяемому в развиваемых и адаптируемых к задачам пользователя языкам программирования ЛОГО и ФОРТ [7, 8].
Иногда в ходе вывода результатов вычислений появляется сокращение NaN (от слов Not a Number — не число). Оно обозначает неопределенность, например вида 0/0 или Inf/Inf, где Inf — системная переменная со значением машинной бесконечности. Могут появляться и различные предупреждения об ошибках (на английском языке). Например, при делении на 0 конечного/ числа появляется предупреждение «Warning: Devide by Zero.» («Внимание: Деление на ноль»). Диапазон чисел, представимых в системе, лежит от 10- 308 до 10+ 308 .
Вообще говоря, в MATLAB надо отличать предупреждение об ошибке от сообщения о ней. Предупреждения (обычно после слова Warning) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления.
Форматы чисел
По умолчанию MATLAB выдает числовые результаты в нормализованной форме с четырьмя цифрами после десятичной точки и одной до нее. Многих такая форма представления не всегда устраивает. Поэтому при работе с числовыми данными можно задавать различные форматы представления чисел. Однако в любом случае все вычисления проводятся с предельной, так называемой двойной, точностью. Для установки формата представления чисел используется команда » format name где name — имя формата. Для числовых данных name может быть следующим сообщением: short — короткое представление в фиксированном формате (5 знаков), short e — короткое представление в экспоненциальном формате (5 знаков мантиссы и 3 знака порядка), long — длинное представление в фиксированном формате (15 знаков), long e — длинное представление в экспоненциальном формате (15 знаков мантиссы и 3 знака порядка), hex — представление чисел в шестнадцатеричной форме; bank — представление для денежных единиц.
Для иллюстрации различных форматов рассмотрим вектор, содержащий два элемента-числа:
х=[4/3 1.2345е-6]
В различных форматах их представления будут иметь следующий вид:
|
|
|
|
|
|
format short format short e format long format long e format bank |
1.3333 1.3333E+000 1.333333333333338 1.333333333333338E+000 1.33 |
0.0000 1.2345E-006 0.000001234500000 1.234500000000000E-006 0.00 |
|
|
|
|
|
|
Задание формата сказывается только на форме вывода чисел. Вычисления все равно происходят в формате двойной точности, а ввод чисел возможен в любом удобном для пользователя виде.
Формирование векторов и матриц
Особенности задания векторов и матриц
Описанные выше простые правила вычислений распространяются и на гораздо более сложные вычисления, которые (при использовании обычных языков программирования типа Бейсик или Паскаль) требуют составления специальных программ. MATLAB — система, специально предназначенная для проведения сложных вычислений с векторами, матрицами и массивами. При этом она по умолчанию предполагает, что каждая заданная переменная — это вектор, матрица или массив. Все определяется конкретным значением переменной. Например, если задано Х=1, то это значит, что X —это вектор с единственным элементом, имеющим значение 1. Если надо задать вектор из трех элементов, то их значения следует перечислить в квадратных скобках, разделяя пробелами. Так, например, присваивавание
» V=[l 2 3]
V=
1 2 3
задает вектор V, имеющий три элемента со значениями 1, 2 и 3. После ввода вектора система выводит его на экран дисплея.
Задание матрицы требует указания нескольких строк. Для разграничения строк используется знак ; (точка с запятой). Этот же знак в конце ввода предотвращает вывод матрицы или вектора (и вообще результата любой операции) на экран дисплея. Так, ввод
» М=[1 2 3: 4 5 6; 7 8 9];
задает квадратную матрицу, которую можно вывести:
» M
M =
1 2 3
4 5 6
7 8 9
Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые доступные системе функции, например:
» V= [2+2/(3+4) exp(5) sqrt(l0)]:
» V
V =
2.2857 148.4132 3.1623
Для указания отдельного элемента вектора или матрицы используются выражения вида V(1) или M(i. j). Например, если задать
» М(2. 2)
arts= 5
то результат будет равен 5. Если нужно присвоить элементу M(i. j) [ В тексте программ MATLAB лучше не использовать i и j как индексы, так как i и j — обозначение квадратного корня из -1. Но можно использовать I и J. — Примеч. ред. ] новое значение х, следует использовать выражение
M(ij)=x
Например, если элементу М(2, 2) надо присвоить значение 10, следует записать
» М(2. 2)=10
Выражение М( i) с одним индексом дает доступ к элементам матрицы, развернутым в один столбец. Такая матрица образуется из исходной, если подряд выписать ее столбцы.
Следующий пример поясняет такой доступ к элементам матрицы М:
» М=[1 2 3: 4 5 6: 7 8 9]
М =
1 2 3
4 5 6
7 8 9
» М(2)
ans =
4
» M(8)
ans =
6
» M(9)
ans =
9
» М(5)=100;
» М
М =
1 2 3
4 100 6
7 8 9
Возможно задание векторов и матриц с комплексными элементами, например:
» i=sqrt(-l):
» СМ =[1 2: 3 4] + i*[5 6: 7 8]
или
» СМ - [1+5*1 2+6*1: 3+7*1 4+8*1]
Это создает матрицу:
CM=
1.0000 + 5.00001 2.0000 + 6.00001
3.0000 + 7.00001 4.0000 + 8.00001
Наряду с операциями над отдельными элементами матриц и векторов система позволяет производить операции умножения, деления и возведения в степень сразу над всеми элементами, т. е. над массивами. Для этого перед знаком операции ставится точка. Например, оператор * означает умножение для векторов или матриц, а оператор .* —поэлементное умножение всех элементов массива. Так, если М — матрица, то М.*2 даст матрицу, все элементы которой умножены на скаляр — число 2. Впрочем, для умножения матрицы,на скаляр оба выражения — М*2 и М.*2 — оказываются эквивалентными.
Имеется также ряд особых функций для задания векторов и матриц. Например, функция magic(n) задает магическую матрицу размера пхп, у которой сумма всех столбцов, всех строк и даже диагоналей равна одному и тому же числу:
» M=magic(4)
М =
|
|||||
|
16 |
2 |
3 |
13 |
|
|
5 |
11 |
10 |
8 |
|
|
9 |
7 |
6 |
12 |
|
|
4 |
14 |
15 |
1 |
|
» sum(M)
ans=
34 34 34 34
» sum(M')
ans=
34 34 34 34
» sum(diag(M))
ans=
34
» M(1.2)+M(2.2)+M(3.2)+M(4.2)
ans= 34
Уже сама по себе возможность создания такой матрицы с помощью простой функции magic заинтересует любителей математики. Но векторных и матричных функций в системе множество, и мы их детально рассмотрим в дальнейшем. Напомним, что для стирания переменных из рабочей области памяти служит команда clear.
Объединение малых матриц в большую
Описанный способ задания матриц позволяет выполнить операцию конкатенации — объединения малых матриц в большую. Например, создадим вначале магическую матрицу размера 3x3:
» A=magic(3)
А=
|
||||
|
8 |
1 |
6 |
|
|
3 |
5 |
7 |
|
|
4 |
9 |
2 |
|
|
Теперь можно построить матрицу, содержащую четыре матрицы:
» В-[А А+16:А+32 А+16]
В =
|
8 |
1 |
6 |
24 |
17 |
22 |
|
|
3 |
5 |
7 |
19 |
21 |
23 |
|
|
4 |
9 |
2 |
20 |
25 |
18 |
|
|
40 |
33 |
38 |
24 |
17 |
22 |
|
|
35 |
37 |
39 |
19 |
21 |
23 |
|
|
36 |
41 |
34 |
20 |
25 |
18 |
|
Полученная матрица имеет уже размер 6x6. Вычислим сумму ее столбцов:
» sum(B)
ans =
126 126 126 126 126 126
Любопытно, что она одинакова для всех столбцов. А для вычисления суммы стро! используем команду
» sum(B.')
ans =
78 78 78 174 174 174
Здесь запись В.' означает транспонирование матрицы В, т. е. замену строк столб цами. На этот раз сумма оказалась разной. Это отвергает изначально возникши предположение, что матрица В тоже является магической. Для истинно магической матрицы суммы столбцов и строк должны быть одинаковыми:
» D=magic(6)
D=
|
35 |
1 |
6 |
26 |
19 |
24 |
|
|
3 |
32 |
7 |
21 |
23 |
25 |
|
|
31 |
9 |
2 |
22 |
27 |
20 |
|
|
8 |
28 |
33 |
17 |
10 |
15 |
|
|
30 |
5 |
34 |
12 |
14 |
16 |
|
|
4 |
36 |
29 |
13 |
18 |
11 |
|
|
» sum(D)
ans=
111 111 111 111 111 111
» sum(D.')
ans=
111 111 111 111 111 111
Более того, для магической матрицы одинаковой является и сумма элементов по основным диагоналям (главной диагонали и главной антидиагонали).
Удаление столбцов и строк матриц
Для формирования матриц и выполнения ряда матричных операций возникает необходимость удаления отдельных столбцов и строк матрицы. Для этого используются пустые квадратные скобки [ ]. Проделаем это с матрицей М:
» М=[1 2 3; 4 5 6; 7 8 9]
М =
|
||||
|
1 |
2 |
3 |
|
|
4 |
5 |
6 |
|
|
7 |
8 |
9 |
|
|
Удалим второй столбец используя оператор : (двоеточие):
» М(:.2)=[ ]
1 3
4 6
7 9
А теперь, используя оператор : (двоеточие), удалим вторую строку:
» М(2.:)=[ ]
М =
1 3
7 9
Операции с рабочей областью и текстом сессии
Дефрагментация рабочей области
По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и начинает содержать «дыры» и всякий «мусор». Это рано или поздно может привести к ухудшению работы системы или даже к нехватке оперативной памяти. Подобная ситуация становится возможной, если вы работаете с достаточно большими массивами данных.
Во избежание непроизводительных потерь памяти при работе с объемными данными (а векторы, матрицы и массивы относятся к таковым) следует использовать команду pack, осуществляющую дефрагментацию рабочей области. Эта команда переписывает все определения рабочей области на жесткий диск, очищает рабочую область и затем заново считывает все определения без «дыр» и «мусора» в рабочую область.
Сохранение рабочей области сессии
Переменные и определения новых функций в системе MATLAB хранятся в особой области памяти, именуемой рабочей областью. MATLAB позволяет сохранять значения переменных в виде бинарных файлов с расширением .mat Для этого служит команда save, которая может использоваться в ряде форм:
save fname — записывается рабочая область всех переменных в файле бинарного формата с именем fname.mat;
save fname X — записывает только значение переменной X;
save fname X Y Z — записывает значения переменных X, Y и Z.
После этих параметров можно указать ключи, уточняющие формат записи файлов:
-mat — двоичный МАТ-формат, используемый по умолчанию;
-ascii — ASCII-формат единичной точности (8 цифр);
-ascii -double — ASCII-формат двойной точности (16 цифр);
-ascii -double -tabs — формат с разделителем и метками табуляции;
V4 — запись МАТ-файла в формате версии MATLAB 4;
-append — добавление в существующий МАТ-файл.
Возможно использование слова save и в формате функции, а не команды, например:
save ('fname', 'varT . 'var2')
В этом случае имена файлов и переменных задаются строковыми константами.
Следует отметить, что возможности сохранения всего текста сессии, формируемой в командном режиме, команда save не дает. И не случайно! Дело в том, что сессия является результатом проб и ошибок, и ее текст наряду с правильными определениями содержит сообщения об ошибках, переопределения функций и переменных и много прочей «шелухи». Необходимости сохранять такое «творчество» обычно нет. А если есть — для этого служит команда diary, описанная чуть ниже.
Тем не менее это не значит, что вы не имеете возможности записать только то рациональное зерно, которое родилось в ходе попыток реализации ваших алгоритмов и методов решения задач. Надо просто воспользоваться редактором и отладчиком, которые позволяют (после отладки программы) получить документ в корректной форме без синтаксических и иных ошибок. Такой документ сохраняется в текстовом формате в виде файла с расширением .m.
Ведение дневника
Мы отмечали, что сессии не записываются на диск стандартной командой save. Однако если такая необходимость есть, можно воспользоваться специальной командой для ведения так называемого дневника сессии:
diary filename — ведет запись на диск всех команд в строках ввода и полученных результатов в виде текстового файла с указанным именем;
diary off — приостанавливает запись в файл;
diary on — вновь начинает запись в файл.
Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary('file'), где строка 'file' задает имя файла. Следующий пример поясняет технику применения команды diary:
» diary myfile.m
» 1+2
ans =
3
» diary off
» 2+3
ans =
5
» diary on
» sin(l)
ans =
0.8415
» diary off
Нетрудно заметить, что в данном примере первая операция — 1+2=3 — будет записана в файл myfile.m, вторая — 2+3=5 — не будет записана, третья операция — sin(1)=0.8415 — снова будет записана. Таким образом, будет создан файл сценария (Script-файл) следующего вида:
1+2
ans =
3
diary off sin(1)
ans =
0.8415
diary off
Он приведен в том виде, как записан, т. е. с пробелами между строк. Одна из распространенных ошибок начинающих пользователей — попытка запустить подобный файл в командной строке указанием его имени:
» myfile
??? ans =
|
Missing variable or function.
Error in ==> С:\MATLAB\bin\niyfile.m
On line 3 --> ans =
Обычно это приводит к ошибкам, так как данный файл — это просто текстовая запись команд и результатов их выполнения, не проверяемая на корректность и содержащая ряд строк, ошибочных с позиций синтаксиса языка программирования MATLAB — например, выражения ans =. Зато команда type позволяет просмотреть текст такого файла со всеми записанными действиями:
» type myfile
1+2
ans=
3
diary off.
ans=
0.8415
diary off
Во избежание отмеченных казусов рекомендуется записывать файл с расширением, отличным от .m, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание.
Загрузка рабочей области сессии
Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load:
load fname ... — загрузка ранее сохраненных в файле fname.mat определений со спецификациями на месте многоточия, подобными описанным для команды save (включая ключ -mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого по умолчанию);
1oad( 'fname'....) — загрузка файла fname.mat в форме функции.
Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом МАТ-файле.
Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo*.mat означает загрузку всех файлов с началом имени demo, например demol, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями.
Завершение вычислений и работы с системой
Иногда из-за ошибок в программе или из-за сложности решаемой задачи MATLAB «зацикливается» и перестает выдавать результаты либо непрерывно выдает их, хотя в этом уже нет необходимости. Для прерывания вычислений в этом случае достаточно нажать одновременно клавиши Ctrl и С (латинское).
Завершение работы с системой
Для завершения работы с системой можно использовать команды exit, quit (которые сохраняют содержимое рабочей области и выполняет другие действия в соот ветствии с файлом сценария finish.m) или комбинацию клавиш Ctrl+Q. Если необходимо сохранить значения всех переменных (векторов, матриц) системы, то перед вводом команды exit следует дать команду save нужной формы. Команда load после загрузки системы считывает значения этих переменных и позволяет начать работу с системой с того момента, когда она была прервана.
На этом мы закончим начальную экскурсию в технику матричных вычислений системы MATLAB. Мы расширим представления о ней в последующих уроках.
Что нового мы узнали?
В этом уроке мы научились:
Устанавливать и запускать систему MATLAB.
Редактировать документы и управлять их окном.
Выполнять простые расчеты.
Работать с числами, константами и переменными разного типа.
Задавать текстовые комментарии.
Использовать наиболее распространенные операторы и функции.
Распознавать сообщения об ошибках и предупреждения.
Задавать разные форматы чисел.
Осуществлять простые операции с матрицами.
Вести дневник сессии.
Дефрагментировать, сохранять и загружать рабочую область.
Завершать работу с системой.
Урок №3.
Основы графической визуализации вычислений
Особенности графики системы MATLAB
Построение графика функций одной переменной
Столбцовые диаграммы
Построение трехмерных графиков
Вращение графиков мышью
Контекстное меню графиков
Управление форматом графиков
Особенности графики системы MATLAB
Начиная с версии MATLAB 4.0, впервые ориентированной на Windows, графические средства системы MATLAB были существенно улучшены. Основные отличительные черты графики в новой версии MATLAB 6:
существенно улучшенный интерфейс графических окон;
введение новой панели инструментов Camera для интерактивного изменения условий видимости объекта;
расширенные возможности форматирования графики;
возможность создания графики в отдельных окнах;
возможность вывода нескольких графических окон;
возможность перемещения окон по экрану и изменения их размеров;
возможность перемещения области графики внутри графического окна;
задание различных координатных систем и осей;
высокое качество графики;
широкие возможности использования цвета;
легкость установки графических признаков — атрибутов;
снятие ограничений на число цветов;
обилие параметров команд графики;
возможность получения естественно выглядящих трехмерных фигур и их сочетаний;
простота построения трехмерных графиков с их проекцией на плоскость;
возможность построения сечений трехмерных фигур и поверхностей плоскостями;
функциональная многоцветная и полутоновая окраска;
возможность имитации световых эффектов при освещении фигур точечным источником света;
возможность создания анимационной графики;
возможность создания объектов для типового интерфейса пользователя.
С понятием графики связано представление о графических объектах, имеющих определенные свойства. В большинстве случаев об объектах можно забыть, если только вы не занимаетесь объектно-ориентированным программированием задач графики. Связано это с тем, что большинство команд высокоуровневой графики, ориентированной на конечного пользователя, автоматически устанавливает свойства графических объектов и обеспечивает воспроизведение графики в нужных системе координат, палитре цветов, масштабе и т. д.
На более низком уровне решения задач используется ориентированная на программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание — дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса — управляющих кнопок, текстовых панелей и т. д. Команды дескрипторной графики могут использоваться в высокоуровневой графике, например, для удаления осей, изменения цвета и т. д. в уже построенных графических объектах. Эти обширные возможности делают графику MATLAB одной из лучших среди графических подсистем систем компьютерной математики (СКМ).
Несмотря на обилие графических команд, их синтаксис достаточно прост и легко усваивается даже начинающими пользователями. Руководствуясь правилом описания «от простого к сложному», мы рассмотрим сначала графику функций одной переменной, а затем трехмерную графику, специальную, анимационную и, наконец, дескрипторную.
Хотя данная книга не предусматривает исчерпывающе полного описания всех команд графики системы MATLAB, большинство команд графики будет рассмотрено с примерами, которые можно считать дополнительными к тем, которые приведены в документации по системе.
Построение графика функций одной переменной
В режиме непосредственных вычислений доступны практически все возможности системы. Широко используется, например, построение графиков различных функций, дающих наглядное представление об их поведении в широком диапазоне изменения аргумента. При этом графики строятся в отдельных масштабируемых и перемещаемых окнах.
Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента х от 0 до 10с шагом 0.1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков plot(sin(x)). Это показано на рис. 3.1.
Вектор х задает интервал изменения независимой переменной от 0 до 10 с шагом 0.1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем просто соединяются отрезками прямых, т. е. осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10-20 точках она будет выглядеть состоящей из отрезков прямых.
Графики MATLAB строит в отдельных окнах, называемых графическими окнами. С первого взгляда видны отличия графического окна, показанного на рис. 3.1, от командного окна MATLAB. В главном меню окна появилась позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графики на рис. 3.1. Средства этой панели (мы их рассмотрим полнее в дальнейшем) позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.
Рис. 3.1. Пример построения графика синусоиды
Построение в одном окне графиков нескольких функций
Более подробное описание графического окна будет дано в уроке 5. А пока пойдем дальше и попытаемся построить графики сразу трех функций: sin(x), cos(#) и sin (x)/х. Прежде всего отметим, что эти функции могут быть обозначены переменными, не имеющими явного указания аргумента в виде у(х):
»y1=sin(x); y2=cos(x); y3=sin(x)/x;
Такая возможность обусловлена тем, что эти переменные являются векторами — как и переменная х. Теперь можно использовать одну из ряда форм команды
plot: plot(a1.f1.a2.f2.a3.f3,...).
где al, а2, аЗ,.„ — векторы аргументов функций (в нашем случае все они — х), a f1, f2, f3,... —векторы значений функций, графики которых строятся в одном окне. В нашем случае для построения графиков указанных функций мы должны записать следующее:
» plot(x,y1,x,y2,x.y3)
Можно ожидать, что MATLAB в этом случае построит, как обычно, точки графиков этих функций и соединит их отрезками линий. Но, увы, если мы выполним эти команды, то никакого графика не получим вообще. Не исключен даже сбой Б работе программы. Причина этого казуса уже обсуждалась в предыдущем уроке — при вычислении функции y3=sin(x)/x, если х представляет собой массив (вектор), то нельзя использовать оператор матричного деления /.
Этот пример еще раз наглядно указывает на то, что чисто поверхностное применение даже такой мощной системы, как MATLAB, иногда приводит к досадным срывам. Чтобы все же получить график, надо вычислять отношение sin(x) к хс помощью оператора поэлементного деления массивов ./. Этот случай поясняет рис. 3.2.
Рис. 3.2. Построение графиков трех функций
Обратите внимание на то, что хотя на этот раз MATLAB построил графики всех трех функций, в окне командного режима появилось предупреждение о делении на 0 — в момент, когда х=0. Это говорит о том, что piot «не знает» о том, что неопределенность sin(x)/x=0/0 устранимая и дает 1. Это недостаток практически всех систем для численных вычислений.
Графическая функция fplot
Разумеется, MATLAB имеет средства для построения графиков и таких функций, как sin(x)/x, которые имеют устранимые неопределенности. Не обсуждая эти средства подробно, просто покажем, как это делается, с помощью другой графической команды —
fplot: fplott'f(x)'. [xmin xmax])
Она позволяет строить функцию, заданную в символьном виде, в интервале изменения аргумента х от xmin до xmax без фиксированного шага изменения х. Один из вариантов ее применения демонстрирует рис. 3.3. Хотя в процессе вычислений предупреждение об ошибке (деление на 0) выводится, но график строится правильно, при х=0 sinx/x=l. Обратите также внимание на две используемые команды: clear (очистить)— очистка графического окна и grid on (сетка)— включение отображения сетки, которая строится пунктирными линиями.
Рис. 3.3. Построение графика sin(x)/x функцией fplot
На рис. 3.3 представлено также меню File (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.
Позже мы более подробно рассмотрим возможности различных графических команд. В частности, покажем, как можно задавать определенный цвет и стиль линий, как менять вывод координатных осей, наносить на графики различные текстовые надписи и выполнять множество иных операций форматирования графиков для придания им более наглядного вида, соответствующего требованиям пользователя. Мы также обсудим множество новых форм применения графических команд, резко расширяющих их возможности построения графиков всех мыслимых типов.
Столбцовые диаграммы
В прикладных расчетах часто встречаются графики, именуемые столбцовыми диаграммами, отражающие содержание некоторого вектора V. При этом каждый элемент вектора представляется столбцом, высота которого пропорциональна значению элемента. Столбцы нумеруются и масштабируются по отношению к максимальному значению наиболее высокого столбца. Выполняет построение такого графика команда bar(V) (рис. 3.4).
Столбцовые диаграммы — лишь один из многих типов графиков, которые может строить система MATLAB. Особенно часто столбцовые диаграммы используются при представлении данных финансово-экономических расчетов.
Рис. 3.4 дает также представление о меню Tools (Инструменты) окна графики, появившемся начиная с версии MATLAB 5.3.1 (выпуск 11.1). Нетрудно заметить, что кроме возможности вывода инструментальной панели здесь имеется целый ряд других команд, которые будут рассмотрены в дальнейшем. Это команды вывода свойств графических объектов, изменения масштаба графика, добавления осей и т. д.
Рис. 3.4. Построение столбцовой диаграммы значений элементов вектора
Построение трехмерных графиков
Столь же просто обеспечивается построение графиков сложных поверхностей. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующие команды (см. урок 6):
» [X.Y]=meshgrid(-5:0.1:5);
» Z=X.*sin(X+Y);
» meshc(X.Y,Z)
Окно с построенным графиком показано на рис. 3.5.
Рис. 3.5. Окно с графиками поверхности и ее проекции на плоскость под фигурой
Раньше пришлось бы убить много дней на составление и отладку нужной для построения такого графика программы. В MATLAB же можно в считанные секунды изменить задающую поверхность функцию Z(X, Y) и тут же получить новый график поверхности с окраской, в данном случае заданной вектором Z, и с ее проекцией на плоскость XY. На рис. 3.5 показано также открытое меню Help (Помощь) окна трехмерной графики.
Мы ограничимся этими примерами построения графиков как достаточно простыми и типовыми. Из них следует важный вывод — для решения той или иной частной задачи надо знать соответствующие команды и функции. В этом вам помогут как данная книга, так и справочная система MATLAB.
Вращение графиков мышью
Можно поворачивать построенную фигуру мышью и наблюдать ее под разными углами. Рассмотрим эту возможность на примере построения логотипа системы MATLAB — мембраны. Для этого, введя команду membrane, получим исходный график, представленный на рис. 3.6.
Рис. 3.6. Построение мембраны — логотипа системы MATLAB
Для вращения графика достаточно активизировать последнюю справа кнопку панели инструментов с изображением пунктирной окружности со стрелкой. Теперь, введя курсор мыши в область графика и нажав левую кнопку мыши, можно круговыми движениями заставить график вращаться вместе с обрамляющим его параллелепипедом (рис. 3.7).
Любопытно, что в версии MATLAB 6 вращать можно и двумерные графики, наблюдая поворот плоскости, в которой они построены. Никакого программирования такое вращение не требует.
Рис. 3.7. Вращение трехмерной фигуры мышью
Контекстное меню графиков
Для переключения в режим редактирования графика нужно щелкнуть на кнопке Edit Plot (Редактировать график) с изображением курсора-стрелки. В этом режиме графиком можно управлять с помощью контекстного меню, вызываемого щелчком правой кнопки мыши. Вид этого меню при курсоре, расположенном в области трехмерного графика вне построенных трехмерных графических объектов, показан на рис. 3.8. С помощью мыши можно также выделить график. Щелчок левой клавишей выводит рамку вокруг рисунка (см. рис. 3.8). Теперь на график можно наносить стрелки, поясняющие надписи (кнопка с буквой А) и т. д.
Рис. 3.8. График в состоянии редактирования и контекстное меню
Основы форматирования двумерных графиков
Графики в системе MATLAB строятся обманчиво просто. Связано это с тем, что многие свойства графиков установлены по умолчанию. К таким свойствам относятся вывод или скрытие координатных осей, положение их центра, цвет линии графика, ее толщина и т. д. и т. п. Позже будет показано, как свойства и вид графиков можно менять в широких пределах с помощью параметров команд графики. Однако этот путь требует хорошего знания деталей языка программирования и дескрипторной графики системы MATLAB.
В новой версии MATLAB 6 для изменения свойств графиков (их форматирования) используются принципы визуального контроля за стилем (видом) всех объектов графиков. Это позволяет легко, просто и наглядно придать графикам должный вид перед записью их в виде файлов на диск. Можно сказать, что в этой части реализованы отдельные принципы визуально-ориентированного программирования графических средств.
Здесь мы рассмотрим возможности форматирования графиков, которые, образно говоря, лежат на поверхности. Систематизированное описание интерфейса системы MATLAB 6.0, в том числе интерфейса графических окон, дается в уроке 5.
Форматирование линий графиков
MATLAB имеет возможность легко настраивать и корректировать свойства графиков с помощью специальных средств. В новой версии MATLAB 6.0 они существенно изменены. Так, в предшествующей версии для настройки (форматирования) графиков использовался специальный редактор свойств — Graphics Properties Editor (Редактор свойств графики). Его можно было вызвать из меню File окна командного режима MATLAB с помощью команды Show Graphics Properties Editor (Показать редактор свойств графики).
В новой версии MATLAB форматирование графиков стало более строгим и удобным. При этом ранее упомянутый редактор свойств графиков перестал так именоваться, и команда Show Graphics Properties в новой версии отсутствует. Ее заменяют команды Figure Properties (свойства фигуры) и Axis Properties (свойства осей) со всеми необходимыми настройками.
При построении графиков появляется графическое окно. Иногда оно бывает скрыто ранее имеющимися окнами как системы MATLAB, так и других работающих в среде Windows 95/98/Me/2000/NT4 приложений. Если вы не увидели графика, заданного для построения, то поищите его в списке открытых окон (приложений), нажимая клавиши Alt + Tab, и выберите из списка нужное окно. Окна графики имеют изображение логотипа системы MATLAB. По умолчанию они выводятся с панелью инструментов с рядом кнопок вполне очевидного назначения.
Щелкнув на кнопке Edit Plot (Редактировать график) в панели инструментов окна графики и щелкнув по графику, можно заметить, что график выделился: вокруг него появилась рамка. Теперь, указав курсором мыши на тот или иной объект графика и щелкнув снова левой клавишей, можно наблюдать выделение объекта и появление окна его форматирования.
Например, указав в режиме редактирования мышью на линию графика (и дважды быстро щелкнув левой клавишей), можно увидеть окно форматирования линий графика, показанное на рис. 3.9 слева. Часть окна графики с выделенным графиком видна справа. Обратите внимание на появление на линии графика ряда черных квадратиков, — они используются для указания курсором мыши именно на линию графика, а не на другие объекты.
Рис. 3.9. Окно графика и окно форматирования линий
В этом окне открыта главная для операций форматирования вкладка — Style (Стиль). Она устанавливает стиль отображения линии, т. е. ее вид (например, сплошная линия или пунктирная), ширину и цвет, а также параметры маркеров, отмечающих опорные точки графиков.
Полезно знать, что кнопка Apply (Применить) позволяет применить сделанные установки к графику до закрытия окна диалога. Кнопка О К вводит сделанные установки и закрывает окно диалога. Назначение других кнопок очевидно.
Форматирование маркеров опорных точек
В нашем случае опорные точки задаются ранжированной переменной х, имеющей ряд значений от -15 до +15 с шагом 0.1. Эти точки появляются на графике, если в поле свойств маркера Marker Properties (Свойства маркера) из меню Style (Стиль) выбрать стиль маркера. На рис. 3.10, к примеру, показано построение графика с маркерами опорных точек в виде окружностей.
Рис. 3.10. Пример задания параметров маркеров и построения графика с ними
Можно задавать размеры маркеров, цвет их закраски и цвет окантовки. Так, на рис. 3.10 при его просмотре на экране цветного дисплея маркеры имеют вид окружностей с условным размером 4, цветом окантовки красным и цветом закраски желтым. Маркеры можно задавать в виде окружностей, прямоугольников, крестиков, ромбиков и т. д. Применение маркеров делает графики более наглядными.
Форматирование линий и маркеров для графика нескольких функций
Если строится график нескольких функций, то можно форматировать линии и маркеры каждой кривой отдельно. Выполним следующие команды:
» х=-6:.1:6;
» plot(x,sin(x),x,sin(x). ^ 3,x,sin(x).^5):
Рис. 3.11 показывает пример такого форматирования для графика, полученного исполнением этих команд.
Кстати, обратите внимание на то, как заданы степени синуса. Записать эти выражения в виде sin(x)^3 и cos(x)^5 будет грубейшей ошибкой, поскольку х здесь вектор. Операторы ^ в данном случае дают поэлементное возведение в степень, что и нужно для построения графиков этих функций.
Рис. 3.11. Пример форматирования для графика трех функций
Форматирование осей графиков
Аналогично описанным выше правилам выполняется форматирование и других объектов графиков. Например, указав курсором мыши на оси графиков (на них тоже есть метки в виде черных квадратиков) и дважды щелкнув левой клавишей мыши, можно увидеть появление окна форматирования объектов дескрипторной графики Property Editor (Редактор свойств, Графический редактор свойств) (рис. 3.12), настроенного на форматирование осей.
Рис. 3.12. Пример форматирования осей графика
Окно графического редактора свойств дескрипторной графики имеет множество вкладок, настройки которых довольно очевидны, и ничто не мешает читателю поэкспериментировать с ними несколько минут. Это позволит понять простоту и одновременно высокую эффективность средств форматирования объектов графики. Например, вы можете задать линейный или логарифмический масштаб осей (вкладка Scale (Масштаб), открытая на рис. 3.12), нормальное или инверсное направление осей ( X, У, а в случае трехмерных графиков и Z), показ сетки (параметр Grid Show), изменить стиль осей и цвета фона (вкладка Style (Стиль)), нанести у осей надписи (вкладка Label (Ярлык)) и пр.
Рис. 3.13 показывает график синусоиды после некоторых операций по форматированию осей. Здесь (кстати, как и на рис. 3.12) задано построение сетки Grid по осям X и Y, построение надписей (просто буквы X и Y) по координатным осям и построение титульной надписи. Заодно на рис. 3.13 показано в открытом виде меню расширенных инструментальных средств графического окна. Его команды подробно обсуждаются в уроке 5. Словом, с объектами графики можно сделать все, что угодно! Некоторые из возможностей форматирования объектов графики мы рассмотрим позже, по мере описания типов графиков.
Рис. 3.13. Пример построения графика синусоиды после форматирования осей
Если компьютер оснащен должным набором шрифтов, то надписи на графиках могут быть сделаны на русском языке — рис. 3.13 хорошо иллюстрирует эту важную для наших пользователей возможность. На нем титульная надпись сделана на русском языке. Средства форматирования надписей дают обширные возможности по выбору набора шрифтов, их стиля, размеров символов и их цвета.
Нанесение надписей и стрелок прямо на график
Дополнительно на график можно нанести надписи с помощью кнопки панели инструментов с буквой А. Место надписи фиксируется щелчком мыши. На рис. 3.14 показан отформатированный график с текстовым блоком, созданным таким образом в левой верхней части поля графика.
Здесь показано контекстное меню правой клавиши мыши, поясняющее выбор размера символов надписи (и другие возможности этого меню). Напоминаем, что это меню появляется при щелчке правой кнопки мыши на заданном объекте. В этом меню имеются все команды, доступные для данного объекта в данной ситуации.
Рис. 3.14. Нанесение надписи на отформатированный график
Полученную таким образом надпись можно выделить и перенести мышью в любое другое место. Рис. 3.15 показывает процесс создания еще двух надписей с переносом их текстового блока в нужное место. Надписи сделаны с разным размером символов и разным стилем. Особенно приятно, что при задании на надписи возведения в степень знаком ^ надпись на экране отображается в естественном математическом виде (степень в виде верхнего индекса).
Рис. 3.15. Окончательно отформатированный график трех функций
На рис. 3.15, в частности, показано задание надписей разным стилем, а также задание стрелки с помощью соответствующей кнопки панели инструментов. Это стрелку в режиме редактирования графика можно перемещать и вращать мышью, а также менять ее длину. Можно также наносить на график и обычные линии (без стрелки).
Построение легенды и шкалы цветов на графике
Дополнительно можно изменить размеры графика (см. меню Tools (Инструменты) и его команды Zoom In (Увеличить)и Zoom Out (Уменьшить)), начать поворот графика мышью (команда Rotate 3D), добавить отрезок прямой или иной графический примитив (подменю Add) и подключить к графику легенду — пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него. Поскольку наш график содержит три кривые, то легенда представляет собой обозначение этих трех линий в правом верхнем углу рисунка (рис. 3.16). Каждая линия имеет тот же цвет, что и на графике (и тот же стиль).
Рис. 3.16. Окончательно сформированный график
Следует еще раз отметить, что все описанные возможности форматирования графиков доступны и программным способом, путем задания соответствующих графических команд, параметров и примитивов. Например команда text(х,у, 'legend') позволяет задать надпись 'legend' с началом, имеющим координаты (х, у). Если после первого апострофа перед текстом поместить параметр \leftarrow, то надпись (легенда) появится после стрелки с острием, обращенным влево. Аналогично параметр \rightarrow после надписи задает вывод стрелки после надписи с острием, обращенным вправо. Эта возможность позволяет помечать не только кривые, но и отдельные точки на них. Возможно также применение команды legend('s1', 's2',...), выводящей легенду обычного вида — отрезки линий графиков с поясняющими надписями 's1', 's2' и т.д.
Перемещение графика в графическом окне
Обычно график занимает фиксированное положение в центре графического окна. Однако в режиме редактирования графиков, когда курсор мыши находится в области графика, в контекстном меню правой клавиши мыши есть команда Unlock Axes Position (Отключить позиционирование осей). Она снимает фиксацию положения координатных осей графика и позволяет двигать его мышью вместе с осями. Это иллюстрирует рис. 3.17.
Рис. 3.17. Пример перемещения графика
Интересно, что при перемещении графика его легенда и цветовая диаграмма остаются на прежнем месте.
Применение графической «лупы»
На панели инструментов есть кнопки с изображение лупы и знаками + и -. С их помощью выполняются команды Zoom In (+)(Увеличить) и Zoom Out (-) (Уменьшить). Это позволяет увеличивать или уменьшать масштаб просмотра изображения. При этом команда Zoom In интересна еще одной возможностью — с ее помощью можно выделять часть графика перемещением мыши с нажатой левой клавишей — рис. 3.18.
Рис. 3.18. Пример выделения части графика
Рис. 3.19. Пример просмотра части графика
Область выделения отмечается прямоугольником из тонких точечных линий. Отпустив левую клавишу мыши, можно наблюдать построение выделенной части графика на всем окне — рис. 3.19. С помощью команды Zoom Out можно восстановить график в прежнем масштабе. Таким образом реализуется графическая «лупа».
Работа с камерой 3D-графики
В отличие от двумерных (2D) графиков форматирование трехмерных графиков содержит ряд дополнительных возможностей. Покажем их на простом примере построения 3D-графики с помощью следующих простых команд:
» Z=peaks(40):
» mesh(Z);
Рис. 3.20. Пример построения каркасного 3D-графика
Здесь первая команда создает массив точек поверхности с помощью одного из ряда встроенных в ядро системы MATLAB готовых описаний таких поверхностей.
Рис. 3.21. Пример форматирования трехмерного графика
Вторая команда просто строит эту поверхность по опорным точкам с использованием интерполяции для промежуточных точек. Таким образом создается цветная каркасная поверхность, как бы сотканная из разноцветных проволок. На рис. 3.20 показано построение этой поверхности вместе со специальной панелью инструментов трехмерной графики, названной в оригинале Camera (Камера).
Несмотря на множество кнопок, пользование панелью инструментов 3D-графики достаточно просто, если представить себе, что вы смотрите на предмет через объектив фотокамеры. Наглядные рисунки на кнопках поясняют смысл их действия — это перемещение и вращение 3D-рисунков относительно тех или иных координатных осей, включение отображения перспективы, изменение цветовой схемы и др.
Рис.. 3.22 . Cтоп кадр вращения трехмерного графика
Рис. 3.21 показывает, что приемы форматирования двумерной графики можно использовать при работе с трехмерной графикой — вывод надписи на график, вывод легенды (кстати, теперь объемной) и шкалы цветов.
Для управления положением и вращением трехмерного графика можно использовать клавиши перемещения курсора. Эффект вращения графика иллюстрирует рис. 3.22, где показан график рис. 3.21 после его поворота при нажатой клавише —>. В отличие от поворота мышью (также возможного) перемещение и повороты с помощью клавиш курсора при выбранном типе перемещения дают плавное перемещение или вращение фигуры. Таким образом осуществляется анимация (оживление) трехмерной графики.
Заключительные замечания по графике
Итак, мы рассмотрели основные приемы форматирования графиков, в основном используя средства панели инструментов и отдельные, достаточно очевидные, команды из меню графического окна. Более подробно интерфейс пользователя графического окна будет описан в уроке 5.
Хотя многие приемы форматирования графики заимствованы из технологии визуально-ориентированного программирования, в базовой системе MATLAB (без дополнительных пакетов расширения (toolbox)) все еще отсутствует полноценная возможность такого программирования, даже с учетом расширенных возможностей дескрипторной графики. Это видно уже из того, что вносимые форматированием изменения в графиках не сопровождаются генерацией программных кодов, которые в последующем при их вызове с новыми параметрами порождали бы построение графиков с новыми параметрами. Пользователь может лишь записать на диск копии созданных графиков в формате растрового изображения (.bmp) и использовать их в целях иллюстрации своих материалов.
Однако средства MATLAB позволяют опытным программистам создать расширения системы с визуально-ориентированной технологией программирования. Самым наглядным примером этого является система моделирования динамических объектов Simulink с набором моделей из готовых блоков. При этом автоматически создается не только сложная графическая блок-схема моделируемого устройства, но и система уравнений состояния, решение которой и является основой моделирования.
Что нового мы узнали?
В этом уроке мы научились:
Строить графики функций одной переменной.
Строить столбцовые диаграммы.
Строить трехмерные графики.
Вращать графики мышью.
Использовать контекстное меню графиков.
Управлять форматом графиков.
Урок №4.
Работа со справкой и примерами
Работа с интерактивной справкой
Справка по объекту, группе объектов, ключевым словам
Просмотр текстов примеров и m-файлов
Работа со справочной системой
Просмотр документации в формате PDF
Демонстрационные примеры
Запуск приложения Simulink
Интерактивная справка из командной строки
Вызов списка разделов интерактивной справки
MATLAB имеет интерактивную систему помощи, которая реализуется в командном режиме с помощью ряда команд. Одной из них является команда
» help
которая выводит весь список папок, содержащих m-файлы с определениями операторов, функций и иных объектов, присущих конкретной реализации системы MATLAB. Ниже приводится этот список для системы MATLAB 6.0:
|
HELP topics: |
|
|
matlab\general |
- General purpose commands. |
|
matlab\ops |
- Operators and special characters. |
|
matlab\lang |
- Programming language constructs. |
|
matlab\elmat |
- Elementary matrices and matrix manipulation. |
|
matlab\elfun |
- Elementary math functions. |
|
matlab\specfun |
- Specialized math functions. |
|
matlab\matfun |
- Matrix functions - numerical linear algebra. |
|
matlab\datafun |
- Data analysis and Fourier transforms. |
|
matlab\audio |
- Audio support. |
|
matlab\polyfun |
- Interpolation and polynomials. |
|
matlab\funfun |
- Function functions and ODE solvers. |
|
matlab\sparfun |
- Sparse matrices. |
|
matlab\graph2d |
- Two dimensional graphs. |
|
matlab\graph3d |
- Three dimensional graphs. |
|
matlab\specgraph |
- Specialized graphs. |
|
matlab\graphics |
- Handle Graphics. |
|
matlab\uitools |
- Graphical user interface tools. |
|
matlab\strfun |
- Character strings. |
|
matlab\iofun |
- File input/output. |
|
matlab\timefun |
- Time and dates. |
|
matlab\datatypes |
- Data types and structures. |
|
matlab\verctrl |
- Version control . |
|
matlab\winfun |
- Windows Operating System Interface Files (DDE/ActiveX) |
|
matlab\demos |
- Examples and demonstrations. |
|
tool box\ local |
- Preferences . |
|
simulink\simulink |
- Simulink |
|
simulink\blocks |
- Simulink block library. |
|
simulink\simdemos |
- Simulink 4 demonstrations and samples. |
|
simdemos\aerospace |
- Simulink: Aerospace model demonstrations and samples. |
|
simdemos\automoti ve |
- Simulink: Automotive model demonstrations and samples. |
|
||
|
s1mdemos\simfeatures - Simulink: Feature demonstrations and samples. |
|
|
simdemos\simgeneral |
- Simulink: General model demonstrations and samples. |
|
simdemos\simnew |
- Simulink: New features model demonstrations and samples. |
|
simulink\dee |
- Differential Equation Editor |
|
stateflow\statef1ow |
- Statef low |
|
stateflow\sfdemos |
- Statef low demonstrations and samples. |
|
statef low\ coder |
- Statef low Coder |
|
rtw\rtw |
- Real -Time Workshop |
|
rtw\rtwdemos |
- Real -Time Workshop Demonstrations: |
|
asap2\asap2 |
- (No table of contents file) |
|
asap2\user |
- (No table of contents file) |
|
cdma \cdma |
- CDMA Reference Blockset. |
|
cdma \cdmamasks |
- CDMA Reference Blockset mask 'helper functions. |
|
cdma \cdmamex |
- CDMA Reference Blockset S-Functions. |
|
cdma\cdmademos |
- CDMA Reference Blockset demonstrations and examples. |
|
commbl ks\commblks |
- Communications Blockset. |
|
commbl ks\commmasks |
- Communications Blockset mask helper functions. |
|
commbl ks\commmex |
- Communications Blockset S-functions. |
|
commbl ks\commbl ksdemos |
- Communications Blockset Demos. |
|
commbl ks\commbl ksobsol ete |
- Archived Simulink Files from Communications ToolboxVersion 1.5. |
|
||
|
comm\comm |
- Communications Toolbox. |
|
comm\commdemos |
- Communications Toolbox Demonstrations. |
|
comm\commobsolete |
- Archived MATLAB Files from Communications Toolbox Version 1.5. |
|
||
|
control \control |
- Control System Toolbox. |
|
control \ctrlguis |
- Control System Toolbox -- GUI support functions. |
|
control \ctrl obsolete |
- Control System Toolbox -- obsolete commands. |
|
control \ctrlutll |
- (No table of contents file) |
|
control \ctrl demos |
- Control System Toolbox -- Demos. |
|
dspblks\dspblks |
- DSP Blockset. |
|
dspblks\dspmasks |
- DSP Blocks'et mask helper functions. |
|
dspblks\dspmex |
- DSP Blockset S-Function MEX-files. |
|
dspblks\dspdemos |
- DSP Blockset demonstrations and examples. |
|
dsprtw\ut11_c |
- (No table of contents file) |
|
daq\daq |
- Data Acquisition Toolbox. |
|
daq\daqdemos |
- Data Acquisition Toolbox - Data Acquisition Demos. |
|
database\database |
- Database Toolbox. |
|
database\dbdemos |
Database Toolbox Demonstration Functions. |
|
database\vqb |
- Visual Query Builder functions. |
|
datafeed\datafeed |
- Datafeed Toolbox. |
|
datafeed\dfgui |
Datafeed Toolbox Graphical User Interface |
|
toolbox\dlals |
- Dials & Gauges Blockset |
|
tool box\exl Ink |
- (No table of contents file) |
|
fil terdesl gn\ filterdesi gn |
- Filter Design Toolbox. |
|
filterdesi gn\quantl zati on |
- (No table of contents file) |
|
fi1terdesi gn\ filtdesdemos |
- Filter Design Toolbox Demonstrations. |
|
finderiv\finderiv |
- Financial Derivatives Toolbox. |
|
ftseries\ftseries |
- Financial Time Series Toolbox |
|
ftseries\ftsdemos |
- (No table of contents file) |
|
ftseries\ftsdata |
- (No table of contents file) |
|
ftseries\ftstutorials |
- (No table of contents file) |
|
finance\ finance |
- Financial Toolbox. |
|
finance\calendar |
- Financial Toolbox calendar functions. |
|
finance\findemos |
- Financial Toolbox demonstration functions. |
|
finance\finsupport |
- (No table of contents file) |
|
|
|
|
|
|
|
toolbox\fixpo1nt |
- Fixed-Point Blockset |
|
|
fixpoint \fxpdemos |
- Fixed- Point Blockset Demos |
|
|
f1xpoint\obsolete |
- Obsolete Fixed-Point Blockset |
|
|
fuzzy\ fuzzy |
- Fuzzy Logic Toolbox. |
|
|
fuzzy \fuzdemos |
- Fuzzy Logic Toolbox Demos. |
|
|
garch\garch |
- GARCH Toolbox. |
|
|
garch\garchdemos |
- (No table of contents file) |
|
|
images\ images |
- Image Processing Toolbox. |
|
|
images\imdemos |
- Image Processing Toolbox --- demos and sample images |
|
|
instrument\ i nst rument |
- Instrument Control Toolbox. |
|
|
i nstrument\ Instrumentdemos |
- (No table of contents file) |
|
|
Imi\lmictrl |
- LMI Control Toolbox: Control Applications |
|
|
Imi\lmilab |
- LMI Control Toolbox |
|
|
toolbox\compiler |
- MATLAB Compiler |
|
|
toolbox\rptgen |
- , MATLAB Report Generator |
|
|
map\map |
- Mapping Toolbox |
|
|
map\mapdisp |
- Mapping Toolbox Map Definition and Display. |
|
|
map\mapproj |
- Mapping Toolbox Projections. |
|
|
mpc \mpccmds |
- Model Predictive Control Toolbox. |
|
|
mpc \mpcdemos |
- Model Predictive Control Toolbox |
|
|
motdsp\motdsp |
- Motorola DSP Developer's Kit |
|
|
motdsp\motdspmex |
- Motorola DSP Developers Kit |
|
|
motdspasm\bin |
- (No table of contents file) |
|
|
motdsp\motdspblks |
- Motorola DSP Developers Kit block libraries |
|
|
motdsp\motdspmasks |
- Motorola DSP blockset mask helper functions. |
|
|
motdsp\motdspdemos |
- MOTDSP Toolbox demonstrations and examples: |
|
|
mutools\conmands |
- Mu-Analysis and Synthesis Toolbox. |
|
|
mutools\subs |
- Mu-Analysis and Synthesis Toolbox. |
|
|
nnet\nnet |
- Neural Network Toolbox. |
|
|
nnet\nnutlls |
- (No table of contents file) |
|
|
nnet\nncontrol |
- Neural Network Toolbox Control System Functions. |
|
|
nnet\nndemos |
- Neural Network Demonstrations. |
|
|
nnet\nnobsolete |
- (No table of contents file) |
|
|
toolbox\ncd |
- Nonlinear Control Design Blockset |
|
|
toolbox\optim |
- Optimization Toolbox. |
|
|
toolbox\pde |
- Partial Differential Equation Toolbox. |
|
|
powersys\powersys |
- Power System Blockset. |
|
|
powersys \ powerdemo |
- Power System Blockset Demos. |
|
|
rtw\ada |
- Real -Time Workshop Ada Coder |
|
|
targets\ecoder |
- Real -Time Workshop Embedded Coder |
|
|
toolbox\reqmgt |
- Requirements Management Interface. |
|
|
tool box\ robust |
- Robust Control Toolbox. |
|
|
toolbox\sb2sl |
- SB2SL (converts SystemBuild to Simulink) |
|
|
signal\signal |
- Signal Processing Toolbox. |
|
|
signal \fdatoolgui |
- Signal Processing Toolbox GUI. |
|
|
signal \sptoolgul |
- Signal Processing Toolbox GUI |
|
|
signal\sigdemos |
- Signal Processing Toolbox Demonstrations. |
|
|
rtw\accel |
- Simulink Accelerator |
|
|
simulink\mdldiff |
- Model Differencing for Simulink and Stateflow |
|
|
simulink\simcoverage |
- Simulink Model Coverage Tool |
|
|
toolbox\rptgenext |
- Simulink Report Generator |
|
|
toolbox\splines |
- Spline Toolbox. |
|
|
toolbox\stats |
- Statistics Toolbox. |
|
|
toolbox\symbolic |
- Symbolic Math Toolbox. |
|
|
ident\ident |
- System Identification Toolbox. |
|
|
ident\idobsolete |
- (No table of contents file) |
|
|
|
|
|
|
|
ident\idguis |
- (No table of contents file) |
ident\idutils |
- (No table of contents file) |
Ident\iddemos |
- (No table of contents file) |
ident\idhelp |
- (No table of contents file) |
wavelet\wavelet |
- Wavelet Toolbox. |
wavelet\wavedemo |
- Wavelet Toolbox Demonstrations. |
xpc\xpc |
- xPC Target |
build\xpcblocks |
- (No table of contents file) |
xpc\xpcdemos |
- xPC Target -- demos and sample script files. |
kernel \embedded |
- xPC Target Embedded Option |
MATLABR12\work |
- (No table of contents file) |
For more help on |
directory/topic, type "help topic". |
Этот внушительный список дает наглядное представление о пакетах прикладных программ - пакетах инструментов (пакетах расширений) (toolbox), увеличивающих возможности системы MATLAB и содержащих массу серьезных примеров применения системы.
Примечание
Следует отметить, что набор входящих в список средств зависит от набора пакетов расширения, которыми располагает версия системы MATLAB, заказанная или полученная конкретным пользователем. Этот набор может заметно отличаться от приведенного. Кроме того, в MATLAB 6.0 для доступа к пакетам расширения может потребоваться указание пути к их файлам на диске в панели браузера файловой системы.
Справка по конкретному объекту
Для получения справки по какому-либо конкретному объекту используются команды
» help имя
или
» doc имя
где имя — имя объекта, для которого требуется вывод справочной информации. Мы уже приводили пример помощи по разделу операторов ops. Ниже дается пример для функции вычисления гиперболического синуса, намеренно введенной с неверным указанием имени:
» help hsln hsin.m
not found.
Нетрудно заметить, что система помощи сообщает, что для функции с именем hsin соответствующий m-файл отсутствует. Введем имя верно:
» help slnh
SINH Hyperbolic sine.
SINH(X) Is the hyperbolic sine of the elements of X.
Overloaded methods
help sym/slnh.m
Теперь полученное сообщение содержит информацию о функции slnh. Хотя имена функций в MATLAB задаются малыми (строчными) буквами, в сообщениях справочной системы имена функций и команд выделяются большими (прописными) буквами. Этот не слишком удачный прием использован для выделения заголовка текста справки в виде имени функции. В данной книге мы отказались от такого приема, вводящего начинающих пользователей в заблуждение.
Аналогичным образом можно получить справку по константам и другим объектам языка MATLAB. Ниже дан пример обращения к справке о числе п:
» help pi
PI 3.1415926535897
PI= 4*atan(1) = imagdog(-l)) = 3.1415926535897
При всей примитивности справки help надо отметить ее высокую эффективность. Особенно популярна интерактивная справка у пользователей, привыкших к работе с языками программирования, которые используются в среде операционной системы MS-DOS. Справка doc имя выводит более полную информацию в окне помощи в формате HTML.
Справка по группе объектов
Пользователя системы MATLAB часто интересует набор функций, команд или иных понятий, относящихся к определенной группе объектов. Выше были указаны имена основных групп объектов системы MATLAB. Ниже дан пример вызова справки по группе объектов timefun:
» help timefun
Time and dates.
Current date and time.
|
||
|
Now - Current date and time as date number. |
|
|
Date - Current date as date string. |
|
|
clock - Current date and time as date vector. |
|
|
Basic functions. |
|
|
datenum - Serial date number. |
|
|
datestr - String representation of date. |
|
|
datevec - Date components. |
|
|
Date functions. |
|
|
calendar - Calendar. |
|
|
weekday - Day of week. |
|
|
eomday - End of month. |
|
|
datetick - Date formatted tick labels. |
|
|
Timing functions. |
|
|
cputime - CPU time in seconds. |
|
|
tic. toe - Stop watch timer. |
|
|
etime - Elapsed time. |
|
|
pause - Wait in seconds. |
|
|
После уточнения состава определенной группы объектов можно получить детальную справку по любому выбранному объекту. Как это делается, было описано выше.
Справка по ключевому слову
Ввиду обилия в системе MATLAB m-функций, число которых около 800, важное значение имеет поиск m-функций по ключевым словам. Для этого служит команда
lookfor Ключевое слово
или
lookfor 'Ключевые слова'
В первом случае ищутся все m-файлы, в заголовках которых встречается заданное ключевое слово, и заголовки обнаруженных файлов выводятся на экран. Следует отметить, что широкий поиск по одному ключевому слову может подчас привести к выводу многих десятков определений и длится довольно долго.
Для уточнения и сокращения зоны поиска следует использовать вторую форму команды lookfor. Вот пример ее применения:
» lookfor 'inverse sin'
ASIN Inverse sine.
ASIN Symbolic inverse sine.
В данном случае для поиска использованы слова ' inverse sin', т. е. задан поиск арксинуса. Система поиска нашла только два вида арксинуса ASIN — обычного и в символьной форме. Число найденных определений зависит от того, с каким числом пакетов прикладных программ (пакетов расширений) поставляется версия системы MATLAB.
В следующей главе мы рассмотрим гораздо более эффектные средства справочной системы, ориентированные на работу в стиле приложений операционных систем Windows 95/98/Me/2000/NT4 с графическим пользовательским интерфейсом.
Дополнительные справочные команды
В командном режиме можно получить справочные данные с помощью ряда команд:
computer — выводит сообщение о типе компьютера, на котором установлена текущая версия MATLAB;
help script — выводит сообщение о назначении m-файлов сценариев (Script-файлов);
helрf unction — выводит сообщение о назначении и структуре m-файлов функций;
info — выводит информацию о фирме Math Works с указанием адресов электронной почты;
subscribe — позволяет создать файл с бланком регистрации;
ver — выводит информацию о версиях установленной системы MATLAB и ее компонентов;
version — выводит краткую информацию об установленной версии MATLAB,
version -Java — выводит информацию об установленной в составе MATLAB версии Ява (Java);
what — выводит имена файлов текущего каталога;
what name — выводит имена файлов каталога, заданного именем name;
whatsnew name — выводит на экран содержимое файлов readme заданного именем name класса для знакомства с последними изменениями в системе и в пакетах прикладных программ;
which name — выводит путь доступа к функции с данным именем.
Как правило, эти команды выводят довольно обширные сообщения. Ниже показаны примеры применения отдельных команд этой группы:
» computer
ans=
PCWIN
» version
ans =
6.0.0.88 (R12)
» ver
MATLAB Version 6.0.0.88 (R12) on PCWIN MATLAB License Number: 0
MATLAB Toolbox Version 6.0 (R12) 06-0ct-2000
Simulink Version 4.0 (R12) 16-Jun-2000
Stateflow Version 4.0 (R12) 04-0ct-2000
Приведенный выше сокращенный список пакетов расширения системы MAT-LAB 6.0 дает весьма ценную информацию об их версиях и датах выпуска. Он свидетельствует о весьма существенном обновлении не только базовой системы MATLAB, но и стандартных пакетов расширения (toolbox). Более полный список пакетов расширения дан в уроке 23. Рекомендуем приобрести издание [44] для работы с Simulink и издание [39] для работы с пакетами расширения. В дальнейшем мы рассмотрим и другие команды, которые могут быть отнесены к группе дополнительных справочных команд.
Примеры, вызываемые из командной строки
Вызов списка демонстрационных примеров
Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения.
Система MATLAB содержит многие сотни таких примеров — практически по примеру на каждый оператор или функцию. Наиболее поучительные примеры можно найти в разделе demos, исполнив команду
» help demos
Ниже представлен выводимый этой командой список примеров:
» help demos
Examples and demonstrations.
Type 'demo' at the command line to browse more demos of
MATLAB. the Toolboxes, and SIMULINK.
MATLAB/Introduction.
Demo - Browse demos for MATLAB. Toolboxes, and SIMULINK.
MATLAB/Matrices.
Intro - Introduction to basic matrix operations in MATLAB.
Inverter - Demonstrate the inversion of a matrix.
Buckydem - Connectivity graph of the Buckminster Fuller geodesic dome.
Sparsity - Demonstrate effect of sparsity orderings.
|
||
|
Matmanip - Introduction to matrix manipulation. |
|
|
Eigmovie - Symmetric eigenvalue movie. |
|
|
Rrefmovie - Computation of Reduced Row Echelon Form. |
|
|
Delsqdemo - Finite difference Laplacian on various domains. |
|
|
Sepdemo - Separators for a finite element mesh. |
|
|
Airfoil - Display sparse matrix from NASA airfoil. |
|
|
Eigshow - Graphical demonstration of matrix eigenvalues. |
|
|
Svdshow - Graphical demonstration of matrix singular values. |
|
|
MATLAB/Numerics. |
|
|
Funfuns - Demonstrate functions that operate on other functions. |
|
|
Fitdemo - Nonlinear curve fit with simplex algorithm. |
|
|
Sunspots - FFT: the answer is 11.08, what .is the question? |
|
|
e2pi - 2D visual solutions: Which is greater. e~pi or pi x e? |
|
|
bench - MATLAB Benchmark. |
|
|
Fftdemo - Use of the fast finite Fourier transform. |
|
|
Census - Try to predict the US population in the year 2000. |
|
|
spline2d - Demonstrate GINPUT and SPLINE in two dimensions. |
|
|
Lotkademo - An example of ordinary differential equation solution. |
|
|
Quaddemo - Adaptive quadrature. |
|
|
Zerodemo - Zerofinding with fzero. |
|
|
Fplotdemo - Plot a function. |
|
|
Quake - Loma Prieta Earthquake. |
|
|
Qhulldemo - Tessellation and interpolation of scattered data. |
|
|
MATLAB/Visualization. |
|
|
graf2d - 2D Plots: Demonstrate XY plots in MATLAB. |
|
|
graf2d2 - 3D Plots: Demonstrate XYZ plots in MATLAB. |
|
|
Grafcplx - Demonstrate complex function plots in MATLAB. |
|
|
Lorenz - Plot the orbit around the Lorenz chaotic attractor. |
|
|
Imageext - Image colormaps: changing and rotating colormaps. |
|
|
Xpklein - Klein bottle demo. |
|
|
Vibes - Vibration movie: Vibrating L-shaped membrane. |
|
|
Xpsound - Visualizing sound: Demonstrate MATLAB 's sound capability. |
|
|
Imagederno - Demonstrate MATLAB 's image capability. |
|
|
Penny - Several views of the penny data. |
|
|
Earthmap - View Earth's topography. |
|
|
Xfourier - Graphic demo of Fourier series expansion. |
|
|
Colormenu - Select color map. |
|
|
Cplxdemo - Maps of functions of a complex variable. |
|
|
MATLAB/Language. |
|
|
Xplang - Introduction to the MATLAB language. |
|
|
Hndlgraf - Demonstrate Handle Graphics for line plots. |
|
|
grafSd - Demonstrate Handle Graphics for surface plots. |
|
|
Hndlaxis - Demonstrate Handle Graphics for axes. |
|
|
MATLAB/Differential equations. |
|
|
Odedemo - Demo for the MATLAB Differential Equation solvers. |
|
|
odeexamples - Browse the MATLAB ODE/DAE/BVP/PDE examples. |
|
|
MATLAB/ODEs |
|
|
Ballode - Demo of a bouncing ball. |
|
|
Brussode - Stiff problem modelling a chemical reaction (Brusselator). |
|
|
burgersode - Burger's equation solved using a moving mesh technique. |
|
|
femlode - Stiff problem with a time-dependent mass matrix. |
|
|
fem2ode - Stiff problem with a constant mass matrix. |
|
|
hblode - Stiff problem 1 of Hindmarsh and Byrne. |
|
|
Orbitode - Restricted three body problem. |
|
|
|
|
|
Rigidode - Euler equations of a rigid body without external forces. |
|
|
.Vdpode - Parameterizable van der Pol equation (stiff for large mu). |
|
|
MATLAB/DAEs |
|
|
hbldae - Stiff DAE from a conservation law. |
|
|
ampldae - Stiff OAE from an electrical circuit. |
|
|
MATLAB/BVPs |
|
|
Twobvp - BVP that has exactly two solutions. |
|
|
mat4bvp - Find the fourth eigenvalue of the Mathieu's equation. |
|
|
Shockbvp - The solution has a shock layer near x = 0. |
|
|
MATLAB/PDEs |
|
|
pdexl - Example 1 for PDEPE |
|
|
pdex2 - Example 2 for PDEPE |
|
|
pdex3 - Example 3 for POEPE |
|
|
pdex4 - Example 4 for PDEPE |
|
|
pdexS - Example 5 for PDEPE |
|
|
Extras/Gallery. |
|
|
Knot - Tube surrounding a three-dimensional knot. |
|
|
Quivdemo - Demonstrate the quiver function. |
|
|
kleinl - Construct a Klein bottle. |
|
|
Cruller - Construct cruller. |
|
|
tori4 - Hoops: Construct four linked tori. |
|
|
spharm2 - Construct spherical surface harmonic. |
|
|
Modes - Plot 12 modes of the L-shaped membrane. |
|
|
Logo - Display the MATLAB L-shaped membrane logo. |
|
|
Extras/Games. |
|
|
Fifteen - Sliding puzzle. |
|
|
Xpbombs - Minesweeper game. |
|
|
Life - Conway's Game of Life. |
|
|
Soma - Soma cube. |
|
|
Extras/Mi seel laneous . |
|
|
Truss - Animation of a bending bridge truss. |
|
|
Travel . - Traveling salesman problem. |
|
|
Spinner - Colorful lines spinning through space. |
|
|
Xpquad - Superquadrics plotting demonstration. |
|
|
Codec - Alphabet transposition coder/decoder. |
|
|
Xphide - Visual perception of objects in motion. |
|
|
Makevase - Generate and plot a surface of revolution. |
|
|
Wrldtrv - Great circle flight routes around the globe. |
|
|
Logospin - Movie of The MathWorks' logo spinning. |
|
|
Crulspin - Spinning cruller movie. |
|
|
Quatdemo - Quaternion rotation. |
|
|
Chaingui - Matrix chain multiplication optimization. |
|
|
General Demo/Helper functions. |
|
|
Cmdlnwin - Demo gateway routine for playing command line demos. |
|
|
Cmdlnbgn - Set up for command line demos. |
|
|
Cmdlnend - Clean up after command line demos. |
|
|
Finddemo - Find demos available for individual toolboxes. |
|
|
Helpfun - Utility function for displaying help text conveniently. |
|
|
Pltmat - Display a matrix in a figure window. |
|
|
MATLAB/Helper functions. |
|
|
Bucky - The graph of the Buckminster Fuller geodesic dome. |
|
|
Peaks - A sample function of two variables. |
|
|
|
|
Membrane - Generate MathWorks' logo.
See also SIMDEMOS
demos Is both a directory and a function.
DEMOS Demo list for the CDMA Reference Blockset.
Мы настоятельно рекомендуем пользователям системы MATLAB просмотреть с десяток примеров из интересующих их областей. Это займет от силы полчаса или даже меньше, но зато позволит оценить поистине неисчерпаемые возможности системы при решении сложных математических и физических задач, а также превосходные средства графической визуализации решений.
Пример — тест на быстродействие компьютера
Большинство пользователей, включая автора данной книги, очень ревниво относится к вычислительной мощности своего компьютера. Поэтому в качестве первого демонстрационного примера возьмем тест на сравнительную оценку скорости работы — bench . Исполнив команду » bench можно наблюдать исполнение комплексного теста по оценке быстродействия компьютера при работе с MATLAB. Его итоги представляются в виде столбцовой диаграммы и таблицы, которые показаны на рис. 4.1.
Рис. 4.1 . Результаты тестирования компьютера на быстродеиствие
Увы, в тесте системы MATLAB 6.0 компьютер автора занял последнее место, хотя в тесте системы MATLAB 5.3.1 он занимал достаточно почетное место в середине списка. Однако это вовсе не говорит о снижении производительности данного конкретного компьютера в новой реализации MATLAB. На самом деле производительность даже немного возросла. Просто в новом примере изрядно морально постаревший за год компьютер автора сравнивается с более новыми компьютерами. Кстати, в этом тесте ПК автора переместился на куда более почетное шестое место сверху после замены процессора на Pentium III 600 и установки видеокарты с видеопамятью 32 Мбайта и поддержкой OpenGL.
Приведенные данные говорят о том, что вычислительная мощность современного персонального компьютера (теперь у автора компьютер с процессором Pentium III 600 МГц со 100-мегагерцовой шиной под управлением Windows 98) с системой MATLAB уже приближается к таковой для суперкомпьютеров недавнего прошлого. Новые суперкомпьютеры, разумеется, куда мощнее компьютера с процессором Pentium III и даже Pentium IV, но и для них MATLAB — одна из основных систем для выполнения математических расчетов.
Что больше — e ^ pi или pi ^ e?
Рассмотрим еще один простой пример, дающий ответ на сакраментальный вопрос о том, какое значение больше — e^pi или pi^e? Для запуска этого примера надо исполнить команду » e2pi и наблюдать красочное шоу — графики степенных функций х^у и у^х с построением на них линий заданных функций и оценкой их значений. Заключительный слайд этого примера показан на рис. 4.2.
Рис. 4.2. Заключительный слайд примера e2pi
Этот пример — наглядная демонстрация перехода от узких понятий к более широким. Разумеется, вы могли бы вместо приятного обозрения слайд-шоу просто вычислить соответствующие значения:
» e=exp(1)
e =
2.7183
» e ^ pi
ans =
23.1407
» pi^e
ans =
22.4592
Так можно легко убедиться в том, что все же е ^ рi больше, чем pi^e. Но тогда это означало бы, что вы просто технарь или физик-экспериментатор, а не истинный математик. Впрочем, у каждого есть свои взгляды на применение математики. И чьи лучше — вопрос весьма спорный.
Анимация в пространстве — аттрактор Лоренца
Современная трехмерная графика — одна из причин большой популярности системы MATLAB. В этом разделе мы не будем рассматривать конкретные реализации тех или иных видов трехмерной графики. Вы можете самостоятельно вывести на экран дисплея текст (листинг) любого файла примеров трехмерной графики с помощью команды type. Ограничимся лишь тремя примерами визуализации сложных математических задач, когда используется оживление изображений — анимация.
Рис. 4.3. График, иллюстрирующий работу аттрактора Лоренца
На рис. 4.3 показан пример визуализации динамического процесса в так называемом аттракторе Лоренца (пример lorenz) — колебательной системе, создающей хаотические и довольно замысловатые колебания. Наиболее наглядна их визуализация с помощью трехмерного фазового портрета колебаний, который приведен на рис. 4.3. К сожалению, на рис. 4.3 показана лишь завершающая стадия — на экране можно реально видеть движение образующей точки во времени и убедиться в своеобразной хаотичности колебаний. Для запуска анимации надо нажать кнопку Start (Пуск) окна графики.
Встроенные фигуры
MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение сложной пространственной фигуры узла с функциональной окраской (рис. 4.4). При запуске этого примера нажатием кнопки Spinmap можно наблюдать изменение окраски, имитирующее как бы движение жидкости внутри замкнутой трубки, образующей данную фигуру.
Рис. 4.4. Построение фигуры-узла
Таким образом, можно сделать вывод о том, что для имитации и моделирования математических и физических задач система MATLAB предоставляет значительные графические возможности — от простейших графиков функций в декартовой системе координат до сложных анимационных графиков с динамической цветной функциональной окраской. Среди множества примеров такой графики всегда можно подобрать наиболее подходящие для решения конкретных задач пользователя, в какой бы области науки, техники или образования он ни работал.
В паутине нейронных сетей
Даже десятка таких книг, как эта, едва ли хватит для исчерпывающего описания системы MATLAB со всеми ее пакетами расширения. Пакетам расширения посвящена монография [39]. Многие из таких пакетов, например по нейронным сетям, сплайнам, обработке сигналов, проектированию систем управления и т. д., относятся к самым современным и актуальным направлениям науки и техники. Нередко создание таких пакетов для системы MATLAB возглавили основатели указанных научных направлений, и по каждому такому направлению опубликованы десятки научных монографий.
Примером одного из таких направлений является пакет Neural Networks (нейронные сети). Эти сети основаны на аналогии с ячейкой нашего мозга — нейроном. Важное свойство нейрона — возможность к самообучению и распознаванию различных образных представлений и сигналов. В разделе справочной системы Examples and Demos (Примеры и демо) имеется множество конкретных примеров применения нейронных сетей. На рис. 4.5 показан вид демонстрационной панели одного из этих примеров.
Рис. 4.5. Демонстрационная панель примера на применение нейронных сетей
Вы имеете возможность задавать различные параметры нейронной сети, позволяющей распознать букву Т в ее искаженном изображении. Демонстрационная панель построена в виде виртуальной лаборатории и позволяет мышью менять вид образцов (вводя закрашенные квадратики) и оценивать погрешность и вероятность распознавания образа.
Просмотр текстов примеров и m-файлов
Хотя наблюдение за тем, как MATLAB расправляется со сложными примерами и задачами, само по себе довольно поучительно, жаждущие применить систему на деле пользователи, безусловно, захотят узнать, а как же конкретно реализовано решение той или иной задачи? Для этого вам достаточно просмотреть соответствующий демонстрационный (или любой другой) m-файл. Это можно сделать с помощью любого текстового редактора, редактора и отладчика m-файлов, встроенного в систему, или с помощью команды
type Имя_М-файла
Ниже представлена часть файла демонстрационного примера e2pi:
» type e2pi
function slide=e2pi
% This is a slideshow file for use with playshow.m and makeshow.m
% To see it run. type 'piayshow e2pi',
% ' Copyright 1984-2000 The MathWorks. Inc.
% SRevision: 5.12 $
If nargout<1.
playshow e2pi
else
%========== Slide 1 ==========
slide(l).code={
'x=0:0.16:5;'.
'y=0:0.16:5;'.
'[xx,yy]=meshgrid(x,y);',
'zz=xx.*yy-yy.~xx:',
'h=surf(x.y,zz):'.
'set(h,"EdgeColor".[0.7 0.7 0.7]);',
'view(20.50);',
'colormap(hsv);.' };
slide(l).text={
' Press the "Start" button to see an example of visualization'
' in MATLAB applied to the question:',
' "which is greater, e A pi or pi^e?"'};
Используя команду help, можно получить справку по любой конкретной функции или команде. Ввиду того что текст примера имеет довольно большой объем, мы ограничились приведением только его фрагмента, относящегося к первому слайду. Остальные слайды просто опущены — на их месте стоит многоточие.
Справочная система MATLAB 6.0
Основной доступ к справочной информации обеспечивает меню Help (Помощь). Оно открывает доступ к справочным системам MATLAB и к информации о производителе MATLAB. Меню. Help показано на рис. 4.6.
Рис. 4.6. Окно MATLAB 6.0 с открытым меню Help
Основные возможности справочной системы обсуждаются в следующих разделах. Поэтому здесь мы остановимся только на команде About MATLAB. Она выводит окно, содержащее информацию о системе. На рис. 4.7 это окно показано на фоне рабочего окна системы.
Рис. 4.7. Окно со сведениями о системе
В окне About MATLAB можно найти информацию о применяемой версии системы (в нашем случае это 6.0.0.88) и о дате ее создания (22 сентября 2000 г.). Номер лицензии ввиду его конфиденциальности опущен — точнее, заменен нулем.
Запуск справочной системы
Рис. 4.8. Основное окно справочной подсистемы
Для запуска справочной системы следует использовать одноименную команду Help меню MATLAB. При этом запустится браузер справочной системы (браузер помощи) и откроется ее окно, показанное на рис. 4.8.
Рис. 4.9. Один из документов справочной системы
Бросается в глаза, что справочная система новой версии MATLAB 6.0 существенно переработана даже внешне. Теперь она имеет вполне современный вид электронного документа. В левом окне расположены вкладки разделов справочной системы и дерево ее разделов, в правом — информация о текущем установленном разделе. От использования стандартного Интернет-браузера для вывода справочной информации в новой версии MATLAB отказались. Видимо, мода на всеобщее применение Интернет-браузеров начинает потихоньку отступать.
Каждый небольшой раздел справочной системы представлен в правом окне в виде гипертекстовой ссылки, активизация которой приводит к переходу на соответствующую HTML-страницу. На рис. 4.9 показан один из документов справочной системы, содержащий начальные данные по запуску расширения Simulink.
С помощью линейки прокрутки можно перемещаться по перечню документов справочной системы и выбирать различные темы справки. На рис. 4.10 представлена справка по разделу, посвященному созданию моделей для пакета расширения Simulink.
Несмотря на удобства справочной системы, надо отметить, что ее содержимое во многом дублирует другие справочные подсистемы MATLAB, например справки, вызываемые из командной строки и имеющиеся в виде PDF-файлов. В целом справочная система MATLAB превратилась в монстра — в версии MATLAB 6.0 только для PDF-файлов этой системы пришлось в ее поставку включить отдельный CD-ROM.
Рис. 4.10. Пример просмотра документа, посвященного созданию библиотек расширения Simulink
Виды работы справочной системы
Как видно из рис. 4.8, окно разделов справочной системы имеет четыре вкладки, соответствующие четырем видам работы справочной системы:
Contents (Содержание)— поиск информации по контексту (или попросту по обычному оглавлению с разделами справки);
Index (Индекс)— поиск информации по индексному (алфавитному) каталогу;
Search (Поиск)— поиск всех тем справки, в которые включена заданная для поиска фраза или отдельное слово;
Favorites — доступ к специальным возможностям справочной системы.
Эти виды работы могут применяться в зависимости от конкретных задач пользователя.
Работа с индексным каталогом
Мы уже привели пару примеров использования справочной системы по контексту. Теперь рассмотрим работу с индексным каталогом.
Будучи крупной математической системой, MATLAB имеет многие сотни функций, свойства которых запомнить трудно даже пользователю-профессионалу. Да и нужно ли? Справочная система MATLAB позволят найти информацию по нужной функции в считанные секунды.
Если вы знаете имя нужной вам функции, то проще всего воспользоваться индексным каталогом. Откройте в левом окне справки вкладку Index и в поле поиска (сверху) укажите имя нужной вам функции или хотя бы его начальную часть. Нажмите клавишу Enter и через секунду-другую вы получите список всех объектов, включающих заданное имя.
Поиск по всей справке
Еще один полезный вид работы со справочной системой — поиск по заданному слову или фразе. Он происходит почти аналогично ранее приведенному случаю, но при открытой вкладке Search (Поиск) в левом окне справочной системы.
При выдаче данных о функциях используется справочник по ним (Function Reference) и обеспечивается автоматический поиск нужной функции.
Новые функции системы MATLAB 6.0
Разработчики систем компьютерной математики не очень охотно включают в их состав новые функции, поскольку это чревато несовместимостью новых версий систем с прежними версиями. Тем не менее на это приходится идти.
Какие новые функции включены в систему MATLAB 6.0? Для ответа на этот вопрос просто наберите в поле поиска вкладки Search (Поиск) слово Functions (Функции) в режиме Full Text (полнотекстового поиска). Вы сразу найдете раздел New Functions (Новые функции) в левом окне и, выделив его мышью, получите в правом окне перечень новых функций.
Новых функций в системе MATLAB 6.0 совсем немного — два десятка, и в основном это довольно специфические функции. Но эффективность и возможности старых функций значительно увеличены.
Поиск функций по имени
Если вас не интересует всякая «шелуха», которой сопровождается поиск по заданному слову или фразе (особенно полнотекстовый поиск Full Text), то вы можете перейти к поиску по имени функции — тип поиска Function Name. Это предусмотрено на вкладке Search (Поиск).
Нетрудно заметить, что на этот раз найден только главный раздел функции с именем sin. Остальные разделы отсеяны фильтрами справочной системы.
Просмотр документации в формате PDF
Описанные выше справочные средства рассчитаны на то, что пользователь уже знаком с системой и желает быстро получить справку по ее конкретным возможностям. Но для общего знакомства с системой они не очень подходят, поскольку много времени занимают «бесконечные» переходы от одного раздела справки к другому. Поэтому хотелось бы обратить внимание читателя на подробные электронные книги, обычно представленные в виде файлов формата PDF, для работы с которыми применяются такие программы, как Acrobat Reader или Adobe Acrobat. Первая позволяет только просматривать материалы книг, а вторая — еще и редактировать их.
Справочная система содержит раздел Favorites с подразделом MATLAB Printable Documentation (печатаемая документация MATLAB), предоставляющим доступ к электронной справочной документации, которая поставляется в виде файлов PDF или PostScript. На рис. 4.11 показано окно этого раздела справки с перечнем документов в формате PDF. Среди документов крупные (сотни страниц) руководства по функциям системы, языку ее программирования, графическим функциям и т. д.
Возможность просмотра документов в этом формате требует наличия программы Adobe Acrobat Reader (можно бесплатно скачать с web-узла фирмы Adobe www.ado-be.com) и файлов самих документов. Не все поставки системы MATLAB имеют эти средства. Полный объем документации по системе MATLAB 6.0 и пакетам прикладных программ уже превышает 600 Мбайт, что делает документацию труднообозримой.
Рис. 4.11. Окно раздела справки с доступом к документам в формате PDF
В качестве примера работы с электронными документами формата PDF рассмотрим просмотр книги-справочника, предназначенной для начального знакомства с системой MATLAB (Getting Started with MATLAB) (Начинаем работу с MATLAB). Его титульная страница показана на рис. 4.12. Заметим, что она появляется после загрузки программы Acrobat Reader (временное окно этой программы не показано).
Рис. 4.12. Начальная страница электронного справочного руководства по MATLAB
Нетрудно заметить, что страница электронного документа в формате PDF содержит древообразный перечень разделов в левой части и большое окно просмотра в правой части. С помощью левого окна можно явно указать раздел справочника, который необходимо просмотреть. Можно также перелистывать материал справочника с помощью линейки прокрутки, расположенной справа в окне просмотра. Таким образом, справочные материалы представлены в типовой форме электронных книг.
Рис. 4.13. Одна из страниц электронного справочника в окне просмотра программы Acrobat Reader
Acrobat Reader — сама по себе серьезная программа, и ее описание в задачи данной книги не входит. Однако надо отметить, что работа с программой интуитивно понятна и не вызывает особых трудностей даже у не очень опытного пользователя. На рис. 4.13 дано представление одной из страниц с некоторым увеличением и в полностью открытом окне просмотра. На ней показан пример построения трехмерного графика с иллюстрацией эффектов освещения построенной поверхности от внешнего источника света. Из рис. 4.13 видно, что качество представления текстов, да и рисунков не очень высокое, даже при увеличении. Тем не менее оно достаточно для просмотра рисунков в обычном масштабе.
Как и все другие виды справочной документации, электронные книги по MATLAB подготовлены на английском языке (и кое-что на японском).
Галерея примеров — MATLAB Demos
В меню Help имеется команда Demos, дающая доступ к галерее демонстрационных примеров применения системы MATLAB. При запуске этой команды появляется окно демонстрационных примеров MATLAB Demos, показанное на рис. 4.14.
Рис. 4.14. Окно демонстрационных примеров
Это же окно можно вызвать выполнением команды demo в режиме диалога.
В этом окне имеются три панели:
левая панель с перечнем разделов, по которым предлагаются примеры;
панель с описанием выбранного раздела примеров;
панель с перечнем примеров по выбранному разделу.
Выбрав раздел примеров (щелчком мыши), затем следует выбрать нужный пример. На рис. 4.14 показан выбор раздела Gallery и примера Hoops. После этого нажатием кнопки Run можно запустить m-файл с выбранным примером и наблюдать результат его работы (рис. 4.15).
Рис. 4.15. Результат выполнения примера Hoops
Этот пример демонстрирует построение сплетающихся в пространстве нескольких объемных обручей с функциональной цветной окраской. Кнопка Info окна открывает раздел справочной системы с описанием m-файла данного примера.
Демонстрационные примеры Simulink
Следующий пример, показанный на рис. 4.16, иллюстрирует доступ к примерам пакета системного моделирования Simulink — одного из самых мощных пакетов прикладных программ, расширяющих возможности системы MATLAB. Этот пакет создан для моделирования линейных и нелинейных динамических систем заданием их в виде системы функциональных блоков с автоматическим составлением и решением матричной системы дифференциальных уравнений состояния, описывающей работу созданной модели.
На рис. 4.17 приведен пример просмотра одного из простых примеров — моделирования динамической системы второго порядка, описываемой нелинейными дифференциальными уравнениями Ван-дер-Поля. Сверху показана блок-схема моделируемого объекта, а снизу — результат моделирования его работы. Для пуска моделирования в панели инструментов окна системы Simulink нажимается кнопка пуска с изображением треугольника.
Рис. 4.16. Доступ к примерам пакета Simulink
Окно MAT LAB Demos дает возможность ознакомиться со многими десятками самых серьезных примеров применения системы MATLAB и позволяет убедиться в высоком качестве визуализации их решений. При необходимости всегда можно ознакомиться с файлом любого примера и использовать его для решения схожих задач.
Рис. 4.17. Пример моделирования нелинейной динамической системы второго порядка средствами пакета моделирования Simulink
Копирование демонстрационных примеров
Вполне возможно, что вы захотите воспользоваться каким-либо примером для своих целей. Для этого можно использовать m-файл примера или перенести его текст в командное окно MATLAB, используя буфер обмена. Покажем, как это делается. В нижней части окна примера показано, каким образом осуществляется копирование примера: текст примера выделяется мышью и используется команда Сору (Копировать) меню Edit окна примера, в результате чего текст примера попадет в буфер обмена.
После этого надо вернуться в командное окно MATLAB и, используя команду Paste (Вставить) меню Edit, перенести текст примера из буфера в текущую строку ввода. Выполнив команду (как обычно, клавишей Enter), можно наблюдать исполнение примера, как показано на рис. 4.18.
Трудно сказать почему, но создатели MATLAB в последних версиях отказались от возможности копирования выделенного в примерах окна Demos текста программ с помощью контекстного меню правой клавиши мыши. Зато появилась возможность исполнения выделенных в справке (как на заданную функцию в командном режиме, так и в HTML-браузере справки) примеров с помощью команды Evaluate Selection в контекстном меню правой клавиши мыши в тексте справки.
Остается еще раз отметить, что обилие примеров в системе MATLAB облегчает знакомство с различными аспектами применения системы. Большинство примеров содержат решения отнюдь не тривиальных математических задач и прекрасно иллюстрируют обширные возможности системы. Поэтому работа с демонстрационными примерами — залог успешного освоения системы MATLAB.
Рис. 4.18. Исполнение скопированного примера из командного окна MATLAB
Что нового мы узнали?
В этом уроке мы научились:
Использовать команды справки.
Вызывать список демонстрационных примеров.
Исполнять примеры и копировать их.
Просматривать листинги m-файлов командой type.
Работать с различными разделами справочной системы.
Просматривать документацию MATLAB в формате PDF.
Работать с демонстрационными примерами системы MATLAB.
Запускать приложение Simulink.
Урок №5.
Пользовательский интерфейс MATLAB
Общая характеристика пользовательского интерфейса
Панель инструментов
Операции с буфером обмена
Браузеры рабочей области и файловой структуры
Запуск приложения Simulink
Вызов справки по системе MATLAB
Меню системы MATLAB
Работа с файлами
Настройка MATLAB и функция path
Обеспечение печати
Интерфейс редактора и отладчика т-файлов
Файлы сценариев и функций
Интерфейс графических окон
Общение MATLAB с операционной системой
Общая характеристика пользовательского интерфейса
Как видно из материалов предыдущих уроков, в новой версии MATLAB в полной мере сохранен командный интерактивный режим работы. Это старый фасад дворца MATLAB. Командный режим остается одним из наиболее удобных и проверенных методов работы с системой.
Имеются и типовые средства приложений Windows 95/98/Me/2000/NT4 — меню и панель инструментов. Но они по-прежнему выглядят намного скромнее, чем у большинства современных приложений Windows. Видимо, так и должно быть — чем серьезнее математическая система, тем меньше она нуждается в использовании всевозможных кнопок на панели инструментов и тем скромнее может быть ее главное меню.
Рис. 5.1. Окно системы MATLAB
И, тем не менее, пользовательский интерфейс в системе MATLAB 6.0 кардинально переработан. Это видно из рис. 5.1, на котором показано основное полностью открытое окно системы MATLAB 6.0 так, как оно предстает перед пользователем при запуске.
Главными отличиями от весьма скромного интерфейса прежних версий системы MATLAB у новой версии стали:
позиция Web меню, открывающая доступ к Интернет ресурсам фирмы Math-Works Inc.;
меню используемых разделов текущей папки файловой системы Current Directory в конце панели инструментов справа;
окно с вкладками Launch Path (Доступ к частям системы) и Workspace (Рабочая область) в левой части основного окна (сверху);
окно с вкладками Command History (Обзор ранее исполненных команд) и Current Directory (Текущая папка) в левой части основного окна (сверху)
применение цветового выделения выражений в командной строке, что упрощает оперативный контроль их синтаксиса по мере ввода.
Эти отличия указывают на то, что разработчики новой версии уделили больше внимания оперативному контролю за состоянием системы, который ранее (в прежних версиях) был как бы за кадром.
Упрощенный интерфейс
Сделав решительный шаг в обновлении интерфейса, разработчики MATLAB 6.0, похоже, испугались недовольства старых пользователей, уже привыкших работать со скромным и отчасти даже ущербным интерфейсом прежних версий MATLAB. А потому они ввели возможности изменения интерфейса системы, в том числе представления его в добром старом виде. Все эти возможности реализуются командами в позиции View (Вид) меню. На рис. 5.1 вкладка View показана в открытом состоянии.
Теперь пользователь может настраивать вид интерфейса и по-разному располагать его окна. В частности, исполнив команду View > Desktop Layout > Command Window Only (Только командное окно) можно получить «старый» вид интерфейса — рис. 5.2. Теперь о новациях в интерфейсе напоминают лишь позиция меню Web и доступ из панели инструментов к папкам файловой системы. Кстати, окно доступа к папкам файловой системы также показано на рис. 5.2.
Нередко MATLAB отказывается исполнять некоторые команды из-за того, что их m-файлов нет в текущей папке. Поэтому обеспечение быстрого доступа к файловой системе из пользовательского интерфейса можно приветствовать.
Для редактирования и отладки m-файлов MATLAB имеет встроенный современный редактор, интерфейс которого выполнен в лучших традициях Windpws-приложений. В том же стиле выполнены окно просмотра ресурсов памяти, окно просмотра путей файловой системы, справочник по возможностям системы и демонстрационные программы. Редактор графики и окно графики со средствами редактирования рисунков уже были описаны.
Рис. 5.2. Упрощенный интерфейс системы MATLAB 6.0
Работа с панелью инструментов
Панель инструментов (рис. 5.3) дает наиболее простой и удобный (особенно для начинающих пользователей) способ работы с системой MATLAB. При этом основные команды вводятся указанием курсором мыши на нужную кнопку с нажатием левой клавиши мыши. Кнопки имеют изображение, явно подсказывающее их назначение.
Рис. 5.3. Часть окна системы MATLAB с меню и панелью инструментов
Прежде всего перечислим назначение всех кнопок панели инструментов:
New M-file (Новый m-файл) — выводит пустое окно редактора m-файлов;
Open file (Открыть файл) — открывает окно для загрузки m-файла;
Cut (Вырезать)— вырезает выделенный фрагмент и помещает его в буфер;
Сору (Копировать)— копирует выделенный фрагмент в буфер;
Paste (Вставить)— переносит фрагмент из буфера в текущую строку ВВОДА
Undo (Отменить)— отменяет предшествующую операцию;
Redo (Повторить) — восстанавливает последнюю отмененную операцию;
Simulink — открывает окно браузера библиотек Simulink;
Help (Помощь)— открывает окно справки.
Набор кнопок панели инструментов обеспечивает выполнение наиболее часто необходимых команд и вполне достаточен для повседневной работы с системой.
назначении кнопок говорят и всплывающие подсказки, появляющиеся, когда курсор мыши устанавливается на соответствующую кнопку.
ни имеют вид желтого прямоугольника с текстом короткой справки — см. пример такой подсказки на рис. 2.12 у кнопки Help панели инструментов. Любопытно отметить, что доступ к браузерам рабочей области и файловой системы из панели инструментов убран.
Вызов окна открытия нового файла
Кнопка New M-file открывает окно редактора/отладчика m-файлов. Это окно показано на рис. 5.4. Работу с этим средством мы обсудим позже.
Рис. 5.4. Пустое окно редактора/отладчика m-файлов
По умолчанию файлу дается имя Untitled (безымянный), которое впоследствии (при записи файла) можно изменить на другое, отражающее тему задачи. Это имя отображается в титульной строке окна редактирования m-файла, которое размещается в окне редактора/отладчика и видно на рис. 5.4. В редакторе/отладчике можно редактировать несколько m-файлов, и каждый из них будет находиться в своем окне редактирования, хотя активным может быть только одно окно, расположенное поверх других окон.
Примечание
Обратите внимание, что панель инструментов является контекстно-зависимой. Для редактора/отладчика m-файлов она имеет несколько иной набор инструментов, чем для окна командного режима работы (см. рис. 5.1). Позже мы уточним эти отличия.
Вызов окна загрузки имеющегося файла
Кнопка Open file (Открыть файл) служит для загрузки в редактор/отладчик ранее созданных m-файлов, например входящих в пакет расширения (Toolbox) системы или разработанных пользователем. Она открывает окно, которое является типичным элементом интерфейса Windows-приложений и показано на рис. 5.5 внутри окна редактора/отладчика m-файлов.
Рис. 5.5. Окно загрузки файла в окне редактора/отладчика
В окне загрузки файлов с помощью раскрывающегося списка Папка и вертикальной полосы прокрутки можно «пройтись» по всем дискам, папкам и файлам. Чтобы выбрать нужный файл для загрузки, его требуется выделить мышью. Выбор завершается двойным щелчком на имени файла, нажатием клавиши Enter или щелчком на кнопке Открыть. Любое из этих действий приводит к загрузке документа в текущее окно системы. Кнопка Отмена или клавиша Esc позволяет отказаться от загрузки.
Примечание
Пусть читателя не волнуют внезапно появившиеся русскоязычные надписи на элемен-тах интерфейса окна загрузки файлов. Они говорят лишь о том, что используется окно стандартной русифицированной операционной системы Windows 95/98/Ме, которая обычно устанавливается у наших пользователей.
Для вызова одного из ранее использовавшихся документов достаточно щелкнуть мышью на его имени в списке, находящемся над командой Exit (Выход) в меню File. После загрузки файла с документом его текст появляется в текущем окне — на рис. 5.5 показан текст выбранного файла graf2d.rn (демонстрация возможностей двумерной графики). Его можно начинать редактировать или запускать на исполнение.
Операции с буфером обмена
Кнопки Cut (Вырезать), Сору (Копировать) и Paste (Вставить) реализуют наиболее характерные команды работы с буфером обмена (Clipboard). Первые две операции относятся к выделенным фрагментам сессии или текста m-файлов (если они выполняются в окне редактора/отладчика). Для выделения объектов можно использовать мышь, перемещая курсор по тексту при нажатой левой кнопке, или клавиши со стрелками в комбинации с клавишей Shift.
На рис. 5.6 показан пример выделения содержимого матрицы М в окне документа MATLAB. Эта матрица формируется функцией magiс (n) и называется магической, поскольку сумма элементов любого столбца, любой строки и даже любой диагонали равна одному и тому же числу — 34 для матрицы при n=4.
Рис. 5.6. Окно документа с выделенным содержимым матрицы М
Команда Cut (Вырезать) осуществляет вырезание выделенного фрагмента и размещение его в буфере. При этом вырезанный фрагмент удаляется из текста документа. Команда Сору (Копировать) просто копирует выделенный фрагмент в буфер, сохраняя его в тексте. Команда Paste (Вставить) вызывает объект из буфера (сохраняя объект в буфере) и помещает копию объекта на место в документе, указанное текстовым курсором. Эти операции реализуются как соответствующими кнопками, так и командами меню Edit (Редактировать). В MATLAB можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Например, установив курсор мыши на выделенный фрагмент матрицы М и нажав правую кнопку, можно увидеть меню, показанное на рис. 5.6. В нем, кстати, дублируется позиция с командой Сору (Копировать). Есть и ряд других доступных в данный момент команд. Обратите внимание, что в момент подготовки магической матрицы М ее имя появилось в окне браузера рабочей области — в правой части экрана. При этом матрица представляется изображением таблицы.
Содержимое буфера можно перенести в строку ввода, в окно редактора-отладчика m-файлов или даже в другое приложение. Допустим, мы хотим создать матрицу M1 с содержимым, которое размещено в буфере. Для этого достаточно набрать М1=[ и, нажав правую клавишу мыши, выбрать из появившегося меню команду Paste (Вставить). Этот момент фиксирует рис. 5.7.
Рис. 5.7. Подготовка к вставке данных матрицы из буфера
Исполнив команду Paste, можно увидеть, что данные хранящейся в буфере матрицы появятся после открывающей квадратной скобки. Для создания матрицы Ml остается ввести закрывающую квадратную скобку ] и нажать клавишу Enter. На рис. 5.8 показано, как создается матрица Ml, по содержимому аналогичная матрице М.
Рис. 5.8. Пример создания матрицы M1 с содержимым, взятым из буфера
Разумеется, этот пример является чисто учебным. Не обращаясь к помощи буфера, можно было бы просто записать М1=М. Или М2=М — именно так на рис. 5.8 задана матрица М2. Однако зачастую операции с буфером весьма полезны. Так, все примеры в тексте этой книги получены переносом выделенных фрагментов соответствующей сессии в окно текстового редактора Microsoft Word. Возможен и обратный перенос - записанных в документах редактора Microsoft Word примеров в командную строку MATLAB для исполнения примеров.
Примечание
Обратите внимание на команду Select All в контекстном меню. Эта команда позволяет выделить весь текст текущей сессии-А команда Clear Session очищает окно от содержимого данной сессии.
Отмена результата предшествующей операции
Часто, выполнив какую-то операцию, мы отмечаем, что она оказалась ошибочной. При работе в MATLAB такой ситуации пугаться не стоит, — нажатие кнопки Undo (Отменить) панели инструментов приведет к отмене последнего действия, выполненного в текущей строке. Операции в предыдущих строках документа этой командой не отменяются. Если оказалось, что вы зря произвели отмену последней операции, то ее легко восстановить, введя с панели инструментов операцию Redo (Восстановить).
Запуск приложения Simulink
Кнопка Simulink панели инструментов (или команда simulink из строки ввода) запускает одно из самых мощных приложений системы MATLAB — программу моделирования систем, построенных из типовых блоков. Эта система (пакет инструментов (toolbox) Simulink) в данной книге подробно не описывается (см. и описание предшествующей версии в), так что пока отметим лишь, что щелчок на указанной кнопке выводит окно библиотеки типов блоков (рис. 5.9 слева).
В MATLAB 6.0 применена новая версия Simulink 4 с библиотекой блоков Block Library. Эта библиотека содержит существенно расширенный набор компонентов — блоков, объединенных в тематические группы. Чтобы упростить поиск и выбор блоков, окно библиотеки организовано в виде браузера библиотеки, очень напоминающего Проводник (Windows Explorer) операционной системы Windows 95/98/ Me/2000/NT4. Окно браузера показано на рис. 5.9 слева. В нем видно дерево моделей с раскрывающимися ветвями-блоками. Изображение компонентов выделенного блока дерева показывается в поле просмотра в правой части окна браузера.
Для загрузки модели какой либо системы или устройства (в том числе из числа демонстрационных примеров) достаточно активизировать кнопку Ореn.(Открыть), имеющую вид открывающейся папки. При этом появится окно редактора модели программы Simulink, которое показано на рис. 5.9 справа. Это стандартное окно загрузки файлов, принятое во всех приложениях операционной системы Windows 95/98/Ме/2000. В нем можно выбрать и загрузить файл нужной модели или демонстрационного примера.
Рис. 5.9. Окно браузера библиотечных блоков программы Simulink
Рис. 5.10 показывает загруженную в Simulink модель аттрактора Лоренца — демонстрационный файл lorenz. Здесь видно окно с загруженной моделью (она находится слева) и окна встроенного виртуального осциллографа — одного из многих виртуальных регистрирующих устройств, которые имеются в составе Simulink.
Рис. 5.10. Пример работы программы Simulink
Кнопка с треугольником в панели инструментов Simulink запускает процесс моделирования. О его результатах можно судить по показаниям регистрирующих приборов — в частности, упомянутого уже осциллографа. В его окнах появляются сложные и довольно хаотические колебания, характерные для аттрактора Лоренца. Параметры каждого блока можно уточнить или задать с помощью окна параметров блока. На рис. 5.10 снизу справа показано такое окно для блока Beta*z — множительного устройства. Большинство установок параметров блоков довольно очевидны — даже несмотря на то, что их параметры указаны на английском языке.
Кнопка Create a new model (Создать новую модель) в окне библиотек Simulink открывает чистое окно редактора моделей. Любой блок можно перетащить мышью в это окно. Введенные таким образом блоки соединяются друг с другом линиями, для чего используется мышь, с помощью которой указываются точки соединений и осуществляется протягивание соединительных линий.
Таким образом, легко создать новую модель системы. Однако описание подготовки новых моделей для Simulink в тематику данной книги не входит, поскольку книга посвящена лишь описанию базовой системы MATLAB. Заинтересованные читатели могут обратиться к изданиям. Тем не менее приведенные сведения позволят заинтересованному читателю начать работу с Simulink.
Вызов справки MATLAB
Последняя кнопка панели инструментов Help (Помощь) открывает окно с перечнем разделов справочной системы. Это окно было показано на рис. 4.8. В уроке 4 мы подробно ознакомились с работой со справочной системой, так что на этом можно закончить описание средств системы MATLAB, доступ к которым обеспечивает панель инструментов.
Средства контроля рабочей области и файловой системы
Векторы и матрицы могут занимать большой объем памяти. Конечно, речь не идет о векторах или матрицах, содержащих несколько элементов или даже несколько десятков элементов. Хотя и в этом случае оценка их размеров полезна при разработке алгоритмов матричных вычислений и оценке их эффективности в части использования памяти.
Как отмечалось, в левой части окна системы MATLAB 6.0 имеется окно специального браузера рабочей области — Workspace Browser. Он служит для просмотра ресурсов рабочей области памяти. Браузер дает наглядную визуализацию содержимого рабочей области. Окно браузера рабочей области выполняет и другие важные функции — позволяет просматривать существующие в памяти объекты, редактировать их содержимое и удалять объекты из памяти. Для вывода содержимого объекта достаточно выделить его имя с помощью мыши и щелкнуть на кнопке
Open (Открыть). Объект можно открыть и двойным щелчком на его имени в списке. Откроется окно редактирования массива Array Editor, показанное на рис. 5.11 применительно к матрице М2.
Рис. 5.11. Пример просмотра содержимого матрицы
Окно редактирования матрицы дает удобный доступ для редактирования любого элемента матрицы по правилам, принятым при работе с электронными таблицами. [ В уроке 23 показано, как использовать Microsoft Excel для ввода матриц. — Примеч. ред. ] . Основное из них — быстрый доступ к любому элементу матрицы. Можно также менять тип значений элементов, выбирая его из списка, предоставляемого меню Numeric format (Формат чисел). В окне также выводятся данные о числе строк и столбцов матрицы.
Команды просмотра рабочей области who и whos
Следует отметить, что просмотр рабочей области возможен и в командном режиме, без обращения к браузеру Workspace Browser. Команда who выводит список определенных переменных, а команда whos — список неременных с указанием их размера и объема занимаемой памяти. Следующие примеры иллюстрируют действие этих команд:
» х=1.234;
» V=[1 2 3 4 5]:
» M=magic(4);
» who
Your variables are:
M V x
|
» whos |
|
|
|
|
|
Name |
Size |
Bytes |
Class |
|
|
M |
4x4 |
128 |
double array |
|
|
V |
1x5 |
40 |
double array |
|
|
X |
1x1 |
8 |
double array |
|
Если вы хотите просмотреть данные одной переменной, например М, следует использовать команду whos M. Естественно, просмотр рабочей области с помощью браузера рабочей области (Workspace Browser) более удобен и нагляден.
Браузер файловой структуры
Для просмотра файловой структуры MATLAB служит специальный браузер файловой системы (Path Browser), который запускается при обычной загрузке системы. Если был установлен упрощенный интерфейс, то для запуска браузера файловой системы используется окно Current Directory (Текущая папка). На рис. 5.12 в левой части показано окно этого браузера.
Нетрудно заметить, что браузер файловой системы построен по типу общеизвестного Проводника (Explorer) операционных систем Windows 95/98/Me/2000/NT4. Окно дает возможность просмотра файловой системы ПК и выбора любого файла. Для примера на рис. 5.12 показан выбор m-файла функции синуса.
Исполнив команду Open (Открыть) из контекстного меню правой клавиши мыши или дважды щелкнув по выделенной строке с именем файла, можно ввести этот файл в окно редактора/отладчика m-файлов. При этом редактор запустится автоматически и его окно с готовым для редактирования выбранным файлом появится на экране рис. 5.12.
Рис. 5.12. Пример окна браузера Path Browser
Примечание
Обратите внимание на то, что m-файл функции синуса содержит только комментарии по этой функции, которые используются справочной системой. Самого определения функции синуса на языке программирования системы MATLAB нет. Это связано с тем, что данная функция является встроенной в ядро системы. Так что модифицировать такие функции попросту нельзя. Ничто, однако, не мешает вам создать свой метод (и алгоритм) вычисления встроенных функций и оформить их в виде m-файлов, дав им свои имена — например, mysin.m.
Таким образом, браузер просмотра файловой структуры позволяет детально ознакомиться с файловой системой MATLAB и вывести любой из m-файлов или файлов демонстрационных примеров для просмотра, редактирования и модификации.
Работа с меню
Открытая позиция строки меню содержит различные операции и команды. Выделенная команда или операция исполняется при нажатии клавиши Enter (Ввод). Выполнение команды можно также осуществить щелчком мыши или нажатием на клавиатуре клавиши, соответствующей выделенному символу в названии команды.
Между командами и операциями нет особых отличий, и в литературе по информатике их часто путают. Мы будем считать командой действие, которое исполняется немедленно. А операцией — действие, которое требует определенной подготовки, например открытие окна для установки определенных параметров.
Параметр (option)— это значение определенной величины, действующее во время текущей сессии. Параметрами обычно являются указания на применяемые наборы шрифтов, размеры окна, цвет фона и т. д.
Меню системы
Перейдем к описанию основного меню системы MATLAB 6.0. Это меню (см. рис. 5.1 сверху) выглядит довольно скромно и содержит всего шесть пунктов:
File — работа с файлами;
Edit — редактирование сессии;
View — вывод и скрытие панели инструментов;
Web — доступ к Интернет-ресурсам;
Windows — установка Windows-свойств окна;
Help — доступ к справочным подсистемам.
По сравнению с версией 5.3.1 добавлена единственная позиция Web, дающая доступ к Интернет-ресурсам, описанный в уроке 1.
Подменю File
Подменю File содержит ряд операций и команд для работы с файлами. Оно показано на рис. 5.13. Число операций и команд значительно сокращено по сравнению с тем же меню у предшествующей версии системы MATLAB.
Теперь меню File содержит следующие операции:
New - открывает подменю с позициями:
M-file — открытие окна редактора/отладчика m-файлов;
Figure — открытие пустого окна графики;
Model — открытие пустого окна для создания Simulink-модели;
GUI — открытие окна разработки элементов графического интерфейса пользователя.
Open — открывает окно загрузки файла.
Close Command Windows — закрывает окно командного режима работы (оно при этом исчезает с экрана).
Import data — открывает окно импорта файлов данных.
Save Workspace As... — открывает окно записи рабочей области в виде файла с заданным именем.
Set Path — открывает окно установки путей доступа файловой системы.
Preferences... — открывает окно настройки элементов интерфейса.
Print... — открывает окно печати всего текущего документа.
Print Selection... — открывает окно печати выделенной части документа.
Exit — завершает работу с системой.
Рис. 5.13. Меню файловых операций File
Открытие окон для подготовки новых файлов
Команда New, как отмечено, открывает окна для подготовки новых файлов. Для трех типов файлов (m-файлы, графические файлы и файлы Simulink-моделей) окна их редакторов уже описывались. Новой является позиция GUI подменю File. Она открывает окно редактора элементов пользовательского интерфейса, показанное на рис. 5.14.
Рис. 5.14. Окно редактора элементов GUI
К подробному описанию этого окна мы еще вернемся. А пока отметим, что работа с редактором довольно очевидна.
Загрузка и сохранение файлов
Команды Open... (Открыть) и Import data... (Импортировать данные) выводят стандартные окна (см. рис. 5.5) для загрузки m-файлов и файлов данных. Команда Save Workspace As... (Сохраните рабочую область как...) открывает стандартное окно записи файлов с расширением .mat. Они хранят определения переменных, массивов, функций пользователя и иных объектов, созданных в ходе текущей сессии работы. Эти команды в силу общеизвестности в более подробных комментариях не нуждаются.
Установка путей доступа файловой системы
Команда Set Path... (Установить путь) открывает окно редактора путей доступа файловой системы. Это окно показано на рис. 5.15.
Окно дает список папок с файлами системы MATLAB. Имеется возможность переноса папок вверх или вниз по списку, уничтожения их и переименования. По умолчанию задается правильная установка путей доступа, так что данными возможностями стоит пользоваться только в особых обстоятельствах, например при случайном переносе папок в другое место или при их переименовании.
Рис. 5.15. Окно редактора путей доступа файловой системы
Настройка элементов интерфейса
Окно настройки элементов интерфейса представлено на рис. 5.16.
Рис. 5.16. Окно настройки элементов интерфейса
Интерфейс MATLAB 6.0 стал настолько удобным и даже изысканным, что мало вероятно, что кому-либо захочется менять его в мере, большей, чем это предусмотрено командами подменю View [ Это может потребоваться даже для настройки под особенности операционной системы. Например, для уточнения расположения вашей программы чтения PDF-файлов, вам, возможно, придется вручную удалить апострофы из пути к ее исполняемому файлу. — Примеч. ред. ]. Однако такая возможность есть — команда Preferences... (Предпочтения) выводит окно детальной настройки элементов интерфейса (рис. 5.16). В левой части этого окна имеется древообразный список элементов интерфейса системы, а в правой части—поле задания параметров для выбранного типа элементов. Поскольку изменение параметров производится обычно очень редко, мы не будем детально рассматривать это окно. Заинтересованный читатель наверняка разберется с нужными ему параметрами самостоятельно.
Обеспечение печати — команды Print и Print Selection
В MATLAB для печати используются стандартные средства Windows. Меню File содержит две команды печати. Первая из них — Print — служит для вывода окна печати, показанного на рис. 5.17 применительно к широко распространенному струйному принтеру Epson Stylus COLOR 600. В этом окне также имеется возможность вывода окна со свойствами печати. В нем можно также определить, с какой страницы начинается печать, и задать число страниц при печати, если печатаемый материал не укладывается в одну страницу.
Рис. 5.17. Окно печати
Окно установки свойств печати для данного принтера показано на рис. 5.18. Оно имеет три вкладки для установки соответственно параметров печати, параметров бумаги и использования утилит профилактики принтера. Многие, даже дешевые струйные принтеры обеспечивают печать в цвете, тогда как такую возможность имеют только дорогие лазерные принтеры.
Рис. 5.18. Окно свойств печати
Следует отметить, что окна печати — типичные для операционной системы Windows 95/98/Me/2000/NT4. Их вид зависит от примененного принтера, точнее от установленного для него драйвера. Установки окон довольно очевидны, поэтому более подробно они не описываются. Обратите внимание на полную русификацию окна печати — это связано с тем, что использовалась локализованная для России версия операционной системы Windows 98. В то же время окно свойств принтера русифицировано лишь частично.
Вторая операция — Print Selection — становится доступной, только если в сессии выделен какой-либо фрагмент. На печать при этом выводится только выделенный фрагмент.
Вообще говоря, MATLAB имеет специальные команды для печати, которые вводятся в командной строке, однако возможности Windows настолько удобны, что командными средствами MATLAB для печати приходится пользоваться редко.
Меню Edit — средства редактирования документов
Меню Edit (рис.5.19) содержит операции и команды редактирования, типичные для большинства приложений Windows:
Undo (Отменить) — отмена результата предшествующей операции;
Redo (Повторить) — отмена действия последней операции Undo;
Cut (Вырезать) — вырезание выделенного фрагмента и перенос его в буфер;
Сору (Копировать) — копирование выделенного фрагмента в буфер;
О Paste (Вставить) — вставка фрагмента из буфера в текущую позицию курсора;
Clear (Очистить) — операция очистки выделенной области;
Select All (Выделить) — выделение всей сессии;
Delete (Стереть) — уничтожение выделенного объекта;
Clear Command Windows (Очистить командное окно) — очистка текста сессии (с сохранением созданных объектов);
Clear Command History (Очистить окно истории команд) — очистка окна истории; О Clear Workspace — очистка окна браузера рабочей области.
Рис. 5.19. Меню Edit
Назначение указанных команд и операций уже обсуждалось. Отметим лишь, что команда Clear Command Window очищает окно командного режима работы и помещает курсор в верхний левый угол окна. Однако все определения, сделанные в течение стертых таким образом сессий, сохраняются в памяти компьютера. Для очистки экрана используется также команда clc, вводимая в командном режиме.
Меню View и Window
В MATLAB 6.0, что уже описывалось, набор команд меню View существенно расширен, и теперь с помощью этого меню можно существенно менять вид пользовательского интерфейса.
Меню Window активно только в случае, если в систему загружены файлы. При этом оно имеет единственную команду Close All (закрыть все окна) и открывающийся список всех загруженных файлов. Он позволяет выбрать окно указанного пользователем файла и сделать его открытым.
Основы редактирования и отладки m-файлов
Интерфейс редактора/отладчика m-файлов
Для подготовки, редактирования и отладки m-файлов служит специальный многооконный редактор. Он выполнен как типичное приложение Windows. Редактор можно вызвать командой edit из командной строки или командой New > M-file из меню File. После этого в окне редактора можно создавать свой файл, пользоваться средствами его отладки и запуска. Перед запуском файла его необходимо записать на диск, используя команду Filе > Save as в меню редактора.
Рис. 5.20. Редактор/отладчик файлов при записи файла на диск
На рис. 5.20 показано окно редактора/отладчика с текстом простого файла в окне редактирования и отладки.
Подготовленный текст файла (это простейшая и наша первая программа на языке программирования MATLAB) надо записать на диск. Для этого используется команда Save As, окно которой видно на рис. 5.20 внутри окна системы редактора/ отладчика. Работа с окном команды Save As уже описывалась.
После записи файла на диск можно заметить, что команда Run в меню Tools (Инструменты) редактора становится активной (до записи файла на диск она пассивна) и позволяет произвести запуск файла. Запустив команду Run, можно наблюдать исполнение m-файла; в нашем случае — это построение рисунка в графическом окне и вывод надписи о делении на ноль в ходе вычисления функции sin(x)/x в командном окне системы (рис. 5.21).
На первый взгляд может показаться, что редактор/отладчик — просто лишнее звено в цепочке «пользователь — MATLAB». И в самом деле, текст файла можно было бы ввести в окно системы и получить тот же результат. Однако на деле редактор/отладчик выполняет важную роль. Он позволяет создать m-файл (программу) без той многочисленной «шелухи», которая сопровождает работу в командном режиме. Далее мы убедимся, что текст такого файла подвергается тщательной синтаксической проверке, в ходе которой выявляются и отсеиваются многие ошибки пользователя. Таким образом, редактор обеспечивает синтаксический контроль файла.
Редактор имеет и другие важные отладочные средства — он позволяет устанавливать в тексте файла специальные метки, именуемые точками прерывания (breakpoints). При их достижении вычисления приостанавливаются, и пользователь может оценить промежуточные результаты вычислений (например, значения переменных), проверить правильность выполнения циклов и т. д. Наконец, редактор позволяет записать файл в текстовом формате и увековечить ваши труды в файловой системе MATLAB.
Для удобства работы с редактором/отладчиком строки программы в нем нумеруются в последовательном порядке. Редактор является многооконным. Окно каждой программы оформляется как вкладка.
Рис. 5.21. Исполнение файла, показанного в окне редактора на рис. 5.20
Цветовые выделения и синтаксический контроль
Редактор/отладчик m-файлов выполняет синтаксический контроль программного кода по мере ввода текста. При этом используются следующие цветовые выделения:
ключевые слова языка программирования — синий цвет;
операторы, константы и переменные — черный цвет;
комментарии после знака % — зеленый цвет;
символьные переменные (в апострофах) — зеленый цвет;
синтаксические ошибки — красный цвет.
Благодаря цветовым выделениям вероятность синтаксических ошибок снижается.
Однако далеко не все ошибки диагностируются. Ошибки, связанные с неверным применением операторов или функций (например, применение оператора - вместо + или функции cos(x) вместо sin(x) и т. д.), не способна обнаружить ни одна система программирования. Устранение такого рода ошибок (их называют семантическими) — дело пользователя, отлаживающего свои алгоритмы и программы.
Понятие о файлах-сценариях и файлах-функциях
Здесь полезно отметить, что m-файлы, создаваемые редактором/отладчиком, делятся на два класса:
файлы-сценарии, не имеющие входных параметров;
файлы-функции, имеющие входные параметры.
Видимый в окне редактора на рис. 5.21 файл является файлом-сценарием, или Script-файлом. Данный файл не имеет списка входных параметров и является примером простой процедуры без параметров. Он использует глобальные переменные, т. е. такие переменные, значения которых могут быть изменены в любой момент сеанса работы и в любом месте программы.
Рис. 5.22. Исполнение файла-сценария из командной строки
Для запуска файла-сценария из командной строки MATLAB достаточно указать его имя в этой строке. Рис. 5.22 поясняет это. Обратите внимание на команду grid on, исполняемую после запуска созданного файла. Эта команда наносит на график сетку из точечных линий.
Файл-функция отличается от файла-сценария прежде всего тем, что созданная им функция имеет входные параметры, список которых указывается в круглых скобках. Используемые в файле-функции переменные являются локальными переменными, изменение значений которых в теле функции никоим образом не влияет на значения, которые те же самые переменные могут иметь за пределами функции.
Иными словами, локальные переменные могут иметь те же имена (идентификаторы), что и глобальные переменные (хотя правила культурного программирования не рекомендуют смешивать имена локальных и глобальных переменных). В дальнейшем мы рассмотрим этот вопрос более подробно, а пока вернемся к теме данного урока — описанию интерфейса компонентов системы MATLAB.
Панель инструментов редактора и отладчика
Редактор имеет свое меню и свою инструментальную панель. Внешний вид инструментальной панели показан на рис. 5.23. По стилю данная панель похожа на панель инструментов окна командного режима работы, но имеет несколько иной набор кнопок.
Рис. 5.23. Панель инструментов редактора/отладчика m-файлов
Назначение кнопок панели инструментов редактора/отладчика следующее:
New — создание нового m-файла;
Open — вывод окна загрузки файла;
Save — запись файла на диск;
Print — печать содержимого текущего окна редактора;
Cut — вырезание выделенного фрагмента и перенос его в буфер;
Сору — копирование выделенного объекта в буфер;
Paste — размещение фрагмента из буфера в позиции текстового курсора;
Undo — отмена предшествующей операции;
Redo — повтор отмененной операции;
Find text — нахождение указанного текста;
Show function — показ функции;
Set/Clear Breakpoint — установка/сброс точки прерывания;
Clear All Breakpoints — сброс всех точек прерывания;
Step — выполнение шага трассировки;
Step In — пошаговая трассировка с заходом в вызываемые m-файлы;
Step Out — пошаговая трассировка без захода в вызываемые m-файлы;
Save and Run — запись и сохранение;
Exit Debug Mode — выход из режима отладки.
С назначением ряда из этих кнопок вы уже знакомы, поскольку оно аналогично описанному ранее для основного окна MATLAB. А вот о назначении других кнопок надо поговорить.
Работа с точками прерывания
Основным приемом отладки rn-файлов является установка в их тексте точек прерывания (Breakpoints). Они устанавливаются (и сбрасываются) с помощью кнопки Set/Clear Breakpoint Сброс всех точек прерывания обеспечивается кнопкой Clear All Breakpoints.
Рассмотрим рис. 5.24, на котором в окне редактора/отладчика видна конструкция цикла. Как будет меняться переменная s, значение которой должно давать ряд натуральных чисел?
Прежде всего для отладки надо записать программу на диск, а. затем установить напротив выражения s=s+l точку прерывания — она отчетливо видна на рис. 5.24 как красный кружок. Для установки точки прерывания необходимо поместить текстовый курсор в нужное место (напротив указанного выражения) и щелкнуть на кнопке Set/Clear Breakpoint или щелкнуть справа от номера строки.
Рис. 5.24. Простейший пример на применение точки прерывания в программе
Теперь при пуске программы командой Run она будет исполнена до точки прерывания, после чего текущие значения s будут выведены в окне MATLAB. С помощью кнопки Step (Шаг) можно выполнить очередной шаг вычислений и т. д. Если отпала необходимость останова в точках прерывания, достаточно кнопкой Clear All Breakpoints удалить разом все точки прерывания. Желтая стрелка указывает, в каком месте программы произошла остановка. Обратите внимание на то, что в этом примере каждый шаг исполнения цикла фиксируется в окне командного режима системы MATLAB. При остановке в точке прерывания вы можете провести контроль значений переменных как «вручную», так и с помощью организации вывода на просмотр перед точкой прерывания.
Вы можете задать выполнение программы без остановки при заходе, но с остановкой при выходе (кнопка Step Out), и с остановкой при заходе в вызываемые m-файлы (кнопка Step In). Кнопка Exit Debug Mode (Выход из режима отладки) прекращает операции отладки.
Интерфейс графических окон
Обзор интерфейса графических окон
В уроке 3 мы уже описывали в общих чертах окно графики. Ниже мы рассмотрим его более детально. Графическое окно MATLAB 6.0 представлено на рис. 5.25. Это обычное масштабируемое и перемещаемое окно Windows-приложений. MATLAB может создавать множество таких окон. Однако размещение графики в окне сессии не предусмотрено. Это возможно в специальном расширении Notebook, позволяющем встраивать объекты MATLAB (тексты, строки ввода и вывода, графики) в документы популярного текстового редактора Word 95/97/2000.
Рис. 5.25. Графическое окно MATLAB
Меню этого окна похоже на меню окна командного режима работы системы MATLAB. Однако при внимательном просмотре заметен ряд отличий.
Прежде всего в меню Edit окна графики наряду со стандартными операциями работы с буфером есть ряд новых команд:
Copy Figure (Копировать рисунок) — копирование в буфер рисунка (графика);
Copy Options (Копировать параметры) — копирование параметров графика:
Figure Properties (Свойства рисунка) — вывод окна свойств графика;
Axes Properties (Свойства осей) — вывод окна свойств осей графика;
Current Object Properties (Свойства текущего объекта) - вывод окна свойств текущего объекта.
Для вывода свойств графиков, их осей и текущих объектов используется окно свойств графиков с соответствующими вкладками, работа с которым описывалась в уроке 3.
Примечание
Большинство графиков, которые описываются в книге, представлены копиями толь-ко самих графиков, а не всего графического окна. Для получения таких копий использовалась команда Copy Figure из меню Edit окна графики или просто вырезалась нужная часть копии экрана, получаемой нажатием клавиши Print Scrn. Такое представление делает приведенные рисунки одинаковыми для всех версий MATLAB от 5.0 и выше.
Панель инструментов камеры обзора
Отличительной особенностью окна графики в версии MATLAB 6.0 стало появление второй инструментальной панели со средствами форматирования трехмерной (3D) графики. Эта панель (она видна на рис. 5.25 под основной панелью инструментов) выводится командой View > Camera Toolbar.
Эта панель управляет некоторой воображаемой фотокамерой (или просто камерой), с помощью которой как бы наблюдается объект. Кнопки имеют наглядные изображения, поясняющие действия кнопок. В связи с этим их подробное описание лишено смысла — проще опробовать их в действии.
Меню инструментов Tools
Действия кнопок панели инструментов камеры обзора продублированы в меню Tools (Инструменты) — на рис. 5.25 оно представлено в открытом состоянии. Состав команд указанного подменю в версии MATLAB 6.0 существенно изменен и обновлен. Теперь в нем имеются следующие команды:
Edit Plot (Редактировать график) — редактирование графика;
Zoom In (Увеличение) — увеличение масштаба графика;
Zoom Out (Уменьшение) — уменьшение масштаба графика;
Rotate 3D (Вращение 3D) — вращение в пространстве;
Move Camera (Передвинуть камеру) — установка камеры обзора;
Camera Motion (Передвижение камеры) — установка перемещения камеры обзора;
Camera Axes (Оси камеры) — установка координатных осей при работе с камерой;
Camera Reset (Установка начального состояния камеры) — сброс установок камеры;
Basic Fitting — проведение аппроксимации и регрессии;
Data Statistics — получение статистических данных для точек графика.
Две последние позиции этого меню дают весьма оригинальные возможности обработки точек графика — выполнение регрессии множеством методов с выводом (где это возможно) уравнения регрессии на график и вычисление статистических параметров для этих точек.
Поскольку эти операции относятся к обработке данных, мы рассмотрим их более детально в уроке 17.
Вращение графиков мышью
Хорошее впечатление оставляет возможность вращения графиков мышью — прием, введенный в целый ряд систем компьютерной математики (Mathcad, Maple 6 и Mathematica 4). При вводе этой команды вокруг фигуры появляется обрамляющий ее параллелепипед, который можно вращать мышью (при нажатой левой кнопке) в том или ином направлении. Отпустив кнопку мыши, можно наблюдать график в пространстве. Интересно, что эта возможность действует даже в отношении двумерных графиков (см. рис. 5.25).- При этом вращается плоскость, в которой расположен график. Эта плоскость размещается в упомянутом параллелепипеде.
Операции вставки
В уроке 3 мы уже рассматривали операции вставки с помощью основной панели инструментов. Эти возможности продублированы в позиции Insert (Вставка) меню графического окна. Рис. 5.26 показывает пример рисунка, в котором выполнены основные операции вставки с помощью команд меню Insert (Вставка). Это нанесение надписей по осям, титульной надписи, надписи внутри рисунка, стрелки, отрезка прямой, легенды и шкалы цветов. На этом рисунке меню Insert показано в открытом состоянии.
Рис. 5.26. Примеры операций вставки в графическом окне
Общение MATLAB с операционной системой
Общение системы MATLAB с операционной системой MS-DOS многим покажется рудиментарной возможностью. Так, во время написания данной книги такое общение не потребовалось. [ Это очень важно для систем, работающих в реальном масштабе времени, причем наличие наряду с ! возможности явного задания ОС (dos, unix, vms) позволяет программировать для ОС на управляющем компьютере, отличающемся от ОС пользователя MATLAB.— Примеч. ред. ] . Но, как говорится, из песни слов не выкинешь — MATLAB позволяет из командой строки пользоваться основными услугами старушки MS-DOS и Windows. Есть возможность общения и с другими операционными системами и даже с глобальной сетью Интернет, в том числе и с помощью собственного HTML-браузера MATLAB (браузера помощи).
Для перехода в новую папку служит команда cd:
cd wd — переход в указанную папку wd;
cd (или произвольное имя переменной ad ad=cd) — возвращает строку с полным именем текущей папки;
cd .. — переход к папке, родительской по отношению к текущей.
Примеры (предполагается, что MATLAB установлен на диске Е):
» cd
E:\matlabR12\toolbox
» cd E:\matlabR12\tool
??? Name is nonexistent or not a directory
» cd E:\matlabR12\toolbox\
» cd
E:\matlabR12\toolbox
Для указания пути к текущей папке может использоваться функция pwd:
» pwd
ans =
E:\matlabR12\toolbox
Для получения информации о содержимом текущей папки используется команда dir:
» cd E:\matlabR12\too1box\matlab
» dir
. | datatypes | funfun graphics | ops | specgraph verctrl |
.. | demos | general iofun | polyfun | strfun winfun |
audio | el fun | graph2d lang | sparfun | timefun |
datafun | elmat | graph3d mat | fun | specfun uitools |
Обратите внимание, что в последнем примере выведено содержимое подпапки matlab одной из самых важных папок системы MATLAB — TOOLBOX. В папке TOOLBOX содержатся 46 самых важных подпапок с хранящимися в них пакетами расширения системы MATLAB, например comm — папка пакета проектирования средств телекоммуникаций, compiler — компилятор программ в коды языка С, symbolic — символьные (аналитические) вычисления и т. д. Впрочем, надо отметить, что в разных поставках системы число подпапок может различаться. Функция dir может использоваться для получения списка файлов в любой папке: files-dir ('путь к папке и имя папки').
Выполнение команд !, dos, unix и vms
Из командной строки MATLAB возможно выполнение команд наиболее распространенных операционных систем:
! команда — выполнение заданной команды из набора операционной системы; в среде которой установлена MATLAB;
unix команда — выполнение заданной команды из операционной системы UNIX или UNIX-подобных систем (версии Linux);
vms команда — выполнение заданной команды из операционной системы VMS (Open VMS);
dos команда — выполнение заданной команды из набора команд MS-DOS или установленной ОС семейства Windows, в последнем случае команда выполняется в фоновом режиме.
Выведем блокнот Windows для редактирования m-файла:
dos 'notepad myfile.m'
или
[s w]=dos('notepad myfile.m')
s=0, когда команда выполнена успешно, в противном случае s=1, w содержит сообщение DOS.
Общение с Интернетом из командной строки
Для общения с Интернетом служит команда web: О web спецификация — дает связь с Web-сервером. [ Те же команды web с параметром —browser (например, web http://www.mathworks.com —browser) вызывают вместо браузера помощи MATLAB браузер HTML, установленный в ваших настройках операционной системы Windows как браузер по умолчанию. В UNIX (Linux) браузер, вызываемый командой web с параметром —browser, определяется командой MATLAB [doccmd.options, ] - docopt, где doccmd — наименование браузера, например netscape, вместо options можно подставить параметры браузера. Можно также отредактировать файл docopt в папке matlabr!2/toolbox/local и указать в нем браузер по умолчанию. — Примеч. ред. ] Примеры применения команды web:
web http://www.mathworks.com — загружает Web-страницу MathWorks Web [ Команда support сразу открывает страницу технической поддержки MATLAB. — Примеч. ред. ] в браузер помощи; [ При запуске с параметром —browser можно ввести URL в виде www.mathworks.com, но сайт будет открыт в браузере ОС по умолчанию. — Примеч. ред. ]
web mailto:email_address — использует программу для отправки электронной почты, установленную по умолчанию в настройках операционной системы;
все формы команды web могут использоваться в функциях. Например, функция s = web('www.mathworks.com', ' -browser') запускает браузер Интернета операционной системы [ Для UNIX и Linux браузера Интернета можно задавать из MATLAB. — Примеч. ред. ] и выдает s=0, если браузер запущен, даже если браузер Интернета открывает страницу в автономном режиме (off-line) или не может ее найти, s=l, если браузер Интернет не был обнаружен, s=2, если браузер был обнаружен, но не был запущен.
Такой выход в Интернет иначе чем экзотикой назвать трудно, благо в Windows 95/ 98/Me/2000/NT4 есть куда более простые способы выхода в Интернет. Отнесем эту возможность к числу приятных мелочей [ Необходимых для работы систем, работающих в реальном масштабе времени. — Примеч. ред. ], которых в MATLAB очень много. Например, приятной мелочью является также собственный web-сервер MATLAB (только в версиях для Microsoft Windows NT4/2000, Linux и Sun Solaris). Доступ к нему может быть ограничен только компьютерами, перечисленными в списке файла hosts.conf.
Некоторые другие команды
Есть еще несколько команд для общения с операционными системами:
delete name — стирание файла с заданным именем name (имя записывается по правилам операционной системы);
getenvCname') — возвращает значение переменной 'name' среды окружения.
Пример:
» getenv('temp')
ans =
C:\TEMP
Команда tempdir дает информацию о папке для хранения временных файлов:
» tempdir
ans =
С:\ТЕМР\ ...
Еще одна команда — computer — используется в двух формах:
» computer
ans =
PCWIN
и
» [С S]=computer
С = PCWIN
S =
2.1475е+009
Во втором случае помимо сообщения о типе компьютера выводится максимально возможное число элементов в массивах. Оно зависит от объема памяти и свойственных операционной системе ограничений (приведенные данные получены при использовании компьютера с процессором Pentium II, емкостью ОЗУ 128 Мбайт и установленной ОС Windows 98).
Для установки типа терминала может использоваться еще одна команда — terminal. Возможные типы терминалов можно найти в справке по этой команде, выводимой командой help terminal. На этом рассмотрение команд прямого общения с операционными системами можно считать законченным.
Что нового мы узнали?
В этом уроке мы научились:
Работать с меню, панелями инструментов и буфером обмена.
Использовать браузеры рабочего пространства и файловой системы.
Запускать примеры приложения Simulink.
Осуществлять печать документов.
Работать с редактором/отладчиком m-файлов.
Различать файлы-сценарии и файлы-функции.
Работать с окнами графики.
Использовать команды взаимодействия MATLAB с операционной системой и Интернетом.
Урок №6.
Обычная графика MATLAB
Построение графиков точками и отрезками прямых
Графики в логарифмическоми полулогарифмическом масштабе
Гистограммы и диаграммы
Графики специальных типов
Создание массивов данных для трехмерной графики
Построение графиков трехмерных поверхностей, сечений и контуров
Средства управления подсветкой и обзором фигур
Средства оформления графиков
Одновременный вывод нескольких графиков
Управление цветовой палитрой
Окраска трехмерных поверхностей
Двумерные и трехмерные графические объекты
Одно из достоинств системы MATLAB — обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Особое внимание в системе уделено трехмерной графике с функциональной окраской отображаемых фигур и имитацией различных световых эффектов.
Описанию графических функций и команд посвящена обширная электронная книга в формате PDF. Объем материала по графике настолько велик, что помимо вводного описания графики в уроке 3 в этой книге даются еще два урока по средствам обычной и специальной графики. Они намеренно предшествуют систематизированному описанию большинства функций системы MATLAB, поскольку графическая визуализация вычислений довольно широко используется в последующих материалах книги. При этом графические средства системы доступны как в командном режиме вычислений, так и в программах. Этот урок рекомендуется изучать выборочно или выделить на него не менее 4 часов.
Построение графиков отрезками прямых
Функции одной переменной у(х) находят широкое применение в практике математических и других расчетов, а также в технике компьютерного математического моделирования. Для отображения таких функций используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси — горизонтальная X и вертикальная Y, и задаются координаты х и у, определяющие узловые точки функции у(х). Эти точки соединяются друг с другом отрезками прямых, т. е. при построении графика осуществляется линейная интерполяция для промежуточных точек. Поскольку MATLAB — матричная система, совокупность точек у(х) задается векторами X и Y одинакового размера.
Команда plot служит для построения графиков функций в декартовой системе координат. Эта команда имеет ряд параметров, рассматриваемых ниже.
plot (X, Y) — строит график функции у(х), координаты точек (х, у) которой берутся из векторов одинакового размера Y и X. Если X или Y — матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы.
Приведенный ниже пример иллюстрирует построение графиков двух функций — sin(x) и cos(x), значения функции которых содержатся в матрице Y, а значения аргумента х хранятся в векторе X:
» х=[0 12345];
» Y=[sin(x):cos(x)];
» plot(x.Y)
На рис. 6.1 показан график функций из этого примера. В данном случае отчетливо видно, что график состоит из отрезков, и если вам нужно, чтобы отображаемая функция имела вид гладкой кривой, необходимо увеличить количество узловых точек. Расположение их может быть произвольным.
Рис. 6.1. Графики двух функций в декартовой системе координат
plot(Y) — строит график у(г), где значения у берутся из вектора Y, a i представляет собой индекс соответствующего элемента. Если Y содержит комплексные элементы, то выполняется команда plot (real (Y). imag(Y)). Во всех других случаях мнимая часть данных игнорируется.
Вот пример использования команды plot(Y):
» х=2*pi:0.02*pi:2*pi;
» y=sin(x)+i*cos(3*x);
» plot(y)
Соответствующий график показан на рис. 6.2.
Рис. 6.2. График функции, представляющей вектор Y с комплексными элементами
plot(X.Y.S) — аналогична команде plot(X.Y), но тип линии графика можно задавать с помощью строковой константы S.
Значениями константы S могут быть следующие символы.
Y |
Желтый |
М |
Фиолетовый |
С |
Голубой |
R |
Красный |
G |
Зеленый |
В |
Синий |
W |
Белый |
К |
Черный |
|
Точка |
0 |
Окружность |
X |
Крест |
+ |
Плюс |
* |
Звездочка |
S |
Квадрат |
D |
Ромб |
V |
Треугольник (вниз) |
А |
Треугольник (вверх) |
< |
Треугольник (влево) |
> |
Треугольник (вправо) |
Р |
Пятиугольник |
H |
Шестиугольник |
- |
Сплошная |
|
Двойной пунктир |
-. |
Штрих-пунктир |
-- |
Штриховая |
Таким образом, с помощью строковой константы S можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика.
рlot (X1. Y1, S1, Х2, Y2. S2. ХЗ. Y3, S3,...) — эта команда строит на одном графике ряд линий, представленных данными вида (X..Y..S.), где X. и Y. — векторы или матрицы, a S. — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. Так, если надо построить график функции линией синего цвета с красными точками, то вначале надо задать построение графика с точками красного цвета (без линии), а затем графика только линии синего цвета (без точек).
При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется. Для монохромных систем линии выделяются стилем.
Рассмотрим пример построения графиков трех функций с различным стилем представления каждой из них:
» x=-2*pi:0.1*pi:2*pi;
» yl=sin(x);
» y2=sin(x).^2;
» y3=sin(x).^3:
» plot(x.yl.'-m',x,y2.'-.+r'.х.у3,'--ok')
Графики функций для этого примера показаны на рис. 6.3.
Рис. 6.3. Построение графиков трех функций на одном рисунке с разным стилем линий
Здесь график функции yl строится сплошной фиолетовой линией, график у2 строится штрих пунктирной линией с точками в виде знака «плюс» красного цвета, а график уЗ строится штриховой линией с кружками черного цвета. К сожалению, на черно-белых рисунках этой книги вместо разных цветов видны разные градации серого цвета.
Графики в логарифмическом масштабе
Для построения графиков функций со значениями х и у, изменяющимися в широких пределах, нередко используются логарифмические масштабы. Рассмотрим команды, которые используются в таких случаях.
loglogx(...) — синтаксис команды аналогичен ранее рассмотренному для функции plot(...). Логарифмический масштаб используется для координатных осей X и У. Ниже дан пример применения данной команды:
» x=logspace(-1,3);
» loglog(x.exp(x)./x)
» grid on
На рис. 6.4 представлен график функции ехр(х)/х в логарифмическом масштабе. Обратите внимание на то, что командой grid on строится координатная сетка.
Неравномерное расположение линий координатной сетки указывает на логарифмический масштаб осей.
Рис. 6.4. График функции ехр(x)/x в логарифмическом масштабе
Графики в полулогарифмическом масштабе
В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой — линейный.
Для построения графиков функций в полулогарифмическом масштабе используются следующие команды:
semilogx(...) — строит график функции в логарифмическом масштабе (основание 10) по оси X и линейном по оси Y;
semilоgу (...) — строит график функции в логарифмическом масштабе по оси Y и линейном по оси X.
Рис. 6.5. График экспоненты в полулогарифмическом масштабе
Запись параметров (...) выполняется по аналогии с функцией plot(...). Ниже приводится пример построения графика экспоненциальной функции:
» х=0:0.5:10;
» semilogy(x.exp(x))
График функции при логарифмическом масштабе по оси У представлен на рис. 6.5.
Нетрудно заметить, что при таком масштабе график экспоненциальной функции выродился в прямую линию. Масштабной сетки теперь уже нет.
Столбцовые диаграммы
Столбцовые диаграммы широко используются в литературе, посвященной финансам и экономике, а также в математической литературе. Ниже представлены команды для построения таких диаграмм.
bar(x, Y) — строит столбцовый график элементов вектора Y (или группы столбцов для матрицы Y) со спецификацией положения столбцов, заданной значениями элементов вектора х, которые должны идти в монотонно возрастающем порядке;
bar(Y) — строит график значений элементов матрицы Y так же, как указано выше, но фактически для построения графика используется вектор х=1:m;
barU.Y,WIDTH) или BAR(Y,WIDTH) — команда аналогична ранее рассмотренным, но со спецификацией ширины столбцов (при WIDTH > 1 столбцы в одной и той же позиции перекрываются). По умолчанию задано WIDTH = 0.8.
Возможно применение этих команд и в следующем виде: bаг(.... 'Спецификация') для задания спецификации графиков, например типа линий, цвета и т. д., по аналогии с командой plot. Спецификация 'stacked' задает рисование всех n столбцов в позиции m друг на друге.
Пример построения столбцовой диаграммы матрицы размером 12x3 приводится ниже:
» % Столбцовая диаграмма с вертикальными столбцами
» subplot(2.1.1). bar(rand(12.3).'stacked'), colormap(cool)
На рис. 6.6 представлен полученный график.
Рис. 6.6. Пример построения диаграммы с вертикальными столбцами
Помимо команды bar(...) существует аналогичная ей по синтаксису команда barh(...), которая" строит столбцовые диаграммы с горизонтальным расположением столбцов. Пример, приведенный ниже, дает построения, показанные на рис. 6.7.
» subplot(2.1.1). barh(rand(5.3).'stacked'), colormap(cool)
Рис. 6.7. Пример построения столбцовой диаграммы с горизонтальными столбцами
Какое именно расположение столбцов выбрать, зависит от пользователя, использующего эти команды для представления своих данных.
Построение гистограмм
Классическая гистограмма характеризует числа попаданий значений элементов вектора Y в М интервалов с представлением этих чисел в виде столбцовой диаграммы. Для получения данных для гистограммы служит функция hist, записываемая в следующем виде:
N=hist(Y) — возвращает вектор чисел попаданий для 10 интервалов, выбираемых автоматически. Если Y — матрица, то выдается массив данных о числе попаданий для каждого из ее столбцов;
N=hist(Y,M) — аналогична вышерассмотренной, но используется М интервалов (М — скаляр);
N=hist(Y.X) — возвращает числа попаданий элементов вектора Y в интервалы, центры которых заданы элементами вектора X;
[N,X]=HIST(...) — возвращает числа попаданий в интервалы и данные о центрах интервалов.
Команда hist(...) с синтаксисом, аналогичным приведенному выше, строит график гистограммы. В следующем примере строится гистограмма для 1000 случайных чисел и выводится вектор с данными о числах их попаданий в интервалы, заданные вектором х:
» х=-3:0.2:3;
» y=randn(1000,1);
» hist(y,x)
» h=hist(y.x)
h =
Columns 1 through 12
0 0 3 7 8 9 11 23 33 43 57 55
Columns 13 through 24
70 62 83 87 93 68 70 65 41 35 27 21
Columns 25 through 31
12 5 6 3 2 1 0
Построенная гистограмма показана на рис. 6.8.
Рис. 6.8. Пример построения гистограммы
Нетрудно заметить, что распределение случайных чисел близко к нормальному закону. Увеличив их количество, можно наблюдать еще большее соответствие этому закону.
Лестничные графики — команды stairs
Лестничные графики визуально представляют собой ступеньки с огибающей, представленной функцией у(х). Такие графики используются, например, для отображения процессов квантования функции у(х), представленной рядом своих отсчетов. При этом в промежутках между отсчетами значения функции считаются постоянными и равными величине последнего отсчета.
Для построения лестничных графиков в системе MATLAB используются команды группы stairs:
stairs(Y) — строит лестничный график по данным вектора Y;
stairs(X.Y) — строит лестничный график по данным вектора Y с координатами х переходов от ступеньки к ступеньке, заданными значениями элементов вектора X;
stairs(...,S) — аналогична по действию вышеописанным командам, но строит график линиями, стиль которых задается строками S.
Следующий пример иллюстрирует построение лестничного графика:
» х=0:0.25:10;
» stairs(x,x. ^ 2);
Результат построения представлен на рис. 6.9.
Рис. 6.9. Лестничный график функции х ^ 2
Обратите внимание на то, что отсчеты берутся через равные промежутки по горизонтальной оси. Если, к примеру, отображается функция времени, то stairs имеет вид квантованной по времени функции.
Функция H=stairs(X,Y) возвращает вектор дескрипторов графических объектов.
Функция
[XX,YY]=stairs(X.Y)
сама по себе график не строит, а возвращает векторы XX и YY, которые позволяют построить график с помощью команды plot(XX.YY).
Графики с зонами погрешности
Если данные для построения функции определены с заметной погрешностью, то используют графики функций типа errorbar с оценкой погрешности каждой точки путем ее представления в виде буквы I, высота которой соответствует заданной погрешности представления точки. Команда errorbar используется в следующем виде:
errorbar(X,Y,L.U) — строит график значений элементов вектора Y в зависимости от данных, содержащихся в векторе X, с указанием нижней и верхней границ значений, заданных в векторах L и U;
errorbar(X,Y,E) Herrorbar(Y.E) —строит графики функции Y(X) с указанием этих границ в виде [Y-E Y+E], где Е — погрешность;
errorbar(..., 'LineSpec') — аналогична описанным выше командам, но позволяет строить линии со спецификацией 'LineSpec', аналогичной спецификации, примененной в команде plot.
Следующий пример иллюстрирует применение команды errorbar:
» х=2:0.1:2:
» y=erf(x):
» е=rand(size(x))/10;
» errorbar(x.y.e)
Построенный график показан на рис. 6.10.
Рис. 6.10. График функции erf(x) с зонами погрешности
Функция, записываемая в виде H=ERRORBAR(...), возвращает вектор дескрипторов графических объектов.
График дискретных отсчетов функции
Еще один вид графика функции у(х) — ее представление дискретными отсчетами. Этот вид графика применяется, например, при описании квантования сигналов. Каждый отсчет представляется вертикальной чертой, увенчанной кружком, причем высота черты соответствует y-координате точки.
Рис. 6.11. График дискретных отсчетов функции
Для построения графика подобного вида используются команды stem(...):
stem(X.Y) — строит график отсчетов с ординатами в векторе Y и абсциссами в векторе X;
stem(.... 'LINESPEC') — дает построения, аналогичные ранее приведенным командам, но со спецификацией линий 'LINESPEC', подобной спецификации, приведенной для функции plot;
stem(Y) — строит график функции с ординатами в векторе Y в виде отсчетов;
stem(.... 'filled') — строит график функции с закрашенными маркерами. Следующий пример иллюстрирует применение команды stem:
» х = 0:0.1:4;
» у = sin(x. ^ 2).*exp(-x):
» stem(x.y)
Полученный для данного примера график показан на рис. 6.11.
Функция H=STEM(...) строит график и возвращает вектор дескрипторов графических объектов.
Графики в полярной системе координат
В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину RHO и угол ТНЕТА. Для построения графика функции RHO(THETA) используются приведенные ниже команды. Угол ТНЕТА обычно меняется от 0 до 2*pi. Для построения графиков функций в полярной системе координат используются команды типа polar(...):
polarCTHETA, RHO) — строит график в полярной системе координат, представляющий собой положение конца радиус-вектора с длиной RHO и углом ТНЕТА;
polarCTHETA,RHO.S) — аналогична предыдущей команде, но позволяет задавать стиль построения с помощью строковой константы S по аналогии с командой plot.
Рис. 6.12 демонстрирует результат выполнения команд:
» t=0:pi/50:2*pi;
» polar(t,sin(5*t))
Рис. 6.12. График функции в полярной системе координат
Графики функций в полярных координатах могут иметь весьма разнообразный вид, порой напоминая такие объекты природы, как снежинки или кристаллики льда на стекле. Вы можете сами попробовать построить несколько таких графиков — многие получают от этого удовольствие.
Угловые гистограммы
Угловые гистограммы находят применение в индикаторах радиолокационных станций, для отображения «роз» ветров и при построении других специальных графиков. Для этого используется ряд команд типа rose(...):
rose(THETA) — строит угловую гистограмму для 20 интервалов по данным вектора ТНЕТА;
rose(ТНЕТА, N) — строит угловую гистограмму для N интервалов в пределах угла от 0 до 2*рi по данным вектора ТНЕТА;
rose(ТНЕТА. X) — строит угловую гистограмму по данным вектора ТНЕТА со спецификацией интервалов, указанной в векторе X.
Следующий пример иллюстрирует применение команды rose: » rose(1:100.12)
На рис. 6.13 показан пример построения графика командой rose.
Рис. 6.13. Угловая гистограмма
Функция H=rose(...) строит график и возвращает вектор дескрипторов графических объектов, а функция [T,R]=rose(...) сама по себе график не строит, но возвращает векторы Т и R, которые нужны команде polar (Т. R) для построения подобной гистограммы.
Графики векторов
Иногда желательно представление ряда радиус-векторов в их обычном виде, то есть в виде стрелок, исходящих из начала координат и имеющих угол и длину, определяемые действительной и мнимой частью комплексных чисел, представляющих эти векторы. Для этого служит группа команд compass:
compass(U.V) — строит графики радиус-векторов с компонентами (U.V), представляющими действительную и мнимую части каждого из радиус-векторов;
compass (Z) — эквивалентно compass (real (Z), imag(Z));
compass(U.V,LINESPEC) и Compass(Z.LINESPEC) — аналогичны представленным выше командам, но позволяют задавать спецификацию линий построения LINESPEC, подобную описанной для команды plot.
В следующем примере показано использование команды compass:
» Z=[-1+2i,-2-3i.2+3i.5+2i];
» compass(Z)
Построенный в этом примере график представлен на рис. 6.14.
Рис. 6.14. Построение радиус-векторов
Функция H=COMPASS(...) строит график и возвращает дескрипторы графических объектов.
График проекций векторов на плоскость
Иногда полезно отображать комплексные величины вида z = х + yi в виде проекции радиус-вектора на плоскость. Для этого используется семейство графических команд класса feather:
feather(U.V) — строит график проекции векторов, заданных компонентами U и V, на плоскость;
feather (Z) — для вектора Z с комплексными элементами дает построения, аналогичные feather(REAL(Z),IMAG(Z));
feather(..., S) — дает построения, описанные выше, но со спецификацией линий, заданной строковой константой S по аналогии с командой plot.
Пример применения команды feather:
» x=0:0.1*pi:3*pi;
»y=0.05+i;
» z=exp(x*y);
» feather(z)
График, построенный в этом последнем примере, показан на рис. 6.15.
Рис. 6.15. График, построенный функцией feather
Функция Н=РЕАТНЕR(...)строит график и возвращает вектор дескрипторов графических объектов.
Контурные графики
Контурные графики служат для представления на плоскости функции двух переменных вида z(x, у) с помощью линий равного уровня. Они получаются, если трехмерная поверхность пересекается рядом плоскостей, расположенных параллельно друг другу. При этом контурный график представляет собой совокупность спроецированных на плоскость (х, у) линий пересечения поверхности г(х, у) плоскостями.
Для построения контурных графиков используются команды contour:
contour(Z) — строит контурный график по данным матрицы Z с автоматическим заданием диапазонов изменения х и у;
contour(X.Y.Z) — строит контурный график по данным матрицы Z с указанием спецификаций для X и Y;О contour(Z.N) и contour(X.Y.Z.N) — дает построения, аналогичные ранее описанным командам, с заданием N линий равного уровня (по умолчанию N=10);
contour(Z, V) и contour(X,Y,Z,V) — строят линии равного уровня для высот, указанных значениями элементов вектора V;
contour(Z,[v v]) или contour(X.Y,Z.[v v]) — вычисляет одиночный контур для уровня v;
[С.Н] = contour (...) — возвращает дескрипторы — матрицу С и вектор-столбец Н. Они могут использоваться как входные параметры для команды clabel;
contourC... 'LINESPEC') — позволяет использовать перечисленные выше команды с указанием спецификации линий, которыми идет построение.
Пример построения контурного графика поверхности, заданной функций peaks:
» z=peaks(27);
» contour(z,15)
Построенный в этом примере график показан на рис. 6,16. Заметим, что объект — функция peaks — задан в системе в готовом виде.
Рис. 6.16. Контурный график, построенный с помощью команды contour
Графики этого типа часто используются в топографии для представления на листе бумаги (как говорят математики — на плоскости) объемного рельефа местности. Для оценки высот контурных линий используется их функциональная окраска.
Создание массивов данных для трехмерной графики
Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, то есть векторов х и у. Она требует определения для X и Y двумерных массивов — матриц. Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах:
[X.Y] = meshgrid(x) — аналогична [X.Y] = meshgrid(x.x);
[X.Y.Z] = meshgrid(x.y,z) — возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков;
[X.Y] = meshgrid(x.y) — преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х; а столбцы Y — копиями вектора у.
Пример:
» [X.Y] = meshgnd(l:4.13:17)
X =
|
|||||
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
1 |
2 |
3 |
4 |
|
|
Y= |
|
|
|
|
|
13 |
13 |
13 |
13 |
|
|
14 |
14 |
14 |
14 |
|
|
15 |
15 |
15 |
15 |
|
|
16 |
16 |
16 |
16 |
|
|
17 |
17 |
17 |
17 |
|
Приведем еще один пример применения функции meshgrid:
» [X.Y] = meshgrid(-2:.2:2. -2:.2:2);
Такой вызов функции позволяет задать опорную плоскость для построения трехмерной поверхности при изменении дгиг/от-2до2с шагом 0.2. Дополнительные примеры применения функции meshgrid будут приведены далее при описании соответствующих команд. Рекомендуется ознакомиться с также командами surf и slice (ломтик).
Функция ndgrid является многомерным аналогом функции meshgrid:
[Х1.Х2.ХЗ,...] = ndgrid(xl,x2,x3....) — преобразует область, заданную векторами xl.x2.x3..., в массивы Х1.Х2.ХЗ..., которые могут быть использованы для вычисления функций нескольких переменных и многомерной интерполяции, i-я размерность выходного массива xi является копией вектора xi;
[XI.Х2....] = ndgrid(x) - аналогична [XI.Х2....] = ndgrid(x,x,...). Пример применения функции ndgrid представлен ниже:
»[Х1.'Х2] = ndgrid(-2:.2:2. -2:.2:2);
»Z = XI .* ехр(-Х1."2 - Х2.*2);
»mesh(Z)
Рекомендуем читателю опробовать действие этого примера.
Графики поля градиентов quiver
Для построения графиков полей градиента служат команды quiver:
quiver(X.Y.U.V) — строит график поля градиентов в виде стрелок для каждой пары элементов массивов X и Y, причем элементы массивов U и V указывают направление и размер стрелок;
qui ver(U, V) — строит векторы скорости в равнорасположенных точках на плоскости (х, у);
quiver(U,V,S) или quiver(X,Y.U,V,S) — автоматически масштабирует стрелки по сетке и затем вытягивает их по значению S. Используйте S=0, чтобы построить стрелки без автоматического масштабирования;
quiver(...,LINESPEC) — использует для векторов указанный тип линии. Указанные в LINESPEC маркеры рисуются у оснований, а не на концах векторов. Для отмены любого вида маркера используйте спецификацию '.'. Спецификации линий, цветов и маркеров были подробно описаны в разделе, посвященном команде plot;
quiver(.... 'filled') — дает график с закрашенными маркерами;
H=quiver(...) — строит график и возвращает вектор дескрипторов. Ниже представлен пример применения команды quiver:
» х = -2:.2:2; у = -1:.2:1;
» [хх.уу] = meshgrid(x,y);
» zz = хх.*ехр(-хх. х 2-уу.~2);
» [рх.ру] = gradient(zz..2..2);
» quiver(x.y.px.py,2);
Построенный в этом примере график показан на рис. 6.17.
Рис. 6.17. Пример построения графика поля градиентов
Нетрудно заметить, что представление поля градиентов стрелками дает весьма наглядное представление о линиях поля, указывая области, куда эти линии впадают и откуда они исходят.
Построение графиков поверхностей
Команда plot3(...) является аналогом команды plot (...), но относится к функции двух переменных z(x, у). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами:
plot3(x.y,z) — строит массив точек, представленных векторами х, у и z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение;
plot3(X,Y,Z), где X, Y и Z — три матрицы одинакового размера, строит точки с координатами X(i.:), Y(i,:) и Z(i,:) и соединяет их отрезками прямых.
Ниже дан пример построения трехмерной поверхности, описываемой функцией
z(х.у)=х^2+у^2;
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X.Y.Z)
График этой поверхности показан на рис. 6.18.
Рис. 6.18. График поверхности, построенный линиями
plot3 (X. Y, Z, S) — обеспечивает построения, аналогичные рассмотренным ранее, но со спецификацией стиля линий и точек, соответствующей спецификации команды plot. Ниже дан пример применения этой команды для построения поверхности кружками:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X,Y,Z.'o')
График поверхности, построенный кружками, показан на рис. 6.19.
Рис. 6.19. График поверхности, построенный разноцветными кружками
plot3(xl ,yl.zl, sl.х2,у2.z2. s2. хЗ,уЗ.z3,s3,...)— строит на одном рисунке графики нескольких функций zl(xl ,yl), z2(x2,y2) и т. д. со спецификацией линий и маркеров каждой из них.
Пример применения последней команды дан ниже:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X. ^ 2+Y.^2;
» plot3(X,Y,Z,'-k',Y,X,Z,'-k ' )
График функции, соответствующей последнему примеру, представлен на рис. 6.20.
Рис. 6.20. График функции в сетчатом представлении
В данном случае строятся два графика одной и той же функции с взаимно перпендикулярными образующими линиями. Поэтому график имеет вид сетки без окраски ее ячеек (напоминает проволочный каркас фигуры).
Сетчатые 3D-графики с окраской
Наиболее представительными и наглядными являются сетчатые графики поверхностей с заданной или функциональной окраской. В названии их команд присутствует слово mesh. Имеются три группы таких команд. Ниже приведены данные о наиболее полных формах этих команд. Наличие более простых форм можно уточнить, используя команду help Имя, где Имя — имя соответствующей команды.
mesh(X,Y,Z,C) — выводит в графическое окно сетчатую поверхность Z(X.Y) с цветами узлов поверхности, заданными массивом С;
mesh(X.Y.Z) — аналог предшествующей команды при C=Z. В данном случае используется функциональная окраска, при которой цвет задается высотой поверхности.
Возможны также формы команды mesh(x,y.Z), mesh(x.y.Z,C), mesh(Z) и mesh(Z.C).
Функция mesh возвращает дескриптор для объекта класса surface. Ниже приводится пример применения команды mesh:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» mesh(X,Y,Z)
На рис. 6.21 показан график поверхности, созданной командой mesh(X.Y.Z). Нетрудно заметить, что функциональная окраска линий поверхности заметно усиливает наглядность ее представления.
Рис. 6.21. График поверхности, созданный командой mesh(X,Y,Z)
MATLAB имеет несколько графических функций, возвращающих матричный образ поверхностей. Например, функция peaks(N) возвращает матричный образ поверхности с рядом пиков и впадин. Такие функции удобно использовать для проверки работы графических команд трехмерной графики. Для упомянутой функции peaks можно привести такой пример:
» z=peaks(25);
» mesh(z);
График поверхности, описываемой функцией peaks, представлен на рис. 6.22.
Рис. 6.22. График поверхности, описываемой функцией peaks
Рекомендуется ознакомиться с командами и функциями, используемыми совместно с описанными командами: axis, caxis, colormap, hold, shading и view.
Сетчатые 3D-графики с проекциями
Иногда график поверхности полезно объединить с контурным графиком ее проекции на плоскость, расположенным под поверхностью.
Для этого используется команда meshc:
meshc(...) — аналогична mesh(...), но помимо графика поверхности дает изображение ее проекции в виде линий равного уровня (графика типа contour).
Ниже дан пример применения этой команды:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» meshc(X,Y,Z)
Построенный график показан на рис. 6.23.
Рис. 6.23. График поверхности и ее проекции на расположенную ниже плоскость
Нетрудно заметить, что график такого типа дает наилучшее представление об особенностях поверхности.
Построение поверхности столбцами
Еще один тип представления поверхности, когда она строится из многочисленных столбцов, дают команды класса meshz:
meshz(...) — аналогична mesh(...), но строит поверхность как бы в виде столбиков. Следующий пример иллюстрирует применение команды mesh:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» meshz(X,Y,Z)
Столбцовый график поверхности показан на рис. 6.24.
Графики такого типа используются довольно редко. Возможно, он полезен архитекторам или скульпторам, поскольку дает неплохое объемное представление о поверхностях.
Рис. 6.24. Построение поверхности столбцами
Построение поверхности с окраской
Особенно наглядное представление о поверхностях дают сетчатые графики, использующие функциональную закраску ячеек. Например, цвет окраски поверхности z(x, у) может быть поставлен в соответствие с высотой z поверхности с выбором для малых высот темных тонов, а для больших — светлых. Для построения таких поверхностей используются команды класса surf (...):
surf (X, Y, Z. С) — строит цветную параметрическую поверхность по данным матриц X, Y и Z с цветом, задаваемым массивом С;
surf(X.Y.Z) — аналогична предшествующей команде, где C=Z, так что цвет задается высотой той или иной ячейки поверхности;
surf(x.y.Z) и surf(x.y.Z.C) с двумя векторными аргументами х и у — векторы х и у заменяют первых два матричных аргумента и должны иметь длины length(x)=n и length(y)=m, где [m.n]=size(Z). В этом случае вершины областей поверхности представлены тройками координат (x(j), yd), Z(1,j)). Заметим, что х соответствует столбцам Z, а у соответствует строкам;
surf(Z) и surf(Z.C) используют х = 1:n и у = 1:m. В этом случае высота Z — однозначно определенная функция, заданная геометрически прямоугольной сеткой;
h=surf (...) —строит поверхность и возвращает дескриптор объекта класса surface.
Команды axis, caxis, color-map, hold, shading и view задают координатные оси и свойства поверхности, которые могут использоваться для большей эффектности показа поверхности или фигуры.
Ниже приведен простой пример построения поверхности — параболоида:
» [X.Y]=meshgrid([-3:0.15:3]);
» Z=X.^2+Y.^2;
» Surf(X,Y,Z)
Соответствующий этому примеру график показан на рис. 6.25.
Рис. 6.25. График параболоида с функциональной окраской ячеек
Можно заметить, что благодаря функциональной окраске график поверхности гораздо более выразителен, чем при построениях без такой окраски, представленных ранее (причем даже в том случае, когда цветной график печатается в черно-белом виде).
В следующем примере используется функциональная окраска оттенками серого цвета с выводом шкалы цветовых оттенков:
» [X,Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surf(X.Y.Z)
» colormap(gray)
» shading interp
» colorbar
В этом примере команда colormap(gray) задает окраску тонами серого цвета, а команда shading Interp обеспечивает устранение изображения сетки и задает интерполяцию для оттенков цвета объемной поверхности. На рис. 6.26 показан вид графика, построенного в этом примере.
Рис. 6.26. График поверхности с функциональной окраской серым цветом
Обычно применение интерполяции для окраски придает поверхностям и фигурам более реалистичный вид, но фигуры каркасного вида дают более точные количественные данные о каждой точке.
Построение поверхности и ее проекции
Для повышения наглядности представления поверхностей можно использовать дополнительный график линий равного уровня, получаемый путем проецирования поверхности на опорную плоскость графика (под поверхностью). Для этого используется команда surf с:
surfc(...) — аналогична команде surf, но обеспечивает дополнительное построение контурного графика проекции фигуры на опорную плоскость.
Пример применения команды surf с приводится ниже:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surfc(X,Y,Z)
На рис. 6.27 показаны графики, построенные в данном примере.
Рис. 6.27. График поверхности и ее проекции на опорную плоскость
Рассмотрим еще один пример применения команды surf с, на этот раз для построения поверхности, описываемой функцией peaks, с применением интерполяции цветов и построением цветовой шкалы:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=peaks(X,Y);
» surfc(X,Y,Z)
» shading interp
» colorbar
Рис. 6.28 показывает график, построенный в этом примере. И здесь нетрудно заметить, что графики сложных поверхностей с интерполяцией цветовых оттенков выглядят более реалистичными, чем графики сетчатого вида и графики без интерполяции цветов.
Рис. 6.28. График функции peaks с проекцией и шкалой цветов
Построение освещенной поверхности
Пожалуй, наиболее реалистичный вид имеют графики поверхностей, в которых имитируется освещение от точечного источника света, расположенного в заданном месте координатной системы. Графики имитируют оптические эффекты рассеивания, отражения и зеркального отражения света. Для получения таких графиков используется команда surf 1:
surfl(...) — аналогична команде surf (...), но строит график поверхности с подсветкой от источника света;
surfl (Z.S) или surfl(X,Y,Z,S) — строит графики поверхности с подсветкой от источника света, положение которого в системе декартовых координат задается вектором S=[Sx,Sy.Sz], а в системе сферических координат — вектором S=[AZ.EL];
surfl (..., 'light') — позволяет при построении задать цвет подсветки с помощью объекта Light;
surfl (..., 'cdata') — при построении имитирует эффект отражения;
surfl(X,Y,Z,S.K) — задает построение поверхности с параметрами, заданными вектором K=[ka,kd,ks.spread], где ka — коэффициент фоновой подсветки, kd — коэффициент диффузного отражения, ks — коэффициент зеркального отражения и spread — коэффициент глянцевитости;
H=surf 1 (...) — строит поверхность и возвращает дескрипторы поверхности и источников света.
По умолчанию вектор S задает углы азимута и возвышения в 45°. Используя команды cla, hold on, view(AZ,EL), surfl (...) и hold off, можно получить дополнительные возможности управления освещением. Надо полагаться на упорядочение точек в X, Y, и Z матрицах, чтобы определить внутреннюю и внешнюю стороны параметрических поверхностей. Попробуйте транспонировать матрицы и использовать surfHX' .Y' ,Z'), если вам не понравился результат работы этой команды. Для вычисления векторов нормалей поверхности surf1 требует в качестве аргументов матрицы с размером по крайней мере 3x3.
Ниже представлен пример применения команды surfl:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X. ^ 2+Y.^2+0.3);
» surfl(X,Y,Z)
» colormap(gray)
» shading interp
» colorbar
Построенная в этом примере поверхность представлена на рис. 6.29.
Рис. 6.29. График поверхности с имитацией ее освещения точечным источником
Сравните этот рисунок с рис. 6.26, на котором та же поверхность построена без имитации ее освещения.
Примечание
Нетрудно заметить определенную логику в названиях графических команд. Имя команды состоит из основного слова и суффикса расширения. Например, все команды построения поверхностей имеют основное слово surf (сокращение от surface — поверхность) и суффиксы: с — для контурных линий поверхности, l — для освещенности и т. д. Это правило облегчает запоминание многочисленных команд графики.
Средства управления подсветкой и обзором фигур
Рекомендуется с помощью команды help ознакомиться с командами, задающими управление подсветкой и связанными с ней оптическими эффектами:
diffuse — задание эффекта диффузионного рассеяния;
lighting — управление подсветкой;
material — имитация свойств рассеивания света различными материалами;
specular — задание эффекта зеркального отражения.
Следующие три команды позволяют управлять углами просмотра, под которыми рассматривается видимая в графическом окне фигура:
view — задание положения точки просмотра;
viewmtx — задание и вычисление матрицы вращения;
rotateSd — задание поворота трехмерной фигуры.
В ряде случаев применением этих команд можно добиться большей выразительности трехмерных объектов. Скорость построения таких графиков сильно зависит от аппаратной поддержки графики в конкретном ПК. Так, использование современных видеоадаптеров с графическим процессором и поддержкой средств OpenGL позволяет повысить скорость построения трехмерных графиков в несколько раз и добиться большей их выразительности.
Построение графиков функций трех переменных
Графики сечений функций трех переменных строит команда slice (в переводе — «ломтик»). Она используется в следующих формах:
slice(X.Y.Z.V.Sx,Sy,Sz) — строит плоские сечения объемной фигуры V в направлении осей x,y,z c позициями, задаваемыми векторами Sx, Sy, Sz. Массивы X, Y, Z задают координаты для V и должны быть монотонными и трехмерными (как возвращаемые функцией meshgrid) с размером MxNxP. Цвет точек сечений определяется трехмерной интерполяцией в объемной фигуре V;
slice(X,Y.Z.V,XI.YI.ZI) — строит сечения объемной фигуры V по поверхности, определенной массивами XI, YI, ZI;
slice (... 'method') — при построении задается метод интерполяции, который может быть одним из следующих: 'linear', 'cubic' или 'nearest'. По умолчанию используется линейная интерполяция — 'linear';
slice(V.Sx.Sy.Sz) или slice(V.XI.YI.ZI) - подразумевается X=1:N, Y=1:M, Z=1:P;
H=slice(...) — строит сечение и возвращает дескриптор объекта класса surface.
График примера, приведенного ниже, представлен на рис. 6.30.
» [x.y.z]= meshgrid(-2:.2:2. -2:.25:2. -2:.16:2);
» v = sin(x) .* ехр(-х.*2 - у. ^ 2 - z. ^ 2);
» slice(x.y.z.v.[-1.2 .8 2].2.[-2 -.2])
График трехмерной слоеной поверхности
Иногда бывают полезны графики трехмерных слоеных поверхностей, как бы состоящие из тонких пластинок — слоев. Такие поверхности строит функция water-fall (водопад):
waterfal(...) — строит поверхность, как команда mesh(...), но без показа ребер сетки. При ориентации графика относительно столбцов следует использовать запись waterfall(Z 1 ) или waterfall (X ' ,Y' ,Z').
Рассмотрим пример применения команды waterfall:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.*2+Y.*2+0.3);
» waterfall(X.Y.Z)
» colormap(gray)
» shading interp
Соответствующий график показан на рис. 6.30.
Рис. 6.30. Трехмерная слоеная поверхность
Tрехмерные контурные графики
Трехмерный контурный график представляет собой расположенные в пространстве линии равного уровня, полученные при расслоении трехмерной фигуры рядом секущих плоскостей, расположенных параллельно опорной плоскости фигуры.
При этом в отличие от двумерного контурного графика линии равного уровня отображаются в аксонометрии. Для получения трехмерных контурных графиков используется команда contourS:
contour3(...) — имеет синтаксис, аналогичный команде contour(...), но строит линии равного уровня в аксонометрии с использованием функциональной окраски (окраска меняется вдоль оси Z).
Полезные частные формы записи этой команды:
contour3(Z) — строит контурные линии для поверхности, заданной массивом Z, без учета диапазона изменения х и у;
contour3(Z.n) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей (по умолчанию n=10);
contour3(X,Y,Z) — строит контурные линии для поверхности, заданной массивом Z, с учетом изменения х и у. Двумерные массивы X и Y создаются с помощью функции meshgrid;
contours(X.Y.Z.n) — строит то же, что предыдущая команда, но с использованием п секущих плоскостей.
Пример применения команды contourS:
» contour3(peaks,20)
» colormap(gray)
Соответствующий данному примеру график представлен на рис. 6.31. В данном случае задано построение двадцати линий уровня.
Рис. 6.31. Трехмерный контурный график для функции peaks
С командой contourS связаны следующие одноименные функции (не выполняющие графические построения):
C=contour3(...) — возвращает матрицу описания контурных линий С для использования командой clabel;
[С, H]=contour3(...) — возвращает массив С и вектор-столбец Н дескрипторов объектов path для каждой линии уровня. Свойство UserData каждого объекта содержит значение высоты для соответствующего контура.
Установка титульной надписи
После того как график уже построен, MATLAB позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда:
title( 'string ' ) — установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.
Пример применения этой команды будет дан в следующем разделе.
Установка осевых надписей
Для установки надписей возле осей х, у и z используются следующие команды:
xlabe('String')
ylabeK ('String')
zlabelС ('String')
Соответствующая надпись задается символьной константой или переменной 'String ' . Пример установки титульной надписи и надписей по осям графиков приводится ниже:
» [X.Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» surfl(X,Y,Z)
» colorbar
» colormap(gray)
» shading interp
» xlabel'Axis X')
» ylabel'Axis Y')
» zlabel'Axis Z')
» title 'Surface graphic')
Построенный в этом примере график трехмерной поверхности показан на рис. 6.32.
Рис. 6.32. График трехмерной поверхности с титульной надписью и надписями по координатным осям
Сравните его с графиком, показанным на рис. 6.29. Надписи делают рисунок более наглядным.
Ввод текста в любое место графика
Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text:
text(X.Y. 'string') — добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y). Если X и Y заданы как одномерные массивы, то надпись помещается во все позиции [x(i) ,y(i)];
text(X,Y,Z. 'string') — добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z.
В приведенном ниже примере надпись «График функции sin(x ^ 3)» размещается под кривой графика в позиции (-4, 0.7):
» х=10:0.1:10;
» plot(x,sin(x).^3)
» text(-4.0.7,'Graphic sin(x)^3')
График функции с надписью у кривой показан на рис. 6.33.
Рис. 6.33. Пример ввода надписи в поле графика функции
Математически правильной записью была бы sin 3 x.
Попробуйте ввести самостоятельно:
» х=-10:0.1:10;
» plot(x,sin(x).^3)
» text(-4.0.7,'Graphic (sin(х)^3)')
Функция h=text(...) возвращает вектор-столбец h дескрипторов объектов класса text, дочерних для объектов класса axes. Следующий пример вычисляет дескриптор h
» h=text(.25. .5. '\ite^{i\omega\tau} = cos(\omega\tau) + ... i sin(\omega\tau)')
3.0022 и выводит в пустом графике математическую формулу в формате ТеХ вида:
e jwt = cos(wt) + sin(wt)
Пары координат X,Y (или тройки X,Y,Z для трехмерных графиков) могут сопровождаться парами «имя параметра/значение параметра» для задания дополнительных свойств текста. Пары координат X,Y (или тройки X,Y,Z для трехмерных графиков) могут быть полностью опущены, при этом все свойства, в том числе и позиция текста, задаются с помощью пар «имя параметра/значение параметра», заданных по умолчанию.
Используйте функцию get(H), где Н — дескриптор графического объекта (в нашем случае графического объекта класса text), чтобы просмотреть список свойств объекта и их текущие значения. Используйте set(H), чтобы просмотреть список свойств графических объектов и их допустимых значений.
Позиционирование текста с помощью мыши
Очень удобный способ ввода текста предоставляет команда gtext:
gtext('string') — задает выводимый на график текст в виде строковой константы ' string' и выводит на график перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста;
gtext (С) — позволяет аналогичным образом разместить многострочную надпись из массива строковых переменных С.
Пример применения команды gtext:
» х=-15:0.1:15;
» plot(x, sin(x). ^ 3)
» gtext('Function sin(x).^3')
При исполнении этого примера вначале можно увидеть построение графика функции с большим крестом, перемещаемым мышью (рис. 6.34).
Установив перекрестие в нужное место графика, достаточно нажать любую клавишу или любую кнопку мыши, и на этом месте появится надпись (рис. 6.35).
Рис. 6.34. График функции с крестообразным маркером, перемещаемым мышью
Высокая точность позиционирования надписи и быстрота процесса делает данный способ нанесения надписей на графики одним из наиболее удобных.
Рис. 6.35. График функции с надписью, установленной с помощью мыши
Вывод пояснений
Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend:
legend(stringl,string2. strings,...) — добавляет к текущему графику легенду в виде строк, указанных в списке параметров;
legend (H.stringl,string2. strings,...) — помещает легенду на график, содержащий объекты с дескрипторами Н, используя заданные строки как метки для соответствующих дескрипторов;
legend( АХ . ...) — помещает легенду в осях (объект класса axes) с дескриптором АХ;
legend (М) — размещает легенду, используя данные из строковой матрицы М;
legend OFF — устраняет ранее выведенную легенду;
legend — перерисовывает текущую легенду, если таковая имеется;
legend( I egendhandl е) — перерисовывает легенду, указанную дескриптором legendhandle;
legend (....Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos:
Pos=0 — лучшее место, выбираемое автоматически;
Pos=l — верхний правый угол;
Pos=2 — верхний левый угол;
Pos=3 — нижний левый угол;
Pos=4 — нижний правый угол;
Pos=-l — справа от графика.
Чтобы перенести легенду, установите на нее курсор, нажмите левую кнопку мыши и перетащите легенду в необходимую позицию.
[legh,objh]=legend(...) — эта функция возвращает дескриптор объекта для легенды (legh) и матрицу objh, содержащую дескрипторы объектов, из которых легенда состоит.
Команда 1 egend может использоваться с двумерной и трехмерной графикой и со специальной графикой — столбцовыми и круговыми диаграммами и т. д. Двойным щелчком можно вывести легенду на редактирование.
Пример, приведенный ниже, строит график трех функций с легендой, размещенной в поле графика:
» x=-2*pi:0.1*pi :2*pi;
» y1=sin(x);
» y2=sin(x).^2;
» plot(x,y1, '-m' ,x,y2 '-.+r')
» legend( 'Function 1', 'Function 2');
Полученный график представлен на рис. 6.36.
Рис. 6.36. График трех функций с легендой в поле графика
Незначительная модификация команды legend (применение дополнительного параметра -1) позволяет построить график трех функций с легендой вне поля графика:
» x=-2*pi:0.1*pi:2*pi;
» yl=sin(x);
» y2=sin(x). ^ 2;
» y3=sin(x). ^ 3;
» plot(x,y1,'-m',x,y2.'-.+r',x,y3,'--ok')
» legend(' Function 1','Function 2','Function 3'.-l);
Соответствующий график показан на рис. 6.37.
Рис. 6.37. График трех функций с легендой, расположенной вне поля графика
В данном случае недостатком можно считать сокращение полезной площади самого графика. Остальные варианты расположения легенды пользователю предлагается изучить самостоятельно. Следует отметить, что применение легенды придает графикам более осмысленный и профессиональный вид. При необходимости легенду можно переместить мышью в подходящее место графика.
Маркировка линий уровня на контурных графиках
К сожалению, контурные графики плохо приспособлены для количественных оценок, если их линии не маркированы. В качестве маркеров используются крестики, рядом с которыми располагаются значения высот. Для маркировки контурных графиков используются команды группы clabel:
clabel(CS.H) — маркирует контурный график с данными в контурной матрице CS и дескрипторами объектов, заданными в массиве Н. Метки вставляются в разрывы контурных линий и ориентируются в соответствии с направлением линий;
clabel (CS.H, V) — маркируются только те уровни, которые указаны в векторе V. По умолчанию маркируются все контуры. Позиции меток располагаются случайным образом;
clabel (CS.H, 'manual') — маркирует контурные графики с установкой положения маркеров с помощью мыши. Нажатие клавиши Enter или кнопки мыши завершает установку маркера. При отсутствии мыши для перехода от одной линии уровня к другой используется клавиша пробела, а для перемещения надписи используются клавиши перемещения курсора;
clabel (CS), clabel (CS.V) и clabel (CS. 'manual') — дополнительные возможности маркировки контурных графиков. При отсутствии аргумента h метки не ориентируются вдоль линий контуров; точную позицию метки отмечает значок «+» (далее на рис. 6.39 показан именно этот вариант).
Пример применения команды clabel приводится ниже:
» [X,Y]=meshgrid([-3:0.1:3]);
» Z=sin(X)./(X.^2+Y.^2+0.3);
» C=contour(X.Y.Z.10);
» colormap(gray)
» clabel(С)
Рис. 6.38. Контурный график с маркированными линиями уровня
Рис. 6.38 показывает построение контурного графика с маркированными линиями уровня.
Функция H=cl abel (...) маркирует график и возвращает дескрипторы создаваемых при маркировке объектов класса TEXT (и, возможно, LINE).
Управление свойствами осей графиков
Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию:
axis([XMIN XMAX YMIN YMAX]) — установка диапазонов координат по осям х и у для текущего двумерного графика;
axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) - установка диапазонов координат по осям х, у и z текущего трехмерного графика;
axis auto — установка параметров осей по умолчанию;
axis manual — «замораживает» масштабирование в текущем состоянии, чтобы при использовании команды hold on следующие графики использовали те же параметры осей;
axis tight — устанавливает диапазоны координат по осям в соответствии с диапазонами изменения данных;
axis ij — задает «матричную» прямоугольную систему координат с началом координат в левом верхнем углу, ось i — вертикальная, размечаемая сверху вниз, ось j — горизонтальная и размечается слева направо;
axis xy — устанавливает декартову систему координат с горизонтальной осью х, размечаемой слева направо, и вертикальной осью у, размечаемой снизу вверх. Начало координат размещается в нижнем левом углу;
axis equal — включает масштаб с одинаковым расстоянием между метками по осям х, у и z;
axis image — устанавливает масштаб, при котором пикселы изображения становятся квадратами;
axis square — устанавливает текущие оси в виде квадрата (или куба в трехмерном случае) с одинаковым расстоянием между метками и одинаковой длиной осей;
axis normal — восстанавливает масштаб, отменяя установки axis equal и axis square;
axis vis3d — «замораживает» пропорции осей для возможности поворота трехмерных объектов;
axi s off — убирает с осей их обозначения и маркеры; 0 axis on — восстанавливает ранее введенные обозначения осей и маркеры;
V=axis — возвращает вектор-строку, содержащую коэффициенты масштабирования для текущего графика. Если текущий график двумерный, то вектор имеет 4 компонента, если трехмерный — 6 компонентов.
Следующий пример иллюстрирует применение команды axis при построении двумерного графика функции одной переменной:
» х=-5:0.1:5;
» plot(x,sin(x));
» axis([-10 10 -1.5 1.5])
На рис. 6.40 показан график, который строится в этом примере.
Рис. 6.39. Пример задания масштаба осей двумерного графика
Обратите внимание, что теперь масштабы осей заданы командой axis, а не диапазоном изменения значений х и у.
Включение и выключение сетки
В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды grid позволяют задавать построение сетки или отменять это построение:
grid on — добавляет сетку к текущему графику;
grid off — отключает сетку;
grid — последовательно производит включение и отключение сетки.
Рис. 6.40. График синусоиды с сеткой разметки
Команды grid устанавливают свойства объектов XGrid, Ygrid и Zgrid для текущих осей. Ниже приведен пример из предшествующего раздела с добавлением в него команды grid:
» х=-5:0.1:5;
» plot(x,sin(x));
» axis([-10 10 -1.5 1.5])
» grid on
Построенный граф ик показан на рис. 6.40.
Сравните этот график с графиком на рис. 6.39, на котором сетка отсутствует. Нетрудно заметить, что наличие сетки облегчает количественную оценку координат точек графика.
Наложение графиков друг на друга
Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах:
hold on — обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим;
hold off — отменяет режим продолжения графических построений;
hold — работает как переключатель, последовательно включая режим продолжения графических построений и отменяя его.
Команда hold on устанавливает значение add для свойства NextPlot объектов figure и axes, a hold off устанавливает для этого свойства значение replace. Рекомендуется также ознакомиться с командами ishold, newplot, figure и axes.
Рис. 6.41. Графики синусоиды и трех параметрических функций в одном окне
Приведенный ниже пример показывает, как с помощью команды hold on на график синусоиды накладываются еще три графика параметрически заданных функций:
& raquo; х--5:0.1:5;
» plot(x,sin(x))
» hold on
» plot(sin(x),cos(x))
» plot(2*sin(x),cos(x))
» plot(4*sin(x),cos(x))
» hold off
Графики построенных функций показаны на рис. 6.42.
В конце приведенного фрагмента программы команда hold off отключает режим добавления графиков к ранее построенным графикам.
Разбиение графического окна
Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков:
subplot — создает новые объекты класса axes (подокна);
subplot(m.n.p) или subplot(mnp) — разбивает графическое окно на тхп подокон, при этом m — число подокон по горизонтали, n — число подокон по вертикали, а р— номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам);
subplot(H), где Н — дескриптор для объекта axes, дает альтернативный способ задания подокна для текущего графика;
subplot( 'position',[left bottom width height]) — создает подокно с заданными нормализованными координатами (в пределах от 0.0 до 1.0);
subplot(lll) Hclf reset — удаляют все подокна и возвращают графическое окно в обычное состояние.
Рис. 6.42. Четыре графика различного типа, размещенных в подокнах одного окна
Следующий пример иллюстрирует применение команды subplot:
» х=-5:0.1:5;
subplot(2.2.1).plot(x.sin(x))
subplot(2.2.2).plot(sin(5*x).cos(2*x+0.2))
subplot(2.2.3).contour(peaks)
subplot(2.2.4).surf(peaks)
В этом примере последовательно строятся четыре графика различного типа, размещаемых в разных подокнах (рис. 6.42).
Следует отметить, что для всех графиков возможна индивидуальная установка дополнительных объектов, например титульных надписей, надписей по осям и т. д.
Изменение масштаба графика
Для изменения масштаба двумерных графиков используются команды класса zoom:
zoom — переключает состояние режима интерактивного изменения масштаба для текущего графика;
zoom (FACTOR) устанавливает масштаб в соответствии с коэффициентом FACTOR;
zoom on — включает режим интерактивного изменения масштаба для текущего графика;
zoom off — выключает режим интерактивного изменения масштаба для текущего графика;
zoom out — обеспечивает полный просмотр, т. е. устанавливает стандартный масштаб графика;
zoom xon или zoom yon — включает режим изменения масштаба только по оси х или по оси у;
zoom reset — запоминает текущий масштаб в качестве масштаба по умолчанию для данного графика;
zoom(FIG,OPTION) — применяется к графику, заданному дескриптором FIG, при этом OPTION может быть любым из перечисленных выше аргументов.
Команда zoom позволяет управлять масштабированием графика с помощью мыши. Для этого надо подвести курсор мыши к интересующей вас области рисунка. Если команда zoom включена (on), то нажатие левой кнопки увеличивает масштаб вдвое, а правой — уменьшает вдвое. При нажатой левой кнопке мыши можно выделить пунктирным черным прямоугольником нужный участок графика — при отпускании кнопки он появится в увеличенном виде и в том масштабе, который соответствует выделяющему прямоугольнику.
Рассмотрим работу команды zoom на следующем примере:
» х=-5:0.01:5;
» plot(x,sin(x. ^ 5)./(x.^5+eps))
» zoom on
Рис. 6.44 показывает график функции данного примера в режиме выделения его участка с помощью мыши.
После прекращения манипуляций левой кнопкой мыши график примет вид, показанный на рис. 6.44. Теперь в полный размер графического окна будет развернуто изображение, попавшее в выделяющий прямоугольник.
Рис. 6.43. Выделение части графика мышью при использовании команды zoom
Команда zoom, таким образом, выполняет функцию «лупы», позволяющей наблюдать в увеличенном виде отдельные фрагменты сложных графиков. Однако следует учитывать, что для наблюдения фрагментов графиков при высоком увеличении они должны быть заданы большим количеством точек. Иначе вид отдельных фрагментов и тем более особых точек (в нашем случае это точка при х вблизи нуля) будет существенно отличаться от истинного.
Рис. 6.44. График выделенного участка
Установка палитры цветов
Поскольку графика MATLAB обеспечивает получение цветных изображений, в ней есть ряд команд для управления цветом и различными световыми эффектами. Среди них важное место занимает установка палитры цветов. Палитра цветов RGB задается матрицей MAP из трех столбцов, определяющих значения интенсивности красного (red), зеленого (green) и синего (blue) цветов. Их интенсивность задается в относительных единицах от 0.0 до 1.0. Например, [0 0 0] задает черный цвет, [1 1 1] — белый цвет, [0 0 1] — синий цвет. При изменении интенсивности цветов в указанных пределах возможно задание любого цвета. Таким образом, цвет соответствует общепринятому формату RGB.
Для установки палитры цветов служит команда colormap, записываемая в следующих формах:
colormap( 'default') — устанавливает палитру по умолчанию, при которой распределение цветов соответствует радуге;
colormap(MAP) — устанавливает палитру RGB, заданную матрицей MAP;
C=colormap — функция возвращает матрицу текущей палитры цветов С. m-файл с именем colormap устанавливает свойства цветов для текущего графика.
Команда help graphSd наряду с прочим выводит полный список характерных палитр, используемых графической системой MATLAB:
hsv — цвета радуги;
hot — чередование черного, красного, желтого и белого цветов;
gray — линейная палитра в оттенках серого цвета;
bone — серые цвета с оттенком синего;
copper — линейная палитра с оттенками меди;
pink — розовые цвета с оттенками пастели;
white — палитра белого цвета;
flag — чередование красного, белого, синего и черного цветов;
lines — палитра с чередованием цветов линий;
colorcube — расширенная палитра RGB;
jet — разновидность палитры HSV;
prism — призматическая палитра цветов;
cool — оттенки голубого и фиолетового цветов;
autumn — оттенки красного и желтого цветов;
spring — оттенки желтого и фиолетового цветов;
winter — оттенки синего и зеленого цветов;
summer — оттенки зеленого и желтого цветов.
Все эти палитры могут служить параметрами команды colormap, например colormap(hsv) фактически устанавливает то же, что и команда colormap( 'default'). Примеры применения команды colormap будут приведены в следующих разделах.
Установка соответствия между палитрой цветов и масштабом осей
При использовании функциональной окраски важное значение имеет установка соответствия между палитрой цветов и масштабом координатных осей. Так, выбор ограниченного диапазона интенсивностей цветов может привести к тому, что цветовая гамма будет блеклой и функциональная закраска не будет достигать своих целей. С помощью команды caxis можно обеспечить соответствие между палитрой цветов и масштабом осей:
caxis(V) — с помощью двухэлементного вектора V со списком элементов [cmin cmax] устанавливает диапазон используемой палитры цветов для объектов surface и patch, создаваемых такими командами, как mesh, pcolor и surf. Пикселы, цвета которых выходят за пределы [cmin cmax], приводятся к граничным цветам диапазона;
caxis('manual') — устанавливает шкалу цветов по текущему интервалу параметра, задающего цвет;
caxis('auto') — устанавливает типовое масштабирование шкалы цветов, при котором диапазон используемых цветов соответствует диапазону изменения данных от -Inf до Inf. Линии и грани с цветами, равными NaN, отсекаются.
Функция caxis возвращает двухэлементный вектор с элементами [cmin cmax] для текущего светового эффекта, m-файл с именем caxi s задает свойства dim и CLimMode объекта axes (см. команду help axes).
Окраска поверхностей
Для окраски поверхностей используется команда shading, которая управляет объектами surface (поверхность) и patch (заплата), создаваемыми командами и функциями surf, mesh, pcolor, fill и fill 3. Команда shading (затенение) работает с параметрами и имеет следующий вид:
shading flat — задает окраску ячеек или граней в зависимости от текущих данных;
shading interp — задает окраску с билинейной интерполяцией цветов;
shading faceted — равномерная раскраска ячеек поверхности (принята по умолчанию).
Эти команды устанавливают свойства EdgeColor и FaceColor для графических объектов surface и patch в зависимости от того, какая из команд — mesh (сетчатая поверхность) или surf (затененная поверхность) — используется. Примеры применения команд shading уже приводились.
Установка палитры псевдоцветов
Довольно часто возникает необходимость представления той или иной матрицы в цветах. Для этого используют псевдоцвета, зависящие от содержимого ячеек. Такое представление реализуют команды класса pcolor:
pcolor (С) — задает представление матрицы С в псевдоцвете;
pcolor(X,Y,C) — задает представление матрицы С на сетке, формируемой векторами или матрицами X и Y.
Рис. 6.45. Пример применения команды pcolor
Функция pcolor возвращает дескриптор объекта класса surface. Пример применения команды pcolor приводится ниже:
» z=peaks(40);
» colormap(hsv)
» pcolor(z)
График, построенный в этом примере, показан на рис. 6.45.
Характер расцветки поверхности командой pcolor существенно зависит от выбора палитры цветов. В приведенном примере она задается командой colormap.
Создание закрашенного многоугольника
Для создания закрашенного пятна в виде многоугольника может использоваться команда patch:
patch(X,Y,C) — создает закрашенный многоугольник, вершины которого заданы векторами X и Y в текущей системе координат, а спецификация окраски задана вектором цветовой палитры С. Можно также задавать цвет с помощью символьной переменной 'color' вида 'г', 'д', 'b', 'с', 'т', 'у', V или V. X и Y могут быть матрицами;
patch(X,Y.Z,C) — создает многоугольник в трехмерной системе координат, при этом матрица Z должна иметь тот же размер, что X и Y.
Следующий пример поясняет применение команды patch:
» Х=[1 2 3 2 1];
» Y=[1 2 0 5 1];
» patch(X,Y,[1 0 0])
Построенный многоугольник показан на рис. 6.46.
В данном случае многоугольник окрашен красным цветом, поскольку вектор цветов [1 0 0] указывает на наличие только красной составляющей цвета (другие составляющие представлены относительным уровнем 0).
Рис. 6.46. Многоугольник, построенный командой patch
Окраска плоских многоугольников
Для построения окрашенных в заданный цвет плоских многоугольников может использоваться команда fill (заполнить):
fill(X.Y.C) — строит закрашенный плоский многоугольник, вершины которого задаются векторами X и Y с цветом, заданным С. Многоугольник должен быть замкнутым. Для построения нескольких прямоугольников параметры команды должны быть матрицами.
fill(Xl.Yl,Cl,X2.Y2,C2,...) — представляет собой другой способ построения нескольких закрашенных прямоугольников.
Следующий пример показывает построение четырехугольника, закрашенного синим цветом:
» Х=[1 2 3 2 1];
» Y=[5 0.5 0 4 5]:
» fill(X,Y,[0 0 1])
Построения, реализованные этим примером, показаны на рис. 6.47.
Рис. 6.47. Построение закрашенного четырехугольника на плоскости
Функция H=fill (...) строит график и возвращает вектор-столбец дескрипторов для созданных объектов класса patch по одному дескриптору на каждый объект.
Вывод шкалы цветов
При использовании функциональной окраски весьма полезным является вывод шкалы цветов командой colorbar. Ее варианты перечислены ниже:
colorbar( 'vert') — выводит вертикальную шкалу цветов на текущий график;
colorbar( 'horiz') — выводит горизонтальную шкалу цветов на текущий график;
colorbar(H) — выводит шкалу цветов на график с дескриптором Н с автоматическим размещением шкалы по вертикали или по горизонтали в зависимости от соотношения размеров графика;
colorbar — устанавливает в текущий график новую вертикальную шкалу цветов или обновляет уже имеющуюся.
Следующий пример показывает применение команды colorbar совместно с командой fill3:
» fill3(rand(5,4),rand(5,4),rand(5,4),rand(5,4))
» colorbar('vert')
Более подробно функция f ill3 будет рассмотрена ниже. На рис. 6.48 показана полученная при запуске этого примера картина. Следует отметить, что, поскольку многоугольники строятся со случайными значениями координат вершин, то при каждом запуске будет наблюдаться новая картина.
Рис. 6.48. Случайные многоугольники с функциональной окраской и вертикальной шкалой цветов
Функция H=col orbar(...) возвращает дескриптор для объекта axes со шкалой цветов.
Цветные плоские круговые диаграммы
Закрашенные секторы часто используются для построения круговых диаграмм. Для этого в MATLAB служит команда piе:
pie(X) — строит круговую диаграмму по данным нормализованного вектора X/ SUM(X). SUM(X)—сумма элементов вектора. Если SUM(X)<=1.0, то значения в X непосредственно определяют площадь секторов;
pie(X.EXPLODE) — строит круговую диаграмму, у которой отрыв секторов от центра задается вектором EXPLODE, который должен иметь тот же размер, что и вектор данных X.
Следующий пример строит цветную круговую диаграмму с пятью секторами, причем последний сектор отделен от остальных:
» Х=[1 2 3 4 5];
» pie(X,[0 0 0 0 2])
Построенная диаграмма показана на рис. 6.49.
Рис. 6.49. Плоская круговая диаграмма
Функция Н=рiе(...) строит график и возвращает вектор дескрипторов созданных объектов классов patch и text.
Другие команды управления световыми эффектами
Здесь мы только отметим некоторые дополнительные команды, связанные с управлением цветовыми палитрами:
col style — выделение цвета и стиля графика из заданного массива;
rgbplot — изображение палитры;
hsv2rgb — преобразование палитры HSV в палитру RGB;
rgb2hsv — преобразование палитры RGB в палитру HSV;
brighten — управление яркостью;
contrast — управление контрастом;
hidden — управление показом невидимых линий;
whitebg — управление цветом фона.
Рекомендуется ознакомиться с этими командами, используя команду help.
Окрашенные многоугольники в пространстве
Для закраски многоугольников, определенных в пространстве, служит команда f ill3. Ниже представлены основные ее формы:
fill3(X,Y,Z,C) — строит закрашенный многоугольник в пространстве с данными вершин, хранящимися в векторах X, Y и Z, и цветом, заданным палитрой С. При построении нескольких закрашенных многоугольников параметры команды должны быть матрицами;
fill3(Xl.Yl,Zl,Cl.X2,Y2,Z2,C2,...) — другой вариант построения нескольких закрашенных многоугольников в пространстве;
fill 3 — функция, возвращающая вектор-столбец дескрипторов объектов класса patch.
Следующий пример показывает действие команды fill3:
» fill3(rand(5,4),rand(5,4).rand(5.4).rand(5.4))
На рис. 6.50 представлены построенные в этом примере закрашенные многоугольники. Поскольку координаты вершин многоугольников формируются с применением генератора случайных чисел, то наблюдаемая картина оказывается случайной и не будет повторяться при последующих запусках данного примера.
Рис. 6.50. Закрашенные многоугольники в пространстве
Следует обратить внимание на то, что команда pie3 дает функциональную закраску построенных фигур.
Ц ветные объемные круговые диаграммы
Иногда используются объемные круговые диаграммы. Для их построения служит команда pie3:
pie3(...) — аналогична команде pie(...), но дает построение объемных секторов.
В приведенном ниже примере строится объемная диаграмма с отделением двух секторов, показанная на рис. 6.51:
» Х=[1 2 3 4 5];
» pie3(X,[0 0 1 0 1])
Рис. 6.51. Объемная круговая диаграмма
Функция H=pie3(...) строит график и возвращает вектор, содержащий дескрипторы созданных объектов классов patch, surface и text.
Построение цилиндра
Для построения цилиндра в виде трехмерной фигуры применяется функция
cylinder:
[X,Y,Z]=cylinder(R,N) — создает массивы X, Y и Z, описывающие цилиндрическую поверхность с радиусом R и числом узловых точек N для последующего построения с помощью функции surf(X.Y.Z);
[X,Y,Z]=cyl1nder(R) и [X,Y,Z]=cylinder — подобны предшествующей функции для N=20 и R=[1 1].
Пример построения объемного цилиндра:
» [X,Y,Z]=cylinder(10.30);
» surf(X,Y,Z,X)
На рис. 6.52 показан результат построения цилиндра для данного примера.
Рис. 6.52. Построение цилиндра
Естественность воспроизведения цилиндра существенно зависит от графической команды, используемой для его построения. Команда surf дает возможность задать функциональную окраску с цветом, определяемым вектором X, что делает представление цилиндра достаточно наглядным.
Построение сферы
Для расчета массивов X, Y и Z координат точек сферы как трехмерной фигуры используется функция sphere:
[X.Y,Z]=sphere(N) — генерирует матрицы X, Y и Z размера (N+l)x(N+l) для последующего построения сферы с помощью команд surf (X, Y.Z) или surfl (X. Y.Z);
[X,Y.Z]=sphere — аналогична предшествующей функции при N=20.
Пример применения этой функции:
» [X,Y,Z]=sphere(30);
» surfl(X,Y,Z)
На рис. 6.53 показана построенная в этом примере сфера. Хорошо видны геометрические искажения (сфера приплюснута), связанные с разными масштабами по координатным осям.
Рис. 6.53. Построение сферы
Обратите внимание на то, что именно функциональная окраска сферы придает ей довольно реалистичный вид. В данном случае цвет задается вектором Z.
Трехмерная графика с треугольными плоскостями
К числу специальных видов графики относится построение объемных фигур с помощью плоских треугольников. Для построения таких фигур в виде каркаса (без окраски и отображения плоскостей) используется команда trimesh:
trimesh(TRI,X,Y,Z,C) — построение объемной каркасной фигуры с треугольниками, специфицированными матрицей поверхности TRI, каждая строка которой содержит три элемента и задает одну треугольную грань путем указания индексов, по которым координаты выбираются из векторов X, Y, Z. Цвета ребер задаются вектором С;
trimesh(TRI.X.Y.Z) — построение, аналогичное предшествующему при C=Z, т. е. с цветом ребер, зависящим от значений высоты;
H=trimesh(...) — строит график и возвращает дескрипторы графических объектов;
trimesh(..., 'param'. 'value'. 'param', 'value'...) — добавляет значения 'value' для параметров 'param'.
Рис. 6.54. Одна из объемных фигур, построенных командой trimesh
Следующий пример иллюстрирует применение команды trimesh для построения случайной объемной фигуры, параметры которой задаются с помощью генератора случайных чисел:
» х = rand(1,40);
» у = rand(1,40);
» z = sin(x.^y);
» tri = delaunay(x,y);
» tnmesh(tri .x.y.z)
Рис. 6.55. Один из рисунков, построенных командой trisurf
Одна из построенных фигур показана на рис. 6.54. Другая, абсолютно аналогичная, по заданию входных параметров команда — tnsurf(...) — отличается только закраской треугольных областей, задающих трехмерную фигуру. Если в приведенном выше примере заменить функцию trimesh на trisurf, то можно получить графики, подобные приведенному на рис. 6.55.
Обратите внимание на то, что рис. 6.55 также принадлежит к множеству случайных графических построений. Поэтому возможность его буквального повторения отсутствует.
Что нового мы узнали?
В этом уроке мы научились:
Строить различные графики функций одной переменной.
Строить диаграммы и гистограммы.
Строить на плоскости графики специальных типов.
Использовать функции задания массивов трехмерной графики.
Строить трехмерные графики поверхностей и фигур.
Использовать световые эффекты.
Наносить на графики надписи и легенды.
Маркировать оси и линии графиков, наносить на них сетку.
Строить в одном окне несколько графиков и менять их масштаб.
Менять палитры цвета и условия освещения.
Строить графические объекты на плоскости и в пространстве.
Урок №7.
Специальная графика
Движение точки на плоскости и в пространстве
Основные средства анимации
Объекты дескрипторной графики
Операции над графическими объектами
Свойства объектов и управление ими
Управление средствами Open GL
Управление прозрачностью графических объектов
Основные команды для создания пользовательского интерфейса
Растровая графика
Пакет прикладных программ Images
Галерея трехмерной графики
В этом уроке мы рассмотрим некоторые виды специальной графики. Это прежде всего анимационная и дескрипторная (handle) графика.
Движение точки на плоскости
Для отображения движения точки по траектории используется команда comet. При этом движущаяся точка напоминает ядро кометы с хвостом. Используются следующие формы представления этой команды:
comet (Y) — отображает движение «кометы» по траектории, заданной вектором Y;
comet (X.Y) — отображает движение «кометы» по траектории, заданной парой векторов Y и X;
comet (X.Y.p) — аналогична предшествующей команде, но позволяет задавать длину хвоста кометы (отрезка траектории, выделенного цветом) как p*1ength(Y), где length(Y) - размер вектора Y. а р<1. По умолчанию р = 0.1 [ Обратите внимание, что если Вы используете лупу, как-то иначе пытаетесь изменить размер Вашего рисунка или используете вкладку Copy Figure меню Edit, то график, полученный при использовании comet или cometS, исчезает. — Примеч. ред. ]
Рис. 7.1. Стоп-кадр изображения, полученный из примера использования команды comet
Следующий пример иллюстрирует применение команды comet:
» Х=0:0.01:15;
» comet(X,sin(X) )
Стоп-кадр изображения показан на рис. 7.1. «Хвост кометы» на черно-белом рисунке заметить трудно, поскольку он представляет собой отрезок линии с цветом, отличающимся от цвета линии основной части графика.
Движение точки в пространстве
Есть еще одна команда, которая позволяет наблюдать движение точки, но уже в трехмерном пространстве. Это команда comet3:
comet3(Z) — отображает движение точки с цветным «хвостом» по трехмерной кривой, определенной массивом Z;
comet3 (X.Y.Z) — отображает движение точки «кометы» по кривой в пространстве, заданной точками [X(i),Y(i),Z(i)];
comet3(X,Y,Z,p) — аналогична предшествующей команде с заданием длины «хвоста кометы» как p*1ength(Z). По умолчанию параметр р равен 0.1.
Ниже представлен пример применения команды cometS:
» W=0:pi/500:10*pi;
» comet3(cos(W),sin(W)+W/10.W)
На рис. 7.2 показан стоп-кадр изображения, созданного командой comet().
Рис. 7.2. Стоп-кадр изображения, созданного командой comet3
Разумеется, движение точки по заданной траектории как в двумерном, так и в трехмерном пространстве является самым простейшим примером анимации. Тем не менее эти средства существенно расширяют возможности графической визуализации при решении ряда задач динамики.
Основные средства анимации
Для более сложных случаев анимации возможно применение техники мультипликации. Она сводится к построению ряда кадров изображения, причем каждый кадр появляется на некоторое время, затем стирается и заменяется на новый кадр, несколько отличающийся от предшествующего. Если это отличие незначительно, то создается иллюзия плавного перемещения объекта.
Отметим кратко основные команды, реализующие анимацию в системе MATLAB:
capture — захват видеоизображения;
getframe — создание кадра для анимации;
moviein — выполнение анимации;
rotate — вращение фигуры;
frame2im — преобразование кадра в графический образ;
im2frame — преобразование графического образа в кадр.
Применение некоторых из этих команд мы рассмотрим далее на конкретных примерах. К сожалению, серьезные задачи анимации обычно требуют применения программных средств — главным образом циклов. Мы рассмотрим их далее, но представляется, что читатели знакомы с понятием циклов, так что приведенные примеры не будут слишком сложны. В крайнем случае, оставьте их разбор до знакомства с основами программирования в системе MATLAB (урок 20).
Вращение фигуры — логотипа MATLAB
Рассмотрим вначале не очень сложный пример вращения сложной трехмерной поверхности — логотипа системы MATLAB, который представлен файлами logo.m и logo.mat. Ниже представлен фрагмент программы, обеспечивающий вращение этой поверхности (фигуры) относительно осей системы координат:
if ~exist('MovieGUIFlag'). figNumber=0; end;
load logo
h=surfl(L.source);
colormap(M);
ax=[7 52 7 52 -.5 .8]:
axis(ax);
axis on:
shading interp;
m=moviein(25):
for n=l:25.
rotate(h.[0 90],15.[21 21 0]);
h=surfl(get(h.'XData'),get(h.'YData').
get(h.'ZData'),source);
axis(ax);
axis on;
shading interp;
m(:,n)=mvframe(figNumber,24); end;
mvstoretfigNumber.m);
Эта программа имеет два блока: в первом задается исходная функция и ее образ, а во втором (с циклом for) выполняется создание кадров и их последовательное воспроизведение, создающее эффект анимации. На рис. 7.3 показан стоп-кадр полученной анимации.
Рис. 7.3. Стоп-кадр программы, обеспечивающей вращение фигуры — логотипа MATLAB
Волновые колебания мембраны
Принцип мультипликации легко распространить на существенно более сложные задачи анимации. В качестве иллюстрации можно рассмотреть системный пример vibes, демонстрирующий волнообразные колебания тонкой пластины — мембраны. Ниже представлен переработанный файл данного примера, в котором сокращены подробные комментарии на английском языке и введены только для пояснения комментарии на русском языке, их следует изъять при попытке запустить программу:
%Волновые колебания мембраны
%Переработка файла VIBES фирмы MathWorks. Inc.
if~exist('MovieGUIFlag'): figNumber=0; end;
hlpStr= ...
[' Это пример анимации - наблюдение колебаний '
' трехмерной поверхности - мембраны. ']:
mvinit(figNumber.hlpStr):
% Загрузка данных функции
load vibesdat;
[n.n] = size(Ll):
nh = fix(n/2): .
x = (-nh:nh)/nh;
% Вычисление коэффициентов
clear с
for k = 1:12.
eval(['c(k) = L' num2str(k) '(24,13)73:'])
end;
% Установка графических параметров
axis([-11-11-11]); caxis(26.9*[-1.5 1]);
colormap(hot); hold on
% Генерация кадров мультипликации
delt = 0.1;
nf names =12:
M - moviein(nf names):
fon k - l:nf names,
% Коэффициенты
t = k*delt;
s = c.*sin(sqnt(1ambda)*t);
% Амплитуды
L = s(l)*Ll + s(2)*L2 + s(3)*L3 + s(4)*L4 +
s(5)*L5 + s(6)*L6 + .
S(7)*L7 + s(8)*l_8 + s(9)*L9 + s(10)*L10 +
s(ll)*Lll + s(12)*L12;
% Скорость мультипликации
s = s .* lambda;
V = s(l)*Ll + s(2)*L2 +'sC3)*L3 +
s(4)*L4 + s(5)*L5 + s(6)*L6 + ...
s(7)*L7 + s(8)*L8 + s(9)*L9 + s(10)*L10 +
s(11)*L11 + s(12)*L12;
% График поверхности; цвет задается скоростью
V(l:nh.l:nh) = NaN*ones(nh,nh);
Cla
sunf(x.x.L.V);
axis off
% Создание кадров мультипликации
M(:.k) - mvfname(f1gNumben,nfnames): end : hold off
%=======================================
% Запись кадров мультипликации
mvstone( figNumben , M) ;
Этот пример дан с целью иллюстрации, и подробно эту программу мы описывать не будем. К сожалению, в представленном виде (с русскоязычными комментариями), данная программа MATLAB 6 неработоспособна. Чтобы она работала, эти комментарии должны быть убраны или заменены англоязычными. В этом случае проблем с запуском программы не будет.
Объекты дескрипторной графики
Как уже отмечалось, графические средства MATLAB базируются на низкоуровневой графике, которая называется дескрипторной (описательной), или handle графикой. По существу, эта графика обеспечивает объектно-ориентированное программирование как всех рассмотренных выше графических команд, так и пользовательского интерфейса. Графический редактор дескрипторной графики Property Editor в MATLAB 6 является основным редактором графики и нами уже использовался. Хотя обычный пользователь может даже не знать о существовании дескрипторной графики ввиду того, что слово «дескрипторная» в сокращенное название графического редактора не входит, все же надо учитывать, что именно дескрипторная графика дает новые, подчас уникальные возможности создания пользовательских графических программ MATLAB 6, не говоря уже о том, что она помогает понять, каким образом реализованы графические средства системы.
Центральным понятием дескрипторной графики является графический объект. Имеются следующие типы таких объектов:
root (корень) — первичный объект, соответствующий экрану компьютера;
figure (рисунок) — объект создания графического окна;
uicontrol (элемент управления, определенный пользователем) — объект создания элемента пользовательского интерфейса;
axes (оси) — объект, задающий область расположения графика в окне объекта figure;
uimenu (определенное пользователем меню) — объект создания меню;
uicontextmenu (определенное пользователем контекстное меню) - объект создания контекстного меню;
image (образ) — объект создания растровой графики;
line (линия) — объект создания линии;
patch (заплата) — объект создания закрашенных фигур;
rectangle (прямоугольник) - объект создания закрашенных прямоугольников;
surface (поверхность) — объект создания поверхности;
text (текст) — объект создания текстовых надписей;
light (свет) — объект создания эффектов освещенности.
Объекты подчас взаимосвязаны и могут обращаться друг к другу для получения того или иного графического эффекта.
Создание графического окна и управление им
Прежде чем мы рассмотрим применение дескрипторной графики на реальных примерах, отметим команды и функции, которые предназначены для создания графических окон и управления ими:
figure — открыть чистое графическое окно;
gcf — получить дескриптор графического окна figure;
elf — очистить графическое окно;
shg — показать ранее свернутое графическое окно;
close (закрыть) — закрыть графическое окно;
refresh (обновить) — обновить графическое окно.
Эти команды и функции достаточно очевидны, и мы не будем обсуждать их подробно. Заметим, что команды help name или doc name позволяют уточнить назначение той или иной команды или функции с обобщенным именем name.
Создание координатных осей и управление ими
Еще одна группа простых команд служит для создания координатных осей и управления ими:
axes (оси) — создать оси координат;
box (ящик) — построить прямоугольник вокруг рисунка;
сlа — убрать построения axes;
gса — получить дескриптор графического объекта axes;
hold — сохранить оси координат;
ishold — проверка статуса hold (1, если оси сохранены, и 0 в противоположном случае).
Эти команды также достаточно очевидны. Заметим, что их можно использовать и в обычной (высокоуровневой) графике, например для устранения осей из уже созданного графика.
Пример применения объекта дескрипторной графики
Объем и направленность данной книги не позволяют подробно описать все многообразие возможностей дескрипторной графики. Ограничимся пока одним примером. Пусть надо построить линию,-проходящую через три точки с координатами (0,1), (2,4) и (5,-1). Для этого воспользуемся объектом line, который порождается одноименной графической функцией:
» line([0 2 5],[1 4 -1],'color ', 'blue')
На рис. 7.5 построена заданная линия с помощью дескрипторной команды line, которая явно не входит в высокоуровневую графику. Однако нетрудно понять, что именно эта команда составляет основу высокоуровневой команды pi ot, описанной ранее.
Особенность команды 1 i ne заключается в явном задании всех условий построения графика: координат конкретных точек, параметра цвета 'Color' и самого цвета 'blue' (синий). В итоге строятся два отрезка прямой, проходящих через заданные точки и имеющие синий цвет.
Рис. 7.4. Построение отрезков прямой объектом line
Дескрипторы объектов
С понятием объектов дескрипторной графики связана особая характеристика объектов — дескриптор (описатель). Его можно понимать как некое число — своеобразный идентификатор («распознаватель») объектов.
Рис. 7.5. Графики пяти функций, представляющих значения элементов магической матрицы magic(5)
Дескриптор объектов root всегда равен 0, а дескриптор объектов figure (рисунок) — это целое число, указывающее на номер графического окна. Дескрипторы других объектов — это числа с плавающей запятой. По значениям дескрипторов MATLAB идентифицирует объекты. Дескриптор одного такого объекта представляет собой одно число, а если объектов несколько — несколько чисел (вектор). Например, следующие команды строят пять графиков, представляющих значения элементов магической матрицы (магического квадрата), в одном окне:
» A=magic(5);
» h=plot(A)
h=
3.0013
101.0009
102.0004
103.0004
104.0004
В данном случае вектор h содержит дескрипторы элементов графика, показанного на рис. 7.5.
Мы еще раз обращаем ваше внимание на то, что дескрипторы дают лишь внутреннее описание того или иного объекта и ассоциировать их явно с привычными параметрами, например координатами или цветом объекта, не следует. Более того, нет никаких оснований считать их одинаковыми для разных версий MATLAB, для разных компьютерных платформ и даже для одинаковых команд, но в разных местах сессии.
Операции над графическими объектами
К графическим объектам применяется ряд операций:
set — установка свойств (параметров) графического объекта;
get — вывод свойств графического объекта;
reset — восстановить свойства графического объекта по умолчанию;
delete — удалить созданный графический объект;
gсо — возвращает дескриптор текущего графического объекта;
gcbo — возвращает дескриптор объекта, чья функция в данный момент выполняется;
gcbf — возвращает дескриптор окна, содержащего объект, функция которого в данный момент выполняется;
drawnow — выполнить очередь задержанных графических команд;
findobj — найти объекты с заданными свойствами;
copyobj — скопировать объект и порожденные им объекты.
Кроме того, имеются три утилиты, связанные с операциями над объектами:
closereq — закрыть окно по запросу;
ishandle — проверить дескриптор на истинность;
newplot — восстановить свойства объекта, измененные nextPlot.
Назначение большинства этих операций достаточно очевидно. Мы остановимся на двух наиболее важных операциях, связанных с контролем и установкой свойств объектов.
Свойства объектов — команда get
Каждый объект дескрипторной графики имеет множество параметров, определяющих его свойства. Вернемся к нашему примеру с построением графика из двух отрезков линии и повторим этот пример в следующем виде:
» h=line([0 2 5].[1 4 -1],'Color','blue')
h =
3.0010
Теперь объект имеет дескриптор h и его значение выведено наряду с построением графика. Команда get (name) выводит свойства объекта с заданным именем. Для нашего объекта это выглядит следующим образом:
» get(h) Color = [001]
EraseMode = normal
LineStyle=-
LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [0 2 5]
YData = [14 -1]
ZData - []
BeingDeleted = off
ButtonDownFcn =
Children = []
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [100.001]
Selected =off
SelectionHighlight = on
Tag =
Type=line
UIContextMenu = []
UserData = []
Visible = on
Изменение свойств объекта — команда set
С помощью команды set можно изменить отдельные свойства объекта дескрипторной графики. Эта команда имеет множество параметров, и с ними можно ознакомиться с помощью команд help set или doc set. Ограничимся примером — допустим, нам надо сменить цвет линии с голубого на красный. Для этого достаточно выполнить следующую команду: » set(h,'Color'.'red')
Обратите внимание, что при этом цвет сменится на ранее построенном рисунке с дескриптором h.
Управление работой средств OpenGL
Как уже неоднократно отмечалось, одной из новинок системы MATLAB 6 является поддержка графических средств OpenGL. Эти средства обычно используются чаще всего при реализации трехмерной графики, например при осуществлении сло.жной функциональной окраски поверхностей и трехмерных фигур с учетом характера освещения и структуры материала (рендеринг), при осуществлении анимации для таких объектов, при построении поверхностей из многоугольников, осуществлении эффектов прозрачности и т. д. Целый ряд примеров этого уже приводился как в уроке 6, так и в данном уроке.
Средства OpenGL в MATLAB задействованы автоматически. Это значит, что они будут использованы, если видеокарта компьютера пользователя поддерживает их и если установлены соответствующие драйверы видеоадаптера. На уровне средств стандартной графики MATLAB никаких функций управления OpenGL нет. Однако дескрипторная графика такую возможность предоставляет с помощью команды opengl selectionjnode
Эта команда задает графические режимы осуществления рендеринга. Параметр selectl onjnode может принимать следующие значения:
autosel ect — задает автоматическое применение OpenGL и вводит в работу средства OpenGL при наличии возможностей для этого;
neverselect — отключает автоматическое применение OpenGL;
advise — выводит сообщение о возможности применения OpenGL, но режим рендеринга (RenderMode) устанавливается вручную.
Просто команда opengl выводит сообщение о текущем значении selectionjnode, например:
» opengl
ans =
AutoSelect
А команда opengl info выводит данные о средствах OpenGL ПК, на котором установлена система MATLAB, например:
» opengl info
Version = 1.1.0
Vendor = Microsoft Corporation
Renderer = GDI Generic
MaxTextureSize = 1024
Extensions = GL_WIN_swapJiint GL_EXT_bgra
GL_EXT_paletted_texture
Возможно также управление средствами рендеринга и OpenGL на уровне средств дескрипторной графики с помощью команды set, например: set(gcf.'Renderer','OpenGL')
Управление прозрачностью графических объектов
Пожалуй, наиболее впечатляющие и внешне заметные результаты дает применение свойства прозрачности изображений (transparency), доступное только при использовании средств Open GL. Это свойство позволяет строить изображения полупрозрачных струй жидкостей или газов, в которых видны их сгустки или вкрапления твердых тел, изображения галактик со звездными вкраплениями, изображения клеток в биологических объектах и т. д.
В книгу «MATLAB. Using MATLAB Graphics. Version 6.0» введен обширный раздел, посвященный управлению прозрачностью объектов. Ниже представлена краткая «выжимка» из этого раздела.
Свойство прозрачности основано на представлении изображений в виде отдельных слоев, что обычно требует применения многомерных массивов. Данные о прозрачности размещаются в матрице размера mxn AlphaData, элементы которой должны иметь тип double или uint8 (элементы типа NaN недопустимы). Возможности задания прозрачности поддерживаются графическими файлами с расширением PNG. В изображениях, хранящихся в этих файлах, возможна поддержка кодирования цветов с разным разрешением - вплоть до 48 бит при RGB графике.
Для управления прозрачностью служит специальная системная переменная alpha, значение которой лежит в пределах от 0 до 1. Если построенный вами графический объект содержит элементы прозрачности, то для их наблюдения нужно задать команду alpha(x), где х задает уровень прозрачности. Например, задав alpha(0.5), мы получим «полупрозрачное» изображение, на котором будут видны обычно скрытые его детали.
Приведем наглядный пример использования свойств прозрачности из описания графики системы MATLAB, где строится график скорости жидкости на пути ракеты подводного базирования в бесконечной емкости:
[х у z v] = flow;
p=patch(isosurface(x,y,z,v,-3));
isonormals(x,y,z,v,p);
set(p,'facecolor','blue','edgecolor','none');
daspect([1 1 1]);
view(3); axis tight; grid on;
camlight; lighting gouraud;
Здесь строится график трехмерной фигуры flow (течение). Она представлена тремя массивами своих точек х, у и z и дополнительным массивом класса AlphaData — v. При первом построении свойство прозрачности отсутствует (по умолчанию) и построенная фигура будет иметь вид, представленный на рис. 7.6.
Рис. 7.6. Трехмерная фигура в обычном представлении (без свойства прозрачности)
Если исполнить команду alpha(0.5), то в массиве AlphaData будут заданы эле-менхы, обеспечивающие степень прозрачности 0.5. При этом изображение объекта будет иметь вид, представленный на рис. 7.7. Теперь на нем четко видна скрытая ранее твердая сердцевина фигуры и даже проглядывают координатные оси.
Рис. 7.7. Трехмерная фигура с установкой свойства прозрачности
Более подробные сведения об использовании свойства прозрачности можно найти в обширной документации по графике в формате PDF. Эта документация в виде файла graphg.pdf объемом свыше 12 Мбайт поставляется с системой MAT-LAB 6.
Примеры, иллюстрирующие возможности дескрипторной графики
Теперь рассмотрим более сложные примеры, наглядно демонстрирующие возможности дескрипторной графики. Воспользовавшись File > New > M-File или edit msl.m. создадим файл msl.m следующего содержания:
[х,у] = meshgrid([-2:.4:2]);
Z =sin(x. ^ 2+y.^2);
fh = figureCPosition'.[350 275 400 300].'Color ' . V);
ah = axes('Color'.[.8 .8 .8].'XTick'.[-2 -1 0 1 2]....
'YTick',[-2 -1 0 1 2]};
sh = surfaceCXData'.x.'YData'.y.'ZData'.Z....
'FaceColor',get(ah.'Color')+.....
'EdgeColor'. 'k'.'Marker'.'o'....
'MarkerFaceColor',[.5 1 .85]):
В этом файле заданы три объекта: прямоугольник fh — объект класса figure, оси с метками ah — объект класса axes и трехмерная поверхность sh — объект класса surface. Она является результатом наложения объектов fh и ah друг на друга. При этом объект ah класса axes явно наследует свойства объекта fh класса figure. Наследование здесь проявляется в том, что при задании свойства «цвет граней» (FaceColor) объекта sh используется осветление (добавлением константы 0.1) цвета осей, полученного при помощи функции get (ah. color).
Команда v1ew(3) изменяет точку обзора трехмерной поверхности. Раньше, когда параметры осей были жестко заданы, мы смотрели на поверхность строго сверху. Теперь команда v1ew(3) установила точку обзора трехмерных графиков, принятую по умолчанию.
Теперь создадим второй файл — ms2.m:
h(l) = axes('Position',[0 Oil]);
sphere;
h(2) = axesCPosition'.[0 0 .4 .6]);
peaks:
h(3) = axes('Position'.[0 .5 .5 .5]);
sphere:
h(4) = axes('Position'.[.5 0 .4 .4]);
sphere;
h(5) = axes('Position 1 .[.5 .5 .5 .3]):
cylinder([0 0 0.5]);
set(h,'Visible 1 .'off):
alpha(0.l):
set(gcf.'Renderer'.'opengl')'
Здесь задано 5 трехмерных объектов: три сферы разных размеров, поверхность peaks и цилиндр.
Запустив файл ms2, мы получим еще более интересную картину. Заново будет вычислена величина z, а затем построены изображения пяти фигур:
z = 3*(1-х). ^ 2.*ехр(-(х. ^ 2) - (у+1). ^ 2) ...
- 10*(х/5 - х.'З - у."5).*ехр(-х.^2-у.^2) ...
- 1/3*ехр(-(х+1).^2 - у.^2)
Последовательность наложения фигур, заданных в файле ms2, определяется последовательностью их появления в файле. Любопытен вид цилиндра — похоже, что произошедшее с ним преобразование связано с изменением системы координат с декартовой на сферическую.
Рис. 7.8. Комбинированный рисунок, полученный при запуске файла ms2.m после запуска ms1.m
Чтобы понять, какие из объектов наследуют свойства других объектов, следует рассмотреть диаграмму иерархии объектов дескрипторной графики MATLAB, что объекты surface расположены ниже объектов axes, а те, в свою очередь, расположены ниже объектов класса figure. Поэтому ясно, что в случае запуска файла msl свойства сетки, построенной с применением объекта axes, будут унаследованы объектом sh, построенным командой surface.
[ Обратите внимание, что трехмерная графика в этом примере строится с рендерингом MATLAB 6 ('opengl'). В MATLAB 5.3 без установки патча Open GL по умолчанию был бы выбран рендеринг с использованием Z-буфера и на некоторых компьютерах были бы возможны искажения. Не было бы прозрачной фигуры. В MATLAB 6 при включенном режиме видеоадаптера TrueColor можно пропустить последнюю команду. Но при необходимости вывода изображения на печать set(gcf,'Renderer','opengl') можно быстро отредактировать и заменить на set(gcf,'Renderer', 'painters'). — Примеч. ред. ]
Все объекты второго файла — ms2 — относятся к классу axes. Именно поэтому они строятся поверх объектов, показанных на рис. 7.10. Координаты всех пяти трехмерных фигур (см. рис. 7.11) жестко заданы в соответствующих командах axes. В заключение этого раздела следует еще раз отметить, что дескрипторная графика рассчитана не столько на конкретных пользователей, использующих MATLAB как прикладную программу, сколько на опытных разработчиков программного обеспечения для этой системы. Разумеется, это не исключает полезную возможность изменения параметров графиков путем настройки свойств графических объектов, что особенно наглядно видно из последних приведенных примеров. Многие тайны дескрипторной графики познаются только в ходе практических экспериментов с ней.
Основные команды для создания пользовательского интерфейса
Опытные пользователи нередко используют MATLAB для создания своих собственных систем. Этому во многом способствует идеология системы — хранение большей части команд и функций в виде m-файлов. Простота коррекции файлов и отсутствие необходимости явно объявлять создание новых команд и функций привели к появлению множества программных систем на базе MATLAB, особенно в таких областях, как решение задач линейной алгебры, моделирование различных систем и структур и т. д.
В новой версии MATLAB дескрипторная графика позволяет конструировать детали пользовательского интерфейса. Полный список команд и функций для проектирования пользовательского интерфейса можно получить, выполнив команду help uitools.
Ниже перечислены все команды и функции данного назначения. Функции пользовательского интерфейса GUI:
ulcontrol — создание управляющего элемента;
ulmenu — создание пользовательского меню;
ginput — графический ввод с помощью мыши.
Перечень команд и функций пользовательского интерфейса:
dragrect — создание выделяющего прямоугольника с помощью мыши;
rbbox — растягивание прямоугольника мышью;
selectmoveresize — интерактивное выделение, перемещение и копирование объектов с помощью мыши;
waitforbuttonpress — ожидание нажатия клавиши клавиатуры или кнопки мыши в окне;
waltfor — прекращение выполнения программы в ожидании уничтожения заданного графического объекта или изменения его свойств;
uiwait — прекращение выполнения программы в ожидании вызова функции uiresume или закрытия заданного графического окна;
inresume — возобновить выполнение после блокировки;
uisuspend — прекращение интерактивного состояния фигуры;
uirestore — возобновление интерактивного состояния фигуры.
Средства проектирования пользовательского интерфейса:
guide — создание GUI;
align — выровнять положение объектов интерфейса;
cbedit — изменение повторного вызова объектов;
menuedit — изменение меню;
propedit — изменение свойств объектов.
Средства создания диалоговых окон:
dialog — создание диалогового окна;
axlimdlg — ограничение размеров диалогового окна;
errordlg — создание окна с сообщением об ошибке;
helpdlg — создание справочного окна;
inputdlg — создание окна диалога ввода;
listdlg — создание окна диалога для выбора вариантов параметра из списка;
menu — создание меню диалогового ввода;
msgbox — создание окна сообщений;
questdlg — создание окна запроса;
warndlg — создание окна предупреждения;
uigetfile — создание стандартного окна открытия файлов;
uiputfile — создание стандартного окна записи файлов;
uisetcolor — создание окна выбора цвета;
uisetfont — создание окна выбора шрифта;
pagedlg — создание диалогового окна параметров страницы;
printdlg — создание диалогового окна печати;
waitbar — создание окна с индикатором прогресса.
Создание меню:
makemenu — создать структуры меню;
menubar — устанавливать типовые свойства для объекта MenuBar;
umtoggle — изменять статус параметра "checked" для объекта uimenu;
winmenu — создать подменю для меню Window.
Создание кнопок панели инструментов и управление ими:
btngroup — создать кнопку панели инструментов;
btnstate — запросить статус кнопки;
btnpress — управление кнопкой;
btndown — нажать кнопку;
btnup — отпустить кнопку
Утилиты задания свойств объектов figure/axes:
сlruprop — удалить свойство объекта;
getuprop — запросить свойство объекта;
setuprop — установить свойство объекта.
Вспомогательные утилиты:
all child — запросить все порожденные объекты;
findall — найти все объекты;
hidegui — скрыть/открыть объекты GUI;
edtext — интерактивное редактирование объектов text;
getstatus — запросить свойства строки объекта figure;
setstatus — установить свойства строки объекта figure;
popupstr — запросить свойства строки выпадающего меню;
remapflg — изменить положение объекта figure;
setptr — установить указатель на объект figure;
getptr — получить указатель на объект figure;
overobj — запросить дескриптор объекта, над которым находится курсор мыши.
Таким образом, MATLAB содержит обширный набор команд и функций для создания типовых элементов пользовательского интерфейса. Объем данной книги не позволяет останавливаться на детальном описании этих функций, тем более что оно имеется в справочной системе. Поэтому мы ограничимся единственным примером: создание кнопки, на которой можно щелкнуть мышью и перевести ее в нажатое состояние.
Пример создания объекта интерфейса
Ниже представлена программа (распечатка m-файла с именем ui), которая при запуске создает 4 объекта интерфейса:
k1=uicontrol('Style','pushbutton'....
'Units'.'normalized','Position',[.7 .5 .2 .1],...
'String'.'click here');
k2=ui control('Style'.'pushbutton
'Units'.'normalized','Position',[.6 .3 .2 .1]....
'String'.'click here');
ck = uicontrol('Style', 'pushbutton', 'String', 'Clear'....
'Position', [150 150 100 70], 'Callback', 'da');
hpop = uicontrol('Style', 'popup'....
'String', 'hsv|hot|cool|gray'....
'Position', [30 320 100 50],...
'Callback ' , 'setmap');
Первые два объекта k1 и k2 — это малые кнопки с надписью click here («щелкни здесь»). Объект ck — это большая кнопка Clear (кстати, действующая). Объект hpop — раскрывающийся список (тоже действующий, хотя и содержащий незаполненные поименованные позиции). Для создания всех этих объектов используется команда ui control с соответствующими параметрами, задающими стиль (вид) объекта интерфейса, место его размещения и надпись (на кнопках). На рис. 7.9 построены все эти объекты, причем раскрывающийся список показан в открытом состоянии.
Рис. 7.9. Пример построения объектов пользовательского интерфейса
Дсскрипторная графика MATLAB позволяет создавать любые детали современного пользовательского интерфейса. Однако надо отметить, что пока она не поддерживает визуально-ориентированное программирование, при котором генерация нужных кодов осуществляется автоматически визуальным выбором нужного объекта интерфейса и размещением его в необходимом месте. Такой вид программирования поддерживает пакет Simulink, который в этой книге описан достаточно кратко.
Растровая графика
Одна из отличительных черт системы MATLAB — мощные возможности в реализации обработки изображений (images) класса BitMap (так называемая растровая графика .bmp). Весьма небольшое число команд такой графики включено в ядро системы. Часть из них была рассмотрена выше. Остановимся на некоторых наиболее важных командах.
Команды image(A) и imagesc(A) служат для представления содержимого матрицы А в виде рисунка. Так, исполнив команду
» image(25+5*peaks)
можно наблюдать представление матрицы трехмерной поверхности peaks в наглядном «цветовом» масштабе (рис. 7.10). При этом цвет каждой точки поверхности задается ее высотой.
Рис. 7.10. Представление матрицы peaks в виде растрового рисунка
Для достаточно представительного отображения матрицы peaks в данном случае пришлось ввести нормирующие множитель 5 и слагаемое 25. Другая команда — Imagesc(A) — этого уже не требует. Результат исполнения приведенной ниже команды показан на рис. 7.11:
» imagesc(peaks)
На уровне ядра графических операций поддерживаются довольно очевидные функции преобразования цветовых моделей:
RGB=hsv2rgb(HSV) — преобразует матрицу изображения HSV в матрицу изображения RGB;
HSV=rgb2hsv(RGB) — преобразует матрицу изображения RGB в матрицу изображения HSV.
Работа этих функций наглядна лишь при цветной графике. Поскольку иллюстрации в книге черно-белые, мы ограничимся лишь упоминанием о данных функциях преобразования.
Рис. 7.11. Представление матрицы с помощью команды imagesc
Для получения детальной информации о графических файлах используется команда imfinfo( 'name'), где name — имя файла с расширением. Пример получения информации о файле saturn.tif (снимок планеты Сатурн) приводится ниже:
» imfinfo('saturn.tif')
ans =
ans = |
|
Filename : ' E : \MATLABR12\tool box\images\imdemos\saturn .tif ' |
|
FileModDate: |
'26-Oct-1996 01:12:02' |
FileSize: |
144184 |
Format : |
'tif w |
FormatVersion: |
[] |
Width: |
438 |
Height: |
328 |
BitOepth: |
8 |
Color-Type: |
'grayscale' |
FormatSignature: |
[73 73 42 0] |
ByteOrder: |
'little-endian' |
NewSubfileType: |
0 |
BitsPerSample: |
8 |
Compression: |
'Uncompressed' |
Photomet ri с I nterpretati on : |
'BlacklsZero' |
StripOffsets: |
[19x1 double] |
SamplesPerPixel : |
1 |
RowsPerStrip: |
18 |
StripByteCounts: |
[19x1 double] |
XResolution: |
72 |
YResolution: |
72 |
ResolutionUnit: |
'Inch' |
Colormap: |
[] |
PlanarConfiguration: |
'Chunky' |
TileWidth: |
[] |
Ti 1 eLength : |
[] |
TileOffsets: |
[] |
TileByteCounts: |
[] |
Orientation: |
1 |
Fill Order: |
1 |
GrayResponseUnit: |
0.0100 |
MaxSampleValue: |
255 |
MinSampleValue: |
0 |
Thresholding: |
1 |
ImageDescription: |
[1x168 char] |
Более интересна работа MATLAB с реальными изображениями. Она положена в основу многочисленных средств создания иллюстраций в пакетах прикладных программ системы MATLAB, и прежде всего специализированного пакета Images (полное название пакета — Image Processing Toolbox (Пакет обработки изображений)).
Пакет прикладных программ Images
Основные средства по обработке изображений входят в пакет прикладных программ Images. С его возможностями можно детально ознакомиться, выполнив следующую команду:
» help images
Image Processing Toolbox.
Version 2.2.2 (R12) 10-Mar-2000
Release information.
Readme = Display information about
versions 2.0. 2.1. and 2.2.
Toolbox preferences.
iptgetpref = Get value of Image Processing
Toolbox preference.
iptsetpref = Set value of Image Processing
Toolbox preference. Demos.
dctdemo- 2-0 DCT image compression demo.
edgedemo - Edge detection demo.
firdemo = 2-D FIR filtering and filter design demo.
imadjdemo - Intensity adjustment and histogram
equalization demo.
landsatdemo = Landsat color composite demo.
nrfiltdemo = Noise reduction filtering demo.
qtdemo = Quadtree decomposition demo.
roidemo = Region-of-interest processing demo.
В обширном списке (выше он дан лишь выборочно) содержится более сотни команд для работы с растровыми изображениями. Эти изображения могут быть получены со сканера, цифрового фотоаппарата либо от видеокамеры, подключенной к компьютеру через видеобластер или подобное устройство.
Пакет Images поддерживает следующие возможности:
отображение рисунков различных графических форматов (в том числе с высоким разрешением) на экране дисплея;
расширенные функции записи рисунков в файл, считывание их из файла и получение информации о файле;
выполнение геометрических операций с графическими объектами, таких как разворот или интерполяция данных;
операции на уровне элементарных частей изображений — пикселов;
аналитические операции с изображениями;
осуществление компрессии и декомпрессии изображений;
выполнение различных видов фильтрации изображений и конструирование фильтров;
выполнение различных преобразований изображений;
поразрядные (битовые) операции с рисунками;
операции задания и преобразования цветов;
преобразование типов и форматов рисунков;
демонстрация возможностей пакета;
организация показа слайдов.
Объем данной книги не позволяет описать этот пакет подробно, но в этом нет и особого смысла. Если вы уяснили методы работы с системой MATLAB, вам не составит особого труда ознакомиться с составом всех команд и функций пакета и опробовать их на практике. В связи с этим мы остановимся лишь на нескольких демонстрационных примерах.
Примеры применения пакета Images
Есть ряд способов ознакомиться с весьма обширными и впечатляющими возможностями пакета Images: с помощью демонстрационных примеров (Demos) в справочной базе данных системы, путем непосредственного запуска этих примеров (список приводился выше), запуском отдельных команд и т. д.
Пример реконструкции изображений с управлением оригиналом, создаваемым изображением и ошибкой реконструкции представлен в файле dctdemo. Он выводит свое окно со средствами пользовательского интерфейса. Можно задать выбор той или иной исходной картинки, задать степень компрессии изображения и визуально наблюдать за характером преобразований (рис. 7.16). Для просмотра следует нажать кнопку Apply (Применить), кнопка Close (Закрыть) закрывает окно, а кнопка Info выводит информацию о примере.
Другой важной сферой применения пакета Images является фильтрация изображений, например с целью их очистки от шумовых помех. В качестве исходного изображения взят фотоснимок планеты Сатурн, затем с помощью генератора случайных чисел на него нанесены помехи в виде точек. Имеется возможность оценить степень очистки изображения от помех при использовании различных алгоритмов фильтрации, представленных в пакете Images рядом функций.
Следующий пример иллюстрирует возможность изменения яркости изображения. Кривая яркости может устанавливаться перемещением ее точек с помощью мыши. Можно задавать линейный или нелинейный вид этой кривой и тут же наблюдать изменение характеристик изображения. Вид кривой существенно влияет на яркость и контрастность изображений и позволяет выполнять тоновую коррекцию, например осветлять слишком темные изображения или, наоборот, затемнять светлые изображения.
Наконец, последний в этом уроке пример (остальные вы можете просмотреть самостоятельно) показывает действенность алгоритма повышения четкости изображения в произвольной его области. В нашем случае эта область ограничена треугольником. В окне можно наблюдать (и выбирать) исходное изображение, задавать область действия алгоритма и просматривать результирующее изображение.
Даже эти примеры дают возможность оценить обширные возможности пакета Images в технике обработки реальных изображений.
Примеры программирования задач со средствами пакета Images
Вы можете ознакомиться с каждым демонстрационным примером пакета Images, выполнив команду type fname, где fname — имя файла с демонстрационным примером. Однако следует отметить, что демонстрационные программы являются весьма сложными, поскольку создают окна в виде стандартных панелей с современными элементами пользовательского интерфейса и переключателями выбора вариантов. Мы рекомендуем читателю воздержаться от знакомства с этими программами до ознакомления с уроком 20, в котором систематически описаны средства программирования системы MATLAB. А пока мы ограничимся парой характерных примеров, наглядно показывающих, что при работе с системой MATLAB вполне можно руководствоваться народной поговоркой: «Не боги горшки обжигают».
Рассмотрим, к примеру, задачу фильтрации искаженного помехами произвольного изображения, представленного некоторым файлом. Реализующая эту сложную и весьма эффективную операцию программа выглядит следующим образом:
% Picture filter
I = imreadCsaturn.tif);
h = [1 2 1: 0 0 0: -1 -2 -1];
I2 - filter2(h.I);
imshow(I2,[ ]). colorbar
В результате исполнения этой простой и вполне очевидной программы можно получить отфильтрованное изображение из файла saturn.tif . Хотите попробовать обработать какой-либо снимок? Все, что для этого нужно, — подготовить снимок в нужном формате (например, tif) и заменить во второй строке имя демонстрационного файла на имя вашего файла.
Рассмотрим еще один достаточно простой пример — построение сферы в виде глобуса и наклеивание на полушарие этого глобуса изображения карты погоды:
load earth sphere: h - findobjC'Type'.'surface');
hemisphere= [ones(257.125).X.ones(257,125)];
set(h.'CData'.f1i pud(hemi sphere).'FaceColor'.
'texturemap')
colormap(map)
axis equal
view([90 0])
setCgca.'CameraViewAngleMode'.'manual')
view([65 30])
Пакет Images можно рассматривать как полезный инструмент для создания новых алгоритмов и методов обработки изображений и обучения специалистов. Применение его непосредственно для обработки изображений вполне возможно, но все же едва ли целесообразно. Дело в том, что обширнейшие возможности по обработке изображений открывают профессиональные графические пакеты, например Adobe Photoshop, Ulead Photolmpact, Corel Draw и др., в которых реализованы самые современные методы обработки изображений и использованы последние новации пользовательского интерфейса. В этом случае достоинство средств MATLAB проявляется только в математической прозрачности реализаций алгоритмов обработки изображений.
Галерея трехмерной графики
Для знакомства с возможностями трехмерной графики и построением пользовательского интерфейса MATLAB имеет галерею (Gallery) в виде профессионально выполненных графических программ. Доступ к ним возможен как из режима демонстрации (команда Examples and Demos в меню Help командного окна MATLAB), так и путем запуска команды из командной строки с указанием имени соответствующего файла.
Галерея представлена фигурами и файлами, список которых приведен в табл. 7.1.
Таблица 7.1. Состав галереи трехмерной графики MATLAB
|
|||
|
|||
|
Knot |
Knot.m |
Завязанный узел |
|
Quiver |
Quivdemo. m |
Векторное объемное поле |
|
Klein II |
Kleinl. m |
Объемное кольцо |
|
Cruller |
Cruller.m |
Объемное кольцо Мебиуса |
|
Hoops |
Tory4.m |
Четыре объемных обруча |
|
Slosh |
Spharm2.m |
Построение фигуры, напоминающей улитку |
|
Modes |
Modes. m |
Демонстрация фаз анимации трехмерной поверхности |
|
Logo |
Logo.m |
Построение логотипа системы MATLAB |
Обратите внимание на то, что иногда имя файла не совпадает с именем фигуры в галерее. Некоторые из фигур галереи мы уже описывали — это knot (см. рис. 4.4) и logo . Ниже приведено еще несколько примеров, которые дают наглядное представление о возможностях дескрипторной графики системы MATLAB.
Полезно обратить внимание на то, что в этом примере сам по себе график — двумерный. Объемный вид поверхности достигается сочетанием функциональной окраски с изображением графика векторного поля с помощью стрелок.
Команда kleinl строит график объемной ленты Мебиуса с одним перекручиванием. Этот график хорошо иллюстрирует хотя и одноцветную, но функциональную закраску фигуры с имитацией ее освещения источником света, расположенным вверху справа, и реализацией эффектов отражения света.
Команда cruller строит объемное кольцо Мебиуса с двойным перекручиванием. В данном случае используется обычная функциональная окраска с сохранением линий каркаса фигуры.
Команда tory4 строит четыре переплетающихся друг с другом тора (объемных кольца) в пространстве (рис. 7.25). Наглядности этой картины также способствует функциональная окраска торов и видимые линии каркаса. Обратите внимание, что невидимые линии удалены.
Любопытную фигуру, напоминающую раковину улитки, строит команда spharm2. Здесь интересно применение многоцветной функциональной окраски с использованием интерполяции по цвету, а также имитация эффектов отражения при освещении фигуры источником точечного света. Отчетливо видны зеркальные блики на поверхности фигуры.
Еще одна команда — modes — иллюстрирует построение фаз анимации поверхности . Она генерирует 12 фигур, отражающих положение поверхности в пространстве в различные моменты времени.
В целом указанный набор программ дает хорошее представление о возможностях трехмерной графики системы MATLAB. Команда type name, где name — имя соответствующей команды, выводит полный листинг программы, реализующей построение той или иной фигуры.
Что нового мы узнали?
В этом уроке мы научились:
Строить графики с анимацией.
Использовать простые средства дескрипторной графики.
Создавать графические окна и управлять ими.
Работать с графическими объектами.
Создавать элементы интерфейса.
Использовать некоторые средства пакета Images для обработки изображений.
Просматривать примеры из галереи трехмерной графики.
Урок №8.
Операторы и функции
Арифметические и алгебраические операторы и функции
Операторы отношения и их функции
Логические операторы и функции
Специальные символы
Системные переменные и константы
Функции времени и даты
Элементарные функции
Тригонометрические и гиперболические функции
Функции округления и знака
Функции комплексного аргумента
Начиная с этого урока мы переходим к изучению математических и логических возможностей системы MATLAB. Их изучение мы начнем с операторов и функций — тех кирпичиков, из которых строятся математические выражения. Вычисления математических выражений составляют главную цель любой системы, предназначенной для численных расчетов. Здесь мы рассмотрим полный набор операторов входного языка системы MATLAB 6.0 и соответствующих им функций. Напомним, что полный список операторов выводится командой help ops. Операторы и специальные символы системы MATLAB можно разделить на ряд категорий, которые рассматриваются ниже.
Арифметические операторы и функции
Арифметические операторы являются самыми распространенными и известными. В отличие от большинства языков программирования в системе MATLAB практически все операторы являются матричными, т. е. предназначены для выполнения операций над матрицами. В табл. 8.1 приводится список арифметических операторов и синтаксис их применения.
Таблица 8.1. Арифметические операторы и функции MATLAB
|
|||
|
Plus |
Плюс + |
М1+М2 |
|
Uplus |
Унарный плюс + |
+М |
|
Minus |
Минус |
М1-М2 |
|
Uminus |
Унарный минус |
-М |
|
Mtimes |
Матричное умножение * |
М1*М2 |
|
Times |
Поэлементное умножение массивов .* |
А1*А2 |
|
Mpower |
Возведение матрицы в степень |
М1^х |
|
Power |
Поэлементное возведение массива в степень |
А1^х |
|
Mldivide |
Обратное (справа налево) деление матриц \ |
M1\M2 |
|
Mrdivide |
Деление матриц слева направо / |
М1/М2 |
|
Ldivide |
Поэлементное деление массивов справа налево . \ |
А1.\А2 |
|
Rdivide |
Поэлементное деление массивов слева направо . / |
А1 . /А2 |
|
Kron |
Тензорное умножение Кронекера kron |
kron(X.Y) |
|
Обратите внимание на то, что каждый оператор имеет аналогичную по назначению функцию. Например, оператору матричного умножения * соответствует функция mtimes(Ml,M2). Примеры применения арифметических операторов уже не раз приводились, так что ограничимся несколькими дополнительными примерами:
» А=[1 2 3];
» В=[4 5 6]:
» В-А
ans=
|
3 |
3 3 |
|
|
» minus (В. А) |
|
|
|
ans = |
|
|
|
3 |
3 3 |
|
|
» А. ^ 2 |
|
|
|
ans = |
|
|
|
1 |
4 9 |
|
|
» power(A,2) |
|
|
|
ans = |
|
|
|
1 |
4 9 |
|
|
» ДАВ |
|
|
|
ans= |
|
|
|
4.0000 |
2.5000 2.0000 |
|
|
» Idivide(A.B) |
|
|
|
ans= |
|
|
|
4.0000 |
2.5000 2.0000 |
|
|
» rdivide(A.B) |
|
|
|
ans= |
|
|
|
0.2500 |
0.4000 0.5000 |
|
Соответствие функций операторам и командам в системе MATLAB является одним из основных положений программирования. Оно позволяет одновременно использовать элементы как операторного, так и функционального программирования.
Следует отметить, что в математических выражениях операторы имеют определенный приоритет исполнения. Например, в MATLAB приоритет логических операторов выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания. Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается.
Операторы отношения и их функции
Операторы отношения служат для сравнения двух величин, векторов или матриц. Все операторы отношения имеют два операнда, например х и у, и записываются, как показано в табл. 8.2.
Таблица 8.2. Операторы и функции отношения
Функция | Название | Оператор | Пример |
Eq | Равно | = = | x = = y |
Ne | He равно | ~ = | x ~ = y |
Lt | Меньше чем | < | x<y |
Gt | Больше чем | > | x>y |
Le | Меньше или равно | <= | x<=y |
Ge | Больше или равно | >= | x>=y |
Данные операторы выполняют поэлементное сравнение векторов или матриц одинакового размера и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Если операнды — действительные числа, то применение операторов отношения тривиально:
» eq(2.2)
ans =
1
» 2==2
ans =
1
» ne(l,2)
ans =
1
» 2 ~- 2
ans =
0
» 5 > 3
ans =
1
» le(5.3)
ans =
0
Следует отметить, что операторы <, <=, > и >= при комплексных операндах используют для сравнения только действительные части операндов — мнимые отбрасываются. В то же время операторы == и ~= ведут сравнение с учетом как действительной, так и мнимой частей операндов. Следующие примеры поясняют это положение:
» (2+3i)>-(2+i)
ans=
1
» (2+3i)>(2+i)
ans=
0
» abs(2+3i)>abs(2+i)
ans =
1
» (2+3i)—(2+i)
ans =
0
» (2+3i)-(2+i)
ans =
1
Если один из операндов — скаляр, происходит сравнение всех элементов второго операнда-массива со значением этого скаляра:
M=
-1 0
1 2
» М>=0
ans =
0 1
1 1
В общем случае операторы отношения сравнивают два массива одного размера и выдают результат в виде массива того же размера:
» М>[0 1;.1 0]
ans =
0 0
0 1
Таким образом, спектр применения операторов отношения в системе MATLAB шире, чем в обычных языках программирования, поскольку операндами являются не только числа, но и векторы, матрицы и массивы. Возможно применение операторов отношения и к символьным выражениям:
» 'b'>'а'
ans =
1
» 'abc'= ='abc'
ans =
1 1 1
» 'cba'<'abc'
ans =
0 0 1
В этом случае символы, входящие в выражения, представляются своими ASCII-кодами. Строки воспринимаются как векторы, содержащие значения кодов. Все это надо учитывать при использовании управляющих структур языка программирования, в которых широко применяются операторы отношения.
Логические операторы
Логические операторы и соответствующие им функции служат для реализации поэлементных логических операций над элементами одинаковых по размеру массивов (табл. 8.3).
Таблица 8.3. Логические операторы и функции MATLAB
And |
Логическое И (AND) & |
Or |
Логическое ИЛИ (OR) | |
Not |
Логическое НЕ (NOT) ~ |
Хог |
Исключающее ИЛИ (EXCLUSIVE OR) |
Any |
Верно, если все элементы вектора равны нулю |
All |
Верно, если все элементы вектора не равны нулю |
Работа операторов поясняется приведенными ниже примерами:
»А=[1 2 3];
»В=[1 0 0];
» and(A.B)
ans =
1 0 0
» оr(А.В)
ans =
1 1 1
» А&В
ans =
1 0 0
» А|В
ans=
1 1 1
» not(А)
ans =
0 0 0
» not(B)
ans =
0 1 1
» ~B
ans=
0 1 1
» xor(A.B)
ans =
0 1 1
» any(A)
ans =
1
» all([0 0 0])
ans =
0
» all(B)
ans =
0
» and('abc'.'012')
ans =
1 1 1
Обратите внимание, что аргументами логических операторов могут быть числа и строки. При аргументах-числах логический нуль соответствует числовому нулю, а любое отличное от нуля число воспринимается как логическая единица. Для строк действует уже отмеченное правило — каждый символ строки представляется своим ASCII-кодом.
Специальные символы
К классу операторов в системе MATLAB относятся также специальные символы. Они предназначены для создания самых разнообразных объектов входного языка и языка программирования системы и придания им различных форм. В табл. 8.4 представлено описание полного набора специальных символов.
Таблица 8.4. Специальные символы MATLAB
: |
Двоеточие |
colon |
( ) |
Круглые скобки |
paren |
[ ] |
Квадратные скобки |
paren |
{ } |
Фигурные скобки |
paren |
. |
Десятичная точка |
punct |
|
Выделение поля структуры |
punct |
|
Родительский каталог |
punct |
|
Продолжение строки |
punct |
, |
Разделитель |
punct |
|
Точка с запятой |
punct |
% |
Комментарий |
punct |
i |
Вызов команды операционной системы |
punct |
= |
Присваивание |
punct |
1 |
Кавычка |
punct |
1 |
Транспонирование |
transpose |
1 |
Транспонирование с комплексным сопряжением |
ctranspose |
[,] |
Горизонтальная конкатенация |
horzcat |
[;] |
Вертикальная конкатенация |
vertcat |
( ).( }.. |
Присваивание подмассива |
subsasgn |
( ).{ }.. |
Ссылка на подмассив |
subsref |
|
Индекс подмассива |
subsindex |
Теперь рассмотрим их более подробно.
: (двоеточие) — формирование подвекторов и подматриц из векторов и матриц. Оператор : — один из наиболее часто используемых операторов в системе MATLAB.
Оператор : использует следующие правила для создания векторов:
j:k — то же, что и [j.j+l,...,k];
j:k — пустой вектор, если j>k;
j:i :k — то же, что и [j, j+i ,j+2i .....k];
j:i :k — пустой вектор, если i>0 и j>k или если i<0 и j<k, где 1, j и k — скалярные величины.
Ниже показано, как выбирать с помощью оператора : строки, столбцы и элементы из векторов, матриц и многомерных массивов:
А(:, j) — это j-й столбец из А;
А(i,:) — это i-я строка из А;
А(:,:) — эквивалент двумерного массива. Для матриц это аналогично А;
A(j:k) - это A(j), A(j+l),...,A(k);
A(:J:k)-это A(:.j),A(:,j+l),...,A(:,k);
А(:,: ,k) — это k-я страница трехмерного массива А;
A(i.j.k.:) — вектор, выделенный из четырехмерного массива А. Вектор включает элементы А(1, j.k.l), A(i. j,k,2), A(i. j,k.3) и т. д.;
А(:) — записывает все элементы массива А в виде столбца.
Символы ( ) (круглые скобки) используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функции и указания индексов элемента вектора или матрицы. Если X и V — векторы, то X(V) можно представить как [X(V(D), X(V(2)).....X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка генерируется в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет т компонентов, а вектор W — п компонентов, то A(V,W) будет матрицей размера mxn, сформированной из элементов матрицы А, индексы которой — элементы векторов V и W.
Символы [ ] (квадратные скобки) используются для формирования векторов и матриц:
[6.9 9.64 sqrt(-l)] — вектор, содержащий три элемента, разделенных пробелами;
[6.9. 9.64. i] —такой же вектор;
[1+j 2-j 3] и [1 +j 2 -j 3] — разные векторы: первый содержит три элемента, а второй пять;
[11 12 13: 21 22 23] — матрица размера 2x3. Точка с запятой разделяет первую и вторую строки.
Еще несколько примеров:
А = [ ] — сохраняет пустую матрицу в А;
А(m. :) = [] — удаляет строку m из матрицы А;
А(: ,n) = [ ] — удаляет столбец n из матрицы А.
Символы { } (фигурные скобки) используются для формирования массивов ячеек. Например, {magic(3) 6.9 'hello'} — массив ячеек с тремя элементами.
Символ . (десятичная точка) используется для отделения дробной части чисел от целой. Например, 314/100, 3.14 и .314е1 — одно и то же число.
Кроме того, символ точки . используется для выделения полей структур. Например, A.(field) и A(i).field, где А — структура, означает выделение поля структуры с именем «field».
Ниже перечислено назначение остальных специальных символов MATLAB:
.. (родительский каталог) — переход по дереву каталогов на один уровень вверх;
... (продолжение) — три или более точек в конце строки указывают на продолжение строки;
; (точка с запятой) — используется внутри круглых скобок для разделения строк матриц, а также в конце операторов для запрета вывода на экран результата вычислений;
, (запятая) — используется для разделения индексов элементов матрицы и аргументов функции, а также для разделения операторов языка MATLAB. При разделении операторов в строке запятая может заменяться на точку с запятой с целью запрета вывода на экран результата вычислений;
% (знак процента) — используется для указания логического конца строки. Текст, находящийся после знака процента, воспринимается как комментарий и игнорируется (увы, за исключением русскоязычных комментарий, которые нередко ведут к ошибочным командам);
! (восклицательный знак) — является указателем ввода команды операционной системы. Строка, следующая за ним, воспринимается как команда операционной системы;
= (знак равенства) — используется для присваивания значений в арифметических выражениях;
' (одиночная кавычка, апостроф) — текст в кавычках представляется как вектор символов с компонентами, являющимися ASCII-кодами символов. Кавычка внутри строки задается двумя кавычками. Например:
» a-'Hello''my friend'
а =
Hello'my friend
' (транспонирование с комплексным сопряжением) — транспонирование матриц, например А' — транспонированная матрица А. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы;
.' (транспонирование) — транспонирование массива, например А.' — транспонированный массив А. Для комплексных массивов операция сопряжения не выполняется;
[.] — горизонтальная конкатенация. Так, [А.В] — горизонтальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое количество строк. [А В] действует аналогично. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А,В,С]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно: [А,В:С];
[:] — вертикальная конкатенация. Так, [А:В] — вертикальная конкатенация (объединение) матриц А и В. А и В должны иметь одинаковое число столбцов. Вертикальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [А:В:С]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно: [А;В,С];
(),{} — присваивание подмассива. Приведем несколько примеров:
А(1)=В — присваивает значения элементов массива В элементам массива А, которые определяются вектором индексов I. Массив В должен иметь такую же размерность, как и массив I, или может быть скаляром;
А(I,J)=B — присваивает значения массива В элементам прямоугольной подматрицы А, которые определяются векторами индексов I и J. Массив В должен иметь LENGTH(I) строк и LENGTH(J) столбцов;
А{1}=В, где А — массив ячеек и I — скаляр, помещает копию массива В в заданную ячейку массива А. Если I имеет более одного элемента, то появляется сообщение об ошибке.
Системные переменные и константы
Как отмечалось ранее, в состав объектов MATLAB входит ряд системных переменных и констант, значения которых устанавливаются системой при ее загрузке или автоматически формируются в процессе вычислений. Описание таких объектов приводится ниже.
ans — результат выполнения последней операции. Переменная ans создается автоматически, когда не определены выходные аргументы какого-либо оператора. Пример:
» cos([0:2*pi])
ans =
1.0000 0.5403 -0.4161 -0.9900 -0.6536 0.2837 0.9602
computer — возвращает строку с информацией о типе компьютера, на котором установлена система MATLAB;
[str.maxsize] = computer — возвращает строку str с информацией о компьютере и целое число maxsize, содержащее максимально допустимое число элементов матрицы для данной версии MATLAB. Пример:
» [str.maxsize] = computer
str =
PCWIN
maxsize =
268435455
eps — возвращает интервал между числом 1.0 и следующим ближайшим числом с плавающей запятой, которое воспринимается как отличное от 1.0. Значение eps определяет заданный по умолчанию порог для функций pinv и rank, а также для некоторых других функций. На машинах с арифметикой с плавающей запятой eps = 2 ^ (-52), что приблизительно составляет 2.22е-1б. Пример:
» eps
ans =
2.2204е-016
i или j— мнимая единица (равная sqrt(-1)), которая используется для задания мнимой части комплексных чисел. Символ 1 при задании комплексной константы можно использовать без знака умножения. В качестве мнимой единицы можно также использовать символ j. Пример:
» w=3+5i
w =
3.0000 + 5.00001
Inf — возвращает представление положительной бесконечности для машинной арифметики. Бесконечность следует из операций, подобных делению на нуль, и переполнения, которое ведет к результатам, слишком большим, чтобы их можно было представить в виде числа с плавающей запятой. Пример:
» 4/0
Warning: Divide by zero.
ans=
Inf
Примечание
Переменным i и j можно задать и иное значение, например, они могут выступать в ка-честве индексов в циклах for. Однако это чревато путаницей, если внутри цикла пользователь задает выражения с комплексными числами.[Используйте как индексы I и J вместо 1 и j.— Примеч. ред.]
inputname(argnum) — возвращает в тело функции название переменной рабочей области, соответствующее аргументу с номером argnum. Может использоваться только внутри тела функции. Если входной аргумент не имеет никакого символьного представления (например, если это выражение или функция, дающая на выходе выражение, например а(1), varargin{:}, eval(expr), а не переменная), функция inputname возвращает пустую строку ("");
j — мнимая единица. Символ j можно использовать в качестве мнимой единицы наряду с 1. Как мнимая единица (равная sqrt(-D) символ j используется для задания мнимой части комплексных чисел. Все сказанное о символе i относится и к j. Пример:
» s=4-3j
s =
4.0000 - 3.00001
NaN — возвращает представление для нечисловых величин, например, в случае операций, которые имеют неопределенные численные результаты. Пример:
» s=0/0
Warning: Divide by zero.
s =NaN
Функция nargchk часто используется внутри m-файлов для проверки соответствия количества входных параметров (аргументов):
msg = nargchkOow.high.number) — возвращает сообщение об ошибке, если число number меньше, чем low, или больше, чем high, в противном случае возвращается пустая строка. Пример:
» msg = nargchk(4,9.5)
msg =
[ ]
» msg = nargchk(4.9.2)
msg = Not enough input arguments.
msg = nargoutchkdow,high.number) — возвращает сообщение об ошибке, если число number выходных параметров (выходных аргументов в терминологии MATLAB) меньше, чем low, или больше, чем high, в противном случае возвращается пустая строка.
Еще две функции позволяют определить число входных и выходных параметров функции:
nargin — возвращает число входных аргументов, определенных для функции. Внутри тела m-файла функции nargin и nargout указывают соответственно количество входных или выходных аргументов, заданных пользователем. Вне тела m-файла функции nargin и nargout показывают соответственно число входных или выходных аргументов для данной функции. Отрицательное число аргументов означает, что функция имеет переменное число аргументов;
nargin(@fun) — возвращает число объявленных входных параметров для функции fun. Если функция имеет переменное число входных аргументов, возвращается -1;
nargout — возвращает число выходных параметров, определенных для функции;
nargout( 'fun') — возвращает число объявленных выходных параметров для функции fun.
Применение этих функций мы рассмотрим немного позже при описании структуры функций.
Продолжаем перечисление системных переменных:
pi — число р (отношение длины окружности к ее диаметру), pi возвращает число с плавающей запятой, ближайшее к значению р. Выражения 4*atan(l) и imag(log(-1)) выдают тот же результат. Пример:
» pi
ans = 3.1416
real max — возвращает самое большое число в формате с плавающей запятой, соответствующее конкретному компьютеру. Большее значение соответствует системной переменной Inf. Пример:
» n = real max
n =
1.7977е+308
real mi n — возвращает наименьшее нормализованное положительное число в формате с плавающей запятой, представимое на конкретном компьютере. Любое меньшее число воспринимается как ноль. Пример:
» n = realmin
n =
2.2251е-308
Переменные varargin и varargout позволяют использовать в функциях переменное число входных и выходных параметров:
varargout = foo(n) — возвращает список выходных параметров переменной длины функции foo;
у = function bar(varargin) — принимает переменное число аргументов в функцию bar.
Переменные varargin и varargout используются только внутри m-файлов функции для задания произвольных аргументов функции. Эти переменные должны быть последними в списке входов или выходов, а для их обозначения могут использоваться только строчные буквы. Использование этих возможностей мы рассмотрим несколько позже.
Функции поразрядной обработки
Ряд функций предназначен для поразрядной логической обработки данных:
bitand(A.B) — возвращает поразрядное И двух неотрицательных целых аргументов А и В. Пример:
» f=bitand(7,14)
f =
6
bitcmp(A.n) — возвращает поразрядное дополнение аргумента А как n-битовое неотрицательное целое число. Пример:
» g=bitcmp(6,4)
g =
9
bitor(A.B) — возвращает поразрядное ИЛИ двух неотрицательных целых аргументов А и В. Пример:
» v=bitor(12.21)
v = 29
bitmax — возвращает максимальное целое число без знака, которое может быть представлено в формате чисел с плавающей запятой применительно к используемому компьютеру. Это значение определяется для комбинации, когда все биты установлены. На машинах с IEEE-арифметикой это значение равно 2 53 -1. Пример:
» bitmax
ans =
9.0072е+015
bitset(A.bit.v) — устанавливает бит в позиции bit равным значению v, которое должно быть 0 или 1. Пример:
» d=bitset(12.2.1)
d =
14
bitshift(A.n) — возвращает значение аргумента А, сдвинутое на п бит. Если n>0, это аналогично умножению на 2" (левый сдвиг). Если n<0, это аналогично делению на 2n (правый сдвиг). Пример:
» f=bitshift(4.3)
f =
32
bitset(A.bit) — устанавливает бит в позиции bit аргумента А в единичное значение. Аргумент А должен быть неотрицательным целым, bit — это номер в диапазоне между 1 и числом бит в целом числе, представленном в формате чисел с плавающей запятой.
bitget(A.bit) — возвращает значение бита в позиции bit операнда А. Аргумент А должен быть неотрицательным целым числом, bit — это номер между 1 и числом бит в целом числе формата с плавающей запятой. Пример:
» disp(dec2bin(23))
10111
» С = bitget(23.5:-l:l)
С =
1 0 1 1 1
bitxor(A, В) — возвращает результат поразрядного исключающего ИЛИ для двух аргументов А и В. Оба аргумента должны быть целыми. Пример:
» x=bitxor(12.31)
х =
19
Чтобы операнды этих функций гарантированно были целыми числами, при их задании рекомендуется использовать функции ceil, fix, floor и round.
Функции обработки множеств
Множество — первичное понятие математики, не имеющее четкого определения. Под множеством подразумевается совокупность некоторых объектов, например книг в библиотеке, людей в зале или элементов вектора. В этом разделе приводятся некоторые функции для обработки множеств, представленных векторами. Они широко используются при анализе и обработке данных.
intersect(a.b) — возвращает пересечение множеств для двух векторов а и b, т. е., общие элементы векторов а и b. Результирующий вектор отсортирован по возрастанию. Если входные массивы не являются векторами, то они рассматриваются как совокупность векторов-столбцов а=а(:) или b=b(:);
intersect(a,b, 'rows') — возвращает строки, общие для а и b, когда а и b представляют собой матрицы с одинаковым числом столбцов;
[c.ia.ib] = intersect(a.b) — также возвращает вектор-столбец индексов ia и ib. но так, что с = a(ia) и с = b(ib) (или с = a(ia.:) ис = b(ib.:)).
Пример:
» А = [1 7 2 6]; В = [7 2 3 4 6 1];
» [c,ia,ib] = intersect(А,В)
1 2 6 7
ia =
1 3 4 2
ib =
6 2 5 1
ismember(a.S) — возвращает вектор той же длины, что и исходный а, содержащий логические единицы на месте тех элементов вектора а, которые принадлежат множеству S, и логические нули на месте тех элементов вектора а, которые не принадлежат множеству S;
ismember (А. S.' rows') — возвращает вектор, содержащий логические единицы там, где строки матрицы А являются также строками матрицы S, и логические нули в остальных позициях. А и S должны быть матрицами с одним числом столбцов.
Пример:
» set = [0 1 3 5 7 9 11 15 17 19];
» а=[1 2345678];
» k = ismember(a.set)
k =
1 0 1 0 1 0 1 0
setdiff(a.b) — возвращает разность множеств, т. е., те элементы вектора а, которые не содержатся в векторе b. Результирующий вектор сортируется по возрастанию;
setdiff(a,b, 'rows') — возвращает те строки из матрицы а, которые не содержатся в матрице Ь. Матрицы а и b должны иметь одинаковое число столбцов;
[c,i] = setdiff(...) — возвращает также вектор индексов 1, такой что с = а(i) или с = а (i,;).
Если входной массив а является матрицей, то он расценивается как вектор-столбец а(:).
Пример:
» а=[2 3 5 7 8 9 10 13 20];
» b=[1456894]
» с = setdiff(a.b)
с=
2 3 7 10 13 20
setxor(a.b) — исключающее ИЛИ для векторов а и b. Результирующий вектор отсортирован;
setxor(a,b, 'rows') — возвращает строки, которые не являются пересечениями матриц а и b. Матрицы а и b должны иметь одинаковое число столбцов;
[c.ia.ib] = setxor(...) — возвращает также векторы индексов ia и ib так, что с является отсортированной комбинацией элементов с = а(iа)ис = b(ib) или для комбинаций строк с = а(iа,:)ис = b(ib.;).
Если массив а является матрицей, то он расценивается как вектор-столбец а(:).
Пример:
» а = [-1 0 1 Inf -Inf NaN];
» b = [-2 pi 0 Inf];
» с = setxor(a.b)
с =
-Inf -2.0000-1.00001.0000 3.1416 NaN
union(a ,b) — возвращает вектор объединенных значений из а и b без повторяющихся элементов. Результирующий вектор сортируется в порядке возрастания;
union(a,b, 'rows') — возвращает объединенные строки из а и b, не содержащие повторений (а и b — это матрицы с одинаковым числом столбцов);
[c.ia.ib] = unionL.) — дополнительно возвращает i а и i b — векторы индексов, такие что с = a(ia) и c=b(1b), или, для объединенных строк, с = а(1а.:)ис = b(ib,:). Невекторный массив а расценивается как вектор-столбец а(:). Пример:
» а=[2,4,-4,9,0]:b=[2,5,4]:
» [c,ia,ib]=union(a,b)
с =
-4 0 2 4 5 9
ia =
3 5 4
ib =
1 3 2
unique(a) — возвращает значения элементов из а, не содержащие повторений. Результирующий вектор сортируется в порядке возрастания. Невекторный массив расценивается как вектор-столбец а=а(: );
unique(a, 'rows') — возвращает уникальные строки а;
[b.i ,j] = unique(...) — дополнительно возвращает i и j — векторы индексов, такие что b = a(i)na = b(j) (или b = а(1,:) иа = b(j.:)).
Примеры:
» b=[-2,3,5,4,1,-6,2,2,7]
b=
-2 3 5 4 1 -6 2 2 7
» [c,i,j]=unique(b)
с =
|
|
-6 |
-2 |
1 2 3 4 |
5 7 |
|
|
|
6 |
1 |
5 8 2 4 |
3 9 |
|
|
j |
= |
|
|
|
|
|
|
2 |
5 |
7 6 3 1 |
4 4 |
|
|
» |
a-[-2, |
3.5:4. |
l.-6:2,2.7;-2.3,5J |
|
|
|
a |
= |
|
|
|
|
|
|
-2 |
3 |
5 |
|
|
|
|
4 |
1 |
-6 |
|
|
|
|
2 |
2 |
7 |
|
|
|
|
-2 |
3 |
5 |
|
|
|
» |
c=uniqueCa. ' |
rows ' ) |
|
|
|
|
с |
= |
|
|
|
|
|
|
-2 |
3 |
5 |
|
|
|
|
2 |
2 |
7 |
|
|
|
|
4 |
1 |
-6 |
|
|
|
|
Функции времени и даты
Ряд функций служит для возврата текущего времени и даты. Они перечислены ниже.
calendar(d) — возвращает календарь на месяц, в который попадает день, заданный аргументом d (дни отсчитываются от начала летоисчисления);
calendar — возвращает матрицу размером 6x7, содержащую календарь на текущий месяц. Календарь начинается с воскресения (первый столбец) и завершается субботой;
calendar(y ,m) — возвращает календарь на месяц, заданный аргументом т, и год, заданный аргументом у;
Вызов функции без присваивания результата выдает календарь на экран. Примеры:
» calendar
Jul 2000
S |
М |
Tu |
W |
Th |
F |
S |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
16 |
17 |
18 |
19 |
20 |
21 |
22 |
|
23 |
24 |
25 |
26 |
27 |
28 |
29 |
|
30 |
31 |
0 |
0 |
0 |
0 |
0 |
|
|
calendar(700477)
Nov 1917
|
||||||||
|
S |
M |
Tu |
W |
Th |
F |
S |
|
|
0 |
0 |
0 |
0 |
1 |
2 |
3 |
|
|
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
|
11 |
12 |
13 |
14 |
15 |
16 |
17 |
|
|
18 |
19 |
20 |
21 |
22 |
23 |
24 |
|
|
25 |
26 |
27 |
28 |
29 |
30 |
0 |
|
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
clock — возвращает вектор из 6 элементов, содержащий текущую дату и время в десятичной форме [год месяц день час минуты секунды]. Первые пять элементов этого вектора — целые числа. Шестой элемент имеет несколько десятичных знаков после запятой. Функция fix(clock) округляет число секунд до целого значения. Пример:
» c=clock
с =
1.0e+003 *
2.0000 0.0070 0.0240 0.0200 0.0120 0.0148
» fix(clock)
ans =
2000 7 24 20 12 26
cputime — возвращает время работы процессора (в секундах) , использованное системой MATLAB с момента ее запуска. Это число может выйти за рамки внутреннего представления, и тогда отсчет времени начинается заново. Пример:
» +tl=cputime; w=surf(peaks(30));cputime-tl
ans =
0.2200
str = date — возвращает строку, содержащую дату в формате дд-ммм-гггг (день-месяц-год). Пример:
» d = date
d =
24-Jul-2000
datenum — преобразует строку даты в порядковый номер даты, который отсчитывается с некоторого начального дня (01.01.00);
datenum(str) — преобразует дату, заданную строкой str, в порядковый номер даты. Строка string должна иметь один из следующих форматов: 0, 1, 2, 6, 13, 14, 15 или 16, определенных для функции datestr;
datenum(Y.M.D) — возвращает порядковый номер даты для соответствующих массивов элементов Y, М и D (год, месяц, день). Массивы Y, М и D должны иметь одинаковую размерность (при этом любые из них могут быть скалярами);
datenum(Y.M.D,H.MI,S) — возвращает порядковый номер даты для соответствующих массивов элементов Y, М, D, H, Ml и S (год, месяц, день, часы, минуты, секунды). Массивы Y, М, D, H, Ml и S должны иметь одинаковую размерность (при этом любые из них могут быть скалярами).
Пример:
» n1 = datenum('26-Nov-1998')
n1 =
730085
» Y=[1998,2000];M-[1,12];D=23;N=datenum(Y,M,D)
N =
729778 730843
datestr(D, dateform) — преобразует каждый элемент массива порядковых номеров даты D в строку. Аргумент dateform определяет формат результата; dateform может быть номером или строкой в соответствии с табл. 8.5.
Таблица 8.5. Форматы представления даты
Dateform(номер) |
||
0 |
'dd-rmiM-yyyy HH:MM:SS' |
1l-Mar-1995 03:45 |
1 |
'dd-mmM-yyyy' |
Ol-Mar-1995 |
2 |
'mm/dd/yy' |
03/01/95 |
3 |
' mmm ' |
Mar |
4 |
'm' |
M |
5 |
'mm' |
3 |
6 |
'mm/dd' |
03/01 |
7 |
'dd' |
1 |
8 |
'ddd' |
Wed |
9 |
'd' |
W |
10 |
'УУУУ' |
1995 |
11 |
'УУ |
95 |
12 |
' mmmyy ' |
Mar95 |
13 |
'HH:MM:SS' |
15:45:17 |
datevec(A) — преобразует входные величины в массив размерности пхб, каждая строка которого представляет собой вектор [Y,M.D,H,MI,S]. Первые пять элементов вектора — целые числа. Массив А может состоять или из строк, удовлетворяющих формату функции datestr, или из скалярных величин, созданных функциями datenum и now;
[Y, M., D, H. MI, S] = datevec (A) — возвращает компоненты вектора даты как индивидуальные переменные.
Любой компонент входного вектора, который не вписывается в нормальный диапазон дат, преобразуется в следующий диапазон (так, например, несуществующая дата June 31 преобразуется в July 1). Допускаются значения нулевого месяца и нулевого дня. Например:
» n = datevecC 11/31/98')
n=
1998 12 1 0 0 0
» n = datevec(710223)
n =
1944 7 10 0 0
О eomday (Y, М) — возвращает последний день года и месяца, заданных соответственно элементами массивов Y и М. Пример (нахождение високосных лет двадцатого столетия):
» у = 1900:1999;
» Е = eomday(y.2);
» y(find(E==29))
ans=
Columns 1 through 6
1904 1908 1912 1916 1920 1924
Columns 7 through 12
1928 1932 1936 1940 1944 1948
Columns 13 through 18
1952 1956 1960 1964 1968 1972
Columns 19 through 24
1976 1980 1984 1988 1992 1996
etime(t2,tl) — возвращает длительность промежутка времени (в секундах), задаваемого векторами t1 и t2. Векторы должны удовлетворять формату, выдаваемому функцией clock:
Т = [год месяц день час минуты секунды].
Функция работает некорректно, если в текущий промежуток времени попадут границы месяца или года, что, однако, случается крайне редко и исправляется при повторе операции. Пример (вычисляется время, затрачиваемое на быстрое преобразование Фурье с 2048 точками):
» х = rand(2048,l);t = clock; fft(x); etime(clock.t);etime (clock.t)
ans =
0.0500
now — возвращает текущие время и дату в форме числа. Использование rem(now.l) возвращает только время, a floor(now) — только дату. Пример:
» t1 = now, t2 = rem(now,1)
t1 =
7.3009e+005
t2 =
0.6455
tic — запускает таймер;
toc — выводит время, прошедшее с момента запуска таймера;
t = toe — возвращает прошедшее время в переменной t. Пример:
» tic.surf(peaks(50));toc
elapsed_time =
0.7600
[N,S] = weekday(D) — возвращает день недели в виде числа N и в виде строки S для каждой даты массива D. Пример:
» D=[728647,735730]:[N.S] = weekday(D)
N =
2 1
S=
Mon Sun
Элементарные функции
Элементарные функции, пожалуй, наиболее известный класс математических функций. Поэтому, не останавливаясь подробно на их описании, представим набор данных функций, имеющийся в составе системы MATLAB. Функции, перечисленные ниже, сгруппированы по функциональному назначению. В тригонометрических функциях углы измеряются в радианах. Все функции могут использоваться в конструкции вида y=func(x), где func — имя функции. Обычно в такой форме задается информация о функции в системе MATLAB. Мы, однако, будем использовать для функций, возвращающих одиночный результат, более простую форму func(x). Форма [y,z,...]=func(x....) будет использоваться только в тех случаях, когда функция возвращает множественный результат.
Алгебраические и арифметические функции
В системе MATLAB определены следующие алгебраические и арифметические функции:
abs(X) — возвращает абсолютную величину для каждого числового элемента вектора X. Если X содержит комплексные числа, abs(X) вычисляет модуль каждого числа. Примеры:
abs(-5) = 5
abs(3+4i) =5
» abs([1 -2 1 3i 2+3i ])
ans =
1.0000 2.0000 1.0000 3.0000 3.6056
ехр(Х) — возвращает экспоненту для каждого элемента X. Для комплексного числа z = х + i*y функция exp(z) вычисляет комплексную экспоненту: exp(z)=exp(x)*(cos(y)+i*sin(y)).
Примеры:
» ехр([1 23])
ans =
2.7183 7.3891 20.0855
» exp(2+3i)
ans =
-7.3151 + 1.0427i
factor(n) — возвращает вектор-строку, содержащую простые множители числа п. Для массивов эта функция неприменима. Пример:
f = factor(221)
f =
13 17
G=gcd(A, В) — возвращает массив, содержащий наибольшие общие делители соответствующих элементов массивов целых чисел А и В. Функция gcd (0.0) возвращает значение 0, в остальных случаях возвращаемый массив G содержит положительные целые числа;
[G, С. D] = gcd(A, В) — возвращает массив наибольших общих делителей G и массивов С и D, которые удовлетворяют уравнению A(i) .*С(1) + B(i) .*D(i) = G(i). Они полезны для выполнения элементарных эрмитовых преобразований. Примеры:
» А=[2 6 9]:
» В=[2 3 3]:
» gcd(A.B)
ans =
2 3 3
» [G.C.D]=gcd(A.B)
G =
2 3 3
C =
0 0 0
D=
1 1 1
lcm(A.B) — возвращает наименьшие общие кратные для соответствующих парных элементов массивов А и В. Массивы А и В должны содержать положительные целые числа и иметь одинаковую размерность (любой из них может быть скаляром). Пример:
» А=[1 354];
» В=[2 462];
» lcm(А.В)
ans =
2 12 30 4
log (X) — возвращает натуральный логарифм элементов массива X. Для комплексного или отрицательного z, где z = х + y*i, вычисляется комплексный логарифм в виде log(z) = log(abs(z)) + i*atan2(y,x). Функция логарифма вычисляется для каждого элемента массива. Область определения функции включает комплексные и отрицательные числа, что способно привести к непредвиденным результатам при некорректном использовании. Пример:
» Х=[1.2 3.34 5 2.3];
» log(X)
ans=
-0.1823 1.2060 1.6094 0.8329
log2(X) — возвращает логарифм по основанию 2 элементов массива X;
[F,E] = log2(X) — возвращает массив действительных значений F и массив целых чисел Е. Элементы массива F обычно лежат в диапазоне 0.5 J abs(F) < 1. Для действительных X возвращаемые массивы F удовлетворяют уравнению вида X = F. *2. Е. Для нулевых значений X возвращаются F = 0 и Е = 0.
Пример:
» Х=[2 4.678 5;0.987 1 3];
» [F.E] = log2(Х)
F =
0.5000 0.5847 0.6250
0.9870 0.5000 0.7500
Е =
2 3 3
0 1 2
log10(X) — возвращает логарифм по основанию 10 для каждого элемента X. Область функции включает комплексные числа, что способно привести к непредвиденным результатам при некорректном использовании.
Пример:
» Х=[1.4 2.23 5.8 3];
» log10(X)
ans =
0.1461 0.3483 0.7634 0.4771
mod(x.y) — возвращает х mod у;
mod(X, Y) — возвращает остаток от деления X на Y (т. е., X - Y.*floor(X./Y)) для ненулевого Y, и X в противном случае. Если операнды X и Y имеют одинаковый знак, функция mod(X, Y) возвращает тот же результат, что mod(Х, Y). Однако (для положительных X и Y) mod(-x.y) = rem(-x,y)+y.
Примеры:
» М = mod(5.2)
М =
1
» mod(10.4)
ans =
2
pow2(Y) — возвращает массив X, где каждый элемент есть Z Y ;
pow2(F.E) — вычисляет Х=Р*2 £ для соответствующих элементов F и Е. Аргументы F и Е — массивы действительных и целых чисел соответственно.
Пример:
» d=pow2(pi/4,2)
d =
3.1416
р = nextpow2(A) — возвращает такой показатель степени р, что 2 Р i abs(A). Эта функция эффективно применяется для выполнения быстрого преобразования
Фурье. Если А не является скалярной величиной, то nextpowZ возвращает значение nextpow2(length(A)).
Пример:
» х=[2 678934567784324];
» length(x)
ans =
16
» р = nextpow2(x)
Р =
4
» х=4:
» р = nextpow2(x)
Р =
2
» Х=45;
» р = nextpow2(x)
Р =
6
Функция primes(n) возвращает вектор-строку простых чисел, меньших или равных n. Пример:
» р = primes(25)
Р =
2 3 5 7 11 13 17 19 23
[N,D] = rat(X) - возвращает массивы N и D, такие что N./D аппроксимирует X с точностью 1 .е-6*norm(Х(:),!). Даже при том, что все числа с плавающей запятой — рациональные числа, иногда желательно аппроксимировать их дробями, у которых числитель и знаменатель являются по возможности малыми целыми числами. Функция rat пытается это сделать;
[N.D] = rat(X.tol) — возвращает массивы N и D, такие что N./D аппроксимирует X с точностью tol.
rat (X) без выходных параметров просто выдает на экран массив цепных дробей;
rats(X.strlen) — возвращает ряд, полученный путем упрощенной рациональной аппроксимации элементов X. Аргумент strlen — длина возвращаемой строки. Функция возвращает знак «*», если полученное значение не может быть напечатано в строке, длина которой задана значением strlen. По умолчанию strlen=13. Тот же алгоритм аппроксимации используется в командном окне MATLAB при задании рационального формата вывода командой format rat.
Пример:
» [g.j]=rat(pi.le-10)
g=
312689
j =
99532
sqrt(A) — возвращает квадратный корень каждого элемента массива X. Для отрицательных и комплексных элементов X функция sqrt(X) вычисляет комплексный результат.
Пример:
» А=[25 21.23 55.8 3]:
» sqrt(A)
ans =
5.0 4.6076 7.4699 1.7321
На рис. 8.1 представлены графики ряда распространенных алгебраических функций. Эти графики получены в результате исполнения следующего файла-сценария:
syms x
subplot(2,2.1).ezplot(x*2.[-5 5]).xlabel( " ).grid on
subplot(2,2.2).ezplot(exp(x),[-2 2]),xlabel(").grid on
subplot(2.2.3).ezplot(log(x).[0 5]),grid on
subplot(2.2.4),ezplot(sqrt(x).[0 10]).grid on
Рис. 8.1. Графики ряда алгебраических функций
Графики дают наглядное представление о поведении представленных на них функций. Обратите внимание на применение графической команды ezplot из пакета Symbolic Math ToolBox (она отличается от обычной команды ezplot MATLAB отсутствием заключения символьных переменных в'), команды syms, также входящей в пакет Symbolic Math .Toolbox и задающей символьную переменную х, и несколько необычное применение команды xlabel (''). Эта команда с аргументом в виде пустой строки снимает вывод обозначения горизонтальной оси на двух верхних графиках. Если этого не сделать, то символ «х» окажется наложенным на наименование функций нижних графиков, которое команда ezpl ot выводит над графиками автоматически.
Тригонометрические и обратные им функции
В системе MATLAB определены следующие тригонометрические и обратные тригонометрические функции. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Напоминаем, что все углы в функциях задаются в радианах.
Э acos (X) — возвращает арккосинус для каждого элемента X. Для действительных значений X в области [-1, 1] acos(X) возвращает действительное значение из диапазона диапазона [0, р], для действительных значений X вне области [-1, 1] acos(X) возвращает комплексное число.
Примеры:
»Y = acos (0.5)
1.0472
» acos([0.5 1 2])
ans =
1.0472 0 0 + 1.31701
acot (X) — возвращает арккотангенс для каждого элемента X. Пример:
» Y=acot(0.l)
у =
1.4711
acsc(X) — возвращает арккосеканс для каждого элемента X. Пример:
» Y= acsc(3)
0.3398
asec(X) — возвращает арксеканс для каждого элемента X. Пример:
» Y=asec(0.5)
Y =
0 + 1.31701
asin(X) — возвращает арксинус для каждого элемента X. Для действительных значений X в области [-1, 1] asin(X) возвращает действительное число из диапазона [-р/2, р/2], для действительных значений X вне области [-1, 1] asin(X) возвращает комплексное число. Пример:
» Y= asin (0.278)
Y =
0.2817
atan(X) — возвращает арктангенс для каждого элемента X. Для действительных значений X atan(X) находится в области [-р/2, р/2]. Пример:
» Y=atan(1)
Y =
0.7854
atan2 (Y, X) — возвращает массив Р той же размерности, что X и Y, содержащий поэлементно арктангенсы отношения вещественных частей Y и X. Мнимые части игнорируются. Элементы Р находятся в интервале [-р, р]. Специфический квадрант определен функциями sign(Y) и sign(X). Это отличает полученный результат от результата atan(Y/X), который ограничен интервалом [-л/2, л/2].
Пример:
» atan2(l,2)
ans =
0.4636
cos(X) — возвращает косинус для каждого элемента X. Пример:
»Х=[123];
» cos(X)
ans =
0.5403 -0.4161 -0.9900
cot(X) — возвращает котангенс для каждого элемента X. Пример:
» Y = cot(2)
Y =
-0.4577
csc(X) — возвращает косеканс для каждого элемента X. Пример:
» Х=[2 4.678 5:0.987 1 3];
» Y = csc(X)
Y =
1.0998 -1.0006 -1.0428
1.1985 1.1884 7.0862
sec(X) — возвращает массив той же размерности что и X, состоящий из секансов элементов X. Пример:
» X=[pi/10 pi/3 pi/5];
» sec(X)
ans =
1.0515 2.0000 1.2361
sin(X) — возвращает синус для каждого элемента X. Пример:
» X=[pi/2 pi/4 pi/6 pi];
» sin(X)
ans =
1.0000 0.7071 0.5000 0.0000
tan(X) — возвращает тангенс для каждого элемента X.
Рис. 8.2. Графики четырех тригонометрических функций
Пример:
» Х=[0.08 0.06 1.09]
X=
0.0800 0.0600 1.0900
» tan(X)
ans=
0.802 0.0601 1.9171
Следующий файл-сценарий позволяет наблюдать графики четырех тригонометрических функций (рис. 8.2):
syms xsubplot(2.2.1).ezplot(sin(x),[-5 5]).xlabel("),gnd on
subplot(2.2.2),ezp"lot(tan(x).[-5 5]).xlabel(").grid on
subplot(2,2,3),ezplot(asin(x),[-1 1]).grid on
subplot(2.2.4),ezplot(atan(x).[-5 5]),grid on
Поскольку многие тригонометрические функции периодичны, появляется возможность формирования из них любопытных комбинаций, позволяющих создавать типовые тестовые сигналы, используемые при моделировании радиоэлектронных устройств. Следующий файл-сценарий строит графики для таких комбинаций, создающих из синусоиды три наиболее распространенных сигнала — прямоугольные, пилообразные и треугольные импульсы:[ В пакете расширения Signal Processing Toolbox есть специальные функции для генерации таких сигналов — square и sawtooth. — Примеч. ред. ]
х=-10:0.01:10;
subplot(2,2.1).plot(x.0.8*sin(x))
.x label('0.8*sin(x)')
subplot(2.2,2).plot(x,0.8*sign(sin(x)))
.x1abel('0.8*sgn(sin(x))')
subplot(2.2.3),plot(x.atan(tan(x/2)))
.xlabel('atan(tan(x/2))')
subplot(2.2.4),plot(x,asin(sin(x)))
.xlabel('asin(sin(x))')
Соответствующие графики представлены на рис. 8.3.
Рис. 8.3. Графики синусоиды, прямоугольных, пилообразных и треугольных колебаний
Дополнительный ряд графиков, полученных комбинациями элементарных функций, показан на рис. 8.4. Эти графики строятся следующим файлом-сценарием:
х=-10:0.01:10;
subplot(2.2.1).plot(x.sin(x). A 3).x1abel('sin(xr3')
subplot(2.2.2).plot(x,abs(s1n(x)))
.xlabel('abs(sin(x))').axis([-10 10 -1 1]),
subplot(2.2,3),plot(x,tan(cos(x)))
.xlabel('tanCcos(x))')
subplot(2.2.4).plot(x.csch(sec(x))),xlabeK'csch(sec(x))')
Рис. 8.4. Графики периодических сигналов без разрывов
Эти графики неплохо моделируют сигналы, получаемые при выпрямлении синусоидального напряжения (или тока) и при прохождении синусоидальных сигналов через нелинейные цепи.
Гиперболические и обратные им функции
Наряду с тригонометрическими функциями в математических расчетах часто используются и гиперболические функции. Ниже приводится список таких функций, определенных в системе MATLAB. Функции вычисляются для каждого элемента массива. Входной массив допускает комплексные значения. Все углы в тригонометрических функциях измеряются в радианах.
acosh(X) — возвращает гиперболический арккосинус для каждого элемента X. Пример:
»Y= acosh (0.7)
Y =
0 + 0.7954i
acoth(X) — возвращает гиперболический арккотангенс для каждого элемента X. Пример:
»Y = acoth (0.1)
Y=
0.1003 + 1.5708i
acsch(X) — возвращает гиперболический арккосеканс для каждого элемента X. Пример:
» Y = acsch(1)
Y =
0.8814
asech(X) — возвращает гиперболический арксеканс для каждого элемента X. Пример:
» Y = asech(4)
Y =
0 + 1.3181i
asinh(X) — возвращает гиперболический арксинус для каждого элемента X. Пример:
» Y = asinh (2.456)
Y =
1.6308
atanh(X) — возвращает гиперболический арктангенс для каждого элемента X. Пример:
» Х=[0.84 0.16 1.39];
» atanh (X)
ans =
1.2212 0.1614 0.9065 + 1.5708i
cosh(X) — возвращает гиперболический косинус для каждого элемента X. Пример:
» Х=[1 23];
» Cosh(X)
ans =
1.5431 3.7622 10.0677
coth(X) — возвращает гиперболический котангенс для каждого элемента X. Пример:
» Y = coth(3.987)
Y =
1.0007
csch(x) — возвращает гиперболический косеканс для каждого элемента X. Пример:
» Х=[2 4.678 5:0.987 1 3];
» Y = csch(X)
Y =
0.2757 0.0186 0.0135
0.8656 0.8509 0.0998
sech(X) — возвращает гиперболический секанс для каждого элемента X. Пример:
» X=[pi/2 pi/4 pi/6 pi];
» sech(X)
ans =
0.3985 0.7549 0.8770 0.0863
sinh(X) — возвращает гиперболический синус для каждого элемента X. Пример:
» X=[pi/8 pi/7 pi/5 pi/10];
» sinh(X)
ans =
0.4029 0.4640 0.6705 0.3194
tanh(X) — возвращает гиперболический тангенс для каждого элемента X. Пример:
» X=[pi/2 pi/4 pi/6 pi/10];
»tanh(X)
ans =
0.9172 0.6558 0.4805 0.3042
Следующий m-файл-сценарий строит графики ряда гиперболических функций:
syms x
subplot(2,2,l).ezplot(sinh(x).[-4 4]).xlabel(").grid on
subplot(2,2.2).ezplot(cosh(x).[-4 4]).xlabel('').grid on
subp1ot(2.2,3).ezplot(tanh(x).[-4 4]).grid on
subplot(2.2.4).ezplot(sech(x).[-4 4]).grid on
Нетрудно заметить, что гиперболические функции в отличие от тригонометрических не являются периодическими. Выбранные для графического представления функции дают примеры характерных нелинейностей.
В другом файле использованы команды для построения графиков ряда обратных гиперболических функций:
syms x
subplot(2,2.1).ezplot(asinh(x).[-4 4]).xlabel(").grid on
subplot(2.2.2),ezp1ot(acosh(x).[0 4]).xlabel(").grid on
subplot(2,2.3),ezplot(atanh(x).[-l l]).grid on
subplot(2.2.4).ezplot(asech(x).[0 l]).grid on
На этих графиках хорошо видны особенности данного класса функций. Такие функции, как обратный гиперболический синус и тангенс, «ценятся» за симметричный вид их графиков, дающий приближение к ряду типовых нелинейностей.
Функции округления и знака
Ряд особых функций служат для выполнения операций округления числовых данных и анализа их знака.
fix(A) — возвращает массив А с элементами, округленными до ближайшего к нулю целого числа. Для комплексного А действительные и мнимые части округляются отдельно.
Примеры:
» А=[1/3 2/3: 4.99 5.01]
А =
0.3333 0.6667
4.9900 5.0100
» fix(A)
ans =
0 0
4 5
floor(A) — возвращает А с элементами, представляющими ближайшее меньшее или равное соответствующему элементу А целое число. Для комплексного А действительные и мнимые части преобразуются отдельно.
Примеры:
» А=[-1/3 2/3: 4.99 5.01]
А =
-0.33330.6667
4.99005.0100
» floor(А)
ans =
-1 0 4 5
ceil (A) — возвращает ближайшее большее или равное А целое число. Для комплексного А действительные и мнимые части округляются отдельно.
Примеры:
» а=-1.789;
» ceil (а)
ans =
-1
» а=-1.789+1*3.908;
» cei l(а)
ans =
-1.0000 + 4.0000i
rem(X,Y) — возвращает X - fix(X./Y).*Y, где fix(X./Y) — целая часть от частного X/Y.
Если операнды X и Y имеют одинаковый знак, функция rem(X, Y) возвращает тот же результат, что mod(X.Y). Однако (для положительных X и Y) rem(-x.y) = mod(-x,y)-y. Функция rem возвращает результат, находящийся между 0 и sign(X)*abs(Y). Если Y=0, функция rem возвращает NaN. Аргументы X и Y должны быть целыми числами. Из-за неточного представления в компьютере чисел с плавающей запятой использование вещественных (или комплексных) входных аргументов может привести к непредвиденным результатам.
Пример:
» Х=[25 21 23 55 3];
» Y=[4 8 23 6 4];
» rem(X.Y)
ans=
15013
round(X) — возвращает округленные до ближайшего целого элементы массива X. Для комплексного X действительные и мнимые части округляются отдельно.
Пример:
» Х=[5.675 21.6+4.897*1 2.654 55.8765];
» round(X)
ans =
6.0000 22.0000 +5.0000i 3.0000 56.0000
sign(X) — возвращает массив Y той же размерности, что и X, где каждый из элементов Y равен:
1, если соответствующий элемент X больше 0;
0, если соответствующий элемент X равен 0;
-1, если соответствующий элемент X меньше 0. Для ненулевых действительных и комплексных X — Sign(X)=X./abs(X).
Пример:
» Х=[-5 21 2 0 -3.7]:
» sign(X)
ans =
-1 1 1 0 -1
Функции комплексного аргумента
Для работы с комплексными числами и данными в MATLAB используются следующие функции:
angle(Z) возвращает аргумент комплексного числа в радианах для каждого элемента массива комплексных чисел Z. Углы находятся в диапазоне [-р; +р]. Для комплексного Z модуль и аргумент вычисляются следующим образом: R = abs(Z) — модуль, theta = angle(Z) — аргумент. При этом формула Z = R.*exp(i*theta) дает переход от показательной формы представления комплексного числа к алгебраической.
Примеры:
» Z=3+i*2
Z =
3.0000 + 2.00001
» theta = angle(Z)
theta =
0.5880
» R = abs(Z)
R =
3.6056
» Z =R.*exp(i*theta)
Z =
3.0000 + 2.00001
imag(Z) — возвращает мнимые части всех элементов массива Z. Пример:
» Z-[1+i, 3+2i, 2+3i];
» imag(Z)
ans =
1 2 3
real(Z) — возвращает вещественные части всех элементов комплексного массива Z. Пример:
» Z=[1+i. 3+2i 2+3i]:
» real(Z)
ans =
1 3 2
conj(Z) — возвращает число, комплексно-сопряженное аргументу Z. Если Z комплексное, то conj(Z) = real(Z) - i *imag (Z). Пример:
» conj(2+31)
ans=
2.0000 - 3.00001
Что нового мы узнали?
В этом уроке мы научились:
Применять арифметические операторы и функции.
Использовать операторы отношения и их функции.
Применять логические операторы.
Использовать специальные символы.
Использовать системные переменные и константы.
Работать с функциями поразрядной обработки, множествами, функциями времени и даты.
Использовать элементарные функции и строить их графики.
Работать с функциями округления и анализа знака.
Использовать функции комплексного аргумента.
Урок №9.
Специальные математические функции
Функции Эйри
Функции Бесселя
Бета-функция и ее варианты
Эллиптические функции и интегралы
Функции ошибки
Интегральная показательная функция
Гамма-функция и ее варианты
Ортогональные полиномы Лежандра
Специальные математические функции являются решениями дифференциальных уравнений специального вида или обозначениями некоторых видов интегралов. Довольно полный обзор специальных функций дается в книгах [55-58], так что ниже мы ограничимся только указанием функций системы MATLAB, реализующих их вычисление. Набор специальных математических функций в системе MATLAB настолько представителен, что позволяет решать практически все задачи, связанные с применением таких функций. Если и обнаруживаются недостающие специальные функции, то пользователь может сам задать их вычисления. Специфика специальных функций в MATLAB та же, что и элементарных, — их аргументами могут быть как одиночные численные значения, так и массивы чисел. В последнем случае функции возвращают массив тех же размерности и размера с преобразованием каждого элемента в соответствии с действием функции. В версии MATLAB 6 вы теперь можете получить справку с записью формул в стандартной математической форме, набрав в командной строке doc function, где function — имя специальной функции.
Функции Эйри
Функция Эйри формирует пару линейно независимых решений линейного дифференциального уравнения вида
Связь между функцией Эйри и модифицированной функцией Бесселя выражается следующей формулой:
где
D=
1.0000 3.0000 + 2.00001
» S=airy(D)
S =
0.1353 -0.0097 + 0.00551
Функции Бесселя
Линейное дифференциальное уравнение второго порядка вида
где v — неотрицательная константа, называется уравнением Бесселя, а его решения известны как функции Бесселя. Функции J v (z) и J_ v (z) формируют фундаментальное множество решений уравнения Бесселя для неотрицательных значений п (это так называемые функции Бесселя первого рода): где для гамма-функции используется следующее представление:
Второе решение уравнения Бесселя, линейно независимое от J v (z), определяется как и задает функции Бесселя второго рода Y v (z).
Функции Бесселя третьего рода (функции Ханкеля) и функция Бесселя первого и второго рода связаны следующим выражением:
bessel j(nu,Z) — возвращает функцию Бесселя первого рода, J v (z), для каждого элемента комплексного массива Z. Порядок ш может не быть целым, однако должен быть вещественным. Аргумент Z может быть комплексным. Результат вещественный, если Z положительно. Если nu и Z — массивы одинакового размера, то результат имеет тот же размер. Если любая входная величина — скаляр, результат расширяется до размера другой входной величины. Если одна входная величина — вектор-строка, а другая — вектор-столбец, результат представляет собой двумерный массив значений функции.
bessely(nu.Z) — возвращает функцию Бесселя второго рода, Y v (z).
[J.ierr] = besse1j(nu,Z) и [Y.ierr] = bessely(nu.Z) функции всегда возвращают массив с флагами ошибок:
ierr = 1 — запрещенные аргументы;
ierr = 2 — переполнение (возвращает Inf);
ierr = 3 — некоторая потеря точности при приведении аргумента;
ierr = 4 — недопустимая потеря точности: Z или nu слишком велики;
ierr = 5 — нет сходимости (возвращает NaN).
Примеры:
» S=[2-51.4.7];T=[8.l.3]:g=besselj(T,S)
g=
0.1114-0.05081 -0.0660 -0.1676
» S-[2-5i,4.7];T=[8.1.3J;[g.ierr]=bessely(T,S)
g=
0.1871 - 0.03241 0.3979 0.2681
ierr =
0 0 0
besselh(nu,К,Z) — для К=1 или 2 возвращает функцию Бесселя третьего рода (функцию Ханкеля) для каждого элемента комплексного массива Z. Если nu и Z — массивы одинакового размера, то результат имеет тот же размер. Если одна из входных величин — скаляр, результат формируется по размеру другой входной величины. Если одна входная величина — вектор-строка, а другая — вектор-столбец, результат представляет собой двумерный массив значений функции.
bessel h(nu.Z) — использует по умолчанию К = 1.
besselh(nu.l.Z.l) — масштабирует H (1) v (z) с коэффициентом exp(-i*z).
besse1h(nu,2,Z.l) — масштабирует H (2) v (z) с коэффициентом exp(+i*z).
[H.ierr] = besselhC...) — всегда возвращает массив с флагами ошибок:
ierr = 1 — запрещенные аргументы;
ierr = 2 — переполнение (возвращает Inf);
ierr = 3 — некоторая потеря точности при приведении аргумента;
ierr = 4 — недопустимая потеря точности: Z или nu слишком велики;
ierr = 5 — нет сходимости (возвращает NaN).
» D=[1.3+2i];F=[3.2]:[K.ierr]=besselk(F,D)
К =
7.1013 -0.0401 - 0.02851
lerr =
0 0
Естественно, что возможно построение графиков специальных функций.
В качестве примера рассмотрим m-файл-сценарий, приведенный ниже:
х=0:0.1:10;
y0=besselj(0.x);
y1=besselj(1.x):
y2=besselj(2.x);
y3=besselj(3.x);
plot(x,y0,.'-m',x,y1,'-r',x,y2,'-.k',x,y3,'-b')
legend('besselj(0.x)'. 'besselj(l.x)' ,'besse1j(2,x)'. ( besselj(3,x)');
Рис. 9.1 иллюстрирует построение четырех функций Бесселя bessel j(n,x) для п-0, 1, 2 и 3 с легендой, облегчающей идентификацию каждой кривой рисунка.
Рис. 9.1. Графики четырех функций Бесселя besselj(n,x)
Эти графики дают наглядное представление о поведении функций Бесселя, широко используемых при анализе поведения систем, описываемых линейными дифференциальными уравнениями второго порядка.
Бета-функция и ее варианты
Бета-функция определяется как
где Г (z) — гамма-функция. Неполная бета-функция определяется по формуле
beta(Z.W) — возвращает бета-функцию для соответствующих элементов комплексных массивов Z и W. Массивы должны быть одинакового размера (или одна из величин может быть скаляром).
beta i nc ( X , Z , W ) — возвращает неполную бета-функцию. Элементы X должны быть в закрытом интервале [0, 1].
beta 1 п ( Z , W ) — возвращает натуральный логарифм бета-функции log ( beta ( Z , W ) ) , без вычисления beta(Z.W). Так как сама бета-функция может принимать очень большие или очень малые значения, функция betaln(Z.W) иногда более полезна, так как позволяет избежать переполнения.
Пример:
» format rat;beta((l:10) 4 ,4)
ans=
1/4
1/20
1/60
1/140
1/280
1/504
1/840
1/1320
1/1980
1/2860
Эллиптические функции и интегралы
Эллиптические функции Якоби определяются интегралом и соотношениями
сn(u) = cos ф,
cn(u)=cosф,
dn(u) = (1-sin 2 ф) 1/2 ,
аm(u) = ф.
В некоторых случаях при определении эллиптических функций используются модули k вместо параметра гл. Они связаны выражением k = т = sin a .
[SN.CN.DN] = ellipj(U.M) — возвращает эллиптические функции Якоби SN, CN и . DN, вычисленные для соответствующих элементов — аргумента U и параметра М. Входные величины U и М должны иметь один и тот же размер (или любая из них может быть скаляром).
[SN.CN.DN] = ellipj(U,M,to1) — возвращает эллиптическую функцию Якоби, вычисленную с точностью tol . Значение tol по умолчанию — eps; его можно увеличить, тогда результат будет вычислен быстрее, но с меньшей точностью. Пример:
» [SN.CN.DN]=ellipj([23.1].[0.5.0.2])
|
|
|
|
|
SN = |
|
|
|
474/719 |
1224/1481 |
|
|
CN = |
|
|
|
1270/1689 |
1457/2588 |
|
|
DN = |
|
|
|
399/451 |
538/579 |
|
|
|
|
|
Полные эллиптические интегралы первого и второго рода определяются следующим образом:
ellipke(M) — возвращает полный эллиптический интеграл первого рода для элементов М.
[К.Е] = ellipke(M) — возвращает полные эллиптические интегралы первого и второго рода.
[К.Е] = ellipke(M.tol) — возвращает эллиптические функции Якоби, вычисленные с точностью tol. Значение по умолчанию — eps; его можно увеличить, тогда результат будет вычислен быстрее, но с меньшей точностью. Пример:
» [f.e]=ellipse([0.2.0.8])
f =
707/426 1018/451
е =
679/456 515/437
Для вычисления этих функций используется итерационный метод арифметико-геометрического среднего (см. детали в Reference Book по системе MATLAB).
Функции ошибки
Функция ошибки определяется следующим образом:
erf(X) — возвращает значение функции ошибки для каждого элемента вещественного массива X. Дополнительная (остаточная) функция ошибки задается соотношением
erfc(X) — возвращает значение остаточной функции ошибки.
erfcx(X) — возвращает значение масштабированной остаточной функции ошибки. Эта функция определяется так:
егfсх(х) = е х erfc(x).
erfinv(Y) — возвращает значение обратной функции ошибки для каждого элемента массива Y. Элементы массива Y должны лежать в области -1<Y<1. Примеры:
» Y=[0.2,-0.3];a=erf(Y)
а =
0.2227 -0.3286
» b=erfc(Y)
b =
0.7773 1.3286
» c=erfcx(Y)
с =
0.8090 1.4537
» d=erfinv(Y)
d =
0.1791 -0.2725
При вычислении данных функций используется аппроксимация по Чебышеву (см. детали алгоритма в Reference Book no MATLAB).
Интегральная показательная функция
Интегральная показательная функция определяется следующим образом:
expint(X) — возвращает интегральную показательную функцию для каждого
элемента X. Пример:
» d=expint([2,3+7i])
d =
0.0489 -0.0013 -0.00601
Для вычисления этой функции используется ее разложение в ряд.
Гамма-функция и ее варианты
Гамма-функция определяется выражением
Неполная гамма-функция определяется как
gamma (А) — возвращает гамма-функцию элементов А. Аргумент А должен быть вещественным.
gamma iпс(X,А) — возвращает неполную гамма-функцию соответствующих элементов X и А. Аргументы X и А должны быть вещественными и иметь одинаковый размер (или любой из них может быть скалярным).
gammaln(A) —возвращает логарифмическую гамма-функцию, gammaln(A) = 1og(gamma(A)). Команда gammaln позволяет избежать переполнения, которое может происходить, если вычислять логарифмическую гамма-функцию непосредственно, используя 1og(gamma(A)).
Примеры:
» f=[5.3];d=gamma(f)
d =
24 2 » h=gammaln(f)
h =
3.1781 0.6931
Гамма-функция имеет довольно сложный», график, заслуживающий построения (рис. 9.2).
Рис. 9.2. График гамма-функции
Это можно осуществить с помощью следующего файла-сценария:
%Gamma function graphicclear syms x
ezplot(gamma(x).[-4 4]) grid on
Гамма-функция вычисляется по известному алгоритму W. J. Kody (1989 г.). Для вычисления неполной гамма-функции используются рекуррентные формулы.
Ортогональные полиномы Лежандра
Функция Лежандра определяется следующим образом:
где Рn(*) — полином Лежандра степени п, рассчитываемый как
legendre(n.X) —возвращает функции Лежандра степени п и порядков m = 0,1..... n, вычисленные для элементов X. Аргумент п должен быть скалярным целым числом, не превосходящим 256, а X должен содержать действительные значения в области -UxJl. Возвращаемый массив Р имеет большую размерность, чем X, и каждый элемент P(m+l,dl,d2...) содержит связанную функцию Лежандра степени п и порядка т, вычисленную в точках X(dl,d2...).
1egendre(n,X, 'sch') — возвращает квазинормализованные по Шмидту функции Лежандра.
Пример:
» g=rand(3.2);legendre(3,g)
|
|
|
|
|
|
-0.4469 |
-0.0277 |
0.1534 |
|
|
-0.0558 |
1.4972 |
-2.0306 |
|
|
5.4204 |
0.2775 |
4.0079 |
|
|
-10.5653 |
-14.9923 |
-2.7829 |
|
|
|
|
|
|
ans(:.:.2) =
-0.4472-0.34040.0538
0.0150 -1.0567 -1.9562
5.3514 5.7350 4.4289
-10.7782 -7.3449 -3.4148
Что нового мы узнали?
В этом уроке мы научились:
Вычислять функции Эйри.
Вычислять функции Бесселя разного рода.
Вычислять бета-функцию и ее варианты.
Использовать эллиптические функции и интегралы.
Вычислять функции ошибки.
Вычислять интегральные показательные функции.
Вычислять гамма-функцию и ее варианты.
Использовать ортогональные полиномы Лежандра.
Урок №10.
Операции с векторами и матрицами
Создание стандартных матриц
Создание векторов равноотстоящих точек в линейном и логарифмическом масштабах
Создание массивов со случайными элементами
Конкатенация матриц
Изменение порядка расположения элементов матриц
Вычисление сумм и произведений
Изменение формы матриц
Выделение треугольных частей матриц
Вычисление тестовых матриц
Матричные функции
Матрицы представляют собой самые распространенные объекты системы MATLAB. Ниже описываются основные операции с матрицами. По обилию матричных операторов и функций MATLAB является лидером среди массовых систем компьютерной математики.
Создание матриц с заданными свойствами
Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:
еуе(n) — возвращает единичную матрицу размера nrn;
eye(m.n) или еуе([m n]) — возвращают матрицу размера mm с единицами по диагонали и нулями в остальных ячейках;
eye(size(A)) — возвращает единичную матрицу того же размера, что и А.
Единичная матрица не определена для многомерных массивов. Так, функция у = eye([2,3,4]) при попытке ее вычисления приведет к ошибке.
Пример использования функции eye:
|
» t=eye(4. |
5) |
|
|
|
|
|
t = |
|
|
|
|
|
|
1 |
0 |
0 |
0 |
0 |
|
|
0 |
1 |
0 |
0 |
0 |
|
|
0 |
0 |
1 |
0 |
0 |
|
|
0 |
0 |
0 |
1 |
0 |
|
Создание матрицы с единичными элементами
Для создания матриц, все элементы которых — единицы, используется функция ones:
ones(n) — возвращает матрицу размера nхn, все элементы которой — единицы. Если п — не скаляр, то появится сообщение об ошибке;
ones(m.n) или ones([m п]) — возвращают матрицу размера mxn, состоящую из единиц;
ones(dl.d2,d3....) или ones([dl1 d2 d3...]) — возвращает массив из единиц с размером d1xd2xd3x...;
ones(size(A)) — возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами в отличие от единичной матрицы в MATLAB определена и для многомерных массивов.
Пример:
» s=ones(3,4)
s=
1 1 1 1
1 1 1 1
1 1 1 1
Создание матрицы с нулевыми элементами
Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц:
zeros(п) — возвращает матрицу размера nхn, содержащую нули. Если n — не скаляр, то появится сообщение об ошибке;
zeros(m.n) или zeros([m n]) — возвращают матрицу размера mxn, состоящую из нулей;
zeros(d1.d2,d3,...) или zeros([d1.d2.d3...]) — возвращают массив из нулей размера d1xd2xd3x...;
zeros(size(A)) — возвращает массив нулей того же размера и размерности, что и А.
Пример:
» D=zeros(3.2)
D=
0 0
0 0
0 0
Создание линейного массива равноотстоящих точек
Функция linspace формирует линейный массив равноотстоящих узлов. Это подобно оператору :, но дает прямой контроль над числом точек. Применяется в следующих формах:
llnspace(a.b) — возвращает линейный массив из 100 точек, равномерно распределенных между а и b;
linspace(a,b,n) — генерирует п точек, равномерно распределенных в интервале от а до b.
Пример:
» M-linspace(4.20.14)
М=
Columns I through 7
4.0000 5.2308 6.4615 7.6923 8.9231 10.153811.3846
Columns 8 through 14
12.615413.846215.076916.307717.538518.769220.0000
Создание вектора равноотстоящих в логарифмическом масштабе точек
Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот. Это логарифмический эквивалент оператора : и функции linspace:
logspace(a.b) — возвращает вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10^0 и 10^b;
logspace(a.b.n) — возвращает n точек между декадами 10^a и 10^b;
logspace(a.pi) — возвращает точки в интервале между 10^a и п. Эта функция очень полезна в цифровой обработке сигналов.
Все аргументы функции logspace должны быть скалярными величинами. Пример:
» L=logspaced.2,14)
L =
Columns 1 through 7
10.000011.937814.251017.012520.309224.244628.9427
Columns 8 through 14
34.551141.246349.238858.780270.170483.7678100.0000
Создание массивов со случайными элементами
р = randperm(n) — возвращает случайные перестановки целых чисел 1:n в векторе-строке. Пример:
» randperm(6)
ans =
243651
Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1):
rand(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
rand(m.n) или rand([m п]) — возвращают матрицу размера mxn;
rand(m.n,p....) или rand([m n р...]) — возвращает многомерный массив;
rand(size(A)) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону;
rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения;
rand(' state') — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции:
rand('state' .s) — устанавливает состояние в s;
rand( 'state' ,0) — сбрасывает генератор в начальное состояние;
rand( 'state'. j) — для целых j, устанавливает генератор в j-е состояние;
rand( 'state' ,sum(100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
Пример:
» Y=rand(4,3)
Y=
0.9501 0.8913 0.8214
0.2311 0.7621 0.4447
0.6068 0.4565 0.6154
0.4860 0.0185 0.7919
Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд:
» X=rand(1000,1);
» Y=rand(1000,1);
» plot(X,Y,'.')
Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.
Рис. 10.1. Случайные точки с равномерным распределением координат на плоскости
Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:
randn(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
randn(m.n) или randn([m n]) — возвращают матрицу размера mxn;
randn(m,n,p,...) или randn([m n р...]) — возвращает массив с элементами, значения которых распределены по нормальному закону;
randn(size(A)) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону;
randn (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение;
randn( 'state') — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции:
randn('state',s) — устанавливает состояние в s;
randn('state' ,0) — сбрасывает генератор в начальное состояние;
randn('state', j) — для целых j устанавливает генератор в J-e состояние;
randn('state', sum( 100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
Пример:
>>Y=randn(4.3)
Y =
-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258
Проверить распределение случайных чисел по нормальному закону можно, построив гистограмму распределения большого количества чисел. Например, следующие команды
» Y=randn(10000,1);
» hist(Y,100)
строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.
Рис. 10.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах
Из рисунка видно, что огибающая гистограммы действительно близка к нормальному закону распределения.
В пакете расширения Statistics Toolbox можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.
Конкатенация матриц
Конкатенацией называют объединение массивов, которое реализует следующая функция.
С = cat (dim, А, В) — объединяет массивы А и В в соответствии со спецификацией размерности dim и возвращает объединенный массив; dim = 1 — горизонтальная конкатенация, dim = 2 — вертикальная, dim = 3 — многомерный массив размерности 3 и т. д.;
С = cat(dim,Al,A2,A3,A4,...) объединяет все входные массивы (А1, А2, A3, А4 и т. д.) в соответствии со спецификацией размерности dim и возвращает объединенный массив;
cat(2.A,B) — это то же самое, что и [А,В],асаt(,А,В) —то же самое, что и [А; В]. При записи cat (dim, С (:)) или cat (dim, С. field) эта функция применима к массивам ячеек или структур, содержащим численные матрицы. Пример:
» A =[2.4:3,5];B=[8,7;9.0];C=cat(1.A.B)
С =
2 4
3 5
8 7
9 0
Создание матриц с заданной диагональю
Свойства матриц сильно зависят от их диагональных элементов. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами:
X = diag(v.k) — для вектора v, состоящего из п компонентов, возвращает квадратную матрицу X порядка n+abs(k) с элементами v на k-й диагонали, при k=0 -это главная диагональ (из левого верхнего угла матрицы в правый нижний угол), при k>0 — одна из диагоналей (диагональ в терминологии MATLAB — это линия, параллельная главной диагонали) выше главной диагонали, при k<0 — одна из нижних диагоналей. Остальные элементы матрицы — нули;
X = diag(v) — помещает вектор v на главную диагональ (то же. что и в предыдущем случае при k=0);
v = diag(X.k) — для матрицы X возвращает вектор-столбец, состоящий из элементов n-й диагонали матрицы X;
v = diag(X) — возвращает главную диагональ матрицы X (то же, что и в предыдущем случае при k=0).
Примеры:
» v=[2.3];X-d1ag(v.2)
X=
0 0 2 0
0 0 0 3
0 0 0 0
0 0 0 0
» X=[2,5.45,6;3.5.4.9;7.9.4.8;5.66,45.2];
v=diag(X,0)
v =
2
5
4
2
Перестановки элементов матриц
Для перестановок элементов матриц служат следующие функции:
В = fiiplr(A) — зеркально переставляет столбцы матрицы А относительно вертикальной оси.
Пример:
» F=[1.2.3;5.45,3]
F =
1 2 3
5 45 3
» fliplr(F)
ans=
3 2 1
3 45 5
В = flipud(A) — зеркально переставляет строки матрицы А относительно горизонтальной оси.
Пример:
|
||||
|
F = |
|
|
|
|
3 |
2 |
12 |
|
|
6 |
3 |
2 |
|
|
» flipud(F) |
|
||
|
ans = |
|
|
|
|
6 |
3 |
2 |
|
|
3 |
2 |
12 |
|
|
perms(v) — возвращает матрицу Р, которая содержит все возможные перестановки элементов вектора v. каждая перестановка в отдельной строке. Матрица Р содержит n! строк и n столбцов.
Пример:
» v=[l 4 6]
v =
1 4 6
P=perms(v)
6 4 1
4 6 1
6 1 4
1 6 4
4 1 6
1 4 6
Вычисление произведений
Несколько простых функций служат для перемножения элементов массивов:
prod(A) — возвращает произведение элементов массива, если А — вектор, или вектор-строку, содержащую произведения элементов каждого столбца, если А — матрица;
prod (A, dim) — возвращает матрицу (массив размерности два) с произведением элементов массива А по столбцам (dim=l), по строкам(dim=2), по иным размерностям в зависимости от значения скаляра dim.
Пример:
|
|
|
|
|
|
|
» A=[1234; |
2457; |
6 |
|
|
|
A |
- |
|
|
|
|
|
1 2 |
3 |
4 |
|
|
|
2 4 |
5 |
7 |
|
|
|
6 8 |
3 |
4 |
|
|
>; |
> B=prod(A) |
|
|
|
|
В |
= |
|
|
|
|
|
12 64 |
45 |
i: |
|
|
|
|
|
|
|
Примеры:
» А=[1 2 3; 4 5 6; 7 8 9]
А=
1 2 3
4 5 6
7 8 9
» В = cumprod(A)
cross(U. V) — возвращает векторное произведение векторов U и V в трехмерном пространстве, т. е. W=UxV. U и V — обязательно векторы с тремя элементами;
cross(U,V,dim) — возвращает векторное произведение U и V по размерности, определенной скаляром dim. U и V — многомерные массивы, которые должны иметь одну и ту же размерность, причем размер векторов в каждой размерности size(U.dim) и size(V.dim) должен быть равен 3.
Пример:
» а = [6 5 3]; b= [1 7 6];с = cross(a.b)
с =
9 -33 37
Суммирование элементов
Определены следующие функции суммирования элементов массивов:
sum(A) — возвращает сумму элементов массива, если А — вектор, или вектор-строку, содержащую сумму элементов каждого столбца, если А — матрица;
sum(A.dim) — возвращает сумму элементов массива по столбцам (dim-1), строкам (dim=2) или иным размерностям в зависимости от значения скаляра dim.
Пример:
» A=magic(4) |
|
|
А = |
|
|
16 2 |
3 |
13 |
5 11 |
10 |
8 |
9 7 |
6 |
12 |
4 14 |
15 |
1 |
»B=sum(A) |
|
|
В = |
|
|
34 34 34 34
cumsum(A) — выполняет суммирование с накоплением. Если А — вектор, cumsum(A) возвращает вектор, содержащий результаты суммирования с накоплением элементов вектора А. Если А — матрица, cumsum(A) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А;
cumsum(A.dim) — выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim. Например, cumsum(A.l) выполняет суммирование по столбцам.
Пример:
» A=magic(4)
А =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
» В = cumsum(A)
В =
16 2 3 13
21 13 13 21
30 20 19 33
34 34 34 34
Функции формирования матриц
Для создания матриц, состоящих из других матриц, используются следующие функции:
repmat (А, m, п) — возвращает матрицу В, состоящую из mxn копий матрицы А (т. е. в матрице mxn каждый элемент заменяется на копию матрицы А);
repmat(А,п) — формирует матрицу, состоящую из пхп копий матрицы А;
repmat(A,[m n]) — дает тот же результат, что и repmat(A,m,n);
repmat(A,[m п р...]) — возвращает многомерный массив (mxnxp...), состоящий из копий многомерного массива или матрицы А;
repmat (A, m, п) — когда А — скаляр, возвращает матрицу размера mxn со значениями элементов, заданных А, Это делается намного быстрее, чем A*ones(m,n).
reshape(A,m,n) — возвращает матрицу В размерностью mxn, сформированную из А путем последовательной выборки по столбцам. Если число элементов А не равно mxn, то выдается сообщение об ошибке;
reshape(A,m,n,p,...) или В = reshape(A.[m n р...]) — возвращает N-мерный массив с элементами из А, но имеющий размер mxnxp.... Произведение mxnxp... должно быть равно значению prod(size(A)).
reshape(A, slz) — возвращает N-мерный массив с элементами из А, но перестроенный к размеру, заданному с помощью вектора siz.
Пример:
» F=[3.2.7.4:4.3.3.2:2.2.5.5]
F =
3 2 7 4
4 3 3 2
2 2 5 5
» reshape(F.2,6)
ans=
3 2 3 7 5 2
4 2 2 3 4 5
Поворот матриц
Следующая функция обеспечивает поворот матрицы (по расположению элементов): О rot90(A) — осуществляет поворот матрицы А на 90° против часовой стрелки;
rot90(A,k) — осуществляет поворот матрицы А на величину 90*k градусов, где k — целое число.
Пример:
» М=[3.2,7;3.3.2:1.1.1]
|
|
|
|
|
|
|
м= |
|
|
|
|
|
|
3 |
2 |
7 |
|
|
|
3 |
3 |
2 |
|
|
|
1 |
1 |
1 |
|
|
» rot90(M) |
|
|||
|
ans |
= |
|
|
|
|
|
7 |
2 |
1 |
|
|
|
2 |
3 |
1 |
|
|
|
3 |
3 |
1 |
|
|
|
|
|
|
|
Выделение треугольных частей матриц
При выполнении ряда матричных вычислений возникает необходимость в выделении треугольных частей матриц. Следующие функции обеспечивают такое выделение:
tril(X) — возвращает матрицу, все элементы которой выше главной диагонали X заменены нулями, неизменными остаются лишь элементы нижней треугольной части, включая элементы главной диагонали;
tril(X.k) — возвращает неизменной нижнюю треугольную часть матрицы X начиная с k-й диагонали. При k=0 это главная диагональ, при k>0 — одна из верхних диагоналей, при k<0 — одна из нижних диагоналей.
Пример:
» М=[3.1.4:8.3.2;8.1.1]
М =
3 1 4
8 3 2
8 1 1
» tril(M)
ans =
3 0 0
8 3 0
8 1 1
triu(X) — возвращает неизменной верхнюю треугольную часть матрицы X включая элементы главной диагонали, и заменяет нулями остальные элементы;
triu(X.k) — возвращает неизменной верхнюю треугольную часть матрицы X начиная с k-й диагонали. При k=0 — это главная диагональ, при k>0 — одна из верхних диагоналей, при k<0 — одна из нижних диагоналей.
Пример:
м =
3 1 4
8 3 2
8 1 1
» triu(M)
ans =
3 1 4
0 3 2
0 0 1
Вычисление сопровождающей матрицы
Начиная с этого раздела рассматриваются функции, относящиеся к различным специальным матрицам. Они довольно широко используются при решении достаточно серьезных задач матричного исчисления. В связи с тем, что назначение соответствующих функций вытекает из их наименования, мы не будем сопровождать описание вводными комментариями. Соответствующие подробные определения вы найдете в книге. Рекомендуем читателю построить графики, представляющие элементы этих матриц.
compan(u) — возвращает сопровождающую матрицу, первая строка которой равна -u (2: n) /u(1), где и — вектор полиномиальных коэффициентов. Собственные значения compan(u) — корни многочлена. Пример: для многочлена х^3+х ^ 2-6х-8 вектор полиномиальных коэффициентов г имеет следующий вид:
» r=[1.1.-6.-8]
r =
1 1 -6 -8
» A=compan(r) % сопровождающая матрица
А =
-1 6 8
1 0 0
0 1 0
» eigtcompan(r)) % корни многочлена
ans =
-2.0000
2.5616
-1.5616
Вычисление тестовых матриц
Для выполнения ряда вычислений в области линейной алгебры создан ряд специальных матриц, именуемых тестовыми матрицами. Такие матрицы создаются указанными ниже средствами.
[А.В,С....] = gallerу('tmfun',P1.P2,...) — возвращает тестовые матрицы, определенные строкой tmfun, где tmfun — это имя семейства матриц, выбранное из списка. Р1, Р2,„. — входные параметры, требуемые для конкретного семейства матриц. Число используемых параметров P1, P2,... изменяется от матрицы к матрице. Функция gallery хранит более 50 различных тестовых матричных функций, полезных для тестирования численных алгоритмов и других целей (включая матрицы Коши, Чебышева, фон Неймана, Вандермонде,Уилкинсо-на и т. д.).
Пример:
» A=gallery('dramadah',5.2)
|
||||||
|
А = |
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
|
|
0 |
1 |
1 |
0 |
1 |
|
|
0 |
0 |
1 |
1 |
0 |
|
|
0 |
0 |
0 |
1 |
1 |
|
|
0 |
0 |
0 |
0 |
1 |
|
|
Матрицы Адамара
Н = hadamard(n) — возвращает матрицу Адамара порядка п. Матрица Адамара — это. квадратная матрица размера п, составленная из значений 1 и — 1, столбцы которой ортогональны, так что справедливо соотношение Н' *Н=n* I, где I = eye (п, п) (единичная квадратная матрица размера п). Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов. Матрица Адамара размера nхn при n>2 существует, только если п делится на 4 без остатка. Алгоритм MATLAB вносит дополнительные ограничения, вычисляя матрицы Адамара только для тех n, когда или n, или n/12, или n/20 являются степенями по основанию 2.
Пример:
|
||||
|
»Н= |
hadamard(4) |
|
|
|
Н = |
|
|
|
|
1 |
1 1 |
1 |
|
|
1 |
-1 1 |
-1 |
|
|
1 |
1 -1 |
-1 |
|
|
1 |
-1 -1 |
1 |
|
|
|
|
|
|
Матрицы Ганкеля
hankel(c.r) — возвращает матрицу Ганкеля, первый столбец которой совпадает с вектором с, а последняя строка — с вектором г. Если последний элемент вектора с отличен от первого элемента вектора г, то выдается предупреждение об ошибке, но предпочтение отдается последнему элементу вектора с.
Примеры:
» с=1:4
С=
1 2 3 4
» r=6:10
r =
б 7 8 9 10
» Н - hankel(c.r)
Warning: Column wins anti-diagonal conflict.
H =
1 2 3 4 7
2 3 4 7 8
3 4 7 8 9
4 7 8 9 10
hankel (с) — возвращает квадратную матрицу Ганкеля, первый столбец которой совпадает с вектором с и все элементы, лежащие ниже первой антидиагонали (из левого нижнего угла матрицы в правый верхний угол), равны 0.
Матрицы Гильберта
hilb(n) — возвращает матрицу Гильберта порядка п. Матрица Гильберта является примером плохо обусловленной матрицы. Элементы матрицы Гильберта определяются как H(i.j)=l/(i+j-l).
Пример:
» Н = hilb(5)
Н=
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
» cond(hilb(5))
ans =
4.7661е+005
Значение числа обусловленности матрицы Гильберта указывает на очень плохо обусловленную матрицу.
invhilb(n) — возвращает матрицу, обратную матрице Гильберта порядка п (п<15). Для п>15 функция invhilb(n) возвращает приближенную матриц. Точная обратная матрица — это матрица с очень большими целочисленными значениями. Эти целочисленные значения могут быть представлены как числа с плавающей запятой без погрешности округления до тех пор, пока порядок матрицы п не превышает 15.
Пример:
»Н=invhilb(S)
Н =
|
25 |
-300 |
1050 |
-1400 |
630 |
|
|
-300 |
480 |
-18900 |
26880 |
-12600 |
|
|
1050 |
18900 |
79380 |
-117600 |
56700 |
|
|
-1400 |
26880 |
-117600 |
179200 |
-88200 |
|
|
630 |
-12600 |
56700 |
-88200 |
44100 |
|
А вот результат обращения матрицы Гильберта с плавающей запятой:
» inv(hilb(5))
ans =
1.0e+005 *
0.0002 -0.0030 0.0105 -0.0140 0.0063
-0.0030 0.0480 -0.1890 0.2688 -0.1260
0.0105 -0.1890 0.7938 -1.1760 0.5670
-0.0140 0.2688 -1.1760 1.7920 -0.8820
0.0063 -0.1260 0.5670 -0.8820 0.4410
Вычисление магического квадрата
magic(n) — возвращает матрицу размера nхn, состоящую из целых чисел от 1 до n 2 , в которой суммы элементов по строкам, столбцам и главным диагоналям равны одному и тому же числу. Порядок матрицы должен быть больше или равен 3.
|
|||||
|
Пример: » M=magic(4) |
|
|||
|
м = |
|
|
|
|
|
16 |
2 |
3 |
13 |
|
|
5 |
11 |
10 |
8 |
|
|
9 |
7 |
6 |
12 |
|
|
4 |
14 |
15 |
1 |
|
|
|
|
|
|
|
Матрицы Паскаля
pascal (n) — возвращает матрицу Паскаля порядка п, т. е. симметрическую положительно определенную матрицу с целочисленными элементами, взятыми из треугольника Паскаля;
pascal (n. 1) — возвращает нижний треугольный фактор (до знаков столбцов) Холецкого для матрицы Паскаля. Полученная матрица, все элементы которой выше главной диагонали равны нулю, является своей обратной матрицей, т. е. квадратным корнем из единичной матрицы;
pascal(n,2) — возвращает матрицу, полученную в результате транспонирования и перестановок матрицы pascal (n. 1), при этом результат является кубическим корнем из единичной матрицы.
Матрицы Теплица
toepl itz(c , r) — возвращает несимметрическую матрицу Топлица, где с — ее первый столбец, а г — первая строка. Если первый элемент столбца с и первый элемент строки г различны, то выдается соответствующее предупреждение, но отдается предпочтение элементу столбца;
toeplitz(r) — возвращает симметрическую, или эрмитову, матрицу Топлица, однозначно определяемую вектором r. Пример:
» с=1:3;
» r=1.5:4.0;
» Т= toeplitz(c.r)
Warning: Column wins diagonal conflict.
Т =
1.0000 2.5000 3.5000
2.0000 1.0000 2.5000
3.0000 2.0000 1.0000
Матрицы Уилкинсона
wilkinson(n) — возвращает одну из тестовых матриц Уилкинсона. (Другие матрицы Уилкинсона можно вызвать при помощи функции gallery). Это симметрич-ческая матрица, собственные значения которой попарно близки, но не равны друг другу. Наиболее широко используется wilkinson(21), собственные значения которой (10.746) совпадают до 14-го знака после запятой (различаются с 15-го).
Пример:
W = wilkinson(5)
W=
2 1 0 0 0
1 1 1 0 0
0 1 0 1 0
0 0 1 1 1
0 0 0 1 2
Данные о множестве других тестовых матриц можно найти в справочной системе MATLAB.
Матричные функции
Весьма представителен в MATLAB набор матричных функций. Они перечислены ниже.
ехрт(Х) — возвращает е х от матрицы X. Комплексный результат получается, если X имеет неположительные собственные значения. Функция expm является встроенной и использует разложение Паде. Ее вариант в виде m-файла располагается в файле expm1.m. Второй метод вычисления матричной экспоненты использует разложение Тейлора и находится в файле expm2.m. Метод Тейлора не рекомендуется применять как основной, так как он зачастую бывает относительно медленным и неточным. Реализация третьего способа вычисления матричной экспоненты находится в файле ехртЗ.m и использует спектральное разложение матрицы А. Этот метод неудачен, если входная матрица не имеет полного набора линейно независимых собственных векторов.
Пример:
» S-[l.0.3:1.3.1:4.0.0]
S=
1 0 3
1 3 1
4 0 0
>>a=expm(S)
а =
31.2203 0 23.3779
38.965920.0855 30.0593
31.1705 0 23.4277
funm(X, @f unction)[ Форма funm(X,@function), как в предыдущих версиях MATLAB, по-прежнему возможна, но не рекомендуется.— Примеч. ред. ]— возвращает любую функцию от квадратной матрицы X, если правильно ввести имя, составленное из латинских букв. Команды funm(X ,@exp), funm(X,@sqrt), funm(X.@log) Hexpm(X),sqrtm(x),logm(X) вычисляют соответственно одинаковые функции, но используют разные алгоритмы. Однако предпочтительнее использовать ехрт(Х), sqrtm(x).logm(X);
[Y.esterr] = funm(X.@f uncti on) — не выдает никакого сообщения, но помимо результата вычислений в матрице Y возвращает грубую оценку относительной погрешности результата вычислений funm в esterr. Если матрица X — действительная симметрическая или комплексная эрмитова, то ее форма Шура диагональна и полученный результат может иметь высокую точность.
Примеры:
» S=[1,0.3:1.3.1:4,0.0]
1 0 3
1 3 1
4 0 0
» a=funm(S.@exp)
a=
31.22030.0000 23.3779
38.965920.085530.0593
31.1705-0.000023.4277
logm(X) — возвращает логарифм матрицы. Результат получается комплексным, если X имеет отрицательные собственные значения;
[Y.esterr]=logm(X) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки norm(expm(Y)-X)/norm(X);
Если матрица X — действительная симметрическая или комплексная эрмитова, то теми же свойствами обладает и logm(X).
Пример:
а=
31.22030.0000 23.3779
38.965920.085530.0593
31.1705-0.000023.4277
» logm(a)
ans =
1.0000 0.0000 3.0000
1.0000 3.0000 1.0000
4.0000 -0.0000-0.0000
sqrtm(X) — возвращает квадратный корень из X, соответствующий неотрицательным действительным частям собственных значений X. Результат получается комплексным, если X имеет отрицательные собственные значения. Если X вырожденная, то выдает предупреждение об ошибке;
[Y.resnonii]=sqrtm(X) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки по нормам Фробениуса (см. урок 11) norm(X-Y ^ 2, ' fro') /norm(X, ' fro') ;
[Y. alpha, condest]=sqrtm(X) — с тремя выходными аргументами функция помимо квадратного корня возвращает также фактор стабильности (но не невязку!) и оценку числа обусловленности результирующей матрицы Y.
Пример:
» S=[2.1.0;6,7.-2:3.4.0]; » e=sqrtm(S)
е =
1.2586 0.2334 0.0688
1.6066 2.7006 -0.6043
0.5969 1.1055 0.7918
Что нового мы узнали?
В этом уроке мы научились:
Создавать матрицы различного вида, включая «магическую» матрицу.
Создавать векторы равноотстоящих точек с разным масштабом.
Объединять матрицы, используя функцию конкатенации.
Создавать матрицы с заданной диагональю.
Выполнять перестановки элементов матриц.
Вычислять суммы и произведения элементов матриц.
Осуществлять поворот матриц и выделение их треугольных частей.
Работать с тестовыми матрицами Адамара, Ганкеля, Гильберта, Паскаля, Теплица и Уилкинсона.
Работать с различными матричными функциями.
Урок №11.
Матричные операции линейной алгебры
Вычисление нормы и чисел обусловленности матрицы
Определитель и ранг матрицы
Определение нормы вектора
Определение ортонормированного базиса матрицы
Приведение матрицы к треугольной форме
Определение угла между двумя подпространствами
Вычисление следа матрицы
Разложение Холецкого
Обращение матриц
LU- и QR-разложения
Вычисление собственных значений и сингулярных чисел
Приведение матриц к формам Шура и Хессенберга
Линейная алгебра — область, в которой наиболее часто используются векторы и матрицы. Наряду с операциями общего характера, рассмотренными выше, применятся функции, решающие наиболее характерные задачи линейной алгебры. Они и рассмотрены в данном уроке.
Вычисление нормы и чисел обусловленности матрицы
Для понимания всего нижеизложенного материала необходимо учесть, что нормы матриц в MATLAB отличаются от норм векторов.
Пусть А —матрица. Тогда n=norm(A) эквивалентно п=погп(А,2) и возвращает вторую норму, т. е. самое большое сингулярное число А. Функция n=norm(A, 1) возвращает первую норму, т. е. самую большую из сумм абсолютных значений элементов матрицы по столбцам. Норма неопределенности n=norm(A, inf) возвращает самую большую из сумм абсолютных значений элементов матрицы по рядам. Норма Фробениуса (Frobenius) norm(A, 'fro') = sqrt(sum(diag(A'A))).
Пример:
» A=[2.3.1:1.9.4:2.6.7]
A =
2 3 1
1 9 4
2 6 7
» norm(A.l)
ans =
18
Числа обусловленности матрицы определяют чувствительность решения системы линейных уравнений к погрешностям исходных данных. Следующие функции позволяют найти числа обусловленности матриц.
cond(X) — возвращает число обусловленности, основанное на второй норме, то есть отношение самого большого сингулярного числа X к самому малому. Значение cond(X), близкое к 1, указывает на хорошо обусловленную матрицу;
с = cond(X.p) — возвращает число обусловленности матрицы, основанное на р-норме: norm(X.p)*norm(inv(X),p), где р определяет способ расчета:
р=1 — число обусловленности матрицы, основанное на первой норме;
р=2 — число обусловленности матрицы, основанное на второй норме;
p= 'fro' — число обусловленности матрицы, основанное на норме Фробе-ниуса (Frobenius);
р='inf' — число обусловленности матрицы, основанное на норме неопределенности.
с = cond(X) — возвращает число обусловленности матрицы, основанное на второй норме.
Пример:
» d=cond(hilb(4))
d =
1.5514е+004
condeig(A) — возвращает вектор чисел обусловленности для собственных значений А. Эти числа обусловленности — обратные величины косинусов углов между левыми и правыми собственными векторами;
[V.D.s] = condeig(A) — эквивалентно [V,D] = eig(A): s = condeig(A);.
Большие числа обусловленности означают, что матрица А близка к матрице с кратными собственными значениями.
Пример:
» d=condeig(rand(4))
d =
1.0766
1.2298
1.5862
1.7540
rcond(A) — возвращает обратную величину обусловленности матрицы А по первой норме, используя оценивающий обусловленность метод LAPACK. Если А — хорошо обусловленная матрица, то rcond(A) около 1.00, если плохо обусловленная, то около 0.00. По сравнению с cond функция rcond реализует более эффективный в плане затрат машинного времени, но менее достоверный метод оценки обусловленности матрицы.
Пример:
» s=rcond(hilb(4))
s =
4.6461е-005
Определитель и ранг матрицы
Для нахождения определителя (детерминанта) и ранга матриц в MATLAB имеются следующие функции:
det(X) — возвращает определитель квадратной матрицы X. Если X содержит только целые элементы, то результат — тоже целое число. Использование det(X)=0 как теста на вырожденность матрицы действительно только для матрицы малого порядка с целыми элементами.
Пример:
» А=[2,3,6:1.8.4;3.6,7]
А =
|
|
|
|
|
|
2 |
3 |
6 |
|
|
1 |
8 |
4 |
|
|
3 |
6 |
7 |
|
|
|
|
|
|
» det(A)
ans =
-29
Детерминант матрицы вычисляется на основе треугольного разложения методом исключения Гаусса:
[L.U>lu(A): s=det(L): d=s*prod(diag(U)).
Ранг матрицы определяется количеством сингулярных чисел, превышающих порог
tol=max(size(A))*nprm(A)*eps.
При этом используется следующий алгоритм:
s=svd(A);tol=max(size(A))*npnri(A)*eps;r=sum(s>tol);
Для вычисления ранга используется функция rank:
rank (А) — возвращает количество сингулярных чисел, которые являются большими, чем заданный по умолчанию допуск;
rank(A.tol) — возвращает количество сингулярных чисел, которые превышают tol. Пример:
» rank(hilbdl))
ans =
10
Определение нормы вектора
Норма вектора — скаляр, дающий представление о величине элементов вектора. Нужно различать норму матрицы и норму вектора. Функция norm определяет, является ли ее аргументом (входным аргументом в терминологии MATLAB) вектор или матрица, и измеряет несколько различных типов норм векторов:
norm(X)=norm(X,2) — вторая норма возвращает наибольшее сингулярное число X, max(svd(X));
norm(X.p) , где р — целое положительное число, — возвращает корень степени р из суммы абсолютных значений элементов вектора, возведенных в степень р. При р = 1 это может совпадать либо с первой нормой, либо с нормой неопределенности матриц;
norm(X, 'inf') возвращает максимальное из абсолютных значений элементов вектора; О norm(X, '-Inf') возвращает минимальное из абсолютных значений элементов вектора.
Определение ортонормированного базиса матрицы
Вычисление ортонормированного базиса матрицы обеспечивают нижеприведенные функции:
В = orth(A) — возвращает ортонормированный базис матрицы А. Столбцы В определяют то же пространство, что и столбцы матрицы А, но столбцы В ортогональны, то есть B*B=eye(rank(A)). Количество столбцов матрицы В равно рангу матрицы А.
Пример:
» А=[2 4 6:9 8 2:12 23 43]
А =
|
|
|
|
|
|
2 |
4 |
6 |
|
|
9 |
8 |
2 |
|
|
12 |
23 |
43 |
|
|
|
|
|
|
» B=orth(A)
В=
0.1453 -0.0414-0.9885
0.1522 -0.98630.0637
0.9776 0.1597 0.1371
null (А) — возвращает ортонормированный базис для нулевого (пустого) пространства А.
Пример:
» null(hilb(11))
ans =
0.0000
-0.0000
0.0009
-0.0099
0.0593
-0.2101
0.4606
-0.6318
0.5276
-0.2453
0.0487
Функции приведения матрицы к треугольной форме
Треугольной называется квадратная матрица А, если при l>k (верхняя треугольная матрица) или при к>1(нижняя треугольная матрица) элементы матрицы A(l,k) равны нулю. В строго треугольной матрице нули находятся и на главной диагонали. В линейной алгебре часто используется приведение матриц к той или иной треугольной форме. Оно реализуется следующими функциями:
rref (A) — возвращает приведенную к треугольной форме матрицу, используя метод исключения Гаусса с частичным выбором ведущего элемента. По умолчанию принимается значение порога допустимости для незначительного элемента столбца, равное (max(s1ze(A))*eps*norm(A,inf));
[R, jb] = rref (A) — также возвращает вектор jb, так что:
r = length (jb) может служить оценкой ранга матрицы А;
х( jb) — связанные переменные в системе линейных уравнений вида Ах=b;
А(:, jb) — базис матрицы А;
R(l:r.jb) — единичная матрица размера rхr;
[R. jb] = rref (A,to!) — осуществляет приведение матрицы к треугольной форме, используя метод исключения Гаусса с частичным выбором ведущего элемента для заданного значения порога допустимости tol;
rrefmovie(A) — показывает пошаговое исполнение процедуры приведения матрицы к треугольной.
Примеры:
|
|
|
|
|
» s=magic(3) |
|
|
|
s = |
|
|
|
8 1 |
6 |
|
|
3 5 |
7 |
|
|
4 9 |
2 |
|
|
» rref(s) |
|
|
|
ans = |
|
|
|
1 0 |
0 |
|
|
0 1 |
0 |
|
|
0 0 |
1 |
|
|
|
|
|
Определение угла между двумя подпространствами
Угол между двумя подпространствами вычисляет функция subsрасе:
theta = subspace(A.B) — возвращает угол между двумя подпространствами, натянутыми на столбцы матриц А и В. Если А и В — векторы-столбцы единичной длины, то угол вычисляется по формуле acos(A'*B). Если некоторый физический эксперимент описывается массивом А, а вторая реализация этого эксперимента — массивом В, то subspace(A.B) измеряет количество новой информации, полученной из второго эксперимента и не связанной со случайными ошибками и флуктуациями.
Пример:
» Н = hadamard(20);A = Н(:.2:4);В = Н(:.5:8);
» subspace(A,B)
ans =
1.5708
Вычисление следа матрицы
След матрицы А — это сумма ее диагональных элементов. Он вычисляется функцией trace:
trace(A) — возвращает след матрицы. Пример:
» а=[2.3.4:5.6,7;8.9,1]
а =
2 3 4
5 6 7
8 9 1
» trace(a)
ans =
9
Разложение Холецкого
Разложение Холецкого — известный прием матричных вычислений. Функция chol находит это разложение для действительных и комплексных эрмитовых матриц.
R = chol(X) — для квадратной матрицы [ Положительно определенной называется действительная симметрическая матрица, все собственные значения которой положительны. Поскольку используется только верхний треугольник матрицы X, матрица X не обязательно должна быть симметрической. — Примеч. ред. ]. X возвращает верхнюю треугольную матрицу R, так что R'*R=X new . Если симметрическая матрица X new , заданная верхней треугольной частью и диагональю матрицы X, не является положительно определенной матрицей, выдает сообщение об ошибке. Разложение Холецкого возможно для действительных и комплексных эрмитовых матриц [ Квадратная матрица с комплексными элементами, комплексно сопряженная матрица которой может быть получена транспонированием, т. е. равна транспонированной матрице (А*=А). — Примеч. ред. ];
[R.p] = chol (X) с двумя выходными аргументами никогда не генерирует сообщение об ошибке в ходе выполнения разложения Холецкого квадратной матрицы X. Если верхняя треугольная часть и диагональ X задают положительно определенную матрицу, то р=0, a R совпадает с вышеописанным случаем, иначе р. — положительное целое число, a R — верхняя треугольная матрица порядка q=p-l, такая что R'*R=X(l:q,l:q).
Пример:
» c=chol(pascal(4))
с =
1 1 1 1
0 1 2 3
0 0 1 3
0 0 0 1
Обращение матриц — функции inv, pinv
Обращение матриц — одна из наиболее распространенных операций матричного анализа. Обратной называют матрицу, получаемую в результате деления единичной матрицы Е на исходную матрицу X. Таким образом, Х^-1=Е/Х. Следующие функции обеспечивают реализацию данной операции:
inv(X) — возвращает матрицу, обратную квадратной матрице X. Предупреждающее сообщение выдается, если X плохо масштабирована или близка к вырожденной.
Пример:
» inv(rand(4,4))
ans =
2.2631 -2.3495-0.4696-0.6631
-0.76201.2122 1.7041 -1.2146
-2.04081.4228 1.5538 1.3730
1.3075 -0.0183-2.54830.6344
На практике вычисление явной обратной матрицы не так уж необходимо. Чаще операцию обращения применяют при решении системы линейных уравнений вида Ах=b. Один из путей решения этой системы — вычисление x=inv(A)*b. Но лучшим с точки зрения минимизации времени расчета и повышения точности вычислений является использование оператора матричного деления х=А\b. Эта операция использует метод исключения Гаусса без явного формирования обратной матрицы.
В = pinv(A) — возвращает матрицу, псевдообратную матрице А (псевдообращение матрицы по Муру-Пенроузу). Результатом псевдообращения матрицы по Муру-Пенроузу является матрица В того же размера, что и А', и удовлетворяющая условиям А*В*А=А и В*А*В=В. Вычисление основано на использовании функции svd(A) и приравнивании к нулю всех сингулярных чисел, меньших величины tol;
В = pinv (A. tol) — возвращает псевдообратную матрицу и отменяет заданный по умолчанию порог, равный max(size(A))*norm(A)*eps.
Пример:
» pinv(rand(4,3))
ans =
-1.3907-0.0485-0.24931.8640
-0.87751.1636 0.6605 -0.0034
2.0906 -0.5921-0.2749-0.5987
LU- и QR-разложения
Так называемые LU- и QR-разложения реализуются следующими матричными функциями:
Функция 1и выражает любую квадратную матрицу X как произведение двух треугольных матриц, одна из которых (возможно, с перестановками) — нижняя треугольная матрица, а другая — верхняя треугольная матрица[ В MATLAB 6 аргументом (входным аргументом) функции lu может быть и полная прямоугольная матрица. — Примеч. ред. ]. Иногда эту операцию называют LR-разложением. Для выполнения этой операции служит следующая функция:
[L,U] = lu(X) — возвращает верхнюю треугольную матрицу U и психологическую нижнюю матрицу L (т. е. произведение нижней треугольной матрицы и матрицы перестановок), так что X=L*U;
[L,U,P.] = lu(X) — возвращает верхнюю треугольную матрицу U, нижнюю треугольную матрицу L и сопряженную (эрмитову) матрицу матрицы перестановок Р, так что L*U =Р*Х;
lu(Х) — вызванная с одним выходным параметром функция возвращает результат из подпрограмм DGETRF (для действительных матриц) или ZGETRF (для комплексных) известного пакета программ линейной алгебры LAPACK.
lu(X, thresh) — где thresh в диапазоне [0...1] управляет центрированием в разреженных матрицах (см. урок 12). Отдельная форма предыдущего случая. Центрирование происходит, если элемент столбца на диагонали меньше, чем произведение thresh и любого поддиагонального элемента. Thresh=l — значение по умолчанию. Thresh=0 задает центрирование по диагонали. Если матрица полная (не разреженная), выводится сообщение об ошибке.
Функция qr выполняет QR-разложепие матрицы. Эта операция полезна для квадратных и треугольных матриц. Она выполняет QR-разложение, вычисляя произведение унитарной [ Квадратная матрица с комплексными элементами, обладающая тем свойством, что обратная матрица ее комплексно сопряженной матрицы равна транспонированной, т. е. (А*)''-А'. — Примеч. ред. ] матрицы и верхней треугольной матрицы. Функция используется в следующих формах: [ Квадратная матрица с комплексными элементами, обладающая тем свойством, что обратная матрица ее комплексно сопряженной матрицы равна транспонированной, т. е. (А*)''-А'. — Примеч. ред. ]
[Q.R] = qr(X) — вычисляет верхнюю треугольную матрицу R того же размера, как и у X, и унитарную матрицу Q, так что X=Q*R;
[Q.R.E] = qr(X) — вычисляет матрицу перестановок Е, верхнюю треугольную матрицу R с убывающими по модулю диагональными элементами и унитарную матрицу Q, так что X*E=Q*R. Матрица перестановок Е выбрана так, что abs(diag(R)) уменьшается;
[Q.R] = qr(X.O) и [Q.R.E] = qr(X,0) — вычисляют экономное разложение, в котором Е — вектор перестановок, так что Q*R=X(: ,Е). Матрица Е выбрана так, что abs(diag(R)) уменьшается;
А = qr(X) — возвращает результат из LAPACK. Пример:
» C=rand(5.4)
С=
0.8381 0.5028 0.1934 0.6979
0.0196 0.7095 0.6822 0.3784
0.6813 0.4289 0.3028 0.8600
0.3795 0.3046 0.5417 0.8537
0.8318 0.1897 0.1509 0.5936
» [Q.R]=qr(C)
Q=
-0.5922-0.11140.5197 0.0743 -0.6011
-0.0139-0.9278 -0.0011 -0.34480.1420
-0.4814-0.11730.0699 0.5940 0.6299
-0.2681-0.1525-0.82680.2632 -0.3898
-0.58770.2997 -0.2036-0.67340.2643
R =
-1.4152 -0.7072 -0.5037 -1.4103
0 -0.7541 -0.7274 -0.4819
0 0 -0.3577 -0.4043
0 0 0 0.2573
0 0 0 0
[Q,R] = qrdelete(Q,R, j) — изменяет Q и RTaKHM образом, чтобы пересчитать QR-разложение матрицы А для случая, когда в ней удален j-й столбец (А(:, j )=[ ]). Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q. R]=qr(A)..Аргумент j определяет столбец, который должен быть удален из матрицы А.
Примеры:
» C=rand(3.3)
С =
0.0164 0.0576 0.7176
0.1901 0.3676 0.6927
0.5869 0.6315 0.0841
» [Q.R]=qr(C)
Q=
-0.0265-0.2416-0.9700
-0.3080-0.92120.2378
-0.95100.3051 -0.0500
R =
-0.6171-0.7153-0.3123
0 -0.1599-0.7858
0 0 -0.5356
» [Q1.R1]=qrdelete(Q.R.2)
Q1 =
-0.02650.7459 0.6655
-0.30800.6272 -0.7153
-0.9510-0.22390.2131
R1 =
-0.6171-0.3123
0 0.9510
0 0
[Q.R] = qrinsert(Q,R,j,x) — изменяет Q и R таким образом, чтобы пересчитать разложение матрицы А для случая, когда в матрице А перед j-м столбцом вставлен столбец х. Входные значения Q и R представляют QR-разложение матрицы А как результат действия [Q,R]=qr(A). Аргумент х — вектор-столбец, который нужно вставить в матрицу А. Аргумент j определяет столбец, перед которым будет вставлен вектор х.
Примеры:
» C=rand(3.3)
С =
0.1210 0.8928 0.8656
0.4508 0.2731 0.2324
0.7159 0.2548 0.8049
» [Q,R]-qr(c)
Q =
-0.14160.9835 0.1126
-0.52750.0213 -0.8493
-0.8377-0.17970.5157
R =
-0.8546-0.4839-0.9194
0 0.8381 0.7116
0 0 0.3152
» x=[0.5.-0.3.0.2];[Q2.R2]=qrinsert(Q.R.2,x')
Q2 =
-0.14160.7995 -0.5838
-0.5275-0.5600-0.6389
-0.83770.2174 0.5010
R2 =
-0.8546-0.0801-0.4839-0.9194
0 0.6112 0.6163 0.7369
0 0 -0.5681-0.2505
Вычисление собственных значений и сингулярных чисел
Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов и сингулярных чисел. В новой версии MATLAB собственные вектора нормализуются, иначе, чем в предыдущих. Основной критерий: либо V'V=I, либо V'BV=I, где V — собственный вектор, I — единичная матрица. Поэтому результаты вычислений в новой версии, как правило, отличаются. Ниже дан список средств решения векового уравнения, реализованных в системе MATLAB.
Несимметрические матрицы могут быть плохо обусловлены при вычислении их собственных значений. Малые изменения элементов матрицы, такие как ошибки округления, могут вызвать большие изменения в собственных значениях. Масштабирование — это попытка перевести каждую плохую обусловленность собственных векторов матрицы в диагональное масштабирование. Однако масштабирование обычно не может преобразовать несимметрическую матрицу в симметрическую, а только пытается сделать (векторную) норму каждой строки равной норме соответствующего столбца. Масштабирование значительно повышает стабильность собственных значений.
[D.B] = balance(A) — возвращает диагональную матрицу D, элементы которой являются степенями основания 2, и масштабированную матрицу В, такую, что B=D\A*D, а норма каждого ряда масштабированной матрицы приближается к норме столбца с тем же номером;
В = balance(A) — возвращает масштабированную матрицу В. Пример использования функции balance:
» А=[1 1000 10000:0.0001 1 1000:0.000001 0.0001 1]
А =
1.0е+004 *
0.0001 0.1000 1.0000
0.0000 0.0001 0.1000
0.0000 0.0000 0.0001
» [F.G]=balance(A)
F =
1.0е+004 *
3.2768 0 0
0 0.0032 0
0 0 0.0000
G =
1.0000 0.9766 0.0095
0.1024 1.0000 0.9766
1.0486 0.1024 1.0000
Величина, связывающая погрешность вычисления собственных значений с погрешностью исходных данных, называется числом обусловленности (собственных значений) матрицы и вычисляется следующим образом:
cond(V) = norm(V)*norm(inv(V)) где [V.D]=eig(A).[B=D\A*D, а норма каждого ряда масштабированной матрицы приближается к норме столбца с тем же номером;]
eig(A) — возвращает вектор собственных значений квадратной полной или симметрической разреженной матрицы А обычно после автоматического масштабирования, но для больших разреженных матриц (в терминологии MATLAB —
это просто полные матрицы со сравнительно большим [ Но небольшим по сравнению с числом нулей разреженной матрицы. Эталонное число нулей разреженной матрицы данного размера можно вычислить, применив к полной матрице этого же размера функцию sparse. — Примеч. ред. ] числом нулей), а также во всех случаях, где помимо собственных значений необходимо получать и собственные вектора разреженной матрицы, вместо нее рекомендовано использовать eigs(A);
eig(A.B) - возвращает вектор обобщенных собственных значений квадратных матриц А и В;
[V.D] = eig(A.B) — вычисляет диагональную матрицу обобщенных собственных значений D и матрицу V, столбцы которой являются соответствующими собственными векторами (правыми собственными векторами), таким образом что А V = В V D;
[V.D] = eig(A) — вычисляет диагональную матрицу собственных значений О матрицы А и матрицу V, столбцы которой являются соответствующими собственными векторами (правыми собственными векторами), таким образом что А V = V D.
Нужно использовать [W,D]=e1g(A'); W=W, чтобы вычислить левые собственные вектора, которые соответствуют уравнению W*A=D*W.
[V.D] = eig(A,'nobalance') — находит собственные векторы и собственные значения без предварительного масштабирования. Иногда это улучшает обусловленность входной матрицы, обеспечивая большую точность вычисления собственных векторов для необычно масштабированных матриц;
eig(A.B. 'chol') — возвращает вектор, содержащий обобщенные собственные значения, используя разложение матрицы В по методу Холецкого; если А - симметрическая квадратная матрица и В — симметрическая положительно определенная квадратная матрица, то eig(A.B) по умолчанию работает точно так же;
eig(A,B, 'qz') — не требует, чтобы матрицы были симметрическими и возвращает вектор, содержащий обобщенные собственные значения, используя QZ-алгоритм; при явном указании этого флага QZ-алгоритм используется вместо алгоритма Холецкого даже для симметрической матрицы и симметрической положительно определенной матрицы В, так как может давать более стабильные значения, чем предыдущий метод. Для несимметрических матриц в MATLAB 6 всегда используется QZ-алгоритм и параметр 'chol' или 'qz' игнорируется;
[V.D] = eig(A.B) — возвращает диагональную матрицу обобщенных собственных значений D и матрицу V, чьи столбцы являются соответствующими собственными векторами, так чтобы A*V=B*V*D. Пример:
» В = [3 -12 -.6 2*eps:-2 48 -1 -eps;-eps/8 eps/2 -1 10;-.5 -.5 .3 1]
В =
3.0000 -12.0000 -0.60000.0000
-2.0000 48.0000-1.0000-0.0000
-0.0000 0.0000 -1.0000 10.0000
-0.5000 -0.5000 0.3000 1.0000
» [G.H]=eig(B)
G =
-0.2548 0.7420 -0.4842 0.1956
0.9670 0.0193 -0.0388 0.0276
-0.0015 -0.6181 -0.8575 0.9780
-0.0075 -0.2588 -0.1694 -0.0676
H =
48.5287 0 0 0
0 3.1873 0 0
0 0 0.9750 0
0 0 0 -1.6909
svd(X) — возвращает вектор сингулярных чисел. Команда svd выполняет сингулярное разложение матрицы X;
[U.S, V] = svd(X) — вычисляет диагональную матрицу S тех же размеров, которые имеет матрица X, с неотрицательными диагональными элементами в порядке их убывания, и унитарные матрицы U и V, так что X=U*S*V ' ;
[U.S.V] = svd(X.O) — выполняет экономичное сингулярное разложение. Пример:
» F=[23 12;3 5:6 0]
F =
23 12
3 5
6 0
» [k,l,m]=svd(F)
k=
|
|
|
|
|
|
0.9628 |
-0.0034 |
-0.2702 |
|
|
0.1846 |
0.7385 |
0.6485 |
|
|
0.1974 |
-0.6743 |
0.7116 |
|
l= | ||||
|
26.9448 |
0 |
|
|
|
0 |
4.1202 |
|
|
|
0 |
0 |
|
|
|
m= |
|
|
|
0.8863 -0.4630
0.4630 0.8863
Приведение матриц к форме Шура и Хессенберга
Ниже приводятся функции, обеспечивающие приведение матриц к специальным формам Шура и Хессенберга:
cdf2rdf — преобразование комплексной формы Шура в действительную. Если система [V,D]=eig(X) имеет комплексные собственные значения, объединенные в комплексно-сопряженные пары, то функция cdf2rdf преобразует систему таким образом, что матрица D принимает вещественный диагональный вид с 2x2 вещественными блоками, заменяющими первоначальные комплексные пары.
Конкретные столбцы матрицы V больше не являются собственными векторами, но каждая пара векторов связана с блоком размера 2x2 в матрице D. Пример:
» А-[2 3 6;-4 0 3:1 5 -2]
А =
2 3 6
-4 0 3
1 5 -2
|
|
|
|
|
|
|
» |
[S.D]=eig(A) |
|
|
|
|
S |
= |
|
|
|
|
|
0.7081 + 0.32961 |
0.7081 - 0.32961 |
-0.3355 |
|
|
|
-0.3456 + 0.36881 |
-0.3456 - 0.36881 |
-0.5721 |
|
|
|
0.0837 + 0.35711 |
0.0837 - 0.35711 |
0.7484 |
|
|
D |
= |
|
|
|
|
|
3.1351 + 4.06031 |
0 |
0 |
|
|
|
0 |
3.1351 - 4.06031 |
0 |
|
|
|
0 |
0 |
-6.2702 |
|
|
» |
[S.D]=cdf2rdf(S.D) |
|
|
|
|
S |
= |
|
|
|
|
|
0.7081 0.3296 |
-0.3355 |
|
|
|
|
-0.3456 0.3688 |
-0.5721 |
|
|
|
|
0.0837 0.3571 |
0.7484 |
|
|
|
D |
= |
|
|
|
|
|
3.1351 4.0603 |
0 |
|
|
|
|
-4.0603 3.1351 |
0 |
|
|
|
|
0 0 |
-6.2702 |
|
|
|
|
|
|
|
|
Функция qz обеспечивает приведение пары матриц к обобщенной форме Шура:
[AA.8B.Q.Z.V] = qz(A.B) — возвращает, возможно, комплексные верхние треугольные матрицы АА и ВВ и соответствующие матрицы приведения Q и I, такие что Q*A*Z=AA и Q*B*Z=BB. Функция также возвращает матрицу обобщенных собственных векторов V.
Обобщенные собственные значения могут быть найдены из следующего условия:
A*V*diag(BB) = B*V*diag(AA)
Пример:
» А=[1 2 3:6 3 0;4 7 0];В=[1 1 1:0 7 4:9 4 1];
» [aa.bb.f,g.h]=qz(A.B)
аа =
-2.9395 0.4775 0.8751
0 9.5462 3.5985
0 0 3.2073
bb=
|
5.5356 |
3.5345 |
-2.2935 |
|
|
0 |
8.4826 |
6.7128 |
|
|
0 |
0 |
0.7667 |
|
|
-0.0367 |
0.7327 |
-0.6796 |
|
|
-0.1052 |
-0.6791 |
-0.7265 |
|
|
-0.9938 |
0.0448 |
0.1020 |
|
|
-0.7023 -0.7050 -0.0989
0.6867 -0.6343 -0.3552
-0.1877 0.3174 -0.9295
h =
-1.0000 -0.4874 -0.0561
0.9778 -1.0000 0.6238
-0.2673 0.4340 -1.0000
Функция qz(A,B,' real') при заданных матрицах А и В возвращает действительные треугольную матрицу ВВ и квазитреугольную матрицу АА с 2x2 диагональными блоками, соответствующими парам сопряженных комплексных значений. Так как матрица АА квазитреугольная, то необходимо решить проблемы обобщения 2x2 для получения подлинных собственных значений.
Пример:
» А=[1 2 3:6 3 0:4 7 0];В=[1 1 1:0 7 4;9 4 1];
» [aa.bb.f,g.h]=qz(A.B,'real')
аа =
-2.9395 0.4775 0.8751
0 9.5462 3.5985
0 0 3.2073
bb =
5.5356 3.5345 -2.2935
0 8.4826 6.7128
0 0 0.7667
f =
-0.0367 0.7327 -0.6796
-0.1052 -0.6791 -0.7265
-0.9938 0.0448 0.1020
g=
-0.7023 -0.7050 -0.0989
0.6867 -0.6343 -0.3552
-0.1877 0.3174 -0.9295
h =
-1.0000 -0.4874 -0.0561
0.9778 -1.0000 0.6238
-0.2673 0.4340 -1.0000
Т = schur(A) — возвращает матрицу Шура Т.
[U.T] = schur(A) — возвращает матрицу Шура Т и унитарную матрицу U, такие что A=U Т U и U' и=еуе(51ге(А))(единичная матрица размера А);
[U,T] = rsf2csf(u.t)[ В MATLAB 6 в функции schur, если ее входной аргумент — действительная матрица, может использоваться новый параметр 'complex' (schur,'complex'), позволяющий получить комплексную форму Шура без использования функции преобразования rsf2csf. — Примеч. ред. ] — преобразование результатов предыдущей функции (действительной формы Шура) в комплексную форму Шура может использоваться только после вызова [u,t] = schur(A) Комплексная форма Шура — это верхняя треугольная матрица со всеми собственными значениями на диагонали. Действительная форма Шура имеет действительные собственные значения на диагонали, а комплексные собственные значения содержатся в 2x2 блоках, расположенных вдоль диагонали. И входные, и выходные матрицы U, u и Т, tпредставляют собой соответственно унитарные матрицы и матрицы Шура исходной матрицы А, которая удовлетворяет условиям A=UTU' и U' U=eye( si ze(A));
Н = hess(A) — находит Н, верхнюю форму Хессенберга для матрицы А;
[Р.Н] = hess(A) — возвращает матрицу Хессенберга Н и унитарную матрицу преобразований Р, такую что А=Р*Н*Р' и P'*P=eye(s1ze(A)).
Элементы матрицы Хессенберга, расположенные ниже первой поддиагонали, равны нулю. Если матрица симметричная или эрмитова, то матрица Хессенберга вырождается в трехдиагональную. Эта матрица имеет те же собственные значения, что и оригинал, но для их вычисления необходимо меньшее количество операций. Пример:
» f=magic(4)
f =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
» hess(f)
ans=
16.0000 -8.0577 8.8958 6.1595
-11.0454 24.2131 -8.1984 2.1241
0 -13.5058 -4.3894 -7.8918
0 0 3.2744 -1.8237
Что нового мы узнали?
В этом уроке мы научились:
Находить числа обусловленности матриц, их определитель, след и ранг.
Находить векторную и матричную нормы и различать их.
Определять ортонормальный базис матриц.
Приводить матрицы к треугольной форме.
Определять угол между двумя подпространствами.
Осуществлять разложение Холецкого, LU- и QR-разложения матриц.
Вычислять обратные матрицы.
Находить собственные значения и сингулярные числа матриц.
Приводить матрицы к формам Шура и Хессенберга.
Урок №12.
Функции разреженных матриц
Элементарные разреженные матрицы
Преобразование разреженных матриц
Работа с ненулевыми элементами разреженных матриц
Визуализация разреженных матриц
Алгоритмы упорядочения
Норма, число обусловленности и ранг разреженных матриц
Разложение Холецкого разреженной матрицы
LU-разложение разреженной матрицы
Вычисление собственных значений и сингулярных чисел разреженных матриц
Матрицы без нулевых значений называются полными матрицами. Матрицы, содержащие некоторое число элементов с нулевыми значениями, в MATLAB называются разреженными матрицами. Вообще говоря, разреженными называют те матрицы, для которых разумно использовать численные методы, учитывающие упрощение арифметических операций с нулевыми элементами (например, получение нуля при умножении на нуль или пропуск операций сложения и вычитания при использовании этих операций с нулевыми элементами матриц). Они широко используются при решении прикладных задач. Например, моделировацие электронных и электротехнических линейных цепей часто приводит к появлению в матричном описании топологии схем сильно разреженных матриц. Для таких матриц создан ряд функций, обеспечивающих эффективную работу с ними и устраняющих тривиальные операции с нулевыми элементами матриц.
Элементарные разреженные матрицы
Вначале рассмотрим элементарные разреженные матрицы и относящиеся к ним функции системы MATLAB.
Функция spdiags расширяет возможности встроенной функции diag. Возможны четыре операции, различающиеся числом входных аргументов:
[B.d] = spdiags(A) — извлекает все ненулевые диагонали из матрицы А размера mxn. В — матрица размера min(m,n)xp, столбцы которой р являются ненулевыми диагоналями A. d — вектор длины р, целочисленные элементы которого точно определяют номера диагоналей матрицы А (положительные номера — выше главной диагонали, отрицательные — ниже);
В = spdiags(A.d) — извлекает диагонали, определенные вектором d;
А = spdiags(B,d,A) — заменяет столбцами матрицы В диагонали матрицы А, определенные вектором d;
А = spdiags(B,d,m,n) — создает разреженную матрицу размера mxn, размещая соответствующие столбцы матрицы В вдоль диагоналей, определяемых вектором d.
Пример:
» А=[1 3 4 6 8 0 0; 7 8 0 7 0 0 5;
0 0 0 0 0 9 8; 7 6 54 32 0 9 6];
» d=[l 322]
» В = spdlags(A.d)
В =
3644. 0077
0900
0699
S = speye(m.n) — возвращает разреженную матрицу размера mxn с единицами на главной диагонали и нулевыми недиагональными элементами;
S = speye(n) — равносильна speye(n.n). Пример:
» S = speye(4)
S =
(1,1) 1
(2.2) 1
(3.3) 1
(4.4) 1
Матрица R = sprand(S) имеет ту же структуру, что и разреженная матрица S, но ее элементы распределены по равномерному закону:
R = sprand(m,n,density) — возвращает случайную разреженную матрицу размера mxn, которая имеет приблизительно densityxmxn равномерно распределенных ненулевых элементов (0<density<l);
R = sprand(m,n,density,re) — в дополнение к этому имеет в числе параметров число обусловленности по отношению к операции обращения, приблизительно равное rс. Если вектор гс имеет длину lr (A,r<min(m.n)), то матрица R имеет гс в качестве своих первых 1 r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генерируется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами. Такие матрицы играют важную роль при анализе алгебраических и топологических структур.
Пример:
» d=sprand(4,3.0.6)
d =
(1.1) 0.6614
(2.1) 0.2844
(4,1) 0.0648
(3,3) 0.4692
(4,3) 0.9883
R = sprandn(S) — возвращает матрицу со структурой разреженной матрицы S, но с элементами, распределенными по нормальному закону с нулевым средним и дисперсией, равной 1;
R = sprandn(m,n,density) — возвращает случайную разреженную матрицу размера mxn, имеющую примерно densityxmxn нормально распределенных ненулевых элементов (0<density<l);
R = sprandnCm,n.density,гс) — в дополнение к этому имеет своим параметром число обусловленности по отношению к операции обращения, приблизительно равное rс. Если вектор гс имеет длину 1r (Xr<min(m,n)), то матрица R имеет гс в качестве своих первых 1r сингулярных чисел, все другие значения равны нулю. В этом случае матрица R генерируется с помощью матриц случайных плоских вращений, которые применяются к диагональной матрице с заданными сингулярными числами.
Пример:
» f=sprandn(3,4.0.3)
f =
(2.1) -0.4326
(2.2) -1.6656
(2.3) 0.1253
(2.4) 0.2877
sprandsym(S) — возвращает случайную симметрическую матрицу, нижние под-диагонали и главная диагональ которой имеют ту же структуру, что и матрица 5. Элементы результирующей матрицы распределены по нормальному закону со средним, равным 0, и дисперсией, равной 1;
sprandsym(n,density) — возвращает симметрическую случайную разреженную матрицу размера пхп, которая имеет приблизительно densityxnxn ненулевых элементов; каждый элемент сформирован в виде суммы нормально распределенных случайных чисел (0<density<l);
R = sprandsym(n,density,гс) — возвращает матрицу с числом обусловленности по отношению к операции обращения, равным гс. Закон распределения не является равномерным; значения случайных элементов симметричны относительно 0 и находятся в пределах [-1, 1]. Если rс — вектор размера п, то матрица R имеет собственные значения, равные элементам вектора rс. Таким образом, если элементы вектора гс положительны, то матрица R является положительно определенной. В любом случае матрица R генерируется с помощью случайного вращения по Якоби диагональных матриц с заданными собственными значениями и числом обусловленности. Такие матрицы играют важную роль при анализе алгебраических и топологических структур;
R = sprandsym(n.density.rc.klnd) — возвращает положительно определенную матрицу. Аргумент kind может быть следующим:
kind=l — матрица R генерируется из положительно определенной диагональной матрицы с помощью случайных вращений Якоби. R имеет точно заданное число обусловленности;
kind=2 — матрица R генерируется как смещенная сумма матриц внешних произведений. Число обусловленности матрицы приблизительно, но структура более компактна (по сравнению с предыдущим случаем);
kind=3 — генерируется матрица R той же структуры, что и S, а число обусловленности приближенно равно 1/гс. Значение density игнорируется.
Пример:
» a=sprandsym(4,0.3.0.8)
а =
(1.1) 0.9818
(3.1) 0.0468
(2,2) -0.9283
(1,3) 0.0468
(3.3) 0.8800
(4.4) -0.8000
П реобразование разреженных матриц
Теперь рассмотрим функции преобразования разреженных матриц. Они представлены ниже:
k = f ind(X) — возвращает индексы вектора х для его ненулевых элементов. Если таких элементов нет, то find возвращает пустой вектор. find(X>100) возвращает индексы элементов вектора с Х>100;
[1,j] = find(X) — возвращает индексы строки и столбца для ненулевого элемента матрицы X;
[1 . j . v] = find(X) — возвращает вектор столбец v ненулевых элементов матрицы X и индексы строки i и столбца j. Вместо X можно вставить (X, операция отношения, параметр), и тогда индексы и вектор-столбец будут отражать элементы матрицы, удовлетворяющие данному отношение. Единственное исключение — f ind(x ~= 0). Индексы те же, что и при исполнении find(X), но вектор v содержит только единицы.
Пример:
» q=sprand(3.4.0.6)
q =
(1.1) 0.7266
(1.2) 0.4120
(3.2) 0.2679
(3.3) 0.4399
(2.4) 0.7446
(3.4) 0.9334
i=
1
1
3
3
2
3
j =
1
2
2
3
4
4
full(S) — преобразует разреженную матрицу S в полную; если исходная матрица S была полной, то full (S) возвращает S. Пусть X — матрица размера mxn с nz=nnz(X) ненулевыми элементами. Тогда full(X) требует такой объем памяти, чтобы хранить mxn действительных чисел, в то время как sparse(X) требует пространство для хранения лишь nz действительных чисел и (nxz+n) целых чисел — индексов. Большинству компьютеров для хранения действительного числа требуется вдвое больше пространства, чем для целого. Для таких компьютеров sparse(X) требует меньше пространства, чем full(X), если плотность nnz/prod(s1ze(X))<2/3. Выполнение операций над разреженными матрицами, однако, требует больше затрат времени, чем над полными, поэтому для эффективной работы с разреженными матрицами плотность расположения ненулевых элементов должна быть много меньше 2/3.
Примеры:
» q=sprand(3,4,0.6)
q=
(1.1) 0.0129
(1.2) 0.3840
(2.2) 0.6831
(3,3) 0.0928
» d=full(q)
d =
0.0129 0.3840 0 0
0 0.6831 0 0
0 0 0.0928 0
S=sparse(A) — преобразует полную матрицу в разреженную, удаляя нулевые элементы. Если матрица S уже разреженная, то sparse(S) возвращает S. Функция sparse — это встроенная функция, которая формирует матрицы в соответствии с правилами записи разреженных матриц, принятыми в системе MATLAB;
S=sparse(i,j,s,m,n,nzmax) — использует векторы 1, j и s для того, чтобы генерировать разреженную матрицу размера mxn с ненулевыми элементами, количество которых не превышает nzmax. Векторы 1 и j задают позиции элементов и являются целочисленными, а вектор s определяет числовое значение элемента матрицы, которое может быть действительным или комплексным. Все элементы вектора s, равные нулю, игнорируются вместе с соответствующими значениями i и j. Векторы i, j и s должны быть одной и той же длины;
S = sparsed' . j.s.m.n) — использует nzmax=length(s).
S = sparsed , j .s) — использует m=maxd) и n=max(j). Максимумы вычисляются раньше, чем нулевые строки столбца S будут удалены;
S = sparse(m.n) равносильно sparse ([ ].[ ].[ ]. m.n, 0). Эта команда генерирует предельную разреженную матрицу, где mxn элементов нулевые.
Все встроенные в MATLAB арифметические, логические и индексные операции могут быть применены и к -разреженным, и к полным матрицам. Операции над разреженными матрицами возвращают разреженные матрицы, а операции над полными матрицами возвращают полные матрицы. В большинстве случаев операции над смешанными матрицами возвращают полные матрицы. Исключение составляют случаи, когда результат смешанной операции явно сохраняет разреженный тип. Так бывает при поэлементном умножении массивов А.*S, где S — разреженный массив.
Пример:
» i=[2,4,3];j=[1,3,8];s=[4,5+5i,9];
t = sparse(i,j,s,5,8)
t =
(2.1) 4.0000
(4.3) 5.0000+5.0000i
(3.8) 9.0000
Функция spconvert используется для создания разреженных матриц из простых разреженных форматов, легко производимых вне средств MATLAB:
S = spconvert(D) — преобразует матрицу D со строками, содержащими [i.j.r] или [i,j,r.s], где i — индекс ряда, j — индекс строки, г — численное значение, в соответствующую разреженную матрицу. Матрица D может иметь nnz или nnz+1 строк и три или четыре столбца. Три элемента в строке генерируют действительную матрицу, четыре элемента в строке генерируют комплексную матрицу (s преобразуется во мнимую часть значения элемента). Последняя строка массива D типа [m n 0] или [m n 0 0] может быть использована для определения size(S). Команда spconvert может быть использована только после того, как матрица D загружена или из МАТ-файла, или из ASCII-файла при помощи команд load, uiload и т. д.:
»load mydata.dat
»А = spconvert (rnydata);
Работа с ненулевыми элементами разреженных матриц
Поскольку разреженные матрицы содержат ненулевые элементы, то предусмотрен ряд функций для работы с ними:
nnz(X) — возвращает число ненулевых элементов матрицы X. Плотность разреженной матрицы определяется по формуле nnz(X)/numel (X). Пример:
h = sparse(hilb(10));
» nnz(h)
ans =
100
nonzeros(A) — возвращает полный вектор-столбец ненулевых элементов матрицы А, выбирая их последовательно по столбцам. Эта функция дает только выход s, но не значения i и j из аналогичного выражения [i, j,s]=find(A). Вообще, length(s)=nnz(A)xnzmax(A)xprod(size(A)). Пример:
» g=nonzeros(sparse(hankel([1,2.8])))
g =
1
2
nzmax(S) — возвращает количество ячеек памяти для ненулевых элементов. Обычно функции nnz(S) и nzmax(S) дают один и тот же результат. Но если S создавалась в результате операции над разреженными матрицами, такой как умножение или LU-разложение, может быть выделено больше элементов памяти, чем требуется, и nzmax(S) отражает это. Если S — разреженная матрица, то nzmax(S) — максимальное количество ячеек для хранения ненулевых элементов. Если S — полная матрица, то nzmax(S)=numel(S).
Пример:
» q=nzmax(sparse(hankel([1.7.23])))
q =
6
S=spalloc(m,n,nzmax) — создает массив для разреженной матрицы S размера mxn с пространством для размещения nzmax ненулевых элементов. Затем матрица может быть заполнена по столбцам;
spalloc(m,n,nzmax) — эквивалентна функции sparse([ ],[ ],[ ],m,n,nzmax).
Пример:
» S = spalloc(5,4,5);
spfun — вычисление функции для ненулевых элементов. Функция spfun применяется выборочно только к ненулевым элементам разреженной матрицы, сохраняя при этом разреженность исходной матрицы;
f = spfun(@function,S) — вычисляет function(S) для ненулевых элементов матрицы S. Имя function — это имя m-файла или встроенной в ядро функции. function должна работать с матричным аргументом S и вычислить функцию для каждого элемента матрицы S.
Пример:
» S=spfun(@exp.sprand(4,5,0,4))
S=
(2.2) 1.6864
(2.3) 2.4112
(3.3) 2.6638
(2.4) 1.1888
(3.4) 1.3119
(4.4) 2.4007
(3.5) 1.2870
R = spones(S) — генерирует матрицу R той же разреженности, что и S, но заменяет на 1 все ненулевые элементы исходной матрицы.
Пример:
» S=sprand(3.2,0.3)
S=
(3.1) 0.2987
(1.2) 0.1991
» spones(S)
ans =
(3.1) 1
(1.2) 1
Визуализация разреженных матриц
Визуализация разреженных матриц нередко позволяет выявить не только любопытные, но и полезные и поучительные свойства тех математических закономерноетей, которые порождают такие матрицы или описываются последними. MATLAB имеет специальные средства для визуализации разреженных матриц, реализованные приведенными ниже командами:
spy(S) — графически отображает разреженность произвольной матрицы S;
spy(S.markersize) — графически отображает разреженность матрицы S, выводя маркеры в виде точек точно определенного размера markersize;
spy(S, 'LineSpec') — отображает разреженность матрицы в виде графика с точно определенным (с помощью параметра LineSpec) цветом линии и маркера. Параметр Linespec определяется так же, как параметр команды plot;
spy(S. 'LineSpec' .markersize) — использует точно определенные тип, цвет и размер графического маркера. Обычно S — разреженная матрица, но допустимо использование и полной матрицы, когда расположение элементов, отличных от нуля, составляет график.
Пример:
»S=sparse(sprandn(20,30,0.9));spy(S,'-r',6)
Построенный по этому примеру график показан на рис. 12.1.
Рис. 12.1. Визуализация разреженной матрицы
Алгоритмы упорядочения
Упорядочение — это еще одна характерная для разреженных матриц операция. Ее алгоритм реализуется несколькими функциями:
р = colmmd(S) — возвращает вектор упорядоченности столбцов разреженной матрицы S. [то nzmax(S) — максимальное количество ячеек для хранения ненулевых элементов. Если S — полная матрица, то nzmax(S)=numel(S).] Для несимметрической матрицы S вектор упорядоченности столбцов р такой, что S(:. р) будет иметь более разреженные L и U в LU-разложении, чем S. Такое упорядочение автоматически применяется при выполнении операций обращения \ и деления /, а также при решении систем линейных уравнений с разреженными матрицами. Можно использовать команду spparms, чтобы изменить некоторые параметры, связанные с эвристикой в алгоритме colmmd;
j = colperm(S) — возвращает вектор перестановок j, такой что столбцы матрицы S(:. j) будут упорядочены по возрастанию числа ненулевых элементов. Эту функцию полезно иногда применять перед выполнением LU-разложения. Если S — симметрическая матрица, то j=colperm(S) возвращает вектор перестановок j, такой что и столбцы, и строки S(j,j) упорядочены по возрастанию ненулевых элементов. Если матрица S положительно определенная, то иногда полезно применять эту функцию и перед выполнением разложения Холецкого.
Пример:
» S=sparse([2.3.1.4.2].[l,3.2.3.2],[4.3,5.6.7].4.5);full(S)
ans =
0 5 0 0 0
4 7 0 0 0
0 0 3 0 0
0 0 6 0 0
» t=colperm(S)
t= |
|
|
|
|
|
5 |
1 |
2 |
3 |
»full(S(;,t)) | ||||
ans = |
|
|
|
|
0 |
0 |
0 |
5 |
0 |
0 |
0 |
4 |
7 |
0 |
0 |
0 |
0 |
0 |
3 |
0 |
0 |
0 |
0 |
6 |
|
p = dmperm(A) — возвращает вектор максимального соответствия р такой, что если исходная матрица А имеет полный столбцовый ранг, то А(р.:) — квадратная матрица с ненулевой диагональю. Матрица А(р,:) называется декомпозицией Далмейджа-Мендельсона, или DM-декомпозицией.
Если А — приводимая матрица, [ Квадратная матрица А называется приводимой, если она подобна клеточной матрице, квадратные элементы которой соответствуют индукции линейного оператора А в отдельные подпространства. — Примеч. ред. ] линейная система Ах=b может быть решена приведением А к верхней блочной треугольной форме с неприводимым диагональным блоком. Решение может быть найдено методом обратной подстановки.
[p.q.r] = dmperm(A) — находит перестановку строк р и перестановку столбцов q квадратной матрицы А, такую что A(p,q) — матрица в блоке верхней треугольной формы.
Третий выходной аргумент г — целочисленный вектор, описывающий границы блоков. К-й блок матрицы A(p,q) имеет индексы r(k):r(k+l)-l.
[p.q.r.s] = dmperm(A) — находит перестановки р и q и векторы индексов г и s, так что матрица A(p,q) оказывается в верхней треугольной форме. Блок имеет индексы (r(i):r(i+l)-l,s(i):s(i+l)-l).
В терминах теории графов диагональные блоки соответствуют сильным компонентам Холла графа смежности матрицы А.
Примеры:
» A=sparse([1.2,1.3.2].[3.2.1.1.1].[7.6,4.5,4],3,3)
:full(A)
ans =
4 0
4 6 0
5 0 0
»[p.q.r]=dmperm(A)
Р=
1 2 3
q =
3 2 1
r =
1 2 3 4
» fulKA(p.q))
ans =
7 0 4
0 6 4
0 0 5
symmmd(S) — возвращает вектор упорядоченности для симметричной положительно определенной матрицы S, так что S(p,p) будет иметь более разреженное разложение Холецкого, чем S. Иногда symmmd хорошо работает с симметрическими неопределенными матрицами. Такое упорядочение автоматически применяется при выполнении операций \ и /, а также при решении линейных систем с разреженными матрицами [ Функция symamd работает значительно быстрее. — Примеч. ред. ].
Можно использовать команду spparms, чтобы изменить некоторые опции и параметры, связанные с эвристикой в алгоритме.
Алгоритм упорядочения для симметрических матриц основан на алгоритме упорядочения по разреженности столбцов. Фактически symmmd(S) только формирует матрицу К с такой структурой ненулевых элементов, что К' *К имеет тот же трафик разреженности, что и S, и затем вызывает алгоритм упорядочения по разреженности столбцов для К. На рис. 12.2 приводится пример применения функции symmmd к элементам разреженной матрицы.
Пример:
» B=bucky;p=symmmd(B);
» R=B(p,p);
» subplot(1,2,1),spy(B); subplot(1,2,2).spy(R) ;
r = symrcm(S) — возвращает вектор упорядоченности для симметричной матрицы S и называется упорядочением Катхилла-Макки. Причем формируется такая перестановка г, что S(r.r) будет концентрировать ненулевые элементы вблизи диагонали. Это хорошее упорядочение как перед LU-разложением, так и перед разложением Холецкого. Упорядочение применимо как для симметрических, так и для несимметрических матриц.
Для вещественной симметрической разреженной матрицы S (такой, что S=S T ) собственные значения S(r.r) совпадают с собственными значениями S, но для вычисления eig(S(r,r)) требуется меньше времени, чем для вычисления eig(S).
Рис. 12.2. Пример применения функции symmmd
Пример:
» B=bucky;p=symrcm(B);
» R=B(p,p);
» subplot(1,2,1),spy(B);subplot(1,2,2),spy(R) ;
На рис. 12.3 приведен пример концентрации ненулевых элементов разреженной матрицы вблизи главной диагонали.
Рис. 12.3. Пример применения функции symrcm
Норма, число обусловленности и ранг разреженной матрицы
Ниже представлены функции, позволяющие вычислять числа обусловленности и ранги для разреженных матриц.
с = condest(A) — использует метод Хейджера в модификации Хаема для оценки числа обусловленности матрицы по первой норме. Вычисленное значение с — нижняя оценка числа обусловленности матрицы А по первой норме. Для повторяемости результатов перед выполнением функции condest нужно обязательно выполнить rand( 'state' ,L), где L -одно и то же целое число;
с = condest(A.T) — где Т — положительное целое число, чем выше Т, тем выше точность оценки. По умолчанию Т равно 2;
nrm = normest(S) — возвращает оценку второй нормы матрицы S. Применяется тогда, когда из-за чрезмерного числа элементов в матрице вычисление nrm = norm(S) занимает слишком много времени. Эта функция изначально предназначена для работы с разреженными матрицами, хотя она работает корректно и с большими полными матрицами;
[c.v] = condestCA) — возвращает число обусловленности с и вектор v, такой, что выполняется условие norm(A*V.l) = norm(A.l)*norm(V.l)/c. Таким образом, для больших значений с вектор V близок к нулевому вектору;
nrm = normest(S,tol) — использует относительную погрешность tol вместо используемого по умолчанию значения 10- 6 ;
[nrm.count] = normestC...) — возвращает оценку второй нормы и количество использованных операций. Примеры:
» F=wilkinson(150); » condest(sparse(F))
ans =
460.2219
» normest(sparse(F))
ans =
75.2453
r=sprank(S) — вычисляет структурный ранг разреженной матрицы S. В терминах теории графов он известен также под следующими названиями: максимальное сечение, максимальное соответствие и максимальное совпадение. Для величины структурного ранга всегда выполняется условие sprank(S)irank(S), а в точной арифметике с вероятностью 1 выполняется условие sprank(S) = rank(sprandnCS)).
Пример:
» S=[3 0004: 54080; 00013];
» r=sprank(S)
Разложение Холецкого разреженных матриц
choli пс(X,'0') — возвращает неполное разложение Холецкого для действительной симметрической положительно определенной разреженной матрицы [nrm = norm(S) занимает слишком много времени. Эта функция изначально предназначена для работы с разреженными матрицами, хотя она работает корректно и с большими полными матрицами;]. Результат представляет собой верхнюю треугольную матрицу;
R = cholincCX,'0') — возвращает верхнюю треугольную матрицу, которая имеет такую же разреженную структуру, как и верхний треугольник матрицы действительной положительно определенной матрицы X. Результат умножения R' *R соответствует X по своей разреженной структуре. Положительной определенности матрицы X недостаточно, чтобы гарантировать существование неполного разложения Холецкого, и в этом случае выдается сообщение об ошибке;
[R,p] = cho!1nc(X, '0') — никогда не выдает сообщение об ошибке в ходе разложения. Если X — положительно определенная матрица, то р=0 и матрица R — верхняя треугольная, в противном случае р — положительное целое число, R — верхняя треугольная матрица размера qxn, где q=p-l. Разреженная структура матрицы R такая же, как и у верхнего треугольника размера qxn матрицы X, и произведение R' *R размера nxn соответствует структуре разреженности матрицы X по ее первым q строкам и столбцам X(l:q,:) и Х(: ,l:q).
R = cho1inc(X,droptol) — возвращает неполное разложение Холецкого любой квадратной разреженной матрицы, используя положительный числовой параметр droptol. Функция cholinc(X,droptol) возвращает приближение к полному разложению Холецкого, вычисленному с помощью функции chol (X). При меньших значениях droptol аппроксимация улучшается, пока значение droptol не станет равным 0. В этом случае cholinc задает полное преобразование Холецкого (chol(X));
R = cholinc(X.options) — использует структуру с тремя переменными, которые могут быть использованы в любой из комбинаций: droptol, mi chol, rdi ag. Дополнительные поля игнорируются. Если mi chol =1, chol inc возвращает модифицированное разложение Холецкого. Если rdiag=l, то все нули на диагонали верхней треугольной матрицы заменяются квадратным корнем от произведения droptol и нормы соответствующего столбца матрицы X — sqrt(droptol*norm(X(: ,j))). По умолчанию rdiag=0;
R = cholinc(X,droptol) и R = cholinc(X.options) — возвращают верхнюю треугольную матрицу R. Результат R'*R — это аппроксимация матрицы;
R = cholinc(X, 'inf') - возвращает разложение Холецкого в неопределенности, когда не удается получить обычное разложение. Матрица X может быть действительной квадратной положительно полуопределенной.
Пример:
» S = delsqCnumgndCC' .4))
S =
(1.1) 4
(2.1) -1
(1.2) -1
(2.2) 4
(3.2) -1
(2.3) -1
(3.3) 4
» RD=cholinc(S,'0')
R0=
(1.1) 2.0000
(1.2) -0.5000
(2.2) 1.9365
(2.3) -0.5164
(3.3) 1.9322
LU-разложение разреженных матриц
Функция luinc осуществляет неполное LU-разложение и возвращает нижнюю треугольную матрицу, верхнюю треугольную матрицу и матрицу перестановок для разреженных матриц [ Благодаря LAPACK в MATLAB 6 появилась отсутствующая в прежних версиях возможность использовать команду lu для точного LU-разложения разреженных матриц. — Примеч. ред. ]. Используется в следующих формах:
luincCX, '0') — возвращает неполное LU-разложение уровня 0 квадратной разреженной матрицы. Треугольные факторы (множители) имеют такую же разреженность (т. е. график разреженности, см. spy), как и матрица перестановок квадратной матрицы X, и их произведение имеет ту же разреженность, что и матрица перестановок X. Функция luinc(X, '0') .возвращает нижнюю треугольную часть нижнего фактора (множителя) и верхний треугольный фактор в одной и той же результирующей матрице. Вся информация о матрице перестановок теряется, но зато число ненулевых элементов результирующей матрицы равно числу ненулевых элементов матрицы X с возможностью исключения некоторых нулей из-за сокращения;
[L,U] = luincCX. 'О'), где X — матрица размером nхn, возвращает нижнюю треугольную матрицу L и верхнюю треугольную матрицу U. Разреженности матриц L, U и X не сравнимы, но сумма числа ненулевых элементов в матрицах L и U поддерживается равной nnz(X)+n с возможностью исключения некоторых нулей в L и U из-за сокращения;
[L,U.P]=luinc(X, '0') — возвращает нижнюю треугольную матрицу L, верхнюю треугольную матрицу U и матрицу перестановок Р. Матрица L имеет такую же разреженную структуру, как нижняя треугольная часть перестановленной матрицы X — spones(L)=spones(tril(P*X)), с возможными исключениями единиц на диагонали матрицы L, где Р*Х может быть равно 0;
luinc(X,droptol) — возвращает неполное LU-разложение любой разреженной матрицы, используя порог droptol. Параметр droptol должен быть неотрицательным числом;
luinc(X,droptol) — возвращает приближение к полному LU-разложению, полученному с помощью функции lu(Х). При меньших значениях droptol аппроксимация улучшается, пока значение droptol не станет равным 0. В этом случае имеет место полное LU- разложение;
luinc(X,options) — использует структуру с четырьмя переменными, которые могут быть использованы в любой из комбинаций: droptol, milu, udiag, thresh. Дополнительные поля игнорируются. Если miliKL, функция luinc возвращает модифицированное неполное LU-разложение. Если udiag=l, то все нули на диагонали верхней треугольной части заменяются на локальную ошибку droptol;
luincCX.options) — то же самое, что и luinc(X,droptol), если options содержит только параметр droptol; О [L.U] = luincCX,options) — возвращает перестановку треугольной матрицы L и верхнюю треугольную матрицу U. Результат L*U аппроксимирует X;
[L.U.P] = luinc(X.options) — возвращает нижнюю треугольную матрицу L, верхнюю треугольную матрицу U и матрицу перестановок Р. Ненулевые входные элементы матрицы U удовлетворяют выражению abs(U(i. j))>=droptol* norm((X:.j)) с возможным исключением диагональных входов, которые были сохранены, несмотря на неудовлетворение критерию;
[L.U.P] = luincCX,options) — то же самое, что и [L.U.P] = 1uinc(X,dropto1), если options содержит только параметр droptol.
Вычисление собственных значений и сингулярных чисел разреженных матриц
Применение функции eigs решает проблему собственных значений, состоящую в нахождении нетривиальных решений системы уравнений, которая может быть интерпретирована как алгебраический эквивалент системы обыкновенных дифференциальных уравнений в явной форме Коши: A*v=l*v.[ Усовершенствованный алгоритм eig позволяет использовать eig для расчета собственных значений и полных, и разреженных матриц, но для получения собственных векторов разреженных матриц по-прежнему желательно использовать именно eigs. — Примеч. ред. ] Вычисляются только отдельные выбранные собственные значения или собственные значения и собственные векторы:
eigs(A.B) решает проблему обобщенных собственных значений A*V = В* V*D. В должна быть симметрической (или эрмитовой) положительно определенной квадратной матрицей того же размера, что и A. eigs С А, []....) решает стандартную проблему собственных значений A*V = V*D.
[V,D] = eigs(A) или [V.O] = eigs('Afun',n) — возвращает собственные значения для первого входного аргумента — большой и разреженной квадратной матрицы размера п. Этот параметр может быть как квадратной матрицей, так и строкой, содержащей имя m-файла, который применяет линейный оператор к столбцам данной матрицы. Матрица А — действительная и несимметрическая. Y=Afun(X) должна возвращать Y=A*X.
В случае одного выходного параметра D — вектор, содержащий 6 самых больших собственных значений матрицы А. В случае двух выходных аргументов [V.D] = eigs(A) D — диагональная матрица размера 6x6, содержащая эти 6 самых больших собственных значений, и V — матрица, содержащая б столбцов, являющихся соответствующими собственными векторами. [V.D.flag] = eigs(A) возвращает флаг, равный 0, если все возвращенные собственные значения сходятся, и 1 в противном случае.
eigs(A.K) и eigs(A,B,K) возвращают не 6, а К самых больших собственных значений. eigs(A,K,sigma) Heigs(A,B,K.sigma) возвращают не 6, а К собственных значений, выбранных в зависимости от значения параметра sigma;
'lm' — самые большие (как и по умолчанию) по абсолютной величине;
' sm' — самые малые по абсолютной величине;
' l а' и ' sa' — соответственно самые большие и самые малые алгебраически собственные значения для действительных симметрических матриц;
'be' — для действительных симметрических матриц возвращает и самые большие, и самые малые алгебраически собственные значения поровну, но если К нечетное, то самых больших значений на 1 больше, чем самых малых;
'lr' и 'sr' — для несимметрических и комплексных матриц возвращают соответственно собственные значения с самыми большими и самыми малыми действительными частями;
'1i' и 'si'— для несимметрических и комплексных матриц возвращают соответственно собственные значения с самыми большими и самыми малыми мнимыми частями;
OPTS.issym: симметрия А или A-SIGMA*B, представленной AFUN [{0} | 1];
OPTS.isreal: комплексные А или A-SIGMA*B, представленной AFUN [0 | {1}];
OPTS.tol: сходимость: аbs(с1_вычисленное-с1_действительное) < tоl*аbs(с1_вычисленное) [скаляр){eps}];
OPTS.maxit: наибольшее число итераций [положительное целое | {300}];
OPTS.р: число векторов Ланцо (Lanczos): K+l<p<=N [положительное целое | {2К}];
OPTS.v0: начальный вектор [вектор размера N| {произвольно выбирается библиотекой ARPACK}];
OPTS.disp: уровень вывода диагностической информации [0 | {1} | 2J;
OPTS.cholВ: В — это множитель Холецкого chol (В) [{0} | 1];
OPTS.permB: разреженная матрица В равна chol (B(perm(B) .perm(B)) [perm(B) | {1:N}], perm — перестановка.
eigs(AFUN.N.К,SIGMA,OPTS,PI,...) иeigsCAFUN.N,В.К.SIGMA.OPTS,PI....) предоставляют дополнительные аргументы Р, которые поступают в AFUN(X,P1....).
Функция svds служит для вычисления небольшого числа сингулярных чисел и векторов большой разреженной матрицы. По мере возможности старайтесь использовать svd(fulKA)) вместо svds(A). Если А прямоугольная матрица mxn, svds(A....) манипулирует с несколькими собственными значениями и собственными векторами, возвращенными EIGS(B,...), где В = [SPARSE(М.М) A: A' SPARSE(N.N)]. Положительные собственные значения симметрической матрицы В равны сингулярным числам А.
svds (А) возвращает 6 самых больших сингулярных чисел А;
svds (А,К) или svds(A,K.'L') возвращает К самых больших сингулярных чисел;
S = SVDSCA,К,SIGMA,OPTIONS) устанавливает параметры:
OPTIONS.tol — порог чувствительности (по умолчанию le-10), norm(A*V-. -U*S,1) <= tol * norm(A.1);
OPTIONS.maxit - наибольшее число итераций (по умолчанию 300);
OPTIONS.disp — число значений, показываемых на каждой итерации (по умолчанию 0).
[U.S.V] = svds(A.k) — возвращает k наибольших сингулярных чисел и соответствующих сингулярных векторов матрицы А. Если А — матрица размера mxn, то U — матрица размера mxk с ортонормальными столбцами, S — диагональная матрица размера kxk, V — матрицы размера nxk с ортонормальными столбцами;
[U.S.V. flag] = svdsC...) — возвращает флаг, равный 0, если eigs сошлась, и 1 в противном случае;
[U.S.V] = svds(A.k.sigma) — возвращает k сингулярных чисел, наиболее близких к скаляру sigma, и К сингулярных векторов (при sigma=0 возвращает К наименьших сингулярных чисел и К векторов);
s = svds(A.k....) — возвращает только вектор сингулярных чисел.
Как видно из приведенного материала, система MATLAB предлагает пользователям уникальный набор матричных операторов и функций, заметно более полный, чем у других математических систем. Это открывает широчайшие возможности в решении всех видов математических задач, в которых используются современные матричные методы.
Что нового мы узнали?
В этом уроке мы научились:
Создавать элементарные разреженные матрицы.
Осуществлять преобразование разреженных матриц.
Работать с ненулевыми элементами разреженных матриц.
Осуществлять графическую визуализацию разреженных матриц.
Использовать функции упорядочения.
Осуществлять разложение Холецкого разреженных матриц.
Проводить LU-разложение разреженных матриц.
Вычислять норму, число обусловленности и ранг разреженных матриц.
Вычислять собственные значения и сингулярные числа разреженных матриц.
Урок №13.
Многомерные массивы
Понятие о многомерных массивах
Применение оператора «:» в многомерных массивах
Доступ к отдельному элементу многомерного массива
Удаление размерности в многомерном массиве
Создание страниц, заполненных константами и случайными числами
Объединение массивов
Вычисление числа размерностей массива и определение размера размерностей
Перестановки размерностей массивов
Сдвиг размерностей массивов
Удаление единичных размерностей
В этом уроке мы коснемся вопросов, связанных с более сложными типами данных, к которым относятся многомерные массивы.
Понятие о многомерных массивах
В MATLAB двумерный массив является частным случаем многомерного массива. Многомерные массивы характеризуются размерностью более двух. Таким массивам можно дать наглядную интерпретацию. Так, матрицу (двумерный массив) можно записать на одном листе бумаги в виде строк и столбцов, состоящих из элементов матрицы. Тогда блокнот с такими листками можно считать трехмерным массивом, полку в шкафу с блокнотами — четырехмерным массивом, шкаф со множеством полок — пятимерным массивом и т. д. В этой книге практически нигде, кроме этого раздела, мы не будем иметь дело с массивами, размерность которых выше двух, но знать о возможностях MATLAB в части задания и применения многомерных массивов все же полезно.
В нашей литературе понятия «размер» и «размерность» массивов являются почти синонимами. Однако они имеют явно разный смысл в данной книге, как и в документации и литературе по системе MATLAB. Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов (mxn) в каждой размерности массива.
Применение оператора «:» в многомерных массивах
При обычном задании массивов (с помощью символа точки с запятой «;») число рядов (строк) массива получается на 1 больше, чем число символов «:», но массив остается двумерным. Оператор «:» (двоеточие) позволяет легко выполнять операции по увеличению размерности массивов. Приведем пример формирования трехмерного массива путем добавления новой страницы. Пусть у нас задан исходный двумерный массив М размером 3x3:
» М=[1 2 3; 4 5 6; 7 8 9]
М =
1 2 3
4 5 6
7 8 9
Для добавления новой страницы с тем же размером можно расширить М следующим образом:
» М(:.:.2)=[10 11 12; 13 14 15; 16 17 18]
M(:.:.l) =
1 2 3
4 5 6
7 8 9
М(:.:.2) =
10 11 12
13 14 15
16 17 18
Посмотрим, что теперь содержит массив М при явном его указании:
» М
М(:,:.1)=
1 2 3
4 5 6
7 8 9
М(:.:.2) =
10 11 12
13 14 15
16 17 18
Как можно заметить, числа в выражениях М(:.:, 1) и М(:,: ,2) означают номер страницы.
Доступ к отдельному элементу многомерного массива
Чтобы вызвать центральный элемент сначала первой, а затем второй страницы, надо записать следующие выражения:
» М(2.2,1)
ans =
5
» МС2.2.2)
ans =
14
Таким образом, в многомерных массивах используется то же правило индексации, что и в одномерных и двумерных. Произвольный элемент, например, трехмерного массива задается как М(1 .j.k), где 1 — номер строки, j — номер столбца и k — номер страницы. Этот элемент можно вывести, а можно присвоить ему заданное значение х: М(1 ,j,k)=x.
Удаление размерности в многомерном массиве
Мы уже отмечали возможность удаления отдельных столбцов присвоением им значений пустого вектора-столбца [ ]. Этот прием нетрудно распространить на страницы и вообще размерности многомерного массива. Например, первую страницу полученного массива М можно удалить следующим образом:
» М(:.:.1)=[ ]
М =
10 11 12
13 14 15
16 17 18
Нетрудно заметить, что в этом массиве осталась только вторая страница и что размерность массива уменьшилась на 1 — он стал двумерным.
Создание страниц, заполненных константами и случайными числами
Если после знака присваивания стоит численная константа, то соответствующая часть массива будет содержать элементы, содержащие данную константу. Например, создадим из массива М (см. пример выше) массив, у которого вторая страница содержит единицы:
»M(:.:..2)=1
М(:.:,1) =
10 11 12
13 14 15
16 17 18
М(:.:.2) =
1 1 1
1 1 1
1 1 1
А теперь заменим первую страницу массива на страницу с нулевыми элементами:
»M(:.:.1)=0
M(:.:.1)=
0 0 0
0 0 0
0 0 0
М(:.:,2) =
1 1 1
1 1 1
1 1 1
Использование функций ones, zeros, rand и randn
Функции ones (создание массивов с единичными элементами), zeros (создание массивов с нулевыми элементами) и rand или randn (создание массивов с элементами — случайными числами с соответственно равномерным и нормальным распределением) могут также использоваться для создания многомерных массивов. Примеры приводятся ниже:
» E=ones(3.3.2)
E(:.:.1)=
1 1 1
1 1 1
1 1 1
E(:.:,2) =
1 1 1
1 1 1
1 1 1
» Z=zeros(2,2,3) Z(:,:.l) =
0 0
0 0
Z(:.:.2) =
0 0
0 0
Z(:.:,3) =
0 0
0 0
» R=randn(3,2.2) R(:.:.l) =
-1.6656-1.1465
0.1253 1.1909
0.2877 1.1892
R(:.:,2) =
-0.0376-0.1867
0.3273 0.7258
0.1746 -0.5883
Эти примеры достаточно очевидны и не требуют особых комментариев. Обратите, однако, внимание на легкость задания размеров массивов для каждой размерности. Кроме того, следует отметить, что если хотя бы одна размерность массива равна нулю, то массив будет пустым:
» A=randn(3,3,3,0)
А =
Empty array: 3-bу-3-bу-3-by-0
Как видно из данного примера, пустой массив возвращается с соответствующим комментарием.
Объединение массивов
Для создания многомерных массивов служит описанная ранее для матриц специальная функция конкатенации cat:
cat(DIM,A,B) — возвращает результат объединения двух массивов А и В вдоль размерности DIM;
cat(2.A.B) — возвращает массив [А.В], в котором объединены ряды (горизонтальная конкатенация);
cat(1, А.В) — возвращает массив [А:В], в котором объединены столбцы (вертикальная конкатенация);
B=cat(DIM.Al,A2,...) — объединяет множество входных массивов Al, A2,... вдоль размерности DIM.
Функции cat(DIM,C{:}) и cat(DIM.C.FIELD) обеспечивают соответственно конкатенацию (объединение) ячеек массива ячеек (см урок 15) или структур массива структур (см. урок 14), содержащих числовые матрицы, в единую матрицу. Ниже приводятся примеры применения функции cat:
» М1=[1 2:3 4]
M1=
1 2
3 4
» М2=[5 6:78]
М2 =
5 6
7 8
» catd.Ml.M2)
ans =
1 2
3 4
5 б
7 8
» cat(2.Ml.M2)
ans=
1 2 5 6
3 4 7 8
» M-cat(3.Ml.M2) M(:,:.l) =
1 2
3 4
М(:,:,2) =
5 6
7 8
Работа с размерностями
Вычисление числа размерностей массива
Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент — массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims:
» M=rand(2:3:4:5):
» ndims(M)
ans =
4
Вычисление размера размерности массива
Для вычисления размера каждой размерности массива используется функция size:
М = size(A.DIM) возвращает размер размерности, указанной скаляром DIM, в виде вектора-строки размером 2. Для двумерного или одномерного массива А size(A.l) возвращает число рядов, a size (А, 2) - число столбцов;
Для N-мерных массивов А при n>2 size(A) возвращает N-мерный вектор-строку, отражающий страничную организацию массива, последняя составляющая этого вектора равна N. В векторе отсутствуют данные о единичных размерностях (тех, где расположены вектор-строка или вектор-столбец, т. е. size(A,DIM)==l). Исключение представляют N-мерные массивы Java массивов javaarray, которые возвращают размер массива самого высокого уровня.
Вообще, когда входным аргументом size является javaarray, то возвращаемое число столбцов всегда 1, а число рядов (строк) равно размеру (длине) javarray.
[Ml, М2 ,МЗ,..., MN] = si ze(A) возвращает размер первых N размерностей массива А;
D = size (А), для mxn матрицы А возвращает двухэлементный вектор-строку, в котором первая составляющая — число строк т, а вторая составляющая — число столбцов n;
[m.n] = size(A) возвращает число рядов и столбцов в разных выходных параметрах (выходных аргументах в терминологии MATLAB) тип.
Перестановки размерностей массивов
Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка часто означает транспонирование — замену строк столбцами и наоборот. Следующие функции обобщают транспонирование матриц для случая многомерных массивов и обеспечивают перестановку размерностей многомерных массивов:
permute (A, ORDER) — переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Вектор ORDER — одна из возможных перестановок всех целых чисел от 1 до N, где N — размерность массива А;
ipermuteCA, ORDER) — операция, обратная permute: permute(permute(A. ORDER), ORDER)=A
Ниже приводятся примеры применения этих функций и функции size:
» А=[1 2: 3 4]:
» В=[5 6; 7 8];
» С=[9 10; И 12];
» D=cat(3.A,B.C)
D(:,:,l) =
1 2
3 4
9 10
11 12
» size(D)
ans =
2 2 3
» size(permute(D.[3 2 1]))
ans=
3 2 2
»size(ipermute(D.[2 1 3]))
ans=
2 2 3
» ipermute(permute(D,[3 2 1]),[3 2 1])
1 2
3 4
ans(:. :,2) =
5 6
78
ans(:.:,3) =
9 10
11 12
Сдвиг размерностей массивов
Сдвиг размерностей реализуется функцией shiftdim:
B=shiftdim(X,N) — сдвиг размерностей в массиве X на величину N. Если М>0, то сдвиг размерностей, расположенных справа, выполняется влево, а N первых слева размерностей сворачиваются в конец массива, т. е. движение размерностей идет по кругу против часовой стрелки. Если М<0, сдвиг выполняется вправо, причем N первых размерностей, сдвинутых вправо, замещаются единичными размерностями;
[B,NSHIFTS]=shiftdim(X) — возвращает массив В с тем же числом элементов, что и у массива X, но с удаленными начальными единичными размерностями. Выходной параметр NSHIFTS показывает число удаленных размерностей. Если X — скаляр, функция не изменяет X , В, NSHIFTS.
Следующий пример иллюстрирует применение функции shiftdim:
» A=randn(1,2,3,4);
» [B,N]=shiftdim(A)
B(:.:.1) =
-2.1707-1.01060.5077
-0.05920.6145 1.6924
B(:.:,2) =
0.5913 0.3803 -0.0195
-0.6436-1.0091-0.0482
B(:.:.3) =
0.0000 1.0950 0.4282
-0.3179-1.87400.8956
В(:.:,4) =
0.7310 0.0403 0.5689
0.5779 0.6771 -0.2556
N =
1
Удаление единичных размерностей
Функция squeeze(A) возвращает массив, в котором удалены все единичные размерности. Единичной называется размерность, в которой size(A. dim) == 1. Но если
А — одномерный или двумерный массив (матрица или вектор), то функция вернет тот же самый массив А. Следующий пример поясняет работу squeeze:
» A=randn(1.2.1.3.1);
» B=squeeze(A)
В=
0.6145 1.6924 -0.6436
0.5077 0.5913 0.3803
Обратите внимание на то, что пятимерный массив А превращается в массив с размерностью 2 и размером 2x3.
Что нового мы узнали?
В этом уроке мы научились:
Создавать многомерные массивы.
Применять оператор «:» в многомерных массивах.
Получать доступ к отдельным элементам многомерных массивов.
Удалять размерности у многомерного массива.
Создавать массивы, заполненные константами и случайными числами.
Осуществлять объединение массивов.
Вычислять число размерностей массива и определять размер каждой размерности.
Переставлять, сдвигать и удалять единичные размерности в многомерных массивах.
Урок №14.
Массивы структур
Тип данных — структуры
Создание структур и доступ к их компонентам
Проверка имен полей и структур
Функция возврата имен полей
Функция возврата содержимого полей структуры
Функция присваивания значений полям
Удаление полей
Тип данных — структуры
Структуры относятся к сложным типам данных. В предшествующих версиях MATLAB они именовались записями, что приводило к конфликтам в терминологии MATLAB и систем управления базами данных. Этот тип данных стал именоваться структурами после того, как широкое распространение получили средства MATLAB для работы с базами данных с использованием языка запросов Sequential Query Language (SQL).. Структуры MATLAB и их поля в отличие от полей записей баз данных не являются объектами SQL, но зато обращения к структурам могут быть откомпилированы и к ним возможен прямой доступ, минуя сложные и медленные механизмы систем управления базами данных. Структуры могут содержать разнородные данные, относящиеся к некоторому именованному объекту. Например, объект man (человек) может характеризоваться следующими данными:
Man(i....) |
|
Имя записи |
.name |
Иван |
Имя человека |
.surname |
Петров |
Фамилия |
.date |
1956 |
Год рождения |
.height |
170.5 |
Рост |
.weight |
70.34 |
Вес |
Первые два столбца представляют схему структуры. Как нетрудно заметить, каждая i-я структура состоит из ряда полей, имеющих имена, например man(i).name, man(i) .date и т. д. Поля могут содержать данные любого типа — от пустого поля [ ] до массивов. Приведенная выше структура имеет размер 1x1. MATLAB поддерживает и массивы структур, что позволяет создавать мощные базы данных.
Поле структуры может содержать другую вложенную структуру или массив структур. Это позволяет создавать вложенные структуры и даже многомерные массивы структур. Поскольку в данной книге такие структуры не используются, отсылаем заинтересованного читателя к книге [42], где они описаны более подробно.
Создание структур и доступ к их компонентам
Для задания структур на языке MATLAB можно использовать операторы присваивания, что иллюстрирует следующий пример:
» man.name='Иван';
» man.surname-'Петров':
» man.date=1956;
» man.height=170.5;
» man.weight=70.34;
Здесь построена базовая структура без индексного указателя. Теперь можно просмотреть полученную структуру, просто указав ее имя:
» man
man =
name: 'Иван'
surname: 'Петров'
date: 1956
height: 170.5000
weight: 70.3400
Нетрудно догадаться, что компоненты структуры можно вызывать по имени и менять их значения. При этом имя компонента состоит из имени структуры и имени поля, разделенных точкой. Это поясняют следующие примеры:
» man.date
ans =
1956
» man.date=1964
man =
name: 'Иван'
surname: 'Петров'
date: 1964
height: 170.5000
weight: 70.3400
Примечание
Как уже отмечалось, в MATLAB 6.0 существует проблема с записью символов кирилли-цы в командном режиме. Так, в командном режиме нельзя вводить в аргументы структур малую букву «с» русского алфавита — она ведет к переводу строки. Этого ограничения нет при задании структур в программах, хотя и в этом случае ошибки при вводе символов кириллицы не исключены.
Для создания массива структур вводится их индексация. Например, вектор структур можно создать, введя индекс в скобках после имени структуры. Так, для создания новой, второй структуры, можно поступить следующим образом:
»mаn(2).namе='Петр';
»mаn(2).Surnamе='Сидоров';
» man(2).date=1959;
»mаn(2)
ans =
name: 'Петр'
surname: 'Сидоров'
date: 1959
height: [ ]
weight: [ ]
» man(2).surname
ans =
Сидоров
» length(man)
ans = .2
Обратите внимание на то, что не все поля данной структуры заполнены. Поэтому значением двух последних полей структуры 2 оказываются пустые массивы. Число структур в массиве структур позволяет найти функция length (см. последний пример). Эта же функция может использоваться и для нахождения размера любого вектора или размерности многомерного непустого массива, так как length(Х)= MAX(size(X)), если X — непустой массив, и length(X)=0, если Х=[ ].
Функция создания структур
Для создания структур используется следующая функция:
struct('fieldl' .VALUES1, 'field2' .VALUES2,...) — возвращает созданную данной функцией структуру, содержащую указанные в параметрах поля 'fieldn' с их значениями ' VALUESn'. Значением может быть массив ячеек;
struct(OBJ) — конвертирует объект OBJ в эквивалентную структуру или массив структур. OBJ может быть объектом или массивом Java.
Пример:
» S=struct('student'.'Иванов'.'group'.2.'estimate','good')
S =
student: 'Иванов'
group: 2
estimate: 'good'
Проверка имен полей и структур
Выполнение операций с полями и элементами полей выполняется по тем же правилам, что и при работе с обычными массивами. Однако существует ряд функций, осуществляющих специфические для структур операции [ Помимо функций isstruct и isfields вы можете использовать для тестирования массивов структур функцию isа(имя объекта, 'struct') и команду или функцию whos имя объекта. — Примеч. ред. ].
Приведенные ниже функции служат для тестирования имен полей и структур записей:
isfielcKS, 'field') — возвращает логическую 1, если 'field' является именем поля структуры S;
isstruct(S) — возвращает логическую 1, если S — структура, и 0 в ином случае. Их применение на примере структуры man показано ниже:
» isfieldCman.'name')
ans =
1
» isfield(man.'family')
ans =
0
» isstruct(man)
ans =
1
» isstruct(many)
??? Undefined function or variable 'many'.
» isstruct('many')
ans =
0
Функция возврата имен полей
Следующая функция позволяет вывести имена полей заданной структуры:
fieldnames (S) — возвращает имена полей структуры S в виде массива ячеек (см. урок 15). Пример:
» fieldnames(man)
ans =
'name'
'surname'
'date'
'height'
'weight'
Функция возврата содержимого полей структуры
В конечном счете работа со структурами сводится к выводу и использованию содержимого полей. Для возврата содержимого поля структуры S служит функция getfield:
getfield(S, 'field') — возвращает содержимое поля структуры S, что эквивалентно S. field;
getfield(S.{i,j}, 'field', {k}) - 'эквивалентно F=S(i J).field(k). Пример:
» getfield(man(2),'name')
ans =
Петр
Функция присваивания значений полям
Для присваивания полям заданных значений используется описанная далее функция selfield:
setfielcKS. 'field' ,V) — возвращает структуру S с присвоением полю 'field' значения V, что эквивалентно S.field=V;
setfie1d(S,{i .j}, 'field 1 ,{k},V) - эквивалентно S(i ,j).field(k)=V. Пример:
» setfield(man(2).'name'.'Николай')
ans =
name: 'Николай'
surname: 'Сидоров'
date: 1959
height: [ ]
weight: [ ]
Удаление полей
Для удаления полей структуры можно использовать следующую функцию:
rmfield(S, 'field') — возвращает структуру S с удаленным полем S.'field';
rmfield(S,FIELDS) — возвращает структуру S с несколькими удаленными полями. Список удаляемых полей FIELDS задается в виде массива символов (строки) или строкового массива ячеек.
Пример:
» rmfield(man(2).'surname')
ans =
name: 'Петр'
date: 1959
height: []
weight: []
Применение массивов структур
Массивы структур находят самое широкое применение. Например, они используются для представления цветных изображений. Известно, что цветные изображения формата RGB состоят из массивов интенсивности трех цветов - красного R, зеленого G и синего В. При этом каждый массив содержит данные о координатах точки (они определяются целочисленными индексами массива) и о ее яркости (число от 0 до 1 в формате чисел с плавающей запятой). Чтобы некоторое изображение, например pic, несло данные о цвете всех точек, придется представить изображение массивом структур с полями pic.r, pic.g и pic.b.
Еще более сложные структуры (но, в принципе, вполне очевидные) нужны для разработки баз данных, например о работниках предприятия, службах города, городах страны и т. д. Во всех этих случаях особенно важна возможность доступа к отдельным полям структур и возможность присвоения таким полям уникальных имен.
Может показаться, что этот тип данных имеет малое отношение к математическим возможностям системы MATLAB. Однако надо помнить, что поиск информации в больших базах данных, сортировка этой информации и прочие операции, не говоря уже о сложной обработке массивов изображений, — все это примеры явно математических, хотя и достаточно специфических, операций. Причем операций нередко с многомерными структурами. Возможность MATLAB выполнять подобные операции быстро и эффективно (прежде всего с позиций минимальных затрат памяти) открывает перед этой системой очень большие возможности в этой области — впрочем, пока еще ждущие своей реализации. Уже в MATLAB 6.1 возможен одновременный прямой обмен данными между массивами структур MATLAB и множеством записей разных баз данных благодаря Database ToolBox (см. урок 23).
Что нового мы узнали?
В этом уроке мы научились:
Создавать структуры.
Обеспечивать доступ к полям структур.
Проверять имена полей и структур.
Использовать функции возврата имен полей и их содержимого.
Присваивать полям значения и удалять поля.
Урок №15.
Массивы ячеек
Создание массивов ячеек
Создание ячеек с помощью функции cell
Визуализация массивов ячеек
Создание строкового массива ячеек из массива символов
Присваивание с помощью функции deal
Функция тестирования имен массивов ячеек
Функции преобразования типов данных
Многомерные и вложенные массивы ячеек
Создание массивов ячеек
Массив ячеек — наиболее сложный тип данных в системе MATLAB. Это массив, элементами которого являются ячейки, содержащие любые типы массивов, включая массивы ячеек. Отличительным атрибутом массивов ячеек является задание содержимого последних в фигурных скобках {}. Создавать массивы ячеек можно с помощью оператора присваивания.
Существуют два способа присваивания данных отдельным ячейкам:
индексацией ячеек;
индексацией содержимого.
Рассмотрим первый способ. Для этого создадим файл-сценарий с именем се.m:
А( 1.1)={'Курить вредно!'};
А(1.2)={[1 2;3 4]};
A(2,1)={2+3i};
А(2.2)={0:0.1:1}
Примечание
Уже отмечалось, что в командном режиме малая русская буква «с» в строках ведет к пе-реводу строки ввода. Однако в m-файлах, создаваемых в редакторе/отладчике М-фай-лов, эта недоработка обычно не проявляется. Хотя гарантии в этом, увы, пока нет.
В этом примере задан массив ячеек с четырьмя элементами: строкой символов, матрицей, комплексным числом и одномерным массивом из 11 чисел. Теперь можно вызвать этот массив:
» се
А =
'Курить вредно!' [2x2 double]
[2.0000+ 3.00001] [1x11 double]
» A(1,1)
ans =
'Курить вредно!'
»А(2.1)
ans =
[2.0000+ 3.00001]
Заметим, что к ячейкам такого массива можно обращаться с помощью индексирования, например в виде А(1,1), А(2,1) и т. д.
При индексации содержимого массив ячеек задается следующим образом:
А{1,1}='Курить вредно!';
А{1,2}-[1 2:3 4];
А{2,1}=2+31;
А{2,2}=0:0.1:1;
Теперь можно ознакомиться с созданным массивом ячеек в командном режиме:
» А
ans =
'Курить вредно! ' [2x2 double]
[2.0000+ 3.0000i] [1x11double]
» А{1,1}
ans =
Курить вредно!
» А{2.1}
ans =
2.0000 + 3.0000i
При серьезной работе с массивами структур (записей) и массивами ячеек полезно иметь дополнительную информацию о списках значений. Для получения такой информации следует выполнить команду help list.
Создание ячеек с помощью функции cell
Для создания массива ячеек может использоваться функция eell :
cell(N) — создает массив ячеек из NxN пустых матриц;
cell(M.N) или cell([M,N]) — создает массив ячеек из MxN пустых матриц;
cell(M.N.P,...) или сеll([М N Р ...]) — создает массив из MxNxPx... пустых матриц;
cell (size(A)) — создает массив ячеек из пустых матриц того же размера, что имассив А;
cell (объект Java) — автоматически преобразует объекты или массивы Java (javaarray) в массив ячеек, элементы которого являются объектами MATLAB.
Следующие примеры поясняют применение данной функции:
» cell(2)
ans =
[] []
[] []
» C=cell(2.3)
С =
[] [] []
[] [] []
» C0=zeros(2.3)
С0=
0 0 0
0 0 0
» celHsize(CO))
ans =
[] [] []
[] [] []
Образовавшиеся пустые ячейки можно заполнить, используя операции присваивания:
» С{1.1}=1;С{1.2}='Привет':С{2,1}='Неllо':С{2.2}=[1 2; 3 4];
»С
С =
[ 1] 'Привет' []
'Hello ' [2x2 double] []
Визуализация массивов ячеек
Для отображения массива ячеек С служит функция celldlsp(C). Она дает рекурсивное отображение содержимого массива ячеек С. Например, для ранее созданного массива ячеек А получится следующее:
» celldisp(A)
А{1.1}=
Курить вредно!
А{2.1}=
2.0000 + 3.0000i
А{1,2} =
1 2
3 4
А{2,2} -Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
Columns 8 through 11
0.7000 0.8000 0.9000 1.0000
Для более наглядного графического представления массива ячеек может использоваться команда cell plot:
Создание строкового массива ячеек из массива символов
Для создания из массива символов S строкового массива ячеек может использоваться функция eellstr(S). Каждый ряд массива символов превращается в отдельную ячейку. Следующий пример поясняет применение функции cellstr:
» S={'Привет.'; 'дорогой'; 'друг'};
» C=cellstr(S)
С =
'Привет.'
'дорогой'
'ДРУГ'
Это еще один способ формирования массивов ячеек.
Функция iscellstr(C) равна 1, если ее аргумент С — строковый массив ячеек, и 0, если это неверно.
Присваивание с помощью функции deal
С помощью функции deal возможно множественное присваивание входных данных выходным:
[A.B,C,...]=deal(X,Y,Z,...) — обеспечивает последовательное присваивание входных данных выходным, то есть А=Х, B=Y, C=Z и т. д.;
[A,B,C....]=deal(X) — присваивает единственный вход всем выходам, т. е. А=Х, В=Х, С=Х и т. д.
Возможен ряд полезных применений функции deal:
[S.FIELD]=deal (X) — присваивает всем полям FIELD структуры S значения X. Если S не существует, то нужно использовать конструкцию [S(1:M)*.FIELD]= deal(X);
[X{:}]=dea1 (A. FIELD) — копирует поля FIELD структуры А в массив ячеек X. Если X не существует, следует использовать конструкцию [X{1:M}]=deal (A.FIELD);
[A,B,C,...]=deal (X{:}) — копирует содержимое массива ячеек X в отдельные переменные А, В, С,...;
[A,B,C,...]=deal(S.FIELD) — копирует содержимое поля FIELD массива структур S в отдельные переменные А, В, С,...;
Следующий пример иллюстрирует применение функции deal:
» [X,Y.Z]=deal(1,2+3i,'Привет!')
X =
1
Y =
2.0000.+ 3.0000i
Z =
Привет!
» [X Y Z]=dealС Привет!')
X =
Привет!
Y =
Привет!
Z =
Привет!
Тестирование имен массивов ячеек
Ввиду обилия типов данных в системе MATLAB часто возникает необходимость в их тестировании [ Помимо функций iscell и iscellstr вы всегда можете использовать для тестирования массивов ячеек функцию 15а(имя объекта, 'cell') и команду whos имя объекта. — Примеч. ред. ]. Для тестирования массивов ячеек может использоваться функция is сеll (С), которая возвращает логическое значение 1, если С — массив ячеек, и 0 в противном случае. Это поясняют следующие примеры:
» t=iscell(A)
t =
1
» B=[l 23];
» iscell(B)
ans=
0
Функции преобразования типов данных
При обработке сложных данных возникает необходимость в преобразовании их типов. Ниже представлены такие функции, имеющие отношение к массивам ячеек:
num2cell (A,DIM) — преобразует массив чисел А в массив ячеек, помещая в одну и ту же ячейку элементы, соответствующие одному значению индекса вдоль измерения, указанного параметром DIM. Например, num2cell (A.2) преобразует каждый ряд массива А в отдельную ячейку. cat(DIM.C{:}) осуществляет обратное преобразование.
num2cell (A) — преобразует массив чисел А в массив ячеек и возвращает последний. Каждый элемент А превращается в отдельную ячейку. Возвращаемый массив имеет тот же размер и ту же размерность, что и исходный массив А.
Примеры применения данных функций:
» А=[1 2; 3 4: 5 6]
А=
1 2
3 4
5 6
»С= num2cell(A.2)
С=
[1x2 double]
[1x2 double]
[1x2 double]
»С{1,1}
ans =
1 2
»С{2,1}
ans =
3 4
»С{3,1}
ans =
5 б
» cat(2.C{:})
ans =
1 2 3 4 5 6
ans =
1 2
3 4
5 6
» num2cell(A.[l 2])
ans =
[3x2 double]
cell2struct(C. FIELDS. DIM) — преобразует массив ячеек С в массив структур, превращая размерность DIM массива ячеек С в поля структуры S. Размерность 1 — столбцы. Размерность 2 — строки. FILEDS — массив символов или строковый массив ячеек.
Пример преобразования:
» С={' Привет! '.123. 2+31}
С =
'Привет!' [123] [2.0000+3.00001]
» f={ 'name' , 'number' , 'complex'};
» S=cell2struct(C,f,2)
S =
name: 'Привет! '
number: 1 2 3
complex: 2.0000+ 3.0000i
struct2cell (S) — преобразует массив структур S размером тхп, в котором содержатся р полей, в массив ячеек, так что возвращаемый массив будет иметь размер рхтхп. Если массив структур многомерный, то возвращаемый массив ячеек будет иметь размер, равный [р size(S)]. Схему структуры с названиями полей возвращаемый массив ячеек не содержит. Пример такого преобразования приводится ниже:
» C=struct2cellS)
С =
'Привет!'
[ 123]
[2.0000+3.0000i]
Многомерные массивы ячеек
С помощью функции cat можно формировать многомерные массивы ячеек. Например, трехмерный массив С формируется следующим образом (m-файл с именем се2.m):
А{1.1}='Курить вредно!';
А{1,2}=[1 2:3 4];
А{2.1}=2+3i;
А{2.2}=0:0.1:1;
В{1,1}='Пить тоже вредно!';
В{1,2}=[1 2 3 4];
В{2.1}=2;
B{2.2}=2*pi;
C=cat(3,A,B);
Теперь можно просмотреть данный массив, имеющий две страницы:
» се2
» С
С(:,:,1) =
'Курить вредно!' [2x2 double]
[2.0000+ 3.0000i] [1x11 double]
С(:.:.2) =
'Пить тоже вредно!' [1x4 double]
[ 2] [ 6.2832]
Доступ к ячейкам многомерных массивов очевиден и поясняется следующими примерами:
» C(l.l.l)
ans =
'Курить вредно!'
» C(1.1.2)
ans =
'Пить тоже вредно!'
Вложенные массивы ячеек
Содержимым ячейки массива ячеек может быть, в свою очередь, произвольный массив ячеек. Таким образом, возможно создание вложенных массивов ячеек — пожалуй, самого сложного типа данных.
В следующем примере показано формирование массива ячеек А с вложенным в него массивом В (он был создан в примере выше):
» clear A;
» A(l.l)={{magic(3).{'Hello!'}}};
»А(1.2)={В};
» А
ans =
{1x2 cell} {2x2 cell}
ans =
[3x3 double] {1x1 cell} >> A{2}
ans =
'Пить тоже вредно!' [1x4 double]
[ 2 ] [ 6.2832]
» cellplot(A)
В данном случае вложенный массив отображается полностью как часть массива А.
Что нового мы узнали?
В этом уроке мы научились:
Создавать ячейки и массивы ячеек.
Осуществлять визуализацию массивов ячеек.
Создавать массивы символьных ячеек из массивов строк.
Осуществлять присваивание ячейкам значений.
Использовать функцию тестирования имен массивов ячеек.
Применять функции преобразования типов.
Создавать многомерные и вложенные массивы ячеек.
Урок №16.
Численные методы
Средства решения систем линейных уравнений (СЛУ)
Вычисление нулей функции одной переменной
Минимизация функции одной и нескольких переменных
Аппроксимация Лапласиана
Аппроксимация производных конечными разностями
Вычисление градиента функции
Численное интегрирование
Операции с полиномами
Решение полиномиальных матричных уравнений
Разложение на простые дроби
Решение обыкновенных дифференциальных уравнений
Информация о пакете для решения уравнений с частными производными
В этом большом уроке описываются функции системы MATLAB, предназначенные для реализации алгоритмов типовых численных методов решения прикладных задач и обработки данных. Наряду с базовыми операциями решения систем линейных и нелинейных уравнений рассмотрены функции вычисления конечных разностей, численного дифференцирования, численного интегрирования, триангуляции, аппроксимации Лапласиана и, наконец, прямого и обратного преобразования Фурье. Отдельные разделы посвящены работе с полиномами и численным методам решения обыкновенных дифференциальных уравнений. Этот большой урок стоит разбить на две-три части или изучать выборочно.
Элементарные средства решения СЛУ
Решение систем линейных уравнений (СЛУ) относится к самой массовой области применения матричных методов, описанных в уроках 10-12. В этом разделе вы найдете ответы на вопросы, каким образом применяются указанные методы и какие дополнительные функции имеет система MATLAB для решения систем линейных уравнений.
Как известно, обычная СЛУ имеет вид:
а 11 X 1 , а 12 ,X 2 ..., а 1n X n =b 1
Здесь а 11 , а, 2 ,..., а пп — коэффициенты, образующие матрицу А, которые могут иметь действительные или комплексные значения, x 1 , х 2 ,..., х п — неизвестные, образующие вектор X, и b 1 , b 2 ,..., b п — .свободные члены (действительные или комплексные), образующие вектор В. Эта система может быть представлена в матричном виде как АХ=В, где А — матрица коэффициентов уравнений, X — искомый вектор неизвестных и В — вектор свободных членов. В зависимости от вида матрицы А и ее характерных особенностей MATLAB позволяет реализовать различные методы решения.
Для реализации различных алгоритмов решения СЛУ и связанных с ними матричных операций применяются следующие операторы: +,-,*,/, \, *, ' . Как отмечалось ранее, MATLAB имеет два различных типа арифметических операций — поэлементные и для массивов (векторов и матриц) в целом. Матричные арифметические операции определяются правилами линейной алгебры.
Арифметические операции сложения и вычитания над массивами выполняются поэлементно. Знак точки «.» отличает операции над элементами массивов от матричных операций. Однако, поскольку операции сложения и вычитания одинаковы для матрицы и элементов массива, знаки «.+» и «.-» не используются. Рассмотрим другие операторы и выполняемые ими операции.
* — матричное умножение;
Для случая нескалярных А и В число столбцов матрицы А должно равняться числу строк матрицы В. Скаляр может умножаться на матрицу любого размера.
/ — правое деление. Выражение Х=В/А дает решение ряда систем линейных уравнений АХ=В, где А — матрица размера тхп и В — матрица размера nxk;
\ — левое деление. Выражение Х=В\А дает решение ряда систем линейных уравнений ХА=В, где А — матрица размера тхп и В — матрица размера nxk. Если А — квадратная матрица, то А\В — примерно то же самое, что и inv(A)*B, в остальных случаях возможны варианты, отмеченные ниже.
Если А — матрица размера пхп, а В — вектор-столбец с п компонентами или матрица с несколькими подобными столбцами, тогда Х=А\В — решение уравнения АХ=В, которое находится хорошо известным методом исключения Гаусса.
Если А — матрица размера тхп и тхп, а В представляет собой вектор-столбец с m компонентами или матрицу с несколькими такими столбцами, тогда система оказывается недоопределенной или переопределенной и решается на основе минимизации второй нормы невязок.
Ранг k матрицы А находится на основе QR-разложения (урок 11) с выбором ведущего элемента. Полученное решение X будет иметь не больше чем k ненулевых компонентов на столбец. Если k<n, то решение, как правило, не будет совпадать с pinv(A)*B, которое имеет наименьшую норму невязок ||Х||.
^ — возведение матрицы в степень. Х А р — это X в степени р, если р — скаляр. Если р — целое число, то степень матрицы вычисляется путем умножения X на себя р раз. Если р — целое отрицательное число, то X сначала инвертируется. Для других значений р вычисляются собственные значения и собственные векторы, так что если [V.D]=eig(X), то X*p=V*D. A p/V. Если X — скаляр и Р — матрица, то Х А Р — это скаляр X, возведенный в матричную степень Р. Если X и Р — матрицы, то Х Л Р становится некорректной операцией и система выдает сообщение об ошибке. Возможный вариант решения матричного уравнения АХ=В с применением оператора ^ можно представить как Х=В*А ^ -1.
' — транспонирование матрицы, то есть замена строк столбцами и наоборот. Например, А' — транспонированная матрица А. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Транспонирование при решении СЛУ полезно, если в матрице А переставлены местами столбцы и строки.
При записи СЛУ в матричной форме необходимо следить за правильностью записи матрицы А и вектора В. Пример (в виде m-файла):
|
|
|
|
|
А-[2 1 |
0 |
1: |
|
1 -3 |
2 |
4; |
|
-5 0 |
-1 |
-7: |
|
1 -6 |
2 |
6]: |
|
В=[8 9 |
-5 |
0]: |
|
Х1=В/А |
|
|
|
Х2=В*А ^ -1 |
|
|
|
X3=B*inv(A) |
|
|
|
|
|
|
Эта программа выдает результаты решения тремя способами:
X1 =
3.0000 -4.0000-1.00001.0000
Х2 =
3.0000 -4.0000-1.00001.0000
X3 =
3.0000 -4.0000-1.00001.0000
Как и следовало ожидать, результаты оказываются одинаковыми для всех трех методов. При решении систем линейных уравнений, особенно с разреженной матрицей коэффициентов, полезно применение функций colmmd (colamd), symmmd (symamd), описанных ранее в уроке 12.
Функции для решения систем линейных уравнений с ограничениями
Теперь рассмотрим функции, введенные для решения систем линейных уравнений с ограничениями методом наименьших квадратов:
X =lscov(A,B.V) —возвращаетвекторXрешения СЛУ видаА*Х=В+е, гдее — вектор шумов, который имеет ковариационную матрицу V. Реализуется метод наименьших квадратов в присутствии шумов с известной ковариацией. Прямоугольная матрица А должна быть размера тхп, где т>п. При решении минимизируется следующее выражение: (AX-b)'*inv(V)*(AX-b). Решение имеет вид X=inv(A'* inv(V)*A)*A'*inv(V)*B. Алгоритм решения, однако, построен так, что операция инвертирования матрицы V не проводится;
[X.dX] = lscov(A,B,V) — возвращает также стандартную погрешность X, помещая ее в переменную dX. Статистическая формула для стандартной погрешности вычисления коэффициентов имеет следующий вид:
mse = B'*(inv(V)-inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n)
dX = sqrt(diag(inv(A'*inv(V)*A)*mse))
X =isqnonneg(A,B) — решение СЛУ АХ=В методом наименьших квадратов с неотрицательными ограничениями. А — действительная прямоугольная матрица, В — действительный вектор. Вектор X содержит неотрицательные элементы X>=Q, где j = 1, 2,... п. Критерий: минимизация второй нормы вектора В=АХ;
X = Isqnonneg(A.B.X0) — решение СЛУ с явно заданным неотрицательным начальным значением X для итераций;
[X,W] = Isqnonneg (...) — вместе с решением возвращает вторую норму вектора остатков в квадрате;
[X.W.W1] = Isqnonneg(..) — вместе с решением возвращает вторую норму вектора остатков в квадрате и вектор остатков W1;
[X.W.Wl.exitflag] = Isqnonneg (...) — вместе с решением возвращает вторую норму вектора остатков в квадрате, вектор остатков W1 и флаг exi tflаg, равный 1, если решение сходится после заданного по умолчанию числа итераций, и 0 — в противном случае;
[X.'W.Wl.exitflag,output] = Isqnonneg(...) — дополнительно возвращает число итераций в output;
[X.W.Wl.exitflag,output,lambda] = lsqnonneg(...) — дополнительно возвращает вектор lambda, минимизирующий произведение lambda W1 на последнем шаге итераций решения, lambda (i) близко к нулю, когда X(i) положительно, lambda (i) отрицательно, когда Х(1) равно 0;
[X.W.Wl.exitflag,output,lambda] = lsqnonneg(A.В,ХО,options) — обычно используется, если при предыдущей попытке решения системы exitflag=l или если необходимо изменить заданный по умолчанию порог отбора по X - tol X. равный 10*max(size(A))*norm(A, l)*eps (произведению первой нормы матрицы, большего из измерений матрицы, машинной точности и 10). Также используется такая форма записи, как X=lsqnonneg(A,B,XO,options). Параметры options должны быть предварительно заданы при помощи функции optimset. Функция Isqnonneg использует только поля 'display' и 'tolX' структуры options. Поэтому наиболее часто используемая вместе с Isqnonneg форма записи функции — options= optimset С tol X'.tol value), где tolvalue — новое значение порога отбора по X.
Применение ограничений позволяет избежать получения отрицательных корней, хотя и ведет к появлению несколько больших погрешностей решения, чем в случае решений без ограничений. Пример:
» С=[4 3:12 5:3 12];b=[1.45,41];D=lsqnonneg(C.b')
D =
2.2242
2.6954
Решение СЛУ с разреженными матрицами
Решение СЛУ с разреженными матрицами — хотя и не единственная, но несомненно одна из основных сфер применения аппарата разреженных матриц, описанного в уроке 12. Ниже приведены функции, относящиеся к этой области применения разреженных матриц. Большинство описанных методов относится к итерационным, т. е. к тем, решение которых получается в ходе ряда шагов — итераций, постепенно ведущих к получению результата с заданной погрешностью или с максимальным правдоподобием [33]. Описанные ниже функции MATLAB могут и должны применяться и при решении обычных СЛУ - без разреженных матриц.[ Использование всех этих функций, кроме Isqr, как правило, ограничено системами уравнений, в которых А — нормальная квадратная матрица, т. е. А* А -АА*, где А*— сопряженная (эрмитова) матрица А. — Примеч. ред. ]
Точное решение, метод наименьших квадратов и сопряженных градиентов
lsqr(A, В)—возвращает точное решение X СЛУ А*Х=В, если матрица последовательная, в противном случае — возвращает решение, полученное итерационным методом наименьших квадратов. Матрица коэффициентов А должна быть прямоугольной размера тхя, а вектор-столбец правых частей уравнений В должен иметь размер т. Условие m>=n может быть и необязательным. Функция 1 sqr начинает итерации от начальной оценки, по умолчанию представляющей собой вектор размером п, состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равного min(20, m, n) — либо 20, либо числу уравнений, либо числу неизвестных). Сходимость достигается, когда отношение вторых норм векторов norm(B-Ax)/norm(B) меньше или равно погрешности метода tol (по умолчанию 1е-б);
lsqr(A.B,tol) — возвращает решение с заданной погрешностью (порогом отбора) tol;
lsqr(A,b.tol .maxlt) — возвращает решение при заданном максимальном числе итераций maxit вместо, возможно, чересчур малого числа, заданного по умолчанию;
lsqr(A,b.tol .maxit,M) и lsqr(A,b,tol .maxit.Ml.M2) — при решении используются матрица предусловий М или М=М1*М2, так что производится решение системы inv(M)*A*x=inv(M)*b относительно х. Если Ml или М2 — пустые матрицы, то они рассматривается как единичные матрицы, что эквивалентно отсутствию входных условий вообще;
lsqr(A.B,tol .maxit.Ml.M2.X0) — точно задается начальное приближение Х0. Если Х0 — пустая матрица, то по умолчанию используется вектор, состоящий из нулей;
X = lsqr(A,B.tol .maxit,Ml.M2.X0) — при наличии единственного выходного параметра возвращает решение X. Если метод 1 sqr сходится, выводится соответствующее сообщение. Если метод не сходится после максимального числа итераций или по другой причине, на экран выдается относительный остаток попп(В-А*Х)/ norm(B) и номер итерации, на которой метод остановлен;
[X.flag] = lsqr(A.X.tol.maxit.Ml.M2.X0) — возвращает решение X и флаг flag. описывающий сходимость метода;
[X.flag.relres] = lsqr(A,X,tol.maxit,Ml.M2.X0) — также возвращает относительную вторую норму вектора остатков rel res=norm(B-A*X)/norm(B). Если флаг flag равен 0, то relres<tol;
[X.flag.relres.iter] = bicg(A,B.tol,maxit,Ml,M2.X0) — также возвращает номер итерации, на которой был вычислен X. Значение iter всегда удовлетворяет условию 0<iter<maxit;
[X.flag.relres,iter,resvec]= lsqr(A.B.tol.maxit.Ml.M2.X0) — также возвращает вектор вторых норм остатков resvec для каждой итерации начиная с res-vec(l)=norm(B=A*X0). Если флаг flag равен 0, то resvec имеет длину iter+1 и resvec(end)<tol*norm(B). Возможны значения flag, равные 0, 1, 2, 3 и 4. Значения flag предоставляют следующие данные о сходимости решения:
flag=0 - решение сходится при заданной точности tol и числе итераций не более заданного maxit;
flag=l - число итераций равно заданному maxit, но сходимость не достигнута;
flag=2 - матрица предусловий М плохо обусловлена;
flag=3 - процедура решения остановлена, поскольку две последовательные оценки решения оказались одинаковыми;
fl ag=4 - одна из величин в процессе решения вышла за пределы допустимых величин чисел (разрядной сетки компьютера).
Если значение flag больше нуля, то возвращается не последнее решение, а то решение, которое имеет минимальное значение отношения вторых норм векторов norm(B-A*x)/norm(B).
Пример:
» А=[0 012; 1300; 0101; 1010];
» В=[11; 7; 6; 4];
Введенные в этом примере матрица А и вектор В будут использованы и в других примерах данного раздела. В примере процесс итераций сходится на пятом шаге с относительным остатком (отношением вторых норм векторов невязки и свободных членов) 1.9 10- 13 .
Пример:
» lsqr(A,B.1e-6.5)
Isqr converged at iteration 5 to a solution
with relative residual
1.9e-013
ans =
1.0000
2.0000
3.0000
4.0000
Двунаправленный метод сопряженных градиентов
Решение СЛУ с разреженной матрицей возможно также известным двунаправленным методом сопряженных градиентов. Он реализован указанной ниже функцией.
biсд(А. В) — возвращает решение X СЛУ А*Х=В. Матрица коэффициентов А должна быть квадратной размера пхп, а вектор-столбец правых частей уравнений В должен иметь длину п. Функция bicg начинает итерации от начальной оценки, по умолчанию представляющей собой вектор размером п, состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равно min(20,n) — либо 20, либо числу уравнений). Сходимость достигается, когда относительный остаток norm(B-A*x)/norm(B) меньше или равен погрешности метода (по умолчанию le-6). Благодаря использованию двунаправленного метода сопряженных градиентов bicg сходится за меньшее число итераций, чем lsqr (в нашем примере быстрее на одну итерацию), но требует квадратную матрицу А, отбрасывая информацию, содержащуюся в дополнительных уравнениях, в то время как 1 sqr работает и с прямоугольной матрицей;
bicgCA.B.tol) — выполняет и возвращает решение с погрешностью (порогом отбора) tol;
bicg(A,b.tol, max it) — выполняет и возвращает решение при заданном максимальном числе итераций maxit;
bicgCA.b.tol,maxit,М) и bicg(A,b.tol .maxit,Ml,М2) — при решении используются матрица предусловий М или М=М1*М2, так что производится решение системы inv(M)*A*x=inv(M)*b относительно х. Если Ml или М2 — пустые матрицы, то они рассматривается как единичные матрицы, что эквивалентно отсутствию входных условий вообще;
bicgCA.B.tol, maxit. Ml. M2.X0) — точно задается начальное приближение Х0. Если Х0 — пустая матрица, то по умолчанию используется вектор, состоящий из нулей;
X = bi eg (А, В, tol, maxit. Ml, M2.X0) — при наличии единственного выходного параметра возвращает решение X. Если метод bicg сходится, выводится соответствующее сообщение. Если метод не сходится после максимального числа итераций или по другой причине, на экран выдается относительный остаток norm(B-A*X)/ norm(B) и номер итерации, на которой метод остановлен;
[X.flag.relres] = bicg(A,X,tol .maxit.Ml,M2.X0) — также возвращает относительную вторую норму вектора остатков relres=nQnr)(B-A*X)/norm(B). Если флаг flag равен 0, то rel res<tol;
[X, flag, rel res, iter] = bicgCA.B.tol,maxit,Ml,M2.XO) — также возвращает номер итерации, на которой был вычислен X. Значение iter всегда удовлетворяет условию 0<iter<maxit;
[X.flag.relres.iter.resvec] = bicgCA.B.tol,maxit,Ml,M2.XO) — также возвращает вектор вторых норм остатков resvec для каждой итерации начиная с res-vec(l)=norm(B-A*X0). Если флаг flag равен 0, то resvec имеет длину iter+1 и resvec(end)<tol*norm(B). Возможны значения flag, равные 0, 1, 2, 3 и 4. Эти значения предоставляют следующие данные о сходимости решения:
flag=0 - решение сходится при заданной точности tol и числе итераций не более заданного maxit;
flag=l - число итераций равно заданному maxit, но сходимость не достигнута;
f l ag=2 - матрица предусловий М плохо обусловлена;
fl ag=3 - процедура решения остановлена, поскольку две последовательные оценки решения оказались одинаковыми;
fl ag=4 - одна из величин в процессе решения вышла за пределы допустимых величин чисел (разрядной сетки компьютера).
Пример:
» bicg(A.B)
BICG converged at iteration 4
to a solution with relative residual
2.3e-015
ans=
1.0000
2.0000
3.0000
4.0000
[X.flag] = bicg(A,X.tol ,maxit.Ml,M2,X0) — возвращает решение Х и флаг flag, описывающий сходимость метода.
Устойчивый двунаправленный метод
Еще один двунаправленный метод, называемый- устойчивым, реализует функция bicgstab:
bicgstab(A.B) — возвращает решение X СЛУ А*Х=В. А — квадратная матрица. Функция bi cgstab начинает итерации от начальной оценки, по умолчанию представляющей собой вектор размером п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость метода достигается, когда относительный остаток norm(B-A*X)/norm(B) меньше или равен погрешности метода (по умолчанию le-б). Функция bicgstab(...) имеет и ряд других форм записи, аналогичных описанным для функции bi eg (...). Пример:
» bicgstab(A.B)
BICGSTAB converged at iteration 3.5
to a solution with relative residual
6.5e-012
ans =
1.0000
2.0000
3.0000
4.0000
Метод сопряженных градиентов
Итерационный метод сопряженных градиентов реализован функцией peg: О рсд(А.В) — возвращает решение X СЛУ А*Х=В. Матрица А должна быть квадратной, симметрической [ В нашем примере матрица А — несимметрическая, т. е. A(i,j)—*A(j,i). — Примеч. ред. ] и положительно определенной [ Матрица называется положительно определенной, если все ее собственные значения (характеристические числа) действительные и положительные. — Примеч. ред. ]. Функция pcg начинает итерации от начальной оценки, представляющей собой вектор размером п, состоящий из нулей. Итерации производятся либо до сходимости решения, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость достигается, если относительный остаток norm(b-A*X)/norm(B) меньше или равен погрешности метода (по умолчанию 1е-6). Максимальное число итераций — минимум из п и 20. Функция pcg(...) имеет и ряд других форм записи, описанных для функции bieg(...). Пример:
» pcg(A.B)
Warning: PCG stopped after the maximum 4 iterations
without converging to the desired tolerance le-006
The iterate returned (number 4) has relative residual 0.46
> In C:\MATI_AB\toolbox\matlab\sparfun\pcg.m at line 347
ans =
1.7006
1.2870
-2.0535
8.2912
В данном случае решение к успеху не привело, поскольку матрица А —несимметрическая. Новая функция rrrinres не требует, чтобы матрица А была положительно определенной. Достаточно, чтобы она была квадратной и симметрической. В отличие от peg минимизируется не относительная невязка, а абсолютная. Но и эта функция не может решить наш пример:
» minres(A.В.1е-6.1000000)
minres stopped at iteration 1000000 without converging
to the desired tolerance le-006
because the maximum number of iterations was reached.
The iterate returned (number 1000000) has relative residual 0.011
ans =
1.9669
3.7757
3.0789
1.9367
В MATLAB 6 появилась еще одна новая функция symmlq, которая использует LQ-алгоритм итерационного метода сопряженных градиентов и также не требует, чтобы ее входной аргумент — квадратная симметрическая матрица — была положительно определенной. Эта функция тоже не может решить наш пример, так как наша матрица А — квадратная, но не симметрическая.
Квадратичный метод сопряженных градиентов
Квадратичный метод сопряженных градиентов реализуется в системе MATLAB с помощью функции cgs:
cgs(A.B) — возвращает решение X СЛУ А*Х=В. А — квадратная матрица. Функция cgs начинает итерации от начальной оценки, по умолчанию представляющей собой вектор размера п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость метода достигается, когда относительный остаток norm(B-A*X)/norm(B) меньше или равен погрешности метода (по умолчанию le-6). Функция cgs(...) имеет и ряд других форм записи, аналогичных описанным для функции bieg(...). Пример:
» cgs(A.B)
CGS converged at iteration 4 to a solution
with relative residual 4e-014
ans =
1.0000
2.0000
3.0000
4.0000
Метод минимизации обобщенной невязки
Итерационный метод минимизации обобщенной невязки также реализован в системе MATLAB. Для этого используется функция gmres:
gmres (А, В. restart) — возвращает решение X СЛУ А*Х=В. А —квадратная матрица. Функция gmres начинает итерации от начальной оценки, представляющей собой вектор размера и, состоящий из нулей. Итерации производятся либо до сходимости к решению, либо до появления ошибки, либо до достижения максимального числа итераций. Сходимость достигается, когда относительный остаток norm(B-A*X)/norm(B) меньше или равен заданной погрешности (по умолчанию 1е-6). Максимальное число итераций — минимум из n/restart и 10. Функция gmres (...) имеет и ряд других форм записи, аналогичных описанным для функции bieg(...). Пример:
» gmres(A.B)
GMRES(4) converged at Iteration 1(4) to a solution with relative residual le-016
ans =
1.0000
2.0000
3.0000
4.0000
Квазиминимизация невязки — функция qmr
Метод решения СЛУ с квазиминимизацией невязки реализует функция qmr:
qmr (А, В) — возвращает решение X СЛУ А*Х=Ь. Матрица А должна быть квадратной. Функция qmr начинает итерации от начальной оценки, представляющей собой вектор длиной п, состоящий из нулей. Итерации производятся либо до сходимости метода, либо до появления ошибки, либо до достижения максимального числа итераций. Максимальное число итераций — минимум из п и 20. Функция qmr(...) имеет и ряд других форм записи, аналогичных описанным для функции bi eg (...). Пример:
» qmr(A.B)
QMR converged at iteration 4 to a solution
with relative residual 1.1e-014
ans =
1.0000
2.0000
3 .0000
4.0000
Вычисление нулей функции одной переменной
Ряд функций системы MATLAB предназначен для работы с функциями. По аналогии с дескрипторами графических объектов могут использоваться объекты класса дескрипторов функций, задаваемых с помощью символа @, например: » fe=@exp.
Примечание
Подфункциями понимаются как встроенные функции, например sin(x) или ехр(х),так и функции пользователя, например f(x), задаваемые как т-файлы-функции.
Численные значения таких функций, заданных дескрипторами, вычисляются с помощью функции feval:
» feval(fe.1.0)
ans =
2.7183
Для совместимости с прежними версиями можно записывать функции в символьном виде в апострофах, использование функции eval для их вычисления может быть более наглядно, не нужно создавать m-файл, но в учебном курсе мы будем стараться использовать новую нотацию, с использованием дескрипторов функций и feval, так как при этом программирование становится «более объектно-ориентированным», повышается скорость, точность и надежность численных методов. Поэтому, хотя везде в нижеследующем тексте вместо @fun можно подставить и символьное значение функции в апострофах, мы будем использовать нотацию @fun в дидактических целях. Все же иногда в интерактивном режиме можно использовать старую запись, чтобы не создавать m-файл функции.
Довольно часто возникает задача решения нелинейного уравнения вида f(x) = О или/, (г) =/ 2 (дг). Последнее, однако, можно свести к виду f(x) =f 1 (х) - f 2 (х) = 0. Таким образом, данная задача сводится к нахождению значений аргумента х функции f(x) одной переменной, при котором значение функции равно нулю. Соответствующая функция MATLAB, решающая данную задачу, приведена ниже:
fzero(@fun,x) — возвращает уточненное значение х, при котором достигается нуль функции fun, представленной в символьном виде, при начальном значении аргумента х. Возвращенное значение близко к точке, где функция меняет знак, или равно NaN, если такая точка не найдена;
fzero(@fun,[xl x2]) — возвращает значение х, при котором fun(x)=0 с заданием интервала поиска с помощью вектора x=[xl х2], такого, что знак fun(x(D) отличается от знака fun(x(2)). Если это не так, выдается сообщение об ошибке. Вызов функции fzero с интервалом гарантирует, что fzero возвратит значение, близкое к точке, где fun изменяет знак;
fzero(@fun,x.tol) — возвращает результат с заданной погрешностью tol;
fzero(@fun,x.tol .trace) — выдает на экран информацию о каждой итерации;
fzero(@fun,х.tol .trace,Р1.Р2,...) — предусматривает дополнительные аргументы, передаваемые в функцию fun(x.Pl,P2,...). При задании пустой матрицы для tol или trace используются значения по умолчанию. Пример:
fzero(fun,x,[ ],[ ],Р1).
Для функции fzero ноль рассматривается как точка, где график функции fun пересекает ось х, а не касается ее. В зависимости от формы задания функции fzero реализуются следующие хорошо известные численные методы поиска нуля функции: деления отрезка пополам, секущей и обратной квадратичной интерполяции. Приведенный ниже пример показывает приближенное вычисление р/2 из решения уравнения cos(x)=0 с представлением косинуса дескриптором:
» х= fzero(@cos.[1 3])
x =
1.5708
В более сложных случаях настоятельно рекомендуется строить график функции f(x) для приближенного определения корней и интервалов, в пределах которых они находятся. Ниже дан пример такого рода (следующий листинг представляет собой содержимое m-файла fun1.m):
%Функция, корни которой ищутся
function f=funl(x)
f=0.25*x+sin(x)-1;
» х=0:0.1:10;
» plot(x,funl(x));grid on;
Из рисунка нетрудно заметить, что значения корней заключены в интервалах [0.5 1], [2 3] и [5 6]. Найдем их, используя функцию fzero:
» xl=fzero(@funl.[0.5 1])
xl =
0.8905
» x2=fzero(@funl.[2 3])
x2 =
2.8500
» x3=fzero(@funl,[5.6])
x3 =
5.8128
» x3=fzero(@funl,5,0.001)
x3 =
5.8111
Обратите внимание на то, что корень хЗ найден двумя способами и что его значения в третьем знаке после десятичной точки отличаются в пределах заданной погрешности tol =0.001. К сожалению, сразу найти все корни функция fzero не в состоянии. Решим эту же систему при помощи функции f sol ve из пакета Optimization Toolbox, которая решает систему нелинейных уравнений вида f(x)=0 методом наименьших квадратов, ищет не только точки пересечения, но и точки касания, f solve имеет почти те же параметры (дополнительный параметр — задание якобиана) и почти ту же запись, что и функция lsqnonneg, подробно рассмотренная ранее. Пример:
»fsolve(@funl,0:10 )
ans =
Columns 1 through 7
0.8905 0.8905 2.8500 2.8500 2.8500 5.8128 5.8128
Columns 8 through 11
5.8128 2.8500 2.8500 10.7429
Для решения систем нелинейных уравнений следует также использовать функцию solve из пакета Symbolic Math Toolbox. Эта функция способна выдавать результат в символьной форме, а если такого нет, то она позволяет получить решение в численном виде. Пример:
» solve('0.25*x + sin(x) -1) [ Пакеты расширения Symbolic Math ToolBox и Extended Symbolic Math Toolbox MATLAB 6.0 используют ядро Maple V Release 5 [30-35] и являются поэтому исключением: они пока не поддерживают новую нотацию с использованием дескрипторов функций. — Примеч. ред. ]
ans =
.89048708074438001001103173059554
Минимизация функции одной переменной
Еще одна важная задача численных методов — поиск минимума функции f(x) в некотором интервале изменения х — от х 1 до х 2 . Если нужно найти максимум такой функции, то достаточно поставить знак «минус» перед функцией. Для решения этой задачи используется следующая функция:
[X.fval.exitflag,output] = fminbnd(@fun.x1,x2.options, p1,p2,...)
fminbnd(@fun,xl,x2) — возвращает значение х, которое является локальным минимумом функции fun(x) на интервале xl<x<x2;
fminbnd(@fun,xl,x2.options) — сходна с описанной выше формой функции, но использует параметры to!X, maxfuneval, maxiter, display из вектора options, предварительно установленные при помощи команды optimset (смотрите описание lsqnonneg);
fminbnd(@fun,xl.x2,options.P1.P2...) — сходна с описанной выше, но передает в целевую функцию дополнительные аргументы: Р1, Р2..... Если требуется использовать параметры вычислений по умолчанию, то вместо options перед P1, Р2 необходимо ввести [ ] (пустой массив);
[x.fval] = fminbnd(...) — дополнительно возвращает значение целевой функции fval в точке минимума;
[x.fval .exitflag] = fminbndL.) —дополнительно возвращает параметр exitflag, равный 1, если функция сошлась с использованием options.tolX, и 0, если достигнуто максимальное число итераций options.maxiter.
В этих представлениях используются следующие обозначения: xl. х2 — интервал, на котором ищется минимум функции; Р1.Р2... — дополнительные, помимо х, передаваемые в функцию аргументы; fun — строка, содержащая название функции, которая будет минимизирована; options — вектор параметров вычислений. В зависимости от формы задания функции fminbnd вычисление минимума выполняется известными методами золотого сечения или параболической интерполяции. Пример:
» options=optimset('tolX',1.е-10):
[x]=fminbnd(@cos.3,4,options)
х =
3.1416
Минимизация функции нескольких переменных
Значительно сложнее задача минимизации функций нескольких переменных f(х 1 ,...). При этом значения переменных представляются вектором х, причем начальные значения задаются вектором х 0 Для минимизации функций ряда переменных MATLAB обычно использует разновидности симплекс-метода Нелдера-Мида.
Этот метод является одним из лучших прямых методов минимизации функций ряда переменных, не требующим вычисления градиента или производных функции. Он сводится к построению симплекса в n-мерном пространстве, заданного n+1 вершиной. В двумерном пространстве симплекс является треугольником, а в трехмерном — пирамидой. На каждом шаге итераций выбирается новая точка решения внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса. Ближайшая к этой точке вершина симплекса обычно заменяется этой точкой. Таким образом, симплекс перестраивается и обычно позволяет найти новое, более точное положение точки решения. Решение повторяется, пока размеры симплекса по всем переменным не станут меньше заданной погрешности решения.
Реализующая симплекс-методы Нелдера-Мида функция записывается в виде:
fminsearch(@fun,xO) — возвращает вектор х, который является локальным минимумом функции fun(x) вблизи хО.хО может быть скаляром, вектором (отрезком) при минимизации функции одной переменной или матрицей (для функции нескольких переменных);
fminsearch(@fun,xO,options) — аналогична описанной выше функции, но использует вектор параметров options точно так же, как функция fminbnd;
fminsearch(@fun,xO,options.P1.P2,...) — сходна с описанной выше функцией, но передает в минимизируемую функцию нескольких переменных fun(x.P1,P2....) ее дополнительные аргументы Р1. Р2,.... Если требуется использовать параметры вычислений по умолчанию, то вместо options перед Р1, Р2 необходимо ввести [ ].;
[x.fval] = fminsearchC...) — дополнительно возвращает значение целевой функции fval в точке минимума;
[x.fval .exitflag] = fminsearchC...) —дополнительно возвращает параметр exitflag, положительный, если процесс итераций сходится с использованием options. tol X, отрицательный, если итерационный процесс не сходится к полученному решению х, и 0, если превышено максимальное число итераций options. maxi ten;
[х. fval .exitflag.output] - fminsearch(...) возвращает структуру (запись) output,
output.algorithm — использованный алгоритм;
output. funcCount — число оценок целевой функции;
output.Iterations — число проведенных итераций.
Классическим примером применения функции fminsearch является поиск минимума тестовой функции Розенброка, точка минимума которой находится в «овраге» с «плоским дном»: rb(x 1 ,x 2 ,а) = 100*(x 2 - x 1 ) 2 + (а - x 1 ) 2 .
Минимальное значение этой функции равно нулю и достигается в точке [ а а 2 ]. В качестве примера уточним значения x 1 и х 2 в точке [-1.2 1]. Зададим функцию (в файле rb.m):
% Тестовая функция Розенброка
function f=rb(x.a)
if nargin<2 a=l: end
f=100*(x(2)-x(i^2) ^ 2+(a-x(l)^2:
Теперь решим поставленную задачу:
»options=optimset( 'tolX',1.e-6):
[xmin. opt, rosexflag, rosout]=fminsearch(@rb.[-1.2 1],options)
xmin =
1.0000 1.0000
opt =
4.1940e-014
rosexflag =
1 rosout =
iterations: 101
funcCount: 189
algorithm: 'Nelder-Mead simplex direct search' .
Для лучшего понимания сути минимизации функции нескольких переменных рекомендуется просмотреть пример минимизации этой функции, имеющийся в библиотеке демонстрационных примеров Demos.
Для минимизации функций нескольких переменных можно использовать также функцию MATLAB fminunc и функцию Isqnonlin из пакета Optimization Toolbox. Первая из них позволяет использовать предварительно заданные командой optimset порог сходимости для значения целевой функции, вектор градиентов opt ions, grad-obj, матрицу Гесса, функцию умножения матрицы Гесса или график разреженности матрицы Гесса целевой функции. Isqnonl in реализует метод наименьших квадратов и, как правило, дает наименьшее число итераций при минимизации. Ограничимся приведением примеров их применения для минимизации функции Розенброка:
» options=optimset('tolX',le-6.'To!Fun'.le-6);
» [xmin. opt. exflag. out, grad, hessian ]=fminunc(@rb,[-1.2 1].options)
Warning: Gradient must be provided for trust-region method;
using line-search method instead.
> In C:\MATLABR12\toolbox\optim\fminunc.m at line 211
Optimization terminated successfully:
Current search direction is a descent direction, and magnitude of directional derivative in search direction less than 2*options.TolFun
xmin =
1.0000 1.0000
opt =
1.9116e-011
exflag=
1
out =
iterations: 26
funcCount: 162
stepsize: 1.2992
firstorderopt: 5.0020e-004
algorithm: 'medium-scale: Quasi-Newton line search'
grad=
l.Oe-003 *
-0.5002
-0.1888
hessian =
820.4028 -409.5496
-409.5496 204.7720
firstorderopt - мера оптимальности для первой нормы градиента целевой функции в найденной точке минимума;
»options=optimset('tolX' Gе-6. 'maxFunEvals' .162):
» [xmin. opt]=lsqnonlin(@rb,[-1.2 1].[0 le-6].[0 le-6],options)
Warning: Large-scale method requires at least as many equations as variables:
switching to line-search method instead. Upper and lower bounds will be ignored.
> In C:\MATLABR12\toolbox\optim\private\lsqncommon.m at line 155
In C:\MATLABR12\toolbox\optim\lsqnonlin.m at line 121
Maximum number of function evaluations exceeded Increase
OPTIONS.maxFunEvals
xmin =
0.6120 0.3715
opt =
0.1446
Аппроксимация производных
Для выполнения аппроксимации Лапласиана в MATLAB используется следующая функция:
del 2(11) — возвращает матрицу L дискретной аппроксимации дифференциального оператора Лапласа, примененного к функции U:
Матрица L имеет тот же размер, что и матрица U, и каждый ее элемент равен разности элемента массива U и среднего значения четырех его соседних элементов (для узлов сетки во внутренней области). Для вычислений используется пятиточечная формула аппроксимации Лапласиана.
Другие формы этой функции также возвращают матрицу L, но допускают дополнительные установки:
L = del2(U,h) — использует шаг h для установки расстояния между точками в каждом направлении (h — скалярная величина). По умолчанию h=1;
L = de!2(U,hx,hy) — использует hx и hy для точного определения расстояния между точками. Если hx — скалярная величина, то задается расстояние между точками в направлении оси х, если hx — вектор, то он должен иметь размер. равный числу столбцов- матрицы U , и точно определять координаты точек по оси х. Аналогично если hy — скалярная величина, то задается расстояние между точками в направлении оси у, если hy — вектор, то он должен иметь размер. равный числу строк матрицы U, и точно определять координаты точек по оси у:
L = del2(U,hx.hy,hz....) — если U является многомерным массивом, то расстояния задаются с помощью параметров hx, hy, hz,.... Пример:
» [х.у]= meshgrid(-5:5.-4:4);
» U =x.*x+y.*y
U =
41 |
32 |
25 |
20 |
17 |
16 |
17 |
20 |
25 |
32 |
41 |
|
34 |
25 |
18 |
13 |
10 |
9 |
10 |
13 |
18 |
25 |
34 |
|
29 |
20 |
13 |
8 |
5 |
4 |
5 |
8 |
13 |
20 |
29 |
|
26 |
17 |
10 |
5 |
2 |
1 |
2 |
5 |
10 |
17 |
26 |
|
25 |
16 |
9 |
4 |
1 |
0 |
1 |
4 |
9 |
16 |
25 |
|
26 |
17 |
10 |
5 |
2 |
1 |
2 |
5 |
10 |
17 |
26 |
|
29 |
20 |
13 |
8 |
5 |
4 |
5 |
8 |
13 |
20 |
29 |
|
34 41 |
25 32 |
18 25 |
13 20 |
10 17 |
9 16 |
10 17 |
13 20 |
18 25 |
25 32 |
34 41 |
|
» V=del2(U)
V =
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
|
1 |
1 |
1 |
1 1 |
1 1 1 |
1 |
1 |
1 |
|
» subplot(1,2,1)
» surfl(U)
» subplot(1,2,2)
» surfl(V)
На рис. 16.1 представлены графики поверхностей U и V.
Рис. 16.1. Графики функций U и V
Апроксимация производных конечными разностями
diff(X) — возвращает конечные разности смежных элементов массива X. Если X — вектор, то diff(X) возвращает вектор разностей соседних элементов [Х(2)-Х(1) Х(3)-Х(2) ... X(n)-X(n-D], у которого количество элементов на единицу меньше, чем у исходного вектора X. Если X — матрица, то diff(X) возвращает матрицу разностей столбцов: [X(2:m, :)-X(l:m-l. :)];
Y = diff(X.n.dim) — возвращает конечные разности для матрицы X по строкам или по столбцам в зависимости от значения параметра dim. Если порядок п равен величине dim или превышает ее, то diff возвращает пустой массив.
Используя функцию diff, можно строить графики производных заданной функции. Пример этого показан ниже:
» Х=0:0.05:10;
» S=sin(X);
» D=diff(S):
» plot(D/0.05)
Для получения приближенных численных значений производной от функции sin(.r) вектор конечно-разностных значений D поделен на шаг точек по х. Как и следовало ожидать, полученный график очень близок к графику функции косинуса (рис. 16.2). Обратите внимание, что по оси х отложены номера элемента* вектора X, а не истинные значения х.
Пакет расширения Symbolic Math Toolbox позволяет выполнять дифференциро вание функций в аналитическом виде, т. е. точно. Это, однако, не всегда нужно
Рис. 16.2. Приближенный график производной от функции sin(x)
Вычисление градиента функции
Вычисление конечно-разностным методом градиента функций реализуется следующей функцией:
FX = gradient(F) — возвращает градиент функции одной переменной, заданной вектором ее значений F. FX соответствует конечным разностям в направлении х,
[FX.FY] = gradient(F) — возвращает градиент функции F(X,Y) двух переменных, заданной матрицей F, в виде массивов FX и FY. Массив FX соответствует конечным разностям в направлении х (столбцов). Массив FY соответствует конечным разностям в направлении у (строк);
[FX.FY.FZ,...] = gradient(F) — возвращает ряд компонентов градиента функции нескольких переменных, заданной в виде многомерного массива F;
[...] = gradient(F.h) — использует шаг h для установки расстояния между точками в каждом направлении (h — скалярная величина). По умолчанию h=l;
[...] = gradient(F.hi,h2,...) — если F является многомерным массивом, то расстояния задаются с помощью параметров h1, h2, h3,....
Пример:
» F=[l 35795678]
F =
135795678
» FX = gradient(F)
FX =
Columns 1 through 7
2.0000 2.0000 2.0000 2.0000 -1.0000-1.50001.0000
Columns 8 through 9
1.0000 1.0000
» F=[l 2 3 6 7 8:1 4 5 7 9 3;5 9 5 2 5 7]
F =
123678
145793
595257
» [FX.FY] = gradient(F)
FX =
1.0000 1.0000 2.0000 2.0000 1.0000 1.0000
.3.0000 2.0000 1.5000 2.0000 -2.0000 -6.0000
4.0000 0 -3.50000 2.5000 2.0000
FY =
0 2.0000 2.0000 1.0000 2.0000-5.0000
2.0000 3.5000 1.0000 -2.0000-1.0000-0.5000
4.0000 5.0000 0 -5.0000-4.0000 4.0000
Функция gradient часто используется для построения графиков полей градиентов.
Численное интегрирование
Численное интегрирование традиционно является одной из важнейших сфер применения математического аппарата. В данном разделе приводятся функции для численного интегрирования различными методами. Численное интегрирование заключается в приближенном вычислении определенного интеграла вида
одним из многочисленных численных методов, для вычисления неопределенного интеграла по рекурсивному алгоритму усредняются значения b=a+dn, где d — предельно малая величина.
Метод трапеций
Приведенные ниже функции выполняют численное интегрирование методом трапеций и методом трапеций с накоплением.
trapz(Y) — возвращает определенный интеграл, используя интегрирование методом трапеций с единичным шагом между отсчетами. Если Y — вектор, то trapz(Y) возвращает интеграл элементов вектора Y, если Y — матрица, то trapz(Y) возвращает вектор-строку, содержащую интегралы каждого столбца этой матрицы;
trapz(X.Y) — возвращает интеграл от функции Y по переменной X, используя метод трапеций (пределы интегрирования в этом случае задаются начальным и конечным элементами вектора X);
trapz(...,dim) — возвращает интеграл по строкам или по столбцам для входной матрицы в зависимости от значения переменной dim. Примеры:
»Y=[1.2.3.4]
Y =
1 2 3 4
» trapz(y)
ans =
7.5000
» X=0:pi/70:pi/2;
» Y=cos(X);
» Z = trapz(Y)
Z =
22.2780
cumtrapz(Y) — возвращает численное значение определенного интеграла для функции, заданной ординатами в векторе или матрице Y с шагом интегрирования, равным единице (интегрирование методом трапеций с накоплением). В случае когда шаг отличен от единицы, но постоянен, вычисленный интеграл достаточно умножить на величину шага. Для векторов эта функция возвращает вектор, содержащий результат интегрирования с накоплением элементов вектора Y. Для матриц — возвращает матрицу того же размера, что и Y, содержащую результаты интегрирования с накоплением для каждого столбца матрицы Y;
cumtrapz(X, Y) — выполняет интегрирование с накоплением от Y по переменной X, используя метод трапеций. X и Y должны быть векторами одной и той же длины или X должен быть вектором-столбцом, a Y — матрицей;
cumtrapz(...,dim) — выполняет интегрирование с накоплением элементов по размерности, точно определенной скаляром dim. Длина вектора X должна быть равна size(Y.dim). Примеры:
» cumtrapz(y)
ans=
0 1.5000 4.0000 7.5000
» Y=magic(4)
Y =
162 3 13
5 11 10 8
97 6 12
4 14 15 1
» Z= cumtrapz(Y.l)
Z =
0 0 0 0
10.5000 6.5000 6.5000 10.5000
17.5000 15.500014.500020.5000
24.0000 26.000025.000027.0000
Численное интегрирование методом квадратур
Приведенные ниже функции осуществляют интегрирование и двойное интегрирование, используя квадратурную формулу Симпсона или метод Гаусса-Лобатто. Квадратура — численный метод нахождения площади под графиком функции/(т), т. е. вычисление определенного интеграла вида
В приведенных ниже формулах подынтегральное выражение fun обычно задается в форме дескриптора функции, поэтому с дидактическими целями используем нотацию @fun.
Функции quad и quadl используют два различных алгоритма квадратуры для вычисления определенного интеграла. Функция quad выполняет интегрирование по методу низкого порядка, используя рекурсивное правило Симпсона [4, 40]. Но она может быть более эффективной при негладких подынтегральных функциях или при низкой требуемой точности вычислений. Алгоритм quad в MATLAB 6 изменен по сравнению с предшествовавшими версиями, точность по умолчанию по сравнению с версиями 5.3х повышена в 1000 раз (с 10- 3 до 10- 6 ). Новая функция quadl (квадратура Лобатто) использует адаптивное правило квадратуры Гаусса— Лобатто очень высокого порядка. Устаревшая функция quads выполняла интегрирование, используя квадратурные формулы Ньютона—Котеса 8-го порядка [40]. Достижимая точность интегрирования гладких функций в MATLAB 6 поэтому также значительно выше, чем в предшествующих версиях.
quad(@fun,a.b) — возвращает численное значение определенного интеграла от заданной функции @fun на отрезке [а Ь]. Используется значительно усовершенствованный в MATLAB 6 адаптивный метод Симпсона;
quad(@fun,a.b.tol) — возвращает численное значение определенного интеграла с заданной относительной погрешностью tol. По умолчанию to1=l.e-6. Можно также использовать вектор, состоящий из двух элементов tol =[rel_tol abs_tol], чтобы точно определить комбинацию относительной и абсолютной погрешности;
quad(@fun,a.b,tol .trace) — возвращает численное значение определенного интеграла и при значении trace, не равном нулю, строит график, показывающий ход вычисления интеграла;
quad(@fun,a,b.tol,trace,PI,P2,...) — возвращает численное значение определенного интеграла по хот подынтегральной функции fun, использует дополнительные аргументы P1, P2,..., которые напрямую передаются в подынтегральную функцию: G=fun(X.Pl,P2,...). Примеры:
» quad('(exp(x)-l)',0,1,1e-5)
ans =
0.7183
» q = quad(@exp,0,2,1e-4)
q =
6.3891
» q = quad(@sin.0,pi,le-3)
q = 2.0000
dblquad(@fun,inmin,inmax.outmin,outmax) — вычисляет и возвращает значение двойного интеграла для подынтегральной функции fun (Inner, outer), по умолчанию используя квадратурную функцию quad. Inner — внутренняя переменная, изменяющаяся на закрытом интервале от inmin до inmax, a outer — внешняя переменная, изменяющаяся на закрытом интервале от outmin до outmax. Первый аргумент @fun — строка, описывающая подынтегральную функцию. Этс может быть либо дескриптор функции, либо объект inline (в последнем случае символ «@» в ее записи отсутствует). Обычная запись в апострофах тепер недопустима. Эта функция должна быть функцией двух переменных вид. fout=fun(inner.outer). Функция должна брать вектор inner и скаляр outer возвращать вектор fout, который является функцией, вычисленной в outer и каждом значении inner [ Функция inime('expr', 'argl',...'argn') так же создает объект, но без дескриптора, 'ехрг' — выражеши Строки 'argx' —входные аргументы. При их отсутствии по умолчанию подставляется х. Если вмест 'arg' — скаляр, то он означает количество дополнительных переменных Р. Примеры запис; g = inline(exp); g - inline('t A 2'); g = inline('sin(2*pi*f + theta)'); g = inline('sin(2*pi*f + theta)', : 'theta'); g - inline('x A Pl+P2', 2). - Примеч. ред. ];
dblquad(@fun,inmin.inmax.outmin,oiitmax,tol .trace) — передает в функцию dblquad параметры tol и trace. Смотрите справку по функции quad для получения информации о параметрах to! и trace;
dblquad(@fun,inmin,inmax,outmin,outmax.tol .trace,order) — передает параметры tol и trace для функции quad или quadl в зависимости от значения строки order. Допустимые значения для параметра order — @quad , @quadl или имя любого определенного пользователем квадратурного метода с таким же вызовом и такими же возвращаемыми параметрами, как у функций quad и quad!. (Например, при проверке старых программ можно использовать @quad8 для большей совместимости с прежними версиями MATLAB). По умолчанию (без параметра order) вызывается @quad. поскольку подинтегральные функции могут быть негладкими.
Пример: пусть m-файл integl.m описывает функцию 2*y*sin(x)+x/2*cos(y), тогда вычислить двойной интеграл от той функции можно следующим образом:
» result = dblquad(@integl,pi,2*pi,0.2*pi)
result =
78.9574
Работа с полиномами
Полиномы (у нас их принято называть также степенными многочленами) — широко известный объект математических вычислений и обработки данных. Обычно полином записывается в виде
р(х) = а п х^n + x п-1 x^n -1+ ... + а 2 x^2 + а 1 ^х + а 0 ,
и так обычно принято в MATLAB для п, отрицательных по умолчанию, хотя и возможны иные формы записи, например
р(х) = a 1 x^n + а 2 x^n-1 + ... + а п х + а п+1
Последняя запись обычно принята в MATLAB для n, по умолчанию положительных.
Широкое применение полиномов отчасти обусловлено большими возможностями полиномов в представлении данных, а также их простотой и единообразием вычислений. В этом разделе описаны основные функции для работы с полиномами. При этом полиномы обычно задаются векторами их коэффициентов.
Умножение и деление полиномов
Ниже приведены функции, осуществляющие умножение и деление полиномов, или, что то же самое, свертку двух входных векторов, в которых находятся коэффициенты полиномов, и операцию, обратную свертке.
w = conv(u.v) — возвращает свертку векторов и и v. Алгебраически свертка — то же самое, что и произведение полиномов, чьи коэффициенты — элементы векторов и и v. Если длина вектора и равна т, а длина вектора v — п, то вектор w имеет длину т+п-1, а его k-й элемент вычисляется по следующей формуле
Пример:
» f=[2.3.5.6];d=[7,8,3]:r=conv(f,d)
r =
14 37 65 91 63 18
[q,r] = deconv(v.u) —возвращает результат деления полинома v на полином и. Вектор q представляет собой частное от деления, а г — остаток от деления, так что выполняется соотношение v=conv(u,q)+r.
Пример:
» t=[14,37.65.91,63,18]:r=[7.8.3];[w.e]=deconv(t.r)
w =
2.0000 3.0000 5.0000 6.0000
е =
1.0е-013
0 0 0.1421 -0.1421-0.2132-0.1066
Вычисление полиномов
В этом разделе приведены функции вычисления коэффициентов характеристического полинома, значения полинома в точке и матричного полинома.
poly(A) — для квадратной матрицы А размера пхп возвращает вектор-строку размером n+1, элементы которой являются коэффициентами характеристического полинома det(A-sI), где I — единичная матрица, as — оператор Лапласа. Коэффициенты упорядочены по убыванию степеней. Если вектор состоит из п+1 компонентов, то ему соответствует полином вида c 1 s^n+...+c n s+c n+1 ;
poly (г) — для вектора г возвращает вектор-строку р с элементами, представляющими собой коэффициенты полинома, корнями которого являются элементы вектора г. Функция roots(p) является обратной, ее результаты, умноженные на целое число, дают poly (r ).
А =
2 3 6
3 8 6
1 7 4
» d=poly(A)
d =
1.0000 -14.0000 -1.0000-40.0000
» А=[3,6.8:12.23.5:11.12.32]
А =
3 6 8
1223 5
1112 32
» poly(A)
ans =
1.0000 -58.0000 681.0000 818.0000
Приведенная ниже функция вычисляет корни (в том числе комплексные) для полинома вида
roots (с) — возвращает вектор-столбец, чьи элементы являются корнями полинома с.
Вектор-строка с содержит коэффициенты полинома, упорядоченные по убыванию степеней. Если с имеет n+1 компонентов, то полином, представленный этим вектором, имеет вид . Пример:
» x=[7.45.12.23];d=roots(x)
d =
-6.2382
-0.0952+0.7195i
-0.0952 -0.7195i
А=[-6.2382 -0.0952+0.71951 -0.0952 -0.71951]:
B=Poly (А)
В=[1.0000 6.4286 1.7145 3.2859]
В*7
ans =
7.0000 45.000212.001523.0013
С погрешностью округления получили тот же вектор.
polyval (p,x) — возвращает значения полинома р, вычисленные в точках, заданных в массиве х. Полином р — вектор, элементы которого являются коэффициентами полинома в порядке уменьшения степеней, х может быть матрицей или вектором. В любом случае функция polyval вычисляет значения полинома р для каждого элемента х;
[у.delta] = polyval (p. x.S) или [у,delta] = polyval (p.x.S.mu)—использует структуру S, возвращенную функцией polyfit, и данные о среднем значении (mu(l)) и стандартном отклонении (mu(2)) генеральной совокупности для оценки пр-грешности аппроксимации (y+delta).
Пример:
» р=[3,0.4.3]; d=polyval(p,[2,6])
d =
35 675
polyvalm(p.X) — вычисляет значения полинома для матрицы. Это эквивалентно подстановке матрицы X в полином р. Полином р — вектор, чьи элементы являются коэффициентами полинома в порядке уменьшения степеней, а X — квадратная матрица.
Пример:
|
|
|
|
|
|
|
» D=pascal(5) |
|
|||
|
D = |
|
|
|
|
|
1 1 |
1 |
1 |
1 |
|
|
1 2 |
3 |
4 |
5 |
|
|
1 3 |
6 |
10 |
15 |
|
|
1 4 |
10 |
20 |
35 |
|
|
1 5 |
15 |
35 |
70 |
|
|
|
|
|
|
|
f=poly(d)
f =
1.0000 -99.0000 626.0000 -626.0000 99.0000-1.0000
» polyvalm(f.D)
ans =
l.0e-006*
-0.0003 -0.0011-0.0038-0.0059-0.0162
-0.0012 -0.0048-0.0163-0.0253-0.0692
-0.0034 -0.0131 -0.0447 -0.0696 -0.1897
-0.0076 -0.0288-0.0983-0.1529-0.4169
-0.0145-0.0551-0.1883-0.2929-0.7984
Данный пример иллюстрирует также погрешности численных методов, поскольку точное решение дает нулевую матрицу.