Математические программы

Введение в программу Mathematica 3.0

1. Mathematica в роли калькулятора

Mathematica в роли калькулятора

Систему Mathematica можно использовать как калькулятор: Вы вводите задание и получаете результат.

Пример простейшего вычисления. Нажатие клавиш Shift-Enter является приказом системе Mathematica вычислить введенное выражение.    

6^20
3656158440062976

Mathematica автоматически обрабатывает числа любого размера.

6^200
42682522381202740079697489151877373234298874535448942\ 94954790789351129295496197390190721393407570972968128\ 15466676129830954465240517595242384015591919845376

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

6200
42682522381202740079697489151877373234298874535448942\ 94954790789351129295496197390190721393407570972968128\ 15466676129830954465240517595242384015591919845376

Вычисление собственных значений матрицы.

[Graphics:calcgr8.gif]
[Graphics:calcgr9.gif]

Важной особенностью системы Mathematica является ее способность так же легко оперировать с символьными преобразованиями, как и с численными вычислениями.

Решение уравнения в системе Mathematica. Корни уравнения есть функции зависящие от параметра.

[Graphics:calcgr10.gif]
[Graphics:calcgr11.gif]

Вычисление интеграла в системе Mathematica.

[Graphics:calcgr12.gif]
[Graphics:calcgr13.gif]

Вы можете использовать систему 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 простым нажатием одной из кнопок в стандартных палитрах.

 

2. Вычислительная мощь системы Mathematica

Вычислительная мощь системы Mathematica

Система Mathematica дает Вам в руки огромную вычислительную мощь, оставаясь при этом такой же простой в использовании как и калькулятор.

Эта команда генерирует матрицу размера 100x100, состоящую из случайных чисел. Точка с запятой в конце команды запрещает системе Mathematica вывод матрицы на экран.

m=Table[Random[ ],{100},{100}];

На большинстве компьютеров система Mathematica затрачивает меньше секунды на вычисление всех собственных значений этой матрицы и представление их модулей в виде графика.

ListPlot[Abs[Eigenvalues[m]]]
-Graphics-

Mathematica может оперировать с числами любого размера. На большинстве компьютеров вычисление точного значения 1000! в системе Mathematica занимает менее секунды.

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 знаками.

[Graphics:pow.txtgr9.gif]
 3.14159265358979323846264338327950288419716939937510\ 5820974944592307816406286208998628034825342117067982\ 1480865132823066470938446095505822317253594081284811\ 1745028410270193852110555964462294895493038196442881\ 0975665933446128475648233786783165271201909145648566\ 9234603486104543266482133936072602491412737245870066\ 0631558817488152092096282925409171536436789259036001\ 1330530548820466521384146951941511609433057270365759\ 5919530921861173819326117931051185480744623799627495\ 673518857527248912279381830119491

Mathematica  легко справляется с алгебраическими преобразованиями, которые заняли бы годы ручной работы.

Разложение полинома на множители.

Factor[x99 + y99]

Система Mathematica использует изощренные алгоритмы для упрощения выражений. Здесь % заменяет собой результат предыдущего вычисления.

Simplify[%]
x99 + y99

Во многих видах вычислений система Mathematica является мировым рекордсменом по скорости.

В качестве примера здесь приведено одно вычисление из теории чисел; при больших значениях аргумента это вычисление было впервые выполнено в системе Mathematica всего за несколько минут.

PartitionsP[8000]
 783602643515683494905931450133645997190107693529858\ 6433111860020941782776452445099\
0388402844164

 

 

3. Использование различных алгоритмов в системе Mathematica

Использование различных алгоритмов в системе Mathematica

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]
[Graphics:accgr13.gif]

Вычисление ядра матрицы.

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- 

 

 

4. Математическая эрудиция системы Mathematica

Математическая эрудиция системы Mathematica

Система Mathematica объединяет в себе запас мировых математических знаний, накопленных в справочной литературе, и использует свои собственные революционные алгоритмы, чтобы развивать эти знания.

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

LegendreQ[3, x]

Система Mathematica может вычислять значения специальных функций с любыми параметрами и с любой точностью.

N[MathieuC[1+I,2 I,3],40]
 3.92513113741251986434976461681583792036+1. 898823911543347241105274797143911577679 I

Система Mathematica способна взять значительно больше интегралов, чем когда-либо было возможно для людей или компьютеров.

[Graphics:kngr6.gif]

 

[Graphics:kngr8.gif]

 

[Graphics:kngr10.gif]

Система Mathematica может вычислять также конечные и бесконечные суммы и произведения.

[Graphics:kngr12.gif]

Большое количество подобных примеров содержится в демонстрационном документе Интегралы, суммы и произведения из раздела  Демонстрация возможностей системы  Mathematica 3.0.

Mathematica может решать широкий класс обыкновенных дифференциальных уравнений и уравнений в частных производных.

DSolve[y''[x]+y'[x]+x y[x]==0, y[x], x]

Встроенные алгоритмы системы Математика способны справиться с широким спектром  математических задач.

[Graphics:kngr17.gif]

 

[Graphics:kngr19.gif]
True

 

TrigReduce[Cos[x]4]

Нахождение миллиардного простого числа при совместном использовании встроенных таблиц и алгоритмов.

Prime[109]
22801763489

 

 

5. Конструирование вычислений

Конструирование вычислений

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

Вычисление собственных чисел матрицы.

Eigenvalues[{{3, 1}, {2, 6}}]
[Graphics:bugr3.gif]

Система  Mathematica способна  вычислять собственные значения даже тогда, когда элементы матрицы являются символьными параметрами. В результате получается компактное представление собственных чисел для любого значения b.

v = Eigenvalues[{{3, 1}, {2, b}}]
[Graphics:bugr5.gif]

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

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

Plot[Evaluate[v], {b, -10, 10}]
-Graphics- 

Вы можете найти значение b, при котором первое собственное значение равно нулю...

Solve[First[v] == 0, b]
[Graphics:bugr10.gif]

или найти интеграл от 0 до с от функции, задающей первое собственное значение.

[Graphics:bugr11.gif]
[Graphics:bugr12.gif]

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

Series[%, {c, 0, 5}]
[Graphics:bugr14.gif]

Численное нахождение корня уравнения на заданном отрезке.

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:bugr25.gif]
-Graphics- 

 

6. Обработка внешних данных

Обработка внешних данных

Система Mathematica позволяет импортировать данные в любом формате и манипулировать ими, используя разнообразные мощные встроенные функции.

Чтение данных из файла image.dat. Точка с запятой после команды запрещает системе Mathematica выводить данные на экран.

data=ReadList["image.dat",Number,RecordLists->True];

Визуализация данных в виде  графика плотности.

ListDensityPlot[data,Mesh->False, FrameTicks->None];
wpe56.jpg (7719 bytes)

Вы можете применять к данным любую функцию системы Mathematica.

ListDensityPlot[Exp[Sqrt[data]],Mesh->False, FrameTicks->None,ColorFunction->Hue];
wpe57.jpg (18825 bytes)

Здесь осуществлен последовательный сдвиг данных вправо.

ListDensityPlot[MapIndexed[RotateRight,data], Mesh->False,FrameTicks->None,
ColorFunction->Hue];
wpe58.jpg (20209 bytes)

Представление данных в виде контурного графика.

ListContourPlot[data,ContourShading->False, Contours->6,FrameTicks->None];
wpe59.jpg (23662 bytes)

График плотности данных с сохранивших только несколько Фурье-компонент.

ListDensityPlot[Re[InverseFourier[ MapIndexed[If[Max[#2]<60,#,0]&,Fourier[data],{2}]]], Mesh->False,FrameTicks->None];

wpe5A.jpg (9621 bytes)

Распределение градаций серого в данных.

ListPlot[Sort[Flatten[data]]];
wpe5B.jpg (4951 bytes)

Представление данных в виде трехмерного графика.

ListPlot3D[data,ColorFunction->Hue,Mesh->False, ViewPoint->{0.2,-2,5}];

wpe5C.jpg (19014 bytes)

Mathematica может оперировать не только с числами, но и с данными любого типа.

Считывание всех элементов словаря.

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]];
wpe5D.jpg (4246 bytes)

 

 

7. Визуализация в системе Mathematica

Визуализация в системе Mathematica

Mathematica позволяет легко создавать изумительные мультимедийные эффекты.

Трехмерный параметрический график с автоматическим выбором большинства опций.

[Graphics:visgr1.gif]
-Graphics3D- 

Тот же график с заданием ряда специфических опций.

[Graphics:visgr5.gif]
-Graphics3D- 

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

Эта команда генерирует длинный список графических примитивов, изображающих точку.

[Graphics:visgr8.gif]

Здесь из списка выбирается пять элементов.

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 -

Mathematica позволяет создавать не только статичную, но и анимированную графику.

Чтобы увидеть анимацию, щелкните мышью по графику.

[Graphics:visgr20.gif]

Это еще один пример анимации.

[Graphics:visgr21.gif]

Mathematica также дает Вам возможность генерировать звук.

Эта  команда производит звук с заданной формой волны.

[Graphics:visgr22.gif]
-Sound-

Система Mathematica сделала возможным создание многих новых видов научных, технических и художественных изображений.

 

8. Рабочие документы(notebook) системы Mathematica

Рабочие документы (notebook) системы Mathematica

Каждый рабочий документ системы Mathematica является полностью интерактивным и объединяет текст, таблицы, графику, математическую символику  и другие элементы.

  • Документы типа notebook автоматически организованны в виде иерархии ячеек.
  • Вы можете сворачивать группы ячеек, оставляя на виду только их заголовки.
  • Вы можете использовать гиперссылки как для переходов внутри документа, так и для связи с другими документами.
  • Каждой ячейке может быть приписан свой стиль из встроенной коллекции стилей.
  • Документы остаются неизменными при выводе как на экран, так и на принтер, так как система Mathematica в каждом случае автоматически подбирает шрифты и компоновку документа.
  • Система Mathematica содержит сотни управляющих параметров, которые позволяют Вам придавать документам типа notebook  любой вид и создавать документы типографского качества.

Это обычный текст. Он может быть набран любым шрифтом и иметь любую форму, размер, цвет и т.д. Вы можете также вставлять в текст специальные символы типа wpe5.jpg (752 bytes) , а  также  формулы [Graphics:nbgr1.gif].

Система Mathematica упрощает создание таблиц и массивов.

[Graphics:nbgr2.gif]

Mathematica позволяет легко выравнивать и позиционировать текст.


Подобно другим объектам в системе Mathematica ячейки в документе типа notebook и весь документ в целом в конечном счете - набор команд языка системы Mathematica. Используя стандартный интерфейс системы, Вы можете при помощи команды  Show Expression увидеть внутреннее представление любой ячейки документа.

Язык системы Mathematica может применяться, чтобы точно определить все параметры документа.

Пример типичной ячейки в документе системы Mathematica.

Это пример ячейки в документе notebook.

Это внутреннее представление ячейки.

Cell["Это пример ячейки в документе notebook.", "Text",   CellFrame->True,   FontWeight->"Bold",   FontSlant->"Italic",   Background->RGBColor[0, 1, 1],   CellTags->"T.8"]

Построение документа типа notebook в системе Mathematica может быть выполнено как в интерактивном режиме при помощи интерфейса, так и путем отдания явных команд.

Эта команда, создающая три ячейки в стиле заголовка подраздела.

Do[StylePrint[StringJoin["Заголовок", ToString[i]], "Subsubsection"],{i,3}] 

Заголовок 1
Заголовок 2
Заголовок 3

 

9. Палитры и кнопки

Палитры и кнопки реализуют простой и полностью настраиваемый "мышиный" (point-and-click) интерфейс системы Mathematica.

Mathematica поставляется с несколькими стандартными палитрами.

Это часть палитры [Graphics:Images/index_gr_1.gif]

[Graphics:Images/index_gr_2.gif]
[Graphics:Images/index_gr_3.gif]
[Graphics:Images/index_gr_4.gif]
[Graphics:Images/index_gr_5.gif]
[Graphics:Images/index_gr_6.gif]
[Graphics:Images/index_gr_7.gif]
[Graphics:Images/index_gr_8.gif]
[Graphics:Images/index_gr_9.gif]
[Graphics:Images/index_gr_10.gif]
[Graphics:Images/index_gr_11.gif]
[Graphics:Images/index_gr_12.gif]
[Graphics:Images/index_gr_13.gif]
[Graphics:Images/index_gr_14.gif]

Палитры являются расширением Вашей клавиатуры.

Если в такой палитре нажать кнопку [Graphics:Images/index_gr_15.gif], то символ [Graphics:Images/index_gr_16.gif] вставится в ноутбук.

[Graphics:Images/index_gr_17.gif] [Graphics:Images/index_gr_18.gif] [Graphics:Images/index_gr_19.gif]
[Graphics:Images/index_gr_20.gif] [Graphics:Images/index_gr_21.gif] [Graphics:Images/index_gr_22.gif]
[Graphics:Images/index_gr_23.gif]
[Graphics:Images/index_gr_24.gif]

В палитре символ  [Graphics:Images/index_gr_25.gif] означает позицию, в которую нужно вставить какое-либо выражение.

[Graphics:Images/index_gr_26.gif]   [Graphics:Images/index_gr_27.gif]
[Graphics:Images/index_gr_28.gif]   [Graphics:Images/index_gr_29.gif]

Нажатие кнопки вносит выделенное выражение под знак радикала.

[Graphics:Images/index_gr_30.gif]
[Graphics:Images/index_gr_31.gif]

Создать свою собственную палитру очень легко.

С помощью команды Create Table/Matrix/Palette в меню Input можно сделать свою палитру.

[Graphics:Images/index_gr_32.gif] [Graphics:Images/index_gr_33.gif]
[Graphics:Images/index_gr_34.gif] [Graphics:Images/index_gr_35.gif]
[Graphics:Images/index_gr_36.gif] [Graphics:Images/index_gr_37.gif]

Можно создавать свои палитры для ввода любой функции или оператора

[Graphics:Images/index_gr_38.gif]
[Graphics:Images/index_gr_39.gif]
[Graphics:Images/index_gr_40.gif]

При нажатии этой кнопки выделенное выражение разлагается на множители.

[Graphics:Images/index_gr_41.gif]
[Graphics:Images/index_gr_42.gif]

10. Математическая система обозначений

Математическая система обозначений

Документы системы Mathematica типа notebook полностью поддерживают стандартную математическую систему обозначений как для ввода выражений, так и для вывода результатов.

Mathematica объединяет компактность математической системы обозначений с точностью машинного языка.

Ввод интеграла с использованием только обычных символов  клавиатуры.

Integrate[Log[1+x]/Sqrt[x],x]

Тот же самый интеграл, введенный в естественной форме. Ввод в такой форме осуществляется с помощью палитр или непосредственно с клавиатуры.

[Graphics:ntgr4.gif]

Mathematica всегда позволяет Вам отредактировать полученный результат и использовать его снова  как исходное выражение.

[Graphics:ntgr7.gif]

Система Mathematica может выводить результат в традиционном для математической литературе виде. Следует учесть, что запись в стандартной форме (StandardForm) абсолютно точна и однозначна, в то время как традиционная форма требует некоторой эвристики для интерпретации.

Вычисление интеграла и вывод результата в традиционной форме (TraditionalForm).

[Graphics:ntgr9.gif]

Mathematica способна создавать высококачественные формулы любой сложности и величины.

[Graphics:ntgr11.gif]

Большое количество математических формул, созданных в системе Mathematica, содержится в Галерее формул из раздела Демонстрация возможностей системы Mathematica 3.0.

Система Mathematica легко работает с абстрактной системой обозначений.

[Graphics:ntgr14.gif]

Система Mathematica поддерживает свыше 700 специальных символов посредством своих новых шрифтов, оптимизированных как для печати, так и для вывода на дисплей.

 

11. Mathematica и Ваша Вычислительная среда


 Mathematica и Ваша вычислительная среда

Mathematica работает на всех основных типах компьютерных систем и позволяет Вам обмениваться данными во многих стандартных форматах.

Стандартная система Mathematica состоит из двух частей:

wpeB2.jpg (899 bytes)     Ядро, которое фактически выполняет все вычисления.

wpeB3.jpg (924 bytes)     Интерфейс, который обеспечивает взаимодействие пользователя и системы.

Документы типа notebook системы Mathematica полностью совместимы  со всеми   компьютерными системами.

wpeB4.jpg (26019 bytes)

Работая с одним документом  notebook, Вы можете запускать несколько копий ядра системы Mathematica, причем как на локальном, так и на удаленных компьютерах.

Документы типа notebook системы Mathematica  позволяют импортировать и экспортировать данные во многих форматах.

Вы можете экспортировать графику и формулы в другие программам в форматах EPS, GIF  и т.д., а затем манипулировать с ними.

Документы notebook системы Mathematica могут целиком экспортироваться в форматы HTML, TEX и RTF.

wpeB6.jpg (16859 bytes)

 

Документы типа notebook являются чисто текстовыми и полностью переносимы.

Выбор пункта Show Expression в меню Format позволяет увидеть текстовую форму выражений документа.

Это  типичная ячейка в документе типа notebook

[Graphics:engr1.gif]

А это - то, что Вы получите, когда   копируете интеграл во внешнее текстовое приложение типа программы работы с электронной почтой.

\!\(\[Integral]\(Log[1 + \[Xi]]\/\@\[Xi]\)\ [DifferentialD]\[Xi]\)

Mathematica использует стандарт Unicode, чтобы обеспечить переносимость наборов интернациональных символов.

wpeB7.jpg (17134 bytes)

 

Система Mathematica имеет свои, независимые от операционной системы, функции для управления файлами.

Вывод списка всех файлов типа notebook в Вашем корневом каталоге.

files=FileNames["*.nb", $HomeDirectory]

 

 

12. Объединяющая идея системы Mathematica

Объединяющая идея системы Mathematica

Mathematica построена на постулировании того, что все объекты могут быть представлены как символические выражения.

Все символьные выражения записываются в единой форме head[arg1, arg2, ...].

Список элементов.

{a,b,c}
List[a,b,c]

Алгебраическое выражение.

[Graphics:idgr5.gif]
Plus[Power[x,2],Sqrt[x]]

Уравнение.

x==Sin[x]
Equal[x,Sin[x]]

Логическое выражение.

p&&!q
And[p,Not[q]]

Команда.

[Graphics:idgr11.gif]
AddTo[Part[m,1],a]

Графика.

wpe3.jpg (1645 bytes)
Graphics[{Circle[{1,0},2],Circle[{-1,0},2]}]

Абстрактная математическая запись.

[Graphics:idgr14.gif]
Tilde[CirclePlus[a,b], Subscript[c,Infinity]]

Кнопка.

[Graphics:idgr16.gif]
 ButtonBox["Press here"]

Ячейка в документе системы Mathematica, содержащая текст.

A cell containing text
Cell["A cell containing text","Text"]

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

Химическая формула.

HNO3
Chemical[{Hydrogen,1},{Nitrogen,1},{Oxygen,3}]

Электрическая цепь.

wpe5.jpg (2391 bytes)
Circuit[{Resistor["R"],Capacitor["C"]}]

Все операции в системе Mathematica в конечном счете - преобразования символических выражений. Mathematica имеет уникальную возможность работы с шаблонами при проведении преобразований.

Команда  /. служит сигналом системе 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}

Mathematica использует шаблоны, чтобы обобщить понятие функции.

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

[Graphics:idgr28.gif]

Изменение общего определения функции при фиксированном значении аргумента.

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.

[Graphics:idgr37.gif]
area[Circle[{2,3},u]]

Осуществление преобразования  логического правила.

reduce[p_ && q_ || p_]:=p

 

 

13. Mathematica как язык программирования

Mathematica как язык программирования

Mathematica - исключительно гибкий и интуитивно понятный язык программирования.

Система Mathematica включает в себя прогрессивные методы программирования современной информатики и вводит свои собственные новые концепции.

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]
[Graphics:prgr19.gif]

Программирование, ориентированное на работу с правилами.

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]

Программирование, ориентированное на работу со строчными переменными.

[Graphics:prgr33.gif]

Смешанные методы программирования.

Наиболее мощные операторы системы Mathematica объединяют в себе различные методы программирования.

Position[{1,2,3,4,5}/2,_Integer]
{{2},{4}}

 

MapIndexed[Power,{a,b,c,d}]
{{a}, {b2}, {c3}, {d4}}

 

[Graphics:prgr39.gif]
{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}}}

Гибкость системы Mathematica дает Вам возможность записать одну и ту же программу различными способами.

Дюжина способов определить факториал.

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]

 

 

14. Написание программ в системе Mathematica

Написание программ в системе Mathematica

Язык программирования высокого уровня системы Mathematica позволяет Вам писать сложные программы быстрее, чем когда-либо прежде.

Даже  состоящая всего из одной строки программа системы Mathematica  может выполнять сложные операции.

Эта программа моделирует одномерное случайное блуждание.

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]]]];

Богатство языка программирования системы Mathematica делает простой реализацию сложнейших алгоритмов.

Это программа для моделирования одного шага эволюции клеточной системы.

 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 зачастую являются прямой трансляцией теоретических положений справочной литературы.

Здесь вводятся необходимые определения для расчета импеданса электрической цепи.

[Graphics:wrgr16.gif]

Использование данных выше определений.

[Graphics:wrgr21.gif]

Пример электрической схемы, заданной при помощи символической спецификации.

wpe68.jpg (2543 bytes)

Программы в системе Mathematica предоставляют беспрецедентно ясные способы записи алгоритма.

Обе эти программы аппроксимируют Золотое Сечение с точностью до k знаков.

[Graphics:wrgr23.gif]
{1.6180339887498948482,1.6180339887498948482, 1.6180339887498948482}

В программах системы Mathematica возможно уникальное соединение математической и вычислительной систем обозначений.

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

[Graphics:wrgr27.gif]

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

[Graphics:wrgr30.gif]
{168, 168}

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

Это программа, отвечающая модели Kohmoto для спектра энергии квантовой частицы в одномерном квазипериодическом потенциале.

FareySequence[q_]:=Apply[Union,Array[Range[#-1]/#&,q]]

Пример работы программы.

Show[Graphics[SpectrumData /@ FareySequence[20]]]
-Graphics-

 

15. Mathematica как составляющая Вашего программного обеспечения

Mathematica как составляющая Вашего программного обеспечения

Система Mathematica имеет модульную архитектуру, которая легко позволяет использовать ее как мощную составную часть программного обеспечения.

Пример ввода/вывода в стандартном интерфейсе системы Mathematica.

wpe1D.jpg (1271 bytes)

Вы можете также обращаться к ядру системы Mathematica непосредственно с текстового терминала.

Integrate[Sqrt[Log[x]], x]

  1

-(-) Sqrt[Pi] Erfi[Sqrt[Log[x]]] + x Sqrt[Log[x]]

  2  

Протокол MathLink обеспечивает связь между системой Mathematica и внешними программами.

Это код языка 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];

Вы можете использовать MathLink, чтобы обращаться к ядру системы Mathematica из самых различных программ.

Microsoft Word в качестве интерфейса системы Mathematica.

wpe3D.jpg (17264 bytes)

Web-страница, устанавливающая связь с системой Mathematica.

wpe3E.jpg (22098 bytes)

Microsoft Excel, связанный с системой Mathematica.

wpe3F.jpg (14966 bytes)

MathLink может также использоваться для обращения к другим программам изнутри ядра системы 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 трехмерного графика.

[Graphics:softgr10.gif]

Это изображение было получено с использованием возможностей внешнего графического редактора, в который оно было передано из системы Mathematica через протокол MathLink.


wpe40.jpg (25034 bytes)

 

Вы можете использовать MathLink, чтобы управлять интерфейсом системы Mathematica из ее ядра.

Эта команда сообщает интерфейсу системы, что надо открыть окно, содержащее палитру цветов.

FrontEndTokenExecute["ColorSelectorDialog"]

Можно использовать MathLink, чтобы обеспечить связь между несколькими экземплярами ядра системы Mathematica вне зависимости от того, находятся ли они все на локальном или на удаленных компьютерах.

На большинстве компьютерных систем (обычно исключение составляет 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];

 

 

16. Система Mathematica в мире

Система Mathematica в мире

Сегодня система Mathematica - это более миллиона пользователей во всем мире и большое количество различных дополнительных продуктов и услуг.

Системе Mathematica посвящены сотни книг на более чем десяти языках.

wpe2.jpg (10574 bytes)

Существуют специальные периодические издания, посвященные системе Mathematica.

wpe3.jpg (12090 bytes)

Имеется растущая библиотека профессиональных прикладных программ, базирующихся на системе Mathematica.

wpe5.jpg (18242 bytes)

Сотни учебных курсов были разработаны с использованием системы Mathematica.

wpe6.jpg (16132 bytes)

 

Wolfram Research's MathSource - колоссальный  архив материалов, относящихся к системе Mathematica.

wpe7.jpg (19956 bytes)

При разработке и эксплуатации самых разнообразных изделий используется система Mathematica.

wpe8.jpg (20280 bytes)

 

Web-представительство http://www.wolfram.com/ разработчика системы Mathematica компании Wolfram Research Inc. содержит тысячи страниц материала и постоянно обновляется.

wpe9.jpg (30031 bytes)

 

 

Работа с системой MathCAD 7.0 Pro

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 Основы работы с системой 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 проще для любого пользователя, ведь именно эта версия содержит наиболее мощный справочно-информационный раздел и широчайшие возможности не медленного применения

21.jpg

Рис. 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

22.jpg

Рис.1.3 Окно системы MathCAD PLUS 7.0

23.jpg

Как известно, 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 с очищенным окном редактирования

24.jpg

Рис. 1.5 Экран системы MathCAD с загруженным документом

25.jpg

Рис.1.6 Экран системы MathCAD со всеми закрытыми окнами документов

26.jpg

Позже будет описано, как модифицируется интерфейс системы. А пока стоит обратить внимание на некоторые типовые примеры вычислений в среде системы 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 Назначение кнопок панели с математическими знаками

27.jpg

Рис.1.8 Панели математических символов и операторов системы MathCAD 7.0 PRO

28.jpg

Используя общую наборную панель, можно вывести или все панели сра зу, или только те, что нужны для работы Для установки с их помощью необходимого шаблона (объекта) достаточно поместить курсор в желаемое место окна редактирования (красный крестик на цветном дисплее) и затем активизировать пиктограмму нужного шаблона, установив на него курсор мыши и нажав ее левую клавишу

Применение панелей для выбора шаблонов математических знаков очень удобно, поскольку не надо запоминать разнообразные сочетания клавиш, используемые для ввода специальных математических символов. Впрочем, и эта возможность сохранена, так что привыкшие к работе с клавиатурой пользователи, имевшие дело с более ранними версиями системы MathCAD (в том числе и под MS-DOS), могут воспользоваться навыками виртуозного набора формул и после перехода на новую версию системы.

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

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

Панель инструментов

Третью строку окна системы занимает панель инструментов (Toolbox). Она содержит несколько групп кнопок управления с пиктограммами, каждая из которых дублирует одну из важнейших операций главного меню. Глядя на эти пиктограммы (см. рис. 1.4), можно легко уяснить их функции. Стоит только остановить курсор мыши на любой из этих пиктограмм, как в желтом окошечке появится текст, объясняющий функции пиктограммы. На рис. 1.9 представлены названия кнопок панели инструментов и их краткое назначение.

Надо отметить, что панель инструментов тоже можно мышью превратить в наборную панель и поместить в любое место экрана. Ее можно закрыть с помощью кнопки с жирным минусом. Так интерфейс системы модифицируется, и пользователь может подстроить его под свой вкус. Рассмотрим действие кнопок быстрого управления системой (номера их соответствуют приведенным на рис. 1.9).

Рис.1.9 Назначение кнопок панели инструментов

29.jpg

Кнопки операций с файлами

Документы системы 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 Назначение объектов панели форматирования

210.jpg

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

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

Указанные объекты интерфейса можно перемещать по экрану с помощью мыши. Например, можно поместить строку форматирования рядом с пиктограммами наборных панелей, вынести в любое место экрана панель инструментов и т. д. Таким образом, интерфейс несложно подстраивать под запросы пользователя.

Изложение всех возможностей управления системой 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 Задание шаблона определенного интеграла и начало его заполнения

211.jpg

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

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

Для ввода подынтегральной функции в приведенном примере требуется совершить следующие действия:

• установив курсор мыши в стороне от места ввода, вывести панель набора арифметических операторов;

• подвести курсор мыши под шаблон ввода функции и щелкнуть левой клавишей для фиксации начала ввода;

• активизировать (мышью) кнопку со знаком квадратного корня на палитре математических символов;

• провести ввод выражения под знаком квадратного корня (при этом возможно редактирование данных с помощью стандартных операций редактирования).

Затем таким же способом надо заполнить остальные шаблоны, т. е. ввести

пределы интегрирования и имя переменной, по которой производится интег-

Рис.1.12 Продолжение заполнения шаблона интеграла

212.jpg

рирование. Установив знак равенства после полученного выражения, можно сразу увидеть результаг вычисления интеграла (см. рис. 1.13). На этом рисунке показаны примеры вычисления и других выражений (суммы, произведения и предела функции) с набором их с помощью палитр. Там же даны и примеры задания текстовых комментариев.

Рис. 1.13 Пример ввода и вычисления определенного интеграла и других выражений

213.jpg

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

При задании сложных вычислений работа системы может быть долгой. Чтобы прервать ее, можно нажать клавишу Esc. MathCAD выведет надпись о прерывании вычислений и небольшое окно с двумя командами: OK — подтвердить прерывание и Cancel (Отмена) — отменить прерывание. После прерывания можно возобновить работу, нажав клавишу F9 или сделав активной пиктограмму с изображением жирного знака равенства.

Текстовый редактор

Текстовый редактор позволяет задавать текстовые комментарии. Они делают документ с формулами и графиками более понятным. В простейшем случае для открытия текстового редактора достаточно ввести символ " (одиночная кавычка). В появившийся прямоугольник можно начать вводить текст. В текстовом блоке визир имеет вид красной вертикальной черточки и отмечает место ввода. Текст редактируется общепринятыми средствами: перемещением места ввода клавишами управления курсором, установкой режимов вставки и замещения символов (клавиша Insert), стиранием (клавиши Del и Backspace), выделением, копированием в буфер обмена, вставкой из буфера и т. д.

Выделение и редактирование объектов

При редактировании математических выражений важной возможностью является выделение их целиком или в виде отдельных фрагментов. По существу это означает замену одномерного маркера в виде синей вертикальной черты на двумерный в виде выделяющего часть выражения синего уголка (см. рис. 1.12, на котором этот маркер выделяет введенное выражение).

В версии MathCAD 7.0 выделение с помощью мыши заметно улучшено и практически не отличается от хорошо известного выделения текстовых выражений. Напомним, что для этого достаточно установить текстовый курсор мыши на начало выделяемого фрагмента, нажать левую клавишу мыши и, удерживая ее, двигать маркер к концу выделяемого фрагмента. Выделенный текст помещается на темном фоне (см. на рис. 1.14 выделенное слово "Сразу" в правом нижнем углу экрана).

Выделение надписей обычно производится с целью изменения стиля, размера и типа шрифтов. Для этого достаточно выделить надпись и сменить шрифт или его параметр (рис. 1.14).

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

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

Рис.1.14 Примеры выделения и редактирования надписей и организации гиперссылки

214.jpg

Следует отметить, что изменение параметров и типов шрифтов для определенных объектов (например, переменных или констант) действует глобально. Так, если увеличить размеры обозначения какой-либо переменной, то все обозначения других переменных тоже будут увеличены.

Создание гиперссылок

Выделение используется также для копирования в буфер обмена и организации гиперссылки. Гиперссылка в 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 Диалоговое окно поиска файла документа

215.jpg

Диалоговое окно поиска файлов — типичное для 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 Документ с выделенными блоками

216.jpg

выделенных объектов. Он ведет себя как единое целое: его можно перемещать мышью, копировать в буфер обмена и стирать.

Копирование и вставка блоков в буфер обмена

Используя кнопки быстрого задания команд вырезки (Cut, F3 или Ctrl+X) и вставки (Copy, F4 или Ctrl+V), можно перенести выделенные блоки в буфер обмена и поместить их на новое место, указанное курсором мыши. Это дает возможность быстрого наведения порядка с блоками. Рис. 1.17 показывает вид документа после нажатия клавиши F3. Нетрудно заметить, что в данном случае все выделенные блоки исчезли — поступили в буфер обмена.

Рис. 1.17 Вид документа, показанного на

рис. 1.13, после нажатия

клавиши F3

217.jpg

Вставка блоков из буфера обмена в документ

Если нажать кнопку Paste или клавишу F4 (не меняя положения курсора мыши), исчезнувшие блоки вновь появятся на своем месте и вид документа будет подобен показанному ранее на рис. 1.13. Зацепив курсором мыши любой из выделенных блоков и нажав ее левую клавишу, можно (удерживая эту клавишу) перетаскивать блоки с одного места на другое.

Расположение блоков в документе

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

Доступная область окна редактирования по горизонтали превышает видимую на экране. При этом область окна делится длинной вертикальной линией на две части, левую и правую Горизонтальными линиями документ делится на страницы

Можно разместить некоторые вспомогательные вычисления в правой, невидимой, части окна, а в левую, видимую, вынести задание исходных данных и вывод результатов расчетов Этот прием часто используется в пакетах с примерами применения системы, а также в учебно-демонстрационных программах На рис 118 показан пример подобного решения довольно сложной аэродинамической задачи по построению профиля крыла самолета и линий обтекания его воздушным потоком

Рис.1.18 Пример решения аэродинамической задачи (видимая часть решения)

218.jpg

Использование линеек прокрутки

Полосы прокрутки расположены снизу и справа в окне редактирования документа С их помощью можно перемещать окно просмотра документа по горизонтали и по вертикали Плавно это делается с помощью концевых кнопок прокрутки Можно также задать перемещение окна просмотра с помощью передвигаемого ползунка или установкой курсора мыши на полосу. Во всех случаях перемещение задается при нажатии и удержании левой клавиши мыши.

Если, воспользовавшись полосами прокрутки, вывести в текущее окно обычно невидимую часть документа, на экране дисплея появится расчетная часть задачи (рис 1 19). Она содержит довольно специфические вычисления над данными с применением аппарата вычислений в комплексной форме, поэтому нет смысла объяснять их

Создание документов с невидимой расчетной частью осложняется необходимостью выполнения блоков в строго заданном порядке. Так, при сложных расчетах их результаты могут оказаться намного ниже видимого текста документа. Заглядывая вперед, скажем о двух приемах, облегчающих решение этой задачи. Первый — использование оператора глобального присваивания (знак в виде трех горизонтальных черточек =) В этом случае присваивание может находиться в любой точке документа (например, в его начале или в самом конце) Второй прием — расположение блоков по вертикали так, чтобы исполняемые в первую очередь блоки были чуть выше тех, которые будут исполняться позже

Рис. 1.19 Вычисления в правой части документа, представленного на рис. 1.18

219.jpg

Другой любопытный и полезный прием был использован в прежних версиях системы под 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 недоступны.

Меню управления окном активного документа

Каждое окно активного в данный момент документа также имеет подобное меню, инициализируемое кнопкой в левом верхнем углу раскрытого окна. Это меню имеет ранее указанные позиции и еще одну дополнительную:

220.jpg

Рис. 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").

21.jpg

Изображение: 

22.jpg

Изображение: 

23.jpg

Изображение: 

24.jpg

Изображение: 

25.jpg

Изображение: 

26.jpg

Изображение: 

27.jpg

Изображение: 

28.jpg

Изображение: 

29.jpg

Изображение: 

210.jpg

Изображение: 

211.jpg

Изображение: 

212.jpg

Изображение: 

213.jpg

Изображение: 

214.jpg

Изображение: 

215.jpg

Изображение: 

216.jpg

Изображение: 

217.jpg

Изображение: 

218.jpg

Изображение: 

219.jpg

Изображение: 

220.jpg

Изображение: 

Глава 2 Работа с файлами

Глава 2 Работа с файлами

2.1. Позиция главного меню File

Позиция File (Файл) главного меню служит для работы с файлами документов Файлом называют имеющую имя упорядоченную совокупность данных или кодов программ, размещенную на том или ином носителе, обычно на жестком или гибком диске либо CD-ROM Как уже отмечалось, файлы документов в MathCAD имеют расширение mcd, которое указывается сразу после имени файла Такие файлы имеют текстовый формат, и их легко прочитагь и модифицировать любым текстовым редактором.

Файлы документов MathCAD содержат полный текст программы, выводящей документ в окно редактирования, с указаниями координат расположения блоков, фактического содержания и характера выполняемых операций, форматов предоставления информации и т д Таким образом, файл является по сути программой, записанной на внутреннем (промежуточном) языке программирования системы Файлы могут содержать и результаты вычислений Предусмотрена возможность записи документов и в особом формате RTF, созданном для хранения сложных многокомпонентных данных (содержащих тексты и 1рафики)

Важно отметить, что даже при записи документов со сложными рисунками используется не запись их BitMap-копии, а именно программы вывода документа Поэтому файлы с расширением mcd невелики по размеру и их легко передавать по современным средствам телекоммуникаций, например по Internet Они требуют небольшого свободного пространства на дисках для записи

Помимо обычных операций работы с файлами (их запись на диск и загрузка с диска) предусмотрены возможности распечатки документов принтерами различного типа Если сделать позицию File (Файл) главного меню активной, появится ниспадающее подменю (см рис 2.1)

Рис. 2.1 Переднее панно системы MathCAD с активной позицией File главного меню

31.jpg

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

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 Окно выбора стиля документа

32.jpg

При этом только стиль Normal (Нормальный) создает пустое окно редактирования Другие стили создают окно с заготовками (шаблонами) докумен тов Эти заготовки пользователь может использовать для своего документа К сожалению, они англоязычные, но в них можно заменить (или дополнить) надписи надписями на русском языке, используя соответствующие наборы шрифтов

На рис 2 3 показана часть документа со стилем Bookone В шуточной форме показано заполнение ее в заданном стиле русскоязычными надписями Можно просмотреть и остальные стили и использовать их для своих целей Оформление документов в определенном стиле является одним из правил подготовки документов высокого полиграфического качества

Рис. 2.3 Часть документа в стиле Bookone

33.jpg

При открытии документа с пустым окном редактирования (в стиле 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

34.jpg

Для вызова одного из ранее использовавшихся документов достаточно указать курсором мыши его имя в списке, размещенном над операцией 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 Диалоговое окно для записи файла с указанием его имени

35.jpg

Имя файла может быть коротким, без указания имени диска и подкаталогов. Тогда файл будет помещен в текущий каталог. Однако можно указать и полное имя файла, например:

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 Диалоговое окно, появляющееся при закрытии окна модифицированного документа

36.jpg

Опыт показал, что иногда при заполнении всех окон вместо команды 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

37.jpg

Если вы подключены к Internet, то в этом окне можно будет задать необходимые для совместной работы параметры. Работа с Math CAD 7.0 PRO в сети Internet рассмотрена в последней главе данной книги.

2.8. Установка входа в сеть (Internet Setup...)

Если ПК, на котором установлена система MathCAD, подключен к модемной сети, то с помощью команды Internet Setup... можно подключиться к Internet. Эта команда выводит довольно простое диалоговое окно, которое показано на рис. 2.8.

Рис. 2.8 Окно подключения к Internet

38.jpg

В этом окне надо установить имя пользователя (по умолчанию оно задается таким, каким было указано при регистрации системы), адрес для связи (по умолчанию задан сервер фирмы MathSoft) и адрес электронной почты. Кроме того, следует определить данные серверов, ресурсов Internet. Описание этих процедур выходит за рамки нашей книги, поскольку сильно зависит от конкретных условий подключения к Internet и к математическим способностям MathCAD прямого отношения не имеет.

2.9. Отправка документов по электронной почте (Send...)

С помощью команды Send... документы можно отправить и по электронной почте. Для этого следует выполнить ряд простых операций с применением так называемых Мастеров операционной системы Windows 95. Мастерами

Рис. 2.9 Начальное окно Мастера установки модемной сети

39.jpg

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

На рис. 2.9 показано начальное окно Мастера установки связи по электронной почте. Нажимая кнопку Next, можно перейти к следующему шагу установки и т. д.

Дальнейшие действия пользователя зависят от обстоятельств установки сетевого оборудования и инсталляции его программного обеспечения.

2.10. Установка параметров страницы при печати (Page Setup...)

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

Команда Page Setup... (Параметры страницы) служит для установки параметров печатаемых страниц. При ее выполнении появляется диалоговое окно, показанное на рис 2.10 в центре экрана.

Следует отметить, что это окно принадлежит системе Windows. Непосредственно подлежит установке ширина отступа (поля) со всех сторон бумажного листа: Left (левый), Right (правый), Тор (верхний) и Bottom (нижний). Отступы устанавливаются в дюймах. Кнопки Headers... и Footers... позволяют ввести колонтитулы вверху и внизу документа при его печати. Кнопка Cancel (Отмена) отменяет эту операцию, а ОК фиксирует ее данные.

Рис. 2.10 Диалоговое окно установки параметров печатаемой страницы

310.jpg

2.11. Предварительный просмотр страниц печати (Print Preview...)

Даже одна страница большого документа не видна полностью на экране дисплея. Поэтому перед печатью полезно просмотреть расположение элементов документа на странице. Для этого служит команда Print Preview... (Просмотр), которая выводит контрольное окно с изображением будущей напечатанной страницы (см. рис. 2.11). Такая весьма полезная команда появилась в системах MathCAD начиная с версии 5.0.

Рис. 2.11 Предварительный просмотр страницы перед печатью

311.jpg

Вверху окна видны кнопки управления просмотром страницы. Они становятся активными только в том случае, если просматривается объемный документ, не помещающийся на одной стандартной странице (формат А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 Окна печати и установки параметров принтера

312.jpg

можно указать диапазон страниц печати, число копий и разрешение принтера В целом диалог с компьютером при осуществлении этой операции прост и нагляден

Вид исходного документа при печати, как правило, сохраняется Естест венно, если он многостраничный, то печатаются отдельные страницы (они разделены характерной пунктирной линией) Современные принтеры (особенно лазерные и струйные) имеют более высокое разрешение при печати, чем разрешение дисплея Поэтому качество отпечатанного документа у них выше, чем видимое на экране

Документы MathCAD могут иметь двойную ширину и большую длину Тогда вначале печатаются все страницы левой половины широкого документа, а затем уже страницы правой половины, даже если они пустые (разумеется, при этом принтер вытолкнет пустой лист) Склеив страницы, вы получите полную распечатку документа

Прежние версии MathCAD, нелегально поставляемые на CD-ROM, в буквальном смысле наказывали пользователей таких версий отказом от печа ти документов в среде Windows 95 Новая версия этим пакостным свойством уже не обладает' проблем с печатью у новой версии уже не зафиксировано

2.13. Выход из системы (Exit)

Операция Exit [Alt+F4] (Выход) используется для окончания работы с системой. Перед этой операцией необходимо побеспокоиться, чтобы все загруженные ранее документы, подвергавшиеся редактированию и модификации, были сохранены на диске с помощью команды Save As... (Сохранить как) или Save (Сохранить) Тогда при использовании операции Exit можно на блюдать последовательное исчезновение окон документов Если пользователь забыл записать какой-либо документ на диск, система сообщит об этом, выдав запрос. Нужно ответить Y, если документ нужно сохранить, и N — если сохранения не требуется.


После выхода из системы MathCAD происходит возврат в среду Windows. Не следует применять эту команду, если вам необходимо временно выйти из системы. Тогда лучше свернуть MathCAD в пиктограмму, активизировав курсором мыши кнопку с жирной горизонтальной чертой в конце титульной строки окна. Можно также воспользоваться переключателем программ Windows, нажимая клавиши Alt и Tab и выбирая программу по названию, появляющемуся в верхней части экрана. Исключением из этого правила является описанный выше прием очистки всех окон с помощью команды выхода из системы. При этом выход из системы и ее повторная загрузка займут меньше времени, чем последовательная очистка всех окон.

31.jpg

Изображение: 

32.jpg

Изображение: 

33.jpg

Изображение: 

34.jpg

Изображение: 

35.jpg

Изображение: 

36.jpg

Изображение: 

37.jpg

Изображение: 

38.jpg

Изображение: 

39.jpg

Изображение: 

310.jpg

Изображение: 

311.jpg

Изображение: 

312.jpg

Изображение: 

Глава 3 Редактирование документов

Глава 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 главного меню

41.jpg

Как видно из рис. 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 Пример выделения объектов, расположенных в разных местах документа

42.jpg

линиями. Если надо выделить объекты поодиночке (рис. 3.2), делайте это с помощью мыши при нажатой и удерживаемой клавише Ctrl или Shift. Подведите курсор мыши к нужному объекту и щелкните левой клавишей — объект будет выделен пунктирным прямоугольником. Далее переходите к выделению другого объекта. Расположение выделяемых объектов и порядок их выделения при этом могут быть любыми.

Группа выделенных объектов ведет себя как единый блок, который можно перетаскивать при нажатой левой клавише мыши, что наглядно демонстрирует рис. 3.3. На нем выделенный на рис. 3.2 блок из трех объектов перенесен на новое место. Для переноса достаточно уцепиться курсором мыши за край выделения любого блока и добиться, чтобы курсор превратился в темное изображение ладони. Это будет означать возможность перемещения блоков. Напоминаем, что если курсор приобретает вид двусторонних стрелок, то это означает возможность растяжения выделенного блока.

Рис. 3.3 Пример перенесения выделенных блоков на новое место

43.jpg

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

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

Команда Cut выполняется также комбинацией клавиш Shift+Del. Щелчок левой клавишей мыши при курсоре, помещенном за пределы выделенных объектов, снимает все выделения.

Рис. 3.4 Пример выделения мышью части математической формулы

44.jpg

3.4. Копирование объекта в буфер обмена (Copy)

Операция Copy [Ctrl+C] (Копировать) аналогична Cut (Вырезать), но с одним существенным отличием выделенный объект (или блок объектов) переносится в буфер обмена, но не уничтожается в окне редактирования. Эта операция обычно используется в том случае, когда нужно перенести заданный объект в несколько документов, оставив при этом оригинал на своем месте, или если объект либо блок объектов нужно повторить в другом месте документа.

Особенно полезна операция Copy при составлении документа из частей других документов (см. рис. 3.5). Если переключиться в другое окно, то скопированная и занесенная в буфер обмена информация может быть помещена в это окно с помощью операции Paste (Вставить), описанной ниже.

Рис. 3.5 Пример переноса выделенной в одном документе части выражения в окно другого документа

45.jpg

Для переноса ряда объектов из одного документа в другой не обязательно использовать буфер обмена. Можно перетаскивать объекты, зацепив их курсором мыши (в форме ладони), прямо из одного окна в другое. Начало такого переноса представлено на рис. 3.6. Этот перенос основан на реализованном в приложениях Windows 95 методе Drag and Drop ("Перетащи и брось"). Он намного облегчает перенос и делает его более наглядным.

Рис. 3.6 Перенос выделенных блоков из окна одного документа в окно другого документа

46.jpg

Если отпустить левую клавишу мыши, то объекты появятся в другом документе и исчезнут в первом (где они были до этого).

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 Демонстрация специальной вставки

47.jpg

Вставка может задаваться значком, причем с помощью дополнительного окна (оно также показано на рис 3 7) можно выбрать из предоставленного набора значков наиболее подходящий Причины появления в диалоговых окнах специальной вставки русскоязычных надписей уже обсуждались Эти окна являются общими для различных приложений и создаются не ими, а русифицированной операционной системой Windows 95

3.7. Уничтожение выделенного объекта (Delete)

Команда Delete [Ctrl+D] (Удалить) служит для уничтожения выделенного объекта (в том числе блока выделенных объектов) При этом в буфер обмена объекты не заносятся. Команда полезна для редактирования документов. В отличие от команды Cut (Вырезать) ее применение не загружает буфер обмена и предотвращает нехватку оперативной памяти. Будьте осторожны с этой операцией — можно легко стереть нужный объект, причем в этом случае его восстановить не удастся (придется создавать заново).

3.8. Выделение всех объектов (Select All)

Операция Select All (Выделить все) выделяет все объекты пунктирными прямоугольниками (см. рис. 3.8). Это позволяет не только отчетливо наблюдать взаимное расположение блоков, но и подмечать степень их перекрытия. Как правило, оно нежелательно.

Рис. 3.8 Пример выделения всех объектов командой Select All

48.jpg

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

3.9. Поиск подстроки (Find...)

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

Операция Find... [Ctrl+F5] (Найти) служит для поиска фрагментов текста или имен переменных в математических выражениях. При ее исполнении появляется окошко Find с запросом искомого фрагмента — подстроки (см. рис. 3.9). Можно вести поиск такого фрагмента по всему документу. При обнаружении указанной подстроки в формульном блоке курсор устанавливается в конец обнаруженной подстроки, после чего можно приступить к ее редактированию. В текстовом блоке найденная подстрока выделяется.

Рис. 3.9 Поиск заданного фрагмента текста (слова "символьном")

49.jpg

Окошко Find имеет две опции-кнопки Previous (Позади) и Next (Впереди). Первая опция задает поиск от текущего положения курсора вверх до первого обнаружения подстроки, вторая позволяет провести поиск подстроки от текущего положения курсора вниз. Если подстрока поиска не обнаружена, появляется окошко Error (Ошибка) с предупреждающей надписью: Stop Not found (He найдено).

3.10. Замена подстроки (Replace...)

Операция Replace... [Shift+F5] (Заменить) служит не только для поиска заданной подстроки (в тексте или математическом выражении), но и для ее замены другой подстрокой. При исполнении этой операции появляется окно с предложениями о вводе подстрок.

Find (Что): Искомая_строка Change to (Чем) Строка замены

Окно содержит также указания на характер замены, по всему документу, однократная замена, игнорирование замены (рис 3 10)

Как и в случае с операцией Find, операцию Replace... можно применять неоднократно К сожалению, в текстах на русском языке иногда могут возникнуть трудности при поиске и замене слов, поскольку система замены создавалась для англоязычных текстов Тем не менее обычно система поиска и замены работает и при русскоязычных надписях.

Рис. 3.10 Замена слова "символьном" на слово "аналитическом" с помощью операции Replace...

410.jpg

3.11. Проверка орфографии (Check Speling...)

Для проверки орфографии в англоязычных текстах служит операция Check Speling... (Контроль орфографии) Она обеспечивает проверку орфографического написания слов путем сравнения их с набором эталонных слов в специальном словаре системы. Процесс проверки иллюстрируется примером на рис 3.11

Рис. 3.11 Пример проверки орфографии

411.jpg

Как видно из приведенного примера, система орфографического контроля не только выявляет слова с ошибками и выделяет их цветом основы, но и предлагает варианты замены (см. рис. 3.12). Это говорит о том, что в данной системе есгь и тезаурус — перечень слов схожего назначения. Если ошибки не обнаружены или исправлены, то появляется окно с сообщением о завершении контроля. Это окно также показано на рис. 3.12.

Рис. 3.12 Конец проверки орфографии

412.jpg

Окно проверки орфографии имеет ряд кнопок:

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...

413.jpg

В этом окне следует указать страницу, к которой надо перейти: First Page (К первой странице), Last Page (К последней странице) или с Number Page (К странице №). Внизу окна отображается номер текущей и заданной для перехода страниц. Кнопка ОК исполняет переход, a Cancel отменяет его.

3.13. Связывание документов (Links...)

Операция Links... (Связи) используется после внедрения объектов с применением операций Insert Object и Paste Special. Она выводит диалоговое окно, показанное на рис. 3.14.

Рис. 3.14 Диалоговое окно операции Links...

414.jpg

С помощью этого окна можно редактировать связи с внедренным объектом, открывать и менять источник объектов и прерывать связь.

3.14. Редактирование внедренных объектов (Object)

С помощью операции Object (она вводится в позиции главного меню Insert) в документ можно вводить объекты из других приложений. На рис. 3.15 показан такой объект в виде формулы, созданной в редакторе формул приложения Microsoft Word 95.

Если внедренный объект выделен (прямоугольником из сплошных линий), то позиция подменю Edit Object (Объект) становится доступной, что и видно на рис. 3.15. При этом она открывает доступ к редактированию объекта с помощью того приложения, которое первоначально создало внедренный в документ объект.

Рис. 3.15 Объект в виде формулы, внедренный в документ

415.jpg

На рис 316 покачана подготовка к редактированию объекта Такой вид принимает окно MathCAD после исполнения команды Заменить

Как видно из рис 3 16, в окне редактирования объекта появляется набор ная панель редактора формул приложения Microsoft Word 95, породившего редактируемую панель Благодаря этому становится возможным полное ре дактирование внедренной формулы, вплоть до ее замены другой

Рис. 3.16 Пример редактирования внедренного объекта

416.jpg

Еще более наглядную картину редактирования дает применение операции "Открыть" Она открывает окно редактора формул, показанное на рис 317, позволяющего с полными удобствами редактировать введенное выражение.

Рис. 3.17 Редактирование внедренного объекта, формулы, с помощью редактора формул

417.jpg

На рис 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 — ввод математического символа бесконечности

Ряд других комбинаций клавиш для ввода математических и логических операторов будет рассмотрен одновременно с их описанием в следующих главах

41.jpg

Изображение: 

42.jpg

Изображение: 

43.jpg

Изображение: 

44.jpg

Изображение: 

45.jpg

Изображение: 

46.jpg

Изображение: 

47.jpg

Изображение: 

48.jpg

Изображение: 

49.jpg

Изображение: 

410.jpg

Изображение: 

411.jpg

Изображение: 

412.jpg

Изображение: 

413.jpg

Изображение: 

414.jpg

Изображение: 

415.jpg

Изображение: 

416.jpg

Изображение: 

417.jpg

Изображение: 

Глава 4 Управление обзором (View)

Глава 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 Вид документа с выделенными областями

51.jpg

Рис. 4.2 Вид документа в увеличенном масштабе (200%)

52.jpg

Таким образом, на деле операция Zoom может не только увеличивать размеры блоков документа, но и уменьшать их Здесь пределы обычно ставит разрешающая способность дисплея При уменьшении масштаба до 50% на экране можно рассмотреть две страницы документа Отметим, что масштаб можно менять и иначе выбором разрешения дисплея Однако для работы с высоким разрешением желательно применять дисплеи с увеличенным размером экрана по диагонали (17, 19 или 21 дюйм)

Рис. 4.3 Вид документа в уменьшенном масштабе (75%)

53.jpg

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 Начало подготовки к построению анимационного графика

54.jpg

Для создания последовательности кадров анимации исполняется команда 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 Просмотр анима-ционных кадров с помощью проигрывателя

55.jpg

При создании анимационных картинок надо отключить все опции автоматического масштабирования графиков и перейти к ручному заданию масштаба Автоматическое изменение масштаба подчас ведет к скачкообразному изменению размеров графика, хотя на деле он должен меняться без скачков, точнее говоря, с дискретностью, определяемой только изменением FRAME = 0, 1,2,3 и т д.

4.6. Вызов проигрывателя (Playback)

Любой видеофайл с расширением avi (не обязательно с описанной выше ани-мационной графикой) может быть просмотрен с помощью проигрывателя, запускаемого опцией Playback (Воспроизвести) в подменю позиции главного меню Animation. При этом проигрыватель появляется на экране (см. рис. 4.6).

Рис. 4.6 Проигрыватель видеофайлов Playback

56.jpg

Проигрыватель управляется всего двумя кнопками. Первая (с пиктограммой треугольника) запускает проигрыватель. Однако для воспроизведения какого-либо видеоклипа его файл должен быть загружен. Для загрузки файлов используется вторая кнопка. Она выводит на экран окно Open AVI для загрузки файлов с расширением.avi. Это окно показано на рис. 4.6 под проигрывателем. Внизу окна проигрывателя расположен указатель текущего времени проигрывания в виде шкалы с бегунком. На рис. 4.7 изображен проигрыватель в процессе просмотра анимационного графика, полученного выше и записанного под именем da1.

Рис. 4.7 Проигрывание ранее записанного анимационного файла

57.jpg

Отметим два аспекта работы со средствами анимации. Первый аспект: в выделенную область анимации можно вводить как целиком графики, так и их части и даже формулы и надписи. Если выделенной области нет, то кнопка Animation неактивна.

Второй аспект более любопытен. Проигрыватель AVI-файлов способен проигрывать файлы, созданные иными мультимедиа-системами, причем со стереофоническим звуковым сопровождением. Рис. 4.8 иллюстрирует такую возможность — на нем показан стоп-кадр из рекламного ролика фирмы Intel.

Проигрыватель обладает типовыми средствами управления: регулировкой размеров изображения громкости и скорости просмотра, диалоговым окном поиска AVI-файлов и т. д. Некоторые из них (например, регулятор громкости) появляются только в том случае, когда они необходимы.

Когда в проигрыватель загружен файл, активизация кнопки управления (вторая из двух) приводит к появлению на экране меню операций управления. Они перечислены ниже. View (Вид) — управление размером окна просмотра;

Volume (Громкость) — управление громкостью (если AVI-файл содержит звук);

58.jpg

Рис. 4.8 Просмотр видеоклипа со звуковым сопровождением

59.jpg

Рис. 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 Вид проигрывателя с окном "Свойства видео'

510.jpg

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

51.jpg

Изображение: 

52.jpg

Изображение: 

53.jpg

Изображение: 

54.jpg

Изображение: 

55.jpg

Изображение: 

56.jpg

Изображение: 

57.jpg

Изображение: 

58.jpg

Изображение: 

59.jpg

Изображение: 

510.jpg

Изображение: 

Глава 5 Работа со вставками

Глава 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® (Декартов — создать шаблон двумерного графика график) в декартовой системе координат,

61.jpg

Рис. 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 показывает задание трех функций и вывод шаблона графика (внизу).

Незаполненный шаблон графика представляет собою большой пустой прямоугольник с шаблонами данных в виде темных маленьких прямоугольников, расположенных около осей абсцисс и ординат будущего графика. В средние шаблоны данных надо поместить имя переменной у оси абсцисс) и задать формулы для функций (у у оси ординат). Если строятся графики нескольких функций в одном шаблоне, то для их разделения следует использовать запятые. Чтобы перемещать по шаблонам метку их выбора и выделения, следует использовать клавиши перемещения курсора. Можно выбрать шаблон данных и прямо с помощью мыши, указав нужный шаблон ее курсором и нажав левую клавишу мыши.

Крайние шаблоны данных служат для указания предельных значений абсцисс и ординат, т. е. они задают масштабы графика. Если оставить эти шаблоны незаполненными, то масштабы по осям графика будут устанавливаться автоматически. Недостаток тут в том, что масштабы, скорее всего, окажутся

62.jpg

Рис. 5.2 Задание трех функций и вывод незаполненного шаблона графика

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

Чтобы произошло построение графика в автоматическом режиме вычислений, достаточно вывести курсор за пределы графического объекта. В ручном режиме вычислений для этого нужно еще нажать клавишу F9. При построении область графика во время вычислений ординат функций покрывается зеленой штриховкой, затем графики функций появляются в шаблоне (см. рис. 5.3).

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

Рис. 5.3 Пример построения двух графиков трех функций

63.jpg

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

Графики можно перемещать по полю окна документа и изменять их размеры Для этого надо выделить график (он обводится сплошной линией) Проще всего это можно сделать так. поместить курсор мыши в область графика и щелкнуть один раз левой клавишей В правой части рис 5 3 показан тот же график после увеличения его размеров и завершения редактирования формата

Можно поступить и по-иному — поместить курсор мыши вблизи графика и, нажав ее левую клавишу, перемещать мышь в направлении графика наискосок Курсор начнет вычерчивать область выделения в виде прямоугольника из черных пунктирных линий Как только эта область захватит график и он тоже окажется обведен пунктирным прямоугольником, надо отпустить клавишу мыши График будет выделен

Стоит поместить графический курсор вблизи линий рамки, выделяющей область графика, при этом изображение курсора изменится: вмесго маленького красного крестика оно приобретет вид ладони. Если теперь нажать левую клавишу мыши и начать ее перемещать, то весь шаблон графика будет перемещаться по окну Установите его в нужное место и отпустите левую клавишу мыши. Рисунок окажется на новом месте.

Для изменения размеров рисунка нужно точно подвести графический курсор к специальным шаблонам на рамке, выделяющей рисунок Эти шаблоны имеют вид маленьких черных прямоугольников. Изображение курсора при этом заменяется на двустороннюю стрелку, указывающую, в каких направлениях можно растягивать рисунок. Нажав левую клавишу мыши, можно захватить соответствующую сторону или угол шаблона рисунка и, не отпуская клавишу, начать растягивать или сжимать шаблон. После того как клавиша будет отпущена, рисунок перестроится в новых размерах. Сжимать и растягивать графики можно в вертикальном, горизонтальном и диагональном направлениях

При любом виде выделения рисунка нажатие клавиши F3 стирает рисунок в окне и переносит его в буфер обмена. Переместив курсор, установленный на месте левого верхнего окна бывшего графика, в новое место и нажав клавишу F4, можно перенести рисунок на это место

Особо следует отметить возможность помещения текстовых комментариев в область графиков. Для этого вначале надо подготовить их в стороне от графика и выделить пунктирной линией Затем поместив курсор мыши в область текста, надо нажать ее левую клавишу и перенести текстовый блок в область рисунка. Установив текст в нужном месте, отпустите клавишу мыши Если при этих операциях или снятии выделений нанесенные на рисунок надписи исчезают, воспользуйтесь командой восстановления изображения на экране — Ctrl+R

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

5.3. Установка шаблона графиков в полярной системе координат (Polar Plot)

В полярной системе координат каждая точка задается углом W, радиусом и длиной радиус-вектора R(W). График функции обычно строится при изменении угла W в определенных пределах, чаще всего от 0 до 2р. Опция Polar Plot (Полярный график) выводит шаблон таких графиков, показанный на рис. 5.4. Этот шаблон имеет форму окружности и содержит шаблоны данных.

Рис. 5.4 Шаблон графиков типа Polar Plot

64.jpg

Перед построением таких графиков надо задать изменение ранжированной переменной 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 Графики функций в полярной системе координат

65.jpg

66.jpg

Рис. 5.6 Пример прямого построения графика параметрически заданной функции

При прямом построении графика достаточно просто заполнить ее шаблон. Саму функцию надо описать ее уравнениями, которые вписываются на места шаблонов по осям Х и Y. Стоит вывести графический курсор мыши из области графика, как последний будет построен.

5.4. Установка шаблона трехмерных графиков (Surface Plot)

Эта операция служит для построения трехмерной поверхности Z(X, Y), предварительно представленной матрицей М ординат Z. При этом выводится шаблон графика, левый верхний угол которого помещается в место расположения курсора. Шаблон, в свою очередь, содержит единственный шаблон данных — темный прямоугольник у левого нижнего угла основного шаблона. В него надо занести имя матрицы со значениями ординат ЗD-поверхности. Разумеется, прежде чем строить график ЗD-поверхности, нужно ее определить математически. На рис. 5.7 показан пример такого определения.

67.jpg

Рис. 5.7 Задание и построение трехмерной поверхности без удаления невидимых линий

Наглядность представления трехмерных поверхностей зависит от множества факторов: масштаба построений, углов поворота фигуры относительно осей, применения алгоритма удаления невидимых линий или отказа от него, использования функциональной закраски и т. д. Для изменения этих параметров следует использовать операцию установки формата графика (см. далее). На рис. 5.8 показано то же построение, что и описанное выше, но с применением алгоритма удаления невидимых линий.

68.jpg

Рис. 5.8 Задание и построение трехмерной поверхности с удалением невидимых линий

Нетрудно заметить, что применение алгоритма удаления невидимых линий делает рисунок трехмерной поверхности намного более наглядным. Дальнейшее повышение наглядности восприятия 3D-поверхностей обеспечивается применением функциональной закраски. По существу, она дает дополнительную информацию о третьем измерении; в нашем случае, чем ниже расположена поверхность фигуры, тем она темнее (см. рис. 5.9).

69.jpg

Рис. 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-поверхности

610.jpg

Такое представление графика удобно для количественных оценок. Однако в большинстве случаев указание количественных значений уровней загромождает график. Возможно задание высот 3D-поверхности с помощью функциональной окраски. Тогда можно выполнить построение этой поверхности в виде распределения плотности окраски (см. рис. 5.11).

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

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

Рис. 5.11 График распределения плотности ЗD-поверхности

611.jpg

5.6. Установка шаблона точечного ЗD-графика (3D Scatter Plot)

Нередко трехмерные поверхности представляют в виде находящихся в этом пространстве точек, кружочков или иных фигур. Каждая из этих фигур несет информацию о геометрическом положении ее центра в трехмерном пространстве. Такой график создается операцией 3D Scatter Plot (Точечный график) — см. рис. 5.12.

Размеры точек, их вид и окраску можно изменять с помощью команды изменения формата ЗD-графика. Обычно достаточно наглядными являются графики с малыми фигурами, расположенными внутри параллелепипеда Однако в целом наглядность таких графиков не очень высока. Их стоит использовать не для показа трехмерных поверхностей, а лишь для демонстрации расположения на них небольшого числа объектов. Объекты могут быть не только в виде точек, но и иных фигур, крестиков, окружностей, квадратов и др

612.jpg

Рис.5.12 График ЗD-поверхности в виде разбросанных в пространстве точек

5.7. Установка шаблона SD-графиков в виде гистограммы (3D Bar Chart)

Весьма pacпpocтраненной формой представления ЗD-поверхностей является также представление ее рядом трехмерных столбиков, высота которых определяется значением координаты z(x, у) Для этого используется операция 3D Bar Chart (Трехмерная гистограмма) — см рис 513

Рис.5.13 Представление ЗD-поверхности трехмерными столбиками

613.jpg

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

5.8. Установка шаблона ЗD-графиков с векторным представлением (Vector Field Plot)

Еще один вид представления ЗD-поверхности векторное представление Оно задается построением коротких стрелочек векторов Стрелка обращена острием в сторону нарастания высоты поверхности, а плотность расположения стрелок зависит от скорости этого нарастания На рис 514 показан пример подобного графика Для его построения используется команда Field Plot (Векторное поле)

Рис. 5.14 Представление 3D-поверхности векторами

614.jpg

Эти графики применяются редко из-за трудностей построения множества стрелок, для каждой из которых надо рассчитывать градиент поля Но MathCAD дает удобную возможность широкого применения этого вида графиков Он особенно подходит для представления электромагнитных, тепловых, гравитационных и иных полей

5.9. Установка шаблона матриц и векторов (Matrix...)

Операция Matrix... (Матрицы) обеспечивает задание векторов или матриц Как известно, матрица является заданным своим именем объектом в виде массива данных MathCAD использует одномерные массивы — векторы и двумерные — собственно матрицы

Матрица характеризуется числом строк (Rows) и числом столбцов (Columns). Таким образом, число элементов матрицы или ее размерность равны Rows x Columns Элементами матриц могут быть числа, константы, пере менные и даже математические выражения Соответственно матрицы могут быть численными и символьными

Если использовать операцию Matrix..., то в текущем окне появится не большое окошко, позволяющее задать размерность вектора или матрицы (см рис 515 справа) Для этого нужно указать число строк Rows и число сголбцов Columns Нажав клавишу Enter или указав курсором мыши на изображение клавиши Insert (Вставить) в окошке, можно вывести шаблон матрицы или вектора (вектор имеет один из параметров размерности, равный 1)

Шаблон содержит обрамляющие скобки и темные маленькие прямоугольники, обозначающие места ввода значений (числовых или символьных) для элементов вектора или матрицы. Один из прямоугольников можно сделать активным (отметив его курсором мыши). При этом он заключается в уголок. Это указывает на то, что в него будут вводиться значения соответствующего элемента. С помощью клавиш перемещения курсора можно по горизонтали пробежаться по всем прямоугольникам и ввести все элементы вектора или матрицы.

Рис. 5.15 Вывод шаблонов вектора и матрицы и их заполнение

615.jpg

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

Если использовать операцию Insert (Включение) при уже выведенном шаблоне матрицы, то матрица расширяется и ее размер увеличивается. Кнопка Delete (Стирание) позволяет убрать расширение матрицы, вычеркнув из нее строку или столбец.

Каждый элемент матрицы характеризуется индексированной переменной, и его положение в матрице обозначается двумя индексами: один указывает номер строки, другой — номер столбца. Для набора индексированной переменной прежде надо ввести имя переменной, а затем перейти к набору индексов нажатием клавиши, вводящей символ]. Прежде указывается индекс строки, а затем через запятую индекс столбца. Примеры вывода индексированных переменных (элементов матрицы М) также даны на рис. 5.14.

Вырожденная в одну строку или в один столбец матрица является вектором. Его элементы — индексированные переменные с одним индексом. Нижняя граница индексов задается значением системной переменной ORIGIN. Обычно ее значение задают равным 0 или 1.

5.10. Вывод функций (Choose function...)

Как правило, при подготовке документов имена функций пользователь вводи г самостоятельно. Поскольку функций, встроенных в систему, очень много (около 250), запомнить их все довольно сложно. Это и не нужно, ведь в MathCAD есть средство для ввода имен функций из их общего списка (каталога).

Операция Choose function... (Вставить функцию) выполняет следующие действия:

• выводит полный перечень встроенных в ядро системы функций;

• кратко поясняет назначение каждой функции;

• позволяет корректно ввести шаблон с именем функции в место расположения курсора, установленного в математическом выражении.

Для реализации этих возможностей команда выводит диалоговое окно, показанное на рис. 5.16.

Рис. 5.16 Диалоговое окно встроенных функций

616.jpg

Обратите внимание на то, что запись каждой функции дается в полной синтаксической форме. Это исключает довольно частые ошибки в формулах, вызванные неточностями записи функций. На месте параметров в выведенной функции имеются шаблоны данных для их ввода. Приведенное окно дает полный список встроенных в систему MathCAD функций и является хорошим средством для ознакомления с ними.

5.11. Установка единиц измерения размерных величин (Units...)

Операция Units... (Единицы) служит для установки единиц измерения размерных величин в заданной системе. Размерные величины широко используются в физических и в научно-технических расчетах.

При использовании операции Units... появляется окно, имеющее список размерных величин Dimension и относящихся к ним единиц измерения Unit. В окне есть также указание на то, какая система единиц System используется. Вид окна показан на рис. 5.17. По умолчанию используется система единиц SI.

Рис. 5.17 Диалоговое окно вставки единиц измерения размерных величин

617.jpg

Операция 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 Пример импорта графического изображения

618.jpg

Импортируемый рисунок можно, как и любой другой, перемещать с помощью мыши по экрану, растягивать его, выделять и помещать в буфер обмена и т. д. Заглядывая вперед, отметим, что можно перенести в текст документов и множество рисунков из электронного справочника системы. Это заметно облегчает подготовку в среде 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 Операции ввода текста и математических символов в текстовые области

619.jpg

Перед вводом русскоязычного текста рекомендуется выбрать подходящий шрифт. У многих русскоязычных (кириллических) шрифтов в названии имеется слово "Суг". Если в начале ввода выяснилось, что введена буква не русского алфавита, то при попытке ее стирания шаблон текстовой области исчезает и его придется выводить снова.

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 Подготовка к заданию гиперссылки

620.jpg

621.jpg

Рис. 5.21 Поиск файла, который связывается с гипер-ссылкой

Для завершения создания гиперссылки достаточно нажать кнопку ОК окна создания гиперссылки. При отказе от ее создания надо нажать кнопку Cancel.

Если установить курсор мыши на гиперссылку, то в строке состояния (внизу экрана системы) появится сообщение, которое было задано ранее (оно видно на рис. 5.23). Такие сообщения очень полезны при большом числе ги-перссылок, поскольку позволяют судить об их назначении.

Для осуществления гиперссылки достаточно установить курсор мыши на подчеркнутое слово, гиперссылку, и быстро дважды щелкнуть левой клавишей мыши. Текстовое сообщение, в котором имеется гиперссылка, станет выделенным, и на экране появится вызываемый гиперссылкой документ — см. рис. 5.24.

Рис. 5.22 Завершение создания гиперссылки

622.jpg

623.jpg

Рис. 5.23 Вид экрана после задания гиперссылки

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

Гиперссылку можно убрать с помощью опции Erase (Уничтожить), а также отредактировать, используя опцию Edit... (Редактировать), выводящую окно редактирования гиперссылки.

Рис. 5.24 Использование гиперссылки

624.jpg

5.17. Вставка обращения к заданному файлу активизацией кнопки (Reference...)

Есть еще один удобный способ обращения к заданным файлам путем создания ассоциированного с ними графического объекта — использование кнопок Для этого существует операция Reference... (Ссылка) Она выводит окно задания такой ссылки, показанное на рис 5 25

В этом окне надо либо явно указать полное имя файла (на рис 5 25 это относится к файлу Demo1 mcd), пибо найти его, воспользовавшись кнопкой вызова окна просмотра Browse Нажав далее кнопку ОК, можно вывести по

Рис. 5.25 Задание гиперссылки в виде кнопки, ассоциированной с файлом

625.jpg

месту расположения курсора мыши кнопку гиперссылки с указанным после нее именем вызываемого ею файла (вид этой кнопки показан на рис. 5.25 под окном задания гиперссылки). Активизация кнопки ОК ведет к появлению окна с вызываемым документом (см. рис. 5.26).

Рис. 5.26 Использование гиперссылки в виде кнопки

626.jpg

Два вида гиперссылок, реализованных в системе 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

627.jpg

Для реализации вставки объектов из других приложений надо выполнить операцию Object... (Объект). Она выводит окно с перечнем приложений, с которыми может осуществляться объектная связь (см. рис. 5.28).

Рис. 5.28 Окно объектной связи с приложениями

628.jpg

После выбора приложения для объектной связи с MathCAD на месте курсора мыши появляется пиктограмма с изображением объекта. Вид этой пиктограммы можно менять, если активизировать кнопку Смена значка... При этом появляется окно, в котором можно выбрать подходящий значок (пиктограмму), устраивающий пользователя (см. рис. 5.29).

На рис. 5.30 показан случай, когда в качестве объекта для вставки используются документы текстового редактора Word 95 из пакета Microsoft Office 95. Пиктограмма этого объекта показана в левом верхнем углу окна редактирования текущего документа.

Рис. 5.29 Выбор значка для обозначения вставляемого объекта

629.jpg

Рис. 5.30 Установление объектной связи с текстовым редактором Word 95

630.jpg

Если активизировать значок-пиктограмму, то появится окно текстового редактора Word 95, которое также показано на рис. 5.30. В этом окне можно подготовить любой документ, и он в дальнейшем будет вызываться активизацией значка объекта.

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

61.jpg

Изображение: 

62.jpg

Изображение: 

63.jpg

Изображение: 

64.jpg

Изображение: 

65.jpg

Изображение: 

66.jpg

Изображение: 

67.jpg

Изображение: 

68.jpg

Изображение: 

69.jpg

Изображение: 

610.jpg

Изображение: 

611.jpg

Изображение: 

612.jpg

Изображение: 

613.jpg

Изображение: 

614.jpg

Изображение: 

615.jpg

Изображение: 

616.jpg

Изображение: 

617.jpg

Изображение: 

618.jpg

Изображение: 

619.jpg

Изображение: 

620.jpg

Изображение: 

621.jpg

Изображение: 

622.jpg

Изображение: 

623.jpg

Изображение: 

624.jpg

Изображение: 

625.jpg

Изображение: 

626.jpg

Изображение: 

627.jpg

Изображение: 

628.jpg

Изображение: 

629.jpg

Изображение: 

630.jpg

Изображение: 

Глава 6 Установки форматов объектов системы 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 Окно для установки формата чисел

71.jpg

Это окно содержит три выделенные части В первой — 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 Представление большого массива чисел в виде матрицы

72.jpg

73.jpg

Рис. 6.3 Представление большого массива в виде электронной таблицы

Если опция Display as Matrix отключена, то большие массивы отображаются как электронные таблицы (со слайдерами для просмотра всего массива, появляющимися при активизации ячейки таблицы) Такая форма представления показана на рис 6 3.

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

6.3. Форматирование математических выражений (Equation...)

Математические выражения имеют довольно сложную структуру, они содержат переменные, константы, операторы и специальные знаки Все они могут иметь различный размер, чго иногда приводит к несоответствию вида этих объектов Чаще всего это связано с отказом от применения типовых устано вок MathCAD (по умолчанию) и неудачным форматированием математических выражений

Шрифты для математических символов привязаны к определенным их классам, например к числовым константам, переменным, надписям на графиках и т д Можно сказать, что они имеют определенные атрибуты Для переменных и надписей на графиках MathCAD по умолчанию использует шрифт Times Roman с размером 10 пунктов. Однако с помощью операции Equations... (Выражения) можно назначить для них, а также чисел и других символов в математических выражениях иной шрифт с иным размером Эта операция выводит диалоговое окно Format Equation, показанное на рис 6 4

Рис. 6.4 Окно форматирования математических выражений

74.jpg

Это окно устанавливает группу объектов в математических выражениях, шрифтовое оформление которых подлежит модификации. К таким объектам относятся переменные (Variables), константы (Constant) и объекты пользователя (User N, где N — номер группы от 1 до 7).

Окно обеспечивает выбор шрифтового оформления для указанных выше объектов. При этом появляется окно с каталогом шрифтов и необходимыми для их задания опциями. На рис. 6.5 приведен вид такого окна для выбора шрифта для переменных.

Рис. 6.5 Окна выбора шрифтов для переменных

75.jpg

Параметры шрифтов устанавливаются раздельно для указанных выше объектов, но для всех подобных объектов в заданном документе остаются идентичными. Это позволяет выбрать стиль представления математических выражении, наиболее удобный для пользователя. Например, можно добиться приемлемого размера и стиля для всех составляющих математических выражений.

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

6.4. Замена латинских букв на греческие (Ctrl+G)

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

Есть и второй, порою более быстрый путь ввода греческих букв: достаточно ввести ассоциированную с греческой буквой латинскую букву и нажать одновременно клавиши Ctrl и G. В результате латинская буква заменится греческой. На рис. 6.6 показаны таблицы соответствия между латинскими и греческими буквами.

Рис. 6.6 Таблица ввода греческих букв

76.jpg

Большинство греческих букв легко ассоциируются с латинскими Помни те, что есть комбинации клавиш для ввода математических спецсимволов Так, нажатие клавиш Ctrl+P вводит константу "пи ', a Ctrl+Z — знак беско нечности

6.5. Форматирование текста (Text...)

Форматирование текста означает изменение типа шрифтов и их параметров Операция Text... (Текст) доступна лишь по отношению к выделенному фраг менту текста и активна только в том случае, когда курсор мыши находится в текстовой области Эта операция позволяет выбрать шрифт из имеющегося набора и изменить его в выделенной области текста При использовании операции Text... появляется окошко Text Format с каталогом шрифтов (см рис 67)

Рис. 6.7 Диалоговое окно форматирования текста

77.jpg

Это окно содержит три перекчючателя для выбора стиля набора и разме ра шрифтов

Font Style (Стиль) — стиль шрифтов, Font (Шрифт) — набор шрифтов, Size (Размер) — размер шрифтов

Набор шрифтов определяется тем, какие шрифты инсталлированы в системе Windows, в которой работает MathCAD. Стиль шрифтов может быть нормальный (особо не называется) или-Bold (Полужирный) - полужирный шрифт;

Italic (Наклонный) - наклонный шрифт;

Underline (Подчеркивание) - подчеркнутый снизу шрифт

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

Имеется также ряд включаемых или выключаемых опций под именем Effect (Эффект):

Strikeout (Зачеркнутый) — перечеркнутые посередине символы;

Underline (Подчеркнутый) подчеркнутые снизу символы;

Substript (Подстрочный) — подстрочные символы;

Superscript (Надстрочный) — надстрочные символы.

Как обычно, кнопка ОК диалогового окна фиксирует выбор, а кнопка Cancel позволяет отказаться от модификации текстовых надписей На рис. 6 8 представлены образцы шрифтов для набора SchoolBook, содержащего буквы как латинского, так и русского алфавитов

Рис. 6.8 Образцы шрифтов набора SchoolBook

78.jpg

Многие шрифты, в частности наиболее распространенный True Type (ТТ), допускают изменение их размеров (см. пример внизу на рис. 6.8), что также задается в указанном окошке. Можно, например, для заглавия документа выбрать большие жирные и наклонные буквы, а текстовые сообщения задать прямыми буквами малого или среднего размера с обычной жирностью Выбор типа шрифта зависит в основном от вкусов пользователя.

6.6. Изменение формата параграфа (Paragraph...)

Если курсор мыши находится в текстовом блоке, то для форматирования параграфа можно использовать операцию Format Paragraph... (Формат параграфа) Она выводит диалоговое окно, показанное на рис. 6 9.

Рис. 6.9 Окно установки формата параграфа

79.jpg

Окно установки формата параграфа имеет две опции Indent (Отступы):

All Lines (Для всех строк) — установка отступа для всех строк, First Lines (Для первых строк) — установка отступа для первых строк

Можно задать абзацный отступ как для всех строк, так и только для первой строки Кроме того, можно задать тип равнения строк Alignment (Выравнивание)

Left (Слева) — по левому краю абзаца, Right (Справа) — по правому краю абзаца, Center (По центру) — по центру абзаца

На рис 6 10 показаны примеры различного выравнивания текста При выравнивании текста слева задан абзацный отступ для первой строки

710.jpg

Рис.6.10 Примеры выравнивания текста

В прежних версиях MathCAD было два типа текстовых блоков в виде блока с малой шириной и в виде абзаца с полной шириной, равной ширине страницы В новой версии остался лишь один блок, с его помощью можно задавать как узкие надписи, так и надписи во всю ширину страницы

6.7. Задание стиля текстовых комментариев (Style...)

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

Операция Style... (Формат стиля) позволяет устанавливать стили для различных текстовых объектов. При ее выполнении выводится окно выбора стилей Text Styles, показанное на рис. 6.11 сверху.

Рис. 6.11 Работа со стилями текстовых комментариев

711.jpg

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

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 Установка свойств математического выражения

712.jpg

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

Displayed (Отображение) — свойства вывода;

Calculation (Вычисления) — свойства вычислений.

К свойствам вывода в данном случае относится лишь наличие или отсутствие подкраски фона математического выражения. Активизируя кнопку Choose Color... (Выбрать цвет), можно вызвать окно задания цвета фона выражений, оно показано справа от окна установки свойств на рис. 6.12.

Панель Calculation (см. рис. 6.13) предназначена для отключения или включения эволюции математических выражений. Под эволюцией математических выражений подразумевается их активность. Напоминаем, что обычно математические выражения активны и выполняют определенные действия. Однако, используя опцию Dissable Evalution (Отключение эволюции), выражение можно сделать пассивным, т. е. просто комментарием.

713.jpg

Рис. 6.13 Окно свойств с включенной панелью Calculation

Еще одно важное свойство математических выражений — их оптимизация. Опция Enable Optimization (Включить оптимизацию) включает режим оптимизации. При этом выражение, если оно вычисляется, представляется в аналитическом виде всегда, когда это возможно. Это свойство может привести к заметному ускорению вычислений в тех случаях, когда оптимизирующее выражение проще исходного. Особенно заметен выигрыш в скорости вычислений при использовании функций (например, функций вычисления интегралов или производных) численными методами.

6.9. Установка формата двумерной графики (X-Y Plot)

Позиция Graph в подменю Format задает форматы графиков. Начнем с операции X-Y Plot... (Формат декартовых графиков). Она выводит в центр текущего окна окно с опциями формата графиков 2D-типа (см. рис. 6.14). Следует помнить, что для изменения формата уже построенного графика необходимо выделить его. Выделенный график обводится сплошной линией с маркерами его растяжения.

714.jpg

Рис. 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

715.jpg

Узловые точки графиков (для которых вычисляются координаты) часто требуется выделить какой-либо фигурой кружком, крестиком, прямоугольником и т д Опция 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 Панель задания дополнительных надписей

716.jpg

Для установки надписей служат небольшие окошки:

Title (Заголовок) - установка титульной надписи к рисунку;

X-Axis (Х-ось) - установка надписи по оси X;

Y-Axis (Y-ось) - установка надписи по оси Y.

В разделе Title содержатся опции Above (Сверху) и Below (Снизу) для установки титульной надписи либо над рисунком, либо под ним. Активизация этих опций задается установкой жирной точки в кружке. Кроме того, опция Show Title (Показать заголовок) позволяет включать или выключать отображение титульной надписи. Для ее активизации служит квадратное окошко, пустое при отказе от вывода надписи и с крестом — при выводе надписи.

Графические установки по умолчанию

Панель Defaults (По умолчанию), как показано на рис. 6.17, служит для установки опций графиков Change to Defaults (Вернуть значения по умолчанию) и Use for Defaults (Использовать для значений по умолчанию). Установленные и зафиксированные опции используются в дальнейшем при построении графиков функций одной переменной.

717.jpg

Рис. 6.17 Панель установки и фиксации опций

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

Примеры на форматирование 2D-графиков

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

В целом перечисленные опции предоставляют возможность создавать графики самых различных видов, удовлетворяющие любым запросам пользователя (см., например, шесть типов одного и того же графика на рис. 6.18).

Задание различных форматов графики позволяет уверенно различать кривые на графике и соотносить их с той или иной функцией, а введение дополнительных надписей (титульной и по осям) — дополнительно разнообразить графики.

Рис.6.18 Графики функции, построенные с применением различных форматов

718.jpg

Применение графического маркера

Еще одной возможностью при работе с 2D графиками является применение специального графического маркера в виде двух перекрещивающихся пунктирных линий Они появляются при выполнении операции X-Y Trace При этом появляегся перемещаемое окно этой операции, показанное на рис 6.19

Рис. 6.19 Работа с графическим маркером

719.jpg

При выключенной опции Track Data Points (Перемещение по точкам данных) маркер свободно перемещается по графику При этом его координаты отображаются в окне этой опции Поместив маркер на какую-либо интересную точку графика, можно примерно определить ее координаты

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

Просмотр части графиков с увеличением

Еще одна новая особенность при работе с 20-графиками заключается в возможности их просмотра с увеличением отдельных частей этих графиков. Она реализуется операцией X-Y Zoom, которая выводит информационное окно, показанное на рис. 6.20.

Рис. 6.20 Подготовка к просмотру части графика

720.jpg

Перемещением мыши с нажатой левой клавишей можно выделить определенную часть графика. При этом минимальная и максимальная координаты по осям Х и Y отображаются в окне данной операции. После этого можно реализовать три варианта просмотра:

Zoom (Увеличение) — просмотр вырезанного участка;

Unzoom (Отмена увеличения) — отмена просмотра вырезанного участка;

Full View (Полный обзор) — полный просмотр.

Эти действия настолько очевидны, что дальнейшее их описание лишено смысла. В целом надо отметить, что форматирование графиков в декартовой системе координат позволяет получать практически все типы таких графиков, используемых в математической и научно-технической литературе.

6.10. Установка форматов графиков в полярной системе координат (Polar Plot...)

Позиция Polar Plot... (Формат полярных графиков) главного меню обеспечивает задание форматов графиков, которые строятся в полярной системе координат. Она выводит окно с панельным переключателем (см. рис. 6.21).

Рис. 6.21 Окно с панельным переключателем для установки форматов графиков в полярной системе координат

721.jpg

Переключатель содержит следующие позиции:

Polar Axes (Оси) — установка форматов отображения осей;

Traces (Графики) — управление линиями графика;

Labels (Надписи) — управление метками (надписями);

Defaults (По умолчанию) — задание опций по умолчанию.

На рис. 6.21 переключатель установлен в положение Polar Axes. При этом задаются форматы отображения радиус-вектора (Radial) и его угла (Angular). Возможные опции были описаны ранее, и нет смысла их повторять. Раздел Axes Style (Стиль осей) позволяет задать стиль отображения координатных осей в виде окружности вокруг графика Perimeter (Обрамление), в виде расположенных крестом осей Crossed (Визир) и без представления координатных осей None (Ничего).

Рис. 6.22 Панель Labels окна установки форматов графиков в полярной системе координат

722.jpg

Опции панелей Traces и Labels также аналогичны ранее описанным. Панель Labels упрощена (рис 6.22), на ней предусмотрена установка только дополнительной титульной надписи.

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

Трассирование графика Format

В полярной системе координат, как и в декартовой предусмотрена возможность трассирования графиков с помощью графического маркера. Она реализуется операцией Format Trace, которая выводит информационное окно, показанное на рис. 6 23

723.jpg

Рис. 6.23 Трассирование графика в полярной системе координат

Трассировка в данном случае производится вращательными движениями мыши и перемещением ее курсора по кругу На графике появляется радиальный отрезок пунктирной прямой и пунктирная окружность Отрезок прямой задает угол радиус-вектора, а окружность — положение его конца, т. е. расстояние от центра координатной системы до точки пересечения вращающегося отрезка с окружностью. Координаты (угол и расстояние) показывает окно трассировки.

Трассировка возможна без слежения за кривой рисунка и со слежением. Для осуществления слежения надо поставить "птичку" в прямоугольном окошечке опции Track Data Point. С помощью кнопок Copy Angle и Copy Radius положение конца радиус-вектора текущей точки (угла и длины радиус-вектора) можно скопировать в буфер обмена. А с помощью команды Paste в позиции Edit главного меню можно перенести это значение в математическое выражение, в котором оно нужно

Просмотр части графика

Операция Format Zoom... позволяет просматривать выделенную часть графика в полярной системе координат Выделение производится изменением радиуса выделяющей пунктирной окружности Нажав кнопку Zoom окна просмотра, можно получить график выделенной части с увеличением (см рис 6.24)

724.jpg

Рис. 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).

725.jpg

Рис. 6.25 Панель установки форматов 3D-графиков

 

Форматирование координатных осей

Опции форматирования координатных осей сосредоточены в полях панели Axes (Оси). Она показана на рис. 6.26.

Рис. 6.26 Панель Axes для 3D Plot Format

726.jpg

С помощью этой панели для каждой координатной оси устанавливаются следующие опции:

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.

727.jpg

Рис. 6.27 Панель Color&Lines для 3D Plot Format

Для демонстрации отличий в виде 3D графиков на рис 6 28 показан тот же график, что на рис 6 27, но при отключенной опции Path Plot Нетрудно заметить, насколько резко изменится вид графика

Рис. 6.28 Трехмерная поверхность при отключенной опции Path Plot

728.jpg

В графике на рис 6 28 применена функциональная закраска типа Gray Scale (оттенками серого цвета) Она целесообразна, если устройства вывода (например, матричные или лазерные принтеры) не способны дать изображение в цвете

Последняя группа опций — Contours (Уровни) — задает параметры построения контурных графиков Для графиков, имитирующих объемность поверхности, эта группа опций недоступна. Поэтому мы опишем их действие несколько позже, при рассмотрении контурных графиков.

Задание надписей над и под графиком поверхности

Панель.Title (Заголовок), как показано на рис. 6.29, позволяет расположить введенную в окно Title титульную надпись. Опции Above (Сверху) и Below ( Снизу) устанавливают местоположение надписи относительно рисунка, опция Show Title (Показать заголовок) позволяет показать или скрыть титульную надпись.

Рис. 6.29 Панель задания и вывода титульных надписей Title для 3D-графиков

729.jpg

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

6-12. Форматирование контурных графиков

Контурные графики строятся линиями равного уровня. Такие линии получаются, если трехмерная фигура пересекается рядом параллельных плоскостей. Этот вид графики широко применяется в картографии. Полезен он и для оценки числа пиков и впадин сложных поверхностей; нередко при обычном построении графиков эти пики и впадины попросту не видны, поскольку заслоняются передним планом фигуры.

Построение таких графиков — достаточно трудоемкая задача. MathCAD же делает ее ничуть не более сложной, чем построение обычного графика трехмерной поверхности. Если контурный график построен, то позиция Graph подменю Format будет содержать операцию установки формата таких графиков — 3D Plot.

Эта операция выводит окно форматирования контурных графиков. Большинство опций в этом окне уже описывалось. Наиболее важными являются те из них, которые находятся в панели Color&Lines (см. рис. 6.30):

Contour Lines (Линии уровня) — показать контурные линии;

Numbered (Пронумеровать) — оцифровать контурные линии;

Auto Contour (Автолинии) — автоматически установить количество контурных линий;

No. Of Contours (Число линий) — установить заданное количество контур ных линий.

Рис. 6.30 Панель Color&lines окна форматирования контурных 3D-графиков

730.jpg

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

Рис. 6.31 Построение графиков фрактальных поверхностей

731.jpg

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

Еще две фрактальные поверхности показаны на рис. 6.32. Этот рисунок является просто продолжением рис. 6.31. Нетрудно заметить, что комбинация двух целых ранжированных чисел (меняющихся от О до 10) и третьего числа (заданного константой) позволяет строить весьма необычные рисунки.

Рис. 6.32 Продолжение документа, показанного на рис. 6.31

732.jpg

Фракталы — это как раз тот пример, когда полезна именно контурная графика. Вы можете построить графики (см. рис. 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

733.jpg

6.14. Форматирование графиков типа 3D Ваг

Еще один вид графиков трехмерной поверхности — 3D Bar Chart — задается столбиками, высота которых определяется координатой функции z(x, у). Окно форматирования в данном случае практически такое же, как и для других видов трехмерной графики. На рис. 6.34 оно показано при открытой панели Color&Line с заданием функциональной окраски столбиков графика.

734.jpg

Рис. 6.34 Форматирование графика 3D Bar Chart

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

На рис. 6.35 представлены три типа гистограмм: Matrix, Stacked и Side By Side. Установка типа гистограмм производится в панели Color&Lines окна форматирования графика типа 3D Bar Chart.

Рис. 6.35 Три основных типа гистограмм (график 3D Bar Chart)

735.jpg

Графики в виде гистограмм, показанные на рис. 6.35, широко применяются для отображения данных экономических, статистических и финансовых расчетов.

6.15. Примеры на применение графиков различного вида

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

На рис. 6.37 показано два графика, которые были приведены на рис. 6.31. Здесь они переформатированы под столбиковые диаграммы (при этом матрица А на левом графике взята со знаком минус).

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

Графики трехмерных поверхностей, а также импортируемые рисунки могут перемещаться в любом направлении в нужное место окна текущего документа. Можно также плавно менять их размеры. Все эти действия осуществляются точно так же, как в случае с 2D-гpaфикaми.

С каждой версией MathCAD графические возможности системы улучшались и в версии 7.0 PRO достигли высокой степени совершенства. Это позволило создавать математические графики практически всех типов Особенно удачно решено построение трехмерных графиков которое можно осуществ лять с удалением и без удаления невидимых линий каркаса с монохромной и цветной функциональной закраской с различными углами поворота и т д

Рис. 6.36 Два графика одной поверхности

736.jpg

Рис. 6.37 Графики, показанные на рис б 31, но представленные теперь в виде столбиковых диаграмм

737.jpg

6.16. Форматирование цвета (Color)

Для изменения цветов существует позиция Color (Форматирование цветов) подменю Format Она выводит подменю со следующими командами Background... (Фон) — выбрать цвет фона окна

Highlight... (Подсвеченное выражение) — выбрать цвет выделения выражений;

Annotation Color... (Аннотации) — выбрать цвет аннотаций.

Любая из этих команд выводит стандартное диалоговое окно, показанное на рис. 6.38. Каждое окно обладает титульной строкой с названием соответствующей команды.

Рис. 6.38 Диалоговое окно задания цветов

738.jpg

Помимо указанных опций есть еще две, которые возможны только в том случае, если видеосистема компьютера может дать 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 Попытка построить график функции

739.jpg

график остался непостроенным и буква f в названии функции оказалась выделенной красным цветом ошибки.

740.jpg

Рис. 6.40 Разделение областей не позволило построить график функции

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

Вообще надо отметить, что эта операция (увы!) в новой версии работает неустойчиво. Отмечались случаи, когда при большом числе перекрывающихся областей она отказывалась выполнить их разделение. Возможно, фирма MathSoft устранит этот недостаток при доводке версии MathCAD 7.0 PRO. Вообще же говоря, при подготовке документов надо заранее побеспокоиться о правильном расположении блоков в них.

Рис. 6.41 Пример построения графика функции после ручной коррекции положения областей

741.jpg

6.18. Выравнивание областей (Align)

Операция Align Region служит для организации специального выравнивания областей различных блоков. Она выводит подменю с двумя позициями:

Across (Вдоль) — выровнять выделенные области вдоль горизонтальной

линии, расположенной посередине между верхними краями высшей и низшей из выделенных областей;

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

Если нужно расположить блоки строго друг под другом, то в данном случае надо использовать операцию Align Down. Результат выполнения этой операции представлен на рис. 6.43: все блоки расположены друг под другом и выровнены по левому краю.

Рассматриваемые операции следует применять осторожно, поскольку иногда блоки могут перекрываться. Так, в данном примере применение операции Align Across приведет к наложению блоков. Вообще говоря, полезно при подготовке документов сразу избегать наложения блоков друг на друга.

6.19. Создание закрытых областей в документе (Lock Regions)

В ряде случаев в документе желательно создать некоторые закрытые (т. е. недоступные для редактирования посторонними лицами) области. Это может

742.jpg

Рис. 6.42 Пример документа с произвольно расположенными блоками

Рис. 6.43 Пример выравнивания блоков по вертикали

743.jpg

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

Операция Lock Regions (Закрытые области) позволяет реализовать эту возможность. Она выводит подменю со следующими операциями по созданию и управлению такими областями:

Set Lock Area... (Область) — определить защищаемую область рабочего документа;

Lock Area... (Закрыть) — включить защиту области;

Unlock Area... (Открыть) — редактировать защищаемую область.

Первая из этих операций устанавливает на экран дисплея две горизонтальные черты — ограничители закрытой области с пиктограммой открытого замка в их начале (см рис 644) Пространство между ними и есть будущая закрытая область

744.jpg

Рис. 6.44 Установка ограничителей закрытой области

Oграничители закрытой области можно, как и любые объекты, выделять и перемещать вверх или вниз по документу Таким образом можно регулировать высоту закрываемой области После установки ограничителей закрываемой области надо поместить в нее те объекты, доступ к которым закрывается После этого надо исполнить операцию Lock Arrea..., которая вызывает появление окна с предложением о вводе пароля (см рис 6 45)

Рис. 6.45 Окно с предложением о вводе пароля

745.jpg

Если не ввести пароль, то область будет закрыта навсегда Ввод пароля (рис 6 46) означает, что в дальнейшем область можно будет сделать откры той Обычно стоит предусмотреть такую возможность

Рис. 6.46 Ввод пароля закрываемой области

746.jpg

Учтите, что при вводе пароля вместо символов нажимаемых клавиш в поле ввода (посередине окна) выводятся звездочки Это сделано для того, чтобы никто не мог посмотреть сзади, какой вы ввели пароль Пароль надо вводить такой, чтобы его можно было запомнить (неплохо записать его в свою записную книжку)

После ввода пароля выделенная область закрывается, а пользователь лишается возможности ее модернизации (см рис 6 47)

Рис. 6.47 Документ с закрытой областью

747.jpg

Как видно из рис 6 47, после изображения замков выводятся данные о времени создания закрытой области Если теперь попытаться модифицировать введенное в нее математическое выражение или перетащить его на другое место, то из этого просто ничего не выйдет

Операция Unlock Area позволяет в случае необходимости открыть Закрытую область и выводит уже описанное окно ввода пароля Если в нем вве сти ранее заданный пароль, то замки в ограничителях закрытой области откроются и она станет открытой Выделив ограничители, их можно убрать (например, нажатием клавиши F3 или с помощью операции Delete в подменю позиции Edit главного меню) Ограничители задаются сразу парой и стираются одновременно

6.20. Форматирование колонтитулов (Headers/Footers)

При печати документов нередко требуется внести в заголовок (Header) или нижнюю строку (Footer) каждой страницы некоторую служебную информацию либо надпись, например имя файла, номер с границы, дату создания и др Такие надписи называют колонтитулами (верхними или нижними)

Эта возможность реализуется командой Headers/Footer (Колонтитулы) в позиции Edit главного меню, выводящей диалоговое окно, показанное на рис 6 48

Рис. 6.48 Диалоговое окно обрамления документов

748.jpg

В основном окне можно установить, какой колонтитул создается верхний, Headers, или нижний, Footers (в нужной позиции устанавливается жир ная точка) Опция Enable (Включить), будучи введенной (знак х), обеспечи вает печать колонтитулов, в противном случае колонтитулы не печатаются

Это окно содержит три окна ввода надписей Left (Слева), Center (По центру) и Right (Справа) Соответственно и введенные надписи будут печататься в выбранном колонтитуле с выравниванием по левому краю, по центру или по правому краю.

Имеется ряд кнопок для автоматического занесения в колонтитулы следующих данных:

Filename (Файл) — имя файла;

Page # (Стр №) — номер страницы;

Date (Дата) — текущая дата;

Time (Время) — текущее время.

Эти данные заносятся по месту расположения курсора после нажатия соответствующей кнопки внизу основного окна. Клавиша Fonts (Шрифты) дает возможность выбора подходящего шрифта для текстов колонтитулов.

Кроме тот о, клавиша Fonts выводит стандартное окно выбора шрифта, которым набираются упомянутые выше надписи. Они появляются только на распечатках документов (рис. 6.49), но не в видимом окне редактирования.

Рис. 6.49 Документ с колонтитулами, выведенный в режиме просмотра

749.jpg

Четыре кнопки внизу окна Fonts служат для вставки в панель окна ввода колонтитулов следующих данных:

Filename — имя файла;

Page # — номер страницы;

Date — дата;

Time текущее время.

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

71.jpg

Изображение: 

72.jpg

Изображение: 

73.jpg

Изображение: 

74.jpg

Изображение: 

75.jpg

Изображение: 

76.jpg

Изображение: 

77.jpg

Изображение: 

78.jpg

Изображение: 

79.jpg

Изображение: 

710.jpg

Изображение: 

711.jpg

Изображение: 

712.jpg

Изображение: 

713.jpg

Изображение: 

714.jpg

Изображение: 

715.jpg

Изображение: 

716.jpg

Изображение: 

717.jpg

Изображение: 

718.jpg

Изображение: 

719.jpg

Изображение: 

720.jpg

Изображение: 

721.jpg

Изображение: 

722.jpg

Изображение: 

723.jpg

Изображение: 

724.jpg

Изображение: 

725.jpg

Изображение: 

726.jpg

Изображение: 

727.jpg

Изображение: 

728.jpg

Изображение: 

729.jpg

Изображение: 

730.jpg

Изображение: 

731.jpg

Изображение: 

732.jpg

Изображение: 

733.jpg

Изображение: 

734.jpg

Изображение: 

735.jpg

Изображение: 

736.jpg

Изображение: 

737.jpg

Изображение: 

738.jpg

Изображение: 

739.jpg

Изображение: 

740.jpg

Изображение: 

741.jpg

Изображение: 

742.jpg

Изображение: 

743.jpg

Изображение: 

744.jpg

Изображение: 

745.jpg

Изображение: 

746.jpg

Изображение: 

747.jpg

Изображение: 

748.jpg

Изображение: 

749.jpg

Изображение: 

Глава 7 Управление вычислительными процессами

Глава 7 Управление вычислительными процессами

7.1. Вычисление в пределах экрана (Calculate)

По умолчанию MathCAD работает в режиме автоматических вычислений. Однако иногда бывает удобнее работать в ручном режиме, например, если вычисления объектов при их изменении выполняются заново и долго. Ручной режим вводится операцией Calculate (Вычисления) из главного меню. Для ее выполнения надо нажать кнопку со знаком = в панели инструментов или клавишу F9. Разумеется, режим автоматических вычислений при этом должен быть отключен.

Из рис. 7.1, иллюстрирующего работу MathCAD в режиме ручных вычислений видно, что вычислений не происходит. В частности, выражение х= не выводит, как в автоматическом режиме, вектор значений х,а в шаблоне графика нет собственно графика.

Рис. 7.1 Документ в режиме ручных вычислений до ввода операции Calculate

81.jpg

Чтобы начались вычисления, надо выполнить операцию Calculate любым из описанных выше способов. Вид документа после ввода этой операции показан на рис. 7.2. Нетрудно заметить, что теперь выведен вектор значений х и построен график функции.

Если, однако, пролистать документ дальше и перейти к ниже расположенному экрану, то можно обнаружить, что блоки в нем не выполнялись. Это иллюстрирует рис. 7.3, в котором виден неисполненный блок построения функции tan(x).

Итак, операция Calculate исполняет только те блока, которые видны на текущем экране. Для исполнения последующих блоков надо вновь исполнять операцию Calculate. Другой способ исполнения последующих блоков описан ниже.

Рис. 7.2 Документ в режиме ручных вычислении после ввода операции Calculate

82.jpg

Рис. 7.3 Демонстрация неполного исполнения документа при вводе операции Calculate

83.jpg

Кстати говоря, график на рис 7 3 не отличается высокой представитель ностью" Это связано с тем, что задано слишком малое число точек Так что этот график наглядно показывает, что малое число точек может сильно иска зить графическую визуализацию функции В нашем случае это не важно, надо было лишь проиллюстрировать исполнение блоков

7.2. Исполнение всего документа (Calculate Worksheet)

Если после подготовки документа с невычисленными блоками нужно исполнить весь документ от начала до конца, то следует использовать операцию Calculate Worksheet (Вычисление документа) На рис 7 4 показана та же часть документа, что и на рис 7 3, но после выполнения этой операции Нетрудно заметить, что теперь оба графика на ДВУХ экранах оказались построенными

Рис. 7.4 Вид части документа после исполнения операции Calculate Worksheet

84.jpg

Разумеется, такой же вид имел бы приведенный фрагмент документа при повторном исполнении команды Calculate

7.3. Вычисления в автоматическом режиме (Automatic Calculation)

Операция Automatic Calculation (Автоматические вычисления) в подменю Math обеспечивает переключение между ручным и автоматическим режимами вычислений Если против названия этой операции мышью установить "птичку", то будет работать автоматический режим вычислений, в противном случае, когда "птички" нет, — ручной.

Как правило, автоматический режим вычислений намного удобнее ручного, поэтому он установлен по умолчанию

7.4. Оптимизация вычислений (Optimization)

Oптимизация вычислений достигается заменой сложной функции или мате матического выражения их аналитическим представлением (если оно, конечно, есть) Для иллюстрации техники оптимизации рассмотрим рис 7 5

Рис. 7.5 Пример на оптимизацию вычислений

85.jpg

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

Во втором случае использовалась техника оптимизации. Выражение для интеграла, оформленное как функция 1(n), было выделено, а затем исполнена операция Optimize (Оптимизация), после чего скорость вычислений увеличилась в несколько раз

Признаком оптимизации выражения является появление после него красной звездочки — знака *. Кроме того, установив в оптимизированное выражение курсор мыши и щелкнув ее левой клавишей, можно наблюдать появление окна с оптимизированным выражением; на рис. 7.5 это окно также показано. Нетрудно заметить, что в нашем примере довольно сложный интеграл оказался замененным достаточно простым аналитическим выражением

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

7.5. Установка опций (Options...)

В позиции Options... (Опции) сосредоточены различные опции вычислительных процессов Если активизировать эту позицию, то на экран будет выведено окно с панельным переключателем, показанным на рис 7.6

Рис. 7.6 Диалоговое окно установки опций

86.jpg

Это окно имеет следующие панели:

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 Диалоговое окно изменения системы единиц размерных величин

87.jpg

Форматирование размерных величин (Dimensions)

Для изменения формата размерных величин служит панель Dimensions (Размерности) Она выводит диалоговое окно, показанное на рис 7 8

Рис. 7.8 Изменение формата размерных величин

88.jpg

Эта панель выводит перечень размерностей, который можно при необходимости редактировать Для этого надо установить "птичку" в прямоугольнике опции Display Dimensions (Просмотр размерностей)

81.jpg

Изображение: 

82.jpg

Изображение: 

83.jpg

Изображение: 

84.jpg

Изображение: 

85.jpg

Изображение: 

86.jpg

Изображение: 

87.jpg

Изображение: 

88.jpg

Изображение: 

Глава 8 Работа с символьным процессором

Глава 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 главного меню

91.jpg

Символьные операции разбиты на пять характерных разделов Первыми идут наиболее часто используемые операции Они могут выполняться с выра жениями, содержащими комплексные числа или имеющими решения в комплексном виде

Операции с выделенными выражениями

К операциям с выделенными выражениями относятся следующие 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

92.jpg

Операция 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

93.jpg

Два последних примера на приведенном рисунке показывают, как с помощью операции Simplify можно выполнять символьные вычисления производных и определенных интегралов. Результатом вычислений могут быть специальные математические функции (см. последний пример, в котором символьное значение интеграла дает результат, выраженный через интегральный синус). Вполне возможно вычисление производных высшего порядка. На рис. 8.4 показано последовательное применение операции Simplify для вычисления производных алгебраического выражения, от первой до пятой включительно.

Система MathCAD содержит встроенную функцию для вычисления значений определенных интегралов приближенным численным методом. Ею целесообразно пользоваться, когда нужно просто получить значение определенного интеграла в виде числа. Однако команда Simplify применительно к вычислениям определенных интегралов делает гораздо больше — она ищет аналитическое выражение для интеграла. Более того, она способна делать это и при вычислении кратных интегралов, пределы которых — функции. Наглядный пример этому дает рис. 8.5.

На рис. 8.6 показано применение операции Simplify для вычисления сумм и произведений символьных последовательностей. Результат операции, как и следовало ожидать, получается в символьной форме (если она существует).

Приведенные примеры могут создать впечатление, что MathCAD лихо справляется со всеми производными, интегралами, суммами и произведения-

Рис. 8.4 Вычисление производных алгебраического выражения с порядком от 1 до 5

94.jpg

Рис. 8.5 Вычисление двойных и тройных определенных интегралов

95.jpg

ми с помощью операции Simplify. К сожалению, это далеко не так. Нередко система не справляется с кажущимися простыми справочными примерами. Надо помнить, что символьный процессор системы MathCAD обладает заметно урезанной библиотекой функций и преобразований (в сравнении с библиотекой системы Maple V). Поэтому часто система не находит решение в замкнутом виде, хотя оно и приводится в справочнике. Тогда система повторяет введенное выражение или сообщает об ошибке.

Следует также отметить, что при выполнении командами меню Symbol символьных вычислений выражения необходимо указывать явно. Например, недопустимо вводить некоторую функцию пользователя F(x) и пытаться найти ее производные или интеграл. Это существенное ограничение, и котором надо всегда помнить. Однако оно преодолимо при выполнении вычислений с помощью функций системы SmartMath, которая описывается в дальнейшем; 

Рис. 8.6 Вычисление сумм и произведений символьных последовательностей

96.jpg

главное в том, что для вывода символьных вычислений в этом случае используется оператор —>.

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

8.5. Расширение выражений (Expand)

Действие операции Expand (Разложить по степеням) в известном смысле противоположно действию операции Simplify. Подвергаемое преобразованию выражение расширяется с использованием известных (и введенных в символьное ядро) соотношений, например алгебраических разложений многочленов, произведений углов и т. д Разумеется, расширение происходит только в том случае, когда его результат однозначно возможен Иначе нельзя считать, что действие этой операции противоположно действию операции Simplify. К примеру, операция Simplify преобразует сумму квадратов синуса и косинуса в 1, тогда как обратное преобразование многозначно и потому в общем виде невыполнимо

При преобразовании выражений операция Expand Expression старается более простые функции представить через более сложные, свести алгебраические выражения, представленные в сжатом виде, к выражениям в развернутом виде и т д Примеры действия операции Expand Expression даны на рис. 8 7

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

Рис. 8.7 Действие операции Expand Expression

97.jpg

 

8.6. Разложение выражений (Factor)

Операция Factor Expression (Разложить на множители) используется для факторизации — разложения выражений или чисел на простые множители Она способствует выявлению математической сущности выражений, к примеру, наглядно выявляет представление полинома через его действительные корни, а в том случае, когда разложение части полинома содержит комплекс-

Рис. 8.8 Действие операции Factor Expression

98.jpg

но-сопряженные корни, порождающее их выражение представляется квадратичным трехчленом. Примеры действия этой операции даны на рис. 8.8.

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

8.7. Комплектование по выражениям (Collect)

Операция Collect (Разложить по подвыражению) обеспечивает замену указанного выражения выражением, скомплектованным по базису указанной переменной, если такое представление возможно. В противном случае появляется окно с сообщением о невозможности комплектования по указанному базису. Эта команда особенно удобна, когда заданное выражение есть функция ряда переменных и нужно представить его в виде функции заданной переменной, имеющей вид степенного многочлена. При этом другие переменные входят в сомножители указанной переменной, представленной в порядке уменьшения ее степени. На рис. 8.9 показаны примеры действия этой операции.

Рис. 8.9 Действие операции Collect

99.jpg

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

8.8. Вычисление коэффициентов полиномов (Polynomial Coefficients)

Операция Polynomial Coefficients (Полиномиальные коэффициенты), в ранних версиях MathCAD отсутствующая, служит для вычисления коэффициентов полинома. Операция применяется, если заданное выражение — полином

Рис. 8.10 Примеры применения операции Polynomial Coefficients

910.jpg

(степенной многочлен) или может быть представлено таковым относительно выделенной переменной На рис 810 показаны примеры применения этой операции

Результатом операции является вектор с коэффициентами полинома Операция полезна при решении задач полиномиальной аппроксимации и регрессии

8.9. Дифференцирование по заданной переменной (Differentiate)

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

Нахождение символьного значения производной — одна из самых рас пространенных задач в аналитических вычислениях. Операция Differentiate (Дифференцировать по переменной) возвращает символьное значение производной выражения по той переменной, которая указана курсором Для вычисления производных высшего порядка (свыше 1) нужно повторить вычисление необходимое число раз На рис 811 показано применение операции дифференцирования

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

Рис. 8.11 Примеры символьного дифференцирования

911.jpg

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

8.10. Интегрирование по заданной переменной (Integrate)

Другая не менее важная операция при символьных вычислениях — вычисление интегралов (или нахождение первообразных) для аналитически заданной функции. Для этого используется операция Integrate (Интегрировать по переменной). Она возвращает символьное значение неопределенного интеграла по указанной курсором ввода переменной. Выражение, в состав которого входит переменная, является подынтегральной функцией.

На рис. 8.12 показаны примеры символьного интегрирования по переменной х. Визуализация таких вычислений (как и описанных выше), прямо скажем, не велика если бы не поясняющие текстовые комментарии, то было бы совсем неясно, откуда берутся выражения в документе и резульгаты чего они представляют

Как и для операции дифференцирования, в состав исходных выражений и результатов символьного интегрирования могут входить встроенные в систему специальные математические функции. На это указывают два последних примера из приведенных на рис. 8.12.

Рис. 8.12 Примеры символьного интегрирования

912.jpg

8.11. Решение уравнения относительно заданной переменной (Solve)

Если задано некоторое выражение F(x) и отмечена переменная х, то операция Solve (Решить) возвращает символьные значения указанной переменной х, при которых F(x)==0. Это очень удобно для решения алгебраических уравнений, например квадратных и кубических, или для вычисления корней полинома. Рис. 8.13 содержит примеры решения квадратного уравнения и нахождения комплексных корней полинома четвертой степени.

913.jpg

Рис.8.13 Примеры решения уравнений

Ранее отмечалось, что усложнение уравнения, например переход от квадратного уравнения к кубическому, может вызвать и существенное усложнение результата. Тогда система представляет решение в более компактном виде (но без общепринятой математической символики) и предлагает занести его в буфер обмена.

С помощью операции Paste (Вставить) в позиции Edit (Правка) главного меню можно перенести решение в основное окно системы, но оно имеет уже тип текстового комментария, а не математического выражения, пригодного для дальнейших преобразований. Впрочем, часть его можно (опять-таки с помощью буфера обмена) ввести в формульные блоки для последующих преобразований и вычислений.

Более того, форма представления результата в таком случае отличается от принятой в системе MathCAD (например, в качестве знака деления используется косая черта, для возведения в степень — составной знак** и т. д.). Это сделано ради компактности представления результатов вычислений. Рис. 8.14 показывает результат решения кубического уравнения в символьном виде.

Рис. 8.14 Решение кубического уравнения в символьном виде

914.jpg

Последний пример наглядно иллюстрирует проблему "разбухания" результатов. Если при решении квадратного уравнения получены простые выражения, известные даже школьникам (рис. 8.13 — первый пример), то при увеличении порядка уравнения всего на единицу результат оказался представленным весьма громоздкими и малопригодными для анализа формулами. Хорошо еще, что существующими!

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

8.12. Подстановка для заданной переменной (Substitute)

Операция Substitute (Подстановка) возвращает новое выражение, полученное путем подстановки на место указанной переменной некоторого другого выражения. Последнее должно быть подготовлено и скопировано (операциями Cut или Copy) в буфер обмена. Наряду с получением результата в символьном виде эта команда позволяет найти и числовые значения функции некоторой переменной путем замены ее на числовое значение. На рис. 8.15 представлены примеры операций с подстановкой.

Рис. 8.15 Примеры операций с подстановкой

915.jpg

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

8.13. Разложение в ряд Тейлора по заданной переменной (Expand to Series...)

Операция Expand to Series... (Разложить в ряд) возвращает разложение в ряд Тейлора выражения относительно выделенной переменной с заданным по запросу числом членов ряда n (число определяется по степеням ряда). По умолчанию задано п=6. Разложение возможно для функции заданной переменной. В разложении указывается остаточная погрешность разложения. На рис. 8.16 представлено применение этой операции для разложения функции sin(x)/x. Минимальная погрешность получается при малых х (см. графическое представление функции и ее ряда).

Символьные операции нередко можно комбинировать для решения сложных задач. Рис. 8.17 показываег интересное решение одной из таких задач — вычисление определенного интеграла, который не берется в замкнутой форме.

Рис. 8.16 Пример на разложение функции в ряд Тейлора

916.jpg

Рис. 8.17 Взятие определенного интеграла в символьной форме с заменой подынтегральной функции ее разложением

917.jpg

Если пользователя (например, инженера) интересует просто числовое значение интеграла, надо лишь поставить после интеграла знак вывода = и значение интеграла будет вычислено адаптивным численным методом Симп-сона. Однако вычислить такой интеграл с помощью операции Simplify (Упростить) не удастся после долгих попыток система сообщит, что интеграл в замкнутой форме не берется.

Прием, который иллюстрирует рис. 8.17, заключается в замене подынтегральной функции ее разложением в ряд Тейлора. Вначале получим такое разложение с избытком — для 10 членов ряда (однако учтенных нечетных членов тут нет, такова специфика функции). Далее, выделив четыре первых реальных члена и используя операции Copy (Копировать) и Paste (Вставить) в позиции Edit (Правка) главного меню, поместим это разложение на место шаблона подынтегральной функции. Теперь проблем с вычислением интеграла операцией Simplify не будет

Интеграл получен в форме числа е=ехр(1), помноженного на дробный множитель, представленный в рациональной форме (отношения целых чисел) Это обстоятельство, возможно, бесполезное для рядового пользователя, наверняка будет весьма положительно воспринято математиком, поскольку здесь напрашиваются определенные аналитические выводы (которых нельзя сделать при вычислении интеграла численными методами)

8.14. Разложение на правильные дроби (Convert to Partial Fraction)

Операция Convert to Partial Fraction (Разложить на элементарные дроби) возвращает символьное разложение выражения, представленное относительно заданной переменной в виде суммы правильных целых дробей. На рис 8 18 даны примеры такого разложения

Рис. 8.18 Примеры разложения на дроби

918.jpg

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

8.15. Транспонирование матрицы (Transpose)

Символьный процессор системы MathCAD обеспечивает проведение в символьном виде трех наиболее распространенных матричных операций' транспонирование и обращение матриц, а также вычисление их детерминанта.

Эти операции в подменю Matrix обозначены так: Transpose (Транспонировать), Invert (Обратить) и Determinant (Найти определитель). Если элементы матрицы — числа, то выполняются соответствующие операции в числовой форме.

Транспонирование матрицы означает перестановку строк и столбцов. Оно реализуется операцией Transpose (Транспонировать). Подлежащая транспонированию матрица должна быть выделена.

8.1 б. Обращение матриц (Invert)

Обращение матриц означает создание такой матрицы А-1, для которой произведение ее на исходную матрицу А дает единичную матрицу, т. е. матрицу с диагональными элементами, равными 1, и остальными — нулевыми. Обращение допустимо для квадратных матриц с размером NxN, где N> 1 — число строк и столбцов матрицы. Такую же размерность имеет и обращенная матрица.

Обращение матриц — широко распространенная математическая задача. Существует множество программ на разных языках программирования, решающих эту задачу с той или иной степенью успеха. Для MathCAD это рутинная задача. На рис. 8.19 приведены примеры выполнения типовых матричных операций. Последняя из них — обращение матрицы в символьной форме с помощью операции Invert.

Рис. 8.19 Примеры матричных операций в символьной форме

919.jpg

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

8.17. Функции преобразований Фурье, Лапласа и Z-преобразований

Для выполнения широко распространенных в технических и научных приложениях преобразований Фурье (Fourie и Inverse Fourie), Лапласа (Laplace и Inverse Laplace) и Z-преобразований (Z и Inverse Z) служат соответствующие операции в подменю позиции Symbolic главного меню

Для применения этих операций следует записать исходное выражение и отметить в нем переменную, относительно которой будет производиться преобразование Тогда указанные выше операции становятся доступными и выделяются четкими надписями

Не вдаваясь в суть перечисленных достаточно известных преобразований, приведем простейшие примеры их применения, они показаны на рис 8 20 Здесь даны примеры как прямого, так и обратного (Inverse) преобразования каждого типа

Рис. 8.20 Примеры применения функций преобразования Фурье, Лапласа и Z-преобразований

920.jpg

Не следует полагать, что для всех случаев результаты преобразования будут в точности совпадать со справочными и что результат двойного преобразования (вначале прямого, а затем обратного) приведет к первоначальной функции Указанные преобразования довольно сложны, и грамотное применение их требует соответствующих математических познаний Не случайно в ранние версии MathCAD (например, 3 0) они не были включены в виде команд

8.18. Установка стиля эволюции символьных выражений (Evolution Style...)

Последняя позиция подменю Symbolic — Evalution Style... — служит для установки стиля эволюции выражений, над которыми выполняются символьные операции Напомним, что под эволюцией математических выражений в данном случае подразумеваеюя изменение их вида в результате символьных преобразований.

Данная операция выводит окно с установками стиля эволюции, показанное на рис. 8.21.

Рис. 8.21 Окно установки стиля эволюции

921.jpg

В этом окне можно установить три тина вывода результата символьных преобразований:

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 Пример решения дифференциального уравнения второго порядка с применением преобразований Лапласа

922.jpg

На рис 8.23 приведено решение другого дифференциального уравнения Используется тот же метод решения, что и в предыдущем примере.

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

Рис. 8.23 Пример решения другого дифференциального уравнения

923.jpg

91.jpg

Изображение: 

92.jpg

Изображение: 

93.jpg

Изображение: 

94.jpg

Изображение: 

95.jpg

Изображение: 

96.jpg

Изображение: 

97.jpg

Изображение: 

98.jpg

Изображение: 

99.jpg

Изображение: 

910.jpg

Изображение: 

911.jpg

Изображение: 

912.jpg

Изображение: 

913.jpg

Изображение: 

914.jpg

Изображение: 

915.jpg

Изображение: 

916.jpg

Изображение: 

917.jpg

Изображение: 

918.jpg

Изображение: 

919.jpg

Изображение: 

920.jpg

Изображение: 

921.jpg

Изображение: 

922.jpg

Изображение: 

923.jpg

Изображение: 

Глава 9 Работа с окнами

Глава 9 Работа с окнами

9.1. Подменю для работы с окнами (Window)

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

Система MathCAD позволяет одновременно работать со многими задачами. Под каждую задачу она отводит свое окно. Одно из них обычно является активным — то, с которым происходит работа в настоящий момент. Состояние других документов "замораживается", но их можно пустить в работу в любое время без новой загрузки и без исполнения связанной с окном программы.

Основные операции с окнами сосредоточены в позиции Window (Окно) главного меню (см. рис. 9.1).

Рис. 9.1 Вид экрана MathCAD с подменю Window главного меню

101.jpg

Ниже указаны эти операции:

Cascade (Каскад) — расположить окна документов друг под дру гом так, чтобы были видны заголовки;

Horizontal (По горизонтали) расположить окна документов горизонтально;

Vertical (По вертикали) — расположить окна документов вертикально;

Arrange Icons — упорядочить размещение пиктограмм (Упорядочить пиктограммы) рабочих документов вдоль нижней границы окна приложения.

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

Рассмотрим действие основных команд управления окнами. Они позволяют пользователю подстроить графический интерфейс системы под свои вкусы и привычные возможности.

9.2. Каскадное расположение окон (Cascade)

Операция Cascade (Каскад) задает каскадное расположение окон. При этом окна располагаются последовательно, частично закрывая друг друга. У закрытых окон обычно видна лишь титульная строка с именем окна, повторяющим имя загруженного на исполнение документа. Окно, расположенное поверх остальных, видно полностью.

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

Рис. 9.2 Расположение окон после выполнения операции Cascade

102.jpg

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

9.3. Расположение окон по горизонтали (Horizontal)

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

нею документа Рис. 9.3 показывает вид экрана после выполнения этой операции. В нашем случае использованы оба варианта разделения экрана — и по горизонтали, и по вертикали.

Рис. 9.3 Расположение окон после выполнения операции Gorizontal

103.jpg

Равномерное расположение окон может оказаться наиболее удобным, если требуется скопировать блок из одного окна в другое. Однако здесь есть некоторая трудность: в уменьшенном по размеру окне видны не все блоки Поэтому не следует увлекаться одновременным выводом большого числа окон. Практика показывает, что чаще всего достаточно работать с двумя-тремя окнами И наконец, надо помнить, что в каждом окне возможен свой скроллинг изображений, поэтому несложно найти нужный объект, даже если он вначале не попал в видимую область окна.

9.4. Расположение окон по вертикали (Vertical)

Операция Vertical выводит на экран сразу все окна, причем они имеют одинаковый размер и расположены вертикально Размер окон тем меньше, чем больше окон выведено. В каждом окне видна лишь часть загруженного в него документа. Рис. 9.4 показывает вид экрана после выполнения этой операции

Строго горизонтальное или вертикальное расположение окон получается, если окон немного, например два или три. При большем числе окон деление экрана происходит как по горизонтали, так и по вертикали (см рис 9 5)

Выбор оптимального расположения окон зависит от характера работы с MathCAD Система позволяет перетаскивать мышью объекты из одного окна в другое Для такого перетаскивания достаточно выделить объект (или группу объектов — блок) и, удерживая нажатой левую клавишу мыши, перетащить объект (или блок) в другое окно. Для этой операции, облегчающей компоновку сложных документов, удобное расположение окон имеет важное значение.

Рис. 9.4 Расположение окон после выполнения операции Vertical

104.jpg

Рис. 9.5 Расположение большого числа окон после выполнения операции Vertical

105.jpg

9.5. Приведение в порядок пиктограмм (Arrange Icon)

Если перевести часть окон в неактивное состояние, то они будут представлены на экране своими пиктограммами. Эти пиктограммы можно перемещать куда угодно, что нередко ведет к "захламлению" экрана (см. рис. 9.6).

Операция Arrange Icon (Упорядочить значки) означает наведение порядка с пиктограммами. При ее выполнении пиктограммы размещаются строго в нижней части экрана, как показано на рис. 9.7.

Рис. 9.6 Экран,"захламленный" пиктограммами неактивных окон

106.jpg

Рис. 9.7 Экран после выполнения операции Arrange Icon

107.jpg

Если в результате ваших действий пиктограммы оказались разбросанными по текущему окну, применение этой операции позволит собрать их вместе в левом нижнем углу текущего окна системы Такая операция типична для всех программных систем, работающих в среде операционной системы 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-меню каждого окна. Вообще говоря, держать открытыми слишком много окон не рекомендуется в любом случае, так как это загромождает экран и уменьшает ресурсы ПК (прежде всего объем доступной памяти).

101.jpg

Изображение: 

102.jpg

Изображение: 

103.jpg

Изображение: 

104.jpg

Изображение: 

105.jpg

Изображение: 

106.jpg

Изображение: 

107.jpg

Изображение: 

Глава 10 Работа с информационными ресурсами

Глава 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 главного меню

111.jpg

Как видно из рис. 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 Окно справочной системы

112.jpg

русскоязычной версии операционной системы Windows 95 Само же содержание справок, естественно, дано на английском языке (см рис 10 3, например)

Рис. 10.3 Пример получения справки

113.jpg

Вторая панель окна справки (рис 104) дает доступ к индексному указателю справочной системы Достаточно в поле 1 ввести хотя бы часть наименования темы справки, как в поле 2 появится перечень ближайших ее разделов

После выбора нужного раздела его просмотр выполняется так, как это было описано выше Индексный указатель — мощное средство поиска нужных сведений

Рис. 10.4 Панель индексного указателя справочной системы

114.jpg

10.3. Построение и применение профессиональной справочной базы данных

Третья панель, Поиск, позволяет создать профессиональную справочную базу данных но системе MathCAD 7.0 PRO. Эта база данных дает возможность найти все разделы справочной системы, в которых упоминается заданное слово или хотя бы его начальная часть. Поскольку для базы данных нужна дополнительная память на диске, она при инсталляции обычно не создается. Открытие панели Поиск ведет к выводу окна установки профессиональной справочной базы данных о сисгеме, показанного на рис. 10.5.

Рис. 10.5 Окно создания профессиональной справочной базы данных

115.jpg

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

Рис. 10.6 Окно поиска темы профессиональной справочной базы данных

116.jpg

Найденная тема отображается подобно тому, как показано на рис 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 Окно центра ресурсов

117.jpg

Рис. 10.8 Титульная заставка центра ресурсов, относящаяся к шпаргалкам

118.jpg

Тут надо отметить, что шпаргалки содержат сотни интересных (как простейших, так и сложных) примеров на применение системы MathCAD в практике математических и научно-технических расчетов

Большой интерес (даже у наших пользователей) вызовут справочные таблицы Reference Tables Они заменяют обычные таблицы физико химических и иных свойств различных веществ В качестве примера на рис 10 10 показана периодическая система элементов с данными об одном из элементов

Большой материал по применению системы MathCAD содержится в трех встроенных в центр ресурсов электронных книгах

Рис. 10.9 Окно одной из шпаргалок

119.jpg

1110.jpg

Рис. 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 Окно поиска и загрузки файлов с электронными книгами

1111.jpg

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

1112.jpg

входящих в систему, и с ними можно работать так же, как со встроенными книгами Это обеспечивает обширные возможности расширения системы и ее адаптации к интересующим пользователя задачам и проблемам Начат выпуск и отдельных книг на русском языке Пример работы с такой книгой приведен на рис 1013

Рис. 10.13 Пример работы с русскоязычной книгой по экономическим расчетам

1113.jpg

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

Даже беглый обзор встроенных электронных книг и пакетов применений систем MathCAD требует большого места и выходит за рамки настоящей книги. Поэтому тут описываются лишь основные приемы работы с такими книгами.

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

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

10.7. Использование справочной системы (Using Help...)

Сама по себе справочная система MathCAD достаточно сложна, хотя работа с нею интуитивно предсказуема. Тем не менее благодаря операции Using Help... (Использование справки) можно получить справку об использовании самой справочной системы (рис. 10.14).

1114.jpg

Рис. 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

1115.jpg

Впрочем, кое-что любопытное в этой заставке есть; из нее, например, можно узнать, что MathSoft начала работу в 1986 г. и что разработка данного программного продукта выполнена уже в 1997 г.

111.jpg

Изображение: 

1110.jpg

Изображение: 

1111.jpg

Изображение: 

1112.jpg

Изображение: 

1113.jpg

Изображение: 

1114.jpg

Изображение: 

1115.jpg

Изображение: 

112.jpg

Изображение: 

113.jpg

Изображение: 

114.jpg

Изображение: 

115.jpg

Изображение: 

116.jpg

Изображение: 

117.jpg

Изображение: 

118.jpg

Изображение: 

119.jpg

Изображение: 

Глава 11 Входной язык системы MathCAD 7. 0

Глава 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 Особенности локального и глобального присваивания переменным их числовых значений

121.jpg

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

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

Переменные могут быть и размерными, т. е. характеризоваться не только своим значением, но и указанием физической величины, значение которой они хранят. Для присваивания значений таким переменным используется знак =. На рис. 11.2 представлены примеры работы с размерными переменными.

Проведение расчетов с размерными величинами и переменными особенно удобно при решении различных физических задач. При этом правильная

122.jpg

Рис. 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.

123.jpg

Рис. 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

Векторы могут быть двух типов: векторы-строки и векторы-столбцы. Например:

124.jpg

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

Матрицы

Матрица может рассматриваться как совокупность ряда векторов одинаковой длины, например:

125.jpg

Элементы матриц являются индексированными переменными, имена которых совпадают с именами матриц. Но в этом случае для каждой индексированной переменной указываются два индекса: один — для номера строки, другой — для номера столбца. Например, для указанной матрицы М средний элемент обозначается как М1,1, а последний как М;2,2

Для задания векторов и матриц можно воспользоваться операцией Matrix... (Матрицы...) в позиции Math (Математика) основного меню, нажав клавиши Ctrl+V или введя пиктограмму с изображением шаблона матрицы. Это вызывает вначале появление диалогового окна, в котором надо указать размерность матрицы, т. е. количество ее строк т и столбцов п. Для векторов один из этих параметров должен быть равен 1. При m=1 получим вектор-столбец, а при п=\ — вектор-строку. Матрица является двумерным массивом с числом элементов тхп. Элементы векторов и матриц помещаются между большими квадратными скобками.

Ввод элементов векторов и матриц

Для указания подстрочных индексов после имени переменной вводится знак открывающей квадратной скобки:

Ввод Изображение в окне

V3 [ 2 : V32 :=

Для элементов матрицы подстрочные индексы вводятся в круглых скобках с разделением их запятыми:

Ввод Изображение в окне редактирования

М [ ( 1, 2 ) : M1,2 : =

Индексы могут иметь только целочисленные значения Они могут начинаться с нуля или с целого числа, например с единицы, в соответствии со значением системной переменной ORIGIN

Задание векторов и матриц

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

Рис.11.4 Задание матриц без применения их шаблонов

126.jpg

Такой способ задания матриц очень напоминает применяемый в обычных программах метод, при котором значения элементам матриц присваиваются в двух вложенных циклах с управляющими переменными и г. Однако это сходство чисто внешнее, так как в нашем случае ранжированные переменные 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)

121.jpg

Изображение: 

122.jpg

Изображение: 

123.jpg

Изображение: 

124.jpg

Изображение: 

125.jpg

Изображение: 

126.jpg

Изображение: 

Глава 12 Оптимизация вычислений и программирование

Глава 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 Простейшие примеры применения символьных операций

131.jpg

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.

132.jpg

Рис. 12.2 Примеры символьных преобразований с помощью системы SmartMath

Как видно из рис. 12.1 и 12.2, блоки системы SmartMath имеют следующие отличительные свойства:

дают хорошее визуальное представление операций;

имеют шаблоны для задания параметров и опций;

обеспечивают работу с функциями пользователя;

обеспечивают передачу данных от формулы к формуле;

допускают расширение, позволяющее использовать сразу несколько директив;

имеют конструкцию, схожую с конструкцией программных блоков.

На рис. 12.3 показано еще несколько примеров применения символьных вычислений. Здесь особенно полезно присмотреться к технике применения разложения в ряд Тейлора и преобразования Лапласа.

133.jpg

Рис. 12.3 Примеры применения символьных вычислений

134.jpg

Рис. 12.4 Примеры на применение директив complex, assume и coeffs

Как нетрудно заметить, директива упрощения simplify не имеет параметров Директива разложения в ряд Тейлора series требует указания двух параметров задания начального значения переменной х и указания числа членов ряда Директивы преобразования Лапласа laplace и решения уравнений solve требуют одного параметра — указания имени переменной (в нашем случае х) С помощью директивы solve можно решать и системы уравнений — тогда ее параметр будет вектором неизвестных

Применение директив complex, assume и coeffs поясняет рис 124 Тут важно обратить внимание на двойственность применения ключевого слова assume Оно может применяться для отмены значений переменных (берется

135.jpg

Рис. 12.5 Символьные операции с матрицами

Рис. 12.6 Символьное вычисления интегралов

136.jpg

прямо из палитры символьных директив) и для указания статуса и ограничении переменных (берется из дополнительной палитры Modifiers)

Выполнение матричных операций в символьной форме особой специфики не имеет На рис 125 показаны основные операции с матрицами, включая их транспонирование и вычисления обратной матрицы и детерминанта матрицы. Для наглядности взята матрица небольшого (2х2) порядка

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

Итак, мы рассмотрели большую часть символьных директив С оставшимися читатель может поработать самостоятельно, тем более что правила их применения уже были описаны

12.3. Операторы вычисления пределов функций

Для вычисления пределов функций начиная с версии MathCAD PLUS 5 0 в систему введен символьный оператор limit Помимо ввода с наборной панели Calculus Pallete его в трех формах можно ввести нажатием следующих комбинаций клавиш

Ctrl+L — ввод шаблона оператора вычисления предела функции при х, стремящемся к заданному значению,

Ctrl+A — ввод шаблона вычисления предела функции слева от заданной точки, Ctrl+B — ввод шаблона вычисления предела функции справа от заданной точки

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

137.jpg

Рис. 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 Задание оператора пользователя с выбором имени из набора знаков

138.jpg

После того как оператор задан, его можно использовать как функцию и как оператор Примеры показаны на рис 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 Задание программных блоков

139.jpg

Как видно из рис. 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, на котором показана часть этих возможностей.

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

1310.jpg

Рис. 12.10 Примеры задания программных блоков

команда Add Line, добавляющая в модуль дополнительную вертикальную черту для подмодуля.

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

Обычно модулю присваивается имя со списком переменных, после которого идет знак присваивания:=. Переменные в списке являются локальными,

1311.jpg

Рис. 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 показан документ, в котором программный модуль вычисляет коэффициенты Фурье для заданной функции — пилообразного импульса (его можно менять).

1312.jpg

Рис. 12.12 Вычисление коэффициентов А и В разложения функции в ряд Фурье

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

На рис. 12.13 показаны векторы коэффициентов, приведена формула гармонического синтеза исходной функции по ее гармоническому ряду и на графике проведено сопоставление исходной функции с ее представлением рядом Фурье с ограниченным числом гармоник N

1313.jpg

Рис. 12.13 Реализация гармонического синтеза

Еще один пример применения программного модуля для задания точек некоторой функции в трехмерном пространстве показан на рис 12 14 Там же представлено построение этих точек внутри параллелепипеда

Рис. 12.14 Применение программного модуля для построения точек заданной функции в пространстве

1314.jpg

Разумеется, подобные задачи могут в системе MathCAD решаться и без использования в явном виде программных средств Однако эти средства облегчают решение сложных задач, особенно когда имеется описание их программной реализации на каком-либо языке программирования Тогда несложно перевести реализацию решения задачи с этого языка на язык программирования системы MathCAD

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

Много интересного и поучительного можно найти в примерах задания и применения программных модулей раздела QuickSheet (Шпаргалки), доступного из центра ресурсов системы. Нельзя не отметить, что характер задания программных модулей в MathCAD весьма удачен: модули прекрасно вписываются в документы, выглядят просто и естественно.

Следует также отметить, что система MathCAD PLUS 7.0 допускает расширение путем включения в нее новых функций, написанных на языке Си или Си++. Впрочем, возможности системы настолько широки, что трудно себе представить необходимость в таком кардинальном шаге. Это расширение скорее может оказаться полезным для разработчиков системы, чем для подавляющего большинства ее пользователей.

Интересующиеся этой возможностью могут воспользоваться описанием ее в [14].

12.7. Погрешности вычислений и сообщения об ошибках

Большинство вычислений в системе реализовано с помощью численных методов, принципиально имеющих конечную погрешность вычислений. Так, для вычислений производной используется конечно-разностный метод с изменением шага между узлами и его подстройкой под заданную погрешность. Интегралы вычисляются методом Симпсона с заданной погрешностью, а для вычисления корней функций применяется метод секущих.

Для всех методов погрешность вычислений задается с помощью специальной системной переменной TOL. Хотя истинная погрешность может

1315.jpg

Рис. 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;

131.jpg

Изображение: 

1310.jpg

Изображение: 

1311.jpg

Изображение: 

1312.jpg

Изображение: 

1313.jpg

Изображение: 

1314.jpg

Изображение: 

1315.jpg

Изображение: 

132.jpg

Изображение: 

133.jpg

Изображение: 

134.jpg

Изображение: 

135.jpg

Изображение: 

136.jpg

Изображение: 

137.jpg

Изображение: 

138.jpg

Изображение: 

139.jpg

Изображение: 

Глава 13 Интегратор приложений MathConnex

Глава 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.

141.jpg

Рис. 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 появляется панель палитр математических символов.

142.jpg

Рис.13.2 Пример вывода и применения блока MathCAD

Входы и выходы блоков в общем случае соединяются соответствующим образом с помощью активизации их курсором мыши, превращающимся в кисть руки, держащей карандаш На рис 13 3 показан более сложный случай подготовки документа из четырех блоков со связями между ними

Рис. 13.3 Пример построения блок-схемы из четырех блоков

143.jpg

Блок Input0 вводит число 123 Следующий б ток системы MathCAD Функция in0 возвращает значение числа, которое задает блок Input0 Это обеспечивает интерфейс связи между блоком ввода и блоком вычислений системы MathCAD. Поскольку данный пример чисто иллюстративный, то в математическом блоке задано суммирование числа из блока ввода с числом 57 Результат передается на выход блока с помощью интерфейсной функции out0 С помощью блока Инспектора можно наблюдать результат вычислений, а блок останова останавливает их

Для пуска имитации достаточно активизировать кнопку пуска (ее пиктограмма имеет вид зеленого треугольника) Освоив пару-другую подобных примеров, можно научиться составлять свои блок-схемы, причем не только линейные, но и со сложной разветвленной структурой

В функциональную схему имитируемых устройств могут входить блоки с описанием их довольно сложных функций на языке системы MathConnex — Connex Script Ею описание дано в конце этой главы

13.4. Редактирование блоков и документов системы MathConnex

В панели Project (Проект) Исследователя в левой части экрана виден полный перечень блоков, вставленных в окно документов Установив курсор мыши на любую позицию этого перечня и нажав быстро левую клавишу мыши, можно выделить заштрихованной рамкой соответствующий блок в окне документа Уцепившись курсором мыши за эту рамку, б ток легко переместить в любое место окна документа Это же можно сделать, указав блок курсором мыши и прямо в окне документов. Кроме того, используя шаблоны в виде маленьких темных прямоугольников по сторонам рамки, блок растягивается по вертикали, по горизонтали и по диагонали.

Двойной щелчок левой клавишей мыши позволяет ввести режим редактирования блока. При этом автоматически запускается создавшее блок приложение. На рис. 13.4 показан пример редактирования в блоке MathCAD, в котором число 57 изменено на число 456. Изменение результата в Инспекторе произойдет только после запуска имитации. Окно документа при редактировании приобретает элементы интерфейса, присущие приложению, в котором создается редактируемый блок (см. рис. 13.4).

144.jpg

Рис. 13.4 Пример редактирования в блоке MathCAD

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

Для редактирования блоков полезно также контекстно-зависимое меню, появляющееся при нажатии правой клавиши мыши. Оно содержит различные операции, которые относятся к выделенному блоку. Это могут быть операции стирания блока, редактирования его свойств и т. д.

Одной из важных является операция редактирования свойств Properties. Она выводит диалоговое окно, показанное на рис. 13.5 для блока Input0. Такое окно позволяет (с помощью панели General) установить номер блока и задать к нему текстовый комментарий. Заметим, что MathConnex автоматически проставляет номера блоков по мере их задания, что не всегда удобно. В панели Display можно задать параметры отображения чисел в блоке.

При отладке документов полезен режим пошаговой работы. При этом на каждом шаге исполняется один блок документа. Обычно исполнение блока заметно лишь по изменению входящих в него данных, результатов вычислений и графических построений. Однако включив режим подсветки Highlight Components, можно наблюдать выделение исполняемого блока (компонента) двойной рамкой с ярко-зеленой окраской (см. рис.13. 6).

Рис. 13.5 Окно MathConnex с окном установки свойств блока Input0

145.jpg

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

146.jpg

Рис. 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 можно

147.jpg

Рис. 13.7 Загрузка системы MatLAB из MathConnex

наблюдать появление характерной заставки пакета MatLAB 4.2, что показано на рис. 13.7.

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

Рис. 13.8 Пример работы с документом, использующим функции матричной системы MatLAB 4.2

148.jpg

149.jpg

Рис. 13.9 Окно редактора MatLAB, вызванное из документа MathConnex

Данный документ иллюстрирует технику простейшей анимации. Показанная на рис. 13.8 фигура вращается, правда, с черепашьей скоростью (несмотря на просмотр на ПК Pentium 166 ММХ). Это лишний раз свидетельствует о некоторой медлительности имитации сложных процессов с помощью системы MathConnex. Но тут ничего не поделаешь: чем сложнее система имитации, тем медленнее она в работе!

Если (после остановки вычислений) выделить блок с матрицей вращения системы MatLAB и дважды щелкнуть левой клавишей мыши, то можно вызвать окно редактора MatLAB с записанной в нем функцией. Это иллюстрирует рис. 13.9. Теперь в этом окне можно редактировать документы MatLAB и входящие в них функции и математические выражения.

Этот пример наглядно показывает полный доступ к ресурсам системы MatLAB, который обеспечивается интегратором приложений MathConnex.

13.6. Примеры применения системы MathConnex

Система MathConnex поставляется с рядом примеров ее применения, соответствующие файлы которых расположены в папке Sample. Рассмотрим некоторые из этих примеров, дающие хорошее представление о возможностях системы MathConnex и технике ее применения.

На рис. 13.10 дан один из самых простых примеров: беря данные из таблицы (координаты х и у точек), документ выполняет полиномиальную регрессию, вычисляет коэффициент полинома и коэффициент корреляции.

1410.jpg

Рис. 13.10 Пример проведения полиномиальной регрессии

Активизировав блок системы MathCAD, можно просмотреть документ, выполняющий регрессию, и входящий в него график функции регрессии и узловых точек (см. рис. 13.11).

На рис. 13.12 показан пример построения в параметрической форме объемной спирали. Матричные преобразования и построение графика здесь обеспечиваются с помощью блоков системы MathCAD. Построение кривой (довольно медленное) можно видеть в развитии.

1411.jpg

Рис. 13.11 Часть документа системы MathCAD, вызванная из документа MathConnex

1412.jpg

Рис. 13.12 Пример построения пространственной кривой

На рис. 13.13 приведен пример синтеза сложных колебаний и их спектрального анализа с применением метода быстрого преобразования Фурье. И хотя детали документа здесь разглядеть трудно, но, запустив его на своем ПК, вполне можно будет разобраться с этим достаточно сложным примером

Этот пример дает представление о создании с помощью MathConnex виртуальной (т. е. кажущейся) физической лаборатории, оснащенной самыми современными приборами, например осциллографом и анализатором спектра (последний из-за его высокой цены встретишь далеко не во всякой лаборатории).

Рис. 13.13 Синтез сложных колебаний и их спектральный анализ

1413.jpg

Наконец, на рис. 13.14 дан хотя и простой пример, но с применением программной системы Visio, предназначенной для технических графических построений. С ее помощью выполнен показанный в документе рисунок RC-цепи, переходной процесс в которой имитируется.

Рис. 13.14 Пример имитации документа, созданного с применением системы Visio

1414.jpg

Ознакомившись с другими примерами применения 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

1415.jpg

После этих операций в текст документа редактора Word будет включен значок математической системы MathCAD. Это показано на рис. 13.16.

Указав на этот значок курсором мыши и дважды щелкнув ее левой клавишей, можно вызвать систему MathCAD и воспользоваться ее возможностями

Рис. 13.16 Экран редактора Word со значком MathCAD Document в документе

1416.jpg

для подготовки нужного математического выражения или графика Это иллюстрирует рис 13 17 на примере задания интеграла.

1417.jpg

Рис. 13.17 Пример входа в окно MathCAD и начало задания интеграла

Завершив ввод интеграла и вычисление его символьного значения, можно вернуться в среду Word закрыв окно MathCAD (см рис 13 18) Все это вы можете сделать, не покидая документа редактора Word

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

Удобным средством для подготовки сложных документов является вставка объекта в кадр. Рис. 13.20 поясняет вставку в кадр введенной формулы.

Рис. 13.18 Завершение вставки формулы в документ редактора Word

1418.jpg

В отличие от простой вставки вставка в кадр обеспечивает обтекание текстом введенной формулы.

Рис. 13.19 Выделенная формула, которую можно перемещать и растягивать

1419.jpg

1420.jpg

Рис. 13.20 Пример вставки формулы в кадр и обтекания кадра текстом

1421.jpg

Рис. 13.21 Вызов окна MathCAD для редактирования формулы

Таким образом, вставка в текстовый процессор объектов из математической системы MathCAD дает полноценный доступ ко всем возможностям и средствам последней. Как лучше поступать: работать в Word, вставляя объекты из MathCAD, или, работая в системе MathCAD, вставлять в нее объекты из Word, — каждый пользователь должен решать самостоятельно.

Разумеется, таким же образом можно связать друг с другом MathCAD и другие, не упоминавшиеся выше системы. Необходимо лишь одно — возможность установления объектной связи. Большинство приложений, разработанных для работы в среде операционной системы Windows 95/97, такой особенностью обладают. Это открывает (даже для рядового пользователя)

Рис.13.22 Пример вставки в документ рисунка из системы MathCAD

1422.jpg

возможности создания сложных программных систем, решающих самые разнообразные и сложные математические задачи.

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.

141.jpg

Изображение: 

1410.jpg

Изображение: 

1411.jpg

Изображение: 

1412.jpg

Изображение: 

1413.jpg

Изображение: 

1414.jpg

Изображение: 

1415.jpg

Изображение: 

1416.jpg

Изображение: 

1417.jpg

Изображение: 

1418.jpg

Изображение: 

1419.jpg

Изображение: 

142.jpg

Изображение: 

1420.jpg

Изображение: 

1421.jpg

Изображение: 

1422.jpg

Изображение: 

143.jpg

Изображение: 

144.jpg

Изображение: 

145.jpg

Изображение: 

146.jpg

Изображение: 

147.jpg

Изображение: 

148.jpg

Изображение: 

149.jpg

Изображение: 

Глава 14   Примеры применения системы

Глава 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.

151.jpg

Рис. 14.1 Построение сферы

Используя различные форматы 3D-графиков, можно выполнить рисунок сферы в различных стилях, в том числе с цветной или черно-белой окраской. Однако в таком случае каркасное построение с применением алгоритма удаления невидимых линий дает, пожалуй, наиболее наглядное представление о характере этой простой объемной фигуры. На рис. 14.1 представлено два варианта построения сферы с применением различной функциональной окраски.

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

Построение фигуры вращением линии вокруг оси Х

Интересные объемные фигуры можно получить, вращая некоторую кривую вокруг той или иной оси. При этом необходимо обеспечить пересчет координат всех узловых точек фигуры по известным из геометрии формулам. На рис. 14.2 показано построение такой фигуры вращением линии, заданной функцией f(x), вокруг оси X.

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

Построение фигуры вращением линии вокруг оси Y

Таким же способом можно построить фигуру, полученную вращением исходной кривой вокруг оси Y. Это демонстрирует документ, показанный на рис. 14.3.

Чтобы показать возможности задания различного стиля рисунков, в нашем случае фигура построена с удалением невидимых линий каркаса и с при-

152.jpg

Рис. 14.2 Построение фигуры вращением линии вокруг осиХ

153.jpg

Рис. 14.3 Построение фигуры вращением линии вокруг оси Y

менением функциональной окраски. Нетрудно заметить, что это делает фигуру очень наглядной.

Построение графика объемной спирали

3D Scatter Plot — вид трехмерных графиков, особенно удобный для представления пространственного расположения множества мелких объектов, условно называемых точками. На рис. 14.4 показано применение этого графика для построения 100 точек, лежащих на пространственной спирали, напоминающей растянутую пружину.

Для каждой точки в этом случае необходимо располагать тремя координатами — X, Y и Z. Их совокупность образует три одноименных вектора. Вви-

154.jpg

Рис. 14.4 Построение графика вида 3D Scatter Plot для точек пространственной спирали

ду простоты алгоритма построения необходимости в более подробном его описании нет. Заметим лишь, что число точек N можно менять.

Построение пространственной фигуры — узлов, образованных толстыми "канатами"

О больших возможностях графики MathCAD PLUS 7.0 PRO свидетельствует пример, приведенный на рис. 14.5. Он же иллюстрирует применение типовых матричных функций для описания и пространственного преобразования сложной трехмерной фигуры — узлов, образованных толстыми "канатами".

155.jpg

Рис. 14.5 Построение фигуры — узлов, образованных толстыми "канатами" (начало документа)

Сама фигура, построенная по алгоритму, представленному на рис 145, изображена на рис 146

156.jpg

Рис. 14.6 Вид фигуры (конец документа)

Изменяя параметр К, можно получить множество других объемных фигур Функциональная окраска придает фигуре весьма реалистичный вид Этот пример наглядно показывает, что по возможностям графики система MathCAD 7 О PRO уже приближается к системе Mathematica 222, лидеру среди систем символьной математики для персональных компьютеров

14.3. Финансово-экономические расчеты

Финансово-экономические расчеты со сложными процентами

В наше время перехода к рыночным отношениям финансово-экономические расчеты могут интересовать многих читателей настоящей книги MathCAD не содержит специальных функций для проведения таких расчетов Однако все они легко выполняются встроенными в систему средствами

Документ на рис 147 иллюстрирует наиболее распространенные расчеты с единичным вкладом Все они основаны на применении сложных процентов, и их не так давно (в период государственной монополии на банковские расче ты и стабильных процентов годовых) можно было использовать для оценки финансовой ситуации с нашими вкладами на сберкнижках

Разумеется, вы можете подставить в них те параметры, которые соответствуют текущему положению дел в нашей рыночной экономике

Финансовые операции с регулярными вкладами

Если ваша заработная плата превышает прожиточный минимум, простой жи тейский опыт подсказывает, что лучше не копить деньги "в чулке", а периоди чески (N раз в год) относить их в Сбербанк Документ на рис 148 показывает возможные ситуации при операциях с ежегодными регулярными вкладами

157.jpg

Рис. 14.7 Примеры расчетов с единичными вкладами и сложными процентами

158.jpg

Рис. 14.8 Примеры расчетов с регулярными вкладами

При таких операциях, разумеется, не имеет значения, какие деньги вы вкладываете (рубли, марки или доллары). Главное, чтобы это были какие-то одни денежные единицы

Финансовые операции с начальным и регулярными вкладами

Если вы имели возможность внести некоторый начальный вклад и затем намерены регулярно пополнять его ежегодно N раз, расчеты придется вести по несколько иным формулам. Они приведены в документе на рис. 14.9.

Здесь особый интерес вызывает последний пример — вычисление процента годовых.

Рис. 14.9 Операции с начальным и регулярными ежегодными вкладами

159.jpg

14.4. Реализация численных методов

Быстрые операции с полиномами-векторами

В математических расчетах широко применяются степенные многочлены — полиномы вида

Р(х) = аn xn+ an 1 хn 1+ + а1 х1 + а0

Ценность полиномов заключается в том, что они могут достаточно точно аппроксимировать многие функции (особенно непрерывные) единообразным способом При этом, поскольку полиномы содержат суммы простых членов

1510.jpg

Рис. 14.10 Быстрые операции с полиномами

вида an 1 xn 1, легко аналитически вычислять производные полиномов и интегралы с подынтегральной функцией в виде многочленов.

Коэффициенты полинома удобно задать как элементы вектора а. Тогда их запись (как элементов вектора) совпадает с общепринятой. При этом помимо своих коэффициентов полином характеризуется порядком п. В документе на рис. 14.10 представлены задание полинома Р(х) и примеры выполнения ряда операций с полиномом: вычисление значений полинома по заданному аргументу x, вычисление производной полинома Р'(х) и определенного интеграла с полиномом Р(х) в виде подынтегральной функции.

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

Интегрирование таблично заданных функций

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

Документ на рис. 14.11 иллюстрирует три способа вычисления определенного интеграла при табличном задании подынтегральной функции. Первые два способа (методом трапеций и Симпсона) используют довольно хорошо известные формулы интегрирования табличных данных. Третий способ использует встроенный оператор вычисления интеграла. При этом таблично заданная функция интерполируется линейной зависимостью или набором сплайновых функций (полиномов третьей степени).

1511.jpg

Рис. 14.11 Интегрирование табличных данных

В качестве исходных данных взяты ординаты квадратичной параболы, что позволяет вычислить интеграл без этих ухищрений. Такое вычисление представлено для контроля в конце документа. Нетрудно заметить, что лишь интегрирование методом Симпсона и интегрирование со сплайн-интерполяцией дают полное совпадение с прямым интегрированием (не стоит забывать, что установленный формат цифровых данных выводит результат только с шестью значащими цифрами после десятичной точки).

Поиск минимума функции Розенброка

С помощью функции minerr возможен поиск экстремума и функций ряда переменных. Типичной тестовой функцией двух переменных является функция Розенброка, обычно применяемая для тестирования программ минимизации функций ряда переменных. На рис. 14.12 показан поиск минимума функции Розенброка с применением функции minerr.

Рис. 14.12 Поиск минимума тестовой функции Розенброка

1512.jpg

1513.jpg

Рис. 14.13 График функции Розенброка (окончание документа, представленного на рис. 14.12)

Поиск задается вычислительным блоком, открываемым словом Given. Фактически решается система уравнений. Два уравнения после слова Given приближенно задают условия минимума, третье уравнение (с функцией minегг) отыскивает решение, в максимальной степени удовлетворяющее заданным условиям минимума.

Функция Розенброка имеет очевидные значения х=у=\ в точке минимума. Графическое представление функции напоминает овраг (см. рис. 14.13), что затрудняет поиск минимума рядом простых методов.

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

Интерполяция по общей формуле Лагранжа

В этом пакете рассматриваются функции одной переменной вида у(х), как правило, заданные в табличном виде, т. е. рядом значений х и соответствующих им значений у. Именно так обычно задаются данные эксперимента, получаемые на различных физических или электронных измерительных установках.

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

Одной из самых распространенных задач такого рода является ингерпо-ляция таблично заданных функций, т. е. вычисление их значений в промежутках между узловыми точками. В математической литературе общепринято представление многих специальных функций в виде математических таблиц [14], ориентированных на интерполяцию по заданному числу узловых точек (обычно от 2 до 6).

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

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

На рис. 14.14 представлен документ, задающий обобщенную формулу интерполяции методом Лагранжа. Эта формула синтезирует полином Лагранжа, используя два вектора: с координатами xi и yi узловых точек. Преимущества такого подхода в том, что число узловых точек и их расположение может быть любым (в том числе неравномерным), а для интерполяции используется единая интерполирующая формула f(x), к сожалению, довольно сложная.

При интерполяции полиномом Лагранжа степень полинома п однозначно связана с числом узловых точек. Она на единицу меньше этого числа Значения ординат интерполирующей функции в узловых точках совпадают со зна-

Рис. 14.14 Интерполяция табличных данных по формуле Лагранжа

1514.jpg

чениями ординат узловых точек, поэтому график интерполирующей функции f(x) точно проходит через эти точки. К сожалению, при высокой степени полинома (более 5—6) погрешность вычислений его значений заметно возрастает, поэтому выбор п выше 6 на практике нецелесообразен. А это означает, что функция у(х) должна быть представлена небольшим числом достаточно точных значений.

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

Линейное сглаживание по пяти точкам

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

MathCAD 7 О PRO имеет встроенную функцию сглаживания Однако полезно проверить работу известных алгоритмов сглаживания по ряду точек. Так, линейное сглаживание по пяти точкам демонстрируег документ, показанный на рис. 14.15. На нем вначале задан вектор параболической зависимости, на которую наложены сильные случайные компоненты, создаваемые генератором случайных чисел. Далее заданы пять формул сглаживания: по две для крайних двух точек слева и справа и одна для других (эта формула просто находит среднее значение для центральной точки и окружающих ее четырех ближайших точек). Фактически кривая сглаживания состоит из ряда отрезков прямых линий, откуда и название — линейное сглаживание.

На приведенном рисунке видно, что сглаженная кривая проходит внутри облака точек и неплохо вписывается в него. При этом число сглаженных точек равно числу исходных точек (в нашем случае их 50) Разумеется, при таком большом числе сглаженных точек эффективность сглаживания оказывается заметно ниже, чем, например, при проведении регрессии с большим числом исходных точек

1515.jpg

Рис. 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.

1516.jpg

Рис. 14.16 Начало документа, иллюстрирующего решение дифференциального уравнения методом Рунге — Кутта

Документ на рис. 14.16 состоит из двух частей. Первая часть (она и показана на рисунке) содержит ввод исходных данных и вывод графика решения. Для решения надо задать функцию f(x,y), начальное (startx) и конечное (endx) значения х, число точек решения п и начальное значение (inity) переменной у. При построении графика функции указываются нижний (L) и верхний (U) пределы изменения искомой зависимости у(х).

Вторая часть документа (см. рис. 14.17) в действительности располагается справа от первой части и размещается в обычно невидимой части документа Поэтому пользователь избавлен от созерцания тривиальных или просто не интересующих его математических формул и может сосредоточить внимание лишь на вводе исходных данных и функции f(x,y) и выводе результатов

Рис. 14.17 Конец документа, иллюстрирующего решение дифференциального уравнения методом Рунге Кутта

1517.jpg

Рассматривая рис 14 17, нетрудно сделать вывод о наглядности реализа ции метода Рунге — Кутта По существу приведенные уравнения повторяют известные формулы этого метода часто встречающиеся в учебной литературе по численным методам решения дифференциальных уравнений

14.5. Спектральный синтез и анализ

Гармонический синтез меандра

Одним из фундаментальных положений математики, ранее казавшимся абст рактным а затем нашедшим широчайшее практическое применение, является возможность описания любой периодической функции, имеющей конечное число разрывов и непрерывность производных между ними, с помощью три гонометрического ряда Фурье [29, 30]

1518.jpg

где k — порядковый номер гармоники, f1 — частота колебания Этот ряд со держит бесконечное число косинусных и синусных составляющих — гармо ник, причем амплитуды этих составляющих а^ и Ь^ являются коэффициента ми Фурье, определяемыми приводимыми несколько позднее интегральными выражениями

Приведенный ряд содержит бесконечное число членов и при таком пред ставлении оказывается бесполезным, поскольку время вычисления в этом случае также равно бесконечности К счастью, амплитуды гармоник для ре альных зависимостей y(t) довольно быстро уменьшаются по мере роста номеpa гармоники k. Поэтому на практике обычно приходится иметь дело с ограниченными по числу гармоник рядами Фурье.

Помимо упомянутой формы ряд Фурье можно представить в виде:

1519.jpg

где амплитуда гармоник М^ и их фаза (р^ определяются выражениями:

1520.jpg

Преимущество ряда в этой форме в том, что для вычисления каждого члена ряда нужно лишь один раз обращаться к довольно медленному вычислению тригонометрической функции. В дальнейшем будут приведены формулы, позволяющие вычислять коэффициенты Фурье (либо амплитуды и фазы гармоник) для любой функции y(t). Это является задачей спектрального анализа. Здесь же мы рассмотрим обратную задачу — синтеза зависимости y(t) путем вычисления ряда Фурье с ограниченным числом членов.

Теория спектрального анализа и синтеза хорошо развита, и для многих зависимостей y(t) заведомо известны значения коэффициентов Фурье или законы изменения (с частотой или номером гармоники) амплитуд и фаз гармоник. Это позволяет синтезировать наиболее распространенные зависимости y(t).

1521.jpg

Рис. 14.18 Гармонический синтез меандра

Документ, представленный на рис. 14.18, реализует синтез периодических прямоугольных импульсов со скважностью, равной 2 (меандра). Ряд Фурье для таких импульсов содержит только синусные члены, причем лишь с нечетными k. Это упрощает синтез, который в документе реализован для 3, 7 и 15 гармоник.

Меандр — не самая удачная для синтеза зависимость, поскольку он содержит резкие скачки. Для не очень сведущего в математике пользователя

удивительно, что такого рода зависимость вообще синтезируется из синусоид, которые представляют собою гладкие функции без всяких скачков Естественно, что для получения скачков нужно брать очень большое число гармоник Тем не менее уже при 15 гармониках синтезированный сигнал напоминает меандр и отличается от него конечным временем перепада и характерной волнистостью Она усиливается после быстрых перепадов и является проявлением так называемого эффекта Гиббса [30].

Эффект Гиббса, к сожалению, невозможно устранить (и даже ослабить) лишь увеличением числа гармоник при синтезе В этом случае просто возрастает частота волнообразных колебаний, но их относительная амплитуда меняется незначительно — она доходит до 18% от амплитуды синтезируемых колебаний.

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

Гармонический синтез пилообразных колебаний

В литературе можно найти множество примеров разложения в ряд Фурье самых разнообразных зависимостей y(t) Используя приведенные для них значения коэффициентов Фурье, можно синтезировать самые разнообразные за висимости (сигналы) Еще одним примером может служить показанный на рис. 14 19 гармонический синтез треугольных колебаний

1522.jpg

Рис. 14.19 Гармонический синтез треугольных колебаний

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

Однако существует большое количество теоретических методов анализа сигналов и практических устройств, основанных именно на спектральном подходе. Примером могут служить частотные фильтры и даже целые радиотехнические системы. При их анализе сигнал y(t) часто приходится разлагать в ряд Фурье для проведения в дальнейшем операций с гармониками. Имея сигнал y(t) уже в виде гармоник, можно заметно сократить время обработки сигнала и вообще убрать этап задания функции в виде временной зависимости. Во многих странах до сих пор выпускаются синтезаторы сложных колебаний, основанные на суммировании их гармонических составляющих с разными амплитудой и фазой.

Спектральный анализ методом Берга

Для некоторых простых зависимостей y(t) амплитуды гармоник могут выражаться аналитически. Примером служат отрезки синусоиды, получаемые выделением только верхней ее части. На практике такие колебания широко используются в радиотехнике, где обрезание нижней части синусоиды обусловлено работой электронных приборов (например, ламп или транзисторов) в нелинейном режиме.

Доля периода синусоиды, используемой для анализа гармоник, оценивается углом отсечки 9 (далее он измеряется в радианах). Он, к примеру, равен к, если обрезается нижняя половина синусоиды. Удобно вычислять относительную амплитуду k-тл гармоники (по отношению к усеченной амплитуде синусоидального импульса). Этот параметр для разных k впервые был вычислен Бергом.

1523.jpg

Рис. 14.20 Спектральный анализ методом Берга

В документе на рис. 14.20 представлены формулы для вычисления коэффициентов Берга о.О (относительная постоянная составляющая сигнала), а.1 (относительная амплитуда первой гармоники) и сот (относительная амплитуда п-й гармоники). Коэффициенты Берга являются функциями угла отсечки.

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

Нетрудно заметить существование максимумов у этих зависимостей. Например, максимальная амплитуда первой гармоники будет достигнута при угле отсечки 120 градусов, второй гармоники — 60 градусов и т. д. Знать эти углы полезно при проектировании умножителей частоты (например, удвоителей или устроителей), работа которых основана на фильтрации одной из высших гармоник.

Спектральный анализ прямоугольного импульса с применением БПФ

Встроенные в систему MathCAD средства быстрого преобразования Фурье (БПФ) существенно упрощают процедуру приближенного спектрального анализа. БПФ — быстрый алгоритм переноса сведений о функции, заданной 2" отсчетами во временной области, в частотную область. Если речь идет о спектральном анализе функции y(t), ее нужно задавать действительными отсчетами и использовать функцию fft(V), где V — вектор, элементы которого хранят отсчеты функции y(t). Результатом будет также вектор А с комплексными элементами — отсчетами в частотной области (их вдвое меньше, чем отсчетов во временной области). Фактически действительная и мнимая части этого вектора есть коэффициенты Фурье а^ и Ъ^ что существенно упрощает их получение.

Документ на рис. 14.21 поясняет проведение спектрального анализа с применением функции fft прямого БПФ. В начале документа (левый верхний угол) задан вектор с восемью единичными отсчетами и с остальными (всего их 32) — нулевыми. Затем вычислен вектор А — результат БПФ.

Рис. 14.21 Спектральный анализ прямоугольного импульса с применением БПФ (начало документа)

1524.jpg

В заключение (см. рис. 14.22) вычислены амплитуды гармоник и их фазы для представления импульса рядом Фурье. Завершает документ построение графиков амплитуд (модулей) и фаз первых десяти гармоник.

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

151.jpg

Изображение: 

1510.jpg

Изображение: 

1511.jpg

Изображение: 

1512.jpg

Изображение: 

1513.jpg

Изображение: 

1514.jpg

Изображение: 

1515.jpg

Изображение: 

1516.jpg

Изображение: 

1517.jpg

Изображение: 

152.jpg

Изображение: 

1520.jpg

Изображение: 

1521.jpg

Изображение: 

1522.jpg

Изображение: 

1523.jpg

Изображение: 

1524.jpg

Изображение: 

153.jpg

Изображение: 

154.jpg

Изображение: 

155.jpg

Изображение: 

156.jpg

Изображение: 

157.jpg

Изображение: 

158.jpg

Изображение: 

159.jpg

Изображение: 

Глава 15 MathCAD 7. 0 PRO в Internet

Глава 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).

161.jpg

Рис. 15.1 Основная страница браузера Microsoft Internet Explorer

После того как основная страница браузера (она может быть разной у разных провайдеров сети Internet) будет выведена на экран, надо в поле адресов набрать адрес фирмы MathSoft, который был приведен выше. Нажав клавишу Enter, можно через короткий промежуток времени увидеть основную с границу фирмы MathSoft, показанную на рис. 15.2. На этой странице, помимо рекламного изображения новой системы Fibonachi фирмы MathSoft, видны пиктограммы гипермедиа-ссылок и главное меню окна, также выполненное в виде этих ссылок. Активизируя их, можно путешествовать по довольно обширной странице фирмы MathSoft.

162.jpg

Рис. 15.2 Основная Web-страница фирмы MathSoft

Кроме кратких описаний программных продуктов, выпускаемых Mdth-Soft ее страница содержит полезные утилиты для модернизации программных продуктов, сотни файлов, содержащих информацию о применении этих продуктов, последние новости о работе фирмы и множество иных сведений К примеру, можно получить файлы расширения библиотек MathCAD 7 О PRO со многими новыми функциями, а также сервисные пакеты по улучшению этой системы Некоторые инструменты предоставляются бесплатно, другие — за довольно скромную плату

Особое место на странице занимает раздел Collaboratory (совместная работа), назначение которого заключается в объединении усилий различных пользователей в работе над совместными проектами Страница этого раздела

163.jpg

Рис. 15.3 Начало страницы Collaboratory

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

Дойдя до конца страницы, можно найти гипермедиа-ссылку, открывающую доступ к тематическому перечню совместных проектов (см. рис. 15.4.) Этот перечень содержит такие темы, как математика, физика, химия, электричество, электроника и др. и фактически является перечнем имен папок, в которых хранятся файлы документов системы MathCAD. Ознакомившись с различными проектами, можно решить, в каких из них стоит принять участие или какой новый проект предложить для совместной разработки.

164.jpg

Рис. 15.4 Тематический перечень совместных проектов

165.jpg

Рис. 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 — получение справки по установкам.

166.jpg

Рис. 15.6 Окно установок для работы с Internet

нажав клавишу ОК, можно перейти к установке конфигурации системы. Окно этой установки показано на рис. 15.7. В этом окне можно задать тип конфигурации системы, т. е. выбрать, с каким конкретно программным обеспечением будет происходить работа в Internet (в нашем случае это приложение Outlook из пакета Microsoft Office).

167.jpg

Рис. 15.7 Окно установки конфигурации

Обычно серверы Internet относятся к типу HTTP. Однако возможна работа и с давно известными серверами типа FTP и GOPHER. Например, файловые серверы FTP удобны для перекачки больших файлов. Многие

Рис. 15.8 Организация тестового сеанса связи по электронной почте

168.jpg

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

Упомянутое приложение Outlook работает с типовой программой организации электронной почты — Microsoft Exchange. Завершив установку, следует провести тестовый сеанс связи по электронной почте (см. рис. 15.8). При этом программа Microsoft Exchange загружается автоматически.

Для проверки связи по электронной почте не обязательно сразу выходить на "почтовый ящик" фирмы MathSoft. Проще опробовать связь с кем-либо из своих знакомых, чей адрес электронной почты вам хорошо известен. Для проведения сеанса связи надо нажать большую кнопку с изображением желтого конверта в конце строк с адресами (или аналогичную кнопку меньших размеров в начале панели инструментов). На экране появится небольшое окно установки связи (см. рис. 15.9), в нем можно проследить за этапом набора номера абонента (сам номер, впрочем, не отображается). Компьютер, с которым вы устанавливаете связь, принято называть удаленным.

169.jpg

Рис. 15.9 Начало установки связи с удаленным компьютером

Если набор номера абонента прошел успешно, появляется темное окно терминала (см. рис. 15.10). В этом окне надо повторить набор своего имени и пароля, нажимая в конце набора клавишу Enter. He исключено, что эту клавишу придется нажать два-три раза и для вывода сообщения о начале набора имени. Обратите внимание на то, что в ходе набора пароля вводимые символы не отображаются. Это сделано для того, чтобы находящиеся сзади вас люди не видели, какой пароль вы вводите.

Сама передача невидима, хотя при передаче больших по размерам файлов можно увидеть типичное окошко Windows 95, в котором бумажки, представляющие файлы, эффектно перелетают из одной корзинки в другую. Если сеанс связи состоялся, кричите "Эврика!", ведь это значит, что все ваше Internet-хозяйство (модем, телефонная линия, программное обеспечение) работает нормально и можно приступать к спокойной работе в Internet.

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

1610.jpg

15.3. Доступ к совместной работе прямо из MathCAD 7.0 PRO

После единовременной настройки на работу с Internet вы получаете постоянную возможность прямой работы над совместными проектами непосредственно из системы MathCAD. Все, что для этого нужно, — исполнить операцию Collaboratory в позиции File главного меню (см. рис. 15.11).

1611.jpg

Рис. 15.11 Начало вхождения в сеанс совместной работы над проектами

Если вы проделываете эту операцию при отключенном сеансе связи с удаленным компьютером (вашего провайдера), то придется повторить установку сеанса связи, описанную выше. После этого (или сразу, если вы приступаете к совместной работе с уже установленной связью с удаленным компьютером) открывается окно доступа к файлам совместных проектов, показанное на рис. 15.12.

Рис. 15.12 Окно доступа к файлам совместных проектов

1612.jpg

Нетрудно заметить, что в этом окне в левой панели представлен перечень тем проектов, идентичный тому, что был показан на странице фирмы MathSoft. Выбрав нужный проект в нижней части окна, можно наблюдать появление всех данных о выбранном проекте (файле) с указанием полного Web-адреса разработчика проекта (см. рис. 15.13).

1613.jpg

Рис. 15.13 Выбор проекта и его загрузка в ваш ПК

Остается установить связь (см. группу кнопок в правой части окна) с разработчиком проекта и получить от него нужный файл с документом по проекту. Полученный документ размещается прямо в окне редактирования вашей системы MathCAD, теперь его можно изучать и модифицировать. Как это делается, было описано в предыдущих главах. Остается пожелать читателю с успехом использовать эту новую, интересную и мощную возможность системы MathCAD 7.0 PRO.

161.jpg

Изображение: 

1610.jpg

Изображение: 

1611.jpg

Изображение: 

1612.jpg

Изображение: 

1613.jpg

Изображение: 

162.jpg

Изображение: 

163.jpg

Изображение: 

164.jpg

Изображение: 

165.jpg

Изображение: 

166.jpg

Изображение: 

167.jpg

Изображение: 

168.jpg

Изображение: 

169.jpg

Изображение: 

Заключение

Заключение

Итак, мы довольно полно рассмотрели новейшую универсальную математическую систему MathCAD 7.0 PRO. Эта система достигла весьма высокого уровня развития: самые изысканные математические возможности здесь сочетаются с естественным и удобным пользовательским интерфейсом и богатой графикой. При этом интерфейс системы существенно изменен. К принципиальным новинкам можно отнести появление интегратора с другими программными системами MathConnex, возможности имитационного моделирования блочных систем и работу с данными строкового типа.

Означает ли это, что предыдущие версии системы (начиная с версии MathCAD 3.0) потеряли свое значение? Вероятно, нет, по крайней мере до тех пор, пока все еще значительное число пользователей имеют доступ лишь к персональным компьютерам с ОЗУ емкостью менее 8 Мбайт. Для многих из них возможности профессиональной версии MathCAD PLUS 7.0 PRO явно избыточны, и их вполне удовлетворит работа даже с версиями MathCAD 3 О или 4.0.

К сожалению, в отличие от самих версий системы MathCAD электронные книги для новой версии системы с примерами применений у нас крайне дефицитны и мало распространены. А на русском языке их вообще пока практически нет.

Между тем пользователь системы нуждается не только в учебных примерах работы с системой и знакомстве с ее пользовательским интерфейсом и набором операторов и функций (чему посвящена большая часть настоящей книги), но и в примерах решения реальных и массовых математических и иных задач. Этих примеров все еще явно недостаточно в существующей литературе по системе MathCAD. Заключительная глава настоящей книги частично устраняет этот пробел. Однако разработка новых пакетов применений MathCAD и электронных книг остается одной из важнейших задач внедрения этих математических систем MathCAD в практику учебных и научно-технических расчетов.

Самоучитель по Maple

Самоучитель по Maple

Предисловие

 

Предисловие

Автор данной книги, как и многие почитатели компьютерных вычислений, прошел долгий путь их реализации: от программируемых микрокалькуляторов до работы на малых и персональных ЭВМ, использующих универсальные языки программирования высокого уровня. Это нашло отражение в его ранних книгах [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;
  •  устранение замеченных в предыдущем издании [37] неточностей и опечаток;
  •  впервые представленное описание целого ряда новых встроенных математических пакетов системы (CurveFitting, LinearFunctionalSystems, PolynomialTools, OrthogonalSeries, RandomTools и др.);
  •  описание расширенной поддержки Интернета и встроенного пакета XMLTools, который ее обеспечивает;
  •  впервые приведенное описание новейших средств поддержки стандарта MathML и пакета MathML;
  •  описание многочисленных новинок системы Maple 7 в области реализации вычислений и их графической визуализации;
  •  десятки новых примеров применения Maple 7.

Основное внимание в книге уделено обучению основам и приемам эффективной работы с системой 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

1. Краткая характеристика систем класса Maple

 

Урок 1.


Первое знакомство с системой Maple 7

 

Краткая характеристика систем класса 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.

 

2. Версии систем класса Maple.

 

Версии систем класса Maple

Известен ряд версий системы 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 становятся мировым стандартом в области математических вычислений.

 

3. Об ошибках в символьных вычислениях

 

Об ошибках в символьных вычислениях

На многих пользователей систем символьной математики удручающее впечатление может произвести наличие хотя и редких, но ошибочных решений. В самом деле, мы немедленно стерли бы с жесткого диска табличный процессор, давший ошибку в бухгалтерских расчетах, и перестали бы доверять системе проверки орфографии, дающей ошибки при проверке. Впрочем, последнее случается сплошь и рядом — пока нет таких систем, которые корректно проверяли бы орфографию и грамматику. Тот же текстовый процессор 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 — одна из самых надежных систем компьютерной математики. Надежных прежде всего в смысле высокой достоверности получения правильных результатов при сложных символьных вычислениях. Эта первая система компьютерной математики, успешно прошедшая полное тестирование на задачах повышенной сложности, предлагаемых для оценки качества подобных систем.

 

4. Ядро и пакеты Maple 7

 

Ядро и пакеты Maple 7

Основой для работы с символьными преобразованиями в Maple является ядро системы. Оно содержит сотни базовых функций и алгоритмов символьных преобразований. В новых реализациях объем ядра достигает 6-7 Мбайт. Имеется также основная библиотека операторов, команд и функций. Многие встроенные в нее функции, как и функции ядра, могут использоваться без какого-либо объявления, другие нуждаются в объявлении. Кроме того, имеется ряд подключаемых пакетов (packages).

Дополнительные функции из пакетов могут применяться после объявления подключения пакета с помощью команды with(name), где name — имя применяемого пакета. Общее число функций, с учетом встроенных в ядро и размещенных в пакетах в системе Maple V R4 приближается к 2500, в реализации R5 — к 2700, а в Maple бив Maple 7 оно уже превышает 3000. Это означает, что большинство задач может решаться в режиме прямого диалога с системой без использования каких-либо средств программирования.

 

5. Языки системы Maple 7

 

Языки системы Maple 7

Maple способна решить огромное число задач вообще без какого-либо программирования в общепринятом смысле этого понятия. Достаточно лишь описать алгоритм решения задачи и разбить его на отдельные вопросы, на которые система Maple способна дать ответы. Более того, есть тысячи задач, алгоритмы решения которых уже реализованы в виде функций и команд системы. Тем не менее это вовсе не означает, что в Maple нельзя программировать. На самом деле Maple поддерживает три собственных языка: входной, реализации и программирования.

Maple имеет входной язык сверхвысокого уровня, ориентированный на решение математических задач практически любой сложности. Он служит для задания системе вопросов или, говоря иначе, задания входных данных для последующей их обработки. Это язык интерпретирующего типа и по своей идеологии напоминает добрый старый Бейсик. И такое сходство вовсе не недостаток, а огромное достоинство — ведь именно с Бейсика начался подлинный диалог пользователя напрямую с компьютером! Входной язык имеет большое число заранее определенных математических и графических функций, а также обширную библиотеку, подключаемую по мере необходимости.

Имеет Maple и свой язык процедурного программирования — Maple-язык. Этот язык имеет вполне традиционные средства структурирования программ: операторы циклов, операторы условных и безусловных переходов, операторы сравнения, логические операторы, команды управления внешними устройствами, функции пользователя, процедуры и т. д. Он также включает в себя все команды и функции входного языка, ему доступны все специальные операторы и функции. Многие из них являются весьма серьезными программами, например символьное дифференцирование, интегрирование, разложение в ряд Тейлора, построение сложных трехмерных графиков и т. д.

Не следует путать входной язык и язык программирования системы (Maple-язык) с языком ее реализации. Им является один из самых лучших и мощных универсальных языков программирования — Си. На нем написано ядро системы, содержащее тщательно оптимизированные процедуры. Большинство же функций, которые содержатся в пакетах, написаны на Maple-языке, благодаря чему их можно модифицировать и даже писать свои собственные библиотеки. По разным оценкам, лишь от 5 до 10 % средств Maple создано на языке реализации — все остальное написано на Maple-языке. Таким образом, система имеет развитые возможности для расширения и адаптации к задачам пользователя. Для подготовки программ на языке Maple могут использоваться внешние редакторы, но система имеет и свой встроенный редактор, вполне удовлетворяющий требованиям большинства пользователей. Он открывается командами New и Open в меню File. Этот редактор можно использовать для редактирования файлов программ или математических выражений. Версии Maple для MS-DOS имеют свой редактор программ и отладчик с функциями проверки синтаксиса. После версии Maple V для Windows необходимость в этих средствах практически отпала.

Синтаксис структурных операторов языка Maple напоминает смесь Бейсика и Паскаля. Это облегчает знакомство с ним тем, кто имеет хотя бы начальный опыт программирования на этих языках. По близким к Бейсику правилам (и при помощи общепринятых математических сокращений) выполняется и ввод математических выражений в диалоговом режиме работы с системой.


6. Ориентация систем Maple

 

Ориентация систем Maple

Вообще говоря, системы Maple ориентированы на решение сложных задач, хотя и решение в них простых задач вполне возможно и уместно. Возможно, для решения таких задач вполне подойдет весьма простая, быстрая и надежная система Derive или система Mathcad, в которую (начиная с версии 3.0 под Windows) включен приобретенный по лицензии фирмы Waterloo Maple упрощенный символьный процессор Maple. Однако по числу доступных пользователю математических функций эти скромные системы не идут ни в какое сравнение с патриархом символьной математики — системой Maple.

Система Maple 7 может с успехом применяться для решения самых серьезных математических задач аэродинамики, теории поля, теплопроводности и диффузии, теоретической механики и др. Решение таких задач нередко является многолетним трудом элитных научных коллективов.

Впрочем, поскольку система может быть установлена на любом современном ПК, ее можно (да и нужно) применять как можно чаще и по любому поводу. Это способствует как приобретению практических навыков работы с Maple, так и росту математических познаний тех, кто с ней работает.

 

7. Возможности предшествующей версии Maple 6

 

Возможности предшествующей версии Maple 6

Перечислим основные возможности предшествующей версии системы Maple 6.

Интерфейс:

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

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

  •   дифференцирование функций; 
  •  численное и аналитическое интегрирование; 
  •  вычисление пределов функций;
  •  разложение функций в ряды; 
  • вычисление сумм и произведений; 
  •  интегральные преобразования Лапласа, Фурье и др.;
  •   дискретные Z-преобразования;
  •  прямое и обратное быстрое преобразование Фурье; 
  •  работа с кусочно-заданными функциями. 

Работа с уравнениями в численном и символьном виде:

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

 

 Работа с функциями:

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

 

Линейная алгебра:

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

Графическая визуализация результатов вычислений:

  •  построение графиков многих функций;
  •  различные типы осей (с линейным и логарифмическим масштабом);
  •  графики функций в декартовой и полярной системах координат;
  •  специальные виды графиков (точки массивов, векторные графики, диаграммы уровней и др.);
  •  системы координат, определяемые пользователем;
  •  графики, представляющие решения дифференциальных уравнений;
  •  графики трехмерных поверхностей с функциональной закраской;
  •  построение пересекающихся в пространстве объектов;
  •  задание пользователем окраски графиков;
  •  импорт графиков из других пакетов и программных систем;
  • анимация графиков;
  •  создание и проигрывание анимационных файлов.

Программирование:

  •  встроенный язык процедурного программирования;
  •  простой и типичный синтаксис языка программирования;
  •  обширный набор типов данных;
  •  типы данных, задаваемых пользователем;
  •  средства отладки программ;
  •  мощные библиотеки функций;
  •  задание внешних функций и процедур;
  • поддержка языков программирования С и Fortran;
  •  возможность записи формул в формате LaTeX.

 

8. Новые возможности системы Maple 7

 

Новые возможности системы Maple 7

Система Maple 7 приобрела ряд новых возможностей. Кратко отметим их:

  •  расширенная поддержка численных алгоритмов пакета программ NAG, в том числе при решении численных задач математического анализа (например, вычисление определенных интегралов в Maple 7 ускорено в 20-40 раз в сравнении с Maple 6) и при решении дифференциальных уравнений;
  •  новый обучающий курс User's Tour, встроенный в ее справку; 
  •  существенно переработанные и обновленные пакеты функций;
  •  ускоренные алгоритмы целочисленных вычислений (например, факториал числа 25000 вычисляется более чем на порядок быстрее, чем системой Maple 6);
  •  обширный набор новых алгоритмов решения дифференциальных уравнений, обеспечивающий дополнительную эффективность решения задач в области моделирования физических явлений и устройств;
  •  выполненное впервые 100% успешное испытание при решении специальных тестовых задач, что является высшим достижением на рынке средств компьютерной математики;
  •  усовершенствованные и новые алгоритмы реализации многих численных методов решения задач;
  •  новые встроенные пакеты аппроксимации кривых CurveFitting, внешних вычислений ExternalCalling, решения линейных функциональных систем LinearFunctionalSystem, ортогональных рядов OrthogonalSeries, работы с полиномами PolynomialTools, решения уравнений SolveTools и поддержки вычислений с размерными величинами Units;
  •  новый пакет для поддержки языка XML;
  •  поддержка новейшего стандарта записи математической информации — языка MathML 2.0;
  •  улучшение пользовательского интерфейса, в частности введение новой палитры ввода шаблонов векторов;
  •  поддержка протокола TCP/IP, обеспечивающего динамический удаленный доступ к данным, например, для финансового анализа в реальном масштабе времени или данных о погоде;
  •  дополнительные пакеты (Maple PowerTools™), доступные через Интернет, поддерживающие анализ методом конечных элементов (РЕМ), нелинейную оптимизацию и статистику, а также три новых пакета: вычисления для новичков, теоретическая физика и программирование;
  •  возможность работы с курсом университетского математического образования, загружаемого через Интернет.

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

 

9. Установка системы Maple 7 на ПК

 

Установка системы Maple 7 на ПК

Аппаратные требования

В этой книге рассматривается реализация системы Maple 7, требующая: 

  •  процессор — Pentium 150 МГц и выше;
  •  оперативная память — не менее 16 Мбайт (рекомендуется 32 Мбайта и выше); 
  •  место на жестком диске — около 80 Мбайт (120 Мбайт для сетевой версии).
  • бширная библиотека пользователя, поставляемая с предшествующими версиями системы Maple V, с новыми версиями Maple 6 и Maple 7 пока не поставляется, поскольку требует серьезной переработки. Достаточно отметить, что использование в новых версиях системы оператора % для вызова последнего результата (вместо применяемого ранее оператора кавычек) делает неработоспособными большинство программ этой библиотеки. Также в новой версии изменен синтаксис некоторых функций.

 

10. Установка системы Maple 7

 

Установка системы Maple 7

Установка системы производится обычно с компакт-диска. Обычно компакт-диск с инсталляционной версией Maple 7 стартует автоматически. При этом появляется окно Мастера установки со шкалой выполнения предварительной подготовки, показанное на рис. 1.1.


Рис. 1.1. Окно Мастера установки Maple 7

Затем Мастер автоматически переходит к окну, в котором просит ввести серийный номер программного продукта, который имеется в документации к системе или указан на конверте с компакт-диском.

Для продолжения установки следует щелкнуть на кнопке 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 документация.

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

7.gif

Изображение: 

8.gif

Изображение: 

9.gif

Изображение: 

11. Запуск системы

 

Запуск системы

Запуск Maple 7 производится, как обычно, из меню Пуск (рис. 1.10). Найдя строчку Maple 7, необходимо открыть подменю и щелкнуть на команде Maple 7 (рис. 1.10).

Рис. 1.10. Запуск Maple 7 из меню Пуск

Возможен также запуск с помощью ярлыка, помещенного на рабочий стол. В любом случае, вначале на некоторое время появляется красочное окно-заставка, показанное в центре рис. 1.1. После этого появляется рабочее окно системы, изображенное на рис. 1.11.

Рис. 1.11. Окно системы Maple 7

 

10.gif

Изображение: 

11.gif

Изображение: 

12. Интерфейс системы Maple 7

 

Интерфейс системы Maple 7

Обзор интерфейса 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 позволяет готовить документы, содержащие одновременно текстовые комментарии, команды входного языка (с возможным преобразованием их в естественную математическую форму), результаты вычислений в виде обычных математических формул и графические данные. Это обеспечивает понятное представление исходных данных и результатов вычислений, а также удобство их повторного использования.

В основе пользовательского интерфейса Maple 7 лежит графический многооконный интерфейс операционной системы Windows. Управление системой Maple 7 возможно с помощью главного меню, панелей инструментов и палитр, а также «горячих» клавиш. Поддерживаются также многие возможности мыши, присущие приложениям под Windows.

Важно отметить и прекрасно реализованную справочную систему Maple 7. Преодолев первые трудности общения с системой, пользователь быстро осваивает систему справки, которая позволяет без какой-либо бумажной документации получить исчерпывающую информацию о любом операторе, функции или пакете (разумеется, на английском языке). На каждой странице справки нахддит-ся по несколько примеров, причем их можно скопировать и перенести в редйк-тор или в окно исполняемых документов системы. Это способствует быстрому обучению пользователя. Подробное описание справочной системы Maple 7 дано в уроке 2.

Пользователь Maple 7 (как и ряда других математических систем) работает с документами, которые являются одновременно описаниями алгоритмов решения задач, программами и результатами их исполнения. Все данные команды и результаты размещаются в соответствующих ячейках. Графические построения выполняются как в ячейках документа, так и в отдельных окнах, и имеют свои меню для оперативного управления параметрами.

 

13. Меню системы Maple 7

 

Меню системы Maple 7

Наиболее полные возможности управления предоставляет главное меню системы Maple 7. Оно, как обычно, расположено непосредственно под строкой заголовка. Меню предоставляет доступ к основным операциям и параметрам пользовательского интерфейса системы. Ниже дан перечень меню, доступных при наличии открытого документа:

  •  File — работа с файлами и печатью документов;
  •  Edit — команды редактирование документа и операции с буфером обмена;
  •  View — управление видом пользовательского интерфейса;
  •  Insert — операции вставки;
  •  Format — операции задания форматов;
  •  Spreadsheet — операции задания таблиц;
  •  Options — задание параметров;
  •  Window — управление окнами;
  •  Help — работа со справочной системой. 

Главное меню Maple 7 является контекстно-зависимым. Это означает, что его вид может меняться в зависимости от текущего состояния (контекста) системы. Например, если все документы закрыты, то главное меню содержит только три заголовка меню: File, Options и Help. При этом место для окон документов пусто и окрашено в серый цвет. Вид меню также меняется в зависимости от того, какие объекты в документе выделены. Более подробно работу с меню системы Maple 7 мы рассмотрим позже, начиная с урока 3.

 

14. Палитры ввода математических символов

 

Палитры ввода математических символов

Полезно сразу обратить внимание на возможность модификации интерфейса системы Maple 7 с помощью команд меню View. В этом меню (оно показано на рис. 1.11 в открытом состоянии) можно увидеть список палитр Palettes, предназначенных для ввода математических знаков. Установив флажки соответствующих палитр, можно вывести их на экран и переместить в любое место. Все четыре палитры математических символов представлены на рис. 1.11. При этом палитра VECTOR введена в Maple 7 впервые.

Назначение знаков в палитрах очевидно из их названий:

 SYMBOL — ввод отдельных символов (греческих букв и некоторых математических знаков);

 EXPRESSION — ввод шаблонов математических операторов и операций; 

 MATRIX — ввод шаблонов матриц разных размеров;

 VECTOR — ввод шаблонов векторов разных размеров и типов (векторы-столбцы или векторы-строки).

Следует отметить, что не всегда введенный на палитре символ буквально повторяет представленный на кнопке. Например, вместо символа а может быть введено слово alpha. Так происходит, если установлен действующий по умолчанию Maple-режим представления символов. Палитра ввода векторов введена в Maple 7 впервые, что сделало ввод векторов более удобным.

 

15. Всплывающие подсказки

 

Всплывающие подсказки

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

 

16. Основы работы с Maple 7 в диалоговом режиме

 

Основы работы с Maple 7 в диалоговом режиме

Начальные навыки работы

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

ВНИМАНИЕ  

Во избежании грубых ошибок при исполнении того или иного примера рекомендуется  перед этим исполнить команду restart которая снимает определения со всех использованных ранее переменных и позволяет начать вычисления «с чистого листа».

На рис. 1.12 представлен реальный диалог с системой (в виде копии экрана) при решении простейших арифметических задач и построении графика функции sin(x)/x.

Рис. 1.12. Начало диалога с системой Maple 7

Уже из этого простого примера видны особенности диалога с Maple и синтаксиса ее входного языка, то есть языка, на котором системе задаются вопросы. Диалог идет в стиле: «задал вопрос, получил ответ». Вопросы и ответы занимают отдельные блоки, выделяемые в левой части квадратными скобками. Длина квадратных скобок зависит от размера выражений — исходных (вопроса) и результатов вычислений (ответов на вопросы). Знак > является знаком приглашения к заданию вопроса. Мигающая вертикальная черта | — маркер ввода (курсор).

Ввод выражений (вопросов) задается по правилам, давно принятым для строчных редакторов. Они хорошо известны, и мы не будем на них останавливаться подробно. Отметим лишь, что клавиша Ins позволяет задавать два основных режима ввода — замены и вставки. В режиме замены вводимый символ заменяет существующий символ, который отмечен маркером ввода. А в режиме вставки новый символ вставляется в текст, не уничтожая имеющиеся символы.

Перемещение маркера ввода осуществляется клавишами перемещения курсора <- и -> Клавиша Backspace стирает символ слева от маркера ввода, а клавиша Del — справа от маркера ввода. Для ввода любого символа надо нажать соответствующую клавишу. Клавиша Shift включает верхний регистр для ввода заглавных (прописных) букв, а клавиша Caps Lock переключает верхний и нижний регистры клавиш с буквами (они меняются местами).

Знак фиксации конца выражения : (точка с запятой) указывает, что результат его вычисления должен быть выведен на экран, а знак : (двоеточие) отменяет вывод и может использоваться как знак разделителя при записи нескольких выражений в одной строке. Клавиши перемещения курсора позволяют передвигаться по ранее введенным строкам на экране.

 

12.gif

Изображение: 

17. Понятие о функциях и операторах

 

Понятие о функциях и операторах

Важным понятием системы 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).

 

13.gif

Изображение: 

18. Обработка и индикация ошибок

 

Обработка и индикация ошибок

При работе с системой 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, мы опишем более развитые средства контроля над допускаемыми пользователем ошибками. Пока же ограничимся приведенными 'Выше сведениями, полезными уже в начале диалога с системой.

 

15.gif

Изображение: 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

23.gif

Изображение: 

19. Управление с помощью мыши

 

Управление с помощью мыши

Для управления состоянием ячеек можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Если установить указатель мыши на входной ячейке, то это меню будет содержать три команды:

  •  Standard Math — включает и выключает показ входных выражений в естественной математической форме;
  •  Maple Input — управляет видом ячейки ввода (математический/текстовый); 
  •  Execute — включает выполнение ячейки.

Также в зависимости от состояния буфера обмена и наличия выделения в контекстном меню могут присутствовать команды Cut, Copy и Paste.

Левая кнопка мыши может использоваться для передачи фокуса управления или переноса маркера ввода, а также выделения частей документа.

 

20. Примеры задания функции пользователя и построения ее графика

 

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

На рис. 1.12 показано, как задается функция пользователя f(x) с одним параметром х. Нетрудно заметить, что параметр указывается в скобках после имени функции а для записи выражения функции используется знак присваивания := (двоеточие со знаком равенства). Для построения графика функции f (х) используется функция plot в форме:

Нетрудно заметить, что при наличии нескольких параметров функции (в нашем случае их два) они разделяются запятыми. Выражение х=-15. .15 задает, во-первых, указание, относительно какой переменной строится график, а во-вторых, говорит, в какой области значений меняются значения этой переменной — в нашем случае от -15 до +15. Шаг изменения переменной выбирается автоматически в зависимости от размеров и вида графика.

 

24.gif

Изображение: 

21. Пример построения трехмерного графика поверхности

 

Пример построения трехмерного графика поверхности

Столь же просто, как и график обычной функции в декартовой системе координат, можно построить график трехмерной поверхности. Это показано на примере рис. 1.13. В данном случае задана функция двух переменных z(x,y) :=sin(x*y) и ее график строится с использованием графической функции plot3d. Правила задания пределов изменения переменных х и у соответствуют описанным выше.

Рис. 1.13. Построение графика трехмерной поверхности

Возможно, многих читателей вполне удовлетворят уже описанные возможности, но сила системы Maple 7 прежде всего в возможности выполнения аналитических (символьных) вычислений. Поэтому мы перейдем к обсуждению некоторых из них.

 

25.gif

Изображение: 

22. Управление формой представления документа

 

Управление формой представления документа

Форматы математических выражений

Приведенные выше примеры реализуют обычную форму представления документа. В нем имеются текстовые комментарии (для их ввода надо нажать клавишу F5), сформулированные на Maple-языке задания на вычисления, результаты вычислений в виде обычных математических формул и, там где это указано, графики.

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

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

В Maple 7 ввод исходных данных производится привычными для языков программирования средствами — с помощью функций и операторов, задаваемых в командной строке. Зато результаты вычислений получаются по умолчанию в виде обычных формул (хотя есть возможность их представления в другом виде, например принятом в редакторе LaTeX или языках программирования Fortran и С). Тем не менее вид документа с таким специфическим заданием формул может озадачить математика и любого пользователя, не слишком знакомого с основами программирования. В целом он отрицательно сказывается на восприятии документов.

 

23. Представление входных выражений в математической форме

 

Представление входных выражений в математической форме

Для устранения подобного недостатка (а скорее, противоречия) Maple 7 предлагает ряд средств. Во-первых, это текстовые комментарии, в которые можно вводить формулы. Во-вторых, это инертные функции, которые не вычисляются, но дают вывод на экран в естественной математической форме (рис. 1.14). И в-третьих, это возможность быстрого преобразования строковых выражений ввода в естественные математические формулы.

Об инертных функциях мы поговорим позже более подробно. Отметим лишь, что имена таких функций начинаются с большой буквы и функции выводят математическое выражение в естественной математической нотации. С помощью ряда функций, например evalf, можно вычислить математическое выражение, полученное инертной функцией. На рис. 1.14 внизу дан пример такого вычисления для предела функции sin(x)/x.

Рис. 1.14. Примеры применения инертных функций

Теперь остановимся на преобразовании исполняемых выражений ввода на Maple-языке в обычные математические формулы. Для этого достаточно, выделив входное выражение, нажать первую кнопку контекстной панели — соответствующее выражение тут же приобретет вид обычной математической формулы. На рис, 1.15 показаны примеры вычислений интеграла при его задании в строках ввода в виде текстового выражения и в обычной математической нотации.

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

Следует, однако, учитывать, что представление входных выражений в виде формул обычно занимает заметно больше места на экране и в документе, чем описание выражения на Maple-языке, поэтому оно используется довольно редко. Кроме того, далеко не всякое входное выражение может быть представлено в виде математической формулы — многие функции ядра и библиотек Maple 7попросту не имеют общепринятых обозначений в виде специальных математических знаков.

Рис. 1.15. Примеры вычислений интеграла при его задании в текстовой и математической нотации

 

26.gif

Изображение: 

27.gif

Изображение: 

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

 

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

Простой пример символьных вычислений

Maple 7 открывает обширные возможности выполнения символьных (аналитических) вычислений. Начнем с простого примера — требуется найти сопротивление трех параллельно включенных резисторов R1, R2 и R3 произвольной величины. Из курса электротехники известно, что можно задать следующее равенство, определяющее суммарное сопротивление R0:

Теперь достаточно использовать функцию решения уравнений solve, чтобы найти значение R0 в общей аналитической форме:

Нетрудно проверить, что результат может быть получен и в численном виде для конкретных значений R1, R2 и R3: > Rl:=a.:R2:-2:R3:=3:RO:

 

 

28.gif

Изображение: 

29.gif

Изображение: 

30.gif

Изображение: 

25. Типовые символьные вычисления

 

Типовые символьные вычисления

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

Рис. 1.16. Примеры символьных вычислений

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

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

Рис. 1.17. Примеры вычисления производной и интегралов

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

На другом рисунке (рис. 1.18) показано вычисление интеграла, который не имеет представления через функции системы Maple 7, но может быть вычислен ею в численном виде.

Рис. 1.18. Численное вычисление значения интеграла, не имеющего аналитического представления

 

31.gif

Изображение: 

32.gif

Изображение: 

33.gif

Изображение: 

26. Разбухание результатов символьных вычислений

 

Разбухание результатов символьных вычислений

Одной из проблем систем компьютерной алгебры является «разбухание» результатов — как оконечных, так и промежуточных. Связано это с тем, что аналитическое представление порою может оказаться весьма громоздким даже для простых задач — пожалуй, это главная причина прохладного отношения к аналитическим вычислениям со стороны инженеров, особенно практиков. К примеру, численное решение кубического уравнения не вызовет трудностей даже на калькуляторе [1], тогда как системы символьной математики выдают его в виде формул, едва помещающихся на экране. Это и иллюстрирует рис. 1.19, на котором показано решение квадратного уравнения (его знает каждый мало-мальски преуспевающий в учебе школьник) и решение кубического уравнения (оно вызывает бурный восторг или легкий шок — в зависимости от отношения учащегося к математике).

Щепетильность системы в ее стремлении выдать полный и математически предельно точный результат, безусловно, очень важна для математиков. Но для многих прикладных задач, с которыми имеют дело инженеры и техники, она оборачивается неудобствами. Инженеры часто прекрасно знают, какие из членов математических формул можно преспокойно отбросить, тогда как для математика-теоретика или аналитика такое действо — типичное кощунство. Порою системы компьютерной алгебры выдают настолько «заумный» и огромный результат, что его упрощение может занять куда больше времени, чем получение более простого результата с заранее выполненными упрощениями. Впрочем, каждому свое! И Maple имеет множество функций, обеспечивающих преобразование результатов в ту или иную форму.

Рис. 1.19. Решение квадратного и кубического уравнений в символьной форме

 

34.gif

Изображение: 

27. Пример решения системы линейных уравнений

 

Пример решения системы линейных уравнений

Приведем еще один характерный пример — решение системы линейных уравнений с помощью функции solve (рис. 1.20). Обратите внимание на форму задания уравнений и выдачи результатов и поразительную естественность решения задачи. Значение переменной z на рис. 1.20 выделено, где видно, что Maple отображает его поле под панелью инструментов.

Слова solve, diff и int с их аргументами являются именами встроенных в систему функций, возвращающих символьные значения результатов. Нормальному пользователю может стать дурно, если вспомнить, что таких функций с их вариантами система Maple 7 имеет около трех тысяч! Да к тому же многие функции (та же solve для решения уравнений) подчас могут применяться во многих случаях и имеют массу параметров и директив для уточнения направлений решения и расширения областей применения.

Рис. 1.20. Решение системы из пяти линейных уравнений

В утешение можно отметить три важных обстоятельства:

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

Необходимые функции и правила их преобразования система черпает в библиотеке размером около 40 Мбайт (она содержит файлы maple.hdb, maple.lib, maple.ind и maple.cmd). Это иногда занимает заметное время, особенно при первом использовании определенной группы операторов (например, тригонометрических). При повторном использовании этой группы система заметно убыстряется, так как использует уже загруженные средства.

 

35.gif

Изображение: 

28. Повышение эффективности работы с системой

 

Повышение эффективности работы с системой

Работа с панелью инструментов

Пока что мы при проведении вычислений пользовались лишь простейшими средствами управления системой — вводом выражений и текстовых надписей с клавиатуры. Теперь пора расширить представления о работе с Maple. Прежде чем начать работать с ее меню, надо отметить, что для многих (особенно начинающих) пользователей оказывается удобнее использовать кнопки, расположенные на панелях инструментов, которые находятся прямо под строкой меню.

На рис. 1.21 показано назначение кнопок панели инструментов (Tool Bar). Эти кнопки дублируют наиболее важные операции главного меню и имеют наглядные и типовые для Windows-приложений обозначения. Назначение кнопок и других деталей интерфейса также показаны на рис. 1.21.

Рис. 1.21. Панель инструментов

При необходимости панели инструментов можно убрать с помощью команд меню View (см. рис. 1.11). Если графика выводится в отдельное окно, там имеется своя панель инструментов, которая будет описана ниже.

 

36.gif

Изображение: 

29. Работа с контекстной панелью

 

Работа с контекстной панелью

Другое полезное средство для облегчения работы по форматированию текстов, заданию параметров входных математических выражений и графиков — контекстная панель инструментов. Как следует из названия, контекстная панель Context Bar является контекстно-зависимой — ее содержание зависит от текущего положения маркера ввода или выделения.

Контекстная панель содержит следующие элементы при вводе текста комментария (рис. 1.22):

  •  списки для задания стиля, шрифта и размера символов, кнопки для придания полужирного (Bold), наклонного (Italic) и подчеркнутого (Underline) начертания;
  •  кнопки для выравнивания текста;
  •  кнопку команды исполнения всего документа.

Рис. 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-языке. Такой же вид контекстной панели будет, если выделено выражение или его часть в строке вывода.

 

37.gif

Изображение: 

38.gif

Изображение: 

30. Контекстная панель инструментов для двумерных графиков

 

Контекстная панель инструментов для двумерных графиков

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

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

Рис. 1.24. Контекстная панель инструментов для двумерного графика

Действие большинства кнопок этой формы контекстной панели достаточно очевидно, и вы легко сможете опробовать эти кнопки в работе. Так, график на рис. 1.18 построен точками при нажатии кнопки, задающей стиль Point style. Кроме того, в функции plot построения графика явно использована опция co1or=blue, которая задает синий цвет точек графика.

Полезно отметить, что в левой части контекстной панели есть поле с координатами текущей выделенной точки графика. Чтобы выделить точку, надо подвести к ней указатель мыши и щелкнуть левой ее кнопкой.

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

 

39.gif

Изображение: 

31. Контекстная панель инструментов для трехмерных графиков

 

Контекстная панель инструментов для трехмерных графиков

Свой вид контекстной панели имеют и трехмерные графики. Назначение ее элементов представлено на рис.-1.25.

Рис. 1.25. Контекстная панель инструментов для трехмерных графиков

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

Два расположенных слева счетчика позволяют задавать нужный угол обзора, причем Maple сразу же отражает заданный поворот построенной фигуры. Ее также можно вращать мышью, поместив указатель в область графика и держа нажатой левую кнопку. При этом счетчики будут отображать изменяющиеся при перемещении мыши углы обзора. Это очень удобное средство для наблюдения за деталями трехмерных поверхностей и фигур, которые строит функция plot3d.

 

40.gif

Изображение: 

32. Строка состояния

 

Строка состояния

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

Хотя панели инструментов и строка состояния удобны для быстрого управления системой, они обладают одним существенным недостатком — занимают часть полезной площади экрана. Однако в меню View имеются команды, позволяющие убрать с экрана любые из этих элементов. Действие этих команд вы можете заметить, если внимательно присмотритесь к предыдущим рисункам.

 

33. Горячие клавиши системы

 

Горячие клавиши системы

Для открытия меню можно использовать одновременное нажатие клавиши 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+ы).

 

34. Доступ к справкам и примерам

 

Доступ к справкам и примерам

В меню 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 автора. В связи с этим читателю рекомендуется просмотреть не только примеры в данной книге, но и примеры, представленные в справочной системе по интересующим читателя функциям.

 

41.gif

Изображение: 

42.gif

Изображение: 

35. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Устанавливать Maple 7.
  •  Отличать языки системы — входной, реализации и программирования.
  •  Загружать систему и работать с ней в режиме диалога.
  •  Выполнять простые вычисления.
  •  Строить простые графики.
  •  Пользоваться кнопками быстрого управления системой.
  •  Обращаться к справкам и примерам применения системы Maple 7.

 

Урок 2. Информационная поддержка Maple

1. Работа со справочной системой

 

Урок 2.


Информационная поддержка Maple

 

Работа со справочной системой

Меню Help

Справочной системе Maple 7 принадлежит исключительная роль — только в ней можно найти полную информацию обо всех почти трех тысячах функций Maple 7. Использование англоязычной справочной системы может быть полезно и для тех, кто и «двух слов по-английски связать не может», поскольку в ней приведен синтаксис функций и операторов, а также многочисленные примеры их применения — по самым скромным подсчетам их свыше десяти тысяч. К сожалению, справочная система Maple 7 очень громоздка. Но это нельзя считать недостатком справочной системы, поскольку просто велик объем входящего в нее материала. В справочной системе имеются все присущие современным базам данных возможности для быстрого поиска нужной информации и даже для ее структурирования и пополнения.

Основные команды по работе со справочной системой Maple 7 сосредоточены в меню Help, показанном на рис. 2.1.

Рис. 2.1. Меню Help справочной системы Maple 7

Оно содержит команды, объединенные в несколько групп. В первую группу входят следующие команды:

  • Introduction — показ начального раздела справки (введения);
  •  Help on Context — вывод оперативной справки по контексту;
  •  New User's Tours — запуск обучающей системы;
  •  What's New — описание новых возможностей системы;
  •  Using Help — описание правил использования справочной системы;
  •  Glossary — вывод указателя терминов.

Второй раздел меню содержит команды:

  • Topic Search — предметный поиск по заданному образцу;
  •  Full Text Search — предметный поиск с полным обзором текста справки;
  •  History — вывод истории поиска.

В третьем разделе имеются две команды для работы с базой данных:

  •  Save to Database — запись данных в базу данных;
  •  Remove Topic — восстановление базы данных предметного поиска путем удаления дополнительных данных;

Остальные разделы представлены следующими командами:

  •   Balloon Help — включение всплывающих подсказок;
  •   Register Maple 7 — регистрация Maple 7; 
  •  About Maple 7 — вывод окна с информацией о Maple 7.

Рассмотрим детально работу справочной системы Maple 7. Следует отметить, что ценность справочной системы для наших читателей намного снижается из-за того, что она написана на английском языке. Учитывая громоздкость справочной системы и необходимость в наличии компьютера для ее использования, для знакомства с системой Maple 7 более подходят обычные книги, тогда как справочную систему следует применять при необходимости ознакомиться с тонкими деталями применения тех или иных операторов, функций и иных средств Maple 7.

 

1.gif

Изображение: 

2. Просмотр введения

 

Просмотр введения

Команда Introduction в меню справки запускает справочную систему на странице введения (рис. 2.2).

В введении определено назначение Maple 7 как системы компьютерной алгебры и дается ссылка на сайт фирмы — разработчика системы (www.maplesoft.com). Щелкнув на гиперссылке, вы перейдете на начальную страницу web-сервера фирмы. На странице введения имеются также гиперссылки на обучающий курс (New User's Tour), на страницы с обзором новых возможностей Maple 7 и справки по различным элементам интерфейса.

Рис. 2.2. Окно справочной системы с введением

Обратите внимание на оригинальный подход к представлению пути нужной справки. Для его определения служат 5 окон-списков. На рис. 2.2 используется только одно окно, а остальные 4 пока пусты. Выбирая последовательно по элементу из каждого списка, вы сможете достигнуть требуемой справочной информации. Подробнее навигация по справочной системе будет описана позже.

 

2.gif

Изображение: 

3. Оперативная справка по контексту

 

Оперативная справка по контексту

Оперативная справка по контексту — сравнительно новая возможность справочных систем. Она особенно удобна при разборе примеров, содержащих незнакомые пользователю функции и иные объекты системы 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.

 

3.gif

Изображение: 

4. Обучающий курс New User's Tour

 

Обучающий курс New User's Tour

Команда 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, обучающий курс имеет следующие разделы: 

  •  (1) Working Through the New User's Tour — обучение работе с курсом; 
  •  (2) The Worksheet Environment — создание документов; 
  •  (3) Numerical Calculations — численные вычисления; 
  •  (4) Algebraic Computations — алгебраические преобразования; 
  •  (5) Graphics — графики; 
  •  (6) Calculus — вычисления;
  •  (7) Differential Equations — дифференциальные уравнения; 
  •  (8) Linear Algebra — линейная алгебра; 
  •  (9) Finance and Statistics — финансы и статистика;
  •  (10) Programming — программирование; 
  •  (11) Online Help — помощь через Интернет; 
  •  (12) Summary — заключение.

Активизация любой из этих гиперссылок приводит к выводу соответствующего раздела обучающего курса. На рис. 2.6 представлено начало раздела 3, посвященного численным вычислениям.

Рис. 2.5. Окно с перечнем разделов обучающего курса

Рис.2.6. Начало раздела обучающего курса по численным вычислениям

Основные достоинства обучающего курса в том, что он (в отличие от справочной базы данных) дает обычное описание работы с системой Maple 7 с «живыми» примерами, которые не надо копировать в документы. Фактически обучающая система является просто набором документов системы. Вначале примеры даны без ячеек вывода, которые появляются после исполнения команды Edit> Execute> Worksheet. Это иллюстрирует рис. 2.7.

Рис. 2.7. Начало раздела обучающей системы по численным вычислениям после исполнения команды Edit> Execute > Worksheet

Пользователь может модифицировать любой пример и немедленно получить новые результаты (попробуйте, например, заменить вычисление 200! на 100! или 500!). К сожалению, написан обучающий курс на английском языке и в отличие от обычной книги для работы с ним нужен компьютер.

 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

7.gif

Изображение: 

5. Новые возможности Maple 7

 

Новые возможности Maple 7

Пользователи, знакомые с предшествующими версиями системы Maple, обычно хотят узнать, что нового введено в последней версии. Однако, как у нас говорят, «лучшее — враг хорошего» — при большом числе новых возможностей (и особенно при модификации старых возможностей) появляется несовместимость между документами для старых и новых версий системы. Несмотря на меры, предпринятые по предотвращению такой несовместимости, ее проявление вполне возможно, в частности документы, созданные в Maple 7, уже нельзя использовать в предшествующих версиях из-за различий в их внутренних форматах.

Выполнение команды What's New открывает окно с описанием новых возможностей Maple 7. Оно показано на рис. 2.8.

Рис. 2.8. Окно справки с описанием новых возможностей системы Maple 7

С помощью гиперссылок на этой странице можно получить достаточно подробное описание всех появившихся в Maple 7 возможностей. Мы уже отмечали их в уроке 1.

 

8.gif

Изображение: 

6. Правила работы со справочной системой

 

Правила работы со справочной системой

Справочная система Maple 7, по существу, является мощной базой данных с обширными возможностями поиска нужной информации и многочисленными примерами применения Maple 7. Работа с такой системой может вызвать затруднения у начинающих пользователей, поэтому в состав справочной системы включено описание правил ее использования. При исполнении команды Using Help появляется страница с перечнем разделов описания справочной системы (рис. 2.9).

Рис. 2.9. Окно с перечнем разделов описания справочной системы

Мы не будем подробно описывать содержание страницы и гиперссылок, поскольку весь материал данного урока и является, по существу, таким описанием.

 

9.gif

Изображение: 

7. Предметный поиск

 

Предметный поиск

Команда Topic Search (предметный поиск) — одна из самых мощных функций справки. Она выводит окно поиска (рис. 2.10), содержащее в верхней части поле для ввода образца. Образцом может быть слово (например, имя функции) или даже часть слова. В окне под этим полем появляется список всех объектов Maple 7, в индекс которых входит заданный образец (рис. 2.10).

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

  •  Search — поиск по образцу;
  •  Apply — вывод окна выбранного раздела справки при сохранении окна поиска;
  •  ОК — окончание поиска (выводится окно с выбранным разделом и исчезает окно поиска);
  •  Cancel — закрытие окна поиска.

Кроме того, имеется возможность задания двух параметров:

  •  Same Window — вывод в то же окно (если окно не открыто на полный экран);
  •  Auto-Search — автоматический поиск по образцу по мере ввода последнего.

Заметим, что если установлен флажок Auto-Search, то кнопка Search становится недоступна, поскольку отпадает необходимость в ней.

 

8. Предметный поиск с полным обзором текста справки

 

Предметный поиск с полным обзором текста справки

Предметный поиск с полным обзором текста справки (Full Text Search) — еще один эффективный метод получения справочной информации. Он напоминает ранее рассмотренный, но вхождение заданного образца ищется во всем тексте справочной системы, а не только по индексу, составленному создателями Maple. При этом выводится окно, подобное показанному на рис. 2.11. Обратите внимание на то, что в большом Поле этого окна указано существенно больше разделов справки, чем при поиске по индексу — очевидно, что большинство из них будет случайным упоминанием данного образца.

Рис. 2.10. Окно предметного поиска

Рис. 2.11. Окно предметного поиска с полным обзором текста справки

В этом окне используются те же кнопки управления, что и для окна поиска справки по образцу. Флажок Goodness of Match включает вывод статистики повторяемости образца в текстах разделов справочной системы.

 

10.gif

Изображение: 

11.gif

Изображение: 

9. История работы со справкой

 

История работы со справкой

Было замечено, что пользователь, занятый решением определенного класса задач, обычно неоднократно возвращается к ранее просмотренным разделам справочной системы. Чтобы не искать их всякий раз заново, справочная система хранит список разделов, просмотренных в данном сеансе работы. Он выводится операцией History (рис. 2.12).

Достаточно найти в этом окне нужный раздел справки и нажать кнопку ОК, чтобы вывести его на экран. Кнопка Apply позволяет просматривать каждый новый раздел в своем окне.

Рис. 2.12. Список ранее просмотренных разделов справки

 

12.gif

Изображение: 

10. Модернизация справочной базы данных

 

Модернизация справочной базы данных

В справочной базе данных предусмотрена возможность ее расширения путем записи текущего документа, составленного пользователем, в указанный раздел. При выполнении операции Save to Database выводится специальное окно, в котором надо указать соответствующие данные о модернизируемом разделе справки. Вид окна представлен на рис. 2.13.

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

 

11. Удаление разделов базы данных

 

Удаление разделов базы данных

Для удаления разделов базы данных служит команда Remove Topic. Она выводит окно, показанное на рис. 2.14.

Обратите внимание, что модернизации в обоих случаях подвергается один и тот же файл базы данных maple.hdb.

Рис. 2.13. Окно дополнения базы данных

Рис. 2.14. Окно удаления разделов справочной базы данных

 

13.gif

Изображение: 

14.gif

Изображение: 

12. Включение всплывающих подсказок

 

Включение всплывающих подсказок

На первом этапе знакомства с пользовательским интерфейсом системы Maple 7 удобно использовать всплывающие подсказки. Они вводятся при установке флажка Balloon Help. Для получения подсказки по какому-либо объекту достаточно задержать на пару секунд указатель мыши на этом объекте. Пример вывода всплывающей подсказки показан на рис. 2.1 — она указывает на назначение команды меню Help — Help on "sin".

 

13. Регистрация системы

 

Регистрация системы

Команда Register Maple 7 меню справочной системы открывает окно регистрации системы Maple 7. Это окно позволяет вызвать браузер Интернета, с помощью которого выполняется регистрация.

 

14. Вывод окна с информацией о системе

 

Вывод окна с информацией о системе

Последняя команда меню Help — About Maple 7 — выводит окно с информацией о версии Maple 7 (рис. 2.15). В этом окне содержатся данные, необходимые для регистрации системы Maple 7 (номера лицензии и самого продукта), а также данные о времени выпуска системы.

Рис. 2.15. Окно с данными о системе Maple 7

Обратите внимание, что данный продукт датирован концом мая 2001 г. Как уже отмечалось в уроке 1, официально он выпущен на рынок 21 июня 2001 г.

 

16.gif

Изображение: 

15. Что нового мы узнали?

 

Что нового мы узнали ?

В этом уроке мы научились:

  • Использовать контекстную справку.
  • Работать со справочной системой.

 

Урок 3. Работа с файлами и документами

1. Операции с файлами

 

Урок 3.


Работа с файлами и документами

 

Операции с файлами


Система Maple работает с документами в стиле notebooks («блокноты» или «записные книжки»). Как было показано в уроке 1, документы содержат текстовые и формульные блоки, результаты вычислений, графики разного типа и другие компоненты. Документы могут готовиться с нуля или существовать в готовом виде — подготовленные кем-то ранее. Хранятся документы на внешних устройствах памяти в виде файлов. Файлом называют имеющую имя упорядоченную совокупность данных, размещенную на том или ином носителе — обычно на жестком, гибком или компакт-диске.

В Maple 7 используются файлы различных форматов, который указывается расширением файла (знак * означает произвольное имя файла):

  •  *.ms — файлы документов для систем с графическим интерфейсом (Windows/ Macintosh);
  •  *.msw — файлы документов (Worksheets);
  •  *.txt — текстовые файлы (включая формат Maple-текст);
  •  *.tex — файлы в формате LaTeX;
  •  *.ind и *.lib — файлы библиотек;
  • *.т — файлы внутреннего Maple-языка.

Файлы документов содержат все необходимые данные для правильного отображения содержимого документа в окне редактирования с указаниями координат расположения блоков, фактического содержания и характера выполняемых операций, форматов предоставления информации и т. д. [Таким образом, файл содержит кроме текста, отображаемого на рабочем листе, специальные команды, адресованные Maple, аналогично файлам HTML, имеющим теги, предназначенные для интерпретации браузером.

Предусмотрена возможность записи документов и в особом формате LaTeX, предназначенном для создания книг и статей по математике. Текстовые файлы (с расширением .txt) можно просматривать и редактировать текстовыми редакторами, работающими с ASCII-кодировкой.

Важно отметить, что даже при записи документов со сложными рисунками используется не прямая запись их растровой или векторной копии, а сохранение данных для построения графиков. Поэтому размеры файлов Maple 7 невелики и их легко передавать по современным средствам телекоммуникаций, например по сети Интернет. Они требуют небольшого свободного пространства на дисках для записи. Тем не менее, чем сложнее график, содержащийся в документе, тем больше объем памяти, необходимой для хранения файла. Помимо обычных операций по работе с файлами (запись „а диск и загрузка с диска) предусмотрены возможности распечатки документов принтерами различного типа.

 

2. Меню File

 

Меню File

Меню File содержит основные операции для работы с файлами документов (рис, 3.1). 

Рис. 3.1. Меню File и пустое окно нового документа

Меню содержит ряд операций, разбитых на группы. В первую группу входят следующие операции по работе с документами (в скобках приведены горячие клавиши):

  •  New (Ctrl+N) - создать новый документ;
  •  Open (Ctrl+0) - открыть существующий документ;
  •  Open URL - открыть URL-адрес;
  •  Save (Ctrl+S) - сохранить активный документ;
  •  Save As — сохранить активный документ под новым именем;
  •  Export As — экспортировать файл;
  •  Close (Ctrl+F4) — закрыть окно активного документа;
  •  Save Settings — запись конфигурации (установок) Maple;
  •  AutoSave Settings — автоматическая запись конфигурации.

Вторая группа команд относится к печати документов:

  • Print Preview — предварительный просмотр документа перед печатью;
  • Print (Ctrl+P) — печать документа;
  • Printer Setup — установка параметров принтера.

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

После этой группы команд имеется список документов (файлов с расширением .ms), которые были загружены в систему в предшествующие сеансы работы. Выбрав в этом списке название одного из файлов, можно быстро загрузить его, не тратя времени на открытие файла через команду Open. Последняя группа представлена единственной командой:

  •   Exit (Alt+F4) - выйти из Maple 7.

ПРИМЕЧАНИЕ 

Если вы работаете в русифицированной версии Windows, то горячие клавиши могут содержать вместо латинских букв русские эквиваленты. Например, команда New имеет горячие клавиши Ctrl+N, тогда как в меню они могут быть обозначены как Ctrl+T (см. рис. 3.1). На самом деле, как обозначать клавишу: русской буквой или латинской — дело вкуса.

 

1.gif

Изображение: 

3. Создание нового документа

 

Создание нового документа

Вернемся к широко используемым операциям первой группы и рассмотрим их более подробно. Заметим, что к некоторым из них можно быстро обратиться с помощью «горячих» клавиш (они указаны в скобках после названия команды). Команда New используется для создания нового документа. Она открывает новое пустое окно редактирования и переводит Maple в режим редактирования (рис. 3.1).

При создании нового документа в его начале появляется ячейка со знаком приглашения >, после которой виден мигающий маркер ввода в виде вертикальной черты |. Ячейка ввода обрамляется открывающей квадратной скобкой. Созданный документ приобретает имя Untitled (N) (в вольном переводе — «Безымянный под номером N», где N — целое число). Следуя приглашению программы, можно приступать к работе в Maple.

Операция New дублируется кнопкой со значком в виде чистого листа, размещенной на панели инструментов. Разумеется, нажать ее вы сможете, только если панель инструментов выведена на экран.

 

4. Открытие документа

 

Открытие документа

Команда 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-адреса. Работа с ним очевидна.

 

2.gif

Изображение: 

3.gif

Изображение: 

5. Сохранение документа

 

Сохранение документа

Команда Save записывает содержимое активного в данный момент окна в виде файла на диск с использованием его текущего имени. Исключением будут документы, созданные командой New и не переименованные, тогда действие команды будет аналогично выполнению команды Save as, обсуждаемой ниже. Следует с осторожностью пользоваться командой Save в том случае, когда вы модернизируете какой-либо документ, но желаете сохранить оригинал в неизмененном виде, ведь содержимое модернизированного файла будет записано «поверх» оригинала. Чтобы этого не произошло, для сохранения файла следует воспользоваться командой Save as, описанной в следующем разделе. При подготовке сложных документов рекомендуется периодически (в некоторых ситуациях довольно часто) давать команду Save, сохраняя сделанные изменения. Это позволяет избежать потери хотя бы части проделанной работы в случае сбоя компьютера. (Не важно, чем будет вызвано выключение или зависание компьютера — халтурной работой электрика или программиста или шалостью вашего ребенка — если вы лишний раз сохраните файл, вам придется меньше сил потратить на его восстановление.) Выполнение команды Save не приводит к выдаче сообщений и окон (кроме уже упомянутого исключения), и поэтому ее не обременительно дать лишний раз, особенно если вы запомните «горячие» клавиши для нее — Ctrl+S.

 

6. Запись документа на диск с переименованием

 

Запись документа на диск с переименованием

Команда Save As отличается от предыдущей тем, что перед записью файла на диск в появившемся диалоговом окне вы можете изменить имя файла (рис. 3.4).

Таким образом можно сохранить доработанный документ и в то же время оставить неизменным оригинал.

Рис. 3.4. Диалоговое окно для записи файла с указанием его имени

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

  •  Maple Worksheet (*.rnws/*.ms) — файлы формата Maple 7;
  •  Maple Text (*.txt) — файлы в формате текста Maple;
  •  HTML Source (*.html) — файлы в формате HTML;
  •  Text (*.txt) — файлы в текстовом формате;
  •  LaTeX Source (*.tex) — файлы в формате LaTeX.

Формат HTML — новый для Maple формат, позволяющий записывать файлы документов в виде web-страниц. .

Команда Save as особенно полезна при доработке и модификации файлов, например входящих в комплект поставки системы, когда надо сохранить оригинальные файлы в неприкосновенности. Для этого достаточно записать измененные файлы под новыми именами.

 

4.gif

Изображение: 

7. Экспорт файлов.

 

Экспорт файлов

Maple 7 имеет возможность экспорта файлов в различные форматы. Команда Export As открывает подменю, содержащее форматы, запись в которых поддерживает Maple После выбора нужного формата в подменю появляется окно, аналогичное окну для сохранения файла.

Maple экспортирует файлы в следующие форматы: 

  •  Maple Text (*.txt); 
  •  HTML (*.html);
  •  HTML with MathML (*.html);
  •  Plain Text (*.txt);
  •  Rich Text Format (*.rtf);
  •  LaTeX (*.tex).

Графики Maple может записывать в следующих форматах: DFX, EPS, GIF, JPEG, POV, WMF и BMP.

 

8. Закрытие документа

 

Закрытие документа

Команда Close закрывает окно вместе с текущим документом, и система переходит к работе со следующим окном (либо к пустому серому окну, если был закрыт последний документ).

Если закрываемый документ подвергался модификации, то система спросит, надо ли сохранять изменения (рис. 3.5).

Рис. 3.5. Диалоговое окно, появляющееся при закрытии модифицированного документа

Следует помнить, что каждое окно, будучи сложным графическим объектом, занимает определенный и вовсе не малый объем памяти. Поэтому команда Close является эффективным средством освобождения оперативной памяти, особенно когда закрывается большой документ. Однако надо помнить, что бывшие в нем определения (например, значения переменных, введенные функции пользователя и т. д.) сохраняются в памяти, даже когда документ закрыт, естественно, пока вы не дадите команду restart.

Быстро закрыть документ можно, нажав клавиши Ctrl+F4.

 

5.gif

Изображение: 

9. Запись настроек программы

 

Запись настроек программы

Для записи сделанных настроек Maple в меню File предусмотрены две команды: Save Settings и Auto Save Settings. Последняя команда — это флажок, при установке которого новая настройки Maple будут записываться автоматически при завершении работы.

 

10. Выход из системы

 

Выход из системы

Команда Exit служит для выхода из Maple. Тогда при использовании операции Exit можно наблюдать последовательное исчезновение окон документов. Если пользователь забыл записать какой-либо документ на диск, система сообщит об этом, выдав запрос. Нужно ответить Yes (Да), если документ нужно сохранить, и No (Нет), если сохранение не требуется. Однако стоит сохранить документы, подвергавшиеся редактированию и модификации, заранее — вдруг вы по ошибке нажмете не ту кнопку.

Не следует применять команду Exit, если вам необходимо временно переключиться в окно другой программы, так как повторная загрузка Maple занимает много времени.

 

11. Печать документов

 

Печать документов

Команда Print

Команда Print служит для печати документа. Она имеет кнопку с изображением принтера на панели инструментов для быстрого доступа.

После того как отдана команда Print, появляется диалоговое окно, показанное на рис. 3.6, — стандартное окно печати в Windows.

Рис. 3.6. Окно печати

Нажатие кнопки Свойства в окне печати открывает окно свойств выбранного принтера. Вид окна зависит от типа принтера, функции его элементов достаточно очевидны, поэтому мы воздержимся от обсуждения работы с ним.

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

 

6.gif

Изображение: 

12. Предварительный просмотр страниц

 

Предварительный просмотр страниц

Даже одна страница документа может не поместиться на экране монитора. Поэтому перед печатью полезно просмотреть расположение элементов документа на странице. Для этого служит команда Print Preview, которая выводит окно' с изображением текущей страницы (рис. 3.7).

Рис. 3.7. Предварительный просмотр страницы, предназначенной для печати

У окна просмотра имеется ряд элементов управления. Прежде всего это полосы прокрутки для перемещения изображения документа в окне просмотра. Кроме того, имеется ряд кнопок, назначение которых указано ниже:

  •  Print — печать просматриваемого документа;
  •  Prev. Page — просмотр предыдущей страницы многостраничного документа;
  •  Next Page — просмотр следующей страницы многостраничного документа;
  •  Sngl. Page — просмотр одной полной страницы;
  •  Dbl. Page — просмотр двух полных страниц;
  •  100% — установка масштаба в 100 %;
  •  Zoom In и Zoom Out — увеличение и уменьшение масштаба;
  •  Done — завершение работы с окном предварительного просмотра.

Использование команды Print Preview может сэкономить не один лист читой бумаги и картридж краски.

 

7.gif

Изображение: 

13. Установка параметров принтера

 

Установка параметров принтера

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

Рис. 3.8. Диалоговое окно настройки параметров принтера

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

 

8.gif

Изображение: 

14. Редактирование документов

 

Редактирование документов

Меню Edit

Как видно из рис. 3.9, меню Edit содержит различные операции редактирования. Они делятся на ряд групп. Первая группа содержит следующие операции:

  • Undo (Ctrl+Z) — отменить последнюю операцию редактирования;   
  •  Redo (Ctrl+Y) — восстановить последнюю отмененную операцию; 
  •  Cut (Ctrl+X) — переместить выделенный фрагмент в буфер обмена; 
  •  Copy (Ctrl+C) — скопировать выделенный фрагмент в буфер обмена;
  •  Copy As Maple Text — копирование выделения в буфер обмена в формате Maple-текста;
  •  Paste (Ctrl+V) — вставить содержимое буфера обмена в документ;
  •  Paste Maple Text — вставить данные из буфера обмена в формате Maple-текста;
  •  Delete Paragraph (Ctrl+Del) - удаление параграфа (строки);
  •  Select All (Ctrl+A) — выделение всех объектов документа.

Рис. 3.9. Меню Edit

Операции первой группы используют буфер обмена (Clipboard). Так называется специально организованная и динамически изменяющаяся область памяти в операционной системе Windows. В нее могут помещаться различные (обычно предварительно выделенные) объекты, документы и даже файлы. Буфер можно использовать для обмена объектами как в пределах текущего документа, так и между различными документами и даже приложениями.

ПРИМЕЧАНИЕ 

Очень часто некоторые операции меню Edit будут недоступны — они отображены серым шрифтом это означает, что в данный момент не существует объекта, к которому может быть применена команда. Однако в демо-версии Maple команды копирования и вставки будут недоступны всегда — таково ограничение создателей.

Несколько следующих групп представлены одной операцией:

  •  Find (Ctrl+F5) — выводит окно поиска заданной строки и ее замены на другую строку;
  •  Hyperlinks — редактирование гиперссылок; 
  •  Object — редактирование объекта;
  •  Unit Converter — перевод между различными единицами измерения; 
  •  Complete Command — подсказка для завершения текущей незаконченной команды Maple-языка;
  •   Entry Mode (F5) — переключение режима ввода.

Последняя команда позволяет менять режим строк ввода — они могут содержать математические выражения или неисполняемые текстовые комментарии. Именно благодаря текстовым комментариям документы Maple 7 приобретают достаточно наглядный вид. Наглядность документов дополнительно повышается благодаря возможности представления результатов вычислений (а иногда и вводимых выражений) в естественной математической форме. Восьмая группа команд открывает подменю, содержащие команды с ячейками и секциями документа:

  •  Split or Join — разделение или объединение объектов;
  •  Execute — исполнение выделенных или всех строк документа;
  •  Remove Output — удаление вывода для выделенных или всех строк документа.

Команды подменю Split or Join позволяют легко модифицировать вид документов путем разделения и объединения строк и секций.

 

9.gif

Изображение: 

15. Отмена последней операции

 

Отмена последней операции

Команда Undo Delete служит для отмены последней операции редактирования. Она позволяет удалить до 5 последних операций. Если вы случайно удалили нужный текст — вам придет на помощь команда Undo. В меню, а также во всплывающей подсказке указывается название последней операции редактирования — той, которую вы собрались отменить.

 

16. Восстановление отмененной операции

 

Восстановление отмененной операции

Команда Redo позволяет вернуть отмененную операцию, если в этом возникает необходимость. Действие этой команды, естественно, тоже распространяется не более чем на пять операций. Команды Undo и Redo имеют кнопки (с изображением стрелок) на панели инструментов для быстрого доступа к себе.

 

17. Перенос объекта в буфер обмена

 

Перенос объекта в буфер обмена

Команда Cut копирует выделенный объект в буфер обмена и удаляет его из документа. Выделить объект или группу объектов можно, обведя его мышью при нажатой левой кнопке. Можно также использовать клавиши перемещения курсора при нажатой клавише Shift. Выделенный фрагмент отмечается черным фоном и инверсией цвета входящих в него символов (на рис. 3.9 выделена первая строка).

Графические объекты не инвертируют свои цвета при выделении, к тому же их можно вырезать и копировать, когда на них находится маркер ввода. Вырезанный командой Cut объект поступает в буфер обмена, а его изображение в окне редактирования исчезает. Эта команда выполняется также комбинациями клавиш Shift+Del и Ctrl+X (в зависимости от настроек операционной системы). На рис. 3.10 показан результат выполнения команды Cut — видно исчезновение выделенного на предыдущем рисунке фрагмента в документе.

Рис. 3.10. Документ с рис. 3.9 после выполнения команды Cut

Щелчок левой кнопкой мыши за пределами выделенных объектов снимает все выделения.

 

10.gif

Изображение: 

18. Копирование объекта в буфер

 

Копирование объекта в буфер

Команада Сору аналогична Cut, но с одним существенным отличием — выделенный объект (или блок объектов) не удаляется в окне редактирования. Эта команда обычно используется в том случае, когда нужно перенести заданный объект в другое место, сохранив при этом оригинал, — продублировать объект. Особенно полезна операция Сору при составлении документа из частей других документов, в том числе страниц справочной системы Maple (рис. 3.11). Переключаясь между окнами с помощью команд Сору и Paste, описанных ниже, можно с легкостью составить достаточно большой документ, не написав ни строки.

Рис. 3.11. Пример переноса выделенной в одном документе строки в окно другого документа

В данном случае титульная надпись, удаленная командой Cut, перенесена в другой, пустой, документ.

 

11.gif

Изображение: 

19. Перенос и копирование объектов перетаскиванием

 

Перенос и копирование объектов перетаскиванием

В Maple 7 имеется возможность переноса объектов из одного окна в другое методом перетаскивания (Drag and Drop). Для этого на группу выделенных объектов надо навести указатель мыши и при нажатой левой кнопке начать перенос объектов в новое место или новое окно. Отпустив левую кнопку мыши, можно наблюдать перенос объектов на новое место. Если все время держать нажатой клавишу Ctrl, то переносимый блок объектов будет сохранен и на старом месте.

 

20. Копирование в буфер обмена в формате Maple-текста

 

Копирование в буфер обмена в формате Maple-текста

Команда Copy As Maple Text используется в тех случаях, когда необходимо, чтобы скопированная в буфер информация была представлена в текстовом формате. При этом в буфер копируются выражения как из строк ввода, так и строк вывода — все в текстовом формате. Используя в этом случае команду Paste можно вывести из буфера все выражения как из входных, так и из выходных строк в текстовом формате (рис. 3.12).

Рис. 3.12. Пример использования операций Copy as Maple Text и Paste

Обратите внимание, что графическое представление интеграла в строке вывода превратилось в его отображение в текстовом формате. То же имеет место в отношении представления производных, сумм, произведений и т. д. Обратите также внимание на то, что текстовый комментарий в данном случае выводится стандартным шрифтом. Атрибуты (признаки) стиля, цвета и размера символов теряются.

 

12.gif

Изображение: 

21. Вставка из буфера обмена в документ

 

Вставка из буфера обмена в документ

Команда Paste копирует содержимое буфера обмена, помещенное туда командами Сору или Cut, в место, указанное маркером ввода. При этом сохраняются форматы всех объектов документа, если они были скопированы (рис. 3.13).

Как видно из рис. 3.13, возможно применение этой операции не только в пределах окна одного документа, но и при переносе данных из одного окна в другое.

Надо отметить, что при копировании в буфер обмена математической формулы из ячейки вывода и вставке ее в строку ввода формат формулы меняется — она автоматически превращается в текстовое выражение. Это иллюстрирует рис. 3.14.

Рис. 3.13. Пример использования операций Сору и Paste

Рис. 3.14. Пример копирования формулы из ячейки вывода одного документа в ячейку ввода другого документа

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

 

13.gif

Изображение: 

14.gif

Изображение: 

22. Вставка из буфера обмена в формате Maple-текста

 

Вставка из буфера обмена в формате Maple-текста

Операция 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.

 

15.gif

Изображение: 

23. Уничтожение выделенного абзаца

 

Уничтожение выделенного абзаца

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

 

24. Выделение всех объектов

 

Выделение всех объектов

 Команда Select All выделяет все объекты документа. Это полезно, например, для вставки всего документа в другой документ.

 

25. Поиск подстроки и ее замена

 

Поиск подстроки и ее замена

Команда Find служит для поиска указанного фрагмента в тексте документа. Она открывает окно Find, в котором можно указать искомую фрагмент-подстроку (рис. 3.16). При нажатии кнопки Next будет производиться поиск следующего вхождения (ниже по тексту), а при использовании Previous — предыдущего. Если искомое слово не найдется, выводится окно с сообщением (слева на рис. 3.17).

Рис. 3.16. Поиск заданного фрагмента текста

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

С помощью команды Find возможна также замена подстроки. Для этого надо указать текст замены в нижнем поле окна. Чтобы заменить найденную подстроку, надо нажать кнопку Change, чтобы заменить все подстроки, — Change All.

Рис. 3.17. Пример замены одной подстроки другой

 

16.gif

Изображение: 

17.gif

Изображение: 

26. Включение и выключение режима ввода текста

 

Включение и выключение режима ввода текста

Maple 7 позволяет вводить в ячейки текст комментариев и исполняемые математические выражения (для того чтобы ввести в одну ячейку комментарий и функцию Maple, надо воспользоваться командами меню Insert). Операция Input mode служит для переключения между режимами ввода. Горячая клавиша команды — F5. Если режим ввода текста комментария включен, приглашение в виде знака > исчезает. Если этот режим отменен, то можно вводить исполняемые математические выражения, придерживаясь синтаксиса языка Maple.

 

27. Операции разделения и объединения объектов

 

Операции разделения и объединения объектов

Команда Split or Join служит для разделения или объединения объектов документа, она открывает подменю со следующими операциями:

  •  Split Execution Group (F3) — разделение строки на две;
  •  Join Execution Group (F4) — соединение смежных строк; 
  •  Split Section (Shift+F3) — разделение секции на две; 
  •  Join Section (Shift+F4) — объединение смежных секций.

 

28. Исполнение выделенных ячеек или всего документа

 

Исполнение выделенных ячеек или всего документа

Команда Execute служит для запуска вычислений во всех выделенных ячейках или во всех ячейках документа. Соответственно она имеет подменю с двумя командами:

  •  Selection — исполнение выделенных ячеек;
  •  Worksheet — исполнение ячеек по всему документу.

Заметим, что альтернативой является нажатие клавиши Enter для каждой исполняемой строки документа, что при больших документах довольно нудное занятие.

 

29. Удаление ячеек вывода

 

Удаление ячеек вывода

Команда Remove Output служит для удаления из документа всех ячеек вывода. Это полезно для редактирования ячеек ввода, поскольку объем документа при этом заметно сокращается. Она открывает подменю с двумя командами:

  •  From Selection — удаление вывода только для выделенных ячеек; 
  •  From Worksheet — удаление вывода для всего документа.

Рассмотрим, к примеру, документ, который был представлен на рис. 3.16. После выполнения для него команды Remove Output From Worksheet документ принимает вид, показанный на рис. 3.18.

Заметим, что документ с рис. 3.18 можно вернуть к исходному виду, выполнив команду Execute Worksheet, описанную выше. Однако в данном конкретном случае исполнение команды value(") даст сообщение об ошибке, поскольку в версиях Maple 6 и 7 данная команда должна быть записана в виде valueU).

Рис. 3.18. Документ после удаления всех ячеек вывода

 

18.gif

Изображение: 

30. Операции вставки

 

Операции вставки

Меню Insert

Документ системы Maple 7 состоит из различных объектов — текстовых областей, областей ввода, ячеек, абзацев, секций, подсекций и т. д. Некоторые из них формируются автоматически по мере ввода и исполнения документа. Но, кроме того, в меню Insert (рис. 3.19) сосредоточены основные команды по обеспечению вставки различных объектов в редактируемый документ. Это позволяет быстро модифицировать документ и добиться его большей выразительности.

Рис. 3.19. Меню Insert

Следует отметить, что меню Insert является контекстно-зависимым. К примеру, оно исчезает, если выделен график.

Меню вставки разделено на две группы. В первой группе содержатся следующие команды:

  •  Text (Ctrl+T) — ввод текста;
  •  Standard Math (Ctrl+R) — ввод неисполняемых математических выражений;
  •   Maple Input (Ctrl+M) — ввод исполняемых выражений в Maple-формате;
  •  Standard Math Input (Ctrl+G) — ввод выражений в математической форме в строку ввода.

Во второй группе содержатся следующие команды:

  •  Execution Group — вставка исполняемой ячейки до или после маркера ввода;
  •  Plot — вставка пустого шаблона двумерного или трехмерного графика;
  •  Spreadsheet — вставка электронной таблицы;
  •  Paragraph — вставка текстовой области (абзаца);
  •  Section — вставка кнопки секции;
  •  Subsection — вставка кнопки подсекции;
  •  HyperLink — вставка гиперссылки;
  •  Object — вставка связанного или внедренного объекта;
  •  Page Break — вставка разрыва страниц.

Перейдем к более подробному рассмотрению этих команд.

 

19.gif

Изображение: 

31. Ввод текста

 

Ввод текста

Команда Text приводит к исчезновению знака приглашения , после чего можно сразу же начинать ввод текста комментария. Данная команда позволяет формировать ячейку, содержащую текст комментария и исполняемые функции.

 

32. Ввод выражений в стандартной форме

 

Ввод выражений в стандартной форме

Команда Standard Math выводит в строке ввода вопросительный знак. После этого в поле ввода строки форматирования можно начинать ввод неисполняемого математического выражения (рис. 3.20).

Рис. 3.20. Ввод математического выражения по команде Standard Math

По завершении ввода надо нажать клавишу Enter, и выражение появится в строке ввода (рис. 3.21). При этом выражение будет выделено.

Рис. 3.21. Завершение ввода по команде Standard Math

 

20.gif

Изображение: 

21.gif

Изображение: 

33. Ввод выражений

 

Ввод выражений

Команда Maple Input в меню Insert превращает текущую строку в строку ввода исполняемых математических выражений. В начале строки появляется приглашение ко вводу в виде значка , после чего можно начинать ввод выражения. Кнопка со знаком х в начале контекстной панели позволяет представить вводимое выражение в естественной математической форме, если таковая возможна. В таком случае ввод выражения осуществляется в поле на контекстной панели инструментов.

 

34. Ввод математических выражений

 

Ввод математических выражений

Команда Standard Math Input выводит новую строку ввода со знаком вопроса в ней. После этого ввод начинается в поле ввода строки форматирования. По завершении ввода нажимается клавиша Enter и введенное выражение появляется в строке ввода (обычно с выделенной последней частью).

 

35. Вставка исполняемых ячеек до и после курсора

 

Вставка исполняемых ячеек до и после курсора

Команда Execution Group обеспечивает вывод подменю с двумя командами: 

  •  Before Cursor (Ctrl+K) — вставка исполняемых ячеек ввода до курсора; 
  •  After Cursor (Ctrl+J) — вставка исполняемых ячеек ввода после курсора.

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

 

36. Электронные-таблицы

 

Электронные таблицы

Вставка электронных таблиц

Электронные таблицы были впервые введены в реализацию 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).

 

22.gif

Изображение: 

37. Меню Spreadsheet

 

Меню Spreadsheet

Для работы с таблицами в Maple 7 появилось отдельное меню Spreadsheet (рис. 3.23). Оно содержит набор команд, обеспечивающих работу с табличными данными:

  •  Evaluate Selection — вычисление выражения в выделенной ячейке;
  •  Evaluate Spreadsheet — вычисление выражений по всем ячейкам таблицы;

Рис. 3.23. Шаблон электронной таблицы и меню Spreadsheet 

  •  Row — работа со строками (вставка, удаление и т. д.); 
  •  Column — работа со столбцами (вставка, удаление и т. д.); 
  •  Fill — автоматическое заполнение ячеек;
  •  Import data — импорт данных из других программ (например, из MATLAB); 
  •  Export data — экспорт данных в другие программы;
  •  Properties — просмотр свойств ячеек; 
  •  Show Border — управление показом обрамления таблицы;
  •  Resize to Grid — изменение размеров видимой таблицы с обрезанными ячейками до размера таблицы с целыми ячейками (дополнение идет по линиям раздела ячеек).

Если таблица активизирована (курсор находится внутри таблицы), то нажатие правой клавиши мыши вызовет появление контекстного меню. Его вид аналогичен виду описанного выше меню Spreadsheet.

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

 

23.gif

Изображение: 

38. Работа с электронными таблицами

 

Работа с электронными таблицами

Для ввода данных в ячейку таблицы достаточно щелкнуть на ней мышью. После этого можно вводить нужные данные в поле ввода контекстной панели (она видна на рис. 3.22 и 3.23 под панелью инструментов). Контекстная панель в режиме редактирования таблиц имеет четыре кнопки. Их назначение (слева направо) следующее:

  •  Fill a range of cells — автоматическое заполнение ячеек таблицы;
  •  Evaluate all stale cells in the spreadsheet — исполнение всех ячеек таблицы;
  •  Accept the input and evaluate it — ввод напечатанных данных и их исполнение;
  •  Restore input to the previous value — восстановление предшествующего значения ячейки.

Основным способом ввода данных является активизация ячейки таблицы мышью и ввод данных (объектов) в поле ввода контекстной панели. Нажатие третьей кнопки (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.

 

24.gif

Изображение: 

25.gif

Изображение: 

26.gif

Изображение: 

39. Вставка текстовой области

 

Вставка текстовой области

Для вставки строки текстовой области служит операция Paragraph. Она создает строку без приглашения >, в которую можно вводить текст. Единственным отличием этой команды от команды Text является то, что она вставляет новую строку, не меняя статуса имеющихся строк. При вводе длинных текстов число строк ввода автоматически увеличивается.

 

40. Вставка кнопки секции.

 

Вставка кнопки секции

Команда Section служит для установки кнопки, указывающей начало секции (см. рис. 2.6 с такой кнопкой) и служащей для открытия/закрытия секции. Секция может состоять из различных объектов: текстовых комментариев, строк ввода, строк вывода, графиков и других секций (подсекций).

Как и в операционной системе Windows, значок *+» указывает на закрытую секцию, значок «-» — на открытую. Секции предоставляют дополнительную свободу управления документом.

 

41. Вставка кнопки подсекции

 

Вставка кнопки подсекции

Подсекцией называют секцию, размещенную внутри другой секции. Создавая подсекции, можно строить документы со сложной древообразной структурой, напоминающей разделы книги с хорошей рубрикацией. Это может оказать большую помощь в создании электронных вариантов книг и обучающих программ в среде Maple 7.

Команда Subsection создает кнопку секции внутри уже созданной секции. Все, сказанное о секциях, распространяется и на подсекции!

 

42. Вставка гиперссылки

 

Вставка гиперссылки

Еще одна возможность сделать документы более удобными в работе заключается в создании гиперссылок. Гиперссылка — это текстовая надпись, подчеркнутая снизу, при щелчке на которой Maple перейдет к сопоставленному с ней объекту. Гиперссылку можно связать со следующими объектами:

  •  с файлом любого документа (Worksheet:);
  •  с заданной страницей справочной системы (Help Topic:);
  •  со страницей в Интернете (URL:).

Для создания гиперссылки надо установить на место будущей ссылки маркер ввода и выполнить операцию HyperLink. При этом появится окно связывания гиперссылки с объектом, показанное на рис. 3.27.

В окне надо задать заголовок гиперссылки (в виде короткой текстовой надписи) и выбрать одно из трех положений переключателя, перечисленных выше. Если вы намерены сослаться на документ, то следует использовать кнопку просмотра Browse для поиска нужного файла. Появляющееся окно показано на рис. 3.27 справа.

Как уже говорилось, гиперссылка выглядит как надпись, подчеркнутая снизу. Активизируя ее, можно вызвать объект, связанный с ней, — в нашем случае другой документ, файл которого находится на жестком диске. Использование гиперссылки на другой документ в Maple 7 реализовано не очень удачно. Дело в том, что в этом случае исходный документ по умолчанию закрывается. Если последние изменения в нем не были сохранены, то появляется окно с предупреждением об этом.1 Оно показано на рис. 3.28.

Можно избежать закрытия документа, щелкнув на кнопке New Window; Maple предоставит открывающемуся документу новое окно. Это иллюстрирует рис. 3.29. В нем также показано контекстное меню гиперссылки. Это меню содержит три команды:

  •  Properties — вывод окна свойств гиперссылки (рис. 3.27, слева);
  •  Follow link — смена документа с гиперссылкой на указанный в ней документ;
  •  Open link — открытие отдельного окна для открываемого документа (рис. 3.29).

Рис. 3.27. Пример создания гиперссылки

Рис. 3.28. Окно с предупреждением о закрытии документа при переходе по гиперссылке и необходимости сохранения изменений

Рис. 3.29. Результат активизации гиперссылки

Гиперссылки позволяют создавать сложные структуры документов, содержащие множество объектов, вызываемых в произвольном порядке. Например, для возврата в исходный документ можно организовать обратную гиперссылку в вызываемом документе. Лучшим примером такого применения гиперссылок является справочная система Maple 7. Гиперссылки также широко используются при создании web-страниц. Maple 7 позволяет сохранять документы в виде web-страниц (формат HTML), которые без каких-либо преобразований можно публиковать в сети Интернет.

Весьма привлекательной кажется возможность организации гиперссылок на разделы справочной системы. Она позволяет создавать учебные программы со ссылками на справки системы Maple 7.

 

23.gif

24.gif

25.gif

43. Операции форматирования

 

Операции форматирования

Обзор операций меню Format

Операции форматирования служат для придания отдельным объектам и документу в целом определенного стиля путем изменения как общего вида объектов, так и ряда их частных характеристик, например цвета и размера надписей, выбранного набора шрифтов и т. д. При этом возможна подстройка под вкус любого пользователя и подготовка документов высокого полиграфического качества. Стиль является центральным понятием для современных документов, будь то документы текстового процессора класса Word или системы символьной математики Maple 7.

Команды форматирования в меню Format разбиты на шесть подгрупп. В первой подгруппе содержатся две команды:

  •  Styles — установка стилей для всех объектов;
  •  Page Numbers — задание параметров нумерации страниц.

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

  •  Italic (Ctrl+I) — задание курсивного начертания;
  •  Bold (Ctrl+B) — задание полужирного начертания;
  •  Underline (Ctrl+U) — задание подчеркнутого начертания.

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

В третью группу попали команды выравнивания текста: 

  •  Left Justify — по левому краю; 
  •  Center — по центру; 
  •  Right Justify — по правому краю. 

В четвертой группе находятся следующие команды: 

  •  Paragraph — форматирование абзаца; 
  •  Character — форматирование символов. И наконец, в пятой группе имеются еще две команды:
  •   Indent (Ctrl+.) — внедрение текущей строки в секцию; 
  •  Outdent (Ctrl+,) — выведение текущей строки из секции.

В последнюю группу попала еще одна команда, не имеющая непосредственного отношения к форматированию символов:

  •  Convert to — перевод из одной метрической системы в другую.

 Рассмотрим применение команд форматирования.

 

44. Установка стилей.

 

Установка стилей

Команда 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.

 

26.gif

27.gif

Изображение: 

45. Форматирование абзацев

 

Форматирование абзацев

Для форматирования абзацев служит команда Paragraph. Она сразу выводит окно установки параметров абзаца. Это окно было показано на рис. 3.31. Правила работы с этим окном уже были описаны выше, так что нет смысла их повторять.

 

46. Форматирование символов

 

Форматирование символов

Команда Character открывает окно задания стиля символов: шрифта, размера, начертания и цвета.

 

47. Операция внедрения ячеек в секцию

 

Операция внедрения ячеек в секцию

Ранее описывалась операция вставки кнопки секции. При выполнения вставки сама секция еще пуста и ее надо заполнять. Команда Indent (или комбинация клавиш Ctrl+.) позволяет оформить в виде секции уже введенные ячейки. На рис. 3.32 показано такое оформление для ячейки документа с вычислением интеграла. Кнопка при этом имеет знак «минус», что указывает на ее открытое состояние.

Рис. 3.32. Применение операции Indent для одной из ячеек документа

Если щелкнуть на кнопке со знаком «минус», то секция свернется и вместо нее останется только кнопка со знаком «плюс» (рис. 3.33).

 

28.gif

Изображение: 

48. Операция выведения ячеек из секции

 

Операция выведения ячеек из секции

Команда Outdent (или комбинация клавиш Ctrl+,отменяет оформление ячейки в виде секции. Она действует в том случае, если маркер ввода стоит внутри секции.

Рис. 3.33. Пример документа с закрытой секцией

 

29.gif

Изображение: 

49. Работа с объектами

 

Работа с объектами

Хотя данная книга посвящена одной Maple 7, надо особо отметить, что эта программа способна взаимодействовать с рядом других программ, например с текстовым процессором Word, табличным процессорам Excel и даже с другими системами компьютерной математики, например, MATLAB. Это может быть копирование через буфер обмена или связь с применением механизма OLE. В роли объектов могут выступать ячейки из данного или других документов, текстовые фрагменты и файлы, рисунки в различных форматах и т. д. Работа с объектами существенно расширяет возможности пользователя по части создания полноценных и удобных в работе документов.

 

50. Вставка объектов

 

Вставка объектов

Для организации вставки объекта используется команда 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 надо установить флажок В виде значка. Щелчок на вставленном в документ значке вызовет появление объекта. Этот способ удобен, когда объекты, например рисунки, имеют большой размер и их постоянное присутствие на экране нецелесообразно.

Необязательно каждый раз создавать объект с нуля — можно загрузить его из файла, в этом случае следует установить положение переключателя Создать из файла. Для поиска нужного файла пригодится кнопка Обзор. После выбора файла надо решить, какой вид будет иметь значок связи с файлом — вид стандартного значка или уменьшенной копии изображения.

 

30.gif

Изображение: 

31.gif

Изображение: 

32.gif

Изображение: 

51. Редактирование вставленного объекта

 

Редактирование вставленного объекта

Если объект выделен (как обычно, щелчком мыши), то команда Edit > Object становится активной и может даже модифицироваться в зависимости от вида объекта, с которым установлена связь. Например, если объектом является .рсх-файл, то эта строка меню открывает подменю с тремя командами:

  •  Edit — редактировать объект;
  •  Open — открыть приложение, связанное с объектом; 
  •  Print — распечатать объект.

Редактирование объекта производится в среде того приложения, с которым объект связан. Естественно, что изменение файла повлечет за собой отражение в документе его измененного варианта. Следует отметить, что в некоторых копиях программы Maple 7 операция Object не работает. Однако сохраняется возможность редактирования объекта в создавшей его программе после двойного щелчка на нем.

 

52. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Создавать новый документ.
  • .Загружать ранее созданные документы.
  •  Работать с файлами документов.
  •  Редактировать документы.
  •  Печатать документы.
  •  Осуществлять операции вставки.
  •  Выполнять операции форматирования.
  •  Вставлять в Maple 7 объекты, созданные другими программами.
  •  Работать с объектами.

 

Урок 4. Управление интерфейсом пользователя

1. Управление видом интерфейса и документа

 

Урок 4.


Управление интерфейсом пользователя

 

Управление видом интерфейса и документа


Меню View

Для управления видом интерфейса и документа служит меню View. Оно содержит ряд флажков и несколько команд управления общим видом программы (рис. 4.1). Установленные флажки, управляющие показом элементов интерфейса, распространяют свое действие на все открытые документы. При выходе из системы (командой Exit) все установки сохраняются, так что при новом запуске системы внешний вид интерфейса будет определяться именно ими.

Рис. 4.1. Меню View

Команды меню View разбиты на несколько групп. Первая группа содержит флажки, относящиеся к управлению показом главной и контекстной панелей инструментов, а также строки состояния системы:

  •  Toolbar — управление показом панели инструментов;
  •  Context Bar — управление показом контекстной панели;
  •  Status Line — управление показом строки состояния.

Вторая группа задает показ палитр и представлена одной командой, открывающей подменю управления показом палитр Palettes, содержащей флажки:

  •  Symbol Palette — палитра символов; 
  •  Expression Palette — палитра выражений; 
  •  Matrix Palette — палитра шаблонов матриц; 
  •  Vector Palette — палитра шаблонов векторов.

И команды:

  • Show All Palettes — показать все палитры;
  •  Hide All Palettes — скрыть все палитры.

Третья группа в меню View задает масштаб отображения документа на экране и установку закладок (bookmarks):

  •  Zoom Factor — задание масштаба просмотра документа;
  •  Bookmarks — установка закладок.

Четвертая группа обеспечивает переходы по гиперссылкам:

  •  Back — переход обратно по последней пройденной гиперссылке;
  •  Forward — команда, обратная команде Back.

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

Пятая группа представлена командой Hide content, открывающей подменю скрытия элементов документа:

  •  Hide Spreadsheets — скрыть электронные таблицы;
  •  Hide Input — скрыть ввод;
  •  Hide Output — скрыть вывод;
  •  Hide Graphics — скрыть графические объекты

Шестая группа параметров управляет показом некоторых объектов документа:

  •  Show Invisible Characters — показ непечатаемых символов;
  •  Show Section Ranges (Shift+F9) — показ областей секций;
  •  Show Group Ranges — показ областей групп;
  •  Show OLE type — показ объектов OLE.

В седьмой группе содержатся следующие команды:

  •  Expand All Sections — раскрыть все секции;
  •  Collapse All Sections — свернуть все секции.

Действие всех перечисленных команд более подробно описано ниже. Рекомендуется поэкспериментировать с командами — когда вы уясните их действие, вы сможете настроить интерфейс Maple на свой вкус.

 

1.gif

Изображение: 

2. Управление показом панели инструментов (Toolbar)

 

Управление показом панели инструментов (Toolbar)

Панель инструментов (Toolbar) служит для быстрого управления системой без обращения к командам меню. Она позволяет вызывать наиболее часто используемые команды нажатием кнопки. Назначение всех кнопок этой панели было описано выше и представлено на рис. 1.21.

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

Флажок Toolbar управляет показом панели инструментов.

 

3. Управление показом контекстной панели

 

Управление показом контекстной панели

Панель Context Bar служит для размещения кнопок быстрого доступа к операциям с текущим объектом. 

Флажок Context Bar задает отображение контекстной панели на экране. Поскольку панель форматирования весьма удобна для оперативной работы, единственным мотивом временного ее удаления является необходимость высвободить больше , места на экране монитора для работы с документом.

 

4. Управление показом строки состояния

 

Управление показом строки состояния

Строка состояния внизу экрана, как отмечалось, выводит контекстно-зависимую информацию о состоянии программы в данный момент времени. В ряде случаев ее можно считать элементом контекстно-зависимой справки. Флажок Status Bar служит для управления показом строки состояния.

 

5. Вывод палитр математических символов

 

Вывод палитр математических символов

Палитры математических символов, впервые введенные в версии Maple V R5, являются очень удобным средством для облегчения набора математических выражений начинающим пользователям. Они выводятся на экран командой Palettes и показаны на рис. 1.11. Всего имеются четыре палитры:

  •  Symbol — палитра ввода греческих символов и констант; 
  •  Expression — палитра ввода операторов и выражений; 
  •  Matrix — палитра ввода матриц; 
  •  Vector - новая (для Maple 7) палитра ввода векторов.

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

Итак, в строке ввода введенный оператор или символ не обязательно повторит оператор или символ палитры. Это хорошо видно из рис. 4.2, на котором показан ввод с помощью палитры выражений шаблона определенного интеграла и его последовательное заполнение. Для наглядности заполнение каждого параметра дано в новой строке ввода.

Рис. 4.2. Пример ввода шаблона определенного интеграла из палитры выражений

 

2.gif

Изображение: 

6. Установка масштаба отображения документа

 

Установка масштаба отображения документа

Команда Zoom Factor задает масштаб отображения текущего документа. Он задается в процентах относительно масштаба просмотра, заданного по умолчанию, — он принят за 100 %. Команда выводит подменю с перечнем возможных масштабов просмотра. На рис. 4.3 показано, как будет выглядеть документ при установке масштаба просмотра в 150 %. На этом рисунке показано подменю выбора масштаба в открытом виде.

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

Рис. 4.3. Вид документа при масштабе просмотра в 150 %

 

3.gif

Изображение: 

7. Установка закладок

 

Установка закладок

При работе с большими документами, как и при чтении книг, полезно устанавливать специальные маркеры — закладки. Для установки такой закладки достаточно поместить в нужное место документа маркер ввода и выполнить команду View > Bookmarks > Edit Bookmarks. Она выводит окно добавления и модификации закладки (рис. 4.4). Кнопка ОК вводит новую закладку, а кнопка Cancel позволяет отказаться от выполнения данной операции.

Если теперь вновь посмотреть подменю Bookmarks, в нем появится строка с созданной закладкой (рис. 4.5).

В нашем случае в списке представлены две ранее созданные закладки с именами «Это определенный интеграл» и «А это значение определенного интеграла».

При переходе по закладке строка, в которой установлена закладка, размещается в верхней части окна редактирования и маркер ввода устанавливается в место, которое определено закладкой. Таким образом, закладки — эффективное средство для быстрого перехода в отмеченные места документа. Однако надо помнить, что в отличие от закладок в книгах закладки в документах Maple 7 не видны — они имеются лишь в списке закладок, открываемом командой Bookmarks (рис. 4.5). Удалить созданную закладку не так-то просто: вам нужно перейти по закладке, дать команду View > Bookmarks > Edit Bookmarks и удалить текст в поле имени. Теперь нажатие кнопки ОК приведет к окну с предупреждением об удалении закладки. Нажмите ОК в обоих окнах — и закладка исчезнет.

Рис. 4.4. Пример создания и редактирования закладки

Рис. 4.5. Просмотр закладок

 

4.gif

Изображение: 

5.gif

Изображение: 

8. Управление показом компонентов документа

 

Управление показом компонентов документа

Документы Maple 7 состоят из ряда основных элементов. Это ячейки (строки) ввода и вывода, графики и электронные таблицы. При подготовке различных электронных книг, учебников и статей возникает необходимость скрыть тот или иной компонент документа. Например, педагог может захотеть скрыть от учащихся строки ввода, чтобы они могли мысленно представить функции, отображаемые показанными в документе графиками. Или, наоборот, скрыть графики, чтобы учащиеся назвали их особенности исходя из записи функций. Все эти возможности и обеспечивает команда View > Hide Content.

Для примера на рис. 4.6 показан документ, у которого скрыты все строки ввода и оставлены только строки вывода.

Рис. 4.6. Документ со скрытыми ячейками ввода

Разумеется, можно вернуть показ строк ввода, просто повторно дав эту команду Hide Input в подменю команды View > Hide Content > Hide Input (рис. 4.6). Co скрытием других компонентов документов читатель может разобраться самостоятельно.

 

6.gif

Изображение: 

9. Управление показом непечатаемых символов.

 

Управление показом непечатаемых символов

В любом документе незримо присутствуют различные непечатаемые символы, например управляющие символы перевода строки или пробелы. Это хорошо известно читателям, работающим с текстовым процессором Word. Иногда полезно вывести эти символы — например, если вам неясно, сколько пробелов стоит между какими-то словами.

Для вывода непечатаемых символов служит команда-флажок Show Invisible Characters (рис. 4.7). Ее можно также дать, нажав кнопку на панели инструментов с изображением управляющего символа перевода строки — «fl». Этот символ, кстати, и является одним из наиболее часто встречающихся управляющих непечатаемых символов.

Рис. 4.7. Вид документа с выводом непечатаемых управляющих символов

Помимо символа перевода строки вы увидите множество символов пробела в виде точки на середине строки. По числу точек между словами можно судить о том, сколько пробелов установлено между ними. Проявятся также табуляции и другие управляющие операции, встречающиеся в документах Maple 7.

 

7.gif

Изображение: 

10. Управление показом областей секций

 

Управление показом областей секций

Понятие о секциях и подсекциях

Как уже отмечалось, документ Maple 7 состоит из отдельных ячеек (в оригинале — групп, groups). Они выделяются слева длинными тонкими квадратными скобками. Есть еще один способ выделения ячеек — объединение их в секции. Секция начинается с кнопки со знаком «плюс» или «минус» (рис. 4.8), управляющей ее состоянием: открытым или закрытым.

Рис. 4.8. Пример документа с открытой секцией и закрытой подсекцией

Для создания секции или подсекции необходимо дать команду Insert > Section (или Insert > Subsection), что указано на рис. 4.8. Секция выделяется вертикальной одиночной линией, а подсекция — двойной линией.

Секции и подсекции выгодно отличаются от ячеек тем, что они могут быть при необходимости закрыты и представлены только кнопкой со знаком «плюс». Таким образом, в секции удобно помещать различные вспомогательные вычисления, которые не стоит обозревать постоянно. Хотите посмотреть на них — нажмите кнопку, и содержимое секции появится под ней с выделением вертикальной чертой (рис. 4.9).

Секции весьма удобно применять и для подготовки документов в форме электронных книг. В этом случае секции снабжаются текстовыми заголовками и, по существу, являются главами книги, а подсекции — параграфами. Этот способ представления документов нашел широкое применение в сети Интернет, где он (наряду с гипертекстовыми и гипермедиа-ссылками) используется при создании web-страниц. Версия Maple 7 позволяет готовить и сохранять на диске документы в формате HTML, что позволяет напрямую готовить web-страницы.

Рис. 4.9. Пример документа с рис. 4.8 с открытой подсекцией

 

8.gif

Изображение: 

9.gif

Изображение: 

11. Управление показом областей секций

 

Управление показом областей секций

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

Тем не менее в окончательно отлаженном документе необходимость в применении линии показа области секции или подсекции отпадает. С помощью флажка Show Section Ranges можно управлять показом линий выделения областей секций и подсекций. Если этот флажок установлен, то линии показа областей секций и подсекций видны, как на рис. 4.9. Если его снять, то эти линии исчезнут (рис. 4.10).

Обратите внимание, что линии выделения групп (ячеек) остаются.

Рис. 4.10. Вид документа с рис. 4.9 при снятии показа областей секции и подсекции

 

10.gif

Изображение: 

12. Управление показом областей ячеек (Show Group Ranges)

 

Управление показом областей ячеек (Show Group Ranges)

Команда Show Group Ranges служит для управления показом областей ячеек (групп), то есть длинных квадратных скобок, обрамляющих ячейки слева. Если флажок установлен, то линии показа областей ячеек видны. Если его снять, то эти линии исчезают, как показано на рис. 4.11, где убраны линии выделения как секции и подсекции, так и ячеек.

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

 

13. Закрытие всех секций

 

Закрытие всех секций

Все секции и подсекции документа можно закрыть командой Collapse All Sections. К примеру, если применить ее к документу, показанному на рис. 4.9, то документ примет вид, показанный на рис. 4.12.

Рис. 4.11. Документ с рис. 4.10 после удаления линий показа областей ячеек

Рис. 4.12. Документ с рис. 4.9 при закрытии всех секций

Документ с закрытыми секциями (и подсекциями) занимает на экране (и при распечатке принтером) минимальное место. При этом, естественно, содержимого секций и подсекций не видно.

 

11.gif

Изображение: 

12.gif

Изображение: 

14. Раскрытие всех секций

 

Раскрытие всех секций

Для раскрытия всех секций служит команда Expand All Sections. Она открывает и все подсекции. К примеру, если применить эту операцию к документу, показанному на рис. 4.12, то он вернется к исходному виду (рис. 4.9).

Таким образом, Maple 7 имеет достаточно простые, но в то же время полные средства по управлению видом пользовательского интерфейса (окна) системы и видом имеющегося в нем документа. Это позволяет пользователю настраивать интерфейс и вид документа в соответствии со своими привычками, обеспечивая комфортную работу с программой.

 

15. Работа с параметрами Maple 7

 

Работа с параметрами Maple 7

Меню Options

Помимо ряда уже рассмотренных команд в меню Options сосредоточены средства для установки некоторых глобальных параметров ввода и вывода документов. Их число в Maple 7 существенно увеличено.

Первая группа команд содержит две команды:

  •  Replace Output — управляет характером вывода;,
  •  Insert Mode — устанавливает режим вставки при вводе.

Во второй группе всего одна команда Browser — задание броузера для перехода по URL.

Третья группа также представлена одной командой:

  •  Export — параметры экспорта документов.

Четвертая группа содержит 6 команд:

  •  Input Display — управление показом выражений в строке ввода;
  •  Output Display — управление показом результатов вычислений;
  •  Assumed Variables — контроль за предполагаемыми переменными;
  •  Plot Display — управление отображением графиков;
  •  Display 2D-legends — управление показом подписей обозначений двумерной графики;
  •  Print Quality — управление качеством печати.

Пятая и шестая группы содержат по одной команде:

  •  Palette Size — управление размером палитр;
  •  AutoSave — управление автоматическим сохранением документа.

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

 

16. Управление выводом

 

Управление выводом

Команда 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 в том случае, когда желательно знать суть промежуточных преобразований и самих исходных выражений, поскольку они (а возможно, и предшествующие результаты преобразований) при ее использовании исчезают.

17. Установка режима вставки новой ячейки

 

Установка режима вставки новой ячейки

Этот флажок, будучи установленным, обеспечивает при нажатии клавиши Enter ввод новой пустой ячейки. Если флажок снят, то такая вставка не осуществляется.

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

 

18. Задание браузера

 

Задание браузера

Для открытия документов web-страниц (по URL-адресу) Maple 7 использует какой-либо из установленных на компьютере браузеров Интернета. Для этого необходимо указать путь к браузеру с помощью команды Browser. Она открывает окно, показанное на рис. 4.13.

Рис. 4.13. Окно задания браузера Интернета

В этом окне можно установить флажок Use System Default (использовать браузер, заданный в операционной системе по умолчанию). В противном случае путь к браузеру надо указать явно, введя его в поле или отыскав его с помощью кнопки Browse.

 

13.gif

Изображение: 

19. Параметры экспорта документов

 

Параметры экспорта документов

Команда Export открывает очень простое окно установки параметров экспорта, показанное на рис. 4.14.

Рис. 4.14. Окно команды Export

 

14.gif

Изображение: 

20. Установка параметров представления строк ввода

 

Установка параметров представления строк ввода

Команда Input Display выводит подменю, позволяющее выбрать режим представления выражений в строке ввода:

  •  Maple Notation — ввод выражений в Maple-нотации (в строку);
  •  Standard Math Notation — ввод выражений в обычном математическом виде (его признаком является появление вопросительного знака в строке ввода).

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

Верхняя строка соответствует Maple-нотации, а нижняя — стандартной математической нотации.

 

15.gif

Изображение: 

21. Установка параметров вывода

 

Установка параметров вывода

Команда Output Display раскрывает подменю, имеющее четыре команды, влияющие на вид результатов вычислений — вывода:

  •  Maple Notation — вывод в одну строку (как в Maple-языке);
  •  Character Notation t- вывод в виде формулы, набранной из знаков на разных строках;
  •  Typeset Notation — вывод в печатной форме без возможности редактирования; 
  •  Standard Math Notation — вывод в виде обычной математической формулы.

Рисунок 4.15 наглядно иллюстрирует эти формы вывода. Последняя форма наиболее наглядна и задается по умолчанию.

a

б

Рис. 4.15. Демонстрация вывода в различных формах

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

Четвертая форма позволяет представить результат вывода, там, где это возможно, в виде обычных математических формул с применением типовых математических знаков — интегралов, производных, сумм, произведений, квадратных корней и т. д. В большинстве случаев именно эта форма вывода является наиболее наглядной. Она подобна третьей форме, но допускает редактирование выражений. Как отмечалось, нажатием кнопки с символом «х» в панели инструментов документа можно попытаться и вводимое выражение представить в виде обычной математической формулы.  Однако это не всегда удается, поскольку далеко не все однострочные функции системы Maple 7 можно представить таким образом.

 

16.gif

Изображение: 

22. Контроль за предполагаемыми переменными (Assumed Variables)

 

Контроль за предполагаемыми переменными (Assumed Variables)

На переменные в Maple 7 могут быть наложены различные условия. Для этого используется специальная функция assume. Например, если переменная х может принимать только положительные значения, то для этого достаточно исполнить команду assume(x>0). Будем называть такие переменные предполагаемыми, поскольку предполагается, что они имеют какие-то дополнительные ограничения, помимо накладываемых на них типом.

В подменю Assume Variables меню Options имеются три команды, управляющие контролем признаков предполагаемых переменных:

  •  Trailing Tildes — включает маркировку предполагаемых переменных знаком тильды (-);
  •  No Annotation — включает параметр «без аннотаций», то есть запрещает вывод аннотации;
  •  Phrase — включает параметр вывода комментариев для предполагаемых переменных. ;

Предполагаемые переменные при выводе обычно обозначаются значком тильды (-) после их имени. Этот знак отображается при установки флажка Trailing Tildes (по умолчанию она включена). Однако с помощью флажка No Annotation можно отключить как это обозначение, так и короткий текстовый комментарий, который сопровождает предполагаемые переменные. Наконец, флажок Phrase включает вывод текстовых комментариев. Рисунок 4.16 наглядно иллюстрирует применение этих параметров.

Благодаря применению предполагаемых переменных облегчается реализация ряда алгоритмов, критичных к выбору переменных. Например, если использовать вычисление квадратного корня без привлечения понятия о комплексных числах, то на численные значения переменных надо наложить условие их положительности. Контроль за статусом таких переменных и дают описанные параметры.

Рис. 4.16. Применение параметров контроля предполагаемых переменных

 

17.gif

Изображение: 

23. Управление показом графиков

 

Управление показом графиков

Графические результаты могут быть представлены прямо в документе в ячейках вывода или в отдельных окнах. Это обеспечивается двумя командами подменю Plot Display:

  •  Inline — вывод графиков в ячейках вывода; 
  •  Window — вывод графиков в отдельных окнах.

На рис. 4.17 показан пример вывода двух графиков — один выводится с применением Inline в ячейку документа (сразу после ввода), а другой с применением Window в отдельное окно. Какой из этих двух вариантов предпочтительнее, зависит от привычек пользователя.

Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.

а

б

Рис. 4.17. Пример построения двух графиков с выводом одного из них в отдельное окно

Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.

 

18a.gif

Изображение: 

24. Управление построением двумерных графиков

 

Управление построением двумерных графиков

Двумерные графики обычно строятся с применением функции plot. На рис. 4.18 (и на рис. 1.24 с графиком в документе) представлено назначение кнопок контекстной панели инструментов двумерной графики. Кнопки обозначены номерами под ними, а в окне документа дано их краткое назначение.

Панель инструментов графиков появляется только при активном окне графики или при выделении графика в ячейке документа.

Рис.4.18. Окно двумерного графика и его панель инструментов

 

19.gif

Изображение: 

25. Управление построением трехмерных графиков

 

Управление построением трехмерных графиков

Трехмерные графики имеют свою контекстную панель инструментов (рис. 4.19; см. также рис. 1.25 с графиком в документе), с кнопками задания наиболее распространенных параметров для построения трехмерных графиков. Следует отметить, что панели инструментов графических окон дают доступ лишь к части параметров графиков. Более подробно состав и назначение параметров будут рассмотрены в дальнейшем при описании средств создания графиков. -Читателю настоятельно рекомендуется опробовать действие кнопок управления различными форматами графиков, что позволит быстрее освоить огромные возможности Maple 7 в создании цветных и монохромных графиков.

 

26. Работа с окнами

 

Работа с окнами

Меню Window

При серьезной работе в среде Maple 7 пользователь нередко вынужден работать одновременно с несколькими документами. Удобства такой работы зависят от того, как окна расположены в пределах экрана. Maple 7 дает возможность расположить их любым стандартным способом.

Основные команды по установке расположения окон сосредоточены в меню Window (рис. 4.20).

Рис. 4.20. Меню Window

Это меню содержит следующие команды: 

  •  Cascade — каскадное расположение окон; 
  •  Tile — расположение окон мозаикой; 
  •  Horizontal — расположение окон по горизонтали; 
  •  Vertical — расположение окон по вертикали;
  •  Arrange Icons - упорядочение расположения икон;
  •  Close All — закрытие всех окон документов;
  •  Close All Help - закрытие всех окон справочной системы.

 

20.gif

Изображение: 

27. Каскадное расположение окон

 

Каскадное расположение окон

Каскадное расположении окон напоминает колоду карт, сдвинутых так, чтобы были видны их титульные строки. Такое расположение окон показано на рис. 4.21.

Рис. 4.21. Каскадное расположение окон документов

 

21.gif

Изображение: 

28. Расположение окон мозаикой

 

Расположение окон мозаикой

При выполнении команды Tile устанавливается расположение окон мозаикой показанное на рис. 4.22. При этом окна не перекрываются, имеют примерно одинаковый размер. К сожалению, при большом числе окон область просмотра оказывается настолько мала, что работать с документами при таком расположении окон становится неудобно.

Расположение окон мозаикой достаточно удобно при работе с двумя (или на большом экране тремя) окнами. Оно может быть полезно, например, при переносе содержимого отдельных ячеек с одного документа в другой путем перетаскивания. Можно также копировать объекты в одном окне, а затем, переключившись в другое окно, вставлять содержимое буфера обмена в нужную ячейку, используя команду Paste.

Рис. 4.22. Расположение окон мозаикой

 

22.gif

Изображение: 

29. Горизонтальное расположение окон

 

Горизонтальное расположение окон

При использовании команды Horizontal окна оказываются расположенными на экране в виде горизонтальных полос (рис. 4.23). Этот вариант расположения окон, как и каскадное расположение, дает обзор заголовков документов, если область просмотра каждого документа расположена сверху окна. Последнее условие может нарушаться при перемещении окон документов.

 

30. Вертикальное расположение окон (Vertical).

 

Вертикальное расположение окон (Vertical)

Команда Vertical задает расположение окон в виде вертикальных полос (рис. 4.24). Такое расположение окон удобно, если содержимое ячеек документов представлено короткими выражениями.

Следует отметить, что описанным командам подчиняются только развернутые в данный момент окна — расположение вновь открытого или развернутого окна не зависит от данных до этого команд.

Рис. 4.23. Горизонтальное расположение окон

Рис. 4.24. Вертикальное расположение окон

 

23.gif

Изображение: 

24.gif

Изображение: 

31. Приведение в порядок значков свернутых окон

 

Приведение в порядок значков свернутых окон

Свернутые окна представлены значками. Они могут перемещаться мышью по всему пространству экрана, поэтому иногда значки оказываются хаотично разбросанными (рис. 4.25).

Рис. 4.25. Хаотическое расположение значков свернутых окон

Для наведения порядка с расположением значков можно, разумеется, переместить каждый из них в удобное место. Но это довольно утомительное занятие. Лучше воспользоваться специальной командой Arrange Icons, которая автоматически наводит порядок в расположении значков свернутых окон, аккуратно располагая их снизу экрана. Действие этой команды показано на рис. 4.26. Как и окно, каждый значок имеет строку заголовка с четырьмя маленькими кнопками. Первая из них открывает меню управления, а три другие используются соответственно для восстановления размера, развертывания на весь экран и закрытия окна.

 

25.gif

Изображение: 

32. Закрытие всех окон одновременно

 

Закрытие всех окон одновременно

Команда Close All служит для закрытия всех окон одновременно. Эта команда будет выполнена сразу только в том случае, когда все документы не модифицировались или были записаны на диск после внесения исправлений. Если какой-либо документ был изменен, но еще не сохранен, то в центре экрана появится предупреждающее сообщение об этом (рис. 4,27).

Рис. 4.26. Вид экрана после выполнения команды Arrange Icons

Рис. 4.27. Окно, предупреждающие о том, что закрываемый документ был изменен

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

 

26.gif

Изображение: 

27.gif

Изображение: 

33. Закрытие всех окон справочной системы

 

Закрытие всех окон справочной системы

В Maple 7 использована многооконная справочная система с гипертекстовыми ссылками. Поэтому при работе с ней экран системы довольно быстро оказывается забитым окнами справочной системы. Разумеется, их можно последовательно закрывать одно за другим, но это очень неудобно и долго. Команда Close All Help обеспечивает закрытие разом всех окон справочной системы, что позволяет продолжить работу с текущим документом. На окна загруженных документов операция Close All Help влияния не оказывает.

 

34. Список открытых документов

 

Список открытых документов

Заканчивая рассмотрение меню Window, надо отметить, что оно завершается списком всех открытых в Maple 7 документов и соответственно окон (рис. 4.26). Щелкнув на той или иной строке этого списка, можно открыть соответствующее окно и сделать его активным.

 

35. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Изменять вид интерфейса и документа.
  •  Выводить и скрывать палитры математических знаков.
  •  Управлять показом непечатаемых символов.
  •  Изменять статус ячеек документа.
  •  Устанавливать параметры Maple 7.
  •  Работать с окнами документов.
  •  Просматривать список открытых документов.

 

Урок 5. Типы данных системы Maple

1. Maple-язык и его синтаксис

 

Урок 5.


Типы данных системы Maple 7

Maple-язык и его синтаксис

Знаки алфавита

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

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

Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.

Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):

"и**     [ и (|       ] и |)       { и (*        } и *)

К специальным одиночным и составным знакам относятся элементы синтаксиса языка:

  •  % — системная переменная, хранящая результат предшествующей операции;
  •  : — фиксатор выражения, предотвращающий вывод результата вычисления в ячейку вывода;
  •  ; — фиксатор выражения, дающий вывод результата вычисления в ячейку вывода;
  •  # — указатель программного комментария; 
  •  " — ограничитель строки (например, 'string');
  •  := — оператор присваивания (например, х:=5);
  •  : ; — пустой оператор;
  •  :: — указатель типа переменной (например, n::integer или z: -.complex);
  •  \ — знак обратного деления, который имеет множественные значения в зависимости от контекста (см. справку по этому знаку - backslash).

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

 

2. Зарезервированные слова

 

Зарезервированные слова

Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 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 лишними не являются.

 

3. Выражения и основы работы с ними

 

Выражения и основы работы с ними

Выражения и их ввод

Фактически 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, набранную в строке ввода (со знаком ; в конце).

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

4. Оценивание выражений

 

Оценивание выражений

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

Для оценивания выражений различного типа существует группа функций, основные из которых перечислены ниже:

  •  eval (array) — возвращает вычисленное содержимое массива array;
  •  evalf(expr, n) — вычисляет ехрr и возвращает вычисленное значение в форме числа с плавающей точкой, имеющего n цифр после десятичной точки;
  •  eval hf(ехрг) — вычисляет ехрг и возвращает вычисленное значение с точностью, присущей оборудованию данного компьютера;
  •  evalf(int(f, x=a..b)) — оценивает и возвращает значение определенного интеграла int(f,x=a. .b);
  •  evalf(Int(f, x=a..b)) — оценивает и возвращает значение определенного интеграла, заданного инертной функцией Int(f,x=a. .b);
  •  evalf(Int(f. x=a..b, digits, flag)) — аналогично предыдущему, но возвращает значение интеграла с заданным параметром digits числом цифр после десятичной точки и со спецификацией метода вычислений flag;
  • evalm(mexpr) — вычисляет значение матричного выражения mexpr и возвращает его;
  •  evalb(bexpr) — вычисляет и возвращает значения логических условий; 
  •  evalc(cexpr) — вычисляет значение комплексного выражения;
  •  evalr (ехрr, ampl) — оценивает и возвращает значения интервальных выражений (функция должна вызываться из библиотеки);
  •  shake(expr, ampl) — вычисляет интервальное выражение.

Для функции 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



Примеры применения функций оценивания даны ниже:

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

 

4.gif

Изображение: 

5. Последовательности выражений.

 

Последовательности выражений

Maple 7 может работать не только с одиночными выражениями, но и с последовательностями выражений. Последовательность выражений — это ряд выражений, разделенных запятыми и завершенных фиксатором:

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

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

 

5.gif

Изображение: 

6.gif

Изображение: 

7.gif

Изображение: 

6. Вывод выражений

 

Вывод выражений

При выполнении порой даже простых операций результаты получаются чрезвычайно громоздкими. Для повышения наглядности выражений Maple 7 выводит их с выделением общих частей выражений и с присваиванием им соответствующих меток. Метки представлены символами #N, где N — номер метки. Помимо меток при выводе результатов вычислений могут появляться и другие специальные объекты вывода, например корни RootOf, члены вида О(х"), учитывающие погрешность при разложении функций в ряд, и обозначения различных специальных функций, таких как интегральный синус, гамма-функция и др. Примеры такого вывода приведены ниже:

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

 

8.gif

Изображение: 

9.gif

Изображение: 

7. Простые типы данных

 

Простые типы данных

Числа и числовые константы

Maple 7 работает с числами следующего типа: целыми (О, 1, 123, -456 и т. д.), рациональными в виде отношения целых чисел (7/9, -123/127 и т. д.), вещественными с мантиссой и порядком (1.23Е5, 123.4567Е-10). Признаком вещественного числа является десятичная точка (запятая). Примеры простых операций с числами приведены ниже:

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

  •  для отделения целой части мантиссы от дробной используется разделительная точка; 
  • нулевая мантисса не отображается (число начинается с разделительной точки);
  •  мантисса отделятся от порядка пробелом, который рассматривается как знак умножения;
  •  мнимая часть комплексных чисел задается умножением ее на символ мнимой единицы I (квадратный корень из -1).

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

Для работы с числами Maple 7 имеет множество функций. Они будут рассмотрены в дальнейшем. На комплексной плоскости числа задаются координатами точек (х, у) (рис. 5.1).

Рис. 5.1. Представление обычных и комплексных чисел на плоскости

Для представления чисел на рис. 5.1 используется функция pointplot(list), где list — список координат точек. Эта функция становится доступной при подключении пакета plots командой with(plots). Кроме того, использована функция вывода ряда графических объектов на один график — display (см. далее описание представления комплексных чисел).

С помощью функции convert Maple 7 может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатеричные) в десятичные числа:

При символьных вычислениях Maple 7 реализует точную арифметику. Это значит, что результат может быть получен с любым числом цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например таких, как приведены ниже:

 

10.gif

Изображение: 

11.gif

Изображение: 

12.gif

Изображение: 

13.gif

Изображение: 

14.gif

Изображение: 

8. Комплексные числа

 

Комплексные числа

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) комплексной плоскости. Позже мы рассмотрим ряд функций для работы с комплексными числами.

 

15.gif

Изображение: 

9. Контроль за числами

 

Контроль за числами

Числа могут служить объектами ввода, вывода и константами, входящими в математические выражения. Функция type(x, numeric) позволяет выяснить, является ли х числом. Если является, то она возвращает логическое значение true (истина), а если нет, то false (ложь). Например:

Функции type(x, integer), type(x, rational) и type(x, fraction) можно использовать для проверки того, имеет ли х значение соответственно целого числа, рационального числа или простой дроби:

 

 

16.gif

Изображение: 

17.gif

Изображение: 

18.gif

Изображение: 

10. Преобразования чисел с разным основанием

 

Преобразования чисел с разным основанием

В Maple возможна работа с числами, имеющими различное основание (base), в частности с двоичными числами (основание 2 — binary), восьмеричными (основание 8 — octal) и шестнадцатеричными (основание 16 — hex). Функция convert позволяет легко преобразовывать форматы чисел:

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

 

19.gif

Изображение: 

11. Данные множественного типа.

 

Данные множественного типа

Наборы (множества)

Любые выражения могут включаться также в наборы. Такие наборы в виде множеств создаются с помощью фигурных скобок { }:

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

 

20.gif

Изображение: 

12. Списки выражений

 

Списки выражений

Для создания упорядоченных наборов — списков — служат квадратные скобки [ ]:

 > [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.

 

21.gif

Изображение: 

13. Массивы, векторы и матрицы

 

Массивы, векторы и матрицы

Как отмечалось, важным типом данных являются списки (lists). Они создаются с помощью квадратных скобок, например:

  •  [1,2,3,4] — список из четырех целых чисел;
  •  [1. ,2.34,5] — список из двух вещественных и одного целого числа;
  •  [а,b.'Привет'] — список из двух символов (переменных) и строковой константы;
  •  [sin(x), 2*cos(x) ,a^2-b] — список из трех математических выражений.

Для создания векторов (одномерных массивов) и матриц (двумерных массивов) служит функция array. Обычно она используется в следующих формах:

  • аrrау[а. .b,sl] — возвращает вектор с индексами от а до b и значениями в одномерном списке si;
  •  аrrау[а. .b,c. .d,s2] — возвращает матрицу с номерами строк от а до b, номерами столбцов от с до d и значениями в двумерном списке s2.

Рис. 5.2. Представление множества чисел на плоскости

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

 

22.gif

Изображение: 

14. Таблицы

 

Таблицы

Еще одним важным типом множественных данных являются таблицы. Они задают данные с произвольной индексацией. Для создания таблиц служит функция table, которая при вызове в простейшем виде table[] создает шаблон пустой таблицы:

Пустая таблица резервирует память под данные. Когда параметром функции table является список выражений, он выводится в естественном порядке расположения элементов таблицы, но с произвольным порядком индексации:

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

Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на отрицательный синус и синуса на косинус.

 

23.gif

Изображение: 

24.gif

Изображение: 

25.gif

Изображение: 

15. Строки и комментарии

 

Строки и комментарии

Строковые данные

Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев. Строки должны каким-либо образом выделяться, чтобы Maple не отождествляла их с именами констант и переменных. Для этого строки-комментарии имеют внутренний разделительный признак, который устанавливается при их вводе (нажатием клавиши F5, которое приводит к исчезновению знака >).

В других случаях последовательность символов рассматривается как строка, если она заключена в обратные апострофы, то есть в знаки '. Два апострофа подряд формируют апостроф как знак символьной строки, например `abc``def ` дает строку abc`def. Любое математическое выражение может входить в строку, разумеется, оно при этом не выполняется:

> '2+2 не всегда "четыре"'; 

2+2 не всегда 'четыре'

 

16. Неисполняемые программные комментарии

 

Неисполняемые программные комментарии

Часто возникает необходимость в задании программных комментариев. Любой текст после знака # рассматривается как невыводимый (неисполняемый) программный комментарий — даже если это математическое выражение. При этом он не вычисляется. Например:

> 2+3;#Это прииер. А это выражение не вычисляется: 4+5

.5

Комментарии полезны в программах на Maple-языке и обычно используются для объяснения особенностей реализованных алгоритмов.

 

17. Константы

 

Константы

Числовые константы

Константы - это простейшие именованные объекты, несущие заранее предопределенные значения. Их имена (идентификаторы) также заранее определены и не могут меняться. Подробную информацию о константах можно найти, исполнив команду ?constant.

Обычные числовые константы не имеют имени и представлены просто числами, типы которых были указаны выше. Можно считать, что именем такой константы является само ее значение. Например, в выражении 2*sin(1.25) числа 2 и 1.25 являются числовыми константами. При этом указание десятичной точки делает константу действительным числом — например, 2 — это целочисленная константа, а  2., 2.0 или 1.25 — это уже действительные константы.

 

18. Строковые константы

 

Строковые константы

Строковыми константами являются произвольные цепочки символов, заключенные в обратные апострофы, например 'Hello', 'Привет', 'My number' и т. д. Числа, заключенные в апострофы, например '123456', также становятся строковыми константами, которые нельзя использовать в арифметических выражениях. Строковые константы представляют значения строковых переменных. В них можно использовать символы кириллицы при условии, что соответствующий шрифт имеется.

 

19. Встроенные в Ядро константы

 

Встроенные в ядро константы

Есть также ряд констант, которые правильнее считать заведомо определенными глобальными переменными:

  •  false — логическое значение «ложно»;
  •  gamma — константа Эйлера, равная 0.5772156649...;
  •  infinity — положительная бесконечность (отрицательная задается как infinity);
  •  true — логическое значение «истинно»;
  •  Catalan — константа Каталана, равная 0.915965594...;
  •  FAIL — специальная константа (см. справку, выдаваемую по команде ?FAIL);
  •  I — мнимая единица (квадратный корень из -1);
  •  Pi — представляет константу  = 3.141...

Любопытно, что в этот список не входит основание натурального логарифма — число е. В качестве этой константы рекомендуется использовать ехр(1). Она отображается как жирная прямая буква Е. A exp(l.0) выводит 2.71828... (что и следовало ожидать).

 

20. Идентификация констант.

 

Идентификация констант

Функции type(х, constant) и type(x, realcons) возвращают логическое значение true, если х представляет целочисленную или вещественную константу, и false, если х не является константой. Таким образом, эти функции можно использовать для идентификации констант, например:

 

 

26.gif

Изображение: 

27.gif

Изображение: 

21. Защита идентификаторов констант

 

Защита идентификаторов констант

Имена встроенных констант (как и имена функций) защищены специальным атрибутом protected. Поэтому (без его снятия) константам нельзя присваивать какие-либо значения:

Стоит упомянуть о такой экзотической возможности, как задание в Maple 7 собственных констант путем описания алгоритма генерации входящих в константу цифр (это позволяет получать в представлении константы любое число цифр). Большинство пользователей довольствуется применением вместо таких констант обычных переменных подходящего типа. Зато истинные математики соревнуются друг с другом в создании все новых и новых констант и алгоритмов их вычислений. Примеры этого творчества можно найти на сайте фирмы Wateloo Maple.

 

28.gif

Изображение: 

22. Переменные

 

Переменные

Типы переменных

Как следует из самого названия, переменные — это объекты, значения которых могут меняться по ходу выполнения документа. Пока мы рассматриваем лишь глобальные переменные, доступные для модификации значений в любом месте документа. Тип переменной в системе Maple 7 определяется присвоенным ей значением — это могут быть целочисленные (integer), рациональные (rational), вещественные (real), комплексные (complex) или строчные (string) переменные и т. д. Переменные могут также быть символьного типа (их значением является математическое выражение) или типа списка (см. далее). Для явного указания типа переменных используется конструкция:

name::type

где name — имя (идентификатор) переменной, type — тип переменной, например целочисленный (integer), вещественный с плавающей точкой (float), с неотрицательным значением (nonneg), комплексный (complex) и т. д.

 

23. Идентификаторы (имена) переменных

 

Идентификаторы (имена) переменных

Переменные задаются своим именем — идентификатором, который должен начинаться с буквы и быть уникальным. Это значит, что ключевые слова языка Maple нельзя использовать в качестве имен переменных. Хотя имена ряда команд и функций можно использовать в качестве идентификаторов переменных, делать это крайне нежелательно. Ограничений на длину идентификатора практически нет — точнее, она не должна превышать 524 275 символов! Так что сложностей с подбором идентификаторов для переменных у вас не будет.

Имена переменных могут содержать одну букву (например, х, Y или Z) либо ряд букв (Xmin или Хmах). В любом случае имя переменной надо начинать с буквы. Некоторые символы, например знак _, могут использоваться в именах (например, Var_l, Var_2). Нельзя, однако, вводить в имена переменных знаки, обозначающие операторы, — например, а/b или а-b будет истолковано как деление а на b или вычитание из переменной а переменной b.

Имена могут задаваться в обратных апострофах. При этом они просто тождественны именам без апострофов:

Строчные и прописные буквы в идентификаторах различаются, так что Varl и varl — это разные переменные.

Для проверки предполагаемого имени на уникальность достаточно выполнить команду ?name, где name — выбранное имя. Если при этом откроется окно справки с этим именем, значит, оно уже использовано в Maple. Лучше воздержаться от его применения, так как связанная с этим именем команда или функция перестает работать, как только это имя закрепляется за какой-либо переменной.

 

29.gif

Изображение: 

24. Присваивание переменным значений

 

Присваивание переменным значений

Поскольку Maple 7 прежде всего система символьной математики, то по умолчанию любые переменные рассматриваются как объекты символьного типа. Благодаря этому такие переменные могут фигурировать в математических выражениях (таких, как sia(x)/x) без их предварительного объявления. В отличие от обычных языков программирования такое использование переменных не влечет за собой появления сообщений об ошибках и является более естественным. Для присваивания переменным конкретных значений используется комбинированный символ присваивания «:=», например:

  •  n:=1 — переменной n присваивается, целочисленное значение 1;
  •  х:=123.456 - переменной х присваивается вещественное значение 123.456;
  •  у:=17/19 — переменной у присваивается рациональное значение 17/18;
  •  name:='Piter' — переменной name присваивается строковое значение "Piter";
  •  expr:=2*Pi/3 — переменной ехрг присваивается значение выражения 2л/3;
  •  V:=[1.2,3] - переменной V присваивается значение списка чисел [1,2,3];
  • М:=[[1,2.3].[4,5.б]] - переменной М присваивается значение двумерного массива; 
  •  f :=х->х^2 - переменной f присваивается значение функции пользователя f(x)=x^2.

Правая часть выражения присваивания определяет тип переменной. Например, она может быть целочисленной, действительной, строковой, индексированной (элемент массива) и т. д.

 

25. Отмена операции присваивания и команда restart

 

Отмена операции присваивания и команда restart

Переменная, имеющая какое-либо значение, занимает в памяти намного больше места, чем неопределенная переменная. У последней место в памяти занимают только символы идентификатора. Поэтому нередко целесообразно отменить присваивание у тех переменных, которые в дальнейшем можно не использовать. Это может понадобиться и в том случае, когда какую-либо переменную с численным или иным значением нужно использовать просто как неопределенную переменную. Рассмотрим следующий пример:

Здесь не удалось вычислить интеграл с подынтегральной функцией х"2 из-за того, что переменная х уже определена ранее как целочисленная переменная со значением 10, тогда как для вычисления интеграла она должна быть необъявленной или строковой (убедитесь в этом сами).

Для отмены присваивания надо использовать следующее выражение:

Итак, заключение имени переменной в прямые апострофы ликвидирует присваивание. Так что запись х:='х' означает, что переменной х возвращается статус неопределенной переменной. Теперь можно вычислить интеграл:

Можно сделать переменную х неопределенной и с помощью выражения вида x:=evaln(x). Это поясняет следующий пример:

Для отмены присваивания значений разом всем переменным (и введенным функциям пользователя) можно использовать команду restart. Следующий пример поясняет ее применение:

Следует отметить, что команда restart отменяет все предшествующие определения, что иногда чревато осложнениями. Применяйте ее только тогда, когда вы уверены, что предшествующая заданной часть документа (или даже ряда документов) действительно не важна.

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


30.gif

Изображение: 

31.gif

Изображение: 

32.gif

Изображение: 

33.gif

Изображение: 

34.gif

Изображение: 

26. Придание переменным статуса предполагаемых

 

Придание переменным статуса предполагаемых

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

Для придания переменным статуса предполагаемых используется функция assume: assume(x.prop): где х — переменная, имя или выражение, prop — свойство. Следующие примеры показывают применение функции assume:

Обратите внимание, что в этом примере переменная х помечена как положительная и при выводе сопровождается знаком тильды -, как бы предупреждающим нас о ее особом статусе. Это не означает, что она не может принять отрицательное значение. Однако с помощью функции is можно убедиться в ее особом статусе и при необходимости программным путем исключить вычисления для  х <0. Кроме того, о свойствах переменной можно узнать с помощью функции about (name).

Иногда к уже имеющимся признакам надо добавить новые. Для этого используется функция additionally:

В этом примере переменной а вначале задан признак положительности, а затем а<=0. Оба признака удовлетворяются только при a= 0, что и подтверждает вывод информации о статусе этой переменной функцией about (а).

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

Для отмены переменным статуса предполагаемых используются те же приемы, что и при отмене присвоенного значения. Например, запись х:=' х' отменяет статус предполагаемой для переменной х.

 

35.gif

Изображение: 

36.gif

Изображение: 

37.gif

Изображение: 

27. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Использовать Maple-язык и его синтаксис.
  •  Работать с выражениями.
  •  Задавать простые типы данных.
  •  Задавать данные множественного типа.
  •  Задавать данные строкового типа.
  •  Писать программные комментарии.
  •  Задавать переменные и определять их тип.
  •  Использовать константы различного типа.

 

Урок 6. Встроенные операторы и функции

1. Операторы и операнды

 

Урок 6.


Встроенные операторы и функции .

 

Операторы и операнды

Виды операторов

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

Имеется пять основных типов операторов:

  •  binary — бинарные операторы (двумя операндами);
  •  unary — унарные операторы (с одним операндом);
  •  nullary — нульарные операторы (без операнда — это одна, две и три пары кавычек);
  •  precedence — операторы старшинства (включая логические операторы);
  •  functional — функциональные операторы.

Для просмотра операторов и их свойств можно использовать следующие команды:

> ?operators[binary]; 

> ?operators[unary]; 

> ToperatorsCnullary]; 

> ?operators[precedence];

> ?operators[functional]:

А для изучения примеров применения операторов нужно задать и исполнить команду:

> ?operators[examples];

Команда:

> Tdefine:

позволяет ознакомиться с функций define. С ее помощью можно определять новые операторы.

 

2. Бинарные (инфиксные) операторы

 

Бинарные (инфиксные) операторы

Бинарные (инфиксные) операторы используются с двумя операндами, обычно размещаемыми по обе стороны от оператора. В ядро Maple 7 включено около трех десятков бинарных операторов. Основные из них перечислены в табл. 6.1.

Tаблица 6.1. Бинарные операторы

Обозначение

Оператор

+

Сложение

-

Вычитание

*

Умножение

/

Деление

** или ^

Возведение в степень

mod

Остаток от деления

$

Оператор последовательности

.

Разделительная точка

@

Оператор композиции

@@

Повторение композиции

,

Разделитель выражений

:=

Присваивание

. ..

Задание интервала

/

Разделитель выражений

&*

Некоммутативное умножение

&<string>

Нейтральный оператор

||

Конкатенация (объединение)

Примеры использования бинарных операторов:

Оператор композиции @@ может использоваться для создания сложных функций, содержащих цепные дроби:

 

А вот еще один пример применения этого оператора для составления цепного радикала и вычисления ряда таких цепочек в цикле:

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

3. Операторы объединения, пересечения и исключения для множеств

 

Операторы объединения, пересечения и исключения для множеств

Для данных типа «множество» определены следующие бинарные операторы:

  •  union — включает первый операнд (множество) во второй; 
  •  intersect — создает множество, содержащее общие для операндов элементы; 
  •  minus — исключает из первого операнда элементы второго операнда.

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

Напоминаем, что эти операторы заданы ключевыми словами. Обратите внимание на то, что в Maple 7 результат применения оператора union представлен членами, расположенными в довольно произвольном порядке.

 

5.gif

Изображение: 

4. Унарные арифметические операторы

 

Унарные арифметические операторы

Унарные операторы используются с одним операндом. Они могут быть префиксными, если оператор стоит перед операндом, и постфиксными, если он стоит после операнда. К унарным относятся семь операторов, приведенных в табл. 6.2.

Таблица 6.2. Унарные операторы

Обозначение

Оператор

+

Унарный плюс (префикс)

-

Унарный минус (префикс)

;

Факториал (постфикс)

.

Десятичная точка (префикс или постфикс)

$

Последовательность (префикс)

not

Логическое отрицание (префикс)

&string

 Метка (префикс)

Примеры применения унарных операторов:

 

 

6.gif

Изображение: 

5. Оператор % и команда history

 

Оператор % и команда history

Мы уже неоднократно отмечали, что оператор % обеспечивает подстановку в строку ввода (или в выражение) последнего результата операции, Х% предпоследнего и %%% — третьего с конца. Есть еще одна иногда полезная возможность проследить за ходом частных вычислений внутри документа — применение команды-функции history. В Maple V R5 это была библиотечная функция, которая требовала вызова из библиотеки. В Maple 7 такого вызова уже не требуется. Функция history (ехрr) или history() создает список переменных вида от, где индекс f = 1, 2, 3.... Этим переменным можно присваивать значения в диалоговом режиме и отслеживать результаты вычислений. Команда off;, вводимая после использования данной функции, завершает работу с ней. Ниже представлен диалог с применением функции history: 

К сожалению, полученный результат и значения глобальных переменных 01 после завершения работы с данной функцией становятся недоступными, так что практической пользы от ее применения не так уж много. Разумеется, внутри блока history вы можете присвоить результат другой переменной и он сохранится (попробуйте это сделать сами). При каждом очередном применении функции history нумерация переменных 0i начинается с начала, так что какой-либо преемственности при использовании этой функции нет.

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

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

 

7.gif

Изображение: 

8.gif

Изображение: 

10.gif

Изображение: 

6. Логические операторы

 

Логические операторы

Логические (или булевы) операторы указывают на логическую связь величин (или выражений). Прежде всего они представлены рядом бинарных операторов, приведенных в табл. 6.3.

Таблица 6.З. Бинарные логические операторы

Обозначение

Оператор

<

Меньше

Меньше или равно

>

Больше

>=

Большее или равно

-

Равно

О

Не равно

and

Логическое «и»

or

Логическое «или»

Конструкции с этими операторами, такие как х=у, возвращают логическое значение — константу true, если условие выполняется, и false, если оно не выполняется. Кроме того, к логическим операторам относится унарный оператор not — он представляет логическое «нет». Для возврата логических значений выражений с этими операторами используется функция evalb(условие), например:

Логические операторы часто используются в управляющих структурах программ, составленных на языке программирования Maple. Такое их применение мы рассмотрим позже.

 

11.gif

Изображение: 

7. Специальные типы операторов

 

Специальные типы операторов

Операторы в Maple описывают операции по преобразованию данных, в частности выражений. Последние, в свою очередь, можно отнести к данным абстрактного типа. Могут быть описаны следующие типы операторов:

  • неопределенные (f); 
  •  нейтральные (&);
  •   процедурные; 
  •  функциональные; 
  •  композиционные (@).

Оператор относится к неопределенным, если он не был заранее определен. Такой оператор не выполняет никаких действий и просто повторяется в строке вывода:

> restar:f(1,2,а):

 f(l,2,a)

Композиционные операторы (на базе знака @) мы уже применяли. Другие типы операторов рассмотрены ниже.


8. Функциональные операторы

 

Функциональные операторы

Функциональные операторы Maple-языка являются альтернативами функций и записываются в двух формах.

Нотация

Запись оператора

«arrow» (стрелочная)

vars -> result

«angle bracket» (в угловых скобках)

<result | vars>

Данные операторы могут использоваться для реализации подстановок. Например, запись х -> х^2 означает подстановку х*2 на место переменной х. Возможны и такие подстановки в множественной форме:

Функциональный оператор в Maple 7 часто используется для задания функций пользователя, которое будет рассмотрено несколько позднее.

 

9. Нейтральные операторы, определяемые пользователем

 

Нейтральные операторы, определяемые пользователем

Для создания нейтральных (задаваемых пользователем и в момент задания неисполняемых) операторов, определяемых пользователем, служит знак амперсанда — &. Синтаксис нейтрального оператора следующий:

&name

Имя оператора строится по правилам задания допустимых идентификаторов. Также в качестве имени может быть использована последовательность (один и более) специальных символов. В последовательности специальных символов не должно быть букв, цифр, подчеркивания, а также следующих символов:

& | ()  {} [] :: '' #  <перевод строки> <пробел>

Максимальная длина имени — 495 символов. Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного нейтрального оператора приведены ниже:

 

13.gif

Изображение: 

10. Определение операторов с помощью оператора define

 

Определение операторов с помощью оператора define

Большие возможности для создания операторов с заданными свойствами предоставляет специальный оператор define. Он записывается в следующей форме: 

define(oper, property1, property2. ._)

Здесь ореr — имя определяемого оператора, property!, property2 и т. д. — наименования свойств. В принципе, оператор define позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов и функций, встроенных в систему.

Могут быть указаны следующие свойства операторов:

  •  unary — унарный оператор;
  •  binary — бинарный оператор;
  •  diff — дифференциальный оператор;
  •   linear — линейный оператор;
  •  multilinear — множественный линейный оператор;
  •  flat — ассоциативный оператор, для которого f(x/(y,z)) = f(f(x,y),z) = f(x,y,z);
  •  orderless — коммутативный симметричный оператор, такой что f(x,y) = f(y,x),
  •  antisymmetric — асимметричный оператор, такой что f(x,y) = -f(y,xc);
  •  zero — нулевой оператор (например, V:=Vector(5,shape=zero) задает вектор с 5 нулевыми элементами);
  •  identity — единичный оператор (например, M:=Matrix(3,3,shape=identity) задает единичную матрицу).

Следующий пример задает линейный оператор L:

Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f(x)=value. Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет n-е число Фибоначчи (n > 2):

Обратите внимание на то, что соотношения fib(0)=l и fib(l)=l задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения, — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующих чисел Фибоначчи.

Последний пример иллюстрирует применение системной функции time для определения времени, затраченного на вычисление значения функции fib(20). Это время задается в секундах. Нетрудно заметить, что даже для ПК с процессором Pentium II 350 МГц это время оказалось довольно значительным (более 3 с), поскольку каждое новое число Фибоначчи вычисляется заново.

 

14.gif

Изображение: 

15.gif

Изображение: 

11. Математические функции

 

Математические функции

Понятие о встроенных функциях

Maple 7 имеет полный набор элементарных математических функций. Все они, кроме арктангенса двух аргументов, имеют один аргумент х, например sin(x). Он может быть целым, рациональным, дробно-рациональным, вещественным или комплексным числом. В ответ на обращение к ним элементарные функции возвращают соответствующее значение. Поэтому они могут быть включены в математические выражения. Все описанные здесь функции называются встроенными, поскольку они реализованы в ядре системы.

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

Нетрудно заметить, что есть и исключения из этого правила — например, на экране монитора ехр(1) будет выведено как константа е, а значение функции arcsin( 2) все же вычислено и результат получен как 1/6 от константы Pi. Вообще говоря, если результат выражается через фундаментальную математическую константу, то он будет вычислен и представлен ею. В противном случае функция с целочисленным и рациональным аргументом или с константой просто повторяется в строке вывода в установленном для этой строки формате.

Для получения подробной информации о некоторой произвольной функции <f> достаточно задать команду:

?<f>

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

 

16.gif

Изображение: 

12. Некоторые целочисленные функции и факториал

 

Некоторые целочисленные функции и факториал

Ниже представлены наиболее распространенные целочисленные функции Maple 7, используемые в теории чисел:

  •  factorial (n) — функция вычисления факториала (альтернатива — оператор !);
  • iquo(a.b) — целочисленное деление а на b;
  •  irem(a,b) — остаток от деления а на b;
  •  igcd(a b) — наибольший общий делитель;
  •  lcm(a,b) — наименьшее общее кратное.

Примеры применения:

В последних двух примерах применения оператора факториала полезно обратить внимание, что запись n!! означает лишь (n!)!, а не n!! = 2*4*6*..., то есть произведение четных целых чисел. Действие других функций очевидно.

 

17.gif

Изображение: 

13. Тригонометрические функции

 

Тригонометрические функции

В ядре Maple определены следующие тригонометрические функции:

  •  sin — синус;
  •  cos — косинус;
  •  tan — тангенс;
  •  sec — секанс;
  •  csc — косеканс;
  •  cot — котангенс.

Все эти функции являются периодическими (с периодом 2л, кроме тангенса и котангенса, у которых период равен л) и определены для действительного и комплексного аргументов. Примеры вычислений:

Многие свойства тригонометрических функций можно оценить, рассматривая их графики. Для построения таких графиков можно использовать функцию pi ot. На рис. 6.1 сверху показаны графики ряда тригонометрических функций.

Рис. 6.1. Графики ряда тригонометрических и обратных тригонометрических функций

Из графиков тригонометрических функций (рис. 6.1, сверху) хорошо видна их периодичность. Функция тангенса имеет разрывы, и ее значение в этих точках в пределе равно бесконечности. Поэтому для наглядного ее представления вместе с функциями синуса и косинуса (их экстремальные значения по модулю равны 1) приходится вводить ограничения на масштаб графика по оси у.

ПРИМЕЧАНИЕ 

Обратите внимание на параметр color=black в функции построения графиков plot. Он  задает построение всех графиков черным цветом, что сделано для более четкой печати их в книге. Если убрать этот параметр, то графики разных функций будут строиться с использованием разных цветов, что облегчит их различение. Другие способы выделения отдельных кривых будут описаны в дальнейшем при описании графических возможностей системы Maple 7.

 

18.gif

Изображение: 

45.gif

Изображение: 

14. Обратные тригонометрические функции

 

Обратные тригонометрические функции

К обратным тригонометрическим относятся следующие функции:

  •  arcsin — арксинус;
  •  arccos — арккосинус;
  •  arctan — арктангенс;
  •  arcsec — арксеканс;
  •  arccsc — арккосеканс;
  •  arccot — арккотангенс.

Примеры вычислений:

К этому классу функций принадлежит еще одна полезная функция: arctan(y.x) = argument(x+I*y)

Она возвращает угол радиус-вектора в интервале от -Pi до Pi при координатах конца радиус-вектора х и у (см. пример ниже):

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

 

20.gif

Изображение: 

21.gif

Изображение: 

15. Гиперболические функции

 

Гиперболические функции

Гиперболические функции представлены следующим набором:

  •  sinh — гиперболический синус;
  •  cosh — гиперболический косинус;
  •  tanh — гиперболический тангенс;
  •  sech — гиперболический секанс;
  •  csch — гиперболический косеканс;
  •  coth — гиперболический котангенс.

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

На рис. 6.2 сверху представлены графики гиперболического синуса, косинуса и тангенса. По ним можно судить о поведении этих функций.

Рис. 6.2. Графики основных гиперболических и обратных гиперболических функций

 ПРИМЕЧАНИЕ

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

 

22.gif

Изображение: 

47.gif

Изображение: 

16. Обратные гиперболические функции

 

Обратные гиперболические функции

Как и тригонометрические функции, гиперболические имеют свои обратные функции:

  •  arcsinh — гиперболический арксинус;
  •  arccosh — гиперболический арккосинус; 
  •  arctanh — гиперболический арктангенс;
  •  arcsech — гиперболический арксеканс: 
  •  arccsch — гиперболический арккосеканс: 
  •  arccoth — гиперболический арккотангенс. 

Примеры применения:

Графики обратных гиперболических синуса, косинуса и тангенса представлены на рис. 6.2 снизу.

 

23.gif

Изображение: 

17. Степенные и логарифмические функции

 

Степенные и логарифмические функции

К степенным и логарифмическим относятся следующие функции системы Maple 7:

  •  ехр — экспоненциальная функция;
  •  ilog10 — целочисленный логарифм по основанию 10 (возвращает целую часть от логарифма по основанию 10);
  •  ilog — целочисленный логарифм (библиотечная функция, возвращающая
  • целую часть от натурального логарифма);
  •   n — натуральный логарифм;
  •  log — логарифм по заданному основанию (библиотечная функция);
  •  log10 — логарифм по основанию 10;
  •  sqrt — квадратный корень. 

Примеры применения:

Графики ряда алгебраических функций показаны на рис. 6.3. 

Рис. 6.З. Графики ряда алгебраических функций

На рис. 6.3 показаны также графики синусоиды с экспоненциально падающей и нарастающей амплитудой. Читателю рекомендуется попробовать свои силы в построении графиков комбинаций различных функций.

 

24.gif

Изображение: 

26.gif

Изображение: 

49.gif

Изображение: 

18. Функции с элементами сравнения

 

Функции с элементами сравнения

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

  •  abs — абсолютное значение числа;
  •  ceil — наименьшее целое, большее или равное аргументу;
  •  floor — наибольшее целое, меньшее или равное аргументу;
  •  frac — дробная часть числа;
  •  trunc — целое, округленное в направлении нуля;
  •  round — округленное значение числа;
  •  signum (х) — знак х (-1 при х < 0, 0 при х = 0 и +1 при х > 0).

Для комплексного аргумента х эти функции определяются следующим образом:

  •  tranc(x) = trunc(Re(*)) + I*trunc(IM(x));
  •  round(x) = round(Re(.r)) + I*round(Im(x));
  •  frac(x) - frac(Re(*)) + I*hac(Im(x)).

Для введения определения значения 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(-х) 

Примеры применения:

 

28.gif

Изображение: 

19. Функции комплексного аргумента

 

Функции комплексного аргумента

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

  •  argument — аргумент комплексного числа; 1
  •  conjugate — комплексно-сопряженное число;
  •  Im — мнимая часть комплексного числа;
  •  Re — действительная часть комплексного числа;
  •  роlаг — полярное представление комплексного числа (библиотечная функция).

Примеры применения:

 

29.gif

Изображение: 

20. Специальные математические функции

 

Специальные математические функции

Специальные математические функции обычно являются решениями линейных дифференциальных уравнений различного типа и выражаются в виде интегралов, не представимых через элементарные функции. Maple 7 имеет практически полный набор таких функций. Их представления можно найти в справочной литературе, а также в справочной базе данных Maple. В связи с этим ограничимся приведением названий наиболее важных специальных функций:

  •  AiryAi (Bi) — функции Эйри;
  • AngerJ — функция Ангера;
  •  bernoulli — числа и полиномы Бернулли;
  •  Bessel I (J, К, Y) — функции Бесселя разного рода;
  •  Beta — бета-функция;
  •  binomial — биноминальные коэффициенты;
  •  Chi — интегральный гиперболический косинус;
  •  Ci — интегральный косинус;
  •  csgn — комплексная сигнум-функция;
  •  dilog — дйлогарифм;
  •  Dirac — дельта-функция Дирака;
  •  Ei — экспоненциальный интеграл;
  •  EllipticCE (CK, CPi, E, F, К, Modulus, Nome, Pi) — эллиптические интегралы;
  •  erf — функция ошибок;
  •  erfc — дополнительная функция ошибок;
  •  euler — числа и полиномы Эйлера;
  •  FresnelC (f, g, S) — интегралы Френеля;
  •  GAMMA — гамма-функция;
  •  GaussAGM — арифметико-геометрическое среднее Гаусса;
  •  HankelHl (H2) — функции Ганкеля;
  •  harmonic — частичная сумма серии гармоник;
  •  Heaviside — функция Хевисайда;
  •  JacobiAM (CN, CD, CS, ON, DC, DS, NC, NO, NS, SC, SO, SN) - эллиптические функции Якоби;
  •  JacobiThetal (2, 3, 4) — дзета-функции Якоби;
  •  JacobiZeta — зет:функция Якоби;
  •  KelvinBer (Bei, Her, Hei, Ker, Kei) — функции Кельвина;
  •  Li — логарифмический интеграл;
  •  1nGAMMA — логарифмическая гамма-функция;
  •  MeijerG — G-функция Мейджера;
  •  pochhammer — символ Похгамера;
  •  polylog — полилогарифмическая функция;
  •  Psi — дигамма-функция;
  •  Shi — интегральный гиперболический синус;
  •  Si — интегральный синус;
  •  Ssi — синусный интеграл смещения;
  •  StruveH (L) — функции Струве;
  •  surd — неглавная корневая функция;
  •  LambertW — W-функция Ламберта;
  •  WeberE — Е-функция Вебера;
  •  WeierstrassP — Р-функция Вейерштрасса;
  •  WeierstrassPPrime — производная Р-функции Вейерштрасса;
  •  WeierstrassZeta — зета-функция Вейерштрасса;
  •  WeierstrassSigma — сигма-функция Вейерштрасса;
  •  Zeta — зета-функция Римана и Гурвица.

Ввиду большого числа специальных функций и наличия множества примеров их вычисления в справочной системе 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. Графики функций Бесселя и гамма-функции

 

30.gif

Изображение: 

31.gif

Изображение: 

50.gif

Изображение: 

21. Функции для работы с векторами и матрицами

 

Функции для работы с векторами и матрицами

 

Элементы векторов и матриц

Элементы векторов и матриц являются индексированными переменными, то есть место каждого элемента вектора определяется его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают как i (номер строки матрицы или порядковый номер элемента вектора) iij (номер столбца матрицы). Допустимы операции вызова нужного элемента и присваивания ему нового значения:

 V[1] — вызов i-го элемента вектора V;

 M[i, j] — вызов элемента матрицы М, расположенного на г-н строке в j-ы столбце;

 V[i]:=x — присваивание нового значения х i-му элементу вектора V;

 M[i,j]:=x — присваивание нового значения х элементу матрицы М.

 

22. Преобразование списков в векторы и матрицы

 

Преобразование списков в векторы и матрицы

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

Однако, используя функцию преобразования данных convert, можно преобразовывать одномерные списки в векторы, а двумерные — в матрицы. Функция type используется в следующих формах: 

  •  type(V, vector) — тестирует аргумент V и возвращает true, если V — вектор, и false в ином случае;
  •  type(M,matrix) — тестирует аргумент М и возвращает true, если М — матрица, и false в ином случае.

Здесь параметры vector и matrix используются для указания того, какой тип объекта проверяется.

 ПРИМЕЧАНИЕ 

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

 

32.gif

Изображение: 

23. Операции с векторами

 

Операции с векторами

Важное достоинство систем компьютерной алгебры, к которым относится и Maple 7, заключается в возможности выполнения аналитических (символьных) операций над векторами и матрицами.

Приведем примеры операций над векторами:

В этих примерах используется функция evalm(M), осуществляющая вычисление матрицы или вектора М.

 ПРИМЕЧАНИЕ 

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

 

33.gif

Изображение: 

24. Операции над матрицами с численными элементами

 

Операции над матрицами с численными элементами

Над матрицами с численными элементами можно выполнять разнообразные операции. Ниже приведены основные из них:

 

ПРИМЕЧАНИЕ

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

 

34.gif

Изображение: 

35.gif

Изображение: 

25. Символьные операции с матрицами

 

Символьные операции с матрицами

Ниже представлены примеры символьных операций, осуществляемых над квадратными матрицами одного размера:

Приведем еще ряд примеров выполнения символьных операций с одной матрицей:

Среди других функций для работы с матрицами полезно обратить внимание на функцию mар, которая применяет заданную операцию (например, функции дифференцирования diff и интегрирования int) к каждому элементу матрицы. Примеры такого рода даны ниже:

 

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

В дальнейшем мы продолжим изучение матричных функций и операций, включенных в пакеты Maple 7.

 

36.gif

Изображение: 

37.gif

Изображение: 

38.gif

Изображение: 

39.gif

Изображение: 

40.gif

Изображение: 

26. Функции для работы со строковыми данными

 

Функции для работы со строковыми данными

 

Контроль типа строковых данных

Напоминаем, что строковые данные представляются совокупностью любых символов в обратных апострофах, например *Привет* или `2+2`. Для контроля объектов на принадлежность к строковым данным служит функция type с параметром string:

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

 

41.gif

Изображение: 

27. Интерактивный ввод строк

 

Интерактивный ввод строк

Для интерактивного ввода строк можно использовать функцию readline(filename), задав в качестве имени файла terminal или опустив имя файла. В этом случае ввод строки осуществляется с клавиатуры компьютера:

> s:=read1ine(); 

> Привет мой друг! 

s:="Привет мой друг!"

 ПРИМЕЧАНИЕ 

Полезно обратить внимание на то, что запрос в ходе интерактивного ввода может быть сделан на русском языке (если установленный для запросов шрифт имеет символы кириллицы). Нужно также, чтобы и шрифт строки вывода содержал кириллицу, иначе в строке вывода будет типичная «абракадабра» — смесь непонятных символов.

 

28. Обработка строк

 

Обработка строк

Имеется ряд функций для работы со строками. Из них наиболее важны следующие:

  •  lenght(str) — возвращает число символов, содержащихся в строке str;
  •  substring(str,a. .b) — возвращает подстроку строки str от а-го символа до b-го;
  •  cat(strl,str2....) — возвращает строку, полученную объединением строк strl, str2,... (альтернатива — оператор конкатенации в виде точки .);
  •  SearchText(s.str) — производит поиск подстроки s в строке str и при его успехе возвращает номер позиции s в строке str (при отсутствии s в str функция возвращает 0).

Примеры применения этих функций (в виде продолжения ранее приведенных примеров) представлены ниже:

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

 

42.gif

Изображение: 

29. Преобразование строки в математическое выражение

 

Преобразование строки в математическое выражение

Часто возникает необходимость в интерактивном вводе математических выражений. Для ввода с запросом выражения используется функция readstat(promt), где promt — строка с текстовым комментарием. Пример ее применения дан ниже:

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

Обратите внимание на то, что функция evaln не смогла вычислить строковое выражение `2+3` поскольку оно не является числовым типом данных. Однако функция parse преобразовала это выражение в числовое, что и привело к его вычислению.

 

43.gif

Изображение: 

44.gif

Изображение: 

30. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Использовать операторы и операнды.
  •  Применять различные математические функции.
  •  Использовать операторы и функции для работы с векторами и матрицами.
  •  Использовать функции для работы со строковыми данными.

 

Урок 7. Типовые средства программирования

1. Функции пользователя

 

Урок 7.

Типовые средства программирования.

 

Функции пользователя

Упрощенные функции пользователя

Хотя ядро Maple 7, библиотека и пакеты содержат свыше 3000 функций, всегда может оказаться, что именно нужной пользователю (и порою довольно простой) функции все же нет. Тогда возникает необходимость в создании собственной функции, именуемой функцией пользователя. Начнем описание с обычных функций пользователя, задающих некоторую зависимость от одной или ряда переменных в явном виде.

Основным средством расширения Maple-языка являются модули — процедуры. Однако на первый взгляд они довольно сложны. Есть и более простые способы задания функций пользователя. Один из таких способов заключается просто в присваивании введенной функции (в виде выражения) некоторой переменной: Name:-выражение

Этот прием фактически означает просто операцию присваивания. Следующие примеры иллюстрируют технику работы с такими функциями:

Заданный таким образом объект все же не является полноценной функцией пользователя, и прежде всего потому, что в нем используются только глобальные переменные (х и у) и нет объявленного списка параметров, от которых зависит значение функции. При этом значения переменных функции приходится заведомо задавать отдельно, используя операции присваивания. Подобные конструкции нельзя ввести в библиотеки Maple 7.

 

1.gif

Изображение: 

2. Основной способ задания функции пользователя

 

Основной способ задания функции пользователя

Более гибкий способ задания полноценных функций пользователя базируется на применении функционального оператора. При этом используется следующая конструкция:

name:=(x,y,...)->expr

После этого вызов функции осуществляется в виде name(x.y,...), где (х.у,...) — список формальных параметров функции пользователя с именем name. Переменные, указанные в списке формальных параметров, являются локальными. При подстановке на их место фактических параметров они сохраняют их значения только в теле функции (ехрr). За пределами этой функции переменные с этими . именами оказываются либо неопределенными, либо сохраняют ранее присвоенные им значения. Следующие примеры иллюстрируют сказанное:

Нетрудно заметить, что при вычислении функции m(х.у) переменные х и у имели значения 3 и 4, однако за пределами функции они сохраняют нулевые значения, заданные им перед введением определения функции пользователя. Еще один способ задания функции пользователя базируется на применении функции unapply: name:=unapply(expr.varl.var2,...) Ниже даны примеры такого задания функции пользователя:

Последний пример показывает возможность проведения символьных операций с функцией пользователя.

 

2.gif

Изображение: 

3.gif

Изображение: 

3. Графическая визуализация результатов выполнения функций пользователя

 

Графическая визуализация результатов выполнения функций пользователя

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

а

б

Рис. 7.1. Примеры задания функций пользователя двух переменных с построением их графиков

ВНИМАНИЕ 

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

 

4.gif

Изображение: 

5.gif

Изображение: 

4. Импликативные функции

 

Импликативные функции

Другой важный класс функций, которые нередко приходится задавать, — импликативные функции, в которых связь между переменными задана неявно, в виде какого-либо выражения. Самый характерный пример такой функции — это выражение для задания окружности радиуса r: х^2 + у^2 = r^2.

Итак, импликативные функции записываются как уравнения. Соответственно их можно решать с помощью функции solve. Следующие примеры иллюстрируют задание уравнения окружности в общем и в частном (численном) виде:

Для графической визуализации импликативных функций служит функция implicitplot пакета plots. На рис. 7.2 представлено задание двух импликативных функций и построение их графиков.

Рис. 7.2. Задание двух импликативных функций и построение их графиков

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

 

6.gif

Изображение: 

23.gif

Изображение: 

5. Условные выражения

 

Условные выражения

Для подготовки разветвляющихся программ в Maple-язык программирования включен оператор if, позволяющий создавать следующую конструкцию:

if <Условие сравнения? then <Элементы>

 |elif «Условие сравнения> then <Элементы>|

 |e1se <Элементы>|

  fi:

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

  •  if <Условие> then <Элементы 1> fi — если Условие выполняется, то исполняются Элементы 1, иначе ничего не выполняется;
  •  if <Условие> then <Элененты 1> else <Элененты 2> fi — если Условие выполняется, то исполняются Элементы 1, иначе исполняются Элементы 2.

В задании условий используются любые логические конструкции со знаками сравнения (<, <=, >, >=, =, <>) и логические операторы 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 не всегда корректно обрабатываются функциями символьной математики. Поэтому надо тщательно контролировать полученные в этом случае результаты.

 

7.gif

Изображение: 

8.gif

Изображение: 

9.gif

Изображение: 

6. Циклы for и while

 

Циклы for и while

Зачастую необходимо циклическое повторение выполнения выражения заданное число раз или до тех пор, пока выполняется определенное условие. 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

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.

 

10.gif

Изображение: 

11.gif

Изображение: 

7. Операторы пропуска и прерывания

 

Операторы пропуска и прерывания

Иногда бывает нужным пропустить определенное значение переменной цикла. Для этого используется оператор 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 обеспечивает также прерывание выполнения текущей программы (в частности, цикла), но при этом окно текущего документа закрывается.

 

8. Процедуры и процедуры-функции

 

Процедуры и процедуры-функции

Простейшие процедуры

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

Процедуры являются важнейшим элементом структурного программирования и служат средством расширения возможностей системы 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 надо поставить знак двоеточия. Обратите также внимание на то, что для обозначения действительной и мнимой частей процедуры в ее тексте появились готические буквы.

 

12.gif

Изображение: 

9. Оператор возврата значения RETURN

 

Оператор возврата значения RETURN

Как отмечалось, процедуры, которые возвращают значение результата в ответ на обращение к ним, во многом тождественны функциям. Будем называть их процедурами-функциями. Обычно процедура возвращает значение последнего выражения в ее теле или выражения, намеченного к возврату специальным оператором RETURN:

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

 

13.gif

Изображение: 

10. Статус переменных в процедурах и циклах

 

Статус переменных в процедурах и циклах

Переменные, которые указываются в списке параметров (например, г, в нашем случае), внутри процедуры являются локальными. Это означает, что изменение их значений происходит лишь в теле процедуры, то есть локально. За пределами тела процедуры эти переменные имеют то значение, которое у них было до использования процедуры. Это хорошо поясняет следующий пример:

> 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, Таким образом, имена переменных в списке параметров процедуры могут совпадать с именами глобальных переменных, используемых за пределами процедуры.

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

 

11. Объявления переменных локальными с помощью оператора local

 

Объявления переменных локальными с помощью оператора local

Если в теле процедуры имеются операции присваивания для ранее определенных (глобальных) переменных, то изменение их значений в ходе выполнения процедуры создает так называемый побочный эффект. Он способен существенно изменить алгоритм решения сложных задач и, как правило, недопустим. Поэтому 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

 

12. Объявления переменных глобальными с помощью слова global

 

Объявления переменных глобальными с помощью слова global

Говорят, что запретный плод сладок! Что бы ни говорили о нежелательности - работы с глобальными переменными, бывает, что их применение желательно или даже необходимо. Чтобы сделать переменные внутри процедуры глобальными, достаточно объявить их с помощью ключевого слова 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». При этом соответствующие переменные останутся локальными.

 

13. Функция вывода сообщений об ошибках ERROR

 

Функция вывода сообщений об ошибках ERROR

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

Для контроля за типом данных обычно используются различные функции оценки и тестирования. При выявлении ими ошибки, как правило, предусматривается вывод соответствующего сообщения. Для этого используется функция 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.

 

14. Ключи в процедурах

 

Ключи в процедурах

В объявление процедуры можно включить ключевые слова, вводимые словом

 options opseq

Иногда их называют расширяющими ключами. Предусмотрены следующие ключи:

  •  arrow — определят процедуру -оператор в нотации ->;
  •  bulltin — определяет функцию как встроенную;
  •  call_external — задает обращение к внешним программным модулям;
  •  copyright — защищает процедуру от копирования;
  •  inline — определяет процедуру как подчиненную (возможно, не для всех процедур - см. справку); 
  •  load=memberName — загружает нужный для определений процедуры модуль (см. также опцию unload и детали в справке); 
  •  operator — объявляет процедуру — функциональный оператор;
  •  system — определяет процедуру как системную,
  •  remember — определяет таблицу памяти для процедуры;
  •  trace — задает трассировку процедуры;
  •  unl oacNnemberName — выгружает нужный для определения процедуры модуль (см. опцию load).

Ключ 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).

 

14.gif

Изображение: 

15. Общая форма задания процедуры

 

Общая форма задания процедуры

Выше мы рассмотрели основные частные формы задания процедур. Все они могут быть объединены в общую форму задания процедуры:

name:-proc(<argseq>) # объявление процедуры

local<nseq>; # объявление локальных переменных 

g1oba1<nseq>; # объявление глобальных переменных 

options<nseq>; # объявление расширяющих ключей 

description<stringseq>; # объявление комментарий 

<stateq> # выражения - тело процедуры

end; (или end:) # объявление конца процедуры

Эта форма охватывает все описанные выше частные формы и позволяет готовить самые сложные и надежно работающие процедуры.

 

16. Средства контроля и отладки процедур

 

Средства контроля и отладки процедур

Большая часть функций и операторов системы 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 редко привлекает описанные средства, поскольку проще отладить вычислительный алгоритм прежде, чем на его основе будет составлена процедура. При правильном построении процедур ошибочные ситуации заведомо предусматриваются и должным образом обрабатываются.

 

15.gif

Изображение: 

16.gif

Изображение: 

17. Работа с отладчиком программ

 

Работа с отладчиком программ

В большинстве случаев составители программ (процедур) редко прибегают к пошаговой их отладке. Средства общей диагностики 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.

 

18. Операции ввода и вывода

 

Операции ввода и вывода

Считывание и запись программных модулей

В уроке 2 рассматривалась работа с файлами документов. Вводимые в текущий документ программные модули хранятся вместе с ним, так что при отказе от загрузки какого-либо документа все его программные блоки не могут использоваться в других документах. Кроме того, порой неудобно загружать объемный документ ради использования одного или нескольких модулей, например процедур. Поэтому в Maple 7 введены средства, позволяющие записывать нужные модули (в том числе результаты вычислений) на диск и считывать их в случае необходимости.

Для записи на диск используется оператор save:

  •  save filename — запись всех определений текущего файла под именем filename;
  • save name_l, name_2, .... name_k, filename — запись избранных модулей с именами name_l, name_2, ..., name_k под именем filename.

Считывание имеющегося на диске файла 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.

 

19. Создание своей библиотеки процедур

 

Создание своей библиотеки процедур

Если приведенные выше примеры составления процедур кажутся вам простыми, значит, вы неплохо знаете программирование и, скорее всего, уже имеете несколько полезных процедур, которые вы хотели бы сохранить — если не для потомков, то хотя бы для своей повседневной, работы. Сделать это в 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).

 

17.gif

Изображение: 

24.gif

Изображение: 

20. Запись и считывание данных

 

Запись и считывание данных

Обширные возможности 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 имеет также типичные файловые операции:

  •  writeto — запись в файл;
  •  appendto — добавление к файлу;
  •  open — открытие файла;
  •  close — закрытие файла;
  •  write — запись в открытый файл;
  •  save — запись выражений в файл;
  •  read — считывание из файла.

Их реализация, однако, зависит от платформы, на которой установлена система, и от ее настройки.

 

19.gif

Изображение: 

21. Вывод в специальных форматах

 

Вывод в специальных форматах

Вывод в формате LaTeX

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}}}

 

22. Генерация кодов на языке Фортран

 

Генерация кодов на языке Фортран

Язык Фортран вот уже многие десятилетия используется для программирования вычислительных задач. Накоплены обширные библиотеки решения таких задач на Фортране. Почитателей этого языка 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

При этом вычислительный процесс строится так, чтобы минимизировать число арифметических операций.

 

23. Генерация кодов на языке С

 

Генерация кодов на языке С

Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система 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 позволяет управлять выводом. К сожалению, объем книги не позволяет рассмотреть все многочисленные варианты применения этих функций.

 

24. Дополнительные возможности Maple-языка

 

Дополнительные возможности Maple-языка

Переназначение определений

В большинстве случаев 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.) уже не вычисляется, поскольку ее больше нет.

 

20.gif

Изображение: 

25. Модули.

 

Модули

Модули придают языку программирования Maple 7 некоторые свойства языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — объединения данных и процедур их обработки. Модули задаются ключевым словом module с пустыми скобками () и завершаются словами end module или просто end:

name := module()

export eseq; local Iseq; global gseq:

option optseq: description desc:

Тело модуля 

end module (или просто end)

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

  •  модуль не имеет списка входных параметров; О в модуле могут размещаться данные;
  •  модули могут использоваться для создания пакетов процедур, доступ к которым обеспечивается командой with;
  •  модули имеют свойства в виде локальных переменных и методы в виде процедур интерфейса модулей;
  •  реализация абстрактных типов данных с помощью модулей скрыта от пользователя;
  •  модули могут содержать оператор export eseq, объявляющий экспортируемые переменные модуля;
  •  для доступа к экспортируемым переменным модуля может использоваться специальный оператор «:-» (двоеточие и минус);
  •  модули и процедуры могут вкладываться друг в друга без ограничения уровня вложенности;
  •  модули могут иметь специальные конструкторы объектов.

Следующий пример демонстрирует создание модуля 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) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги.

 

26. Макросы

 

Макросы

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

macrc(e1, e2, .... en)

где el, е2, ....,, en — ноль или более равенств.

В следующем примере функция numbperm с помощью макроса заменена на пр:

> numbperm([l,2,3,4]);

24 

 > macro(np=numbperm(V)); 

> V:=[1.2.3.4]: 

F:=[l,2,3,4] 

> np(V); 

24

Макросы могут быть использованы для конструирования выражений из их макроопределений.

 

27. Внешние вызовы

 

Внешние вызовы

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. Результат выполнения команды форматирования гибкого диска

 

21.gif

Изображение: 

28. Вызов внешних процедур, написанных на языке С

 

Вызов внешних процедур, написанных на языке С

Maple 7 имеет средства для вызова внешних откомпилированных процедур, написанных на языке С. Такая необходимость для подавляющего числа пользователей Maple 7 вызывает большие сомнения в силу следующих причин:

  •  вся идеология системы Maple 7 основана на максимальном исключении программирования на других языках, помимо Maple-языка;
  •  язык С сложен для большинства пользователей Maple 7, которых трудно отнести к «путным» программистам;
  •  отладка комплекса Maple 7 + компилятор С (например, фирмы Microsoft) вряд ли под силу обычным пользователям, тем более что на практике такой комплекс реально не работает без кропотливой отладки.

Учитывая сказанное, мы отметим лишь, что для использования внешних процедур (например, остро нужных пользователю или более быстрых, чем аналогичные процедуры Maple) используется специальная команды define_external, которая генерирует две интерфейсные программы — на языке С и на языке Maple соответственно. Программа на языке С компилируется вместе с внешней процедурой, которая будет использоваться. Результирующий код создает динамически подключаемую бублиотеку DLL. В свою очередь, программа на языке Maple служит как интерфейсная для организации взаимодействия с вызываемой внешней процедурой. Более подробное описание возможностей работы с внешними процедурами можно найти в справке по ним.

 

29. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Задавать функции пользователя.
  •  Использовать условные операторы.
  •  Применять циклы for и while.
  •  Использовать операторы пропуска и прерывания.
  •  Задавать процедуры, и процедуры-функции.
  •  Использовать средства контроля и отладки процедур.
  •  Работать с отладчиком программ.
  •  Применять операции ввода и вывода.
  •  Осуществлять вывод в специальных форматах.
  •  Использовать дополнительные возможности Maple-языка.

 

Урок 8. Математический анализ

1. Вычисление сумм последовательностей

 

Урок 8.

Математический анализ.

 

Вычисление сумм последовательностей

Основные формулы для вычисления сумм последовательностей

Применение систем символьной математики особенно эффективно при решении задач математического анализа. 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.

 

1.gif

Изображение: 

2. Последовательности с заданным числом членов

 

Последовательности с заданным числом членов

Простейшими являются суммы последовательностей с фиксированным числом членов. Ниже даны примеры применения этих функций:

Обратите внимание, что во втором примере система отказалась от вычисления, а в третьем даже выдала сообщение об ошибке, связанной с тем, что переменной k перед вычислением сумм было присвоено численное значение 2. После заключения выражения и переменной индекса k в прямые кавычки ошибка исчезла, поскольку такая операция означает, что переменной придается неопределенное значение.

 

2.gif

Изображение: 

3. Суммы с заданным пределом

 

Суммы с заданным пределом

Особый класс образуют последовательности, у которых предел задается в общем виде значением переменной. Ниже представлен ряд последовательностей, у которых предел задается как 0.. n или 1.. n:

Такого рода последовательности, как видно из приведенных примеров, нередко имеют аналитические выражения для своего значения. Его вычисление намного проще, чем формирование заданной последовательности с прямым суммированием ее членов. Некоторые из таких сумм выражаются через специальные математические функции.

 

3.gif

Изображение: 

4. Суммы бесконечных последовательностей

 

Суммы бесконечных последовательностей

Многие суммы бесконечных последовательностей сходятся к определенным численным или символьным значениям, и система Maple 7 способна их вычислять. Это поясняют следующие примеры:

 

4.gif

Изображение: 

5. Сумма от перемены мест слагаемых меняется!

 

Сумма от перемены мест слагаемых меняется!

Даже школьники хорошо знают, что от перестановки слагаемых сумма не изменяется. Однако Maple 7 (кстати, как и большинство других систем компьютерной математики) при вычислении сумм, увы, этому правилу не следует. Приведенные ниже примеры наглядно показывают этот просчет системы:

 

ВНИМАНИЕ 

При вычислении сумм последовательностей надо строго соблюдать прямой (нарастающий) порядок задания значений индексной переменной суммы. Нарушение этого порядка чревато грубыми ошибками.

 

6.gif

Изображение: 

7.gif

Изображение: 

6. Двойные суммы

 

Двойные суммы

Могут встречаться множественные суммы по типу «сумма в сумме». Ограничимся приведением примера двойной суммы, имеющей аналитическое значение:

При конкретном значении N такую сумму нетрудно вычислить подстановкой: 

> subs( N = 100, %); 

  8670850

Как видно из приведенных примеров, средства вычисления сумм последовательностей Maple 7 позволяют  получать как численные, так и аналитические значения сумм, в том числе представляемые специальными математическими функциями.

 

8.gif

Изображение: 

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.

 

9.gif

Изображение: 

8. Примеры вычисления произведений членов последовательностей

 

Примеры вычисления произведений членов последовательностей

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

Как и в случае вычисления сумм, вычисление произведений возможно как в численной, так и в аналитической форме — разумеется, если таковая существует. Это показывает следующий пример:

Нетрудно понять, что при i, стремящемся к бесконечности, перемножаемые члены последовательности стремятся к нулю, а потому к нулю стремится и их произведение. Вопросы доказательства подобных утверждений находятся за рамками данного учебного курса, ибо он посвящен не математике как таковой, а конкретной программе для математики — Maple 7.

 

10.gif

Изображение: 

11.gif

Изображение: 

9. От перемены места сомножителей произведение меняется!

 

От перемены места сомножителей произведение меняется!

Хотя произведение не зависит от порядка расположения сомножителей, их перестановка в Maple 7 недопустима. Это иллюстрируют следующие примеры:

 ВНИМАНИЕ 

При вычислении произведений надо строго соблюдать прямой (нарастающий) поря-— док задания значений индексной переменной произведения. Нарушение этого порядка чревато грубыми ошибками.

 

12.gif

Изображение: 

10. Вычисление производных

 

Вычисление производных

Функции дифференцирования выражений 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) ;

Примеры вычисления производных:

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

 

Получаемые в результате дифференцирования выражения могут входить в другие выражения. Можно задавать их как функции пользователя и строить графики производных.

 

13.gif

Изображение: 

14.gif

Изображение: 

15.gif

Изображение: 

11. Дифференциальный оператор D

 

Дифференциальный оператор D

Для создания функций с производными может также использоваться дифференциальный оператор 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.

 

16.gif

Изображение: 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

12. Вычисление интегралов

 

Вычисление интегралов

Вычисление неопределенных интегралов

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

Для вычисления неопределенных и определенных интегралов 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.

 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

13. Конвертирование и преобразование интегралов

 

Конвертирование и преобразование интегралов

В некоторых случаях Maple 7 не может вычислить интеграл. Тогда она просто повторяет его. С помощью функций taylor и convert можно попытаться получить аналитическое решение в виде полинома умеренной степени, что демонстрирует следующий характерный пример:

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

Система Maple непрерывно совершенствуется. Например, в Maple V R4 интеграл с подынтегральной функцией ехр(x^4) не брался, а система Maple 7 с легкостью берет его:

Хотя полученный результат, выраженный через гамма- функцию, нельзя назвать очень простым, но он существует и с ним также можно работать. Например, можно попытаться несколько упростить его, используя функцию simplify:

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

 

23.gif

Изображение: 

24.gif

Изображение: 

25.gif

Изображение: 

14. Вычисление определенных интегралов

 

Вычисление определенных интегралов

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

Определенный интеграл удобно трактовать как площадь, ограниченную кривой f(x), осью абсцисс и вертикалями с координатами, равными а и b. При этом площадь ниже оси абсцисс считается отрицательной. Таким образом, значение определенного интеграла — это число или вычисляемое выражение.

Для вычисления определенных интегралов используются те же функции int и Int, в которых надо указать пределы интегрирования, например х=а.. b, если интегрируется функция переменной х. Это поясняется приведенными ниже примерами:

 

Как видно из этих примеров, среди значений пределов может быть бесконечность, обозначаемая как infinity.

 

26.gif

Изображение: 

27.gif

Изображение: 

28.gif

Изображение: 

15. Каверзные интегралы и визуализация результатов интегрирования

 

Каверзные интегралы и визуализация результатов интегрирования

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

В Соросовском образовательном журнале (№ 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 может примирить математиков и инженеров, дав им в руки средства, позволяющие решать подобные задачи с приближениями, приемлемыми для тех или иных категорий пользователей.

Мы подробно рассмотрели этот класс задач потому, что многие важные интегральные преобразования (например, преобразование Фурье) оперируют с подобными подынтегральными функциями и надо тщательно разбираться в областях их применения.

ПРИМЕЧАНИЕ 

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

 

29.gif

Изображение: 

30.gif

Изображение: 

31.gif

Изображение: 

32.gif

Изображение: 

33.gif

Изображение: 

35.gif

Изображение: 

36.gif

Изображение: 

38.gif

Изображение: 

39.gif

Изображение: 

40.gif

Изображение: 

78.gif

Изображение: 

79.gif

Изображение: 

16. Интегралы с переменными пределами интегрирования

 

Интегралы с переменными пределами интегрирования

К интересному классу интегралов относятся определенные интегралы с переменными пределами интегрирования. Если обычный определенный интеграл представлен числом (или площадью в геометрической интерпретации), то интегралы с переменными пределами являются функциями этих пределов.

На рис. 8.6 показано два примера задания простых определенных интегралов с переменным верхним пределом (сверху) и обоими пределами интегрирования (снизу).

Рис.8.6. Примеры интегралов с переменными пределами интегрирования

На этом рисунке построены также графики подынтегральной функции (это наклонная прямая) и функции, которую задает интеграл.

 

80.gif

Изображение: 

17. Вычисление кратных интегралов

 

Вычисление кратных интегралов

Функции int и Int могут использоваться для вычисления кратных интегралов, например двойных и тройных. Для этого функции записываются многократно:

Обратите внимание на нечеткую работу функции evalf в последнем примере. Эта функция уверенно выдает значение evalf (Pi) в форме вещественного числа с плавающей точкой, но отказывается вычислить значение интеграла, в которое входит число Pi. Этот пример говорит о том, что отдельные недостатки у Maple 7 все же есть, как и поводы для ее дальнейшего совершенствования.

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

 

44.gif

Изображение: 

18. Вычисление пределов функций

 

Вычисление пределов функций

Для вычисления пределов функции 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.

 

45.gif

Изображение: 

81.gif

Изображение: 

19. Разложение функций в ряды

 

Разложение функций в ряды

Разложение в степенной ряд

Огромное разнообразие функций давно заставляло математиков задумываться над возможностями их приближенного, но единообразного представления. К таким представлениям относятся различные ряды, сходящиеся к значениям функций в окрестности заданной точки. Для разложения функции или выражения ехрr в обычный степенной ряд служат функции series(ехрr, eqn) и series(expr, eqn, n). Здесь ехрr — разлагаемое выражение, eqn — условие (например, в виде х=а) или имя переменной (например, х) и n — необязательное и неотрицательное целое число, задающее число членов ряда (при его отсутствии оно по умолчанию берется равным 6, но может переустанавливаться системной переменной Order). Если в качестве eqn задано имя переменной, то это соответствует разложению по этой переменной в области точки с ее нулевым значением. Задав eqn в виде х=х0, можно получить разложение по переменной х в окрестности точки х = х0.

Разложение получается в форме степенного многочлена, коэффициенты которого задаются рациональными числами. Остаточная погрешность задается членом вида 0(х)^n. При точном разложении этот член отсутствует. В общем случае для его удаления можно использовать функцию convert. Ниже представлены примеры разложения различных выражений в ряд:

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

 

47.gif

Изображение: 

20. Разложение в ряды Тейлора и Маклорена

 

Разложение в ряды Тейлора и Маклорена

Для разложения в ряд Тейлора используется функция 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 должен задаваться списком порядков коэффициентов.

 

48.gif

Изображение: 

49.gif

Изображение: 

21. Пример документа — разложение синуса в ряд

 

Пример документа — разложение синуса в ряд

Полезно сочетать разложение выражений (функций) в ряд Тейлора с графической визуализацией такого разложения. Рассмотрим документ, в котором наглядно показаны возможности представления функции рядами Тейлора и Маклорена. На рис. 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) дает разложение в форме полиномов Чебышева и т. д.

 

64.gif

Изображение: 

65.gif

Изображение: 

66.gif

Изображение: 

82.gif

Изображение: 

22. Решение уравнений и неравенств

 

Решение уравнений и неравенств

Основная функция solve

Решение линейных и нелинейных уравнений и неравенств — еще одна важная область математического анализа. Maple 7 имеет мощные средства для такого решения. Так, для решения линейных и нелинейных уравнений в аналитическом виде используется достаточно универсальная и гибкая функция solve(eqn, var) или so1ve({eqnl,eqn2,.. .}.{varl,var2,...}), где eqn — уравнение, содержащее функцию ряда переменных, var — переменная, по которой ищется решение, Если при записи eqn не используются знак равенства или знаки отношения, считается, что solve ищет корни уравнения eqn=0.

Характер решений можно изменить с помощью глобальных переменных: 

  •  _SolutionsMayBeLost — при значении true дает решение, которое при обычном применении функции solve возвращает значения NULL;
  •  _MaxSols — задает максимальное число решений;
  •  _EnvAll Solutions — при значении true задает выдачу всех решений.

В решениях могут встречаться следующие обозначения:

  •  _NN — указывает на неотрицательные решения; 
  •  _В — указывает на решения в бинарной форме;
  •  _Z — указывает на то, что решение содержит целые числа;
  •  %N — при текстовом формате вывода задает общие члены решения и обеспечивает более компактную форму его представления.

В форме solve[subtopic] возможны параметры subtopic функции solve следующих типов:

floats   functions   identity   ineq    linear 

radical  scalar      series     system

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

Функция solve старается дать решение в аналитическом виде. Это не означает, что ее нельзя использовать для получения корней уравнений в численном виде. Просто для этого придется использовать функции evalf или convert. Если результат решения представлен через функцию RootOf, то зачастую можно получить все корни с помощью функции all values.

 

23. Решение одиночных нелинейных уравнений

 

Решение одиночных нелинейных уравнений

Решение одиночных нелинейных уравнений вида f(x) = 0 легко обеспечивается функций solve(f,(x),x). Это демонстрируют следующие примеры:

Часто бывает удобно представлять уравнение и его решение в виде отдельных объектов, отождествленных с определенной переменной:

В частности, это позволяет легко проверить решение (даже если оно не одно, как в приведенном примере) подстановкой (subs):

Сводящиеся к одному уравнению равенства вида f1(x)=fl(x) также решаются функцией solve(fl(x)=f2(x),x):

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

 

50.gif

Изображение: 

51.gif

Изображение: 

52.gif

Изображение: 

53.gif

Изображение: 

24. Решение тригонометрических уравнений

 

Решение тригонометрических уравнений

Функция 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. Пример решения уравнения, имеющего периодические решения

 

54.gif

Изображение: 

55.gif

Изображение: 

56.gif

Изображение: 

57.gif

Изображение: 

67.gif

Изображение: 

25. Решение систем линейных уравнений.

 

Решение систем линейных уравнений

Для решения систем линейных уравнений созданы мощные матричные методы, которые будут описаны отдельно. Однако функция solve также может с успехом решать системы линейных уравнений. Такое решение в силу простоты записи функции может быть предпочтительным. Для решения система уравнений и перечень неизвестных задаются в виде множеств (см. приведенные ниже примеры).

Рисунок 8.12 дает два примера решения систем из двух линейных уравнений. В первом примере функция solve возвращает решение в виде значений неизвестных х и у, а во втором отказывается это делать.

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

Рис. 8.12. Примеры решения системы из двух линейных уравнений с графической иллюстрацией

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

Решение систем из трех линейных уравнений также имеет наглядную геометрическую интерпретацию — в виде точки, в которой пересекаются три плоскости, каждая из которых описывается функцией двух переменных. Для наглядности желательно представить и линии пересечения плоскостей. Это позволяет сделать функция импликативной трехмерной графики tmplicitplotSd, что и показано на рис. 8.13. Для объединения графиков площадей использована функция display.

Некоторые проблемы с решением систем из трех линейных уравнений иллюстрируют примеры, приведенные на рис. 8.14, В первом примере решения вообще нет. График показывает, в чем дело, — линии пересечения плоскостей идут параллельно и нигде не пересекаются. Во втором примере все три плоскости пересекаются по одной линии.

Рис. 8.13. Пример решения системы из трех линейных уравнений с графической иллюстрацией решения

Рис. 8.14. Графическая иллюстрация особых случаев решения системы из трех линейных уравнений

Следующий пример показывает решение системы из четырех линейных уравнений:

Эта система имеет решение, но его простая графическая иллюстрация уже невозможна.

Случай решения неполной системы уравнений (уравнений — 3, а неизвестных — 4) иллюстрирует следующий пример:

Как видно из приведенных примеров, функция solve неплохо справляется с решением систем линейных уравнений.

 

58.gif

Изображение: 

59.gif

Изображение: 

83.gif

Изображение: 

84.gif

Изображение: 

85.gif

Изображение: 

26. Решение систем нелинейных и трансцендентных уравнений

 

Решение систем нелинейных и трансцендентных уравнений

Функция solve может использоваться для решения систем нелинейных и трансцендентных уравнений. Для этого система уравнений и перечень неизвестных задаются в виде множеств. Ниже приведены примеры решения уравнений:

В этих примерах хорошо видна техника работы с функциями solve и assign. В конце примеров показано восстановление неопределенного статуса переменных х и у с помощью функции unassign и снятие определения переменных с помощью заключения их в прямые апострофы.

 

60.gif

Изображение: 

27. Функция RootOf.

 

Функция RootOf

В решениях уравнений нередко появляется функция RootOf, означающая, что корни нельзя выразить в радикалах. Эта функция применяется и самостоятельно в виде RootOf(ехрr) или RootOf(ехрr, х), где ехрr — алгебраическое выражение или равенство, х — имя переменной, относительно которой ищется решение. Если х не указана, ищется универсальное решение по переменной _Z. Когда ехрr задано не в виде равенства, решается уравнение ехрr=0. Для получения решений вида RootOf в явном виде может использоваться функция all values. Примеры применения функции RootOf:

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

 

61.gif

Изображение: 

28. Решение уравнений со специальными функциями

 

Решение уравнений со специальными функциями

К важным достоинствам Maple 7 относится возможность решения уравнений, содержащих специальные функции как в записи исходных выражений, так и в результатах решения. Приведем несколько примеров такого рода:

 

62.gif

Изображение: 

29. Решение неравенств

 

Решение неравенств

Неравенства в математике встречаются почти столь же часто, как и равенства. Они вводятся знаками отношений, например: > (больше), < (меньше) и т. д. Решение неравенств существенно расширяет возможности функции solve. При этом неравенства задаются так же, как и равенства. Приведенные на рис. 8.15 примеры поясняют технику решения неравенств.

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

 

а

б

Рис. 8.15. Примеры, иллюстрирующие решение неравенств

 

В последних примерах показано решение систем неравенств." При этом выдаются области определения нескольких переменных.

 

63.gif

Изображение: 

68.gif

Изображение: 

69.gif

Изображение: 

77.gif

Изображение: 

30. Решение функциональных уравнений

 

Решение функциональных уравнений

Решение функционального уравнения, содержащего в составе равенства некоторую функцию f(x), заключается в нахождении этой функции. Для этого можно использовать функцию solve, что демонстрируют приведенные ниже примеры:

 

70.gif

Изображение: 

31. Решение уравнений с линейными операторами

 

Решение уравнений с линейными операторами

Maple 7 позволяет решать уравнения с линейными операторами, например с операторами суммирования рядов и дифференцирования. Ограничимся одним примером такого рода: 

 

 

71.gif

Изображение: 

32. Решение в численном виде — функция fsolve

 

Решение в численном виде — функция fsolve

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

fsolve( eqns. vars. options )

Эта функция может быть использована со следующими параметрами:

  •  complex — находит один или все корни полинома в комплексной форме;
  •  full digits — задает вычисления для полного числа цифр, заданного функцией Digits;
  •  maxsols=n — задает нахождение только n корней;
  •  interval — задается в виде а. .b или х=а. .b, или (х=а. .b, y=c. .d, ...} и обеспечивает поиск корней в указанном интервале.

Функция 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 находит обычное приближенное решение.

 

72.gif

Изображение: 

33. Решение рекуррентных уравнений — rsolve

 

Решение рекуррентных уравнений — rsolve

Функция 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]

 

73.gif

Изображение: 

74.gif

Изображение: 

34. Решение уравнений в целочисленном виде — isotve

 

Решение уравнений в целочисленном виде — isolve

Иногда бывает нужен результат в форме только целых чисел. Для этого используется функция 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 не формируется. В этом случае упомянутый пример будет выглядеть следующим образом:

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

 

75.gif

Изображение: 

35. Функция msolve.

 

Функция msolve

Функция 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*}

На этом мы завершаем рассмотрение функций для решения уравнений, неравенств и систем с ними.

 

36. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Вычислять суммы членов последовательностей.
  •  Вычислять произведения членов последовательностей.
  •  Вычислять производные.
  •  Вычислять интегралы.
  •  Разлагать функции в ряды.
  •  Решать уравнения и неравенства.

 

Урок 10. Символьные (аналитические) операции

1. Основные операции с выражениями

 

Урок 10.

Символьные (аналитические) операции

 

Основные операции с выражениями

Работа с частями выражений

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

  •  cost (а) — возвращает число сложений и умножений в выражении а (функция пакета codegen);
  •  Ihs(eqn) — выделяет левую часть eqn;
  •  rhs(eqn) — выделяет правую часть eqn;
  •  normal (ехрr) — дает нормализацию (сокращение) ехрr в виде дроби;
  •  numer(expr) — выделяет числитель ехрr;
  • Оdenom(expr) — выделяет знаменатель ехрr.

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

ПРИМЕЧАНИЕ

 Обратите внимание на то, что в предшествующих версиях Maple загрузка библиотеч ной функции cost выполнялась иначе — командой readlib(cost). Это обстоятельство может служить причиной неверной работы документов, созданных в старых версиях Maple, в среде описываемой версии Maple 7.

 

1.gif

Изображение: 

2. Работа с уровнями вложенности выражений

 

Работа с уровнями вложенности выражений

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

  •  nops(expr) — возвращает число объектов первого уровня (операндов) в выражении ехрr;
  •  ор(ехрr) — возвращает список объектов первого уровня в выражении ехрr; 
  •  ор(n.ехрr) — возвращает n-й объект первого уровня в выражении ехрr. 

Ниже представлены примеры применения этих функций:

Рекомендуется просмотреть и более сложные примеры на применение этих функций в справке.

 

2.gif

Изображение: 

3. Преобразование выражений в тождественные формы

 

Преобразование выражений в тождественные формы

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

Основной функцией для такого преобразования является функция convert:

 convert(expr. form, аrgЗ. ...)

Здесь ехрr — любое выражение, form — наименование формы, аrg3, ... — необязательные дополнительные аргументы.

convert — простая и вместе с тем очень мощная функция. Ее мощь заключается в возможности задания множества параметров. Их полный перечень (76 штук!) можно найти в справке по функции convert. Многие из этих параметров очевидны с первого взгляда, поскольку повторяют наименования типов чисел, данных или функций. Например, опции binary, decimal, hex и octal преобразуют заданные числа в их двоичное, десятичное, шестнадцатеричное и восьмеричное представление. Параметр vector задает преобразование списка в вектор (напоминаем, что список и вектор — разные типы данных), а параметр matrix — в матрицу. Приведем примеры применения функции convert:

 

Из этих примеров (их список читатель может пополнить самостоятельно) следует, что функция преобразования convert является одной из самых мощных функций Maple. С ее помощью можно получить множество различных форм одного и того же выражения.

 

3.gif

Изображение: 

4.gif

Изображение: 

4. Преобразование выражений

 

Преобразование выражений

Еще одним мощным средством преобразования выражений является функция 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.


5.gif

Изображение: 

5. Контроль за типами объектов

 

Контроль за типами объектов

Выражения и их части в 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.

 

6. Подстановки

 

Подстановки

Функциональные преобразования подвыражений

Нередко бывает необходимо заменить некоторое подвыражение в заданном выражении на функцию от этого подвыражения. Для этого можно воснользоваться функцией applyop:

  •  applyop(f, i, е) — применяет функцию f к i-му подвыражению выражения е
  •  applyop(f, i, е. ..., xk, ...) — применяет функцию f к i'-му подвыражении выражения е с передачей необязательных дополнительных аргументов xk.

Ниже даны примеры применения этой функции:

 

6.gif

Изображение: 

7. Функциональные преобразования элементов списков

 

Функциональные преобразования элементов списков

Еще две функции, реализующие операции подстановки, указаны ниже:

map(fcn, expr. arg2. .... argn)

map2(fcn, argl, expr. arg3, .... argn) 

Здесь fen — процедура или имя, expr — любое выражение, argi — необязательные дополнительные аргументы для fen.

Первая из этих функций позволяет приложить fen к операндам выражения ехрr. Приведенные далее примеры иллюстрируют использование функции mар.

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

Функция mар2 отличается иным расположением параметров. Ее действие наглядно поясняют следующие примеры:

 

7.gif

Изображение: 

8.gif

Изображение: 

8. Подстановки с помощью функций add, mul и seq

 

Подстановки с помощью функций add, mul и seq

Заметим, что операции, подобные описанным выше, Maple 7 реализует и с рядом других функций. Ограничимся примерами на подстановки с помощью функций сложения add, умножения mul и создания последовательностей seq:

 

 

9.gif

Изображение: 

10.gif

Изображение: 

9. Подстановки с помощью функций subs и subsop

 

Подстановки с помощью функций subs и subsop

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

  •  subs(x=a.e) — в выражении е заменяет подвыражение х на подвыражение а;
  •  subs(sl,...,sn,e) — в выражении е заменяет одни подвыражения на другие, выбирая их из списков si, ..., sn вида х=а;
  •  subsop(eql, eq2, .... eqi, ...eqn, e) — в выражении е заменяет указанные в eqi операнды другими, указанными в правой части равенств eqi вида ni=ei, где ni — номер операнда, ei — выражение для замены.

Все эти функции возвращают измененное после подстановки выражение. Ниже показаны примеры применения функций подстановок:

 

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

Одним из важных применений подстановок является проверка правильности решений уравнений и систем уравнений. Ниже дан пример такой проверки:

Здесь задана система из трех нелинейных уравнений, которая затем решена функцией solve. В конце примера с помощью функции подстановки выполнена проверка правильности решения. Оно верно, поскольку у всех уравнений значение левой части совпадает со значением правой части.


11.gif

Изображение: 

12.gif

Изображение: 

13.gif

Изображение: 

10. Функции сортировки и селекции

 

Функции сортировки и селекции

Сортировка и селекция выражений широко используются в практике символьных преобразований. Для выполнения сортировки служит функция 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]. Его действие поясняют следующие примеры:

 


14.gif

Изображение: 

15.gif

Изображение: 

16.gif

Изображение: 

17.gif

Изображение: 

11. Упрощение выражений

 

Упрощение выражений

Функция simplify — одна из самых мощных в системах символьной математики. Она предназначена для упрощения математических выражений. «Все гениальное просто», — любим мы повторять, хотя это далеко не всегда так. Тем не менее стремление представить многие математические выражения в наиболее простом виде поощряется в большинстве вычислений и нередко составляет их цель. В системе Maple 7 функция упрощения используется в следующем виде:

  •  simplify(expr) — возвращает упрощенное выражение ехрr или повторяет его, если упрощение в рамках правил Maple 7 невозможно;
  •  simplify(expr, nl, n2, ...) —возвращает упрощенное выражение ехрr с учетом параметров с именами nl, n2, ... (в том числе заданных списком или множеством);
  •  simplify(ехрг,assume=prop) — возвращает упрощенное выражение ехpr с учетом всех условий.

Функция simplify — многоцелевая. Она обеспечивает упрощение математических выражений, выполняя следующие типовые действия (для простоты обозначим их как ->):

  •  комбинируя цифровые подвыражения (3*х*5->15*х, 10*х/5->2*х);
  •   приводя подобные множители в произведениях (х^3*а*х->а*х^4); 
  •  приводя подобные члены в суммах (5*х+2+3*х->8*х+2); 
  •  используя тождества, содержащие ноль (а+0->а, х-0->х);
  •  используя тождества, содержащие единицу (1*х->х);
  •  распределяя целочисленные показатели степени в произведениях ((3*x*y^3)^2 ->9*х^2*у^6);
  •  сокращая ехрr на наибольший общий полиномиальный или иной множитель;
  •  понижая степень полиномов там, где это возможно;
  •  используя преобразования, способные упростить выражения.

Несмотря на свою гибкость, функция 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, то она просто его повторяет. Это сигнал к применению опций.

 

18.gif

Изображение: 

19.gif

Изображение: 

20.gif

Изображение: 

21.gif

Изображение: 

12. Расширение выражений

 

Расширение выражений

Даже в жизни мы говорим: «не все так просто». Порою упрощенное выражение скрывает его особенности, знание которых является желательным. Функция 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 приведены ниже:

 

22.gif

Изображение: 

13. Факторизация выражений.

 

Факторизация выражений

Разложение целых и рациональных чисел

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

ifactor(n) 

или 

ifactor(n,method)

где n — число, method — параметр, задающий метод разложения. Другая библиотечная функция, if actors(n), возвращает результат разложения в форме вложенных списков:

 

 

23.gif

Изображение: 

24.gif

Изображение: 

14. Разложение выражений (факторизация)

 

Разложение выражений (факторизация)

Для алгебраических выражений функция факторизации записывается в вычисляемой и не вычисляемой (инертной) формах:

factor(a)               Factor(a)  

factpr(a.K)             Factor(а.К)

Здесь а — полином с несколькими переменными, К — необязательное алгебраическое расширение. Для получения результата от инертной формы функции факторизации надо использовать функции вычисления evala или evalgf.

Главная цель факторизации  это нахождение максимального числа независимых сомножителей выражения, линейных по заданным переменным с коэффициентами наиболее простой формы. Ниже представлены примеры применения функции factor:

 

 

25.gif

Изображение: 

26.gif

Изображение: 

15. Комплектование по степеням

 

Комплектование по степеням

Еще одна функция общего назначения — collect — служит для комплектования выражения ехрr по степеням указанного фрагмента х (в том числе множества либо списка). Она задается в одной из следующих форм:

collect(a. x) 

  collect(a. x. form, func)

Во второй форме этой функции дополнительно задаются параметры form (форма) и func (функция или процедура). Параметр form может иметь два значения- recursive (рекурсивная форма) и distributed (дистрибутивная форма). Параметр func позволяет задать имя функции, по которой будет идти комплектование ехрr. Примеры применения функции collect представлены ниже:

 

 

27.gif

Изображение: 

28.gif

Изображение: 

16. Программирование символьных операций

 

Программирование символьных операций

Реализация итераций Ньютона в символьном виде

Найти достаточно простую и наглядную задачу, решение которой отсутствует в системе Maple 7, не очень просто. Поэтому для демонстрации решения задачи с применением аналитических методов воспользуемся примером, ставшим классическим, — реализуем итерационный метод Ньютона при решении нелинейного уравнения вида f(x) - 0.

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

xi+1=x1+f(x1)/f'(x1);

Реализующая его процедура выглядит довольно просто:

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

Далее, задав начальное приближение для х в виде х = х0, можно получить результаты вычислений для ряда итераций:

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

Можно попробовать с помощью полученной процедуры получить решение и для другой функции:

Здесь итерационная формула имеет (и вполне естественно) уже другой вид, но сходимость к корню также обеспечивается за несколько итераций. ;

Возможна и иная форма задания итерационной процедуры с применением оператора дифференцирования D и заданием исходной функции также в виде процедуры:

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

 

29.gif

Изображение: 

30.gif

Изображение: 

31.gif

Изображение: 

32.gif

Изображение: 

33.gif

Изображение: 

17. Вычисление интеграла по известной формуле

 

Вычисление интеграла по известной формуле

Рассмотрим следующий пример:

Прежние версии системы Maple не брали этот интеграл, поскольку он не имеет аналитического представления через обычные функции. Maple 7 блестяще вычисляет этот «крепкий орешек», но полученное выражение довольно сложно.

Из математики известно, что такой интеграл может быть представлен в следующем виде:

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

Результат в аналитическом виде довольно прост для данного интеграла с конкретным значением т. Более того, мы получили несколько иной результат и дляп в общем случае. Но точен ли он? Для ответа на этот вопрос продифференцируем полученное выражение:

 

Результат дифференцирования выглядит куда сложнее, чем вычисленный интеграл. Однако с помощью функции simplify он упрощается к подынтегральной функции:

Это говорит о том, что задача вычисления заданного интеграла в аналитической форме действительно решена. А что касается громоздкости результатов, так ведь системы, подобные Maple 7, для того и созданы, чтобы облегчить нам работу с громоздкими вычислениями — в том числе аналитическими.

 

34.gif

Изображение: 

36.gif

Изображение: 

37.gif

Изображение: 

38.gif

Изображение: 

18. Вложенные процедуры и интегрирование по частям

 

Вложенные процедуры и интегрирование по частям

Теперь мы подошли к важному моменту, о котором читатель наверняка уже давно догадался — в составляемых пользователем процедурах можно использовать ранее составленные им (или кем-то еще) другие процедуры! Таким образом, Maple-язык позволяет реализовать процедуры, вложенные друг в друга. Для иллюстрации применения вложенных процедур рассмотрим операцию интегрирования по частям. Пусть нам надо вычислить интеграл:

где р(х) — выражение, представляющее полином.

Приведенный ниже пример подготовлен в реализации Maple 7 [38]. Вначале подготовим процедуру IntExpMonomialR, реализующую вычисление уже рассмотренного ранее интеграла, но рекурсивным способом:

 

Теперь составим процедуру для вычисления по частям нашего интеграла:

В этой процедуре имеется обращение к ранее составленной процедуре IntExpMonomialR. Обратите внимание на то, что в процедуре введено предупреждение об определенных проблемах, связанных с использованием функции degree (сообщение начинается с символов ###). Тем не менее процедура работает, в чем убеждают по крайней мере следующие примеры:

В заключение остается отметить, что данный пример в Maple V R4 дает неточный результат, хотя никаких сообщений об ошибках не выводится.

 

40.gif

Изображение: 

41.gif

Изображение: 

42.gif

Изображение: 

19. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Осуществлять основные операции с выражениями.
  •  Выполнять приложения и подстановки.
  •  Упрощать и расширять выражения.
  •  Осуществлять факторизацию выражений.
  •  Выполнять комплектование выражений по степеням.
  •  Программировать некоторые символьные операции.

 

Урок 11. Типовые средства построения графиков

1. Введение в построение двумерных графиков

 

Урок 11.


Типовые средства построения графиков

Введение в построение двумерных графиков

Основные возможности двумерной графики

Maple 7 реализует все мыслимые (и даже «немыслимые») варианты математических графиков. Строятся как графики простых функций в декартовой и полярной системах координат, так и графики, показывающие реалистические образы сложных, пересекающихся в пространстве фигур с их функциональной окраской. Возможны наглядные графические иллюстрации решений самых разнообразных уравнений, включая системы дифференциальных уравнений.

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

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

О графические средства Maple V возвращают некоторые графические объекты, которые размещаются в окне документа — в строке вывода или в отдельном графическом объекте;

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

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

 

2. Основная функция построения двумерных графиков — plot

 

Основная функция построения двумерных графиков plot

В математике широко используются зависимости вида y(x) или у(х). Их графики строятся на плоскости в виде ряда точек y1(x1), обычно соединяемых отрезками прямых. Таким образом, используется кусочно-линейная интерполяция двумерных графиков. Если число точек графика достаточно велико (десятки или сотни), то приближенность построения не очень заметна.

Для построения двумерных графиков служит функция plot. Она задается в виде:

plot(f, h, v) 

plot(f, h, v, о)

где f — визуализируемая функция (или функции), h — переменная с указанием области ее изменения, v — необязательная переменная с указанием области изменения, о — параметр или набор параметров, задающих стиль построения графика (толщину и цвет кривых, тип кривых, метки на них и т. д.).

Самыми простыми формами задания этой функции являются следующие:

  •  plot(f ,xrnin,xmax) — построение графика функции f, заданной только своим именем;
  •  plot(f(x),x=xmin,xmax) — построение графика функции f(x),

Диапазон изменения независимой переменной х задается как xmin. xmax, где xmin и xmax — минимальное и максимальное значение х, .. (две точки) — составной символ, указывающий на изменение независимой переменной. Разумеется, имя х здесь дано условно — независимая переменная может иметь любое допустимое имя.

Помимо построения самой кривой у(х) или f(x) необходимо задать ряд других свойств графиков, например вывод координатных осей, тип и цвет линий графика и др. Это достигается применением параметров графика — специальных указаний для Maple. Графики обычно (хотя и не всегда) строятся сразу в достаточно приемлемом виде. Это достигается тем, что многие параметры задаются по умолчанию и пользователь, по крайней мере начинающий, может о них ничего не знать. Однако язык общения и программирования Maple 7 позволяет задавать управляющие параметры и в явном виде.

Для двумерного графика возможны следующие параметры:

  •  adaptive — включение адаптивного алгоритма построения графиков (детали см. ниже);
  •  axes — вывод различных типов координат (axes=NORMAL — обычные оси, выводятся по умолчанию, axes=BOXES — график заключается в рамку с осями-шкалами, axes=FRAME — оси в виде перекрещенных линий, axes=NONE — оси не выводятся);
  •  axes font — задание шрифтов для подписи делений на координатных осях (см. также параметр font);
  •  color — задает цвет кривых (см. далее);
  •  coords — задание типа координатной системы (см. далее);
  •  discont — задает построение непрерывного графика (значения true или false);
  •  filled — при filled=true задает окраску цветом, заданным параметром color, для области, ограниченной построенной линией и горизонтальной координатной осью х;
  •  font — задание шрифта в виде [семейство, стиль, размер];
  •  labels — задание надписей по координатным осям в виде [X, Y], где X и Y — надписи по осям х и у графика;
  •  label directions — задает направление надписей по осям [X, Y], где X и Y может иметь строковые значения HORISONTAL (горизонтально) и VERTICAL (вертикально);
  •  label font — задает тип шрифта подписей (см. font);
  •   legend — задает вывод легенды (обозначения кривых);
  •  linestyle — задание стиля линий (1 — сплошная, 2 — точками, 3 — пунктиром и 4 — штрихпунктиром);
  •  numpoints — задает минимальное количество точек на графике (по умолчанию numpoints=49);
  •  resolutions — задает горизонтальное разрешение устройства вывода (по умолчанию resolutions=200, параметр используется при отключенном адаптивном методе построения графиков);
  •  sample — задает список параметров для предварительного представления кривых;
  •  scaling — задает масштаб графика: CONSTRAINED (сжатый) или UNCONSTRAINED (несжатый — по умолчанию);
  •  size.— задает размер шрифта в пунктах;
  •  style — задает стиль построения графика (POINT — точечный, LINE — линиями);
  •  symbol — задает вид символа для точек графика (возможны значения BOX — прямоугольник, CROSS — крест, CIRCLE — окружность, POINT — точка, DIAMOND — ромб);
  •  symbol size — установка размеров символов для точек графика (в пунктах, по умолчанию 10);
  •  title — задает построение заголовка графика (title="string", где string — строка);
  •  titlefont — определяет шрифт для заголовка (см. font);
  •  thickness — определяет толщину линий графиков (О, 1, 2, 3, значение по умолчанию — 0);
  •  view=[A, В] — определяет максимальные и минимальные координаты, в пределах которых график будет отображаться на экране, А = [xmin. .xmax], B=[ymin. .ymax] (по умолчанию отображается вся кривая);
  •  xtickmarks — задает минимальное число отметок по оси x, 
  • ytickmarks — задает минимальное число отметок по оси у.

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

Специальный параметр adaptive задает работу специального адаптивного алгоритма для построения графиков наилучшего вида. При этом Maple автоматически учитывает кривизну изменения графика и увеличивает число отрезков прямых в тех частях графиков, где их ход заметно отличается от интерполирующей прямой. При задании adaptive=false адаптивный алгоритм построения графиков отключается, а при adaptive=true включается (значение по умолчанию).

 

3. Задание координатных систем двумерных графиков

 

Задание координатных систем двумерных графиков

В версии 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)

 

4. Управление стилем и цветом линий двумерных графиков

 

Управление стилем и цветом линий двумерных графиков

Maple 7 позволяет воспроизводить на одном графике множество кривых. При этом возникает необходимость как-то идентифицировать их. Для этого можно использовать построение линий разными стилями, разными цветами и с разной толщиной. Набор средств выделения кривых позволяет уверенно различать их как на экране цветного дисплея и в распечатках, сделанных цветным струйным принтером, так и при печати монохромными принтерами. Параметр style — позволяет задавать следующие стили для линий графиков:

  •  POINT или point — график выводится по точкам; 
  •  LINE или line — график выводится линией.

Если задано построение графика точками, то параметр 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 — желтый и т. д. Перевод цветов некоторых оттенков на русский язык не всегда однозначен и потому не приводится. Средства управления стилем графиков дают возможность легко выделять различные кривые на одном рисунке, даже если для выделения не используются цвета.

 

5. Основные типы двумерных графиков

 

Основные типы двумерных графиков

Графики одной функции

При построении графика одной функции она записывается в явном виде на месте шаблона f. Примеры построения графика одной функции представлены на рис. 11.1. Обратите внимание на то, что график функции sin(x)/x строится без характерного провала в точке х = 0, который наблюдается при построении графиков этой функции многими программами. Он связан с используемым в них правилом — функция задается равной нулю, если ее числитель равен нулю. Данная функция в этой точке дает устранимую неопределенность 0/0->1, что и учитывает графический процессор системы Maple 7.

a

б

Рис. 11.1. Примеры построения графиков одной функции

При построении графиков одной функции могут быть введены описание диапазонов и различные параметры, например: для задания цвета кривой, толщины линии, которой строится график функции, и др. К примеру, запись в списке параметров color=black задает вывод кривых черным цветом, а запись thikness=2 задает во втором примере рис. 11.1 построение графика линией, удвоенной по сравнению с обычной толщиной. Кстати говоря, запись color=red дает красный цвет, color=green — зеленый цвет, color=blue — синий цвет и т. д. При черно-белой печати цвета представляются оттенками серого цвета.

 

1.gif

Изображение: 

2.gif

Изображение: 

6. Управление диапазоном изменения переменной и значения функции

 

Управление диапазоном изменения переменной и значения функции

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

а

б

Рис. 11.2. Построение графиков функции с явным указанием масштаба

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

 

3.gif

Изображение: 

4.gif

Изображение: 

7. Графики функций в неограниченном диапазоне

 

Графики функций в неограниченном диапазоне

Изредка встречаются графики функций f(x), которые надо построить при изменении значениях от нуля до бесконечности или даже от минус бесконечности до плюс бесконечности. Бесконечность в таких случаях задается как особая константа infinity. В этом случае переменной х, устремляющейся в бесконечность, откладывается значение аrctan(x). Рисунок 11.2 (второй пример) иллюстрирует сказанное.

 

8. Графики функций с разрывами

 

Графики функций с разрывами

Некоторые функции, например tan(x), имеют при определенных значениях х разрывы, причем случается, что значения функции в этом месте устремляются в бесконечность. Функция tan(x), к примеру, в точках разрывов устремляется к +? и -?. Построение графиков таких функций нередко дает плохо предсказуемые результаты. Графический процессор Maple 7 не всегда в состоянии определить оптимальный диапазон по оси ординат, а график функции выглядит весьма непредставительно, если не сказать безобразно (рис. 11.3, первый пример).

а

б

Рис. 11.3. Построение графиков функций с разрывами

Среди аргументов функции plot есть специальный параметр discont. Если задать его значение равным true, то качество графиков существенно улучшается, см. второй пример на рис. 11.3. Улучшение достигается разбиением графика на несколько участков, на которых функция непрерывна, и более тщательным контролем за отображаемым диапазоном. При discont=false данный параметр отключен и строятся обычные графики.

ПРИМЕЧАНИЕ

 Следует отметить, что вид графика можно улучшить, просто задав диапазон по оси у например введя в параметры функции запись у=-10..10). При этом в точках разрыва могут появиться вертикальные линии. Иногда это бывает полезно.

 

5.gif

Изображение: 

6.gif

Изображение: 

9. Графики нескольких функций на одном рисунке

 

Графики нескольких функций на одном рисунке

Важное значение имеет возможность построения на одном рисунке графиков нескольких функций. В простейшем случае (рис. 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 убирает координатные оси. Обратите внимание, что смещение графиков отдельных функций вниз с целью устранения их наложения достигнуто просто прибавлением к значению каждой функции некоторой константы.

 

8.gif

Изображение: 

9.gif

Изображение: 

10.gif

Изображение: 

10. Графики функций, построенные точками

 

Графики функций, построенные точками

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

В данном случае переменная Р имеет вид списка, в котором попарно перечислены координаты точек функции sin(x). В этом нетрудно убедиться, заменив знак «:» после выражения, задающего Р, на знак «;». Далее по списку Р построен график точек в виде крестиков, которые отображают отдельные значения функции sin(x).

На рис. 11.8 показано построение графиков функций по точкам при явном задании функции списком координат ее отдельных точек. В первом примере эти точки соединяются отрезками прямых, так что получается кусочно-линейный график. Видно также, что указание типа точек после указания стиля линии игнорируется (а жаль, было бы неплохо, чтобы наряду с кусочно-линейной линией графика строились и выделенные окружностями точки).

Рис. 11.7. Формирование списка отдельных точек функции и их построение на графике

а

б

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

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

 

11.gif

Изображение: 

12.gif

Изображение: 

11. Графики функций, заданных своими именами

 

Графики функций, заданных своими именами

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

Рис. 11.9. Построение графиков четырех функций, заданных только их именами

Этот пример показывает, что возможно построение графиков функций даже без указания в команде plot диапазонов. При этом диапазон по горизонтальной оси устанавливается равным по умолчанию -10.. 10, а по вертикальной оси выбирается автоматически в соответствии с экстремальными значениями функций в указанном диапазоне изменения независимой переменной (условно х).

 

14.gif

Изображение: 

12. Графики функций с ординатами, заданными вектором

 

Графики функций с ординатами, заданными вектором

Часто возникает необходимость построения графика точек, ординаты которых являются элементами некоторого вектора. Обычно при этом предполагается равномерное расположение точек по горизонтальной оси. Пример построения такого графика дан на рис. 11.10.

Рис. 11.10. Построение графика точек с ординатами, заданными элементами вектора

Из этого примера нетрудно заметить, что данная задача решается составлением списка парных значений координат исходных точек — к значениям ординат точек, взятых из вектора, добавляются значения абсцисс. Они задаются чисто условно, поскольку никакой информации об абсциссах точек в исходном векторе нет, так что фактически строится график зависимости ординат точек от их порядкового номера n.

 

45.gif

Изображение: 

13. Графики функций, заданных процедурами

 

Графики функций, заданных процедурами

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

Рис. 11.11. Построение графика функций, заданных процедурами

Здесь, пожалуй, полезно обратить внимание на то, что в функции plot указывается имя процедуры без списка ее параметров.

 

46.gif

Изображение: 

14. Графики функций, заданных функциональными операторами

 

Графики функций, заданных функциональными операторами

Еще одна «экзотическая» возможность функции plot — построение графиков функций, заданных функциональными операторами. Она иллюстрируется рис. 11.12.

Имена функций (без указания списка параметров в круглых скобках) тоже, по существу, являются функциональными операторами. Так что они также могут использоваться при построении графиков упрощенными способами.

 

15. Графики функций, заданных параметрически

 

Графики функций, заданных параметрически

В ряде случаев для задания функциональных зависимостей используются заданные параметрически уравнения, например х = 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, а также параметров р не обязательно. Но, как и ранее, они позволяют получить вид графика, удовлетворяющий всем требованиям пользователя.

 

48.gif

Изображение: 

16. Графики функций в полярной системе координат

 

Графики функций в полярной системе координат

Графики в полярной системе координат представляют собой линии, которые описывают конец радиус- вектора  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 дает примеры построения графиков функций в полярной системе координат.

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

 

18.gif

Изображение: 

17. Построение трехмерных графиков

 

Построение трехмерных графиков

Особенности применения функции 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 — имена независимых переменных; р — управляющие параметры.

 

20.gif

Изображение: 

18. Параметры функции plot3d

 

Параметры функции plot3d

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

axesfont   font         color       coords     font ,

labelfont  linestyle    numpoints   scaling    style

symbol t    hickness    title       titlefont

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

  •  ambientl light=[r,g,b] — задает интенсивность красного (r), зеленого (g) и синего (b) цветов подстветки в относительных единицах (от 0 до 1);
  •  axes=f — задает вид координатных осей (BOXED, NORMAL, FRAME и NONE, по умолчанию NONE);
  •  grid=[m,n] — задает число линий каркаса поверхности;
  •  gridstyle=x — задает стиль линий каркаса х ('rectangular' или 'triangular');
  •  1abels=[x,y,z] — задает надписи по осям (х, у и z — строки, по умолчанию пустые);
  •  1ight=[phi ,theta,r,g,b] — задает углы, под которыми расположен источник освещения поверхности и интенсивности составляющих цвета (г, g и Ь);
  •  lightmodel=x — задает схему освещения (соответственно 'none', 'lightl', 'light2', 'lights1 и 'light4');
  •  orientat1on=[theta,phi]— задает углы ориентации поверхности (по умолчанию 45°);
  •  projections — задает перспективу при обзоре поверхности (г может быть числом 0 или 1, задающим включение или выключение перспективы, а также одной из строк 'FISHEYE', 'NORMAL' или 'ORTHOGONAL' (это соответствует численным значениям г, равным 0, 0,5 или 1, причем по умолчанию задано projection=ORTHOGONAL));
  •  shading=s — задает направления, по которым меняется цвет функциональной окраски (значения s могут быть XYZ, XY, Z, ZGREYSCALE, ZHUE, NONE);
  •  tickmarks=[1 ,n,m] — задает характер маркировки по осямх, у и z (числа 1, n и m имеют значения не менее 1);
  •  view=zmin. .zmax или view=[xmin. .xmax, ymin. .ymax, zmin..zmax] — задает минимальные и максимальные координаты поверхности для ее видимых участков.

 

19. Выбор и пересчет координат трехмерных графиков

 

Выбор и пересчет координат трехмерных графиков

Для трехмерных графиков возможно задание 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.

 

20. Построение поверхностей

 

Построение поверхностей

Построение поверхностей с разными стилями

На рис. 11.15 показано два примера простейших построений графиков трехмерной поверхности. По умолчанию в Maple 7 строится поверхность с функциональной окраской и стилем style=patch (верхний рисунок). Функциональная окраска делает рисунки более информативными, но, увы, на рисунках в книге она превращается в окраску оттенками серого цвета.

Параметр style=hidden строит каркасную поверхность с функциональной окраской тонких линий каркаса и удалением невидимых линий. Чтобы график выглядел более четким, построение во втором примере задано линиями/черного цвета с помощью параметра color=black (см. нижний рисунок на рис. (11.15).

Помимо значения patch для построения трехмерных поверхностей можно задавать ряд других стилей: point — точками, contour — контурными линиями, line — линиями, hidden — линиями каркаса с удалением невидимых линий, wireframe — линиями каркаса со всеми видимыми линиями, patchnogrid — с раскраской, но без линий каркаса, patchcontour — раскраска с линиями равного уровня.

а

б

Рис. 11.15. Примеры простейшего построения трехмерных поверхностей

Цвет трехмерного графика может задаваться (как и для двумерного) параметром соlог=с, где с — цвет (оттенки цвета перечислялись ранее). Возможно еще два алгоритма задания цвета:

  •  HUE — алгоритм с заданием цвета в виде color=f(x,y);
  •  RGB — алгоритм с заданием цвета в виде color=[exprr,exprg,exprb], где выражения ехрrr, ехрrg и exprb задают относительную значимость (от 0 до 1) основных цветов (красного — ехрrr, зеленого — ехрrg и синего — exprb).

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

 

22.gif

Изображение: 

21. Построение фигур в различных системах координат

 

Построение фигур в различных системах координат

Как отмечалось, вид графика трехмерной поверхности существенно зависит от выбора координатной системы. Рисунок 11.16 показывает пример построения нелинейного конуса в цилиндрической системе координат. Для задания такой системы координат используется параметр coords=cylindrical.

Рис. 11.16. Нелинейная цилиндрическая поверхность

При построении этой фигуры также использована цветная функциональная окраска. Кроме того, этот пример иллюстрирует вывод над рисунком титульной надписи (кстати, сделанной на русском языке).

Приведем еще один пример построения трехмерной поверхности — на этот раз . в сферической системе координат (рис. 11.17). Здесь функция задана вообще элементарно просто — в виде числа 1. Но, поскольку выбрана сферическая система координат, в результате строится поверхность шара единичного радиуса.

О том, насколько необычным может быть график той или иной функции в различных системах координат, свидетельствует рис. 11.18. На нем показан график параметрически заданной функции от одной координаты t = sin(t3), построенный в сферической системе координат.

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

Рис. 11.17. Построение шарообразной поверхности в сферической системе координат

Рис. 11.18. График еще одной поверхности в сферической системе координат

 

24.gif

Изображение: 

25.gif

Изображение: 

26.gif

Изображение: 

22. 3D-графики параметрически заданных поверхностей

 

3d- графики параметрически заданных поверхностей

На рис. 11.19 показано построение поверхности при полном ее параметрическом задании. В этом случае поверхность задается тремя формулами, содержащимися в списке.

Рис. 11.19. График трехмерной поверхности при полном параметрическом ее задании

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

Следующий пример показывает построение простого тороида — цилиндра, свернутого в кольцо (рис. 11.20). Здесь также использован прием удаления части фигуры, что делает ее представление более наглядным и красочным. Кроме того, введены параметры, задающие функциональную окраску.

Тор на рис. 11.20 выглядит, как произведение искусства. Он дает полное и наглядное представление об этой фигуре.

 

49.gif

Изображение: 

23. Масштабирование трехмерных фигур и изменение углов их обзора

 

Масштабирование трехмерных фигур и изменение углов их обзора

Полезно обратить внимание на параметр масштаба 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. «Квадратный» тор, представленный под заданными углами обзора

 

50.gif

Изображение: 

51.gif

Изображение: 

52.gif

Изображение: 

53.gif

Изображение: 

24. Занимательные фигуры — трехмерные графики

 

Занимательные фигуры — трехмерные графики

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

На рис. 11.24 показан тор, сечение которого имеет вид сплюснутой шестиконечной звезды. Вырез в фигуре дает прекрасный обзор ее внутренней поверхности, а цветная функциональная окраска и линии сетки, построенные с применением алгоритма удаления невидимых линий, дают весьма реалистичный вид фигуры. Замените параметр scaling=unconstrained на scaling=constrained, и вы получите тор с неискаженным сечением.

На рис. 11.25 показан еще один тор. На этот раз он круглого сечения, но сверху и снизу имеет вид пятиконечной звезды.

ПРИМЕЧАНИЕ 

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

Рис. 11.24. Тор с сечением в виде шестиконечной звезды

Рис. 11.25. Тор круглого сечения в виде пятиконечной звезды

 

54.gif

Изображение: 

55.gif

Изображение: 

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.

 

34.gif

Изображение: 

26. Быстрое построение трехмерных графиков smartplot3d

 

Быстрое построение трехмерных графиков smartplot3d

Быстрое (не в смысле ускорения самого построения, а лишь в смысле более быстрого задания построения графиков) построение трехмерных графиков обеспечивает функция smartplot3d Для этой функции задан диапазон изменения обоих аргументов -5..5. Рисунок 11.27 поясняет применение функции smartplot3d.

а

б

Рис. 11.27. Примеры применения функции smartplot3d

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

 

36.gif

Изображение: 

27. Специальные приемы построения трехмерных графиков

 

Специальные приемы построения трехмерных графиков

Трехмерный график как графический объект

Принадлежность функций plot и plot3d к функциям (в ряде книг их именуют операторами, командами или процедурами) наглядно выявляется при создании графических объектов. Графический объект — это, в сущности, обычная переменная, которой присваивается значение графической функции. После этого такая переменная, будучи вызванной, производит построение соответствующего графика. Пример этого дан на рис. 11.28.

Рис. 11.28. Пример задания и вывода трехмерного графика — графического объекта

В данном случае строится лента Мебиуса, свойства которой (например, плавный переход с одной стороны ленты на другую) уже много веков будоражат воображение людей.

Поскольку можно говорить, что вызов переменной возвращает графический объект, то это дает повод считать plot и plot3d графическими функциями.

 

38.gif

Изображение: 

28. Задание трехмерных графиков в виде процедур

 

Задание трехмерных графиков в виде процедур

Язык программирования Maple 7 допускает применение в процедурах любых внутренних функций, в том числе графических. Пример такого применения дает рис. 11.29.

Рис. 11.29. Пример создания и применения процедуры трехмерной графики

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

 

39.gif

Изображение: 

29. Построение ряда трехмерных фигур на одном графике

 

Построение ряда трехмерных фигур на одном графике

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

Рис. 11.30. Пример построения двух трехмерных фигур, пересекающихся в пространстве

 

40.gif

Изображение: 

30. Двумерные и трехмерные графические структуры

 

Двумерные и трехмерные графические структуры

Понятие о графических структурах

Функции PLOT и PLOT3D (с именами, набранными большими буквами) позволяют создавать графические структуры, содержащие ряд графических объектов si, s2, s3 и т. д. Каждый объект может представлять собой точку или фигуру, полигон, надпись и т. д., позиционированную с высокой точностью в заданной системе координат. Координатные оси также относятся к графическим объектам. Важно отметить, что функции PLOT и PLOT3D одновременно являются данными, описывающими графики. Их можно записывать в виде файлов и (после открытия файлов) представлять в виде графиков. Особые свойства этих функций подчеркиваются их записью прописными буквами.

 

31. Графические структуры двумерной графики

 

Графические структуры двумерной графики

Графическая структура двумерной графики задается в виде:

PLOT(s1, s2, s3....,0);

где si, s2, s3 ... — графические объекты (или элементарные структуры — примитивы), о — общие для структуры параметры.

Основными объектами являются:

  •  POINTS([xl,yl],[x2,y2],...[xn,yn]) — построение точек, заданных их координатами;
  •  CURVES([[xll,yll],...[xln,yln]], [[х21,у21],...[х2п,у2п]],... [[xml,yml]....[xmn.ymn]]) -построение кривых по точкам;
  •  POLYGONS([[xll,yll]....[xln,yln]], [x2l.y2ll]....[x21n,y21n]].... [[xml,yml]....[xmn.ynm]]) -построение замкнутой области-полигона (многоугольника, так как последняя точка должна совпадать с первой);
  •  ТЕХТ([х, у], 'string', horizontal .vertical) — вывод текстовой надписи 'string4, позиционированной в точке с координатами [х.у], с горизонтальной или вертикальной ориентацией. Параметр horizontal может иметь значение ALIGNLEFT или ALIGNRIGHT, указывающие, в какую сторону (влево или вправо) идет надпись. Аналогично параметр vertical может иметь значение ALIGNABOVE или ALIGNBELOW, указывающее в каком направлении (вверх или вниз) идет надпись.

При задании графических объектов (структур) 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. Пример использования двумерных структур

 

41.gif

Изображение: 

32. Графические структуры трехмерной графики

 

Графические структуры трехмерной графики

Графические структуры трехмерной графики строятся функцией PLOT3D:

PLOT3D(s1,s2,s3.....o)

В качестве элементарных графических структур можно использовать уже описанные выше объекты POINTS, CURVES, POLYGONS и TEXT — разумеется, с добавлением в списки параметров третьей координаты. Пример такого построения дан на рис. 11.32.

Кроме того, могут использоваться некоторые специальные трехмерные структуры. Одна из них — структура GRID:

  •  GRID(a. .b,c..d.listlist) — задание поверхности над участком координатной плоскости, ограниченной отрезками[а, b] и[с, d], по данным, заданным переменной-списком listlist:=[[z11,...z1n],[z21,...z2n],...[z1m...zmn]] с размерностью n?m. Заметим, что эта переменная задает координату z для равноотстоящих точек поверхности.

На рис. 11.33 показан пример создания структуры трехмерной графики на базе GRID. Изображение .представляет собой линии, соединяющие заданные точки.

Еще один тип трехмерной графической структуры — это MESH: 

  •  MESH(listlist) — задание трехмерной поверхности по данным списочной переменной list! 1st, содержащей полные координаты всех точек поверхности (возможно задание последней при неравномерной сетке).

Рис. 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.

 

42.gif

Изображение: 

43.gif

Изображение: 

44.gif

Изображение: 

33. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Использовать основную функцию построения двумерных графиков — plot.
  •  Задавать координатные системы двумерных графиков.
  •  Управлять цветом и стилем двумерных графиков.
  •  Использовать основные типы двумерных графиков.
  •  Строить трехмерные графики.
  •  Строить различные поверхности.
  •  Выполнять быстрые (черновые) построения.
  •  Использовать специальные приемы для построения трехмерных графиков.
  •  Задавать графические структуры двумерной и трехмерной графики.

 

Урок 12. Расширенные средства графики

1. Пакет plots

 

Урок 12.

Расширенные средства графики

 

Пакет plots

Общая характеристика пакета 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 — создает анимацию трехмерных графиков функций;
  •  animatecurve — создает анимацию кривых;
  •  changecoords — смена системы координат;
  •  complexplot — построение двумерного графика на комплексной плоскости;
  •  complexplot3d — построение трехмерного графика в комплексном пространстве;
  •  conformal — конформный график комплексной функции;
  •  contourplot — построение контурного графика;
  •  contourplot3d — построение трехмерного контурного графика;
  •  coordplot — построение координатной системы двумерных графиков;
  •  coordplot3d — построение координатной системы трехмерных графиков;
  •  cylinderplot — построение графика поверхности в цилиндрических координатах;
  •  densityplot — построение двумерного графика плотности;
  •  display — построение графика для списка графических объектов;
  •  display3d — построение графика для списка трехмерных графических объектов;
  •  fieldplot — построение графика двумерного векторного поля;
  •  fieldplot3d — построение графика трехмерного векторного поля;
  •  gradplot — построение графика двумерного векторного поля градиента;
  •  gradplot3d — построение графика трехмерного векторного поля градиента;
  •  implicitplot — построение двумерного графика неявной функции;
  •  implicitp1ot3d — построение трехмерного графика неявной функции;
  •  inequal — построение графика решения системы неравенств;
  •  listcontplot — построение двумерного контурного графика для сетки значений;
  •  Iistcontplot3d — построение трехмерного контурного графика для сетки значений;
  •  listdensityplot — построение двумерного графика плотности для сетки значений;
  •  listplot — построение двумерного графика для списка значений;
  •  listplot3d — построение трехмерного графика для списка значений;
  •  loglogplot — построение логарифмического двумерного графика функции;
  •  logplot — построение полулогарифмического двумерного графика функции;
  •  matrixplot — построение трехмерного графика со значениями Z, определенными матрицей;
  •  odeplot — построение двумерного или трехмерного графика решения дифференциальных уравнений;
  •  pareto — построение диаграммы (гистограммы и графика);
  •  pointplot — построение точками двумерного графика;
  •  poi ntplot3d — построение точками трехмерного графика;
  •  polarplot — построение графика двумерной кривой в полярной системе координат;
  •  polygonplot — построение графика одного или нескольких многоугольников; 
  •  polygonplot3d — построение одного или нескольких многоугольников;
  •   polyhedraplot — построение трехмерного многогранника; 
  •  replot — перестроение графика заново;
  •  rootlocus — построение графика корней уравнения с комплексными неизвестными;
  •  semilogplot — построение графика функции с логарифмическим масштабом по оси абсцисс;
  •  setoptions — установка параметров по умолчанию для двумерных графиков;
  •  setoptions3d — установка параметров по умолчанию для трехмерных графиков;
  •  spaeecurve — построение трехмерных кривых;
  •  sparsematrixplot — построение двумерного графика отличных от нуля значений матрицы;
  •  sphereplot — построение графика трехмерной поверхности в сферических координатах;
  •  surfdata — построение трехмерного графика поверхности по численным данным;
  •  textplot — вывод текста на заданное место двумерного графика;
  •   textplot3d — вывод текста на заданное место трехмерного графика; 
  •  tubeplot — построение трехмерного графика типа «трубы».

Среди этих функций надо отметить прежде всего средства построения графиков ряда новых типов (например, в виде линий равного уровня, векторных полей и т. д.), а также средства объединения различных графиков в один. Особый интерес представляют две первые функции, обеспечивающие анимацию как двумерных (animate), так и трехмерных графиков (animate3d). Этот пакет вполне заслуживает описания в отдельной книге. Но, учитывая ограниченный объем данной книги, мы рассмотрим лишь несколько характерных примеров его применения. Заметим, что для использования приведенных функций нужен вызов пакета, например командой with(plots).

 

2. Построение графиков функций в двумерной полярной системе координат

 

Построение графиков функций в двумерной полярной системе координат

В пакете plots есть функция для построения графиков в полярной системе координат. Она имеет вид polarplot(L,o), где L — объекты для задания функции, график которой строится, и о — необязательные параметры. На рис. 12.1, сверху, представлен пример построения графика с помощью функции polarplot. В данном случае для большей выразительности опущено построение координатных осей, а график выведен линией удвоенной толщины. График очень напоминает лист клена, весьма почитаемого в Канаде и ставшего эмблемой Maple.

 

3. Построение двумерных графиков типа implidtplot

 

Построение двумерных графиков типа implicitplot

В математике часто встречается особый тип задания геометрических фигур, при котором переменные х и у связаны неявной зависимостью. Например, окружность задается выражением  х2 + у2 =R2, где R — радиус окружности. Для задания двумерного графика такого вида служит функция импликативной графики:

implicitplot(eqn,x=a..b,y=c..d,options)

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

Рис. 12.1. Графики, построенные с помощью функций polarptot и impticitplot

 

1.gif

Изображение: 

4. Построение графиков линиями равного уровня

 

Построение графиков линиями равного уровня

Графики, построенные с помощью линий равного уровня (их также называют контурными графиками), часто используются в картографии. Эти графики получаются, если мысленно провести через трехмерную поверхность ряд равноотстоящих плоскостей, параллельных плоскости, образованной осями 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. 

Следует отметить, что хотя графики в виде линий равного уровня выглядят не так эстетично и естественно, как обычные графики трехмерных поверхностей (ибо требуют осмысления результатов), у них есть один существенный плюс - экстремумы функций на таких графиках выявляются порой более четко, чем на обычных графиках. Например, небольшая возвышенность или впадина за большой «горой» на обычном графике может оказаться невидимой, поскольку заслоняется «горой». На графике линий равного уровня этого эффекта нет. Однако выразительность таких графиков сильно зависит от числа контурных линий.

 

2.gif

Изображение: 

26.gif

Изображение: 

5. График плотности

 

График плотности

Иногда поверхности отображаются на плоскости как графики плотности окраски — чем выше высота поверхности, тем плотнее (темнее) окраска. Такой вид графиков создается функцией densityplot. Она может записываться в двух форматах:

 densityplot(exprl.x=a..b,y=c..d) 

 densityplot(f,a..b,c..d)

где назначение параметров соответствует указанному выше для функции contourplot. На рис. 12.4 (верхняя часть) дан пример построения графика такого типа. Нетрудно заметить, что в плоскости XY график разбит на квадраты, плотность окраски которых различна. В нашем случае плотность окраски задается оттенками серого цвета.

Рис. 12.4. Графики плотности и поля векторов

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

 

6. Двумерный график векторного поля

 

Двумерный график векторного поля

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

Для построения таких графиков в двумерной системе координат используется функция fieldplot:

 fieldplot(f, r1, r2)

 fieldplot(f, r1, r2. ...)

где f —  вектор или множество векторов, задающих построение; r1 и r2 — пределы.

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

Несколько позже мы рассмотрим построение на одном рисунке графиков плотности и векторного поля, а также создание более наглядных толстых стрелок.

 

7. Трехмерный график типа implidtplot3d

 

Трехмерный график типа 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 они несколько развернуты в пространстве с помощью мыши.

 

8. Графики в разных системах координат

 

Графики в разных системах координат

В пакете plots имеется множество функций для построения графиков в различных системах координат. Объем книги не позволяет воспроизвести примеры всех видов таких графиков, ибо их многие сотни. Да это и не надо — во встроенных в справочную систему примерах можно найти все нужные сведения. Так что ограничимся лишь парой примеров применения функции tubeplot(C, options), позволяющей строить весьма наглядные фигуры в пространстве, напоминающие трубы или иные объекты, образованные фигурами вращения.

Рис. 12.5. Примеры применения функции implidtplot3d

На рис. 12.6 показана одна из таких фигур. Она поразительно напоминает раковину улитки. Функциональная окраска достигнута доработкой графика с помощью панели форматирования.

Эта функция может использоваться и для построения ряда трубчатых объектов в пространстве. При этом автоматически задается алгоритм удаления невидимых линий даже для достаточно сложных фигур. Это наглядно иллюстрирует пример на рис. 12.7, показывающий фигуру «цепи». Не правда ли, реалистичность этой фигуры поражает воображение?

 Можно долго размышлять о том, как те или иные математические закономерности описывают предметы реального мира, положенные в основу тех или иных геометрических объектов, или, возможно, о гениальности людей, сумевших найти такие закономерности для многих из таких объектов. В наше время Maple 7 открывает огромные возможности для таких людей.

 

6.gif

Изображение: 

9. Графики типа трехмерного поля из векторов

 

Графики типа трехмерного поля из векторов

Наглядность ряда графиков можно существенно увеличить, строя их в трехмерном представлении. Например, для такого построения графиков полей из векторов можно использовать графическую функцию fieldplot3d. В отличие от функции fieldplot она строит стрелки как бы в трехмерном пространстве (рис. 12.8).

Рис. 12.6. Построение графика- «улитки»

Рис. 12.7. Фигура «цепи», построенная с применением функции tubeplot

Рис. 12.8. Построение поля в трехмерном пространстве с помощью векторов

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

 

9.gif

Изображение: 

27.gif

Изображение: 

28.gif

Изображение: 

10. Контурные трехмерные графики

 

Контурные трехмерные графики

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

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

Рис. 12.9. График поверхности с контурными линиями

 

10.gif

Изображение: 

11. Техника визуализации сложных пространственных фигур

 

Техника визуализации сложных пространственных фигур

Приведенные выше достаточно простые примеры дают представление о высоком качестве визуализации геометрических фигур с помощью пакета 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. Пример совместного применения графиков плотности и векторного поля

Этот пример иллюстрирует использование «жирных*- стрелок .для обозначения векторного поля. Наглядность графика повышается благодаря наложению стрелок на график плотности, который лучше, чем собственно стрелки, дает представление о плавности изменения высоты поверхности, заданной функцией.

 

25.gif

Изображение: 

34.gif

Изображение: 

35.gif

Изображение: 

36.gif

Изображение: 

37.gif

Изображение: 

12. Техника анимирования графиков

 

Техника анимирования графиков

Анимация двумерных графиков

Визуализация графических построений и результатов моделирования различных объектов и явлений существенно повышается при использовании средств «оживления» "(анимации) изображений. Пакет plots имеет две простые функции для создания анимированных графиков.

Первая из этих функций служит для создания анимации графиков, представляющих функцию одной переменной F(x):

animatecurve(F, r, ...)

Эта функция просто позволяет наблюдать медленное построение графика. Формат ее применения подобен используемому в функции plot. При вызове данной функции вначале строится пустой шаблон графика. Если активизировать шаблон мышью, то в строке главного меню появляется меню Animation. Меню Animation содержит команды управления анимацией. Такое же подменю появляется и в контекстном (рис. 12.15). Указанное подменю содержит следующие команды анимации: 

  • Play — запуск построения графика;
  •  Next — выполнение следующего шага анимации;
  •  Backward/Forward — переключение направления анимации (назад/вперед);
  •  Faster — ускорение анимации;
  •  Slower — замедление анимации;
  • Continiuus/Singlecycle — цикличность анимации.

При исполнении команды Play происходит построение кривой (или нескольких кривых). В зависимости от выбора команд Faster или Slower построение идет быстро или медленно. Команда Next выполняет один шаг анимации -построение очередного фрагмента кривой. Переключатель Backward/Forward позволяет задать направление построения кривой - от начала к концу или от конца к началу. Построение может быть непрерывным или циклическим в зависимости от состояния позиции Continiuus/Singlecycle в подменю управления анимацией. При циклической анимации число циклов задается параметром frames=n.

Рис. 12.15. Пример анимационного построения графика функцией animatecurve

 

11.gif

Изображение: 

13. Проигрыватель анимированной графики

 

Проигрыватель анимированной графики

При включенном выводе панели форматирования во время анимации она приобретает вид панели проигрывателя клипов (рис. 12.15). Эта панель имеет кнопки управления с обозначениями, принятыми у современных магнитофонов:

1. Поле координат перемещающейся точки графика.

2. Остановка анимации.

3. Пуск анимации.

4. Переход к следующему кадру (фрейму).

5. Установка направления анимации от конца в начало.

6. Установка направления анимации из начала в конец (по умолчанию).

7. Уменьшение времени шага анимации.

8. Увеличение времени шага анимации.

9. Установка одиночного цикла анимации.

10. Установка серии циклов анимации.

Итак, кнопки проигрывателя, по существу, повторяют команды подменю управления анимацией.

Нажав кнопку пуска (с треугольником, острием обращенным вправо), можно наблюдать изменение вида кривой для функции sin(x)/(x). Другие кнопки управляют характером анимации. Проигрыватель дает удобные средства для демонстрации анимации, например, во время занятий со школьниками или студентами.

 

14. Построение двумерных анимированных графиков

 

Построение двумерных анимированных графиков

Более обширные возможности анимации двумерных графиков обеспечивает функция 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. Анимационная демонстрация приближения синусоиды рядом с меняющимся числом членов

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

 

12.gif

Изображение: 

39.gif

Изображение: 

15. Построение трехмерных анимационных графиков

 

Построение трехмерных анимационных графиков

Аналогичным образом может осуществляться и анимирование трехмерных фигур. Для этого используется функция animate3d:

animate3d(F,x, y,t,o)

Здесь F — описание функции (или функций); х, у и t — диапазоны изменения переменных х, у и t Для задания числа кадров N надо использовать необязательный параметр о в виде frame=N.

На рис. 12.18 показано построение анимированного графика. После задания функции, график которой строится, необходимо выделить график и запустить проигрыватель, как это описывалось для анимации двумерных графиков.

Рис. 12.18. Подготовка трехмерного анимационного графика

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

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

 

13.gif

Изображение: 

16. Анимация с помощью параметра insequence

 

Анимация с помощью параметра insequence

Еще один путь получения анимационных рисунков — создание ряда графических объектов pi, р2, рЗ и т. д. и их последовательный вывод с помощью функций display или display3d:

display (pl,p2.p3.....insequence=true) 

display3d ( pi. p2. p3..., i nsequence=t rue)

Здесь основным моментом является применение параметра insequence=true. Именно он обеспечивает вывод одного за другим серии графических объектов pi, р2, рЗ и т. д. При этом объекты появляются по одному и каждый предшествующий объект стирается перед появлением нового объекта.

 

17. Графика пакета plottools

 

Графика пакета plottools

Примитивы пакета 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.

 

18. Примеры применения двумерных примитивов пакета 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. Построение диаграммы Смита

 

40.gif

Изображение: 

41.gif

Изображение: 

42.gif

Изображение: 

19. Примеры применения трехмерных примитивов пакета plottools

 

Примеры применения трехмерных примитивов пакета 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 и в книгах по этой системе.

 

43.gif

Изображение: 

44.gif

Изображение: 

45.gif

Изображение: 

20. Построение графиков из множества фигур

 

Построение графиков из множества фигур

В ряде случаев бывает необходимо строить графики, представляющие собой множество однотипных фигур. Для построения таких графиков полезно использовать функцию повторения seq(f ,i=a. .b). На рис. 12.28 показано построение фигуры, образованной вращением прямоугольника вокруг одной из вершин.

Рис. 12.25. Построение трехмерной фигуры — «шкурки ежа»

Рис. 12.26. Построение фигуры «улитка»

Рис. 12.27. Построение фигуры «бутылка Клейна»

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

 

46.gif

Изображение: 

47.gif

Изображение: 

48.gif

Изображение: 

21. Анимация двумерной графики в пакете plottools.

 

Анимация двумерной графики в пакете plottools

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

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

 

22. Анимация трехмерной графики в пакете plottools

 

Анимация трехмерной графики в пакете plottools

Хорошим примером ЗD-анимации является документ, показанный на рис. 12.30. Представленная на нем процедура springPlot имитирует поведение упругой системы, первоначально сжатой, а затем выстреливающей шар, установленный на ее верхней пластине. Упругая система, состоит из неподвижного основания, на котором расположена упругая масса (например, из пористой резины), и верхней пластины.

Рис. 12.28. Построение фигуры, образованной вращением прямоугольника

Рис.12.29. Пример анимации двумерной графики

Рис. 12.30. Имитация отстрела шара сжатой упругой системой

Управление анимацией, реализованной средствами пакета plottools, подобно уже описанному ранее. Последний пример также прекрасно иллюстрирует возможности применения Maple 7 при математическом моделировании различных явлений, устройств и систем.


49.gif

Изображение: 

50.gif

Изображение: 

51.gif

Изображение: 

23. Расширенные средства графической визуализации

 

Расширенные средства графической визуализации

Построение ряда графиков, расположенных по горизонтали

Обычно если в строке ввода задается построение нескольких графиков, то в строке вывода все они располагаются по вертикали. Это не всегда удобно, например, при снятии копий экрана с рядом графиков, поскольку экран монитора вытянут по горизонтали, а не по вертикали. Однако при применении функций plots и display можно разместить ряд двумерных графиков в строке вывода по горизонтали. Это демонстрирует пример, показанный на рис. 12.31. Этот пример достаточно прост и нагляден, так что читатель может пользоваться данной возможностью всегда, когда ему это нужно.

Рис. 12.31. Пример расположения трех графиков в строке вывода по горизонтали

 

52.gif

Изображение: 

24. Визуализация решения систем линейных уравнений

 

Визуализация решения систем линейных уравнений

Мы уже не раз использовали графические возможности 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 строит плоскость решения в пространстве.

 

53.gif

Изображение: 

25. Визуализация решения систем неравенств

 

Визуализация решения систем неравенств

Пожалуй, еще более полезным и наглядным средством является визуализация решения системы уравнений в виде неравенств. В пакете 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 используется для цвета внешних областей. График дает весьма наглядную интерпретацию действия ряда неравенств (или равенств).

 

54.gif

Изображение: 

26. Конформные отображения на комплексной плоскости

 

Конформные отображения на комплексной плоскости

Объем данной книги не позволяет объяснить столь тонкое понятие, как конформные отображения на комплексной плоскости. Ограничимся лишь указанием на то, что в пакете plots имеется функция для таких отображений:

conformal(F,rl,r2,о);

где F — комплексная процедура или выражение; rl, г2 — области, задаваемые в виде а. .Ь или name=a. .b; о — управляющие параметры. Таким образом, для построения нужного графика достаточно задать нужное выражение и области изменения г! и г2. Пример построения конформных изображений для трех выражений дан на рис. 12.34.

Рис. 12.34. Конформное отображение на комплексной плоскости графиков трех зависимостей

Средства конформного отображения в Maple 7, к сожалению, остаются рудиментарными и вряд ли достаточными для специалистов в этой области математики.

 

55.gif

Изображение: 

27. Графическое представление содержимого матрицы

 

Графическое представление содержимого матрицы

Многие вычисления имеют результаты, представляемые в форме матриц. Иногда такие результаты можно наглядно представить графически, например в виде гистограммы. Она представляет собой множество столбцов квадратного сечения, расположенных на плоскости, образованной осями строк (row), и столбцов (column) матрицы. При этом высота столбцов определяется содержимым ячеек матрицы.

Такое построение обеспечивает графическая функция matrixplot из пакета plots. На рис. 12.35 показано совместное применение этой функции с двумя функциями пакета linalg, формирующими две довольно экзотические матрицы А и В.

Рис. 12. 35. Графическое представление матрицы

На рис. 12.35 показана графическая визуализация матрицы, полученной как разность матриц А и В. Для усиления эффекта восприятия применяется функциональная закраска разными цветами. Для задания цвета введена процедура F.

 

58.gif

Изображение: 

28. Визуализация ньютоновских итераций в комплексной области

 

Визуализация ньютоновских итераций в комплексной области

Теперь займемся довольно рискованным экспериментом — наблюдением ньютоновских итераций с их представлением на комплексной плоскости. На рис. 12.36 задана функция /(г) комплексного аргумента. Проследить за поведением этой функции на комплексной плоскости в ходе ньютоновских итераций позволяет графическая функция complexplot3d из пакета plots.

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

Рис. 12.36. Наблюдение за процессом ньютоновских итераций в трехмерном пространстве

ВНИМАНИЕ

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

 

59.gif

Изображение: 

29. Визуализация корней случайных полиномов

 

Визуализация корней случайных полиномов.

Наряду с традиционной для математических и статистических программ возможностью генерации случайных чисел 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, показывает, что порою вычисления могут давать довольно неожиданные результаты. Кстати говоря, аналитически можно вычислять корни полинома с максимальной степенью не более четырех.

 

14.gif

Изображение: 

15.gif

Изображение: 

30. Визуализация поверхностей со многими экстремумами

 

Визуализация поверхностей со многими экстремумами

Maple 7 дает прекрасные возможности для визуализации поверхностей, имеющих множество пиков и впадин, другими словами, экстремумов. Рисунок 12.38 показывает задание «вулканической» поверхности с глубокой впадиной, окруженной пятью пиками. Здесь полезно обратить внимание на способ задания такой поверхности f(a, b, с) как функции трех переменных a, b и с. Он обеспечивает индивидуальное задание координат каждого экстремума и его высоты (отрицательной для впадины).

Рис. 12.38. Построение графика поверхности с множеством экстремумов

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

А на рис. 12.39 представлен еще один способ задания поверхности — с помощью функции двух угловых переменных f(theta, phi).

При построении этого рисунка также используются функциональная окраска и построение контурных линий. 

 

61.gif

Изображение: 

31. Визуализация построения касательной и перпендикуляра

 

Визуализация построения касательной и перпендикуляра

В ряде геометрических построений нужно отроить касательную и перпендикуляр к кривой, отображающей произвольную функцию f(x) в заданной точке х =а. Рисунок 12.40 поясняет, как это можно сделать. Линии касательной Т(х) и перпендикуляра N(x) определены аналитически через производную в заданной точке.

Во избежание геометрических искажений положения касательной и перпендикуляра при построении графика функцией plot надо использовать параметр scaling=constrained.

Рис. 12.39. Построение графика поверхности, заданной функцией двух угловых переменных

Рис. 12.40. Построение касательной и перпендикуляра к заданной точке графика функции f(x)

 

60.gif

Изображение: 

62.gif

Изображение: 

32. Визуализация вычисления определенных интегралов

 

Визуализация вычисления определенных интегралов

Часто возникает необходимость в геометрическом представлении определенных интегралов в виде алгебраической суммы площадей, ограниченных кривой подынтегральной функции f(x), осью абсцисс х и вертикалями х =а их =b (пределами интегрирования). При этом желательно обеспечение закраски верхней и нижней (отрицательной и положительной) площадей разными цветами, например зеленым для верхней площади и красным для нижней. Как известно, численное значение определенного интеграла есть разность этих площадей.

К сожалению, в Maple 7 нет встроенной функции, явно дающей такое построение. Однако ее несложно создать. На рис. 12.41 представлена процедура a_plot, решающая эту задачу. Параметрами процедуры являются интегрируемая функция/(д:) (заданная как функция пользователя), пределы интегрирования а и b и пределы слева am и справа bm, задающие область построения графика f(x).

Рисунок 12.41 дает прекрасное представление о сущности интегрирования для определенного интеграла. Приведенную на этом рисунке процедуру можно использовать для подготовки Эффектных уроков по интегрированию разных функций.

Рис. 12.41. Графическое представление определенного интеграла

 

63.gif

Изображение: 

33. Визуализация теоремы Пифагора

 

Визуализация теоремы Пифагора

Еще один пример наглядного геометрического представления математических понятий — визуализация известной теоремы Пифагора (рис. 12.42).

В этом примере используется функция построения многоугольников. Наглядность построений усиливается выбором разной цветовой окраски треугольников и квадрата.

Рис. 12.42. Графическая иллюстрация к теореме Пифагора

 

64.gif

Изображение: 

34. Визуализация дифференциальных параметров кривых

 

Визуализация дифференциальных параметров кривых

Дифференциальные параметры функции 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

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

 

16.gif

Изображение: 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

35. Иллюстрация итерационного решения уравнения f(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).

 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

36. Построение сложных фигур в полярной системе координат

 

Построение сложных фигур в полярной системе координат

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

Рисунок 12.46 демонстрирует одну из таких фигур. Это семейство из 10 кардиоид разного размера. Параметр scallIng=constrained обеспечивает правильное отображение фигур — каждая кардиоида вписывается в огибающую ее невидимую окружность. Размер кардиоид задается значением параметра а.

Рис.12.46. Семейство кардиоид на одном графике

Еще одно семейство кардиоид, на сей раз шестилепестковых, представлено на рис. 12.47. Здесь также изменяемым параметром каждой фигуры является ее размер, заданный параметром а.

Фигуре, представленной на рис. 12.48, трудно дать определенное название. Назовем ее волнообразной спиралью.

По образу и подобию приведенных фигур читатель может опробовать свои силы в создании новых красочных фигур в полярной системе координат. Некоторые из них поразительно напоминают снежинки, картинки в калейдоскопе и изображения морских звезд. Если убрать параметр color=black, .введенный ради черно-белой печати картинок в книге, то можно усилить красочность фигур за счет их разноцветной окраски.

Рис. 12.47. Семейство шестилепестковых кардиоид

Рис. 12.48. Фигура— волнообразная спираль

 

23.gif

Изображение: 

24.gif

Изображение: 

29.gif

Изображение: 

37. Построение сложных фигур импликативной графики

 

Построение сложных фигур импликативной графики

Импликативные функции (см. урок 7) нередко имеют графики весьма любопытного вида. Ограничимся парой примеров построения таких графиков, представленных на рис. 12.49. Эти фигуры напоминают контурные графики функции двух переменных.

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

Рис. 12.49. Построение сложных фигур, заданных импликативными функциями

 

30.gif

Изображение: 

38. Расширенная техника анимации

 

Расширенная техника анимации

Анимирование разложения импульса в ряд Фурье

Анимирование изображений является одним из самых мощных средств визуализации результатов моделирования тех или иных зависимостей или явлений.

Порою изменение во времени одного из параметров зависимости дает наглядное представление о его математической или физической сути.

Здесь мы расширим представление об анимации и рассмотрим не вполне обычный пример — наблюдение в динамике за гармоническим синтезом некоторой произвольной функции 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, и т. д. Однако эта закономерность проявляется только при установившемся (стационарном) спектре.

 

65.gif

Изображение: 

66.gif

Изображение: 

67.gif

Изображение: 

39. Наблюдение кадров анимации поверхности

 

Наблюдение надрав анимации поверхности

Наблюдение за развитием поверхности производит на многих (особенно на студентов) большое впечатление. Оно позволяет понять детали создания сложных трехмерных графиков и наглядно представить их математическую сущность. Рассмотрим анимацию поверхности на примере рис. 12.18.

Как и для случая анимации двумерного графика, большой интерес представляет построение всех фаз анимации на одном рисунке. Делается это точно так Же, как в двумерном случае. Это иллюстрирует рис. 12.53. На нем представлены 8 фаз анимации трехмерной поверхности cos(t*x*y/3), представленной функцией трех переменных t, х и у. При этом изменение первой переменной создает фазы анимации поверхности.

Рис. 12.53. Фазы анимации трехмерной поверхности

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

 

32.gif

Изображение: 

40. Новая функция для построения стрелок arrow

 

Новая функция для построения стрелок 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


33.gif

Изображение: 

41. Построение сложных комбинированных графиков

 

Построение сложных комбинированных графиков

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

Рис. 12.55. Пример построения сложного объекта, состоящего из 8 графических и текстовых объектов

Представленный на рис. 12.55 объект задает построение восьми графических объектов от р! до р8. Среди них цилиндр, две пересекающие его плоскости и иные (в том числе текстовые) объекты. Обратите внимание на способ вывода этих объектов функцией display3d. Этот пример показывает, что с помощью графических программных средств Maple 7 можно строить достаточно замысловатые графики, которые могут использоваться для визуализации тех или иных геометрических и иных объектов.

 

68.gif

Изображение: 

42. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Пользоваться графикой пакета plots.
  •  Пользоваться техникой анимации графиков пакета plots.
  •  Применять графику пакета plottools.
  •  Использовать расширенные средства графической визуализации.
  •  Использовать расширенную технику создания графической анимации.
  •  Использовать новую функцию Maple 7 для построения стрелок.
  •  Строить сложные комбинированные графики.

 

Урок 13. Решение дифференциальных уравнений

1. Основные средства решения дифференциальных уравнений

 

Урок 13.

Решение дифференциальных уравнений

 

Основные средства решения дифференциальных уравнений

Основная функция dsolve

Важное место в математических расчетах занимает решение дифференциальных уравнений. К нему, в частности, обычно относится анализ поведения различных систем во времени (анализ динамики), а также вычисление различных полей (тяготения, электрических зарядов и т. д.). Трудно переоценить роль дифференциальных уравнений в моделировании физических и технических объектов и систем, 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 задает класс решаемых уравнений. Отметим основные значения этого параметра:

  •  exact — аналитическое решение (принято по умолчанию);
  •  explicit — решение в явном виде;
  •  system — решение системы дифференциальных уравнений;
  •  ICs — решение системы дифференциальных уравнений с заданными начальными условиями;
  •  formal series — решение в форме степенного многочлена;
  •  integral transform — решение на основе интегральных преобразований Лапласа, Фурье и др.;
  •  series — решение в виде ряда с порядком, указываемым значением переменной Order;
  •  numeric — решение в численном виде.

Для решения задачи Коши в параметры 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 должно иметь структуру множества и содержать помимо самой системы уравнений их начальные условия.

 

2. Решение ОДУ первого порядка

 

Решение ОДУ первого порядка

Начнем рассмотрение практических примеров с решения одиночных обыкновенных дифференциальных уравнений (ОДУ) первого порядка:

Следующие примеры иллюстрируют возможность решения одного и того же дифференциального уравнения ode_L разными методами:

Объем данной книги не позволяет остановиться на всех тонкостях аналитического решения дифференциальных уравнений. Множество примеров такого решения дано в справочной базе данных Maple,. 7- К ней нужно обратиться в случае, если решение того или иного дифференциального уравнения выходит за рамки учебного курса.

 

1.gif

Изображение: 

2.gif

Изображение: 

3. Решение дифференциальных уравнений второго порядка

 

Решение дифференциальных уравнений второго порядка

Здесь видно, что для задания производной используется ранее рассмотренная функция diff. С помощью символа $ можно задать производную более высокого порядка. Ниже представлено решение двух дифференциальных уравнений второго порядка:

 

Обратите внимание на решение второго из этих уравнений. Здесь использован прием визуализации исходного дифференциального уравнения, и оно задается значением переменной de. Кроме того, и это особенно важно, решение осуществляется при заданных начальных условиях. Именно поэтому в решении отсутствуют произвольные постоянные вида _СN.

 

3.gif

Изображение: 

4.gif

Изображение: 

4. Решение систем дифференциальных уравнений

 

Решение систем дифференциальных уравнений

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

Рис. 13.1. Решение системы из двух дифференциальных уравнений различными методами

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

 

5.gif

Изображение: 

5. Численное решение дифференциальных уравнений

 

Численное решение дифференциальных уравнений

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

В таких случаях для решения дифференциальных уравнений в численном виде используется функция dsolve с параметром numeric или type=numeric. При этом решение возвращается в виде специальной процедуры, по умолчанию реализующей широко известный метод решения дифференциальных уравнений Рунге—Кутта—Фелберга порядков 4 и 5 (в зависимости от условий адаптации решения к скорости его изменения). Эта процедура называется rkf45 и символически выводится (без тела) при попытке решения заданной системы дифференциальных уравнений. Последнее достаточно наглядно иллюстрирует рис. 13.2.

Рис. 13.2. Решение системы дифференциальных уравнений численным методом rkf45 с выводом графика решения

Указанная процедура возвращает особый тип данных, позволяющих найти решение в любой точке или построить график решения (или решений). Для графического отображения Maple 7 предлагает ряд возможностей, и одна из них представлена на рис. 13.2 — см. последнюю строку ввода. При этом используется функция plot[odeplot] из пакета odeplot, предназначенного для визуализации решений дифференциальных уравнений.

В список параметров функции dsolve можно явным образом включить указание на метод решения, например опция mathod=dverk78 задает решение непрерывным методом Рунге—Кутта порядка 7 или 8. Вообще говоря, численное решение дифференциальных уравнений можно производить одним из следующих методов:

  •  classical — одна из восьми версий классического метода, используемого по умолчанию;
  •  rkf45 — метод Рунге—Кутта 4 или 5 порядка, модифицированный Фелбергом;
  •  dverk78 — непрерывный метод Рунге—Кутта порядка 7 или 8;
  •  gear — одна из двух версий одношагового экстраполяционного метода Гира;
  •  mgear — одна из трех версий многошагового эктраполяционного метода Гира;
  •  lsode — одна из восьми версий Ливенморского решателя жестких дифференциальных уравнений;
  •  taylorseries — метод разложения в ряд Тейлора.

Обилие используемых методов расширяет возможности решения дифференциальных уравнений в численном виде. Большинство пользователей 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 (см. Решение физических задач и моделирование цепи на туннельном диоде).

 

24.gif

Изображение: 

26.gif

Изображение: 

6. Дифференциальные уравнения с кусочными функциями

 

Дифференциальные уравнения с кусочными функциями

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

Ниже представлено задание дифференциального уравнения первого порядка, содержащего кусочную функцию:

Используя функцию dsolve, выполним решение этого дифференциального уравнения:

Нетрудно заметить, что результат получен также в форме кусочной функции, полностью определяющей решение на трех интервалах изменениях. Приведем пример решения дифференциального уравнения второго порядка с кусочной функцией:

В конце этого раздела приведем пример решения нелинейного дифференциального уравнения Риккати с кусочной функцией:

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

ПРИМЕЧАНИЕ 

Как видно из приведенных достаточно простых и наглядных примеров, результаты решения дифференциальных уравнений с кусочными функциями могут быть довольно громоздкими. Это, однако, не мешает эффективному применению функций данного класса.

 

8.gif

Изображение: 

9.gif

Изображение: 

10.gif

Изображение: 

11.gif

Изображение: 

12.gif

Изображение: 

7. Структура неявного представления дифференциальных уравнений — DESol

 

Структура неявного представления дифференциальных уравнений — DESol

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

DESol(expr.vars)

где exprs — выражение для исходной системы дифференциальных уравнений, vars — заданный в виде опции список переменных (или одна переменная). Структура DESol образует некоторый объект, дающий представление о дифференциальных уравнениях, чем-то напоминающее RootOf. С этим объектом можно обращаться, как с функцией, то есть его можно интегрировать, дифференцировать, получать разложение в ряд и вычислять численными методами. На рис. 13.4 показаны примеры применения структуры DESol. Обратите внимание на последний пример — в нем структура- DESol использована для получения решения дифференциального уравнения в виде степенного ряда.

Рис. 13.4. Примеры применения структуры DESol

 

13.gif

Изображение: 

8. Инструментальный пакет решения дифференциальных уравнений DEtools.

 

Инструментальный пакет решения дифференциальных уравнений DEtools

Средства пакета 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:

  •  DEnormal — возвращает нормализованную форму дифференциальных уравнений;
  •  DEplot — строит графики решения дифференциальных уравнений; 
  •  DEplot3d — строит трехмерные графики для решения систем дифференциальных уравнений;
  •   Dchangevar — изменение переменных в дифференциальных уравнениях;
  •  PDEchangecoords — изменение координатных систем для дифференциальных уравнений в частных производных; 
  •  PDEpTot — построение графиков решения дйффереациальых уравнений в частных производных;
  •  autonomous — тестирует дифференциальные уравнения на автономность;
  •  convertAlg — возвращает список коэффициентов для дифференциальных уравнений;
  •  convertsys — преобразует систему дифференциальных уравнений в систему одиночных уравнений;
  •  dfieldplot — строит график решения дифференциальных уравнений в виде векторного поля;
  •  indicialeq — преобразует дифференциальные уравнения в полиномиальные;
  •  phaseportrait — строит график решения дифференциальных уравнений в форме фазового портрета;
  •  reduceOrder — понижает порядок дифференциальных уравнений;
  •  regularsp — вычисляет регулярные особые точки для дифференциальных уравнений второго порядка;
  •  translate — преобразует дифференциальные уравнения в список операторов;
  •  untranslate — преобразует список операторов в дифференциальные уравнения;
  •  varparam — находит общее решение дифференциальных уравнений методом вариации параметров.

Применение этих функций гарантирует совместимость документов реализаций Maple R5, 6 и 7.

 

9. Основные функции пакета DEtools

 

Основные функции пакета 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 с многочисленными примерами его применения.

 

14.gif

Изображение: 

16.gif

Изображение: 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

20.gif

Изображение: 

10. Графическое представление решений дифференциальных уравнений

 

Графическое представление решений дифференциальных уравнений

Применение функции 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. Представление решения системы дифференциальных уравнений в виде фазового портрета

 

28.gif

Изображение: 

29.gif

Изображение: 

30.gif

Изображение: 

11. Функция DEplotna пакета DEtools

 

Функция 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 могут использоваться следующие параметры:

  •  arrows = type — тип стрелки векторного поля ('SMALL', 'MEDIUM', 'LARGE', 'LINE'
  • или 'NONE');
  •  colour, color = arrowcolour — цвет стрелок (задается 7 способами);
  •  dirgrid = [integer,integer] — число линий сетки (по умолчанию [20, 20]);
  •  iterations = integer — количество итераций, представленное целым числом;
  •  linесоlor, linecolor = lineinfo — цвет линии (задается 5 способами);
  •  method='rk4' — задает метод решения ('euler', 'backeuler', 'impeuler' или 'rk4');
  •  obsrange = TRUE.FALSE — задает (при TRUE) прерывание вычислений, если кривая решения выходит из области обзора;
  •  scene = [name.name] — задает имена зависимых переменных, для которых строится график;
  •  stepsize = h — шаг решения, по умолчанию равный abs((b-a))/20 и представленный вещественным значением.

На рис. 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. Пример построения двух фазовых портретов на фоне векторного поля

 

31.gif

Изображение: 

32.gif

Изображение: 

12. Функция DEplot3d из пакета DEtools

 

Функция 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 позволяют решать системы, состоящие более чем из двух дифференциальных уравнений. Однако в этом случае число решений, представляемых графически, выходит за пределы возможного для трехмерной графики. При этом от пользователя зависит, какие из зависимостей опускаются при построении, а какие строятся.

 

33.gif

Изображение: 

13. Функция PDEplot пакета DEtools.

 

Функция 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, здесь могут использоваться следующие опции:

  •  basechar = TRUE, FALSE. ONLY — устанавливает показ базовых характеристик кривых; 
  •  basecolor, basecolor = b_color — устанавливает цвет базовых характеристик; 
  •  initcolor, initcolor =i_color — инициализация цветов;
  •  numchar = integer — задает число отрезков кривых, которое не должно быть меньше 4 (по умолчанию 20); 
  •  numsteps = [integerl.integerZ] — задает число шагов интегрирования (по умолчанию [10, 10]).

 Рисунок 13.12 демонстрирует применение функции PDEplot. Этот пример показывает, насколько необычным может быть решение даже простой системы дифференциальных уравнений в частных производных.

Рис. 13.12. Пример применения функции PDEplot

В данном случае решение представлено трехмерной фигурой весьма нерегулярного вида.

Другой пример использования функции PDEplot показан на рис. 13.13. Он иллюстрирует комбинированное построение графиков решения разного типа с применением функциональной закраски, реализуемой по заданной формуле с помощью опции initcolor. 

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

 

34.gif

Изображение: 

35.gif

Изображение: 

14. Графическая функция dfieldplot

 

Графическая функция 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 (отсутствует лишь задание начальных условий).

 

36.gif

Изображение: 

15. Графическая функция phaseportrait

 

Графическая функция 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. Построение асимптотического решения на фоне графика векторного поля

 

37.gif

Изображение: 

38.gif

Изображение: 

39.gif

Изображение: 

16. Углубленный анализ дифференциальных уравнений

 

Углубленный анализ дифференциальных уравнений

Задачи углубленного анализа ДУ

Maple 7 существенно доработана по части решения дифференциальных уравнений (ДУ) и систем с ДУ. Эта доработка прежде всего направлена на получение верных решений как можно большего числа ДУ разных классов и систем с ДУ.

В частности, расширен круг нелинейных дифференциальных уравнений, для которых Maple7способна дать аналитические решения.

Весь арсенал средств решения ДУ-и методика их применения вполне заслуживают отражения в отдельной большой книге. Мы ограничимся описанием только трех средств системы Maple 7 - проверки ДУ на автономность, углубленным анализом решения с помощью контроля уровня выхода и получением приближенного полиномиального аналитического решения. Более подробное знакомство с новыми возможностями решения дифференциальных уравнений можно получить из соответствующей статьи справки symbolics в разделе What is new.

 

17. Проверка ДУ на автономность

 

Проверка ДУ на автономность

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

Для проверки уравнений (или систем) на автономность используется функция:

autonomous(des,vars,ivar)

где des — заданное дифференциальное уравнение или (в виде списка) система дифференциальных уравнений, vars — зависимые переменные; ivar — независимая переменная. Если система автономна, то эта функция возвращает true, в противном случае false.

Примеры:

В первом случае система дифференциальных уравнений (модель. Лотки-Воль-терра) автономна, а во втором случае дифференциальное уравнение не автономно.

 

21.gif

Изображение: 

18. Контроль уровня вывода решения ДУ

 

Контроль уровня вывода решения ДУ

Для углубленного анализа аналитического решения ДУ (или системы ДУ) можно использовать специальную возможность управления уровнем вывода решения с помощью системной переменной infilevel(dsolve)=level. Значение level =all дает обычный вывод решения без Комментариев, уровень 1 зарезервирован для информации, которую может сообщить пользователь, уровень 2 или 3 дает более детальный вывод (включая сообщения об использованном алгоритме и технике решения) и, наконец, уровни 4 и 5 дают наиболее детальную информацию (если тиковая есть в дополнение к той информации, которую дает уровень 2 или 3). 

Приведем пример .аналитического решения ДУ третьего порядка с контролем уровня вывода решения: 

В данном случае повышение уровня вывода до 4 или 5 бесполезно, поскольку вся информация о решении сообщается уже при уровне 2 (или 3).

 

22.gif

Изображение: 

19. Приближенное полиномиальное решение ДУ

 

Приближенное полиномиальное решение ДУ

Во многих случаях аналитические решения даже простых ДУ оказываются весьма сложными, например содержат специальные математические функции. При этом нередко полезна подмена такого решения другим, тоже аналитическим, но приближенным решением. Наиболее распространенным приближенным решением в этом случае может быть полиномиальное решение, то есть замена реального решения полиномом той или иной степени. При этом порядок полинома задается значением системной переменной Order, а для получения такого решения функция dsolve должна иметь параметр series.

На рис. 13.17 представлено решение ДУ третьего порядка различными методами: точное аналитическое и приближенное в виде полинома с максимальным заданным порядком 10 и 60. График дает сравнение этих решений для зависимости y(t).

Дадим небольшой комментарий. Нетрудно заметить, что точное аналитическое решение весьма сложно и содержит специальные функции Бесселя и гамма- функции. При порядке полинома 8 (он несколько меньше заданного максимального) решение практически совпадает с точным до значений t < 2, а при максимальном заданном порядке 60 область совпадения расширяется до значений t < 5,5. Затем приближенное решение резко отходит от точного.

Этот пример, с одной стороны, иллюстрирует хорошо известный факт — быстрое нарастание погрешности полиномиального приближения за пределами области хорошего совпадения решений. С другой стороны, он показывает, что степень полинома более 60 (и даже выше) вовсе не так уж бесполезна, как это утверждается во многих статьях и книгах по полиномиальному приближению. Точность полиномиальных вычислений Maple 7 достаточно высока, чтобы обеспечить получение приближенных полиномиальных выражений со степенью порядка десятков и иногда даже сотен. Другое дело, что столь «длинный» полином не всегда удобен для аналитических расчетов, даже несмотря на его структурную простоту.

Рис. 13.17. Примеры решения ДУ третьего порядка

 

40.gif

Изображение: 

20. Что нового мы узнали?

 

Что нового мы узнали?

В этим уроке мы научились:

  •  Использовать основную функцию решения дифференциальных уравнений dsolve.
  •  Решать дифференциальные уравнения первого порядка. О Решать дифференциальные уравнения второго порядка.
  •  Решать системы дифференциальных уравнений, . 
  •  Выполнять численное решение дифференциальных уравнений.  
  •  Решать дифференциальные уравнения с кусочными функциями.
  •  Использовать структуру неявного представления дифференциальных уравнений DESol
  •  Применять инструментальный пакет решения дифференциальных уравнений DEtools
  •  Осуществлять графическое представление решений дифференциальных уравнений.
  •  Осуществлять углубленный анализ аналитических решений дифференциальных уравнений.

 

Урок 14. Математические пакеты

1. Назначение пакетов расширения и обращение к ним

 

Урок 14.

Математические пакеты

 

Назначение пакетов расширения и обращение к ним

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

 

2. Обзор пакетов

 

Обзор пакетов

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

>?packages

Этот список приведен ниже:

  •  DEtools — решение дифференциальных уравнений;
  •  Domains — создание областей определений в вычислениях;
  •  GF — поля Галуа;
  •  Gausslnt — работа с целыми числами Гаусса;
  •  Groebner — вычисления в базисе Гробнера;
  •  LREtools — манипуляции с линейными рекуррентными отношениями;
  •  LinearAlgebra — линейная алгебра;
  •  Matlab — интеграция с MATLAB;
  •  Ore_algebra — основные вычисления в алгебре линейных операторов;
  •  PDEtools — решение дифференциальных уравнений в частных производных;
  •  Spread — работа с таблицами;
  •  algcurves — работа с алгебраическими кривыми;
  •  codegen — генерация кодов;
  •  combinat — функции комбинаторики; 
  •  combstruct — структуры комбинаторики;
  •  context — контекстно-зависимые меню;
  •  diffalg — дифференциальная алгебра;
  •  difforms — дифференциальные формы;
  •  finance — финансовые расчеты;
  •  genfunc — рациональные функции;
  •  geom3d — трехмерная геометрия Евклида;
  •  geometry — евклидова геометрия;
  •  group — представление бесконечных групп;
  •  inttrans — интегральные преобразования;
  •  liesymm — симметрия Ли;
  •  linalg — линейная алгебра и структуры данных массивов;
  •  networks — графы;
  •  numapprox — численная аппроксимация;
  •  numtheory — теория чисел;
  •  orthopoly — ортогональные полиномы;
  •  padic — Пи-адические числа;
  •  plots — расширения графики;
  •  plottools — создание дополнительных графических объектов; >
  •  polytools — действия с полиномами;
  •  powseries — формальные степенные ряды;
  •  process — мультипроцессы (для операционной системы Unix);
  •  simplex — линейная оптимизация (симплекс-метод); '
  •  stats — статистика;
  •  student — функции в помощь студентам;
  •  sumtools — определенные и неопределенные суммы;
  •  tensor — тензоры и теория относительности.

Как следует из просмотра этого обширного списка, пакеты Maple 7 охватывают многие крупные разделы математики и существенно дополняют возможности системы, предоставляемые средствами ее ядра. Пакеты расширения пишутся на Maple-языке программирования, поэтому они могут легко модернизироваться и пополняться. Этим, в частности, объясняется тот факт, что набор пакетов расширения в Maple 7 существенно пополнен по сравнению с предшествующими реализациями системы.

 

3. Новые пакеты Maple 7

 

Новые пакеты Maple 7

Система Maple 7 пополнилась рядом новых пакетов: 

  •  CurveFutting — приближение кривых;
  •   ExternalCalling — внешние вычисления;
  •  LinearFunctionalSystem — линейные функциональные системы;
  •  MathML — поддержка средств языка MathML 2.0;
  •  OrthogonalSeries — серии с ортогональными полиномами;
  •  PolynomialTools — работа с полиномами.

Из этих пакетов надо особо выделить пакет приближения кривых. Он содержит наиболее важные функции для приближения кривых, которые до сих пор были разбросаны по ряду пакетов. В конце данного урока содержится описание пакета CurveFitting. Там же имеется описание другого нового и полезного пакета — PolynomialTools.

 

4. Получение информации о конкретном пакете

 

Получение информации о конкретном пакете 

С помощью команды:

 >?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 понятны, пожалуй, всем. Но и в гораздо более специализированных пакетах имена входящих в них функций в значительной мере знакомы специалистам, поскольку почти всегда ассоциируются с общепринятыми названиями тех или иных специализированных функций или с их комбинациями.

 

5. Пакеты функций комбинаторики

 

Пакеты функций комбинаторики

Пакет combinat

Функции комбинаторики достаточно известны из обычного курса математики. При вызове пакета выводится (если вывод не заблокирован двоеточием) список его функций:

> 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]

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

  •  Chi(x) — гиперболический косинусный интеграл;
  •  bell(n) —возвращает число ехр(ехр(х)-1) =sum(ben(n)/n!*x^n, n=0..infinity), причем для вычислении используется рекуррентное соотношение bell(n+1) = (bell(n)+1)^n;
  •  binomial (n, r) — возвращает биноминальные коэффициенты, причем, если n и r — целые числа, удовлетворяющие условию 0 <= r<= n, то функция возвращает C(n.r)=n!/(r!(n-r)!), а в общем случае С(n, r) = limit(GAMMA(N+D/ GAMMA(R+l)/GAMMA(N-R-t-l),R=r,N=n);
  •  composition(n, k) — возвращает списки композиций для целых неотрицательных n и k;
  •  fibonacci(n) — возвращает числа Фибоначчи, вычисляемые по рекуррентной формуле F(n) =F(n - 1) +F(n - 2), где F(0) =0 и F(1) =1;
  •  fibonacci(n, х) — возвращает значение полинома Фибоначчи F(n, x) =-х F(n - 1,x) + F(n - 2, х), где F(0,x) = 0 и F(l,x) = 1, при этом F(n) = F(n, 1);
  •  firstpart(n) — возвращает первую часть каноническей последовательности ряда;
  •  nextpart(l) — возвращает следующую часть канонической последовательности ряда;
  •  lastpart(n) — возвращает последнюю часть канонической последовательности ряда;
  •  prevpart(1) — возвращает предыдущую часть канонической последовательности ряда;
  •  conjpart(l) — возвращает объединенный раздел в канонической последовательности ряда;
  •  graycode(n) — возвращает список кодов Грея для габитовых чисел;
  •  multinomial (n, kl, k2, .... km) — возвращает мультиномиальные коэффициенты;
  •  numbcomb(n) и numbcomb(n. m) — возвращает число комбинаций;
  •  numbcomp(n, k) — возвращает число композиций;
  •  numbpart(n) — возвращает список всех возможных сумм, дающих п;
  •  permute(n) и permute(n, r) — возвращает numbperm(n, r) = nops(permute(n. r));
  •  powerset(s) — возвращает степень множества в множестве s;
  •  randcomb(n, m) — возвращает случайную комбинацию;
  •  randpart(n) — возвращает случайную часть;
  •  randperm(n) — возвращает случайную композицию; 
  •  stirling(n, m) — возвращает число Стирлинга первого рода;
  •  stirling2(n, m) — возвращает число Стирлинга второго рода;
  •  subsets(L) — задает итерационную процедуру над степенями множества или списка L;
  •  vectoint(l) — возвращает индекс вектора канонического упорядочения 1;
  •  inttovec(m, n) — возвращает вектор канонического упорядочения для неотрицательных целых чисел тип.

Ниже даны примеры применения некоторых из этих функций:

> 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]):

 > numbperm({a,b,c},2);

> 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]

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

 

6. Пакет combstruct

 

Пакет 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}));

> 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]]

Для более полного знакомства с этими специфическими функциями обратитесь к справочной системе.

 

7. Пакет финансово-экономических функций finance

 

Пакет финансово-экономических функций finance

Пакет финансово-экономических расчетов открывается командой:

 > with(finance)

[amortization, annuity, blackscholes, cashflows, effectiverate,futurevalue, growingannuity, growingperpetuity, levelcoupon, perpetuity, presentvalue, yieldtomaturity]

Этот пакет представлен рядом указанных выше функций в двух формах:

function(args)

finance[function](args).

Благодаря правилам задания аргументов можно реализовать практически все известные финансово-экономические расчеты, такие как амортизация, накопления и платежи по вкладам и т. д. В свете задач рыночной экономики эти функции полезны для приверженцев решения всего на свете без выхода из оболочки Maple. Все же надо отметить, что малозаметные тонкости в определении финансово-экономических функций затрудняют их применение. Есть множество специальных финансово-экономических пакетов, например «Бухгалтерия 1C», которые лучше подходят для наших экономических реалий, чем «заумный» и прозападный Maple 7.

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

  •  annuity(cash,rate,nperiods) — вычисление суммы, находящейся на вкладе с начальным значением cash, процентом начисления rate и числом периодов nperiods;
  •  cashflows(flows,rate) — вычисление общей суммы вклада по списку вложений flows и проценту обесценивания денег rate;
  •  futurevalue(amount, rate, nperiods) — вычисление будущего значения вклада при начальном вложении amount, проценте начисления rate и числе периодов nperiods;
  •  presentvalue(amount, rate, nperiods) — вычисление начального вклада для получения суммы в amount при проценте начислений rate и числе вкладов nperiods.

Примеры применения этих функций даны ниже:

Поскольку формулы и обозначения в финансово-экономических расчетах в различной литературе порою заметно различаются (особенно сильны различия между нашей и западной литературой), это может создать серьезные ошибки при вычислениях. К примеру, в формулах Maple на самом деле используются не проценты начислений или обесценивания вкладов, а соответствующие им относительные единицы, например 10% соответствует 0,1.. В нашей литературе проценты обычно задаются в явном виде, то есть rate = 10 при 10%. Надо следить и за знаком величины rate, поскольку она может трактоваться как процент начислений или процент обесценивания денег по вкладам, что соответствует различным ее знакам.

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

ПРИМЕЧАНИЕ 

В целом применение Maple 7 как системы с символьной и точной арифметикой весьма  предпочтительно в финансово-экономических и статистических расчетах, поскольку обеспечивает принципиально повышенную точность и устойчивость таких расчетов. 

 

1.gif

Изображение: 

8. Пакет ортогональных многочленов orthopoly

 

Пакет ортогональных многочленов orthopoly

Ортогональные многочлены (полиномы) находят самое широкое применение в различных математических расчетах. В частности, они широко используются в алгоритмах интерполяции, экстраполяции и аппроксимации различных функциональных зависимостей. В пакете orthopoly задано в функци: 

> with(orthopoly);

[G,H,L,P,T,U]

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

  •  G(n,a,x) — полином Гегенбауэра (из семейства ультрасферических полиномов); 
  •  Н(n,х) — полином Эрмита; 
  •  L(n,x) — полином Лагерра; 
  •  L(n,а,х) — обобщенный полином Лагерра; 
  •  Р(n,х) — полином Лежандра; 
  •  P(n,a,b,x) — полином Якоби;
  •  Т(n,х) — обобщенный полином Чебышева первого рода;
  •   U(n,x) — обобщенный полином Чебышева второго рода.

Свойства ортогональных многочленов хорошо известны. Все они характеризуются целочисленным порядком 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. Впрочем, надо отметить, что такие многочлены на практике используются крайне редко.

 

2.gif

Изображение: 

3.gif

Изображение: 

40.gif

Изображение: 

42.gif

Изображение: 

44.gif

Изображение: 

9. Пакет для работы с суммами sumtools

 

Пакет для работы с суммами sumtools

Состав пакета sumtools

Этот инструментальный пакет предназначен для работы со специальными суммами. Он содержит указанные ниже функции:

> with(suintools);

[Hypersum, Sumtohyper, extended_gosper, gosper, hyperrecursion, hypersum, hyperterm, simpcomb, sumrecursion, sumtohyper]

Назначение функций данного пакета перечислено ниже:

  •  hypersum(U, L, z, n) и Hypersum(U, L, z, n) — вычисление гиперсумм;
  •  sumtohyper(f, k) и Sumtohyper(f, k) — преобразование сумм в гиперсуммы;
  •  extended_gosper(f, k), extended_gosper(f, k=m..n) и extended_gosper(f, k, j) — реализация расширенного алгоритма Госпера;
  •  gosper(f, k) и gosper(f, k=m..n) — реализация алгоритма Госпера;
  •  hyperrecursion(U, L, z, s(n)) — реализация гиперрекурсионного алгоритма;
  •  hyperterm(U, L, z, k) и Hyperterm(U, L,z, k) — ввод гипергеометрического терма.

 

10. Работа с пакетом sumtools

 

Работа с пакетом sumtools

Приведем примеры на применение этих функций:

 

Из этих примеров применение функций данного пакета достаточно очевидно.

 

7.gif

Изображение: 

8.gif

Изображение: 

11. Пакет реализации степенных разложений powseries

 

Пакет реализации степенных разложений powseries

Состав пакета 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 ]

Ниже представлено определение этих функций:

  •  compose(а,b) — объединяет ряды а и b;
  •  evalpow(expr) — вычисляет выражение ехрr и возвращает его в виде ряда;
  •  inverse(р) — инвертирует ряд р;
  •  mu1tconst(p,const) — умножает ряд р на константу const; ,
  •  multiply(a,b) — умножает ряд а на ряд b;
  •  negative(p) — возвращает аддитивный, обратный по отношению к р ряд;
  •  powadd(a,b,...) — складывает ряды а, b, ...;
  •  powcreate(expr) — создает ряд для выражения ехрr;
  •  powpoly(pol ,var) — создает ряд для полинома pol по переменной van;
  •  powsolve(sys) — создает ряд для решения дифференциальных уравнений sys;
  •  quotient(a,b) — возвращает частное для а и b в виде ряда;
  • reversion(a) — дает обратное к композиции разложение ряда а;
  •  subtract(а,b) — дает разность рядов а и b.

В выражении ехр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

 

12. Примеры применения пакета powseries

 

Примеры применения пакета powseries

Назначение большинства этих функций очевидно из их названий — они возвращают соответствующую функцию (указанную после слова pow в имени) в виде разложения в ряд или полинома. Например, powexp раскладывает выражения с экспоненциальными функциями в ряд.

Получаемые функциями ряды представляются в специальном формате. Поэтому для их применения в обычном виде необходимо использовать функцию tpsform в следующих видах:

  •  tpsform(p, var, order) — преобразует ряд р в обычную форму с заданием порядка order;
  •  tpsform(p, var) — преобразует ряд р в обычную форму с порядком, заданным переменной Order.

Здесь р — имя степенного ряда, var.— переменная, относительно которой записан ряд, order — порядок ряда. Если параметр order не указан, используется значение глобальной переменной Order. Ниже даны примеры, иллюстрирующие технику работы со степенными разложениями:

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

 

9.gif

Изображение: 

13. Пакет числовой аппроксимации numapprox

 

Пакет числовой аппроксимации numapprox

Состав пакета numapprox

Этот пакет содержит небольшое число безусловно очень важных функций:

> with(numapprox);

[chebdeg, chebmult, chebpade, chebsort, chebyshev, confracform, hermite_pade, hornerform, infnorm, laurent, minimax, pade, remez]

В их числе функции интерполяции и аппроксимации полиномами Чебышева, рядом Тейлора, отношением полиномов (Паде-аппроксимация) и др. Все они широко применяются не только в фундаментальной математике, но и при решении многих прикладных задач. Рассмотрим их, начиная с функций аппроксимации аналитических зависимостей.

 

14. Разложение функции в ряд Лорана

 

Разложение функции в ряд Лорана

Для разложения функции f в ряд Лорана с порядком n в окрестности точки х = а (или х = 0) служит функция laurent:

1aurent(f, x=a.. n) 

1aurent(f, х, n) 

Представленный ниже пример иллюстрирует реализацию разложения в ряд Лорана:

 

10.gif

Изображение: 

15. Паде-аппроксимация аналитических функций

 

Паде-аппроксимация аналитических функций

Для аппроксимации аналитических функций одной из лучших является Паде-аппроксимация, при которой заданная функция приближается отношением двух полиномов. Для осуществления такой аппроксимации используется функция 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. Аппроксимация Паде для разрывной функции тангенса

 

46.gif

Изображение: 

48.gif

Изображение: 

16. Паде-аппроксимация с полиномами Чебышева

 

Паде-аппроксимация с полиномами Чебышева

Для многих аналитических зависимостей хорошие результаты дает аппроксимация полиномами Чебышева. В общем случае применяется Паде-аппроксимация отношением таких полиномов. Она реализуется функциями chebpade:

chebpade(f, x=a..b, [m.n])

chebpade(f., x, [m.n])

chebpade(f, a..b, [m,n])

Здесь а..b задает отрезок аппроксимации, тип— максимальные степени числителя и знаменателя полиномов Чебышева. Приведенный ниже пример показывает аппроксимацию Паде полиномами Чебышева для функции f=cos(x):

 

11.gif

Изображение: 

17. Наилучшая минимаксная аппроксимация

 

Наилучшая минимаксная аппроксимация

Минимаксная аппроксимация отличается от Паде-аппроксимации минимизацией максимальной абсолютной погрешности во всем интервале аппроксимации. Она использует алгоритм Ремеза (см. ниже) и реализуется следующей функцией:

mimmax(f, x=a..b, [m.n], w, 'maxerror') 

minimax(f, a..b, [m,n], w, 'maxerror')

Здесь помимо уже отмеченных параметров w — процедура или выражение, maxerror — переменная, которой приписывается значение miniraax-нормы. Ниже дан пример аппроксимации функции cos(x) в интервале [-3, 3]:

 

12.gif

Изображение: 

18. Наилучшая минимаксная аппроксимация по алгоритму Ремеза

 

Наилучшая минимаксная аппроксимация по алгоритму Ремеза

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

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):

 

13.gif

Изображение: 

19. Другие функции пакета

 

Другие функции пакета

Отметим назначение других функций пакета numapprox:

  •  chebdeg(p) — возвращает степень полинома Чебышева р;
  •  chebmult(p, q) — умножение полиномов Чебышева р и q;
  •  chebsort(e) — сортирует элементы ряда Чебышева;
  •  confracform(r) — преобразует рациональное выражение г в цепную дробь;
  •  confracform(r, х) — преобразует рациональное выражение г в цепную дробь с независимой переменной х; 
  •  hornerform(r) — преобразует рациональное выражение г в форму Горнера;
  •  hornerform(r, х) — преобразует рациональное выражение г в форму Горнера с независимой переменной х; 
  •  infnorm(f, x=a...b, 'xmax') — возвращает L-бесконечную норму функции на отрезкех [а, b];
  •   infnorm(f, a...b, 'xmax') — возвращает L-бесконечную норму функции на отрезке [а, b].

Действие этих функций очевидно, и читатель может самостоятельно опробовать их в работе.

 

20. Пакет интегральных преобразований inttrans

 

Пакет интегральных преобразований inttrans

Общая характеристика пакета

Это один из пакетов, наиболее важных для общематематических и научно-технических приложений. Он содержит небольшой набор функций:

> with(inttrans):

[addtable,fourier,fouriercos,fouriersin, hankel, hilbert, invfourier, invhilbert, invldplace, invmellin, laplace, mellin, savetable]

Однако эти функции охватывают такие практические важные области математики, как ряды Фурье, прямые и обратные преобразования Лапласа и Фурье и ряд других интегральных преобразований. Ниже они обсуждены более подробно.

В предшествующих реализациях системы Maple функции прямого и обратного Z-преобразований также входили в пакет inttrans, однако в Maple 6 и 7 они перенесены в ядро системы.

 

21. Прямое и обратное преобразования Лапласа

 

Прямое и обратное преобразования Лапласа

Прямое преобразование Лапсаса заключается в переводе некоторой функции времени 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).

 

14.gif

Изображение: 

15.gif

Изображение: 

16.gif

Изображение: 

22. Прямое и обратное преобразования Фурье

 

Прямое и обратное преобразования Фурье

Прямое преобразование Фурье преобразует функцию времени f(t) в функцию частот и заключается в вычислении следующей интегральной функции:

Оно реализуется следующей функцией пакета интегральных преобразований inttrans:

fourier(expr,t,w)

Здесь ехрr — выражение (уравнение или множество), t — переменная, от которой зависит ехрr, и w — переменная, относительно которой записывается результирующая функция. Обратное преобразование Фурье задается вычислением интеграла:

Оно фактически переводит представление сигнала из частотной области во временную. Примеры применения преобразования Фурье представлены ниже:

Обратите внимание на то, что даже в простом первом примере применение обратного преобразования Фурье вслед за прямым не привело к буквальному восстановлению исходной функции sin(t). Потребовалась: команда simplify, чтобы перевести результат в виде представления синуса через экспоненциальные функции к обычному виду sin(t).

 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

23. Вычисление косинусного и синусного интегралов Фурье

 

Вычисление косинусного и синусного интегралов Фурье

Разложение функции f(t) в ряд Фурье требует вычисления интегралов следующего вида:

Они получили название косинусного и синусного интегралов Фурье и фактически задают вычисление коэффициентов ряда Фурье, в который может быть разложена функция ./(t). Для вычисления этих интегралов в пакете используются следующие функции:

 fouriercos(expr,t,s)

 fouriersln(expr,t,s)

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

 

 

50.gif

Изображение: 

51.gif

Изображение: 

24. Интегральное преобразование Ханкеля

 

Интегральное преобразование Ханкеля

Интегральное преобразование Ханкеля задается следующим выражением:

и выполняется функцией:

hankel(expr, t, s, nu)

Здесь ехрr — выражение, равенство (или множество, или список с выражениями/равенствами), t — переменная в ехрr, преобразуемая в параметр преобразования s, nu— порядок преобразования. Следующий пример демонстрирует применение функции Ханкеля:

 

 

20.gif

Изображение: 

21.gif

Изображение: 

25. Прямое и обратное преобразования Гильберта

 

Прямое и обратное преобразования Гильберта

Прямое преобразование Гильберта задается следующим выражением:

и превращает функцию f(t) в F(s).

Обратное преобразование Гильберта означает нахождение f(f) по заданной F(s).

Эти преобразования выполняются функциями:

hilbert(expr, t, s) 

invhilbert(expr, t,s)

где назначение параметров очевидно.

Приведенные ниже примеры иллюстрируют выполнение этих преобразований:

 

Как видно из этих примеров, обратное преобразование Гильберта, осуществленное над результатом прямого преобразования, не восстанавливает функцию f(t) буквально.

 

22.gif

Изображение: 

23.gif

Изображение: 

24.gif

Изображение: 

26. Интегральное преобразование Меллина

 

Интегральное преобразование Меллина

Интегральное преобразование Меллина задается выражением:

и реализуется функцией:

mellin(expr, х, s)

с очевидными параметрами ехрr, х и s.

Применение преобразования Меллина иллюстрируют следующие примеры:

 

25.gif

Изображение: 

26.gif

Изображение: 

27. Функция addtable

 

Функция addtable

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

addtable(tname,patt,ехрr,t,s)

где tname — наименование преобразования, для которого образец patt должен быть добавлен к таблице поиска. Остальные параметры очевидны.

Следующие примеры поясняют применение этой функции:

 

27.gif

Изображение: 

28. Пакет приближения кривых CurveFittirrg

 

Пакет приближения кривых CurveFitting.

Общая характеристика пакета CurveFitting

Новый пакет приближения кривых CurveFitting весьма полезен тем, кто занимается столь распространенной задачей, как приближение кривых. Он содержит ряд функций:

> with(CurveFitting);

Доступ к функциям пакета возможен с помощью конструкций:

CurveFitting[function](arguments) 

function(arguments)

Число функций пакета невелико и все они описаны ниже.

 

29. Функция вычисления В-сплайнов Bspline.

 

Функция вычисления В-сплайнов Bspline

Функция BSpline(k, v, opt) служит для вычисления В-сплайнов. Она имеет следующие параметры: k — порядок сплайна (целое число), v— имя и opt — параметр в виде knots=knotlist, где knotlist — спискок из k+1 элементов алгебраического типа. Используя функцию CurveFitting[BSplineCurve], можно строить кривые В-сплайнов. Примеры применения этой функции представлены ниже:

Как нетрудно заметить из этих примеров, функция Bspline возвращает результат в виде кусочных функций типа piecewise.


28.gif

Изображение: 

30. Функция построения В-сплайновых кривых BsplineCurve

 

Функция построения В-сплайновых кривых 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

 

52.gif

Изображение: 

31. Функция реализации метода наименьших квадратов LeastSquares

 

Функция реализации метода наименьших квадратов LeastSquares

Функция LeastSquares служит для реализации аппроксимации по методу наименьших квадратов:

LeastSquares (xydata, v, opts) 

LeastSquares(xdata, ydata, v.,opts)

Все входящие в нее параметры были определены выше (см. параметры функции BSplineCurve). Параметр opts задается в форме выражений weight=wlist, curve=f или params=pset.

Следующие примеры иллюстрируют применение функции LeastSquares:

 

29.gif

Изображение: 

32. Функция полиномиальной аппроксимации Polynomiallnterpolation

 

Функция полиномиальной аппроксимации PolynomialInterpolation

Функция PolynomialInterpolation реализует полиномиальную интерполяцию и может использоваться в виде:

Polynomiallnterpolation (xydata, v) 

Polynomiallnterpolation(xdata, ydata, v)

Параметры функции были определены выше. Параметр v может быть как именем, так и численным значением. Примеры применения функции представлены ниже:

 

30.gif

Изображение: 

33. Функция рациональной аппроксимации Racionallnterpotation

 

Функция рациональной аппроксимации RacionalInterpolation

Функция рациональной интерполяции задается в Виде: 

Rational Interpolation (xydata, z, opts)

RationalInterpolation(xdata, ydata, z, opts)

где необязательный параметр opts задается выражениями methochmethodtype или degrees=[dl,d2]. Функция возвращает результат в виде отношения двух полиномов. Параметр methodtype может иметь значения 4lookaround или subresultant, задающие учет или пропуск сингулярных точек.

Пример применения функции Rational Interpolation (загрузка пакета опущена, но предполагается):

 

31.gif

Изображение: 

34. Функция вычисления обычных сплайнов Spline

 

Функция вычисления обычных сплайнов Spline

Функция:

Spline(xydata, v, opts)

Spline(xdata, ydata, v, opts)

вычисляет обычные (не В-типа) сплайны. Примеры ее применения даны ниже:

 

32.gif

Изображение: 

35. Функция аппроксимации непрерывными дробями Thielelnterpolation

 

Функция аппроксимации непрерывными дробями ThieleInterpolation

Функция ThieleInterpolation осуществляет интерполяцию на основе непрерывных дробей (Thiele's-интерполяцию). Она задается в виде:

Thielelnterpolation (xydata, v)

  Thielelnterpolation(xdata, ydata, v)

Примеры применения данной функции представлены ниже:

 

33.gif

Изображение: 

36. Пакет для работы с полиномами PolynomialTools

 

Пакет для работы с полиномами PolynomialTools

Обзор возможностей пакета PolynomialTools

Пакет для работы с полиномами PolynomialTools предназначен для выполнения ряда специальных операций с полиномами или создания полиномов с заданными свойствами. Этот пакет имеет небольшое число функций: 

 > with(PolynomialTools):

[IsSelfReciprocal, MinimalPolynomial, PDEToPolynomial, PolynomialToPDE, Shorten, Shorter, Sort, Split, Splits, Translate]

В пакет входят функции расщепления, сортировки и преобразования полиномов (в том числе в дифференциальные уравнения и наоборот) и др.

 

37. Функции для работы с полиномами

 

Функции для работы с полиномами

Рассмотрим несколько функций пакета 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 — константа. Примеры применения этой функции даны ниже:

 

34.gif

Изображение: 

35.gif

Изображение: 

36.gif

Изображение: 

37.gif

Изображение: 

38. Функции сортировки полиномов

 

Функции сортировки полиномов

Для сортировки полиномов предназначены следующие три функции:

 Shorter(f, g, х) 

Sort(v, х) 

Shorten(f, x)

Здесь f и g полиномы, v — список полиномов их — независимая переменная. Функции отличаются характером сортировки.

Функция Shorter определяет полином f как более короткий, чем g, по следующим признакам: меньшая длина, меньшее имя независимой переменной х, не дробный и меньшая степень других переменных. Функция Sort сортирует лист полиномов х по признакам, определяемым Shorter. Функция Shorten использует преобразования Мебиуса. Многочисленные детали ее применения можно найти в справке по данной функции. Примеры применения функций сортировки:

 

38.gif

Изображение: 

39. Функции преобразования полиномов в РОЕ и обратно

 

Функции преобразования полиномов в РDЕ и обратно

Функция PolynomialToPDE(polys, vars, depvars) преобразует полиномы polys пo независимым переменным vans в дифференциальные уравнения с частными производными (PDE). Другая функция PDEToPolynomia(pdes, vans, depvars) осуществляет обратное преобразование.

Следующие примеры иллюстрируют применение этих функций:

 

39.gif

Изображение: 

40. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Обращаться к пакетам расширения.
  •  Пользоваться функциями пакетов комбинаторики.
  •  Применять пакет финансово-экономических функций.
  • Использовать ортогональные многочлены из пакета orthpoly.
  •  Работать с суммами пакета sumtools.
  •  Применять степенные разложения пакета powerseries.
  •  Работать с пакетом численной аппроксимации numapprox.
  •  Использовать интегральные преобразования пакета inttrans.
  •  Осуществлять приближение кривых с помощью пакета CurveFitting.
  •  Использовать пакет работы с полиномами PolynomialTools.

 

Урок 15. Пакеты линейной алгебры и функциональных систем

1. Основные определения линейной алгебры

 

Урок 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 = ММ ..., Мnn-1М.

Идемпотентная матрица — матрица, отвечающая условию Р2 = Р.

Симметрическая матрица — матрица, отвечающая условию Ат = А.

Кососимметрическая матрица — матрица, отвечающая условию Ат = -A. Ортогональная матрица — матрица, отвечающая условию Ат-1.Нуль-матрица — матрица, все элементы которой равны 0.Блок-матрица — матрица, составленная из меньших по размеру матриц, также можно представить как матрицу, каждый элемент которой — матрица. Частным случаем является блок-диагональная матрица — блок-матрица, элементы-матрицы которой вне диагонали — нуль-матрицы.

Комплексно-сопряженная матрица — матрица А, полученная из исходной матрицы А заменой ее элементов на комплексно-сопряженные. Эрмитова матрица — матрица А, удовлетворяющая условию А = А .Собственный вектор квадратной матрицы А — любой вектор х е V", х* О, удовлетворяющий уравнению Ах = gx, где g — некоторое число, называемое собственным значением матрицы А.

Характеристический многочлен матрицы — определитель разности этой матрицы и единичной матрицы, умноженный на переменную многочлена, — |А - gE|. Собственные значения матрицы — корни ее характеристического многочлена. Норма — обобщенное понятие абсолютной (величины числа. Норма трехмерного вектора ||х|| — его длина. Норма матрицы — значение sup(||Ax||/||x||).

Матричная форма записи системы линейных уравнений — выражение АХ = В, где А — матрица коэффициентов системы, X — вектор неизвестных и В — вектор свободных членов. Один из способов решения такой системы очевиден — X = А-1В, где А-1 — обратная матрица.

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

2. Пакет решения задач линейной алгебры linatg

 

Пакет решения задач линейной алгебры linalg

Состав пакета 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, которые подробно не описаны:

  •  addcol — добавляет к одному из столбцов другой столбец, умноженный на некоторое число;
  •  addrow — добавляет к одной из строк другую строку, умноженную на некоторое число;
  •  angle — вычисляет угол между векторами;
  •  augment — объединяет две или больше матриц по горизонтали;
  •  backsub — реализует метод обратной подстановки при решении системы линейных уравнений (см. также forwardsub);
  •  band — создает ленточную матрицу;
  •  basis — находит базис векторного пространства;
  •  bezout — создает Bezout-матрицу двух полиномов; . г
  •  BlockDiagonal — создает блок-диагональную матрицу;
  •  blockmatrix — создает блок-матрицу;
  •  cholesky — декомпозиция Холесского для квадратной положительно определенной матрицы;
  •  charmat — создает характеристическую матрицу (charmat(M,v) — матрица, вычисляемая как v E-M);
  •  charpoly — возвращает характеристический полином матрицы;
  •  colspace — вычисляет базис пространства столбцов;
  •  colspan — находит базис линейной оболочки столбцов матрицы;
  •  companion — вычисляет сопровождающую матрицу, ассоциированную с полиномом;
  •  cond — вычисляет число обусловленности матрицы (cond(M) есть величина norm(M) norm(М-1);
  •  curl — вычисляет ротор вектора;
  •  definite — тест на положительную (отрицательную) определенность матрицы;
  •  diag — создает блок-диагональную матрицу;
  •  diverge — вычисляет дивергенцию векторной функции;
  •  eigenvals — вычисляет собственные значения матрицы;
  •  eigenvects — вычисляет собственные векторы матрицы;
  •  equal — определяет, являются ли две матрицы равными;
  •  exponential — создает экспоненциальную матрицу;
  •  ffgausselim — свободное от дробей Гауссово исключение в матрице;
  •  fibonacci — матрица Фибоначчи;
  •  forwardsub — реализует метод прямой подстановки при решении системы линейных уравнений (например, для матрицы L и вектора b
  •  forwardsub(L, b) возвращает вектор решения х системы линейных уравнений L-x=b);
  •  frobenius — вычисляет форму Фробениуса (Frobenius) матрицы;
  •  gausselim — Гауссово исключение в матрице;
  •  gaussjord — синоним для rref (метод исключения Гаусса—Жордана);
  •  geneqns — генерирует элементы матрицы из уравнений;
  •  genmatrix — генерирует матрицу из коэффициентов уравнений;
  •  grad — градиент векторного выражения;
  •  GramSchmidt — вычисляет ортогональные векторы;
  •  hadamard — вычисляет ограничение на коэффициенты детерминанта;
  •  hessian — вычисляет гессиан-матрицу выражения;
  •  hilbert — создает матрицу Гильберта;
  •  htranspose — находит эрмитову транспонированную матрицу;
  •  ihermite — целочисленная эрмитова нормальная форма;
  •  indexfunc — определяет функцию индексации массива;
  •  Innerprod — вычисляет векторное произведение;
  •  Intbasis — определяет базис пересечения пространств;
  •  ismith — целочисленная нормальная форма Шмитта;
  •  iszero — проверяет, является ли матрица ноль-матрицей;
  •  jacobian —' вычисляет якобиан векторной функции;
  •  JordanBlock — возвращает блок-матрицу Жордана;
  •  kernel — находит базис ядра преобразования, соответствующего данной матрице;
  •  laplacian — вычисляет лапласиан;
  •  leastsqrs — решение уравнений по методу наименьших квадратов;
  •  linsolve — решение линейных уравнений;
  •  LudeComp — осуществляет LU-разложение;
  •  minpoly — вычисляет минимальный полином матрицы;
  •  mulcol — умножает столбец матрицы на заданное выражение;
  •  mulrow — умножает строку матрицы на заданное выражение;
  •  multiply — перемножение 'матриц или матрицы и вектора;
  •  normalize — нормализация вектора;
  •  orthog — тест на ортогональность матрицы;
  •  permanent — вычисляет перманент матрицы — определитель, вычисляемый без перестановок;
  •  pivot — вращение относительно элементов матрицы;
  •  potential — вычисляет потенциал векторного поля;
  •  Qrdecomp — осуществляет QR-разложение;
  •  randmatrix — генерирует случайные матрицы;
  •  randvector — генерирует случайные векторы;
  •  ratform — вычисляет рациональную каноническую форму;
  •  references — выводит список основополагающих работ по линейной алгебре;
  •  rowspace — вычисляет базис пространства строки;
  •  rowspan — вычисляет векторы охвата для места столбца;
  •  rref — реализует преобразование Гаусса-Жордана матрицы;
  •  scalarmul — умножение матрицы или вектора на заданное выражение;
  •  singval — вычисляет сингулярное значение квадратной матрицы;
  •  singularvals — возвращает список сингулярных значений квадратной матрицы;
  •  smith — вычисляет Шмиттову нормальную форму матрицы;
  •  submatrix — извлекает указанную подматрицу из матрицы;
  •  subvector — извлекает указанный вектор из матрицы;
  •  sumbasis — определяет базис объединения системы векторов;
  •  swapcol — меняет местами два столбца в матрице;
  •  swaprow — меняет местами две строки в матрице;
  •  sylvester — создает матрицу Сильвестра из двух полиномов;
  •  toeplitz — создает матрицу Теплица;
  •  trace — возвращает след матрицы;
  •  vandermonde — создает вандермондову матрицу;
  •  vecpotent — вычисляет векторный потенциал;
  •  vectdim — определяет размерность вектора;
  •  wronskian — вронскиан векторных функций.

Ниже мы рассмотрим более подробно наиболее часто используемые функции из этого пакета. С деталями синтаксиса (достаточно разнообразного) для каждой из указанных функций можно ознакомиться в справочной системе Maple. Для этого достаточно использовать команду 

?name;  где name — имя функции (из приведенного списка).

 

3. Интерактивный ввод матриц

 

Интерактивный ввод матриц

Для интерактивного ввода матриц можно, определив размерность некоторого массива, использовать функцию entermatrix:

> А:=аггау(1..3,1..3):

А :=аггау(1 ..3,1 .. 3, [ ])

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

 

 

8.gif

Изображение: 

9.gif

Изображение: 

4. Основные функции для задания векторов и матриц

 

Основные функции для задания векторов и матриц

В библиотечном файле Unalg имеются следующие функции для задания векторов и матриц: 

  • vector(n,list) — сoздание вектора с n элементами, заданными в списке list;
  •  matrix(n,m,list) — создание матрицы с числом строк n и столбцов m с элементами, заданными списком list.

Ниже показано применение этих функций:

Обратите внимание на последние примеры — они показывают вызов индексированных переменных вектора и матрицы.

 

10.gif

Изображение: 

5. Функции для работы, с векторами и матрицами

 

Функции для работы с векторами и матрицами

Для работы с векторами и матрицами Maple 7 имеет множество функций, входящих в пакет linalg. Ограничимся приведением краткого описания наиболее распространенных функций этой категории.

Операции со структурой отдельного вектора V и матрицы М: 

  •  coldim(M) — возвращает число столбцов матрицы М; 
  •  rowdim(M) — возвращает число строк матрицы М;
  •  vectdim(V) — возвращает размерность вектора V;
  •  col(M,i) — возвращает i-й столбец матрицы М;
  •  row(M,i) — возвращает i-ю строку матрицы М;
  •  tninor(M,i, j) — возвращает минор матрицы М для элемента с индексами i и j;
  •  delcols(M,i.. j) — удаляет столбцы матрицы М от i-roдо j-ro;
  •  del rows (V,i..j) — удаляет строки матрицы М от i-й до j-й;
  •  extend (М, т, n,х) — расширяет матрицу М на m строк и n столбцов с применением заполнителя х.

Основные векторные и матричные операции:

  •  dotprod(U,V) — возвращает скалярное произведение векторов U и V;
  •   crossprod(U,V) — возвращает векторное произведение векторов U и V;
  •   norm(V) или norm(M) — возвращает норму вектора или матрицы;
  •  copyinto(A,B,i, j) — копирует матрицу А в В для элементов последовательно от i до j;
  •  concat(Ml,M2) — возвращает объединенную матрицу с горизонтальным слиянием матриц Ml и М2;
  •  stack(Ml,M2) — возвращает объединенную матрицу с вертикальным слиянием Ml и М2;
  •  matadd(A,B) и evalm(A+B) — возвращает сумму матриц А и В;
  •  multlply(A,B) и evalm(A&*B) — возвращает произведение матриц А и В;
  •  adjoint (М) или adj(M) — возвращает присоединенную матрицу, такую что M?adj(M) дает диагональную матрицу, определитель которой есть det(M);
  •  charpoly(M,lambda) — возвращает характеристический полином матрицы М относительно заданной переменной lambda;
  •  det(M) — возвращает детерминант (определитель) матрицы М;
  •  Eigenvals(M,vector) — инертная форма функции, возвращающей собственные значения матрицы М и (при указании необязательного параметра vector) соответствующие им собственные векторы;
  •  jordan(M) — возвращает матрицу М в форме Жордана;
  • hermite(M) — возвращает матрицу М в эрмитовой форме;
  •  trace(M) — возвращает след матрицы М;
  •  rank(M) — возвращает ранг матрицы М;
  •  transpose(M) — возвращает транспонированную матрицу М;
  •  inverse(M) или evalm(l/M) — возвращает матрицу, обратную к М;
  •  singularvals(A) — возвращает сингулярные значения массива или матрицы А.

Приведем примеры применения некоторых из этих функций:

 

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

 

11.gif

Изображение: 

12.gif

Изображение: 

6. Решение систем линейных уравнений.

 

Решение систем линейных уравнений

Ниже представлен простой пример составления и решения трех систем линейных уравнений с применением функций, входящих в пакет linalg:

А теперь рассмотрим пример решения матричного уравнения в символьном виде:

Следующий пример показывает решение более сложной системы линейных уравнений с комплексными коэффициентами:

На этот раз решение получено использованием функций умножения матриц и вычисления обратной матрицы в виде X = А-1 В, то есть в матричном виде. В конце примера показано преобразование результатов с целью их получения в обычной форме комплексных чисел с частями, представленными в форме чисел с плавающей точкой.

 

13.gif

Изображение: 

14.gif

Изображение: 

15.gif

Изображение: 

7. Пакет линейной алгебры с алгоритмами NAG LinearAlgebra

 

Пакет линейной алгебры с алгоритмами 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 — создание матрицы с нулевыми элементами и т. д. Все имена функций этого пакета начинаются с заглавной буквы.

 

8. Примеры матричных операций с применением пакета LinearAlgebra

 

Примеры матричных операций с применением пакета 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 удовлетворят самых требовательных специалистов в этой области математики. 

 

16.gif

Изображение: 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

30.gif

Изображение: 

9. Интеграция Maple 7 с MATLAB

 

Интеграция Maple 7 с MATLAB

Краткие сведения о MATLAB

Несмотря на обширные средства линейной алгебры (да и многие другие), имеющиеся у системы Maple 7, есть системы компьютерной математики, решающие некоторые классы задач более эффективно, и прежде всего быстрее. В области линейной алгебры к таким системам, безусловно, относится система MATLAB, созданная компанией Math Works, Inc. Ее название происходит именно от слов MATrix LABoratory — матричная лаборатория.

MATLAB содержит в своем ядре многие сотни матричных функций и является одной из лучших матричных систем для персональных компьютеров. Она реализует самые современные алгоритмы матричных операций, включая, кстати, и алгоритмы NAG. Однако главное достоинство MATLAB — наличие множества дополнительных пакетов как по классическим разделам математики, так и по самым новейшим, таким как нечеткая логика, нейронные сети, идентификация систем, обработка сигналов и др. Знаменитым стал пакет моделирования систем и устройств Simulink, включаемый в пакет поставки системы MATLAB. Последней версией системы является MATLAB 6.0. В то же время нельзя не отметить, что MATLAB — одна из самых громоздких математических систем. Инсталляция ее полной версии занимает около 1,5 Гбайт дискового пространства. Несмотря на это, интеграция различных математических систем с данной системой, похоже, становится своеобразной модой. Такая возможность предусмотрена и в системе Maple 7 с помощью пакета Matlab.

 

10. Загрузка пакета расширения 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.

 

11. Типовые матричные операции пакета расширения Matlab

 

Типовые матричные операции пакета расширения Matlab

Большинство функций пакета Matlab (не путайте с системой MATLAB, имя которой надо записывать прописными буквами) реализуют самые обычные матричные операции, что и иллюстрируют приведенные ниже примеры.

Зададим матрицу М в формате Maple:

 

Ниже даны примеры транспонирования матрицы, ее инвертирования, вычисления детерминанта и собственных значений матрицы:

Можно проверить, является ли матрица квадратной:

Можно также проверить, является ли данная матрица матрицей системы MATLAB:

Здесь надо иметь в виду, что форматы матриц в системах Maple и MATLAB различны. Выполним LU-преобразование матрицы:

Таким образом, видно, что пакет Maple в данном случае реализует типовые матричные операции, но средствами системы MATLAB. Загрузка последней происходит автоматически при загрузке пакета Matlab. Если система MATLAB не установлена на вашем компьютере, то доступ к функциям пакета Matlab будет отсутствовать, a Maple 7 при попытке использования данных функций будет выдавать сообщения об ошибках.

 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

23.gif

Изображение: 

24.gif

Изображение: 

12. Выделение сигнала на фоне шумов

 

Выделение сигнала на фоне шумов

Среди небольшого числа доступных функций системы 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 и проверим его размер:

   

 

25.gif

Изображение: 

26.gif

Изображение: 

27.gif

Изображение: 

13. Пакет анализа линейных функциональных систем LinearFunctionalSystems

 

Пакет анализа линейных функциональных систем LinearFunctionalSystems

Назначение пакета LinearFunctionalSystems

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

Вызов всех функций пакета осуществляется командой: 

> with(LinearFunctionalSystems):

[AreSameSolution, CanonicalSystem, ExtendSeries, Homogeneous System, IsSolution,

MatrixTriangularization, PolynomialSolution, Properties, RationalSolution,

SeriesSolution, UniversalDenominator]

 

14. Тестовые функции пакета LinearFunctionalSystems

 

Тестовые функции пакета 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').

 

15. Функции решения линейных функциональных систем

 

Функции решения линейных функциональных систем

Группа основных функций пакета LinearFunctionalSystems имеет идентичный синтаксис и записывается в виде:

name(sys,vars,[method]) 

или 

name(A[.b],x, case, [method]}

Здесь name — одно из следующих имен:

  •  PolynomialSolution — решение в форме полинома;
  •  RationalSolution — решение в форме рационального выражения;
  •  SeriesSolution — решение в виде ряда;
  •  UniversalDenominator — решение с универсальным знаменателем (и числителем, равным 1).

Система функциональных уравнений задается либо в виде полной системы sys со списком переменных vars, либо в матричном виде с заданием матриц  коэффициентов, системы А и вектора свободных членов b (может отсутствовать) с указанием независимой переменной х и параметра case, имеющего значения 'differential', 'difference' или 'qdifference'. Параметр method, задающий метод EG-исключения, может иметь значения 'quasimodular' или 'ordinary'.

 

16. Вспомогательные функции

 

Вспомогательные функции

 Несколько вспомогательных функций пакета LinearFunctionalSystems представлено ниже:

  •  MatrixTriangularization(mat, m, n, x, It) — триангуляция матрицы mat размера mxn с указанием типа It ('lead' или 'trail');
  •  CanonicalSystemCshift, sys. vars) или CanonicalSystemCshift, A[, b]. x, case) — возвращает систему в каноническом виде (параметр shift задается как ' difference' или ' q - difference', назначение других параметров С9ответствует указанным выше для других функций);
  •  ExtendSeries(sol, deg) — расширяет ряд решения sol до расширенного ряда степени deg;
  •  HomogeneousSystemChoitio, sys, vars) илиHomogeneousSystemChomo, A[, b], x, case) — преобразует исходную систему в гомогенную с именем homo.
  •  PropertiesCsys, vars) или Properties(A[. b]. x, case) — возвращает основные свойства системы.

 

17. Примеры применения пакета LinearFunctiftnalSystems

 

Примеры применения пакета

LinearFunctionalSystems

Ниже представлен ряд примеров применения пакета LinearFunctionalSystems, иллюстрирующих его возможности:

 

Множество дополнительных примеров на анализ и решение линейных функциональных систем можно найти в справке по функциям данного пакета.

 

28.gif

Изображение: 

29.gif

Изображение: 

18. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Применять основные операции и определения линейной алгебры.
  •  Использовать пакет решения задач линейной алгебры linalg.
  •  Использовать пакет линейной алгебры LinearAlgebra с алгоритмами NAG.
  •  Осуществлять интеграцию системы Maple 7 с матричной системой MATLAB.
  •  Использовать некоторые функции системы MATLAB при работе в Maple 7.
  •  Применять функции нового пакета LinearFunctionalSystems.

 

Урок 16. Обзор пакетов специального назначения

1. Пакет решения задач линейной оптимизации simplex

 

Урок 16.


Обзор пакетов специального назначения

 

Пакет решения задач линейной оптимизации simplex

Обзор средств пакета

Задачи линейной оптимизации важны как в фундаментальных, так и в прикладных приложениях математики. В пакете 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 ]

Приведем краткое назначение этих функций:

  •  basis — возврат списка основных переменных для множества линейных уравнений;
  •  convexhull— вычисление выпуклой оболочки для набора точек; 
  •  cterm — задание констант для системы уравнений или неравенств;
  •  define_zero — определение наименьшего значения, принимаемого за ноль (по
  • умолчанию увязано со значением системной переменной Digits);
  •  display — вывод системы уравнений или неравенств в матричной форме;
  •  dual — выдача сопряженных выражений; ,
  •  equality — параметр для функции convert, указывающий на эквивалентность;
  •  feasible — выяснение возможности решения заданной задачи:
  •  maximize — вычисление максимума функции;
  •  minimize — вычисление минимума функции;
  •  pivot — создание новой системы уравнений с заданным главным элементом;
  •  pivoteqn — выдача подсистемы уравнений для заданного главного элемента;
  •  pivotvar — выдача переменных с положительными коэффициентами в целевой функции;
  •  ratio — выдача отношений для определения наиболее жесткого ограничения;
  •   setup — задание системы линейных уравнений;
  •  standardize — приведение заданной системы уравнений или неравенств к стандартной форме неравенств типа «меньше или равно».

 

2. Функции maximize и minimize

 

Функции 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 — имена переменных, которым присваиваются соответственно оптимальное описание и переменные преобразования. Ниже даны^примеры применения этих функций:

 

1.gif

Изображение: 

3. Прочие функции пакета simplex.

 

Прочие функции пакета 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}

 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

7.gif

Изображение: 

4. Пакет планиметрии geometry

 

Пакет планиметрии geometry

Набор функций пакета 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}

Этот пакет содержит средства расчета основных параметров ряда геометрических объектов. Для каждого объекта возможно задание различных исходных величин, так что пакет охватывает практически все виды классических геометрических расчетов на плоскости. Несомненно, этот пакет заинтересует всех, кто работает в области геометрии и смежных областях.

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

 

5. Пример применения расчетных функций пакета geometry

 

Пример применения расчетных функций пакета 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 получим детальное описание окружности:

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

 

8.gif

Изображение: 

9.gif

Изображение: 

10.gif

Изображение: 

11.gif

Изображение: 

6. Визуализация геометрических объектов с помощью пакета geometry

 

Визуализация геометрических объектов с помощью пакета 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. Рекомендуется просмотреть те из них, которые нужны вам.

 

27.gif

Изображение: 

28.gif

Изображение: 

29.gif

Изображение: 

31.gif

Изображение: 

33.gif

Изображение: 

7. Пакет стереометрии geom3

 

Пакет стереометрии geom3d

Набор функций пакета 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.

 

8. Пример применения пакета geom3d

 

Пример применения пакета geom3d

Учитывая сказанное, ограничимся единственным примером применения этого пакета (рис. 16.6).

Рис. 16.6. Иллюстрация применения пакета geom3d

Напоминаем, что цель пакета не в построении рисунков геометрических фигур, а в аналитическом представлении объектов в пространстве. Поэтому в обширной базе данных справочной системы по этому пакету вы встретите очень много рисунков.

 

35.gif

Изображение: 

9. Пакет для работы с алгебраическими кривыми algcurves

 

Пакет для работы с алгебраическими кривыми algcurves

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

 > restart;with(algcurves);

[Weierstrassform, differentials, genus, homogeneous, homology, integral_basis, isjiyperelliptic, j_invariant, monodromy,parametrization ,periodmatrix,plot_knot,puiseux, singularities ]

Ввиду важности функций пакета и их сравнительно небольшого числа приведем полную форму записи функций и их назначение:

  •  Weierstrassform(f ,x,y,x0,y0.opt) — вычисление нормальной формы для эллиптических или гиперболических алгебраических кривых;
  •  differentials(f, x, у, opt) — вычисление голоморфных дифференциалов алгебраических кривых;
  •  genus(f ,x,y,opt) — проверка подлинности алгебраической кривой;
  •  homogeneous (f, x, у, z) — создание полинома двух переменных, гомогенного в трех переменных;
  •  homo!ogy(f, x, у) — нахождение канонического гомологического базиса по алгоритму Треткоффа;
  •  integral_basis(f, x, у, S) — нахождение интегрального базиса алгебраического поля функции;
  •  is_hyperelliptic(f. х, у) — тестирование кривой на ее принадлежность к гиперболической;
  •  j_invariant(f ,x,y) — вычисление инварианта алгебраической кривой;
  •  monodromy(f, х, у, opt) — вычисляет монодромию алгебраической кривой;
  •  parametrization(f .x,y,.t) — нахождение параметризации для кривой с родом (даваемым функцией genuc), равным 0;
  •  periodmatrix(f, х, у, opt) — вычисление периодической матрицы кривой;
  •  plot_knot(f ,.x,.y,.opt) — построение узла — несамопересекающейся замкнутой кривой в трехмерном евклидовом пространстве;
  •  puiseux(f ,х=р,у,.n,.Т) — определение Пуизе- расширения алгебраической функции (может иметь и более простые формы записи);
  •  singularities(f ,x,y) — анализ кривой на сингулярность.

 

10. Примеры применения пакета algcurves

 

Примеры применения пакета algcurves

Приведем примеры применения функций пакета algcurves:

 

12.gif

Изображение: 

13.gif

Изображение: 

14.gif

Изображение: 

11. Построение алгебраических кривых класса knot

 

Построение алгебраических кривых класса knot

Функция plot_knot позволяет строить одну или несколько алгебраических кривых — узлов. Пример построения целого семейства узлов показан на рис. 16.7.

Рис. 16.7. Семейство узлов

Для лучшего обзора таких кривых рекомендуется воспользоваться возможностью вращения трехмерных фигур мышью для уточнения угла, под которым рассматривается фигура — в нашем случае семейство алгебраических кривых. Построение на рис. 16.7 выполняется довольно медленно — даже на компьютере с процессором Pentium III 600 МГц оно занимает около минуты.

 

36.gif

Изображение: 

12. Новая функция Maple 7 plot_real_curve

 

Новая функция Maple 7 plot_real_curve

В пакет расширения algcurves добавлена новая функция импликативной графики plot_real_curve. Она строит алгебраическую кривую для действительной части полиномиального выражения и записывается в виде:

plot_real_curve (p, х, у, opt)

Функция имеет следующие параметры:

    •  р — полиномиальное выражение переменных х и у задающее алгебраическую кривую;
    •  opt — параметр, который может быть записан в форме приведенных ниже выражений:
  • showArrows = true или false — задает показ стрелок касательных или перпендикулярных к точкам вдоль кривой (по умолчанию false);
  • arrowIntervalStep = posint — задает число точек, пропускаемых до показа очередной пары стрелок (по умолчанию 10);
  • arrowScaleFactor = positive — задает масштаб для длины стрелок (по умолчанию 1);
  • colorOfTangentVector = с — задает цвет касательных стрелок, по умолчанию заданный как зеленный, COLORCRGB,0,1,0);
  • colorOfNormalVector = с — задает цвет перпендикулярных стрелок, по умолчанию заданный как красный, COLOR (RGB ,1,0,0);
  • colorOf Curve = с — задает цвет кривой, по умолчанию заданный как синий, COLOR(RGB, 0, 0, 1);
  • eventTolerance = positive — задает погрешность при представлении сингулярных точек (по умолчанию 0,01);
  • NewtonTolerance = positive — задает погрешность при выполнении ньютоновских итераций в ходе построений.

Функция plot_real_curve вычисляет и строит алгебраическую кривую по точкам и может (при использовании параметра opt) строить стрелки-векторы по касательным и перпендикулярным направлениям к каждой точке или к части точек. Возможно задание разных цветов для кривой и стрелок. Применение функции plot_real_curve показывает рис. 16.8.

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

Рис. 16.8. Примеры применения функции plot_real_curve

 

37.gif

Изображение: 

13. Пакет функций теории графов networks

 

Пакет функций теории графов networks

Набор функций пакета 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. Теория графов используется достаточно широко даже при решении прикладных задач — например, для вычисления оптимальных маршрутов движения железнодорожных составов, наиболее целесообразной раскройки тканей и листов из различных материалов и т. д.

 

14. Примеры применения пакета networks

 

Примеры применения пакета networks

Рассмотрим некоторые избранные функции этого пакета, которые наиболее часто используются при работе с графами. Детали синтаксиса функций можно найти в справочной базе данных Maple 7.

Функции создания графов:

  •  new — создает пустой граф (без ребер и узлов);
  •   void — создает пустой граф (без ребер); 
  •  duplicate — создает копию графа; 
  •  complete — создает полный граф; 
  •  random — возвращает случайный граф; 
  •  petersen — создает граф Петерсена. Функции модификации графов: 
  •  addedges — добавляет в граф ребро;
  •  addvertex — добавляет в граф вершины; 
  •  connect — соединяет одни заданные вершины с другими;
  •   delete — удаляет из графа ребро или вершину. Функции контроля структуры графов:
  •   draw — рисует граф; 
  •  edges — возвращает список ребер графа; 
  •  vertices — возвращает список узлов графа; 
  •  show — возвращает таблицу с полной информацией о графе; .
  •   ends — возвращает имена вершин графа;
  •  head — возвращает имя вершины, которая является головой ребер;
  •  tail — возвращает ими вершины, которая является  хвостом ребер;
  •  incidence — возвращает матрицу инцидентности; 
  •  adjacency — возвращает матрицу смежности; 
  •  eweight — возвращает веса ребер; 
  •  weight — возвращает веса вершин;
  •  isplanar — упрощает граф, удаляя циклы и повторяющиеся ребра, и проверяет его на планарность (возвращает true, если граф оказался планарным, и false — в противном случае).

Функции с типовыми возможностями графов:

  •  flow — находит максимальный поток в сети от одной заданной вершины к другой; 
  •  shortpathtree — находит кратчайший путь в графе с помощью алгоритма Дейкстры.

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

На рис. 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. Пример вычисления максимального потока и наиболее коротких путей для заданного графа

 

39.gif

Изображение: 

41.gif

Изображение: 

43.gif

Изображение: 

44.gif

Изображение: 

15. Получение информации о графе

 

Получение информации о графе

Еще один пример, приведенный ниже, иллюстрирует работу функции show, выдающей таблицу с полной информацией о графе, созданном функцией complete:

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

 

15.gif

Изображение: 

16. Пакет статистических расчетов stats

 

Пакет статистических расчетов stats

Характеристика пакета stats

Мир математических систем сейчас насыщен статистическими системами, например такими, как Statistica или StatGraphics. Они прекрасно приспособлены для решения задач статистической обработки обширных массивов данных. Тем не менее проведение статистических расчетов в Maple 7 возможно и в ряде случаев весьма целесообразно — например, когда они являются частью исследовательского проекта.

Пакет stats для таких расчетов представлен всего двумя многоцелевыми статистическими функциями:

stats[subpackage, functionj(args)

  subpackage[function](args)

Однако благодаря специальной форме задания параметров (в частности, в виде подпакетов — subpackages) возможно вычисление самых разнообразных статистических функций. Имеются следующие подпакеты:

  •  anova — вариационный анализ;
  •  describe — функции распределения вероятности;
  •  fit — регрессионный анализ;
  •  random — генерация случайных чисел с различными законами распределения;
  •  statevalf — вычисление статистических функций и получение оценок для массивов данных;
  •  statplots — построение графиков статистических функций;
  •   transform — функции преобразования данных.

 

17. Генерация случайных чисел с заданным распределением

 

Генерация случайных чисел с заданным распределением

Основой этого подпакета является функция random:

random[distribution] (quantity,unifarm,method) 

или 

stats[random, distribution] (quantity,unifofm,method)

где 

  •  distribution — описание закона распределения случайных чисел;
  •  quantity — положительное число, указывающее на количество получаемых случайных чисел (по умолчанию 1, возможен параметр 'generator');
  •  uniform — процедура генерации чисел с равномерным распределением или
  • ключевое слово 'default' (по умолчанию);
  •   method — указание на один из трех методов ('auto', 'inverse' или 'builtin').

Возможно задание дискретных и непрерьвных распределений, например binomiald --дискретное биномиальное распределение, discreteumform — дискретное 'равномерное распределение, empirical — дискретное эмпирическое распределение, poisson — дискретное распределение Пуассона, beta — бета-распределение, cauchi — .распределение Коши, exponential — экспоненциальное и др. (есть функции практически для всех известных распределений).

Следующие примеры демонстрируют технику получения случайных чисел с заданным законом распределения;

 

16.gif

Изображение: 

18. Графика статистического пакета stats

 

Графика статистического пакета 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. Построение гистограмм

Обратите внимание на то, что для второго примера гистограмма будет несколько меняться от пуска к пуску, так как данные для ее построения генерируются случайным образом.

 

45.gif

Изображение: 

46.gif

Изображение: 

19. Регрессионный анализ

 

Регрессионный анализ

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

Для проведения регрессионного анализа служит функция 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.

 

17.gif

Изображение: 

47.gif

Изображение: 

20. Пакет для студентов student

 

Пакет для студентов student

Функции пакета student

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

В этом пакете имеется почти полсотни функций:

  •  D — дифференциальный оператор;
  •  Diff — инертная форма функции вычисления производной;
  •  Doubleint — инертная форма функции вычисления двойного интеграла;
  •  Int — инертная форма функции интегрирования int;
  •  Limit — инертная форма функции вычисления предела limit;
  •  Lineint — инертная форма функции вычисления линейного интеграла lineint;
  •  Point — тестирование объекта на соответствие типу точки (point);
  •  Product — инертная форма функции вычисления произведения членов последовательности;
  •  Sum — инертная форма функции вычисления суммы членов последовательности;
  •  Tripleint — инертная форма функции вычисления тройного интеграла;
  •  changevar — замена переменной;
  •  combine — объединение подобных членов;
  •  completesquare — вычисление полного квадрата (многочлена);
  •  distance — вычисление расстояния между точками;
  •  equate — создание системы уравнений из списков, таблицы, массивов;
  •  extreme — вычисление экстремума выражения;
  •  integrand — вывод подынтегрального выражения из-под знака инертного интеграла;
  •  intercept — нахождение точки пересечения двух кривых;
  •  intparts — интегрирование по частям;
  •  isolate — выделение подвыражения;
  •  leftbox — графическая иллюстрация интегрирования методом левых прямоугольников;
  •  leftsum — числовое приближение к интегралу левыми прямоугольниками;
  •  makeproc — преобразование выражения в процедуру Maple;
  •   maximize — вычисление максимума функции;
  •  middlebox — графическая иллюстрация интегрирования методом центральных прямоугольников;
  •  middlesum — числовое приближение к интегралу центральными прямоугольниками;
  •  midpoint — вычисление средней точки сегмента линии;
  •  minimize — вычисление минимума функции;
  •  powsubs — подстановка для множителей выражения;
  •  rightbox — графическая иллюстрация интегрирования методом правых прямоугольников;
  •  rightsum — числовое приближение к интегралу правыми прямоугольниками;
  •  showtangent — график функции и касательной линии;
  •  simpson — числовое приближение к интегралу по методу Симпсона;
  •  slope — вычисление и построение касательной к заданной точке функции;
  •  trapezoid — числовое приближение к интегралу методом трапеций;
  •  value — вычисление инертные функции.

 

21. Функции интегрирования пакета student.

 

Функции интегрирования пакета student

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

  •  Int(expr,x) — инертная форма вычисления неопределенного интеграла;
  •  Doubleint(expr,x,y,Domain) — вычисление двойного интеграла по переменным х и у по области Domain;
  •  Tripleint(expr,x,y,z) — вычисление тройного интеграла;
  •  intparts(f,u) — интегрирование по частям.

Ниже дан пример применения функции Tripleint пакета student:

Объективности ради надо отметить, что вычисление тройного интеграла с помощью функции Tripleint занимает много времени (около 20 с на компьютере с процессором Pentium II 350 МГц). 'Однако тот же результат (см. последний пример) получается за доли секунды при использовании тройного интегрирования с помощью функции int.

 

18.gif

Изображение: 

22. Иллюстративная графика пакета student

 

Иллюстративная графика пакета student

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

  •  leftbox(f(x), x=a..b, о)       или       leftbox(f(x), x=a..b, n, 'shading'=<color>, о);
  •  rightbox(f(x), x=a..b, о)     или       rightbox(f(x), x=a..b, n, о);
  •  middlebox(f(x), x=a..b, о)  или      middlebox(f(x), x=a..b, n, o);

Здесь f (x) — функция переменной х, х — переменная интегрирования, а — левая граница области интегрирования, b — правая граница области интегрирования, n — число показанных прямоугольников, color — цвет прямоугольников, о — параметры (см. ?plot,options).

Рис. 16.16. Примеры иллюстративной графики пакета student

В этих функциях прямоугольники строятся соответственно слева, справа и по середине относительно узловых точек функции f(x), график которой также строится. Кроме того, имеется функция для построения касательной к заданной точке х = а для линии, представляющей f(x):

showtangent (f(x), x  = а) 

Рисунок 16.16 показывает все эти возможности пакета student. Три вида графиков здесь построены в отдельных окнах.

Графические средства пакета student ограничены. Но они предоставляют как раз те возможности, которые отсутствуют в основных средствах построения графиков.

 

49.gif

Изображение: 

23. Пакет работы с тензорами tensor

 

Пакет для работы с тензорами 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} 

дает доступ к следующим функциям пакета:

  •  Christoffell — вычисление символов Кристоффеля первого рода;
  •   Christoffel2 — вычисление символов Кристоффеля второго рода;
  •   Einstein — возвращение тензора Эйнштейна;
  •  display_alJGR — описывает ненулевые компоненты всех тензоров и параметров, вычисленных командой tensorsGR (общая теория относительности);
  •  displayGR — описывает ненулевые компоненты конкретного тензора (общая теория относительности);
  •  Jacobian — Якобиан преобразования координат;
  •  Killng_eqns — вычисление компонентов для уравнений Киллинга (имеет отношение к симметриям пространства);
  •  LeviCivita — вычисление ковариантных и контрвариантных псевдотензоров Леви—Чивита;
  •  Lie_diff — вычисляет производную Ли тензора по отношению к контравариантному векторному полю;
  •  Ricci — тензор Риччи;
  •  Ricciscalar — скаляр Риччи;
  •  Riemann — тензор Римана;
  •  RiemannF — тензор кривизны Римана в жесткой системе отсчета;
  •  tensorsGR — вычисляет тензор кривизны в данной системе координат (общая теория относительности);
  •  Weyl — тензор Вейля;
  •  act — применяет операции к элементам тензора, таблицам вращений или кривизны;
  •  antisymmetrize — антисимметризация тензора по любым индексам; 
  •  change_basis — преобразование системы координат;
  •  commutator — коммутатор двух контравариантных векторных полей; 
  •  compare — сравнивает два тензора, таблицы вращений или кривизны; 
  •  conj — комплексное сопряжение;
  •  connexF — вычисляет связующие коэффициенты для жесткой системы координат;
  •  contract — свертка тензора по парам индексов;
  •  convertNP — преобразует связующие коэффициенты или тензор Римана к формализму Ньюмена—Пенроуза;
  •  cov_diff — ковариантное дифференцирование;
  •  create — создает тензорный объект;
  •  dlmetric — первая частная производная метрики;
  •  d2metric — вторая частная производная метрики;
  •  directional_diff — производная по направлению;
  •  dual — осуществляет дуальную операцию над индексами тензора;
  •  entermetric — обеспечивает ввод пользователем координатных переменных и ковариантных компонент метрического тензора;
  •  externor_diff— внешнее дифференцирование полностью антисимметричного ковариантного тензора;
  •  exterior_prod — внешнее произведение двух ковариантных антисимметричных тензоров;
  •  frame — задает систему координат, которая приводит метрические компоненты к диагональной сигнатурной матрице (с положительными или отрицательными единицами);
  •  geodesic_eqns — уравнение Эйлера—Лагранжа для геодезических кривых; 
  •  get_char — возвращает признак (ковариантный/контравариантный) объекта; 
  •  getcompts — возвращает компоненты объекта; 
  •  get_rank — возвращает ранг объекта;
  •  invars — инварианты тензора кривизны Римана (общая теория относительности);
  •  invert — обращение тензора второго ранга;
  •  lincom — линейная комбинация тензорных объектов;
  •  lower — опускает индексы;
  •  npcurve — компонента кривизны Ньюмена—Пенроуза в формализме Дебевера (общая теория относительности);
  •  npspin — компонент вращения Ньюмена—Пенроуза в формализме Дебевера (общая теория относительности);
  •  partial_diff — частная производная тензора;
  •  permute_indices — перестановка индексов;
  •  petrov — классификация Петрова тензора Вейля;
  •  prod — внутреннее и внешнее тензорные произведения;
  •  raise — поднятие индекса;
  •  symmetrize — симметризация тензора по любым индексам;
  •  transform — преобразование системы координат.

Примеры применения этого пакета можно найти в справочной базе данных системы. Пакет представляет интерес для физиков-теоретиков, работающих в области общей теории относительности и ее приложений/Для них (но не для большинства пользователей) приведенные данные полезны и понятны.

 

24. Пакет Domains.

 

Пакет 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. Пока же возможности доменов скорее выглядят как очередная экзотика, чем как реальное средство для оптимизации вычислений. Потребуется время, чтобы показать, что это не так.

 

25. Обзор пакетов узкого назначения

 

Обзор пакетов узкого назначения

Мы уже не раз обращали внимание читателя на выборочный характер описания системы Maple 7 в данной книге. Хотя она и является одной из самых полных книг по данной системе, книга не претендует на роль детального справочника по Maple 7: Более того, такого справочника в виде книги нет и, вероятно, учитывая быстрые темпы модернизации программы, так и не будет. Для подобного описания Maple пришлось бы подготовить многотомное издание, охватывающее практически все области математики.

Учитывая это, мы вынуждены отказаться от попытки описать ряд пакетов специального назначения. Такими пакетами интересуются серьезные специалисты в области математики и им (не без труда, разумеется) под силу разобраться с назначением функций таких пакетов и примерами их применения, приведенными в справочной системе Maple 7. В связи с выше сказаннным, мы ограничимся перечислением оставшихся неизученными пакетов.

 

26. Пакет функций теории чисел numtheory

 

Пакет функций теории чисел 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 число функций было уменьшено. Большинство функций этого пакета достаточно просты и заинтересовавшийся читатель вполне в состоянии провести их тестирование самостоятельно.

 

27. Пакет для работы с р-адическими числами padic

 

Пакет для работы с р-адическими числами 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 число функций этого пакета увеличено почти в четыре раза. Однако ввиду специфичности данных функций их изучение мы оставляем за читателем для самостоятельной работы.

 

28. Пакет для работы с гауссовыми целыми числами Gausslnt

 

Пакет для работы с гауссовыми целыми числами 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 и т. д. Функции этого пакета достаточно просты, так что ограничимся приведенными примерами. Гауссовы целые числа в большинстве научно-технических расчетов встречаются крайне редко. Так что этот пакет рассчитан на специалистов-математиков, работающих в области теории чисел.

 

29. Пакет алгебры линейных операторов Ore_algebra

 

Пакет алгебры линейных операторов 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] 

Этот пакет поддерживает решение задач в области алгебры линейных операторов.

 

30. Инструментальный пакет для линейных рекуррентных уравнений LREtools

 

Инструментальный пакет для линейных рекуррентных уравнений 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.

 

31. Пакет функций дифференциальных форм difforms

 

Пакет функций дифференциальных форм difforms

В пакете дифференциальных форм содержится следующий ряд функций:

> with(difforms);

 [&^, d, defform,formpart,parity, scalarpart, simpform, wdegree]

Демонстрационные материалы по применению этого пакета входят в поставку Maple 7.

 

32. Пакет для работы с рациональными производящими функциями genfunc

 

Пакет для работы с рациональными производящими функциями genfunc

В пакете genfunc, предназначенном для работы с производящими функциями, содержатся следующие средства: 

> with(genfunc);

[rgf_charseq, rgf_encode, rgf_expqnd, rgfjindrecur, rgfjiybrid,  rgfjiorm, rgf_pfrac, rgf_relate, rgf_sequence, rgf_simp, rgfjerm,termscale]

Эти функции представляют специальный интерес для пользователей, работающих в области теории чисел и рациональных функций.

 

33. Пакет операций для работы с конечными группами group

 

Пакет операций для работы с конечными группами 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.

 

34. Пакет для работы с симметрией Ли liesymm

 

Пакет для работы с симметрией Ли 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]

Эти функции достаточно специфичны и могут пригодиться лишь узким специалистам.

 

35. Пакет команд для решения уравнений SolveTools

 

Пакет команд для решения уравнений SolveTools

Пакет команд с весьма многообещающим названием SolveTools на самом деле содержит вовсе не средства для решения уравнений, а несколько весьма специфических функций:

> with(SolveTools):

[Basis, Complexity, GreaterComplexity, RationalCoefficients, SortByComplexity]

Функции этого пакета позволяют найти базис выражений, дескрипторы и рациональные коэффициенты. Примеры применения этого пакета очень просты, и с ними несложно ознакомиться. Однако при этом возникает вопрос «Зачем это надо?», который (увы!) остается без ответа.

 

36. Пакет для работы с таблицами Spread.

 

Пакет для работы с таблицами Spread

Загрузка этого пакета дает средства для работы с таблицами:

> with(Spread);

{CopySelection, CreateSpreddsheet,, EvaluateCurrentSelection, EvahiateSpreadsheet,

GetCellFormula, GetCellVabe, GetFormulaeMatrix, GetMaxCok,      GetMaxRows, GetSelection, GetValuesMatrix,        lnsertMatrixIntoSelection , IsStale, SetCellFormula,             SetMatrix, SetSelection]

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

 

37. Пакет генерации кодов codegen

 

Пакет генерации кодов 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 и транслировать их в программные модули, записанные на других языках программирования, таких как Фортран или Си.

 

38. Пакет создания контекстных меню context

 

Пакет создания контекстных меню context

Пакет context служит для создания контекстных меню. Он содержит небольшое число функций:

> with(context):

[buildcontext, clearlabels, defaultcontext,

display, installcontext, restoredefault, 

testactions, troubleshoot]

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

 

39. Пакет организации многопроцессорной работы process

 

Пакет организации многопроцессорной работы process )

Этот узкоспециализированный пакет содержит ряд функций по организации работы на нескольких процессорах:

> with(process):

[block, ey.ec, fork, kill, pclose, pipe, popen, wait ]

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

 

40. Новые пакеты системы Maple 7

 

Новые пакеты системы 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]

Большинство функций этого пакета достаточно просты и даже очевидны. В связи с этим ограничимся несколькими характерными примерами их применения:

 

19.gif

Изображение: 

41. Пакет для работы с рядами ортогональных многочленов OrthogonalSeries.

 

Пакет для работы с рядами ортогональных многочленов 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:

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

 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

23.gif

Изображение: 

24.gif

Изображение: 

42. Пакет поддержки стандарта MathML

 

Пакет поддержки стандарта 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 функций, что позволяет разобрать их достаточно детально. Первые три функции служат для экспорта выражений:

  •  Export(expr) — преобразует Maple-выражение ехрr в параллельное MathML-выражение;
  •  ExportContent (expr) — преобразует Maple-выражение ехрr в MathML-выра-жение в формате содержания;
  •  ExportPresentation (ехрr) -преобразует Maple-выражение expr в MathML-выражение в формате представления.

Еще две функции служат для импорта строки в формате 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>&InvisibleTimes;</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 обычных математических выражений, что делает доступной для обычных пользователей подготовку публикации в Интернете, содержащей математические выражения.

 

43. Пакет XMLTools

 

Пакет ХМ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>&InvisibleTimes;</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>

 

44. Пакет создания внешних программ ExternatCaUing

 

Пакет создания внешних программ ExternalCalling

Пакет ExternalCalling служит для создания внешних программ, записанных на языке Maple (или C++). Состав пакета представлен небольшим числом функций:

  •  DefineExternal(fn,extlib) — используя функцию define_external, Maple 7 задает внешнюю функцию fn в таблице функций внешних библиотек extlib;
  •  External LibraryName (basename, precision) — задает имя basename функции и точность вычислений precision для функции внешней библиотеки.

Детальное знакомство с этим пакетом мы опускаем. Заинтересованный читатель найдет нужные сведения в справке по этому пакету.

 

45. Пакет линейных операторов LinearOperators

 

Пакет линейных операторов Linear-Operators

Пакет линейных операторов LmearOperators — новый пакет, содержащий средства для работы с линейными операторами. Состав пакета виден из его вызова:

> with(LinearOperators);

[Apply, DEToOrePoly, FactoredAnnihilator, FactoredGCRD,

FactoredMinimalAnnihilator,FactoredOrePolyToDE,   FactoredOrePolyToOrePoly, FactoredOrePolyToRE,               IntegrateSols, MinimalAnnihilator, OrePolyToDE,                OrePofyToRE, REToOrePoly, dAlembertianSolver}

Набор функций пакета достаточно представителен. Но, поскольку область применения пакета весьма специфична, рекомендуется знакомиться с его возможностями по справкам на его функции и обзорной статье по нему, имеющейся в обзоре новых пакетов расширения Maple 7 (также размещенной в справочной базе данных пакета).

 

46. Пакет для работы со случайными объектами RandomTools

 

Пакет для работы со случайными объектами 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, описанному в этом уроке выше.

 

25.gif

Изображение: 

26.gif

Изображение: 

47. Пакет для работы со списками ListTools

 

Пакет для работы со списками 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.

 

48. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Применять пакет решения задач оптимизации simplex.
  •  Использовать пакет двумерной геометрии geometry.
  •  Избранно применять пакет трехмерной геометрии geom3d.
  •  Использовать пакет для работы с алгебраическими кривыми algcurves.
  •  Строить и модернизировать графы с помощью пакета networks.
  •  Использовать возможности пакета статистических расчетов stats.
  •  Применять пакет для студентов student.
  •  Использовать средства поддержки MathML.
  •  Использовать средства ряда новых пакетов Maple 7.

 

Урок 17. Примеры решения научно-технических задач

1. Небольшое введение

 

Урок 17.

Примеры решения научно-технических задач

 

Небольшое введение

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

Многие читатели полагают, что системы компьютерной математики хорошо работают на таких простых примерах, но от них мало толку при решении реальных задач математики, физики или радиоэлектроники. Это, конечно, заблуждение. Дело просто в том, что при решении таких задач руководящая роль пользователя сильно возрастает. Вы должны понимать, что не Maple 7 решает вашу задачу, а вы! И система Maple 7 лишь помогает в этом трудном деле. Так что при неудачах в решении своих специфических задач следует прежде всего пенять на себя и на свое незнание возможностей системы Maple 7, а вовсе не на свою помощницу.

В том, что Maple можно успешно использовать при решении вполне конкретных научных и практических задач, призваны убедить примеры, приведенные ниже. Разумеется, и их нельзя отнести к таким сложнейшим задачам, как проектирование ядерного реактора или расчет траектории полета космического корабля, — не стоит забывать, что такие расчеты делают на суперкомпьютерах, а не на домашнем компьютере, который стоит перед вами. И объем материалов по сопровождению и результатам таких расчетов многократно превосходит объем всей этой книги. Тем не менее в этом уроке вы встретите решение вполне реальных и полезных задач в области математики, физики и радиоэлектроники. Почему не в механике, гидродинамике или в оптике? Да потому, как верно сказал наш народный пророк Козьма Прутков: «нельзя объять необъятное». Приведенные примеры отчасти обусловлены личными пристрастиями автора, но они полезны каждому пользователю, желающему всерьез оценить возможности Maple 7.

Описанные в этом уроке задачи являются реальными документами, созданными и отлаженными в среде Maple 7 и лишь затем перенесенными в рукопись книги. Так что они заодно служат примерами того, как надо оформлять такие документы. В то же время от некоторых «излишеств» оформления (например, закрывающихся и открывающихся секций) мы отказались, дабы не усложнять описание документов явно второстепенными деталями. Начнем этот урок с решения весьма актуальной для многих областей применения математики задачи — аппроксимации сложной функции.

 

2. Выбор аппроксимации для сложной функции

 

Выбор аппроксимации для сложной функции

Задание исходной функции и построение ее графика

Трудно представить себе область более широкую и>й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] и требовала, по возможности, наименьшего числа арифметических операций для каждого вычисления. Втайне не вредно помечтать о том, чтобы после аппроксимации время вычислений уменьшилось бы хотя в несколько раз. Что получится на деле, вы увидите чуть позже. А пока войдем в дебри аппроксимации.

 

1.gif

Изображение: 

2.gif

Изображение: 

3. Аппроксимации рядом Тейлора

 

Аппроксимации рядом Тейлора

Начнем с аппроксимации функции хорошо известным рядом Тейлора степени 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

Итак, в самом начале наших попыток мы потерпели полное фиаско. Но отчаиваться не стоит, ибо, как говорят, «даже у хорошей хозяйки первый блин — комом».

 

3.gif

Изображение: 

4.gif

Изображение: 

5.gif

Изображение: 

4. Паде-аппроксимация

 

Паде-аппроксимация

Теперь опробуем рациональную аппроксимацию Паде (Fade) функции f(x) степени (4,4). Приближения по этому разложению будут аппроксимировать функцию более точно, и потому ошибки округления в вычислениях станут более заметными. Поэтому зададим еще два дополнительных знака для точности вычислений.

Кривая ошибки для интервала [0, 4] строится командой:

и имеет вид, показанный на рис. 17.3.

Рис. 17.3. Кривая погрешности при Паде- аппроксимации степени (4,4)

Как и при аппроксимации рядом Тейлора, ошибка здесь мала вблизи точки разложения и велика вдали от нее. Мы снова видим из графика, что для указанной функции, самая большая ошибка — в левой оконечной точке. Однако максимальная ошибка в Паде- аппроксимации уже на порядок меньше, чем при аппроксимации полиномом Тейлора:

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

 

6.gif

Изображение: 

7.gif

Изображение: 

8.gif

Изображение: 

9.gif

Изображение: 

5. Аппроксимация полиномами Чебышева

 

Аппроксимация полиномами Чебышева

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

Разложим функцию f(x) на [0, 4] в ряд Чебышева с точностью 1*10-8. Это означает, что все члены с коэффициентами меньше чем эта величина, будут опущены. Такая точность обеспечивается полиномом 13 степени:

Можно проверить для этого примера, что кривая ошибки при аппроксимации рядом Чебышева колеблется. Поскольку ряд Чебышева был оборван на члене 8-й степени (как и полином ряда Тейлора), то максимальная ошибка оказалась равной приблизительно 0,6* 10-5. Эта величина уже на два порядка меньше, чем ошибка при Паде- аппроксимации, вычисленная выше. Но все же немного не дотягивает до наших требований.

Для последующих вычислений полезно заметить, что мы можем использовать процедуру для нахождения численных значений f(x), которая будет намного эффективнее, чем прямое определение, которое требует численного интегрирования для каждого значениях. А именно определим процедуру численной оценки, основанную на разложении в ряд Чебышева степени 13, так как максимальная ошибка  при такой аппроксимации меньше чем 10~8, и обеспечивает для нашей цели достаточную точность. Мы определим полином Чебышева Т(х) из пакета orthopoly и затем для эффективной оценки преобразуем его в форму Горнера:

Схема Горнера минимизирует число арифметических операций, заменяя операции возведения в степень операциями последовательного умножения.

 

10.gif

Изображение: 

11.gif

Изображение: 

6. Аппроксимация Чебышева-Паде

 

Аппроксимация Чебышева-Паде

Теперь рассмотрим еще более точную рациональную аппроксимацию Чебышева-Паде. Это такая рациональная функция 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

Мы достигли впечатляющего успеха и остается сделать еще один шаг в направлении повышения точности аппроксимации.

 

12.gif

Изображение: 

13.gif

Изображение: 

7. Минимаксная аппроксимация

 

Минимаксная аппроксимация

Классический результат теории аппроксимации заключается в том, что минимакс как наилучшая аппроксимация рациональной функции степени (т, п) достигается, когда кривая ошибки имеет 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. График ошибки при минимаксной аппроксимации

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

 

14.gif

Изображение: 

15.gif

Изображение: 

8. Эффективная оценка рациональных функций

 

Эффективная оценка рациональных функций

Полиномы числителя и знаменателя в минимаксной аппроксимации уже выражены в форме Горнера (то есть в форме вложенного умножения). Оценка полиномом степени п в форме Горнера при n-умножениях и n-суммированиях — это наиболее эффективная схема оценки для полинома в общей форме. Однако для рациональной функции степени (т, п) мы можем делать кое-что даже лучше, чем просто представить выражения числителя и знаменателя в форме Горнера. Мы можем нормализовать рациональную функцию так, что полином знаменателя будет со старшим коэффициентом, равным 1. Мы можем также заметить, что вычисление рациональной функции степени (т, п) в форме Горнера требует выполнения все m+n сложений , m+n-1 умножений и 1 деления. Другими словами, общий индекс действия есть:

  •  m+n операций умножения/деления; 
  •  m+n операций сложения/вычитания.

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

  •  max(m,n) операций умножения/деления;
  •   m+n операций сложения/вычитания.

Например, если 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))))

 

9. Сравнение времен вычислений

 

Сравнение времен вычислений

Теперь определим время, необходимое для вычисления функции/(л:) в 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 раз быстрее процедуры с использованием исходного интегрального определения. Это просто феноменальный успех, полностью оправдывающий время, потерянное на предварительные эксперименты по аппроксимации и ее оптимизации! Разумеется, при условии, что вы будете применять эту аппроксимацию многократно.

 

10. Преобразование в код Фортрана или С

 

Преобразование в код Фортрана или С

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

Итак, нами показано, что правильный выбор аппроксимации для сложной функции обеспечивает уменьшение времени ее вычисления более чем на два порядка (!) при весьма приличной точности в б верных знаков и при использовании для вычислений минимального числа арифметических операций. Применение при этом средств системы Maple 7 позволяет генерировать разложения в различные ряды, быстро вычислять рациональные аппроксимации функций и выполнять преобразования в различные специальные формы, сочетая это с мощными средствами интерактивной работы и графической визуализации, в частности с построением графиков функции и кривых ошибок при разных видах аппроксимации. Все это обеспечивает идеальную среду для решения таких задач.

 

16.gif

Изображение: 

11. Моделирование физических явлений

 

Моделирование физических явлений

Расчет траектории камня с учетом сопротивления воздуха

Вы хотите метнуть камень в огород вашего вредного соседа? Разумеется, во время его отсутствия. Давайте промоделируем эту ситуацию, предположив два актуальных случая: дело происходит на Луне и на Земле. В первом случае сопротивления воздуха (как и его самого) нет, а в другом — сопротивление воздуха есть и его надо учитывать. Иначе камень упадет в ваш огород, а не в огород соседа!

Итак, пусть подвернувшиеся под руку камни с массой 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 г

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

 

17.gif

Изображение: 

18.gif

Изображение: 

19.gif

Изображение: 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

23.gif

Изображение: 

12. Движение частицы в магнитном поле

 

Движение частицы в магнитном поле

От реального мира перейдем к микромиру. Пусть микрочастица массой 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) системы из трех уравнений:

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

 

24.gif

Изображение: 

25.gif

Изображение: 

26.gif

Изображение: 

13. Разделение изотопов

 

Разделение изотопов

Рассмотрим еще одну классическую задачу ядерной физики — разделение изотопов (атомов с одинаковым зарядом ядра, но разной массой). Для этого используют различные способы. В частности, это может быть масс-спектроскопический метод. Из точки А вылетают однозарядные ионы (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) наглядно показывают на одну из возможностей разделения изотопов. Как говорится, осталось подставить «стаканчик» в нужное место для ловли нужных изотопов. Разумеется, это только изложение идеи одного из методов разделения изотопов. Увы, на практике приходится использовать сложнейшие и дорогие физические установки для решения этой актуальной задачи.

 

27.gif

Изображение: 

28.gif

Изображение: 

29.gif

Изображение: 

30.gif

Изображение: 

31.gif

Изображение: 

14. Моделирование рассеивания альфа-частиц

 

Моделирование рассеивания альфа- частиц

Одним из фундаментальных доказательств существования ядра у атомов стал опыт с бомбардировкой тонкой фольги из металла альфа- частицами с высокой энергией. Если бы «массивных» ядер не существовало, то альфа- частицы должны были бы спокойно пролетать сквозь тонкую фольгу, практически не отклоняясь. Однако, как физики и ожидали, некоторая часть частиц испытывала сильное отклонение и даже поворачивала назад. Очевидно, что имели место отскоки (упругие столкновения) с малыми, но массивными ядрами металла фольги.

В нашем распоряжении, увы (а может быть и к счастью), нет ускорителя альфа- частиц. Так что мы, не опасаясь облучения и очередной Чернобыльской катастрофы, сможем смоделировать это интереснейшее физическое явление с помощью математической системы 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. Траектории движения альфа- частиц вблизи ядра атома

 

32.gif

Изображение: 

33.gif

Изображение: 

15. Моделирование и расчет электронных схем

 

Моделирование и расчет электронных схем

Нужно ли применять Maple для моделирования и расчета электронных схем?

Нужно ли применять системы компьютерной математики для анализа, расчета и моделирования электронных схем? Ответ на этот вопрос не так прост, как кажется с первого взгляда. С одной стороны, к услугам пользователя компьютера сейчас имеется ряд программ схемотехнического моделирования, например Micro-CAP, Electronics Workbench, PSpice, Design Labs и др., автоматически составляющих и решающих большие системы уравнений состояния электронных схем и моделирующих работу бесчисленного множества электронных схем без кропотливого «ручного» составления уравнений.

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

 

16. Малосигнальный анализ усилителя на полевом транзисторе

 

Малосигнальный анализ усилителя на полевом транзисторе

Рассмотрим классический усилительный каскад на полевом транзисторе, схема которого приведена на рис. 17.12, а. Его эквивалентная малосигнальная схема представлена на рис. 17.12, б.

a

б

Рис. 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. Амплитудно-частотная характеристика с выделенными точками граничных частот

 

34.gif

Изображение: 

36.gif

Изображение: 

37.gif

Изображение: 

38.gif

Изображение: 

39.gif

Изображение: 

40.gif

Изображение: 

41.gif

Изображение: 

42.gif

Изображение: 

17. Расчет аналогового фильтра на операционном усилителе

 

Расчет аналогового фильтра на операционном усилителе

Теперь рассмотрим проектирование аналогового полосового фильтра на операционном усилителе, схема которого приведена на рис. 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. ФЧХ фильтра на операционном усилителе

 

43.gif

Изображение: 

44.gif

Изображение: 

45.gif

Изображение: 

46.gif

Изображение: 

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. Спектрограмма выходного сигнала цифрового фильтра

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

 

47.gif

Изображение: 

48.gif

Изображение: 

49.gif

Изображение: 

50.gif

Изображение: 

51.gif

Изображение: 

52.gif

Изображение: 

53.gif

Изображение: 

54.gif

Изображение: 

19. Моделирование цепи на туннельном диоде

 

Моделирование цепи на туннельном диоде

А теперь займемся моделированием явно нелинейной цепи. Выполним его для цепи, которая состоит из последовательно включенных источника напряжения 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

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

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

 

55.gif

Изображение: 

56.gif

Изображение: 

57.gif

Изображение: 

58.gif

Изображение: 

20. Применение интеграла Дюамеля для расчета переходных процессов

 

Применение интеграла Дюамеля для расчета переходных процессов

Вернемся к линейным цепям и рассмотрим еще один полезный метод расчета электрических цепей — с помощью интеграла Дюамеля. При нем можно рассчитать временную зависимость выходного напряжения 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). Они показаны внизу графика.

 

21. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  •  Оценивать возможности Maple 7 в решении конкретных прикладных задач.
  •  Выбирать аппроксимацию для сложной функции по заданной точности.
  •  Моделировать различные физические явления (полет камня, движение частицы в магнитном поле и др.).
  •  Моделировать и проектировать различные электронные схемы (усилителя, аналогового и цифрового фильтра, нелинейной цепи на туннельном диоде).
  •  Применять интеграл Дюамеля для расчета переходных процессов в линейных цепях.


Урок 9. Анализ функций и полиномов.

1. Анализ функций

 

Урок 9.

Анализ функций и полиномов.

 

Анализ функций

Поиск экстремумов функций

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

С помощью функции 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 часто отказывается работать и просто повторяет запись обращения к ней.

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

2. Поиск минимумов и максимумов аналитических функций

 

Поиск минимумов и максимумов аналитических функций

Часто нужно найти минимум или максимум заданной функции. Для поиска минимумов и максимумов выражений (функций) ехр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 справляется с данной тестовой функцией, вовсе не означает, что трудности в поиске минимума или максимума других функций остаются позади.

 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

3. Анализ функций на непрерывность

 

Анализ функций на непрерывность

Для исследования функций на непрерывность 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

Рекомендуется внимательно присмотреться к результатам этих примеров и опробовать свои собственные примеры.

 

4. Определение точек нарушения непрерывности

 

Определение точек нарушения непрерывности

Функции, не имеющие непрерывности, доставляют много хлопот. Поэтому важным представляется анализ функций на непрерывность. В 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. Если вывод с такими переменными уже применялся, то их текущие номера могут казаться произвольными. Специальные переменные часто используются для упрощения выводимых выражений.

 

5. Нахождение сингулярных точек функции

 

Нахождение сингулярных точек функции

Многие операции, такие как интегрирование и дифференцирование, чувствительны к особенностям функций, в частности к их разрывам и особым точкам. Функция singular (ехрr, vars) позволяет найти особые (сингулярные) точки выражения ехрг, в которых она испытывает разрывы. Дополнительно в числе параметров может указываться необязательный список переменных.

Примеры применения этой функции приведены ниже:

 

7.gif

Изображение: 

6. Вычисление асимптотических и иных разложений

 

Вычисление асимптотических и иных разложений

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

asympt(f.x)     asympt(f,x,n).

Здесь f — функция переменной х или алгебраическое выражение; х — имя переменной, по которой производится разложение; n — положительное целое число (порядок разложения, по умолчанию равный 6). Ниже представлены примеры применения этой функции:

 

 

8.gif

Изображение: 

9.gif

Изображение: 

7. Пример анализа сложной функции

 

Пример анализа сложной функции

Ниже мы рассмотрим типичный анализ достаточно «сложной» функции, имеющей в интересующем нас интервале изменения аргумента х от -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

Нетрудно заметить, что функция имеет два очень близких (но различных) корня прих, близких к нулю.

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

Анализ функции на непрерывность, наличие ее нарушений и наличие сингулярных точек

 

a

б

в

Рис. 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 будет описана процедура, которая автоматизирует процесс анализа не очень сложных функций и обеспечивает его наглядную визуализацию.

 

10.gif

Изображение: 

13.gif

Изображение: 

8. Функции из отдельных кусков

 

Функции из отдельных кусков

Создание функций из отдельных кусков

Для создания функций, составленных из отдельных кусков, 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. Простые примеры применения функции piecewise

 

Простые примеры применения функции piecewise

Рисунок 9.3 показывает задание функции f(x), содержащей три характерных участка. По определенной через функцию пользователя зависимости f(x) можно, как обычно, построить ее график.

Рис. 9.3. Пример задания и применения функции, составленной из отдельных кусков

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

 

10. Работа с функциями piecewise

 

Работа с функциями piecewise

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

Ниже приведен пример задания функции f в аналитической форме:

Для выявления характера функции воспользуемся функцией convert и создадим объект g в виде кусочной функции:

Выполним дифференцирование и интегрирование функции:

Как нетрудно заметить, результаты получены также в виде кусочных функций. Можно продолжить работу с функцией f и выполнить ее разложение в степенной ряд: 

> series(f, х);

-1+.Х + О(x6)

Чтобы убрать член с остаточной погрешностью, можно выполнить эту операцию следующим образом:

> series(g, x);

-1 + х

Обратите внимание на то, что поскольку разложение в ряд ищется (по умолчанию) в окрестности точки х=0, то при этом используется тот кусок функции, в котором расположена эта точка. Читатель может продолжить работу с кусочными функциями и далее.

 

15.gif

Изображение: 

16.gif

Изображение: 

17.gif

Изображение: 

11. Операции с полиномами

 

Операции с полиномами

Определение полиномов

К числу наиболее известных и изученных аналитических функций относятся степенные многочлены — полиномы. Графики полиномов описывают огромное разнообразие кривых на плоскости. Кроме того, возможны рациональные полиномиальные выражения в виде отношения полиномов. Таким образом, круг объектов, которые могут быть представлены полиномами, достаточно обширен, и полиномиальные преобразования широко используются на практике, в частности, для приближенного представления других функций.

Под полиномом в системе Maple 7 понимается сумма выражений с целыми степенями. Многочлен для ряда переменных —многомерный полином. К одномерным полиномам относятся степенной многочлен:

а также отдельная переменная х и константа. Большое достоинство полиномов состоит в том, что они дают единообразное представление многих зависимостей и для своего вычисления требуют только арифметических операций (их число значительно сокращается при использовании хорошо известной схемы Горнера). Производные от полиномов и интегралы с подынтегральными функциями-полиномами легко вычисляются и имеют простой вид. Есть и достаточно простые алгоритмы для вычисления всех (в том числе комплексных) корней полиномов на заданном промежутке.

 

12. Выделение коэффициентов полиномов

 

Выделение коэффициентов полиномов

Для выделения коэффициентов полиномов в Maple 7 служат следующие функции:

  •   coeff(p, х) — возвращает коэффициент при х полинома р; 
  •  coeff(p.x.n) — возвращает коэффициент для члена со степенью n полинома р;
  •   coeff(p.x^n) — возвращает коэффициенты при х^n полинома р;
  •  coeffs(p, х, 't') — возвращает коэффициенты полинома нескольких переменных, относящиеся к переменной х (или списку переменных) с опцией ' t', задающей имя переменной;
  •  collect(p,x) — возвращает полином, объединяя коэффициенты при степенях переменной х.

Ниже даны примеры применения этих функций:

 

 ПРИМЕЧАНИЕ 

Следует обратить внимание на то, что при выполнении операции collect в прежних версиях Maple довольно часто возникала фатальная ошибка. Как видно из приведенных примеров, в Maple 7 такой ошибки уже не возникает.

 

19.gif

Изображение: 

13. Оценка коэффициентов полинома по степеням

 

Оценка коэффициентов полинома по степеням

Полином может быть неполным, то есть не содержать членов со степенями ниже некоторой. Функция 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:

 

20.gif

Изображение: 

14. Оценка степеней полинома

 

Оценка степеней полинома

Функция 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:

 

21.gif

Изображение: 

15. Разложение полинома на множители

 

Разложение полинома на множители

Для контроля того, имеет ли полином несокращаемые множители, может использоваться функция irredik(p) и ее вариант в инертной форме Ireduc(p.K), где К — RootOf-выражение. Ниже приведены примеры применения этих тестовых функций:

 

22.gif

Изображение: 

16. Разложение полинома по степеням

 

Разложение полинома по степеням

Для разложения полинома р по степеням служат инертные функции 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:

Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.

 

23.gif

Изображение: 

17. Вычисление корней полинома

 

Вычисление корней полинома

Для вычисления действительных и комплексных корней полиномов служит уже известная нам функция solve(p.x), возвращающая список корней полинома р одной переменной. Кроме того, имеются следующие функции для вычисления корней полиномов:

roots(p) ,            roots(p. К) , 

roots(p. x),          roots(p. x. К)

Эти функции вычисляют точные корни в рациональной или алгебраической области чисел. Корни возвращаются в виде [ [rl.ml], .... [rn.mn] ], где ri — это

корень полинома, a mi — порядковый номер полинома. С действиями этих функций можно разобраться с помощью приведенных ниже примеров:

 

24.gif

Изображение: 

18. Основные операции с полиномами

 

Основные операции с полиномами

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

  •  psqrt(p) — возвращает квадрат полинома;
  •  proot(p.n) — возвращает n -ю степень полинома;
  •  realroot(p) — возвращает интервал, в котором находятся действительные корни полинома;
  •  randpolyCvars, eqns) — возвращает случайный полином по переменным vans (список) с максимальной степенью eqns;
  •  discrim(p,var) — вычисление дискриминанта полинома по переменной var;
  •  Primitive(a) mod p — проверка полинома на примитивность (возвращает true, если полином примитивен).

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

 

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

С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:

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

 

 

25.gif

Изображение: 

26.gif

Изображение: 

27.gif

Изображение: 

28.gif

Изображение: 

19. Операции над степенными многочленами с отрицательными степенями

 

Операции над степенными многочленами с отрицательными степенями

Хотя в подавляющем большинстве случаев используются степенные многочлены (полиномы) с положительными степенями, Maple 7 не накладывает особых ограничений и на многочлены с отрицательными степенями. Например, можно задать такой степенной многочлен:

Нетрудно показать, что с ним можно выполнять различные операции:

ПРИМЕЧАНИЕ

 Maple 7 не накладывает ограничений на применение степенных многочленов (полиномов) с отрицательными степенями. Однако свойства таких полиномов заметно отличаются от свойств полиномов с положительными степенями, поэтому при применении первых надо проявлять известную осторожность.

 

29.gif

Изображение: 

30.gif

Изображение: 

20. Интерполяция и аппроксимация функциональных зависимостей.

 

Интерполяция и аппроксимация функциональных зависимостей

Интерполяция, экстраполяция и аппроксимация

Вычисление многих функций, особенно специальных, требует больших затрат времени. Поэтому до сих пор широко применяются таблицы таких функций. Достаточно отметить знаменитые на весь мир таблицы в книге «Справочник по специальным функциям с формулами, графиками и таблицами» под редакцией М. Абрамовица и И. Стиган [59].

Если некоторая зависимость у(х) представлена рядом табличных отсчетов y(x), то интерполяцией принято называть вычисление значений у(х) при заданном х, расположенном в интервале между отсчетами. За пределами общего интервала определения функции [а,b], то есть при х < а и х > b, вычисление у(х) называют экстраполяцией (или иногда предсказанием значений функции). В данном случае речь идет об одномерной интерполяции, но возможны двумерная интерполяция функций двух переменных z(x, у) и даже многомерная интерполяция для функций многих переменных.

Интерполяция и экстраполяция часто выполняются по некоторой скрытой, но подразумеваемой зависимости. Например, если узловые точки функции соединить отрезками прямых, то будем иметь многоинтервальную линейную интерполяцию данных. Если использовать отрезки параболы, то интерполяция будет параболической. Особое значение имеет многоинтервальная сплайн-интерполяция, области применения которой уже сейчас весьма обширны и непрерывно расширяются. Интерполяция рядом Фурье (набором синусоидальных функций) также достаточно хорошо известна; она эффективна при интерполяции периодических функций.

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

Здесь мы будем рассматривать такие виды аппроксимации, которые дают точные значения функции у(х) в узловых точках в пределах погрешности вычислений по умолчанию. Если аппроксимирующая зависимость выбирается из условия наименьшей среднеквадратической погрешности в узловых точках (метод наименьших квадратов), то мы имеем регрессию или приближение функций по методу наименьших квадратов.

 

21. Аппроксимация аналитически заданных функций

 

Аппроксимация аналитически заданных функций

Если функция задана аналитически, то наиболее простым способом нахождения ее аппроксимирующей зависимости является применение функции convert. Это поясняют следующие примеры:

На рис. 9.4 представлен пример полиномиальной аппроксимации хорошо известной статистической функции erfc(x). Для полинома задана максимальная степень 12, но ввиду отсутствия в разложении четных степеней максимальная степень результата оказывается равна 11.

Рис. 9.4. Пример полиномиальной аппроксимации функции erfc(x)

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

 

31.gif

Изображение: 

32.gif

Изображение: 

22. Полиномиальная интерполяция табличных данных

 

Полиномиальная интерполяция табличных данных

Если данные некоторой зависимости у(х) заданы векторами 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. Пример осуществления полиномиальной аппроксимации

 

33.gif

Изображение: 

34.gif

Изображение: 

23. Сплайн-интерполяция и аппроксимация

 

Сплайн-интерполяция и аппроксимация

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

Наглядно сплайн-функцию можно представить в виде гибкой стальной линейки, закрепленной в узловых точках и плавно изгибающейся. Благодаря указанным свойствам сплайнов они неплохо описывают функции, представленные как небольшим числом узловых точек (благодаря плавности сплайн- кривых), так и функции, представляемые очень большим числом узловых точек (поскольку порядок полиномов от этого числа уже не зависит). Недостатком сплайн- аппроксимации является отсутствие общего выражения для всей кривой. Фактически приходится использовать набор сплайн- функций для различных интервалов между узловыми точками.

Для получения сплайн- интерполяций используется 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.

 

35.gif

Изображение: 

24. Прямое и обратное Z-преобразования

 

Прямое и обратное Z-преобразования

Прямое и обратное Z-преобразования функций широко используются при решении задач автоматического управления. Эти преобразования задаются следующими функциями:

  •  ztrans(f, n, z) — прямое преобразование функции f(n) в f(z);
  •   invztransCf, z, n) — обратное преобразование f(z) в f(n).

Заметим, что прямое Z-преобразование базируется на соотношении ztrans(f (n) ,n,z)= = sum(f(n)/z~n,n=0. .infinity), записанном на Maple-языке. В первых версиях системы Maple Z-преобразования выполнялись средствами библиотеки и требовали вызова командой readlib(ztrans). Но в Maple 7 они включены в ядро системы и предварительного вызова уже не требуют. В этом убеждают следующие примеры:

Родственные Z-преобразованиям интегральные преобразования Лапласа и Фурье реализуются с помощью пакета inttrans (интегральные преобразования).

 

36.gif

Изображение: 

25. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

 Выполнять поиск экстремумов функций.

  •  Осуществлять поиск минимумов и максимумов аналитических функций.
  •  Анализировать функции на непрерывность.
  •  Находить сингулярные точки функций.
  •  Вычислять асимптотические и иные разложения.
  •  Анализировать сложные функции.
  •  Работать с кусочными функциями.
  •  Выполнять операции с полиномами.
  •  Интерполировать и аппроксимировать функциональные зависимости.
  •  Вычислять прямые и обратные Z-преобразования.

 

Заключение

 

Заключение

Программа 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

Самоучитель по 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

1. Урок 1. Знакомство с матричной лабораторией MATLAB

 

Урок №1.

Знакомство с матричной лабораторией MATLAB

  • История появления системы MATLAB 
  •  Возможности систем MATLAB
  • Интеграция с другими программными системами
  • Ориентация на матричные операции
  • Расширяемость системы
  • Мощные средства программирования
  • Визуализация и графические средства
  • Техническая документация по системе
  • MATLAB в Интернете
  • Данные о системных ресурсах и пакетах расширения

 

2. История появления системы 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.

 

3. Возможности систем MATLAB

 

Возможности систем MATLAB


Возможности прежних версий MATLAB 4.x


Уже первые ориентированные на Microsoft Windows версии системы (MATLAB 4.x) обладали мощными средствами. В области математических вычислений:

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

В области реализации численных методов:

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


В области программирования:

  • свыше 500 встроенных математических функций;
  • ввод/вывод двоичных и текстовых файлов;
  • применение программ, написанных на Си и ФОРТРАН;
  • автоматическая перекодировка процедур MATLAB в тексты программ на языках Си и C++;
  • типовые управляющие структуры.

В области визуализации и графики:

  • возможность создания двумерных и трехмерных графиков;
  • осуществление визуального анализа данных.

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

4. Возможности версий MATLAB 5.x

 

Возможности версий MATLAB 5.x


В версиях системы MATLAB 5.x введены новые мощные средства. Улучшенная среда программирования:

  • профилировщик m-файлов для оценки времени исполнения фрагментов программ;
  • редактор/отладчик m-файлов с удобным графическим интерфейсом;
  • объектно-ориентированное программирование, включая переназначение функций и операторов;
  • средства просмотра содержимого рабочей области и путей доступа;
  • конвертирование m-файлов функций в промежуточный р-код.

Графический интерфейс пользователя (GUI):

  • интерактивное средство построения графического интерфейса пользователя — GUI;
  • новый редактор свойств графических объектов — Handle Graphics Property Editor (редактор свойств дескрипторной графики);
  • панели списков, включая списки с множественным выбором;
  • форма диалоговых панелей и панелей сообщений;
  • многострочный режим редактирования текста;
  • запоминание последовательности графических элементов управления;
  • расширение параметров элементов управления;
  • свойство переносимости между платформами;
  • курсор, определяемый пользователем;
  • подготовка документов в формате HTML (языка разметки гипертекста Hypertext Mark Up Language) начиная с версии 5.3.

Новые типы данных:

  • многомерные массивы;
  • массивы структур (записей);
  • массивы ячеек данных разного типа;
  • массивы символов с 16-разрядной кодировкой;
  • массивы с 8-разрядной кодировкой элементов.

Средства программирования:

  • списки аргументов переменной длины;
  • переназначение функций и операторов;
  • применение локальных функций в m-файлах;
  • оператор-переключатель switch...case...end;
  • оператор wait for;
  • функции обработки битов.

Математические вычисления и анализ данных:

  • пять новых численных методов решения (solver) обыкновенных дифференциальных уравнений (ОДУ);
    ускоренное вычисление функций Бесселя;
  • вычисление собственных значений и сингулярных чисел для матриц разреженной структуры;
  • двумерные квадратурные формулы; 
  •  многомерная интерполяция;
  • триангуляция и вывод на терминал данных, определенных на неравномерной сетке;
  • анализ и обработка многомерных массивов;
  • функции обработки времени и даты.

Новые возможности обычной графики:

  • Z-буферизация для быстрой и точной трехмерной визуализации;
  • 24-битовая поддержка RGB;
  • множественная подсветка поверхностей и полигонов;
  • перспективные изображения из произвольной точки;
  • новые модели подсветки;
  • векторизованные полигоны для больших трехмерных моделей;
  • поддержка данных, определенных на неравномерной сетке, включая триангуляционные и сеточные двух- и трехмерные поверхности;
  • дескрипторная графика для множественных объектов;
  • вывод на терминал, хранение и импорт 8-разрядных изображений;
  • дополнительные форматы графических объектов.

Презентационная графика и звук:

  • двойные х- и y-оси;
  • легенда — пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него;
  • управление шрифтом текстовых объектов;
  • надстрочные, подстрочные и греческие символы;
  • трехмерные диаграммы, поля направлений, ленточные и стержневые графики;
  • увеличенное количество стилей для маркировки линий;
  • 16-битный стереозвук.

Интерактивная документация:

  • возможность просмотра с помощью Netscape Navigator или Microsoft Internet Explorer;
  • полная справочная документация в форматах HTML и PDF; О возможность создания «живых» книг с помощью специального приложения
    Notebook.

Версия MATLAB 5.3.1 (выпуск 11.1) интегрирует в своем составе 42 программных продукта, среди которых основу составляют базовая система MATLAB и новая реализация пакета расширения Simulink 3.1. В систему введен ряд новых компонентов, включая следующие:

  • Data Analysis, Visualization and Application Development — анализ данных, их визуализация и применение;
  • Control Design —проектирование устройств управления;
  • DSP and Communications System Design — проектирование коммуникационных систем и систем цифровой обработки сигналов;
  • Financial Engineering — финансовые расчеты и др.

Из других возможностей версии MATLAB 5.3.1 наиболее значимыми являются следующие:

  • существенное обновление пакетов расширения (toolbox) системы MATLAB; О новые улучшенные версии Simulink 3.1 и Real-Time Workshop 3.0;
  • Real-Time Windows Target, позволяющая исполнять управляющие программы реального времени на том же компьютере или ноутбуке, где установлены MATLAB, Simulink и Real Time Workshop;
  • стандартный пакет расширения хРС для управления системами реального времени на управляющем компьютере (PC) без участия хост-компьютера с установленной системой MATLAB;
  • Data Acquisition Toolbox для обмена информацией с блоками сбора данных, подключаемыми к шине компьютера, в реальном масштабе времени;
  • новое меню View (Вид), позволяющее выводить или скрывать панель инструментов;
  • расширенные возможности работы с целочисленными данными;
  • улучшенное окно графики с панелью инструментов;
  • возможность вращения графиков в пространстве с помощью мыши в любом направлении простым включением режима вращения с помощью кнопки панели инструментов графического окна;
  • поддержка нового стандарта NTSC;
  • новый графический интерактивный редактор, облегчающий форматирование графиков;
  • обеспечение записи и считывания изображений в формате PNG (Portable Network Graphics) (Переносимая сетевая графика);
  • улучшенная визуализация трехмерных скалярных и векторных данных объемных поверхностей;
  • новые решатели дифференциальных уравнений и дифференциально-алгебраических уравнений;
  • улучшенный редактор и профилировщик m-файлов, содержащий генератор отчетов и поддерживающий HTML (язык разметки гипертекста)-формат записи файлов;
  • улучшенная печать, предусматривающая предварительный просмотр печатаемых страниц — команда Print Preview (предварительный просмотр области печати).

 

5. Возможности новейшей версии MATLAB 6

 

Возможности новейшей версии MATLAB 6


Новейшая версия системы MATLAB 6 не только имеет перечисленные выше возможности предшествующих версий, но и характеризуется целым рядом новых и важных возможностей:

  • доведенное до более чем 600 число встроенных функций и команд;
  • новый интерфейс с набором инструментов для управления средой, включающий в себя окно команд (Command Window), окно истории команд (Command History), браузер рабочей области (Workspace Browser) и редактор массивов (Array Editor);
  • новые инструменты, позволяющие при помощи мыши интерактивно редактировать и форматировать графики, оптимизировать их коды и затраты памяти на графические команды и атрибуты;
  • улучшенные алгоритмы на основе оптимизированной библиотеки LAPACK;
  • новая библиотека FFTW (быстрых преобразований Фурье) Массачусетского технологического института Кембриджского университета (США);
  • ускоренные методы интегральных преобразований;
  • новые, более мощные и точные, алгоритмы интегрирования дифференциальных уравнений и квадратур;
  • новые современные функции визуализации: вывод на экран двумерных изображений, поверхностей и объемных фигур в виде прозрачных объектов;
  • новая инструментальная панель Camera для управления перспективой и ускорение вывода графики с помощью OpenGL;
  • новый интерфейс для вызова Java-процедур и использования Java-объектов непосредственно из MATLAB;
  • новые, современные инструменты проектирования графического пользовательского интерфейса;
  • обработка (регрессия, интерполяция, аппроксимация и вычисление основных статистических параметров) графических данных прямо из окна графики;
  • новое приложение MATLAB для системы разработки Visual Studio, позволяющее автоматически, непосредственно из Microsoft Visual Studio, преобразовывать Си и Си++ коды в выполняемые MATLAB файлы (МЕХ-файлы);
  • интеграция с системами контроля версий кода, такими как Visual Source Safe;
  • новый интерфейс (последовательный порт) для обмена данными с внешним оборудованием из MATLAB;
  • новый пакет управления измерительными приборами (Instrument Control ToolBox) для обмена информацией с приборами, подключенными к Каналу общего пользования (GPIB, HP-IB, IEEE-488)[ Существует аналогичные международные МЭК (IEC) 625.1 и российские государственные стандарты. Несмотря на логическую и электрическую совместимость, международные и отечественные стандарты предполагают использование других разъемов. — Примеч. ред. или к шине VXI через адаптер VXI — GPIB (только в версиях для Windows и Sun Solaris) и последовательному интерфейсу RS-232, RS-422, RS-485 (также и для Linux-версии), в том числе в соответствии со стандартом VISA (Virtual Instruments Systems Application) (Применение виртуальных измерительных приборов);
  • существенно обновленные пакеты расширения, в частности новые версии пакета моделирования динамических систем Simulink 4 и Real Time Workshop 4;
  • интеграция с системами управления потребностями, например DOORS.
    Поставляемый с системой MATLAB 6.0 новый пакет расширения Simulink 4 также имеет ряд новинок. Они перечислены ниже по категориям.
  • Усовершенствование пользовательского интерфейса:
    • новый графический отладчик для интерактивного поиска и диагностики ошибок в модели;
    • усовершенствован навигатор моделей (Model Browser, Windows 95/98/Me/ 2000/NT4);
    • новый однооконный режим для открытия подсистем;
    • контекстное меню для блок-диаграмм (открывается щелчком правой кнопки мыши) как в Windows, так и в Unix версиях;
    • новый диалог Finder для поиска моделей и библиотек.

Simulink поступает к пользователям с более 100 встроенными блоками, в состав которых входят наиболее необходимые функции моделирования. Блоки сгруппированы в библиотеки в соответствии с их назначением: источники сигнала, приемники, дискретные, непрерывные, нелинейные, математика, функции и таблицы, сигналы и системы. В дополнение к обширному набору встроенных блоков Simulink имеет расширяемую библиотеку блоков благодаря функции создания пользовательских блоков и библиотек. Вы можете настраивать не только функциональность встроенных и пользовательских блоков, но также пользовательский интерфейс, используя значки и диалоги. Например, вы можете создать блоки для моделирования поведения специальных механических, электрических и программных компонентов, как, например, моторы, преобразователи, серво-клапаны, источники питания, энергетические установки, фильтры, шины, модемы,

  • приемники или другие динамические компоненты. Однажды созданные пользовательские блоки могут быть сохранены в библиотеке блоков для использования в будущем. Любые пользовательские блоки или библиотеки блоков могут быть легально распространены в рабочих группах, переданы поставщикам и заказчикам как с исходным кодом, так и без него.
    Новые и улучшенные возможности блоков:
    • наряду с существовавшей ранее поддержкой скалярных и векторных сигналов обеспечена поддержка матричных сигналов многими блоками Simu-link;
    • блоки Product, Multiplication, Gain и Math Function теперь поддерживают матричные операции на матричных сигналах;
    • Мих и Demux блоки теперь поддерживают мультиплексирование матричных сигналов;
    • новый блок Reshape изменяет размер матрицы своего входного сигнала;
    • блок Probe теперь по умолчанию выводит размер матрицы сигнала, подаваемого на вход;
    • новый блок Bitwise Logical Operator (логические операции по битам) накладывает маску, инвертирует или производит логические операции с отдельными битами целочисленного сигнала без знака;
    • четыре новых блока Look-Up Table (просмотра таблиц);
    • новый Polynomial блок выводит полиномиальную функцию от входного сигнала.
  • Расширенная поддержка для крупных приложений:
    • новые объекты данных Simulink позволяют создавать специфические для приложений типы данных MATLAB;
    • новый графический пользовательский интерфейс Simulink Explorer для наблюдения и редактирования объектов данных Simulink;
    • усовершенствование блока Configurable Subsystems (конфигурируемые подсистемы);
    • новое меню выбора блока конфигурируемой подсистемы;
    • поддержка защиты интеллектуальной собственности с помощью S-функ-ций, позволяющая не передавать исходный код S-функций (требуется Real-Time Workshop 4.0 (Лаборатория реального времени)) [S-функция — пользовательский программный модуль, который определяет поведение Simulink блока. Simulink содержит шаблоны для создания S-функций с помощью существующих или разработанных заново кодов на Си, Ada (в версии Simulink 4.0/Real Workshop 4.0, нужен отдельный блок Real Workshop Ada Coder), Fortran или MATLAB. Созданную S-функцию вы можете включить в вашу модель, используя соответствующий ей блок Simulink—будь то стандартный или пользовательский. S-функции уменьшают время, необходимое для моделирования крупномасштабных систем, позволяя оперативно вставлять существующие коды в модель. Это, например, особенно важно, если система MATLAB+Simulink+Real Workshop+Real Time Windows Target используется для управления сложными объектами в реальном масштабе времени. Simulink обеспечивает многопортовую и многоскоростную поддержку и разрешает различные интервалы дискретизации (только S-функции на Си и MATLAB). — Примеч. ред.];
    • поддержка S-функций, кодируемых на языке ADA (требуется новый отдельный пакет Real Time Workshop Ada Coder);
    • улучшенная интеграция со Stateflow — пакетом инструментов моделирования систем, управляемых событиями, значительно усовершенствованный Stateflow Coder для генерации кода;
    • run-time сервер MATLAB для запуска программ MATLAB, в том числе в р-кодах, без установленной системы MATLAB;
    • улучшенная версия хРС Embedded Target для записи генерируемого кода не только на переносимые носители, но и в постоянные запоминающие устройства, твердотельные диски и на жесткий диск управляющего компьютера. Наряду с хРС поддерживаются другие платформы встроенных управляющих систем, включая VxWorks/Tornado (причем как UNIX, так и Windows хостом с MATLAB), Real Time Windows Target; Lynx Embedded OSEK Target, стандартизированную в автомобилестроении, DOS Target на управляющем компьютере Intel386 и старше (последняя только со снятым с производства компилятором Watcom Си/Си++ с расширителем DOS4GW.exe для DOS и несовместима с приложениями Windows). Но возможность работы без хоста с системой MATLAB (Stand-Alone) имеется только в хРС;
    • поддержка хРС Target стандартной полевой шины промышленной автоматизации CAN, возможность синхронизации хРС сигналами, поступающими по этой шине;
    • web-сервер, встроенный в хРС Target, позволяющий осуществлять управление встроенными компьютерами и просмотр их состояния при помощи браузеров Интернета (Microsoft Explorer 4.0 и старше и Netscape Navigator 4.5 и старше).

Все это говорит о том, что двенадцатый выпуск системы (MATLAB 6.0 + Simu-link 4.0 + Stateflow 4.0 + ...) подвергся не косметической, а самой серьезной переработке, выдвигающей эту систему на абсолютно новый уровень развития и применения.

 

6. Интеграция с другими программными системами

 

Интеграция с другими программными системами


В последние годы разработчики математических систем уделяют огромное внимание их интеграции и совместному использованию. Это не только расширяет класс решаемых каждой системой задач, но и позволяет подобрать для них самые лучшие и наиболее подходящие инструментальные средства. Решение сложных математических задач сразу на нескольких системах существенно повышает вероятность получения корректных результатов — увы, как математики так и математические системы способны ошибаться, особенно при некорректной постановке задач неопытными пользователями.
С системой 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 для работы с матрицами. Эта прогрессивная тенденция интегрирования компьютерных математических систем, несомненно, будет продолжена.

 

7. Ориентация на матричные операции

 

Ориентация на матричные операции


Напомним, что двумерный массив чисел или математических выражений принято называть матрицей. А одномерный массив называют вектором. Примеры векторов и матриц даны ниже:{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 — вектор или М — матрица. В данной книге имена векторов и матриц набираются полужирным шрифтом. Элементы векторов и матриц рассматриваются как индексированные переменные, например:

  • V 2 — второй элемент вектора V;
  • М 23 — третий элемент второй строки матрицы М.

Система MATLAB выполняет сложные и трудоемкие операции над векторами и матрицами даже в режиме прямых вычислений без какого-либо программирования. Ею можно пользоваться как мощнейшим калькулятором, в котором наряду с обычными арифметическими и алгебраическими действиями могут использоваться такие сложные операции, как инвертирование матрицы, вычисление ее собственных значений и принадлежащих им векторов, решение систем линейных уравнений, вывод графиков двумерных и трехмерных функций и многое другое.
Интересно отметить, что даже обычные числа и переменные в MATLAB рассматриваются как матрицы размера 1x1, что дает единообразные формы и методы проведения операций над обычными числами и массивами. Данная операция обычно называется векторизацией. Векторизация обеспечивает и упрощение записи операций, производимых одновременно над всеми элементами вектрров и матриц, и существенное повышение скорости их выполнения. Это также означает, что большинство функций может работать с аргументами в виде векторов и матриц. При необходимости вектора и матрицы преобразуются в массивы, и значения вычисляются для каждого их элемента.

 

8. Расширяемость системы

 

Расширяемость системы


Какой бы мощной ни была та или иная математическая система, она не способна включить в себя все средства, которые могут потребоваться сотням тысяч пользователей. Поэтому важно, чтобы система была достаточно гибкой и способной адаптироваться к различным задачам пользователей самых разных категорий — начинающих и опытных математиков, инженеров и научных работников, аспирантов и студентов вузов и даже школьников.
MATLAB — расширяемая система, и ее легко приспособить к решению нужных вам классов задач. Ее огромное достоинство заключается в том, что это расширение достигается естественным путем и реализуется в виде так называемых т-файлов (с расширением .m). Иными словами, расширения системы хранятся на жестком диске компьютера и в нужный момент вызываются для использования точно так же, как встроенные в MATLAB (внутренние) функции и процедуры.
Благодаря текстовому формату m-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и затем пользоваться ими столь же просто, как и встроенными операторами или функциями. При этом в отличие от таких языков программирования, как Бейсик, Си или Паскаль не требуется никакого объявления этих новых функций. Это роднит MATLAB с языками Лого и Форт, имеющими словарную организацию операторов и функций и возможности пополнения словаря новыми определениями-словами. Но, поскольку новые определения в системе MATLAB хранятся в виде файлов на диске, это делает набор операторов и функций практически неограниченным.
В базовый набор слов системы входят спецзнаки, знаки арифметических и логических операций, арифметические, алгебраические, тригонометрические и некоторые специальные функции, функции быстрого преобразования Фурье и фильтрации, векторные и матричные функции, средства для работы с комплексными числами, операторы построения графиков в декартовой и полярной системах координат, трехмерных поверхностей и т. д. Словом, MATLAB предоставляет пользователю обширный набор готовых средств (большая часть из них — это внешние расширения в виде m-файлов).
Дополнительный уровень системы образуют ее пакеты расширения (toolbox). Они позволяют быстро ориентировать систему на решение задач в той или иной предметной области: в специальных разделах математики, в физике и в астрономии, в области нейтронных сетей и средств телекоммуникаций, в математическом моделировании, проектировании событийно-управляемых систем и т. д. Благодаря этому MATLAB обеспечивает высочайший уровень адаптации к решению задач конечного пользователя.

 

9. Мощные средства программирования

 

Мощные средства программирования


Многие математические системы создавались исходя из предположения, что пользователь будет решать свои задачи, практически не занимаясь программированием. Однако с самого начала было ясно, что подобный путь имеет недостатки
и, вообще говоря, порочен. Ведь многие задачи нуждаются в развитых средствах программирования, которые упрощают запись алгоритмов задач и порой открывают новые методы создания алгоритмов.
С одной стороны, MATLAB содержит огромное число операторов и функций, которые решают множество практических задач, для чего ранее приходилось готовить достаточно сложные программы. К примеру, это функции обращения или транспонирования матриц, вычисления значений производной или интеграла и т. д. и т. п. Число таких функций с учетом пакетов расширения системы уже достигает многих тысяч и непрерывно увеличивается.
Но, с другой стороны, система MATLAB с момента своего создания создавалась как мощный математико-ориентированный язык программирования высокого уровня. И многие рассматривали это как важное достоинство системы, свидетельствующее о возможности ее применения для решения новых, наиболее сложных математических задач.
Система MATLAB имеет входной язык, напоминающий Бейсик (с примесью Фортрана и Паскаля). Запись программ в системе традиционна и потому привычна для большинства пользователей компьютеров. К тому же система дает возможность редактировать программы с помощью любого привычного для пользователя текстового редактора. Имеет она и собственный редактор с отладчиком. Отказ от присущего системе Mathcad «шика» — задания задач в виде формул — компенсируется заметным увеличением скорости вычислений — при прочих равных условиях она почти на порядок выше, чем у системы Mathcad. А это немаловажное достоинство!
Язык системы MATLAB в части программирования математических вычислений намного богаче любого универсального языка программирования высокого уровня. Он реализует почти все известные средства программирования, в том числе объектно-ориентированное и (средствами Simulink) визуальное программирование. Это дает опытным программистам необъятные возможности для самовыражения.

 

10. Визуализация и графические средства

 

Визуализация и графические средства


В последнее время создатели математических систем уделяют огромное внимание визуализации решения математических задач. Говоря проще, это означает, что постановка и описание решаемой задачи и результаты решения должны быть предельно понятными не только тем, кто решает задачи, но и тем, кто в дальнейшем их изучает или просто просматривает. Большую роль в визуализации решения математических задач играет графическое представление результатов, причем как конечных, так и промежуточных.
Визуализация постановки задачи в 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-файлов, красочная
демонстрация возможностей и т. д. Есть и возможность создавать свои средства пользовательского интерфейса.

 

11. Техническая документация по системе

 

Техническая документация по системе


Система MATLAB поставляется с обширной технической документацией и с развитой справочной системой. Система помощи реализована как в стандартном для систем MATLAB варианте — в интерактивном командном режиме, так и в форме гипертекстовых страниц с просмотром их браузером помощи. Кроме того, имеется обширный пакет электронных документов в формате PDF (отдельный компакт-диск в версии 6.0), для просмотра которых используется приложение Acrobat Reader (распространяется бесплатно) или Adobe Acrobat. Ниже перечислены наиболее важные из этих документов (далеко не все) для версии MATLAB 6.0 с указанием их объема в страницах: О «Getting Started with MATLAB» — начальное знакомство с системой MATLAB.

  • «Installation Guide for PC» — инсталляция на ПК класса PC.
  • «MAT-file format» — описание форматов МАТ-файлов.
  • «Release Notes for Release 12» — описание особенностей реализации 12 системы
    MATLAB.
  • «Using MATLAB» — работа с MATLAB в командном и программируемом режимах.
  • «Function Reference» — справочник по функциям в трех томах.
    том 2
  • «Using MATLAB Graphics» — справочник по средствам графики и визуализации.
  • «MATLAB Application Program Interface Guide» — описание интерактивного
    взаимодействия с языками программирования С и Fortran.
  • «External Interfaces/API» — описание интерфейса связи с внешними программами API.
  • «Creating Graphical User Interface» — создание графического интерфейса пользователя.

Итак, объем фирменной документации только по системе MATLAB 6.0 достигает почти 5000 страниц, что делает ее трудно обозримой. Тем более с учетом того, что эта документация является англоязычной.
Состав документации может несколько меняться в зависимости от типа поставок. Помимо этого, различные поставки системы могут содержать и другую техническую документацию, руководство по работе с системой Simulink, описание пакета символьных вычислений и т. д.
Документацию по системе MATLAB можно рассматривать как многотомный электронный (и обычный) справочник по современным численным методам и средствам их реализации на ЭВМ, включая персональные компьютеры. Одновременно — это одно из самых полных электронных справочных пособий по математике и многочисленным сферам ее применения. К сожалению, пока указанная документация поставляется с системой только на английском и на японском языках. Поскольку эта документация доступна каждому пользователю, рискнувшему установить достаточно полную версию MATLAB 6.0 на свой компьютер, ссылок на нее в списке литературы данного издания нет.
Данная книга дает достаточно полное описание почти всех средств базовой системы MATLAB. Тем не менее настоятельно рекомендуется обращаться к указанной документации всякий раз, когда требуется полное знакомство с той или иной областью применения системы, с ее редкими функциями, операторами или иными средствами, которые не нашли отражения в данной книге ввиду ограниченного (в сравнении с объемом указанной документации) объема.

 

12. MATLAB в Интернете

 

MATLAB в Интернете


Представление математических систем в глобальной сети Интернет сегодня становится нормой. Свои сайты (страницы) в Интернете имеют все фирмы-разработчики математических систем.

 

13. Главная страница фирмы MathWorks

 

Главная страница фирмы 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. Этот процесс подробно описан в книге и в других книгах об Интернете.

 

1.gif

Изображение: 

14. Регистрация через Интернет

 

Регистрация через Интернет


Если вы удостоились чести стать легальным пользователем системы 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).

 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

15. Поддержка системы MATLAB фирмой MathWorks

 

Поддержка системы MATLAB фирмой MathWorks


Зарегистрированные пользователи (а частично и другие) могут воспользоваться специально организованной фирмой MathWorks службой поддержки системы MATLAB. Для выхода на web-страницу такой поддержки из системы MATLAB достаточно исполнить команду Technical Support Knowledge Base. Будет загружена страница с разделом Support, показанная на рис. 1.5.
На этой странице имеется множество гипертекстовых ссылок (подчеркнутых снизу), открывающих доступ к различным ресурсам web-сайта фирмы MathWorks.


Рис. 1.5. Страница с разделом Support фирмы MathWorks

 

5.gif

Изображение: 

16. MATLAB в образовании

 

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.
На сайте фирмы можно найти информацию как о программных продуктах фирмы, так и о пакетах ее расширения, примеры решения различных задач и т. д.

 

6.gif

Изображение: 

7.gif

Изображение: 

8.gif

Изображение: 

17. Обновление системы MATLAB через Интернет

 

Обновление системы 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. Да и неудобств от этого более чем достаточно. Не говоря уже о моральной ущербности такого трюка.

 

9.gif

Изображение: 

18. Доступ к FTP-серверу фирмы 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-файлов

 

10.gif

Изображение: 

11.gif

Изображение: 

19. Данные о системных ресурсах и пакетах расширения

 

Данные о системных ресурсах и пакетах расширения


Если вас интересуют данные о системных ресурсах или пакетах расширения системы 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. Приключения начинаются!

 

12.gif

Изображение: 

20. Что нового мы узнали?

 

Что нового мы узнали?


В этом уроке мы научились:

  • Разбираться в особенностях различных версий системы MATLAB.
  • Понимать возможности систем класса MATLAB и их интеграции с другими программными системами.
  • Искать техническую документацию по системе.
  • Использовать Интернет-страницы фирмы Math Works, Inc.
  • Готовить свой компьютер к использованию новых эффектов трехмерной графики MATLAB 6.

 

Урок 2. Установка системы и первые навыки работы

1. Урок 2. Установка системы и первые навыки работы

 

Урок №2.

Установка системы и первые навыки работы

  •  Установка и файловая система MATLAB

  •  Запуск MATLAB и работа в режиме диалога

  •  Первый опыт работы

  •  MATLAB в роли суперкалькулятора

  •  Числа, константы и системные переменные

  •  Текстовые комментарии

  •  Переменные, их создание, изменение и уничтожение

  •  Операторы и функции

  • Сообщения об ошибках и исправление ошибок

  •  Работа с векторами и матрицами

  •  Сохранение и загрузка рабочей области сессии

  • Ведение дневника

  • Завершение работы с системой

 

2. Установка и файловая система 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 имя, где имя — название соответствующей подпапки.

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

5.gif

Изображение: 

6.gif

Изображение: 

7.gif

Изображение: 

3. Запуск MATLAB и работа в режиме диалога

 

Запуск 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 (Дневник). Позже мы обсудим эти команды подробно.

 

8.gif

Изображение: 

9.gif

Изображение: 

10.gif

Изображение: 

4. Новый и старый облик системы MATLAB 6.0

 

Новый и старый облик системы 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.

 

11.gif

Изображение: 

5. Операции строчного редактирования

 

Операции строчного редактирования


При работе с 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-файлов.

Обратите особое внимание на применение клавиш вверх и вниз. Они используются для подстановки после маркера строки ввода » ранее введенных строк, например для их исправления, дублирования или дополнения. При этом указанные клавиши обеспечивают перелистывание ранее введенных строк снизу вверх или сверху вниз. Такая возможность существует благодаря организации специального стека, хранящего строки с исполненными ранее командами.

 

6. Команды управления окном

 

Команды управления окном

Полезно сразу усвоить некоторые команды управления окном командного режима: 

  •  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-файлами сценариев и функций мы обсудим позже.

 

7. MATLAB в роли суперкалькулятора

 

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. При этом строки ввода будут отмечаться маркером ввода » в их начале. Ради компактности записи пустые строки будут опускаться.

 

12.gif

Изображение: 

8. О переносе строки в сессии

 

О переносе строки в сессии


В некоторых случаях вводимое математическое выражение может оказаться настолько длинным, что для него не хватит одной строки. В этом случае часть выражения можно перенести на новую строку с помощью знака многоточия «...» (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 символов.

 

9. Основные объекты MATLAB

 

Основные объекты MATLAB


Понятие о математическом выражении


Центральным понятием всех математических систем является математическое выражение. Оно задает то, что должно быть вычислено в численном (реже символьном) виде. Вот примеры простых математических выражений:


2+3
2.301*sin(x)
4+ехр(3)/5
sqrt(y)/2
sin(pi/2)


Математические выражения строятся на основе чисел, констант, переменных, операторов, функций и разных спецзнаков. Ниже даются краткие пояснения сути этих понятий.

 

10. Действительные и комплексные числа

 

Действительные и комплексные числа


Число — простейший объект языка MATLAB, представляющий количественные данные. Числа можно считать константами, имена которых совпадают с их значениями. Числа используются в общепринятом представлении о них. Они могут быть целыми, дробными, с фиксированной и плавающей точкой. Возможно представление чисел в хорошо известном научном формате с указанием мантиссы и порядка числа.
Ниже приводятся примеры представления чисел:


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.

 

11. Константы и системные переменные

 

Константы и системные переменные


Константа — это предварительно определенное числовое или символьное значение, представленное уникальным именем. Числа (например 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. Однако с помощью специальных функций преобразования символьные выражения могут быть преобразованы в вычисляемые. Соответствующие функции преобразования будут рассмотрены в дальнейшем.

 

12. Текстовые комментарии

 

Текстовые комментарии


Поскольку MATLAB используется для достаточно сложных вычислений, важное значение имеет наглядность их описания. Она достигается, в частности, с помощью текстовых комментариев. Текстовые комментарии вводятся с помощью символа %, например так:
Bit is factorial function

Примечание

В каждой большой программе есть свои «ложки дегтя». В MATLAB 6 такой «ложкой дегтя» является перевод строки при вводе буквы «с» русского алфавита в командной строке. В итоге ввод комментариев в командной строке на русском языке превращается в проблему. Пока автор может порекомендовать заменять русское «с» на английское, что на виде текстового комментария никак не сказывается. Не рекомендуется вводить русскоязычные комментарии и в тесты m-файлов при подготовке их в редакторе/отладчике (он будет описан позже). Это нередко делает программы неработоспособными. Жаловаться тут бесполезно — MATLAB англоязычный продукт и официальной локализованной под Россию версии этой системы пока нет.


Обычно первые строки m-файлов служат для описания их назначения, которое выводится на экран дисплея после команды » help Имя_файла.
Считается правилом хорошего тона вводить в m-файлы достаточно подробные текстовые комментарии. Без таких комментариев даже разработчик программных модулей быстро забывает о сути собственных решений. В текстовых комментариях и в символьных константах могут использоваться буквы русского алфавита — при условии, что установлены содержащие эти буквы наборы шрифтов (см. примечание . выше).

 

13. Переменные и присваивание им значений

 

Переменные и присваивание им значений


Переменные — это имеющие имена объекты, способные хранить некоторые, обычно разные по значению, данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными.
В системе MATLAB можно задавать переменным определенные значения. Для этого используется операция присваивания, вводимая знаком равенства =:
Имя_переменной - Выражение
Типы переменных заранее не декларируются. Они определяются выражением, значение которого присваивается переменной. Так, если это выражение — вектор или матрица, то переменная будет векторной или матричной.
Имя переменной (ее идентификатор) может содержать сколько угодно символов, но запоминается и идентифицируется только 31 начальный символ. Имя любой переменной не должно совпадать с именами других переменных, функций и процедур системы, т. е. оно должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена переменных пробелы и специальные знаки, например +,.-, *, / и т. д., поскольку в этом случае правильная интерпретация выражений становится невозможной.
Желательно использовать содержательные имена для обозначений переменных, например speed_l для переменной, обозначающей скорость первого объекта. Переменные могут быть обычными и индексированными, то есть элементами векторов или матриц (см. выше). Могут использоваться и символьные переменные, причем символьные значения заключаются в апострофы, например s='Demo'.

 

14. Уничтожение определений переменных

 

Уничтожение определений переменных


В памяти компьютера переменные занимают определенное место, называемое рабочей областью (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 без параметров стерты все остальные переменные.

 

15. Операторы и функции

 

Операторы и функции


Оператор — это специальное обозначение для определенной операции над данными — операндами. Например, простейшими арифметическими операторами являются знаки суммы +, вычитания -, умножения * и деления /. Операторы используются совместно с операндами. Например, в выражении 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, в силу чего они выполняются предельно быстро.

 

16. Применение оператора : (двоеточие)

 

Применение оператора: (двоеточие)


Очень часто необходимо произвести формирование упорядоченных числовых последовательностей. Такие последовательности нужны для создания векторов или значений абсциссы при построении графиков. Для этого в 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

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

 

17. Сообщения об ошибках и исправление ошибок

 

Сообщения об ошибках и исправление ошибок


Важное значение при диалоге с системой 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) не останавливают вычисления и лишь предупреждают пользователя о том, что диагностируемая ошибка способна повлиять на ход вычислений. Сообщение об ошибке (после знаков ???) останавливает вычисления.

 

18. Форматы чисел

 

Форматы чисел


По умолчанию 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

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

 

19. Формирование векторов и матриц

 

Формирование векторов и матриц

Особенности задания векторов и матриц


Описанные выше простые правила вычислений распространяются и на гораздо более сложные вычисления, которые (при использовании обычных языков программирования типа Бейсик или Паскаль) требуют составления специальных программ. 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.

 

20. Объединение малых матриц в большую

 

Объединение малых матриц в большую


Описанный способ задания матриц позволяет выполнить операцию конкатенации — объединения малых матриц в большую. Например, создадим вначале магическую матрицу размера 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
Более того, для магической матрицы одинаковой является и сумма элементов по основным диагоналям (главной диагонали и главной антидиагонали).

 

21. Удаление столбцов и строк матриц

 

Удаление столбцов и строк матриц


Для формирования матриц и выполнения ряда матричных операций возникает необходимость удаления отдельных столбцов и строк матрицы. Для этого используются пустые квадратные скобки [ ]. Проделаем это с матрицей М:
» М=[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

 

22. Операции с рабочей областью и текстом сессии

 

Операции с рабочей областью и текстом сессии

Дефрагментация рабочей области


По мере задания одних переменных и стирания других рабочая область перестает быть непрерывной и начинает содержать «дыры» и всякий «мусор». Это рано или поздно может привести к ухудшению работы системы или даже к нехватке оперативной памяти. Подобная ситуация становится возможной, если вы работаете с достаточно большими массивами данных.
Во избежание непроизводительных потерь памяти при работе с объемными данными (а векторы, матрицы и массивы относятся к таковым) следует использовать команду pack, осуществляющую дефрагментацию рабочей области. Эта команда переписывает все определения рабочей области на жесткий диск, очищает рабочую область и затем заново считывает все определения без «дыр» и «мусора» в рабочую область.

 

23. Сохранение рабочей области сессии

 

Сохранение рабочей области сессии


Переменные и определения новых функций в системе 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.

 

24. Ведение дневника

 

Ведение дневника


Мы отмечали, что сессии не записываются на диск стандартной командой 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 =

» 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=

diary off.
ans=
0.8415 

diary off
Во избежание отмеченных казусов рекомендуется записывать файл с расширением, отличным от .m, например .txt. Это позволит встраивать подобные текстовые файлы дневника сессии в документы, содержащие ее описание.

 

25. Загрузка рабочей области сессии

 

Загрузка рабочей области сессии


Для загрузки рабочей области ранее проведенной сессии (если она была сохранена) можно использовать команду load:

  •  load fname ... — загрузка ранее сохраненных в файле fname.mat определений со спецификациями на месте многоточия, подобными описанным для команды save (включая ключ -mat для загрузки файлов с расширением .mat обычного бинарного формата, используемого по умолчанию);

  • 1oad( 'fname'....) — загрузка файла fname.mat в форме функции.

Если команда (или функция) load используется в ходе проведения сессии, то произойдет замена текущих значений переменных теми значениями, которые были сохранены в считываемом МАТ-файле.

Для задания имен загружаемых файлов может использоваться знак *, означающий загрузку всех файлов с определенными признаками. Например, load demo*.mat означает загрузку всех файлов с началом имени demo, например demol, demo2, demoa, demob и т. д. Имена загружаемых файлов можно формировать с помощью операций над строковыми выражениями.

 

26. Завершение вычислений и работы с системой

 

Завершение вычислений и работы с системой

Завершение вычислений


Иногда из-за ошибок в программе или из-за сложности решаемой задачи MATLAB «зацикливается» и перестает выдавать результаты либо непрерывно выдает их, хотя в этом уже нет необходимости. Для прерывания вычислений в этом случае достаточно нажать одновременно клавиши Ctrl и С (латинское).

 

27. Завершение работы с системой

 

Завершение работы с системой


Для завершения работы с системой можно использовать команды exit, quit (которые сохраняют содержимое рабочей области и выполняет другие действия в соот ветствии с файлом сценария finish.m) или комбинацию клавиш Ctrl+Q. Если необходимо сохранить значения всех переменных (векторов, матриц) системы, то перед вводом команды exit следует дать команду save нужной формы. Команда load после загрузки системы считывает значения этих переменных и позволяет начать работу с системой с того момента, когда она была прервана.

На этом мы закончим начальную экскурсию в технику матричных вычислений системы MATLAB. Мы расширим представления о ней в последующих уроках.

 

28. Что нового мы узнали?

 

Что нового мы узнали?


В этом уроке мы научились:

  •  Устанавливать и запускать систему MATLAB.

  •  Редактировать документы и управлять их окном.

  •  Выполнять простые расчеты.

  •  Работать с числами, константами и переменными разного типа.

  • Задавать текстовые комментарии.

  •  Использовать наиболее распространенные операторы и функции.

  •  Распознавать сообщения об ошибках и предупреждения.

  • Задавать разные форматы чисел.

  • Осуществлять простые операции с матрицами.

  • Вести дневник сессии.

  • Дефрагментировать, сохранять и загружать рабочую область.

  • Завершать работу с системой.

 

Урок 3. Основы графической визуализации вычислений

1. Урок 3. Основы графической визуализации вычислений

 

Урок №3.

Основы графической визуализации вычислений

  •  Особенности графики системы MATLAB

  •  Построение графика функций одной переменной

  • Столбцовые диаграммы

  • Построение трехмерных графиков

  • Вращение графиков мышью

  • Контекстное меню графиков

  • Управление форматом графиков

2. Особенности графики системы MATLAB

 

Особенности графики системы MATLAB

Начиная с версии MATLAB 4.0, впервые ориентированной на Windows, графические средства системы MATLAB были существенно улучшены. Основные отличительные черты графики в новой версии MATLAB 6:

  •  существенно улучшенный интерфейс графических окон;

  •  введение новой панели инструментов Camera для интерактивного изменения условий видимости объекта;

  •  расширенные возможности форматирования графики;

  •  возможность создания графики в отдельных окнах;

  •  возможность вывода нескольких графических окон;

  •  возможность перемещения окон по экрану и изменения их размеров;

  •  возможность перемещения области графики внутри графического окна;

  • задание различных координатных систем и осей;

  •  высокое качество графики;

  •  широкие возможности использования цвета;

  •  легкость установки графических признаков — атрибутов;

  •  снятие ограничений на число цветов;

  •  обилие параметров команд графики;

  •  возможность получения естественно выглядящих трехмерных фигур и их сочетаний;

  • простота построения трехмерных графиков с их проекцией на плоскость;

  •  возможность построения сечений трехмерных фигур и поверхностей плоскостями;

  •  функциональная многоцветная и полутоновая окраска;

  •  возможность имитации световых эффектов при освещении фигур точечным источником света;

  •  возможность создания анимационной графики;

  •  возможность создания объектов для типового интерфейса пользователя.

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

На более низком уровне решения задач используется ориентированная на программиста дескрипторная графика (Handle Graphics), при которой каждому графическому объекту в соответствие ставится особое описание — дескриптор, на который возможны ссылки при использовании графического объекта. Дескрипторная графика позволяет осуществлять визуальное программирование объектов пользовательского интерфейса — управляющих кнопок, текстовых панелей и т. д. Команды дескрипторной графики могут использоваться в высокоуровневой графике, например, для удаления осей, изменения цвета и т. д. в уже построенных графических объектах. Эти обширные возможности делают графику MATLAB одной из лучших среди графических подсистем систем компьютерной математики (СКМ).

Несмотря на обилие графических команд, их синтаксис достаточно прост и легко усваивается даже начинающими пользователями. Руководствуясь правилом описания «от простого к сложному», мы рассмотрим сначала графику функций одной переменной, а затем трехмерную графику, специальную, анимационную и, наконец, дескрипторную.

Хотя данная книга не предусматривает исчерпывающе полного описания всех команд графики системы MATLAB, большинство команд графики будет рассмотрено с примерами, которые можно считать дополнительными к тем, которые приведены в документации по системе.

 

3. Построение графика функций одной переменной

 

Построение графика функций одной переменной

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

Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что 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. Пример построения графика синусоиды

 

1.gif

Изображение: 

4. Построение в одном окне графиков нескольких функций

 

Построение в одном окне графиков нескольких функций

Более подробное описание графического окна будет дано в уроке 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. Это недостаток практически всех систем для численных вычислений.

 

2.gif

Изображение: 

5. Графическая функция fplot

 

Графическая функция 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 (Файл) окна графики. Нетрудно заметить, что оно содержит типовые файловые операции. Однако они относятся не к файлам документов, а к файлам графиков. В частности, можно присваивать имя записываемым на диск рисункам с графиками.

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

 

3.gif

Изображение: 

6. Столбцовые диаграммы

 

Столбцовые диаграммы

В прикладных расчетах часто встречаются графики, именуемые столбцовыми диаграммами, отражающие содержание некоторого вектора V. При этом каждый элемент вектора представляется столбцом, высота которого пропорциональна значению элемента. Столбцы нумеруются и масштабируются по отношению к максимальному значению наиболее высокого столбца. Выполняет построение такого графика команда bar(V) (рис. 3.4).

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

Рис. 3.4 дает также представление о меню Tools (Инструменты) окна графики, появившемся начиная с версии MATLAB 5.3.1 (выпуск 11.1). Нетрудно заметить, что кроме возможности вывода инструментальной панели здесь имеется целый ряд других команд, которые будут рассмотрены в дальнейшем. Это команды вывода свойств графических объектов, изменения масштаба графика, добавления осей и т. д.

Рис. 3.4. Построение столбцовой диаграммы значений элементов вектора

 

4.gif

Изображение: 

7. Построение трехмерных графиков

 

Построение трехмерных графиков

Столь же просто обеспечивается построение графиков сложных поверхностей. Надо только знать, какой командой реализуется тот или иной график. Например, для построения графика поверхности и ее проекции в виде контурного графика на плоскость под поверхностью достаточно использовать следующие команды (см. урок 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.

 

4a.gif

Изображение: 

4b.gif

Изображение: 

4c.gif

Изображение: 

8. Вращение графиков мышью

 

Вращение графиков мышью

Можно поворачивать построенную фигуру мышью и наблюдать ее под разными углами. Рассмотрим эту возможность на примере построения логотипа системы MATLAB — мембраны. Для этого, введя команду membrane, получим исходный график, представленный на рис. 3.6.

Рис. 3.6. Построение мембраны — логотипа системы MATLAB

Для вращения графика достаточно активизировать последнюю справа кнопку панели инструментов с изображением пунктирной окружности со стрелкой. Теперь, введя курсор мыши в область графика и нажав левую кнопку мыши, можно круговыми движениями заставить график вращаться вместе с обрамляющим его параллелепипедом (рис. 3.7).

Любопытно, что в версии MATLAB 6 вращать можно и двумерные графики, наблюдая поворот плоскости, в которой они построены. Никакого программирования такое вращение не требует.

Рис. 3.7. Вращение трехмерной фигуры мышью

 

5.gif

Изображение: 

6.gif

Изображение: 

9. Контекстное меню графиков

 

Контекстное меню графиков

Для переключения в режим редактирования графика нужно щелкнуть на кнопке Edit Plot (Редактировать график) с изображением курсора-стрелки. В этом режиме графиком можно управлять с помощью контекстного меню, вызываемого щелчком правой кнопки мыши. Вид этого меню при курсоре, расположенном в области трехмерного графика вне построенных трехмерных графических объектов, показан на рис. 3.8. С помощью мыши можно также выделить график. Щелчок левой клавишей выводит рамку вокруг рисунка (см. рис. 3.8). Теперь на график можно наносить стрелки, поясняющие надписи (кнопка с буквой А) и т. д.

Рис. 3.8. График в состоянии редактирования и контекстное меню

 

7.gif

Изображение: 

10. Основы форматирования двумерных графиков

 

Основы форматирования двумерных графиков

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

В новой версии MATLAB 6 для изменения свойств графиков (их форматирования) используются принципы визуального контроля за стилем (видом) всех объектов графиков. Это позволяет легко, просто и наглядно придать графикам должный вид перед записью их в виде файлов на диск. Можно сказать, что в этой части реализованы отдельные принципы визуально-ориентированного программирования графических средств.

Здесь мы рассмотрим возможности форматирования графиков, которые, образно говоря, лежат на поверхности. Систематизированное описание интерфейса системы MATLAB 6.0, в том числе интерфейса графических окон, дается в уроке 5.

 

11. Форматирование линий графиков

 

Форматирование линий графиков

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 (Применить) позволяет применить сделанные установки к графику до закрытия окна диалога. Кнопка О К вводит сделанные установки и закрывает окно диалога. Назначение других кнопок очевидно.

 

8a.gif

Изображение: 

8b.gif

Изображение: 

12. Форматирование маркеров опорных точек

 

Форматирование маркеров опорных точек

В нашем случае опорные точки задаются ранжированной переменной х, имеющей ряд значений от -15 до +15 с шагом 0.1. Эти точки появляются на графике, если в поле свойств маркера Marker Properties (Свойства маркера) из меню Style (Стиль) выбрать стиль маркера. На рис. 3.10, к примеру, показано построение графика с маркерами опорных точек в виде окружностей.

Рис. 3.10. Пример задания параметров маркеров и построения графика с ними

Можно задавать размеры маркеров, цвет их закраски и цвет окантовки. Так, на рис. 3.10 при его просмотре на экране цветного дисплея маркеры имеют вид окружностей с условным размером 4, цветом окантовки красным и цветом закраски желтым. Маркеры можно задавать в виде окружностей, прямоугольников, крестиков, ромбиков и т. д. Применение маркеров делает графики более наглядными.

 

9.gif

Изображение: 

13. Форматирование линий и маркеров для графика нескольких функций

 

Форматирование линий и маркеров для графика нескольких функций

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

» х=-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. Пример форматирования для графика трех функций

 

10a.gif

Изображение: 

10b.gif

Изображение: 

14. Форматирование осей графиков

 

Форматирование осей графиков

Аналогично описанным выше правилам выполняется форматирование и других объектов графиков. Например, указав курсором мыши на оси графиков (на них тоже есть метки в виде черных квадратиков) и дважды щелкнув левой клавишей мыши, можно увидеть появление окна форматирования объектов дескрипторной графики 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 хорошо иллюстрирует эту важную для наших пользователей возможность. На нем титульная надпись сделана на русском языке. Средства форматирования надписей дают обширные возможности по выбору набора шрифтов, их стиля, размеров символов и их цвета.

 

11a.gif

Изображение: 

11b.gif

Изображение: 

12a.gif

Изображение: 

12b.gif

Изображение: 

15. Нанесение надписей и стрелок прямо на график

 

Нанесение надписей и стрелок прямо на график

Дополнительно на график можно нанести надписи с помощью кнопки панели инструментов с буквой А. Место надписи фиксируется щелчком мыши. На рис. 3.14 показан отформатированный график с текстовым блоком, созданным таким образом в левой верхней части поля графика.

Здесь показано контекстное меню правой клавиши мыши, поясняющее выбор размера символов надписи (и другие возможности этого меню). Напоминаем, что это меню появляется при щелчке правой кнопки мыши на заданном объекте. В этом меню имеются все команды, доступные для данного объекта в данной ситуации.

Рис. 3.14. Нанесение надписи на отформатированный график

Полученную таким образом надпись можно выделить и перенести мышью в любое другое место. Рис. 3.15 показывает процесс создания еще двух надписей с переносом их текстового блока в нужное место. Надписи сделаны с разным размером символов и разным стилем. Особенно приятно, что при задании на надписи возведения в степень знаком ^ надпись на экране отображается в естественном математическом виде (степень в виде верхнего индекса).

Рис. 3.15. Окончательно отформатированный график трех функций

На рис. 3.15, в частности, показано задание надписей разным стилем, а также задание стрелки с помощью соответствующей кнопки панели инструментов. Это стрелку в режиме редактирования графика можно перемещать и вращать мышью, а также менять ее длину. Можно также наносить на график и обычные линии (без стрелки).

 

13.gif

Изображение: 

14.gif

Изображение: 

16. Построение легенды и шкалы цветов на графике

 

Построение легенды и шкалы цветов на графике

Дополнительно можно изменить размеры графика (см. меню Tools (Инструменты) и его команды Zoom In (Увеличить)и Zoom Out (Уменьшить)), начать поворот графика мышью (команда Rotate 3D), добавить отрезок прямой или иной графический примитив (подменю Add) и подключить к графику легенду — пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него. Поскольку наш график содержит три кривые, то легенда представляет собой обозначение этих трех линий в правом верхнем углу рисунка (рис. 3.16). Каждая линия имеет тот же цвет, что и на графике (и тот же стиль).

Рис. 3.16. Окончательно сформированный график

Следует еще раз отметить, что все описанные возможности форматирования графиков доступны и программным способом, путем задания соответствующих графических команд, параметров и примитивов. Например команда text(х,у, 'legend') позволяет задать надпись 'legend' с началом, имеющим координаты (х, у). Если после первого апострофа перед текстом поместить параметр \leftarrow, то надпись (легенда) появится после стрелки с острием, обращенным влево. Аналогично параметр \rightarrow после надписи задает вывод стрелки после надписи с острием, обращенным вправо. Эта возможность позволяет помечать не только кривые, но и отдельные точки на них. Возможно также применение команды legend('s1', 's2',...), выводящей легенду обычного вида — отрезки линий графиков с поясняющими надписями 's1', 's2' и т.д.

 

15.gif

Изображение: 

17. Перемещение графика в графическом окне

 

Перемещение графика в графическом окне

Обычно график занимает фиксированное положение в центре графического окна. Однако в режиме редактирования графиков, когда курсор мыши находится в области графика, в контекстном меню правой клавиши мыши есть команда Unlock Axes Position (Отключить позиционирование осей). Она снимает фиксацию положения координатных осей графика и позволяет двигать его мышью вместе с осями. Это иллюстрирует рис. 3.17.


Рис. 3.17. Пример перемещения графика

Интересно, что при перемещении графика его легенда и цветовая диаграмма остаются на прежнем месте.

 

16.gif

Изображение: 

18. Применение графической "лупы"

 

Применение графической «лупы»

На панели инструментов есть кнопки с изображение лупы и знаками + и -. С их помощью выполняются команды Zoom In (+)(Увеличить) и Zoom Out (-) (Уменьшить). Это позволяет увеличивать или уменьшать масштаб просмотра изображения. При этом команда Zoom In интересна еще одной возможностью — с ее помощью можно выделять часть графика перемещением мыши с нажатой левой клавишей — рис. 3.18.


Рис. 3.18. Пример выделения части графика


Рис. 3.19. Пример просмотра части графика

Область выделения отмечается прямоугольником из тонких точечных линий. Отпустив левую клавишу мыши, можно наблюдать построение выделенной части графика на всем окне — рис. 3.19. С помощью команды Zoom Out можно восстановить график в прежнем масштабе. Таким образом реализуется графическая «лупа».

 

17.gif

Изображение: 

17b.gif

Изображение: 

18.gif

Изображение: 

19. Работа с камерой ЗD-графики

 

Работа с камерой 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 после его поворота при нажатой клавише —>. В отличие от поворота мышью (также возможного) перемещение и повороты с помощью клавиш курсора при выбранном типе перемещения дают плавное перемещение или вращение фигуры. Таким образом осуществляется анимация (оживление) трехмерной графики.

 

19.gif

Изображение: 

20.gif

Изображение: 

21.gif

Изображение: 

22.gif

Изображение: 

20. Заключительные замечания по графике

 

Заключительные замечания по графике

Итак, мы рассмотрели основные приемы форматирования графиков, в основном используя средства панели инструментов и отдельные, достаточно очевидные, команды из меню графического окна. Более подробно интерфейс пользователя графического окна будет описан в уроке 5.

Хотя многие приемы форматирования графики заимствованы из технологии визуально-ориентированного программирования, в базовой системе MATLAB (без дополнительных пакетов расширения (toolbox)) все еще отсутствует полноценная возможность такого программирования, даже с учетом расширенных возможностей дескрипторной графики. Это видно уже из того, что вносимые форматированием изменения в графиках не сопровождаются генерацией программных кодов, которые в последующем при их вызове с новыми параметрами порождали бы построение графиков с новыми параметрами. Пользователь может лишь записать на диск копии созданных графиков в формате растрового изображения (.bmp) и использовать их в целях иллюстрации своих материалов.

Однако средства MATLAB позволяют опытным программистам создать расширения системы с визуально-ориентированной технологией программирования. Самым наглядным примером этого является система моделирования динамических объектов Simulink с набором моделей из готовых блоков. При этом автоматически создается не только сложная графическая блок-схема моделируемого устройства, но и система уравнений состояния, решение которой и является основой моделирования.

 

21. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Строить графики функций одной переменной.

  • Строить столбцовые диаграммы.

  • Строить трехмерные графики.

  • Вращать графики мышью.

  • Использовать контекстное меню графиков.

  • Управлять форматом графиков.

 

Урок 4. Работа со справкой и примерами

1. Урок 4. Работа со справкой и примерами

 

Урок №4.

Работа со справкой и примерами

  • Работа с интерактивной справкой

  • Справка по объекту, группе объектов, ключевым словам

  • Просмотр текстов примеров и m-файлов

  • Работа со справочной системой

  • Просмотр документации в формате PDF

  • Демонстрационные примеры 

  • Запуск приложения Simulink

 

2. Интерактивная справка из командной строки

 

Интерактивная справка из командной строки

Вызов списка разделов интерактивной справки

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 для доступа к пакетам расширения может потребоваться указание пути к их файлам на диске в панели браузера файловой системы.

 

3. Справка по конкретному объекту

 

Справка по конкретному объекту

Для получения справки по какому-либо конкретному объекту используются команды

» 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.

 

4. Справка по группе объектов

 

Справка по группе объектов

Пользователя системы 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.

После уточнения состава определенной группы объектов можно получить детальную справку по любому выбранному объекту. Как это делается, было описано выше.

 

5. Справка по ключевому слову

 

Справка по ключевому слову

Ввиду обилия в системе 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 с графическим пользовательским интерфейсом.

 

6. Дополнительные справочные команды

 

Дополнительные справочные команды

В командном режиме можно получить справочные данные с помощью ряда команд:

  •  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] для работы с пакетами расширения. В дальнейшем мы рассмотрим и другие команды, которые могут быть отнесены к группе дополнительных справочных команд.

 

7. Примеры, вызываемые из командной строки

 

Примеры, вызываемые из командной строки

Вызов списка демонстрационных примеров

Одним из самых эффективных методов знакомства со сложными математическими системами является ознакомление со встроенными примерами их применения.

Система 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 просмотреть с десяток примеров из интересующих их областей. Это займет от силы полчаса или даже меньше, но зато позволит оценить поистине неисчерпаемые возможности системы при решении сложных математических и физических задач, а также превосходные средства графической визуализации решений.

 

8. Пример - тест на быстродействие компьютера

 

Пример — тест на быстродействие компьютера

Большинство пользователей, включая автора данной книги, очень ревниво относится к вычислительной мощности своего компьютера. Поэтому в качестве первого демонстрационного примера возьмем тест на сравнительную оценку скорости работы — 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 — одна из основных систем для выполнения математических расчетов.

 

1.gif

Изображение: 

1a.gif

Изображение: 

1b.gif

Изображение: 

1c.gif

Изображение: 

9. Что больше - e^pi или pi^?

 

Что больше — 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. Но тогда это означало бы, что вы просто технарь или физик-экспериментатор, а не истинный математик. Впрочем, у каждого есть свои взгляды на применение математики. И чьи лучше — вопрос весьма спорный.

 

2.gif

Изображение: 

2a.gif

Изображение: 

2c.gif

Изображение: 

10. Анимация в пространстве - аттрактор Лоренца

 

Анимация в пространстве — аттрактор Лоренца

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


Рис. 4.3. График, иллюстрирующий работу аттрактора Лоренца

На рис. 4.3 показан пример визуализации динамического процесса в так называемом аттракторе Лоренца (пример lorenz) — колебательной системе, создающей хаотические и довольно замысловатые колебания. Наиболее наглядна их визуализация с помощью трехмерного фазового портрета колебаний, который приведен на рис. 4.3. К сожалению, на рис. 4.3 показана лишь завершающая стадия — на экране можно реально видеть движение образующей точки во времени и убедиться в своеобразной хаотичности колебаний. Для запуска анимации надо нажать кнопку Start (Пуск) окна графики.

 

3a.gif

Изображение: 

3b.gif

Изображение: 

11. Встроенные фигуры

 

Встроенные фигуры

MATLAB имеет ряд встроенных фигур, которые можно легко выводить на построение простым указанием их названия. Так, введя команду knot, можно задать построение сложной пространственной фигуры узла с функциональной окраской (рис. 4.4). При запуске этого примера нажатием кнопки Spinmap можно наблюдать изменение окраски, имитирующее как бы движение жидкости внутри замкнутой трубки, образующей данную фигуру.

Рис. 4.4. Построение фигуры-узла

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

 

4.gif

Изображение: 

12. В паутине нейронных сетей

 

В паутине нейронных сетей

Даже десятка таких книг, как эта, едва ли хватит для исчерпывающего описания системы MATLAB со всеми ее пакетами расширения. Пакетам расширения посвящена монография [39]. Многие из таких пакетов, например по нейронным сетям, сплайнам, обработке сигналов, проектированию систем управления и т. д., относятся к самым современным и актуальным направлениям науки и техники. Нередко создание таких пакетов для системы MATLAB возглавили основатели указанных научных направлений, и по каждому такому направлению опубликованы десятки научных монографий.

Примером одного из таких направлений является пакет Neural Networks (нейронные сети). Эти сети основаны на аналогии с ячейкой нашего мозга — нейроном. Важное свойство нейрона — возможность к самообучению и распознаванию различных образных представлений и сигналов. В разделе справочной системы Examples and Demos (Примеры и демо) имеется множество конкретных примеров применения нейронных сетей. На рис. 4.5 показан вид демонстрационной панели одного из этих примеров.


Рис. 4.5. Демонстрационная панель примера на применение нейронных сетей

Вы имеете возможность задавать различные параметры нейронной сети, позволяющей распознать букву Т в ее искаженном изображении. Демонстрационная панель построена в виде виртуальной лаборатории и позволяет мышью менять вид образцов (вводя закрашенные квадратики) и оценивать погрешность и вероятность распознавания образа.

 

5.gif

Изображение: 

13. Просмотр текстов примеров и m-файлов

 

Просмотр текстов примеров и 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, можно получить справку по любой конкретной функции или команде. Ввиду того что текст примера имеет довольно большой объем, мы ограничились приведением только его фрагмента, относящегося к первому слайду. Остальные слайды просто опущены — на их месте стоит многоточие.

 

14. Справочная система MATLAB 6.0

 

Справочная система MATLAB 6.0

Меню Help

Основной доступ к справочной информации обеспечивает меню 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 г.). Номер лицензии ввиду его конфиденциальности опущен — точнее, заменен нулем.

 

6.gif

Изображение: 

7.gif

Изображение: 

15. Запуск справочной системы

 

Запуск справочной системы


Рис. 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

 

8.gif

Изображение: 

9.gif

Изображение: 

10.gif

Изображение: 

16. Виды работы справочной системы

 

Виды работы справочной системы

Как видно из рис. 4.8, окно разделов справочной системы имеет четыре вкладки, соответствующие четырем видам работы справочной системы:

  •  Contents (Содержание)— поиск информации по контексту (или попросту по обычному оглавлению с разделами справки);

  •  Index (Индекс)— поиск информации по индексному (алфавитному) каталогу; 

  •  Search (Поиск)— поиск всех тем справки, в которые включена заданная для поиска фраза или отдельное слово;

  •  Favorites — доступ к специальным возможностям справочной системы.

Эти виды работы могут применяться в зависимости от конкретных задач пользователя.

 

17. Работа с индексным каталогом

 

Работа с индексным каталогом

Мы уже привели пару примеров использования справочной системы по контексту. Теперь рассмотрим работу с индексным каталогом.

Будучи крупной математической системой, MATLAB имеет многие сотни функций, свойства которых запомнить трудно даже пользователю-профессионалу. Да и нужно ли? Справочная система MATLAB позволят найти информацию по нужной функции в считанные секунды.

Если вы знаете имя нужной вам функции, то проще всего воспользоваться индексным каталогом. Откройте в левом окне справки вкладку Index и в поле поиска (сверху) укажите имя нужной вам функции или хотя бы его начальную часть. Нажмите клавишу Enter и через секунду-другую вы получите список всех объектов, включающих заданное имя.

 

18. Поиск по всей справке

 

Поиск по всей справке

Еще один полезный вид работы со справочной системой — поиск по заданному слову или фразе. Он происходит почти аналогично ранее приведенному случаю, но при открытой вкладке Search (Поиск) в левом окне справочной системы.

При выдаче данных о функциях используется справочник по ним (Function Reference) и обеспечивается автоматический поиск нужной функции.

 

19. Новые функции системы MATLAB 6.0

 

Новые функции системы MATLAB 6.0

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

Какие новые функции включены в систему MATLAB 6.0? Для ответа на этот вопрос просто наберите в поле поиска вкладки Search (Поиск) слово Functions (Функции) в режиме Full Text (полнотекстового поиска). Вы сразу найдете раздел New Functions (Новые функции) в левом окне и, выделив его мышью, получите в правом окне перечень новых функций.

Новых функций в системе MATLAB 6.0 совсем немного — два десятка, и в основном это довольно специфические функции. Но эффективность и возможности старых функций значительно увеличены.

 

20. Поиск функций по имени

 

Поиск функций по имени

Если вас не интересует всякая «шелуха», которой сопровождается поиск по заданному слову или фразе (особенно полнотекстовый поиск Full Text), то вы можете перейти к поиску по имени функции — тип поиска Function Name. Это предусмотрено на вкладке Search (Поиск).

Нетрудно заметить, что на этот раз найден только главный раздел функции с именем sin. Остальные разделы отсеяны фильтрами справочной системы.

 

21. Просмотр документации в формате PDF

 

Просмотр документации в формате 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 подготовлены на английском языке (и кое-что на японском).

 

11.gif

Изображение: 

12.gif

Изображение: 

13.gif

Изображение: 

22. Галерея примеров - MATLAB Demos

 

Галерея примеров — 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-файла данного примера.

 

14a.gif

Изображение: 

14b.gif

Изображение: 

15.gif

Изображение: 

23. Демонстрационные примеры Simulink

 

Демонстрационные примеры Simulink

Следующий пример, показанный на рис. 4.16, иллюстрирует доступ к примерам пакета системного моделирования Simulink — одного из самых мощных пакетов прикладных программ, расширяющих возможности системы MATLAB. Этот пакет создан для моделирования линейных и нелинейных динамических систем заданием их в виде системы функциональных блоков с автоматическим составлением и решением матричной системы дифференциальных уравнений состояния, описывающей работу созданной модели.

На рис. 4.17 приведен пример просмотра одного из простых примеров — моделирования динамической системы второго порядка, описываемой нелинейными дифференциальными уравнениями Ван-дер-Поля. Сверху показана блок-схема моделируемого объекта, а снизу — результат моделирования его работы. Для пуска моделирования в панели инструментов окна системы Simulink нажимается кнопка пуска с изображением треугольника.

Рис. 4.16. Доступ к примерам пакета Simulink

Окно MAT LAB Demos дает возможность ознакомиться со многими десятками самых серьезных примеров применения системы MATLAB и позволяет убедиться в высоком качестве визуализации их решений. При необходимости всегда можно ознакомиться с файлом любого примера и использовать его для решения схожих задач.

Рис. 4.17. Пример моделирования нелинейной динамической системы второго порядка средствами пакета моделирования Simulink

 

16.gif

Изображение: 

17a.gif

Изображение: 

17b.gif

Изображение: 

24. Копирование демонстрационных примеров

 

Копирование демонстрационных примеров

Вполне возможно, что вы захотите воспользоваться каким-либо примером для своих целей. Для этого можно использовать m-файл примера или перенести его текст в командное окно MATLAB, используя буфер обмена. Покажем, как это делается. В нижней части окна примера показано, каким образом осуществляется копирование примера: текст примера выделяется мышью и используется команда Сору (Копировать) меню Edit окна примера, в результате чего текст примера попадет в буфер обмена.

После этого надо вернуться в командное окно MATLAB и, используя команду Paste (Вставить) меню Edit, перенести текст примера из буфера в текущую строку ввода. Выполнив команду (как обычно, клавишей Enter), можно наблюдать исполнение примера, как показано на рис. 4.18.

Трудно сказать почему, но создатели MATLAB в последних версиях отказались от возможности копирования выделенного в примерах окна Demos текста программ с помощью контекстного меню правой клавиши мыши. Зато появилась возможность исполнения выделенных в справке (как на заданную функцию в командном режиме, так и в HTML-браузере справки) примеров с помощью команды Evaluate Selection в контекстном меню правой клавиши мыши в тексте справки.

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

Рис. 4.18. Исполнение скопированного примера из командного окна MATLAB

 

18.gif

Изображение: 

25. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Использовать команды справки.

  • Вызывать список демонстрационных примеров.

  • Исполнять примеры и копировать их.

  • Просматривать листинги m-файлов командой type.

  • Работать с различными разделами справочной системы.

  • Просматривать документацию MATLAB в формате PDF.

  • Работать с демонстрационными примерами системы MATLAB.

  • Запускать приложение Simulink.

 

Урок 5. Пользовательский интерфейс MATLAB

1. Урок 5. Пользовательский интерфейс MATLAB

 

Урок №5.

Пользовательский интерфейс MATLAB

  •  Общая характеристика пользовательского интерфейса

  •  Панель инструментов

  • Операции с буфером обмена

  • Браузеры рабочей области и файловой структуры

  • Запуск приложения Simulink

  • Вызов справки по системе MATLAB

  • Меню системы MATLAB

  • Работа с файлами

  • Настройка MATLAB и функция path

  • Обеспечение печати

  • Интерфейс редактора и отладчика т-файлов

  • Файлы сценариев и функций 

  •  Интерфейс графических окон

  • Общение MATLAB с операционной системой

 

2. Общая характеристика пользовательского интерфейса

 

Общая характеристика пользовательского интерфейса

Как видно из материалов предыдущих уроков, в новой версии 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 (Текущая папка) в левой части основного окна (сверху)

  • применение цветового выделения выражений в командной строке, что упрощает оперативный контроль их синтаксиса по мере ввода.

Эти отличия указывают на то, что разработчики новой версии уделили больше внимания оперативному контролю за состоянием системы, который ранее (в прежних версиях) был как бы за кадром.

 

1.gif

Изображение: 

3. Упрощенный интерфейс

 

Упрощенный интерфейс

Сделав решительный шаг в обновлении интерфейса, разработчики 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

 

2.gif

Изображение: 

4. Работа с панелью инструментов

 

Работа с панелью инструментов

Средства панели инструментов

Панель инструментов (рис. 5.3) дает наиболее простой и удобный (особенно для начинающих пользователей) способ работы с системой MATLAB. При этом основные команды вводятся указанием курсором мыши на нужную кнопку с нажатием левой клавиши мыши. Кнопки имеют изображение, явно подсказывающее их назначение.

Рис. 5.3. Часть окна системы MATLAB с меню и панелью инструментов

Прежде всего перечислим назначение всех кнопок панели инструментов:

  • New M-file (Новый m-файл) — выводит пустое окно редактора m-файлов;

  •  Open file (Открыть файл) — открывает окно для загрузки m-файла;

  •  Cut (Вырезать)— вырезает выделенный фрагмент и помещает его в буфер;

  • Сору (Копировать)— копирует выделенный фрагмент в буфер;
    Paste (Вставить)— переносит фрагмент из буфера в текущую строку ВВОДА

  • Undo (Отменить)— отменяет предшествующую операцию;

  • Redo (Повторить) — восстанавливает последнюю отмененную операцию; 

  •  Simulink — открывает окно браузера библиотек Simulink; 

  •  Help (Помощь)— открывает окно справки.

Набор кнопок панели инструментов обеспечивает выполнение наиболее часто необходимых команд и вполне достаточен для повседневной работы с системой. 

  •  назначении кнопок говорят и всплывающие подсказки, появляющиеся, когда курсор мыши устанавливается на соответствующую кнопку. 

  • ни имеют вид желтого прямоугольника с текстом короткой справки — см. пример такой подсказки на рис. 2.12 у кнопки Help панели инструментов. Любопытно отметить, что доступ к браузерам рабочей области и файловой системы из панели инструментов убран.

 

3.gif

Изображение: 

5. Вызов окна открытия нового файла

 

Вызов окна открытия нового файла

Кнопка New M-file открывает окно редактора/отладчика m-файлов. Это окно показано на рис. 5.4. Работу с этим средством мы обсудим позже.

Рис. 5.4. Пустое окно редактора/отладчика m-файлов

По умолчанию файлу дается имя Untitled (безымянный), которое впоследствии (при записи файла) можно изменить на другое, отражающее тему задачи. Это имя отображается в титульной строке окна редактирования m-файла, которое размещается в окне редактора/отладчика и видно на рис. 5.4. В редакторе/отладчике можно редактировать несколько m-файлов, и каждый из них будет находиться в своем окне редактирования, хотя активным может быть только одно окно, расположенное поверх других окон.

Примечание

Обратите внимание, что панель инструментов является контекстно-зависимой. Для редактора/отладчика m-файлов она имеет несколько иной набор инструментов, чем для окна командного режима работы (см. рис. 5.1). Позже мы уточним эти отличия.

 

4.gif

Изображение: 

6. Вызов окна загрузки имеющегося файла

 

Вызов окна загрузки имеющегося файла

Кнопка Open file (Открыть файл) служит для загрузки в редактор/отладчик ранее созданных m-файлов, например входящих в пакет расширения (Toolbox) системы или разработанных пользователем. Она открывает окно, которое является типичным элементом интерфейса Windows-приложений и показано на рис. 5.5 внутри окна редактора/отладчика m-файлов.

Рис. 5.5. Окно загрузки файла в окне редактора/отладчика

В окне загрузки файлов с помощью раскрывающегося списка Папка и вертикальной полосы прокрутки можно «пройтись» по всем дискам, папкам и файлам. Чтобы выбрать нужный файл для загрузки, его требуется выделить мышью. Выбор завершается двойным щелчком на имени файла, нажатием клавиши Enter или щелчком на кнопке Открыть. Любое из этих действий приводит к загрузке документа в текущее окно системы. Кнопка Отмена или клавиша Esc позволяет отказаться от загрузки.

Примечание

Пусть читателя не волнуют внезапно появившиеся русскоязычные надписи на элемен-тах интерфейса окна загрузки файлов. Они говорят лишь о том, что используется окно стандартной русифицированной операционной системы Windows 95/98/Ме, которая обычно устанавливается у наших пользователей.

Для вызова одного из ранее использовавшихся документов достаточно щелкнуть мышью на его имени в списке, находящемся над командой Exit (Выход) в меню File. После загрузки файла с документом его текст появляется в текущем окне — на рис. 5.5 показан текст выбранного файла graf2d.rn (демонстрация возможностей двумерной графики). Его можно начинать редактировать или запускать на исполнение.

 

5.gif

Изображение: 

7. Операции с буфером обмена

 

Операции с буфером обмена

Кнопки 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 очищает окно от содержимого данной сессии.

 

6a.gif

Изображение: 

6b.gif

Изображение: 

7.gif

Изображение: 

8.gif

Изображение: 

8. Отмена результата предшествующей операции

 

Отмена результата предшествующей операции

Часто, выполнив какую-то операцию, мы отмечаем, что она оказалась ошибочной. При работе в MATLAB такой ситуации пугаться не стоит, — нажатие кнопки Undo (Отменить) панели инструментов приведет к отмене последнего действия, выполненного в текущей строке. Операции в предыдущих строках документа этой командой не отменяются. Если оказалось, что вы зря произвели отмену последней операции, то ее легко восстановить, введя с панели инструментов операцию Redo (Восстановить).

 

9. Запуск приложения Simulink

 

Запуск приложения 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.

 

9.gif

Изображение: 

10.gif

Изображение: 

10. Вызов справки MATLAB

 

Вызов справки MATLAB

Последняя кнопка панели инструментов Help (Помощь) открывает окно с перечнем разделов справочной системы. Это окно было показано на рис. 4.8. В уроке 4 мы подробно ознакомились с работой со справочной системой, так что на этом можно закончить описание средств системы MATLAB, доступ к которым обеспечивает панель инструментов.

 

11. Средства контроля рабочей области и файловой системы

 

Средства контроля рабочей области и файловой системы

Браузер рабочей области

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

Как отмечалось, в левой части окна системы MATLAB 6.0 имеется окно специального браузера рабочей области — Workspace Browser. Он служит для просмотра ресурсов рабочей области памяти. Браузер дает наглядную визуализацию содержимого рабочей области. Окно браузера рабочей области выполняет и другие важные функции — позволяет просматривать существующие в памяти объекты, редактировать их содержимое и удалять объекты из памяти. Для вывода содержимого объекта достаточно выделить его имя с помощью мыши и щелкнуть на кнопке

Open (Открыть). Объект можно открыть и двойным щелчком на его имени в списке. Откроется окно редактирования массива Array Editor, показанное на рис. 5.11 применительно к матрице М2.

Рис. 5.11. Пример просмотра содержимого матрицы

Окно редактирования матрицы дает удобный доступ для редактирования любого элемента матрицы по правилам, принятым при работе с электронными таблицами. [ В уроке 23 показано, как использовать Microsoft Excel для ввода матриц. — Примеч. ред. ] . Основное из них — быстрый доступ к любому элементу матрицы. Можно также менять тип значений элементов, выбирая его из списка, предоставляемого меню Numeric format (Формат чисел). В окне также выводятся данные о числе строк и столбцов матрицы.

 

11.gif

Изображение: 

11b.gif

Изображение: 

12. Команды просмотра рабочей области who и whos

 

Команды просмотра рабочей области 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) более удобен и нагляден.

 

13. Браузер файловой структуры

 

Браузер файловой структуры

Для просмотра файловой структуры 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-файлов или файлов демонстрационных примеров для просмотра, редактирования и модификации.

 

12.gif

Изображение: 

14. Работа с меню

 

Работа с меню

Команды, операции и параметры

Открытая позиция строки меню содержит различные операции и команды. Выделенная команда или операция исполняется при нажатии клавиши Enter (Ввод). Выполнение команды можно также осуществить щелчком мыши или нажатием на клавиатуре клавиши, соответствующей выделенному символу в названии команды.

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

Параметр (option)— это значение определенной величины, действующее во время текущей сессии. Параметрами обычно являются указания на применяемые наборы шрифтов, размеры окна, цвет фона и т. д.

 

15. Меню системы

 

Меню системы

Перейдем к описанию основного меню системы MATLAB 6.0. Это меню (см. рис. 5.1 сверху) выглядит довольно скромно и содержит всего шесть пунктов:

  •  File — работа с файлами;

  • Edit — редактирование сессии;

  • View — вывод и скрытие панели инструментов;

  • Web — доступ к Интернет-ресурсам;

  • Windows — установка Windows-свойств окна;

  • Help — доступ к справочным подсистемам.

По сравнению с версией 5.3.1 добавлена единственная позиция Web, дающая доступ к Интернет-ресурсам, описанный в уроке 1.

 

16. Подменю File

 

Подменю 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

 

13.gif

Изображение: 

17. Открытие окон для подготовки новых файлов

 

Открытие окон для подготовки новых файлов

Команда New, как отмечено, открывает окна для подготовки новых файлов. Для трех типов файлов (m-файлы, графические файлы и файлы Simulink-моделей) окна их редакторов уже описывались. Новой является позиция GUI подменю File. Она открывает окно редактора элементов пользовательского интерфейса, показанное на рис. 5.14.

Рис. 5.14. Окно редактора элементов GUI

К подробному описанию этого окна мы еще вернемся. А пока отметим, что работа с редактором довольно очевидна.

 

14.gif

Изображение: 

18. Загрузка и сохранение файлов

 

Загрузка и сохранение файлов

Команды Open... (Открыть) и Import data... (Импортировать данные) выводят стандартные окна (см. рис. 5.5) для загрузки m-файлов и файлов данных. Команда Save Workspace As... (Сохраните рабочую область как...) открывает стандартное окно записи файлов с расширением .mat. Они хранят определения переменных, массивов, функций пользователя и иных объектов, созданных в ходе текущей сессии работы. Эти команды в силу общеизвестности в более подробных комментариях не нуждаются.

 

19. Установка путей доступа файловой системы

 

Установка путей доступа файловой системы

Команда Set Path... (Установить путь) открывает окно редактора путей доступа файловой системы. Это окно показано на рис. 5.15.

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


Рис. 5.15. Окно редактора путей доступа файловой системы

 

15.gif

Изображение: 

20. Настройка элементов интерфейса

 

Настройка элементов интерфейса

Окно настройки элементов интерфейса представлено на рис. 5.16.


Рис. 5.16. Окно настройки элементов интерфейса

Интерфейс MATLAB 6.0 стал настолько удобным и даже изысканным, что мало вероятно, что кому-либо захочется менять его в мере, большей, чем это предусмотрено командами подменю View [ Это может потребоваться даже для настройки под особенности операционной системы. Например, для уточнения расположения вашей программы чтения PDF-файлов, вам, возможно, придется вручную удалить апострофы из пути к ее исполняемому файлу. — Примеч. ред. ]. Однако такая возможность есть — команда Preferences... (Предпочтения) выводит окно детальной настройки элементов интерфейса (рис. 5.16). В левой части этого окна имеется древообразный список элементов интерфейса системы, а в правой части—поле задания параметров для выбранного типа элементов. Поскольку изменение параметров производится обычно очень редко, мы не будем детально рассматривать это окно. Заинтересованный читатель наверняка разберется с нужными ему параметрами самостоятельно.

 

16.gif

Изображение: 

21. Обеспечение печати - команды Print и Print Selection

 

Обеспечение печати — команды 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 для печати приходится пользоваться редко.

 

17.gif

Изображение: 

18.gif

Изображение: 

22. Меню Edit - средства редактирования документов

 

Меню 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, вводимая в командном режиме.

 

19.gif

Изображение: 

23. Меню View и Window

 

Меню View и Window

В MATLAB 6.0, что уже описывалось, набор команд меню View существенно расширен, и теперь с помощью этого меню можно существенно менять вид пользовательского интерфейса.
Меню Window активно только в случае, если в систему загружены файлы. При этом оно имеет единственную команду Close All (закрыть все окна) и открывающийся список всех загруженных файлов. Он позволяет выбрать окно указанного пользователем файла и сделать его открытым.

 

24. Основы редактирования и отладки m-файлов

 

Основы редактирования и отладки 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

 

20.gif

Изображение: 

21.gif

Изображение: 

25. Цветовые выделения и синтаксический контроль

 

Цветовые выделения и синтаксический контроль

Редактор/отладчик m-файлов выполняет синтаксический контроль программного кода по мере ввода текста. При этом используются следующие цветовые выделения:

  • ключевые слова языка программирования — синий цвет; 

  • операторы, константы и переменные — черный цвет;

  • комментарии после знака % — зеленый цвет;

  • символьные переменные (в апострофах) — зеленый цвет;

  • синтаксические ошибки — красный цвет.

Благодаря цветовым выделениям вероятность синтаксических ошибок снижается.

Однако далеко не все ошибки диагностируются. Ошибки, связанные с неверным применением операторов или функций (например, применение оператора - вместо + или функции cos(x) вместо sin(x) и т. д.), не способна обнаружить ни одна система программирования. Устранение такого рода ошибок (их называют семантическими) — дело пользователя, отлаживающего свои алгоритмы и программы.

 

26. Понятие о файлах-сценариях и файлах-функциях

 

Понятие о файлах-сценариях и файлах-функциях

Здесь полезно отметить, что m-файлы, создаваемые редактором/отладчиком, делятся на два класса:

  • файлы-сценарии, не имеющие входных параметров;

  • файлы-функции, имеющие входные параметры.

Видимый в окне редактора на рис. 5.21 файл является файлом-сценарием, или Script-файлом. Данный файл не имеет списка входных параметров и является примером простой процедуры без параметров. Он использует глобальные переменные, т. е. такие переменные, значения которых могут быть изменены в любой момент сеанса работы и в любом месте программы.

Рис. 5.22. Исполнение файла-сценария из командной строки

Для запуска файла-сценария из командной строки MATLAB достаточно указать его имя в этой строке. Рис. 5.22 поясняет это. Обратите внимание на команду grid on, исполняемую после запуска созданного файла. Эта команда наносит на график сетку из точечных линий.

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

Иными словами, локальные переменные могут иметь те же имена (идентификаторы), что и глобальные переменные (хотя правила культурного программирования не рекомендуют смешивать имена локальных и глобальных переменных). В дальнейшем мы рассмотрим этот вопрос более подробно, а пока вернемся к теме данного урока — описанию интерфейса компонентов системы MATLAB.

 

22.gif

Изображение: 

27. Панель инструментов редактора и отладчика

 

Панель инструментов редактора и отладчика

Редактор имеет свое меню и свою инструментальную панель. Внешний вид инструментальной панели показан на рис. 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. А вот о назначении других кнопок надо поговорить.

 

28. Работа сточками прерывания

 

Работа с точками прерывания

Основным приемом отладки 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 (Выход из режима отладки) прекращает операции отладки.

 

24.gif

Изображение: 

29. Интерфейс графических окон

 

Интерфейс графических окон

Обзор интерфейса графических окон

В уроке 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 и выше.

 

25.gif

Изображение: 

30. Панель инструментов камеры обзора

 

Панель инструментов камеры обзора

Отличительной особенностью окна графики в версии MATLAB 6.0 стало появление второй инструментальной панели со средствами форматирования трехмерной (3D) графики. Эта панель (она видна на рис. 5.25 под основной панелью инструментов) выводится командой View > Camera Toolbar.

Эта панель управляет некоторой воображаемой фотокамерой (или просто камерой), с помощью которой как бы наблюдается объект. Кнопки имеют наглядные изображения, поясняющие действия кнопок. В связи с этим их подробное описание лишено смысла — проще опробовать их в действии.

 

31. Меню инструментов Tools

 

Меню инструментов 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.

 

32. Вращение графиков мышью

 

Вращение графиков мышью

Хорошее впечатление оставляет возможность вращения графиков мышью — прием, введенный в целый ряд систем компьютерной математики (Mathcad, Maple 6 и Mathematica 4). При вводе этой команды вокруг фигуры появляется обрамляющий ее параллелепипед, который можно вращать мышью (при нажатой левой кнопке) в том или ином направлении. Отпустив кнопку мыши, можно наблюдать график в пространстве. Интересно, что эта возможность действует даже в отношении двумерных графиков (см. рис. 5.25).- При этом вращается плоскость, в которой расположен график. Эта плоскость размещается в упомянутом параллелепипеде.

 

33. Операции вставки

 

Операции вставки

В уроке 3 мы уже рассматривали операции вставки с помощью основной панели инструментов. Эти возможности продублированы в позиции Insert (Вставка) меню графического окна. Рис. 5.26 показывает пример рисунка, в котором выполнены основные операции вставки с помощью команд меню Insert (Вставка). Это нанесение надписей по осям, титульной надписи, надписи внутри рисунка, стрелки, отрезка прямой, легенды и шкалы цветов. На этом рисунке меню Insert показано в открытом состоянии.

Рис. 5.26. Примеры операций вставки в графическом окне

 

26.gif

Изображение: 

34. Общение MATLAB с операционной системой

 

Общение 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 ('путь к папке и имя папки').

 

35. Выполнение команд !, dos, unix и vms

 

Выполнение команд !, 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.

 

36. Общение с Интернетом из командной строки

 

Общение с Интернетом из командной строки

Для общения с Интернетом служит команда 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.

 

37. Некоторые другие команды

 

Некоторые другие команды

Есть еще несколько команд для общения с операционными системами:

  • 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. На этом рассмотрение команд прямого общения с операционными системами можно считать законченным.

 

38. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Работать с меню, панелями инструментов и буфером обмена.

  • Использовать браузеры рабочего пространства и файловой системы.

  • Запускать примеры приложения Simulink.

  • Осуществлять печать документов.

  • Работать с редактором/отладчиком m-файлов.

  • Различать файлы-сценарии и файлы-функции.

  • Работать с окнами графики.

  • Использовать команды взаимодействия MATLAB с операционной системой и Интернетом.

 

Урок 6. Обычная графика MATLAB

1. Урок 6. Обычная графика MATLAB

 

Урок №6.

Обычная графика MATLAB

  • Построение графиков точками и отрезками прямых

  • Графики в логарифмическоми полулогарифмическом масштабе

  • Гистограммы и диаграммы 

  • Графики специальных типов

  • Создание массивов данных для трехмерной графики

  • Построение графиков трехмерных поверхностей, сечений и контуров

  • Средства управления подсветкой и обзором фигур

  • Средства оформления графиков

  • Одновременный вывод нескольких графиков

  • Управление цветовой палитрой 

  • Окраска трехмерных поверхностей

  • Двумерные и трехмерные графические объекты

Одно из достоинств системы MATLAB — обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Особое внимание в системе уделено трехмерной графике с функциональной окраской отображаемых фигур и имитацией различных световых эффектов.

Описанию графических функций и команд посвящена обширная электронная книга в формате PDF. Объем материала по графике настолько велик, что помимо вводного описания графики в уроке 3 в этой книге даются еще два урока по средствам обычной и специальной графики. Они намеренно предшествуют систематизированному описанию большинства функций системы MATLAB, поскольку графическая визуализация вычислений довольно широко используется в последующих материалах книги. При этом графические средства системы доступны как в командном режиме вычислений, так и в программах. Этот урок рекомендуется изучать выборочно или выделить на него не менее 4 часов.

 

2. Построение графиков отрезками прямых

 

Построение графиков отрезками прямых

Функции одной переменной у(х) находят широкое применение в практике математических и других расчетов, а также в технике компьютерного математического моделирования. Для отображения таких функций используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси — горизонтальная 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 строится штрих пунктирной линией с точками в виде знака «плюс» красного цвета, а график уЗ строится штриховой линией с кружками черного цвета. К сожалению, на черно-белых рисунках этой книги вместо разных цветов видны разные градации серого цвета.

 

1.gif

Изображение: 

2.gif

Изображение: 

3.gif

Изображение: 

3. Графики в логарифмическом масштабе

 

Графики в логарифмическом масштабе

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

  •  loglogx(...) — синтаксис команды аналогичен ранее рассмотренному для функции plot(...). Логарифмический масштаб используется для координатных осей X и У. Ниже дан пример применения данной команды:

» x=logspace(-1,3); 

» loglog(x.exp(x)./x) 

» grid on

На рис. 6.4 представлен график функции ехр(х)/х в логарифмическом масштабе. Обратите внимание на то, что командой grid on строится координатная сетка.

Неравномерное расположение линий координатной сетки указывает на логарифмический масштаб осей.

Рис. 6.4. График функции ехр(x)/x в логарифмическом масштабе

 

4a.gif

Изображение: 

4b.gif

Изображение: 

4. Графики в полулогарифмическом масштабе

 

Графики в полулогарифмическом масштабе

В некоторых случаях предпочтителен полулогарифмический масштаб графиков, когда по одной оси задается логарифмический масштаб, а по другой — линейный.

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

  •  semilogx(...) — строит график функции в логарифмическом масштабе (основание 10) по оси X и линейном по оси Y;

  • semilоgу (...) — строит график функции в логарифмическом масштабе по оси Y и линейном по оси X.

Рис. 6.5. График экспоненты в полулогарифмическом масштабе

Запись параметров (...) выполняется по аналогии с функцией plot(...). Ниже приводится пример построения графика экспоненциальной функции:

» х=0:0.5:10;

» semilogy(x.exp(x))

График функции при логарифмическом масштабе по оси У представлен на рис. 6.5.

Нетрудно заметить, что при таком масштабе график экспоненциальной функции выродился в прямую линию. Масштабной сетки теперь уже нет.

 

5.gif

Изображение: 

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. Пример построения столбцовой диаграммы с горизонтальными столбцами

Какое именно расположение столбцов выбрать, зависит от пользователя, использующего эти команды для представления своих данных.

 

6a.gif

Изображение: 

6b.gif

Изображение: 

6c.gif

Изображение: 

7a.gif

Изображение: 

7b.gif

Изображение: 

6. Построение гистограмм

 

Построение гистограмм

Классическая гистограмма характеризует числа попаданий значений элементов вектора 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. Пример построения гистограммы

Нетрудно заметить, что распределение случайных чисел близко к нормальному закону. Увеличив их количество, можно наблюдать еще большее соответствие этому закону.

 

8.gif

Изображение: 

7. Лестничные графики - команды stairs

 

Лестничные графики — команды 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).

 

9.gif

Изображение: 

8. Графики с зонами погрешности

 

Графики с зонами погрешности

Если данные для построения функции определены с заметной погрешностью, то используют графики функций типа 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(...), возвращает вектор дескрипторов графических объектов.

 

10.gif

Изображение: 

9. График дискретных отсчетов функции

 

График дискретных отсчетов функции

Еще один вид графика функции у(х) — ее представление дискретными отсчетами. Этот вид графика применяется, например, при описании квантования сигналов. Каждый отсчет представляется вертикальной чертой, увенчанной кружком, причем высота черты соответствует 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(...) строит график и возвращает вектор дескрипторов графических объектов.

 

11.gif

Изображение: 

10. Графики в полярной системе координат

 

Графики в полярной системе координат

В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину 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. График функции в полярной системе координат

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

 

12.gif

Изображение: 

11. Угловые гистограммы

 

Угловые гистограммы

Угловые гистограммы находят применение в индикаторах радиолокационных станций, для отображения «роз» ветров и при построении других специальных графиков. Для этого используется ряд команд типа 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) для построения подобной гистограммы.

 

13.gif

Изображение: 

12. Графики векторов

 

Графики векторов

Иногда желательно представление ряда радиус-векторов в их обычном виде, то есть в виде стрелок, исходящих из начала координат и имеющих угол и длину, определяемые действительной и мнимой частью комплексных чисел, представляющих эти векторы. Для этого служит группа команд 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(...) строит график и возвращает дескрипторы графических объектов.

 

14.gif

Изображение: 

13. График проекций векторов на плоскость

 

График проекций векторов на плоскость

Иногда полезно отображать комплексные величины вида 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(...)строит график и возвращает вектор дескрипторов графических объектов.

 

15a.gif

Изображение: 

15b.gif

Изображение: 

14. Контурные графики

 

Контурные графики

Контурные графики служат для представления на плоскости функции двух переменных вида 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

Графики этого типа часто используются в топографии для представления на листе бумаги (как говорят математики — на плоскости) объемного рельефа местности. Для оценки высот контурных линий используется их функциональная окраска.

 

16a.gif

Изображение: 

16b.gif

Изображение: 

15. Создание массивов данных для трехмерной графики

 

Создание массивов данных для трехмерной графики

Трехмерные поверхности обычно описываются функцией двух переменных 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)

Рекомендуем читателю опробовать действие этого примера.

 

16. Графики поля градиентов quiver

 

Графики поля градиентов 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. Пример построения графика поля градиентов

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

 

17.gif

Изображение: 

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. График функции в сетчатом представлении

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

 

18a.gif

Изображение: 

18b.gif

Изображение: 

19a.gif

Изображение: 

19b.gif

Изображение: 

20a.gif

Изображение: 

20b.gif

Изображение: 

18. Сетчатые 3D-графики с окраской

 

Сетчатые 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.

 

21a.gif

Изображение: 

21b.gif

Изображение: 

22a.gif

Изображение: 

22b.gif

Изображение: 

19. Сетчатые 3D-графики с проекциями

 

Сетчатые 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. График поверхности и ее проекции на расположенную ниже плоскость

Нетрудно заметить, что график такого типа дает наилучшее представление об особенностях поверхности.

 

23a.gif

Изображение: 

23b.gif

Изображение: 

20. Построение поверхности столбцами

 

Построение поверхности столбцами

Еще один тип представления поверхности, когда она строится из многочисленных столбцов, дают команды класса meshz:

  • meshz(...) — аналогична mesh(...), но строит поверхность как бы в виде столбиков. Следующий пример иллюстрирует применение команды mesh:

» [X.Y]=meshgrid([-3:0.15:3]); 

» Z=X.^2+Y.^2; 

» meshz(X,Y,Z)

Столбцовый график поверхности показан на рис. 6.24.

Графики такого типа используются довольно редко. Возможно, он полезен архитекторам или скульпторам, поскольку дает неплохое объемное представление о поверхностях.

Рис. 6.24. Построение поверхности столбцами

 

24a.gif

Изображение: 

24b.gif

Изображение: 

21. Построение поверхности с окраской

 

Построение поверхности с окраской

Особенно наглядное представление о поверхностях дают сетчатые графики, использующие функциональную закраску ячеек. Например, цвет окраски поверхности 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. График поверхности с функциональной окраской серым цветом

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

 

25.gif

Изображение: 

26.gif

Изображение: 

22. Построение поверхности и ее проекции

 

Построение поверхности и ее проекции

Для повышения наглядности представления поверхностей можно использовать дополнительный график линий равного уровня, получаемый путем проецирования поверхности на опорную плоскость графика (под поверхностью). Для этого используется команда 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 с проекцией и шкалой цветов

 

27.gif

Изображение: 

28.gif

Изображение: 

23. Построение освещенной поверхности

 

Построение освещенной поверхности

Пожалуй, наиболее реалистичный вид имеют графики поверхностей, в которых имитируется освещение от точечного источника света, расположенного в заданном месте координатной системы. Графики имитируют оптические эффекты рассеивания, отражения и зеркального отражения света. Для получения таких графиков используется команда 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 — для освещенности и т. д. Это правило облегчает запоминание многочисленных команд графики.

 

29.gif

Изображение: 

24. Средства управления подсветкой и обзором фигур

 

Средства управления подсветкой и обзором фигур

Рекомендуется с помощью команды help ознакомиться с командами, задающими управление подсветкой и связанными с ней оптическими эффектами:

  • diffuse — задание эффекта диффузионного рассеяния;

  • lighting — управление подсветкой;

  • material — имитация свойств рассеивания света различными материалами;

  • specular — задание эффекта зеркального отражения.

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

  • view — задание положения точки просмотра;

  • viewmtx — задание и вычисление матрицы вращения;

  • rotateSd — задание поворота трехмерной фигуры.

В ряде случаев применением этих команд можно добиться большей выразительности трехмерных объектов. Скорость построения таких графиков сильно зависит от аппаратной поддержки графики в конкретном ПК. Так, использование современных видеоадаптеров с графическим процессором и поддержкой средств OpenGL позволяет повысить скорость построения трехмерных графиков в несколько раз и добиться большей их выразительности.

 

25. Построение графиков функций трех переменных

 

Построение графиков функций трех переменных

Графики сечений функций трех переменных строит команда 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])

 

26. График трехмерной слоеной поверхности

 

График трехмерной слоеной поверхности

Иногда бывают полезны графики трехмерных слоеных поверхностей, как бы состоящие из тонких пластинок — слоев. Такие поверхности строит функция 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. Трехмерная слоеная поверхность

 

30.gif

Изображение: 

27. Трехмерные контурные графики

 

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 каждого объекта содержит значение высоты для соответствующего контура.

 

31.gif

Изображение: 

28. Установка титульной надписи

 

Установка титульной надписи

После того как график уже построен, MATLAB позволяет выполнить его форматирование или оформление в нужном виде. Соответствующие этому средства описаны ниже. Так, для установки над графиком титульной надписи используется следующая команда:

  • title( 'string ' ) — установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.

Пример применения этой команды будет дан в следующем разделе.

 

29. Установка осевых надписей

 

Установка осевых надписей

Для установки надписей возле осей х, у и 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. Надписи делают рисунок более наглядным.

 

32.gif

Изображение: 

30. Ввод текста в любое место графика

 

Ввод текста в любое место графика

Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда 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), чтобы просмотреть список свойств графических объектов и их допустимых значений.

 

33.gif

Изображение: 

31. Позиционирование текста с помощью мыши

 

Позиционирование текста с помощью мыши

Очень удобный способ ввода текста предоставляет команда 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. График функции с надписью, установленной с помощью мыши

 

34.gif

Изображение: 

35a.gif

Изображение: 

35b.gif

Изображение: 

32. Вывод пояснений

 

Вывод пояснений

Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды 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. График трех функций с легендой, расположенной вне поля графика

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

 

36a.gif

Изображение: 

36b.gif

Изображение: 

37.gif

Изображение: 

33. Маркировка линий уровня на контурных графиках

 

Маркировка линий уровня на контурных графиках

К сожалению, контурные графики плохо приспособлены для количественных оценок, если их линии не маркированы. В качестве маркеров используются крестики, рядом с которыми располагаются значения высот. Для маркировки контурных графиков используются команды группы 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).

 

38.gif

Изображение: 

34. Управление свойствами осей графиков

 

Управление свойствами осей графиков

Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса 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, а не диапазоном изменения значений х и у.

 

39.gif

Изображение: 

35. Включение и выключение сетки

 

Включение и выключение сетки

В математической, физической и иной литературе при построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды 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, на котором сетка отсутствует. Нетрудно заметить, что наличие сетки облегчает количественную оценку координат точек графика.

 

40.gif

Изображение: 

36. Наложение графиков друг на друга

 

Наложение графиков друг на друга

Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений 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 отключает режим добавления графиков к ранее построенным графикам.

 

41.gif

Изображение: 

37. Разбиение графического окна

 

Разбиение графического окна

Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды 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).

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

 

42.gif

Изображение: 

38. Изменение масштаба графика

 

Изменение масштаба графика

Для изменения масштаба двумерных графиков используются команды класса 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. График выделенного участка

 

43.gif

Изображение: 

43b.gif

Изображение: 

44.gif

Изображение: 

39. Установка палитры цветов

 

Установка палитры цветов

Поскольку графика 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 будут приведены в следующих разделах.

 

40. Установка соответствия между палитрой цветов и масштабом осей

 

Установка соответствия между палитрой цветов и масштабом осей

При использовании функциональной окраски важное значение имеет установка соответствия между палитрой цветов и масштабом координатных осей. Так, выбор ограниченного диапазона интенсивностей цветов может привести к тому, что цветовая гамма будет блеклой и функциональная закраска не будет достигать своих целей. С помощью команды 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).

 

41. Окраска поверхностей

 

Окраска поверхностей

Для окраски поверхностей используется команда shading, которая управляет объектами surface (поверхность) и patch (заплата), создаваемыми командами и функциями surf, mesh, pcolor, fill и fill 3. Команда shading (затенение) работает с параметрами и имеет следующий вид:

  • shading flat — задает окраску ячеек или граней в зависимости от текущих данных; 

  • shading interp — задает окраску с билинейной интерполяцией цветов; 

  • shading faceted — равномерная раскраска ячеек поверхности (принята по умолчанию).

Эти команды устанавливают свойства EdgeColor и FaceColor для графических объектов surface и patch в зависимости от того, какая из команд — mesh (сетчатая поверхность) или surf (затененная поверхность) — используется. Примеры применения команд shading уже приводились.

 

42. Установка палитры псевдоцветов

 

Установка палитры псевдоцветов

Довольно часто возникает необходимость представления той или иной матрицы в цветах. Для этого используют псевдоцвета, зависящие от содержимого ячеек. Такое представление реализуют команды класса 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.

 

45.gif

Изображение: 

43. Создание закрашенного многоугольника

 

Создание закрашенного многоугольника

Для создания закрашенного пятна в виде многоугольника может использоваться команда 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

 

46a.gif

Изображение: 

46b.gif

Изображение: 

44. Окраска плоских многоугольников

 

Окраска плоских многоугольников

Для построения окрашенных в заданный цвет плоских многоугольников может использоваться команда 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 по одному дескриптору на каждый объект.

 

47.gif

Изображение: 

45. Вывод шкалы цветов

 

Вывод шкалы цветов

При использовании функциональной окраски весьма полезным является вывод шкалы цветов командой 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 со шкалой цветов.

 

48a.gif

Изображение: 

48b.gif

Изображение: 

46. Цветные плоские круговые диаграммы

 

Цветные плоские круговые диаграммы

Закрашенные секторы часто используются для построения круговых диаграмм. Для этого в 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.

 

49a.gif

Изображение: 

49b.gif

Изображение: 

47. Другие команды управления световыми эффектами

 

Другие команды управления световыми эффектами

Здесь мы только отметим некоторые дополнительные команды, связанные с управлением цветовыми палитрами:

  • col style — выделение цвета и стиля графика из заданного массива;

  • rgbplot — изображение палитры;

  • hsv2rgb — преобразование палитры HSV в палитру RGB;

  • rgb2hsv — преобразование палитры RGB в палитру HSV;

  • brighten — управление яркостью;

  • contrast — управление контрастом;

  • hidden — управление показом невидимых линий;

  • whitebg — управление цветом фона.

Рекомендуется ознакомиться с этими командами, используя команду help.

 

48. Окрашенные многоугольники в пространстве

 

Окрашенные многоугольники в пространстве

Для закраски многоугольников, определенных в пространстве, служит команда 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 дает функциональную закраску построенных фигур.

 

50a.gif

Изображение: 

50b.gif

Изображение: 

50c.gif

Изображение: 

49. Цветные объемные круговые диаграммы

 

Ц ветные объемные круговые диаграммы

Иногда используются объемные круговые диаграммы. Для их построения служит команда pie3:

  • pie3(...) — аналогична команде pie(...), но дает построение объемных секторов.

В приведенном ниже примере строится объемная диаграмма с отделением двух секторов, показанная на рис. 6.51:

» Х=[1 2 3 4 5];

» pie3(X,[0 0 1 0 1])

Рис. 6.51. Объемная круговая диаграмма

Функция H=pie3(...) строит график и возвращает вектор, содержащий дескрипторы созданных объектов классов patch, surface и text.

 

51a.gif

Изображение: 

51b.gif

Изображение: 

50. Построение цилиндра

 

Построение цилиндра

Для построения цилиндра в виде трехмерной фигуры применяется функция

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, что делает представление цилиндра достаточно наглядным.

 

52a.gif

Изображение: 

52b.gif

Изображение: 

51. Построение сферы

 

Построение сферы

Для расчета массивов 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.

 

53a.gif

Изображение: 

53b.gif

Изображение: 

52. Трехмерная графика с треугольными плоскостями

 

Трехмерная графика с треугольными плоскостями

К числу специальных видов графики относится построение объемных фигур с помощью плоских треугольников. Для построения таких фигур в виде каркаса (без окраски и отображения плоскостей) используется команда 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 также принадлежит к множеству случайных графических построений. Поэтому возможность его буквального повторения отсутствует.

 

54a.gif

Изображение: 

54b.gif

Изображение: 

53. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Строить различные графики функций одной переменной.

  • Строить диаграммы и гистограммы.

  • Строить на плоскости графики специальных типов.

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

  • Строить трехмерные графики поверхностей и фигур.

  • Использовать световые эффекты.

  • Наносить на графики надписи и легенды.

  • Маркировать оси и линии графиков, наносить на них сетку.

  • Строить в одном окне несколько графиков и менять их масштаб.

  • Менять палитры цвета и условия освещения.

  • Строить графические объекты на плоскости и в пространстве.

 

Урок 7. Специальная графика

1. Урок 7. Специальная графика

 

Урок №7.

Специальная графика

  • Движение точки на плоскости и в пространстве

  • Основные средства анимации 

  • Объекты дескрипторной графики

  • Операции над графическими объектами

  • Свойства объектов и управление ими

  • Управление средствами Open GL

  • Управление прозрачностью графических объектов

  • Основные команды для создания пользовательского интерфейса

  • Растровая графика

  • Пакет прикладных программ Images

  • Галерея трехмерной графики

В этом уроке мы рассмотрим некоторые виды специальной графики. Это прежде всего анимационная и дескрипторная (handle) графика.

 

2. Движение точки на плоскости

 

Движение точки на плоскости

Для отображения движения точки по траектории используется команда 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. «Хвост кометы» на черно-белом рисунке заметить трудно, поскольку он представляет собой отрезок линии с цветом, отличающимся от цвета линии основной части графика.

 

1.gif

Изображение: 

3. Движение точки в пространстве

 

Движение точки в пространстве

Есть еще одна команда, которая позволяет наблюдать движение точки, но уже в трехмерном пространстве. Это команда 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

Разумеется, движение точки по заданной траектории как в двумерном, так и в трехмерном пространстве является самым простейшим примером анимации. Тем не менее эти средства существенно расширяют возможности графической визуализации при решении ряда задач динамики.

 

2.gif

Изображение: 

4. Основные средства анимации

 

Основные средства анимации

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

Отметим кратко основные команды, реализующие анимацию в системе MATLAB:

  • capture — захват видеоизображения;

  • getframe — создание кадра для анимации;

  • moviein — выполнение анимации;

  • rotate — вращение фигуры;

  • frame2im — преобразование кадра в графический образ;

  • im2frame — преобразование графического образа в кадр.

Применение некоторых из этих команд мы рассмотрим далее на конкретных примерах. К сожалению, серьезные задачи анимации обычно требуют применения программных средств — главным образом циклов. Мы рассмотрим их далее, но представляется, что читатели знакомы с понятием циклов, так что приведенные примеры не будут слишком сложны. В крайнем случае, оставьте их разбор до знакомства с основами программирования в системе MATLAB (урок 20).

 

5. Вращение фигуры - логотипа MATLAB

 

Вращение фигуры — логотипа 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

 

3.gif

Изображение: 

6. Волновые колебания мембраны

 

Волновые колебания мембраны

Принцип мультипликации легко распространить на существенно более сложные задачи анимации. В качестве иллюстрации можно рассмотреть системный пример 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 неработоспособна. Чтобы она работала, эти комментарии должны быть убраны или заменены англоязычными. В этом случае проблем с запуском программы не будет.

 

7. Объекты дескрипторной графики

 

Объекты дескрипторной графики

Как уже отмечалось, графические средства MATLAB базируются на низкоуровневой графике, которая называется дескрипторной (описательной), или handle графикой. По существу, эта графика обеспечивает объектно-ориентированное программирование как всех рассмотренных выше графических команд, так и пользовательского интерфейса. Графический редактор дескрипторной графики Property Editor в MATLAB 6 является основным редактором графики и нами уже использовался. Хотя обычный пользователь может даже не знать о существовании дескрипторной графики ввиду того, что слово «дескрипторная» в сокращенное название графического редактора не входит, все же надо учитывать, что именно дескрипторная графика дает новые, подчас уникальные возможности создания пользовательских графических программ MATLAB 6, не говоря уже о том, что она помогает понять, каким образом реализованы графические средства системы.

Центральным понятием дескрипторной графики является графический объект. Имеются следующие типы таких объектов:

  • root (корень) — первичный объект, соответствующий экрану компьютера; 

  • figure (рисунок) — объект создания графического окна;

  • uicontrol (элемент управления, определенный пользователем) — объект создания элемента пользовательского интерфейса;

  • axes (оси) — объект, задающий область расположения графика в окне объекта figure;

  • uimenu (определенное пользователем меню) — объект создания меню;

  • uicontextmenu (определенное пользователем контекстное меню) - объект создания контекстного меню;

  • image (образ) — объект создания растровой графики;

  • line (линия) — объект создания линии;

  • patch (заплата) — объект создания закрашенных фигур;

  • rectangle (прямоугольник) - объект создания закрашенных прямоугольников;

  • surface (поверхность) — объект создания поверхности;

  • text (текст) — объект создания текстовых надписей;

  • light (свет) — объект создания эффектов освещенности.

Объекты подчас взаимосвязаны и могут обращаться друг к другу для получения того или иного графического эффекта.

 

8. Создание графического окна и управление им

 

Создание графического окна и управление им

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

  • figure — открыть чистое графическое окно;

  • gcf — получить дескриптор графического окна figure;

  • elf — очистить графическое окно;

  • shg — показать ранее свернутое графическое окно;

  • close (закрыть) — закрыть графическое окно;

  • refresh (обновить) — обновить графическое окно.

Эти команды и функции достаточно очевидны, и мы не будем обсуждать их подробно. Заметим, что команды help name или doc name позволяют уточнить назначение той или иной команды или функции с обобщенным именем name.

 

9. Создание координатных осей и управление ими

 

Создание координатных осей и управление ими

Еще одна группа простых команд служит для создания координатных осей и управления ими:

  • axes (оси) — создать оси координат; 

  • box (ящик) — построить прямоугольник вокруг рисунка; 

  • сlа — убрать построения axes;

  • gса — получить дескриптор графического объекта axes;

  • hold — сохранить оси координат;

  • ishold — проверка статуса hold (1, если оси сохранены, и 0 в противоположном случае).

Эти команды также достаточно очевидны. Заметим, что их можно использовать и в обычной (высокоуровневой) графике, например для устранения осей из уже созданного графика.

 

10. Пример применения объекта дескрипторной графики

 

Пример применения объекта дескрипторной графики

Объем и направленность данной книги не позволяют подробно описать все многообразие возможностей дескрипторной графики. Ограничимся пока одним примером. Пусть надо построить линию,-проходящую через три точки с координатами (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

 

4a.gif

Изображение: 

4b.gif

Изображение: 

11. Дескрипторы объектов

 

Дескрипторы объектов

С понятием объектов дескрипторной графики связана особая характеристика объектов — дескриптор (описатель). Его можно понимать как некое число — своеобразный идентификатор («распознаватель») объектов.

Рис. 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, для разных компьютерных платформ и даже для одинаковых команд, но в разных местах сессии.

 

5a.gif

Изображение: 

5b.gif

Изображение: 

12. Операции над графическими объектами

 

Операции над графическими объектами

К графическим объектам применяется ряд операций:

  • set — установка свойств (параметров) графического объекта;

  • get — вывод свойств графического объекта;

  • reset — восстановить свойства графического объекта по умолчанию;

  • delete — удалить созданный графический объект;

  • gсо — возвращает дескриптор текущего графического объекта;

  • gcbo — возвращает дескриптор объекта, чья функция в данный момент выполняется;

  • gcbf — возвращает дескриптор окна, содержащего объект, функция которого в данный момент выполняется;

  • drawnow — выполнить очередь задержанных графических команд;

  • findobj — найти объекты с заданными свойствами;

  • copyobj — скопировать объект и порожденные им объекты.

Кроме того, имеются три утилиты, связанные с операциями над объектами:

  • closereq — закрыть окно по запросу;

  • ishandle — проверить дескриптор на истинность;

  • newplot — восстановить свойства объекта, измененные nextPlot.

Назначение большинства этих операций достаточно очевидно. Мы остановимся на двух наиболее важных операциях, связанных с контролем и установкой свойств объектов.

 

13. Свойства объектов - команда get

 

Свойства объектов — команда 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

 

14. Изменение свойств объекта - команда set

 

Изменение свойств объекта — команда set

С помощью команды set можно изменить отдельные свойства объекта дескрипторной графики. Эта команда имеет множество параметров, и с ними можно ознакомиться с помощью команд help set или doc set. Ограничимся примером — допустим, нам надо сменить цвет линии с голубого на красный. Для этого достаточно выполнить следующую команду: » set(h,'Color'.'red')

Обратите внимание, что при этом цвет сменится на ранее построенном рисунке с дескриптором h.

 

15. Управление работой средств OpenGL

 

Управление работой средств 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')

 

16. Управление прозрачностью графических объектов

 

Управление прозрачностью графических объектов

Пожалуй, наиболее впечатляющие и внешне заметные результаты дает применение свойства прозрачности изображений (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.

 

6a.gif

Изображение: 

6b.gif

Изображение: 

17. Примеры, иллюстрирующие возможности дескрипторной графики

 

Примеры, иллюстрирующие возможности дескрипторной графики

Теперь рассмотрим более сложные примеры, наглядно демонстрирующие возможности дескрипторной графики. Воспользовавшись 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 как прикладную программу, сколько на опытных разработчиков программного обеспечения для этой системы. Разумеется, это не исключает полезную возможность изменения параметров графиков путем настройки свойств графических объектов, что особенно наглядно видно из последних приведенных примеров. Многие тайны дескрипторной графики познаются только в ходе практических экспериментов с ней.

 

7.gif

Изображение: 

18. Основные команды для создания пользовательского интерфейса

 

Основные команды для создания пользовательского интерфейса

Опытные пользователи нередко используют 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 содержит обширный набор команд и функций для создания типовых элементов пользовательского интерфейса. Объем данной книги не позволяет останавливаться на детальном описании этих функций, тем более что оно имеется в справочной системе. Поэтому мы ограничимся единственным примером: создание кнопки, на которой можно щелкнуть мышью и перевести ее в нажатое состояние.

 

19. Пример создания объекта интерфейса

 

Пример создания объекта интерфейса

Ниже представлена программа (распечатка 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, который в этой книге описан достаточно кратко.

 

4b.gif

20. Растровая графика

 

Растровая графика

Одна из отличительных черт системы 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 (Пакет обработки изображений)).

 

10a.gif

Изображение: 

10b.gif

Изображение: 

11a.gif

Изображение: 

11b.gif

Изображение: 

21. Пакет прикладных программ Images

 

Пакет прикладных программ 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, вам не составит особого труда ознакомиться с составом всех команд и функций пакета и опробовать их на практике. В связи с этим мы остановимся лишь на нескольких демонстрационных примерах.

 

22. Примеры применения пакета Images

 

Примеры применения пакета Images

Есть ряд способов ознакомиться с весьма обширными и впечатляющими возможностями пакета Images: с помощью демонстрационных примеров (Demos) в справочной базе данных системы, путем непосредственного запуска этих примеров (список приводился выше), запуском отдельных команд и т. д.

Пример реконструкции изображений с управлением оригиналом, создаваемым изображением и ошибкой реконструкции представлен в файле dctdemo. Он выводит свое окно со средствами пользовательского интерфейса. Можно задать выбор той или иной исходной картинки, задать степень компрессии изображения и визуально наблюдать за характером преобразований (рис. 7.16). Для просмотра следует нажать кнопку Apply (Применить), кнопка Close (Закрыть) закрывает окно, а кнопка Info выводит информацию о примере.

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

Следующий пример иллюстрирует возможность изменения яркости изображения. Кривая яркости может устанавливаться перемещением ее точек с помощью мыши. Можно задавать линейный или нелинейный вид этой кривой и тут же наблюдать изменение характеристик изображения. Вид кривой существенно влияет на яркость и контрастность изображений и позволяет выполнять тоновую коррекцию, например осветлять слишком темные изображения или, наоборот, затемнять светлые изображения.

Наконец, последний в этом уроке пример (остальные вы можете просмотреть самостоятельно) показывает действенность алгоритма повышения четкости изображения в произвольной его области. В нашем случае эта область ограничена треугольником. В окне можно наблюдать (и выбирать) исходное изображение, задавать область действия алгоритма и просматривать результирующее изображение.
Даже эти примеры дают возможность оценить обширные возможности пакета Images в технике обработки реальных изображений.

 

23. Примеры программирования задач со средствами пакета 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 проявляется только в математической прозрачности реализаций алгоритмов обработки изображений.

 

24. Галерея трехмерной графики

 

Галерея трехмерной графики

Для знакомства с возможностями трехмерной графики и построением пользовательского интерфейса 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 — имя соответствующей команды, выводит полный листинг программы, реализующей построение той или иной фигуры.

 

25. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Строить графики с анимацией.

  • Использовать простые средства дескрипторной графики.

  • Создавать графические окна и управлять ими.

  • Работать с графическими объектами.

  • Создавать элементы интерфейса.

  • Использовать некоторые средства пакета Images для обработки изображений.

  • Просматривать примеры из галереи трехмерной графики.

 

Урок 8. Операторы и функции

1. Урок 8. Операторы и функции

 

Урок №8.

Операторы и функции

  • Арифметические и алгебраические операторы и функции

  • Операторы отношения и их функции

  • Логические операторы и функции 

  • Специальные символы

  • Системные переменные и константы

  • Функции времени и даты 

  • Элементарные функции

  • Тригонометрические и гиперболические функции

  • Функции округления и знака

  • Функции комплексного аргумента

Начиная с этого урока мы переходим к изучению математических и логических возможностей системы MATLAB. Их изучение мы начнем с операторов и функций — тех кирпичиков, из которых строятся математические выражения. Вычисления математических выражений составляют главную цель любой системы, предназначенной для численных расчетов. Здесь мы рассмотрим полный набор операторов входного языка системы MATLAB 6.0 и соответствующих им функций. Напомним, что полный список операторов выводится командой help ops. Операторы и специальные символы системы MATLAB можно разделить на ряд категорий, которые рассматриваются ниже.

 

2. Арифметические операторы и функции

 

Арифметические операторы и функции

Арифметические операторы являются самыми распространенными и известными. В отличие от большинства языков программирования в системе 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 приоритет логических операторов выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания. Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается.

 

3. Операторы отношения и их функции

 

Операторы отношения и их функции

Операторы отношения служат для сравнения двух величин, векторов или матриц. Все операторы отношения имеют два операнда, например х и у, и записываются, как показано в табл. 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-кодами. Строки воспринимаются как векторы, содержащие значения кодов. Все это надо учитывать при использовании управляющих структур языка программирования, в которых широко применяются операторы отношения.

 

4. Логические операторы

 

Логические операторы

Логические операторы и соответствующие им функции служат для реализации поэлементных логических операций над элементами одинаковых по размеру массивов (табл. 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-кодом.

 

5. Специальные символы

 

Специальные символы

К классу операторов в системе 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 имеет более одного элемента, то появляется сообщение об ошибке.

 

6. Системные переменные и константы

 

Системные переменные и константы

Как отмечалось ранее, в состав объектов 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-файлов функции для задания произвольных аргументов функции. Эти переменные должны быть последними в списке входов или выходов, а для их обозначения могут использоваться только строчные буквы. Использование этих возможностей мы рассмотрим несколько позже.

 

7. Функции поразрядной обработки

 

Функции поразрядной обработки

Ряд функций предназначен для поразрядной логической обработки данных:

  • 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.

 

8. Функции обработки множеств

 

Функции обработки множеств

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

  •  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


 

9. Функции времени и даты

 

Функции времени и даты

Ряд функций служит для возврата текущего времени и даты. Они перечислены ниже.

  • 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

 

10. Элементарные функции

 

Элементарные функции

Элементарные функции, пожалуй, наиболее известный класс математических функций. Поэтому, не останавливаясь подробно на их описании, представим набор данных функций, имеющийся в составе системы MATLAB. Функции, перечисленные ниже, сгруппированы по функциональному назначению. В тригонометрических функциях углы измеряются в радианах. Все функции могут использоваться в конструкции вида y=func(x), где func — имя функции. Обычно в такой форме задается информация о функции в системе MATLAB. Мы, однако, будем использовать для функций, возвращающих одиночный результат, более простую форму func(x). Форма [y,z,...]=func(x....) будет использоваться только в тех случаях, когда функция возвращает множественный результат.

 

11. Алгебраические и арифметические функции

 

Алгебраические и арифметические функции

В системе 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 выводит над графиками автоматически.

 

1.gif

Изображение: 

12. Тригонометрические и обратные им функции

 

Тригонометрические и обратные им функции

В системе 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. Графики периодических сигналов без разрывов

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

 

2.gif

Изображение: 

3.gif

Изображение: 

4.gif

Изображение: 

13. Гиперболические и обратные им функции

 

Гиперболические и обратные им функции

Наряду с тригонометрическими функциями в математических расчетах часто используются и гиперболические функции. Ниже приводится список таких функций, определенных в системе 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

На этих графиках хорошо видны особенности данного класса функций. Такие функции, как обратный гиперболический синус и тангенс, «ценятся» за симметричный вид их графиков, дающий приближение к ряду типовых нелинейностей.

 

14. Функции округления и знака

 

Функции округления и знака

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

  • 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

 

15. Функции комплексного аргумента

 

Функции комплексного аргумента

Для работы с комплексными числами и данными в 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

 

16. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Применять арифметические операторы и функции.

  • Использовать операторы отношения и их функции.

  • Применять логические операторы.

  • Использовать специальные символы.

  • Использовать системные переменные и константы.

  • Работать с функциями поразрядной обработки, множествами, функциями времени и даты.

  • Использовать элементарные функции и строить их графики. 

  • Работать с функциями округления и анализа  знака. 

  • Использовать функции комплексного аргумента.

 

Урок 9. Специальные математические функции

1. Урок 9. Специальные математические функции

 

Урок №9.

Специальные математические функции

  • Функции Эйри

  • Функции Бесселя

  • Бета-функция и ее варианты

  • Эллиптические функции и интегралы

  • Функции ошибки

  • Интегральная показательная функция

  • Гамма-функция и ее варианты

  • Ортогональные полиномы Лежандра

Специальные математические функции являются решениями дифференциальных уравнений специального вида или обозначениями некоторых видов интегралов. Довольно полный обзор специальных функций дается в книгах [55-58], так что ниже мы ограничимся только указанием функций системы MATLAB, реализующих их вычисление. Набор специальных математических функций в системе MATLAB настолько представителен, что позволяет решать практически все задачи, связанные с применением таких функций. Если и обнаруживаются недостающие специальные функции, то пользователь может сам задать их вычисления. Специфика специальных функций в MATLAB та же, что и элементарных, — их аргументами могут быть как одиночные численные значения, так и массивы чисел. В последнем случае функции возвращают массив тех же размерности и размера с преобразованием каждого элемента в соответствии с действием функции. В версии MATLAB 6 вы теперь можете получить справку с записью формул в стандартной математической форме, набрав в командной строке doc function, где function — имя специальной функции.

 

2. Функции Эйри

 

Функции Эйри

Функция Эйри формирует пару линейно независимых решений линейного дифференциального уравнения вида

Связь между функцией Эйри и модифицированной функцией Бесселя выражается следующей формулой:


где

  • airy(Z) — возвращает функцию Эйри, AKZ), для каждого элемента комплексного массива Z;
  • airy(k.Z) — возвращает различные варианты результата в зависимости от значения k:
    • k=0 — тот же результат, что и airy(Z);
    • k=1 — производную от А1 (Z);
    • k=2 — функцию Эйри второго рода, 61 (Z) :
    • k=3 — производную от B1(Z). Пример:

D=

1.0000 3.0000 + 2.00001

» S=airy(D) 

S =

0.1353 -0.0097 + 0.00551

 

11.gif

Изображение: 

12.gif

Изображение: 

13.gif

Изображение: 

3. Функции Бесселя

 

Функции Бесселя

Линейное дифференциальное уравнение второго порядка вида

где 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)

Эти графики дают наглядное представление о поведении функций Бесселя, широко используемых при анализе поведения систем, описываемых линейными дифференциальными уравнениями второго порядка. 

 

1a.gif

Изображение: 

1b.gif

Изображение: 

14.gif

Изображение: 

14.gif

16.gif

Изображение: 

17.gif

Изображение: 

19.gif

Изображение: 

20.gif

Изображение: 

4. Бета-функция и ее варианты

 

Бета-функция и ее варианты

Бета-функция определяется как

где Г (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

 

21.gif

Изображение: 

22.gif

Изображение: 

5. Эллиптические функции и интегралы

 

Эллиптические функции и интегралы

Эллиптические функции Якоби определяются интегралом и соотношениями

с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).

 

18.gif

Изображение: 

23.gif

Изображение: 

24.gif

Изображение: 

6. Функции ошибки

 

Функции ошибки

Функция ошибки определяется следующим образом:


  • 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).

 

25.gif

Изображение: 

27.gif

Изображение: 

7. Интегральная показательная функция

 

Интегральная показательная функция

Интегральная показательная функция определяется следующим образом:


  • expint(X) — возвращает интегральную показательную функцию для каждого

элемента X. Пример:

» d=expint([2,3+7i]) 

d =

0.0489 -0.0013 -0.00601

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

 

28.gif

Изображение: 

8. Гамма-функция и ее варианты

 

Гамма-функция и ее варианты

Гамма-функция определяется выражением

Неполная гамма-функция определяется как

  • 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 г.). Для вычисления неполной гамма-функции используются рекуррентные формулы.

 

2.gif

Изображение: 

29.gif

Изображение: 

30.gif

Изображение: 

9. Ортогональные полиномы Лежандра

 

Ортогональные полиномы Лежандра

Функция Лежандра определяется следующим образом:


где Р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

 

31.gif

Изображение: 

32.gif

Изображение: 

10. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Вычислять функции Эйри.

  • Вычислять функции Бесселя разного рода.

  • Вычислять бета-функцию и ее варианты.

  • Использовать эллиптические функции и интегралы.

  • Вычислять функции ошибки.

  • Вычислять интегральные показательные функции.

  • Вычислять гамма-функцию и ее варианты.

  • Использовать ортогональные полиномы Лежандра.

 

Урок 10. Операции с векторами и матрицами

1. Урок 10. Операции с векторами и матрицами

 

Урок №10.

Операции с векторами и матрицами

  • Создание стандартных матриц

  • Создание векторов равноотстоящих точек в линейном и логарифмическом масштабах

  • Создание массивов со случайными элементами

  • Конкатенация матриц

  • Изменение порядка расположения элементов матриц

  • Вычисление сумм и произведений 

  • Изменение формы матриц

  • Выделение треугольных частей матриц

  • Вычисление тестовых матриц 

  • Матричные функции

Матрицы представляют собой самые распространенные объекты системы MATLAB. Ниже описываются основные операции с матрицами. По обилию матричных операторов и функций MATLAB является лидером среди массовых систем компьютерной математики.

 

2. Создание матриц с заданными свойствами

 

Создание матриц с заданными свойствами

Создание единичной матрицы

Для создания единичной матрицы (она обычно обозначается как Е) служит функция 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

 

3. Создание матрицы с единичными элементами

 

Создание матрицы с единичными элементами

Для создания матриц, все элементы которых — единицы, используется функция 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

 

4. Создание матрицы с нулевыми элементами

 

Создание матрицы с нулевыми элементами

Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц:

  • 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

 

5. Создание линейного массива равноотстоящих точек

 

Создание линейного массива равноотстоящих точек

Функция 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

 

6. Создание вектора равноотстоящих в логарифмическом масштабе точек

 

Создание вектора равноотстоящих в логарифмическом масштабе точек

Функция 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

 

7. Создание массивов со случайными элементами

 

Создание массивов со случайными элементами

  • р = 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 можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.

 

1.gif

Изображение: 

2a.gif

Изображение: 

2b.gif

Изображение: 

2c.gif

Изображение: 

8. Конкатенация матриц

 

Конкатенация матриц

Конкатенацией называют объединение массивов, которое реализует следующая функция.

  • С = 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

 

9. Создание матриц с заданной диагональю

 

Создание матриц с заданной диагональю

Свойства матриц сильно зависят от их диагональных элементов. Следующая функция 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

 

10. Перестановки элементов матриц

 

Перестановки элементов матриц

Для перестановок элементов матриц служат следующие функции:

  • В = 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

 

11. Вычисление произведений

 

Вычисление произведений

Несколько простых функций служат для перемножения элементов массивов:

  • 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:

  • cumprod(A) — возвращает произведение с накоплением. Если А — вектор, cum-prod(A) возвращает вектор, содержащий произведения с накоплением элементов вектора А. Если А — матрица, cumprod(A) возвращает матрицу того же размера, что и А, содержащую произведения с накоплением для каждого столбца матрицы А (Первая строка без изменений, во второй строке произведение первых двух элементов каждого столбца, в третьей строке элементы второй строки матрицы-результата умножаются на элементы третьей строки матрицы входного аргумента по столбцам и т. д.);
  • cumprod(A,dim) — возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim.

Примеры:

» А=[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

 

12. Суммирование элементов

 

Суммирование элементов

Определены следующие функции суммирования элементов массивов:

  • 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

 

13. Функции формирования матриц

 

Функции формирования матриц

Для создания матриц, состоящих из других матриц, используются следующие функции:

  • 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

 

14. Поворот матриц

 

Поворот матриц

Следующая функция обеспечивает поворот матрицы (по расположению элементов): О 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

 

15. Выделение треугольных частей матриц

 

Выделение треугольных частей матриц

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

  • 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

 

16. Вычисление сопровождающей матрицы

 

Вычисление сопровождающей матрицы

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

  • 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

 

17. Вычисление тестовых матриц

 

Вычисление тестовых матриц

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

  •  [А.В,С....] = 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

 

18. Матрицы Адамара

 

Матрицы Адамара

  • Н = 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

 

19. Матрицы Ганкеля

 

Матрицы Ганкеля

  • 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.

 

20. Матрицы Гильберта

 

Матрицы Гильберта

  • 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

 

21. Вычисление магического квадрата

 

Вычисление магического квадрата

  • 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

 

22. Матрицы Паскаля

 

Матрицы Паскаля

  • pascal (n) — возвращает матрицу Паскаля порядка п, т. е. симметрическую положительно определенную матрицу с целочисленными элементами, взятыми из треугольника Паскаля;

  • pascal (n. 1) — возвращает нижний треугольный фактор (до знаков столбцов) Холецкого для матрицы Паскаля. Полученная матрица, все элементы которой выше главной диагонали равны нулю, является своей обратной матрицей, т. е. квадратным корнем из единичной матрицы;

  • pascal(n,2) — возвращает матрицу, полученную в результате транспонирования и перестановок матрицы pascal (n. 1), при этом результат является кубическим корнем из единичной матрицы.

23. Матрицы Теплица

 

Матрицы Теплица

  •  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

 

24. Матрицы Уилкинсона

 

Матрицы Уилкинсона

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.

 

25. Матричные функции

 

Матричные функции

Весьма представителен в 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

 

26. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Создавать матрицы различного вида, включая «магическую» матрицу.

  • Создавать векторы равноотстоящих точек с разным масштабом.

  • Объединять матрицы, используя функцию конкатенации.

  • Создавать матрицы с заданной диагональю.

  • Выполнять перестановки элементов матриц.

  • Вычислять суммы и произведения элементов матриц.

  • Осуществлять поворот матриц и выделение их треугольных частей.

  • Работать с тестовыми матрицами Адамара, Ганкеля, Гильберта, Паскаля, Теплица и Уилкинсона.

  • Работать с различными матричными функциями.

 

Урок 11. Матричные операции линейной алгебры

1. Урок 11. Матричные операции линейной алгебры

 

Урок №11.

Матричные операции линейной алгебры

  • Вычисление нормы и чисел обусловленности матрицы

  • Определитель и ранг матрицы 

  •  Определение нормы вектора

  • Определение ортонормированного базиса матрицы

  • Приведение матрицы к треугольной форме

  • Определение угла между двумя подпространствами

  • Вычисление следа матрицы

  • Разложение Холецкого

  • Обращение матриц

  • LU- и QR-разложения

  • Вычисление собственных значений и сингулярных чисел

  • Приведение матриц к формам Шура и Хессенберга

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

 

2. Вычисление нормы и чисел обусловленности матрицы

 

Вычисление нормы и чисел обусловленности матрицы

Для понимания всего нижеизложенного материала необходимо учесть, что нормы матриц в 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

 

3. Определитель и ранг матрицы

 

Определитель и ранг матрицы

Для нахождения определителя (детерминанта) и ранга матриц в 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

 

4. Определение нормы вектора

 

Определение нормы вектора

Норма вектора — скаляр, дающий представление о величине элементов вектора. Нужно различать норму матрицы и норму вектора. Функция norm определяет, является ли ее аргументом (входным аргументом в терминологии MATLAB) вектор или матрица, и измеряет несколько различных типов норм векторов:

  • norm(X)=norm(X,2) — вторая норма возвращает наибольшее сингулярное число X, max(svd(X));

  • norm(X.p) , где р — целое положительное число, — возвращает корень степени р из суммы абсолютных значений элементов вектора, возведенных в степень р. При р = 1 это может совпадать либо с первой нормой, либо с нормой неопределенности матриц;

  • norm(X, 'inf') возвращает максимальное из абсолютных значений элементов вектора; О norm(X, '-Inf') возвращает минимальное из абсолютных значений элементов вектора.

 

5. Определение ортонормированного базиса матрицы

 

Определение ортонормированного базиса матрицы

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

  • В = 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

 

6. Функции приведения матрицы к треугольной форме

 

Функции приведения матрицы к треугольной форме

Треугольной называется квадратная матрица А, если при 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

 

7. Определение угла между двумя подпространствами

 

Определение угла между двумя подпространствами

Угол между двумя подпространствами вычисляет функция subsрасе:

  • theta = subspace(A.B) — возвращает угол между двумя подпространствами, натянутыми на столбцы матриц А и В. Если А и В — векторы-столбцы единичной длины, то угол вычисляется по формуле acos(A'*B). Если некоторый физический эксперимент описывается массивом А, а вторая реализация этого эксперимента — массивом В, то subspace(A.B) измеряет количество новой информации, полученной из второго эксперимента и не связанной со случайными ошибками и флуктуациями.

Пример:

» Н = hadamard(20);A = Н(:.2:4);В = Н(:.5:8); 

» subspace(A,B) 

ans = 

1.5708

 

8. Вычисление следа матрицы

 

Вычисление следа матрицы

След матрицы А — это сумма ее диагональных элементов. Он вычисляется функцией 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

 

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

 

10. Обращение матриц - функции inv, pinv

 

Обращение матриц — функции 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

 

11. LU- и QR-разложения

 

LU- и QR-разложения

Так называемые LU- и QR-разложения реализуются следующими матричными функциями:

Функция выражает любую квадратную матрицу 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

 

12. Вычисление собственных значений и сингулярных чисел

 

Вычисление собственных значений и сингулярных чисел

Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов и сингулярных чисел. В новой версии 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

 

13. Приведение матриц к форме Шура и Хессенберга

 

Приведение матриц к форме Шура и Хессенберга

Ниже приводятся функции, обеспечивающие приведение матриц к специальным формам Шура и Хессенберга:

  • 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

 

14. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Находить числа обусловленности матриц, их определитель, след и ранг.

  • Находить векторную и матричную нормы и различать их.

  • Определять ортонормальный базис матриц.

  • Приводить матрицы к треугольной форме.

  • Определять угол между двумя подпространствами.

  • Осуществлять разложение Холецкого, LU- и QR-разложения матриц.

  • Вычислять обратные матрицы.

  • Находить собственные значения и сингулярные числа матриц.

  • Приводить матрицы к формам Шура и Хессенберга.

 

Урок 12. Функции разреженных матриц

1. Урок 12. Функции разреженных матриц

 

Урок №12.

Функции разреженных матриц

  • Элементарные разреженные матрицы

  • Преобразование разреженных матриц

  • Работа с ненулевыми элементами разреженных матриц

  • Визуализация разреженных матриц

  • Алгоритмы упорядочения

  • Норма, число обусловленности и ранг разреженных матриц

  • Разложение Холецкого разреженной матрицы

  • LU-разложение разреженной матрицы

  • Вычисление собственных значений и сингулярных чисел разреженных матриц

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

 

2. Элементарные разреженные матрицы

 

Элементарные разреженные матрицы

Вначале рассмотрим элементарные разреженные матрицы и относящиеся к ним функции системы 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

 

3. Преобразование разреженных матрицв

 

П реобразование разреженных матриц

Теперь рассмотрим функции преобразования разреженных матриц. Они представлены ниже:

  • 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=

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);

 

4. Работа с ненулевыми элементами разреженных матриц

 

Работа с ненулевыми элементами разреженных матриц

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

  • 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

 

5. Визуализация разреженных матриц

 

Визуализация разреженных матриц

Визуализация разреженных матриц нередко позволяет выявить не только любопытные, но и полезные и поучительные свойства тех математических закономерноетей, которые порождают такие матрицы или описываются последними. 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. Визуализация разреженной матрицы

 

1a.gif

Изображение: 

1b.gif

Изображение: 

6. Алгоритмы упорядочения

 

Алгоритмы упорядочения

Упорядочение — это еще одна характерная для разреженных матриц операция. Ее алгоритм реализуется несколькими функциями:

  • р = 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

 

2a.gif

Изображение: 

2b.gif

Изображение: 

3a.gif

Изображение: 

3b.gif

Изображение: 

7. Норма, число обусловленности и ранг разреженной матрицы

 

Норма, число обусловленности и ранг разреженной матрицы

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

  • с = 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)

 

8. Разложение Холецкого разреженных матриц

 

Разложение Холецкого разреженных матриц

  • 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

 

9. LU-разложение разреженных матриц

 

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.

 

10. Вычисление собственных значений и сингулярных чисел разреженных матриц

 

Вычисление собственных значений  и сингулярных чисел разреженных матриц

Применение функции 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 в противном случае.

  1. eigs(A.K) и eigs(A,B,K) возвращают не 6, а К самых больших собственных значений. eigs(A,K,sigma) Heigs(A,B,K.sigma) возвращают не 6, а К собственных значений, выбранных в зависимости от значения параметра sigma;

  2. 'lm' — самые большие (как и по умолчанию) по абсолютной величине;

  3. ' sm' — самые малые по абсолютной величине;

  4. ' l а' и ' sa' — соответственно самые большие и самые малые алгебраически собственные значения для действительных симметрических матриц;

  5. 'be' — для действительных симметрических матриц возвращает и самые большие, и самые малые алгебраически собственные значения поровну, но если К нечетное, то самых больших значений на 1 больше, чем самых малых;

  6. 'lr' и 'sr' — для несимметрических и комплексных матриц возвращают соответственно собственные значения с самыми большими и самыми малыми действительными частями;

  7. '1i' и 'si'— для несимметрических и комплексных матриц возвращают соответственно собственные значения с самыми большими и самыми малыми мнимыми частями;

  8. скаляр - ближайшие к величине slgma. В этом случае матрица В может быть только симметрической (или эрмитовой) положительно полуопределенной, а функция Y = AFUN(X) должна возвращать Y = (A-SIGMA*B)\X.
  • eigs(A,K,SIGMA,OPTS) и eigs(A,B,K,SIGMA.OPTS) имеют параметры в полях структуры OPTS (в фигурных скобках { } — значения по умолчанию):
  1. OPTS.issym: симметрия А или A-SIGMA*B, представленной AFUN [{0} | 1];

  2. OPTS.isreal: комплексные А или A-SIGMA*B, представленной AFUN [0 | {1}];

  3. OPTS.tol: сходимость: аbs(с1_вычисленное-с1_действительное) < tоl*аbs(с1_вычисленное) [скаляр){eps}];

  4. OPTS.maxit: наибольшее число итераций [положительное целое | {300}];

  5. OPTS.р: число векторов Ланцо (Lanczos): K+l<p<=N [положительное целое | {2К}];

  6. OPTS.v0: начальный вектор [вектор размера N| {произвольно выбирается библиотекой ARPACK}];

  7. OPTS.disp: уровень вывода диагностической информации [0 | {1} | 2J;

  8. OPTS.cholВ: В — это множитель Холецкого chol (В) [{0} | 1];

  9. 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 предлагает пользователям уникальный набор матричных операторов и функций, заметно более полный, чем у других математических систем. Это открывает широчайшие возможности в решении всех видов математических задач, в которых используются современные матричные методы.

 

11. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Создавать элементарные разреженные матрицы.

  • Осуществлять преобразование разреженных матриц.

  • Работать с ненулевыми элементами разреженных матриц.

  • Осуществлять графическую визуализацию разреженных матриц.

  • Использовать функции упорядочения.

  • Осуществлять разложение Холецкого разреженных матриц.

  • Проводить LU-разложение разреженных матриц.

  • Вычислять норму, число обусловленности и ранг разреженных матриц.

  • Вычислять собственные значения и сингулярные числа разреженных матриц.

 

Урок 13. Многомерные массивы

1. Урок 13. Многомерные массивы

 

Урок №13.

Многомерные массивы

  • Понятие о многомерных массивах

  • Применение оператора «:» в многомерных массивах

  • Доступ к отдельному элементу многомерного массива

  • Удаление размерности в многомерном массиве

  • Создание страниц, заполненных константами и случайными числами

  • Объединение массивов

  • Вычисление числа размерностей массива и определение размера размерностей

  • Перестановки размерностей массивов

  • Сдвиг размерностей массивов 

  • Удаление единичных размерностей

В этом уроке мы коснемся вопросов, связанных с более сложными типами данных, к которым относятся многомерные массивы.

 

2. Понятие о многомерных массивах

 

Понятие о многомерных массивах

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

В нашей литературе понятия «размер» и «размерность» массивов являются почти синонимами. Однако они имеют явно разный смысл в данной книге, как и в документации и литературе по системе MATLAB. Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов (mxn) в каждой размерности массива.

 

3. Применение оператора ":" в многомерных массивах

 

Применение оператора «:» в многомерных массивах

При обычном задании массивов (с помощью символа точки с запятой «;») число рядов (строк) массива получается на 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) означают номер страницы.

 

4. Доступ к отдельному элементу многомерного массива

 

Доступ к отдельному элементу многомерного массива

Чтобы вызвать центральный элемент сначала первой, а затем второй страницы, надо записать следующие выражения:

» М(2.2,1) 

ans =

5

» МС2.2.2) 

ans =

14

Таким образом, в многомерных массивах используется то же правило индексации, что и в одномерных и двумерных. Произвольный элемент, например, трехмерного массива задается как М(1 .j.k), где 1 — номер строки, j — номер столбца и k — номер страницы. Этот элемент можно вывести, а можно присвоить ему заданное значение х: М(1 ,j,k)=x.

 

5. Удаление размерности в многомерном массиве

 

Удаление размерности в многомерном массиве

Мы уже отмечали возможность удаления отдельных столбцов присвоением им значений пустого вектора-столбца [ ]. Этот прием нетрудно распространить на страницы и вообще размерности многомерного массива. Например, первую страницу полученного массива М можно удалить следующим образом:

» М(:.:.1)=[ ] 

М =

10 11 12

13 14 15

16 17 18

Нетрудно заметить, что в этом массиве осталась только вторая страница и что размерность массива уменьшилась на 1 — он стал двумерным.

 

6. Создание страниц, заполненных константами и случайными числами

 

Создание страниц, заполненных константами и случайными числами

Если после знака присваивания стоит численная константа, то соответствующая часть массива будет содержать элементы, содержащие данную константу. Например, создадим из массива М (см. пример выше) массив, у которого вторая страница содержит единицы:

»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

 

7. Использование функций ones, zeros, rand и randn

 

Использование функций 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

Как видно из данного примера, пустой массив возвращается с соответствующим комментарием.

 

8. Объединение массивов

 

Объединение массивов

Для создания многомерных массивов служит описанная ранее для матриц специальная функция конкатенации 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

 

9. Работа с размерностями

 

Работа с размерностями

Вычисление числа размерностей массива

Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент — массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims:

» M=rand(2:3:4:5):

» ndims(M) 

ans = 

4

 

10. Вычисление размера размерности массива

 

Вычисление размера размерности массива

Для вычисления размера каждой размерности массива используется функция 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) тип.

 

11. Перестановки размерностей массивов

 

Перестановки размерностей массивов

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

  • 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

 

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

 

13. Удаление единичных размерностей

 

Удаление единичных размерностей

Функция 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. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Создавать многомерные массивы.

  • Применять оператор «:» в многомерных массивах.

  • Получать доступ к отдельным элементам многомерных массивов.

  • Удалять размерности у многомерного массива.

  • Создавать массивы, заполненные константами и случайными числами.

  • Осуществлять объединение массивов.

  • Вычислять число размерностей массива и определять размер каждой размерности.

  • Переставлять, сдвигать и удалять единичные размерности в многомерных массивах.

 

Урок 14. Массивы структур

1. Урок 14. Массивы структур

 

Урок №14.

Массивы структур

  • Тип данных — структуры

  • Создание структур и доступ к их компонентам

  • Проверка имен полей и структур 

  • Функция возврата имен полей

  • Функция возврата содержимого полей структуры

  • Функция присваивания значений полям

  • Удаление полей

2. Тип данных - структуры

 

Тип данных — структуры

Структуры относятся к сложным типам данных. В предшествующих версиях 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], где они описаны более подробно.

 

3. Создание структур и доступ к их компонентам

 

Создание структур и доступ к их компонентам

Для задания структур на языке 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, если Х=[ ].

 

4. Функция создания структур

 

Функция создания структур

Для создания структур используется следующая функция:

  • 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'

 

5. Проверка имен полей и структур

 

Проверка имен полей и структур

Выполнение операций с полями и элементами полей выполняется по тем же правилам, что и при работе с обычными массивами. Однако существует ряд функций, осуществляющих специфические для структур операции [ Помимо функций isstruct и isfields вы можете использовать для тестирования массивов структур функцию isа(имя объекта, 'struct') и команду или функцию whos имя объекта. — Примеч. ред. ].

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

  • isfielcKS, 'field') — возвращает логическую 1, если 'field' является именем поля структуры S;

  • isstruct(S) — возвращает логическую 1, если S — структура, и 0 в ином случае. Их применение на примере структуры man показано ниже:

» isfieldCman.'name') 

ans = 

» isfield(man.'family')

ans =

0

» isstruct(man) 

ans =

1

» isstruct(many)

??? Undefined function or variable 'many'. 

» isstruct('many') 

ans =

0

 

6. Функция возврата имен полей

 

Функция возврата имен полей

Следующая функция позволяет вывести имена полей заданной структуры:

  • fieldnames (S) — возвращает имена полей структуры S в виде массива ячеек (см. урок 15). Пример: 

» fieldnames(man)

ans = 

'name' 

'surname' 

'date' 

'height' 

'weight'

 

7. Функция возврата содержимого полей структуры

 

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

В конечном счете работа со структурами сводится к выводу и использованию содержимого полей. Для возврата содержимого поля структуры 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 =

Петр

 

8. Функция присваивания значений полям

 

Функция присваивания значений полям

Для присваивания полям заданных значений используется описанная далее функция 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: [ ]

 

9. Удаление полей

 

Удаление полей

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

  •  rmfield(S, 'field') — возвращает структуру S с удаленным полем S.'field';

  • rmfield(S,FIELDS) — возвращает структуру S с несколькими удаленными полями. Список удаляемых полей FIELDS задается в виде массива символов (строки) или строкового массива ячеек.

Пример:

» rmfield(man(2).'surname') 

ans =

name: 'Петр'

date: 1959

height: []

weight: []

 

10. Применение массивов структур

 

Применение массивов структур

Массивы структур находят самое широкое применение. Например, они используются для представления цветных изображений. Известно, что цветные изображения формата RGB состоят из массивов интенсивности трех цветов - красного R, зеленого G и синего В. При этом каждый массив содержит данные о координатах точки (они определяются целочисленными индексами массива) и о ее яркости (число от 0 до 1 в формате чисел с плавающей запятой). Чтобы некоторое изображение, например pic, несло данные о цвете всех точек, придется представить изображение массивом структур с полями pic.r, pic.g и pic.b.

Еще более сложные структуры (но, в принципе, вполне очевидные) нужны для разработки баз данных, например о работниках предприятия, службах города, городах страны и т. д. Во всех этих случаях особенно важна возможность доступа к отдельным полям структур и возможность присвоения таким полям уникальных имен.

Может показаться, что этот тип данных имеет малое отношение к математическим возможностям системы MATLAB. Однако надо помнить, что поиск информации в больших базах данных, сортировка этой информации и прочие операции, не говоря уже о сложной обработке массивов изображений, — все это примеры явно математических, хотя и достаточно специфических, операций. Причем операций нередко с многомерными структурами. Возможность MATLAB выполнять подобные операции быстро и эффективно (прежде всего с позиций минимальных затрат памяти) открывает перед этой системой очень большие возможности в этой области — впрочем, пока еще ждущие своей реализации. Уже в MATLAB 6.1 возможен одновременный прямой обмен данными между массивами структур MATLAB и множеством записей разных баз данных благодаря Database ToolBox (см. урок 23).

 

11. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Создавать структуры.

  • Обеспечивать доступ к полям структур.

  • Проверять имена полей и структур.

  • Использовать функции возврата имен полей и их содержимого.

  • Присваивать полям значения и удалять поля.

 

Урок 15. Массивы ячеек

1. Урок 15. Массивы ячеек

 

Урок №15.

Массивы ячеек

  • Создание массивов ячеек

  • Создание ячеек с помощью функции cell

  • Визуализация массивов ячеек

  • Создание строкового массива ячеек из массива символов

  • Присваивание с помощью функции deal

  • Функция тестирования имен массивов ячеек

  • Функции преобразования типов данных

  • Многомерные и вложенные массивы ячеек

 

2. Создание массивов ячеек

 

Создание массивов ячеек

Массив ячеек — наиболее сложный тип данных в системе 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.

 

3. Создание ячеек с помощью функции cell

 

Создание ячеек с помощью функции 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]     []

 

4. Визуализация массивов ячеек

 

Визуализация массивов ячеек

Для отображения массива ячеек С служит функция 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:

 

5. Создание строкового массива ячеек из массива символов

 

Создание строкового массива ячеек из массива символов

Для создания из массива символов S строкового массива ячеек может использоваться функция eellstr(S). Каждый ряд массива символов превращается в отдельную ячейку. Следующий пример поясняет применение функции cellstr:

» S={'Привет.'; 'дорогой'; 'друг'}; 

» C=cellstr(S) 

С =

'Привет.'

'дорогой'

'ДРУГ'

Это еще один способ формирования массивов ячеек.

Функция iscellstr(C) равна 1, если ее аргумент С — строковый массив ячеек, и 0, если это неверно.

 

6. Присваивание с помощью функции deal

 

Присваивание с помощью функции 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 =

Y =

2.0000.+ 3.0000i 

Z =

Привет!

» [X Y Z]=dealС Привет!') 

X =

Привет!

 Y =

Привет! 

Z = 

Привет!

 

7. Тестирование имен массивов ячеек

 

Тестирование имен массивов ячеек

Ввиду обилия типов данных в системе MATLAB часто возникает необходимость в их тестировании [ Помимо функций iscell и iscellstr вы всегда можете использовать для тестирования массивов ячеек функцию 15а(имя объекта, 'cell') и команду whos имя объекта. — Примеч. ред. ]. Для тестирования массивов ячеек может использоваться функция is сеll (С), которая возвращает логическое значение 1, если С — массив ячеек, и 0 в противном случае. Это поясняют следующие примеры:

» t=iscell(A) 

t =

1

» B=[l 23]; 

» iscell(B)

 ans=

0

 

8. Функции преобразования типов данных

 

Функции преобразования типов данных

При обработке сложных данных возникает необходимость в преобразовании их типов. Ниже представлены такие функции, имеющие отношение к массивам ячеек:

  • 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]

 

9. Многомерные массивы ячеек

 

Многомерные массивы ячеек

С помощью функции 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 =

'Пить тоже вредно!'

 

10. Вложенные массивы ячеек

 

Вложенные массивы ячеек

Содержимым ячейки массива ячеек может быть, в свою очередь, произвольный массив ячеек. Таким образом, возможно создание вложенных массивов ячеек — пожалуй, самого сложного типа данных.

В следующем примере показано формирование массива ячеек А с вложенным в него массивом В (он был создан в примере выше):

» 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)

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

 

11. Что новoго мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились: 

  • Создавать ячейки и массивы ячеек. 

  • Осуществлять визуализацию массивов ячеек. 

  • Создавать массивы символьных ячеек из массивов строк. 

  • Осуществлять присваивание ячейкам значений. 

  • Использовать функцию тестирования имен массивов ячеек. 

  • Применять функции преобразования типов. 

  • Создавать многомерные и вложенные массивы ячеек.

 

Урок 16. Численные методы

1. Урок 16. Численные методы

 

Урок №16.

Численные методы

  • Средства решения систем линейных уравнений (СЛУ)

  • Вычисление нулей функции одной переменной

  • Минимизация функции одной и нескольких переменных

  • Аппроксимация Лапласиана

  • Аппроксимация производных конечными разностями

  • Вычисление градиента функции

  • Численное интегрирование

  • Операции с полиномами

  • Решение полиномиальных матричных уравнений

  • Разложение на простые дроби

  • Решение обыкновенных дифференциальных уравнений

  • Информация о пакете для решения уравнений с частными производными

В этом большом уроке описываются функции системы MATLAB, предназначенные для реализации алгоритмов типовых численных методов решения прикладных задач и обработки данных. Наряду с базовыми операциями решения систем линейных и нелинейных уравнений рассмотрены функции вычисления конечных разностей, численного дифференцирования, численного интегрирования, триангуляции, аппроксимации Лапласиана и, наконец, прямого и обратного преобразования Фурье. Отдельные разделы посвящены работе с полиномами и численным методам решения обыкновенных дифференциальных уравнений. Этот большой урок стоит разбить на две-три части или изучать выборочно.

 

2. Элементарные средства решения СЛУ

 

Элементарные средства решения СЛУ

Решение систем линейных уравнений (СЛУ) относится к самой массовой области применения матричных методов, описанных в уроках 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.

 

1.gif

Изображение: 

3. Функции для решения систем линейных уравнений с ограничениями

 

Функции для решения систем линейных уравнений с ограничениями

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

  • 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

 

4. Решение СЛУ с разреженными матрицами

 

Решение СЛУ с разреженными матрицами

Решение СЛУ с разреженными матрицами — хотя и не единственная, но несомненно одна из основных сфер применения аппарата разреженных матриц, описанного в уроке 12. Ниже приведены функции, относящиеся к этой области применения разреженных матриц. Большинство описанных методов относится к итерационным, т. е. к тем, решение которых получается в ходе ряда шагов — итераций, постепенно ведущих к получению результата с заданной погрешностью или с максимальным правдоподобием [33]. Описанные ниже функции MATLAB могут и должны применяться и при решении обычных СЛУ - без разреженных матриц.[ Использование всех этих функций, кроме Isqr, как правило, ограничено системами уравнений, в которых А — нормальная квадратная матрица, т. е. А* А -АА*, где А*— сопряженная (эрмитова) матрица А. — Примеч. ред. ]

 

5. Точное решение, метод наименьших квадратов и сопряженных градиентов

 

Точное решение, метод наименьших квадратов и сопряженных градиентов

  • 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

 

6. Двунаправленный метод сопряженных градиентов

 

Двунаправленный метод сопряженных градиентов

Решение СЛУ с разреженной матрицей возможно также известным двунаправленным методом сопряженных градиентов. Он реализован указанной ниже функцией.

  •  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, описывающий сходимость метода.

 

7. Устойчивый двунаправленный метод

 

Устойчивый двунаправленный метод

Еще один двунаправленный метод, называемый- устойчивым, реализует функция 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

 

8. Метод сопряженных градиентов

 

Метод сопряженных градиентов

Итерационный метод сопряженных градиентов реализован функцией 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-алгоритм итерационного метода сопряженных градиентов и также не требует, чтобы ее входной аргумент — квадратная симметрическая матрица — была положительно определенной. Эта функция тоже не может решить наш пример, так как наша матрица А — квадратная, но не симметрическая.

 

9. Квадратичный метод сопряженных градиентов

 

Квадратичный метод сопряженных градиентов

Квадратичный метод сопряженных градиентов реализуется в системе 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

 

10. Метод минимизации обобщенной невязки

 

Метод минимизации обобщенной невязки

Итерационный метод минимизации обобщенной невязки также реализован в системе 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

 

11. Квазиминимизация невязки - функция qmr

 

Квазиминимизация невязки — функция 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

 

12. Вычисление нулей функции одной переменной

 

Вычисление нулей функции одной переменной

Ряд функций системы 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

 

13. Минимизация функции одной переменной

 

Минимизация функции одной переменной

Еще одна важная задача численных методов — поиск минимума функции 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

 

14. Минимизация функции нескольких переменных

 

Минимизация функции нескольких переменных

Значительно сложнее задача минимизации функций нескольких переменных 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=

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

 

15. Аппроксимация производных

 

Аппроксимация производных

Аппроксимация Лапласиана

Для выполнения аппроксимации Лапласиана в 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

» subplot(1,2,1)

 » surfl(U) 

» subplot(1,2,2) 

» surfl(V)

На рис. 16.1 представлены графики поверхностей U и V.

Рис. 16.1. Графики функций U и V

 

3.gif

Изображение: 

4a.gif

Изображение: 

4b.gif

Изображение: 

16. Аппроксимация производных конечными разностями

 

Апроксимация производных конечными разностями

  • 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)

 

5a.gif

Изображение: 

5b.gif

Изображение: 

17. Вычисление градиента функции

 

Вычисление градиента функции

Вычисление конечно-разностным методом градиента функций реализуется следующей функцией:

  • 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 часто используется для построения графиков полей градиентов.

 

18. Численное интегрирование

 

Численное интегрирование

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


одним из многочисленных численных методов, для вычисления неопределенного интеграла по рекурсивному алгоритму усредняются значения b=a+dn, где d — предельно малая величина.

 

6.gif

Изображение: 

19. Метод трапеций

 

Метод трапеций

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

  • 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 

 

20. Численное интегрирование методом квадратур

 

Численное интегрирование методом квадратур

Приведенные ниже функции осуществляют интегрирование и двойное интегрирование, используя квадратурную формулу Симпсона или метод Гаусса-Лобатто. Квадратура — численный метод нахождения площади под графиком функции/(т), т. е. вычисление определенного интеграла вида

В приведенных ниже формулах подынтегральное выражение 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

 

7.gif

Изображение: 

21. Работа с полиномами

 

Работа с полиномами

Полиномы (у нас их принято называть также степенными многочленами) — широко известный объект математических вычислений и обработки данных. Обычно полином записывается в виде

р(х) = а п х^n + x п-1 x^n -1+ ... + а 2 x^2 + а 1 ^х + а 0 ,

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

р(х) = a 1 x^n + а 2 x^n-1 + ... + а п х + а п+1

Последняя запись обычно принята в MATLAB для n, по умолчанию положительных.

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

 

22. Умножение и деление полиномов

 

Умножение и деление полиномов

Ниже приведены функции, осуществляющие умножение и деление полиномов, или, что то же самое, свертку двух входных векторов, в которых находятся коэффициенты полиномов, и операцию, обратную свертке.

  • 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

 

8.gif

Изображение: 

23. Вычисление полиномов

 

Вычисление полиномов

В этом разделе приведены функции вычисления коэффициентов характеристического полинома, значения полинома в точке и матричного полинома.

  • 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

Данный пример иллюстрирует также погрешности численных методов, поскольку точное решение дает нулевую матрицу.

 

9.gif

Изображение: 

24. Вычисление производной полинома

 

Вычисление производной полинома

Ниже приведена функция, возвращающая производную полинома р:

  • polyder(p) — возвращает производную полинома р;

  • polyder(a.b) — возвращает производную от произведения полиномов а и b;

  • [q,d] = polyder(b.a) — возвращает числитель q и знаменатель d производной от отношения полиномов b/а.

Примеры:

» a=[3.5.8]:b=[5,3.8]:dp=polyder(a) 

dp =

6 5

» dt=polyder(a,b) 

dt =

60102 158 64 » [q.p]=polyder(b.a)

q =

1632 -16

p =

9 30 73 80 64

 

25. Решение полиномиальных матричных уравнений

 

Решение полиномиальных матричных уравнений

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

  • [Х.е] = polyeig(AO,Al,...Ap) — решает задачу собственных значений для матричного полинома степени р вида:

где степень полинома р — целое неотрицательное число, а А 0 , А 1 ,..., А p входные матрицы порядка п. Выходная матрица X размера nхnр содержит собственные векторы в столбцах. Вектор е размером пр содержит собственные значения.

Пример:

» А=[1:4:5:8:9:12:13:16] 

А =

1 2

3 4


5 6

7 8


9 10

11 12


1314

15 16


» В=[4:7

;2:5;10:13;23:26]

3 -



4 5

6 7


2 3

4 5


1011

12 13


2324

25 26


» [F.a]=

polyeig(A.B)


F =



0.4373

0.0689 

-0.5426

-0.7594

-0.3372

-0.4969 

0.6675

-0.1314

-0.6375

0.7870 

0.2927

-0.1314

0.5374

-0.3591

- 0.4176

 0.3771

a =



4.4048



0.4425



-0.3229



-1.0000



 

11.gif

Изображение: 

26. Разложение на простые дроби

 

Разложение на простые дроби

Для отношения полиномов b и а используются следующие функции: 

  •  [r,p,k] = res I due (b, a) — возвращает вычеты, полюса и многочлен целой части отношения двух полиномов b(s) и a(s) в виде

  • [b.a] = residue(r.p.k) — выполняет обратную свертку суммы простых дробей (см. более подробное описание в справочной системе) в пару полиномов с коэффициентами в векторах b и а.

Пример:

» b=[4.3.1]:a=[1.3.7.1]:[r.p,k]=residue(b,a)

r=

1.9484 + 0.80641 

1.9484 - 0.80641 

0.1033

Р =

-1.4239 + 2.13051

-1.4239 - 2.13051

-0.1523 

k =

[ ]

» [bl,al]=residue(r,p,k) 

b1=

4.0000 3.0000 1.0000 

a1 =

1.0000 3.0000 7.0000 1.0000

 

12.gif

Изображение: 

27. Решение обыкновенных дифференциальных уравнений

 

Решение обыкновенных дифференциальных уравнений

Анализ поведения многих систем и устройств в динамике, а также решение многих задач в теории колебаний и в поведении упругих: оболочек обычно базируются на решении систем обыкновенных дифференциальных уравнений (ОДУ). Их, как правило, представляют в виде системы из дифференциальных уравнений первого порядка в форме Коши:

с граничными условиями y(t 0 t end , p) = b, где t end , t 0 — начальные и конечные точки интервалов. Параметр t не обязательно означает время, хотя чаще всего решение дифференциальных уравнений ищется во временной области. Вектор b задает начальные и конечные условия.

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

 

13.gif

Изображение: 

28. Решатели ОДУ

 

Решатели ОДУ

Для решения систем ОДУ в MATLAB реализованы различные методы. Их реализации названы решателями ОДУ.

Примечание

В этом разделе обобщенное название sol ver (решатель) означает один из возможных  численных методов решения ОДУ: ode45, ode23, ode113, ode15s, ode23s, ode23t , ode23tb, bvp4c или pdepe.

Решатели реализуют следующие методы решения систем дифференциальных уравнений, причем для решения жестких систем уравнений рекомендуется использовать только специальные решатели ode 15s , ode23s, ode23t. ode23tb:

  • ode45 — одношаговые явные методы Рунге-Кутта 4-го и 5-го порядка. Это классический метод, рекомендуемый для начальной пробы решения. Во многих случаях он дает хорошие результаты;

  • ode23 — одношаговые явные методы Рунге-Кутта 2-го и 4-го порядка. При умеренной жесткости системы ОДУ и низких требованиях к точности этот мето;. может дать выигрыш в скорости решения;

  • ode113 — многошаговый метод Адамса-Башворта-Мултона переменного порядка Это адаптивный метод, который может обеспечить высокую точность решения

  • ode23tb — неявный метод Рунге-Кутта в начале решения и метод, использующий формулы обратного дифференцирования 2-го порядка в последующем

Несмотря на сравнительно низкую точность, этот метод может оказаться более эффективным, чем ode15s;

  • ode15s — многошаговый метод переменного порядка (от 1 до 5, по умолчанию 5), использующий формулы численного дифференцирования. Это адаптивный метод, его стоит применять, если решатель ode45 не обеспечивает решения;

  • ode23s — одношаговый метод, использующий модифицированную формулу Розенброка 2-го порядка. Может обеспечить высокую скорость вычислений при низкой точности решения жесткой системы дифференциальных уравнений;

  • ode23t — метод трапеций с интерполяцией. Этот метод дает хорошие результаты при решении задач, описывающих колебательные системы с почти гармоническим выходным сигналом;

  • bvp4c служит для проблемы граничных значений систем дифференциальных уравнений вида y '== f(t,y), F(y(a), y(b), p) = 0 (краевая задача);

  • pdepe нужен для решения систем параболических и эллиптических дифференциальных уравнений в частных производных, введен в ядро системы для поддержки новых графических функций Open GL, пакет расширения Partial Differential Equations Toolbox содержит более мощные средства.

Все решатели могут решать системы уравнений явного вида у' = F(£, y). Решатели ode15s и ode23t способны найти корни дифференциально-алгебраических уравнений M(t)y' = F(t, у},, где М называется матрицей массы. Решатели ode!5s, ode23s, ode23t и ode23tb могут решать уравнения неявного вида M(t,y) у' = F(t, у). И наконец, все решатели, за исключением ode23s, который требует постоянства матрицы массы, и bvp4c, могут находить корни матричного уравнения вида M(t, у) у' - F(t, у). ode23tb, ode23s служат для решения жестких дифференциальных уравнений . ode15s -жестких дифференциальных и дифференциально-алгебраических уравнений, ode23t -умеренно жестких дифференциальных и дифференциально-алгебраических уравнений.

 

29. Использование решателей систем ОДУ

 

Использование решателей систем ОДУ

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

  • options — аргумент, создаваемый функцией odeset (еще одна функция — odeget или bvpget (только для bvp4c)— позволяет вывести параметры, установленные по умолчанию или с помощью функции odeset /bvpset);

  • tspan — вектор, определяющий интервал интегрирования [tO tfinal]. Для получения решений в конкретные моменты времени t0, tl,..., tfinal (расположенные в порядке уменьшения или увеличения) нужно использовать tspan = [t0 tl ... tfinal];

  • у0 — вектор начальных условий;

  • pi, р2,.„ — произвольные параметры, передаваемые в функцию F;

  • Т, Y — матрица решений Y, где каждая строка соответствует времени, возвращенном в векторе-столбце Т.

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

  • [T.Y] = solver(@F,tspan,у0) — где вместо solver подставляем имя конкретного решателя — интегрирует систему дифференциальных уравнений вида у'=F(t,y) на интервале tspan с начальными условиями у0. @F — дескриптор ODE-функции. Каждая строка в массиве решений Y соответствует значению времени, возвращаемому в векторе-столбце Т;

  • [T.Y] = solver(@F, tspan, yO. options) — дает решение, подобное описанному выше, но с параметрами, определяемыми значениями аргумента options, созданного функцией odeset. Обычно используемые параметры включают допустимое значение относительной погрешности RelTol (по умолчанию le-З) и вектор допустимых значений абсолютной погрешности AbsTol (все компоненты по умолчанию равны 1е-6);

  • [T.Y] = solver(@F,tspan,yO,options,pl,p2...) — дает решение, подобное описанному выше, передавая дополнительные параметры pi, р2,... в m-файл F всякий раз, когда он вызывается. Используйте options=[], если никакие параметры не задаются;

  • [T.Y.TE.YE.IE] = solver(@F.tspan,yO,options) — в дополнение к описанному решению содержит свойства Events, установленные в структуре options ссылкой на функции событий. Когда эти функции событий от (t, у, равны нулю, производятся действия в зависимости от значения трех векторов value, isterminal, di rection (их величины можно установить в m-файлах функций событий). Для i-й функции событий value(i) —значение функции, isterminal (i) — прекратить интеграцию при достижении функцией нулевого значения, direction^) = 0, если все нули функции событий нужно вычислять (по умолчанию), +1 — только те нули, где функция событий увеличивается, -1 — только те нули, где функция событий уменьшается. Выходной аргумент ТЕ — вектор-столбец времен, в которые происходят события (events), строки YE являются соответствующими решениями, а индексы в векторе IE определяют, какая из i функций событий (event) равна нулю в момент времени, определенный ТЕ. Когда происходит вызов функции без выходных аргументов, по умолчанию вызывается выходная функция odeplot для построения вычисленного решения. В качестве альтернативы можно, например, установить свойство OutputFcn в значение ' odephas2' или 'odephas3' для построения двумерных или трехмерных фазовых плоскостей.

  • [T.X.Y] = sim(@model,tspan.-y0.options,ut.p1,р2..„) — использует модель SIMULINK, вызывая соответствующий решатель из нее. Пример:

[T.X.Y] - sim(@model....).

Параметры интегрирования (options) могут быть определены и в m-файле, и в командной строке с помощью команды odeset. Если параметр определен в обоих местах, определение в командной строке имеет приоритет.

Решатели используют в списке параметров различные параметры:

  • NormControl — управление ошибкой в зависимости от нормы вектора решения [on | {off}]. Установите 'on', чтобы norm(e) <= max(RelTol*norm(y), AbsTol). По умолчанию все решатели используют более жесткое управление по каждой из составляющих вектора решения;

  • RelTol — относительный порог отбора [положительный скаляр]. По умолчанию 1е-3 (0.1% точность) во всех решателях; оценка ошибки на каждом шаге интеграции e(i) <= max(RelTol*abs(y(i)), AbsTol(i));

  • AbsTol — абсолютная точность [положительный скаляр или вектор {1е-6}].Скаляр вводится для всех составляющих вектора решения, а вектор указывает на компоненты вектора решения. AbsTol по умолчанию 1е-6 во всех решателях;

  • Refine - фактор уточнения вывода [положительное целое число] — умножает число точек вывода на этот множитель. По умолчанию всегда равен 1, кроме ODE45, где он 4. Не применяется, если tspan > 2;

  • OutputFcn — дескриптор функция вывода [function] — имеет значение в том случае, если решатель вызывается без явного указания функции вывода, OutputFcn по умолчанию вызывает функцию odeplot. Эту установку можно поменять именно здесь;

  • OutputSel — индексы отбора [вектор целых чисел] Установите компоненты, которые поступают в OutputFcn. OutputSel по умолчанию выводит все компоненты;

  • Stats — установите статистику стоимости вычислений [on {off}];

  • Jacobian — функция матрицы Якоби [function constant matrix]. Установите это свойство на дескриптор функции FJac (если FJac(t, у) возвращает dF/dy) или на имя постоянной матрицы dF/dy;

  • Jpattern — график разреженности матрицы Якоби [имя разреженной матрицы]. Матрица S с S(i,j) = 1, если составляющая i F(t, у) зависит от составляющей j величины у, и 0 в противоположном случае;

  • Vectorized — векторизованная ODE-функция [on | {off}]. Устанавливается на 'on', если ODE-функция F F(t,[yl y2...]) возвращает вектор [F(t, yl) F(t, y2) ...];

  • Events — [function] — введите дескрипторы функций событий, содержащих собственно функцию в векторе value, и векторы isterminal и direction (см выше);

  • Mass — матрица массы [constant matrix function]. Для задач М*у' = f(t, у) установите имя постоянной матрицы. Для задач с переменной М введите дескриптор функции, описывающей матрицу массы;

  • MstateDependence — зависимость матрицы массы от у [none | {weak} | strong] — установите 'nоnе' для уравнений M(t)*y' = F(t, у). И слабая ('weak'), и сильная ('strong') зависимости означают M(t, у), но 'weak' приводит к неявным алгоритмам решения, использующим аппроксимации при решении алгебраических уравнений;

  • MassSingular — матрица массы М сингулярная [yes no | {maybe}] (да/нет/может быть);

  • MvPattern — разреженность (dMv/dy), график разреженности (см функцию spy) — введите имя разреженной матрицы S с S(i,j) = 1 для любого k, где (i, k) элемент матрицы массы M(t, у) зависит от проекции] переменной у, и 0 в противном случае;

  • Initial Step — предлагаемый начальный размер шага, по умолчанию каждый решатель определяет его автоматически по своему алгоритму;

  • Initial SI ope — вектор начального уклона ур0 ур0 = F(t0,y0)/M(t0, y0);

  • MaxStep — максимальный шаг, по умолчанию во всех решателях равен одной десятой интервала tspan;

  • BDF (Backward Differentiation Formulas) [on | {off}] — указывает, нужно ли использовать формулы обратного дифференцирования (методы Gear) вместо формул численного дифференцирования, используемых в ode 15s по умолчанию;

  • MaxOrder - Максимальный порядок ODE15S [1 | 2 | 3 4 | {5}].

Решатели используют в списке различные параметры. В приведенной ниже таблице они даны для решателей обычных (в том числе жестких) дифференциальных уравнений.

RelTol,AbsTol

+

+

+

+

+

OutputFcaOutputSel, Refine, Stats

+

+

+

+

+

Events

+

+

+

+

+

MaxStep, InitlalStep

+

+

+

+

+

Jconstant, Jacobl an,






Jpattern, Vectorized

-

-

-

+

+

Mass

-

-

-

+

+

MassConstant

-

-

-

+

-

MaxOrder, BOF

-


-

+

-

Решатель bvp4c имеет очень небольшое число параметров, но можно вводить не только матрицу Якоби интегрируемой функции, но и матрицу Якоби, содержащую частные производные функции граничных условий по границам интервала и по неизвестным параметрам.

Покажем применение решателя ОДУ на ставшем классическом примере — решении уравнения Ван-дер-Поля, записанного в виде системы из двух дифференциальных уравнений:

y' 1= y 2 ;

y' 2= 100*(1-y 1 )^2 * y 2 -y 1

при начальных условиях

y 1 ,(0) = 0; 

y 2 (0) = 1.

Перед решением нужно записать систему дифференциальных уравнений в виде ode-функции. Для этого в главном меню выберем File > New > M-File и введем

function dydt = vdp100(t.y)

dydt = zeros(2.1); % a column vector

dydt(l) = y(2);

dydtC2) = 100*(1 -у(1^)2)*у(2) -y(1);

Сохраним m-файл-функцию. Тогда решение решателем ode15s и сопровождающий его график можно получить, используя следующие команды:

» [T,Y]=odel5s(@vdp100.[0 30].[2 0]); 

» plot(T.Y)

» hold on:gtext('yl').gtext('y2')

Последние команды позволяют с помощью мыши нанести на графики решений y 1 = y(1) и у 2 = y(2) помечающие их надписи.

 

30. Описание системы ОДУ

 

Описание системы ОДУ

Можно использовать m-файл типа odefunction (или m-file типа odefile для совместимости с прежними версиями, но последний случай мы рассматривать не будем, чтобы определить систему дифференциальных уравнений в одной из явных (первая формула) или неявных форм:

y'= F(t, у), My' = F(t, у) или M(t)y' = Y(t, у),

где t — независимая переменная (скаляр), которая обычно представляет время; у — вектор зависимых переменных; F — функция от t и у, возвращающая вектор-столбец такой же длины как и у; М и М(£) — матрицы, которые не должны быть вырожденными. М может быть и константой.

Рассмотрим пример решения уравнения вида

Оно сводится к следующей системе уравнений:

Подготовим m-файл ode-функции vdp.m:

function [outl.out2.out3] = vdp(t.y.flag)

if nargin < 3 | isempty(flag)

outl = [2.*y(2).*(l-y(2). ^ 2)-y(1); y(1)];

else

switch(flag)

case 'inlt' % Return tspan. y0 and options

out1 = [0 20];

out2 = [2; 0];

out3 = [ ];

otherwise

error([' Unknown request ''' flag '''.']);

end

end

Тогда решение системы с помощью решателя ode23 реализуется следующими командами:

» [T.Y] = ode23(@vdp.[0 20]. [2 0]);

Еще проще работать с решателями нового поколения. Рассмотрим систему уравнений: y'+abs(y)=0; y(0)=0; у(4)=-2.

Для решения в пределах отрезка [0; 4] с помощью bvp4c достаточно привести эту систему к виду: y'=-abs(y), y(0)=0; у(4)+2=0. Затем -создаем две ode-функции: twoode и twobc в разных m-файлах:

function dydx = twoode(x,у) 

dydx = [ у(2)

-abs(yd))];

function res = twobc(ya.yb) res = [ ya(l)

yb(l) + 2];

Теперь наберите в командной строке type twobvp и посмотрите само решение уравнения, которое содержится в уже имеющемся в системе файле twobvp. А исполнив команду twodvp, можно наблюдать результат решения в виде графиков. В решении вы найдете структуру узлов начальной сетки решения, которая поясняется ниже.

  • solinit — это структура узлов начальной сетки решения (в любой шкале), но такая, что solinit.x=a, solinit.x - b. И функция у, и функция у' должны быть непрерывны на участке [а b]. Дотадка для начальной итерации so1imt=bvpi-mt(x,yinit.params) в bvp4c отличается тем, что ваше начальное представление о функции у yinit можно вводить не только в виде вектора, но и как символьную функцию.

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

 

31. Дескрипторная поддержка параметров решателя

 

Дескрипторная поддержка параметров решателя

При помощи перечисленных ниже функций можно получить и создать или изменить параметры решателя:

  • o=odeget(options, 'name') — извлекает значение свойства, определенного строкой 'name', из структуры параметров options; возвращает пустую матрицу, если значение данного свойства в структуре options не определено. Можно ввести только первые буквы, которые однозначно определяют имя свойства. Пустая матрица [ ] — допустимый аргумент options;

Пример:

» options = odesetCRelTol' ,[le-6 le-7].'AbsTol' ,6е-3); 

» odeget(options.'Rel') 

ans =

l.0e-006*

1.0000 0.1000 

» odegetCoptions.'Abs') 

ans =

0.0060

  • options=odeset( 'namel' .valuel, 'name2' ,value2,...) — создает структуру параметров, в которой указанные свойства по имени ' name...' принимают следующие за ними значения. Вместо 'name...' можно ввести только первые буквы, которые однозначно определяют имя свойства (abs — Abstol, inaxit —maxiter и т. д.);

  • options=odeset (ol dopts, newopts) — изменяет существующую структуру параметров oldopts путем объединения ее с новой структурой newopts. Все новые параметры, не равные пустой матрице, заменяют соответствующие параметры в структуре oldopts;

  • options=odeset(ol dopts, 'namel' .valuel,...) — изменяет в существующей структуре параметров соответствующие значения. Пример:

oldopts

F 1 [ ] 4 'S' 'S' [ ] [ ] [ ]

newopts

Т 3 F [] 'S'  [] [] [] []

odeset(oldopts.newopts)

Т 3 F . 4 ' ' 's' [ ] [ ] [ ]

Функция odeset без параметров возвращает все имена свойств и их допустимые значения.

Пример:

» odeset

AbsTol: [ positive scalar or vector {le-6} ]

RelTol: [ positive scalar {le-3} ]

NormControl: [ on | {off} ]

OutputFcn: [ function ]

OutputSel: [ vector of integers ]

Refine: [ positive integer ]

Stats: [ on | {off} ]

InitialStep: [ positive scalar ]

MaxStep: [ positive scalar ]

BDF: [ on | {off} ]

MaxOrder: [ 1 | 2 | 3 | 4 | {5} ]

Jacobian: [ matrix | function ]

JPattern: [ sparse matrix ]

Vectorized: [ on | {off} ]

Mass: [ matrix | function ] MStateOependence: [ none | weak | strong ]

MvPattern: [ sparse matrix ]

MassSingular: [ yes | no | {maybe} ]

InitialSlope: [ vector ] Events: [ function ]

 

32. Пакет Partial Differential Equations Toolbox

 

Пакет Partial Differential Equations Toolbox

Специалистов в области численных методов решения дифференциальных уравнений в частных производных несомненно заинтересует обширный пакет Partial Differential Equations Toolbox (PDETB). Хотя этот пакет является самостоятельным приложением и в ядро MATLAB не входит, мы приведем краткое описание некоторых его возможностей с парой примеров. Вы можете вызвать пакет с его графическим интерфейсом командой pdetool.

Поскольку ряд применений пакета -PDETB связан с проблемами анализа и оптимизации трехмерных поверхностей и оболочек, в пакет введены удобные функции для построения их графиков. Они могут использоваться совместно с функцией pdeplot, что иллюстрирует следующий пример:

[p,e,t]=initmesh('Ishapeg'); 

u=assempde('Ishapeb'p.e.t.1.0,1): 

pdeplottp.e.t.'xydata',u.'zdata'.u.'mesh'.'off'):

В состав пакета входит ряд полезных демонстрационных примеров с именами от pdedemol до pdedemo8. Их можно запустить как из командной строки (путем указания имени), так из окна демонстрационных примеров Demos. Рекомендуется, однако, сделать это из командной строки, так как примеры ориентированы на управление в командном режиме — в основном оно сводится к нажатию клавиши Enter для прерывания пауз, введенных для просмотра промежуточных результатов вычислений.

Рассмотрим пример pdedemoS, решающий проблему минимизации параболической поверхности решением дифференциального уравнения

-div( l/sqrt(l+grad|u| ^ 2) * grad(u) ) = 0

при граничном условии u=х*2. Ниже представлен текст файла pdedemo3.m с убранными англоязычными комментариями:

%PDEDEM03 Решение проблемы минимизации параболической поверхности

echo on

clc

g='circleg': % Единичная окружность

b='circleb2': % х ^ 2 - граничное условие

c='l./sqrt(l+ux.*2+uy.*2)':

а=0; 

f=0:

rto1=le-3; % Погрешность вычислений решателем

pause % Пауза в вычислениях

clc

% Генерация поверхности

[p,e,t]=initmesh(g); [p,e.t]-refinemesh(g.p.e.t);

% Решение нелинейной проблемы

u=pdenonlin(b.p.e,t.c.a.f,'tol'.rtol);

pdesurf(p.t.u);

pause % Пауза в вычислениях

echo off

Весьма интересны и поучительны примеры с анимацией: pdedemo2 — появление и распространение волн, pdedemoS — вздутие поверхности (пузырек газа), pdedemo6 — колебания плоскости (гиперболическая проблема) и т. д. К сожалению, они представлены слишком объемными файлами, что не позволяет воспроизвести их в книге учебного характера. Однако вам их несомненно стоит просмотреть самостоятельно.

 

33. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Решать системы линейных уравнений точными и приближенными методами.

  • Решать системы линейных уравнений с разреженными матрицами.

  • Вычислять нули функции одной переменной.

  • Минимизировать функции одной и нескольких переменных.

  • Аппроксимировать производные конечными разностями.

  • Вычислять интегралы численными методами.

  • Выполнять операции с полиномами.

  • Использовать решатели ОДУ.

 

Урок 17. Обработка данных

1. Урок 17. Обработка данных

 

Урок №17.

Обработка данных

  • Статистическая обработка массивов

  • Сортировка элементов массивов

  • Триангуляция

  • Преобразования Фурье

  • Свертка и обратная ей операция

  • Дискретная фильтрация

  • Аппроксимация и интерполяция

  • Обработка данных в окне графики

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

 

2. Статистическая обработка данных

 

Статистическая обработка данных

Нахождение максимального и минимального элементов массива

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

  • mах(А) — возвращает наибольший элемент, если А — вектор; или возвращает вектор-строку, содержащую максимальные элементы каждого столбца, если А — матрица, в многомерных массивах работает с первой не единичной размерности;

  • mах(А.В) — возвращает массив того же размера, что А и В, каждый элемент которого есть максимальный из соответствующих элементов этих массивов;

  • max(A.[ ],dim) — возвращает наибольшие элементы по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, тах(А,[ ],1) возвращает максимальные элементы каждого столбца матрицы А;

  • [C.I] =max(A) — кроме максимальных значений возвращает вектор индексов I этих элементов.

Примеры:

» A=magic(7)

30

39

48

1

10

19

28

38

47

7

9

18

27

29

46

6

8

17

26

35

37

5

14

16

25

34

36

45

13

15

24

33

42

44

4

21

23

32

41

43

3

12

22

31

40

49

2

11

20

» С = max(A) 

С=

46 47 48 49 43 44 45 

» С = max(A.[ ].l) 

С =

46 47 48 49 43 44 45 

» С = max(A.[ ],2) 

С =

48

47

46

45

44

43

49

»[C,I]=max(A)

C=

49 43 44 45

I=

7 6 5 4

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

  • min(A) — возвращает минимальный элемент, если А — вектор; или возвращает вектор-строку, содержащую минимальные элементы каждого столбца, если А — матрица;

  • min(A.B) — возвращает массив того же размера, что А и В, каждый элемент которого есть минимальный из соответствующих элементов этих массивов;

  • min(A,[ ],dim) — возвращает наименьший элемент по столбцам или по строкам матрицы в зависимости от значения скаляра dim. Например, тах(А,[ ],1) возвращает минимальные элементы каждого столбца матрицы А;

  • [C,I] = min(A) — кроме минимальных значений возвращает вектор индексов этих элементов.

Пример:

» A=magic(4) 

А =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

» [C.I] = min(A)

C =

4 2 3 1

 I =

4 1 1 4

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

 

3. Нахождение средних, срединных значений массива и стандартных отклонений

 

Нахождение средних, срединных значений массива и стандартных отклонений

Элементарная статистическая обработка данных в массиве обычно сводится к нахождению их среднего значения, медианы (срединного значения) и стандартного отклонения. Для этого в системе MATLAB определены следующие функции:

  • mean (А) — возвращает арифметическое среднее значение элементов массива, если А — вектор; или возвращает вектор-строку, содержащую средние значения элементов каждого столбца, если А — матрица. Арифметическое среднее значение есть сумма элементов массива, деленная на их число;

  • mean(A.dim) — возвращает среднее значение элементов по столбцам или по строкам матрицы в зависимости от значения скаляра dim (dim=l по столбцам и dim=2 по строкам соответственно).

Примеры:

» А = [1

2 6 4

8; 6 7

13 5 4;

7 9 0]

А =





1

2

6

4

8

6

7

13

5

4

7

9

0

8

12

6

6

7

1

2

» mean(A)





ans =





5.0000

6.0000

6.5000

4.5000

6.5000

»mean(A.

2)




ans =





4.2000





7.0000





7.2000





4.4000





  • median (A) — возвращает медиану, если А — вектор; или вектор-строку медиан для каждого столбца, если А — матрица;

  • median(A.dim) — возвращает значения медиан для столбцов или строк матрицы в зависимости от значения скаляра dim.

Примеры:

» A=magic(6)

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

» M=median(A) 

М =

19.000018.500018.000019.000018.500018.0000 

» M=median(A,2) 

М =

21.5000

22.0000

21.0000

16.0000

15.0000

15.5000

  • std(X) — возвращает стандартное отклонение элементов массива, вычисляемое по формуле если X — вектор. Если X — матрица, то std(X) возвращает вектор-строку, содержащую стандартное отклонение элементов каждого столбца (обратите внимание, что оно отличается от среднеквадратического отклонения);

  • std(X.flag) — возвращает то же значение, что и std(X), если flag=0; если flag=l, функция std(X.l) возвращает среднеквадратическое отклонение (квадратный корень из несмещенной дисперсии), вычисляемое по формуле

  • std(X.flag.dim) — возвращает стандартное или среднеквадратическое отклонения по рядам (dim=2) или по столбцам(dim=1) матрицы X в зависимости от значения переменной dim.

Примеры:

» X = linspace(0,3*pi,10) 

X = Columns 1 through 7

0 1.0472 2.0944 3.1416 4.1888 5.2360 6.2832

Columns 8 through 10

7.3304 8.3776 9.4248 

» s = std(X) 

s =

3.1705

 

4. Функции сортировки элементов массива

 

Функции сортировки элементов массива

Многие операции статистической обработки данных выполняются быстрее и надежнее, если данные предварительно отсортированы. Кроме того, нередко представление данных в отсортированном виде более наглядно и ценно. Ряд функций служит для выполнения сортировки элементов массива. Они представлены ниже.

  • sort (А) — в случае одномерного массива А сортирует и возвращает элементы по возрастанию их значений; в случае двумерного массива происходит сортировка и возврат элементов каждого столбца. Допустимы вещественные, комплексные и строковые элементы. Если А принимает комплексные значения, то элементы сначала сортируются по абсолютному значению, а затем, если абсолютные значения равны, по аргументу. Если А включает NaN-элементы, sort помещает их в конец;

  • [В. INDEX] = sort(A) — наряду с отсортированным массивом возвращает массив индексов INDEX. Он имеет размер size(A), с помощью этого массива можно восстановить структуру исходного массива.

  • sort(A.dim) — для матриц сортирует элементы по столбцам (dim=l) или по рядам в зависимости от значения переменной dim.

Примеры:

» A=magic(5)

А =





17

24

1

8

15

23

5

7

14

16

4

б

13

20

22

10

12

19

21

3

11

18

25

2

9

» [В.

B=

INDEX] 

sort(A)



4

5

1

2

3

10

6

7

8

9

11

12

13

14

15

17

18

19

20

16

23

24

25

21

22

index=






3

2

1

5

4

4

3

2

1

5

5

4

3

2

1

1

5

4

3

2

2

1

5

4

3

  • sortrows(A) — выполняет сортировку рядов массива А по возрастанию и возвращает отсортированный массив, который может быть или матрицей, или вектором-столбцом;

  • sortrows(A.column) — возвращает матрицу, отсортированную по столбцам, точно указанным в векторе column. Например, sortrows(A,[2 3]) сортирует строки матрицы А сначала по второму столбцу, и затем, если его элементы равны, по третьему;

  • [В, index] = sort rows (А) — также возвращает вектор индексов index. Если А — вектор-столбец, то B=A(index). Если А — матрица размера тхп, то B=A(index.:).

Примеры:

» А=[2 35689: 5 7 1 2 3 5:1 3 2 1 5 1:5 0 8 8 4 3] 

А =


2

3   5

6

8

9


5

7   1

2

3

5


1

3   2

1

5

1


5

0   8

8

4

3

»

В=

sortrows(A)




в

=






1

3   2

1

5

1


2

3  5

6

3

9


5

0   8

8

4

3


5

7   1

2

3

5

» b = sortrows(A.3)
b=

5

7

1

2

3

5

1

3

2

1

5

1

2

3

5

6

8

9

5

0

8

8

4

3

  • cplxpair(A) — сортирует элементы по строкам или столбцам комплексного массива А, группируя вместе комплексно сопряженные пары. Затем найденные пары сортируются по возрастанию действительной части. Внутри пары элемент с отрицательной мнимой частью является первым. Действительные элементы следуют за комплексными парами. Заданный по умолчанию порог 100*eps относительно abs(A(i))) определяет, какие числа являются действительными и какие элементы являются комплексно сопряженными. Если А — вектор, cpl xpair (А) возвращает А вместе с комплексно сопряженными парами. Если А — матрица, cpl xpai r(А) возвращает матрицу А с комплексно сопряженными парами, сортированную по столбцам;

  • cplxpalr(A,tol) — отменяет заданный по умолчанию порог и задает новый tol;

  • cplxpair(A.[].dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim;

  • cplxpair(A,tol ,dim) — сортирует матрицу А по строкам или по столбцам в зависимости от значения параметра dim, используя заданный порог tol.

Пример:

» А=[23+121.34-31.45:23-121.-12.21:-3.34+31.-21] 

А =

23.0000 + 12.00001 34.0000 - 3.00001 45.0000

23.0000 - 12.00001 -12.0000 0 + 2.00001

-3.0000 34.0000 + 3.00001 0 - 2.00001

» cplxpair(A) 

ans =

23.0000 - 12.00001 34.0000 - 3.00001 0 - 2.00001

23.0000 + 12.00001 34.0000 + 3.00001 0 + 2.00001

-3.0000 -12.0000 45.0000

 

5. Вычисление коэффициентов корреляции

 

Вычисление коэффициентов корреляции

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

  • corrcoef(X) — возвращает матрицу коэффициентов корреляции для входной матрицы, строки которой рассматриваются как наблюдения, а столбцы — как переменные. Матрица S=corrcoef(X) связана с матрицей ковариаций C=cov(X) следующим соотношением: S(i.j)=C(i.j)/sqrt(C(i.i)C(j.j));

  • Функция S = corrcoef (х,у), где х и у — векторы-столбцы, аналогична функции соггсоеЩх у]). Пример:

» M=magic(5)

M =





17

24

1

8

15

23

5

7

14

16

4

6

13

20

22

10

12

19

21

3

11

18

25

2

9

» S=corrcoef(M) 

S =

1.0000 0.0856 -0.5455 -0.3210 -0.0238

0.0856 1.0000 -0.0981 -0.6731 -0.3210

-0.5455 -0.0981 1.0000 -0.0981 -0.5455

-0.3210 -0.6731 -0.0981 1.0000 0.0856

-0.0238 -0.3210 -0.5455 0.0856 1.0000

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

 

6. Вычисление матрицы ковариации

 

Вычисление матрицы ковариации

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

  • cov(x) — возвращает смещенную дисперсию элементов вектора х. Для матрицы, где каждая строка рассматривается как наблюдение, а каждый столбец — как переменная, cov(x) возвращает матрицу ковариации. diag(cov(x» — вектор смещенных дисперсий для каждого столбца и sqrt(diag(cov(x))) — вектор стандартных отклонений.

  • Функция С = cov(x.y), где х и у — векторы-столбцы одинаковой длины, равносильна функции cov([x у]).

Пример:

» D=[2 -3 6:3 6 -1:9 8 5]:C=cov(D) 

С =

14.3333 16.3333 3.6667

16.3333 34.3333 -10.3333

3.6667 -10.3333 14.3333 

» diag(cov(D)) 

ans =

14.3333

34.3333

14.3333

» sqrt(diag(cov(D))) 

ans =

3.7859

5.8595

3.7859 

» std(D) 

ans =

3.7859 5.8595 3.7859

 

7. Триангуляция

 

Триангуляция

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

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

 

8. Расчет триангуляции

 

Расчет триангуляции

В системе MATLAB определены функции триангуляции Делоне, триангуляции Делоне для ближайшей точки и поиска наилучшей триангуляции. Рассмотрим функции, реализующие триангуляцию Делоне.

  • TRI = delaunay(x.y) — возвращает матрицу размера mх3 множества треугольников (триангуляция Делоне), такую что ни одна из точек данных, содержащиеся в векторах х и у, не попадают внутрь окружностей, проходящих через вершины треугольников. Каждая строка матрицы TRI определяет один такой треугольник и состоит из индексов векторов х и у;

  • TRI = delaunay('x,у.'sorted'-) — при расчетах предполагается, что точки векторов х и у отсортированы сначала по у, затем по х и двойные точки уже устранены. Пример:

» rand('state',0);

» x=rand(1,25);

» y=rand(1,25); 

» TRI = delaunay(x,y);

» trimesh(TRI,x,y,zeros(size(x)))

» axis([0 1 0 1]); hold on;

» plot(x,y,'o')

  • dsearch(x.y ,TRI ,xi ,yi) — возвращает индекс точки из числа содержащихся в массивах х и у, ближайшей к точке с координатами (x1,y1), используя массив данных триангуляции TRI (триангуляция Делоне для ближайшей точки);

  • dsearch(x,y,TRI ,x1 ,y1 ,S) — делает то же, используя заранее вычисленную разреженную матрицу триангуляции S: S=sparse(TRI(: ,[1 1 2 2 3 3]), TRK: ,[2 3 1 3 1 2]).1.nxy.nxy), где nxy=prod(size(x));

  • tsearch(x,y.TRI,xi ,yi) — выполняет поиск наилучшей триангуляции, возвращает индексы строк матрицы триангуляции TRI для каждой точки с координатами (xi ,y1). Возвращает NaN для всех точек, находящихся вне выпуклой оболочки.

Триангуляция трехмерных и n-мерных массивов (п>=2) осуществляется при помощи функций delaunayS и delaunayn соответственно. Эти функции используют не алгоритм вычисления диаграмм Вороного, как del aunay, а алгоритм qhul 1 Национального научно-технического и исследовательского центра визуализации и вычисления геометрических структур США [ В MATLAB 6.1 функции delaunay, convhull, griddata, voronoi также используют qhull. - Примеч. ред. ].

Построенная по приведенному ранее примеру диаграмма представлена на рис. 17.1.

Рис. 17.1. Пример применения функции delaunay

 

1.gif

Изображение: 

9. Нахождение выпуклой оболочки

 

Нахождение выпуклой оболочки

В системе MATLAB определена функция вычисления точек выпуклой оболочки:

  • convhull (х,у) — возвращает индексы тех точек, задаваемых векторами х и у, которые лежат на выпуклой оболочке;

  • convhull(x,y,TRI) — использует триангуляцию, полученную в результате применения функции триангуляции Делоне del aunay, вместо того чтобы вычислять ее самостоятельно. Пример:

» хх=-0.8:0.03:0.8;

» уу = abs(sqrt(xx));

» [х,у] = pol2cart(xx,yy);

» k = convhuTI(x,y);

» plot(x(k),y(k).'r:',x,y,'g*')

Рис. 17.2. Пример использования функции convhull

Рис. 17.2 иллюстрирует применение функции convhull для построения выпуклой оболочки. Функция convhulln вычисляет n-мерную выпуклую поверхность, основана на алгоритме qhull.

 

2.gif

Изображение: 

10. Вычисление площади полигона

 

Вычисление площади полигона

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

  • polyarea(X.Y) — возвращает площадь полигона, заданного вершинами, находящимися в векторах X и Y. Если X и Y — матрицы одного размера, то polyarea возвращает площадь полигонов, определенных столбцами X и Y;

  • polyarea(X.Y.dim) — возвращает площадь полигона, заданного столбцами или строками X и Y в зависимости от значения переменной dim. Пример:

» L = linspace(0.3*pi,10);

» X= sin(L)';

» Y=cos(L)';

» А = polyarea(X.Y)

А =

3.8971 

» plot(X.Y.'m')

Рис. 17.3. Область многоугольника, для которого вычислена площадь

Построенный по этому примеру многоугольник представлен на рис. 17.3. В данном примере использована функция linspace(xl.x2,N), генерирующая N точек в промежутке от x1 до х2 с последующим формированием векторов X и Y для построения многоугольника в полярной системе координат.

 

3a.gif

Изображение: 

3b.gif

Изображение: 

11. Анализ попадания точек внутрь полигона

 

Анализ попадания точек внутрь полигона

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

  • IN=inpolygon(X,Y.xv.yv) — возвращает матрицу IN того же размера, что X и Y. Каждый элемент матрицы IN принимает одно из значений — 1, 0.5 или 0 — в зависимости от того, находится ли точка с координатами (X(p,q),Y(p,q)) внутри полигона, вершины которого определяются векторами xv и yv:

    • IN(p,q) = 1 — если то.чка (X(p.q) ,Y(p,q)) лежит внутри полигона;

    • IN(p,q) = 0.5 — если точка (X(p,q) ,Y(p,q)) лежит на границе полигона;

    • IN(p.q) = 0 — если точка (X(p.q),Y(p,q)) лежит вне полигона. Пример:

» L = linspace(0.2*pi,8);

» yv = sin(L)';

» xv= cos(L)';

» x= randn(100,1); у = randn(100,1);

» IN = inpolygon(x,y,xv,yv);

» plot(xv,yv,'k',x(IN),y(IN),'r*',x(~IN),y(~IN),'b*')

Построенные в этом примере массив точек и полигон представлены на рис. 17.4.

Рис. 17.4. Пример применения функции inpolygon

Точки, попавшие внутрь полигона, обозначены символом звездочки, а точки вне полигона обозначены кружками.

 

4a.gif

Изображение: 

4b.gif

Изображение: 

12. Построение диаграммы Вороного

 

Построение диаграммы Вороного

Для построения диаграммы Вороного служат следующие команды:

  • voronoi(x.y) — строит диаграмму Вороного для точек с координатами (х,у). Функция voronoi(х,у,TRI) использует триангуляцию TRI;

  • voronoi (...,' LineSpec') — строит диаграмму с заданным цветом и стилем линий;

  • [vx.vy] = voronoi (...) — возвращает вершины граней Вороного в векторах vx и vy, так что команда plot(vx,vy,'-' ,х.у,'.') создает диаграмму Вороного.

Пример:

» rand('state'.0):

» x = randd.15): у = randd.15):

» TRI = delaunay(x.y);

» subplotd.2,1)....

» trimesh(TRI,x,y,zeros(s1ze(x))); view(2),...

» axis([0 101]); hold on;

» plot(x.y,'o');

» [vx, vy] = voronoi(x.y.TRI);

» subplot(l,2,2)....

» plot(x,y,'r+',vx,vy,'b-'),...

» axis([0 1 0 1])

Рисунок 17.5 (слева) иллюстрирует построение треугольников Делоне. На рисунке справа изображены знаками «плюс» центры окружностей, проведенных вокруг треугольников Делоне.

Функция [V,C]=voronoin(X) служит для построения диаграмм Вороного n-мерных данных. V — массив граней, С —массив клеток диаграмм. При n=2 вершины граней Вороного возвращаются в порядке смежности, при п>2 — в порядке убывания.

Рис. 17.5. Связь триангуляции Делоне с диаграммой Вороного

 

5.gif

Изображение: 

13. Преобразования Фурье

 

Преобразования Фурье

Разработка преобразований Фурье сыграла огромную роль в появлении и развитии ряда новых областей науки и техники. Достаточно отметить, что электротехника переменного тока, электрическая связь и радиосвязь базируются на спектральном представлении сигналов. Ряды Фурье также можно рассматривать как приближение произвольных функций (определенные ограничения в этом известны) тригонометрическими рядами бесконечной длины. При конечной длине рядов получаются наилучшие среднеквадратические приближения. MATLAB содержит функции для выполнения быстрого одномерного и двумерного быстрого дискретного преобразования Фурье. Для одномерного массива*с длиной N прямое и обратное преобразования Фурье реализуются по следующим формулам:

 

Прямое преобразование Фурье переводит описание сигнала (функции времени) из временной области в частотную, а обратное преобразование Фурье переводит описание сигнала из частотной области во временную. На этом основаны многочисленные методы фильтрации сигналов.

 

14. Функции одномерного прямого преобразования Фурье

 

Функции одномерного прямого преобразования Фурье

В описанных ниже функциях реализован особый метод быстрого преобразования Фурье — Fast Fourier Transform (FFT, или БПФ), позволяющий резко уменьшить число арифметических операций в ходе приведенных выше преобразований. Он особенно эффективен, если число обрабатываемых элементов (отсчетов) составляет 2 т , где т — целое положительное число. Используется следующая функция:

  • fft(X) — возвращает для вектора X дискретное преобразование Фурье, по возможности используя алгоритм быстрого преобразования Фурье. Если X — матрица, функция fft возвращает преобразование Фурье для каждого столбца матрицы;

  • fft(X.n) — возвращает n-точечное преобразование Фурье. Если длина вектора X меньше n, то недостающие элементы заполняются нулями. Если длина X больше п, то лишние элементы удаляются. Когда X — матрица, длина столбцов корректируется аналогично;

  • fft(X,[ Ldirn) и fft(X,n,dim) — применяют преобразование Фурье к одной из размерностей массива в зависимости от значения параметра dim.

Для иллюстрации применения преобразования Фурье создадим трехчастотный сигнал на фоне сильного шума, создаваемого генератором случайных чисел:

»t=0:0.0005:1;

»x=sin(2*pi*200*t)+0.4*sin(2*pi*150*t)

+0.4*sin(2*pi*250*t); 

» y=x+2*randn(size(t)); 

» plot(y(1:100),'b')

Рис. 17.6. Форма зашумленного сигнала

Этот сигнал имеет среднюю частоту 200 рад/с и два боковых сигнала с частотами 150 и 250 рад/с, что соответствует амплитудно-модулированному сигналу с частотой модуляции 50 рад/с и глубиной модуляции 0.8 (амплитуда боковых частот составляет 0.4 от амплитуды центрального сигнала). На рис. 17.6 показан график этого сигнала (по первым 100 отсчетам из 2000). Нетрудно заметить, что из него никоим образом не видно, что полезный сигнал — амплитудно-модулированное колебание, настолько оно забито шумами. Теперь построим график спектральной плотности полученного сигнала с помощью прямого преобразования Фурье, по существу переводящего временное представление сигнала в частотное. Этот график в области частот до 300 Гц (см. рис. 17.6) строится с помощью следующих команд:

» Y=fft(y,1024): 

» Pyy=Y.*conj(Y)/1024; 

» f=2000*(0:150)/1024; 

» plot(f,Pyy(l:151)),grid

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

Рис. 17.7. График спектральной плотности приведенного на рис. 17.6 сигнала

 

6a.gif

Изображение: 

6b.gif

Изображение: 

7a.gif

Изображение: 

7b.gif

Изображение: 

15. Функции многомерного прямого преобразования Фурье

 

Функции многомерного прямого преобразования Фурье

Для двумерного прямого преобразования Фурье используется функция fft2:

  • fft2(X) — возвращает для массива данных X двумерное дискретное преобразование Фурье;

  • fft2(X,m.n) — усекает массив X или дополняет его нулями, чтобы перед выполнением преобразования Фурье создать матрицу размера тхп. Результат — матрица того же размера.

Для многомерного прямого преобразования Фурье также существует функция:

  • fftn(X) — возвращает результат N-мерного дискретного преобразования для массива X размерности N. Если X — вектор, то выход будет иметь ту же ориентацию;

  • fftn(X.siz) — возвращает результат дискретного преобразования для массива X с ограничением размера, заданным переменной siz.

 

16. Функция перегруппировки

 

Функция перегруппировки

Функция Y = fftshift(X) перегруппировывает выходные массивы функций fft и fft2, размещая нулевую частоту в центре спектра, что иногда более удобно. Если X — вектор, то Y — вектор с циклической перестановкой правой и левой половин исходного вектора. Если X — матрица, то Y — матрица, у которой квадранты I и III меняются местами с квадрантами II и IV [ Для одно- и двумерных массивов функция fftshift(X) эквивалентна функции rot90{X.2) ]. Рассмотрим следующий пример. Вначале построим график спектральной плотности мощности (рис. 17.8) при одномерном преобразовании Фурье:

» rand('state'.0);

» WhO.001:0.512;

» x=sin(2*pi*50*t)+sin(2*pi*120*t);

» y=x+2*randn(size(t))+0.3;

» Y=fft(y);

» Pyy=Y.*conj(Y)/512:

» f=1000*(0:255)/512:

Рис. 17.8. График спектральной плотности сигнала после одномерного преобразования Фурье

Здесь мы ограничились 512 отсчетами, с тем чтобы использовать эффективны!: метод быстрого преобразования Фурье, при котором число отсчетов должно быт: 2 N , где N - целое число. Теперь воспользуемся функцией fftshift:

» Y=fftshift(Y);

» Pyy=Y.*conj(Y)/512;

» p1ot(Pyy).grid

Полученный при этом график представлен на рис. 17.9.

Рис. 17.9. График спектральной плотности того же сигнала после применения функции fftshift

Надо отметить, что этот график дает значения спектральной плотности составляющих спектра не явно от частоты, а как распределение ее значений для элементов вектора Руу.

 

8.gif

Изображение: 

9a.gif

Изображение: 

9b.gif

Изображение: 

17. Функции обратного преобразования Фурье

 

Функции обратного преобразования Фурье

Возможно одномерное обратное преобразование Фурье, реализуемое следующими функциями:

  • ifft(F) — возвращает результат дискретного обратного преобразования Фурье вектора F. Если F — матрица, то if ft возвращает обратное преобразование Фурье для каждого столбца этой матрицы;

  • ifft(F.n) — возвращает результат n-точечного дискретного обратного преобразования Фурье вектора F;

  • ifft(F.[ ],dim) иу = ifft(X,n,dim) — возвращают результат обратного дискретного преобразования Фурье массива F по строкам или по столбцам в зависимости от значения скаляра dim.

Для любого X результат последовательного выполнения прямого и обратного преобразований Фурье ifft(fft(x)) равен X с точностью до погрешности округления. Если X — массив действительных чисел, ifft(fft(x)) может иметь малые мнимые части.

Пример:

» V=[l 1110000]: 

» fft(V)

ans =

Columns 1 through 4

4.0000 1.0000 - 2.41421 0 1.0000 - 0.41421 

Columns 5 through 8

 0 1.0000 + 0.41421 0 1.0000 + 2.41421

» 1fft(fft(V)) 

ans =

1 1 1 1 0 0 0 0

Аналогичные функции есть для двумерного и многомерного случаев:

  • ifft2(F) — производит двумерное дискретное обратное преобразование Фурье для матрицы F;

  • ifft2(F,m,n) — производит обратное преобразование Фурье размерности тхп для матрицы F;

  • ifftn(F) — возвращает результат JV-мерного обратного дискретного преобразования Фурье для N-мерного массива F;

  • ifftn(F.siz) — возвращает результат обратного дискретного преобразования Фурье для массива F с ограничением размера, заданным вектором siz. Если любой элемент siz меньше, чем соответствующая размерность F, то массив F будет урезан до размерности siz.

 

18. Свертка и дискретная фильтрация

 

Свертка и дискретная фильтрация

Функция свертки и обратная ей функция

В этом разделе рассмотрены базовые средства для проведения операций свертки и фильтрации сигналов на базе алгоритмов быстрого преобразования Фурье. Многие дополнительные операции, относящиеся к этой области обработки сигналов, можно найти в пакете прикладных программ Signal Processing Toolbox.

Для двух векторов х и у с длиной тип определена операция свертки:

В ее результате получается вектор z с длиной (т+п- 1). Для осуществления свертки используется функция conv(x.y).

Обратная свертке функция определена как [q,r]=deconv(z,x). Она фактически определяет импульсную характеристику фильтра. Если z=conv(x,y), то q=y и г=0. Если х и у — векторы с коэффициентами полиномов, то свертка эквивалентна перемножению полиномов, а обратная операция — их делению. При этом вектор q возвращает частное (фактор), а вектор r - остаток от деления полиномов.

 

19. Функция свертки двумерных массивов

 

Функция свертки двумерных массивов

Для двумерных массивов также существует функция свертки: Z=conv2(X.Y) и Z=conv2(X,Y. 'option').

Для двумерных массивов X и Y с размером m хп и тхп соответственно результат двумерной свертки порождает массив размера (т +т -1)х(m +п -1). Во второй форме функции параметр option может иметь следующие значения:

  • ' full' — полноразмерная свертка (используется по умолчанию);

  •  'same' — центральная часть размера тхп ;

  • 'valid' — центральная часть размера (т-т +1)х(п-п +1), еслн (тхп х )>(тхп ).

Возможность изменить решение или трактовку данных с помощью параметров является свойством ряда функций системы MATLAB. Позже мы столкнемся с этой возможностью еще не раз.

 

20. Дискретная одномерная фильтрация

 

Дискретная одномерная фильтрация

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

  • filter(B.A.X) — фильтрует одномерный массив данных X, используя дискретный фильтр, описываемый следующим конечноразностным уравнением:

a(l)*y(n) = b(1)*x(n) + b(2)*х(п-1) + ... + b(nb+l)*x(n-nb) -- а(2)*у(п-1) - ... - a(na+l)*y(n-na).

Если а(1) не равно 1, то коэффициенты уравнения нормализуются относительно а (1). Когда X — матрица, функция filten оперирует столбцами X. Возможна фильтрация многомерного (размерности N) массива.

  • [Y. Zf]=fi 1 ten(В, A. X, Zi) — выполняет фильтрацию с учетом ненулевого начального состояния фильтра Zi; возвращает помимо выходного сигнала Y конечное состояние фильтра Zf;

  • filter(B.A.X,[ ].dim) или fi!ter(B.A,X.Zi .dim) — работает в направлении размерности dim

Рассмотрим типовой пример фильтрации гармонического сигнала на фоне других сигналов — файл с именем filtdem.m из пакета расширения Signal Processing Toolbox.

Следующий кадр иллюстрирует конструирование фильтра с достаточно плоской вершиной амплитудно-частотной характеристики (АЧХ) и полосой частот, обеспечивающего выделение сигнала с частотой 15 Гц и подавление сигналов с частотами 5 и 30 Гц. Для формирования полосы пропускания фильтра используется функция el 11 р, а для построения АЧХ — функция freqz (обе — из пакета Signal Processing Toolbox). Это позволяет построить график АЧХ созданного фильтра.

Следующий кадр примера иллюстрирует эффективность выделения сигнала заданной частоты (15 Гц) с помощью операции фильтрации — функции filter, описанной выше. Можно заметить два обстоятельства — полученный стационарный сигнал практически синусоидален, что свидетельствует о высокой степени фильтрации побочных сигналов. Однако нарастание сигнала во времени идет достаточно медленно и занимает несколько периодов частоты полезного сигнала. Характер нарастания сигнала во времени определяется переходной характеристикой фильтра.

Заключительный кадр показывает спектр исходного сигнала и спектр сигнала на выходе фильтра (он показан линиями другого цвета, что, к сожалению, не видно на черно-белом рисунке). Для построения спектров используется прямое преобразование Фурье — функция fft.

Этот пример наглядно иллюстрирует технику фильтрации. Рекомендуется просмотреть дополнительные примеры, которые есть в разделе Demos системы применительно к пакету расширения Signal Processing (если этот пакет установлен).

 

21. Двумерная фильтрация

 

Двумерная фильтрация

Для осуществления двумерной фильтрации служит функция filter2:

  • filter2(B.X) — фильтрует данные в двумерном массиве X, используя дискретный фильтр, описанный матрицей В. Результат Y имеет те же размеры, что и X;

  • filter2(B,X, 'option') — выполняет то же, но с опцией, влияющей на размер массива Y:

    • 'same' — size(Y)=size(X) (действует по умолчанию);

    • 'valid' — size(Y) < size(X), центральная часть двумерной свертки, при вычислении которой не приходится дополнять массивы нулями;

    • 'full' — size(Y) > size(X), полная двумерная свертка.

 

22. Функция коррекции фазовых углов unwrap

 

Функция коррекции фазовых углов unwrap

Фазовые углы одномерных массивов испытывают разрывы при переходе через значения, кратные р. Функции unwrap(P) и unwrap(P,cutoff) устраняют этот недостаток одномерного массива Р, дополняя значения углов в точках разрыва значениями ±2р. Если Р — двумерный массив, то данная функция применяется к столбцам. Параметр cutoff (по умолчанию равный р) позволят назначить любой критический угол в точках разрыва. Функция используется при построении фазочастотных характеристик (ФЧХ) фильтров. Поскольку они строятся редко, оставим за читателем изучение практического применения данной функции.

 

23. Интерполяция и аппроксимация данных

 

Интерполяция и аппроксимация данных

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

Результат аппроксимации может не проходить через узловые точки. Напротив, задача интерполяции — найти данные в окрестности узловых точек. Для этого используются подходящие функции, значения которых в узловых точках совпадают с координатами этих точек. Например, при линейной интерполяции зависимости у(х) узловые точки соединяются друг с другом отрезками прямых и считается, что искомые промежуточные точки расположены на этих отрезках.

Для повышения точности интерполяции применяют параболы (квадратичная интерполяция) или полиномы более высокой степени (полиномиальная интерполяция). Для обработки данных MATLAB использует различные функции интерполяции и аппроксимации данных. Набор таких функций вместе с несколькими вспомогательными функциями описан в этом разделе.

 

24. Полиномиальная регрессия

 

Полиномиальная регрессия

Одна из наиболее известных аппроксимаций — полиномиальная. В системе MATLAB определены функции аппроксимации данных полиномами по методу наименьших квадратов — полиномиальной регрессии. Это выполняет функция, приведенная ниже:

  • polyfit(x.y.n) — возвращает вектор коэффициентов полинома р(х) степени п, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию у(х). Результатом является вектор-строка длиной n+1, содержащий коэффициенты полинома в порядке уменьшения степеней х и у равно n+1, то реализуется обычная полиномиальная аппроксимация, при которой график полинома точно проходит через узловые точки с координатами (х.у), хранящиеся в векторах х и у. В противном случае точного совпадения графика с узловыми точками не наблюдается;

  • [p.S] = polyflt(x.y.n) — возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предсказания погрешности;

  • [p.S] = polyf1t(x,y,n,mu) возвращает коэффициенты полинома р и структуру S для использования вместе с функцией polyval с целью оценивания или предска-зния погрешности, но так, что присходит центрирование (нормирование) и масштабирование х, xnorm = (х - mu(l))/mu(2), где mu(l) = mean(x) и mu(2) = std(x). Центрирование и масштабирование не только улучшают свойства степенного многочлена, получаемого при помощи polyval, но и значительно повышают качественные характеристики самого алгоритма аппроксимации.

Рис. 17.10. Пример использования функции polyfit

Пример (полиномиальная регрессия для функции s

» х=(-3:0.2:3)';

y=sin(x);

p=polyflt(x,y,3)

р =

-0.0953 0.0000 0.8651 -0.0000 

»x=(-4:0.2:4)';y=sin(x); 

» f=polyval(p,x);plot(x,y,'o',x,f)

Рис. 17.14, построенный в этом примере, дает наглядное представление о точности полиномиальной аппроксимации. Следует помнить, что она достаточно точна в небольших окрестностях от точки х = 0, но может иметь большие погрешности за их пределами или в промежутках между узловыми точками.

График аппроксимирующего полинома третьей степени на рис. 17.10 показан сплошной линией, а точки исходной зависимости обозначены кружками. К сожалению, при степени полинома свыше 5 погрешность полиномиальной регрессии (и аппроксимации) сильно возрастает и ее применение без центрирования и масштабирования становится рискованным. Обратите внимание на то, что при полиномиальной регрессии узловые точки не ложатся точно на график полинома, поскольку их приближение к нему является наилучшим в смысле минимального среднеквадратического отклонения. Об этом уже говорилось.

 

10a.gif

Изображение: 

10b.gif

Изображение: 

25. Интерполяция периодических функции рядом Фурье

 

Интерполяция периодических функций рядом Фурье

Под интерполяцией обычно подразумевают вычисление значений функции f(x) в промежутках между узловыми точками. Линейная, квадратичная и полиномиальная интерполяция реализуются при полиномиальной аппроксимации. А вот для периодических (и особенно для гладких периодических) функций хорошие результаты может дать их интерполяция тригонометрическим рядом Фурье. Для этого используется следующая функция:

  • interpft(x.n) — возвращает вектор у, содержащий значения периодической функции, определенные в п равномерно расположенных точках. Если length(x)=rr; и х имеет интервал дискретизации dx, то интервал дискретизации для у составляет dy=dx*m/n, причем п не может быть меньше, чем т. Если X — матрица, interpft оперирует столбцами X, возвращая матрицу Y с таким же числом столбцов, как и у X, но с п строками. Функция y=interpft(x.n.dim) работает либо со строками, либо со столбцами в зависимости от значения параметра dim.

Рис. 17.11. Пример использования функции interpft

Пример:

» x=0:10; y=sin(x).^3;

» x1=0:0.1:10; y1=interpft(y,101);

» x2=0:0.01:10; y2=sin(x2).^3;

» plot(x1,y1, 'r').hold on.plot(x,y, 'b',x2,y2)

Рис. 17.11 иллюстрирует эффективность данного вида интерполяции на примере функции sin(x).^3, которая представляет собой сильно искаженную синусоиду.

Исходная функция на рис. 17.12 представлена сплошной линией с кружками, а интерполирующая функция — штрих-пунктирной линией.

 

11.gif

Изображение: 

26. Интерполяция на неравномерной сетке

 

Интерполяция на неравномерной сетке

Для интерполяции на неравномерной сетке используется функция griddata:

  • ZI = griddata(x.y.z.XI.YI) — преобразует поверхность вида z = f(x. у), которая определяется векторами (x.y.z) с (обычно) неравномерно распределенными элементами. Функция griddata аппроксимирует эту поверхность в точках, определенных векторами (XI.YI) в виде значений ZI. Поверхность всегда проходит через заданные точки. XI и YI обычно формируют однородную сетку (созданную с помощью функции meshgrid).

XI может быть вектором-строкой, в этом случае он определяет матрицу с постоянными столбцами. Точно так же YI может быть вектором-столбцом, тогда он определяет матрицу с постоянными строками.

  • [XI.YI.ZI] = griddata(x,y,z,xi ,yi ) — возвращает аппроксимирующую матрицу ZI, как описано выше, а также возвращает матрицы XI и YI, сформированные из вектора-столбца xi и вектора-строки yi . Последние аналогичны матрицам, возвращаемым функцией meshgrid;

  • [...] = griddata (....method) — использует определенный метод интерполяции:

    • 'nearest' — ступенчатая интерполяция;

    • 'linear' — линейная интерполяция (принята по умолчанию);

    • 'cubic' — кубическая интерполяция;

    • ' v4 ' — метод, используемый в МATLAB 4.

Метод определяет тип аппроксимирующей поверхности. Метод 'cubic 1 формирует гладкие поверхности, в то время как 'linear' и 'nearest' имеют разрывы первых и нулевых производных соответственно. Все методы, за исключением v4, основаны на триангуляции Делоне. Метод ' v4 ' включен для обеспечения совместимости с версией 4 системы MATLAB. Пример:

» x=rand(120.1)*4-2;y=rand(120.1)*4-2;

z=x,*y,*exp(-x.^2-y.^2); 

» t=-2:0.1:2;[X,Y]=meshgrid(t,t);

Z=griddata(x.y.z.X.Y); 

» mesh(X.Y.Z),hold on;plot3(x.y,z, 'ok')

Функции griddataS и griddatan работают аналогично griddata, но для для трехмерного и n-мерного случая — с использованием алгоритма qhul 1 . Используются, в частности, при трехмерной и n-мерной триангуляции.

Рис. 17.13 иллюстрирует применение функции griddata.

Рис 17.12. Пример использования функции griddata

 

12.gif

Изображение: 

27. Одномерная табличная интерполяция

 

Одномерная табличная интерполяция

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

  • yi = Interpl(x.Y.xi) — возвращает вектор yi, содержащий элементы, соответствующие элементам xi и полученные интерполяцией векторов х и Y. Вектор х определяет точки, в которых задано значение Y. Если Y — матрица, то интерполяция выполняется для каждого столбца Y и у1 имеет длину length (xi) - by- size (Y. 2);

  • yi = interpl (x.Y.xi .method) — позволяет с помощью параметра method задать метод интерполяции:

    • 'nearest' — ступенчатая интерполяция;

    • 'linear' — линейная интерполяция (принята по умолчанию);

    • 'spline' — кубическая сплайн-интерполяция;

    • 'cubic' или 'pchip' — интерполяция многочленами Эрмита;

    • 'v5cubic' — кубическая интерполяция MATLAB 5.

  •  yi = interpl (x.Y.xi .method, значение величин вне пределов изменения х) позволяет отобразить особенные точки на графике;

  • yi = i nterpl(х, Y, xi.method.' сообщение') — позволяет изменить сообщение об особенных точках на графике.

Все методы интерполяции требуют, чтобы значения х изменялись монотонно. Когда х — вектор равномерно распределенных точек, для более быстрой интерполяции лучше использовать методы '*1inear', '*cubic', '*nearest' или '*spline'. Обратите внимание, что в данном случае наименованию метода предшествует знак звездочки.

Пример (интерполяция функции косинуса):

» x=0:10:y=cos(x);

» xi=0:0.1:10;

» yi=interpl(x,y,xi);

» plot(x,y,'x',xi,yi,'g'),hold on

» yi=interpl(x,y,xi.'spline'): 

» plot(x,y,'o ' ,xi,yi,'m').grid,hold off

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

 

28. Двумерная табличная интерполяция

 

Двумерная табличная интерполяция

Двумерная интерполяция существенно сложнее, чем одномерная, рассмотренная выше, хотя смысл ее тот же — найти промежуточные точки некоторой зависимости z(x, у) вблизи расположенных в пространстве узловых точек. Для двумерной табличной интерполяции используется функция interp2:

  • ZI = interp2(X,Y.Z,XI.YI) — возвращает матрицу ZI, содержащую значения функции в точках, заданных аргументами XI и YI, полученные путем интерполяции двумерной зависимости, заданной матрицами X, Y и Z. При этом X и Y должны быть монотонными и иметь тот же формат, как если бы они были получены с помощью функции meshgrid (строки матрицы X являются идентичными; то же можно сказать о столбцах массива Y). Матрицы X и Y определяют точки, в которых задано значение Z. Параметры XI и YI могут быть матрицами, в этом случае interp2 возвращает значения Z, соответствующие точкам (XI(i,j),YI(i.j)). В качестве альтернативы можно передать в качестве параметров вектор-строку xi и вектор-столбец yi. В этом случае interp2 представляет эти векторы так, как если бы использовалась команда mesh-grid(xi .yi);

  • ZI = interp2(Z,XJ.YI) — подразумевает, что Х=1:n и Y=l:m, где [m.n]=size(Z);

  • ZI = interp2(Z,ntimes) — осуществляет интерполяцию рекурсивным методом с числом шагов ntimes;

  • ZI = interp2(X,Y,Z.XI,YI.method) — позволяет с помощью опции method задать метод интерполяции:

    • 'nearest' — интерполяция по соседним точкам;

    • 'linear' — линейная интерполяция;

    • 'cubic' — кубическая интерполяция (полиномами Эрмита);

    • 'spline' — интерполяция сплайнами.

Все методы интерполяции требуют, чтобы X и Y изменялись монотонно и имели такой же формат, как если бы они были получены с помощью функции meshgrid. Когда X и Y — векторы равномерно распределенных точек, для более быстрой интерполяции лучше использовать методы '*1inear', '*cubic', или '*nearest'.

Пример:

» [X.Y]=meshgrid(-3:0.25:3);

Z=peaks(X/2.Y*2):

» [Xl,Yl]=meshgrid(-3:0.1:3);

Zl=interp2(X,Y.Z.Xl.Yl) :

» mesh(X.Y,Z).hold on.mesh(Xl.Yl,Zl+15).hold off

Рис. 17.13. Применение функции interpZ

Рис. 17.13 иллюстрирует применение функции interp2 для двумерной интерполяции (на примере функции peaks).

В данном случае поверхность снизу — двумерная линейная интерполяция, которая реализуется по умолчанию, когда не указан параметр method.

 

13.gif

Изображение: 

29. Трехмерная табличная интерполяция

 

Трехмерная табличная интерполяция

Для трехмерной табличной интерполяции используется функция interp3:

  • VI = interp3(X.Y.Z.V.XI,YI.ZI) — интерполирует, чтобы найти VI, значение основной трехмерной функции V в точках матриц XI, YI и ZI. Матрицы X, Y и Z определяют точки, в которых задано значение V. XI, YI и ZI могут быть матрицами, в этом случае InterpS возвращает значения Z, соответствующие точкам (XI (i ,j) ,YI(i. j), ZI (i. j)). В качестве альтернативы можно передать векторы xi, yl и zi. Векторы аргументы, имеющие неодинаковый размер, представляются, как если бы использовалась команда meshgrid;

  • VI = interp3(V.XI.YI.ZI) - подразумевает X=1:N, Y=1:M, Z=1:P, где [M,N.P]=size(V);

  • VI = interpS(V.ntimes) — осуществляет интерполяцию рекурсивным методом с числом шагов ntimes;

  • VI = interp3(... .method) — позволяет задать метод интерполяции:

    • 'nearest' — ступенчатая интерполяция;

    • 'linear' — линейная интерполяция;

    • 'cubic' — кубическая интерполяция (полиномами Эрмита);

    • 'spline' — интерполяция сплайнами.

Все методы интерполяции требуют, чтобы X, Y и Z изменялись монотонно и имели такой же формат, как если бы они были получены с помощью функции meshgrid. Когда X и Y и Z — векторы равномерно распределенных в пространстве узловых точек, для более быстрой интерполяции лучше использовать методы '*li'near', '*cubic' или '*nearest'.

 

30. N-мерная табличная интерполяция

 

N-мерная табличная интерполяция

MATLAB позволяет выполнить даже n-мерную табличную интерполяцию. Для этого используется функция interpn:

  • VI = interpn(X1.X2,X3,... ,V,Y1.Y2.Y3....)- интерполирует, чтобы найти VI, значение основной многомерной функции V в точках массивов Y1, Y2, Y3,.... Функции interpn должно передаваться 2ЛГ+1 аргументов, где N — размерность интерполируемой функции. Массивы X1, Х2, ХЗ,... определяют точки, в которых задано значение V. Параметры Y1, Y2, Y3,... могут быть матрицами, в этом случае interpn возвращает значения VI, соответствующие точкам (YKi, j) ,Y2(i, j), Y3(i, j),...). В качестве альтернативы можно передать векторы yl, y2, уЗ,... В этом случае interpn интерпретирует их, как если бы использовалась команда ndgrid(y1. У2.у3....);

  • VI = interpn(V.Yl,Y2,Y3,...) - подразумевает Xl=1size(V.l), X2=l:size(V,2), X3=l:size(V,3) и т. д.; 

  • VI = Interpn(V.ntimes) — осуществляет интерполяцию рекурсивным методом с числом шагов ntimes;

  • VI = interpn(...method) — позволяет указать метод интерполяции:

  • 'nearest' — ступенчатая интерполяция;

  • 'linear' — линейная интерполяция;

  • 'cubic' — кубическая интерполяция.

В связи с редким применением такого вида интерполяции, наглядная трактовка которой отсутствует, примеры ее использования не приводятся.

 

31. Интерполяция кубическим сплайном

 

Интерполяция кубическим сплайном

Сплайн-интерполяция используется для представления данных отрезками полиномов невысокой степени — чаще всего третьей. При этом кубическая интерполяция обеспечивает непрерывность первой и второй производных результата интерполяции в узловых точках. Из этого вытекают следующие свойства кубической сплайн-интерполяции:

  • график кусочно-полиномиальной аппроксимирующей функции проходит точно через узловые точки;

  • в узловых точках нет разрывов и резких перегибов функции;

  • благодаря низкой степени полиномов погрешность между узловыми точками обычно достаточно мала;

  • связь между числом узловых точек и степенью полинома отсутствует;

  • поскольку используется множество полиномов, появляется возможность аппроксимации функций с множеством пиков и впадин.

Как отмечалось, в переводе spline означает «гибкая линейка». График интерполирующей функции при этом виде интерполяции можно уподобить кривой, по которой изгибается гибкая линейка, закрепленная в узловых точках. Реализуется сплайн-интерполяция следующей функцией:

  • yi = spline(x,y,xi) — использует векторы х и у, содержащие аргументы функции и ее значения, и вектор xi, задающий новые точки; для нахождения элементов вектора yi используется кубическая сплайн-интерполяция;

  • рр = spline(x.y) — возвращает рр-форму сплайна, используемую в функции ppval и других сплайн-функциях.

Пример:

» х=0:10; y=3*cos(x);

» x1=0:0.1:11;

» y1=spline(x,y.x1);

» plot(x,y,'о',x1,y1,'--')

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

Результат интерполяции показан на рис. 17.14.

Рис. 17.14. Пример применения функции spline

Ввиду важности сплайн-интерполяции и аппроксимации в обработке и представлении сложных данных в состав системы MATLAB входит пакет расширения Spline Toolbox, содержащий около 70 дополнительных функций, относящихся к реализации сплайн-интерполяции и аппроксимации, а также графического представления сплайнами их результатов. Для вызова данных об этом пакете (если он установлен) используйте команду help splines.

 

14a.gif

Изображение: 

14b.gif

Изображение: 

32. Обработка данных в графическом окне

 

Обработка данных в графическом окне

Средства обработки данных в графическом окне

Решение большинства задач интерполяции и аппроксимации функций и табличных данных обычно сопровождается их визуализацией. Она, как правило, заключается в построении узловых точек функции (или табличных данных) и в построении функции аппроксимации или интерполяции. Для простых видов аппроксимации, например полиномиальной, желательно нанесение на график формулы, полученной для аппроксимации.

В MATLAB 6,0 совмещение функций аппроксимации с графической визуализацией доведено до логического конца — предусмотрена аппроксимация рядом методов точек функции, график которой построен. И все это выполняется прямо в окне редактора графики Property Editor. Для этого в позиции Tools графического окна имеются две новые команды:

  • Basic Fitting - основные виды аппроксимации (регрессии); 

  • Data Statistics - статистические параметры данных.

Команда Basic Fitting открывает окно, дающее доступ к ряду видов аппроксима-- ции и регрессии: сплайновой, эрмитовой и полиномиальной со степенями от 1 (линейная аппроксимация) до 10. В том числе со степенью 2 (квадратичная аппроксимация) и 3 (кубическая аппроксимация). Команда Data Statistics открывает окно с результатами простейшей статистической обработки данных.

 

33. Полиномиальная регрессия для табличных данных

 

Полиномиальная регрессия для табличных данных

Рассмотрим самый характерный пример обработки данных, примерно представляющих некоторую (например, экспериментальную) зависимость вида у(х). Пусть она задана в табличной форме, причем колонки таблицы соответствуют элементам векторов X и Y одинакового размера в следующем примере:

» Х=[2,4,6,8,10,12,14];

» Y=[3,76,4,4,5,1,5,56,6,6,3,6,7];

» plot(X,Y,'o');

Напомним, что последняя команда строит график узловых точек кружками (без соединения их отрезками прямых).

Примечание

При проведении полиномиальной аппроксимации надо помнить, что максимальная степень полинома на 1 меньше числа точек, т. е. числа элементов в векторах X и Y.

Исполнив команду Tools > Basic Fitting, можно получить окно регрессии. В этом окне птичкой отмечены три вида полиномиальной регрессии — порядка 1 (linear — линейная), 2 (quadratic — квадратичная) и 3 (cubic — кубическая). Стоит отметить какой-либо вид регрессии, как соответствующая кривая функции регрессии (аппроксимации) появится в графическом окне.

Установив птичку у параметра Show equations (Показать уравнения), можно получить в графическом окне запись уравнений регрессии (аппроксимации). Наконец, можно сместить выводимую по умолчанию легенду в место, где она не закрывала бы другие детали графика.

Наконец, исполнив команду Tools > Data Statistics, можно получить окно с рядом статистических параметров данных, представленных векторами X и Y. Отметив птичкой тот или иной параметр в этом окне, можно наблюдать соответствующие построения на графике, например вертикалей с минимальным, средним и максимальных значением у и горизонталей с минимальным, средним и максимальным значением х.

Примечание

Безусловно, эта новинка понравится большинству пользователей системы MATLAB 6.0. Однако нельзя не отметить, что статистические данные более чем скупы.

 

34. Оценка погрешности аппроксимации

 

Оценка погрешности аппроксимации

Средства обработки данных из графического окна позволяют строить столбцовый или линейчатый график погрешностей в узловых точках и наносить на эти графики норму погрешности. Норма дает статистическую оценку среднеквадрати-ческой погрешности. Чем она меньше, тем точнее аппроксимация. Для вывода графика погрешности надо установить птичку у параметра Plot residuals (График погрешностей) и в меню ниже этого параметра выбрать тип графика.

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

 

35. Сплайновая интерполяция в графическом окне

 

Сплайновая интерполяция в графическом окне

Попытка аппроксимации полиномом 8-й степени не дает положительного результата — кривая проходит внутри облака точек, совершенно не интерполируя это облако.

Однако если применить сплайновую интерполяцию, то картина кардинально меняется. На этот раз кусочная линия интерполяции прекрасно проходит через все точки и поразительно напоминает синусоиду. Даже ее пики со значениями 1 и -1 воспроизводятся удивительно точно, причем и в случаях, когда на них не попадают узловые точки.

Причина столь великолепного результата кроется в уже отмеченных ранее особенностях сплайновой интерполяции - она выполняется по трем ближайшим

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

Рис. 17.15. Пример сплайновой интерполяции в графическом окне

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

 

15.gif

Изображение: 

36. Эрмитовая многоинтервальная интерполяция

 

Эрмитовая многоинтервальная интерполяция

MATLAB 6.0 дает возможность в графическом окне использовать еще один вид многоинтервальной интерполяции на основе полиномов третьей степени Эрмита. Техника интерполяции здесь таже, что и в случае сплайновой интерполяции, (рис. 17.16).

Полиномы Эрмита имеют более гибкие линии, чем сплайны. Они точнее следуют за отдельными изгибами исходной зависимости. Это хорошо показывает рис. 17.16.

Рис. 17.16. Пример эрмитовой интерполяции синусойды в графическом окне

 

16.gif

Изображение: 

37. Сравнение сплайновой и эрмитовой интерполяции

 

Сравнение сплайновой и эрмитовой интерполяции

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

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

Все это говорит о том, что надо внимательно подходить к оценке приемлемости того или иного вида интерполяции (или аппроксимации) для конкретных типов исходных данных.

 

38. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Выполнять статистическую обработку элементов массивов. 

  • Осуществлять триангуляцию и строить диаграммы Вороного. 

  • Осуществлять прямое и обратное преобразование Фурье. 

  • Осуществлять аппроксимацию и интерполяцию данных. 

  • Вести обработку данных в графических окнах.

 

Урок 18. Работа с символьными данными

1. Урок 18. Работа с символьными данными

 

Урок №18.

Работа с символьными данными

  • Основные функции символьных данных

  • Операции над строками

  • Преобразование символов и строк

  • Функции преобразования систем счисления

  • Вычисление строковых выражений

Функции обработки массивов символов или рядов этих массивов (строкой в терминологии MATLAB называется любой массив символов или ряд массива символов) для математической системы могут показаться второстепенными. Однако это не так. Строковое представление данных лежит в основе символьной математики, арифметики произвольной точности и многочисленных программных конструкций, не говоря уже о том, что оно широко применяется в базах данных и массивах ячеек. Этот урок посвящен возможностям обработки символьных переменных и выражений в системе MATLAB.

 

2. Основные функции символьных данных

 

Основные функции символьных данных

В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 0 до 255.

Вектор, содержащий строку символов, в системе MATLAB задается следующим образом:

  • S= 'Any Characters' — вектор, компонентами которого являются числовые коды, соответствующие символам [ Символ  внутри такой строки дублируется (заменяется на ''). — Примеч. ред. ].

Первые 127 чисел — это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки. Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является дополнительной и может использоваться для представления символов других языков, например русского. Длина вектора S соответствует числу символов в строке, включая пробелы. Апостроф внутри строки символов должен вводиться как два апострофа ' '.

К основным строковым функциям относятся следующие:

  • char (X) — преобразует массив X положительных целых чисел (числовых кодов от 0 до 65 535) в массив символов системы MATLAB (причем только первые 127 кодов — английский набор ASCII, со 128 до 255 — расширенный набор ASCII) и возвращает его, на платформе Windows при значении выше 65 535 выдает предупреждение об ошибке, но возвращает русскую букву я (я повторяется так же, как char(255+256rt), где п — целые неотрицательные числа) [ Результат char(x) при х>65535 зависит от платформы, русификации и т. д. — Примеч. ред. ];

Пример:

» X=reshape(32:127,32,3); 

» S= char(X')

S=

!"#$*&'()*+.-./0123456789::<=>? 

(aABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_

 "abcdefghijklmnopqrstuvwxyz{|}-[]

» t1= ' computer'

» t2='for';

» t3='home':

» t4='users':

» S = Char(tl.t2.t3.t4)

S =

computer

for

home

users

  • char (С) — преобразует каждый элемент строкового массива ячеек в ряды массива символов, если строки массива ячеек разного размера, к ним в конце добавляются пробелы (осуществляется набивка (padding) в терминах MATLAB) так чтобы в каждом ряде массива символов было одинаковое число символов;

  • char (Tl, T2, ТЗ), где Т — строки, возвращает массив символов, при этом копии строк T1, T2, Т3 преобразуются в ряды массива символов добавлением при необходимости пробелов в конце рядов массивов символов, как описано ранее;char (java.Tang.string) — преобразует объект класса java.lang. string вмассив символов MATLAB;

  • char (javaarray of java.lang.string) — единственный случай, когда выходным аргументом функции является не массив символов, а строковый массив ячеек, в который преобразуется массив строк Java;

  • double(S) — преобразует символы строки S в числовые коды 0—65535 и возвращает вектор с этими числовыми кодами;

  • ischar'(S) — возвращает логическую единицу, если S является символьной переменной, и логический ноль в противном случае;

  • deblank(str) — возвращает строку, полученную из аргумента — строки str с удаленными из ее конца пробелами;

  • deblank(c) — применяет функцию deblank к каждому элементу строкового массива ячеек с.

Примеры:

» S = 'computer'

S =

computer

» X = double(S)

X =

99 111 109 112 117 116 101 114

» ischar(S)

ans =

1

»c{l,l}='My ';

» c{l,2}='home ';

» c{1.3}='computer ';

» с

с=

'My ' 'home ' 'computer 

» с = deblank(c) 

с =

'My' 'home' 'computer'

Примечание

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

 

3. Операции над строками

 

Операции над строками

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

  • findstr(str1,str2) — обеспечивает поиск начальных индексов более короткой строки внутри более длинной и возвращает вектор этих индексов. Индексы указывают положение первого символа более короткой строки в более длинной строке.

Пример:

» strb'Example of the function Is the findstr function';

» str2='the';

» k = findstr(strl,str2)

k =

12 28

  • lower('str') — возвращает строку символов str, в которой символы верхнего регистра переводятся в нижний регистр, а все остальные символы остаются без изменений.

Пример:

» str='Example Of The Function';

» t=lower(str)

t =

example of the function

  • upper( 'str') — возвращает строку символов str, в которой все символы нижнего регистра переводятся в верхний регистр, а все остальные символы остаются без изменений.

Пример:

» str='danger!';

» t = upper(str)

t =

DANGER!

  • strcat(sl,s2,s3,...) — выполняет горизонтальное объединение соответствующих рядов массивов символов s1, s2, s3 и т. д., причем пробелы в конце каждого ряда отбрасываются, и возвращает объединенную строку (ряд) результирующего массива символов, пробелы добавляются заново после анализа строк в полученном массиве. Все входные массивы должны иметь одинаковое число строк (в частном случае должны быть представлены в виде одной строки символов), но если один из входных аргументов — не массив символов, а строковый массив ячеек, то любой из других входных аргументов может быть скаляром или любым массивом той же размерности и того же размера. Если входной массив состоит только из символов, то выходной массив также будет являться массивом символов. Если любой из входных массивов является строковым массивом ячеек, то функция strcat возвращает строковый массив ячеек, сформированный из объединенных соответствующих элементов массивов si, s2, s3. при этом любой из элементов может быть скаляром и т. д.

Примеры:

» sl{1.2}='book'

» sl sl =

'Home' 'book' 

» s2{ 1.1}= 'home '

» s2{ 1,2}= 'reading'; 

» s2 s2 =

'home' 'reading' 

» t = strcat(sl.s2)

t =

'Homehome' 'book read ing' 

» sl=['wri '] 

s1 =wri

» s2=['ter'] 

s2 =ter

» t = strcat(sl.s2)

 t = 

writer

  • strvcat(t1,t2,t3....) — выполняет вертикальное объединение строк tl, t2, t3,.. в массив символов S аналогично char(tl,t2.t3....). Пример:

» t1=['string'];

» t2=['concatenation']:

» S = strvcat(tl.t2)

S =

string concatenation

  • strcmp( 'str1' . 'str2') — возвращает логическую единицу, если две сравниваемые строки str1 и str2 идентичны, и логический ноль в противном случае;

  • TF = strcmp(S.T) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных элементов массивов S и Т и нули для всех остальных, причем если один из массивов — не массив символов, а строковый массив ячеек, то перед сравнением из сравниваемых копий рядов массива символов удаляются пробелы в конце строк. Массивы S и Т должны иметь одинаковый размер, или один из них может быть скалярной ячейкой.

Примеры:

» strl='computer'; 

» str2='computer'; 

» k = strcmp(strl.str2) 

k =

1

» S{l,l}='first'; 

» S{1,2}='second '

» S S =

'first''second' 

» T{l.l}='third'; 

» TF = strcmp(S.T) 

TF =

0 0

» T{1.1}='second';

» TF - strcmp(S.T) 

TF =

0 1

  • strncmp( 'strT , 'str2' ,n) — возвращает логическую единицу, если две сравниваемые строки strl и str2 содержат n первых идентичных символов, и логический ноль в противном случае. Аргументы strl и str2 могут быть также строковыми массивами ячеек.

  • TF = strncmp(S,T,n) — возвращает строковый массив ячеек TF, содержащий единицы для идентичных (до n символов) элементов массивов S и Т и нули для всех остальных.

Примеры:

» strl='computer'

strl =

computer

» strl='computer for me'

strl =

computer for me

» k = strncmp(strl.str2,3)

k =

» k = strncmp(strl,str2.12)

L =

  • strmatch( 'str' ,STRS, 'exact') — возвращает только индексы строк символов массива STRS, точно совпадающих со строкой символов str;

  • strjust(S) — возвращает выровненный вправо массив символов (т. е. перемещает пробелы в конце рядов массива символов, если они есть, в начало тех же рядов) [ Функция strjusttS, 'left') возвращает массив символов, где все строки выровнены влево, a strjusttS. 'center') — где все строки выровнены по центру.— Примеч.ред. ];

  • strmatch( 'str' ,STRS) — просматривает массив символов или строковый массив ячеек STRS по строкам, находит строки символов, начинающиеся с строки str, и возвращает соответствующие индексы строк;

Пример:

» STRS{1.1}='character':

» STRS{1.2}='array';

» STRS{2.1}='character array':

» STRS{2.2}='string':

» STRS

STRS =

'character' 'array'

'character array' 'string' 

» i = strmatchCcharac'.STRS)

 i =

1

2

»i = strmatch('character'.STRS.'exact') 

i =

1

  • strrep(strl,str2,str3) — заменяет все подстроки str2, найденные внутри строки символов str1 на строку str3;

  • strrep(strl,str2,str3) — возвращает строковый массив ячеек, полученный в результате выполнения функции strrep над соответствующими рядами входных массивов символов или ячеек, если один из аргументов strl, str2 или str3 — строковый массив ячеек. В этом случае любой из аргументов может быть также скалярной ячейкой.

Пример:

» strl='This is a good example for me.':

» str2='good';

» str3='best';

» str = strrep(strl.str2.str3)

str =

This is a best example for me.

  • strtokCstr' .delimiter) — возвращает часть текстовой строки str, ограниченную с ее конца разделителем del i miter. Символы-разделители в начале строки игнорируются. Вектор delimiter содержит возможные символы-разделители;

  • strtokCstr') — использует символ-разделитель по умолчанию («белое пространство»). Реальными символами-разделителями при этом являются символ табуляции (ASCII-код 9), символ возврата каретки (ASCII-код 13) и пробел (ASCII-код 32);

  • [token,rem]=strtok(...) — возвращает остаток rem исходной строки.

Примеры:

» str='This is a good example for me.': 

» token = strtok(str) 

token =

This

» token = strtok(str.'f') 

token =

This is a good example 

» [token,rem] = strtok(str) 

token = 

This 

rem =

is a good example for me.

 

4. Преобразование символов и строк

 

Преобразование символов и строк

  • int2str(X) — округляет элементы массива X до целых чисел и возвращает массив символов, содержащих символьные представления округленных целых чисел. Аргумент X может быть скаляром, вектором или матрицей.

Пример:

» X=magic(3) 

X =

8 1 б

3 5 7

4 9 2 

Х=Х+0.05 

X =

8.0500 1.0500 6.0500

3.0500 5.0500 7.0500

4.0500 9.0500 2.0500 

» str=int2str(X) 

str =

8 1 б 357 492

  •  mat2str(A) — преобразует матрицу А в единую строку; если элемент матрицы не скаляр, то он заменяется на [ ], при этом учитываются 15 знаков после десятичной точки;

  • mat2str(A,n) — преобразует матрицу А в строку, используя точность до n цифр после десятичной точки. Функция eval(str) осуществляет обратное преобразование.

Пример:

» randС state'); 

» A=rand(4.3) 

А =

0.9501 0.8913 0.8214

0.2311 0.7621 0.4447

0.6068 0.4565 0.6154

0.4860 0.0185 0.7919 

» str = mat2str(A,2)

str =

[0.95 0.89 0.82:0.23 0.76 0.44:0.61 0.46 0.62:0.49 0.019 0.79]

  • num2str(A) — выполняет преобразование массива А в строку символов str с точностью до четырех десятичных разрядов и экспоненциальным представлением, если требуется. Обычно используется при выводе графиков совместно с title, xlabel. ylabel или text;

  • num2str(A,precision) — выполняет преобразование массива А в строку символов str с максимальной точностью, определенной аргументом precision. Аргумент precision определяет число разрядов в выходной строке;

  • num2str(A,format) — выполняет преобразование массива чисел А, используя заданный формат format. По умолчанию принимается формат, который использует четыре разряда после десятичной точки для чисел с фиксированной или плавающей точкой.

Пример:

» str = num2str(pi.7)

str =

3.141593

» randCstate'):

» A=rand(3,5)

A =

0.9501 0.4860 0.4565 0.4447 0.9218

0.2311 0.8913 0.0185 0.6154 0.7382

0.6068 0.7621 0.8214 0.7919 0.1763 

» str = num2str(A,l) 

str =

1 0.5 0.5 0.4 0.9 0.20.9 0.02 0.6 0.7 0.60.8 0.8 0.8 0.2

  • str2double( 'str') — выполняет преобразование численной строки s, которая представлена в ASCII-символах, в число с двойной точностью. При этом + и -могут быть только в начале строки.

Пример:

» х = str2double('5.45+2.67Г) 

5.4500 + 2.67001

Обратите особое внимание на последнюю функцию, поскольку именно она в MATLAB 6 обычно обеспечивает переход от символьного представления математических выражений к их вычисленным численным значениям;

  • str2num(s) — выполняет преобразование численного массива символов — матрицы или строки s, который представлен в ASCII-символах, в матрицу (массив размерности 2).

Пример:

» х = str2num('5.45+2.67') 

8.1200

Обратите особое внимание, что при этом можно вводить знаки + и - в любом месте строки. Предыдущая функция выдала бы NaN. Но фирма MathWorks рекомендует использовать str2num с осторожностью и по возможности заменять ее на str2double.

 

5. Функции преобразования систем счисления

 

Функции преобразования систем счисления

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

  • bin2dec( 'binarystr') — возвращает десятичное число, эквивалентное строке двоичных символов binarystr.

Пример:

» bin2dec('101') 

ans =

5

  • dec2bin(d) — возвращает строку двоичных символов (0 и 1), эквивалентную десятичному числу d. Аргумент d должен быть неотрицательным целым числом, меньшим чем 2 52 ;

  • dec2bin(d.n) — возвращает строку двоичных символов, содержащую по меньшей мере n бит.

Пример:

» str = dec2bin(12)

str =

1100

  • dec2base(d.n) — возвращает строку символов, представляющих десятичное число d как число в системе счисления с основанием n.

Пример:

» str = dec2base(1234.16)

str =

4D2

  • dec2hex(d) — возвращает шестнадцатеричную строку символов, эквивалентную числу d. Аргумент d должен быть неотрицательным целым числом, меньшим чем 2 52 ;

  • str = dec2hex(d.n) — возвращает шестнадцатеричную строку, содержащую по меньшей мере n цифр.

Пример:

» str = dec2hex(1234)

str = 

4D2

  • base2dec(S, В) — преобразует строку символов S, представляющих число в системе счисления по основанию В, в символьное представление десятичного числа.

Пример:

» d = base2dec('4D2',16) 

 d =

1234;

  • hex2dec('hex_value') — возвращает число d, представленное строкой шестнадцатеричных символов hex_value. Если аргумент hex_value является массивоу символов, то каждая строка этого массива интерпретируется как шестнадца-теричное представление числа.

Пример:

» d = hex2dec('4D2') 

d =

1234

  •  hex2num( 'hex_value') — возвращает десятичное число f с удвоенной точностью, эквивалентное шестнадцатеричному числу, находящемуся в строке символов hex_va1ue.

Пример:

» f = hex2num('4831fb52al8')

f = 

6.1189е+039

 

6. Вычисление строковых выражений

 

Вычисление строковых выражений

Строковые выражения обычно не вычисляются, так что, к примеру, вывод строки ' 2+3' просто повторяет строку:

» '2+3'

ans = 

2+3

Однако с помощью функции eval ('строковое выражение'.) строка, представляющая математическое выражение, может быть вычислена:

» eval C2+3') 

ans =

5

» eval('2*sin(l)')

 ans =

1.6829

Ниже использование eval возвращает 12 матриц, представляющих магические квадраты чисел от 1 до 12:

for n = 1:12

eval(['IT num2str(n) ' = magic(n)']) 

end

eval (SI,S2) — в случае ошибки в вычислении выражения s1 оценивает выражение s2.

T=evalc (S) выполняет то же, что и функция eval(s), но то, что выводится в командное окно, записывается также и в массив Т;

Еще одна функция — feval (@имя_функции,х1,х2,...) — имеет важное достоинство — она позволяет передавать в вычисляемую функцию список ее аргументов. При этом вычисляемая функция задается только своим именем. Это поясняют следующие примеры:

» feval(@prod.[l 23]) 

ans = 

6

Существовавшая в прежних версиях MATLAB форма feval (' иня_функции' ,xl. х2,...) по-прежнему работает, но применять ее не рекомендуется. 

» feval(@sum.[l 2 3: 4 5 6].2)

 ans =

6

15

Рекомендуется применять функцию feval при вычислении значений функций, записанных в виде строки, вместо eval. m-файлы-функции, содержащие функцию feval, корректно компилируются компилятором системы MATLAB.

Для выполнения вычислений, представленных строкой expression, в заданной рабочей области ws служит функция evalin(ws.expression). Переменная ws может иметь два значения: 'base' — для основной рабочей области и 'caller' — для рабочей области вызванной функции. В приведенном ниже примере в рабочей области записаны переменные а и b и вычисляется символьное значение 'а+b':

» а=2;b=3;

» evalin('base','a+b') 

ans = 

5

Функция может также записываться в виде [а1.а2,аЗ,...] = eval in(ws, expression), где a1, а2, а3,... — переменные, возвращающие результаты вычислений. А функция evalin(ws,expression, catch_expr) позволяет проверить правильность выражения expression в рабочей области и сформировать сообщение, заданное в строке   catch_expr.

Например (в продолжение последнего примера):

» h='Error in expression';

» evalin('base'. 'a+b'. 'h'); 

ans = 

5

» evalinCbase'. 'a+c', 'h'); h = Error in expression

Здесь выражение а+с ошибочно (переменная с не определена), поэтому выдана переменная h с ее значением в виде строки.

 

7. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Использовать функции строковых данных.

  • Выполнять операции над строками.

  • Преобразовывать символы в строки.

  • Использовать функции преобразования систем счисления.

  • Вычислять строковые выражения.

 

Урок 19. Работа с файлами

1. Урок 19. Работа с файлами

 

Урок №19.

Работа с файлами

  • Открытие и закрытие файлов 

  • Операции с двоичными файлами

  • Операции над форматированными файлами

  • Позиционирование файла 

  • Специализированные файлы

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

 

2. Открытие и закрытие файлов

 

Открытие и закрытие файлов

Файл обычно является некоторой совокупностью данных, объединенных одним именем. Тип файла, как правило, определяется его расширением. Мы рассматриваем файл как некое целое, хотя физически на диске он может быть представлен несколькими областями — говорят, что в этом случае файл фрагментирован.

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

  • Команда open имя, где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя:

    • переменная — открывает массив, названный по имени, в редакторе массивов (Array Editor);

    • .mat — открывает файл, сохраняет переменные в структуре в рабочей области;

    • .fig — открывает его в редакторе дескрипторонй графики Property Editor;

    • .m — открывает m-файл в редакторе-отладчике;

    • .mdl - открывает модель в Simulink;

    • .р — открывает, если он есть, m-файл с тем же именем;

    • . html — открывает HTML документ в браузере помощи.

Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет — то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией игпсИГимя файла') По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх — расширение файла. Исключение — переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая т-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых ореnххх.

  • [FILENAME, PATHNAME] = uigetfile(FILTERSPEC. Title). Открывает диалог с именем Title и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME=0, если файл не существует или если пользователь нажал на Cancel. [FILENAME, PATHNAME] = uigetfile (FILTERSPEC, Title. X. Y) размещает окно диалога в точке X, Y (координаты в пикселях).

Пример:

[filename, pathname] = uigetfile('*.m;*.fig;*.mat:*.mdl'. 'All MATLAB Files (*.m, *.fig, *.mat. *.mdl)': ...

  • [FILENAME, PATHNAME] = uiputfile(FILTERSPEC. TITLE) сохраняет файл в диалоге, управляемом пользователем. Параметры аналогичны таковым в функции uigetfile.

  • Команда ui open открывает диалог, и если пользователь выбрал файл с известным расширением, вызывает его, используя open, или если имя файла имеет неизвестное расширение, то вызывается uigetfile. Входными аргументами uiopen могут быть mat lab, load, figure, simulink, editor. Без входных аргументов или с входным аргументом matlab в окне диалога предлагается выбрать *.m, *.fig, *.mat, *.mdl (если Simulink установлен) , * . cdr (если state flow установлен) , *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb (если установлен Real-Time Workshop). С аргументом load — *.mat. С аргументом figure предлагаются *.fig; simul ink — *.mdl, editor - *.m, *.mdt *.cdr, *.rtw, *.tmf, *.tlc, *.c, *.h, *.ads, *.adb.

Пример:

uiopen figure.

  • Команда uiload открывает файл в диалоге, управляемом пользователем, с использованием команды load.

Функция ui import запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB.

  • ui import (FILENAME) — запускает Мастер Импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель.

  • ui import (' -f i le') — вначале выводит диалог выбора файла.

  • ui import ('-pastespecial') — вначале выводит для предварительного просмотра содержимое буфера обмена Windows.

  • S = ui import (...) хранит результирующие переменные как поля структуры S.

  • Команда uisave — управляемое пользователем сохранение (команда save описана в уроке 2) с Windows диалогом.

  • Функция saveas — сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном print.

  • Функция saveas (H, 'FILENAME' ) — сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME.

  • Функция saveas (H. 'FILENAME' . 'FORMAT' ) — выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры функции:

    • 'fig' — сохранить рисунок (график) в двоичном fig-файле;

    • ' m ' или ' mf i д ' — сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки;

    • ' mmat ' - сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции.

Примеры:

saveas(gcf. 'output', 'fig') saveas(gcf, 'output', 'bmp')

Команда или функция delete удаляет файл или объект графики.

  • delete имя файла удаляет файл текущей папки. Может быть использована *. Предпочтительно использование с записью в форме функции delete('mw файла'), когда имя файла — строка.

  • delete(H) удаляет графический объект с дескриптором Н. Если этот объект — окно, то оно предварительно закрывается.

  • Функция close(H) закрывает только графические окна. Для закрытия файлов необходимо использовать команду f close.

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

save

save filename save filename varl var2 ... save ... option save( ' filename' , ...)

Соответственно для считывания файлов с диска служит команда load:

load

load filename load filename X Y Z

load filename -ascii load filename -mat

S

В этих командах имя файла указывается по правилам, принятым в операционных системах класса MS-DOS. Эти команды обычно дублируются кнопками панелей инструментов и браузером файлов.

 

3. Операции с двоичными файлами

 

Операции с двоичными файлами

Двоичными, или бинарными, называют файлы, данные которых представляют собой машинные коды. Основные операции с такими кодами перечислены ниже.

  • fopen(filename, permission) — открывает файл с именем filename и параметром, определенным в permission, и возвращает идентификатор fid со значением: 0 — чтение с клавиатуры (permission установлено в 'r'); 1 — вывод на дисплей (permission установлено в 'а'); 2 — вывод сообщения об ошибке (permission установлен в ' а'); -1 — неудача в открытии файла с выводом сообщения message о типе ошибки. Идентификатор fid часто используется в качестве аргумента другими функциями и программами ввода-вывода. Имя файла filename может содержать путь к файлу.

Если открываемый для чтения файл не найден в текущем каталоге, то функция fopen осуществляет поиск файла по пути, указанном в MATLAB.

Параметр permission может принимать одно из следующих основных значений (другие см. в справочной системе):

  1. 'r' — открытие файла для чтения (по умолчанию);

  2. ' r+' — открытие файла для чтения и записи;

  3. 'w' — удаление содержимого существующего файла или создание нового и открытие его для записи;

  4. ' а' — создание и открытие нового файла или открытие существующего для записи с добавлением в конец файла.

Добавление к этой строке ' b' (подразумевается по умолчанию) предписывает системе открыть файл в двоичном режиме.

Добавление же вместо b к этой строке ' t', например ' rt', в операционных системах, которые имеют различие между текстовыми и двоичными файлами, предписывает системе открыть файл в текстовом режиме. Например, во всех версиях MATLAB для Windows/MS-DOS и VMS нельзя открыть текстовый файл без параметра ' rt'. При вводе файлов с использованием fopen в текстовом режиме удаляются все символы «возврат каретки» перед символом новой строки.

  • [fid,message] = fopentfilename.permission,format) — открывает файл, как описано выше, возвращая идентификатор файла и сообщение. Кроме того, значение параметра format позволяет точно определить числовой формат. Возможно 8 форматов, описание которых можно найти в справочной системе. В частности, строка format может иметь значения 'native' (формат компьютера, на котором установлена система), 'vax', 'сгау' (компьютеры VAX и Cray) и т. д.

Определенные вызовы функций fread или fwrite могут отменить числовой формат, заданный при вызове функции fopen.

  • fids = fopen С all') — возвращает вектор-строку, содержащую идентификаторы всех открытых файлов, не включая стандартные потоки О, 1 и 2. Число элементов вектора равно числу открытых пользователем файлов;

  • [filename,permission,format] -fopen(fid) — возвращает полное имя файла, строку .permission и строку format. При использовании недопустимых значений fid возвращаются пустые строки для всех выходных аргументов.

Команда fclose закрывает файл. Она имеет следующие варианты.

  • status = fclose(fid) — закрывает файл, если он открыт. Возвращает статус файла status, равный 0, если закрытие завершилось успешно, и -1 в противном случае. Аргумент fid — это идентификатор, связанный с открытым файлом (см. функцию fopen для более подробного описания);

  • status = fclose( 'all') закрывает все открытые файлы. Возвращает 0 в случае успешного завершения и -1 — в противном случае.

Пример открытия и закрытия файла:

» fid=fopen('c:\ex'.'а+') fid = 4

 » fclose(4)

ans =

0

  • [A,count] = fread(fid,size,precision) — считывает двоичные данные из заданного файла и помещает их в матрицу А. Выходной аргумент count содержит число удачно считанных элементов. Значение идентификатора fid — это целое число, возвращенное функцией fopen; size — аргумент, определяющий количество считываемых данных. Если аргумент size не определен, функция f read считывает данные до конца файла.

Используются следующие параметры size:

  • n — чтение n элементов в вектор-столбец;

  •  inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;

  • [m.n] — считывает столько элементов, сколько нужно для заполнения матрицы тхп.

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

  • [A.count] = fread(fid,size.precision,skip) — включает произвольный аргумент skip, который определяет число байтов, которые необходимо пропустить после каждого считывания. Это может быть полезно при извлечении данных г несмежных областях из записей фиксированной длины. Если precision имеет битовый формат, такой как 'bitN 1 или 'ubitN', значение skip определяется ~ битах. Обширный список возможных значений параметра precision можн найти в справочной системе MATLAB;

  • count=fwrite(fid,A,precision) — записывает элементы матрицы А в файл, представляя их с заданной точностью. Данные записываются в файл по столбцам, выходной аргумент count содержит число удачно записанных элементов. Значение идентификатора fid — это целое число, полученное при использовании функции f open. Добавляет символы «возврат каретки» перед началом новой строки;

  • count=fwrite(fid.A,precision,skip) — делает то же, но включает произвольный аргумент skip, который определяет число байтов, которые надо пропустить перед каждой записью. Это полезно при вставке данных в несмежные области в записях фиксированной длины. Если precision имеет битовый формат, такой как 'bitN' или 'ubitN', значение skip определяется в битах.

Примеры:

» fid = fopen('c:\prim','а+') 

fid =

» A=magic(7)

А =

30

39

48

1

10

19

28

38

47

7

9

18

27

29

46

6

8

17

26

35

37

5

14

16

25

34

36

45

13

15

24

33

42

44

4

21

23

32

41

43

3

12

22

31

40

49

2

11

20

» count = fwrite(j.A) 

count =

49

» status=fclose(3) 

status =

0

» fid 

 fopen('c:\prim'.'r') 

fid =

3

» [B,count] = fread(3.[7.7]) 

В=

30

39

48

1

10

19

28

38

47

7

9

18

27

29

46

6

8

17

26

35

37

5

14

16

25

34

36

45

13

15

24

33

42

44

4

21

23

32

41

43

3

12

22

31

40

49

2

11

20

count = 

49

 

4. Операции над форматированными файлами

 

Операции над форматированными файлами

Файлы, содержащие форматированные данные, называют форматированными файлами. Ниже представлены функции, которые служат для работы с такими файлами.

  • line = fgetl (fid) — возвращает строку из файла с идентификатором fid с удалением символа конца строки. Если функция fgetl обнаруживает конец файла, то она возвращает значение -1 (см. функцию fopen с более подробным описанием fid);

  • line = f gets (fid) — возвращает строку из файла с идентификатором fid, не удаляя символ конца строки. Если функция fgets обнаруживает конец файла, то она возвращает значение -1;

  • line = fgets(fid.nchar) — возвращает не больше чем nchar первых символов строки. После признака конца строки или конца файла никакие дополнительные символы не считываются (см. примеры к функции fscanf);

  • count = fprintf(fid.format,A....) — форматирует данные, содержащиеся в действительной части матрицы А, под контролем строки format и записывает их в файл с идентификатором fid. Функция fprintf возвращает число записанных байтов. Значение идентификатора fid — целое число, возвращаемое функцией fopen.

Если опустить идентификатор fid в списке аргументов функции fprintf, то вывод будет осуществляться на экран, так же как при использовании стандартного вывода (fid=l).

  • fprintf(format,A....) — запись осуществляется на стандартное устройство — экран (но не в файл). Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные буквы алфавита наряду со спецификаторами, знаками выравнивания и т. д.

Таблица 19.1. Специальные символы в строках формата

\n

Новая строка

\t

Горизонтальная табуляция

\b

Возврат на один символ

\r

Возврат каретки

\f

Новая страница

\\

Обратный слеш

\" или "

Одиночная кавычка

%%

Процент

Функция fprintf ведет себя, как аналогичная функция fprintf О языка ANSI С и с некоторыми исключениями и расширениями. В табл. 19.1 описаны специальные символы, встречающиеся в строке format. Для вывода числовых или символьных данных в строке формата необходимо использовать спецификаторы, перечисленные в табл. 19.2.

Таблица 19.2. Спецификаторы формата вывода данных

 %d Десятичная система обозначений (со знаком)
Одиночный символ


Экспоненциальное представление чисел с использованием символа «е» в нижнем регистре, например 3.1415е + 00

Экспоненциальное представление чисел с использованием символа «Е» в верхнем регистре, например 3.1415Е + 00

%f

Система обозначений с фиксированной точкой

%g

Наиболее компактный вариант из %е и %f. Незначащие нули не выводятся

%G

То же самое, что и %д, но используется верхний регистр для символа «Е»


Восьмеричная система обозначений (без знака)

%s

Строка символов

%u

Десятичная система обозначений (без знака)

%x


Шестнадцатеричная система обозначений с использованием символов нижнего регистра («a»...«f»)

%X

Шестнадцатеричная система обозначений с использованием верхнего регистра символов («A»...«F»)

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

Таблица 19.3. Параметры спецификаторов формата

Знак «минус» (-)

Выравнивание преобразованных аргументов по левому краю

%-5.2d

Знак «плюс» (+)

Всегда печатать знак числа (+ или -)

%+5.2d

Ноль (0)

Заполнение нулями вместо пробелов

%05.2d

Цифры

Определяет минимальное число знаков, которые будут напечатаны

%6f

Цифры (после точки)

Число после точки определяет количество символов, печатаемых справа от десятичной точки

%6.2f

  • А = fscanf(fid,format) — читает все данные из файла с идентификатором, fid, преобразует их согласно значению параметра format и возвращает в виде матрицы А. Значение идентификатора fid — целое число, возвращаемое функцией fopen. Параметр format представляет собой строку, определяющую формат данных, которые необходимо прочитать;

  • [A,count] = fscanf(fid.format,size) — считывает количество данных, определенное параметром size, преобразует их в соответствии с параметром format и возвращает вместе с количеством успешно считанных элементов count. Параметр size — это произвольный аргумент, определяющий количество считываемых данных. Допустимы следующие значения:

    • n — чтение п элементов в вектор-столбец;

    • inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;

    • [m,n] — считывает столько элементов, сколько требуется для заполнения матрицы размера тхп. Заполнение происходит по столбцам. Величина n (но нет!) может принимать значение Inf.

Строка format состоит из обычных символов и (или) спецификаторов. Спецификаторы указывают тип считываемых данных и включают символ %, опцию ширины поля и символы формата. Возможные символы формата перечислены в табл. 19.4.

Таблица 19.4. Символы формата, используемые функцией fscanf

%c

Последовательность символов; параметр ширины поля определяет количество считываемых символов

%d

Десятичное число

%e, %f, %g

Число с плавающей точкой

%i

Целое число со знаком

%o

Восьмеричное число со знаком

%s

Последовательность непробельных символов

%u

Десятичное целое число со знаком

%x

Шестнадцатеричное целое число со знаком

[...]

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

Между символом % и символом формата допустимо вставлять следующие символы:

  • звездочка (*) означает, что соответствующее значение не нужно сохранять в выходной матрице;

  • строка цифр задает максимальную ширину поля;

  • буква обозначает размер полученного объекта: h для короткого целого числа (например, %n d), 1 для длинного целого числа (например, %ld) или для числа с двойной точностью с плавающей запятой (например, % lg ).

Примеры:

» х = 0:pi/10:pi:y-[x:sin(x)];

» fid = fopent 'c:\sin.txt'. V);

» fprintf(fid.'X5.3f *10.6f\n'.y):fclose(fid);

0.000 0.000000

0.314 0.309017

0.628 0.587785

0.942 0.809017

1.257 0.951057

1.571 1.000000

1.885 0.951057

2.199 0.809017

2.513 0.587785

2.827 0.309017

3.142 0.000000

» fid = fopen('c:\sin.txt'.'r');

» q=fscanf(fid.'*g'.[2.10]):

» q '

ans =

0 0

0.3140 0.3090

0.6280 0.5878

0.9420 0.8090

1.2570 0.9511

1.5710 1.0000

1.8850 0.9511

2.1990 0.8090

2.5130 0.5878

2.8270 0.3090

 » fgetl(fid) 

ans =

3.142 0.000000 

» fgets(fid) 

ans =

-1

» fclose(fid) 

ans=

0

 

5. Позиционирование файла

 

Позиционирование файла

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

Таким образом, указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования:

  • eofstat = feof(fid) — проверяет, достигнут ли конец файла с идентификатором fid. Возвращает 1, если указатель установлен на конец файла, и 0 — в противном случае;

  • message = ferror(fid) — возвращает сведения об ошибке в виде строки message. Аргумент fid — идентификатор открытого файла (см. функцию fopen с ее подробным описанием);

  • message = f error (f id,'clear') — очищает индикатор ошибки для заданного файла;

  • [message,errnum] = ferror(.) — возвращает номер ошибки errnum последней операции ввода-вывода для заданного файла.

Если последняя операция ввода-вывода, выполненная для определенного значением fid файла, была успешной, значение message — это пустая строка, a errnum принимает значение 0.

Значение errnum, отличное от нуля, говорит о том, что при последней операции ввода-вывода произошла ошибка. Параметр message содержит строку, содержащую информацию о характере возникшей ошибки.

Пример:

» fid=fopen('с:\examplel'.'а+') 

fid =

3

» t= fread(3,[4.5]) 

t =

Empty matrix: 4-by-0 

» ferror(3) 

ans = 

Is the file open for reading? . . .

  • frewind(fid) — устанавливает указатель позиции в начало файла с идентификатором fid;

  • status - fseekCfid,offset,origin) — устанавливает указатель в файле с идентификатором fid в заданную позицию — на байт, указанный параметром offset относительно origin.

Аргументы:

  • fid — идентификатор файла, возвращенный функцией fopen;

  • offset — значение, которое интерпретируется следующим образом:

    • offset>0 — изменяет позицию указателя на offset байт в направлении к концу файла;

    • offset=0 — не меняет позицию указателя;

    • offset<0 — изменяет позицию указателя на offset байт в направлении к началу файла;

  • origin — аргумент, принимающий следующие значения:

    • 'bof или -1 — начало файла;

    • 'cof' или 0 — текущая позиция указателя в файле;

    • ' eof' или 1 — конец файла;

  • status — выходной аргумент. Принимает значение 0, если операция fseek произошла успешно, и -1 в противном случае. Если произошла ошибка, используйте функцию ferror для получения более подробной информации;

  • position=ftel I (fid) — возвращает позицию указателя для файла с идентификатором fid, полученным с помощью функции fopen. Выходной аргумент position — неотрицательное целое число, определяющее позицию указателя в байтах относительно начала файла. Если запрос был неудачным, position принимает значение -1. Используйте функцию ferror для отображения характера ошибки.

Примеры:

» f id-fopen('с:\example'.'a+') 

fid =

3

» count = fwrite(3,magic(6)) 

count = 36

 » ftelK3) 

ans =

36

» frewind(3):ftell(3) 

ans =

0

» fseek(3.12.0);ftell(3)

ans=

12

» feof(3) 

ans =

0

» fclose(3) 

ans =

0

  • s=sprintf(format,A,...) — форматирует данные в матрице А в формате, заданном параметром format, и создает из них строковую переменную s;

  • [s.errrmsg] = sprintfCformat,A....) — аналогична ранее описанной функции, но дополнительно возвращает строку ошибки errmsg, если ошибка имела место, или пустую строку в противном случае. Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные символы наряду со спецификаторами, знаками выравнивания и т. д. Функция fprintf ведет себя, как и аналогичная функция fprintf 0 языка ANSI С, с некоторыми исключениями и расширениями.

Примеры:

» sprintf('*0.5g'.(l+sqrt(7))/4)

ans =

0.91144

» sprintfC '%s', 'привет')

ans =

привет

Функция sscanf аналогична функции fscanf за исключением того, что она считывает данные из символьной переменной системы MATLAB, а не из файла.

  • А = sscanf (s,format) — считывает данные из символьной переменной s, преобразует их согласно значению format и создает на основе этих данных матрицу А. Параметр format определяет формат данных, которые нужно считать;

  • А = sscanf(s,format,size) — считывает количество данных, определенное параметром size, и преобразует их согласно строке format. Параметр size представляет собой аргумент, определяющий количество данных для чтения. Допустимы следующие значения:

    • n — чтение п элементов в вектор-столбец;

    • inf — чтение элементов до конца символьной переменной и помещение их в вектор-столбец, содержащий такое же количество элементов, как и в строковой переменной;

    • [m.n] — считывает столько элементов, сколько требуется для заполнения матрицы размера тхп. Заполнение происходит по столбцам. Величина п (но нет!) может принимать значение Inf.

  • [A,count,errmsg,nextindex] = sscanf(...) — считывает данные из символьной переменной s, преобразует их согласно значению format и возвращает в матрицу А. Параметр count — выходной.аргумент, который возвращает число успешно считанных элементов; errmsg — выходной аргумент, который возвращает строку ошибки, если ошибка произошла, и пустую строку в противном случае; nextindex — выходной аргумент, который содержит число, на единицу большее, чем количество символов в s.

Строка format состоит из обычных символов и спецификаторов. Спецификаторы указывают тип данных и включают в себя символ %, опцию ширины поля и символы формата. Пояснения можно найти в описании функции fscanf.

Пример:

» s = '4.83 3.16 22 45';

» [A.n,err,next] = sscanf(s. '%f')

А =

4.8300 - 3.1600

22.0000

45.0000 

n =

еrr=

next = 

16

 

6. Специализированные файлы

 

Специализированные файлы

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

  • М = dlmread(filename, delimiter) — считывает данные из файла filename с ASCII-разделителем, используя разделитель delimiter, в массив М. Используйте '\t', i чтобы определить в качестве разделителя символ табуляции;

  • М = dlmreadCfilename.delimiter,г.с) — считывает данные из файла filename с ASCII-разделителем, используя разделитель delimiter, в массив М, начиная со смещения г (по строкам) и с (по столбцам). Параметры r и с отсчитываются начиная с нуля, так что г=0, с=0 соответствует первому значению в файле;

  • М = dlmreadCfilename, deli mi ten, r, с, range) — импортирует индексированный или именованный диапазон данных с разделителями в формате ASCII. Для использования диапазона ячеек нужно определить параметр range в виде range = [ВерхняяСтрока. ЛевыйСтолбец. НижняяСтрока, ПравыйСтолбец].

Аргументы функции dlmread следующие:

  1. delimiter — символ, отделяющий отдельные матричные элементы в электронной таблице формата ASCII;

  2. (,) — разделитель по умолчанию;

  3.  r, с — ячейка электронной таблицы, из которой берутся матричные элементы, соответствующие элементам в верхнем левом углу таблицы;

  4. range — вектор, определяющий диапазон ячеек электронной таблицы.

Команда dlmwrite преобразует матрицу MATLAB в файл с ASCII-разделителями, читаемый программами электронных таблиц:

  • dl mwri te (f i 1 ename. A. delimiter) — записывает матрицу А в верхнюю левую ячейку электронной таблицы filename, используя разделитель delimiter для отделения элементов матрицы. Используйте ' U' для создания файла с элементами, разделенными табуляцией. Все элементы со значением 0 опускаются. Например, массив [102] появится в файле в виде ' 1., 2' (если разделителем является запятая):

  • dlmwrite(filename,A,delimiter, r,с) — записывает матрицу А в файл filename, начиная с ячейки, определенной r и с, используя разделитель delimiter;

  • info=imfinfo(filename.fmt) — возвращает структуру, поля которой содержат информацию об изображении в графическом файле. Аргумент filename — строка, определяющая имя графического файла, fmt — строка, которая определяет формат файла. Файл должен находиться в текущей директории или в директории, указанной в пути MATLAB. Если imflnfo не может найти файл с именем filename, она ищет файл с именем filename.fmt.

В табл. 19.5 показаны возможные значения для аргумента fmt. 

Таблица 19.5. Поддерживаемые графические форматы и их обозначения

Формат
Тип файла
'bmp' Windows Bitmap (BMP) 
'hdf ' Hierarchical Data Format (HDF)
'jpg ' или 'jpeg'  Joint Photographic Experts Group (JPEG)
'pcx'  Windows Paintbrush (PCX) 
'tif 'или 'tiff ' Tagged Image File Format (TIFF)
'xwd' X Windows Dump (XWD)

Если filename — TIFF- или HDF-файл, содержащий более одного изображения, то 1 nf о представляет собой массив структур с отдельным элементом (т. е. с индивидуальной структурой) для каждого изображения в файле. Например, info(3) будет в таком случае содержать информацию о третьем изображении в файле. Множество полей в info зависит от конкретного файла и его формата. Однако первые девять полей всегда одинаковы. В табл. 19.6 перечислены эти поля и описаны их значения.

Таблица 19.6. Поля информационной структуры и их значения

Поле
Значение
Filename Строка, содержащая имя файла; если файл находится не в текущей директории, строка содержит полный путь к файлу
FileModDate Строка, содержащая дату последнего изменения файла
FileSize  Целое число, указывающее размер файла в байтах 
Format Строка, содержащая формат файла, заданный параметром fmt; для JPEG- и TIFF-файлов возвращается значение, состоящее из трех символов 
FormatVersion Строка или число, описывающее версию формата 
Width Целое число, указывающее ширину изображения в пикселях 
Height Целое число, указывающее высоту изображения в пикселях 
BitDepth Целое число, указывающее число битов на пиксель 
ColorType Строка, описывающая тип изображения: 'truecolor' для RGB изображения, 'grayscale' для полутонового изображения или 'indexed' для изображения с индексированными цветами
  • info = imfinfo(filename) — пытается определить формат файла по содержимому. Пример:

» info = irrifinfo('С:\выставка\Интернет.bmр') 

info =

Filename: 'С:\выставка\Интернет.bmр'

FileModDate: '04-Jan-1999 22:35:56'

FileSize: 481078

Format: 'bmp'

FormatVersion: 'Version 3 (Microsoft Windows 3.x)'

или truecolor (RGB) изображение класса uint8, команда imwrite записывает фактические значения массива в файл. Если А имеет класс double, команда imwrite переопределяет значения в массиве перед записью, используя преобразование uint8(round(255*A)). Эта операция преобразует числа с плавающей запятой в диапазоне [0, 1] к 8-битовым целым числам в диапазоне [0, 255]. Допустимые значения параметра ftnt аналогичны тем, что используются в команде imfinfo;

  • imwrite(X,map,filename,fmt) — записывает индексированное изображение, находящееся в массиве X, и соответствующую ему цветовую палитру тар в файл filename. Если X содержит изображение класса uint8, команда imwrite записывает фактические значения массива в файл. Если X имеет класс double, команда imwrite переопределяет значения в массиве перед записью, используя преобразование uintS(X-l). Палитра тар должна иметь класс double; функция imwrite переопределяет значения в тар, используя преобразование uint8(round (255*mар));

  • imwrite (....filename) — записывает изображение в filename в формате, указанном в расширении файла. Расширение может быть одним из допустимых значений параметра fmt;

  • imwrite (....Parameter, Value....) определяет параметры, которые контролируют различные свойства выходного файла. Параметры используются для HDF, JPEG, и TIFF файлов;

  • М = wklread(filename) — считывает электронную таблицу Lotusl23 (WK1) в матрицу М;

  • М = wklread(filename.r.c) — считывает данные, начиная с ячейки, определенной значениями (r,с). Параметры г и с отсчитываются от нуля, так что г=0, с=0 определяют первую ячейку в файле;

  • М = wklread(filename,r,c,range) — считывает диапазон значений, определенный параметром range, где range может быть представлен в одной из следующих форм:

    • вектор с четырьмя элементами, определяющий диапазон ячеек в формате [верхняя_строка. левый_столбец, нижняя_строка, правый_столбец];

    • диапазон ячеек, определенный строкой, например ' А1... С5';

    • имя диапазона, определенное в виде строки, например 'Sales'.

  • wklwrite(filename.M) — записывает значения матрицы М в файл filename электронной таблицы Lotus 123 WK1;

  • wklwrite(filename,M,r,c) — записывает данные, начиная с ячейки, определенной значениями (r,с). Параметры г и с отсчитываются от нуля, так что г=0, с=0 определяют первую ячейку в электронной таблице.

В табл. 19.7 представлены форматы изображений, доступных для чтения функцией imread. Списки параметров и их возможных значений для функции imwrite содержатся в табл. 19.8.

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

Таблица 19.7. Форматы файлов и их краткое описание

Формат
Варианты
BMP 1-битовые, 4-битовые, 8-битовые и 24-битовые несжатые изображения; 4-битовые и 8-битовые изображения со сжатием RLE 
HDF 8-разрядные растровые изображения, содержащие или не содержащие цветовую палитру; 24-разрядные растровые изображения 
JPEG Любые JPEG-изображения; JPEG-изображения с некоторыми обычно используемыми расширениями 
PCX 1-битовые, 8-битовые и 24-битовые изображения 
TIFF Любые TIFF-изображения, включая!-битовые, 8-битовые и 24-битовые несжатые изображения; 1-битовые, 8-битовые и 24-битовые изображения с packbit-сжатием; 1-битовые изображения со сжатием CCITT 
XWD 1-битовые и 8-битовые Zpixmaps; XYBitmaps; 1-битовые XYPixmaps

Таблица 19.8. Параметры, используемые при записи графических файлов

Параметр Значение Значение по умолчанию
Параметры для HDF-файлов
'Compression'  Одно из следующих значений: 'none', Vie', 'jpeg' 'rle'
'Quality' Число между 0 и 100; параметр поддерживается для 'Compression'='jpeg'; чем больше число, тем выше качество файла (меньше искажений файла при сжатии) и тем больше его размер 75
'WriteMode' Одно из следующих значений: 'overwrite', 'append' 'overwrite'
Параметры для JPEG-файлов
'Quality'  Число между 0 и 100; чем больше число, тем выше качество файла (меньше искажений при сжатии файла) и тем больше его размер. 75
Параметры для TIFF-файлов
'Compression'  Одно из следующих значений: 'none', 'packbits', 'ccitt'; значение 'ccitt' допустимо только для двоичных (двухцветных) изображений 'ccitt' для двоичных изображений; 'packbits' для всех остальных 
'Description'  Любая строка; значение поля ImageDescription возвращается командой imfinfo Пустая строка
 'Resolution'  Скалярное значение для разрешения в направлениях х и у
72

 

7. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Открывать и закрывать файлы.

  • Выполнять операции с двоичными и форматированными файлами.

  • Осуществлять позиционирование файла.

  • Применять специализированные файлы.

 

Урок 20. Основы программирования

1. Урок 20. Основы программирования

 

Урок №20.

Основы программирования

  • Основные понятия программирования

  • Основные типы данных

  • Двойственность операторов, команд и функций

  • Структура и свойства файлов сценариев 

  • Структура и свойства файлов функций 

  • Статус переменных 

  • Использование подфункций 

  • Обработка ошибок 

  • Функции с переменным числом аргументов 

  • Создание Р-кодов 

  • Управляющие структуры 

  • Диалоговый ввод 

  • Условный оператор и циклы 

  • Переключатели 

  • Средства объектно-ориентированного программирования

 

2. Основные понятия программирования

 

Основные понятия программирования

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

Это может показаться отходом от важной цели, которая преследуется разработчиками большинства математических систем, — выполнения математических вычислений без использования традиционного программирования. Однако это не так. Выше было показано, что множество математических задач решается в системе MATLAB без программирования. С использованием языков высокого уровня для их решения потребовалось бы написать и оттестировать сотни программ.

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

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

Так в чем же отличие входного языка от языка программирования? В основном — в способе фиксации создаваемых ими кодов. Сессии в командном режиме работы не сохраняются в памяти компьютера (ведение дневника не в счет). Хранятся только определения созданных в ходе их выполнения переменных и функций. А вот программы на языке программирования MATLAB сохраняются в виде текстовых m-файлов. При этом могут сохраняться как целые программы в виде файлов-сценариев, так и отдельные программные модули — функции. Кроме того, важно, что программа может менять структуру алгоритмов вычислений в зависимости от входных данных и данных, создаваемых в ходе вычислений.

С позиций программиста язык программирования системы является типичным проблемно-ориентированным языком программирования высокого уровня. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например, Бейсике, Паскале или Си) потребовала бы много усилий и времени. К таким функциям относятся матричные функции, функции быстрого преобразования Фурье (БПФ) и др., а к операторам — операторы построения разнообразных графиков, генерации матриц определенного вида и т. д.

 

3. Основные средства программирования

 

Основные средства программирования

Итак, программами в системе MATLAB являются m-файлы текстового формата, содержащие запись программ в виде программных кодов. Язык программирования системы MATLAB имеет следующие средства:

  • данные различного типа;

  • константы и переменные;

  • операторы, включая операторы математических выражений;

  • встроенные команды и функции;

  • функции пользователя;

  • управляющие структуры;

  • системные операторы и функции;

  • средства расширения языка.

Коды программ в системе MATLAB пишутся на языке высокого уровня, достаточно понятном для пользователей умеренной квалификации в области программирования. Язык программирования MATLAB является типичным интерпретатором. Это означает, что каждая инструкция программы распознается и тут же исполняется, что облегчает обеспечение диалогового режима общения с системой. Этап компиляции всех инструкций, т. е. полной программы, отсутствует. Высокая скорость выполнения программ обеспечена наличием заведомо откомпилированного ядра, хранящего в себе критичные к скорости выполнения инструкции, такие как базовые математические и иные функции, а также тщательной отработкой системы контроля синтаксиса программ в режиме интерпретации.

Интерпретация означает, что MATLAB не создает исполняемых конечных программ. Они существуют лишь в виде m-файлов. Для выполнения программ необходима среда MATLAB. Однако для программ на языке MATLAB созданы компиляторы, транслирующие программы MATLAB в коды языков программирования С и C++. Это решает задачу создания исполняемых программ, первоначально разрабатываемых в среде MATLAB. Компиляторы для системы MATLAB являются вполне самостоятельными программными средствами и в данной книге не рассматриваются.

Следует особо отметить, что не все инструкции MATLAB могут компилироваться, так что перед компиляцией программы нуждаются в некоторой доработке. Зато скорость выполнения откомпилированных программ порой возрастает в 10-15 раз (правда, это достигается, как правило, для простых примеров с большими циклами).

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

 

4. Основные типы данных

 

Основные типы данных

Структура типов данных системы MATLAB представлена ниже:

Типы данных array и numeric являются виртуальными («кажущимися»), поскольку к ним нельзя отнести какие-либо переменные. Они служат для определения и комплектования некоторых типов данных. Таким образом, в MATLAB определены следующие основные типы данных, в общем случае представляющих собой многомерные массивы:

  • single — числовые массивы с числами одинарной точности; 

  • double — числовые массивы с числами удвоенной точности; 

  • char — строчные массивы с элементами-символами;

  • sparse — наследует свойства double, разреженные матрицы с элементами-числами удвоенной точности;

  • сеll — массивы ячеек; ячейки, в свою очередь, тоже могут быть массивами; 

  • struct — массивы структур с полями, которые также могут содержать массивы; 

  • function_handle — дескрипторы функций:

  • int32, uint32 — массивы 32-разрядных чисел со знаком и без знаков; 

  • intl6,uint!6 — массивы 16-разрядных целых чисел со знаком и без знаков; 

  • int8. uint8 — массивы 8-разрядных целых чисел со знаками и без знаков.

Кроме того, предусмотрен еще один тип данных — UserObject, который относится к типам данных (объектом), определяемым пользователем. Типы данных double, char и sparse были рассмотрены ранее, так что в этой главе будут детально рассмотрены оставшиеся типы. Что касается чисел класса uint8, то они представляют значения от 0 до 255 и занимают в памяти 1/8 часть от размера одного числа с двойной точностью. В основном этот тип данных применяется в служебных целях.

Каждому типу данных можно соотнести некоторые характерные для него операции, называемые методами. Дочерние типы данных, расположенные на приведенной диаграмме ниже родительских типов, наследуют от последних их методы, что является признаком наследования объектов. Поскольку в иерархии типов данных сверху находятся данные типа array, это значит, что все виды данных в MATLAB являются массивами.

 

5. Виды программирования

 

Виды программирования

На рынке программного обеспечения система MATLAB позиционируется как язык высокого уровня для научно-технических расчетов. Таким образом, возможность программирования относится к важным достоинствам данного языка, несмотря на обилие средств прямого решения задач. И действительно, именно возможность программирования сложных задач и практически неограниченного расширения системы сделала MATLAB столь почитаемой системой в университетах и крупных научных учреждениях. MATLAB открывает широчайшие возможности реализации новых алгоритмов вычислений, численных методов и методик расчета и проектирования различных систем и устройств.

Язык программирования системы MATLAB вобрал в себя все средства, необходимые для реализации различных видов программирования:

  • процедурного;

  • операторного;

  • функционального;

  • логического;

  • структурного (модульного);

  • объектно-ориентированного;

  • визуально-ориентированного.

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

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

Объектно-ориентированное программирование также широко представлено в системе MATLAB. Оно особенно актуально при программировании задач графики. Что качается визуально-ориентированного программирования, то в MATLAB оно представлено в основном в пакете моделирования заданных блоками устройств и систем Simulink. Этот пакет будет рассмотрен в конце книги. В ядре системы в данный момент визуально-ориентированное программирование не используется.

 

6. Двойственность операторов, команд и функций

 

Двойственность операторов, команд и функций

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

Функция преобразует одни данные в другие. Для многих функций характерен возврат значений в ответ на обращение к ним с указанием списка входных параметров — аргументов. Например, говорят, что функция sin(x) в ответ на обращение к ней возвращает значение синуса аргумента х. Поэтому функцию можно использовать в арифметических выражениях, например 2*sin(x+1). Для операторов (и команд), не возвращающих значения, такое применение обычно абсурдно. В данной книге все функции, возвращающие единственное значение (или один массив), записываются малыми (строчными) буквами в виде

f_nаmе(Список_параметров).

Тем самым мы исключаем искусственное выделение имен функций большими (заглавными) буквами, принятое в справочной системе MATLAB. Напоминаем, что как в командной строке, так и в текстах m-файлов функции записываются только малыми буквами. Для функций, возвращающих ряд значений или массивов (например X, Y, Z,...), запись имеет следующий вид: [X. Y, Z. ...]=f_name(Cписок_параметров)

Важное значение имеет двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет аналог в виде функции sum. Команды, записанные в виде

Command argument

нередко имеют форму записи и в виде функции:

Command(' argument')

Примеры:

» help sin SIN Sine.

SIN(X) is the sine of the elements of X. 

Overloaded methods

help sym/sin.m

» help('sin') SIN Sine.

SIN(X) is the sine of the elements of X.

 Overloaded methods

help sym/sin.m

» type('sin')

sin is a built-in function.

» type sin

sin is a built-in function.

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

 

7. Некоторые ограничения

 

Некоторые ограничения

Поскольку язык программирования системы MATLAB ориентирован на структурное программирование, в нем нет номеров строк (присущих до недавнего времени Бейсику) и программных операторов безусловного перехода GO TO. Имеются лишь управляющие структуры следующих типов: условных выражений if... el se...elseif...end, циклы for...end и while...end. Их форма похожа на ту, которая используется в языке Pascal (т. е. область действия управляющих структур начинается их заголовком, но без слова begin, а заканчивается словом end). С позиций теории структурного программирования этих средств достаточно для решения любых задач. В MATLAB имеются также операторы-переключатели типа case.

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

Программирование простых задач в среде MATLAB очень напоминает программирование на Бейсике. Во многих случаях программы на Бейсике можно почти дословно перевести на язык системы, учтя небольшие отличия в синтаксисе этих языков. Это нельзя трактовать как отсутствие у языка MATLAB индивидуальных черт. Любители Си, Паскаля или Фортрана также заметят сходство этих языков с языком программирования MATLAB. Так что правильнее считать, что этот язык имеет вполне самостоятельное значение. Он вобрал в себя лучшие средства универсальных языков программирования.

 

8. М-файлы сценариев и функций

 

М-файлы сценариев и функций

Структура и свойства файлов сценариев

Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MATLAB служит задание последовательности действий по программе, записанной в виде m-файла. В уроке 5 было показано, что для создания m-файлов может использоваться как встроенный редактор, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m-файл становится частью системы, и его можно вызывать как из командной строки, так и из другого m-файла. Есть два типа m-файлов: файлы-сценарии и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MATLAB редактора/отладчика m-файлов.

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

«Основной комментарий %Дополнительный комментарий Тело файла с любыми выражениями Важны следующие свойства файлов-сценариев: 

  •  они не имеют входных и выходных аргументов; 

  • работают с данными из рабочей области; 

  • в процессе выполнения не компилируются;

  • представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии.

Основным комментарием является первая строка текстовых комментариев, а дополнительным — последующие строки. Основной комментарий выводится при выполнении команд lookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help Имя_файла. Рассмотрим следующий файл-сценарий:

%Plot with color red

%Строит график синусоиды линией красного цвета

выведенной масштабной сеткой в интервале [xmin.xmax]

x=xmin:0.1:xmax;

plot(x.sin(x).'r')

grid on

Первые три строки здесь — это комментарий, остальные — тело файла. Обратите внимание на возможность задания комментария на русском языке. Знак % в комментариях должен начинаться с первой позиции строки. В противном случае команда help name не будет воспринимать комментарий (иногда это может понадобиться) и возвратит сообщение вида No help comments found in-name.m.

Обратите внимание на то, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и хтах, использованным в теле файла. Это следствие первого свойства файлов-сценариев — они работают с данными из рабочей области. Переменные, используемые в файлах-сценариях, являются глобальными, т. е. они действуют одинаково в командах сессии и внутри программного блока, которым является файл-сценарий. Поэтому заданные в сессии значения переменных используются и в теле файла. Имена файлов-сценариев нельзя использовать в качестве параметров функций, поскольку файлы-сценарии не возвращают значений. Можно сказать, что файл-сценарий — это простейшая программа на языке программирования MATLAB [ Файлы-сценарии нельзя компилировать. Перед компилированием их нужно преобразовать в файлы-функции — Примеч. ред. ].

Рис.20.2. Пример работы с файлом pcr

 

1.gif

Изображение: 

9. Статус переменных в функциях

 

Статус переменных в функциях

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

Эта особенность переменных-параметров хорошо видна при разборе примера, показанного на рис. 20.3. Здесь (признаемся, что неточно) задана некоторая функция двух переменных fun(x, у).

В этом примере в окне редактора создана функция fun двух переменных х и у, вычисляющая z = х 2 2 . Поскольку переменные х и у указаны как параметры функции fun(x, у), то они являются локальными. В примере вне тела функции им заданы нулевые значения. Очевидно, что при вычислении значения fun(2, 3) в теле функции задается х=2 и у=3. Поэтому результат — z=13. Однако после выхода из тела функции переменные х и у принимают свои исходные значения, равные нулю. Так что эти переменные меняют свои значения на значения параметров функции только локально — в пределах тела функции.
А каков статус переменной z в нашем примере? Она, как и любая переменная, определенная в теле функции, также будет локальной. Изначально ее значение не определено. В теле функции переменная принимает значение z=13. А после возврата из функции, как нетрудно увидеть из рис. 18.2, переменная z, несмотря на ее применение в теле функции, остается неопределенной. На это указывает сообщение, отображаемое после попытки вывода значения переменной z.

Рис. 20.3. Пример, поясняющий действие локальных и глобальных переменных при задании файла-функции

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

У нашей функции имеется один недостаток — вывод на индикацию значения z=13 из тела функции, хотя после этого г остается равным 0. Чтобы убрать побочный эффект вывода значения z, достаточно установить знак ; после математического выражения, определяющего z. Таким образом, окончательно наша функция должна записываться следующим образом:

function z=fun(x,y) 

z=x^2+y^2;

Этот пример наглядно показывает, что пропуск любого слова или даже простого оператора (вроде знака :) может привести к не сразу понятным побочным эффектам и даже неверной работе функции. Программирование требует особой точности и педантичности, именно поэтому далеко не все могут быть хорошими программистами.

 

10. Структура М-файла-функции

 

Структура М-файла-функции

М-файл-функция является типичным объектом языка программирования системы MATLAB. Одновременно он является полноценным модулем с точки зрения структурного программирования, поскольку содержит входные и выходные параметры и использует аппарат локальных переменных. Структура такого модуля с одним выходным параметром выглядит следующим образом:

function var=f_name(Cnncoк_napaмeтpов) 

%Основной комментарий

%Дополнительный комментарий 

Тело файла с любыми выражениями 

vаr=выражение

М-файл-функция имеет следующие свойства:

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

  • функция возвращает свое значение и может использоваться в виде name (Список_параметров) в математических выражениях;

  • все переменные, имеющиеся в теле файла-функции, являются локальными, т. е. действуют только в пределах тела функции;

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

  • правила вывода комментариев те же, что у файлов-сценариев; 

  • файл-функция служит средством расширения системы MATLAB;

  • при обнаружении файла-функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB.

Последняя конструкция vаг=выражение вводится, если требуется, чтобы функция возвращала результат вычислений.

Приведенная форма файла-функции характерна для функции с одним выходным параметром. Если выходных параметров больше, то они указываются в квадратных скобках после слова function. При этом структура модуля имеет следующий вид:

function [varl,var2....]=f_name(Список_параметров)

%Основной комментарий

%Дополнительный комментарий

Тело файла с любыми выражениями

vаг1=выражение

vаг2=выражение

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

[var1,va2,... ]=f_nаmе(Список_параметров)

После его применения переменные выхода varl, var2,... становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах программы. Если функция используется в виде nаmе(Список_параметров), то возвращается значение только первого выходного параметра — переменной varl.

 

11. Статус переменных и команда global

 

Статус переменных и команда global

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

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

Команда global varl var2... позволяет объявить переменные модуля-функции глобальными. Таким образом, внутри функции могут использоваться и такие переменные, если это нужно по условиям решения вашей задачи [ Чтобы несколько программных модулей могли совместно использовать глобальную переменную, i идентификатор должен быть объявлен как global во всех модулях. ].

 

12. Использование подфункций

 

Использование подфункций

Начиная с версии 5.0 в функции системы MATLAB можно включать подфункции. Они объявляются и записываются в теле основных функций и имеют идентичную им конструкцию. Не следует путать эти функции с внутренними функциями, встроенными в ядро системы MATLAB. Ниже представлен пример функции с подфункцией:

function [mean.stdev] = statv(x)

USTATV Interesting statistics.

%Пример функции с встроенной подфункций

n = length(x);

mean = avg(x.n);

stdev = sqrt(sum((x-avg(x.n)). ^ 2)/n);

%--------------------------------------

function m = avg(x.n) £Mean subfunction m = sum(x)/n;

В этом примере среднее значение элементов вектора х вычисляется с помощью подфункции avg(x.n), тело которой записано в теле основной функции statv. Пример использования функции statv представлен ниже:

» V=[l 2345]

V=

12345 

» [a,m]=statv(V)

 а =

m =

1.4142 » statv(V) 

ans =

3

» help statv

STATV Interesting statistics. 

Пример функции с встроенной подфункций

Подфункции определены и действуют локально, т. е. только в пределах т-файла, определяющего основную функцию. Команда help пате выводит комментарий, относящийся только к основной функции, тогда как команда type name выводит весь листинг m-файла. Так что заданные в некотором m-файле подфункции нельзя использовать ни в командном режиме работы, ни в других т-файлах. При обращении к функции интерпретатор системы MATLAB прежде всего просматривает m-файл на предмет выявления подфункций. Если они обнаружены, то задаются как локальные функции. Благодаря локальному действию подфункций их имена могут совпадать с именами основных функций системы. Если в функции и подфункциях должны использоваться общие переменные, их надо объявить глобальными как в функции, так и в ее подфункциях.

 

13. Частные каталоги

 

Частные каталоги

Для записи m-файлов используются каталоги, называемые родительскими каталогами. Они содержат группы файлов определенного функционального назначения, например по статистическим расчетам, матричным операциям, вычислению определенных классов функций и т. д.

Однако начиная с версии MATLAB 5.0 появилась возможность в родительских каталогах создавать частные каталоги с именем PRIVATE. Расположенные в них m-файлы доступны только файлам родительского каталога. Файлы частных каталогов просматриваются интерпретатором системы MATLAB в первую очередь. Применение частных каталогов позволяет изменять исходные файлы, сохраняя оригиналы в родительском каталоге в неизменном виде.

Если вы решили отказаться от применения измененного файла, достаточно стереть его в частном каталоге. Такая возможность связана с тем, что интерпретатор при поиске m-файла прежде всего просматривает частный каталог и интерпретирует найденный в нем файл. И только если файл не найден, ищется файл в родительском каталоге.

 

14. Обработка ошибок

 

Обработка ошибок

Вывод сообщений об ошибках

Часто в ходе вычислений возникают ошибки. Например, мы уже сталкивались с проблемой вычисления функции sin(x)/x — при х = 0 имеет место ошибка вида «деление на ноль». При появлении ошибки вычисления могут завершиться досрочно с выводом сообщения об ошибке. Следует, однако, отметить, что не все ошибки вызывают остановку вычислений. Некоторые сопровождаются только выдачей предупреждающей надписи.

Такие ситуации должны учитываться программистом, отмечаться как ошибочные и по возможности устраняться. Для вывода сообщения об ошибке служит команда error('Сообщение об ошибке'), при выполнении которой вычисления прерываются и выдается сообщение об ошибке, заданное в апострофах. Ниже дан пример вычисления функции sd(x)=sin(x)/x, в котором задано сообщение об ошибке на русском языке:

function f=sd(x)

if x==0 error('Ошибка - деление на 0'). end

f=sin(x)/x

Для выявления ситуации об ошибке использован оператор условного перехода if, который будет описан детально несколько позднее. Результат выполнения данной функции приводится ниже:

» sd(l) 

f =

0.8415 

ans =

0.8415 

» sd(0)

??? Error using ==> sd Ошибка - деление на 0

Если остановка программы при появлении ошибки нежелательна, то может использоваться команда вывода предупреждающего сообщения warning('Предупреждающее сообщение')

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

 

15. Функция lasterr и обработка ошибок

 

Функция lasterr и обработка ошибок

Опытные программисты должны предусматривать ситуации с появлением ошибок. К примеру, при х = 0 выражение sin(x)/x = 0/0 = 1 и правильным решением было бы вместо его вычисления использовать значение 1.

В данном простом примере приводится функция sdO, исключающая вычисление sin(x)/x при х = 0:

function f=sdO(x) 

if x==0 f=1; 

else f=sin(x)/x; 

end 

return

При этом вычисления пройдут корректно при любом х:

» sd0(l)

ans=

0.8415 

»sd0(0) 

ans = 

1

Для вывода сообщения о последней произошедшей ошибке служит функция lasterr (см. пример ниже):

» ааа

??? Undefined function or variable 'aaa'. 

» 2+3 

ans =

5

» 1/0

Warning: Divide by zero, 

ans =

Inf

» lasterr 

ans = Undefined function or variable 'aaa'.

Как нетрудно заметить, функция lasterr возвращает текстовое сообщение, следующее за знаками ??? сообщения об ошибке.

В общем случае программы могут содержать обработчики ошибок, направляющие ход вычислений в нужное русло, даже если появляется ошибка. Но для этого требуются средства индикации и обработки ошибок. Основными из них являются функции eval и l asterr. О функции lasterr уже говорилось, а функция eval (' try', 'catch') в отличие от ранее рассмотренной формы (урок 18) имеет два входных аргумента. Один из них — это строчное выражение, которое преобразуется в исполняемую форму и выполняется при отсутствии ошибки. Если же происходит ошибка, то строка ' catch' вызывает обращение к функции обработки ошибки.

 

16. Функции с переменным числом аргументов

 

Функции с переменным числом аргументов

Функции подсчета числа аргументов

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

  • nargin — возвращает число входных параметров данной функции; 

  • nargout — возвращает число выходных параметров данной функции.

Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов пяти аргументов xl, х2, хЗ, х4 и х5.

Обычный путь состоит в следующем — создаем функцию с именем sum2_5:

function f=sum2_5(x1,x2,x3,x4,x5) ;

f=x1^2+x2^2+x3^2+x4*2+x5^*2;

Теперь проверим ее в работе:

» sum2_5(l,2.3.4.5) 

ans = 

55

» sum2_5(l,2)

??? Input argument 'хЗ' is undefined. 

Error in ==> C:\MATI_AB\bin\sum2_5.m 

On line 2 ==> f=x1^2+x2^2+x3^2+x4^2+x5^2;

Итак, при наличии всех пяти аргументах функция работает корректно. Но если аргументов менее пяти, она выдает сообщение об ошибке. С помощью функции nargin можно создать функцию sum2_5m, которая работает корректно при любом числе заданных входных аргументов в пределах от 1 до 5:

f unction f=sum2m_5(x1 ,x2 , хЗ ,x4 , x5) ;

n=nargin;

if n==1 f=x1^2; end

if n==2 f=x1^2+x2^2;end

if n==3 f=x1^2+x2^2+x3^2; end

if n==4 f=x1^2+x2 ^ 2+x3^2+x4 ^ 2: end

if n==5 f=x1^2+x2^2+x3^2+x

В данной функции используется условный оператор i f...end, который будет детально описан далее. Но и без этого ясно, что благодаря применению функции nargin и условного оператора вычисления всякий раз идут по формуле с числом слагаемых, равным числу входных аргументов — от одного до пяти. Это видно из приведенных ниже примеров:

» sum2_5m(1) 

ans = 

1

» sum2_5m(1,2) 

ans =

5

» sum2_5m( 1,2,3)

ans = 

14

» sum2_5m(1,2,3,4) 

ans =

30

» sum2_5m(1,2,3,4,5) 

ans=

55

» sum2_5m(1,2,3,4,5,6) 

??? Error using ==> sum2_5m 

Too many input arguments.

Итак, при изменении числа входных параметров от 1 до 5 вычисления проходят корректно. При большем числе параметров выводится сообщение об ошибке. Этс уже действует встроенная в интерпретатор MATLAB система диагностики ошибок

 

17. Переменные varargin и varargout

 

Переменные varargin и varargout

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

function myplot(x,varargin)

plot(x,varargin{:}) function [s,varargout] = mysize(x)

nout = max(nargout.1)-1;

s = size(x);

for 1=1:nout, varargout(i) = {s(i)}; end

Эта переменная вбирает в себя все входные параметры и опции начиная со второго аргумента. При обращении к данной функции

myplot(sin(0:.1:1),'color'.[.5 .7 ,3],'linestyle',':')

varargin представляет массив ячеек размера 1x4, включающий а себя значения

'color', [.5 .7 .3], 'linestyle' u ':'.

Аналогично varagin переменная varargout объединяет любое число выходных параметров в массив ячеек. Эта переменная, кстати, как и varargin, должна быть последней в списке аргументов. Обычно эта переменная не создается при вызове функций. Приведенный ниже пример поясняет ее создание с помощью цикла:

function [s,varargout] = rnysize(x) 

nout = max(nargout,l)-l: 

s = size(x); 

for i=1:nout. 

varargout(i)= (s(i)}: end

Более подробно циклы будут рассмотрены в дальнейшем описании. В данном случае цикл использован для объединения всех параметров начиная со второго в значение переменной varargout.

 

18. Комментарии

 

Комментарии

Как отмечалось, команда help name, где name — имя m-файла, обеспечивает чтение первой строки с текстовым комментарием и тех строк с комментариями, которые следуют непосредственно за первой строкой. Комментарий, расположенный за пределами этой области, не выводится. Это позволяет создавать невыводимый программный комментарий, например: Z=X+Y ^Массив Z является суммой массивов X и Y

Пустая строка прерывает вывод комментария при исполнении команды help name. Команда type name выводит текст программы со всеми комментариями, в том числе и следующими после пустых строк.

Команда help catalog, где catalog — имя каталога с m-файлами, позволяет вывести комментарий, общий для всего каталога. Такой комментарий содержится в файле contents.m, который пользователь может создать самостоятельно с помощью редактора m-файлов. Если такого файла нет, то будет выведен список первых строк комментариев для всех m-файлов каталога.

 

19. Особенности выполнения m-файлов функций

 

Особенности выполнения m-файлов функций

М-файлы-функции могут использоваться как в командном режиме, так и вызываться из других M-файлов. При этом необходимо указывать все входные и выходные параметры. Исключением является случай, когда выходной параметр единственный — в этом варианте функция возвращает единственный результат и может использоваться в математических выражениях. При использовании глобальных переменных они должны быть объявлены во всех m-файлах, используемых в решении заданной задачи, и во всех входящих в них встроенных подфункциях.

Имена функций должны быть уникальными. Это связано с тем, что при обнаружении каждого нового имени MATLAB проверяет, относится ли это имя к переменной, подфункции в данном m-файле, частной функции в каталогах PRIVATE или функции в одном из каталогов пути доступа. Если последняя встречается, то будет исполнена именно эта функция. В новой версии MATLAB возможно переопределение функции, но это не рекомендуется делать подавляющему большинству пользователей системы.

Если аргумент функции используется только для вычислений и его значения не меняются, то аргумент передается ссылкой, что уменьшает затраты памяти. В других случаях аргумент передается значением. Для каждой функции выделяется своя (рабочая) область памяти, не входящая в область, предоставляемую системе MAT-LAB. Глобальные переменные принадлежат ряду областей памяти. При их изменении меняется содержимое всех этих областей.

При решении задач с большим объемом данных может ощущаться нехватка оперативной памяти. Признаком этого становится появление сообщения об ошибке «Out of memory».

В этом случае может быть полезным применение следующих мер:

  • стирание ставших ненужными данных, прежде всего больших массивов;

  • увеличение размеров файла подкачки Windows;

  • уменьшение размера используемых данных;

  • снятие ограничений на размеры используемой памяти;

  • увеличение объема физической памяти компьютера.

Чем больше емкость ОЗУ компьютера, на котором используется система MATLAB тем меньше вероятность возникновения указанной ошибки. Опыт показывает, что даже при решении задач умеренной сложности емкость ОЗУ не должна быть менее 16-32 Мбайт.

 

20. Создание Р-кодов

 

Создание Р-кодов

Когда встречается сценарий или функция в виде m-файла, то всякий раз выполняется трансляция файлов, создающая так называемые Р-коды (псевдокоды). Она связана с синтаксическим контролем сценария или функции, который несколько замедляет вычисления. Временные Р-коды хранятся в памяти только до использования команды clear или завершения сеанса работы. Кроме того, MATLAB позволяет явно создавать и хранить Р-коды сценариев и функций с помощью команды pcode: pcode имена_М-файлов pcode *.m создает файлы р-кодов для всех m-файлов данной папки, pcode с дополнительным параметром - inplace — хранит эти файлы в тех же папках, что и исходные m-файлы.

Особенно полезно применение этой команды в том случае, когда используется сложная дескрипторная графика и средства создания GUI. В этом случае выигрыш по скорости выполнения вычислений может быть заметным. Переход к Р-кодам полезен, если пользователь желает скрыть созданный им m-файл и реализованные в нем идеи и алгоритмы. Файл с Р-кодами имеет расширение .р. Размер файла с Р-кодами обычно больше, чем размер m-файла.Рассмотрим следующий пример — создадим файл-сценарий pp.m следующего содержания:

told=cputime; 

х=-15:.0001:15; 

plot(x,sin(x)) 

t=cputime-told

Эта программа строит график функции sin(x) по большому числу точек. Кроме того, она вычисляет время выполнения данного сценария в секундах. При первом пуске получим:

» рр

t=

0.4400

Теперь выполним создание Р-кодов и вновь запустим программу:

» pcode рр 

» рр

t=

0.3900 

» рр 

t =

0.3300

Нетрудно заметить, что после преобразования в Р-коды время построения графика несколько уменьшилось. Но гораздо важнее то, что теперь вы можете стереть файл pp.m (но оставить рр.р!) и снова запустить программу. Ваши слишком любопытные коллеги едва ли разберутся с тем, что записано в машинных кодах файла рр.р, хотя с помощью специальных программ (декомпиляторов) такая возможность реализуется.

 

21. Управляющие структуры

 

Управляющие структуры

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

 

22. Диалоговый ввод

 

Диалоговый ввод

Приведем простой пример диалоговой программы, которую легко поймут приверженцы доброго старого Бейсика:

% Вычисление длины окружности с диалоговым вводом радиуса

r=0;

while r>=0,

r=input('Введите радиус окружностиr=');

if r>=0 disp(' Длина окружности l='); disp(2*pi*r), end 

end

Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса г. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды input: MnputCВведите радиус окружности r='):

При выполнении этой команды вначале выводится запрос в виде строки, затем происходит остановка работы программы и ожидается ввод значения радиуса г (в общем случае числа). Ввод, как обычно, подтверждается нажатием клавиши Enter, после чего введенное число присваивается переменной г. Следующая строка

if r>=0 disp(' Длина окружности l = '); disp(2*pi*r);end

с помощью команды disp при r>=0 выводит надпись «Длина окружности 1=» и вычисленное значение длины окружности. Она представляет собой одну из наиболее простых управляющих структур типа if...end. В данном случае она нужна для остановки вычислений, если вводится отрицательное значение г (прием, который любят начинающие программисты).

Приведенные строки включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r>=0. цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается.

Если данная программа записана в виде m-файла circ.m, то работа с ней будет  выглядеть следующим образом:

» circ

Введите радиус окружности R=1 

Длина окружности l=

6.2832

Введите радиус окружности R=2 

Длина окружности l=

12.5664

Введите радиус окружности R=-1 

»

Итак, на примере даже простой программы мы видим пользу применения управляющих структур типа if...end и whi1e...end, а также функций диалогового ввода input('String') и вывода disp. Обратите внимание на завершение работы программы при вводе любого отрицательного числа для радиуса окружности.

Функция Input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:

input('Комментарий'. V)

При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:

» S=input('Введите выражение ','s') Введите выражение (Вводим) 2*sin(l) 

S =

2*sin(l) 

» eval(S) 

ans = 

1.6829

Обратите внимание на то, что функция eval позволяет вычислить выражение, заданное (полученное от функции input) в символьном виде. Вообще говоря, возможность ввода любого символьного выражения в сочетании с присущими языку программирования MATLAB управляющими структурами открывает путь к созданию диалоговых программ любой сложности [ Нужно проявлять большую осторожность при применении eval и input, так как программы с их с использованием не всегда возможно компилировать. Впрочем, р-коды таких программ можно использовать с сервером run-time. — Примеч. ред. ].

 

23. Условный оператор

 

Условный оператор

Условный оператор if в общем виде записывается следующим образом:

if Условие 

Инструкции_1

elself Условие 

Инструкции_2 

else 

Инструкции_3 

end

Эта конструкция допускает несколько частных вариантов. В простейшем, типа! f...end: if Условие Инструкции end

Пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяются оператором , (запятая) или ; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то Инструкции также не выполняются.

Еще одна конструкция

if Условие 

Инструкции_1 

else 

Инструкции_2 

end

выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.

Условия записываются в виде:

Выражение_1 Оператор_отношения Выражение_2,

причем в качестве Операторов_отношения используются следующие операторы: ==, <, >, <=, >= или ~=. Все эти операторы представляют собой пары символов без пробелов между ними.

Мы уже неоднократно показывали применение этой общеизвестной управляющей структуры в программных модулях. Читателю предлагается опробовать собственные варианты программ с условным оператором.

 

24. Циклы типа for...end

 

Циклы типа for...end

Циклы типа for...end обычно используются для организации вычислений с заданным числом повторяющихся циклов. Конструкция такого цикла имеет следующий вид:

for vаг=Выражение. Инструкция. .... Инструкция end

Выражение чаще всего записывается в виде s:d:e, где s — начальное значение переменной цикла var, d — приращение этой переменной и е — конечное значение управляющей переменной, при достижении которого цикл завершается. Возможна и запись в виде s :е (в этом случае d=l). Список выполняемых в цикле инструкций завершается оператором end.

Следующие примеры поясняют применение цикла для получения квадратов значений переменной цикла:

» for 1=1:5 i^2. end; 

ans =

ans =

ans =

ans =

16 

ans =

25

» for x=0:.25:1 Х ^ 2, end: 

ans =

ans =

0.0625 

ans =

0.2500

ans =

0.5625 

ans =

1

Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла. Оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается. Возможны вложенные циклы, например:

for i=1:3

for j=l:3

A(1.j)=i+j;

end 

end

В результате выполнения этого цикла (файл for2.m) формируется матрица А:

» for2 

» А

А =

2 3 4

3 4 5

4 5 6 

»

Следует отметить, что формирование матриц с помощью оператора : (двоеточие) обычно занимает намного меньше времени, чем с помощью цикла. Однако применение цикла нередко оказывается более наглядным и понятным. MATLAB допускает использование в качестве переменной цикла массива А размера тхп. При этом цикл выполняется столько раз, сколько столбцов в массиве А, и на каждом шаге переменная var представляет собой вектор, соответствующий текущему столбцу массива А:

» А=[1 2 3:4 5 6] 

А =

1 2 3

4 5 6 

» for var=A; var, end 

var =

1

var =

2

5

var=

3

6

 

25. Циклы типа while...end

 

Циклы типа while...end

Цикл типа while выполняется до тех пор, пока выполняется Условие:

while Условие Инструкции end

Пример применения цикла while уже приводился. Досрочное завершение циклов реализуется с помощью операторов break или continue.

 

26. Конструкция переключателя

 

Конструкция переключателя

Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch:

switch switch_Bыражение 

case саsе_Выражение 

Список_инструкций

case {саsе_Выражение1, Саsе_выражение2, саsе_ВыражениеЗ....} 

Список_инструкций

otherwise. Список_инструкций end

Если выражение после заголовка switch имеет значение одного из выражений са5е_Выражение..., то выполняется блок операторов case, в противном случае — список инструкций после оператора otherwise. При выполнении блока case исполняются те списки инструкций, для которых сазе_Выражение совпадает со switch_Bbipa-жением. Обратите внимание на то, что сазе_Выражение может быть числом, константой, переменной, вектором ячеек или даже строчной переменной. В последнем случае оператор case истинен, если функция strcmp (значение, выражение) возвращает логическое значение «истине».

Поясним применение оператора switch на примере m-файла swl.m:

switch van 

case {1,2,3}

dispCПервый квартал') 

case {4,5,6}

disp('Второй квартал') 

case {7,8,9}

d.isp( 'Третий квартал') 

case {10.11,12}

dispC Четвертый квартал') 

otherwise

disp('Ошибка в задании') 

end

Эта программа в ответ на значения переменной van — номера месяца — вычисляет, к какому кварталу относится заданный месяц, и выводит соответствующее сообщение:

» var=2;

» swl

Первый квартал 

» var=4;swl 

Второй квартал 

» var=7:swl 

Третий квартал 

» var=12;swl 

Четвертый квартал

» var=-l;swl 

Ошибка в задании

 

27. Конструкция try...catch...end

 

Конструкция try...catch...end

В MATLAB 6 введена новая конструкция блока вывода ошибок try...catch...end:

try.

Список инструкций

Список инструкций catch.

Список инструкций

...

Список инструкций 

end

Эта конструкция выполняет все списки инструкций. Если в каком-то списке до оператора catch появляется ошибка, то выводится сообщение об ошибке, но системная переменная последней ошибки lasterr не меняется. В сообщениях после catch сообщения об ошибке не выводятся.

В следующем примере задано появление ошибки (переменная ааа не определена), после чего выполняется блок try...catch...end:

ааа

??? Undefined function or variable 'ааа'.

try

2+3:

3+4:

2/0: catch

4+5: end:

Warning: Divide by zero. 

»lasterr ans = Undefined function or variable 'aaa'.

Обратите внимание, что в конце блока команда lasterr выводит ее начальное значение. А в другом примере ошибка задана в блоке try...catch...end уже после оператора catch:

» try

2+3:

3+4;

4+5: catch

5/0: 

end:

» lasterr

ans = Undefined function or variable 'aaa'.

Как нетрудно заметить, на этот раз ошибка в вычислении 5/0 не выводится, а значение lasterr осталось тем, что было изначально.

 

28. Создание паузы в вычислениях

 

Создание паузы в вычислениях

Для остановки программы используется оператор pause. Он используется в следующих формах:

  • pause — останавливает вычисления до нажатия любой клавиши; 

  • pause(N) — останавливает вычисления на N секунд; 

  • pause on — включает режим отработки пауз; 

  • pause off — выключает режим отработки пауз. 

Следующий пример поясняет применение команды pause:

for i=1:20;

х =rand(1,40);

у =rand(1,40);

z = sin(x.*y);

tri = delaunay(x.y);

trisurf(tri,x,y,z)

paused);

end

Команда paused) здесь обеспечивает показ 20 рисунков — построений трехмерных поверхностей из треугольных окрашенных областей со случайными параметрами.

 

29. Понятие об объектно-ориентированном программировании

 

Понятие об объектно-ориентированном программировании

Мы уже много раз упоминали различные объекты языка программирования системы MATLAB. Это является одним из признаков объектно-ориентированного программирования (ООП), причем чисто внешним. В основе объектно-ориентированного программирования лежат три основных положения.

  • Инкапсуляция — объединение данных и программ и передача данных через входные и выходные параметры функций. В результате появляется новый элемент программирования — объект.

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

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

В дополнение к этим положениям объектно-ориентированное программирование в MATLAB допускает агрегирование объектов, т. е., объединение частей объектов или ряда объектов в одно целое.

Объект можно определить как некоторую структуру, принадлежащую к определенному классу. В MATLAB определены следующие семь основных классов объектов:

  • double — числовые массивы с элементами-числами двойной точности;

  • sparse — двумерные числовые или комплексные разреженные матрицы;

  • char — массивы символов;

  • struct — массивы структур (записей);

  • cell — массивы ячеек;

  • javaarray массивы Ява;

  • functionjnandle — дескрипторы функций.

С объектами этих классов мы многократно встречались, особо не оговаривая их принадлежность к объектно-ориентированному программированию. Для MATLAB вообще характерно, что никакие классы объектов (в том числе заново создаваемые) не требуют объявления. Например, создавая переменную nаmе='Иван', мы автоматически получаем объект в виде переменной name класса char. Таким образом, для переменных принадлежность к тому или иному классу определяется их значением. Является ли переменная объектом, можно определить при помощи функции isobject(HMfl переменной). Аналогичная функция isjava определяет, является ли переменная объектом Java.

Для создания новых классов объектов служат конструкторы классов. По существу, это m-файлы, имена которых совпадают с именами классов @Имя_класса, но без символа @. Этим символом помечаются подпапки системы MATLAB, в которых имеются конструкторы классов. Множество таких папок с примерами конструкторов классов вы найдете в подпапках MATLAB\TOOLBOX.
В качестве примера рассмотрим поддиректорию @SYM в директории TOOLBOX\ SYMBOLIC. В этой поддиректории можно найти конструкторы для более чем сотни объектов пакета символьной математики. К примеру, конструктор функции, вычисляющей арктангенс, выглядит следующим образом:

» help @sym/atan.m 

ATAN Symbolic inverse tangent. 

» type @sym/atan,m

 function Y = atan(X) 

%ATAN Symbolic inverse tangent. 

% Copyright (c) 1993-98 by The MathWorks. Inc. 

% SRevision: 1.10 $ $Date: 1997/11/29 01:05:16 $ 

Y = mapleCmap' ,'atan' .X);

В данном случае для конструирования нужного объекта используется функция mapl e, дающая вход в ядро системы символьной математики Maple V R4, которое поставляется в составе системы MATLAB по лицензии фирмы MapleSoft, Inc. Этот пример, кстати, наглядно показывает, что пользователь системы MATLAB может существенно расширить число объектов класса sym, поскольку ядро системы Maple V содержит намного больше определений, чем пакет символьной математики системы MATLAB. Для создания новых классов объектов служит функция class, описанная ниже.

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

Пакеты прикладных программ системы MATLAB позволяют разработчикам с большим успехом использовать возможности объектно-ориентированного программирования путем создания новых классов и объектов. М-файлы системы представляют собой массу наглядных примеров объектно-ориентированного программирования на языке MATLAB. Это дает основание ограничиться справочным описанием основных средств такого программирования с приведением минимума простых примеров.

 

30. Создание класса или объекта

 

Создание класса или объекта

Для создания класса объектов или объектов, а также для их идентификации служит функция class. Формы ее применения представлены ниже.

  • class (OBJ) — возвращает класс указанного объекта OBJ. Типы стандартных классов double, sparse, char, cell, struct, functionjiandle были перечислены выше. int8 — 8-разрядный массив целых чисел со знаком; uintS — 8-разрядный массив целых чисел без знака; intlG — 16-разрядный массив целых чисел со знаком; uint!6 — 16-разрядный массив целых чисел без знака; int32 — 32-разрядный массив целых чисел со знаком; uint32 — 32-разрядный массив целых чисел без знака; <class_name> — класс, определенный пользователем; <java_class> — имя класса Ява;

  • OBJ=class(S, 'classjiame' ,PARENT1,PARENT2....) — создает объект класса 'classname' на базе структуры S и родительских объектов PARENT1, PARENT2,... При этом создаваемый объект наследует структуру и поля родительских объектов. Объекту OBJ в данном случае присуще множественное наследование;

  • OBJ=class(struct[ ]. 'classjiame' .PARENT1.PARENT2,...) — не может иметь никаких полей, кроме унаследованных от родительских объектов.

Обратите внимание на то, что эта функция обычно используется в составе m-файлов конструкторов классов объектов.

 

31. Проверка принадлежности объекта к заданному классу

 

Проверка принадлежности объекта к заданному классу

Для контроля принадлежности заданного объекта к некоторому классу служит функция isa:

  • isa(OBJ. 'Имя_класса') — возвращает логическую 1, если OBJ принадлежит классу с указанным именем. Дополнительно к вышеописанным выделяет классы numeric и single. Но не обнаруживает класс logical. Нужно использовать функцию islogical, чтобы проверить принадлежность к этому классу.

Примеры применения этой функции:

» Х=[1 2 3]; 

» isa(X,'char') 

ans =

0

» isa(X,'double') 

ans =

1

 

32. Другие функции объектно-ориентированного программирования

 

Другие функции объектно-ориентированного программирования

Для получения списка методов данного класса объектов сейчас чаще используются функции methodsview и methods. Отличиями от what имя класса является то, что эти функции возвращают информацию также и о классах Java, но информация выводится в отдельном окне, не сообщается информация о папках, все методы из всех папок собраны вместе, и повторяющиеся имена методов удалены:

  • methodsview имя класса или methods имя класса -full — в отдельном окне возвращают полное описание методов класса, включая информацию о наследовании, а для классов Java — и о подписях и атрибутах;

  • M=methods ('имя класса',' -full ') — возвращает ту же информацию в массиве ячеек М;

  • M=methods(' имя класса ') — возвращает массив ячеек с перечислением методов, относящихся к заданному классу объектов;

  • methods имя класса возвращает перечень методов в отдельном окне. Пример:

» methods char Methods for class char: delete diff int

Следующие две функции могут использоваться только внутри конструкторов классов:

inferiorto (' CLASS1'. 'CLASS2'....) и superiortot 'CLASS1', 'CLASS2'....)

Они определяют низший и высший приоритеты классов по отношению к классу конструктора. Для дескрипторов перегружаемых функций существует функция

functions

F=functions(дескриптор функции),

возвращающая массив структур F. METHODS, вложенный в массив F, при этом именем поля в массиве F. METHODS является имя класса, а значением поля — название метода, который вызывается тогда, когда входной аргумент принадлежит этому классу.

Дополнительно functions возвращает следующие поля: F.function — строка, используемая для создания дескриптора функция (существуют также отдельная функция func2str для получения этой информации и обратная ей функция str2func, превращающая строку в дескриптор функции); F.type содержит simple (простая), overloaded (перегружаемая) или subfunction (подфункция), т. е. указывает тип функции; F.default указывает путь к тому файлу, который первый в алгоритме поиска MATLAB и не определен никаким классом.

  • which имя метода — находит загруженный Java класс и все классы MATLAB, которым принадлежит данный метод;

  •  which -all имя метода — находит все классы, которым принадлежит данный метод.

Любой оператор в системе MATLAB можно переопределить (т. е. сделать его функцию перегружаемой) путем задания m-файла с новым именем в соответствующем каталоге классов. В частности, в уроке 8 отмечалось, что все арифметические операторы имеют представления в виде соответствующих функций.

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

 

33. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Разбираться в видах программирования и его особенностях для MATLAB.

  • Использовать М-файлы сценариев и функций.

  • Выводить сообщения об ошибках и обрабатывать ошибки.

  • Создавать функции с переменным числом аргументов.

  • Использовать комментарии.

  • Создавать Р-коды.

  • Использовать управляющие структуры и функции диалога.

  • Применять условные операторы, циклы и переключатели.

  • Задавать паузы в вычислениях.

  • Использовать некоторые возможности объектно-ориентированного программирования.

 

Урок 21. Отладка программ

1. Урок 21. Отладка программ

 

Урок №21.

Отладка программ

  • Общие замечания по отладке m-файлов

  • Вывод листинга m-файла с пронумерованными строками

  • Установка, удаление и просмотр точек прерывания

  • Управление исполнением m-файла

  • Просмотр рабочей области 

  • Профилирование m-файлов

  • Работа с системой контроля версий программ

Отладка программ — не менее серьезный этап, чем их подготовка. К сожалению, это редко учитывают начинающие программисты, ослепленные успехом работы первых простеньких программ. Однако по мере усложнения программ необходимость в средствах их отладки возрастает. Этот урок посвящен тем средствам отладки, которые имеются в системе MATLAB.

 

2. Общие замечания по отладке m-файлов

 

Общие замечания по отладке m-файлов

Вряд ли существует программа с длиной более десятка строк, которая после запуска сразу бы выдала верный результат. Как правило, любую программу надо отлаживать в интерактивном режиме, запуская и анализируя полученные при каждой модификации результаты. Основным средством отладки m-файлов в системе MATLAB является встроенный редактор/отладчик (M-File Editor/Debuger) с современным графическим интерфейсом. Работа с ним была описана в уроке 5. Однако MATLAB предусматривает основные возможности отладки и в командном режиме. Именно они и рассматриваются в данном разделе.

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

Для этого часто бывает достаточно ввести в программу режим просмотра результатов промежуточных вычислений, разблокировав их вывод снятием операторов ; (точка с запятой) или введя дополнительные переменные, значения которых отражают ход вычислений. После отладки можно вновь ввести блокирующие вывод операторы и убрать указанные переменные.

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

 

3. Команды отладки программ

 

Команды отладки программ

Для перехода в командный режим отладки в m-файл следует включить команду keyboard. Ее можно запустить и в командном режиме:

» keyboard 

К» type swl

switch var case {1.2,3}

disp('Первый квартал') 

case {4.5.6}

dispC Второй квартал') 

case {7,8,9}

disp('Третий квартал') 

case {10,11.12}

disp('Четвертый квартал')

 otherwise

disp('Ошибка в задании') 

end

» return 

»

Признаком перехода в режим отладки становится появление комбинированного символа К». Он меняется на символ » после возврата командой return в обычный командный режим работы. То же самое происходит при использовании команды dbquit, также прекращающей режим отладки, но прекращающей и выполнение т-файла. Если команда return находится в самом m-файле, она прекратит его выполнение и передаст управление туда, откуда был вызван этот файл.

 

4. Вывод листинга m-файла с пронумерованными строками

 

Вывод листинга m-файла с пронумерованными строками

Один из способов отладки m-файлов — размещение в них точек прерывания. Однако в командном режиме нельзя задать установку таких точек с помощью курсора мыши (как в отладчике Windows). Поэтому необходимо иметь листинг программы с пронумерованными строками. Он создается с помощью команды dbtype.

Пример:

» keyboard 

К» dbtype sw1

1 switch var

2 case {1.2.3}

3 disp(' Первый квартал')

4 case {4.5,6}

5 disp('Второй квартал')

6 case {7,8.9}

7 disp('Третий квартал')

8 case {10.11,12}

9 disp('Четвертый квартал')

10 otherwise

11 disp('Ошибка в задании')

12 end

 

5. Установка, удаление и просмотр точек прерывания

 

Установка, удаление и просмотр точек прерывания

Для установки в тестируемый m-файл точек прерывания используются следующие команды:

  • dbstop In M-file at lineno — установить точку прерывания в заданной строке;

  • dbstop In M-file at subfun — установить точку прерывания в подфункции;

  • dbstop in M-file — установить точку прерывания в m-файле;

  • dbstop if error — установить точку прерывания при сообщении об ошибке, но не при ошибках внутри цикла try...catch;

  • dbstop if all error — установить точку прерывания при сообщении о любой ошибке;

  • dbstop if warning — установить точку прерывания при предупреждении;

  • dbstop if infnan или naninf — установить точку прерывания при результате Inf или NaN.

Можно использовать упрощенный ввод этих команд без использования слов in, at и if. При установке контрольной точки она появляется в окне редактора/отладчика m-файлов. Для удаления точек прерывания используется команда dbclear с тем же синтаксисом, что и dbstop, например:

  • dbclear M-file at 1 ineno — удалить точку прерывания в заданной строке заданного файла.

  • Команда dbstatus выводит список установленных в данной сессии точек прерывания.

Пример:

К» dbstatus

Breakpoint for C:\MATLAB\bin\demol.m is on line 2.

Breakpoint for C:\MATLAB\bin\sd.m is on line 3.

MATLAB 6 значительно изменила синтаксис по сравнению с предыдущими версиями. Поэтому полезно перед отладкой старых программ выполнить команду featureCorAndError' ,0) или просто feature('orAndError') — для выдачи предупреждений об ошибке при выполнении тех конструкций, интерпретация которых в новой версии изменилась. feature('orAndError' ,1) выдает сообщение об ошибке вместо предупреждения об ошибке.

 

6. Управление исполнением m-файла

 

Управление исполнением m-файла

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

  • dbstep — выполнение очередного шага;

  • dbstep nlines — выполнение заданного числа строк программы;

  • dbstep In — если следующая выполняемая строка текущего m-файла является вызовом функции из другого m-файла, эта форма позволяет перейти к первой исполняемой строке вызываемой функции и остановиться там;

  • dbstep out — если следующая выполняемая строка текущего m-файла является вызовом функции из другого m-файла, эта форма позволяет перейти к вызываемой функции и остановиться сразу же после ее выполнения.

Для перехода от одной остановки программы к другой используется команда dbcont.

 

7. Просмотр рабочей области

 

Просмотр рабочей области

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

  • dbdown — перемещение в стеке вызываемых функций сверху вниз; 

  • dbup — перемещение в стеке вызываемых функций снизу вверх.

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

В заключение еще раз обращаем внимание читателя на то, что все возможности отладки реализованы в редакторе/отладчике m-файлов, который характеризуется удобным графическим интерфейсом и средствами визуализации отладки программ. К ним относятся возможность выделения различными цветами элементов m-файла (ключевых слов, переменных, комментариев и т. д.), наглядное представление точек прерывания, простота их установки и т. д. Щелкнув мышью справа от колонки с номерами строк, вы можете установить/снять точку прерывания в окне редактора-отладчика. После остановки в точке прерывания вы можете просмотреть значения всех переменных, подведя курсор мыши к символьному обозначению переменной в окне редактора-отладчика.

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

 

8. Профилирование m-файлов

 

Профилирование m-файлов

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

Оценка времени исполнения отдельных частей программы называется ее профилированием. Для выполнения такой процедуры служит команда profile [ Средства профилирования MATLAB позволяют анализировать только m-файлы функций, но не сценариев. Чтобы получить профиль выполнения сценария, приходится преобразовывать его в функции (как правило, не имеющую входных и выходных параметров), добавляя соответствующий заголовок function. ], имеющая ряд опций:

  • profile fun — запуск профилирования для функции fun; 

  • profile report — вывод отчета о профилировании;

  • profile plot — графическое представление результатов профилирования в виде диаграммы Парето;

  • profile filename — профилирование файла с заданным именем и путем; 

  • prof ile report N — вывод отчета по профилированию заданных N строк;

  • profile report frac — выводит отчет по профилированию тех строк, относительная доля выполнения которых в общем времени выполнения составляет не менее чем frac (от 0.0 до 1.0);

  • profileon — включение профилирования; 

  • profile off — выключение профилирования;

  • profile reset — выключение профилирования с уничтожением всех накопленных данных; 

  • INFO = profile — возвращает структуру со следующими полями:

    • file — полный путь к профилируемому файлу;

    • interval — интервалы времени в секундах;

    • count — вектор измерений;

    • state — состояние профилировщика: 'on' (включен) или 'off (выключен).

Ниже приводится пример на профилирование m-файла ellipj (эллиптическая функция Якоби):

» profile on 

» profile ellipj 

» ellipj([0:0.01:1].0.5); . 

» profile report

Total time in "C:\MATLAB\toolbox\matlab

\specfun\ellipj.m": 0.16 seconds 

100% of the total time was spent on lines: 

[96 97 86]

85: if -isempty(in) 

0.01s. 6% 86: phin(i.in) = 0.5 * ...

87:(asin(c(i+l.in).*sin(rem(phin(i+l.in)

.2*pi))./a(i+l,in))

95: ml = find(m==l): 

0.11s. 69% 96: sn(ml) = tanh(u(ml)): 0.04s. 25*97: 

cn(ml) = sech(u(ml));

98: dn(ml) = sech(udnl)): 

» INFO=profile INFO=file:

'С:\MATLAB\toolboxNmatlab\specfun\el11pj.m'

interval: 0.0100

count: [98x1 double]

state: 'off '

» profile plot

Нетрудно заметить, что при профилировании выводятся номера строк программы, у которых время выполнения превосходит 0.01 с. С использованием этого интервала и оценивается время исполнения программного кода. Последняя команда выводит графическую диаграмму профилирования, показанную на рис. 21.1.

Рис. 21.1. Графическое представление результатов профилирования

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

 

1.gif

Изображение: 

9. Создание итогового отчета

 

Создание итогового отчета

Для создания суммарного отчета о профилировании служит команда profsum, которая используется в нескольких формах:

  • profsumm — вывод полного отчета о результатах профилирования т-файла. Выводятся данные о времени выполнения для строк, суммарное время выполнения которых составляет 95% от общего времени (если таких строк много, выводятся данные о 10 строках, выполнение которых заняло наибольшее время);

  • profsumm(FRACTION) — выводит часть отчета для строк, относительное время выполнения которых составляет FRACTION (от 0.0 до 1.0) от общего времени выполнения файла;

  • profsurmi(N) — выводится отчет по N строкам с максимальным временем выполнения;

  • profsumm(STR) — выводит отчет только по тем строкам, в которых встречается строковое выражение STR;

  • profsumm(INFO), profsurmKINFO, FRACTION), profsumm(INFO, N) HprofsummdNFO, STR) -выводят итоговый отчет по строкам, заданным массивом INFO.

Пример применения команды profsumm:

» profile erfcore

» z = erf(0:.01:100):

» profsumm. profile done

Total time in "C:\MATLAB\toolbox\mat1ab

\specfun\erfcore.m": 0.16 seconds

94% of the total time was spent on lines:

[99 109 108 97 95 94 92 86 71 48]

47: %

0.01s. 6*48: k = find((abs(x)

> xbreak) & (abs(x) <= 4.)):

49: if -isempty(k)

70: del = (y-z).*(y+z):

0.01s, 6*71: result(k)

= exp(-z.*z) .* exp(-del) .* result(k)

72: end

85: 0.01s. 6% 86: у = abs(x(k)):

87: z = 1 ./ (y .* y): 

91: xnum = (xnum + p(i)) .* z:

0.01s, 6*92: xden = (xden + q(i)) .* z:

93: end

0.01s, 6*94: result(k) =

z .* (xnum + p(5)) ./ (xden + q(5)):

0.01s, 6*95: result(k)

= (1/sqrt(pi) - result(k)) ./y:

96: if jint — 2 0.01s, 6% 97;

z = fix(y*16)/16;

98: del - (y-z).*(y+z):

0.06s. 38*99: result(k) =

exp(-z.*z) .* exp(-del) .* result(k)

100: k - find(~isfinite(result));

107: if jint ==0 

0.01s, 6% 108: k = find(x > xbreak);

0.01s, 6% 109: result(k)=

(0.5 - result(k)) + 0.5;

110: k = find(x < -xbreak);

 

10. Построение диаграмм Парето

 

Построение диаграмм Парето

Команда profile plot использует для построения графическую команду pareto. Диаграмма Парето представляет собой столбцы, расположенные в порядке убывания отображаемых значений. С другими возможностями команды pareto можно ознакомиться, выполнив команду help pareto.

  • pareto(Y,NAMES) — строит диаграмму Парето с пометкой столбцов значений вектора Y соответствующими именами, содержащимися в векторе NAMES;

  • pareto(Y.X) — строит диаграмму Парето для значений вектора Y в зависимости от значений вектора X; 

  •  pareti(Y) — строит диаграмму Парето для значений вектора Y в зависимости от индексов его элементов;

  • [H,AX]=pareto(...) — возвращает вектор дескрипторов графических объектов диаграммы Н и их осей АХ.

Пример построения диаграммы Парето был рассмотрен выше (см. рис. 21.1).

 

11. Работа с системой контроля версий

 

Работа с системой контроля версий

MATLAB поддерживает системы контроля версий кода Visual Source Safe фирмы Microsoft (поступает вместе с Visual Studio), PVCS фирмы Merant (упрощенные версии этой системы бесплатно поступают с продуктами Borland), Clear Case фирмы Rational Software (в особенности на UNIX-Linux версиях MATLAB), RCS и имеет настраиваемый пользовательский интерфейс, так что вместо вышеперечисленных вы можете подключить свою любимую систему. Функция cmopts выводит информацию об установленной системе контроля версий. Свежеустановленная система MATLAB реагирует следующим образом:

» cmopts 

ans = 

none

Для подключения PVCS или ее варианта вам нужно отредактировать m-файл cmopts.m в папке C:\matlabrl2\toolbox\local Введите комментарий Ubegin customization section и введите на следующей строчке m-файла, если файл конфигурации проекта Proj.cfg:

DefaultConfigFile=

'с:\\pvcs\pvcsproj\projmgrprj\\Proj.cfg'.

Проверим правильность нашей установки:

»cmopts( 'DefaultConflgFile')

DefaultConfigFile =

с:\\pvcs\pvcsproj\projmgrprj\\Proj.cfg

  • Командаcheckin(f11ename. 'COMMENTS', Текст комментариев, OPTION1, VALUE1.0PTION2, VALUE2.......) включает ваши файлы в систему контроля версий. Filename — полный путь к файлу или строковый массив ячеек, где каждая ячейка указывает путь к файлам, Текст комментариев — массив символов, в данной версии option может быть только lock, value может быть on (замкнута) или off (позволяет доступ к файлу без checkout).

  • Команда checkout(filename, OPTION1, VALUE1.0PTION2. VALUE2.......) извлекает файлы из системы контроля версий. OPTION могут быть lock — аналогично checkin — и ревизия, т. е. указание конкретной версии файла. Команда undocheckout (Filename) — отменяет действие checkout, например замыкание файлов.

 

12. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Использовать команды отладки.

  • Выводить листинги m-файлов с нумерованными строками.

  • Устанавливать, удалять и просматривать точки прерывания.

  • Осуществлять пошаговое выполнение m-файлов.

  • Просматривать рабочую область.

  • Профилировать m-файлы.

  • Работать с системой контроля версий m-файлов.

 

Урок 22. Поддержка звуковой системы

1. Урок 22. Поддержка звуковой системы

 

Урок №22.

Поддержка звуковой системы

  • Средства работы со звуком

  • Демонстрация возможностей работы со звуком

Этот небольшой урок посвящен довольно экзотической возможности математической системы МАТLАВ — работе со звуком. Стоит напомнить, что для этого компьютер должен быть оснащен звуковой картой и звуковыми колонками. Средства поддержки звука в МАТLАВ имеют рудиментарный характер, но все же они есть и позволяют разнообразить выполнение некоторых примеров.

 

2. Средства работы со звуком

 

Средства работы со звуком

Начиная с версии МАТЬАВ 5.0 в системе несколько расширены средства для работы со звуком. До этого система имела единственную звуковую команду:

  • sound(Y.Р5) — воспроизводит сигнал из вектора У с частотой дискретизации Р5 с помощью колонок, подключенных к звуковой карте компьютера. Компоненты У могут принимать значения в следующих пределах -1.0<=у<=1.0. Для воспроизведения стереозвука на допускающих это компьютерных платформах У должен быть матрицей размера Мх2;

  •  sound(Y) — функционирует аналогично, принимая частоту дискретизации по умолчанию равной 8192 Гц;

  • sound(Y,РS.ВIТS) — функционирует аналогично с заданием разрядности звуковой карты: ВIТS=8 или ВIТ=16.

Теперь появились дополнительные команды воспроизведения звука:

  • sound(Y,...) — масштабирует и воспроизводит сигнал из массива У: По синтаксису команда аналогична-sound( Y,...);

  • soundsc(Y ,...,SLIМ) — аналогична предшествующей команде, но позволяет задать параметр SLIМ = [MIN(Y) MAX(Y)], определяющий тот диапазон значений Y, который будет соответствовать полному динамическому диапазону звука. По умолчанию SLIМ = [МIN(Y)  МАХ(У)].

  • Bеер оn или off — соответственно разрешает или запрещает гудок; 

  •  s=bеер — возвращает состояние оn|off

  •  bеер — при s=оn издает гудок.

Кроме того, введены команды для считывания и записи файлов звукового формата .WAV, стандартного для операционных систем класса Windows

  • wavwrite(Y,WAVEFILE_Е) — записывает файл типа WAVE под именем WAVELIFE. Данные по каждому каналу в случае стерео записывются в разных столбцах массива. Величины должны быть в диапазоне [-1; 1];

  • wavwrite(Y.FS.WAVEFILE) — делает то же с заданием частоты дискретизации FS (в герцах); 

  • wavwrite(Y,FS,NBITS,WAVEFILE) — делает то же с заданием числа бит на отсчет NBITS, причем NBITS<=16;

  • Y=wavread(FILE) — считывает файл типа WAVE с именем FILE и возвращает данные в массиве Y;

  • [Y,FS,BITS]=wavread(FILE) — считывает файл типа WAVE с именем FILE и возвращает массив данных Y, частоту дискретизации FS (в герцах) и разрядность BITS кодирования звука (в битах);

  • [...]=wavread(FILE.N) — возвращает только первые N отсчетов из каждого канала файла;

  • [...]=wavread(FILE, [N1 N2]) — возвращает только отсчеты с номерами от N1 до N2 из каждого канала;

  • SIZ=wavread(FILE, 'size') — возвращает объем аудиоданных в виде вектора SIZ=[samples channels] (samples — число отсчетов, channels — число каналов);

  • auwrite - записывает файл в соответствии со звуковым форматом фирм Sun и Next; auread воспроизводит файлы в MATLAB 6 на Sun и в MATLAB 5 на Next.

 

3. Демонстрация возможностей работы со звуком

 

Демонстрация возможностей работы со звуком

Эта команда служит для комплексной демонстрации возможностей работы со звуком. Она выводит диалоговое окно, которое позволяет выбрать несколько видов звукового сигнала, создать для них массив данных звука и воспроизвести звук (если компьютер оснащен звуковой картой, совместимой с Sound Вlastеr).

Кроме того, имеется возможность графически отобразить временную зависимость звукового сигнала, его частотный спектр и спектрограмму.

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

Демонстрационные примеры можно просмотреть с помощью команды type xpsound. Вы получите доступ к более подробной информации по работе со звуком в системе MATLAB.

 

4. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Использовать средства работы со звуком.

  • Запускать демонстрационные примеры работы со звуком.

 

Урок 23. Знакомство с пакетами расширения MATLAB

1. Урок 23. Знакомство с пакетами расширения MATLAB

 

Урок №23.

Знакомство с пакетами расширения МАТLАВ

  • Вывод списка пакетов расширения

  • Simulinc for Windows

  • Пакет символьной математики

  • Пакеты математических вычислений

  • Пакеты анализа и синтеза систем управления

  • Пакеты идентификации систем

  • Дополнительные средства пакета Simulinc

  • Пакеты для обработки сигналов и изображений

  • Прочие пакеты прикладных программ

В этом уроке мы кратко ознакомимся с основными средствами профессионального расширения системы и ее адаптации под решение определенных классов математических и научно-технических задач — с пакетами расширения системы MATLAB. Несомненно, что хотя бы части из этих пакетов должен быть посвящен отдельный учебный курс или справочник, быть может, и не один. За рубежом по большинству таких расширений опубликованы отдельные книги, а объем документации по ним составляет сотни мегабайт. К сожалению, объем данной книги позволяет лишь немного пройтись по пакетам расширения, с тем чтобы дать читателю представление о том, в каких направлениях развивается система.

 

2. Вывод списка пакетов расширения

 

Вывод списка пакетов расширения

Полный состав системы MATLAB 6.0 содержит ряд компонентов, название, номер версии и дату создания которых можно вывести на просмотр командой ver: 

» ver

MATLAB Version 6.0.0.88 (R12) on PCWIN MATLAB License Number: 0

MATLAB Toolbox

Version 6.0

(R12)

06-0ct-2000

Si mul ink

Version 4.0

(R12)

16-Jun-2000

Stateflow

Version 4.0

(R12)

04-0ct-2000

Stateflow Coder

Version 4.0

(R12)

04-0ct-2000

Real -Time Workshop

Version 4.0

(R12)

01-Mar-2000

COMA Reference Blockset

Version 1.0.2

(R12)

01-Sep-2000

Communications Blockset

Version 2.0

(R12)

01-Sep-2000

Communications Toolbox

Version 2.0

(R12)

01-Sep-2000

Control System Toolbox

Version 5.0

(R12)

01-Sep-2000

DSP Blockset

Version 4.0

(R12)

01-Sep-2000

Data Acquisition Toolbox

Version 2.0

(R12)

05-0ct-2000

Database Toolbox

Version 2.1

(R12)

18-Jan-2000

Datafeed Toolbox

Version 1.2

(R12)

08-May-2000

Dials & Gauges Blockset

Version 1.1

(R12)

12-May-2000

Filter Design Toolbox

Version 2.0

(R12)

01-Aug-2000

Financial Derivatives Toolbox

Version 1.0

(R12)

14-Aug-2000

Financial Time Series Toolbox

Version 1.0

(R12)

01-Apr-1999

Financial Toolbox

Version 2.1.2

(R12)

01-Sep-2000

Fixed-Point Blockset

Version 3.0

(R12)

26-May-2000

Fuzzy Logic Toolbox

Version 2.1

(R12)

15-Jun-2000

GARCH Toolbox

Version 1.0

(R12)

01-Jun-1999

Image Processing Toolbox

Version 2.2.2

(R12)

10-Mar-2000

Instrument Control Toolbox

Version 1.0

(R12)

01-Sep-2000

LMI Control Toolbox

Version 1.0.6

(R12)

12-Jun-2000

MATLAB Compiler

Version 2.1

(R12)

26-Jul-2000

MATLAB Report Generator

Version 1.1

(R12)

01-Apr-2000

Mapping Toolbox

Version 1.2

(R12)

22-May-2000

Model Predictive Control Toolbox

Version 1.0.5

(R12)

10-May-2000

Motorola DSP Developer's Kit

Version 1.1

(R12)

Ol-Sep-2000

Ми-Analysis and Synthesis Toolbox

Version 3.0.5

(R12)

12-Jun-2000

Neural Network Toolbox

Version 4.0

(R12)

26-May-2000

Nonlinear Control Design Blockset

Version 1.1.4

(R12)

12-Jun-2000

Optimization Toolbox

Version 2.1

(R12)

07-Jun-2000

Partial Differential Equation Toolbox

Version 1.0.3

(R12)

31 -Dec -1999

Power System Blockset

Version 2.1

(R12)

12-Jun-2000

Real -Time Workshop Ada Coder

Version 4.0

(R12)

01-Mar-2000

Real -Time Workshop Embedded Coder

Version 1.0

(R12)

01-Mar-2000

Requirements Management Interface

Version 1.0.1

(R12)

03-Mar-2000

Robust Control Toolbox

Version 2.0.7

(R12)

10-May-2000

SB2SL (converts SystemBuild to Simu

Version 2.1

(R12)

16-Jun-2000

Signal Processing Toolbox

Version 5.0

(R12)

01-Jun-2000

Simulink Accelerator

Version 1.0

(R12)

01-Mar-2000

Model Differencing for Simulink and...

Version 1.0

(R12)

19-Jul-2000

Simulink Model Coverage Tool

Version 1.0

(R12)

02-Jun-2000

Simulink Report Generator

Version 1.1

(R12)

01-Apr-2000

Spline Toolbox

Version 3.0

(R12)

13-Mar-2000

Statistics Toolbox

Version 3.0

(R12)

01-Sep-2000

Symbolic Math Toolbox

Version 2.1.2

(R12)

11-Sep-2000

System Identification Toolbox

Version 5.0

(R12)

27-Aug-2000

Wavelet Toolbox

Version 2.0

(R12)

16-Jun-2000

xPC Target

Version 1.1

(R12)

16-Jun-2000

xPC Target Embedded Option

Version 1.1

(R12)

16-Jun-2000

Обратите внимание, что практически все пакеты расширения в MATLAB 6.0 обновлены и датируются 2000 годом. Заметно расширено их описание, которое в PDF-формате уже занимает много более десятка тысяч страниц. Ниже дано краткое описание основных пакетов расширения

 

3. Simulink for Windows

 

Simulink for Windows

Пакет расширения Simulink служит для имитационного моделирования моделей, состоящих из графических блоков с заданными свойствами (параметрами). Компоненты моделей, в свою очередь, являются графическими блоками и моделями, которые содержатся в ряде библиотек и с помощью мыши могут переноситься в основное окно и соединяться друг с другом необходимыми связями. В состав моделей могут включаться источники сигналов различного вида, виртуальные регистрирующие приборы, графические средства анимации. Двойной щелчок мышью на блоке модели выводит окно со списком его параметров, которые пользователь может менять. Запуск имитации обеспечивает математическое моделирование построенной модели с наглядным визуальным представлением результатов. Пакет основан на построении блочных схем путем переноса блоков из библиотеки компонентов в окно редактирования создаваемой пользователем модели. Затем модель запускается на выполнение. На рис. 23.1 показан процесс моделирования простой системы — гидравлического цилиндра. Контроль осуществляется с помощью виртуальных осциллографов — на рис. 23.1 видны экраны двух таких осциллографов и окно простой подсистемы модели. Возможно моделирование сложных систем, состоящих из множества подсистем.

Simulink составляет и решает уравнения состояния модели и позволяет подключать в нужные ее точки разнообразные виртуальные измерительные приборы. Поражает наглядность представления результатов моделирования. Ряд примеров применения пакета Simulink уже приводился в уроке 4. Предшествующая версия пакета достаточно подробно описана в книгах. Основным нововведением является обработка матричных сигналов. Добавлены отдельные пакеты повышения производительности Simulink, такие как Simulink Accelerator для компиляции кода моделей, Simulink profiler для анализа кода и т. д.

Рис. 23.1. Пример моделирования системы гидравлического цилиндра с помощью расширения Simulink

 

1.gif

Изображение: 

1b.gif

Изображение: 

4. Real Time Windows Target и Workshop

 

Real Time Windows Target и Workshop

Подключающаяся к Simulink мощная подсистема имитационного моделирования в реальном масштабе времени (при наличии дополнительных аппаратных средств в виде плат расширения компьютера), представленная пакетами расширения Real Time Windows Target и Workshop, — мощное средство управления реальными объектами и системами. Кроме того, эти расширения позволяют создавать исполняемые коды моделей. Рис. 4.21 в уроке 4 показывает пример такого моделирования для системы, описываемой нелинейными дифференциальными уравнениями Ван-дер-Поля. Достоинством такого моделирования является его математическая и физическая наглядность. В компонентах моделей Simulink можно задавать не только фиксированные параметры, но и математические соотношения, описывающие поведение моделей.

 

5. Report Generator для MATLAB и Simulink

 

Report Generator для MATLAB и Simulink

Генераторы отчетов — средство, введенное еще в MATLAB 5.3.1, дает информацию о работе системы MATLAB и пакета расширения Simulink. Это средство очень полезно при отладке сложных вычислительных алгоритмов или при моделировании сложных систем. Генераторы отчетов запускаются командой Report. Отчеты могут быть представлены в виде программ и редактироваться.

Генераторы отчетов могут запускать входящие в отчеты команды и фрагменты программ и позволяют проконтролировать поведение сложных вычислений.

 

6. Neural Networks Toolbox

 

Neural Networks Toolbox

Пакет прикладных программ, содержащих средства для построения нейронных сетей, базирующихся на поведении математического аналога нейрона. Па-кет обеспечивает эффективную поддержку проектирования, обучения и моделирования множества известных сетевых парадигм, от базовых моделей персептрона до самых современных ассоциативных и самоорганизующихся сетей. Пакет может быть использован для исследования и применения нейронных сетей к таким задачам, как обработка сигналов, нелинейное управление и финансовое моделирование. Обеспечена возможность генерации переносимого С-кода с помощью Real Time Workshop.

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

Для управляемых сетей можно выбрать прямую или рекуррентную архитектуру, используя множество обучающих правил и методов проектирования, таких как персептрон, обратное распространение, обратное распространение Левенберга, сети с радиальным базисом и рекуррентные сети. Вы можете легко изменять любые архитектуры, обучающие правила или переходные функции, добавлять новые, — и все это без написания единой строки на Си или ФОРТРАН. Пример применения пакета для распознавания образа буквы приводился в уроке 4. Детальное описание предшествующей версии пакета можно найти в книге.

 

7. Fuzzy Logic Toolbox

 

Fuzzy Logic Toolbox

Пакет прикладных программ Fuzzy Logic относится к теории нечетких (размытых) множеств. Обеспечивается поддержка современных методов нечеткой кластеризации и адаптивных нечетких нейронных сетей. Графические средства пакета позволяют интерактивно отслеживать особенности поведения системы.

Основные возможности пакета:

  • определение переменных, нечетких правил и функций принадлежности;
  • интерактивный просмотр нечеткого логического вывода;
  • современные методы: адаптивный нечеткий вывод с использованием нейронных сетей, нечеткая кластеризация;
  • интерактивное динамическое моделирование в Simulink;
  • генерация переносимого Си кода с помощью Real-Time Workshop.

Этот пример наглядно показывает отличия в поведении модели при учете нечеткой логики и без такого учета. 

 

8. Symbolic Math Toolbox

 

Symbolic Math Toolbox

Пакет прикладных программ, дающих системе MATLAB принципиально новые возможности — возможности решения задач в символьном (аналитическом) виде, включая реализацию точной арифметики произвольной разрядности. Пакет базируется на применении ядра символьной математики одной из самых мощных систем компьютерной алгебры — Maple V R4. Обеспечивает выполнение символьного дифференцирования и интегрирования, вычисление сумм и произведений, разложение в ряды Тейлора и Маклорена, операции со степенными многочленами (полиномами), вычисление корней полиномов, решение в аналитическом виде нелинейных уравнений, всевозможные символьные преобразования, подстановки и многое другое. Имеет команды прямого доступа к ядру системы Maple V.

Пакет позволяет готовить процедуры с синтаксисом языка программирования системы Maple V R4 и устанавливать их в системе MATLAB. К сожалению, по возможностям символьной математики пакет сильно уступает специализированным системам компьютерной алгебры, таким как новейшие версии Maple и Mathematica.

 

9. Пакеты математических вычислений

 

Пакеты математических вычислений

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

 

10. NAG Foundation Toolbox

 

NAG Foundation Toolbox

Одна из самых мощных библиотек математических функций, созданная специальной группой The Numerical Algorithms Group, Ltd. Пакет содержит сотни новых функций. Названия функций и синтаксис их вызова заимствованы из известной библиотеки NAG Foundation Library. Вследствие этого опытные пользователи NAG ФОРТРАН могут без затруднений работать с пакетом NAG в MATLAB. Библиотека NAG Foundation предоставляет свои функции в виде объектных кодов и соответствующих m-файлов для их вызова. Пользователь может легко модифицировать эти МЕХ-файлы на уровне исходного кода.

Пакет обеспечивает следующие возможности:

  •  корни многочленов и модифицированный метод Лагерра;

  • вычисление суммы ряда: дискретное и эрмитово-дискретное преобразование Фурье;

  • обыкновенные дифференциальные уравнения: методы Адамса и Рунге-Кутта; 

  •  уравнения в частных производных; 

  •  интерполяция;

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

  • аппроксимация кривых и поверхностей: полиномы, кубические сплайны, полиномы Чебышева;

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

  • разложение матриц;

  •  решение систем линейных уравнений;

  • линейные уравнения (LAPACK);

  • статистические расчеты, включая описательную статистику и распределения вероятностей;

  • корреляционный и регрессионный анализ: линейные, многомерные и обобщенные линейные модели;

  • многомерные методы: главных компонент, ортогональные вращения;

  • генерация случайных чисел: нормальное распределение, распределения Пуассона, Вейбулла и Кощи;

  • непараметрические статистики: Фридмана, Крускала-Уоллиса, Манна-Уитни; О временные ряды: одномерные и многомерные;

  • аппроксимации специальных функций: интегральная экспонента, гамма-функция, функции Бесселя и Ганкеля.

Наконец, этот пакет позволяет пользователю создавать программы на ФОРТРАН, которые динамически линкуются с MATLAB.

 

11. Spline Toolbox

 

Spline Toolbox

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

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

Пакет Spline оснащен программами работы с В-сплайнами, описанными в работе «A Practical Guide to Splines» Карлом Дебуром, создателем сплайнов и автором пакета Spline. Функции пакета в сочетании с языком MATLAB и подробным руководством пользователя облегчают понимание сплайнов и их эффективное применение к решению разнообразных задач.

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

 

12. Statistics Toolbox

 

Statistics Toolbox

Пакет прикладных программ по статистике, резко расширяющий возможности системы MATLAB в области реализации статистических вычислений и статистической обработки данных. Содержит весьма представительный набор средств генерации случайных чисел, векторов, матриц и массивов с различными законами распределения, а также множество статистических функций. Следует отметить, что наиболее распространенные статистические функции входят в состав ядра системы MATLAB (в том числе функции генерации случайных данных с равномерным и нормальным распределением). Основные возможности пакета:

  • описательная статистика;

  • распределения вероятностей;

  • оценка параметров и аппроксимация;

  • проверка гипотез;

  • множественная регрессия;

  • интерактивная пошаговая регрессия;

  • моделирование Монте-Карло;

  • аппроксимация на интервалах;

  • статистическое управление процессами;

  • планирование эксперимента;

  • моделирование поверхности отклика;

  • аппроксимация нелинейной модели;

  • анализ главных компонент;

  • статистические графики;

  • графический интерфейс пользователя.

Пакет включает 20 различных распределений вероятностей, включая t (Стъюдента), F и Хи-квадрат. Подбор параметров, графическое отображение распределений и способ вычисления лучших аппроксимаций предоставляются для всех типов распределений. Предусмотрено множество интерактивных инструментов для динамической визуализации и анализа данных. Имеются специализированные интерфейсы для моделирования поверхности отклика, визуализации распределений, генерации случайных чисел и линий уровня. 

 

13. Optimization Toolbox

 

Optimization Toolbox

Пакет прикладных задач- для решения оптимизационных задач и систем нелинейных уравнений. Поддерживает основные методы оптимизации функций ряда переменных:

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

  • метод наименьших квадратов и нелинейная интерполяция;

  • решение нелинейных уравнений;

  • линейное программирование;

  • квадратичное программирование;

  • условная минимизация нелинейных функций;

  • метод минимакса;

  • многокритериальная оптимизация.

Разнообразные примеры демонстрируют эффективное применение функций пакета. С их помощью можно также сравнить, как одна и та же задача решается разными методами.

 

14. Partial Differential Equations Toolbox

 

Partial Differential Equations Toolbox

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

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

  • автоматический и адаптивный выбор сетки; 

  • задание граничных условий: Дирихле, Неймана и смешанных; 

  • гибкая постановка задачи с использованием синтаксиса MATLAB; 

  • полностью автоматическое сеточное разбиение и выбор величины конечных элементов;

  • нелинейные и адаптивные расчетные схемы;

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

Пакет интуитивно следует шести шагам решения PDE с помощью метода конечных элементов. Эти шаги и соответствующие режимы пакета таковы: определение геометрии (режим рисования), задание граничных условий (режим граничных условий), выбор коэффициентов, определяющих задачу (режим PDE), дисркре-тизация конечных элементов (режим сетки), задание начальных условий и решение уравнений (режим решения), последующая обработка решения (режим графика).

 

15. Пакеты анализа и синтеза систем управления

 

Пакеты анализа и синтеза систем управления

Control System Toolbox

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

  • полный набор средств для анализа MIMO-систем (множество входов — множество выходов) систем;

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

  • частотные характеристики: диаграммы Боде, Николса, Найквиста и др.;

  • разработка обратных связей;

  • проектирование LQR/LQE-регуляторов;

  • характеристики моделей: управляемость, наблюдаемость, понижение порядка моделей;

  • поддержка систем с запаздыванием.

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

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

Пакет Control System содержит средства для выбора параметров обратной связи. Среди традиционных методов: анализ особых точек, определение коэффициента усиления и затухания. Среди современных методов: линейно-квадратичное регулирование и др. Пакет Control System включает большое количество алгоритмов для проектирования и анализа систем управления. Кроме того, он обладает настраиваемым окружением и позволяет создавать свои собственные m-файлы. 

 

16. Nonlinear Control Design Toolbox

 

Nonlinear Control Design Toolbox

Nonlinear Control Design (NCD) Blockset реализует- метод динамической оптимизации для проектирования систем управления. Этот инструмент, разработанный для использования с Simulink, автоматически настраивает системные параметры, основываясь на определенных пользователем ограничениях на временные характеристики.

Пакет использует перенос объектов мышью для изменения временных ограничений прямо на графиках, что позволяет легко настраивать переменные и указывать неопределенные параметры, обеспечивает интерактивную оптимизацию, реализует моделирование методом Монте-Карло, поддерживает проектирование SISO- (один вход — один выход) и MIMO-систем управления, позволяет моделировать подавление помех, слежение и другие типы откликов, поддерживает проблемы повторяющегося параметра и задачи управления системами с запаздыванием, позволяет осуществлять выбор между удовлетворенными и недостижимыми ограничениями.

 

17. Robust Control Toolbox

 

Robust Control Toolbox

Пакет Robust Control включает средства для проектирования и анализа многопараметрических устойчивых систем управления. Это системы с ошибками моделирования, динамика которых известна не полностью или параметры которых могут изменяться в ходе моделирования. Мощные алгоритмы пакета позволяют выполнять сложные вычисления с учетом изменения множества параметров. Возможности пакета:

  • синтез LQG-регуляторов на основе минимизации равномерной и интегральной нормы;

  • многопараметрический частотный отклик;

  • построение модели пространства состояний;

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

  • понижение порядка модели;

  • спектральная факторизация.

Пакет Robust Control базируется на функциях пакета Control System, одновременно предоставляя усовершенствованный набор алгоритмов для проектирования систем управления. Пакет обеспечивает переход между современной теорией управления и практическими приложениями. Он имеет множество функций, реализующих современные методы проектирования и анализа многопараметрических робастных регуляторов.

Проявления неопределенностей, нарушающих устойчивость систем, многообразны — шумы и возмущения в сигналах, неточность модели передаточной функции, немоделируемая нелинейная динамика. Пакет Robust Control позволяет оценить многопараметрическую границу устойчивости при различных неопределенностях. Среди используемых методов: алгоритм Перрона, анализ особенностей передаточных функций и др.

Пакет Robust Control обеспечивает различные методы проектирования обратных связей, среди которых: LQR, LQG, LQG/LTR и др. Необходимость понижения порядка модели возникает в нескольких случаях: понижение порядка объекта, понижение порядка регулятора, моделирование больших систем. Качественная процедура понижения порядка модели должна быть численно устойчива. Процедуры, включенные в пакет Robust Control, успешно справляются с этой задачей.

 

18. Model Predictive Control Toolbox

 

Model Predictive Control Toolbox

Пакет Model Predictive Control содержит полный набор средств для реализации стратегии предиктивного (упреждающего) управления. Эта стратегия была разработана для решения практических задач управления сложными многоканальными процессами при наличии ограничений на переменные состояния и управление. Методы предикативного управления используются в химической промышленности и для управления другими непрерывными процессами. Пакет обеспечивает:

  • моделирование, идентификацию и диагностику систем; 

  • поддержку MISO (много входов — один выход), MIMO, переходных характеристик, моделей пространства состояний;

  • системный анализ;

  • конвертирование моделей в различные формы представления (пространство состояний, передаточные функции);

  • предоставление учебников и демонстрационных примеров.

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

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

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

 

19. мю - Analysis and Synthesis

 

(Мю)-Analysis and Synthesis

Пакет p-Analysis and Synthesis содержит функции для проектирования устойчивых систем управления. Пакет использует оптимизацию в равномерной норме и сингулярный параметр и. В этот пакет включен графический интерфейс для упрощения операций с блоками при проектировании оптимальных регуляторов. Свойства пакета:

  • проектирование регуляторов, оптимальных в равномерной и интегральной норме;
  • оценка действительного и комплексного сингулярного параметра мю;
  • D-K-итерации для приближенного мю -синтеза;

  • графический интерфейс для анализа отклика замкнутого контура;

  • средства понижения порядка модели;

  • непосредственное связывание отдельных блоков больших систем.

Модель пространства состояний может быть создана и проанализирована на основе системных матриц. Пакет поддерживает работу с непрерывными и дискретными моделями. Пакет обладает полноценным графическим интерфейсом, включающим в себя: возможность устанавливать диапазон вводимых данных, специальное окно для редактирования свойств D-K итераций и графическое представление частотных характеристик. Имеет функции для матричного сложения, умножения, различных преобразований и других операций над матрицами. Обеспечивает возможность понижения порядка моделей.

 

20. Stateflow

 

Stateflow

Stateflow — пакет моделирования событийно-управляемых систем, основанный на теории конечных автоматов. Этот пакет предназначен для использования вместе с пакетом моделирования динамических систем Simulink. В любую Simulink-мо-дель можно вставить Stateflow-диаграмму (или SF-диаграмму), которая будет отражать поведение компонентов объекта (или системы) моделирования. SF-диаграмма является анимационной. По ее выделяющимся цветом блокам и связям можно проследить все стадии работы моделируемой системы или устройства и поставить ее работу в зависимость от тех или иных событий. Рис. 23.6 иллюстрирует моделирование поведения автомобиля при возникновении чрезвычайного обстоятельства на дороге. Под моделью автомобиля видна SF-диаграмма (точнее, один кадр ее работы).

Для создания SF-диаграмм пакет имеет удобный и простой редактор, а также средства пользовательского интерфейса.

 

21. Quantitative Feedback Theory Toolbox

 

Quantitative Feedback Theory Toolbox

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

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

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

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

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

  • разрешение неопределенности в параметрах объекта с использованием параметрических и непараметрических моделей или комбинации этих типов моделей.

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

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

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

 

22. LMI Control Toolbox

 

LMI Control Toolbox

Пакет LMI (Linear Matrix Inequality) Control обеспечивает интегрированную среду для постановки и решения задач линейного программирования. Предназначенный первоначально для проектирования систем управления пакет позволяет решать любые задачи линейного программирования практически в любой сфере деятельности, где такие задачи возникают. Основные возможности пакета:

  • решение задач линейного программирования: задачи совместности ограничений, минимизация линейных целей при наличии линейных ограничений, минимизация собственных значений;

  • исследование задач линейного программирования;

  • графический редактор задач линейного программирования;

  • задание ограничений в символьном виде;

  • многокритериальное проектирование регуляторов;

  • проверка устойчивости: квадратичная устойчивость линейных систем, устойчивость по Ляпунову, проверка критерия Попова для нелинейных систем.

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

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

Пакет является мощным средством для решения выпуклых задач оптимизации, возникающих в таких областях, как управление, идентификация, фильтрация,' структурное проектирование, теория графов, интерполяция и линейная алгебра. Пакет LMI Control включает два вида графического интерфейса пользователя: редактор задачи линейного программирования (LMI Editor) и интерфейс Magshape. LMI Editor позволяет задавать ограничения в символьном виде, a Magshape обеспечивает пользователя удобными средствами работы с пакетом.

 

23. Пакеты идентификации систем

 

Пакеты идентификации систем

System Identification Toolbox

Пакет System Identification содержит средства для создания математических моделей динамических систем на основе наблюдаемых входных и выходных данных. Он имеет гибкий графический интерфейс, помогающий организовать данные и создавать модели. Методы идентификации, входящие в пакет, применимы для решения широкого класса задач, от проектирования систем управления и обработки сигналов до анализа временных рядов и вибрации. Основные свойства пакета:

  • простой и гибкий интерфейс;

  • предварительная обработка данных, включая предварительную фильтрацию, удаление трендов и смещений; О выбор диапазона данных для анализа; 

  • методы авторегрессии;

  • анализ отклика во временной и частотной области; 

  • отображение нулей и полюсов передаточной функции системы; 

  • анализ невязок при тестировании модели; 

  • построение сложных диаграмм, таких как диаграмма Найквиста и др.

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

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

Начав с измерения выхода и входа, можно создать параметрическую модель системы, описывающую ее поведение в динамике. Пакет поддерживает все традиционные структуры моделей, включая авторегрессию, структуру Бокса-Дженкинса и др. Он поддерживает линейные модели пространства состояний, которые могут быть определены как в дискретном, так и в непрерывном пространстве. Эти модели могут включать произвольное число входов и выходов. В пакет включены функции, которые можно использовать как тестовые данные для идентифицированных моделей. Идентификация линейных моделей широко используется при проектировании систем управления, когда требуется создать модель объекта. В задачах обработки сигналов модели могут быть использованы для адаптивной обработки сигналов. Методы идентификации успешно применяются и для финансовых приложений.

 

24. Frequency Domain System Identification Toolbox

 

Frequency Domain System Identification Toolbox

Пакет Frequency Domain System Identification предоставляет специализированные средства для идентификации линейных динамических систем по их временному или частотному отклику. Частотные методы направлены на идентификацию непрерывных систем, что является мощным дополнением к более традиционной дискретной методике. Методы пакета могут быть применены к таким задачам, как моделирование электрических, механических и акустических систем. Свойства пакета:

  • периодические возмущения, пик-фактор, оптимальный спектр, псевдослучайные и дискретные двоичные последовательности;

  • расчет доверительных интервалов амплитуды и фазы, нулей и полюсов;

  • идентификация непрерывных и дискретных систем с неизвестным запаздыванием;

  • диагностика модели, включая моделирование и вычисление невязок;

  • преобразование моделей в формат System Identification Toolbox и обратно.

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

 

25. Дополнительные пакеты расширения MATLAB

 

Дополнительные пакеты расширения MATLAB

Communications Toolbox

Пакет прикладных программ для построения и моделирования разнообразных телекоммуникационных устройств: цифровых линий связи, модемов, преобразователей сигналов и др. Имеет богатейший набор моделей самых различных устройств связи и телекоммуникаций. Содержит ряд интересных примеров моделирования коммуникационных средств, например модема, работающего по протоколу v34, модулятора для обеспечения однополосной модуляции и др.

 

26. Digital Signal Processing (DSP) Blockset

 

Digital Signal Processing (DSP) Blockset

Пакет прикладных программ для проектирования устройств, использующих процессоры цифровой обработки сигналов. Это прежде всего высокоэффективные цифровые фильтры с заданной или адаптируемой к параметрам сигналов частотной характеристикой (АЧХ). Результаты моделирования и проектирования цифровых устройств с помощью этого пакета могут использоваться для построения высокоэффективных цифровых фильтров на современных микропроцессорах цифровой обработки сигналов.

 

27. Fixed-Point Blockset

 

Fixed-Point Blockset

Этот специальный пакет ориентирован на моделирование цифровых систем управления и цифровых фильтров в составе пакета Simulink. Специальный набор компонентов позволяет быстро переключаться между вычислениями с фиксированной и плавающей запятой (точкой). Можно указывать 8-, 16- или 32-битовую длину слова. Пакет обладает рядом полезных свойств:

  • применение беззнаковой или двоичной арифметики;

  • выбор пользователем положения двоичной точки;

  • автоматическая установка положения двоичной точки;

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

  • переключение между вычислениями с фиксированной и плавающей точкой;

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

 

28. Пакеты для обработки сигналов и изображений

 

Пакеты для обработки сигналов и изображений

Signal Processing Toolbox

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

Пакет Signal Processing обеспечивает чрезвычайно обширные возможности создания программ обработки сигналов для современных научных и технических приложений. В пакете используется разнообразная техника фильтрации и новейшие алгоритмы спектрального анализа. Пакет содержит модули для разработки линейных систем и анализа временных рядов. Пакет будет полезен, в частности, в таких областях, как обработка аудио- и видеоинформации, телекоммуникации, геофизика, задачи управления в реальном режиме времени, экономика, финансы и медицина. Основные свойства пакета:

  • моделирование сигналов и линейных систем;

  • проектирование, анализ и реализация цифровых и аналоговых фильтров;

  • быстрое преобразование Фурье, дискретное косинусное и другие преобразования;

  • оценка спектров и статистическая обработка сигналов;

  • параметрическая обработка временных рядов;

  • генерация сигналов различной формы.

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

Пакет Signal Processing включает полный набор методов для создания цифровых фильтров с разнообразными характеристиками. Он позволяет быстро разрабатывать фильтры верхних и нижних частот, полосовые пропускающие и задерживающие фильтры, многополосные фильтры, в том числе фильтры Чебышева, Юла-Уолкера, эллиптические и др.

Графический интерфейс позволяет проектировать фильтры, задавая требования к ним в режиме переноса объектов мышью. В пакет включены следующие новые методы проектирования фильтров:

  • обобщенный метод Чебышева для создания фильтров с нелинейной фазовой характеристикой, комплексными коэффициентами или произвольным откликом. Алгоритм разработан Макленаном и Карамом в 1995 г.;

  • метод наименьших квадратов с ограничениями позволяет пользователю явно контролировать максимальную ошибку (сглаживание);

  • метод расчета минимального порядка фильтра с окном Кайзера;

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

Основанный на оптимальном алгоритме быстрого преобразования Фурье пакет Signal Processing обладает непревзойденными характеристиками для частотного анализа и спектральных оценок. Пакет включает функции для вычисления дискретного преобразования Фурье, дискретного косинусного преобразования, преобразования Гильберта и других преобразований, часто применяемых для анализа, кодирования и фильтрации. В пакете реализованы такие методы спектрального анализа как метод Вельха, метод максимальной энтропии и др.

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

Пакет Signal Processing является основой для решения многих других задач. Например, комбинируя его с пакетом Image Processing, можно обрабатывать и анализировать двумерные сигналы и изображения. В паре с пакетом System Identification пакет Signal Processing позволяет выполнять параметрическое моделирование систем во временной области. В сочетании с пакетами Neural Network и Fuzzy Logic может быть создано множество средств для обработки данных или выделения классификационных характеристик. Средство генерации сигналов позволяет создавать импульсные сигналы различной формы.

 

29. Higher-Order Spectral Analysis Toolbox

 

Higher-Order Spectral Analysis Toolbox

Пакет Higher-Order Spectral Analysis содержит специальные алгоритмы для анализа сигналов с использованием моментов высшего порядка. Пакет предоставляет широкие возможности для анализа негауссовых сигналов, так как содержит алгоритмы, пожалуй, самых передовых методов для анализа и обработки сигналов. Основные возможности пакета:

  • оценка спектров высокого порядка;

  • традиционный или параметрический подход;

  • восстановление амплитуды и фазы;

  • адаптивное линейное прогнозирование;

  • восстановление гармоник;

  • оценка запаздывания;

  • блочная обработка сигналов.

Пакет Higher-Order Spectral Analysis позволяет анализировать сигналы, поврежденные негауссовым шумом, и процессы, происходящие в нелинейных системах. Спектры высокого порядка, определяемые в терминах моментов высокого порядка сигнала, содержат дополнительную информацию, которую невозможно получить, пользуясь только анализом автокорреляции или спектра мощности сигнала. Спектры высокого порядка позволяют:

  • подавить аддитивный цветной гауссов шум;

  • идентифицировать неминимально-фазовые сигналы;

  • выделить информацию, обусловленную негауссовым характером шума;

  • обнаружить и проанализировать нелинейные свойства сигналов.

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

 

30. Image Processing Toolbox

 

Image Processing Toolbox

Пакет Image Processing предоставляет ученым, инженерам и даже художникам широкий спектр средств для цифровой обработки и анализа изображений. Будучи тесно связанным со средой разработки приложений MATLAB, пакет Image Processing Toolbox освобождает вас от выполнения длительных операций кодирования и отладки алгоритмов, позволяя сосредоточить усилия на решении основной научной или практической задачи. Основные свойства пакета:

  • восстановление и выделение деталей изображений;

  • работа с выделенным участком изображения;

  • анализ изображения;

  • линейная фильтрация;

  • преобразование изображений;

  • геометрические преобразования;

  • увеличение контрастности важных деталей;

  • бинарные преобразования;

  • обработка изображений и статистика;

  • цветовые преобразования;

  • изменение палитры;

  • преобразование типов изображений.

Пакет Image Processing дает широкие возможности для создания и анализа графических изображений в среде MATLAB. Этот пакет обеспечивает чрезвычайно гибкий интерфейс, позволяющий манипулировать изображениями, интерактивно разрабатывать графические картины, визуализировать наборы данных и аннотировать результаты для технических описаний, докладов и публикаций. Гибкость, соединение алгоритмов пакета с такой особенностью MATLAB, как матрично-векторное описание делают пакет очень удачно приспособленным для решения практически любых задач по разработке и представлению графики. Примеры применения этого пакета в среде системы MATLAB были даны в уроке 7. В MATLAB входят специально разработанные процедуры, позволяющие повысить эффективность графической оболочки. Можно отметить, в частности, такие особенности:

  • интерактивная отладка при разработке графики;

  • профилировщик для оптимизации времени выполнения алгоритма;

  • средства построения интерактивного графического интерфейса пользователя (GUI Builder) для ускорения разработки GUI-шаблонов, позволяющие настраивать его под задачи пользователя.

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

MATLAB и пакет Image Processing максимально приспособлены для развития, внедрения новых идей и методов пользователя. Для этого имеется набор сопрягаемых пакетов, направленных на решение всевозможных специфических задач и задач в нетрадиционной постановке.

Пакет Image Processing в настоящее время интенсивно используется в более чем 4000 компаниях и университетах по всему миру. При этом имеется очень широкий круг задач, которые пользователи решают с помощью данного пакета, например космические исследования, военные разработки, астрономия, медицина, биология, робототехника, материаловедение, генетика и т. д.

 

31. Wavelet Toolbox

 

Wavelet Toolbox

Пакет Wavelet предоставляет пользователю полный набор программ для исследования многомерных нестационарных явлений с помощью вейвлетов (коротких волновых пакетов). Сравнительно недавно созданные методы пакета Wavelet расширяют возможности пользователя в тех областях, где обычно применяется техника Фурье-разложения. Пакет может быть полезен для таких приложений, как обработка речи и аудиосигналов, телекоммуникации, геофизика, финансы и медицина. Основные свойства пакета:

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

  • преобразование многомерных непрерывных сигналов;

  • дискретное преобразование сигналов;

  • декомпозиция и анализ сигналов и изображений;

  • широкий выбор базисных функций, включая коррекцию граничных эффектов;

  • пакетная обработка сигналов и изображений;

  • анализ пакетов сигналов, основанный на энтропии;

  • фильтрация с возможностью установления жестких и нежестких порогов;

  • оптимальное сжатие сигналов.

Пользуясь пакетом, можно анализировать такие особенности, которые упускают другие методы анализа сигналов, т. е. тренды, выбросы, разрывы в производных высоких порядков. Пакет позволяет сжимать и фильтровать сигналы без явных потерь даже в тех случаях, когда нужно сохранить и высоко- и низкочастотные компоненты сигнала. Имеются алгоритмы сжатия и фильтрации и для пакетной обработки сигналов. Программы сжатия выделяют минимальное число коэффициентов, представляющих исходную информацию наиболее точно, что очень важно для последующих стадий работы системы сжатия. В пакет включены следующие базисные наборы вейвлетов: биортогональный, Хаара, «Мексиканская шляпа», Майера и др. Вы также можете добавить в пакет свои собственные базисы.

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

 

32. Прочие пакеты прикладных программ

 

Прочие пакеты прикладных программ

Financial Toolbox

Довольно актуальный для нашего периода рыночных реформ пакет прикладных программ по финансово-экономическим расчетам. Содержит множество функций по расчету сложных процентов, операций по банковским вкладам, вычисления прибыли и многое другое. К сожалению, из за многочисленных (хотя, в общем-то, не слишком принципиальных) различий в финансово-экономических формулах его применение в наших условиях не всегда разумно — есть множество отечественных программ для таких расчетов, — например «Бухгалтерия 1C». Но если вы хотите подключиться к базам данных агентств финансовых новостей — Bloom-berg, IDC через пакет Datafeed Toolbox MATLAB, то, конечно, обязательно пользуйтесь и финансовыми пакетами расширения MATLAB.

Пакет Financial является основой для решения в MATLAB множества финансовых задач, от простых вычислений до полномасштабных распределенных приложений. Пакет Financial может быть использован для расчета процентных ставок и прибыли, анализа производных доходов и депозитов, оптимизации портфеля инвестиций. Основные возможности пакета:

  • обработка данных;

  • дисперсионный анализ эффективности портфеля инвестиций;

  • анализ временных рядов;

  • расчет доходности ценных бумаг и оценка курсов;

  • статистический анализ и анализ чувствительности рынка;

  • калькуляция ежегодного дохода и расчет денежных потоков;

  • методы начисления износа и амортизационных отчислений.

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

Алгоритмы пакета Financial для расчета показателей движения денежных средств и других данных, отражаемых в финансовых счетах, позволяют вычислять, в частности, процентные ставки по займам и кредитам, коэффициенты рентабельности, кредитные поступления и итоговые начисления, оценивать и прогнозировать стоимость инвестиционного портфеля, вычислять показатели износа и т. п. Функции пакета могут быть использованы с учетом положительного и отрицательного денежных потоков (cash-flow) (превышения денежных поступлений над платежами или денежных выплат над поступлениями соответственно).

Пакет Financial содержит алгоритмы, которые позволяют анализировать портфель инвестиций, динамику и экономические коэффициенты чувствительности. В частности, при определении эффективности инвестиций функции пакета позволяют сформировать портфель, удовлетворяющий классической задаче Г. Марковица. Пользователь может комбинировать алгоритмы пакета для вычисления коэффициентов Шарпе и ставок дохода. Анализ динамики и экономических коэффициентов чувствительности позволяет пользователю определить позиции для стреддл-сделок, хеджирования и сделок с фиксированными ставками. Пакет Financial обеспечивает также обширные возможности для представления и презентации данных и результатов в виде традиционных для экономической и финансовой сфер деятельности графиков и диаграмм. Денежные средства могут по желанию пользователя отображаться в десятичном, банковском и процентном форматах.

 

33. Mapping Toolbox

 

Mapping Toolbox

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

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

  • более 60 проекций карт (прямые и инверсные);

  • проектирование и отображение векторных, матричных и составных карт; 

  • графический интерфейс для построения и обработки карт и данных;

  • глобальные и региональные атласы данных и сопряжение с правительственными данными высокого разрешения; 

  • функции географической статистики и навигации;

  • трехмерное представление карт со встроенными средствами подсветки и затенения;

  • конвертеры для популярных форматов географических данных: DCW, TIGER, ЕТОРО5.

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

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

Наиболее широко известные атласы мира, Соединенных Штатов, астрономические атласы входят в состав пакета. Географическая структура данных упрощает извлечение и обработку данных из атласов и карт. Географическая структура данных и функции взаимодействия с внешними географическими данными форматов Digital Chart of the World (DCW), TIGER, TBASE и ЕТОРО5 собраны воедино, чтобы обеспечить мощный и гибкий инструмент для доступа к уже существующим и будущим географическим базам данных. Тщательный анализ географических данных часто требует математических методов, работающих в сферической системе координат. Пакет Mapping снабжен подмножеством географических, статистических и навигационных функций для анализа географических данных. Функции навигации дают широкие возможности для выполнения задач перемещения, таких как позиционирование и планирование маршрутов.

 

34. Power System Blockset

 

Power System Blockset

Пакет моделирования мощных энергетических (в основном электротехнических) систем, таких как линии передачи, силовые ключи, регуляторы напряжения и тока, устройства управления электродвигателями различного типа и нагревательными системами.

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

 

35. Data Acquisition Toolbox и Instrument Control Toolbox

 

Data Acquisition Toolbox и Instrument Control Toolbox

Data Acquisition Toolbox — пакет расширения, относящийся к области сбора данных через блоки, подключаемые к внутренней шине компьютера, функциональных генераторов, анализаторов спектра — словом, приборов, широко используемых в исследовательских целях для получения данных. Они поддержаны соответствующей вычислительной базой. Новый блок Instrument Control Toolbox позволяет подключать приборы и устройства с последовательным интерфейсом и с интерфейсами Канал общего пользования и VXI.

 

36. Database toolbox и Virtual Reality Toolbox

 

Database toolbox и Virtual Reality Toolbox

Более чем в 100 раз повышена скорость работы Database toolbox, при помощи которого осуществляется обмен информацией с целым рядом систем управления базами данных через драйверы ODBC или JDBC:

  • Oracle 7.3.3;

  • Access 95 или 97 Microsoft;

  • Microsoft SQL Server 6.5 или 7.0;

  • Sybase Adaptive Server 11;

  • Sybase (бывший Watcom) SQL Server Anywhere 5.0;

  • IBM DB2 Universal 5.0;

  • Informix 7.2.2;

  • Computer Associates Ingres (все версии).

Все данные предварительно преобразуются в массив ячеек в MATLAB 6.0. В MATLAB 6.1 можно использовать и массив структур. Визуальный конструктор (Visual Query Builder) позволяет составлять сколь угодно сложные запросы на диалектах языка SQL этих баз данных даже без знания SQL. В одном сеансе может быть открыто много неоднородных баз данных.

Пакет Virtual Reality Toolbox доступен начиная с версии MATLAB 6.1. Позволяет осуществлять трехмерную анимацию и мультипликацию, в том числе моделей Simulink. Язык программирования — VRML — язык моделирования виртуальной реальности (Virtual Reality Modeling Language). Просмотр анимации возможен с любого компьютера, оснащенного браузером с поддержкой VRML. Подтверждает, что математика — наука о количественных соотношениях и пространственных формах любых действительных или виртуальных миров.

 

37. Excel Link

 

Excel Link

Позволяет использовать Microsoft Excel 97 как процессор ввода-вывода MATLAB. Для этого достаточно установить в Excel как add-in функцию поставляемый Math Works файл excllinkxla. В Excel нужно набрать Сервис > Надстройки > Обзор, выбрать файл в каталоге \matlabrl2\toolbox\exlink и установить его. Теперь при каждом запуске Excel появится командное окно MATLAB, а панель управления Excel дополнится кнопками getmatrix, putmatrix, evalstring. Для закрытия MATLAB из Excel достаточно набрать =MLC1ose() в любой ячейке Excel. Для открытия после выполнения этой команды нужно либо щелкнуть мышью на одной из кнопок getmatrix, putmatrix, evalstring, либо набрать в Excel Сервис > Макрос >Выполнить mat! abi ni t. Выделив мышью диапазон ячеек Excel, вы можете щелкнуть на getmatrix и набрать имя переменной MATLAB. Матрица появится в Excel. Заполнив числами диапазон ячеек Excel, вы можете выделить этот диапазон, щелкнуть на putmatrix и ввести имя переменной MATLAB. Работа, таким образом, интуитивно понятна. В отличие от MATLAB Excel Link не чувствителен к регистру: I и i, J и j равноценны.

 

38. MATLAB Compiler

 

MATLAB Compiler

Компилятор для программ, создаваемых на языке программирования системы MATLAB. Транслирует коды этих программ в программы на языке Си++. Применение компилятора обеспечивает возможность создания исполняемых кодов (полностью законченных программ), время выполнения которых для программ с большим числом циклических операций уменьшается в 10-15 раз. Может интегрироваться в среду Microsoft Visual Studio и использоваться вместе с Visual C++. Помимо него вы можете использовать и другие компиляторы Си++. 

 

39. Что нового мы узнали?

 

Что нового мы узнали?

В этом уроке мы научились:

  • Выводить список пакетов расширения системы MATLAB.

  • Вызывать демонстрационные примеры пакетов расширения.

 

Приложение

 

Приложение

Поддержка  средств Java в MATLAB 6

Язык программирования Java обычно непосредственно не используется для поддержки математических вычислений в системе MATLAB. Однако этот перспективный язык высокого уровня входит в состав ядра системы и широко применяется для создания средств интерфейса и средств Интернета. Поэтому в новых версиях MATLAB 6.0/6.1 существенно расширена поддержка средств языка Java, который приобрел важное значение для решения задач в области создания электронных и Интернет-документов.

Фактически Java интегрирован в MATLAB и используется для построения его графического интерфейса и справочной системы (наряду с HTML). Кроме того, предусмотрены работа с рядом типов данных, классов и объектов, связанных с Java, и поддержка построенной на Java виртуальной машины. Основной материал по использованию средств языка Java имеется в дополнительном руководстве «MATLAB. External Interfaces. Version 6». Для знакомства с тонкостями программирования на Java рекомендуется обращаться в Интернет-сайт www.javasoft.com, посвященный этому языку. Уточнить версию Java, установленную в системе MATLAB, на вашей компьютерной платформе можно, исполнив команду:

» version -Java ans

Java 1.1.8 from Sun Microsystems Inc.

Вы можете создавать объекты Java в MATLAB с использованием имени класса Java:

» f = java.awt.Frame('My Title')

f =

Java. awt. Frame[f rameO. 0,0, 0x0. i nval i d. hi dden. layout=java. awt. Border-Layout.

resizable.title=my title]

Методы объектов Java могут быть вызваны как с использованием синтаксиса Java, так и с использованием синтаксиса MATLAB:

» setTitle (f. 'new title' ) 

» t = getTitle(f)

t =

new title

Тот же пример с использованием синтаксиса Java:

» f.setTitle ('modify title' )

» t = f.getTitle

t =

modify title

» whos f

Name Size Bytes Class

f1x1 Java.awt.Frame 

Grand total is 1 elements using 0 bytes

Как видно из этого сообщения, в MATLAB поддерживаются Java-классы и Java-объекты.

Для более полного знакомства с возможностями Java в MATLAB можно воспользоваться справочной системой. Правда, в индексном каталоге поиск разделов по имени «Java» к успеху не приводит, но в окне расширенного поиска Search можно найти ряд статей по применению Java.

В окне справки в разделе Calling Java from MATLAB можно найти целый ряд разделов справки, посвященных применению этого языка в системе MATLAB (естественно, на английском языке).

Для получения информации об объектах и методах Java, с которыми может работать MATLAB, нужно исполнить команду:

»methodsview Java.awt.Menultem

Данные окна рис. П2 показывают, что поддержка Java реализована в большом числе объектов и методов системы MATLAB.

При использовании объектов Java пользователь должен учитывать многочисленные отличия в свойствах объектов Java и объектов MATLAB, что ведет к различиям в результатах исполнения многих функций. Например, вот как работает функция определения длины строки в MATLAB:

» s= ' Hellо my friend!'

s =

Hello my friend!

» size(s)

ans =

1 16

Результат означает, что строка s задана как одномерный массив с числом элементов 16. А вот как та же функция работает со строковым массивом Java:

» string=java.lang.Sthng( 'Hello my friend!')

string=

Hello my friend!

» size(string) 

ans = 

1 1

Нетрудно заметить, что отдельные символы в этом случае не рассматриваются как элементы массива, и строка представлена одномерным массивом единичной длины.

» C=char(string)

С=

Hello my friend!

» [m,n]=size(C)

m =

1

 n =

16

 » whos С

Name Size Bytes Class

С 1x16 32 char array Grand total is 16 elements using 32 bytes

Использовав преобразование объекта класса java.lang.string в массив символов MATLAB, мы все-таки подсчитали число символов обычными средствами MATLAB. Но в среде MATLAB мы можем сделать это и средствами Java.

» string.length

ans =

16

Или

» e=java.lang.StringBuffer(string)

e =

Hello my friend!

» e.length

ans =

16

Следующий пример показывает создание Java-структуры многоугольника:

» polygon=java.awt.Polygon([14 42 98 124],[55 12 -2 62].4) 

polygon = 

java.awt.Pol ygon@94067b

Для выявления структуры Java объекта может использоваться функция struct (object), которая преобразует объект в структуру (массив структур) MATLAB с потерей информации о классе.

Пример: .

» struct(string)

ans =

0x0 struct array with fields:» struct(polygon)

ans =

npoints: 4

xpoints: [4x1 int32]

ypoints: [4x1 int32]

Следует отметить, что указание имени объекта с большой буквы (кстати, как это задано в определении класса) ведет к ошибке, поскольку сам объект, преобразуемый в структуру, по правилам MATLAB, где регистр имеет значение, называется

polygon:

» struct(Polygon)

??? Undefined function or variable 'Polygon'.

Эти примеры, и их можно привести множество, свидетельствуют о том, что пользователь, рискнувший применить средства Java в MATLAB на практике, должен хорошо знать как возможности языка Java, так и особенности среды и языка программирования MATLAB. И быть готовым к различным сюрпризам.

Для обычных пользователей системой MATLAB по ее прямому назначению — математические вычисления — большинство возможностей Java представляет ограниченный интерес. Исключением, пожалуй, является работа с такими важными объектами Java, как массивы и классы url. Напомним, что Java-массивы входят в иерархию объектов языка программирования системы MATLAB.

Массивы в Java считаются одномерными (подобными векторам-столбцам MAT-LAB). Однако возможно построение массивов в массивах без ограничения числа уровней вложения. Тем не менее функция ndims MATLAB, если ее входным аргументом является такой «многомерный» массив Java, всегда возвращает 2. Форма таких массивов в общем случае не прямоугольная, т. е. число элементов по рядам и столбцам может различаться. В MATLAB все массивы, кроме массивов Java, могут быть одномерными, двумерными и многомерными. Нумерация элементов Java-массивов в обычных системах программирования на Java идет с нуля. В MATLAB нумерация всех элементов массивов, в том числе и Java-массива (Java-array), начинается с единицы. (База массива равна единице.) Ниже приведен пример задания прямоугольного Java-массива в массиве с числами двойной точности с именем dblArray: dblArray = javaArrayC Java.lang.Double'.3.4);

В следующем фрагменте программы на языке MATLAB с помощью циклов элементам массива присваиваются конкретные значения:

for 1=1:3

for j-l:4 dblArray(i.j) = Java.lang.Double((i*5)+j);

end end

Теперь несложно проверить созданный массив:

dblArray

dblArray =

Java.lang.Double[][]:

[6] [7] 

[11] [12] 

[16] [17]

» dblArray(2.3) 

ans = 

13.0

[ 8] 

[13] 

[18]

[9] 

[14] 

[19]

Из этого примера в целом ясно, что, несмотря на отдельные нюансы, работа с Java-массивами в основном подобна таковой для MATLAB массивов. При этом система MATLAB поддерживает ряд типов преобразований массивов и иных данных из форматов, принятых на языке программирования Java, в форматы MATLAB и наоборот.

 

Самоучитель по Mathematica

Урок 1. Первое знакомство

Урок 1. Первое знакомство

1. Первое знакомство

 

Первое знакомство

  • Зарождение и развитие систем компьютерной алгебры
  • Математические системы Mathematica
  • Структура систем Mathematica и их идеология
  • Отражение Mathematica в сети Интернет
  • Особенности систем компьютерной математики
  • Математические системы в образовании и в науке
  • Диалоге системой и ее входной язык
  • Инсталляция и запуск
  • Прямая работа с CD-ROM
  • Отличительные особенности Mathematica 4

В наши дни многие уже путают компьютерную математику как науку о математических вычислениях и преобразованиях с помощью компьютеров с СКМ Маthematica, созданной фирмой Wolfram Research, Inc. Хотя это и знаменательно само по себе, во избежание такой путаницы мы начнем наш курс с рассказа о том, как зародилась компьютерная математика и как были созданы программные системы компьютерной математики различных классов. Здесь мы также опишем отражение системы Mathematica в мировой сети Интернет.

Для многих неискушенных в математике пользователей не совсем понятно, что делают СКМ, особенно те из них, которые выполняют символьные операции. Поэтому в этом уроке мы впервые познакомимся с особенностями различных систем и оценим их возможности, так сказать, в первом приближении. Некоторые из приведенных примеров лучше повторить в дальнейшем — после изучения основ работы с системой Mathematica. Впрочем, нетерпеливые учащиеся могут попробовать сделать это немедленно! Однако, чтобы запустить систему Mathematica 3 или 4 и начать работу с ней, надо вначале установить систему на жесткий диск вашего ПК. Об этом пойдет речь в конце данного урока.

 

2. Зарождение и развитие систем компьютерной алгебры

 

Зарождение и развитие систем компьютерной алгебры

У истоков рождения систем компьютерной алгебры

Эру создания компьютерной символьной математики принято отсчитывать с начала 60-х годов. Именно тогда в вычислительной технике возникла новая ветвь компьютерной математики, не совсем точно, но зато броско названная компьютерной алгеброй. Речь шла о возможности создания компьютерных систем, способных осуществлять типовые алгебраические преобразования: подстановки в выражениях, упрощение выражений, операции со степенными многочленами (полиномами), решение линейных и нелинейных уравнений и их систем, вычисление их корней и т. д. При этом предполагалась возможность получения аналитических (символьных) результатов везде, где это только возможно.

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

Большинство же пользователей заинтересовано в том, чтобы правильно выполнить конкретные аналитические преобразования, вычислить в символьном виде производную или первообразную заданной функции, разложить ее в ряд Тейлора или Фурье, провести аппроксимацию и т. д., а вовсе не в детальном и сложном математическом и логическом описании того, как это делается компьютером (или, точнее, его программистом). Здесь та же ситуация, что и с телевизором, радиоприемником или факсом: большинство из нас пользуются этими аппаратами, вовсе не интересуясь тем, как именно они выполняют свои довольно сложные функции.

Поняв эту истину, многие западные фирмы приступили к созданию компьютерных систем символьной математики, ориентированных на широкие круги пользователей, не являющихся профессионалами в компьютерной алгебре. Учитывая невероятно большую сложность автоматизации решения задач в аналитическом виде (число математических преобразований и соотношений весьма велико, и некоторые из них неоднозначны в истолковании), первые подобные системы удалось создать лишь для больших ЭВМ. Но затем появились и системы, доступные для мини-ЭВМ. Заметное развитие получили языки программирования для символьных вычислений Reduce, система muMath для малых ЭВМ, а в дальнейшем — интегрированные системы символьной математики для персональных компьютеров: Derive, MathCAD, Mathematica, Maple V и др.

В бывшем СССР большой вклад в развитие систем символьной математики внесла школа покойного академика Глушкова. В конце 70-х годов были созданы малые инженерные ЭВМ класса «Мир», способные выполнять аналитические вычисления даже на аппаратном уровне. Был разработан и успешно применялся язык символьных вычислений «Аналитик». Эти работы отчасти предвосхитили развитие систем символьной математики. К огромному сожалению, они появились слишком рано для своего времени и не соответствовали «генеральной линии» развития советской вычислительной техники в те годы. Уклон в сторону развития больших ЭВМ серии ЕС, навязанный в СССР компьютерными чиновниками, отодвинул компьютеры «Мир» на задний план, а затем этот класс компьютеров просто прекратил свое существование и развитие.

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

Стоимость серийных СКМ все еще чрезмерно велика для большинства наших пользователей. Поэтому не случайно, что (за редчайшим исключением) наши пользователи используют такие системы, распространяемые на CD-ROM сомнительного происхождения. Однако программные продукты на таких CD-ROM поступают без документации, а порой даже в неполном и неполноценном виде, что затрудняет их серьезное применение.

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

 

Системы символьной математики для персональных компьютеров

На Западе решающий скачок в компьютеризации общества произошел с началом массового производства и внедрения ПК. Долгое время их ограниченные возможности не позволяли реализовать на них серьезные системы символьной математики. Но к началу 90-х годов ситуация стала заметно меняться к лучшему. С одной стороны, аппаратные возможности ПК стали резко возрастать по мере быстрой смены поколений микропроцессоров. Тут надо помянуть добрым словом фирму Intel, отстаивающую честь «закона Мура» (одного из своих основателей) и каждый год удваивающую как степень интеграции своих процессоров, так и их производительность. В итоге по скорости счета и объему оперативного запоминающего устройства (ОЗУ) ПК стали обходить «большие» ЭВМ класса ЕС, а сейчас оставили их далеко позади. Это создало реальные предпосылки к развертыванию работ по разработке систем компьютерной алгебры. Впрочем, надо помнить, что разрыв в производительности между новейшими ПК и многопроцессорными суперЭВМ и в наши дни остается поразительно большим!

Многие СКМ пришли в мир ПК из мира больших ЭВМ, таких как суперкомпьютеры Cray (производятся и поныне фирмой Silicon Graphics). В итоге они стали доступными не только представителям научной элиты, вполне познавшим возможности таких систем, но и рядовым пользователям, которые испытывали граничащее с шоком восхищение от созерцания обширных возможностей этих новых систем. Перейти от него к реальному применению СКМ — этому и призвана помочь данная книга.

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

С переводом таких систем на ПК с графическими операционными системами класса Windows с таким подходом пришлось решительно кончать. Более того, превосходная цветная графика высокого разрешения современных ПК, о которой пользователи ЭВМ класса ЕС не могли и мечтать, резко повысила не только роль графического представления данных вычислений, но и привела к слиянию пользовательского интерфейса математических систем с интерфейсом современных графических операционных систем, таких как Windows 3.1/3.11/95/98/NT/2000. Образцом для подражания повсеместно стал интерфейс пользователя массовых офисных программ — Microsoft Office 95/97/2000.

Наибольшую известность получили три класса систем символьной математики: созданная на базе языка искусственного интеллекта Mu Lisp малая система Derive, одна из самых мощных и поныне привлекательных систем Maple V (ядро написано на языке С) и системы Mathematica 1 и 2. Позже на базе ядра системы Maple V символьные вычисления были реализованы в популярных числовых системах Mathcad - версии Mathcad 3.0/4.0/5.0/Plus 5.0/6/0/Plus 6.0/7.0/Plus 7.0/8.0/ 8.0 PRO/2000 PRO/2000 Premium имеют изумительный пользовательский интерфейс и возможности, улучшающиеся от версии к версии. Блок символьной математики на базе ядра Maple V был добавлен и в одну из самых крупных матричных систем — MATLAB.

Система Derive [15,16] и поныне привлекательна своими невзыскательными требованиями к аппаратным ресурсам ПК — это единственная система, которая работает даже на ПК класса IBM PC XT без жесткого диска. Более того, при решении задач умеренной сложности она показала более высокое быстродействие и большую надежность решения, чем первые версии систем Maple V и Mathematica. Впрочем, системе Derive трудно конкурировать с этими системами всерьез — ни по обилию функций и правил аналитических преобразований, ни по возможностям машинной графики и удобству пользовательского интерфейса. Пока Derive обречена на достаточно важную роль учебных систем компьютерной алгебры начального уровня.

Хотя новейшая версия Derive 5 под Windows уже имеет современный интерфейс, он все же во многом уступает изысканному интерфейсу своих маститых конкурентов. А по возможности графической визуализации результатов вычислений Derive все еще далеко отстает от них. То же можно сказать и о новой системе символьной математики MuPAD 1.4.

Система Maple V— патриарх в семействе систем символьной математики. И поныне это весьма привлекательная система для математика-аналитика и научного работника. Даже в среде MS-DOS Maple V имеет неплохой интерфейс и превосходно организованную обширную базу данных помощи. Полнота ядра системы, хранящего более 2700 математических функций (у последней реализации Maple 6 их уже свыше 3000!) и правил их преобразования, вполне заслуживает восторга и большого уважения. Весьма привлекательное свойство этой системы — подробная встроенная помощь и множество примеров ко всем встроенным в нее функциям и прикладным пакетам. Эти примеры легко скопировать в окно редактирования системы и тут же решить.

Достойна восхищения и математическая графика системы Maple, в частности возможность изображения пересекающихся трехмерных фигур с функциональной окраской. Новейшие системы Maple V для Windows (реализации R5 и 6) по возможностям графики стоят на одном уровне с системами Mathematica 3/4. Считается, что они несколько превосходят системы Mathematica в части символьных преобразований, но такое превосходство на сегодня уже является весьма спорным.

К сожалению, фирма Waterloo Maple, Inc. (Канада) - разработчик системы Maple V — больше блистала математической проработкой своего проекта, чем уровнем его коммерческой реализации. В силу этого система Maple V была доступна в основном узкому кругу профессионалов. Сейчас эта фирма работает совместно с более преуспевающей в коммерции и проработке пользовательского интерфейса математических систем фирмой MathSoft, Inc. — создательницей весьма популярных и массовых систем для численных расчетов Mathcad, ставших международным стандартом для технических вычислений. Пока, однако, математические возможности этих систем в области компьютерной алгебры намного уступают системам Maple V, Mathematica 2 и даже малютке Derive (не говоря уже о реализациях Mathematica 3 и 4).

Появление новых версий Mathematica 3 и 4 вновь резко поднимает планку оценки качества систем компьютерной алгебры. Наступает новый этап интеграции математических систем как друг с другом, так и с современными текстовыми и табличными процессорами, такими как Word 95/97 и Excel 95/97 из офисных пакетов Microsoft Office 95/97 (на подходе и Office 2000).

Всяческих похвал заслуживают последние реализации матричных систем MAT-LAB 5.2/5.3, но это очень громоздкая система, последняя реализация которой — MATLAB 5.3.1 - занимает на жестком диске 1500 Мбайт памяти (даже Mathematica 4 требует на порядок меньше места). Система MATLAB создана фирмой Math Works (США).

Сейчас уже ясно, что конкурентоспособные отечественные системы символьной математики у нас, в силу известной экономической ситуации, в обозримом будущем не появятся. Это печальное положение делает особенно актуальным освоение нашими учеными, педагогами и учащимися новейших западных систем компьютерной алгебры. К таковым и относятся системы класса Mathematica — признанные мировые лидеры среди систем символьной математики, ориентированных на персональные компьютеры.

 

3. Математические системы Mathematica

 

Математические системы Mathematica

Системы класса Mathematica 2.x

В 80-е годы возможностями символьной математики увлекся защитивший докторскую диссертацию Стивен Вольфрам (Stephen Wolfram) из США (рис. 1.1). Его интересы были столь серьезны, что он основал фирму Wolfram Research, Inc., приступившую к созданию проекта престижной математической системы Mathe-

matica. Версия Mathematica 1.0 этой системы, появившаяся в 1988 г., уже устарела, и самой известной разработкой фирмы стала версия 2.0 системы Mathematica 2, появившаяся в 1991 г. и благополучно дожившая до наших дней. У нас она впервые стала известна благодаря обзорам.

Рис. 1.1. Страница Интернет-сайта фирмы StatSoft.

Цели нового проекта были достаточно амбициозными — разработка мощного и универсального ядра системы (Kernel), способного работать на различных компьютерных платформах, создание многофункционального языка программирования, ориентированного на математические приложения, подготовка современного пользовательского интерфейса и обширного набора прикладных пакетов и расширений системы (Packages), мощного языка программирования математических преобразований и вычислений. Система приобрела свойства адаптации и обучения новым математическим законам и закономерностям.

В разработках систем Mathematica, наряду с головной фирмой Wolfram Research, Inc., принимали участие ряд других фирм и сотни специалистов высокой квалификации (в том числе математики и программисты). Среди них есть и представители пользующейся уважением и «спросом» за рубежом математической школы России. Системы Mathematica являются одними из самых крупных программных систем, они реализуют самые эффективные алгоритмы вычислений и имеют множество новинок. К их числу относится механизм контекстов, исключающий появление в программах побочных эффектов.

Система Mathematica 2 всегда рассматривалась как мировой лидер среди компьютерных систем символьной математики для ПК, обеспечивающих не только возможности выполнения сложных численных расчетов с выводом их результатов в самом изысканном графическом виде, но и проведение особо трудоемких аналитических вычислений и преобразований. Версии системы под Windows имеют современный пользовательский интерфейс и позволяют готовить документы в форме Notebooks («записных книжек»). Они объединяют исходные данные, описание алгоритмов решения задач, программ и результатов решения в самой разнообразной форме (математические формулы, числа, векторы, матрицы, графики).

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

С самого начала большое внимание уделялось графике, в том числе динамической, и даже возможностям мультимедиа — воспроизведению динамических изображений и синтезу звуков с поддержкой звуковой платы (аудиоадаптера). Набор функций графики и меняющих их действие опций и директив весьма полон. Графика всегда была козырной картой систем Mathematica и обеспечивала им лидерство среди систем компьютерной математики.

Рождение столь мощной и сложной системы, как Mathematica 2, шло не без трудностей. Первые версии Mathematica 2 для MS-DOS имели примитивный пользовательский интерфейс, заметно уступающий интерфейсу конкурирующей системы Maple V 1.0 для MS-DOS. Однако фирма Wolfram быстро сумела оценить возможности графической оболочки Windows и одной из первых создала версию своей системы для Windows. В книге приведены многие десятки недостатков версии Mathematica 2, практически устраненных в последующих версиях.

Mathematica 2 — одна из самых крупных и изощренных математических программных систем своего времени (начала 90-х годов). На протяжении ряда лет эта система модернизировалась и улучшалась. Ее расширенная версия (Mathematica 2.2.2) для IBM-совместимых ПК класса 386/486/Pentium требует ОЗУ объемом не менее 8 Мбайт. Сейчас это вряд ли ограничивает применение системы — компьютеры класса Pentium II/III и даже Pentium MMX с таким объемом памяти и частотами работы процессоров от 166 до 450 МГц можно приобрести в России по цене порой менее $300. Множество подходящих для этой системы ПК есть в системе образования и в индивидуальном владении пользователей.

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

Раньше грубые просчеты пользователя могли привести к зависанию системы. Однако уже в версии 2.2.2 это было практически исключено. Кроме того, оно устраняется обычным для Windows способом — одновременным нажатием клавиш Ctrl+Alt+Del При этом работа с системой Mathematica может прерваться, но общего краха системы Windows обычно не происходит. Нажатие клавиши Enter возвращает нас в менеджер программ Windows.

Тем, кто слишком щепетильно относится к возможностям ошибок в символьных вычислениях, стоит напомнить, что от неверных результатов не застрахован даже самый талантливый математик-аналитик. За рубежом (но только не у нас!) такой специалист получает в месяц заработную плату, намного превосходящую стоимость среднего ПК вместе с установленной на нем системой Mathematica. Так что стоит подумать о том, какие средства вам нужны для решения ваших задач и сколько вы готовы за них заплатить!

Несмотря на отмеченные недоделки, система быстро заняла ведущие позиции на рынке математических систем. Особенно привлекательны были обширные графические возможности системы и реализация интерфейса типа Notebook («записная книжка»), позволяющего сочетать в пределах одного документа программы и команды с данными, представленными в формульном, текстовом, табличном и графическом видах. При этом система обеспечивала динамическую связь между ячейками документов в стиле электронных таблиц даже при решении символьных задач, что принципиально и выгодно отличало ее от других систем.

 

Система Mathematica 3

У разных фирм различны подходы к обозначению новых версий своих программных продуктов. MathSoft, Inc., к примеру, за какие-то пять лет породила добрый десяток новых версий популярной системы Mathcad — 3.0, 4.0, 5.0, Plus 5.0, 6.0, Plus 6.0, 7.0, Plus 7.0, 8.0, 8.0 PRO и даже Mathcad 2000 PRO/Premium. И почти каждый раз отмечала их новой цифрой, хотя революционными отличия этих версий друг от друга назвать трудно.

Фирма Wolfram Research, Inc. (разработчик систем Mathematica) явно относится к числу тех фирм, у которых малейший намек на изменение версии означает существенную ее переработку. В итоге версии Mathematica 3 и 4 на фоне более старых Mathematica 2.0, 2.1 и 2.2 выглядят кардинально новыми системами с новым превосходным пользовательским интерфейсом и обширными математическими возможностями.

В июле 1996 г. на бета-тестирование поступила система Mathematica 3. Вскоре (середина 1997 г.) она стала серийным продуктом, начались ее поставки на рынок. Был кардинально переработан пользовательский интерфейс системы, он вобрал в себя массу новинок — от раздельного вывода на экран деталей и панелей интерфейса до мощной и прекрасно реализованной справочной системы. Устранен недостаток предшествующих версий — небольшое число примеров в справочной системе. Все примеры стали «живыми» — их в любой момент можно переиначить на свой лад и перенести в свои документы.

Продолжая линию развития универсального ядра системы, фирма Wolfram обеспечила применение этой системы на целом ряде операционных систем — Windows 95, Windows NT, Macintosh, Power Macintosh, SunOS, Solaris, HP-UX, SGI, Linux и др. Это делает систему доступной самым различным категориям пользователей и позволяет распределять решение математических задач любой сложности по оптимальным для этого компьютерным платформам.

Для системы Mathematica 3 на массовой платформе Windows установлены следующие требования к аппаратной части:

  • процессор Intel 80386 и выше;
  • операционная система Windows 95 или Windows NT 3.51 и старше;
  • дисковое пространство — минимальное 24 Мбайт, стандартное 83 Мбайт и максимальное около 120 Мбайт;
  • запуск с жесткого диска или с CD-ROM;
  • емкость ОЗУ — минимальная 8 Мбайт, желательная 16 Мбайт.

Система поставляется на CD-ROM в комплекте с электронным учебником и документацией. Возможен запуск системы прямо с компакт-диска, что экономит пространство на жестком диске, но замедляет файловые операции. Любопытно отметить, что большую часть памяти на дисках (жестком и CD-ROM) занимает справочная база данных системы.

Из других возможностей системы Mathematica 3 можно отметить:

  • повышение эффективности численных методов, в частности, функций одномерной и многомерной интерполяции, решения дифференциальных уравнений, решения систем линейных уравнений и др.;
  • введение адаптивного контроля за вычислениями численными методами;
  • расширенный диапазон аналитических преобразований, в том числе для уравнений с частными производными;
  • введение новой функции полного упрощения Full Simplify, способной упрощать выражения со специальными математическими функциями;
  • расширение числа форматов файлов, в которых можно сохранять документы (в их числе популярные форматы файлов EPS, TIFF, GIF, HPML и др.);
  • повышенное (полиграфическое) качество документов; О улучшенное использование памяти ОЗУ.

Благодаря этим и другим описанным выше возможностям сферы применения системы Mathematica 3 заметно расширились. Было создано свыше двух десятков профессиональных пакетов расширения системы.

 

Система Mathematica 4

Ожидалось, что, как и предшествующие реализации 1 и 2, система Mathematica 3 даст начало многолетнему марафону постепенного усовершенствования этой системы. Но вопреки этому фирма Wolfram совершила довольно неожиданный для нее шаг — не успели пользователи разобраться с многими новациями Mathematica 3, как в июне 1999 г. на рынок была выпущена новейшая реализация системы — Mathematica 4. При этом имеющиеся данные свидетельствуют о коренном пересмотре базовых концепций, заложенных в систему. Видимо, роль в этом сыграло приближение 2000 года.

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

Теперь уже окончательно ясно — разработчики системы продолжают интенсивно работать над ней и превратили Mathematica 4 в мощную универсальную СКМ. И первые данные о новой версии системы, которые читатель найдет в этой книге, ясно говорят о том, что разработчики систем этого класса отнюдь не намерены уступать первенство в создании наиболее сложных и продвинутых систем компьютерной алгебры. Возможности новой системы весьма впечатляют!

Важно отметить, что весьма обширные новые возможности Mathematica 4 относятся почти исключительно к количественным показателям системы и никоим образом не влияют на статический вид интерфейса систем (в сравнении с Mathematica 3) и на вид готовящихся документов-блокнотов (notebooks). Поэтому в дальнейшем мы под системой Mathematica будем иметь в виду одновременно обе версии — ставшую у нас хорошо известной Mathematica 3 и новейшую Mathematica 4. Указание на конкретную версию будет делаться только в том случае, если описываются ее специфические возможности. Многочисленные внутренние отличия системы Mathematica 4 от Mathematica 3 будут рассмотрены по ходу дела.

Работа с системами Mathematica 3 и Mathematica 4 происходит практически одинаково. Небольшое ускорение при ряде манипуляций с интерфейсом Mathematica 4 внешне не сказывается на такой работе. Поэтому, за редкими (и оговоренными) исключениями, все, что описано применительно к системе Mathematica 4, применимо и к Mathematica 3. Однако отличия ранних версий Mathematica 2.x от описанных в книге версий нового поколения достаточно серьезны, поэтому их пользователям описание пользовательского интерфейса Mathematica 3/4 не подходит, хотя набор операторов и функций ранних версий является сокращенным набором этих средств, описанных в данной книге.

 

gl1-1.jpg

Изображение: 

4. Структура систем Mathematica и их идеология

 

Структура систем Mathematica и их идеология

Структура систем Mathematica

Следует отметить, что скромные (в смысле аппаратных требований) версии системы Mathematica 2.2.2 по сей день производятся фирмой Wolfram и используются в основном в системе образования. Они продаются по ценам в несколько раз меньшим, чем последующие реализации 3 и 4. Сейчас версии системы для IBM-совместимых ПК Mathematica 2, 3 и 4 распространяются в России на оптических дисках. Это намного повышает их доступность, хотя нередки случаи поставки не вполне работоспособных систем на дисках сомнительного происхождения.

Общая структура систем Mathematica (всех версий) представлена на рис. 1.2.

Рис. 1.2. Структура системы Mathematica

Центральное место в системах класса Mathematica занимает машинно-независимое ядро математических операций — Kernel. Для ориентации системы на конкретную машинную платформу служит программный интерфейсный процессор Front End. Именно он определяет, какой вид имеет пользовательский интерфейс системы. В этой главе далее будет описан интерфейсный процессор для ПК с массовыми операционными системами Windows 95/98/NT. Разумеется, интерфейсные процессоры систем Mathematica для других платформ могут иметь свои нюансы, но особых различий с описанным интерфейсным процессором у них нет.

Любопытны данные об объеме ядра разных реализаций системы Mathematica, приведенные в книге Стивена Вольфрама:


Система

Mathematica 1

Mathematica 2

Mathematica 3

Mathematica 4

Число строк на языке С

150 000

350 000

600 000

800 000

Увеличение объема ядра в системе Mathematica 4 позволило перенести в ядро ряд функций из пакетов расширения. Ядро системы тщательно оптимизировано, что повысило скорость выполнения большинства команд.

Ядро сделано достаточно компактным с тем, чтобы любая функция из него вызывалась достаточно быстро. Для расширения набора функций служит библиотека (Library) и набор пакетов расширения (Add-on Packages). Пакеты расширений готовятся на собственном языке программирования систем Mathematica и являются главным средством расширения возможностей системы и их адаптации к решению конкретных классов задач пользователя. Кроме того, системы имеют встроенную электронную справочную систему — Help. Она содержит шесть электронных книг с «живыми» примерами, включая упомянутые во введении книги.

Ядро систем Mathematica 3/4 сделано независимым от компьютерной платформы, на которой может устанавливаться и работать система. Это гарантирует идентичность операторов и функций, используемых в системах Mathematica, устанавливаемых на разных ЭВМ — от ПК до суперкомпьютеров. Поэтому большая часть материалов данной книги, посвященных математическим возможностям и даже интерфейсу систем Mathematica 3/4, относится к компьютерам самого разного класса — от платформы Windows до Macintosh и UNIX.

 

Идеология систем Mathematica

Идеология систем Mathematica базируется на двух, казалось бы, взаимно исключающих друг друга положениях:

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

Противоречивость этих положений кажущаяся. На самом деле Mathematica — типичная система программирования с проблемно-ориентированным языком программирования сверхвысокого уровня . Его можно отнести к классу интерпретаторов. Как известно, языки такого типа последовательно анализируют (интерпретируют) каждое выражение и тут же исполняют его. Таким образом, работа с системой происходит явно в диалоговом режиме пользователь задает системе задание, а она тут же выполняет его. Разумеется, Mathematica содержит достаточный набор управляющих структур для создания условных выражений, ветвления в программах, циклов и т. д.

На первый взгляд может показаться, что система ведет диалог на куда более примитивном уровне, чем хорошо известный язык программирования Бейсик (тоже относящийся к интерпретирующему типу). И в самом деле, работа с системой Mathematica напоминает работу с Бейсиком в режиме непосредственного исполнения команд — в ответ на каждый вопрос тут же следует результат вычислений. Более того, сохранился такой архаизм (впрочем, при необходимости отключаемый), как нумерация строк (ячеек).

Однако первое впечатление часто бывает обманчивым. Помимо того что Mathematica даже в ходе такого элементарного диалога предоставляет пользователю средства сверхвысокого уровня (например, аналитическое вычисление производных или интегралов, что Бейсику абсолютно недоступно), система имеет все возможности для создания практически любых управляющих структур , организации ввода/вывода, работы с системными функциями, обслуживания любых периферийных устройств и т. д. Другое дело, что рядовому пользователю эти средства программирования могут и не понадобиться — его вполне удовлетворят встроенные математические функции системы, поражающие своим обилием и многообразием даже опытных математиков.

Можно сказать, что для решения математических задач система содержит готовые рецепты почти на любой «вкус и цвет». Однако с помощью пакетов расширения (Add-ons) имеется возможность постоянно готовить новые «блюда», подстраивая «кухню» (то есть возможности) системы под запросы любого ее пользователя.

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

 

gl1-2.jpg

Изображение: 

5. Знакомство с символьными вычислениями

 

Знакомство с символьными вычислениями

Особенности систем компьютерной математики

Недостатки численных расчетов

Большинство первых CKM (Eureka, Mercury, Excel, Lotus-123, Mathcad для MS-DOS, PC MATLAB и др.) предназначались для численных расчетов. Они как бы превращали компьютер в большой программируемый калькулятор, способный быстро и автоматически (по введенной программе) выполнять арифметические и логические операции над числами или массивами чисел. Их результат всегда конкретен — это или число, или набор чисел, представляющих таблицы, матрицы или точки графиков. Разумеется, компьютер позволяет выполнять такие вычисления с немыслимой ранее скоростью, педантичностью и даже точностью, выводя результаты в виде хорошо оформленных таблиц или графиков.

Однако результаты вычислений редко бывают абсолютно точными в математическом смысле: как правило, при операциях с вещественными числами происходит их округление, обусловленное принципиальным ограничением разрядной сетки компьютера при хранении чисел в памяти. Реализация большинства численных методов (например, решения нелинейных или дифференциальных уравнений) также базируется на заведомо приближенных алгоритмах. Часто из-за накопления погрешностей эти методы теряют вычислительную устойчивость и расходятся, давая неверные решения или даже ведя к полному краху работы вычислительной системы — вплоть до злополучного «зависания».

Условия, при которых это наступает, не всегда известны — их оценка довольно сложна в теоретическом отношении и трудоемка на практике. Поэтому рядовой пользователь, сталкиваясь с такой ситуацией, зачастую становится в тупик или, что намного хуже, неверно истолковывает явно ошибочные результаты вычислений, «любезно» предоставленные ему компьютером. Трудно подсчитать, сколько «открытий» на компьютере было отвергнуто из-за того, что наблюдаемые колебания, выбросы на графиках или асимптоты ошибочно вычисленных функций неверно истолковывались как новые физические закономерности моделируемых устройств и систем, тогда как на деле были лишь грубыми погрешностями численных методов решения вычислительных задач.

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

Понятие о символьных (аналитических) вычислениях

Символьные операции — это как раз то, что кардинально отличает систему Mathematica (и подобные ей символьные математические системы) от систем для выполнения численных расчетов. При символьных операциях, называемых также аналитическими, задания на вычисление составляются в виде символьных (формульных) выражений, и результаты вычислений также получаются в символьном виде. Численные результаты при этом являются частными случаями символьных.

Выражения, представленные в символьном виде, отличаются высокой степенью общности. К примеру, тождество sin(x) 2 + соs(x) 2 = 1 справедливо при любых значениях аргумента х. Если результат символьной операции равен, к примеру, sin(1), то он и будет выведен как sin(1) — конкретное вещественное число, приближенно представляющее или аппроксимирующее sin(1), вычисляться не будет, ибо носит частный характер.

Результат вычисления sin(х) 2 + cos(x) 2 можно проверить с помощью систем для численных расчетов, задав ряд конкретных значений х и вычислив сумму квадратов синуса и косинуса. Однако всякий раз мы будем получать частный результат, не имея никакой гарантии того, что он действительно справедлив при любом значении х. К тому же этот результат нередко может оказаться равным 0,9999999 или 1,0000001, так что лишь наша фантазия округляет его до точной единицы. Между тем это как раз то, что абсолютно недопустимо в действиях профессионала — математика-аналитика. Его приведет в ужас малейшее отличие указанного выражения от единицы! Ведь почтенные классики математики давно уже доказали, что этот результат равен в точности единице!

Так чему равна сумма квадратов синуса и косинуса?

Попытка вычислить в общем виде выражение sin(x) 2 + соs(x) 2 с помощью численных математических систем или программ на обычных языках программирования к успеху не приведет. Вместо ожидаемого результата появится сообщение об ошибке вида: «Переменная х не определена!». Компьютер будет ждать ввода конкретного значения для х.Так будет независимо от того, запрограммировали вы вычисления на простеньком Бейсике или на языке профессионалов-программистов C++. И лишь системы символьной математики при вычислениях дадут долгожданное и абсолютно точное значение 1 (рис. 1. 3) .

Рис. 1.3. Система Mathematical вычисляет значение sin(x) 2 +cos(x) 2

Пока не стоит обращать внимание на то, как получен рис. 1.15 — это окно реально работающей системы Mathematica. Уже при рассмотрении простейшего примера, представленного на этом рисунке, можно сделать несколько характерных выводов. Прежде всего видно, что при выводе неопределенной переменной х мы получаем просто имя этой переменной. Функции sin(х) и cos(х) в системе Mathematica обозначаются как Sin [х] и Cos [х]. Само по себе выражение sin(х) 2 + cos(х) 2 просто повторяется, а для его вычисления используется функция Simplify (упростить), аргументом которой является знак %, означающий подстановку предшествующего выражения. Два знака % можно использовать для подстановки предшествующего предшествующему выражению и т. д. Для вычисления строки ввода надо нажимать клавиши Shift+Enter, нажатие же одной клавиши Enter просто переводит строку в области ввода, именуемой также ячейкой ввода.

Любопытно, что в начале запуска, сопровождаемого музыкальным звуком, Mathematica выводит чистое окно редактирования документа, в котором нет даже маркера ввода — характерной вертикальной черточки. Этот маркер появится, как только вы введете какой-то первый символ. После получения первого результата появляется и длинная горизонтальная черта, отделяющая выведенные ячейки от свободного поля окна редактирования под ними. Эта черта является признаком возможности ввода очередной ячейки. Ее можно перевести в уже созданную область документа, если вы захотите создать новую ячейку среди уже существующих ячеек ввода.

Обратите внимание на то, что система выделяет ячейки ввода определителем In [N], а ячейки вывода — определителем Out [N], где N — автоматически проставляемый номер строки. Кроме того, в левой части отображаются квадратные скобки с особыми признаками, которые будут описаны в позже. Далее мы, как правило, будем опускать определители ячеек и квадратные скобки и представлять документы в упрощенной и более компактной форме. Например, представленный на рис. 1.15 документ может быть записан в следующем виде:


х

x

Sin[х]^2+Соs[х]^2

Cos[x] 2 +Sin[x] 2

Simplify[%]

1

Здесь входные выражения задаются жирным прямым шрифтом, а выходные — прямым шрифтом обычной насыщенности, то есть именно так, как они выглядят при настройке системы по умолчанию. При этом выходные выражения имеют обычный (в терминах системы Mathematica — стандартный) вид, присущий математическим формулам. Все такие выражения в книге представлены путем копирования ячеек ввода и вывода в текст с помощью буфера обмена (Clipboard). Технология такого копирования и ее особенности будут описаны далее.

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

 

Математические системы в образовании и в науке

Можно сказать, что даже самые мощные системы для численных расчетов являются полными «профанами» в символьной математике. Они начисто лишены даже задатков элементарного разума, что видно уже из приведенного примера — даже школьник знает, что сумма квадратов синуса и косинуса равна в точности единице при любом аргументе х. А что говорить о столь распространенных аналитических вычислениях, как упрощение сложных математических формул, осуществление подстановок, вычисление пределов, производных и первообразных функций, разложении их в ряды Тейлора и Фурье, вычислении корней многочленов с буквенными коэффициентами и т. д.?

Такая возможность действительно имеется, однако следует иметь в виду, что векторные графические объекты, скопированные из Mathematica через буфер обмена, не вполне корректно воспринимаются другими приложениями. При верстке данной книги это вызвало очень много проблем.

Трудно сказать, сколько слез пролито школьниками и их матерями по поводу неправильно сделанных математических преобразований на контрольных работах и экзаменах и сколько ребят восприняли математику как заклятого врага из-за первых неудач в ее изучении. Еще больший урон народному хозяйству (то бишь рынку) наносит неумение выпускников школ и вузов применять современные математические методы на практике, хотя именно это является конечной целью фундаментального математического образования. Многие студенты запоминают математические истины от силы на несколько дней во время экзаменов.

Как же найти выход из этого тупика? Одна из возможностей — применение достаточно универсальных СКМ, автоматизирующих большую часть математических вычислений. Такие системы позволяют пользователю — как студенту, так и научному работнику — быстро вспомнить полученные в вузе знания и легко использовать их на практике без этапа нудных и трудоемких рутинных вычислений и преобразований. А заодно и освоить новые для себя методы и разделы современной математики.

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

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

Очевидно, что чем раньше пользователь ПК начнет знакомиться с СКМ, тем больше математических знаний он получит. Хотя, безусловно, желательно, чтобы такое использование шло под контролем опытного преподавателя.

К сожалению, у нас есть серьезная причина, препятствующая широкому применению СКМ в образовании, — слабость материально-технической базы школ, вузов, да и многих университетов. Классами с современными ПК многие наши образовательные учреждения не обладают. Тем не менее, это чисто техническая проблема, которая постепенно решается.

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

Разумны ли системы символьной математики?

Математика непрерывно развивается, и ни один самый способный ученик не в состоянии (и слава Богу!) вместить в извилины своего мозга все математические законы и правила, созданные за многовековую историю человечества. Сотни лет назад такие задачи, как решение квадратного уравнения в общем виде, были в числе труднейших математических задач, а сейчас их «щелкают» школьники. Даже многотомные справочники по математике не гарантируют полного описания всех ее возможностей. Так что нет ничего страшного в том, что в наш просвещенный век вычисление производных или первообразных функций в аналитическом виде берет на себя компьютер. И их применение внешне становится таким же простым, как таблица умножения.

Сейчас слова «компьютерный разум» обычно берут в кавычки, всячески подчеркивая, что компьютер сам по себе не способен дать принципиально новые результаты (то есть те, которые не были заранее заложены в него человеком, его создавшим). Для многих, что в целом справедливо, вопрос о том, разумна ли система символьной математики, подобен вопросу о том, разумен ли хороший и полный справочник по математике.

И все же применительно к современным системам символьной математики (и универсальным СКМ) такая аргументация, пожалуй, не вполне приемлема. Да, базовые формулы и правила символьных преобразований в математические системы компьютерной алгебры заложены их создателями. Поэтому принципиально новых научных данных система сама по себе вроде бы и не дает. Но разве не такова в целом и ситуация с обычным использованием математического аппарата любым математиком-аналитиком?

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

Подобные результаты нередко могут подтолкнуть серьезного научного работника или педагога к открытию неизвестных закономерностей в исследуемых или изучаемых ими явлениях. К тому же современные системы компьютерной алгебры способны к расширению — в них можно вводить новые закономерности и связи (подчас самые смелые и безумные), а затем исследовать малоизвестные или вообще неизвестные результаты их действия, получаемые в результате сложных аналитических преобразований. Так что вполне допустимо считать такие системы в известной мере разумными и способными помочь пользователю в создании новых теоретических положений и даже научных теорий.

Немаловажный довод в пользу некоторой разумности современных систем символьной математики заключается в особом назначении примеров их применения, которых в справочной базе данных могут насчитываться тысячи. Здесь уместно упомянуть высказывание И . М. Гельфанда: «Теории приходят и уходят, а примеры остаются».

Во всех современных СКМ примеры применения «живые» — вы можете подыскать наиболее близкий к решаемой вами задаче пример и тут же перестроить его под свои нужды. Обычные книги и справочники такой возможности принципиально не дают. Обучение на примерах — один из самых эффективных методических приемов. Он широко используется в данной книге и составляет основу справочной базы данных систем Mathematica.

В свое время нас учили, что количество переходит в качество. Примеров этого в природе превеликое множество. Системы компьютерной математики по обилию встроенных в них функций, правил преобразования и конкретных примеров применения уже вышли за пределы, которые способен оценить индивидуальный пользователь, даже если он достаточно опытный математик. К примеру, ядро Mathematica 4 хранит данные о примерно 5 тысячах интегралов! Это говорит о том, что СКМ находятся уже на пороге того, что их количественные характеристики перерастут в качественные. Среди них может оказаться и разум СКМ — на сей раз без каких-либо оговорок.

Что дает компьютерная математика университетам и школам

В конечном счете, СКМ — не более чем удобный и мощный инструмент для учащегося, педагога, инженера или научного работника. Как его применять (в методическом, научном и практическом отношении), зависит уже от пользователя. Однако важно и ценно то, что системы символьной математики снимают у учащихся психологический барьер в реальном применении математики, особенно высшей.

Тем не менее, многие преподаватели математики опасаются приобщения своих учеников к работе с СКМ. Бывает, что некоторые преподаватели школ и вузов при подготовке массовых заданий по алгебре, тригонометрии и геометрии сами применяют СКМ — например, для подготовки заданий по курсам математики или физики. Но это становится еще одним наивным поводом ограждать учащихся от систем символьной математики и даже запрещать их в учебном процессе. Оно и понятно — ведь школьник или студент, имеющий компьютер с системой компьютерной алгебры, прощелкает все подобные примеры за считанные минуты. Между тем учащихся, столь виртуозно владеющих системами компьютерной математики, надо лишь всячески поощрять! Увы, пока их очень мало...

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

Среди части преподавателей вузов существует в корне неверное мнение о том, что не нужно изучать сами СКМ — достаточно использовать доморощенные обучающие программы. Среди таких программ и впрямь есть интересные разработки, но, как правило, они базируются на ядре той или иной символьной СКМ, причем нередко старых версий, применяемых с целью обойти лицензионные ограничения.

По большому счету, такие обучающие системы ничего нового в процесс математических вычислений не вносят. Современные универсальные СКМ намного мощнее подобных программ, имеют более совершенный и более удобный интерфейс пользователя, а главное — только они реально применяются на месте работы будущих специалистов. Поэтому изучение современных СКМ столь же необходимо, как изучение офисных программ, например, того же текстового редактора Word 95/97. Наиболее удобной формой для этого являются спецкурсы, хотя и в ряде обязательных курсов такое изучение предусмотрено новыми учебными программами Министерства образования РФ.

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

  • вмещают в себя объемы информации, эквивалентные порой десяткам книг;
  • аккумулируют знания, полученные за многие тысячелетия развития математики;
  • имеют безупречное оформление документов (цветные тексты и иллюстрации, всевозможные выделения, качественные иллюстрации и т. д.);
  • имеют разную организацию оглавления (индексную, поиск по контексту и т. д.); О отличаются очень быстрым поиском нужной информации по ряду критериев;
  • имеют «живые» примеры, которые можно изменять в ходе просмотра справочных данных;
  • справочные материалы могут сопровождаться звуковыми и видеокомментариями;
  • позволяют готовить высококачественные и наглядные уроки не только по любым разделам математики, но и по многим дисциплинам, базирующимся на применении математического аппарата;
  • позволяют быстро размножить интересующие пользователя материалы; 
  •  обладают возможностью обновления и пополнения из сети Интернет.

Современные СКМ следует рассматривать не только как электронные справочники нового поколения, но и как системы для самообучения и дистанционного обучения математике. Однако для этого они должны быть снабжены грамотно составленными (прежде всего в методическом отношении) электронными уроками или книгами. Здесь необъятный простор для творчески мыслящих педагогов! В то же время, при отсутствии таких уроков применение математических систем может иметь негативные последствия для образования — опасна подмена обучения основам математики обучением основам работы с математическими системами.

Многие виды вычислений, даже элементарных, довольно трудоемки. Например, построение трехмерной поверхности требует зачастую сотен однообразных вычислений, выполнять которые крайне муторно даже при применении калькуляторов. Современные СКМ (в том числе Mathematica) делают это за считанные секунды, а то и за доли секунды. К тому же они сразу же строят графики поверхностей с разнообразной функциональной окраской и позволяют интерактивно вращать их (Mathematica 4), добиваясь лучшей выразительности и лучшего обзора фигур.

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

Немаловажным фактором является то, что новейшие СКМ относятся к самым серьезным программным продуктам, имеющим современный пользовательский интерфейс и мощные средства визуализации всех этапов работы — причем, в области математики более выразительные, чем те, которые дают текстовые процессоры класса Word 95/97. Так что, работая с ними, пользователь поневоле осваивает работу с компьютером и познаёт тонкости интерфейса современных программ.

Кроме того, современные СКМ позволяют готовить и распечатывать документы, затрачивая на это куда меньше времени, чем популярные у математиков системы ТеХ или LaTeX. Впрочем, Mathematica прекрасно сожительствует с ними и позволяет представлять данные в необходимом для этих систем формате. Mathematica 4 поддерживает новейший формат подготовки математических документов для Интернета — MathML.

Работать с современными СКМ просто, приятно и поучительно. Благодаря этому освоение систем Mathematica воспринимается учащимися с большим интересом, что служит побудительным мотивом к их внедрению в систему образования, причем не только высшего, но и среднего, и даже начального (последнему, как отмечалось, фирма Wolfram в последние годы уделяет большое внимание).

 

Диалог с системой и ее входной язык

Интересно отметить, что, родившись как программа для профессионалов, Mathematica в последние годы упорно позиционируется фирмой Wolfram как система, перспективная не только для высшего, но и для школьного образования. Диалог с системой идет по методу «задал вопрос — получил ответ». Не считая отдельных мелочей, такой диалог вполне понятен не только опытному математику, но и успевающему студенту и даже школьнику.

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

Даже интуитивно ясно, что осуществление символьных операций — процесс намного более тонкий и сложный, чем реализация даже сложных численных расчетов. В какой-то степени он противен сущности вычислений, реализуемых в современных ЭВМ, — как известно, они работают с «голыми» цифрами и являются «числодробилками». Эти операции сложнее и обычных (довольно примитивных) строковых операций, используемых при обработке текстов. К тому же известно, что одни только таблицы производных, интегралов и формул преобразований занимают многие тома объемных книг. Поэтому высокая эффективность символьных операций реальна только при их реализации на современных высокопроизводительных ПК. Не случайно системы символьной математики получили серьезное развитие лишь в последний десяток лет.

Все сказанное ведет к необходимости символьного представления чисел и использования особых алгоритмов для выполнения операций с ними. Естественно, что реализация символьных операций вначале обеспечивалась за счет снижения эффективности численных расчетов. Тем более приятно, что в новейшей системе Mathematica 4 эта порочная тенденция была решительно остановлена — данная версия системы имеет не только превосходные возможности в части символьных вычислений, но и повышенную эффективность и скорость численных расчетов. Это выдвигает систему Mathematica 4 в число лучших универсальных систем компьютерной математики.

Операции с целыми числами

Продолжим знакомство с возможностями системы Mathematica 4 примерами работы с целыми числами. Несколько таких примеров приведено на рис. 1.4.

Рис. 1.4. Примеры целочисленных операций

Первая из приведенных операций дает разложение целого числа на простые множители с помощью функции Factorlnteger. Они представлены списками (в фигурных скобках) из двух чисел. Первое число — это множитель, а второе — число его повторений. В считанные секунды Mathematica 4 находит десятибиллионное простое число с помощью функции Prime. Другой характерный пример целочисленных операций — вычисление факториалов (вы можете запросто получить факториал 10 000, но ради сокращения места при описании примера в нем вычислено значение 200! Последний пример показывает отсутствие ошибок при работе с большими целыми числами — и это несмотря на то, что при его выполнении и впрямь дважды вычисляется факториал числа 10 000.

Операции с целыми числами выполняются абсолютно точно. При этом число цифр не ограничено (в разумных пределах).

Арифметика произвольной точности

Арифметика произвольной точности — еще одна из областей применения систем символьной математики (рис. 1. 5).

Рис. 1.5. Примеры вычислений с большой точностью

Здесь использована одна из самых распространенных функций системы Mathematica — N[expr, n], дающая результат вычисления выражения ехр r с точностью до n знаков после десятичной точки. Константы я и е вычислены с 500 верными знаками, а новая функция Матье (MathieuC) — с точностью до 200 знаков. Однако в системе Mathematica n может достигать миллиона и более. Ограничения по разрядности чисел и их верхнему и нижнему пределам практически отсутствуют.

Примеры из математического анализа

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

Рис. 1. 6 . Примеры вычислений из области математического анализа

В этих примерах функция D (как приятное исключение из правил, обозначенная одной буквой) вычисляет производную, функция Integrate — интеграл, функция Solve решает нелинейное уравнение (в данном случае квадратное), а функция Series разлагает выражение в ряд относительно заданной переменной и при заданных начальном значении переменной и максимальной степени ряда. В фигурных скобках задаются списки некоторых входных и выходных параметров (аргументов).

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


Sum[1/k^9,{k,1,n}]

HarmonicNumber [n, 9]

Integrate [Log [x] *Exp [ -х^4 ], {x, 0, Infinity}]

-1/32*Gamma[ 1/4 ] ( 2 EulerGamma + л + Log[64] )

DSolve[y " [t] + y' [t] + y[t]/t = 0, y[t] , t]

{{y[t]->e^-tC[1]+e^-tC[2]Gamma[-1,-t]}}

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

Чем дальше в лес, тем больше дров!

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

Многие из нас прекрасно помнят формулы для корней квадратного уравнения, которые нам давали еще в школе. Их в точности воспроизвела Mathematica в одном из примеров, приведенных в этом уроке чуть ранее. Это решение еще раз воспроизведено на рис. 1.7 (сверху).

Рис. 1.7. Система Mathematica решает квадратное и кубическое уравнения

Однако едва ли кто вспомнит по памяти формулы аналитического решения кубического уравнения общего вида. Зато система Mathematica играючи справляется с этой задачей с помощью функции Solve, что и показано во втором примере на рис. 1.19. Полученное выражение впечатляет даже студентов университетов, уже изучивших курс математики в полном объеме. Это блестящий пример эффективного представления справочной информации.

Можно пойти чуть дальше и убедиться в том, что Mathematica решает подобное уравнение даже четвертого порядка. Полученное при этом крайне громоздкое решение (в силу этого оно не приводится) заставит в задумчивости почесать затылок многих любителей математики. Но можно ли продолжать эти вычисления? Увы, классическая математика говорит, что нет! Подобные уравнения порядка выше четвертого современная математика в аналитическом виде не решает. Тем не менее, попытаемся вычислить корни алгебраического уравнения пятой степени в общем виде (рис. 1. 8 ).

Рис. 1.8 . Система Mathematica пытается решить алгебраическое уравнение пятой степени

А вот и сюрприз: Mathematica не только не отказалась решать эту задачу (при отказе она просто повторяет вводимое выражение), но даже подсказала путь ее решения с помощью пятикратного применения функции вычисления корней Root степенных многочленов.

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

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

Научные работники и инженеры настолько привыкли к упрощению (порой весьма грубому, с точки зрения математиков), что громоздкие решения, получаемые с помощью систем символьной математики, способны их раздражать. Это в определенной мере препятствует применению систем символьной математики на практике и в наши дни.

Однако для частных случаев нередко можно получить вполне сносные по виду решения. Вот пример решения неполного алгебраического уравнения десятой степени, при котором Mathematica благополучно возвращает все десять корней довольно простого вида (рис. 1.9 ). 

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

Рис. 1.9 . Система Mathematical решает алгебраическое уравнение 10-й степени

Доверяй, но проверяй!

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

Пусть мы решили некоторое уравнение


eqns = х^3 - 3*х + 2 == 0

2-3х+х 3 == 0

и получили его корни


r = Solve[eqns, x]

{{х-> -2), {х^ 1}, {х-> 1}}

Для проверки решения можно использовать операцию подстановки в eqns списка корней г. Эта операция реализуется оператором / ., что иллюстрирует следующий пример:


eqns/.r

{True, True, True}

Результат этой операции — список из трех логических констант True (Истинно). Он означает, что решение верно. Кстати, с помощью этой подстановки можно получить истинный список корней:


х/.r

{-2, 1, 1}

Mathematica имеет и множество иных способов проверки полученных результатов. Но, к сожалению, очень редко встречаются ситуации, когда выданное Mathematica ошибочное или несуществующее решение при подобной проверке дает положительный результат. Как говорится, за что боролись, на то и напоролись! В таких особо каверзных случаях надо ориентироваться на свою интуицию, решение схожей тестовой задачи или решение с помощью других математических систем с иным ядром — например, Derive или Maple V.

Не стоит брезговать проверкой решений даже с помощью менее мощных систем — помните поговорки «Устами младенца глаголет истина!», «Пуля дура — штык молодец», «Мал золотник, да дорог!» и т. д.? Обращайтесь к описанным выше правилам проверки по мере освоения работы с системой Mathematica. При этом вам быстро станут понятными некоторые ее тонкости, которые пока остались «за бортом».

 

gl1-3.jpg

Изображение: 

gl1-4.jpg

Изображение: 

gl1-5.jpg

Изображение: 

gl1-6.jpg

Изображение: 

gl1-7.jpg

Изображение: 

gl1-8.jpg

Изображение: 

gl1-9.jpg

Изображение: 

6. Установка систем и их особенности

 

Установка систем и их особенности

Инсталляция систем Mathematica 3

Объем инсталляционных файлов Mathematica 3 и 4 превышает 100 Мбайт. Поэтому поставляются системы на CD-ROM, а компьютер, на который они устанавливаются, должен иметь устройство чтения CD-ROM. Возможна и установка систем из локальной сети, но для большинства пользователей систем эта возможность существенного интереса не представляет и потому здесь не описывается. Кроме того, мы ограничимся описанием инсталляции систем, рассчитанных на работу в среде операционных систем Windows 95/98/NT.

Для установки системы Mathematica 3, по существу, нужен современный мультимедийный компьютер, оснащенный современной видеокартой, звуковой картой (совместимой с Sound Blaster фирмы Creative Labs), микрофоном и акустическими системами. ПК должен иметь процессор Pentium и емкость ОЗУ не менее 16 Мбайт (желательно даже 24 Мбайт и более). Минимальный объем файловой системы Mathematica 3/4 составляет 40 Мбайт, максимальный — 156 Мбайт (версии для Windows 95/98/NT с полной справочной системой).

Для инсталляции системы нужно прежде всего проверить соответствие аппаратных возможностей ПК требуемым. Только после этого можно начать инсталляцию запуском файла setup.exe (установка) с инсталляционного CD-ROM (часто это делается автоматически, если ПК настроен на самозапуск CD-ROM). Процесс инсталляции показан на рис. 1.10 на примере системы Mathematica 3.

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

Рис. 1.10. Инсталлятор системы Mathematica 4

После инсталляции и первого запуска системы (из меню Пуск или активизацией ярлыка на рабочем столе) появляется окно регистрации, представленное на рис. 1.11. В нем надо заполнить все пункты. Номер лицензии указывается на конверте оптического диска, а вот для задания регистрационного номера может потребоваться запрос на фирму Wolfram Research — через Интернет или по обычной почте.

Рис. 1.11. Окно регистрации системы Mathematica4

Следует предупредить читателей, что нередко копии системы Mathematica 3 (да и Mathematica 4) на «пиратских» CD-ROM просто не работоспособны — для них не указан пароль либо система просто не реагирует на пароль, генерируемый соответствующей программной утилитой. Лишь легальное приобретение системы гарантирует ее полную работоспособность и поддержку фирмы Wolfram в решении возникающих недоразумений. Пароль у каждой копии системы свой.

 

Работа с CD-ROM системы Mathematica 4

Mathematica 4 также поставляется на CD-ROM. Поскольку данная книга посвящена детальному знакомству с системой Mathematica 4, мы рассмотрим работу с CD-ROM этой системы более подробно.

Самозапуск CD-ROM системы Mathematica 4 и выбор режима работы

CD-ROM системы Mathematica 4 рассчитан на автоматический запуск, для чего в его исходной директории имеется файл autorun.inf, считывание которого обеспечивает самозапуск CD-ROM. При этом появляется окно, показанное на рис. 1.12.

Рис. 1.12. Окно CD-ROM системы Mathematica 4

Из рисунка видно, что окно содержит меню выбора режима работы с CD-ROM:

  • Install Mathematica to a hard disk — установка (инсталляция) системы на жесткий диск;
  • Run Mathematica off the CD-ROM - запуск Mathematica 4 с CD-ROM;
  • Run the Mathematica kernel off the CD-ROM — запуск ядра Mathematica 4 с CD-ROM;
  • Browse the contents off the CD-ROM - просмотр CD-ROM;
  • Register on the web — регистрация через Интернет.

Помимо обычной инсталляции системы на жесткий диск меню предусматривает работу с системой Mathematica 4 или с ядром системы непосредственно с CD-ROM. Это полезно, если работа с системой носит эпизодический характер или если на жестком диске ПК недостаточно места для установки системы Mathematica 4. Разумеется, комфортность и скорость работы с системой при ее установке на жесткий диск выше, чем при работе прямо с CD-ROM, особенно если используется устройство чтения с невысокой скоростью считывания. Впрочем, для современных CD-ROM с кратностью скоростей 32 и выше работа оказывается вполне сносной. В корневом каталоге CD-ROM содержатся три подкаталога:

  • PC — подкаталоги и файлы для стандартной инсталляции и работы в среде операционной системы Windows 95/98/NT;
  • PC_8_3 — подкаталоги и файлы для инсталляции системы в случае, если устройство чтения CD-ROM не поддерживает длинные имена файлов;
  • UNIX — подкаталоги и файлы для инсталляции в среде операционной системы UNIX.

Подкаталог PC содержит обычные (не архивированные) файлы системы Mathematica 4. Они используются как для копирования на жесткий диск при обычной инсталляции системы, так и для прямой работы с CD-ROM. Если устройство чтения CD-ROM не поддерживает считывание длинных имен файлов, то для инсталляции системы на жесткий диск используются файлы из каталога PC_8_3, которые имеют до 8 символов в имени и до 3 символов в расширении. Подкаталог UNIX содержит файлы, необходимые для инсталляции системы на компьютерах платформы UNIX.

Установка Mathematica 4 на жесткий диск

Для серьезной работы с системой Mathematica 4 ее следует установить на жесткий диск компьютера. Перед этим надо проверить соответствие аппаратных требований реальным возможностям вашего ПК. Минимальные требования для установки системы Mathematica 4 следующие:

  • IBM/Intel-совместимый компьютер с процессором класса не ниже 80386;
  • операционная система Windows 95, 98 или NT;
  • объем ОЗУ не менее 16 Мбайт, желательно 24 Мбайт при работе с Windows 95/ 98 и 32 Мбайт при работе с Windows NT;
  • устройство чтения CD-ROM — для считывания инсталляционного диска;
  • видеосистема класса SVGA;
  • звуковая карта класса Sound Blaster для работы со звуком;
  • все файлы системы Mathematica 4 занимают 156 Мбайт. Из них лишь 40 Мбайт приходится на минимальный вариант установки — файлы ядра (Kernel), интерфейсного процессора (Front end), библиотеки (Mathlink Libraries) и шрифты математических символов (Fonts). Дополнительно могут устанавливаться стандартные пакеты расширения (Standard Add-on Packages) и необходимые для связи с ними файлы инструментария (MathLmk Developer's Kit ) — 12 Мбайт. Куда больше занимает онлайновая документация справочной системы — The Mathematica Book, Reference Guide, Standard Add Package и Additional Documentation. Для ее установки нужно еще 104 Мбайт.

Для установки Mathematica 4 на жесткий диск надо активизировать кнопку с надписью Install Mathematica to a hard disk. Начнется подготовка инсталлятора системы. В ходе установки в особом каталоге создаются временные файлы, которые впоследствии автоматически уничтожаются. Однако для их установки на жестком диске необходимо иметь свободное пространство — около 200 Мбайт при полной установке системы.

После подготовки инсталлятора появляется обычное окно с вступительным сообщением. Нажав кнопку Next, можно перейти к следующему этапу инсталляции. При этом появляется окно регистрации системы (рис. 1.13). Обычно первые три поля из пяти бывают заполнены автоматически: это идентификационный номер MathID, имя компьютера и имя организации. Разумеется, вы можете их изменить. Номер лицензии обычно указывается на коробке, в которой поставляется система, и на конверте с текстами лицензионных материалов. А вот пароль дается фирмой Wolfram отдельно — по телефону, факсу, электронной почте или через Интернет (нелегальные способы получения пароля с помощью генератора номеров лицензии и пароля здесь не обсуждаются).

Рис. 1.13. Окно регистрации системы

Если все данные в окне регистрации введены, то нажатие кнопки Next обеспечивает продолжение установки системы на жесткий диск. Как обычно, в окне выбора режима инсталляции будет предложено три варианта — полный, минимальный и выборочный. Рекомендуется использовать выборочный, поскольку при этом можно прочесть наименования всех компонентов системы (рис. 1.14). Обратите внимание, что при полной установке системы она занимает на жестком диске около 170 Мбайт. Вы можете значительно уменьшить этот объем, отказавшись от установки пакетов расширений, документации и т. д. Минимальный объем памяти на диске при этом составит около 50 Мбайт. Но возможности системы будут заметно урезаны.

Рис. 1.14. Окно выбора устанавливаемых компонентов системы

Установив (или подтвердив) набор компонентов нажатием кнопки Next, можно перейти к следующему шагу установки — выбору имени системы в главном меню операционной системы Windows 95/98/NT. Окно, дающее возможность такого выбора, представлено на рис. 1.15.

Рис. 1.15. Окно выбора имени позиции системы в главном меню

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

Рис 1.16. Окно подтверждения завершения подготовки к инсталляции

Нажав кнопку Next, мы переходим к инсталляции системы Mathematica 4 на жесткий диск. Картина работы инсталлятора представлена на рис. 1.17. Окна с краткими описаниями новшеств в верхнем левом углу окна инсталлятора время от времени меняются. Полезно просмотреть их содержание, благо на этом этапе инсталляции пользователю делать больше нечего. Индикатор прогресса (внизу справа) показывает ход инсталляции и имена текущих файлов, копируемых на жесткий диск. Общую информацию дают гистограммы, расположенные в левом нижнем углу окна инсталлятора.

Инсталляция заканчивается выводом окна завершения инсталляции (рис. 1.18). Фирма Wolfram рекомендует в случае появления проблем с инсталляцией прежде всего попытаться устранить факторы, препятствующие инсталляции. Для этого надо внимательно разобраться с сообщениями о причинах сбоя. Далее следует провести инсталляцию с помощью файлов поддиректории PC_8_3 CD-ROM. Если и это не помогает, то остается предпоследнее — обратиться в службу технической поддержки фирмы Wolfram. Или последнее — сменить компьютер!

Нажатие кнопки ОК в заключительном окне завершает процесс установки системы Mathematica и стирает временные файлы инсталлятора.

Рис. 1.17. Ход инсталляции системы Mathematica 4

Рис. 1.18. Окно с подтверждением успешно проведенной установки

 

Зanycк Mathematica 4


После установки системы Mathematica 4 на жесткий диск в папке Программы главного меню операционной системы Windows появляется позиция с ярлыками системы Mathematica 4 (рис. 1.19).

Рис. 1.19. Система Mathematica 4 в главном меню Windows 98

Как видно из рис. 1.19 (нижняя позиция главного меню), система Mathematica 4 представлена тремя ярлыками:

  • Mathematica 4 — запуск системы Mathematica 4;
  • Mathematica 4 Kernel — запуск ядра системы Mathematica 4;
  • Uninstall Mathematica 4 — удаление системы Mathematica 4.

Запуск Mathematica 4 выполняется, как обычно, активизацией позиции Mathematica 4 в главном меню программ. При этом появляются строка меню, чистое окно документа Untitled-1 и базовая панель ввода. Теперь можно начинать работу, как было описано ранее (рис. 1.20).

Пользовательский интерфейс создается одной из двух основных частей системы — интерфейсным процессором (Front-end); вторая основная часть — ядро системы (Kernel). После загрузки интерфейсного процессора появляется скромная панель главного меню системы и пустое окно редактирования документов. В нем можно начинать вычисления, что и показано на рис. 1.20.

Рис. 1.20. Начало работы с системой Mathematica 4

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

Палитру можно использовать для ввода спецзнаков и операторов, например возведения в степень, вычисления производной или интеграла и т. д. Примеры применения палитры тоже показаны на рис. 1.20. Обратите внимание, к примеру, на естественный вид интеграла в строке ввода 6. Шаблон интеграла вводится с помощью палитры Basiclnput и затем заполняется. Мы не будем описывать этот процесс подробно, поскольку он вполне естественен и легко осваивается даже начинающими пользователями.

В общем случае для получения естественной формы шаблона математического выражения в строках ввода надо изменить их обычный формат InputForm (форма ввода) на формат StandardForm (стандартная форма). Для этого выберите вариант InputForm в подменю Convert То (Преобразовать в...) меню Cell.

Можно отметить некоторые отличительные, но вовсе не принципиальные признаки работы именно с системой Mathematica 4. Над строкой меню дано полное название системы — «Mathematica 4». При вводе выражений используется цветная раскраска элементов — например, незакрытые скобки имеют красный цвет и меняют его на черный после ввода завершающих скобок. Это облегчает ввод сложных выражений и их редактирование в строках ввода. Более скромным (в стиле Microsoft Office 97) стало оформление кнопок. Но главное — даже на первый взгляд заметно ускорение работы с элементами пользовательского интерфейса.

Если вы намерены часто пользоваться системой Mathematica 3/4, позаботьтесь о том, чтобы создать ярлык системы на рабочем столе Windows 95/98/NT. В этом случае запуск системы предельно упрощается — надо установить курсор мыши на ярлык и дважды быстро щелкнуть левой кнопкой мыши (пользователи Windows 98 могут настроить систему на запуск программ однократным коротким нажатием левой кнопки мыши).

 

Прямая работа с CD-ROM

Если пользователь работает с системой Mathematica 4 эпизодически, он может воспользоваться прямой работой с CD-ROM. Для этого после самозапуска CD-ROM нужно активизировать кнопку Run Mathematica off the CD-ROM. Появится окно регистрации, уже описанное ранее. После ввода данных о регистрации работа с системой ничем не отличается от обычной (при запуске с жесткого диска). Заметно лишь замедление работы при манипуляциях с пользовательским интерфейсом и файлами.

Работа с ядром системы Mathematica 4

В Mathematica 4 предусмотрена прямая работа с ядром системы в режиме командной строки. Такая работа возможна как после активизации ярлыка Mathematica 4 Kernel в папке системы, так и после выбора команды Run the Mathematica kernel off the CD-ROM при самозапуске CD-ROM. При этом работа с ядром возможна даже в MS-DOS.

При пуске ядра указанными способами появляется окно, показанное на рис. 1.21, в полностью развернутом виде. Лишь сообщения сверху окна указывают на то, что работает новейшая версия системы — Mathematica 4. В остальном работа с ядром напоминает работу в текстовом режиме системы Mathematica 1.0. Даже графики в данном случае строятся текстовыми символами, что наверняка умилит почитателей ретро в области вычислений.

При всей примитивности прямой работы с ядром она имеет ряд достоинств:

  • работа происходит быстро;
  • удобно знакомиться с назначением функций системы;
  • простой формат ввода и вывода облегчает копирование;
  • возможна работа в MS-DOS;
  • требуются минимальные ресурсы ПК.

Таким образом, прямая работа с ядром может быть полезна при освоении системы Mathematica.

Рис. 1.21. Пример прямой работы с ядром системы Mathematica 4

 

gl1-11.jpg

Изображение: 

gl1-12.jpg

Изображение: 

gl1-13.jpg

Изображение: 

gl1-14.jpg

Изображение: 

gl1-15.jpg

Изображение: 

gl1-16.jpg

Изображение: 

gl1-17.jpg

Изображение: 

gl1-18.jpg

Изображение: 

gl1-19.jpg

Изображение: 

gl1-20.jpg

Изображение: 

gl1-21.jpg

Изображение: 

7. Отличительные особенности Mathematica 4

 

Отличительные особенности Mathematica 4

Ускорение численных расчетов и повышение их точности

Большинство пользователей с трудом уловят разницу между версиями Mathematiea 3 и Mathematica 4. Именно поэтому основной материал данной книги полностью относится к этим двум последним версиям. Тем не менее, различия между версиями есть, и достаточно серьезные.

Пожалуй, главной отличительной особенностью системы Mathematica 4 стало кардинальное ускорение численных расчетов. Традиционно системы символьной математики проигрывали численным системам, таким как MATLAB. До сих пор скорость вычислений в системе MATLAB в 5-10 раз превышала скорость вычислений, производимых системами символьной математики. Поэтому в системе Mathematica 4 были предприняты необычные для систем символьной математики и даже беспрецедентные меры по ускорению численных расчетов. Они перечислены ниже:

  • Значительно ускорены все операции с матрицами, особенно большого размера.
  • Существенно оптимизированы алгоритмы для выполнения вычислений с числами, содержащими вплоть до миллиона знаков.
  • Ускорен ввод и вывод очень больших целых чисел.
  • Полностью сохраняется точность при вводе и выводе приближенных действительных чисел.
  • Обеспечивается свертка и корреляция массивов любой размерности.
  • Применены новые оптимизированные алгоритмы для преобразований Фурье.
  • Ускорены процедуры численного решения полиномиальных уравнений.

Рисунок 1.22. иллюстрирует некоторые простые вычисления в численном виде с фиксацией времени вычислений для систем Mathematica 3 и 4 (данные получены от разработчика).

Рис. 1.22. Сравнительные данные по скорости простых вычислений

Из примеров на рис. 1.34 видно, что скорость простых вычислений возросла в 5-10 раз.. В отдельных случаях скорость более сложных вычислений возрастала намного больше. Ниже приведены данные о выполнении некоторых операций над матрицей m большого размера (500x500).

Операция

Mathematica 4

Mathematica 3

Отношение времен

Sin [m]

(m+ 1) 100

Min [m]

0,13с

0,311 с

0,02с

2,433 с

4,426 с

4,487 с

18,7:1

14,23:1

224:1

Такое резкое ускорение скорости численных расчетов способно открыть для системы Mathematica 4 новые обширные сферы применения, например численное моделирование сложных систем, описываемых матричными алгебраическими и дифференциальными уравнениями.

Улучшение работы с массивами

Кардинально уменьшено и время обращения к памяти при записи и считывании массивов, а заодно существенно повышена плотность упаковки массивов для данных различного типа (за счет применения особой технологии упаковки массивов). Приведенные ниже сведения характеризуют это для версий Mathematica 4 и 3 для ряда типов данных — целых (Integers), вещественных (Reals) и комплексных (Complex Numbers).

Mathematica 4

Mathematica 3

Тип данных

Время, с

Объем памяти

Время, с

Объем памяти

Integers 0,24 400 056 0,43 2 000 024
Reals 0,231 800 056 0,611 2 000 024

Complex    Numbers

0,35

1 600 056

1,341

6 000 024

Уплотнение массивов означает, что Mathematica 4 при заданном объеме свободной памяти может решать более объемные и серьезные задачи, чем это смогла бы сделать предшествующая версия системы.

Указанные достоинства системы Mathematica 4 достигнуты за счет выбора и тщательной оптимизации алгоритмов численных вычислений:

  • введена прямая поддержка следов матриц;
  • изменены алгоритмы нахождения минимума (функция FindMinimum);
  • реализован ускоренный вывод больших чисел — вплоть до миллионов цифр;
  • введена новая технология упаковки больших массивов чисел;
  • существенно уменьшена необходимость в повторных циклах;
  • обеспечена абсолютная точность при целочисленных вычислениях;
  • гарантирована заданная погрешность при вычислениях с вещественными числами;
  • улучшено размещение переменных в памяти.

По умолчанию погрешность вычислений при целочисленных операциях в системе Mathematica 4 определена в 1 000 000 верных цифр. К примеру, чтобы выдать число n с миллионом верных знаков, системе Mathematica 4 понадобится чуть больше двух минут (разумеется, на современном компьютере)! В некоторых видах сложных целочисленных вычислений, используемых в технике кодирования информации, Mathematica 4 обеспечивает беспрецедентно малое время вычислений.

Улучшенные математические возможности

Математические возможности системы Mathematica 4 существенно пополнены и улучшены. В частности, обеспечены следующие возможности:

  • прямая поддержка линейной алгебры разреженных матриц;
  • экспериментальная поддержка кванторного исключения с использованием цилиндрического алгебраического разложения;
  • экспериментальная поддержка символьной оптимизации;
  • быстрая свертка и корреляция для массивов любого размера и размерности;
  • новые улучшенные алгоритмы для преобразований Фурье (рис. 1.23);
  • ускоренное вычисление полиномиальных уравнений;
  • новые алгоритмы для функции минимизации FindMinimum;
  • расширение возможностей матричных преобразований;
  • алгебраическая вычислительная поддержка для функций символьных преобразований Simplify, FunctionExpand и связанных с ними других функций;
  • расширение возможностей функций преобразования FullSimplify и FunctionExpand;
  • упрощение полиномиальных и других неравенств;
  • полная улучшенная поддержка символьных преобразований Лапласа и Фурье;
  • расширенные возможности решения трансцендентных уравнений;
  • ускоренное неоднократное дифференцирование;
  • поддержка ряда новых специальных функций (Дирака, Струве, обобщенных логарифмов, двумерных гипергеометрических функций Аппеля, полилогарифмов Ньелсена, гармонических функций, различных констант и т. д.);
  • новые оптимизированные методы для оценивания е, n и других констант с очень высокой точностью;
  • полная поддержка для непрерывных дробей и периодических цифровых последовательностей ;
  • прямая поддержка поразрядных операций.

Рис. 1.23. Пример выполнения преобразования Фурье в среде Mathematica 4

Из рис. 1.23. видно, что на преобразование Фурье массива 500x500 элементов Mathematica 4 затратила около 2 с. Для сравнения отметим, что Mathematica 3 выполнила ту же работу за 11 с, то есть ускорение преобразования Фурье оказывается более чем пятикратным.

Рисунок 1.24. иллюстрирует возможности выполнения интегральных преобразований Лапласа и Фурье в символьном виде.

Рис. 1.24. Примеры интегральных аналитических преобразований

Некоторые другие примеры использования, характерные для системы Mathematica 4, можно найти на Интернет-странице фирмы Wolfram.

 

Улучшенная поддержка средств графики и звука

Графика всегда была козырной картой систем Mathematica. В новой версии системы также реализованы многочисленные новые возможности. Отметим наиболее существенные из них:

  • ускоренный вывод графических данных на дисплеи больших размеров;
  • экспорт и импорт графики и звука во многих форматах (рис. 1.25);
  • поддержка дискретного масштабирования уровней цвета;
  • поддержка трехмерной динамической графики в реальном времени (только в среде Windows);
  • ускоренная генерация и вывод на экран больших графиков;
  • полностью согласованная поддержка безусловных опций.

Рис. 1.25. Форматы ввода и вывода изображений, поддерживаемые системой Mathematica 4

Всего Mathematica 4 поддерживает свыше 20 различных форматов файлов. Возможность импорта графического файла с высоким разрешением в формате TIFF и последующего преобразования файла в формат JPG иллюстрирует рис. 1.26.

Рис. 1.26. Пример импорта файла в одном формате и экспорта того же файла в другом формате

Средства графики Mathematica 4 позволяют использовать систему в качестве графического процессора, осуществляющего эффективные цифровые преобразования изображений, такие как стилизация (рис. 1.27), повышение и понижение контрастности и яркости, обработка цветов, фильтрация и т. д.

Рис. 1.27. Пример обработки изображения, показанного на рис. 1.26

Все это, разумеется, повышает шансы системы Mathematica 4 сохранить за собой роль мирового лидера среди систем компьютерной математики для ПК.

Вращение трехмерных графиков мышью

Следом за системами Maple V R5 и Mathcad 8 PRO Mathematica 4 приобрела возможность быстрого вращения произвольных трехмерных графиков. Пример реализации этой возможности представлен на рис. 1.28.

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

<<RealTime3D`

Другая команда,

<<Default3D`

возвращает систему к стандартным возможностям трехмерной графики.

Из приведенных данных ясно, что возможности системы Mathematica 4 и скорость ее работы существенно повышены. Однако при этом сохранена практически полная совместимость по интерфейсу пользователя и базовому набору операторов и функций с предшествующей версией Mathematica 3. Так что из этой книги читатель получит достаточно полные сведения не только о новейшей версии Mathematica 4, но и о ее предшественнице — системе Mathematica 3. Значительная часть сведений и примеров полезны и пользователям версий Mathematica 2.x.

Рис. 1.28. Стоп- кадр документа, показывающего возможность вращения трехмерной фигуры в реальном времени

При выборе той или иной версии решающую роль играют финансовые соображения и аппаратные требования к компьютеру. Как уже отмечалось, новая версия Mathematica 4 для установки на компьютере с операционной системой Windows 95/98 требует объема ОЗУ 16/24 Мбайт и 40/156 Мбайт места на жестком диске (в числителе дробей минимальное значение, в знаменателе — рекомендуемое). В то же время, система Mathematica 2.2.2 требует емкости ОЗУ 8 Мбайт (версия 2.1 — даже 4 Мбайт), занимает на жестком диске 14 Мбайт и инсталлируется с 6 обычных гибких дисков.

Программирование и ядро системы

Средства программирования и ядра системы Mathematica дают ряд новых возможностей:

  • функции NestWhile и NestWhileList, позволяющие обобщения функции FixedPoint;
  • функции PadLeft и PadRight;
  • поддержку перекрытия и расширения подсписков, генерируемых функцией Partition;
  • функции ListConvolve и ListCorrelate;
  • обобщение функций Take, Drop и связанных с ними функций до любой размерности и любых шагов по индексу;
  • поддержку функции All для определения частей на определенных уровнях в выражениях;
  • расширения в функции Mod для поддержки кириллических списков;
  • контекст Developer, предоставляющий доступ к внутренним функциям системы;
  • контекст Experimental, предоставляющий доступ к функциям, находящимся в стадии разработки.

Операции ввода и вывода

Операции ввода и вывода в Mathematica 4 дают следующие новые возможности:

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

Системный интерфейс

На уровне системного интерфейса в Mathematica 4 обеспечены:

  • поточный вывод табличных данных;
  • развитая поддержка преобразования ячеек в HTML;
  • дополнительная поддержка вывода в формате ТеХ;
  • ускорено взаимодействие с внешними программами через MathLink;
  • поддержка дополнительных наборов символов, включая китайские и корейские;
  • экспериментальная поддержка вывода на экран в режиме реального времени;
  • экспериментальная поддержка удаленных файловых систем через MathLink;
  • экспериментальная поддержка всплывающих кнопочных палитр.

 

gl1-22.jpg

Изображение: 

gl1-23.jpg

Изображение: 

gl1-24.jpg

Изображение: 

gl1-25.jpg

Изображение: 

gl1-26.jpg

Изображение: 

gl1-27.jpg

Изображение: 

gl1-28.jpg

Изображение: 

8. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Классифицировать системы компьютерной математики.
  • Оценивать аппаратные ресурсы, нужные для работы с системами Mathematiса 3 и 4.
  • Использовать Интернет-сайт фирмы Wolfram Research — разработчика систем Mathematica.
  • Использовать некоторые средства диалога с системой.
  • Выполнять проверку некоторых решений.
  • Выполнять инсталляцию систем Mathematica 3 и 4.
  • Запускать системы Mathematica 3 и 4.
  • Выполнять прямые операции с ядром систем.
  • Распознавать многочисленные отличительные особенности Mathematica 4.

 

Урок 2. Интерфейс системы

Урок 2. Интерфейс системы

1. Интерфейс системы

 

Интерфейс системы

  • Строка меню и окно редактирования документов
  • Палитры математических операторов и функций
  • Понятие о документах в форме notebooks
  • Особенности интерфейса Mathematica 4
  • Основные виды файлов и пакеты расширения
  • Работа с файлами
  • Печать документов
  • Основные понятия о документах и их стилях
  • Понятие о ячейках документов
  • Манипуляции с ячейками
  • Вставка различных элементов
  • Управление процессом вычислений
  • Команды поиска и замены
  • Управление расположением окон
  • Справочная база данных

Прежние версий системы Mathematica имели довольно скромный стандартный интерфейс, характерный для приложений MS-DOS. Однако в версиях Mathematica 3/4 интерфейс был существенно переработан. В этом уроке подробно рассматривается интерфейс систем Mathematica 3/4. Освоение интерфейса не менее важно, чем освоение чисто математических возможностей системы, поскольку именно использование всех возможностей интерфейса позволяет готовить вполне современные документы, отличающиеся высоким качеством визуализации.

 

2. Строка меню и окно редактирования документов

 

Строка меню и окно редактирования документов

До сих пор разработчики пользовательского интерфейса математических систем по существу копировали стандартный интерфейс программ из комплекса Microsoft Office 95/97, в частности, самого популярного текстового процессора Word 95/97. Разработчики интерфейса пользователя систем Mathematica 3/4 отошли от этой традиции.

Нетрудно заметить, что пользовательский интерфейс систем Mathematica 3/4 реализует отдельный вывод своих элементов — окон (включая основное окно редактирования), панелей, палитр знаков и т. д. Это позволяет располагать их в любых местах экрана, что особенно удобно при работе с дисплеями, имеющими большой размер изображения — от 17 дюймов по диагонали и выше. При работе с дисплеями, имеющими небольшой экран (14 или 15 дюймов) и стандартном разрешении 640x480 пикселей раздельный вывод элементов интерфейса скорее неудобен, поскольку приходится тщательно располагать их в нужных местах и индивидуально подстраивать размеры отдельных окон и палитр. Однако после настройки элементы интерфейса выводятся в том виде, как это было задано.

Главное окно системы имеет крайне невзрачный вид, поскольку не содержит ничего, кроме строки заголовка и строки меню.

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

В самом низу в начале линейки прокрутки имеется строка состояния (Status bar) с информацией о текущем режиме работы. Эта информация (если она есть в данный момент) полезна для оперативного контроля в ходе работы с системой.

Главное меню системы (см. рис. 1.20, сверху) содержит следующие позиции:

  • File — работа с файлами: создание нового файла, выбор файла из каталога, закрытие файла, запись текущего файла, запись файла с изменением имени, печать документа и завершение работы;
  • Edit — основные операции редактирования (отмена операции, копирование выделенных участков документа в буфер с их удалением и без удаления, перенос выделенных участков, их стирание);
  • Cell — работа с ячейками (объединение и разъединение ячеек, установка статуса ячейки, открытие и закрытие);
  • Format — управление форматом документов;
  • Input — задание элементов ввода (графиков, матриц, гиперссылок и т. д.);
  • Kernel — управление ядром системы;
  • Find — поиск заданных данных;
  • Window — операции с окнами и их расположением;
  • Help — управление справочной системой.

Часть команд может быть в данный момент невыполнима — например, нельзя вычислить значение выражения, если его самого нет в окне редактирования или если ячейка с ним не выделена. Названия таких команд выделяются характерным серым расплывчатым шрифтом. Четкий шрифт, напротив, характерен для тех команд, которые в данный момент могут исполняться. Управление главным меню самое обычное.

 

3. Палитры математических операторов и функций

 

Палитры математических операторов и функций

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

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

Однако, сделав шаг назад, упомянутая фирма одновременно сделала два шага вперед — она ввела выбираемые пользователем и перемещаемые по экрану в любое место инструментальные палитры со множеством пиктограмм ввода математических символов, функций и команд управления системой. Они выводятся с помощью меню File | Palettes (Файл | Палитры). Если вывести все инструментальные палитры, то они едва умещаются в главном окне системы (рис. 2.1).

Рис. 2.1. Инструментальные палитры системы Mathematica 4

Палитры, предназначенные для ввода математических спецзнаков, намного упрощают работу по подготовке документов. Общее число специальных математических знаков (греческих и латинских букв, операторов, функций и команд), вводимых с помощью палитр, составляет около 700. Многие знаки имеют альтернативные варианты ввода с применением комбинаций клавиш — их можно найти в справочной базе данных системы.

Рисунок 2.1, однако, наглядно показывает, что целесообразно пользоваться не более чем 2-3 панелями одновременно. Для удаления ненужных панелей в правом верхнем углу каждой из них расположены маленькие кнопки со знаком х. Все панели максимально компактны и могут перетаскиваться мышью в наиболее удобное место экрана.

Если убрать все панели, то интерфейс системы на первый взгляд оказывается даже слишком простым — остается единственная панель с главным меню и висящее отдельно окно документа. Вокруг него можно разглядеть объекты рабочего стола операционной системы Windows 95/98 (при подготовке этой книги использовалась Windows 98). Если работа идет с несколькими документами, то можно увидеть несколько окон документов.

Если завершить работу с системой Mathematica при выведенных панелях математических знаков, то в следующем сеансе работы эти панели появятся на тех местах, где они были расположены перед выходом. Таким образом, интерфейс систем Mathematica 3/4 обладает своеобразной памятью.

 

gl2-1.jpg

Изображение: 

4. Понятие о документах в форме notebooks

 

Понятие о документах в форме notebooks

Как уже отмечалось, для выполнения простых арифметических операций достаточно набрать необходимое математическое выражение и нажать клавиши Shift и Enter одновременно (сама по себе клавиша Enter используется только для перевода строки внутри текущей строки ввода).

Нетрудно заметить, что вычисления в оболочке системы проходят так же, как при вычислениях на обычном калькуляторе. Однако прежде чем получить результат первого вычисления, даже столь простого, как вычисление 2 + 3, вам придется запастись терпением и дождаться, когда система загрузит свое ядро.

Даже у ПК с процессором Pentium II время первоначальной загрузки доходит до нескольких секунд. Впрочем, последующие вычисления (если они не слишком сложны) происходят уже почти мгновенно — особенно при применении Mathematica 4.

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

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

Чтобы документ имел форму «блокнота», надо предпринять определенные операции по форматированию документа и приданию ему нужного вида. Прежде всего, каждый шаг вычислений следует снабжать поясняющими надписями. Их можно прямо вводить в строки ввода, но затем отформатировать с использованием текстового формата подходящего стиля. Для этого выделяется строка ввода с текстовой надписью (щелчком на скобке соответствующей ячейки). Пространство внутри скобки при этом затеняется (делается черным). Затем выполняется команда меню Format | Style | Text (Alt+7). Она задает текстовый формат надписи, который является неисполняемым.

С помощью других команд меню Format, которые мы рассмотрим в дальнейшем, можно задать надпись разным шрифтом, разным цветом с выделением фона и т. д. Как уже отмечалось, для ввода математического выражения по шаблону и для представления его в естественной математической форме используется стандартный формат ячеек ввода (StandardForm). Рисунок 2.2 показывает созданный таким образом простой «блокнот», в котором наряду с поясняющими текстовыми надписями заданы вычисление определенного интеграла, вычисление суммы квадратов чисел от 1 до и и построение графика с помощью графической функции Plot.

Рис. 2.2. Простейший документ в форме «блокнота»

В «блокнотах» желательно, чтобы форма представления математических выражений хотя бы напоминала общепринятую. В этом отношении документы системы Mathematica 3/4 все еще уступают документам систем Mathcad для Windows — последние содержат записи математических выражений (включающих знаки интегралов, сумм, произведений, греческие буквы и прочие спецзнаки) в их обычном начертании. Более того, формулы, текстовые комментарии и графики могут располагаться как угодно — например, вдоль строки могут располагаться формулы, графики и таблицы вывода. Зато Mathematica 3/4 позволяет задавать формы представления документов, принятые в таких мощных языках программирования, как Fortran, С и даже ТеХ (язык для программирования типографского набора сложных научных текстов).

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

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

Честь и хвала разработчикам Mathcad, обошедшим эту проблему и создавшим интерфейс, способный готовить документы с произвольным расположением блоков. Однако об оборотной стороне медали — перекрытии блоков при увеличении их размеров — забывать в данном случае не стоит.

 

gl2-2.jpg

Изображение: 

5. Особенности интерфейса Mathematica 4

 

Особенности интерфейса Mathematica 4

Интерфейс системы Mathematica 4 в целом повторяет интерфейс третьей версии, кратко описанный выше. Однако ряд внешне незаметных, но существенных новинок все же введен:

  • улучшена плавная прокрутка больших документов;
  • введен экспорт табличных данных;
  • улучшены возможности создания документов в стиле Notebook;
  • добавлена панель ввода шаблонов ЗD-фигур;
  • расширена поддержка преобразований файлов в формат HTML;
  • введена дополнительная команда для вывода в формате ТеХ;
  • обеспечена поддержка дополнительных наборов символов, включая символы китайского и корейского языков;
  • переработаны редакторы программ с цветной раскраской листингов;
  • улучшены средства отладки программ;
  • улучшена связь программных модулей.

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

Рис. 2.3. Вид документа системы Mathematica 4 со встроенным рисунком

Размеры блокнота практически не ограничены, и он может быть распечатан во всей красе с помощью цветного струйного или лазерного принтера.

В новых версиях Mathematica появилась возможность подготовки документов в виде, непосредственно пригодном для их отправки по сети Интернет. Для этого потребовалось создание специальных средств для неискаженной передачи математических выражений (формул). В результате фирмой Wolfram был создан специальный стандарт MathML, позволяющий устанавливать документы системы Mathematica 4 на W3C Web-узлах. В настоящее время этот стандарт поддержан многими ведущими компьютерными компаниями. По существу, он является расширением языка гипертекстовых ссылок HTML.

 

gl2-3.jpg

Изображение: 

6. Работа с файлами

 

Работа с файлами

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

Основные виды файлов и пакеты расширения

Файлы документов прежних версий системы Mathematica имели расширение .та (от слов Mathematical Applications — применения системы Mathematica), их можно загружать в окно редактирования для исполнения, дополнения или редактирования. При записи таких файлов система одновременно создает бинарные файлы с расширением .mb, хранящие битовый графический образ документа. Благодаря этому считывание файлов ранее подготовленных в системе документов происходит быстро, без включения в работу символьного процессора, так что текст с графиками сразу появляется на экране дисплея.

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

В версиях Mathematica 3/4 основным типом документов стали блокноты (notebooks). Им соответствуют файлы текстового формата с расширением .nb. Эти файлы могут редактироваться любым текстовым редактором, поддерживающим формат ASCII. Файлы содержат подробное описание документа с указаниями типов шрифтов, деталей оформления и местоположения различных объектов. Они завершаются довольно пространным описанием того, что собой представляет notebook. К сожалению, это ведет к значительному росту объема таких файлов — он значительно больше, чем у документов систем Mathcad. Зато файлы блокнотов весьма наглядны, и при необходимости в них может разобраться обычный пользователь.

Кроме того, система имеет ряд стандартных пакетов расширения (в оригинале — Add-Ons), расположенных в каталоге ADDONS:

  • Algebra — работа с полиномами, алгебраическими неравенствами, Гамильтоно-вой алгеброй и т. д.
  • Calculus — символьные вычисления производных, интегралов и пределов функций, прямое и обратное преобразования Фурье и Лапласа, решение систем нелинейных уравнений, реализация инвариантных методов, решение дифференциальных уравнений в частных производных, нахождение полных интегралов и дифференциальных инвариантов нелинейных уравнений, аппроксимация Паде, вычисление эллиптических интегралов и работах векторами.
  • DiscreteMath — вычисления из области дискретной математики, комбинаторики, вычислительной геометрии и теории графов, решение рекуррентных и разностных уравнений, операции с целыми числами и т. д.
  • Geometry — функции для выполнения геометрических расчетов, создания правильных прямоугольников и многогранников, вращения геометрических фигур в плоскости и в пространстве.
  • Graphics — построение графиков специального вида, геометрических фигур и поверхностей, графиков параметрически и неявно заданных функций, представления функций комплексного переменного, отображение ортогональных проекций трехмерных фигур, имитация теней, средства оформления графиков.
  • LinearAlgebra — решение задач линейной алгебры, дополнительные векторные и матричные операции, задание ортогональных векторных базисов и т. д.
  • Miscellaneuos — задание единиц измерения физических величин, данные о химических элементах, физические константы, географические данные и все прочее, не вошедшее в другие категории.
  • NumberTheory — функции теории чисел.
  • NumericalMath — реализация важнейших численных методов, аппроксимация данных и аналитических функций полиномами, сплайнами и тригонометрическими рядами, численное интегрирование и дифференцирование, решение дифференциальных уравнений, вычисление корней нелинейных уравнений, нахождение вычетов и разложений в комплексной плоскости и т. д. .
  • Statistics — статистические функции для непрерывных и дискретных распределений, реализация линейной и нелинейной регрессии, вычисление параметров ряда распределений (особенно нормального), функции сглаживания и подгонки данных и т. д.
  • Utilities — дополнительные утилиты для работы с бинарными файлами и памятью компьютера, поддержки языков, работы с системами класса AutoCAD и т.д.

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

В версии Mathematica 4 число файлов в пакетах расширения несколько сокращено по сравнению с версией Mathematica 3. Часть таких файлов вообще являются «пустышками» — они оставлены ради сохранения полной совместимости с предшествующими версиями системы. Перенос части имеющихся в пакетах расширений функций и команд в тщательно оптимизированное ядро системы позволил существенно повысить скорость выполнения соответствующих операций.

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

Меню File

Для работы с файлами служит меню File (рис. 2.4).

Рис. 2.4. Меню File

В этом меню содержатся следующие команды:

  • New (Ctrl+N) — вывод окна нового документа;
  • Open (Ctrl+0) — загрузка существующего документа;
  • Close (Ctrl+F4) — закрытие текущего окна;
  • Save (Ctrl+S) — запись документа с текущим именем;
  • Save As (Shift+Ctrl+S) — запись документа с изменением имени;
  • Save As Special — запись в специальных форматах;
  • Open Special — открытие файлов в специальных форматах;
  • Import — вставка содержимого файла в ячейку текущего документа;
  • Send To — зарезервированная команда;
  • Send Selection — зарезервированная команда;
  • Palettes — вывод палитр математических спецзнаков, операторов и функций (см. выше раздел «Палитры математических операторов и функций»);
  • Notebook — вывод списка документов, которые загружались ранее;
  • Generate Palette from Selection — преобразует выделенные ячейки документа в палитру;
  • Generate Notebook from Palette — преобразует палитру в документ;
  • Printing Settings — установка параметров печати;
  • Print (Ctrl+P) — печать текущего документа;
  • Print Selection — печать выделенных ячеек;
  • Exit (Alt+F4) — завершение работы с системой.

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

Открытие окна нового документа — команда New

Команда New используется, когда нужно начать работу с новым документом. Эта команда полностью очищает экран, выводя запрос о том, нужно ли записать текущий документ, если он есть и модифицировался со времени последнего сохранения. Окно будущего документа получает имя Untitled-N (в версиях Mathematica 2.x имя было Newnb-N), где N — текущий номер документа. После исполнения этой команды можно начинать ввод документа с помощью клавиатуры и выполнять его редактирование. Важно отметить, что даже эта. команда не отменяет определений, сделанных в предшествующих исполненных документах и в ранее загруженных файлах пакетов расширений. Лишь полная перезагрузка системы отменяет эти определения.

Загрузка ранее созданных документов — команда Open

Загрузка файлов ранее созданных документов — одна из самых распространенных операций. Она реализуется командой Open, которая служит для загрузки ранее созданного документа с его поиском в файловой системе компьютера. Эта команда выводит диалоговое окно, типичное для Windows-приложений и предназначенное для удобного поиска файлов (рис. 2.5).

Рис. 2.5. Диалоговое окно выбора файлов

Кроме команды Open, которая загружает документ, открывая его в новом окне, в меню File. имеется еще команда Import, вставляющая содержимое указанного файла в текущий документ. Обе команды позволяют загружать файлы как основного формата notebook с расширением .nb, так и файлы ряда других форматов.

Запись документа с текущим именем — команда Save

Если документ создан с помощью команды New или открыт с помощью команды Open, то он обычно подвергается модификации и редактированию. После отладки документа его измененный вариант бывает нужно записать на магнитный диск — гибкий или жесткий. Для этого служат команды Save и Save As. Команда Save выполняет запись текущего документа без изменения его имени. Поэтому она выполняется быстро и без каких-то дополнительных действий. Запись идет в формате notebook.

Запись документа с заданным именем — команда Save As

Команда Save As позволяет изменить имя файла и поместить его в любую директорию любого диска. Эта команда вызывает появление диалогового окна, показанного на рис. 2.6.

Рис. 2.6. Окно сохранения файла документа

Помимо установок диска и нужной директории следует задать имя записываемого файла или подтвердить предлагаемое имя. Вводить расширение не обязательно — система сама позаботится об этом. Запись идет в формате notebook.

Операции с файлами в специальных форматах

Mathematica может записывать и считывать файлы, представленные в ряде специальных форматов. С помощью команды Save As Special можно записывать файлы в следующих форматах:

  • Version 2 Notebook — формат блокнотов старой версии системы (.mа);
  • Text — текстовый формат (.txt);
  • Cell Expression — формат ячеек;
  • Notebook Expression — формат выражений в блокнотах;
  • Package Format —формат пакетов расширения (.m);,
  • ТеХ — формат редакторов семейства ТеХ (.tex);
  • HTML — формат гипертекстовой разметки (.htm).

Из специальных форматов файлов следует особо выделить два — ТеХ и HTML. Формат ТеХ используется весьма популярными у математиков редакторами математических текстов, насыщенных математическими знаками и формулами. Фактически, ТеХ представляет собой особый язык программирования, предназначенный для разметки математических выражений. Возможность работы систем Mathematica с данным форматом позволяет публиковать подготовленные в системах Mathematica документы в изданиях, ориентированных на математиков.

Формат HTML используется при подготовке страниц для Интернета. HTML — это язык гипертекстовых ссылок, позволяющих быстро переходить от одного документа к другому. Возможность работы Mathematica с этим форматом позволяет готовить документы, которые могут вставляться в.Интернет-страницы и немедленно, без какой то доработки, передаваться по сети — в том числе с помощью электронной почты. В последнее время формат HTML становится стандартным для подготовки электронных документов и книг, а также для создания высококачественных (в том числе обновляемых через Интернет) справочных систем.

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

Преобразование документов в палитры и наоборот

Любую часть документа после выделения можно преобразовать в палитру. Для этого используется команда Generate Palette from Selection.

Палитра — это уменьшенное окно, похожее на окно документа, но имеющее в строке заголовка только имя и кнопку закрытия (у обычного окна кнопок в строке заголовка три). Палитру, как и документ, можно записывать на магнитные диски. Для преобразования палитры в документ используется команда Generate Notebook from Palette.

Установка параметров печати — подменю Printing Settings

Подготовленный документ обычно нуждается в печати. Многие предпочитают обдумывать и корректировать документы, используя их распечатки, не очень удачно именуемые «твердыми копиями». Нередко бывает нужна распечатка даже промежуточных версий документов.

Команда Printing Settings выводит подменю с тремя операциями. Первая — Page Setup — служит для установки параметров страниц при печати. Она выводит окно, показанное на рис. 2.7. Это окно операционной системы Windows 95/98 содержит типовые установки параметров страниц — их размер, ориентацию, способ подачи бумаги и размеры полей.

Рис. 2.7. Окно установки параметров страницы при печати документа

Вторая операция — Printing Options — служит для установки типовых опций пе чати. Их устанавливают в окне, показанном на рис. 2.8.

Рис. 2.8. Окно установки опций печати

Третья операция — Headers and Footers — служит для установки верхних и нижних колонтитулов (надписей сверху и снизу на каждой печатаемой странице). Эта операция выводит окно, показанное на рис. 2.9. В нем можно задать основные параметры колонтитулов и ввести соответствующие надписи.

Поскольку документы Mathematica могут иметь самые разнообразные средства выделений и цветной раскраски, то наиболее подходящим для печати документов в настоящее время является цветной струйный принтер. Сейчас можно приобрести высококачественные принтеры такого типа по цене от $150 до $300. Лазерные принтеры стоят примерно вдвое дороже и обеспечивают высококачественную монохромную печать. О цветных лазерных принтерах можно и не упоминать — их стоимость настолько велика, что пока они доступны только крупным фирмам.

Рис. 2.9. Окно задания колонтитулов

Mathematica для Windows не имеет своей собственной системы печати и использует стандартную систему печати операционных систем Windows 3.1/3.11/95/ 98/NT. При этом окна настройки печати задаются драйверами, установленными для применяемых принтеров. К примеру, Windows 98 поддерживает сотни типов принтеров десятков фирм. Для определенности ниже рассматриваются установки печати для широко распространенного цветного струйного принтера Epson Stylus Color 600, который при цене менее $300 обеспечивает высочайшее качество печати с разрешением до 1420 точек на дюйм при 16,7 миллионах цветовых оттенков. Этот принтер имеет два картриджа — для обычной черно-белой печати и для цветной печати (с тремя чернильницами, заполненными чернилами разных цветов).

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

Как правило, превосходные по качеству документы дают и монохромные принтеры, особенно лазерные. Профессиональные монохромные принтеры обычно печатают текст документа в виде PostScript-графики. При этом полутона серого изображения воспроизводятся путем соответствующего выбора густоты точек и штриховых линий (наподобие печати фотографий в газетах).

В целом, можно сказать, что печать идет по известному принципу WYSIWYG — что видишь, то и будет напечатано. К сожалению, определенные отличия в том, что видно на экране дисплея и что напечатано принтером, все же могут быть. К примеру, знаки деления, видимые в виде горизонтальной черты на экране дисплея, в текстовом формате выглядят непрерывными, а принтерами часто печатаются пунктиром — это может привести к недоразумениям со знаками «минус». Случается и расхождение размеров шрифтов, способное нарушить правильность расположения частей формул по горизонтали. В таких случаях рекомендуется поэкспериментировать со стилями ячеек. Как правило, стили, основанные на графическом представлении данных, печатаются без искажений. Вообще же Mathematica имеет обширные возможности по стилевому оформлению документов и настройке качества печати под любой принтер.

Печать документов — команда Print

После настройки параметров можно осуществить собственно печать с помощью команды Print для всего документа или Print Selection для печати только выделенных ячеек. Команда Print открывает окно печати, показанное на рис. 2.10.

Рис. 2.10. Окно печати

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

Для начала печати надо нажать кнопку ОК, кнопка Отмена позволяет отменить печать, а кнопка Справка — вывести справку о печати. При печати документа появляется (иногда кратковременно) окно принтера, демонстрирующее процесс печати. Это окно показано на рис. 2.11.

Рис. 2.11. Процесс печати

Окно принтера отображает не только нормальный ход печати, но и различные аварийные ситуации. Например, если принтер не включен, то на его изображении появится жирный красный крест. Отображаются и другие ситуации, например, заминание бумаги или ее отсутствие, окончание чернил в чернильнице, обрыв кабеля и т. д. Следует отметить, что разрешение современных принтеров при печати намного выше разрешения дисплея, поэтому качество отпечатанных документов (особенно их графической части) может быть заметно выше, чем при прямом просмотре на экране дисплея — например, у графиков практически отсутствуют зазубрины на кривых, хорошо видимые на экране.

Нажатие кнопки Свойства в окне (рис. 2.10) выводит окно настройки принтера. Вид этого окна зависит от применяемого для печати принтера и установленного для него драйвера. В связи с этим работа с данным окном подробно не рассматривается.

Команда Print Selection служит для печати набора выделенных ячеек. Обычно она также выводит окно печати, показанное на рис. 2.10. В этом окне, как отмечалось, можно выбрать нужный принтер из нескольких, если их драйверы были инсталлированы.

Завершение работы с системой — команда Exit

Команда Exit используется для окончания работы с системой Mathematica. Если все документы, с которыми пользователь работал (их может быть много), были записаны на диск, то при исполнении этой команды можно наблюдать последовательное закрытие окон с текстами документов. Если какой-то из документов не был записан после модификации, то команда Exit выведет запрос о необходимости записи.

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

 

gl2-10.jpg

Изображение: 

gl2-11.jpg

Изображение: 

gl2-4.jpg

Изображение: 

gl2-5.jpg

Изображение: 

gl2-6.jpg

Изображение: 

gl2-7.jpg

Изображение: 

gl2-8.jpg

Изображение: 

gl2-9.jpg

Изображение: 

7. Редактирование документа

 

Редактирование документа

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

Основные понятия о документах и их стилях

Вообще говоря, системы Mathematica 3/4 работают с «блокнотами» (Notebooks), которые могут содержать множество ячеек различного типа. Однако слово «блокнот» при частом его употреблении действует на нервы российскому читателю — в частности, так у нас уже привыкли называть миниатюрные компьютеры. Название «записная книжка» тоже не очень удачно, хотя бы из-за того, что содержит два слова. Поэтому мы будем пользоваться более распространенным понятием документа.

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

Редактированием документа является всякое изменение текста комментариев, исходных данных и математических формул с целью придания документу более подходящего вида (стиля) или получения новых результатов. К редактированию относится и изменение формата графиков. Простейшие приемы редактирования настолько естественны, что не нуждаются в особых пояснениях — разумеется, если у пользователя есть хотя бы начальный опыт работы с Windows и встроенными в эту оболочку текстовыми редакторами Write и WordPad (либо с популярным редактором Word 95/97 ).

Для редактирования содержимого ячеек документов в них вводится текстовый курсор. Для этого курсор мыши устанавливается в нужное место ячейки и нажимается левая кнопка мыши — в этом месте и появляется текстовый курсор. Для редактирования используется обычный строчный редактор, который хорошо знаком даже начинающим пользователям, — именно с его помощью вводятся команды MS-DOS. В силу этого не будем описывать возможности этого редактора подробно. Напомним лишь, что они предусматривают перемещение маркера ввода, забой (удаление) символа слева (клавиша Backspace) или справа (клавиша Del) от курсора, установку режима вставки (клавиша Ins) и т. д.

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

От выбора стиля документа во многом зависят его наглядность и эстетичность восприятия. Поэтому в Mathematica предусмотрены обширные возможности изменения стиля документов и их частей. Они сосредоточены в меню Format, содержащем многочисленные подменю. Однако обилие средств установки стиля порождает проблему совместимости стилей. Для ее решения используются специальные средства преобразования стилей. Для ячеек они сосредоточены в меню Cell

Выделения в документах и использование мыши

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

Важным моментом в работе с документами является выделение их элементов — ячеек ввода и вывода, их содержимого и т. д. Для выделения ячейки достаточно щелкнуть на ее правой скобке — скобка заполнится черным цветом, это и есть выделение ячейки. На рис. 2.12 показана выделенная ячейка вывода с числом. Если при этом нажать правую кнопку мыши, появится контекстно-зависимое меню, которое также показано на рис. 2.12, с раскрытым подменю Copy As, позволяющим скопировать содержимое выделенной ячейки в буфер обмена Windows (Clipboard; далее он будет именоваться просто буфером).

В другом случае (рис. 2.13) показан выделенный рисунок. Для выделения рисунка (графика) достаточно поместить курсор мыши в область рисунка и щелкнуть левой кнопкой мыши. Рисунок будет обведен рамкой с характерными прямоугольниками.? Перетаскивая их мышью, можно растягивать график в разные стороны и менять его размер. В этом случае также можно вывести контекстно-зависимое меню — оно тоже показано на рис. 2.13.

Рис. 2.12. Выделенная ячейка вывода и ее контекстно-зависимое меню

Рис. 2.13. Выделенный график и его контекстно-зависимое меню

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

Когда курсор мыши находится в пределах ячейки ввода или вывода, двойной щелчок вызывает выделение некоторой части этой ячейки. Это выделение можно расширять повторными щелчками. Можно расширять область выделения путем перетаскивания курсора при нажатой левой кнопке мыши.

Если курсор мыши находится в ячейке ввода, он используется для точного указания места, в котором должно начаться редактирование. После щелчка левой кнопкой мыши появится текстовый курсор в виде вертикальной черты. За пределами ячеек (то есть в областях меню, линеек и т. д.) курсор мыши имеет обычный вид наклонной стрелки.

Наряду с выделением ячеек как отдельных объектов Mathematica 3/4 сохраняет привычный пользователям многих программ (например Word 95/ 97) способ выделения части содержимого ячейки путем перетаскивания курсора мыши. В этом случае, как обычно, выделение индицируется темным фоном выделенного участка. В отношении таких выделений также возможна работа с буфером обмена. Оба вида выделений (ячейки и ее части) одновременно невозможны — оно и понятно, буфер-то один!

 

Подготовка текстовых комментариев

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

Тестовые комментарии вводятся прямо в текущую строку ввода с использованием стандартных приемов строчного редактирования. Однако не следует завершать ввод нажатием комбинации клавиш Shift+Enter, так как это приведет к выводу комментария в строку вывода с возможными сообщениями об ошибках (рис. 2.14). Они обусловлены тем, что в текстовых комментариях обычно не придерживаются синтаксиса входного языка системы Mathematica, что и чревато появлением ошибок.

Чтобы отмеченная ситуация не повторялась, просто установите курсор мыши под строку ввода с комментарием, а затем щелкните левой кнопкой мыши — в новой строке ввода можно будет размещать новый комментарий или математические выражения для вычислений.

Часто в ходе редактирования приходится изменять текстовые комментарии, например заголовки в документах. Для этого достаточно выделить ту ячейку, в

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

Рис. 2.14. Примеры ввода текстовых комментариев

Далее можно выбрать тип оформления ячейки. Для установки стиля ячеек используется ряд команд, которые собраны в меню Format | Style. Эти команды более подробно будут рассмотрены далее. Пока же отметим, что обычные текстовые комментарии рекомендуется отформатировать стилем Text или SmallText (в этом случае ячейки ввода имеют статус текстовых ячеек, не дающих вывод).

К важной операции редактирования ячеек с текстами комментариев относится выравнивание текстов в пределах строки ввода. Для оперативного осуществления этой операции целесообразно вывести панель инструментов (ToolBar) и мерную линейку (Ruler). Соответствующие команды (Show ToolBar и Show Ruler) находятся в меню Format. На рис. 2.15 представлено окно документа с панелью инструментов, линейкой и примерами форматирования строки ввода с текстовыми комментариями. Для быстрого форматирования используются четыре кнопки с изображением соответствующего отформатированного текста.

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

Рис. 2.15. Различные типы выравнивания текстовых надписей

 

Меню Edit

Основные операции редактирования сосредоточены в меню Edit. Рисунок 2.16 показывает вид экрана системы с открытыми меню Edit и двумя его подменю.

Как видно из рис. 2.16, в меню Edit сосредоточены следующие команды:

  • Undo (Ctrl+Z) — отмена операции;
  • Cut (Ctrl+X) — перенос содержимого ячейки в буфер;
  • Copy (Ctrl+C) — копирование содержимого ячейки в буфер;
  • Paste (Ctrl+V) — вставка информации из буфера без его очистки;
  • Clear (Del) — уничтожение выделенной ячейки;
  • Copy As — копирование содержимого ячейки в буфер в заданном формате;
  • Paste As — вставка информации из буфера в заданном формате;
  • Save Selection As — запись выделенных ячеек в специальных форматах;
  • Select All (Ctrl+A) — выделение всех ячеек;
  • Insert Object — вставка объектов;
  • Motion — различные перемещения в текстовом блоке;
  • Expression Input — ввод выражений в разных форматах;
  • Make 2D (Shift+Ctrl+Y) — преобразование текстовой строки ввода в двумерный формат;
  • Check Balance (Shift+Ctrl+B) — поиск пары скобок, окружающих место расположения текстового курсора;
  • Check Spelling (Alt+;) — проверка орфографии;
  • Preferences — вызов окна настроек системы.

Рис. 2.16. Меню Edit

Часть из этих команд дублирует описанные выше операции — в частности, операции по работе с буфером. Другие требуют некоторого пояснения. Так, команда Save Selection As служит для записи выделенных ячеек в файлы специальных форматов. Подменю с перечнем этих форматов показано на рис. 2.17.

Рис. 2.17. Подменю команды Save Selection As

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

Команда Insert Object открывает окно вставки объектов, показанное на рис. 2.18. Это стандартное окно, имеющееся во всех приложениях операционной системы Windows 95/98/NT. В окне есть перечень приложений, которые могут экспортировать в Mathematica порожденные ими объекты. Это могут быть тексты, рисунки, документы различных программных систем и т. д. Такие объекты внедряются в ячейки Mathematica и могут редактироваться теми программами, которые их породили. Позже мы рассмотрим технологию вставки объектов более подробно.

Рис. 2.18. Окно вставки объектов

Для редактирования больших текстовых блоков служат команды подменю Motion. Это стандартные команды перемещения курсора по отдельным символам, словам и т. д. Следует отметить, что правильное их исполнение гарантируется только для англоязычных текстов. Эта группа команд применяется редко — чаще всего перемещение текстового курсора производится с помощью клавиатуры. Кроме того, работать с такими командами через меню не очень удобно.

Команда Expression Input открывает подменю с рядом команд, задающих вид ячеек. Если надо представлять и редактировать ячейки ввода как двумерные объекты, то следует использовать команду Make 2D. Практика, однако, показывает, что гораздо проще вводить содержимое ячеек в обычном текстовом формате, чем в двумерном. В этот формат легко перейти средствами изменения формата ячейки.

Операции с буфером обмена

Как известно, операционные системы класса Windows имеют так называемый буфер обмена — в дальнейшем просто «буфер». Это специально организованная динамическая область памяти, в которую можно помещать информацию различного формата — например, текстовую или графическую. Буфер используется как для редактирования, так и для обмена информацией между различными приложениями. Буфер обладает определенным «интеллектом» и «понимает», какая именно информация (например, текстовая или графическая) в него помещается.

Команда Nut удаляет выделенную ячейку и помещает ее содержимое в буфер. Команда Сору делает то же самое, что и Cut, но без удаления выделенной ячейки. Команда Paste копирует содержимое буфера в место вставки, определяемое положением текстового курсора. При этом содержимое буфера сохраняется. Команда Paste and Discard, расположенная в подменю Paste As, переносит содержимое буфера на место, определяемое положением курсора, но при этом сам буфер очищается. Таким образом, в этом случае возможна только одна операция переноса. Ее применение разумно при перемещении больших объемов информации, поскольку позволяет сразу же высвободить память, занимаемую буфером. Команда Clear уничтожает выделенную ячейку без ее сохранения в буфере.

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

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

Существование многих форматов для ячеек разного типа нередко препятствует организации корректного обмена данными между системой Mathematica и другими программными средствами и приложениями. В этом случае можно рекомендовать попробовать осуществить обмен, явно выбрав подходящий формат данных, благо выбор форматов в системе довольно обширный. Скопировать или вставить данные в заданном формате можно с помощью команд, собранных в подменю Edit -> Copy As и Edit -> Paste As.

 

gl2-12.jpg

Изображение: 

gl2-13.jpg

Изображение: 

gl2-14.jpg

Изображение: 

gl2-15.jpg

Изображение: 

gl2-16.jpg

Изображение: 

gl2-17.jpg

Изображение: 

gl2-18.jpg

Изображение: 

8. Работа с ячейками

 

Работа с ячейками

Понятие о ячейках документов

Итак, ячейки (Cells) являются основными объектами документов. Ячейки отличаются друг от друга статусом, то есть совокупностью свойств, определяющих тип ячейки и ее поведение в различных ситуациях. Важными понятиями, относящимися к ячейкам и отражающими особенности работы систем символьной математики, являются понятия оценивания (evaluation) и модификации содержимого ячеек.

К примеру, ячейки, содержащие текстовые надписи-комментарии, не оцениваются и не меняются в ходе пересчета документа. Ячейки ввода, напротив, оцениваются, их содержимое меняется, и они порождают ячейки вывода с разным содержимым — например, ячейка, выражение которой содержит функцию f [х], будет меняться в соответствии с изменением f [ х ]. Ячейки могут быть заблокированными от модификации, разблокированными и т. д. Итак, статус ячеек постоянно проверяется с помощью операции оценивания в ходе пересчета документа.

Статус ячеек можно распознать и без пересчета документа по ряду характерных признаков. Один из них — вид курсора мыши при его размещении в области ячеек — был описан выше. Другой признак — малозаметный опознавательный знак в верхней части квадратной скобки, обрамляющей ячейку. Отсутствие знака означает, что это обычная ячейка ввода. Знак «-» (короткая горизонтальная черточка) отмечает ячейку вывода со статусом Inactive. Заблокированная (закрытая) ячейка {Locked) помечается знаком «х», а инициализационная ячейка (Initialization) — знаком «т». Кроме того, меняющие свое содержимое ячейки отмечаются маленьким треугольником. О типе ячейки можно также судить по ее стилю, в частности по шрифту используемых в ней символов.

Для получения информации о стиле ячейки нужно поместить в нее текстовый курсор. Текущий стиль будет показан в списке стилей, имеющемся на панели форматирования (команда вывода этой панели на экран, как уже говорилось; расположена в меню Format). Для смены стиля ячейки просто выберите нужный вариант в списке. Это можно сделать и с помощью команд меню Format | Style.

Меню Cell

В меню Cell (рис. 2.19) собраны команды для работы с ячейками. Как видно из рис. 2.19, это меню содержит следующие команды:

  • Convert To — преобразование формата ячеек;
  • Display As — установка формата отображения ячеек;
  • Default Input Format Type — установка формата по умолчанию для ячеек ввода;
  • Default Output Format Type — установка формата по умолчанию для ячеек вывода;
  • Default Inline Format Type — установка формата по умолчанию для ячеек Inline;
  • Cell Properties — установка свойств ячеек;
  • Cell Grouping — группировка ячеек;
  • Divide Cell (Shift+Ctrl+D) — разделение сгруппированных ячеек;
  • Merge Cells (Shift+Ctrl+M) — объединение ячеек;
  • Animate Selected Graphics (Ctrl+Y) — анимация выделенной ячейки с графиком;
  • Play Sound — воспроизведение синтезированного звука;
  • Rerender Graphics — построение графиков заново;
  • Rerender And Save Graphics — построение графиков заново с последующей записью;
  • Make Standard Size — установка стандартного размера ячейки;
  • Allign Selected Graphics — выравнивание выделенных графиков;
  • Cell Size Statistics — вывод статистики о размерах ячеек.

Далее эти команды описаны более подробно.

Рис. 2.19. Меню Cell

 

Манипуляции с ячейками

При вводе данных в ячейки ввода данные представляются в одном из форматов, заданных командой Default Input Format Type. Соответственно, в ячейках вывода результаты представляются в формате, установленном командой Default Output Format Type. Однако есть возможность изменить формат данных в ячейках с помощью команды преобразования форматов Convert To. Эта команда открывает подменю с перечнем всех возможных форматов (см. рис. 2.19). Текущий формат ячейки помечен галочкой. Для задания другого формата надо выбрать его в подменю, предварительно активизировав ячейку.

Как видно из рис. 2.19, возможна установка следующих форматов ячеек:

  • InputForm (Shift+Ctrl+I) — формат ввода; О OutputForm — формат вывода; . ..
  • StandardForm (Shift+Ctrl+N) — стандартный формат;
  • TradidonalForm (Shift+Ctrl+T) — традиционный формат;
  • PostScript — векторный графический формат PostScript;
  • Bitmap — растровый формат изображений;
  • Metafile — векторный графический формат Windows Metafile.

Из этих форматов (стоит их просмотреть, поскольку форматов множество) особо надо отметить стандартный формат, который позволяет отображать формулы в ячейках ввода в виде, наиболее приближенном к обычному, то есть с применением стандартных математических знаков для интегралов, сумм, произведений и т. д. Указанные форматы фигурируют и в других подменю меню Cell.

Подменю Cell Properties служит для установки свойств, то есть статуса ячеек. Это подменю содержит следующие команды:

  • Cell Open — делает ячейку открытой или закрытой;
  • Cell Editable — делает ячейку редактируемой или нередактируемой;
  • Cell Edit Duplicate — делает ячейку заново создаваемой при попытке редактирования;
  • Cell Evaluatable — делает ячейку оцениваемой или неоцениваемой;
  • Cell Active — делает ячейку активной или неактивной;
  • Initialization Cell — делает ячейку инициализационной или неинициализационной.

Установка свойств выделенной ячейки осуществляется выбором нужной команды в подменю Cell Properties. Одновременно может быть установлено несколько свойств. Для удаления свойства надо выбрать соответствующую команду еще раз.

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

Интересно отметить, что редактировать можно не только входные, но и выходные ячейки — например, вручную задавая более приемлемый вид результата. Однако для этого выходную ячейку надо сделать редактируемой, установив свойство Cell Editable. Редактируемая ячейка имеет символ «?» у своей обрамляющей скобки.

Ячейки могут быть оцениваемыми и исполняемыми или неоцениваемыми, что задается командой Cell Evaluatable. Только оцениваемые ячейки исполняются ядром системы и порождают выход. Неоцениваемые ячейки помечаются знаком «-» в обрамляющей их правой скобке.

Исполнение начинается, как только происходит оценивание статуса какой-либо ячейки. От пользователя зависит, какие ячейки и в каких сочетаниях оцениваются при пересчете всего документа. Можно выполнить, например, выделение ячеек так, чтобы они оценивались только совместно, но не индивидуально.

Ячейки также могут быть активными и неактивными. Изменение активности достигается командой Сеll Active. Активная ячейка помечается в скобке знаком «А» и обычно управляется кнопкой.

Наконец, ячейки могут быть инициализационными и нет, в зависимости от установки свойства Initialization Cell. Инициализационная ячейка помечается в скобке знаком «|» и автоматически исполняется при загрузке документа, содержащего такую ячейку (или ряд ячеек).

Команда Group Cells используется для объединения ряда ячеек в одну группу. Вначале нужно выделить объединяемые ячейки (рис. 2.20), а затем использовать команду объединения.

Рис. 2.20. Выделение ячеек документа перед их объединением

При этом выбранные ячейки обрамляются общей для них длинной квадратной скобкой (рис. 2.21). Активизация этой скобки позволяет управлять просмотром ячеек.

Сделав двойной щелчок на группирующей скобке, можно получить скрытый блок ячеек, в качестве названия которого выступает первая ячейка (рис. 2.22). Таким образом можно поочередно то открывать, то закрывать блок ячеек. Заметим, что закрытые ячейки по-прежнему оцениваются в соответствии с их статусом (свойствами).

Рис. 2.21. Документ после объединения ячеек в группу

Рис. 2.22. Документ со скрытым блоком ячеек

Команда Ungroup Cells разъединяет объединенные в группу ячейки. Если при этом в группе есть ячейки, объединенные в более мелкие подгруппы, то они сохраняются. Для деления ячейки на части используется команда Divide Cell, а для объединения двух ячеек — команда Merge Cells.

Чтобы иметь возможность воспользоваться командами объединения и разъединения ячеек, необходимо предварительно выбрать в подменю Cell Grouping команду Manual Grouping. По умолчанию в этом подменю выбран режим Automatic Grouping, при котором Mathematica сама управляет группировкой ячеек, базируясь на их стилях.

Команда Open All Subgroups открывает все выделенные группы и подгруппы ячеек, а команда Close All Subgroups закрывает все выделенные группы и подгруппы.

Действие команды Open/Close Group уже описывалось — она сокращает число ячеек в группе так, что видимой остается только первая ячейка — как правило, имеющая титульную надпись.

Таким образом, команды управления статусом и объединением ячеек позволяют создавать довольно сложные структуры электронных документов с многочисленными открывающимися и закрывающимися вложениями. Такие документы удобны для создания полноценных электронных уроков и даже электронных книг. С системой поставляется множество примеров таких уроков, с которыми стоит познакомиться.

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

Работа с графическими и звуковыми возможностями

Система Mathematica обладает превосходными графическими возможностями — от построения двумерных и трехмерных графиков до синтеза сложных изображений (например цветных карт) и динамически изменяющихся поверхностей. Эти возможности задаются встроенными в ядро графическими функциями и дополняются средствами пакетов расширения.

Например, графическая функция


Plot[f[х],{х,xmin,xmax}]

строит, график произвольной математической функции f [ х ] одной переменной х при ее изменении от минимального значения xmin до максимального хтах.

Другая графическая функция,


Plot3D[f[x,y] , { {х, xmin, хтах}, {у, ymin, углах} } ]

строит график трехмерной поверхности для математической функции f [х,у] двух переменных, изменяющихся в указанных пределах. Примеры применения этих функций приводились ранее.

Каждая графическая функция в ответ на обращение к ней возвращает графический объект — тот или иной рисунок. Именно поэтому в системе Mathematica для построения графиков используются функции, а не операторы, как в большинстве языков программирования. Это говорит о том, что понятие функции в данной системе существенно расширено.

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

В меню Cell можно найти ряд команд, относящихся только к ячейкам вывода с графическими и звуковыми объектами (см. рис. 2.19) — ранее, в версиях ниже Mathematica 3.0, они были расположены в меню Graph.

В общих чертах назначение этих команд очевидно. Например, исполнение команды анимации для документа, содержащего подготовленный для анимации график, вызывает появление внизу окна анимационного проигрывателя (рис. 2.23).

Рис. 2.23. Окно документа с проигрывателем анимационных рисунков

Демонстрация на уроках математики или физики демонстрационных анимационных картинок в среде Mathematica 3/4 производит не изгладимое впечатление. Однако при их описании в обычных книгах эффект от созерцания таких картинок исчезает, поскольку анимация при этом невозможна. Тем не менее, показ отдельных фаз анимации позволяет улучшить восприятие материала и в данном случае.

Мы рассмотрим эти команды более детально после описания графических и звуковых возможностей систем Mathematica.

Операции форматирования ячеек

Mathematica обладает обширными возможностями форматирования ячеек ввода и вывода. К этим возможностям относятся изменение размеров и цвета символов, выбор шрифтов, задание цвета фона и т. д.

Команды меню Format

Средства форматирования сосредоточены в меню Format (рис. 2.24).

Рис. 2.24. Меню Format и его подменю Style

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

Изменение стиля документов

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

На рис. 2.25 представлена серия ячеек ввода, отформатированная под все возможные стандартные стили. Стили существенно отличаются друг от друга, что позволяет легко распознавать их визуально. Самые распространенные из них — это текстовые ячейки разного стиля и ячейки ввода и вывода.

Рис. 2.25. Ячейки ввода, отформатированные разными стилями

Следующие две команды меню Format — это ScreenStyleEnvironment и PrintStyle-Environment Данные подменю служат для изменения текущего формата ячеек документа при его наблюдении на экране дисплея и при печати. Возможны следующие установки:

  • Working — рабочий стиль (типичный);
  • Presentation — презентационный (увеличенные размеры символов);
  • Condensed — сжатый (уменьшенный размер символов);
  • Ptintout — принтерный (оптимальный для печати).

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

Опции стилей и программ и их изменение

Команда-ShowExpression служит для управления показом выражений в стандартном и развернутом видах. Например, введем и исполним простое выражение при отключенном режиме ShowExpression:


2*Log[3]/Exp[5]

2Log[3]/Е5

Здесь вид ячеек стандартный. А теперь, выделив эти ячейки и исполнив команду ShowExpression (Shift+Ctrl+E), получим представление в развернутом формате:


Cell["2*Log[3]/Exp[5]", "Input",

CellLabel->"In[53]:="]

Cell[BoxData[

FractionBox[

RowBox["2", " ",

RowBox["Log", "[", "3", "]"]],

SuperscriptBox["E", "5"]]], "Output",

CellLabel->"Out[53]="]

Такой формат является внутренним в том смысле, что он характерен для внутреннего представления вывода на экран дисплея, принятого в языке программирования системы Mathematica. Словом, это типичная программа для вывода указанных выражений. Чем сложнее выражение, тем длиннее и непонятнее для непосвященных выглядит его развернутое представление во внутреннем формате.

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


Имя_0пции->3начение_0пции

Даже в приведенном простом примере программы используются две опции.

Поспешим успокоить рядового пользователя системы Mathematica — опции задаются по умолчанию настолько удачно, что можно вообще не вспоминать о них, работая с системой без программирования. Тем не менее, система позволяет контролировать и изменять опции, используемые в программах. Для этого служит специальный инспектор опций, запускаемый командой меню Format -> Option Inspector (Shift+Ctrl+0). Эта команда выводит окно инспектора опций (рис. 2.26).

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

Рис. 2.26. Окно инспектора опций

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

Утонченное управление стилем документов

Целый ряд последующих команд служит для утонченного управления стилем документов:

  • Style Sheet — выбор готовых описаний стилей документа из обширного стандартного набора;
  • Edit Style Sheet — редактирование набора описаний стилей;
  • Font — установка типа шрифта;
  • Face — установка начертания символов (наклонное, полужирное, подчеркнутое);
  • Size — установка размера символов;
  • Text Color — установка цвета текста;
  • Background Color — установка цвета фона;
  • Chooze Font — вывод диалогового окна для задания сразу всех атрибутов шрифта;
  • Text Alignment — установка типа выравнивания текста (по правому краю, по левому краю, по центру);
  • TextJustification — установка выравнивания текста по ширине;
  • Word Wrapping — установка разбивки текста на строки;
  • Cell Dingbat — выбор маркеров ячеек из обширного списка (маркеры сохраняются при отключении номеров строк);
  • Horizontal Lines — установка типа горизонтальной линии сверху или снизу ячейки.

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

Управление элементами окна документа

В новых версиях Mathematica 3/4 управление окном документа также производится с помощью меню Format. Для этого имеются четыре команды:

  • Show Ruler — отображение мерной линейки;
  • Show ToolBar — вывод на экран панели инструментов;
  • Show Page Breaks — показ линий разрыва страниц;
  • Magnitification — установка (в процентах) масштаба отображения документа.

Все эти команды влияют на вид окна документа. На рис. 2.27 показан вид окна документа с мерной линейкой и панелью инструментов при задании масштаба отображения 200 % вместо обычных 100 %.

Рис. 2.27. Окно документа с линейкой и панелью инструментов при масштабе отображения 200 %

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

 

gl2-19.jpg

Изображение: 

gl2-20.jpg

Изображение: 

gl2-21.jpg

Изображение: 

gl2-22.jpg

Изображение: 

gl2-23.jpg

Изображение: 

gl2-24.jpg

Изображение: 

gl2-25.jpg

Изображение: 

gl2-26.jpg

Изображение: 

gl2-27.jpg

Изображение: 

9. Ввод элементов документов

 

Ввод элементов документов

Чтобы начать любые вычисления, нужно ввести по крайней мере исходные данные для вычислений и математические выражения, по которым выполняются вычисления. Иными словами, нужно освоить ввод элементов в создаваемые пользователем документы. Это и описывается в данном разделе.

Меню Input

Меню Input (рис. 2.28) содержит целый ряд описанных ниже команд ввода. Следует отметить, что для некоторых из этих команд более принятым является термин Insert (вставка).

Рис. 2.28. Меню Input и его подменю Create Button

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

Ввод координат двумерных графиков

Иногда бывает нужно знать координаты точек двумерных графиков. Например, это полезно при решении нелинейных уравнений с целью уточнения корней функции, график которой был построен. Mathematica имеет довольно своеобразную возможность определения координат произвольной точки графика и даже ряда точек. Они поясняются окном, которое выводится при исполнении команды Get Graphics Coordinates.

Для получения координат нужно прежде всего выделить двумерный график. Затем следует нажать и удерживать клавишу Ctrl и поместить курсор мыши вблизи нужной точки графика. При этом в левой части строки состояния появятся координаты точки. Можно повторить определение координат для ряда точек. Затем следует воспользоваться командой Сору для переноса координат точек в буфер, а затем, исполнив команду Paste, можно перенести список с координатами точек в текущую строку ввода. Это удобно делать, используя команды контекстно-зависимого меню, вызываемого правой кнопкой мыши. К примеру, координаты трех точек графика в строке ввода могут выглядеть так:


{{3.04804, 0.0165875}, {-8.21841, 0.73632},

{9.39226, 0.0165875}}

Этот способ не очень удобен, но зато позволяет получать списки координат ряда точек графика.

Выбор точки обзора трехмерных графиков

Команда 3D View Point Selector (Shift+Ctrl+V) служит для вывода селектора точки обзора трехмерных графиков (рис. 2.29). Это следует делать при наличии в документе трехмерного графика.

В этом окне имеется пространственное изображение куба, которое можно вращать с помощью мыши или путем перемещения ползунков прокрутки, задающих параметры просмотра и перспективы объекта (увы, сам объект при этом не виден). Для задания поворота рекомендуется окно с самой фигурой разместить рядом — на рис. 2.29 оно показано справа. В правой части окна вращения имеется ряд кнопок:

  • Close Dialog — завершение диалога;
  • Cancel — прекращение работы;
  • Paste — перенос параметров точки обзора в окно документа;
  • Defaults - возврат к принятым по умолчанию значениям параметров вращения и перспективы;
  • Help — вызов справки.

Рис. 2.29. Трехмерный график (справа) и селектор точки обзора (слева)

Действие всех кнопок вполне очевидно. Поэтому остановимся на главном - нажатие кнопки Paste создает строку с опцией Viewpoint [ {х, у, z} ], которая вставляется в текущий документ в месте расположения текстового курсора В нашем случае текстовый курсор надо расположить в строке функции Show [gl g2 ] после запятой, установленной вслед за g2. Если теперь исполнить модифицированную функцию Show, то рисунок будет перестроен (рис. 2.30).

Подобное средство введено и в новую версию системы Mathematica 4 -оно реализуется пакетом расширения RealTime3D. Мы его уже рассматривали. Вращение SD-объектов мышью - очень удобное средство. Оно позволяет в считанные секунды найти наиболее удачное положение фигуры или ряда фигур в пространстве, при котором их особенности видны наиболее отчетливо.

Разумеется, такая процедура поворота фигуры в пространстве не очень удобна При очередном повороте надо будет отредактировать строку с функцией Show!

убрав из нее старую запись опции Viewpoint и вставив новую запись. Между тем, в ряде систем компьютерной математики (например в Maple V R5 и Mathcad 8) уже давно появилось новое мощное средство редактирования изображений ЗD-объектов — их вращение мышью в реальном масштабе времени.

Рис. 2.30. Пример разворота трехмерной фигуры

Изменение цветовой гаммы

Команда Color Selector выводит стандартное окно изменения цветовой гаммы, используемой при функциональной окраске графиков (рис. 2.31). Это типовое окно системы Windows 95/98. С его помощью можно создать дополнительные цвета и изменить гамму цветов линий рисунков и заливки.

Не рекомендуется пользоваться селектором цветов без особой на то надобности. Практика показывает, что исходные установки цветов выбраны очень тщательно, с учетом особенностей нашего зрения. Обычно после изменения установок цвета пользователь быстро осознает, что его цветовые «новации» лишь испортили цветовую гамму рисунков, и возвращается к исходной установке цветов.

Рис. 2.31. Окно селектора цветов

 

Звукозапись

Команда Record Sound выводит окно программы Звукозапись, входящей в состав операционной системы Windows 95/98 (рис. 2.32). Звукозапись — это специальное приложение, позволяющее записывать звуки с микрофона и воспроизводить их с помощью звуковой карты компьютера. Органы управления программы по виду подобны применяемым у обычных магнитофонов, а потому не нуждаются в подробном описании.

Рис. 2.32. Интерфейс программы Звукозапись

Особенности работы со звуком будут описаны в дальнейшем. Отметим лишь, что Mathematica имеет возможность работы как с математическим синтезом звуковых сигналов, так и с реальными звуковыми сигналами речи и музыки, записываемыми в виде файлов с расширением .wav. Для такой записи и служит команда Record Sound.

Не стоит забывать, что для реализации возможностей записи и воспроизведения звуков компьютер должен быть оснащен звуковой платой, звуковыми колонками или наушниками и микрофоном. Желательно, чтобы эти средства были отлажены в среде Windows 95/98 до их использования системой Mathematica.

Вставка имен файлов

Иногда возникает необходимость вставить в документ ссылку на имя файла, в котором хранятся какие-либо данные. Команда Get File Path предоставляет удобный способ вставить в документ имя файла вместе с полным путем к нему. При выборе команды открывается стандартное окно загрузки файлов. После выбора нужного файла и щелчка на кнопке Open полное имя файла будет вставлено в документ в месте расположения текстового курсора.

Ввод таблиц, матриц и палитр

Задание таблиц и матриц в системе Mathematica легко выполняется с помощью соответствующих функций. Однако команда Create Table/Matrix/Palette дает возможность сделать это и через главное меню. Она выводит окно задания таблиц, матриц и палитр, показанное на рис. 2.33 справа.

Рис. 2.33. Работа с окном Create Table/Matrix/Palette

Практика показывает, что таблицы и матрицы малых размеров проще вводить в виде списков в режиме ввода из командной строки. Только в том случае, когда вводимые элементы таблиц и матриц — громоздкие числа, их удобнее вводить с помощью окна Create Table/Matrix/Palette.

В левой части документа показаны примеры работы с данным окном. Оно выводит палитру матриц — по умолчанию из трех строк и трех столбцов. Возможны разные варианты представления матриц в строках ввода — с подчеркнутыми строками, обведенные рамкой, с кнопками ввода и без них. Но в любом случае исполнение строки ввода создает список, соответствующий введенной таблице или матрице. Если ввод не был завершен, то вместо элемента таблицы или матрицы выводится кнопка.

Ввод и редактирование кнопок

При создании сложных документов для диалогового режима работы с системой Mathematica иногда полезно создание кнопок. Оно выполняется командой Create Button. Она выводит подменю, содержащее небольшое число типов кнопок. Например, кнопка типа Evaluate Cell служит для создания ячейки, исполняющей вычисления. Она выглядит как прямоугольник:


2+3/4;

Обратите внимание на то, что записанное перед кнопкой выражение не вычисляется, поскольку строка завершается точкой с запятой. Если активизировать кнопку двойным щелчком, получим вместо кнопки знак «%» и выполнение вычислений:


%

11/4

Редактирование кнопок осуществляется по команде Edit Button. Она выводит окно редактирования кнопок, показанное на рис. 2.34. В этом окне содержатся перечень кнопок и окно с программой, создающей кнопку с нужными свойствами.

Рис. 2.34. Окно редактирования кнопок

Редактирование как внешнего вида кнопок, так и их назначения требует знания языка программирования системы Mothematica. Поэтому мы ограничимся приведенными выше сведениями о создании кнопок. Чаще всего пользователи обходятся без этой своеобразной возможности и вспоминают о ней лишь тогда, когда становятся способными составлять в среде Mathematica полноценные учебные программы.

Вставка гиперссылок

Гиперссылка является объектом класса ButtonBox (кнопка), связанным с некоторым другим объектом, представленным файлом — например, каким-либо документом или рисунком. При активизации гиперссылки загружается связанный с ней объект.

Гиперссылка создается следующим образом. В строке ввода готовится некоторый текст, например фраза: «Просмотр документа dl.nb». Какое-либо слово или вся фраза выделяются с помощью мыши, затем исполняется команда Create Hyperlink (Создать гиперссылку). Открывается окно, показанное на рис. 2.35 в правой части экрана.

Рис. 2.35. Создание гиперссылки

Следующий этап заключается в установке связи гиперссылки с нужным файлом. Его полное имя можно прямо указать в верхнем поле над кнопкой Browse. Однако чаще всего пользователь не помнит полного имени файла. Тогда он может воспользоваться кнопкой обзора файловой системы Browse, которая выводит стандартное окно поиска файлов, показанное на рис. 2.35 слева. В этом окне надо найти нужный файл (в нашем случае это файл документа dl.nb) и нажать кнопку Открыть. Имя файла появится в поле окна Create Hyperlink, теперь для создания гиперссылки достаточно нажать кнопку ОК.

Выделенное слово (фраза) превратится в кнопку, подчеркнутую снизу чертой. Это и есть гиперссылка. Активизация гиперссылки вызовет немедленное появление документа, представленного (в нашем примере) файлом dl.nb (рис. 2.36).

Рис. 2.36. Пример использования гиперссылки

Гиперссылки обычно применяются для создания сложных документов с многочисленными перекрестными связями. На основе гиперссылок создаются документы, широко используемые во всемирной сети Интернет. Для записи таких документов целесообразно использовать формат файлов HTML.

Создание и ввод специальных объектов

Еще одна редко используемая возможность — создание объекта, которому присвоен номер. При этом номер генерируется автоматически. Для этого служит команда Create Automatic Numbering Object. Она открывает окно, показанное на рис. 2.37.

Рис. 2.37. Окно создания объекта с автоматической нумерацией

Как видно из рис. 2.37, окно содержит переключатель, выводящий обширный перечень возможных вариантов нумерованных объектов. В дальнейшем мы не будем пользоваться объектами данного типа, так что ограничимся приведенным выше описанием и предоставим читателю самому поэкспериментировать с такими объектами. Предоставим читателю самостоятельно разобраться и с еще одной редко используемой возможностью — вставкой объектов, отображающих значения опций системы Mathematica, с помощью команды Create Value Display Object. Эта команда также выводит окно для задания свойств таких объектов.

Вставки, связанные с ячейками

Для вставки содержимого предшествующих ячеек ввода и вывода служат команды Copy Input from Above и Copy Output from Above. Поясним это примерами. Введем в ячейку ввода выражение


1+2

Нажав клавиши Shift+Enter, получим строку вывода:


3

Теперь, исполнив команду Copy Input from Above, получим в новой строке ввода:


1+2

Исполнение этой ячейки даст такой же вывод:


3

То же самое, но в строке ввода, может быть получено с помощью команды Сору Output from Above:


3

Еще одна команда — Start New Cell Below — служит для вставки новых пустых ячеек ввода между уже имеющимися. Ячейка вставляется ниже положения текстового курсора, указывающего место вставки.

Вставка имен функций и списков их параметров

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

Первая из них работает, если вы ввели часть ключевого слова в строке ввода. Тогда исполнение команды Complete Selection (Ctrl+K) выводит список имен всех функций, которые начинаются с уже введенных символов. Рисунок 2.38 поясняет это на примере ввода слова «Plot».

Рис. 2.38. Пример исполнения команды Complete Selection

Следующая команда — Make Template — выдает список параметров функции, в имени которой установлен текстовый курсор. Например, если введено слово «Plot» и курсор стоит после него, то команда Make Template приведет к следующему изменению строки ввода:


Plot[f, {x, xmin, xmax}]

Теперь становится ясно, какие параметры имеет эта функция, и редактированием строки ввода можно ввести нужные конкретные значения этих параметров.

 

gl2-28.jpg

Изображение: 

gl2-29.jpg

Изображение: 

gl2-30.jpg

Изображение: 

gl2-31.jpg

Изображение: 

gl2-32.jpg

Изображение: 

gl2-33.jpg

Изображение: 

gl2-34.jpg

Изображение: 

gl2-35.jpg

Изображение: 

gl2-36.jpg

Изображение: 

gl2-37.jpg

Изображение: 

gl2-38.jpg

Изображение: 

10. Управление работой ядра

 

Управление работой ядра

 

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

Команды меню Kernel

Меню Kernel служит для управления действиями, проводимыми ядром системы над ячейками загруженного документа. Внешний вид меню Kernel и его подменю Evaluation показан на рис. 2.39.

Рассмотрим команды этого подменю более подробно.

Управление процессом вычислений

Основные команды управления процессом вычислений сосредоточены в подменю Evalution меню Kernel:

  • Evaluate Cells (Shift+Enter) — вычисление выделенных ячеек;
  • Evaluate in Place (Shift+Ctrl+Enter) — вычисление выделенного выражения «на месте»;
  • Evaluate Next Input (Shift+Enter на цифровом поле клавиатуры) — вычисление следующей строки ввода;
  • Evaluate in Subsession — вычисление выделенных ячеек в параллельном интерактивном сеансе работы с ядром;
  • Evaluate Notebook — вычисление всех ячеек документа;
  • Evaluate Initialization — вычисление инициализационных ячеек;
  • Enter Subsection — запуск диалогового сеанса работы с ядром;
  • Exit Subsection — завершение диалогового сеанса работы с ядром.

Рис. 2.39. Меню Kernel и его подменю Evaluation

Данная группа команд управляет вычислением ячеек. Перед вычислением каждая ячейка оценивается по своим признакам. Команда Evaluate Cells оценивает все выделенные ячейки, вызывает их вычисление и помещает результат вычисления каждой ячейки сразу после нее. Это одна из наиболее распространенных команд. Следует помнить, что, казалось бы, естественное нажатие клавиши Enter вызывает лишь переход на новую строку, а не вычисление выделенных ячеек ввода. При управлении с клавиатуры вычисление выделенных ячеек происходит при одновременном нажатии клавиш Shift и Enter.

Особое внимание надо обратить на команду Evaluate in Place. Допустим, вы ввели в ячейку ввода, выражение


(2+3)/7

Выделите мышью выражение (2+3). Теперь, исполнив команду Evaluate in Place нажатием клавиш Ctrl+Shift+Enter, мы получим в строке ввода следующее:


5/7

Таким образом, выражение (2 + 3) было вычислено прямо в строке ввода, и на его месте появился результат — 5. Если теперь исполнить команду Evaluate Cells, то появится строка вывода с результатом:


5/7

Поскольку результат представлен дробно-рациональным числом, он повторяет выражение в строке ввода, но в ином формате — в формате вывода.

Команда Evaluate Next Input позволяет последовательно вычислить ряд ячеек, расположенных под выделенной ячейкой. Если текстовый курсор находится в ячейке ввода, данная команда вычисляет эту ячейку. В противном случае она перемещает выделение на следующую ячейку. Последующее использование команды ведет к исполнению этой ячейки, затем к выделению следующей ячейки, ее вычислению и т. д. Таким образом, можно последовательно вызывать вычисление ячеек документа, используя эту команду дважды для каждой ячейки.

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

Команда Evaluate Initialization вычисляет все ячейки, помеченные как инициали-зационные, то есть имеющие символ «т» над квадратной скобкой, обрамляющей ячейку. О задании такого признака говорилось ранее в разделе «Манипуляции с ячейками». Ячейки с указанным признаком выполняются этой командой без их выделения.

Следующие две команды меню Kernel управляют процессом текущих вычислений:

  • Interrupt (Alt+,) — прерывание вычислений;
  • Abort (Alt+.) — полное прекращение вычислений.

Их действие вполне очевидно. Команда Interrupt служит для прерывания текущих вычислений. Эта команда при исполнении задает запрос о том, каким образом вы хотите прервать вычисления и сколько шагов вычислений надо еще сделать. Разумеется, можно и отменить прерывание. Команда Abort вызывает полное прекращение вычислений, так что их можно возобновить лишь с самого начала. Вместо результата выдается сообщение $Abort.

Полезно запомнить клавиатурные комбинации для этих команд, поскольку «зависание» системы из-за чрезмерно большого времени исполнения неудачного алгоритма (например, глубокой рекурсии) не редкость. Кстати, в процессе таких вычислений команды прерывания доступны и из меню.

Используйте команды Interrupt и Abort, если вы загнали систему в режим «вечных вычислений» — зацикливание. Это позволит вам благополучно выйти из этого режима, сохранив текущие данные и текущую программу (документ). Иные способы прерывания вычислений чреваты потерей текущих данных и документа.

Выбор ядра системы

Новые версии Mathematica приобрели возможность работы не только с установленным локальным ядром, но и с другими ядрами, ориентированными на какие-либо специфические классы вычислений. Это привело к появлению ряда новых команд:

  • Start Kernel — запуск выбранного ядра;
  • Quit Kernel — завершение работы выбранного ядра;
  • Default Kernel — выбор ядра, используемого по умолчанию;
  • Notebook's Kernel — выбор ядра для данного документа;
  • Kernel Configuration Options — выводит окно установки свойств ядер.

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

Управление показом номеров ячеек

Номера строк ввода и вывода — причуда системы, унаследованная от старого доброго Бейсика. В принципе, нумерация строк при культурном программировании в системе Mathematica не нужна и даже вредна. В частности, нумерация не является строго последовательной и нарушается при изменении ячеек ввода в начале документа и повторном их вычислении после редактирования. К тому же в общем случае она меняется после записи и повторной загрузки документа.

Поэтому предусмотрена команда-переключатель Show In/Out Names. Она управляет показом или скрытием номеров строк. Если напротив этой команды в меню стоит галочка, то номера строк будут показаны в виде In [n] и Out [n]. При отсутствии галочки номера строк и слова In и Out не отображаются.

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

Удаление всех ячеек вывода

Иногда желательно удалить все ячейки вывода, например для того, чтобы при объединении в группы они не превратились в элементы ячеек ввода. Для удаления всех ячеек вывода служит команда Delete All Output. Выбор этой команды приводит к удалению из текущего документа всех ячеек вывода.

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

 

gl2-39.jpg

Изображение: 

11. Операции поиска и замены

 

Операции поиска и замены

Операции поиска и замены относятся к типовым операциям редактирования документов. Они, наряду с другими родственными операциями, собраны в меню Find. В этом небольшом разделе мы познакомимся с командами и операциями этого меню.

Меню Find

Меню Find содержит команды поиска и замены фрагментов текстов и выражений (рис. 2.40).

Эти операции характерны для любого текстового процессора, например Microsoft Word 95/97, и знакомы даже начинающим пользователям. Поэтому ограничимся их кратким описанием.

Рис. 2.40. Меню Find

 

Команды поиска и замены

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

  • Find (Ctrl+F) — поиск заданных строк вперед и назад (но без замены);
  • Enter Selection (Ctrl+E) — ввод выделенной строки в окно поиска;
  • Find Next (F3) — поиск по документу вперед;
  • Find Previous (Shift+F3) — поиск по документу назад;
  • Find in Cell Tags — поиск ячейки с заданной этикеткой (tag);
  • Replace (Ctrl+R) — замена одной строки на заданную другую;
  • Replace and Find Again (Shift+Ctrl+R) — выполнение замены с продолжением поиска;
  • Replace All — выполнение замены по всему документу.

Эти операции выполняются с помощью окна поиска и замены, показанного на рис. 2.41. Оно имеет поля для задания искомой строки и строки замены.

Рис. 2.41. Пример поиска подстроки «4х» и ее замены на подстроку «6х»

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

Обнаружение и открытие выделенных строк

Следующие три команды меню Find служат для работы с выделенными строками:

  • Open Selected — открытие групп, содержащих выделенные строки;
  • Scroll to Selection — прокрутка документа до выделенной строки;
  • Go Back — возврат назад после использования гиперссылки.

Их действие также очевидно.

Работа с этикетками

Особым признаком ячеек ввода могут быть их этикетки (tags) — короткие сообщения, характеризующие суть выполняемых ячейками действий и размещаемые сверху строки ввода. Этикетки вводятся для того, чтобы можно было одним разом вызвать на просмотр те ячейки, которые объединены какими-либо общими свойствами.

Признаком наличия у данного документа этикеток является их список, который появляется в подменю Cell Tags (Ячейки с этикетками) меню Find. Например, документ, представленный на рис. 2.42, имеет целый набор этикеток.

Рис. 2.42. Выбор этикетки

Если выбрать имя этикетки (например Euler), будут выделены все ячейки, помеченные данной этикеткой.

Команда Add/Remove Cell Tags (Ctrl+J) позволяет вставить этикетку в строку ввода, в которой ее нет, или удалить этикетку из строки, где она есть. Эта команда вызывает появление окна редактирования этикеток, показанного на рис. 2.43. Работа с этим окном вполне очевидна — кнопка Add добавляет этикетку, а кнопка Remove удаляет ее. Команда Cell Tags from In/Out Names позволяет создать для текущей ячейки этикетку на основе номера ячейки.

Последняя команда меню Find — Make Index — помещает в буфер все этикетки текущего документа. Перед этим она выводит окно, в котором можно указать признаки этикеток. Нажатие кнопки ОК помещает список этикеток в буфер, откуда его можно извлечь с помощью команды Paste. Рисунок 2.44 показывает окно команды Make Index и созданный список этикеток под ним.

Рис. 2.43. Окно редактирования этикеток

Рис. 2.44. Окно подготовки списка этикеток и результат вставки списка этикеток из буфера

 

gl2-40.jpg

Изображение: 

gl2-41.jpg

Изображение: 

gl2-42.jpg

Изображение: 

gl2-43.jpg

Изображение: 

gl2-44.jpg

Изображение: 

12. Работа с окнами и справкой

 

Работа с окнами и справкой

Как и большинство приложений Windows, Mathematica 3/4 является многооконной системой. Поэтому важно с самого начала работы с ней научиться управлять окнами системы. Система может работать с многими окнами документов, окнами интерфейса и справочной системы. Как это делается, описано в этом небольшом разделе.

Управление показом окон

Система Mathematica многооконная и может работать сразу с несколькими документами. По мере загрузки файлов их список появляется в нижней части меню Window (Окно). Само меню содержит следующие команды для работы с окнами:

  • Stack Windows — каскадное расположение окон;
  • Tile Windows Wide — расположение мозаикой по высоте;
  • The Windows Tall — расположение мозаикой по ширине;
  • Messages — управление выводом окна сообщений об ошибках.

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

Управление расположением окон

Если выбрать команду Stack Windows, то окна будут расположены каскадом (рис. 2.45).

Рис. 2.45. Каскадное расположение окон документов

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

Заметим, что, как принято в операционной системе Windows 95/98, положением и размерами окон легко управлять, используя кнопки в строке заголовка окна.

Две другие команды — Tile Windows Wide и Tile Windows Tall — обеспечивают расположение окон мозаикой. Рисунок 2.46 показывает расположение окон мозаикой по высоте после исполнения команды Tile Windows Wide.

Рис. 2.46. Расположение окон после исполнения команды Tile Windows Wide

Ha рис. 2.47 показано расположение тех же окон после исполнения команды Tile Windows Tall.

Как видно из сравнения, рис. 2.46 и 2.47 различаются способом деления окон — по ширине или по высоте. Естественно, сохраняются все описанные выше возможности управления окнами — их расширения на весь экран, изменения размеров и местоположения.

Каждое окно можно минимизировать с помощью команды Свернуть (Minimize) системного меню окна или левой кнопки строки заголовка окна.

Рис. 2.47. Расположение окон после исполнения команды Tile Windows Tall

 

Справочная база данных

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

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

Главный недостаток справочной базы данных состоит в том, что она требует для просмотра компьютер. Его не возьмешь с собой на дачу или на пляж, да и читать долго с экрана дисплея вредно для глаз и здоровья в целом. Компьютерная база данных настолько обширна и разветвлена, что ее трудно обозревать даже несмотря на гипертекстовую организацию.

В то же время, если вы уже сидите за компьютером, то пользоваться книгами не очень удобно. Куда проще тут же найти нужные сведения во встроенной в Mathematica справочной системе. К тому же, в отличие от книг, она содержит «живые» примеры, которые можно быстро приспособить к своим нуждам.

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

Открытие справочной базы данных

Справочная база данных управляется командами, расположенными в меню Help (Справка).

Справочная система Mathematica, начиная с версии 3, переработана кардинально и построена в виде броузера справки. Его можно вызвать с помощью команды Help Browser (Shift+Fl). Почти аналогично действует команда Find Selection Function (F1), которая служит для поиска заданной функции.

Справочная база данных стала очень удобной и содержит все лучшее из интерфейса справочных систем других математических пакетов. В частности, заимствована система иерархического поиска нужных данных (рис. 2.48), применяемая в системах класса Maple V.

Рис. 2.48. Окно броузера справочной системы

В окне броузера справочной системы можно (активизацией соответствующей кнопки) выбрать следующие разделы справок:

  • Built-in Functions — встроенные функции;
  • Add-ons — пакеты расширений;
  • The Mathematica Book — электронная версия книги «The Mathematica Book», написанной разработчиком системы Стивеном Вольфрамом;
  • Getting Started/Demos — руководство для начинающих и примеры;
  • Other Information — другая информация;
  • Master Index — справка по индексу (алфавитный указатель).

На рис. 2.48 наглядно показан поиск данных о встроенной функции, вычисляющей синус угла х. При этом возможен как прямой поиск по имени функции (в нашем случае Sin), так и поиск по контексту. В окнах справочной системы можно просматривать также страницы электронных книг, поставляемых с системой. Справочная система имеет гипертекстовые ссылки (подчеркнутые слова синего цвета), что позволяет расширять знакомство с объектами системы.

Рис. 2.49. Пример замены примера в ячейке 1п[1] и его вычисления

 

Работа с примерами

Практически по каждой функции приведен ряд примеров, которые открываются при активизации гиперссылки в виде треугольника с надписью Further Examples (вначале примеры скрыты). Примеры являются «живыми» в том смысле, что, не выходя из справочной системы, можно перенабрать содержимое любой ячейки ввода и тут же, вычислив ячейку, получить новый результат. К примеру, на рис. 2.49 показано, как список синусов, заданный ранее (см. рис. 2.48) строкой ввода In , заменен на построение графика функции Sin [х] (а строка ввода получила номер In ).

Можно также, выделив ячейки примеров, перенести их содержимое в буфер командой Сору и затем разместить в текущем документе командой Paste. Такой пример можно редактировать и использовать для решения своих, близких к нему по сути задач.

Работа с электронным учебником

Для демонстрации возможностей системы служит электронный учебник Getting Started/Demos. На рис. 2.50 показан пример работы с ним — иллюстрируется построение документов в формате Notebook.

Электронный учебник содержит множество полезных применений системы Mathematica 4. Однако в целом он рассчитан на начальный уровень знакомства с системой. Учебник представляет материал по контексту.

Рис. 2.50. Пример работы с электронным учебником

 

Справка по пакетам расширения

В систему Mathematics встроен ряд дополнительных пакетов расширения (Add-ons), содержащих массу полезных новых функций. Они служат для расширения функциональных возможностей системы в таких областях, как алгебра, геометрия, приближенные вычисления, дискретная математика, теория чисел, математическая статистика, линейная алгебра и т. д.

Доступ к ним возможен объявлением соответствующего пакета. На рис. 2.51 показан раздел справки по применению одного из таких пакетов для прямого и обратного преобразований Фурье.

Рис. 2.51. Пример справки по преобразованию Фурье

Доступ к справке по пакетам расширения обеспечивается разделом Add-ons справочной системы. Фактически, справка повторяет материал книги от соответствующей версии системы [31,32].

Любой пример применения функции из пакета расширения также можно перенести в документ. Для этого нужно выделить соответствующую ячейку примера и с помощью команды Сору перенести ее в буфер промежуточного хранения. Затем с помощью команды Paste можно перенести содержимое буфера в документ. Для этого можно использовать и контекстно-зависимое меню, которое появляется при нажатии правой кнопки мыши.

Работа с электронной книгой

Раздел справки The Mathematica Book — это электронный вариант книги Стивена Вольфрама по соответствующей версии системы. Рисунок 2.52 иллюстрирует работу с электронной книгой — открыт раздел со списком ряда определенных интегралов (видно лишь начало списка).

Рис. 2.52. Раздел электронной книги со списком определенных интегралов

С первого взгляда трудно уловить отличие электронной книги «The Mathematica Book» («Математическая книга») от справки по пакетам расширения системы. Однако эти различия есть и заключаются в следующем:

  • книга содержит большой объем чисто справочной информации (формулы, графики, примеры вычислений и т. д.);
  • книга является систематическим руководством по применению системы;
  • книга использует как встроенные функции, так и дополнительные функции из пакетов расширения.

Галерея формул (Formula Gallery), показанная на рис. 2.52, представляет собой весьма полное собрание математических формул. Любую формулу можно выделить и поместить в буфер обмена для использования в документах. Таким образом, электронная книга в состоянии заменить обычный математический справочник. Приходится еще раз сожалеть, что как и вся справочная база данных, электронная книга написана на английском языке.

Интересна также галерея рисунков (Graphics Gallery) электронной книги, дающая представление о графических возможностях системы. Впрочем, эту галерею мы уже описывали в уроке 1. В электронной книге можно найти множество интересных и весьма эффектных примеров применения графики — например, построения карт или анимационных рисунков.

Электронная книга системы Mathematica являет собой наглядный пример развития электронных книг. Они характеризуются рядом новых качеств:

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

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

Просмотр другой информации

Раздел Other Information (Другая информация) посвящен различным сведениям об интерфейсе системы Mathematica и данным по связи с ее разработчиком — фирмой Wolfram Research. На рис. 2.53 показана одна из страниц этого раздела, посвященная правилам ввода показателей степени.

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

Работа с алфавитным указателем

Последний раздел справочной системы — алфавитный (или индексный) указатель Master Index. Если вы знаете, какую команду или функцию ищете, то достаточно указать ее в поле у кнопки Go То (Перейти к...) и нажать эту кнопку. Можно также воспользоваться системой поиска по начальным буквам искомого слова (рис. 2.54).

Риc. 2.53. Одна из страниц раздела Other Information справочной системы

Рис. 2.54. Пример работы с алфавитным указателем

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

Другие команды меню Help

Помимо упомянутых команд меню Help имеет команды, повторяющие разделы справочной системы, и еще ряд команд:

  • Why the Beep? — информация о причинах выдачи звукового сигнала;
  • Registration — вывод формы регистрации (для легальных пользователей);
  • About Mathematica — вывод окна с краткими сведениями о системе и фирме Wolfram (рис. 2.55);
  • Rebuild Help Index — создание индексного указателя (обычно требуется сразу после первого запуска системы).

Рис. 2.55. Окно с данными о системе Mathematica 4

Справочная система Mathematica 3/4 во многим дублирует обычную документацию по системам в виде обычных книг. Как показывает практика, оба вида документации (электронная в виде справки и обычная) прекрасно уживаются друг с другом и занимают разные ниши. Так, электронной справкой можно пользоваться только сидя за компьютером. Обычные книги позволяют полнее охватить информацию и найти нужные сведения. Однако фирменные книги и электронная справка подготовлены на английском языке и не могут заменить обычные книги, особенно для русскоязычных пользователей.

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

 

gl2-45.jpg

Изображение: 

gl2-46.jpg

Изображение: 

gl2-47.jpg

Изображение: 

gl2-48.jpg

Изображение: 

gl2-49.jpg

Изображение: 

gl2-50.jpg

Изображение: 

gl2-51.jpg

Изображение: 

gl2-52.jpg

Изображение: 

gl2-53.jpg

Изображение: 

gl2-54.jpg

Изображение: 

gl2-55.jpg

Изображение: 

13. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Пользоваться строкой меню.
  • Управлять окном редактирования документов.
  • Работать с файлами.
  • Создавать простые документы и осуществлять их редактирование.
  • Работать с ячейками и форматировать их содержимое.
  • Вставлять в ячейки различные объекты системы Mathematica.
  • Управлять вычислением ячеек.
  • Производить поиск и замену текста в документе.
  • Управлять расположением окон.
  • Пользоваться справочной системой.

 

Урок 3. Типы данных

Урок 3. Типы данных

1. Типы данных

 

Типы данных

  • Основные классы данных
  • Выражения
  • Списки и массивы
  • Объекты и идентификаторы
  • Функции, опции, атрибуты и директивы
  • Подстановки
  • Функции линейной алгебры

С этого урока начинается серьезное освоение математических возможностей систем Mathematica 3 и 4. Мы изучим основные типы данных, операторов, функций и объектов, с которыми может работать система Mathematica 3/4, а попутно познакомимся и с некоторыми простыми операциями ввода данных и их обработки.

 

2. Основные классы данных

 

Основные классы данных

 

Mathematica оперирует с тремя основными классами данных:

  • численными данными, представляющими числа различного вида;
  • символьными данными, представляющими символы, тексты и математические выражения (формулы);
  • списками — данными в виде множества однотипных или разнотипных данных.

Каждый из этих классов данных в свою очередь имеет ряд специальных, более частных типов данных. На них мы остановимся более подробно.

Численные данные

Двоичные числа, биты и байты

Минимальной единицей информации в компьютерной технике является двоичная единица — бит. Она имеет представление в виде 0 или 1, удобное для реализации простейшими электронными схемами с двумя состояниями электрического равновесия (например, триггерами или иными ячейками памяти). Многоразрядные двоичные числа представляют собой набор цифр 0 и 1, например, 100110 или 111001. Каждый старший разряд относительно предыдущего имеет весовой коэффициент, равный 2.

Именно с битами работает микропроцессор на нижнем уровне операций. Однако бит — слишком мелкая единица, не очень удобная в обращении. К тому же мы привыкли к куда более удобным и наглядным для нас элементам информации, таким как буквы, цифры, знаки арифметических операций, спецзнаки и символы псевдографики. В принципе, набор этих знаков, минимально необходимый для представления обычной текстовой и цифровой информации, содержит до 2 8 = 256 элементов. Каждый из них в компьютере представляется кодом от 0 до 255. Для задания таких кодов достаточно 8 бит (2^8=256), которые и образуют наиболее распространенную единицу представления информации — байт. 1024 байта образуют килобайт (Кбайт), 1024 Кбайт дают 1 Мбайт (мегабайт) и т. д.

Широко применяется общеизвестный стандарт кодирования текстовой информации ASCII (American Standard Code for Information Interchange).

Десятичные числа

К наиболее известным типам данных в математике относятся привычные нам десятичные числа (DECIMAL). Каждый разряд таких чисел имеет представление, заданное одной из арабских цифр — 0, 1, 2,..., 9. Весовой коэффициент старшего разряда относительно предшествующего равен 10. Количество цифр, представляющих число, может быть, в принципе, любым. Десятичные числа относятся к следующим основным типам.


Обозначение

Тип чисел

Примеры задания

Integer

Целочисленные

123

-345

Rational

Рациональные

123/567

-23/67

Real

Вещественные

123.

-123.45610 ^ 6

Complex

Комплексные

-3.5 + 0.

56 I

Десятичные числа наиболее распространены в научно-технических расчетах.

Целые числа

Целочисленные данные (Integer) — это целые числа, например 1, 2 или 123, которые представляются системой без погрешности и ограничения разрядности. Более того, арифметические операции над целыми числами система выполняет также без погрешностей и без ограничения числа цифр (рис. 3.1).

Рис. 3.1. Операции с целыми числами

Количество цифр, представляющих большое целое число, ограничено лишь его значением, но не какими-либо фиксированными форматами. Рациональные данные задаются отношением целых чисел, например 123/567, и также представляют результат точно. Поэтому система при символьных и численных расчетах всегда старается выдать результат в виде целых или рациональных чисел, там где это возможно:


1000000/3000000

1/3

(124-1)/(455+1)

41/152

Фактически целые числа произвольной разрядности в системах символьной математики представляются списками отдельных цифр. Особая организация списков повышает компактность представления больших целых чисел. Характерным примером работы с целыми числами большой разрядности является вычисление факториала n!=1*2*3*. . . *n. Примеры его вычисления уже приводились (см. рис. 1.16).

Числа с произвольным основанием

Для вычисления чисел с произвольным основанием используется конструкция


Основание^^Число

Число должно быть записано по правилам записи чисел с соответствующим основанием. Если основание больше 10, для обозначения значений чисел используются буквы от а до z. Наиболее известными из чисел с основанием системы счисления, превышающим 10, являются шестнадцатеричные числа (HEX — от слова hexagonal). Разряды таких чисел могут иметь следующие значения:


HEX 0123456789abCdef

DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Каждый более старший разряд имеет весовой коэффициент относительно предыдущего разряда, равный 16.

Примеры задания шестнадцатеричного и двоичного чисел:


16^^123abcde

305839326

2^^1010111

87

Для представления чисел с произвольным основанием n (до 32) используется функция BaseForm[expr, n], которая возвращает выражение ехрг в форме числа с основанием n, которое указывается как подстрочный индекс.

Примеры использования функции BaseForm:


BaseForm[87,2]

10101112

BaseForm[305839326,16]

123abcde16

В дальнейшем мы будем использовать только десятичные числа.

Вещественные числа

Численные данные могут быть представлены также десятичными вещественными числами, которые могут иметь различную форму, например 123.456, 1.23456 10^2,12345.6 10^-2 и т. д. В общем случае они содержат мантиссу с целой и дробной частями и порядок, вводимый как степень числа 10. Как правило, вещественные числа в системах символьной математики могут иметь мантиссу с любым, но конечным числом знаков. Пробел между мантиссой и порядком эквивалентен знаку умножения *:


23.456*10^100

2.345бх10^101

10^-100

1/

100000000000000000000000000000

0000000000000000000000000000

0000000000000000000000000000000000000000000

10.^-100

1.x 10^-100

Как принято в большинстве языков программирования, целая часть мантиссы отделяется от дробной части точкой, а не запятой.

Mathematica производит операции с числами изначально как с целыми. Однако установка значка разделительной точки означает, что число должно рассматриваться как вещественное. Например, 1 — целое число, но 1. — уже вещественное число. Для представления выражения ехрг в форме вещественного числа используется функция N [ехрг] или N [ехрг, число_цифр_результата].

Примеры:


1/3

1/3

1./3 .

0.333333

N[1/3]

0.333333

N[2*Pi,50]

6.283185307179586476925286766559005768394338

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

Mathematica имеет две системные переменные, позволяющие вывести максимально и минимально возможные значения чисел, с которыми оперирует система:


$MaxMachineNumber

1.79769х10^308

$MinMachineNumber

2.22507х 10^-308

Обратите внимание на то, что функция N [ехрr, m] позволяет получить число с практическим любым числом цифр результата m. Разработчики последней версии Mathematica 4 утверждают, что это верно при количестве цифр результата до одного миллиона, что с лихвой удовлетворяет требованиям подавляющего большинства расчетов и вычислений.

Функции IntegerPart [x] и FractionalPart [x] обеспечивают возврат целой и дробной частей вещественного числа х:


N[Pi]

3.14159

IntegerPart[Pi]

3

FractionalPart[Pi]

-3.+ Л

N[FractionalPart[Pi]]

0.141593

Еще одна функция RealDigits [x] возвращает список реальных цифр результата и число цифр целой части х:


RealDigits[N[2*Pi]]

{{6, 2, 8, 3, 1, 8, 5, 3, 0, 7, 1, 7, 9, 5, 8, 6}, 1}

Есть и множество других функций для работы с вещественными числами. Они будут рассмотрены в дальнейшем. В Mathematica 4 функция RealDigits имеет расширенные формы, например RealDigits [x, b, len, n]. Для получения цифр мантиссы введены функции MantissaExponent [x] и MantissaExpo-nent[x,b].

Комплексные числа

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


z=Re(z)+I*Im(z)

или


z=Re(z)+i Im (z)

где знак I (i) — мнимая единица (квадратный корень из -1), Re (z) — действительная часть комплексного числа, a Im (z) — мнимая часть комплексного числа. Пример задания комплексного числа:


2 + I3

или


2 + 3*I

Мнимая часть задается умножением ее значения на символ мнимой единицы I. При этом знак умножения * можно указывать явно или заменить его пробелом — в последнем случае комплексное число выглядит более естественным. Функции Re [ z ] и Im [ z ] выделяют, соответственно, действительную и мнимую части комплексного числа z. Это иллюстрируют следующие примеры:


Re[3+2*1]

3

Im[3+2 I]

2

Большинство операторов и функций системы Mathematica работают с комплексными числами. Разумеется, это расширяет сферу применения системы и позволяет решать с ее помощью различные специальные задачи — например, относящиеся к теории функций комплексного аргумента. Комплексные числа широко используются в практике электро- и радиотехнических расчетов на переменном токе.

Символьные данные и строки

Символьные данные в общем случае могут быть отдельными символами (например a, b,..., z), строками (strings) и математическими выражениями ехрг (от expression — выражение), представленными в символьном виде.

Символьные строки задаются цепочкой символов в кавычках, например "sssss". В них используются следующие управляющие символы для строчных объектов:

  • \n— новая строка (line feed);
  • \ t — табуляция.

Это иллюстрируется следующими примерами:


"Hello my friend!"

Hello my friend!

"Hello\nmy\nfriend!"

Hello

my

friend!

"Hello\tmy\tfriend!"

Hello my friend;

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

Выражения

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


Запись на языке Mathematica

Обычная математическая запись

2*Sin[x]

2*sin(x)

2 Sin[x]

2*sin(x)

(а +b^2 + с^З) / (3*d - 4*e)

(a + b 2 3 )/(3d-4е)

sqrt(2)

Кореннь из 2

Integrate [Sin [x] , х]

Интеграл sin(x) dx

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

  • знак умножения может быть заменен пробелом;
  • встроенные функции начинаются с большой буквы и обычно повторяют свое общепринятое математическое обозначение (за исключением тех, в названии которых есть греческие буквы — они воспроизводятся латинскими буквами по звучанию соответствующих греческих букв);
  • круглые скобки () используются для выделения частей выражений и задания последовательности их вычисления;
  • параметры функций задаются в квадратных скобках [ ];
  • фигурные скобки {} используются при задании списков.

Новые системы Mathematica 3/4 обладают обширными возможностями по заданию форматов записи математических выражений при их выводе на экран или принтер, а также при вводе с клавиатуры. Они будут рассмотрены в дальнейшем.

Списки и массивы

Наиболее общим видом сложных данных в системе являются списки (lists). Списки представляют собой совокупности однотипных или разнотипных данных, сгруппированных с помощью фигурных скобок:

  • { 1 , 2 , 3 } — список из трех целых чисел;
  • { а , b , с } — список из трех символьных данных;
  • {1, а, x^ 2} — список из разнотипных данных;
  • {{a,b},{c,d}} — список, эквивалентный матрице

    a     b

    c     d

  • {х^2+у^2, 2*Sin [x] } — список из двух математических выражений.

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

Объекты и идентификаторы

В общем случае система Mathematica оперирует с объектами. Под ними подразумеваются математические выражения (ехрг), символы (symbols), строки из символов (strings), упомянутые выше числа различного типа, константы, переменные, графические и звуковые объекты и т. д.

Каждый объект характеризуется своим именем — идентификатором. Это имя должно быть уникальным, то есть единственным. Существуют следующие правила задания имен:

  • sssss — имя объекта, заданного пользователем;
  • Sssss — имя объекта, входящего в ядро системы;
  • $Sssss — имя системного объекта.

Итак, все объекты (например функции), включенные в ядро, имеют имена (идентификаторы), начинающиеся с большой буквы (например Plus, Sin или Cos). Идентификаторы относящихся к системе объектов начинаются со знака $. Заданные пользователем объекты следует именовать строчными (малыми) буквами. Разумеется, под символами s...s подразумеваются любые буквы и цифры (но не специальные символы, такие как +, -, * и т. д.).

Объекты (чаще всего это функции), встроенные в систему, принято называть внутренними или встроенными. Объекты, которые создает пользователь (в том числе используя внутренние объекты), называют внешними объектами. К ним, в частности, относятся процедуры и функции, составляемые пользователем, которые детально рассматриваются в дальнейшем.

Функции, опции, атрибуты и директивы

К важному типу объектов принадлежат функции — объекты, имеющие имя и список параметров, возвращающие некоторое значение в ответ на обращение к ним по имени с указанием списка конкретных (фактических) значений параметров. В системах Mathematica 2/3/4 встроенные функции задаются в виде


И дентификатор_Функции [ol, о2, o3, ...]

где ol, о2, оЗ... — объекты (параметры, опции, математические выражения и т. д.). Список входных параметров задается необычно — в квадратных скобках. В числе входных параметров могут быть специальные объекты — опции. Они задаются в виде


Имя_опции->3начение_опции

Значением опции обычно является то или иное слово. Например, в функции построения графиков


Plot [sin[x] , {x, 0,20} ,Axes->None]

опция Axes->None указывает на то, что отменяется вывод координатных осей (Axes). Функция Options [name] выводит для функции с идентификатором name список всех возможных для нее опций. Некоторые функции, например Sin, могут вообще не иметь опций, другие, такие как Solve, могут иметь целый «букет» опций:


Options [Sin]

Options [Solve]

{InverseFunctions -> Automatic, MakeRules -> False,

Method -> 3, Mode -> Generic, Sort -> True,

VerifySolutions -> Automatic, WorkingPrecision -> 00}

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

Каждый объект может характеризоваться некоторой совокупностью своих свойств и признаков, называемых атрибутами. Функция Attributes [name] возвращает список всех атрибутов функции с именем name, например:


Attributes [Sin]

{bistable, NumericFunction, Protected}

Attributes [Solve]

{Protected}

Как видите, для функции синуса характерны три атрибута:

  • bistable — указывает на применимость в списках и таблицах;
  • NumericFunction — указывает на отношение к числовым функциям;
  • Protected — указывает на то, что слово Sin защищено от какой-либо модификации.

Кроме того, в Mathematica 2/3/4 имеется понятие функций-директив. Эти функции не возвращают значений, а указывают, как в дальнейшем будут выполняться функции, работа которых зависит от директив. Синтаксис функций-директив тот же, что и у обычных функций.

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

Константы

Константы являются типовыми объектами системы, несущими заранее предопределенное численное или символьное значение. Это значение не должно меняться по ходу вычисления документа. К численным константам относятся любые числа, непосредственно используемые в математических выражениях или программных объектах, например процедурах и функциях. Так, числа 1 и 2 в выражении 2*Sin [ 1 ] являются численными константами. Константы-числа не имеют идентификаторов. Идентификатором, в сущности, является само число. Его представление и хранится в памяти.

Имеется также ряд именованных констант, которые можно рассматривать как функции без аргумента, возвращающие заранее заданное значение. Имена констант (и других объектов, например функций и переменных) представляются их идентификаторами — непрерывной строкой символов, отождествляемой с именем. В системе Mathematica большинство идентификаторов имеют естественный математический смысл и начинаются с большой буквы. Например, Е — это основание натурального логарифма.

Используются следующие встроенные именованные константы:

  • Complexlnf inity — комплексная бесконечность, которая представляет величину с бесконечным модулем и неопределенной комплексной фазой.
  • Degree — число радиан в одном градусе, которое имеет числовое значение Pi/180.
  • Е- основание натурального логарифма с приближенным числовым значением 2 . 71828....
  • EulerGamma — постоянная Эйлера с числовым значением 0.577216....
  • GoldenRatio — константа со значением (l+Sqrt[5] ) /2, определяющая деление отрезка по правилу золотого сечения.
  • I — представляет мнимую единицу Sqrt [-1].
  • Infinity — «положительная» бесконечность (со знаком «минус» дает «отрицательную» бесконечность).
  • Catalan — константа Каталана 0 . 915966....
  • Pi — число, имеющее значение 3 .14159... и равное отношению длины окружности к ее диаметру.

Константы, имеющие значение, дают его в виде вещественного числа:


{N [Degree], N[E], N[Pi]}

{0.0174533, 2.71828, 3.14159}

{N[EulerGamma],N[GoldenRatio],N[Catalan]}

{0.577216, 1.61803, 0.915966}

Константы в описываемой системе используются вполне естественно, так что от дальнейшего их описания можно воздержаться.

Размерные величины

Mathematica позволяет оперировать с размерными величинами, которые широко используются в физических и химических расчетах. Размерные величины характеризуются не только численными значениями, но и единицами измерения, например Meter (метр), Second (секунда) и т. д. Последние могут стоять в числителе и в знаменателе выражений, представляющих размерные величины:


1 Meter

Meter

5Meter

5 Meter

0.5Second

0.5Second

Между значением размерной величины и единицей измерения знак умножения можно не ставить. Это видно из приведенных выше примеров.

Для облегчения ввода физических констант, представляющих собой размерные величины, в наборе файлов Mathematica можно найти файл PhysicalConstants.nb. При его загрузке появляется дополнительная палитра физических констант, показанная на рис. 3.2.

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


2.99792458000000028'*^8 Meter/ Second

2.99792х108 Meter/ Second

6. 9599 x 108 Meter

6.9599xl08 Meter

Следует отметить, что без острой необходимости применять размерные величины не следует, поскольку они усложняют математические выражения и зачастую не позволяют выполнять с ними символьные преобразования. Рекомендуется нормировать выражения (формулы) так, чтобы результаты их вычисления имели безразмерный вид.


Рис. 3.2. Дополнительная палитра физических констант

 

Переменные

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

Имена переменных называют их идентификаторами. Они должны быть уникальными, то есть не совпадать с именами директив, атрибутов, опций и функций в ядре системы. Имена переменных должны начинаться с буквы. Общеприняты, скажем, имена х и у для функциональной зависимости у (х) или представления графиков, f — для функций. Желательно назначать именам переменных смысловые значения, например xcoordinaate или ycoordinate для координат точки. Все сказанное об идентификаторах объектов справедливо и для идентификаторов переменных, поскольку переменные — распространенные виды объектов.

Особенности применения переменных

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

Заранее объявлять тип переменной не требуется. Он определяется операцией присваивания переменной некоторого значения. Такой подход упрощает построение программ и естественен при использовании переменных в обычной математической литературе.

Без особых на то указаний переменные в системе Mathematica являются глобальными. Это означает, что после определения переменной ее значение можно изменить в любом месте документа или программы. Переменная появляется как действующий объект только после ее первого определения или задания. Определения переменных выполняются с помощью операции присваивания, вводимой знаком равенства:


var = value

Здесь var — имя переменной, value — ее значение. Ниже представлены основные операции по присваиванию переменным значений:

  • х = value — переменной х присваивается вычисленное значение value;
  • х = у = value — вычисленное значение value присваивается переменным х и у;
  • x:=value — присваивание переменной х невычисленного значения value;
  • х =. — с переменной х снимается определение.

Примеры (комментарий ln[...] опущен):

  • g = Plot[Sin[x],{x,0,20}] — переменной д присваивается значение в виде графического объекта;
  • у = 1 + х ^ 2— переменной у присваивается символьное значение в виде математического выражения (1 + х ^ 2);
  • z= {1, 2, х, a + b}— переменной z присваивается значение в виде списка, содержащего четыре элемента.

Различие в присваивании переменным значений с помощью знаков «=>> и <<:=» иллюстрируют следующие примеры:


а=12;

b=а

12

с:=а

с

12

а=15;

b

12

с

15

Как видите, после первоначальных присваиваний b=а и с: =а обе переменные, b и с, имеют значение 12. Однако после присваивания переменной а нового значения (15) переменная b, которой было присвоено вычисленное значение а, остается равной 12, а переменная с, которой было присвоено невычисленное значение а, становится равной 15.

Особо обратите внимание на то, что возможно снятие с переменной определения с помощью символов «=.» или функции Clear [var]. В символьной математике это очень полезная возможность, поскольку нередко переменные с одним и тем же именем в разных частях программы могут иметь разный смысл и представлять объекты, требующие значительных затрат памяти.

Более того, эти объекты сохраняются даже при использовании команды New при переходе к подготовке нового документа. Поэтому рекомендуется всякий раз удалять определения переменных, как только их использование завершается. Это предотвращает возникновение конфликтов между одноименными переменными и освобождает память.

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

Оценивание переменных и операции присваивания

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

Основная функция Set [ Ihs, rhs ] имеет аналогичные по действию упрощенные операторы:

  • Ihs = rhs — вычисляет правую часть rhs и присваивает ее значение левой части Ihs. С этого момента Ihs замещается на rhs всюду, где бы этот идентификатор ни появился;
  • {11, 12, ...} = {rl, г2, ...} — вычисляет ri и назначает полученные результаты соответствующим 11.

Функция задержанного присваивания SetDelayed[lhs,rhs] может быть заменена аналогичным по действию оператором Ihs : =rhs, который назначает правой части rhs роль отложенного значения левой части Ihs. При этом rhs содержится в невычисленной форме. После этого, когда появляется идентификатор Ihs, он заменяется на значение rhs, вычисляемое каждый раз заново.

При задержанном (отложенном) присваивании вывода нет, тогда как при обычном немедленном присваивании lhs=rhs значение rhs вычисляется немедленно и результат выводится в строку вывода.

Функция присваивания верхнего уровня UpSet [Ihs, rhs] применяется в виде lhs A =rhs. При этом левой части Ihs присваивается значение правой части rhs, причем это значение связывается с символами, которые появляются на первом уровне вложенности в Ihs.

И, наконец, функцию отложенного присваивания верхнего уровня UpSetDelayed[lhs, rhs] может заменить оператор lbs^ :=rhs. При этом величина rhs выполняет роль отложенного значения Ihs, и связывается это присваивание с символами, которые появляются на первом уровне вложенности в Ihs.

Отметим еще одну важную конструкцию SetOptions [s, namel->valuel, name2->value2, . . . ], которая устанавливает для символа s указанные опции, определяемые по умолчанию.

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

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

 

gl3-1.jpg

Изображение: 

gl3-2.jpg

Изображение: 

3. Операторы и функции

 

Операторы и функции

 

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

Арифметические операторы

Математические выражения в системе Mathematica записываются с помощью операторов и функций. Операторы (от слова operator — исполнитель) являются элементами записи математических выражений, указывающими на то, какие действия производятся над символьными или числовыми данными. Когда эти данные используются совместно с операторами, их называют операндами.

Выражения, составленные из операторов, операндов и функций, способны возвращать результат своего вычисления. К примеру, если вычисляется сумма 2+3, то знак «+» является оператором, числа 2 и 3 — операндами, а вся запись 2+3 — выражением. Сами по себе операторы не возвращают какого-либо значения.

Существуют общепринятые приоритеты выполнения операций, например, в первую очередь выполняются сложение и вычитание, затем умножение и деление и далее другие операции. С помощью круглых скобок можно изменять последовательность выполнения действий, например, в выражении (2+3) М вначале будет вычислено 2+3, а затем уже результат будет умножен на число 4. В сомнительных случаях применение скобок особенно желательно, например 2^2+3 даст 7, а 2^ (2 + 3) даст 32.

Ниже перечислены основные операторы для выполнения арифметических операций (х, у и z — операнды, задающие данные, над которыми выполняются вычисления):


x+y+z  Сложение

x-y-z    Вычитание

х*у*z   или x у z    Умножение

х/у       Деление

х^у      Возведение х в степень у

Expr //N        Дает приближенное (с установленной точностью и                 формой) значение выражения ехрг

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

Как уже отмечалось, при выполнении вычислений особая роль принадлежит символам «%». Эти символы как сами по себе, так и в качестве аргументов функций используются для указания на применение результата предшествующих операций:

  • % — возвращает результат последней операции;
  • %% — возвращает результат предпоследней операции;
  • %...% — возвращает результат операции, выполненной в строке, отстоящей от конца на число повторений символа «%»;
  • %n — возвращает результат операции в строке n.

Нетрудно заметить, что применение этих символов облегчает выполнение последовательных вычислений.

Как уже отмечалось, для представления арифметических выражений ехрг в виде вещественного результата используется функция N[expr,m]. Можно также задать вычисление любого выражения в численном виде, используя выражение ехрг //N:


1/3+2/7

13/21

1/3+2/7 //N

0.619048

Таким образом, используя функцию N[expr,m] или вывод с помощью символов //N, можно организовать вычисления в режиме калькулятора, находясь в среде оболочки системы.

Если х имеет вещественное значение, то функция


MantissaExponent[x]

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


123.456 10^10

1.23456 х1012

MantissaExponent[%]

{0.123456, 13}

Арифметические вычисления с повышенной точностью

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

Следующие две функции, Rationalize [х] и Rationalize [x, dx], дают приближение для числа х в виде рациональных чисел. Вторая из этих функций задает приближение с заданной точностью dx.

Mathematica может работать с большими числами и выполнять определенные операции с очень высокой точностью. Примеры, приведенные на рис. 3.3, иллюстрируют эти возможности.

Как видно из примеров представления рациональных чисел, результат приближения зависит от заданной погрешности. Чем она меньше, тем большие значения целых чисел в числителе и знаменателе результата разыскивает система. Функция Rationalize открывает широкие возможности для разработки целочисленных алгоритмов вычислений, позволяя легко получать рациональные приближения для наиболее распространенных числовых констант — на рис. 3.3 примеры этого даны для числа 8.

Обратите внимание на последние два примера — вычисление факториала достаточно большого числа. Первый результат целочисленный: он занял целых три строки, но зато он точен. С помощью функции N [ехрг] результат всегда можно представить в виде большого вещественного числа — но приближенного. При этом может использоваться научная форма представления чисел — с мантиссой и порядком.

Рис. 3.3. Примеры представления чисел в разных формах

Укороченная форма записи арифметических операций

Спецификой систем Mathematica являются арифметические операторы с укороченной формой записи, объединяющие операцию присваивания с арифметической операцией. Эти довольно специфические операторы, хорошо известные пользователям языка С, представлены ниже вместе с соответствующими им функциями.


Функция

Оператор

Назначение

Increment [i]

i++

Увеличивает значение i на 1 после использования i в выражении

Decrement [i]

i --

Уменьшает значение i на 1 после использования i в выражении

Preincrement [i]

++i

Увеличивает значение i на 1 до использования i в выражении

PreDecrement [i]

--i

Уменьшает значение i на 1 до использования i в выражении

AddTo[x,d]

x += dx

Прибавляет dx к х и возвращает новое значение х

SubtractFrom[x,dx]

x -= dx

Отнимает dx от х и возвращает новое значение х _

TimesBy [х, с]
X **= 'С
Умножает х на с и возвращает новое значение х
DivideBy [х, с]
X /= С
Делит х на с и возвращает новое значение х

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


Ввод (In)

Вывод (Out)

i=0

0

++i; ++i; ++i

3

i=0; i++; i++; i++

2

i=5

5

-- i

4

i=5

5

i --

5

i --

4

x=5

5

x+=0 . 5

5.5

x-=0 . 5

5.

x*=2

10.

x/=5

2.

 

Встроенные функции

Важнейшим объектом любой компьютерной математической системы является функция. Она отражает зависимость некоторой величины от одного или нескольких аргументов. Например, функция sin(x) дает зависимость синуса х от величины аргумента х при изменении последнего от -°° до +°°.

Признаком функции является возврат результата выполняемого ею действия. Характер результата будет зависеть от смысла функции, который нередко явно указывается ее именем — идентификатором. Например, функция Digitslnteger [n] возвращает число десятичных цифр десятичного целого числа. Это ясно из прямого перевода имени функции — слово Digitslnteger говорит о том, что она возвращает число цифр целого числа. Подобные смысловые имена задаются для большинства функций системы Mathematica и облегчают их запоминание.

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

Функции могут входить в состав математических выражений. Обычно они имеют один или несколько параметров, указываемых в квадратных скобках. Если параметров несколько, то в квадратных скобках указывается список параметров, разделенных запятыми. В общем случае параметрами могут быть списки. Наконец, в состав функций могут входить опции, указанные своим именем и (после знака ->) значением. Для обозначения положительной бесконечности используется символ Infinity. Целочисленные функции имеют в своем имени слово Integer.

В ядро систем Mathematica 3/4 входит множество встроенных функций, то есть функций, готовых к немедленному использованию без какого-либо предварительного объявления. Таких функций многие сотни. Среди них различные арифметические функции, тригонометрические и гиперболические функции, специальные математические функции и т. д. Мы рассмотрим их в дальнейшем.

Основные арифметические функции

Для выполнения арифметических действий в системах Mathematica 3/4 определены следующие арифметические функции:

  • Divide [х, у] — возвращает результат деления х на у эквивалентно выражению х у ^ -1;
  • Plus[x, у,...] — возвращает сумму элементов списка;
  • PowerModta, b, n] — возвращает Mod[a ^ b, n]. Для b<0 возвращает инверсию остатка;
  • Times [х, у,...] — возвращает произведение аргументов х*у*...;
  • Mod [m, n] — возвращает остаток от деления m на п. Результат имеет такой же знак, как п.

Ниже представлены примеры применения арифметических функций.


Ввод (In)

Вывод (Out)

Divide [1. ,3]

0.333333

Mod [123, 20]

3

Mod [123, -20]

-17

Mod[-123,20]

17

Plus[2,3,4]

9

Times [2, 3,4]

24

Для обмена значениями переменных х и у можно использовать выражение {х,у}={у,х}

 Пример обмена переменных значениями:


а=1;b=2;

{а,b}={b,а};

{а,b}

{2, 1}

Следующие функции служат для приведения вещественных чисел к ближайшим целым по определенным правилам:

  • Ceiling [х] — возвращает значение наименьшего целого числа, большего или равного х;
  • Floor [х] — возвращает наибольшее целое число, не превышающее данного х;
  • Quotient [n, m] — возвращает целое значение n/m, определяемое как Floor[n/m];
  • Round [х] — округляет х до ближайшего целого.

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


Ввод (In)

Вывод (Out)

Ceiling [{-5. 9, -5..1, 5, 5.1, 5.9}]

{-5, -5, 5, б, 6}

Floor [{-5. 9, -5.1,, 5, 5.1, 5.9}]

{-6, -6, 5, 5, 5}

Round[{-5.9, -5.1,, 5, 5.1, 5.9}]

{-6, -5, 5, 5, 6}

Ряд функций обеспечивает нахождение делителей целых чисел и наименьшего общего -кратного:

  • Divisors [n] — возвращает список целочисленных делителей числа п;
  • DivisorSigma [k, n] — возвращает сумму &-х степеней положительных делителей числа п;
  • ExtendedGCD [n, m] — возвращает расширенный наибольший общий делитель целых чисел пит;
  • GCD [nl,n2,...] — возвращает наибольший общий делитель целых чисел ni;
  • LCM[nl, n2,...] — возвращает наименьшее общее кратное целых чисел ni.

Ниже представлены примеры применения этих функций.


Ввод (In)

Вывод (Out)

LCM[124,12,6]

372

GCD [144, 12, 6] 6
Divisors [123] {1,3,41,123}
DivisorSigma [17,3] 129140164
ExtendedGCD [144,12] {12, {0,1}}

К целочисленным функциям можно отнести также функции вычисления факториала и двойного факториала:

  • Factorial [n] или n! — возвращает значение факториала числа n (n!=n* (n-1) *...*3*2*1, причем 0 !=1 и 1 !=1);
  • Factorial2 [n] или n! ! — возвращает значение двойного факториала числа п, равное п* (n-2) * (n-4) *...«%»

Ниже представлены примеры вычисления факториалов.


Ввод (In)

Вывод (Out)

Factorial [10]

3628800

20!

2432902008176640000

10!!

3840

20!//N

2.4329Х10 18

Mathematica способна вычислять факториалы больших чисел. Практически мгновенно (даже на компьютере с 486-м процессором) вычисляются значения до 1000!, хотя результат при этом занимает несколько страниц на экране дисплея. Можно вычислить даже 10000!, но для этого потребуется время до нескольких минут (зависит от типа компьютера). Обратите внимание на то, что управляющий символ //N за выражением дает вывод (аппроксимацию) в форме научной нотации.

Следующие функции служат для получения простых чисел и некоторых их характеристик:

  • Prime [n] — возвращает п-е простое число. Например, Prime [5] возвращает пятое простое число — 11. Всего лишь доли секунды требуются системе для вычисления миллиардного простого числа: Рг1те[10 Л 9] дает 22801763489;
  • PrimePi [x] — возвращает количество простых чисел, не превышающих х. Например, PrimePi [10] возвращает 4;
  • Partitions? [n] — возвращает числор(п) неупорядоченных разбиений целого числа п. Например, Partitions? [10] возвращает 42;
  • PartitionsQ [n] — возвращает q(n) — число разбиений с неравными частями для целого числа п. Например, PartitionsQ [15] возвращает 27.

Эти функции полезны при решении задач теории чисел.

Функции генерации случайных чисел

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

  • Random [ ] — возвращает равномерно распределенное псевдослучайное число типа Real в интервале от 0 до 1;
  • Random [type, range] — дает псевдослучайное число указанного типа type, лежащее в указанном интервале range. К возможным типам относятся Integer, Real и Complex. По умолчанию принят интервал от 0 до 1. Можно задать интервал явно в виде {min, max}; спецификация интервала в виде max эквивалентна {0, max};
  • SeedRandom[n] — сбрасывает (устанавливает в начальное состояйие) генератор случайных чисел, используя целое п как начальное число;
  • SeedRandom [ ] — устанавливает генератор, используя в качестве начального числа текущее время.

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

Для проверки равномерности распределения большого массива случайных чисел можно задать с их помощью случайные координаты и затем построить точки, соответствующие координатам (х, у). Рисунок 3.4 наглядно показывает, как это делается для массива из 10 000 случайных точек. О равномерности распределения случайных чисел говорит равномерность распределения плотности точек на графике.

Рис. 3.4. Графическая иллюстрация распределения точек со случайными координатами (х, у)

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

Функции выявления погрешностей и анализа структуры чисел

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

  • Accuracy [х] — возвращает количество десятичных цифр справа от десятичной точки числа х;
  • EvenQ [expr] — возвращает значение True, если expr есть четное число, и False — в противном случае;
  • IntegerDigits [n] — возвращает список десятичных цифр целого числа n;
  • IntegerDigits [n,b] — возвращает список цифр целого числа п в записи по основанию b;
  • IntegerDigits [n, b, k] — возвращает список длиной k, содержащий самые младшие (наименьшие) значащие цифры в n;
  • Precision [x] — возвращает количество точных знаков в числе х.

Поясним применение этих функций следующими примерами.


Ввод (In)

Вывод(Out)

Accuracy [123 . 456]

14

EvenQ [2*3+2]

True

EvenQ [2*3+3]

False

IntegerDigits [12345]

{1, 2,3, 4, 5}

IntegerDigits [12345, 16]

{3, 0,3, 15}

IntegerDigits [12352 , 16]

{3, 0,4, 0}

IntegerDigits [12352 ,2]

{1,1,0,0,0,0,0,0,1,0,0,0,0,0,0}

Precision [123. 452]

16

Функциями Accuracy и Precision возвращаются значения, установленные в последний раз или по умолчанию при первой загрузке системы.

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

Функции пользователя

Хотя в систему входят многие сотни встроенных функций (начиная от элементарных и кончая специальными математическими функциями и системными функциями), нередко требуется расширить ее вводом новых функций, действие которых задается пользователем. Такие функции принято называть функциями пользователя. Функции пользователя — простейшие программные объекты, необходимые даже в том случае, когда пользователь не желает углубляться в тонкости программирования системы. Их цель — расширение системы и ее обучение работе с новыми функциями.

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

  • f (x_) := х^3 — отложенное задание функции пользователя с именем f;
  • f (х_) = х^3 — немедленное задание функции пользователя с именем f;
  • ?f — вывод информации о функции f;
  • Clear [f] — уничтожение определения функции f.

В обозначениях вида х_ знак _ применяется для создания так называемых образцов, задающих локальные переменные в теле функции — в нашем примере это х. При этом в самом теле функции переменные обозначаются как обычно, без знака образца. Он лишь указывает на особый статус переменных в ограниченном пространстве программы — в теле функции. Так, если вместо х_ будет подставлено число 2, то f (2) будет возвращать 2 А 3. Вне тела функции значение переменной х не изменяется. Переменная х может быть и неопределенной: х_ определяет переменную х только для тела функции. Более подробно создание образцов будет описано в дальнейшем.

Mathematica позволяет записать введенные пользователем функции с их определениями на магнитный диск с помощью оператора


Save["filename", fl, f2, ...]

После этого функция пользователя становится внешней функцией. При этом для ввода таких функций в текущий документ (notebook) достаточно вызвать файл с именем filename:


<<filename

Рекомендуется создавать файлы с типовым расширением .т. Такие файлы входят в пакеты расширений системы. Имя файла нужно задавать по общепринятым для MS-DOS правилам, то есть при необходимости указывать логическое имя дисковода и путь к файлу, например, так:


<<D: \MAT\myfunc .m

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

Функции пользователя могут быть рекурсивными, то есть допускать в своем теле обращение к самим себе. Это связано с тем, что функция становится объявленной сразу же после задания своего имени со списком параметров. Рекурсия — мощный прием программирования, но злоупотреблять им не стоит. Многие рекурсивные алгоритмы более эффективно реализуются без рекурсии, с применением средств процедурного программирования, например циклов.

Функции пользователя можно задавать и выводить на печать как на языке системы, так и на некоторых общепринятых языках программирования, например Fortran, С или ТеХ. Для этого существует ряд функций преобразования, в имена которых входит слово Form (форма) и название языка для записи функций. Основные из них — это CForm [expr], FortranForm [expr ] и TeXForm [expr]. С их помощью выражения можно преобразовать в форму, принятую для языков программирования С, Fortran и ТеХ. При преобразовании в форму языка ТеХ греческие буквы заменяются их латинскими именами, например alpha, Alpha, beta, Beta, gamma и т. д. К сожалению, в отличие от систем класса MathCAD и Maple V R3, вывод математических формул в их полностью естественном виде не предусмотрен, хотя многое для этого уже сделано.

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

  • Splice ["file.rar"] — читает текстовый файл file.mx, интерпретирует его фрагменты, заключенные в ограничители <*...*>, и пишет текстовый файл file.*, в котором эти фрагменты преобразованы в формат, определяемый расширением х (с — С, f — Fortran, tex — ТеХ);
  • Splice ["infile", "outfile"] — то же, но с раздельным заданием имен входного и выходного файлов.

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

Mathematica может общаться также с иными системами, например текстовыми редакторами. К примеру, для передачи содержимого каких-либо ячеек в текстовый редактор Write, входящий в оболочку Windows, достаточно выделить эти ячейки и поместить их в буфер обмена, используя команду Сору из меню Edit. После этого надо запустить текстовый редактор и с помощью команды Edit | Paste поместить в окно редактирования содержимое ячеек. Если оно символьное, то с помощью редактора можно записать полученный документ с расширением .txt, то есть в стандартном текстовом формате, с которым работает большинство DOS-приложений.

Логические операторы

Логическими принято называть операции, отражающие чисто логическое соответствие между данными. В обиходном языке эти связи выражаются утверждениями типа «да» или «нет». Например, на вопрос «Сын вырос выше отца?» мы можем ответить «да» или «нет». В математике (да и в информатике) принято характеризовать логическое соответствие утверждениями True («Верно», «Истина» или «Да») и False («Неверно», «Ложь» или «Пет»). Слова True и False являются символьными константами, отражающими результаты логических операций и в системе Mathematica.

Для осуществления логических операций используются следующие логические операторы:


Равенство (например, а == b)

! = Неравенство

> Больше (например, b > а)

>= Больше или равно

< Меньше

<= Меньше или равно

Возможны следующие формы применения операторов сравнения:


а == b == с

а != b != с

х < у < z

и т. д.

Результатом вычисления этих выражений является выдача логических значений True или False. Это демонстрируют следующие примеры.


Ввод (In)

Вывод (Out)

2=2

True

a=a

True

a=b

a == b

2=3

False

2<3

True

2>3

False

2!=3

True

2+1==3==4-1

True

 

Логические функции

Основные логические функции над логическими данными р, q и т. д. задаются следующим образом:

Not[p] или !р Логическое отрицание

And[p, q,...] или р && q &&... Логическое умножение — операция «И»

Or[p,q,...] или р || q | |... Логическое сложение — операция «ИЛИ»

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


Ввод (In)

Вывод(Out)

And [True , True , True ] True
True && True && False False

Not [True]

False

Not [False]

True

Or [True, True, False]

False

2==2 && 3==3

True

True && True

True

And[l,l,0]

11111 1 0

And[l,l,0]

1 && 1&& 0

Эти примеры показывают, что аргументами логических функций и операндами логических операций должны быть только логические константы True и False или выражения, значения которых представлены ими. Недопустимо использовать численные значения 1 и 0, отождествляя их с логической единицей и логическим нулем. Результатом задания операций с ними будет повтор задания — возможно, в укороченной форме.

Отметим еще ряд логических операторов и функций:

Equal[Ihs, rhs] Greater[х,у] или х > у Возвращает True, если Ihs и rhs тождественны

Greater[xl,x2,x3] или xl > х2 > хЗ Возвращает True, если х оказывается больше у, иначе возвращает False

GreaterEqual[х,у] или х >= у Возвращает True, если xi образуют строго убывающую последовательность, иначе возвращает False

GreaterEqual[xl,х2,хЗ] или xl>= х2 >= хЗ Возвращает True, если х больше или равно у, иначе возвращает False

Negative[х] NonNegative[х] Positive[х] Возвращает True, если xi образуют невозрастающую последовательность, иначе возвращает False

SameQtlhs,rhs] или Ihs === rhs Возвращает True, если х оказывается отрицательным числом, иначе возвращает False

Xor[el, e2,...] Возвращает True, если х — неотрицательное число, иначе возвращает False

Возвращает True, если х — положительное число, иначе возвращает False

Возвращает значение True, если выражение Ihs тождественно rhs, иначе False. В отличие от Equal, сравнивает форму представления операндов, а не их значения

Является логической функцией XOR (исключающее «ИЛИ»). Возвращает True, если нечетное количество из ei имеют значение True, а остальные False. Возвращает False, если четное количество ei имеют значение True, a остальные False

Ниже приводятся примеры использования этих функций.


Ввод (In)

Вывод (Out)

Positive [2-3]

False

Equal [1+2, 4-1]

True

Equal [1+2, 2]

False

Greater [5, 4]

True

Greater [5, 4,3]

True

Greater [5, 4, 9]

False

Less [3,2+3]

True

Positive [2]

True

Negative [-2]

True

Neganbve[2]

False

NonNeganive [ -2 ]

False

NonNegative[2]

True

Xor[ True, True]

False

Xor [False , False]

False

Xor [True, False]

True

Ряд дополнительных логических функций читатель найдет в приложении.

Функции комплексного аргумента

Элементарные функции в системе Mathematica могут иметь аргумент в виде действительного числа х или комплексного z. Аргументы указываются как параметры функций в квадратных скобках.

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

  • Abs[z] — возвращает модуль комплексного числа z;
  • Arg [ z ] — возвращает аргумент комплексного числа z;
  • Conjugate [z] — возвращает комплексно-сопряженное с z число;
  • Directedlnf inity [] — представляет бесконечную числовую величину с неопределенным направлением на комплексной плоскости;
  • Directedlnfinity[z] — представляет бесконечную числовую величину, направление которой на комплексной плоскости определяется фазой комплексного аргумента z;
  • Im [ z ] — возвращает мнимую часть комплексного числа z;
  • Re [ z ] — возвращает вещественную часть числа z.

Далее приведены примеры операций с комплексными числами в непосредственном режиме. 


Ввод (In)

Вывод (Out)

z1 : =2+1*3;

z2: =4+1*5;

N[zl+z2]

6. + 8.1 I

Re [2+1*3]

2

H[Im[z2]J

5.

N[zl/z2]

0.560976 + 0.0487805 I

N[Abs[zl*z2]]

23.0868

Con j ugate [ z 1 ]

2-31

Если ввести N [ z 1 / 0 ], то система выдаст следующее сообщение:


N[zl/0]

Power::infy : Infinite expression 1/0 encountered.

Complexlnfinity

Итак, в этом случае система выдает сообщение об ошибке, но после него возвращает константу Complexlnfinity, означающую комплексную бесконечность.

Элементарные функции

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


Ввод (In)

Вывод (Out)

Sqrt[2]

Sqrt[2]

Sqrt[2.]

1.41421

2*Sin[l]

2 Sin[l]

N[2*Sin[l]]

1.68294

Log[Exp[l]]

1

Simplif у [Sin [x] /Cos [x] ]

Tan[x]

ComplexExpand [ Sin [ a+b* I ] ]

Cos[b] Sin[a]+ I Cosfa] Sinh[b)

Из этих примеров видно, что система знает и использует основные соотношения между элементарными функциями. В двух последних примерах используются символьные преобразования с применением функций Simplify (упрощение выражений) и ComplexExpand (расширение выражений с комплексным аргументом). Более подробно эти важные для символьных операций функции будут рассмотрены в дальнейшем.

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

 

gl3-3.jpg

Изображение: 

gl3-4.jpg

Изображение: 

4. Работа с объектами

 

Работа с объектами

 

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

Получение данных об объектах

Различные объекты системы будут более подробно описаны в дальнейшем по мере знакомства с системой. Полный список объектов, заданных в ядре системы, легко получить, используя команду ? * (ниже приведены лишь начало и конец этого списка):


?*

Abort

AbortProtect

Above

Abs

AbsoluteDashing

AbsolutePointSize

$Version

$VersionNumber

Можно также получить список всех определений на заданную букву, используя команду ?S*, где S — любая буква латинского алфавита. Ниже дан пример вывода всех определений ядра на букву U:


?U*

UnAlias Unevaluated Update

Underflow Uninstall UpperCaseQ

Underoverscript Union UpSet

UnderoverscriptBox Unique UpSetDelayed

Underscript Unprotect Upvalues

UnderscriptBox UnsameQ Using

Unequal Unset

Аналогичные возможности предоставляет функция Names ["S"], например, Names ["А*"] дает список всех ключевых слов, начинающихся с символа «А». Наконец, командой ?Name можно вывести справку по любому определению с именем Name. Например, после выполнения команды


?Abs

Abs[z] gives the absolute

value of the real or complex number z.

становится ясно, что идентификатор Abs задает функцию Abs [ z ] для вычисления абсолютного значения комплексного числа.

С помощью выражения ?Name можно проверить, является имя объекта Name уникальным или оно уже использовано в системе:


?sin

Information::notfound : Symbol sin not found.

?Sin

Sin[z] gives the sine of z.

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

Всякий объект перед использованием должен быть определен (задан). Внутренние объекты уже заданы в ядре. Объекты пользователя последний задает в текстах своих документов (notebooks).

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

Оперативная помощь по объекту

Оперативную помощь о назначении какой-либо функции или объекта в ходе работы с системой можно получить, используя следующие обращения:

  • ? Name или Names [ "Name" ] — справка по заданному слову Name;
  • ?? Name — расширенная справка по заданному слову Name;
  • ?Аbс* — перечень всех определений, начинающихся с символов Abc;
  • ©ptions [name] — получение информации об опциях объекта Name.

Примеры получения оперативной справки показаны на рис. 3.5.

Рис. 3.5. Примеры получения оперативной справки

Нетрудно заметить, что есть два уровня комментариев оперативной справки. Так, при обращении ?Sin получено лишь сообщение о назначении функции. Обращение ??Sin дает дополнительную информацию о признаках функции, именуемых ее атрибутами.

Многие встроенные функции защищены от модификации атрибутом Protected. К примеру, нельзя определить новую функцию Sin[x]=x A 2, причем вовсе не потому, что это определение абсурдно (далее мы покажем, что можно снять защиту и переопределить любую функцию даже самым абсурдным образом), а потому, что имя функции защищено указанием атрибута Protected (Защищенное). Позднее мы ознакомимся и с иными атрибутами — под ними подразумеваются определенные свойства объектов.

Средства диагностики и сообщения об ошибках

Средства диагностики органично входят во все программные модули системы Mathematica, созданные профессионально. Благодаря этому система обнаруживает неточные действия пользователя, например синтаксические ошибки при вводе идентификаторов функций и команд, неправильное использование типов данных, применение недопустимых операций (вроде злосчастного деления на ноль) и т. д. Всякий раз, когда ошибочное действие обнаружено, система выдает сообщение об ошибке в следующем виде:


Тип::Метка%Диагностика:Сообщение

Эти сообщения появляются в отдельных неактивных ячейках. Тип указывает на тип ошибки, например, General — ошибка общего вида, Syntax — синтаксическая ошибка, Arg — ошибка задания аргумента и т. д. Метка указывает место ошибки в списке ошибок данного типа, а Диагностика указывает (увы, не всегда...) на ошибочное выражение. Сообщение обычно раскрывает суть ошибки.

Допустим, мы пытаемся вычислить значение экспоненциальной функции, указав ошибочно аргумент 2,3 с разделительной запятой вместо точки. Вот как Mathematica отреагирует на такую попытку (рис. 3.6, первый пример).

Рис. 3.6. Примеры выполнения «ошибочных» операций

Итак, ясно, что произошла ошибка задания аргумента — функция Ехр должна иметь только один аргумент, а число 2,2 система воспринимает как два аргумента, разделенные запятой. Вот еще один пример — вроде бы ошибочно заданы круглые скобки в выражении N (Ехр (2) ). Mathematica 3 в этом случае дала бы два предупреждающих сообщения:


Syntax::bktwrn : "Ехр(2)" should probably be "Ехр[2]".

Syntax::bktwrn : "N(Exp(2)l" should probably be "N[Exp(2)]".

2ExpN

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

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

Включение и выключение сообщений об ошибках

Опытный пользователь нередко способен опознать ошибки и без слишком назойливых сообщений о них. Например, он может судить о своей промашке просто по отказу системы выполнить вычисление и по повтору выражения в строке вывода (см. примеры выше). Кроме того, часть сообщений носит предупреждающий характер и на первых порах может игнорироваться.

Для отключения сообщений об ошибках служит ключ


Off[Function::tag]

Например, отключим сообщение об ошибках у функции Ехр:


Off[Exp::argx]

Ехр[2,2]

Ехр[2,2]

Ехр[2]

Е2

N[Exp[2]]

7.38906

Для включения сообщения об ошибках используется ключ


On[Function::tag]

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


On[Exp::argx]

К сожалению, диагностика ошибок не способна опознать ошибки, имеющие формально правильный синтаксис. Чаще всего эти ошибки связаны с неверным описанием алгоритма вычислений. Например, если пользователь в математическом выражении вместо Sin [х] записал Cos [х], то эта грубая ошибка никак не будет распознана системой, поскольку синтаксически вызов функции Cos [х] записан безупречно. Часто пользователи путают идентификаторы переменных. Естественно, что ответственность за такие ситуации целиком лежит на пользователе — программисте.

Защита от модификации и ее отмена

Как уже отмечалось, объекты Mathematica имеют средства установки и снятия защиты от модификации. Для этого используются следующие функции-директивы:

  • Protect [s1, s2,...] — устанавливает атрибут защиты от модификации Protected для перечисленных объектов si;
  • Protect ["forml", "form2",...] — устанавливает атрибут защиты от модификации для всех объектов, имена которых сопоставимы с любым из указанных строковых шаблонов formi;
  • Unprotect [s1, s2,...] — удаляет атрибут защиты от модификации Protected для объектов si, что делает возможной их модификацию;
  • Unprotect ["form1", "form2",...] — снимает защиту всех объектов, имена которых текстуально (по буквам) сопоставимы с любым из указанных шаблонов formi.

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


Log[7]=2

Set::write : Tag Log in Log[7] is Protected.

2

Итак, здесь предпринята попытка приписать логарифму числа 7 вовсе не свойственное ему значение 2. В ответ система выдала сообщение, что символ Log имеет атрибут Protected, то есть защищен от модификации. С помощью директивы Unprotect снимем защиту:


Unprotect[Log]

{Log}

Теперь выражение Log [ 7 ] можно модифицировать:


Log[7] =2

2

и использовать его уже в новом значении:


Log[7]=2

2

Log[7]+Log[3]

2 + Log[3]

Для отмены произведенной модификации и защиты символа Log от изменений выполните следующие действия:


Log[7]=.

Protect[Log]

{Log}

Теперь можно проверить, что присваивание Log [7] =2 не действует и функция Log работает как положено, возвращая значение In (7) =1. 94591:


Log[7]

Log[7]

N[Log[7]]

1.94591

Защита идентификаторов объектов от модификации является мощным средством контроля правильности вычислений. Эту защиту вряд ли стоит снимать подавляющему большинству пользователей. Тем не менее, возможность устранения защиты позволяет переименовать объект, например, при использовании с ним новых алгоритмов вычислений или при задании системе Mathematica каких-то новых свойств, не присущих ей изначально.

Подстановки

Важное значение в числовых и символьных преобразованиях имеют операции подстановки (rules). Их смысл заключается в замене одного объекта или его части другим объектом или частью другого объекта. Например, часто возникает необходимость вычислить значение математического выражения при замене некоторой переменной ее конкретным численным значением. Для этого достаточно вместо этой переменной подставить нужное численное значение.

Куда менее тривиальной является замена переменной ее символьным значением в виде математического выражения. При этом исходное выражение может в ходе решения задачи превратиться в совершенно новое выражение, поскольку после подстановки система может провести над исходным выражением достаточно сложные математические преобразования. Говорят, что в этом случае ячейка, содержащая выражение (а точнее — само выражение), оценивается и изменяется по ходу решения задачи. Операции подстановки обычно вводятся с помощью комбинации символов «/ .»:

  • ехрг / . х -> value — в выражение ехрг вместо переменной х подставляется ее значение value;
  • ехрг /. {х -> xvalue,. у -> yvalue} — в выражение ехрг вместо переменных х и у подставляются их значения xvalue и yvalue.

Примеры:


l+x^3/.x->l+z

1 + (1+ z)3

х^2+2*х+3/.х->2

11

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

В целом для операций подстановок используют следующие обозначения:

  • Ihs -> rhs — прямая подстановка Ihs в rhs;
  • Ihs :> rhs — отложенная подстановка (RuleDelayed), которая преобразует Ihs в rhs, вычисляя rhs не сразу, а только при использовании правила подстановки.

Ниже приведены еще два примера на использование операций подстановки:


р:=1+х^2+3*х^3

р/.х->1+у

1+ (1 + у)2+3 (1 + у)3

{f[1],f[2],f[3]}/.f[n_]->n^2

{1, 4, 9}

f[n_]:=n^2

f[4]+f[y]+f[x+y]

16+y2+(x+y)2

В первом примере подстановка произведена в математическое выражение, а во втором — в список.

Подстановки — мощный и необычайно гибкий инструмент системы Mothematica. С их помощью можно задать даже новые математические закономерности и произвольные соотношения (к примеру, можно задать абсурдное правило, что 2 + 2 = 5). Эти необычные возможности мы рассмотрим в дальнейшем.

 

gl3-5.jpg

Изображение: 

gl3-6.jpg

Изображение: 

5. Работа со списками и массивами

 

Работа со списками и массивами

 

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

Списки и их свойства

Часто математические или иные объекты содержат множество данных, которые желательно объединять под общим именем. Например, под объектом с именем М можно подразумевать квадратную матрицу размером 10x10 с общим числом элементов, равным 100. Человека с именем Victor, например, можно характеризовать целым списком разных данных — символьными фамилией, именем и отчеством, целочисленным годом рождения, вещественным ростом, объемом груди и т. д.

Для объединения данных могут использоваться списки (list). Mathematica имеет обширные возможности работы с объектами-списками, содержащими не только однотипные, но и разнотипные элементы. В частности, элементами списков могут быть числа, константы, переменные, выражения и даже сами списки. Списки используются для конструирования более частных типов данных — массивов, матриц и векторов [87].

На языке данной системы список — это совокупность произвольных данных, указанных в фигурных скобках, например: {1, 4, 2, 7, 9} или {а, Ь, с, d, e, sin[x], ln[y], "string"}

Возможно задание списков в списке, например, так:


{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

Такой список представляет матрицу


1  2  3

4  5  6

7  8  9

Однако, чтобы вывести список в такой матричной форме, надо использовать после списка выражение //MatrixForm (рис. 3.7).

Рис. 3.7. Примеры задания и вывода матрицы

На рис. 3.7 показан еще один способ задания списка или матрицы — с помощью функции List:

  • List [a, b, с,...] — создает список {а, b,, с,...};
  • List [ {а,b, с,...}, {d,e, f,...}, {i, k, 1,...} ] — создает список — матрицу { {a,b, с,...}, {d,e, f,...}, {i, k, 1,...} }.

Списки можно составлять, непосредственно задавая объекты в соответствии с описанным синтаксисом. Однако можно и генерировать некоторые виды списков, таких как таблицы. Списки могут быть объектами присваивания переменным, например


V:={1, 2, 3, 4, 5}

Списки характеризуются размером, который представляет собой произведение числа элементов списков по каждому направлению (размерности). Например, одномерный список является вектором и характеризуется числом элементов по единственному направлению. При этом вектор может быть вектором-строкой или вектором-столбцом. Двумерный список представляет матрицу, имеющую m строк и n столбцов. Ее размер равен mxn. Если m=n, то матрица называется квадратной. Трехмерный список можно представить в виде параллелепипеда, содержащего mxnxp элементов. Списки большей размерности трудно наглядно представить, но они вполне возможны. Напомним, что имена векторов и матриц в данной книге обозначены жирными символами, например, V для вектора и М для матрицы.

Генерация списков

Для генерации списков с элементами, являющимися вещественными и целыми числами или даже целыми выражениями, часто используется функция Table, создающая таблицу-список:

  • Table [expr, {imax} ] — генерирует список, содержащий imax экземпляров выражения ехрг;
  • Table [expr, {i, imax} ] — генерирует список значений ехрг при 1, изменяющемся от 1 до imax;
  • Table [expr, {i, imin, imax}] — генерирует список значений ехрг при i, изменяющемся от imin до imax;
  • Table [expr, {i, imin, imax, di} ] — использует шаг приращения i, равный di;
  • Table[expr, {i, imin, imax}, {j, jmin, jmax},...] —возвращает вложенный список. Самым внешним является список по переменной i.

Ниже приводятся примеры использования функции Table (первая строка каждого примера — ввод, следующая — вывод).


Пример

Комментарий

  Table[i*j,{i,l,3},{j,l,3}]

{{1, 2, 3), [2, 4, 6}, {3, 6, 9}}

 Генерация матрицы размером

Table[N[Exp[i]], {1,0, 2,0.5}]

{1., 1.64872, 2.71828, 4.48169, 7.38906}

Генерация пяти значений Е ^ 1 численном виде

Table[Exp[i],{i,l,5}]

{е, е 2 , е 3 , е 4 , е 5 }

Генерация пяти значений Е ^ i (i=l, 2, 3,4 и 5)

Table[Exp[i],{5}]                        {е i , е i , е i , е i , е i }

Генерация пяти значений Е ^i

Применяется также функция Range, которая предназначена для создания так называемых числовых списков, значения которых равномерно распределены в некотором заданном диапазоне:

  • Range [imax] — генерирует список числовых элементов {1, 2, ..., imax};
  • Range [imin, imax] — генерирует список числовых элементов {imin, ...,
  • Range [imin, imax, di] — генерирует список числовых элементов от imin до imax с шагом di.

Примеры использования функции Range.


Пример

Комментарий

Range [5]

{1, 2, 3, 4, 5}

Генерация пяти целых чисел


Range[0,2,0.5]

{0, 0.5, 1.,1.5, 2.}

Генерация чисел пяти вещественных

 

Выделение элементов списков

Для выделения элементов списка list используются двойные квадратные скобки:

  • list [ [i] ] — выделяет i-й элемент списка;
  • list [ [ { i, j , --.}]] — выделяет i-й, j-й и т. д. элементы списка.

Ниже приведены примеры выделения элементов списков.


Пример

Комментарий

11:={1,2,3,4,5)

Задание исходного списка 11

11[[3]]

Выделение третьего элемента

3

11[[{1,2,5}]]

Выделение первого, второго и пятого элементов

(1, 2, 5}

12={{1,2,3},{4,5,6}}

Задание сдвоенного (двумерного) списка

{{1, 2, 3}, {4, 5, 6}}

TableForm[12]

Вывод сдвоенного списка в табличной форме

1 2 3

4 5 6

L2[[2,3]]

Выделение элемента сдвоенного списка

6

Для выделения заданного z'-ro элемента списка list используется также функция Part [list, i]. При i>0 отсчет номеров элементов идет с начала списка, а при i<0 — с его конца. Это правило поясняют следующие примеры:


L:={l,2,3,a,b,c}

{Part[L,2],Part[L,5],Part[L,6]}

{2, b, с}

{Part[L,-2],Part[L,-5],Part[L,2]}

{b, 2, 2}

Функция Part может использоваться для выбора заданного элемента выражения из списка. В этом случае вместо i надо указать три числа — номер выражения как элемента списка, уровень выражения и порядковый номер извлекаемого из

выражения объекта. Показанные на рис. 3.8 примеры иллюстрируют работу со списком, последним (четвертым) элементом которого является математическое выражение.

Рис. 3.8. Примеры выделения элементов выражения

Обратите внимание на то, что в последнем примере неверно задан уровень выражения — использованное выражение имеет только один (первый) уровень. Поэтому задание второго уровня вызывает появление сообщения об ошибке.

Функция Select используется для выделения элементов списка, удовлетворяющих заданному критерию:

  • Select [list, crit] — выбирает все элементы ei списка list, для которых функция критерия crit [ei] имеет значение True;
  • Select [list, crit, n] — выбирает первые п элементов, для которых critfei] есть True.

Ниже представлены примеры применения этой функции:


Select[{1,а,2,b,3,c},NumberQ]

{1, 2, 3}

Select[{l,a,2,b,3,c),NumberQ,2]

{1, 2}

Select[{l,a,2,b,3,c},PrimeQ]

{2, 3}

 

Вывод элементов списков

Для вывода элементов списка используются следующие функции:

  • MatrixFormflist] — выводит список в форме массива (матрицы);
  • TableForm [list] — выполняет вывод элементов списка list в виде таблицы.

С этими функциями используются следующие опции:

  • TableAlignments — указывает, каким образом должно выравниваться содержимое списка в каждой размерности (слева, по центру или справа);
  • TableDepth — устанавливает максимальное количество уровней, выводимых в табличном или матричном формате;
  • TableDirections — указывает, как следует располагать последовательные (соседние) размерности — в виде строк или столбцов;
  • TableHeadings — задает подписи (labels) для каждой размерности таблицы или матрицы;
  • TableSpacing — устанавливает количество пробелов, которое следует оставлять между соседними строками или столбцами.

Обратите внимание на то, что эти опции используются как для функции TableForm, так и для функции MatrixForm, используемой для вывода матриц. Вообще, векторы и матрицы являются разновидностью списков. На рис. 3.9 поясняется использование функций MatrixForm и TableForm на примере вывода списка.

Рис. 3.9. Примеры вывода списка в матричной и табличной формах

Дополнительные возможности функции TableForm демонстрирует рис. 3.10. Здесь особенно полезно отметить возможность выравнивания данных в таблицах по левому и правому краям, а также по середине.

В большинстве случаев опции для функций MatrixForm и TableForm не используются. Точнее, они установлены по умолчанию. Проверить, какие опции использованы, можно, например, следующим образом:


Options[MatrixForm]

{TableAlignments -> Automatic, TableDepth-> со, TableDirections -> Column,

TableHeadings->None, TableSpacing-> Automatic}

Options[TableForm]

{TableAlignments -> Automatic, TableDepth ->бесконечность, TableDirections -> Column,

TableHeadings -» None, TableSpacing-> Automatic}

Рис. 3.10. Примеры вывода списка в табличной форме

Вывод можно сделать такой — Mathematica обладает обширными возможностями по части выделения элементов списков и представления списков на экране дисплея и в распечатках документов.

Функции выявления структуры списков

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

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

  • Count [list, pattern] — возвращает количество элементов в списке list, которые соответствуют образцу pattern;
  • Dimensions [list] — возвращает список размеров списка по каждой размерности;
  • FreeQ [list, form] — возвращает True, если список list не содержит form;
  • Length [list] — возвращает число элементов одномерного списка list или число размерностей в случае многомерного списка;
  • MatrixQ [list ] — проверяет, является ли список матрицей, и дает True, если это так, и False в противном случае;
  • MemberQ [list, form] — проверяет, есть ли form в списке, и возвращает True, если это так, и False в противном случае;
  • Position [list, form] — возвращает номер позиции form в списке;
  • TensorRank[list] — находит ранг списка, если он является тензором;
  • VectorQ [list] — проверяет, является ли список вектором, и дает True, если это так, и False в противном случае.

Функции с буквой Q в конце имени являются тестирующими и возвращают логические значения True или False. Остальные функции возвращают численные значения соответствующего параметра списка.

Ниже даны примеры использования этих функций.


Ввод (In)

Вывод(Out)

11={1,2,3,4,1};

Length [11]

5

Dimensions [11]

{5}

MatrixQ [11]

False

TensorRank [ 11 ]

1

MemberQ[ll,l]

True

Count[ll,l]

2

FreeQ [11, 5]

True

Position [11,1]

{{1},{5}}

VectorQ [11]

True

M={{1, 2,3}, {4, 5, 6}}

Length [M]

2

Dimensions [M]

{2,3}

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

Работа со списком в стеке

Списки можно представить в виде особой структуры данных — стека. Стек — это структура данных, напоминающая стопку тарелок в шкафу. При этом тарелки играют роль данных. Очередную тарелку можно положить только сверху (на вершину стека). На дне стека лежит первая помещенная в него тарелка. Стек подчиняется следующему правилу: последнее введенное значение извлекается первым, а первое введенное значение извлекается последним. Стек относится к системам хранения данных динамического типа, его размеры непрерывно меняются по ходу вычислений. Стек может быть пустым, если из него извлечены все данные.

Система Mathematica предоставляет широкие возможности для операций со стеками:

  • Drop [list, n] — возвращает список list, из которого удалены первые п элементов;
  • Drop [list, -n] — возвращает список list с отброшенными последними п элементами;
  • Drop [list, {n}] — возвращает список list без n-го элемента;
  • Drop [list, {m, n}] — возвращает список list с отброшенными элементами от m-го до п-го;
  • Fold[f, x, list] — возвращает последний элемент из FoldList [f,x, list];
  • Last [list] — возвращает последний элемент списка list;
  • Rest [list] — возвращает список с уничтоженным первым элементом;
  • Take [list, n] — возвращает первые п элементов списка list;
  • Take [list, -n] — возвращает последние п элементов списка list;
  • Take [list, {m, n}] — возвращает элементы списка с порядковыми номерами от m до п.

Следующие примеры поясняют работу со стеком.


Ввод (In)

Вывод(Out)

Drop[{l

,2

,3

,4

,5},

2]

{3,

4,

5}

Drop [ { 1

,2

,3

,4

,5},

-2]

{1,

2,

3}

Drop [ { a

,b

,c

,d

,e>,

{2,4}]

(a,

e}

Last[{l

,2

,3

,4

,5}]

5

Rest[{l

,2

,3

,4

,5}]

{2,

3,

4, 5}

Take[{l

,2

,3

,4

,5},

2]

(1,

2}

Take [ { 1

,2

,a

,b

,c},

-2]

{b,

c}

Take [ { 1

,2

,3

,4

,5},

{2,4}]

{2,

3,

4}

Тривиальная процедура общения со стеком (ввести/вывести данные) ограничивает возможности стековых операций. Из житейского опыта мы знаем, что, проявив настойчивость, можно вставить тарелку и в середину стопки. Mathematica предоставляет ряд расширенных возможностей для работы со списками, выходящих за рамки обычных стековых операций.

Так, например, для расширения списка путем включения в него новых элементов используются следующие функции:

  • Append [list, element] — добавляет элемент в конец списка;
  • PreoendTlist.element1 — добавляет элемент в начало списка:
  • Insert [list, element, n] — вставляет элемент в позицию п (отсчет пози-ций.ведется с начала списка, а если число п отрицательное — то с конца). Данной функцией можно включать элемент в несколько позиций, указав каждую в фигурных скобках, взяв все перечисление в еще одни фигурные скобки и использовав его вместо п. При этом надо учитывать, что все позиции включаемых элементов определяются одновременно до начала расширения списка.

Следующие примеры иллюстрируют применение этих функций.


Ввод (In)

Вывод(Out)

1={1,2,3}

(1,

2,

3}

Append[l,e]

(1,

2,

3,

e}

Prepend[l,e]

{e,

1,

2,

3}

Insert[l,e,2]

{1,

e,

2,

3}

L={1, 2, 3, 4

, 5}

{1,

2,

3,

4, 5}

Insert [L, e,

-5]

(1,

e,

2,

3, 4, 5}

Insert [L, e,

{{1},{5}}]

(e,

1,

2,

3, 4, e, 5}

Обратите внимание на то, что в данном случае элементы списка — числа, тогда как вставляемый элемент имеет символьное значение е.

Следует отметить, что описанные для стека функции Drop и Rest позволяют удалить из списка последний или первый элемент. Функция Delete [list, i] позволяет удалить из списка произвольный i-й элемент. Если i>0, то отсчет удаленного элемента идет с начала списка, а если i<0 — с конца:


L:={1,2,3,4,5}

{Delete[L,l],Delete[L,3],Delete[L,5]}

{{2, 3, 4, 5}, {1, 2, 4, 5}, {1, 2, 3, 4}}

{Delete[L,-2],Delete[L,-5]}

{{1, 2, 3, 5}, (2, 3, 4, 5}}

Delete[{l,2,3,{a,b,c},4,5},2]

{1, 3, {a, b, c}, 4, 5}

Если элементом списка является список, то он фигурирует как один элемент. Можно, однако, удалить избранный элемент из элемента списка, указав в фигурных скобках вместо i номер элемента списка во внешнем списке и номер удаляемого элемента во внутреннем списке. Это иллюстрируют следующие примеры:


Delete[(1,2,3,{а,Ь,с},4,5},{4,3}]

{1, 2, 3, {а, b}, 4, 5}

Delete[{1,2,3,{а, b, с},4,5},{4,1}]

{1, 2, 3, {b, с}, 4, 5}

Наконец, с помощью функции Delete можно удалить несколько элементов списка, указав каждый из них в фигурных скобках и оформив это указание также в фигурных скобках:


Delete [ {1,2,3, {a, b, c} , 4, 5}, {{2}, {4} ,{ 5}}]

{1, 3, 5}

Следует иметь в виду, что некоторые функции удаляют в списках определенные элементы. Этот вопрос будет рассмотрен ниже.

Изменение порядка расположения элементов в списке

Помимо добавления в список новых данных имеется возможность изменения порядка расположения элементов в списке. Она реализуется следующими операциями:

  • Flatten [list] — выравнивает (превращает в одномерный) список по всем его уровням;
  • Flatten [list, n] — выравнивает список по п его уровням;
  • Flatten [list, n, h] — выравнивает выражения с заголовком h no n уровням;
  • FlattenAt [list, n] — выравнивает подсписок, если он оказывается п-м элементом списка list. Если n отрицательно, позиция отсчитывается с конца;
  • Sort [list] — сортирует элементы списка list в каноническом порядке;
  • Sort[list,p] — сортирует согласно функции упорядочения р;
  • Reverse [list] — возвращает список с обратным порядком расположения элементов;
  • RotateLeft [list] — возвращает список после однократного поворота влево;
  • RotateLeft [list, n] — возвращает список после n-кратного поворота влево;
  • RotateRight [list] — возвращает список после однократного поворота вправо;
  • RotateRight [list, n] — возвращает список после n-кратного поворота вправо;
  • Transpose [list] — осуществляет транспозицию (смену строк и столбцов) для двумерного списка;
  • Transpose [list, п] — осуществляет транспозицию n-мерного списка. Ниже приведен ряд примеров на использование этих функций.
Ввод (In) Вывод (Out)
13={{1,2,3},{4,5,6},{7,8,9}}; {1,2,3,4,5,6,7,8,9}
Flatten [13]  
FlattenAt[13,l] {1,2,3,{4,5,6},{7,8,9}}
Sort[{l,5,3,4,2}] {1,2,3,4,5}
Reverse[{l,2,3,4}] {4,3,2,1}
RotateLeft[ {1,2,3,4,5}, 2] {3,4,5,1,2}
RotateRight[{l,2,3,4,5} ,2] {4,5,1,2,3}
12={{a,b},{c,d}};  
TableForm[12] a b c d
TableFormf Transpose [12] ] a c d b

Изменение порядка расположения элементов в списке полезно при реализации некоторых алгоритмов. К примеру, сортировка списка ускоряет выполнение статистических расчетов и уменьшает их погрешности.

Комбинирование списков и работа с множествами

Иногда возникает необходимость комбинирования нескольких списков. Для этого используются следующие функции:

  • Complement [list, listl, list2, ...] — возвращает список list с элементами, которые не содержатся ни в одном из списков listl, Iist2, ...;
  • Intersection [listl, list2,...] (пересечение множеств) —возвращает упорядоченный список элементов, общих для всех списков listi;
  • Join[list1, list2,... ] — объединяет списки в единую цепочку (выполняет конкатенацию). Join может применяться к любому множеству выражений, имеющих один заголовок;
  • Union [listl, Iist2, ...] (объединение множеств) — удаляет повторяющиеся элементы списков и возвращает отсортированный список всех различающихся между собой элементов, принадлежащих любому из данных списков listi. Функция обеспечивает теоретико-множественное объединение списков;
  • Union [list] — возвращает отсортированный вариант списка list, из которого удалены все повторяющиеся элементы.

Приведенные ниже примеры иллюстрируют применение функций комбинирования списков.


Ввод (In)

Вывод (Out)

Complement! {1, 2, 3,4, 5}, {1, а, 2}, {b, с, 5}]

{3,

4}

11={1,2,3,4,5};

12={а,b,3,4,с};

Intersection [11 , 12]

{3,

4}

Join [11, 12]

(1,

2, 3, 4, 5, a, b, 3, 4, c}

Union[{l,2,4,3,2,7,3,5}]

{1,

2, 3, 4, 5, 7}.

Union[{3,2},{!,4}]

(1,

2, 3, 4}

Union[{a,b,c,a},{l,d,3}]

{1,

3, a, b, c, d}

Комбинирование списков позволяет создавать сложные структуры данных из более простых структур. Это может быть полезно при построении очередей, деревьев и иных структурных построений. Кроме того, приведенные функции обеспечивают основные операции со множествами. Функцию Union удобно использовать при решении нелинейных и алгебраических уравнений для удаления повторяющихся решений.

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

 

gl3-10.jpg

Изображение: 

gl3-7.jpg

Изображение: 

gl3-8.jpg

Изображение: 

gl3-9.jpg

Изображение: 

6. Операции линейной алгебры

 

Операции линейной алгебры

 

Линейная алгебра — один из фундаментальных разделов математики. Он во многом способствовал развитию методов вычислений. Средства линейной алгебры (преобразование матриц, решение систем линейных уравнений и т. д.) широко используются при решении задач механики, электро- и радиотехники и других отраслей науки и техники. В этом разделе мы познакомимся с основным набором средств системы Mathematica, предназначенных для решения задач линейной алгебры.

Создание массивов

Совокупность данных образует массив (Array). Массивы могут быть одномерными (один список), двумерными и многомерными (два и более списка). Одномерные массивы в математике называют векторами, двумерные — матрицами. В общем случае массив характеризуется размерностью (числом измерений) и размером — произведением числа элементов по всем размерностям. Mathematica позволяет создавать многомерные массивы — число элементов в них ограничено лишь объемом памяти компьютера.

Для задания массивов используются следующие функции:

  • Array [ f, n] — генерирует список длиной п с элементами f [ 1 ], f [ 2 ], ..., f[n];
  • Array [f, {nl, n2, ...}] — генерирует массив размером n1x n2 x... в виде вложенных списков с элементами f [ i I, i2,...] (аргумент функции i k меняется от 1 до nk);
  • Array[f, dims, origin] — генерирует список с размерностью dims, используя спецификацию индекса origin;
  • Array [f, dims, origin, h] — использует заголовок h, а не List, для каждого уровня массива.

Далее приводятся примеры задания массивов и их вывода.


Ввод (In)  

 

Вывод (Out)  

Y : =Array [Exp , 4 ]

Y

 {e,

 e 2 ,

 e 3 ,

 e 4 }

N[Y]

 

 

{2.

71828,

7.

38906,

20.0855, 54

.5982}

Array[f,{3

,

3}]

{{f

[1,

1],

f

[1, 2]

{

f[l,

3]},

{f[2, 1], f[2, 2],

{[2

, 3]

},

{f

[3, 1]

{

f[3,

2], f

[3, 3] }}

Array [Sin,

3

,0]

{0,

Sin

[1]

, Sin[2]

}

Array [Sin,

4

,l,Plus]

Sin

[1]

+ Sin

[2] +

Sin[3]

+ Sin

[4]

Array[f ,5,

2

,2]

2[f

[2],

f [

3]

, f[4]

{

f [5]

, f[6]

]

 

Основные понятия линейной алгебры

Массивы, в основном в виде векторов и матриц, широко применяются при решении задач линейной алгебры. Прежде чем перейти к рассмотрению возможностей Mathematica в части решения таких задач, рассмотрим краткие определения, относящиеся к линейной алгебре.

Матрица — прямоугольная двумерная таблица, содержащая m строк и п столбцов элементов, каждый из которых может быть представлен числом, константой, переменной, символьным или математическим выражением (расширительная трактовка матрицы).

Квадратная матрица — матрица, у которой число строк m равно числу столбцов п. Пример квадратной матрицы размером 3x3:


1  2  3

4  5  6

7  8  9

Сингулярная (вырожденная) матрица — квадратная матрица, у которой детерминант (определитель) равен 0. Такая матрица обычно не упрощается при символьных вычислениях. Линейные уравнения с почти сингулярными матрицами могут давать большие погрешности при решении.

Единичная матрица — это квадратная матрица, у которой диагональные элементов равны 1, а остальные элементы равны 0. Ниже представлена единичная матрица размером 4x4: 


    1 0 0 0
    0 1 0 0
E = 0 0 1 0
    0 0 0 1

Транспонированная матрица — квадратная матрица, у которой столбцы и строки меняются местами. Приведем простой пример.

Исходная матрица:


    a b c
A = d e f
    i k l

Транспонированная матрица:


    a d i
А т = b e k
    c f l

Обратная матрица — это матрица М -1 , которая, будучи умноженной на исходную квадратную матрицу М, дает единичную матрицу Е.

Ступенчатая форма матрицы соответствует условиям, когда первый ненулевой элемент в каждой строке есть 1 и первый ненулевой элемент каждой строки появляется справа от первого ненулевого элемента в предыдущей строке, то есть все элементы ниже первого ненулевого в строке — нули.

Диагональ матрицы — расположенные диагонально элементы А., матрицы А. В приведенной ниже матрице элементы диагонали представлены заглавными буквами:

 


    A b c
А = d E f
    i k L

Обычно указанную диагональ называют главной диагональю — для матрицы А, приведенной выше, это диагональ с элементами А, Е и L. Иногда вводят понятия поддиагоналей (элементы d и k) и наддиагоналей (элементы b к f).

Ранг матрицы — наибольший из порядков отличных от нуля миноров квадратной матрицы.

След матрицы — сумма диагональных элементов квадратной матрицы. Определитель матрицы — это многочлен от элементов квадратной матрицы, каждый член которого является произведением п элементов, взятых по одному из каждой строки и каждого столбца со знаком произведения, заданным четностью перестановок:


detА = Сумма a1j(-1)j+1M1<j>

где M <J> — определитель матрицы порядка n-1, полученной из матрицы А вычеркиванием первой строки и j-то столбца. В таком виде определитель (он же детерминант) легко получить в символьных вычислениях. В численных расчетах мы будем подразумевать под определителем численное значение этого многочлена.

Матрица в целой степени — квадратная матрица в степени п (п — целое неотрицательное число), определяемая следующим образом: М° = Е, М 1 = М, М 2 = = М*М,..., Мn = М n-1 -М.

Идемпотентная матрица — матрица, отвечающая условию Р 2 = Р.

Инволютивная матрица — матрица, отвечающая условию I 2 = Е.

Симметрическая матрица — матрица, отвечающая условию А т = А.

Кососимметрическая матрица — матрица, отвечающая условию А т = -А.

Ортогональная матрица — матрица, отвечающая условию А т = А- 1 .

Комплексно-сопряженная матрица — матрица А , полученная из исходной матрицы А заменой ее элементов на комплексно-сопряженные.

Эрмитова матрица — матрица А, удовлетворяющая условию А = А .

Собственный вектор квадратной матрицы А — любой вектор х е V n , х не равно 0, удовлетворяющий уравнению Ах = gx, где g — некоторое число, называемое собственным значением матрицы А.

Характеристический многочлен матрицы — определитель разности этой матрицы и единичной матрицы, умноженный на переменную многочлена — |А - g Е|.

Собственные значения матрицы — корни ее характеристического многочлена.

Норма — обобщенное понятие абсолютной величины числа. Норма трехмерного вектора ||х|| — его длина. Норма матрицы — значение sup(||Ax||/||x||). I-норма матрицы А — число

Матричная форма записи системы линейных уравнений — выражение А-Х = В, где А — матрица коэффициентов системы, X — вектор неизвестных, и В — вектор свободных членов. Один из способов решения такой системы очевиден — X = А -1 В, где А- 1 — обратная матрица.

Функции линейной алгебры

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

  • Cross [vl,v2, v3,...] — векторное произведение (может задаваться в виде v1*v2*v3*...);
  • Det [m] — возвращает детерминант (определитель) квадратной матрицы m;
  • DiagonalMatrix [list] — возвращает диагональную матрицу с главной диагональю, сформированной из элементов списка list, и нулевыми остальными элементами матрицы;
  • Dot [a, b, с] — возвращает произведения векторов, матриц и тензоров. Операцию произведения можно задавать также в виде а. b. с;
  • Eigensystem[m] — возвращает список {values, vectors} собственных значений и собственных векторов квадратной матрицы т;
  • Eigenvalues [m] — возвращает список собственных значений квадратной матрицы m;
  • Eigenvectors [m] — возвращает список собственных векторов квадратной матрицы m;
  • IdentityMatrix [n] — возвращает единичную матрицу размером пхп (у нее диагональные элементы имеют значения 1, остальные 0);
  • Inverse [m] — возвращает обратную матрицу для квадратной матрицы т, то есть матрицу m- 1 , которая, будучи умноженной на исходную матрицу, дает единичную матрицу;
  • LinearSolve [m, b] — возвращает вектор х, представляющий собой решение матричного уравнения m. x==b, где m — матрица коэффициентов левой части системы линейных уравнений, х — вектор неизвестных и b — вектор свободных членов в правой части системы;
  • Tr [list] — возвращает след матрицы или тензора (эта функция есть только у Mathematica 4);
  • Transpose [m] — возвращает транспонированную матрицу, у которой столбцы и строки меняются местами в сравнении -с исходной матрицей m;
  • RowReduce [m] — производит гауссовское исключение переменных, возвращая упрощенную форму матрицы m, полученную путем линейного комбинирования строк.

Следующие примеры иллюстрируют применение основных из этих функций.


Ввод (In)

Вывод (Out)

A: =IdentityMatrix [3]

А

{{1,

0,

0},

{0, 1, 0}, {0, 0, 1}}

MatrixExp [A]

{{E,

0,

0},

{0, E, 0}, {0, 0, E}}

MatrixQ [A]

True

MatrixPower [MatrixExp [A] , -1 . 5]

{{0. {0,

22313, 0, 0}, {0, 0.22313, 0), 0, 0.22313}}

А+{{1,2,3},{4,5,6},{7,8,9}}

{{2,

2,

3},

{4, 6, 6}, {7, 8, 10}}

m:={{1,2},{3,7}}

Inverse [m]

{{7,

-2}

, (

-3, 1}}

MatrixQ [m]

True

RowReduce [m]

{{1,

0},

{0

, 1}}

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

Рис. 3.11. Вычисление детерминанта, собственных значений и векторов матрицы

Приведем еще несколько примеров:


m={{1,2},{3,7}}

{{1, 2}, {3, 7}}

Transpose[m]

{{1, 3), {2, 7}}

m//MatrixForm

1 2

3 7

Transpose[m]//MatrixForm

Inverse[m]//MatrixForm

7 -2

-3 1

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

Решение систем линейных уравнений

Приведем также примеры на решение систем линейных уравнений матричными методами. В первом из них решение выполняется в символьном виде на основании формулы X = А -1 В, где А — матрица коэффициентов системы линейных уравнений, В — вектор свободных членов. Для перемножения используется функция Dot, а для инвертирования матрицы — функция Inverse:


A:={{a,b},{c,d}}

B:={e,f}

X:=Dot[Inverse[A],B]

X

{-de/(bc+ad) -bf/(bc+ad)- ce/(bc+ad) -af/(bc+ad)}

Во втором примере для решения системы линейных уравнений используется функция LinearSolve:


LinearSolve[{{l,2},{3,4}},{7,9}]

{-5, 6}

Нередко, например в электротехнических расчетах, встречается необходимость решения систем линейных уравнений с комплексными элементами. Все описанные выше функции обеспечивают работу с комплексными числами. Следующий пример иллюстрирует решение системы линейных уравнений с комплексными данными:


А={ U+2I,2+3I},{3+4I,4+5I}}

{{1+21, 2 + 31}, {3 + 41, 4+ 51}}

В={21,3}

{21,3} X=LinearSolve[А,В]

{1/4-41, 11I/4}

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

 

gl3-11.jpg

Изображение: 

7. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Использовать основные классы данных системы Mathematica.
  • Выполнять арифметические вычисления.
  • Применять встроенные и пользовательские функции.
  • Получать данные об объектах.
  • Осуществлять подстановки.
  • Работать со списками.
  • Создавать массивы, векторы и матрицы.
  • Пользоваться функциями линейной алгебры

 

Урок 4. Операции математического анализа

Урок 4. Операции математического анализа

1. Операции математического анализа

 

Операции математического анализа

  • Вычисление сумм
  • Вычисление произведений
  • Вычисление производных
  • Вычисление интегралов
  • Вычисление пределов функций
  • Решение уравнений и систем уравнений
  • Решение дифференциальных уравнений
  • Поиск максимального и минимального чисел в списке
  • Поиск максимума и минимума функции
  • Решение задач линейного программирования
  • Преобразования Лапласа
  • Z-преобразования

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

 

2. Вычисление сумм

 

Вычисление сумм

 

Вычисление сумм в аналитическом виде

В числе операций математического анализа прежде всего надо отметить суммы


Сумма от i=min до imax по fi

В этих операциях индекс i принимает целочисленные значения от минимального (начального) imin до максимального (конечного) imax с шагом, равным +1.

Суммы и произведения легко вычисляются численными математическими системами, такие вычисления просто описываются на всех языках программирования. Однако важным достоинством систем символьной математики, включая Ма-thematica, является вычисление сумм и произведений в аналитическом виде (если это возможно) и при большом числе членов — вплоть до стремящегося к бесконечности.

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

  • Sum [ f, {i, imax} ] — вычисляет сумму значений f при изменении индекса i от 1 до imax с шагом +1;
  • Sum[f, {i, imin, imax}]—вычисляет сумму значений f при изменении индекса i от минимального значения i=imin до максимального i=imax с шагом +1;
  • Sum[f, {i, imin, imax, di}]— вычисляет сумму значений f при изменении управляющей переменной вещественного типа от минимального значения i=imin до максимального i=imax с шагом di;
  • Sum[f, {i, imin, imax}, {j, jmin, jmax},...] — вычисляет многократную сумму значений f при изменении индексов i от imin до imax с шагом +1, j от jmin до jmax с шагом +1 и т. д. (число индексов не ограничено).

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


Sum[i^2,{i,10}]

385

Sum[i*2,{i,l,10}]

385

Sum[i^2, {1,1,2,0.25}]

11.875

Sum[i*j, {i,1,10},{j, 2, 5}]

770

В последнем примере использована стандартная форма вывода — при ней функция суммирования представляется в виде оператора суммирования.

Обычно в математических системах недопустима перестановка imin и imax, хотя в математике известно школьное правило — от перестановки слагаемых сумма не изменяется. Рискнем проверить это:


Sum[i,{i, 1,100}]

5050

Sum[i, {1,100,1}]

0

Sum[i, {1,100, 1,-1}]

5050

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

Не применяйте установки параметров, противоречащие синтаксису записи той или иной функции — в частности, Sum. Это чревато возникновением серьезных ошибок.

Приведем еще ряд примеров выполнения операции суммирования:


Sum[ xn/n! , {n, 0, 8}]

1+X+X2/2 X3/6 X4/24 X5/120 X6/720 X7/5040 X8/40320

Sum[xn/n! , {n, 1, 9, 2}]

X+X3/3 X5/120 X7/5040 X9/362880


Sum[xi yi , {i, 1, 4},{j, 1, i}]

xy+ x2 у + x3 у + x4 у + x2:/2 + x3 у2 + x4y2 + x3 у3 + x4 у3 + x4y4

Sum[1/n*n , {n, 1, бесконечность}]

л2/6

Sum[i4 {i, 1, n}]

1/30n(1-n)(1+2n) (-l + 3n+3n2)

1/3(3 - 3 EulerGamma + 2 n + n3) - PolyGamma[0, 2 + n]

Из этих примеров видно, что Mathematica 3/4 обеспечивает возможность символьного вычисления сумм, в том числе с бесконечным пределом суммирования. Вычисляются даже суммы, выраженные через специальные математические функции (см. последний пример). При этом для вычисления сумм в символьном виде, в отличие от предшествующих версий Mathematica, уже не требуется загрузка специального пакета для расширенных (символьных) операций с суммами.

Вычисление сумм в численном виде

Для вычисления сумм в численном виде используются следующие функции:

  • NSum[f, {i, imin, imax }]— возвращает численное значение суммы f [ i ] при i, изменяющемся от imin до imax с шагом +1;
  • NSumff, {i, imin, imax, di }]— возвращает сумму численных значений функции f [i] при i, изменяющемся от imin до imax с шагом di;
  • NSum[f, {i, imin, imax}, {j, jmin, j max },...]— выполняет многомерное суммирование. Функция NSum[... ] эквивалентна выражению N[Sum[...] ].

Особенностью этой функции является возможность использования ряда опций, управляющих вычислительным процессом. Одной из них является NSumTerms, задающая число членов, которые явно должны быть включены в сумму перед экстраполяцией. Вы можете просмотреть список опций, используя команду Options [NSum] . 

Пример применения функции NSum представлен ниже:


NSum[1/i3, {i, 1, бесконечность}]

1.20206

Пример точного вычисления суммы (для сравнения) с помощью функции Sum:


truesum = Sum [1+k/ 2k k/ 3k{k, 1, 50}

1818632874295681087853745424762603034467 / 808281277464764060643139600456536293376

N[%]

2.25

Пример вычисления той же суммы с помощью функции NSum с опциями:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit,

NSumTerms -> 2 , NSumExtraTerms -> 4 ] - truesum

0.0530365

При следующем наборе опций результат еще лучше:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit, WorkingPrecision -> 30 , NSumTerms -> 2 ,

NSumExtraTerms -> 10, WynnDegree -> 4] - truesum

0.x10-26

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

 

3. Вычисление произведений

 

Вычисление произведений

 

Вычисление произведений в аналитическом виде

Операции вычисления произведений

Произведение от i=imin до i=imax по fi представлены следующими функциями:

  • Product [f, {i, imax}] — возвращает произведения значений f [i] для значений i, изменяющихся от 1 до imax;
  • Product [f, {i, imin, imax}]—возвращает произведение значений f [ i ] при изменении i от imin до imax с шагом +1;
  • Product[f, {i, imin, imax, di}] — возвращает произведение f [ i ] при i, меняющемся от значения imin до значения imax с шагом di;
  • Product [f, {i, imin, imax}, {j, jmin, jmax},...] — вычисляет многократное произведение (произведение по нескольким переменным).

Примеры использования функций вычисления произведения.


Ввод (In)

Вывод (Out)

Product [i,{i ,10}]

3628800

NProduct [k ^ 2,{k, 1,5}] 14400.
NProduct[i ^ 2, {1,1,2,0. 2}] 93.6405
Product [Logfi], {±,2,5,0.5}] 4.23201 Log[2]

Следующий пример иллюстрирует вычисление произведения в символьном виде:


Произведение (x+i2) , где i=1...5

(1+х) (4 + х) (9 + х) (16 + х) (25 + х)

Об опасности перестановки сомножителей свидетельствуют следующие примеры: Product [i, i,l, 10] 3628800


Product [i,i, 10,1]

1

Product[i,i,10,l,-l]

3628800

Как и в случае вычисления суммы, средний пример явно ошибочен. Он просто недопустим с точки зрения синтаксиса данной функции.

Вычисление произведений в численном виде

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

  • NProduct [f , {i, imax }]— возвращает численное значение произведения значений f [i] для значений i, изменяющихся от 1 до imax;
  • NProduct [f, {i, imin, imax}] — возвращает численное значение произведения значений f [i] при изменении i от imin до imax с шагом +1;
  • NProduct [f, {i, imin, imax, di }]— возвращает численное значение произведения значений f [i] при i, меняющемся от значения imin до значения imax с шагом di;
  • NProduct[f, {i, imin, imax}, {j, jmin, j max },...]— вычисляет численное значение многократного произведения (произведение по нескольким переменным).

Эти функции применяются с теми же опциями, которые используются для функции Nsum, что позволяет управлять вычислительным процессом. Ознакомиться с опциями можно, выполнив команду Options [NProduct] . Ниже представлен пример на использование функции Nproduct. Сначала вычисляем точное значение произведения для использования в качестве эталона:


trueproduct = Product [ j/(1+j), { j , 1 , 50 } ]

1/ 51

Пример вычисления того же произведения с помощью функции NProduct — погрешность велика:


NProduct [ j/(1+j) , {j, I, 50},

Method -> SequenceLimit, NProductFactors -> 2 ,

NProductExtraFactors -> 4] - trueproduct

0.188235

В следующем примере опции подобраны лучше — погрешность мала:


NProduct[j/(1+j) , {j, 1, 50},

Method-» SequenceLimit, NProductFactors -> 50,

NProductExtraFactors ->4] - trueproduct

-1.38778 x 10-17

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

 

4. Вычисление производных

 

Вычисление производных

 

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

  • D [ f, х ] — возвращает частную производную функции f по переменной х;
  • D [f, {х, n}]— возвращает частную производную n-го порядка по х;
  • D[f, xl, х2,...] — возвращает смешанную производную;
  • Dt[f, х] — возвращает обобщенную производную функции f по переменной х;
  • Dt [ f ] — возвращает полный дифференциал f.

Название функции из одной буквы — это явно исключение из правил. Оно выбрано осознанно, в силу массовости этой операции.

Для функции D существует опция NonConstants, которая позволяет задать список объектов, находящихся в неявной зависимости от переменных дифференцирования. По умолчанию этот список пустой. Для функции Dt имеется опция Constants, которая, наоборот, указывает символы, которые являются константами (по умолчанию их список также пуст). На практике применять данные опции приходится редко.

Существует еще одна функция, Derivative [nl, n2,...] [f ], — основная (общая) форма представления функции, полученной в результате nl-кратного дифференцирования функции f по первому аргументу, п2-кратного — по второму аргументу и т. д.

К примеру, Derivative [2] [х*у] возвращает (ху)", a Derivative [2, 3] [х*у] — соответственно, (ху) (2.3)

Следующие примеры показывают применение функции D для вычисления производной в аналитическом виде:

  • Производная тригонометрической функции:

    D[x*Sin[x],x]

xCos[x] + Sin[x]

  • Производная экспоненциальной функции:

    D[Exp[x/b],x]

    ex/b/b

  • Производная логарифмической функции:

    D[Log[3*x/4],x]

    1/x

  • Производная степенного многочлена:

    D[а*х^2+b*х+с,х]

    b+ 2ах

  • Пятая производная от х n :

    D[х^n,{х,5}]

    (-4 + n) (-3+n) (-2+n) (-1+n)nх -5+n

  • Производная функции двух переменных:

    D[(x^m)*y^n,x,y]

    mnx -1+m y -1+n

  • Производная функции Бесселя:

    D[BesselJ[2,x] ,x]

    1/2 (BesselJ[l, х] -BesselJ[3, x] )

  • Производная ортогонального полинома Чебышева:

    D[ChebyshevT[4,x],x]

    -16x + 32x3

Следующие примеры иллюстрируют вычисление производных от первого до третьего порядка включительно для функции f [ х ], заданной пользователем.


Ввод (In) Вывод (Out)
f[x] :=х/(1+х ^ 2)  
D[f[x],{x,l}] -2x 2 /(1+x 2 ) 2 +1/(1+x 2 )
D[%,x] -8x 3 /(1+x 2 ) 3 +6x/(1+x 2 ) 2
D[f[x],{x,2}] -8x 3 /(1+x 2 ) 3 +6x/(1+x 2 ) 2
D[D[D[f[x],x],x],x] -48x 4 /(1+x 2 ) 4 +48x 2 /(1+x 2 ) 3-6/(1+x 2 ) 2
D[f[x],{x,3}] -48x 4 /(1+x 2 ) 4 +48x 2 /(1+x 2 ) 3-6/(1+x 2 ) 2

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

На рис. 4.1 показано построение графика функции Sin [x] /х, заданной как функция пользователя, и ее производной с помощью функции Plot.

Рис. 4.1. График функции Sin[x]/x и ее производной

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

Использование функции Dt демонстрируют примеры, приведенные ниже.


Ввод (In) Вывод (Out)
Dt[x*n,x] x n (n/x +Dt[n, x] Log[x] )
Dt[x*Sin[x] ,x] xCos[x] + Sin[x]
Dt[Exp[x/b],x] e x/b /b(1/b-xDt[b, x]/b 2 )
Dt[a*x ^ 2+b*x+c,x] b+ 2 ax + x 2 Dt[a, x] + xDt[b, x] + Dt[c, x]
Dt[x*n,{x,2}] x n (n/x+Dt[n, x] Log[x] ) + x n (-n/x 2 2Dt[n, x] +Dt[n, {x/2}]Log[x])
Dt[Log[3*x/4],x] 1/x
Dt[BesselJ[2,x] ,x] 1/2(BesselJ[l, x] -BesselJ[3, x] )
Dt[ChebyshevT[4,x] ,x] -16x + 32x 3

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

 

gl4-1.jpg

Изображение: 

5. Вычисление интегралов

 

Вычисление интегралов

 

Вычисление интегралов в символьном виде

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


f(x)dx = F(x) + C,

где С — постоянная интегрирования. А вычисление определенного интеграла с пределами — верхним b и нижним а — производится по формуле


f(X)dX = F(b)-F(a)

Заметим, что определенный интеграл может быть представлен как аналитическим, так « численным значением. Для вычисления численных значений определенных интегралов разработан ряд приближенных методов — от простых (прямоугольников и трапеций) до сложных, автоматически адаптирующихся к характеру изменения подынтегральной функции f(x).

Для интегрирования в системе Mathematica используются следующие функции:

  • Integrate [f, x] — возвращает первообразную (неопределенный интеграл) подынтегральной функции f по переменной х;
  • Integrate [f, {x, xmin, xmax}] — возвращает значение определенного интеграла с пределами от x min до x max ;
  • Integrate [f, {x, xmin, xmax}, {у, ymin, ymax},...] —возвращает значение кратного интеграла с пределами от x min до x max по переменной х, от y min до y max по переменной у и т. д. (кратность реально не ограничена).

Обычно функция Integrate применяется в простейшей форме, но она имеет три характерные опции:


Options[Integrate]

{Assumptions -> {}, GenerateConditions->Automatic,

PrincipalValue > False)

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

Особый интерес, естественно, вызывает применение функции Integrate для вычисления заданных пользователем неопределенных интегралов в символьном виде. Это иллюстрируют примеры на вычисление неопределенных интегралов с алгебраическими подынтегральными функциями, представленные на рис. 4.2.

Здесь входная ячейка в первом примере представлена в формате ввода (Input-Form), а в остальных примерах — в стандартном формате (StandardForm). При записи интегралов последний предпочтителен ввиду большей наглядности, поскольку при этом знаки интеграла имеют естественный математический вид. Обратите внимание на проверку операции интегрирования с помощью дифференцирования в двух последних примерах.

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

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

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

Рис. 4.2. Примеры вычисления неопределенных интегралов (начало)

Рис. 4.3. Примеры вычисления неопределенных интегралов (продолжение)

Рис. 4.4. Примеры вычисления неопределенных интегралов (окончание)

 

Вычисление определенных интегралов

Следующая серия примеров (рис. 4.5) иллюстрирует вычисление определенных интегралов в символьном виде.

Рис. 4.5. Примеры вычисления определенных интегралов обычного вида

Приведенные на рис. 4.6 примеры показывают вычисление определенных интегралов с пределами-функциями.

Рис. 4.6. Примеры вычисления определенных интегралов с пределами-функциями

Системы Mathematica имеют самые обширные возможности вычисления интегралов. Ядро системы вобрало в себя формулы интегрирования из всех известных справочников и даже древних рукописей.

Вычисление кратных интегралов

Mathematica способна вычислять даже кратные интегралы с фиксированными и переменными верхним или нижним пределами. Кратный, например двойной, интеграл с фиксированными пределами имеет вид:


f(x,y)dxdy

На рис. 4.7 представлено вычисление нескольких двойных определенных интегралов.

Рис. 4.7. Примеры вычисления двойных определенных интегралов

Следующий пример при двух форматах ввода показывает вычисление двойного неопределенного интеграла двойным применением функции Integrate:


Integrate!Integrate[x^3+y^3,x],y]

x4y/4+y4x/4

( (x3 + y3) dx) dy

x4y/4+y4x/4

Другая серия примеров (рис. 4.8) показывает, как вычисляются двойные и тройные интегралы, пределы которых сами по себе являются функциями.

Рис. 4.8. Примеры вычисления кратных интегралов с пределами-функциями

Хотя вычисление двойного интеграла предусмотрено в синтаксисе функции Integrate, это не всегда дает результат. Как правило, вычисление кратных интегралов лучше производить, используя последовательное вычисление однократных интегралов, вложенных друг в друга. Это и показывают приведенные примеры.

Особые случаи вычисления интегралов

При вычислении сложных интегралов, например не имеющих представления через элементарные функции, система Mathematica 2 обращалась к своим пакетам расширений в попытке найти решение, которое может быть представлено через специальные математические функции. Mathematica 3/4 уже не акцентирует внимание пользователя на своих проблемах и, как правило, выдает результат интегрирования. Однако порой он может иметь довольно необычный вид (рис. 4.9).

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

Рис. 4.9. Примеры вычисления особых интегралов

В заключение надо отметить, что результаты символьного интегрирования в системах Mathematica 3 и Mathematica 4 нередко различаются. Более того, они могут различаться и в пределах одной версии Mathematica, так как ядро системы постоянно совершенствуется. Обычно более поздние версии дают более точные результаты вычислений особых интегралов, хотя подчас они и выглядят более сложными и даже необычными. Это говорит о необходимости вдумчиво относиться к получаемым результатам.

Численное интегрирование

Для вычисления численных значений определенных интегралов используется функция NIntegrate [f, {x, xmin, xmax}], которая возвращает численное приближение интеграла от функции f по переменной х в пределах от x min до x max .

Она имеет ряд опций, которые можно получить, исполнив команду Options [Nlnteg-rate]. Описание этих опций дано в приложении. Приведем примеры численного интегрирования.

Ввод (In)

Вывод (Out)

NIntegrate [Bessel J [l,x] ^ 3,{x,0,l}]

0.0243409

N[Sqrt [Pi] *Gamma [1/6] / (6*Gamma [2/3] ) ] 1.21433
NIntegrate [1/Sqrt [1-х^6] , {х , 0 , 1 } ] 1.21433
NIntegrate [E ^ -x*Cos [х] , {х, 0 , Infinity} ] 0.5
NIntegrate [х*у, {х,0,1} , {у,х,х ^ 2} , {z,x*y,x ^ 2*y ^ 3}] 0.010582
NIntegrate [l/(x*y) , {х,4,4 .4} , {у, 2, 2. 6}] 0.025006
NIntegrate [Sqrt[2*x+l] ,{x,0,l}] 1.39872

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

 

gl4-2.jpg

Изображение: 

gl4-3.jpg

Изображение: 

gl4-4.jpg

Изображение: 

gl4-5.jpg

Изображение: 

gl4-6.jpg

Изображение: 

gl4-7.jpg

Изображение: 

gl4-8.jpg

Изображение: 

gl4-9.jpg

Изображение: 

6. Вычисление пределов функций

 

Вычисление пределов функций

Многие функции при приближении аргумента к некоторому значению или к некоторой области значений стремятся к определенному пределу. Так, функция sin(x)/x при х, стремящемся к нулю (обозначим это как х—> 0), дает предел 1 в виде устранимой неопределенности 0/0.

Численные математические системы, равно как и большинство программ на обычных языках программирования, не воспринимают выражение 0/0 —> 1 как объективную реальность. Их защитный механизм настроен на примитивное правило — ничего нельзя делить на 0. Следовательно, вычисление sin(x)/x при х = 0 будет сопровождаться выдачей ошибки типа «Деление на 0». Конечно, в данном конкретном случае можно предусмотреть особый результат — выдать 1 при х = 0. Но это частный случай. В целом же подобные системы «не понимают» понятия предела.

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

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

Рис. 4.10. Примеры вычисления пределов

При работе с функцией Limit используются следующие опции:

  • Analytic — указывает, следует ли неопознанные функции интерпретировать как аналитические (значение по умолчанию — Automatic);
  • Direction — указывает направление, в котором происходит приближение к пределу. Опция используется в виде Direction -> -1 (или +1), по умолчанию выбор остается за системой (Automatic). Значение +1 означает предел слева, а -1 — справа (казалось бы, должно быть наоборот, но задано именно так).

Применение данных опций поясняют примеры, показанные на рис. 4.11.

 

Рис. 4.11. Примеры вычисления пределов с применением опций

 

gl4-10.jpg

Изображение: 

gl4-11.jpg

Изображение: 

7. Уравнения и системы уравнений

 

Уравнения и системы уравнений

 

Решение уравнений

Многие математические задачи сводятся к решению в общем случае нелинейных уравнений вида f(x) = 0 или f(x) = expr.

В системе Mathematica они обозначаются как eqns (от слова equations — уравнения). Разумеется, могут решаться и системы, состоящие из ряда таких уравнений.

Для решения уравнений (как одиночных, так и систем) в численном и символьном виде Mathematica имеет функцию Solve:

  • Solve [eqns, vars] — предпринимает попытку решить уравнение или систему уравнений eqns относительно переменных vars;
  • Solve [eqns, vars, elims] — пытается решать уравнения eqns по переменным vars, исключая переменные elims.

Входные параметры этой функции могут быть представлены списками или записаны выражениями через объединительный знак«&&». В eqns в качестве знака равенства используется знак «= =». Примеры применения функции Solve представлены на рис. 4.12.

Рис. 4.12. Примеры решения уравнений

Обратите внимание на то, что в определенных ситуациях система подсказывает тонкости решения, выдавая предупреждающие сообщения. Если такие ситуации не являются ошибками, препятствующими решению, то полученное решение выводится в ячейку вывода.

Решение систем нелинейных уравнений в символьном виде

Приведенные на рис. 4.13 примеры показывают решение систем нелинейных уравнений с помощью функции Solve.

Достаточно характерен пример с применением функции N. Если убрать в нем функцию N, то будет получен чрезвычайно громоздкий, хотя и точный результат (проверьте это сами, поскольку размеры результата делают нецелесообразным его приведение в книге). Функция N осуществляет выполнение всех промежуточных вычислений, благодаря чему результат получается вполне обозримым и представленным в комплексных числах.

В последнем примере рис. 4.13 получен набор из пяти пар корней, определенных через функцию Root. Эта функция, в свою очередь, означает вычисление корней полиномиального уравнения пятой степени. Данный пример, как и ранее приводимые решения кубического уравнения, является наглядной иллюстрацией того, что простота нелинейных уравнений порой оказывается весьма обманчивой, а их решение порой приводит к весьма громоздким и сложным результатам. Тем не менее, возможность решения отдельных нелинейных уравнений и их систем в символьном виде трудно переоценить. К сожалению, далеко не все уравнения имеют такие решения — многие можно решать только в численном виде.

Рис. 4.13. Примеры решения систем нелинейных уравнений

Не следует полагать, что Mathematica всегда выдает верное решение систем нелинейных уравнений. На самом деле решение иногда бывает ошибочным. Поэтому в большинстве случаев стоит оформлять решение таким образом, чтобы обеспечить его проверку. Для этого рекомендуется отдельно задать систему уравнений и результат решения. Тогда проверка легко осуществляется с помощью подстановки. Два примера решения систем уравнений с проверкой решений показаны на рис. 4.14.

В первом примере решение кажется очевидным (равенства выполняются, например, при х=2 и у=3). Однако здесь Mathematica дает сразу три пары решений, и все они оказываются верны, поскольку после подстановки проверка всех равенств возвращает True.

А вот во втором примере проверка дала не совсем обычный результат, что связано с наличием в решении неопределенной переменной а. В таких случаях стоит попробовать упростить решение с помощью функции Simplify, что и показано на рис. 4.14.

Рис. 4.14. Примеры решения уравнений с проверкой

 

Опции функции Solve

С функцией Solve можно использовать ряд опций. Их можно вывести командой Options [Solve]. Ниже описано их назначение:

  • InverseFunctions — указывает, следует ли использовать обратные функции;
  • MakeRules — указывает, должен ли результат быть представлен как объект AlgebraicRulesData;
  • Method — устанавливает алгоритм, используемый для вычисления результата (возможны методы 1, 2 и 3);
  • Mode — задает характер решения уравнения (возможны Generic, Modular и Rational);
  • Sort — устанавливает, нужна ли сортировка результатов;
  • Verif ySolutions — устанавливает, следует ли проводить проверку полученных решений и удаление посторонних решений;
  • WorkingPrecision — устанавливает число цифр промежуточных вычислений (по умолчанию Infinity).

На рис. 4.15 приведены примеры применения функции Solve с опцией Inverse-Functions.

Обратите внимание на то, что последняя система уравнений при отсутствии опции InverseFunctions решается с предупреждением. Она вообще не решается, если эта опция задана как False, и гладко решается при InverseFunctions -> True.

Рис. 4.15. Примеры решения уравнений с опцией InverseFunction

То, насколько может влиять на решение опция Method, наглядно показывают примеры, представленные на рис. 4.16.

Рис. 4.16. Примеры решения уравнений разными методами

Множество примеров решения систем нелинейных уравнений в символьном виде можно найти в справочной системе Mathematica.

Численное решение уравнений

Многие нелинейные уравнения и системы нелинейных уравнений в принципе не имеют аналитических решений. Однако их решение вполне возможно численными методами. Для численного решения систем нелинейных уравнений используется функция NSolve:

  • NSolve [eqns, vars] — пытается численно решить одно уравнение или систему уравнений eqns относительно переменных vars;
  • NSolve [eqns, vars, elims] — пытается численно решить уравнения eqns относительно vars, исключая переменные elims.

С этой функцией используется единственная опция WorkingPrecision, задающая число верных цифр результата — по умолчанию 16. На рис. 4.17 представлены примеры использования функции NSolve для численного решения уравнений.

Риc. 4.17. Примеры численного решения уравнений

Результаты решения с помощью функции NSolve также рекомендуется проверять с помощью подстановки, например, так:


е=2*х^2 + 5*х- 15 == х^3

-15 + 5х + 2х2 ==х3

r=NSolve[e,x]

{{х->-2.4734}, {х->2.2367-1.03038i},

{х->2.2367 + 1.03038i}}

е/.r

{True, True, True}

Нетрудно заметить, что в данном случае решение верно.

Поиск корней уравнений

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

Roots[lhs==rhs, var]

На рис. 4.18 представлены примеры применения функции Roots.

Рис. 4.18. Примеры использования функции Roots

Формат выдачи результатов для функции Roots отличается от такового для функции Solve. Поэтому проверку решения подстановкой надо выполнять как в следующем примере:


e = x^2+3x==2

Зх + х2 == 2

N[Roots[e, x]]

х == -3.56155 | | х == 0.561553

r= {ToRules[%]}

{{х^-3.56155}, {х^ 0.561553}}

е/. r

{True, True}

Для преобразования результата вычислений в список решений (подобный решениям, получаемым с помощью функции Solve) здесь использована функция ToRules.

При затруднениях в решении уравнений с помощью функции Roots можно использовать следующие опции:


Options[Roots]

{Cubics -> True, Eliminate -> False, EquatedTo-> Null,

Modulus -> 0, Multiplicity->1, Quar tics -> True, Using -> True}

Ниже они описаны подробно:

  • Cubics — указывает, следует ли искать явные решения для неприводимых кубических уравнений;
  • EquatedTo — задает выражение для замещения переменной в решении;
  • Modulus — задает промежуточную факторизацию полинома;
  • Multiplicity— устанавливает кратность каждого из корней в конечном результате;
  • Quartics — задает точное решение квадратного уравнения и полинома четвертой степени;
  • Using — указывает какие-либо дополнительные уравнения, которые следует использовать для решения уравнений.

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

Дополнительные функции для решения уравнений

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

  • Auxiliary [v] — применяется модулем Solve для указания того, что переменная v должна использоваться функцией Roots для результирующих решений, но соответствующие значения v не должны быть включены в окончательный ответ;
  • Eliminate [eqns, vars] — исключает переменные vars из системы уравнений eqns;
  • FindRoot [Ihs == rhs, {x, x0}] — ищет численное решение уравнения Ihs == rhs, начиная с х = x0;
  • MainSolve [eqns] — основная функция для преобразования системы уравнений. Ее вызывают Solve и Eliminate. Уравнения должны быть представлены в форме Ihs == rhs. Они могут объединяться с помощью && и | |. MainSolve возвращает False, если не существует решения уравнений, и возвращает True, если все значения переменных являются решениями. MainSolve перестраивает уравнения, применяя определенные директивы;
  • MainSolve [eqns, vars, elim, rest] — пытается перестраивать уравнения eqns так, чтобы найти решения для переменных vars и исключить переменные elim. Список rest может включаться для указания порядка исключения любых остальных переменных;
  • NRoots [lhs==rhs, var] — возвращает список численных приближений корней полиномиального уравнения;
  • Residue [ехрr, {х, х0 } ] — ищет вычет ехрг в точке х = х0;
  • SolveAlways [eqns, vars] — возвращает значения параметров, которые превращают уравнения eqns в тождества для всех значений переменных vars.

Примеры использования некоторых из этих функций показаны на рис. 4.19.

Рис. 4.19. Примеры применения дополнительных функций для решения уравнений

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

Графическая иллюстрация и выбор метода решения уравнений

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

На самом деле порой даже простые уравнения могут не иметь решения. В сложных случаях очень полезна графическая визуализация решения. В качестве примера на рис. 4.20 показана визуализация вычисления корней квадратного уравнения. В данном случае график функции явно указывает на существование двух действительных корней при х, близких к 0.2 и 2.3. Функция Nsolve без труда находит оба корня.

Рис. 4.20. Визуализация решения квадратного уравнения для случая двух действительных корней

А вот на рис. 4.21 показан случай, когда из-за изменения последнего члена квадратичной функции ее график уже не пересекает ось х вообще. Это говорит о том, что решения в виде действительных корней нет. И в самом деле, NSolve находит корни как комплексно-сопряженные числа. Действительная часть найденных корней дает координату х для впадины кривой — параболы.

Если требуется решение равенства f1(х) = f 2 (x), то для графической визуализации решения можно построить графики функций f1(х) и f 2 (лг) — наличие точек их пересечения будет означать существование действительных корней. Этот случай иллюстрирует рис. 4.22. В данном случае проблем с решением нет, поскольку, по существу, решается квадратное уравнение.

Рис. 4.21. Визуализация решения квадратного уравнения для случая двух комплексных корней

Рис. 4.22. Пример визуализации решения уравнения вида f(x) = 5х + 1

Но вот на рис. 4.23 показан случай решения уравнения f(x) = ехр(х/2). Графики функций ясно показывают, что парабола пересекается экспонентой в двух точках. Однако функция NSolve отказывается решать такое уравнение и выдает сообщение о том, что оно является трансцендентным.

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

Рис. 4.23. Пример решения уравнения вида f(x) = ехр(х/2)

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

Получение сразу нескольких корней

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

Пусть требуется в интервале изменения х от 0 до 20 найти все решения уравнения


х sin(x) + х/2 - 1 = 0

График функции, представляющей левую часть уравнения, показан на рис. 4.24. Хорошо видно, что он пересекает ось х семь раз, то есть имеет в интересующем нас диапазоне семь корней.

Рис. 4.24. График функции х sin(x) + х/2 - 1 и пример вычисления всех ее корней в интервале изменения х от 0 до 20

Колебательная составляющая функции обусловлена входящей в нее функцией sin(x), которая имеет нули в точках 0, n, 2n, Зn... Однако, как видно из рис. 4.24, эти значения лишь приближенные, ввиду влияния других членов уравнения.

Ключевая идея получения всех корней уравнения заключается в поиске нужных решений с помощью функции FindRoot, которой последовательно подставляются различные начальные приближения. Однако вместо уже испытанного приема — поиска корней поодиночке — можно воспользоваться «таблицей» решений, используя функцию Table. Решение, приведенное под графиком функции на рис. 4.24, наглядно иллюстрирует возможности этого приема — найдены (или, вернее, уточнены) все семь корней исходного уравнения.

Получение неизвестных в явном виде

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


{х,у,z,...}/.

Список переменных в этом выражении должен однозначно соответствовать списку неизвестных системы уравнений. Покажем этот прием в действии. Ниже приведено решение системы из трех нелинейных уравнений:


FindRoot[{x-2==9,y^2=16,x+y+z==10},{x,l.},{y,l.},{z,l.}]

(Х-> 3., у-> 4., z->3.} {x,y,z}

{X, у, 2}

Обратите внимание на то, что вывод списка {х, у, z } не дает полученных значений неизвестных. Это связано с тем, что переменные в блоке решения имеют ло-к(1лъный характер и за пределами блока их значения (в том числе неопределенные) сохранятся такими, какими они были до применения в блоке решения.

Теперь зададим решение в ином виде:


{x,y,z}/.FindRoot[{x*2==9, уА2==1б, x+y+z==10}, {x,l.}, {у,1.}, {z,l.}]

{3., 4., 3.}

Как видите, на сей раз решение получено в виде списка с числами — явными значениями неизвестных. Можно обозначить их как а, Ь и с, получить список {а, b, с} и даже использовать их отдельно:


{а,b,с}=%

(З.,4.,3.)

а,b,с

{З.,4.,3.}

а

3.

b

4.

с

3.

Теперь можно проверить решение данной системы:


{а^2, b^2,а+b+с}

{9., 16., 10.}

Полученный вектор правых частей системы совпадает с заданным, что свидетельствует о правильности решения. Разумеется, вместо нового списка { а , b , с } для вектора решения можно было использовать и вектор { х, у, z } .

 

gl4-12.jpg

Изображение: 

gl4-13.jpg

Изображение: 

gl4-14.jpg

Изображение: 

gl4-15.jpg

Изображение: 

gl4-16.jpg

Изображение: 

gl4-17.jpg

Изображение: 

gl4-18.jpg

Изображение: 

gl4-19.jpg

Изображение: 

gl4-20.jpg

Изображение: 

gl4-21.jpg

Изображение: 

gl4-22.jpg

Изображение: 

gl4-23.jpg

Изображение: 

gl4-24.jpg

Изображение: 

8. Дифференциальные уравнения

 

Дифференциальные уравнения

 

Решение дифференциальных уравнений в символьном виде

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


у'(х) = eqn=f(x,y).

Несколько дифференциальных уравнений образуют систему дифференциальных уравнений. Решение таких систем также возможно средствами Mathematica и подробно описано в ряде книг по использованию системы [65-71]. Дифференциальные уравнения и системы дифференциальных уравнений могут быть линейными и нелинейными. Для линейных уравнений обычно существуют решения в аналитическом виде. Нелинейные дифференциальные уравнения в общем случае аналитических решений не имеют, но могут решаться приближенными численными методами.

Дифференциальные уравнения широко используются в практике математических вычислений. Они являются основой при решении задач моделирования — особенно в динамике. Немногие математические системы имеют реализации численных методов решения систем дифференциальных уравнений. Но система Mathematica имеет средства как для символьного, так и для численного решения дифференциальных уравнений и их систем.

Для решения дифференциальных уравнений в символьном виде используются следующие средства:

  • DSolve[eqn, y[x], х] — решает дифференциальное уравнение относительно функций у [ х ] с независимой переменной х;
  • DSolve[{eqnl, eqn2,...}, {yl [xl,...],...}, {xl,...}]-решает систему дифференциальных уравнений.

У функции DSolve и ее численного варианта NDSolve есть пара опций, на которые следует обратить внимание:

  • DSolveConstants — опция к DSolve, определяющая постоянные интегрирования, которые будут использованы в результате;
  • StartingStepSize — опция к NDSolve, определяющая величину начального шага.

В решении дифференциальных уравнений встречаются постоянные интегрирования. По умолчанию они обозначаются как С [ i ].

Приведем примеры решения дифференциальных уравнений:


DSolve [Derivative [1] [у] [х] ==2*а*х^3, у[х], х]

{{у[х]->aх4/2+С[1]}}

DSolve[{yl' [х] == 2 х2, у2' [х] == 3 х}, {yl[х], у2[х]}, х]

{{yl[x] ->-2х3/3+C[1], у2[х] ->3х2/2+C[2]}}

DSo2ve{y'[x] +у[х] ==х, у[х], х}

{{у[х] -*-1+х + е-хС[1]}}

DSolve [у" [х] - у' [х] - 6 у [х] == 0, у [х] , х] {{У[х] ->| е-4хС[1] + С[2] -Cos[2x] -|sin[2x]}}

DSolve [у" [х] + 4 у'[х] == 10 Sin [2 х] , у [х] , х]

{{У[х] ->| е-4хС[1] + С[2] -Cos[2x] -|sin[2x]}}

DSolve[y'[x] == Sin[Ex] , y[x] , x]

{{y[x] ->C[1] +Sinlntegral[ex]}}

DSolvefz2 w"[z] +zw'[z] - (z2 + l)w[z] ==0, w[z], z]

{{w[z] ->BesselI[l, z] C[l] +BesselK[l, z] C[2] }}

Как нетрудно заметить, аналитические решения дифференциальных уравнений могут содержать не только элементарные, но и специальные математические функции, что заметно расширяет возможности применения системы Mathematica в решении задач динамического моделирования.

Решение дифференциальных уравнений в численном виде

Многие дифференциальные уравнения не имеют аналитических решений — например, нелинейные. Однако они могут с приемлемой точностью решаться численными методами. Для численного решения систем дифференциальных уравнений используется функция NDSolve:

  • NDSolve [eqns, у, {x, xmin, xmax }]— ищет численное решение дифференциальных уравнений .eqns относительно функции у независимой переменной х в интервале от xmin до xmax;
  • NDSolve [eqns, {yl, y2,...}, {x, xmin, xmax }]— ищет численные решения относительно функций yi.

MaxSteps — опция к NDSolve, которая определяет максимальное количество шагов.

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

Нередко решение предпочитают представить на фазовой плоскости. Рисунок 4.26 иллюстрирует такую возможность. Более того, поскольку решается система из трех дифференциальных уравнений, фазовая траектория решения находится в трехмерном пространстве.

Простота задания решения и вывода его результатов в графической форме открывает широкие возможности применения системы для математического моделирования сложных явлений. При этом, в отличие от такого решения с помощью обычных языков высокого уровня (например, Фортран, Бейсик, Паскаль или С), не требуется составления каких-либо программ по реализации численных методов решения систем дифференциальных уравнений, таких как, скажем, метод Рунге— Кутта. Они представлены в виде уже готовых функций.

Рис. 4.25. Решение системы дифференциальных уравнений с выводом решения в виде графиков временных зависимостей

Рис. 4.26. Решение системы дифференциальных уравнений с выводом решения в форме кривых на фазовых плоскостях

 

gl4-25.jpg

Изображение: 

gl4-26.jpg

Изображение: 

9. Оптимизационные задачи

 

Оптимизационные задачи

 

Поиск максимального и минимального чисел в списке

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

Для поиска максимального и минимального значений ряда чисел, входящих в список, система Mathematica предоставляет следующие средства:

  • Max [xl, х2,...]— возвращает наибольшее значение из xi;
  • Max[{xl, x2,...}, {yl,...},...] — выбирает наибольший элемент из нескольких списков;
  • Min[xl, x2,...] — возвращает наименьшее значение из xi;
  • Min[{xl, x2,...}, {yl,...},...] — выбирает наименьший элемент из нескольких списков.

Следующие примеры показывают действие этих простых функций.


Ввод (In) Вывод(Out)
Мах[1,5,2,6.5,3,4] 6.5
Мах[{1,3,2},{4,5,6},{9,8,7}] 9
Min[1,5,2,6.5,-3,4] -3
Min[{1,3,2},{4,5,6},{9,8,7}] 1

 

Поиск локального минимума аналитической функции

Если нужен поиск локального минимума некоторой аналитической функции, используется функция FindMinimum [ f, {х, х0 } ], которая выполняет поиск локального минимума функции f, начиная со значения х=х0, и возвращает его значение.

Для указания градиента минимизируемой функции используется опция Gradient.

Приведем примеры применения функции FindMinimum:


FindMinimum[-хЕхр[-2 х] , {х, 1}]

{-0.18394, {х^ 0.5}}

FindMinimum[-хЕхр[-2 х] , {х, 0.2, 6, 1}]

{-0.18394, {х^ 0.5}}

FindMinimum [-5 xExp[-x/2] (2 + Sin[3x]), {х, 1}]

{-7.17833, {х^ 0.783139}}

FindMinimum[-5xExp[- x/2] (2 + Sin[3 x]) , {x, 3}]

(-10.6299, {x^ 2.5805}}

FindMinimum[-5xExp[- x/2] (2+Sin[3x]), {x, 4}]

{-6.79134, {x^ 4.6179}}

FindMinimum[l00 (y-x2)2+ (1 -x)2, {x, 0}, {y, 0},

AccuracyGoal-»Automatic]

{9.90511X10-13, {x->l., y^ 0.999999}}

Эти примеры показывают, что выбирая разные начальные значения х, можно найти ряд минимумов функции f(x), разумеется, если таковые имеют место. Если необходимо разыскивать локальные максимумы, достаточно перед функцией поставить знак «минус» или умножить ее на -1.

Поиск глобального максимума и минимума аналитической функции

Следующие две функции служат для поиска глобального максимума и минимума аналитически заданной функции:

  • ConstrainedMax [f, {inequalities}, {x, у,...}] — ищет глобальный максимум функции f в области, определяемой неравенствами inequalities. Полагается, что все переменные х, у... неотрицательны;
  • ConstrainedMin [f, {inequalities}, {x, у,...}]— ищет глобальный минимум функции f в области, определяемой неравенствами inequalities. Все переменные х, у... полагаются неотрицательными.

Решение задач линейного программирования

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


LinearProgramming[с, m, b]

которая ищет вектор х, минимизирующий величину с. х в соответствии с условиями m.x>=b и х>=0.

Рассмотрим типичный пример на линейное программирование. Пусть цех малого предприятия должен изготовить 100 изделий трех типов, причем не менее 20 штук каждого. На изготовление этих изделий уходит, соответственно, 4, 3,4 и 2 кг металла. Имеющийся в наличии запас материала — 700 кг. Спрашивается, сколько изделий xl, х2 и хЗ каждого типа надо выпустить для обеспечения максимальной стоимости продукции, если цена изделий равна, соответственно, 4, 3 и 2 рубля.

Ниже представлено решение этой задачи с помощью функции ConstrainedMax:


ConstrainedMax [

4 * xl + 3 * x2 + 2 * хЗ ,

{xl >= 20, x2 >= 20, хЗ >= 20,

4 * xl + 3 . 4 * x2 + 2 * x3 <= 340 ,

4 .75 * xl + 11 * x2 + 2 * x3 < = 700 ,

xl + x2 + x3 == 100},

{xl, x2, x3}]

{332., {xl^ 56^x2^ 20., x3^24.}}

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

Задачи минимизации традиционно относятся к сложным задачам программирования — особенно при поиске глобального минимума. Наличие в ядре системы Mathematica их реализаций делает систему привлекательной для решения задач этого класса.

 

10. Преобразования Лапласа — LaplaceTransform

 

Преобразования Лапласа-LaplaceTransform

 

Преобразования Лапласа — важный вид интегральных преобразований. Они лежат в основе, например, символического метода расчета электрических цепей. В системе Mathematica 3 функции преобразования размещены в подпакете Laplace-Transform. Но в CKM Mathematica 4 эти функции стали встроенными.

Основными являются следующие функции этого класса:

  • LaplaceTransform[expr, t, s] — возвращает результат прямого преобразования Лапласа для выражения expr [t] в виде функции переменной s;
  • InverseLaplaceTransform[expr, s,t] — возвращает результат обратного преобразования Лапласа для выражения expr [s] в виде функции переменной t;
  • LaplaceTransform [expr, {tl, t2,...}, {s1i, s2,...} ] — возвращает результат прямого преобразования Лапласа для выражения expr [ 11, t2,... ] в виде функции переменных {s1, s2,...};
  • InverseLaplaceTransform [expr, {s1, s2,...}, {tl, t2,...} ] — возвращает результат обратного преобразования Лапласа для выражения expr [s1, s2,...] в виде функции переменных {tl, е2,...}.

Хотя имена переменных t и s можно выбирать произвольно, обычно t означает время, as — оператор Лапласа. Ниже представлено несколько примеров выполнения преобразования Лапласа: 


<<Calculus'LaplaceTransfornT'

LaplaceTransform[Exp[-t]*Sin[t], t, s]

1+1/ (1 + s)2

InverseLaplaceTransform[%,s,t]

E-tSin[t]

LaplaceTransform[t^2 Exp[-x], {t,x}, {s,v}]

2/s3(1 + v)

 

Функции z-преобразований — ZTransform

Z-преобразования широко используются в теории автоматического регулирования. Поэтому в системе Mathematica 4 для осуществления z-преобразований в ядро включены следующие функции:

  • ZTransform[expr, n, z] — возвращает результат прямого 2-преобразования для выражения ехрr, представленного как функция целочисленного аргумента n;
  • InverseZTransform[expr, n, z] — возвращает результат обратного z-npeобразования для выражения ехрr, представленного как функция целочисленного аргумента п.

Приведем примеры выполнения z-преобразований:


ZTransform[Cos[n], n, z]

(1-cos(1)/z)/(1+1/z2-2Cos(1)/z)

InverseZTransform[%,s,t]

Cos[n]

ZTransform[n^2 а^n, n, z]

[-a(1+a/z)/(-1+a/z)3 z

InverseZTransf orm [%, z, n] // Together

ann2

Как и следовало ожидать, прямое, а затем обратное z-преобразование выражения ехрг восстанавливает его в исходном виде. В системе Mathematica 3 эти функции становятся доступными после исполнения команды «DiscreteMath' ZTransform' поскольку они входят не в ядро, а в пакет расширения дискретной математики.

 

11. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Вычислять суммы в аналитическом и численном видах.
  • Вычислять произведения в аналитическом и численном видах.
  • Вычислять производные.
  • Вычислять интегралы в символьном и численном видах.
  • Вычислять пределы функций.
  • Решать в аналитическом и численном видах уравнения и системы уравнений.
  • Осуществлять графическую иллюстрацию решения уравнений.
  • Решать дифференциальные уравнения в символьном и численном видах.
  • Искать максимальное и минимальное числа в списке.
  • Искать локальный максимум и минимум аналитической функции.
  • Решать задачи линейного программирования.
  • Выполнять преобразования Лапласа и z-преобразования.

 

Урок 5. Представление и обработка данных

Урок 5. Представление и обработка данных

1. Представление и обработка данных

 

Представление и обработка данных

  • Разложение функций в ряды Тейлора и Маклорена
  • Удаление члена с остаточной погрешностью ряда
  • Графическая визуализация разложения в ряд
  • Прямое и обратное дискретные преобразования Фурье
  • Спектральный анализ на основе преобразования Фурье
  • Фильтрация сигналов на основе преобразований Фурье
  • Полиномиальная интерполяция и аппроксимация
  • Регрессия и визуализация ее результатов
  • Спектральный анализ таблично заданных сигналов с интерполяцией
  • Моделирование нелинейных цепей с применением интерполяции

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

 

2. Разложение функций в ряды

 

Разложение функций в ряды

 

Разложение функций в ряды Тейлора и Маклорена

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

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

Для разложения в ряд используются следующие функции системы Mathematical

  • Series[f, {х, х0, п}]— выполняет разложение в степенной ряд функции f в окрестности точки х=х0 по степеням (х-х0) ^ n;
  • Series [f, {х, х0, nх}, {у, у0, nу}] — последовательно ищет разложения в ряд сначала по переменной у, затем по х;
  • SeriesCoef ficient [s,n] — возвращает коэффициент при переменной n-й степени ряда s;
  • SeriesData [х, х0, {а0, al,...}, nmin, nmax, den] —представляет степенной ряд от переменной х в окрестности точки х0. Величины ai являются коэффициентами степенного ряда. Показатели степеней (х-х0) представлены величинами nmin/den, (nmin+1) /den, ..., nmax/den.

Суть разложения функции в степенной ряд хорошо видна из разложения обобщенной функции/(д:), представленного на рис. 5.1 (выходные ячейки имеют стандартный формат).

Рис. 5.1. Разложение в ряд обобщенной функции f(x)

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

В соответствии с принятой математической символикой эта погрешность обозначается как О [x] i с показателем степени, указывающим на порядок погрешности. Следует отметить, что разложение в ряд использует особый формат вывода, частью которого и является член остаточной погрешности. На рис. 5.2 показано разложение в ряд Тейлора для нескольких функций, причем вывод дан в стандартной форме.

Рис. 5.2. Примеры представления функций рядами

Нетрудно заметить, что не все функции разлагаются в ряд Тейлора системой . Mathematica. Например, не имеют разложения логарифм и квадратный корень — они возвращаются в исходном виде. А разложение факториала представлено через гамма- и полигамма-функции.

Удаление члена с остаточной погрешностью ряда

Из-за особого формата результаты разложения в ряд нельзя явно использовать для расчетов (например, для построения графика функции по данным ее разложения в ряд). Для устранения остаточного члена и получения приемлемых для расчетов выражений можно использовать функции Collect и Normal. Ниже показаны примеры применения этих функций:


Series[Sin[x],{х,0,7}]

x-x3/6+x5/120 -x7/5040+0[Xl 8

Collect[%,x]

x-x3/6+x5/120 -x7/5040

Normal[Series[Sin[x*y],{х,0,3},{у,0,3}] ]

xy-х3 у3/6

f [х_, у ] =xy-х3 у3/6

xy-х3 у3/6

f[0.1,0.2]

0.0199987

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


F[x_, у_] = Normal [Series [Sin[x* у] , {х, 0, 3), {у, 0, 3}]

xy-х3 у3/6

F[0.1, 0.2]

0.0199987

В Mathematica 3/4 преобразование результатов разложения в ряд в стандартные расчетные выражения несколько упрощено. Это позволяет ограничиться описанными выше (но вовсе не единственными) приемами.

Графическая визуализация разложения в ряд

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

Пример графической визуализации разложения в ряд представлен на рис. 5.3. На нем, кстати, использовано описанное выше применение функции Collect для получения результата разложения в обычной форме, допускающей вычисления.

Рис. 5.3. Представление синусоидальной функции рядом Тейлора с графической иллюстрацией его точности

На рис. 5.3 представлены график синусоиды, построенной по аналитическому выражению, и график ее разложения в ряд Тейлора в окрестности точки х 0 =2. Хорошо заметно расхождение за пределами области, примыкающей к оперной точке функции. Как отмечалось, погрешность уменьшается, если х0=0 (ряд Маклорена). К сожалению, при большом числе членов ряда его поведение становится трудно предсказуемым, и погрешность приближения катастрофически нарастает.

 

gl5-1.jpg

Изображение: 

gl5-2.jpg

Изображение: 

gl5-3.jpg

Изображение: 

3. Преобразования Фурье

 

Преобразования Фурье

 

Основные понятия о спектральном анализе и синтезе

Спектральный подход (метод) лежит в основе целых направлений науки и техники. Достаточно отметить, что он плодотворно используется в технике электро- и радиосвязи, где разделение частот модулированных сигналов базируется на различии их спектров. Спектральный подход также широко используется для создания аналоговых и цифровых фильтров и для оценивания искажений сигналов в ходе их преобразования, например усиления реальными усилителями.

Схема применения спектрального подхода достаточно проста. Сигнал вначале представляется совокупностью гармонических составляющих — гармоник ~ в виде тригонометрического ряда Фурье. Для точного представления сигнала требуется бесконечное число гармоник, но на практике оно всегда ограничено. Такое ограничение порождает волнообразный характер изменения сигнала и появление выбросов, что известно под названием эффекта Гиббса.

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

Итак, спектральный подход заключается в следующем. Вначале получают достаточно представительный (с большим числом гармоник) спектр заданного сигнала. Довольно часто используют тестовые сигналы в виде прямоугольных, треугольных, пилообразных и других импульсов. Для моделирования таких сигналов можно использовать различные функции, например, Sign [Sin [t] ] позволяет получить симметричные прямоугольные импульсы (меандр), а Abs [Sin [t] ] моделирует результат двухполупериодного выпрямления синусоидального напряжения. Для получения разрывных сигналов можно использовать функции с условиями сравнения, например функцию If (на рис. 5.4 даны примеры имитации с помощью этой функции импульсов прямоугольной и пилообразной формы).

Для многих частных видов сигналов (а к ним относится большинство тестовых сигналов) разложения в ряд Фурье хорошо известны и приводятся в любом математическом справочнике (иногда в несколько разных формах). Это позволяет сразу получить нужное число гармоник сигнала и, что особенно важно, проверить, насколько адекватно синтезируемый сигнал описывает реальный сигнал.

На рис. 5.5 показан пример прямого синтеза разнополярных коротких прямоугольных импульсов. Используется известное разложение их в ряд, причем графики построены для 5 и 20 гармоник. Нетрудно заметить, что даже при двадцати гармониках представление такого сигнала гармоническим рядом не очень точно — отчетливо наблюдаются колебания и выбросы, то есть эффект Гиббса.

Рис. 5.4. Имитация импульсов прямоугольной и пилообразной формы с помощью функции If

Рис. 5.5. Гармонический синтез коротких разнополярных прямоугольных импульсов

Еще один подобный пример — синтез разнополярных треугольных импульсов — представлен на рис. 5.6. Здесь также используется известное выражение для ряда

Фурье. Графики построены для 3 и 20 гармоник. Нетрудно заметить, что гармонический синтез для этого сигнала дает гораздо лучшие результаты — даже три гармоники неплохо воспроизводят сигнал. Это связано с тем, что данный сигнал не имеет разрывов — для него характерны лишь точки резких перегибов временной зависимости.

Рис. 5.6. Гармонический синтез симметричных треугольных импульсов

В целом надо отметить, что чем плавнее временная зависимость сигнала, тем меньше проявляются отмеченные выше искажения и слабее заметен эффект Гиббса.

Итак, в результате гармонического анализа сигнала (или его прямого гармонического синтеза) сигнал получается в виде совокупности гармонических сигналов — гармоник. В общем случае каждая гармоника имеет свою амплитуду и фазу, и для их получения в общем случае можно использовать прямое преобразование Фурье (см. ниже).

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

Простота спектрального подхода обманчива, поскольку он требует довольно громоздких вычислений. Для быстрого их выполнения были созданы различные ускоренные методы спектрального анализа и синтеза — например, метод быстрого преобразования Фурье (БПФ). Но лишь с появлением СКМ класса Mathematica (и ей подобных) спектральный подход превращается в «рабочую лошадку», обеспечивая наглядное и достаточно быстрое решение задач спектрального анализа и синтеза.

Прямое и обратное преобразования Фурье

Для представления временных зависимостей (сигналов) в виде набора гармоник в общем случае (и в системе Mathematica) используется прямое дискретное преобразование Фурье (ДПФ), а для обратного преобразования спектра во временную зависимость — обратное дискретное преобразование Фурье. Математические основы этих преобразований хорошо известны и описаны в соответствующей литературе. В Mathematica 4 имеются следующие основные функции для осуществления дискретного преобразования Фурье:

  • Fourier [list] — осуществляет дискретное преобразование Фурье для списка list комплексных чисел;
  • InverseFourier [list] — осуществляет дискретное обратное преобразование Фурье списка list комплексных чисел.

Параметром list этих функций в общем случае является список, содержащий комплексные числа. Последовательное применение прямого и обратного преобразований Фурье должно приводить к результату, совпадающему с исходными данными (в пределах малой погрешности). Это хорошо подтверждает следующий пример:


DF:=Fourier[{1,1,0,0}]

DF

{1. + 0.I, 0.5+0.51, 0. + 0.I, 0.5-0.51}

IF:=InverseFourier[DF]

IF

{1.+ 0. I, 1. + 2.77556х10-171, 0. + 0. I, 0. -2.77556x 10-17I}

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

Применение описанных функций имеет некоторые тонкости. Прежде всего надо отметить, что отсчет элементов векторов начинается не с нуля, а с единицы. Поэтому нулевая гармоника (в электро- и радиотехнике ее называют постоянной составляющей разлагаемой в ряд Фурье зависимости) соответствует индексу 1, первая гармоника — индексу 2 и т. д. Таким образом, имеет место смещение нумерации индексов на единицу.

Согласно теореме отсчетов, именуемой также теоремой Котельникова, если функция имеет N отсчетов, то максимальное число гармоник спектрального разложения равно N/2. Между тем, функция Fourier в системе Mathematica дает все N элементов создаваемого ею вектора. При этом на спектрограмме «лишние» гармоники на деле просто образуют зеркальное отображение реально возможных N/2 гармоник. Именно поэтому двойное (прямое и обратное) преобразование Фурье в системе Mathematica 3/4 почти идеально точно восстанавливает исходный вектор.

Еще одна тонкость связана с необычным представлением нулевых мнимых частей элементов векторов, получаемых в ходе преобразований. Они записываются в виде 0.1. Для их устранения может использоваться функция Chop [V].

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

Спектральный анализ на основе прямого преобразования Фурье

Итак, прямое преобразование Фурье означает перевод временного представления сигнала в частотное. Другими словами, оно позволяет получить частотный спектр сигнала, представленного отсчетами его временной зависимости. Нередко это является конечной целью спектрального анализа.

На рис. 5.7 представлен пример спектрального анализа простого сигнала — треугольного импульса, заданного с помощью функции If. Затем с помощью функции Fourier прямого преобразования Фурье получены в явном виде векторы амплитуд Мg и фаз Аg гармоник этого сигнала.

Рис. 5.7. Спектральный анализ пилообразного импульса на основе прямого преобразования Фурье

На рис. 5.8 представлено продолжение документа, показанного на рис. 5.7. Здесь с помощью графиков лестничного типа, подчеркивающих дискретность гармоник, построены спектрограммы амплитуд и фаз гармоник пилообразного импульса. Хорошо видно симметричное отражение линий спектра относительно восьмой гармоники — в нашем случае имелось 16 отсчетов сигнала. Это значит, что амплитуда и фаза девятой гармоники те же, что у седьмой гармоники, у десятой — те же, что у шестой, и т. д.

Рис. 5.8. Спектрограммы амплитуд и фаз гармоник пилообразного импульса

Теперь рассмотрим более сложный случай — получение спектра сложного сигнала (рис. 5.9). :

Рис. 5.9. Получение спектра сложного сигнала с помощью прямого преобразования Фурье

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

Во второй части рисунка показан график частотных отсчетов, полученных после прямого преобразования Фурье. На нем отчетливо виден пик в районе частоты 50 Гц (поскольку первый элемент результирующего списка соответствует нулевой частоте, этот пик возникает на 51-м элементе списка). Однако помимо него существует еще один пик на частоте 256 - 50 = 206 Гц. Он связан с отмеченным ранее свойством симметрии спектра вещественного сигнала.

Фильтрация сигналов на основе преобразований Фурье

Преобразование Фурье является теоретической основой фильтрации сложных сигналов. Мы рассмотрим комплексный пример на фильтрацию сигнала, представляющего собой функцию Бесселя первого рода третьего порядка. Рисунок 5.10 показывает верхнюю часть документа, демонстрирующую создание исходного сигнала и описание частотного фильтра.

Рис. 5.10. Часть документа, показывающая создание сигнала и синтез фильтра для него

Как и в ранее рассмотренном примере, сигнал формируется как сумма чистого сигнала со случайной составляющей, моделирующей шум. Выбранная форма сигнала напоминает затухающую синусоиду. Уровень шумов выбран достаточно большим, так что форма чистого сигнала с трудом угадывается на фоне шумов (верхний график). Далее показаны синтез цифрового частотного фильтра и его амплитудно-частотная характеристика (АЧХ). График АЧХ показан в нижней части рис. 5.10.

На рис. 5.11 показан процесс фильтрации. Он сводится к уточнению модели фильтра (сдвигу АЧХ в область более низких частот и созданию зеркального отражения спектра), проведению прямого преобразования Фурье, выделению фильтром соответствующих составляющих сигнала и, наконец, выполнению обратного преобразования Фурье. Оба преобразования и фильтрация осуществляются в одном выражении (строка с переменной conv). При этом векторы прямых преобразований Фурье для сигнала и для отсчетов частотной характеристики фильтра перемножаются. Обратное преобразование Фурье переводит результат фильтрации во временную область. Полученный в результате фильтрации сигнал практически очищен от шума. Это подтверждает график выходного сигнала, представленный в нижней части рис. 5.11.

Рис. 5.11. Часть документа, показывающего фильтрацию сигнала и построение графика сигнала, очищенного от шума

Эти примеры показывают высокую эффективность средств Mathematica 3/4 в решении задач спектрального анализа, синтеза сигналов, их фильтрации и иных преобразований. Важно отметить, что в новейшей версии Mathematica 4 использованы ускоренные алгоритмы преобразований Фурье, повышающие скорость выполнения описанных операций в несколько раз. Это открывает возможность решения серьезных задач обработки сигналов, представленных многими тысячами отсчетов. Другими словами — сигналов, реально применяемых в технике связи.

Функции пакета — FourierTransform

Подпакет FourierTransform пакета Calculus в версии Mathematics 3 служит для осуществления расширенных преобразований Фурье. Он вызывается командой


<<Calculus` FourierTransform`

Ввиду важности этих преобразований в системе Mathematica 4 их функции были размещены уже в ядре системы. Это следующие функции:

  • FourierTransform [expr, t, w] — возвращает результат прямого преобразования Фурье над выражением expr [t], выраженного через переменную w;
  • InverseFourierTransform[expr, w, t] — возвращает результат обратного преобразования Фурье над выражением expr[w], выраженного через переменную t;
  • FourierCosTransform[expr, t, w] — возвращает результат косинусного преобразования Фурье над выражением expr [t ], выраженного через переменную w;
  • FourierSinTransform[expr, t, w] — возвращает результат синусного преобразования Фурье над выражением expr [t], выраженного через переменную w;
  • FourierTransform [expr, {tl,t2}, {wl, w2 } ] — возвращает результат прямого преобразования Фурье над выражением expr [ tl, t2,...], выраженного через переменные {wl, w2,-...};
  • InverseFourierTransformtexpr, {tl,t2}, {wl,w2} ]'— возвращает результат обратного преобразования Фурье над выражением expr [ wl, wl,...], выраженного через переменные {tl, t2,...}.,

Примеры осуществления прямого и обратного преобразований Фурье представлены ниже:


FourierTransform[Sin[t]*t:2, t, w]

-Iл(DiracDelta"[l - w] - DiracDelta" [1 + w])

InverseFourierTransform[%, w, t]

t2Sin[t]

FourierCosTransform[Sin[t]*t:2, t, w]

-8w2/(1-w2)3-2/(1-w2)2

FourierSinTransform[Cos[a*t], t, w]

-w/(a2-w2)

FourierTransform[tl^2 Exp[-a t2] UnitStep[tl, t2],

{tl, t2}, {wl, w2}]

-2I/w13-лDiracDelta''[w1]/a-IW2

InverseFourierTransformtwl/(l-b*w2), {wl, w2}, {tl, t2}]

Для реализации спектрального анализа и синтеза имеются следующие функции:

  • FourierExpSeries [expr, {x, xmin, xmax), n] — возвращает разложение expr [х] в экспоненциальный ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierExpSeriesCoef f icient [expr, {x, xmin, xmax} ,n] —возвращает коэффициенты разложения expr [x] в экспоненциальный ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierTrigSeries [expr, {x, xmin, xmax}, n] — возвращает разложение expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierSinSeriesCoef f icient [expr, {x, xmin, xmax}, n] —возвращает синусные коэффициенты разложения expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin,xmax};
  • FourierCosSeriesCoef f icient [expr, {x, xmin, xmax}, n] —возвращает косинусные коэффициенты разложения expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax}.

Рисунок 5.12 иллюстрирует создание пилообразного сигнала, его разложение в тригонометрический ряд Фурье с п = 4, графическое воспроизведение сигнала и его представление суммой из четырех гармоник (на рисунке оставлены только совмещенные графики). Таким образом, последняя операция демонстрирует проведение синтеза пилообразного сигнала по четырем гармоникам.

Рис. 5.12. Создание пилообразного сигнала, его разложение в тригонометрический ряд Фурье и синтез сигнала по четырем гармоникам

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

  • NFourierTrigSeries [expr, {x, xmin,xmax}, n] — возвращает разложение expr t x ] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax} в численном виде.

Предоставляем читателю опробовать эти функции самостоятельно.

 

gl5-10.jpg

Изображение: 

gl5-11.jpg

Изображение: 

gl5-12.jpg

Изображение: 

gl5-4.jpg

Изображение: 

gl5-5.jpg

Изображение: 

gl5-6.jpg

Изображение: 

gl5-7.jpg

Изображение: 

gl5-8.jpg

Изображение: 

gl5-9.jpg

Изображение: 

4. Интерполяция, аппроксимация и регрессия

 

Интерполяция, аппроксимация и регрессия

 

Нередко исходные данные при решении математических задач представлены рядом точек произвольной зависимости вида у(х). Сама по себе эта зависимость может быть неизвестной. Для вычисления промежуточных значений функции используется аппарат интерполяции. При нем истинная функция заменяется аппроксимирующей функцией, которая в узловых точках дает точные значения ординат и позволяет вычислить значения интерполируемой функции в промежуточных точках.

Полиномиальная интерполяция и аппроксимация

Для решения задач интерполяции и аппроксимации функций, заданных рядом узловых точек, в Mathematica используются следующие функции:

  • InterpolatingFunctionfrange, table] — возвращает интерполирующую функцию, позволяющую вычислять промежуточные значения в заданном диапазоне range для таблицы table;
  • InterpolatingPolynomial [data, var] — возвращает полином (степенной многочлен) по переменной var, значения которого в узловых точках точно совпадают с данными из списка data. Он может иметь форму { {xl, f1}, {х2, f2},...} или {fl, f2,...} (во втором случае xi принимают значения 1, 2,...). Вместо fi может быть список {fi, dfi, ddfi,...}, указывающий значения производных в точках xi;
  • Interpolation [data] — конструирует объект InterpolatingFunction.

InterpolationOrder — опция функции Interpolation, указывающая степень подходящего полинома. При ее значении, равном 1, осуществляется кусочно-линейная интерполяция. Целое значение, большее единицы, задает степень глобальной полиномиальной интерполяции.

Применение основной функции Interpolation поясняет следующий пример:


data = ТаЫе[{х, х^2 + 1}, {х, 1, 5}]

{{1, 2}, {2, 5}, {3, 10}, {4, 17}, {5, 26}}

funi = Interpolation[data]

InterpolatingFunctionf{{1, 5}}, 0]

{funi [1.5], funi[3], funi[4.5]}

{3.25, 10, 21.25}

Таким образом, на заданном отрезке изменения х функция Interpolation позволяет найти любое промежуточное значение функции funi [x], в том числе значения в узловых точках.

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

Степень интерполирующего (и аппроксимирующего) полинома всегда на 1 меньше числа узловых точек интерполяции или аппроксимации. Аппроксимация отличается от интерполяции тем, что предполагает получение аппроксимирующей функции в явном виде. При полиномиальной аппроксимации такой функцией является степенной многочлен.

Пример на рис. 5.13 иллюстрирует технику проведения полиномиальной аппроксимации с применением интерполирующего степенного многочлена.

Рис. 5.13. Полиномиальная аппроксимация таблично заданных данных

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

В узлах интерполяции значения интерполирующего многочлена точно совпадают со значениями исходных данных. Однако это не гарантирует малую погрешность за пределами узловых точек (особенно при экстраполяции функций). Чем больше пар данных и чем выше степень аппроксимирующего многочлена, тем выше погрешность аппроксимации. Обычно аппроксимация при степени многочлена выше 8-10 не применяется из-за резкого возрастания погрешности. При большом числе пар исходных данных более полезной на практике является регрессия.

Регрессия и визуализация ее результатов

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

Для решения задач регрессии используется функция ядра


Fit: Fit[data, funs, vars]

Эта функция ищет приближение для списка данных data методом наименьших квадратов в виде линейной комбинации функций funs переменных vars. Данные data могут иметь форму {{xl, yl,..., f1}, {х2, у2,..., f2 },...}, где число координат х, у,... равно числу переменных в списке vars. Также данные data могут быть представлены в форме {f 1, f 2, =..} с одной координатой, принимающей значения 1, 2... Аргумент funs может быть любым списком функций, которые зависят только от объектов vars.

Следующие примеры показывают приближение исходных данных степенным полиномом и линейной комбинацией двух функций:


Fit[{{0, 0.9}, {2, 8.099999999999999), {3, 17}, {4, 33}}, {а, х, х2}, х]

0. 997273-1.40864 х+2.33409 х2

Fit[{{0, 0.9}, {2, 8.099999999999999}, {3, 17}}, {х2, Ехр[х], х} , х]

0.9ех + 2.89276х- 1.08392 х2

Здесь в первом примере выполняется полиномиальная регрессия со степенью полинома, равной 2. Максимальная степень на 1 меньше числа пар исходной зависимости (в нашем случае их 4) — при такой степени регрессия вырождается в обычную полиномиальную аппроксимацию, которая рассматривалась ранее.

Рисунок 5.14 показывает несколько иной путь проведения полиномиальной аппроксимации — исходные данные заданы объектом-списком data.

В конце документа рис. 5.14 показано построение графика аппроксимирующего полинома второй степени и точек исходных данных. Заметно, что при регрессии график полинома проходит в середине «облака» исходных точек и не укладывается на них точно.

В уроке 12 будут рассмотрены дополнительные функции для проведения регрессии. Они входят в различные пакеты расширения системы Mathematica 3/4.

Рис. 5.14. Полиномиальная регрессия с графическим выводом

 

gl5-13.jpg

Изображение: 

gl5-14.jpg

Изображение: 

5. Спектральный анализ с линейной интерполяцией сигнала

 

Спектральный анализ с линейной интерполяцией сигнала

Как уже отмечалось, одной из проблем точного представления сигналов при гармоническом синтезе является ограничение числа гармоник, связанное с конечностью числа отсчетов сигнала. К примеру, если вещественный сигнал задан 20 отсчетами, то максимальное число гармоник будет всего 10, что недостаточно для хорошего представления большинства реальных сигналов.

Ниже описан путь преодоления этого ограничения. Он основан на интерполяции сигнала, что позволяет при ограниченном числе его отсчетов (выборок) использовать любое число дополнительных отсчетов. Разумеется, при этом строится спектр интерполированного сигнала, но он может представлять реальный сигнал гораздо лучше, чем просто ограниченный N/2 гармониками спектр сигнала с малым числом выборок.

Еще одна проблема при спектральном анализе связана с необходимостью нормировки коэффициентов Фурье. Их расчет по аналитическим формулам не является достаточно эффективным — уже давно доказано, что если сигнал представлен отдельными выборками, то единственно обоснованным методом вычисления интегралов (коэффициентов) Фурье является простейший метод прямоугольников. Это обстоятельство также учтено в описанном ниже документе (вполне законченном «блокноте» системы Mathematica).

Пусть сигнал задан N отсчетами. На рис. 5.15 показан пример задания достаточно сложного сигнала путем формирования вектора его ординат Yi (индекс i от 1 до 20). Пусть сигнал задан на периоде Т = 4*10^-6 с, что соответствует частоте f 1 основной гармоники сигнала, равной 250 кГц. Рисунок 5.15 поясняет технику нормировки сигнала и построения его графика с реальной шкалой времени (то есть на отрезке времени от 0 до Т).

Рис. 5.15. Задание сигнала, его кусочно-линейная интерполяция и построение графика временной зависимости

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

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

На рис. 5.17 крупным планом показано построение спектрограммы амплитуд гармоник заданного сигнала. Дабы подчеркнуть дискретность гармоник, амплитуда каждой из них показана точкой, около которой стоит номер гармоники. Для этого пришлось использовать графическую функцию LabelListPlot из пакета расширения Graphics. Нетрудно заметить, что амплитуды гармоник быстро убывают по мере роста их номера. Однако, поскольку суммируется множество гармоник, это не является основанием для слишком поспешного отбрасывания высших гармоник.

Рис. 5.16. Вычисление коэффициентов Фурье, амплитуд и фаз гармоник

Рис. 5.17. Спектрограмма амплитуд гармоник

Рисунок 5.18 представляет спектрограмму фаз гармоник. Фазы гармоник также имеют дискретные значения и показаны точками с номерами. Значение фазового сдвига лежит в пределах от -л до л.

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

Рис. 5.18. Спектрограмма фаз гармоник

Рис. 5.19. Гармонический синтез сигнала и сравнение его результатов с временной зависимостью интерполированного сигнала

Самый «волнующий» момент представлен во второй части рис. 5.19 — здесь показано сравнение результата гармонического синтеза сигнала с его временной зависимостью (интерполированной). Чтобы исходный и синтезированный сигналы не сливались, синтезированный сигнал намеренно немного сдвинут вправо и вверх. Нетрудно заметить, что несмотря на сложный характер сигнала его гармонический (спектральный) синтез в данном случае дает превосходные результаты уже при использовании 51 гармоники (включая нулевую). Если убрать отмеченный выше сдвиг, то сигналы практически сливаются.

Учет искажений сигнала

Рисунок 5.20 показывает задание амплитудно-частотной и фазо-частотной (ФЧХ) характеристик некоего фильтра, ослабляющего высокие частоты и вносящего фазовый сдвиг, пропорциональный частоте сигнала. В нижней части рисунка построены эти характеристики. Заметим, что здесь АЧХ и ФЧХ заданы без «хитростей», присущих решению аналогичной задачи с применением встроенных функций дискретного преобразования Фурье. Они задаются в явном виде как функции от частоты.

Рис. 5.20. Амплитудно-частотная и фазочастотная характеристики фильтра

Рисунок 5.21 показывает, как влияет на форму сигнала его прохождение через фильтрующую цепь. Для оценки этого используется формула синтеза гармоник. Однако отличные от нуля амплитуды гармоник умножаются на модуль коэффициента передачи (АЧХ) фильтра, а к фазе каждой гармоники добавляется фазовый сдвиг, вносимый фильтром (ФЧХ). Таким образом, в процессе синтеза временной зависимости сигнала учитываются амплитудно-частотные и фазо-частотные искажения сигнала фильтром.

Рис. 5.21. Сравнение исходной временной зависимости сигнала и сигнала на выходе фильтрующей цепи

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

 

gl5-15.jpg

Изображение: 

gl5-16.jpg

Изображение: 

gl5-17.jpg

Изображение: 

gl5-18.jpg

Изображение: 

gl5-19.jpg

Изображение: 

gl5-20.jpg

Изображение: 

gl5-21.jpg

Изображение: 

6. Моделирование нелинейных цепей с применением интерполяции

 

Моделирование нелинейных цепей с применением интерполяции

Интерполяция может быть очень полезной при решении задач моделирования нелинейных цепей как с обычными (например, электронные лампы и транзисторы), так и с «необычными» активными приборами, например туннельными диодами или лавинными транзисторами.

Одна из проблем такого моделирования — задание нелинейных вольт-амперных характеристик (ВАХ) активного прибора. Mathematica позволяет задать такие ВАХ, используя различные виды интерполяции и аппроксимации — от кусочно-линейной до полиномиальной или сплайновой. Рисунок 5.22 демонстрирует простое табличное задание N-образной ВАХ туннельного диода с полиномиальной интерполяцией (используется полином четвертой степени). Обратите внимание на применение импортируемого рисунка — схемы цепи. Он готовился отдельно в графическом редакторе.

Рис. 5.22. Начало документа, позволяющего моделировать схему на туннельном диоде

Рисунок 5.23 показывает часть документа, в которой выполнено математическое моделирование поведения схемы с момента ее включения. Для моделирования используется известная система из двух нелинейных дифференциальных уравнений, решаемая с помощью встроенной функции NDSolve (эта система записана первой в списке параметров данной функции). Полученные в результате моделирования временные зависимости напряжения на туннельном диоде и тока во внешней цепи показаны ниже. Они свидетельствуют о возникновении в цепи стационарных и почти синусоидальных колебаний. Таким образом, цепь выполняет функции генератора высокочастотных колебаний

Рис. 5.23. Моделирование возникновения и установления синусоидальных колебаний в схеме на туннельном диоде

Поведение схемы очень наглядно характеризует фазовый портрет колебаний, представленный на рис. 5.24 и построенный на фоне интерполированной ВАХ туннельного диода и линии нагрузки резистора Rs, задающей положение рабочей точки на падающем участке ВАХ. В этом случае туннельный диод вносит во внешнюю цепь отрицательную дифференциальную проводимость, что и ведет к возможности возникновения гармонических или релаксационных колебаний (уменьшив С или увеличив L, вы можете посмотреть, как происходит переход к релаксационным колебаниям).

Рис. 5.24. Фазовый портрет колебаний в схеме с туннельным диодом для случая почти гармонических колебаний

Если задать вместо постоянного напряжения Es некоторый импульсный сигнал, то можно смоделировать множество других режимов работы цепи, например генерацию ждущих колебаний, нелинейное усиление, триггерный режим и т. д. Рисунок 5.25 показывает задание e(t) в виде постоянного напряжения Es, на которое наложены положительный и отрицательный запускающие импульсы.

Если линия нагрузки резистора Rs пересекает ВАХ туннельного диода в трех точках (две из них расположены на восходящих участках ВАХ), то будет наблюдаться триггерный режим с раздельным запуском. Этот случай показан на рис. 5.26, где построены временные зависимости напряжения и тока в триггере на туннельном диоде.

Риc. 5.25. Задание временной зависимости e(t), обеспечивающей триггерный режим работы схемы с туннельным диодом

Риc. 5.26. Моделирование триггерного режима работы схемы с туннельным диодом

Фазовый портрет колебаний для этого случая представлен на рис. 5.27. Он дает хорошее представление о сложности физических процессов даже в такой, казалось бы, простой схеме, которая представлена на рис. 5.22.

Риc. 5.27. Фазовый портрет, иллюстрирующий работу схемы с туннельным диодом в триггерном режиме

Если собрать приведенные на рис. 5.22-5.27 фрагменты воедино, вы получите еще один полностью завершенный «блокнот», прекрасно иллюстрирующий решение одной из реальных научно-технических задач. Вы можете дополнить его анализом ряда других режимов работы схемы, причем не обязательно на туннельном диоде, а на любом приборе с нелинейной В АХ вида I(U). Для этого достаточно просто сменить вектор с табличными данными опорных точек ВАХ, полученных, например, в эксперименте, и использовать иные параметры схемы.

 

gl5-22.jpg

Изображение: 

gl5-23.jpg

Изображение: 

gl5-24.jpg

Изображение: 

gl5-25.jpg

Изображение: 

gl5-26.jpg

Изображение: 

gl5-27.jpg

Изображение: 

7. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Находить разложения заданных функций и выражений в ряды Тейлора и Маклорена.
  • Удалять член с остаточной погрешностью ряда.
  • Представлять разложение в ряд графически.
  • Осуществлять прямое и обратное дискретные преобразования Фурье.
  • Выполнять спектральный анализ на основе преобразования Фурье.
  • Осуществлять фильтрацию сигналов на основе преобразования Фурье.
  • Выполнять полиномиальную интерполяцию и аппроксимацию.
  • Осуществлять регрессию и визуализацию ее результатов.
  • Выполнять спектральный анализ таблично заданных сложных сигналов с интерполяцией их временных зависимостей.
  • Выполнять моделирование схем на приборах с N-образными ВАХ, используя при этом их интерполяцию.

 

Урок 6. Специальные математические функции

Урок 6. Специальные математические функции

1. Специальные математические функции

 

Специальные математические функци

  • Ортогональные многочлены
  • Интегральные показательные и родственные им функции
  • Гамма-и полигамма-функции
  • Функции Бесселя
  • Гипергеометрические функции
  • Эллиптические интегралы и интегральные функции
  • Функции Эйри
  • Бета-функция и родственные ей функции
  • Специальные числа и полиномы
  • Специальные математические функции являются решениями линейных дифференциальных уравнений специального вида или представлениями особых интегралов, которые не могут быть выражены через элементарные функции. Здесь не приводятся определения специальных математических функций ввиду их общеизвестности и наличия соответствующей информации в справочной базе данных систем Matheraatica.

    К сожалению, входной язык общения с системами Mathematica 3/4 не предусматривает использования греческих букв для имен специальных функций (хотя палитра с такими буквами есть), и их имена задаются английскими словами. Специальные математические функции удобно подразделять на несколько групп, представленных ниже.

     

    2. Ортогональные многочлены

     

    Ортогональные многочлены

    Одними из широко распространенных специальных функций являются ортогональные многочлены (полиномы). Mathematica имеет следующие функции, возвращающие значения ортогональных многочленов:

    • ChebyshevT [n, х] — полином Чебышева п-й степени первого рода;
    • CyebyshevU [n, x] — полином Чебышева п-йстепени второго рода;
    • HermiteH[n, х] — полином Эрмита п-йстепени;
    • JacobiP[n, a, b, х] — полином Якоби п-й степени;
    • 'GegenbauerC [n, m, х] — полином Гегенбауэра;
    • LaguerreL[n, х] — полином Лагерра n-й степени;
    • LaguerreL[n, а, х] — обобщенный полином Лагерра п-й степени;
    • LegendreP [n, х] — полином Лежандра n-й степени;
    • LegendreP [n, m, x] — присоединенный полином Лежандра;
    • LegendreQ [n, z] — функция Лежандра второго рода n-го порядка;
    • LegendreQ [n, m, z] — присоединенная функция Лежандра второго рода.

    LegendreType — опция для функций LegendreP и LegendreQ; она указывает выборы разрывов кривой для функций Лежандра на комплексной плоскости.

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

    Следующие примеры иллюстрируют работу с ортогональными многочленами.


    Ввод (In) Вывод (Out)
    ChebyshevT [ 8, х] 1 - 32 x 2 + 160 x 4 - 256 x 6 + 128 x 8
    ChebyshevT [5, 0.2] 0.84512
    ChebyshevU [3,0. 15] -0.573
    HermiteH[4,3] 876
    JacobiP[3,l,2,0.2] -0.256
    GegenbauerC [ 3 , 1 , x] -4 x + 8 x 3
    N [LaguerreL [3,x]] 0.166667 (6. -18. x+ 9. x 2 - 1. X 3 )
    LegendreP [ 5 , x ] 15 x /6-35 x 3 /4+63 x 5 /8
    LegendreQ[2,0.2] -0.389202

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

    На рис. 6.1 показаны графики ортогональных полиномов Чебышева ChebyshevT и ChebyshevU. Для этих полиномов характерно изменение от -1 до +1 при \х\<1, причем при высоком порядке полиномов графики функций имеют колебательный характер.

    Рис. 6.1. Графики ортогональных полиномов Чебышева ChebyshevT (сверху) и ChebyshevU (снизу)

    Графики функций полиномов Лагерра LaguerreL и Лежандра LegendreP показаны на рис. 6.2. Они дают представление о поведении этих функций.

    Рис. 6.2. Графики ортогональных полиномов Лагерра LaguerreL и Лежандра LegendreP (снизу)

    На рис. 6.3 представлены графики полиномов Лежандра LegendreQ.

    Рис. 6.3. Графики функций Лежандра LegendreQ (сверху) и полиномов Гегенбауэра GegenbauerC (снизу)

     

    gl6-1.jpg

    Изображение: 

    gl6-2.jpg

    Изображение: 

    gl6-3.jpg

    Изображение: 

    3. Интегральные показательные и родственные им функции

     

    Интегральные показательные и родственные им функции

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

    • Coshlntegralfx] — гиперболический интегральный косинус;
    • Coslntegral [х] — интегральный косинус С1(х);
    • Erf [z] — функция ошибок (интеграл вероятности);
    • Erf[z0, zl] — обобщенная функция ошибок erf (zl)-erf (z0);
    • Erf с [z] — дополняющая функция ошибок 1-erf (z);
    • Erfi [z] — мнимое значение функции ошибок erf (iz) /i;
    • ExplntegralE [n, z] — интегральная показательная функция Е(п,z);
    • ExplntegralEi[z] — интегральная показательная функция Ei(z);
    • Loglntegral [z] — интегральный логарифм li(z);
    • Sinhlntegral [x] — интегральный гиперболический синус;
    • Sinlntegral [х] — интегральный синус 81(лг).

    Ниже представлены примеры применения этих функций.


    Ввод (In)

    Вывод (Out)

    Coshlntegral[1.]

    0.837867

    Coslntegral [1 . ]

    0.337404

    Erf[l.]

    0.842701

    Erf [2. +1*3.]

    -20.8295 + 8.68732 I

    Erf[2.,3.]

    0.00465564

    Erfc[l.]

    0.157299

    Erfi[l.]

    1.65043

    ExplntegralE [3,1.]

    0.109692

    ExpIntegralEi [1 . ]

    1.89512

    Loglntegral [2 . +3 . *I ]

    2.3374 + 2.51301 I

    Sinhlntegral [1 . ]

    1.05725

    Sinlntegral [1 . ]

    0.946083

    На рис. 6.4 представлены графики ряда интегральных показательных функций, дающие представление об их поведении при вещественном аргументе.

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

    Рис. 6.4. Графики интегральных показательных функций

     

    gl6-4.jpg

    Изображение: 

    4. Гамма- и полигамма-функции

     

    Гамма- и полигамма-функции

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

    • Gamma [ а ] — эйлерова гамма-функция;
    • Gamma [ a, z] — неполная гамма-функция;
    • Gamma [a, z 0, z 1 ] — обобщенная неполная гамма-функция Gamma (а, z 0) -Gamma(a,zl);
    • GammaRegularized[a, z] — регуляризованная неполная гамма-функция
    • (а,2)=Gamma(а,z)/Gamma(a);
    • GammaRegularized[a, z0, zl] — обобщенная неполная гамма-функция Q(a,z0)-Q(a, zl);
    • LogGamma [ z ] — логарифм эйлеровой гамма-функции;
    • Pol у Gamma [ z ] — дигамма-функция \|/(z);
    • Pol у Gamma [n, z] — n-я производная от дигамма-функции.

    Приведем примеры вычисления этих функций.


    Ввод (In)

    Вывод (Out)

    Gamma[l,2.+3.*I] -0.133981- 0,.0190985 I
    Gamma [0.5] 1.77245

    Gaitima [1,2. , 3 . ]

    0.0855482

    GammaRegularized [ 1 , 2 . +3 . I , 4 . +6 . *I ]

    -0.139176- 0.0366618 I

    LogGamma [0.5]

    0.572365

    LogGarama [ 2 . +3 . * I ]

    -2.09285 + 2.3024 I

    PolyGamma[l]

    -EulerGamma

    PolyGamma [ 1 . ]

    -0.577216

    PolyGarama [2 . +3 . *I]

    1.20798 + 1.10413 I

    Как видно из этих примеров, данный класс функций (как и многие другие) определен в общем случае для комплексного значения аргумента.

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

    Рис. 6.5. Графики эйлеровой гамма-функции (сверху) и неполной гамма-функции (снизу)

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

    Рис. 6.6. Контурный график эйлеровой гамма-функции на комплексной плоскости

    Графики других гамма-функций пользователь может' построить и просмотреть самостоятельно.

     

    gl6-5.jpg

    Изображение: 

    gl6-6.jpg

    Изображение: 

    5. Функции Бесселя

     

    Функции Бесселя

     

    Функции Бесселя, являющиеся решениями линейных дифференциальных уравнений вида z 2 y" + zy'+ (z 2 - п 2 )у = 0, широко используются в анализе и моделировании волновых процессов. В системе Mathematica к этому классу относятся следующие функции:

    • Bessell[n, z] — модифицированная функция Бесселя первого рода I(n, z);
    • BesselJ[n, z] — функция Бесселя первого рода J(и, z);
    • BesselK[n, z] — модифицированная функция Бесселя второго рода К(п, z);
    • BesselY[n, z] — функция Бесселя второго рода Y(n, z).

    Соотношения между этими функциями хорошо известны. Следующие примеры показывают вычисление функций Бесселя.


    Ввод (In) Вывод (Out)
    Bessell[0,l.] 1.26607
    Bessell[3,l.] 0.0221684
    Bessell[l,2.+3.*I] -1.26098 + 0.780149 I
    Bessell[2,2.+3.*I] 1.25767 + 2.31877 I
    BesselK[2,2.+3.*I] -0.0915555 + 0.0798916 I
    BesselY[2,2.+3.*I] -2.3443 + 1.27581 I
    BesselY[2,2.+3.*I]
    N[BesselJ[l,0.5]] 0.242268
    N[BesselJ[l, 2+1*3]] 3.78068- 0.812781 I

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


    D[BesselJ[l, x], (х, 2}]

    1/2 (-BesselJ[l, x] +

    1/2 (-BesselJ[l, x] +BesselJ[3, x]) )

    Нетрудно заметить, что результат в данном случае также представлен через функции Бесселя.

    В другом примере — вычислении интеграла от функции Бесселя — результат выражается через гипергеометрическую функцию:


    Integrate[BesselJ[2,x],x]

    1/24 x3 HypergeometricPFQ [ { 2/3 }, { 5/2,3}, -x2/4]

    На рис. 6.7 показаны графики функций Бесселя Bessell и BesselJ первых четырех порядков.

    Рис. 6.7. Графики функций Бесселя Bessell (сверху) и Bessell (снизу) первых четырех порядков

    Графики других функций Бесселя вы можете получить самостоятельно. Они представляют меньший интерес, чем графики, приведенные на рис. 6.7.

     

    gl6-7.jpg

    Изображение: 

    6. Гипергеометрические функции. Эллиптические интегралы и интегральные функции

     

    Гипергеометрические функции

    Класс гипергеометрических функций в системе Mathematica представлен следующими встроенными в ядро функциями:

    • HypergeometricU [a, b, z] — конфлюэнтная (вырожденная) гипергеометрическая функция U(a, b, z);
    • Hypergeometric0Fl [a, z] — гипергеометрическая функция 0 F 1 , (; a; z);
    • HypergeometriclFl [а, b, z] — вырожденная гипергеометрическая функция Куммера 2 F 1 (a; b; z);
    • Hypergeometric2Fl [a, b, с, z] — гипергеометрическая функция F 1 (a, b; c, z). Следующие примеры показывают вычисления гипергеометрических функций.
    Ввод (In) Вывод (Out)
    HypergeometricOFl [2 . , 1 . ] 1.59064
    HypergeometricOFl [2 . , 2 . +3 . *I] 1.22457 + 2.31372 I
    HypergeometriclFl [1 . , 2 . , 2 . +3 . *I] -1.03861 + 2.07929 I
    Hypergeometric2Fl[l. ,2. ,3. ,2.+3.*I] 0.0291956 + 0.513051 I

    На рис. 6.8 представлены графики ряда гипергеометрических функций, перечисленных выше. 

    Рис. 6.8. Графики гипергеометрических функций

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

    Эллиптические интегралы и интегральные функции

    В ядро системы Mathematica входят эллиптические функции и функции вычисления эллиптических интегралов:

    • EllipticE [m] — полный эллиптический интеграл Е(т);
    • EllipticE [phi, m] — эллиптический интеграл второго рода Е(Ф\т);
    • EllipticExp [u, {a, b}] — обобщенный экспоненциал, связанный с эллиптической кривой у 2 = х 3 + ах 2 + bx,
    • EllipticExpPrime [и, {а, Ь}] — производная по первому аргументу EllipticExp[u, {a, b}];
    • Elliptic? [phi, m] — эллиптический интеграл первого рода Р(Ф\т);
    • EllipticK[m] — полный эллиптический интеграл первого рода К(т)\
    • EllipticLog [ {х, у}, {а, Ь}] — обобщенный логарифм, связанный ц эллиптической кривой у 2 = л 3 + а х 2 + b т,
    • EllipticNomeQ [m] — возвращает значение q = Exp[-PiEllipticK[l - m]/EllipticK[m]];
    • Elliptic?! [n, phi, m] — эллиптический интеграл третьего рода П(и; Ф\т);
    • Elliptic?! [n, m] — полный эллиптический интеграл П(п|т);
    • EllipticTheta [i, z, q] — эллиптическая тета-функция &.(z, q), где i = i, 2, 3 или 4;
    • EllipticThetaC [u, m] — эллиптическая тета-функция Невилла $ с (и, т);
    • EllipticThetaD [u, m] — эллиптическая тета-функция Невилла $ d (u, m);
    • EllipticThetaN [u, m] — эллиптическая тета-функция Невилла $ п (и, m ) ;
    • EllipticThetaPrime [i, z, q] — производная по второму аргументу эллиптической тета-функции в .(z, q), где i= I, 2, 3 или 4;
    • EllipticThetaS [u, m] — эллиптическая тета-функция Невилла u s (w, т);
    • FresnelCfx] — интеграл Френеля С(х),
    • FresnelS[x] — интеграл Френеля S(x);
    • InverseJacobi** [v, m] — обратная эллиптическая функция Якоби с обобщенным названием **. Возможны следующие наименования для **: CD , CN, CS, DC, DN, DS, NC, ND, NS, SC, SD И SN;
    • JacobiAmplitude [u, m] — амплитуда для эллиптических функций Якоби;
    • Jacobian — опция для FindRoot; может применяться для указания якобиана системы функций, для которых ищется корень;
    • Jacob!** [u, m] — эллиптическая функция Якоби с обобщенным именем **, которое может принимать значения CD, CN, CS, DC, DN, DS, NC, ND, NS, SC, SD и SN;
    • JacobiSymbol [n, m] — символ Якоби от n и in;
    • JacobiZeta [phi, m] — дзета-функция Якоби Z(Ф|m);
    • WeierstrassP [u, g2, g3] — эллиптическая функция Вейерштрасса Р,
    • WeierstrassPPrime [u, g2, g3] — производная эллиптической функции Вейерштрасса Р'по переменной и.

    Приведем примеры использования некоторых из этих функций.


    Ввод (In)

    Вывод (Out)

    EllipticE[0.1]

    1.53076

    EllipticE[Pi,0.1]

    3.06152

    EllipticF [Pi/2 ,0.1]

    1.61244

    EllipticPi[Pi,0.1]

    -0.0266412- 1.09088 I

    EllipticK[0.l]

    1.61244

    FresnelC[1.0]

    0.779893

    FresnelSfl.0]

    0.438259

    JacobiCD[l,0.2]

    0.605887

    JacobiZeta [ Pi , 0 . 5]

    0

    WeierstrassPPrime [1. ,2. ,3.]

    -1.31741

    Эллиптические функции (интегралы) широко используются в оптических расчетах и в астрофизике. На рис. 6.9 показаны графики некоторых эллиптических функций.

    Рисунок 6.10 показывает построение контурного графика на комплексной плоскости с параметрическим заданием функций, выраженных через функцию Якоби и эллиптические интегралы. Нетрудно заметить, что график описывает довольно сложную и специфическую поверхность, содержащую периодические пики и впадины.

    Читателю рекомендуется просмотреть ряд других примеров на использование функций данного раздела (например, в справочной базе данных системы Mathematica).

    Рис. 6.9. Графики некоторых эллиптических функций

    Рис. 6.10. Контурный график с параметрическим заданием комбинированной функции, содержащей функцию Якоби и эллиптические интегралы

     

    gl6-10.jpg

    Изображение: 

    gl6-8.jpg

    Изображение: 

    gl6-9.jpg

    Изображение: 

    7. Функции Эйри

     

    Функции Эйри

     

    Функции Эйри представляют собой независимые решения линейного дифференциального уравнения w"- zw = 0. В Mathematica эти функции представлены следующим набором:

    • AiryAi [z] — возвращает значение функции Эйри Ai(z);
    • AiryAiPrime [ z ] — возвращает значение производной функции Эйри Ai '(z);
    • AiryBi [z] — возвращает значение функции Эйри Bi(z);
    • AiryBiPrime [z] — возвращает производную функции Эйри Bi'(z).

    Ниже представлены примеры на вычисление функций Эйри.


    Ввод (In) Вывод (Out)
    AiryAi [2. +3.*I] 0.00810446 + 0.131178 I
    AiryAi[l.] 0.135292
    AiryBi [2. +3.*I] -0.396368 - 0.569731 I
    AiryBiPrime [2 . +3 . *I] 0.349458 - 1.10533 I

    С функциями Эйри связаны многие специальные математические функции. Эта связь проявляется и при выполнении различных математических операций над функциями Эйри:


    D[AiryAi[x],х]

    AiryAiPrime[x]

    Integrate[AiryBi[x],x]

    {xGamma[1/3 ] HypergeometricPFQ[{1/3 }, {2/3,4/3}, x3/9]} /{3 31/6 Gamma [ 2/3 ] Gamma [ 5/3 ]}

    { x2Gamma[1/3 ] HypergeometricPFQ[{1/3 }, {2/3,4/3}, x3/9]} /{3 35/6 Gamma [ 4/3 ] Gamma [ 5/3 ]}

    Series[AiryBi[x],{x,0,5}]

    {1 /31/6xGamma[2/3]}+ {31/6x /Gamma[1/3]}+ {x3 /631/6Gamma[2/3]}+{x4 /435/6Gamma[1/3]}+O[x]6

    Графики функций, Эйри представлены на рис. 6.11.

    Нетрудно заметить, что при х < 0 они имеют колебательный характер.

    Рис. 6.11. Графики функций Эйри (сверху) и их производных (снизу)

     

    Бета-функция и родственные ей функции

    Класс бета-функций, имеющих специальное интегральное представление, в Mathematica представлен следующим набором:

    • Beta [а, b] — эйлерова бета-функция В(a, b);
    • Beta[z, а, b] — неполная бета-функция;
    • Beta[z0, zl, a, b] — обобщенная неполная бета-функция Beta [z1, a, b] - Beta[z0, а, b];
    • BetaRegularized [z, a> b] — регуляризированная неполная бета-функция I(z,a,b) = Betafz, a, b]/Beta[a, b];
    • BetaRegularized [z0, zl, a, b]—регуляризированная обобщенная неполная бета-функция I(z1l,a,b) - I(z0, a, b).

    Поимепы на вычисление этих функций представлены ниже.


    Ввод (In) Вывод (Out)
    Beta[l.,2.] 0.5
    Beta[l.,2.,3.] 0.0833333
    Beta[2.+3.*I,4.+6.*I,l,2] 4. - 12. I
    BetaRegulari zed [0.1,1,2] 0.19

     

    gl6-11.jpg

    Изображение: 

    8. Специальные числа и полиномы

     

    Специальные числа и полиномы

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

    • BernoulliB [n] — n-е число Бернулли;
    • BernoulliB [n, х] — полином Бернулли n-й степени;
    • Binomial [n, m] — биномиальный коэффициент;
    • Cyclotomic [n, х] — циклотомический полином порядка п по переменной х;
    • EulerE[n] — n-е число Эйлера;
    • EulerE[n, х] — n-й полином Эйлера;
    • EulerPhi [n] — эйлерова функция сумм ф(n) — количество положительных целых чисел, не превосходящих п и взаимно простых с и;
    • Fibonacci [n] — n-е число Фибоначчи;
    • Fibonacci [n, х] — полином Фибоначчи F n (x);
    • Multinomial [n1, n2, . . . ] — мультиномиальный коэффициент (n! + n2 + . . .) !/(n1! n2! ...);
    • NBernoulliB [n] — численное значение n-го числа Бернулли;
    • NBernoulliB [n, d] — n-е число Бернулли с n?-цифровой точностью представления;
    • Pochhammer [а, n] — символ Похгамера;
    • StirlingSl [n, m] — число Стирлинга первого рода;
    • StirlingS2 [n, m] — число Стирлинга второго рода.

    Ниже представлены примеры вычисления данных функций.


    Ввод (In)

    Вывод (Out)

    N [BernoulliB [2]]

    0.166667

    BernoulliB [2, 0.1]

    0.0766667

    Binomial [6, 4]

    15

    Cyclotomic [ 5, х]

    1 + x + x 2 + x 3 + x 4

    Cyclotomic [5,0.2]

    1.2496

    EulerE[2]

    -1

    EulerE[2,0.1]

    -0.09

    EulerPhi [2]

    1

    Fibonacci [10]

    55

    Fibonacci [ 6 , x]

    3 x + 4 x 3 + x 5

    Pochhammer [1,3]

    6

    StirlingSl [8, 4]

    6769

    На рис. 6.12 показаны графики полиномов Бернулли и циклотомического полинома различных порядков.

    Рис. 6.12. Графики полиномов Бернулли (сверху) и циклотомических полиномов (снизу)

    Обратите внимание на то, что здесь использована функция Plot, модифицированная пакетом расширения plot.m, который будет описан в уроке 10. Эта функция позволяет автоматически строить графики ряда функций с линиями разного стиля, что облегчает их распознавание.

    На рис. 6.13 представлены графики полиномов Эйлера EulerE разного порядка п.

    Помимо описанных выше, в ядро системы входит также ряд других, менее распространенных функций. Они описаны в приложении.

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

    Рис. 6.13. Графики полиномов Эйлера разного порядка

     

    gl6-12.jpg

    Изображение: 

    gl6-13.jpg

    Изображение: 

    9. Что нового мы узнали?

     

    Что нового мы узнали

    В этом уроке мы научились:

    • Вычислять ортогональные многочлены.
    • Вычислять интегральные показательные и родственные им функции.
    • Вычислять гамма- и полигамма-функции.
    • Работать с функциями Бесселя разного рода и порядка.
    • Вычислять гипергеометрические функции.
    • Вычислять эллиптические интегралы и интегральные функции.
    • Вычислять функции Эйри.
    • Вычислять бета-функцию и родственные ей функции.
    • Использовать специальные числа и полиномы.

     

    Урок 7. Работа с периферийными устройствами

    Урок 7. Работа с периферийными устройствами

    1. Работа с периферийными устройствами

     

    Работа с периферийными устройствами

    • Функции ввода/вывода
    • Работа со строками
    • Потоки и файлы
    • Запись определений
    • Системные функции

    Если пользователь использует систему Mathematica для выполнения чисто математических расчетов, то он может ничего не знать о подавляющем большинстве описанных в этом уроке функций. Их основное назначение — незаметная поддержка работы с периферийными устройствами ввода/вывода. Однако все функции этого урока открыты для опытных пользователей, стремящихся использовать систему в составе программных комплексов. Здесь рассматривается только часть функций для работы с периферийными устройствами — даны те из них, которые используются достаточно часто. Многие функции этой группы перечислены в приложении.

    Функции ввода/вывода

    Ввод/вывод в системе Mathematica организован с помощью интерфейсного процессора (FrontEnd) настолько естественно, что у большинства пользователей едва ли появится искушение изменять формы ввода/вывода по сравнению с установленными по умолчанию. Тем не менее, это возможно с помощью обширного набора команд, имеющихся в меню системы.

    Более того, система предоставляет пользователю обширные возможности по организации ввода/вывода и различных форм диалога с помощью соответствующих функций, команд, директив и опций. Эти средства входят в язык программирования систем Mathematica и нередко используются для подготовки серьезных документов (например, обучающих и тестирующих программ), а также для создания пакетов расширения.

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

    • Input [ ] — останавливает работу системы и возвращает значение выражения, которое будет введено в появившемся диалоговом окне (служит для организации диалогового ввода);
    • Input [ "prompt" ] — то же, что и предыдущая функция, но с выводом в диалоговое окно комментария prompt;
    • InputString [ ] — выполняет интерактивное чтение в символьную строку;
    • InputString [ "prompt" ] — то же, но с выводом в диалоговое окно комментария prompt;
    • StylePrint [ехрr] — создает в текущем документе новую ячейку со стилем по умолчанию и заносит в нее выражение ехрг;
    • StylePrint[expr,"style"] — создает в текущем документе новую ячейку со стилем style и заносит в нее выражение ехрr;
    • Print [expr] — выводит на экран дисплея значение выражения ехрг; совместно с Input может использоваться для организации диалога;
    • Print ["prompt", expr] — выводит на экран дисплея текстовый комментарий, указанный в кавычках, и следом — значение выражения ехрr.

    Этих функций достаточно для организации простейшего диалога с программой.

    На рис. 7.1 показан простейший пример организации диалога в стиле, принятом в языке Бейсик. В данном случае вычисляется длина окружности с запросом радиуса R.

    Рис. 7.1. Пример организации диалога

    При вычислении документа, приведенного на рис. 7.1, вначале исполняется функция Input. Это ведет к появлению диалогового окна в центре экрана — на рис. 7.1 оно несколько смещено вниз, чтобы не загораживать содержимое ячейки документа. В окне виден запрос, который указан в кавычках как параметр функции Input. После ввода нужного значения (в нашем примере это радиус окружности) и нажатия клавиши Enter или щелчка на кнопке ОК диалогового окна функция Input возвращает введенное значение, и оно присваивается переменной Р.. После этого функция Print выводит на экран вычисленное значение длины окружности с кратким комментарием (рис. 7.2).

    Рис. 7.2. Документ рис. 7.1 по окончании диалога

    Разумеется, для данного примера нет никакого смысла организовывать диалог в такой форме, поскольку однократное вычисление длины окружности проще задать прямо в тексте документа без запроса радиуса — просто указав R = 10. Однако при составлении сложных программ, например ориентированных на многократные вычисления с различными данными по скрытым формулам, такая возможность организации диалога очень полезна. Ее можно использовать и при составлении обучающих программ на базе системы Mathematica.

    К сожалению, комментарий, отображаемый в окне функции ввода Input, возможен только на английском языке — при вводе символов кириллицы вместо обычных надписей выводятся коды (в то же время функция Print исправно выводит комментарии на русском языке). Это связано с выбором для данного окна шрифта, не содержащего символов кириллицы.

     

    gl7-1.jpg

    Изображение: 

    gl7-2.jpg

    Изображение: 

    2. Функции задания формата вывода

     

    Функции задания формата вывода

     

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

    • AccountingForm [ехрг] — выполняет вывод всех чисел, содержащихся в выражении ехрr, в бухгалтерской форме представления;
    • CForm[expr] — выполняет вывод expr в форме, принятой для языка С;
    • EngineeringForm [expr ] — дает вывод, представляя все вещественные числа в выражении expr в инженерной форме (это означает, что порядок чисел равен нулю или кратен трем);
    • FortranForm[expr] — выводит expr в форме, принятой для языка Фортран;
    • FullForm [expr] — выводит полную форму выражения expr без использования специального синтаксиса;
    • InputForm[expr] — выводит expr во входной форме;
    • NumberForm[expr, n] — выполняет вывод expr с вещественными числами, представленными с точностью до n цифр;
    • OutputForm [expr] — выполняет вывод expr в стандартной выходной форме системы Mathematica;
    • ScientificForm [expr] — выполняет вывод, представляя все вещественные числа в выражении expr в научном формате;
    • TeXFormfexpr] — выводит expr в форме, принятой для языка ТеХ, ориентированного на верстку текстов с математическими формулами;
    • TextForm[expr] — выполняет вывод expr в обычном текстовом формате;
    • TreeForm [expr] — выполняет вывод expr с показом разных уровней выражения.

    В большинстве своем действие этих функций вполне очевидно. Если это не так, то смело экспериментируйте с ними. Следующие примеры дают представление об использовании различных форм вывода в системе.


    Ввод (In)

    Вывод (Out)

    Accounting [30*10^15]

    Accounting [30000000000000000]

    BaseForm [55434, 16]

    d88a 16

    CForm[x ^ 2+3*x+x]

    4*x + Power (x, 2)

    ColumnForm [ { а , b , с ) ]

    a b с

    EngineeringForm[N[12*10 A 29] ]

    1.2xl0 30

    Format [Exp [x ^ 2 ] /а]

    e x 2 /a

    FortranForm[Exp[x] ^ 2/а]

    E**(2*x)/a

    HoldForm[Exp[x] ^ 2/а]

    e 2x /a

    NumberForm[N[Exp[2]] ,15]

    7.38905609893065

    OutputForm [Exp [x]^2/a]

    e 2x /a

    TeXForm[Exp [x]^2/a]

    \frac{e^{2\,x}}{a}

    Scientif icForm[12*10 ^ 5]

    1200000

    Приведем еще несколько примеров использования различных форм вывода (здесь содержимое ячеек вывода дано под содержимым ячеек ввода):


    FullForm[Exp[x]^2/а]

    Times[Power[a, -1, Power[E, Times[2, х]]]

    TreeForm[Exp[x]^2/а]

    Times[ , ] Power[a, -1] Power[E, | ]

    Times[2, x]

    PaddedForm[(х^З+2*х^2+3*х-1)/ (x-1) ,3]

    (2 3 -l+3x+2x +x)/(-1 + x)

    PrecedenceForm[12*b/c,5]

    a + 12 b/c

    SequenceForm[Exp[x]^2/a]

    E^2 x/a

    TableForm[{{"x","y"},{l,2},{3,4},{5,6}}]

    x у

    1 2

    3 4

    5 6

    Prefix[f[x^2]]

    2

    f@ (x )

    Unevaluated[Exp[х^(a/b)]/x/a]

    a/b

    Exp[x ] Unevaluated[Exp[x^a/b]/x a]

     

    3. Удаление введенных в ходе сессии определений

     

    Удаление введенных в ходе сессии определений

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

    • Clear [symbol1, symbol2,...] — стирает значения и определения для указанных символов (идентификаторов);
    • Clear ["pattern1", "pattern2",...] — стирает значения и определения для всех символов, чьи имена подходят под любой из указанных строковых шаблонов;
    • ClearAll [symboll, symbo!2,...] — стирает все значения, определения, атрибуты, сообщения и значения, принятые по умолчанию, связанные с указанными символами;
    • ClearAll ["patternl", "pattern2",...] — стирает все символы, чьи имена буквально подходят к одному из указанных строковых образцов;
    • ClearAttributes [s, attr] — удаляет attr из списка атрибутов символа s.

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

    Работа со строками

    Хотя Mathematica ориентирована на математические приложения, в ней достаточно полно представлены функции для работы со строками (strings). Они могут потребоваться как для организации вывода текстовых сообщений (например надписей на графиках), так и для организации текстового диалога при разработке пакетов расширений и приложений системы. К тому же надо постоянно помнить, что Mathematica — система символьной математики, так что символьным преобразованиям, как сугубо математическим, так и общепринятым, в ней, естественно, уделено много внимания.

    Многие функции для работы со строками выполняют общепринятые преобразования, имеющиеся в большинстве языков программирования высокого уровня. Строкой является произвольная цепочка символов, заключенная в кавычки, например "String". Ниже представлены некоторые функции для работы со строками:

    • StringByteCount ["string"] — возвращает полное число байтов, используемых для хранения символов в строке "string";
    • StringDrop ["string", {m, n}] — возвращает строку "string", удалив в ней символы от m до п;
    • StringJoin["sl", "s2",...] или StringJoin [ { "s1", "s2",...}]-формирует строку, содержащую конкатенацию (объединение) указанных строк "s1";
    • Stringlnsert ["string1", "string2",M] — вставляет строку "string2" в строку "string1", начиная с позиции М от начала этой строки (при отри-, цательном М позиция отсчитывается от конца указанной строки);
    • StringLength ["string" ] — возвращает число символов в строке;
    • StringReplace["string", "s1 -> "spl"] или StringReplace["string", {"s1" -> "spl", "s2" -> "sp2",...}] — замещает "s1" на "spi" всякий раз, когда они появляются как подстроки "string";
    • StringReverse ["string"] — меняет порядок символов в строке "string" на противоположный;
    • StringPosition["string", "sub"] — возвращает список с позициями строки "sub" в строке "string" (дополнительные формы см. в справочной системе);
    • StringTake ["string", n] — возвращает строку, состоящую из первых п символов строки "string";
    • StringTake ["string", -n] — возвращает последние п символов из строки "string";
    • StringTake ["string", {n}] — возвращает n-й символ в строке "string";
    • StringTake ["string", {m, n}] — возвращает строку из символов, расположенных в позициях от m до п строки "string".

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


    Ввод (In) Вывод (Out)
    StringByteCount [ "Hello ! " ] 6
    StringDrop ["Hello my friend!", 6] my friend!
    StringDrop ["Hello my friend! ", -10] Hello
    StringDrop ["Hello my friend! ", {7}] Hello у friend!
    StringDrop [ "Hello my friend ! " , { 6 , 8 } ] Hello friend!
    Stringlnsert ["Hello friend!"," my", 6] Hello my friend!
    StringJoin ["Hello"," my "]<>"friend!" Hello my friend!
    StringLength [ "Hello" ] 5
    StringPosition[ "Hello my friend! ", "e"] {{2, 2}, {13, 13}}
    StringReplace["Hilo" , "i"->"el"] Hello
    StringReverse [ "Hello ! " ] !olleH
    StringTakef "Hello my friend!", 6] Hello
    StringTake[ "Hello my friend!", -8] friend!
    StringTake [ "Hello my friend ! " , { 7 , 9 } ] my

    Отметим еще несколько функций, относящихся к работе с символами и строками:

    • FromCharacterCode [n] — возвращает строку, состоящую из одного символа с кодом n;
    • FromCharacterCode [ {n1, n2,...}] — возвращает строку, состоящую из последовательности символов с кодами ni;
    • Characters ["string"] — возвращает список целочисленных кодов, соответствующих символам строки "string";
    • ToLowerCase ["string"] — производит строку, в которой все буквы преобразованы в нижний регистр;
    • ToString [expr] — возвращает строку, соответствующую форме вывода выражения ехрг. Опции устанавливают ширину линии, тип формата и т. д.;
    • ToUpperCase [ "string" ] — вырабатывает строку, в которой все буквы преобразованы в верхний регистр;
    • Unique [ ] — создает новый символ с именем в форме $nnn (nnn — уникальный порядковый номер);
    • Unique [х] — создает новый символ с именем в форме x$nnn (nnn — уникальный порядковый номер);
    • Unique [ {х, у,...}]— создает список новых символов с уникальными именами;
    • Unique [ "ххх" ] — создает новый символ с именем в форме xxxnnn (nnn — уникальный порядковый номер);
    • Unique [name, {attrl, attr2,...}] — создает символ с указанными атрибутами attri;
    • UpperCaseQ [string] — возвращает True, если все символы строки string являются прописными буквами (верхнего регистра), иначе возвращает False.

    Примеры, приведенные ниже, показывают работу с этими функциями.

    Ввод (In)

    Вывод (Out)

    ToCharacterCode [ "Hello ! " ]

    {72,101,108,108,111,33}

    FromCharacterCode [ {72 , 101 , 108 , 108 , 111 , 33} ]

    Hello!

    ToExpression [ "2+3*4 " ]

    14

    ToLowerCase [ "HeLLo ! " ]

    hello!

    ToUpperCase [ "Hello" ]

    HELLO

     

    Ввод (In)

    Вывод (Out)

    x:=ToString[2+3*4]

    X

    14

    Unique [ ]

    $1

    Unique [xyz]

    xyz$2

    Unique [xyz]

    xyz$3

    UpperCaseQ [ "Hello" ]

    False

    UpperCaseQ [ "HELLO" ]

    True

     

    4. Потоки и файлы

     

    Потоки и файлы

     

    Система Mathematica имеет развитые средства для работы с потоками (streams) и файлами (files). Под потоком подразумевается непрерывная последовательность данных, циркулирующих внутри компьютера. Обмен потоками происходит практически непрерывно, например, при вводе поток ввода поступает от клавиатуры в компьютер, при печати поток данных поступает от компьютера в принтер через порт принтера и т. д.

    Файлом является упорядоченная структура данных, имеющая имя и хранящаяся на каком-либо носителе, чаще всего на магнитном диске. Файлы могут иметь различные форматы и различный тип доступа к хранимой на них информации. Наиболее распространенные в системе Mathematica файлы документов являются файлами с последовательным доступом и имеют текстовый формат.

    Последовательный доступ означает, что информация из открытого файла может быть считана строго последовательно от его начала до конца, отмеченного специальной меткой. Это напоминает считывание с магнитофонной кассеты. Текстовый формат означает, что все данные записаны в виде ASCII-кодов. Следовательно, прочесть такой файл можно с помощью любого текстового редактора, работающего с текстами в виде ASCII-кодов.

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

    Упрощенная работа с файлами

    Прежде чем рассматривать весьма обширные возможности системы по работе с файлами в целом, отметим упрощенный прием вызова файла с помощью двойного символа «<<»:


    <<filename

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


    Get["filename", key]

    Для записи объекта (переменной, массива, списка и т. д.) в файл служат упрощенные команды:

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

    Указанные команды по существу есть укороченные (и потому более удобные) формы следующих функций:

    • Get ["filename", "key"] — читает файл, который закодирован функцией Encode с использованием ключа "key";
    • GetContext [ "context' " ] — загружает файл с заданным контекстом;
    • Put[exprl, expr2, ..., "filename"] — записывает последовательность выражений expri в файл с именем filename;
    • PutAppend[expr1, expr2, ..., "filename"] — присоединяет последовательность выражений expri к файлу с именем filename.

    Еще одна упрощенная функция — ! ! filename — выводит содержимое файла с заданным именем.

    Следующие примеры показывают запись списка в файл C:\ma.vat, его считывание, затем добавление в файл еще одного списка и контроль контекста файла:


    {{l,2,3},{4,5,6},{a,b,c}}>>C:\ma.val

    <<С: \ma. val

    {{1, 2, 3}, {4, 5, б), {а, b, с}} {d,e,f}>>>C: \ma.val

    <<С: \та. val

    {d, e, f}

    !!С:\mа.val

    1, 2, 3, 4, 5, б, а, b, с d, e, f

    Такая форма вызова особенно удобна для вызова файлов пакетов расширений и применений системы. Имя файла указывается по правилам, принятым в MS-DOS. Файлы пакетов применений имеют расширение .т. Мы уже приводили примеры использования определений, содержащихся в файлах пакетов расширения системы.

    Имеется еще ряд функций для работы с файлами:

    • ReadList ["filename" ] — читает все оставшиеся в файле "filename" выражения и возвращает их в виде списка;
    • ReadList ["filename", type] — читает из файла "filename" объекты указанного типа type до конца файла. Возвращает список считанных объектов;
    • ReadList ["filename", {typel, type2,...}] — читает объекты указанных типов type1 до конца файла filename;
    • ReadList [ "filename", types, n] — читает только первые п объектов указанных типов types из файла filename;
    • Save ["filename", x1, x2,...] — создает файл с заданным именем filename, содержащий значения переменных x1, х2, ...;
    • ! command — исполняет заданную команду операционной системы.

    Допустим, что в любом текстовом редакторе создан файл с полным именем C:\datas.txt в ASCII-формате, содержащий просто шесть чисел с разделительными пробелами, размещенные в двух строках и представляющие массив 2x3 элемента:


    1 11.2 34.5

    2. 3.4 56

    Тогда о структуре файла можно судить, используя команду


    !!С:\datas.txt

    1 1.2 34.5 2. 3.4 56.

    Нетрудно заметить, что структура файла соответствует структуре массива. Однако считывание файла командой «name дает следующий результат:


    <<С: \datas. txt

    380.8

    Результат представляет вычисленное выражение второй строки файла. Считывание функцией ReadList без дополнительного аргумента также дает ошибочный результат:


    ReadList["С:\datas.txt"]

    {41.4, 380.8}

    Нетрудно подметить, что функция восприняла каждую строку содержимого файла как результат перемножения трех чисел (пробел на языке Mathematica означает умножение). С дополнительным параметром Number все числа считываются верно:


    ReadList["С:\datas.txt", Number]

    {1, 1.2, 34.5, 2., 3.4, 56.}

    Однако мы получили одномерный список — данные просто считываются построчно. Применение дополнительного параметра в виде {Number, Number} дает следующий результат:


    ReadList["С:.txt", {Number, Number}]

    {{1, 1.2), {34.5, 2.}, {3.4, 56.}}

    Правильный результат можно получить, используя опцию RecordList->True: .


    ReadList["C:.txt",Number,RecordLists-XTrue]

    {{1, 1.2, 34.5), {2., 3.4, 56.}}

    Для загрузки файлов пакетов расширений (Add-On) используются функции, позволяющие задать контекст файлов (подробнее о контекстах речь пойдет в уроке 10):

    • Needs ["context' ", "filename"] — загружает файл, если указанный контекст отсутствует в списке загруженных;
    • Needs [ "context s " ] — загружает файл, имя которого определяется с помощью функции ContextToFilename [ "context ч " ], если указанный контекст отсутствует в списке загруженных.

    Загрузка файлов с указанием их контекстов позволяет избежать конфликтов между разными пакетами расширения, используемыми одновременно (см. более подробно урок 10).

     

    5. Использование файлов других языков программирования

     

    Использование файлов других языков программирования

     

    Из функций для работы с файлами особо надо отметить следующую функцию-директиву:

    • Splice [ "file .mx" ] — вставляет в файлы на других языках программирования вычисленные выражения системы Mathematica, которые должны быть записаны в скобках вида <* и *>;
    • Splice ["infile", "outfile"] — читает файл infile, интерпретирует фрагменты, содержащиеся между скобками <* и *>, и записывает результат в файл outfile.

    Эта возможность особенно существенна при использовании программ на языках программирования С (расширение .me), Fortran (расширение .mf) и ТеХ (расширение .mtex), для форматов которых Mathematica имеет средства конвертирования выражений (CForm, FortranForm и TexForm соответственно). Таким образом, имеется возможность экспорта выражений системы Mathematica в программы, составленные на этих языках.

    Поясним применение функции-директивы Splice. Пусть имеется экспортированная программа на языке С, которая должна рассчитывать численное значение некоторого интеграла, и мы хотим получить формулу для этого интеграла средствами системы Mathematica. Допустим, она представлена файлом demo.me. Его можно просмотреть следующим образом:


    !!demo.me

    #include "mdefs.h"

    double f(x)

    double x;

    {

    double y;

    у = <* Integrate[Sin[x]^5, x] *> ;

    return (2*y- 1) ;

    }

    После исполнения функции Splice ["demo.me"] программа будет записана в файл demo.с, в котором выражение в скобках <*...*> заменено вычисленным значением интеграла (в форме CForm). Файл при этом будет выглядеть так:


    !!demo.с

    #include "mdefs.h" double f(x) double x;

    {

    double y;

    у = -5*Cos(x)/8 + 5*Cos(3*x)/48- Cos(5*x)/80 ;

    return (2*y- 1) ;

    }

    Запись определений

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


    Save ["filename", symb1, symb2,...]

    Она добавляет определения символов symbi к файлу filename (возможны упрощенные формы Save).

    Приведем пример ее использования:


    f[x_] = Sin[x] + y

    у+ Sin[x]

    у=а

    а

    Save["demol",f]

    !!demol

    f[x_] = у + Sin[x]

    у = а

     

    6. Другие функции для работы с файлами

     

    Другие функции для работы с файлами

     

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

    Рассматривая обширный список файловых и поточных операций, можно поневоле сделать вывод об их избыточности. Но здесь действует простое правило: не хочешь применять эти функции — не применяй! Они рассчитаны на пользователя, всерьез занимающегося стыковкой систем Mathematica с другими программными системами.

    Важное место занимают функции, дающие информацию о директориях, файлах и потоках. К ним относятся следующие функции:

    • Directory [ ] — возвращает текущий рабочий каталог;
    • DirectoryStack [ ] — возвращает содержимое стека каталогов, которое представляет последовательность используемых в текущем сеансе каталогов;
    • $Display— возвращает список файлов и каналов (pipes— канал или абстрактный файл), используемый функцией вывода $DisplayFunction по умолчанию;
    • FileByteCount ["filename"] — возвращает количество байтов в файле;
    • FileDate ["filename"] — возвращает дату и время последней модификации файла в виде списка;
    • Filelnformation ["filename"] — возвращает информацию о файле;
    • FileNames [ ] — приводит список всех файлов в текущем рабочем каталоге;
    • FileNames [" form" ] — перечисляет все файлы в текущем рабочем каталоге, чьи имена совпадают с шаблоном form;
    • FileNames [{ "forml", "form2",...} ] — перечисляет все файлы, чьи имена соответствуют любому из шаблонов formi;
    • FileNames [forms, {"dirl", "dir2",...} ] — перечисляет файлы с именами, соответствующими шаблонам forms, в любом из указанных каталогов diri;
    • FileType ["filename"] — возвращает тип файла: File, Directory или None (если указанного файла не существует);
    • $HomeDirectory — дает имя «домашней» директории пользователя;
    • $Output — дает список файлов и каналов, в которые направляется стандартный вывод системы Mathematica;
    • ParentDirectory [ ] — возвращает имя родительского каталога для текущего рабочего каталога;
    • ParentDirectory ["dir"] — возвращает имя родительского каталога для каталога dir;
    • $ Path — дает список каталогов для просмотра при попытке поиска внешнего файла;
    • StreamPosition [stream] — возвращает целое число, которое указывает позицию текущей точки в открытом потоке stream;
    • Streams [ ] — возвращает список всех потоков, открытых в данный момент;
    • Streams ["name" ] — перечисляет только потоки с указанным именем name.

    Приведенные ниже примеры иллюстрируют использование большинства из этих достаточно простых функций:


    Directory[]

    C:\PROGRAM FILES\WOLFRAM RESEARCH\MATHEMATICA\4.0

    DirectoryStack[]

    {} / $Display

    stdout

    FileByteCount["C:.val"]

    46

    FileDatef'C: .val"]

    {1999, 8, 3, 16, 4, 44}

    FileInformation["C:.val"]

    {File->C:\ma.val, FileType->File, Date -> 3142685084, ByteCount ->46}

    Filenames[]

    {Examples, FILES, MATHEMATICA.EXE,

    MATH.EXE, MATHINSTALLER.EXE, MATHKERNEL.EXE}

    FileType["C:.val"]

    File HomeDirectory[]

    c:\ $0utput

    {OutputStream[stdout, 1]}

    ParentDirectory[]

    С: \m3 Streams[]

    {OutputStream[stdout, 1],

    OutputStream[stderr, 2]}

    Высказанное выше соображение об избыточности набора операций вполне применимо и для этих функций.

    Функции времени и даты

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

    Имена многих, вспомогательных с точки зрения конечного пользователя, системных функций начинаются с символа $. Ниже описаны основные системные функции.

    Ряд системных функций служит для получения информации о времени и текущей дате:

    • AbsoluteTime[ ] — возвращает полное количество секунд, прошедших с момента 1 января 1900 г.;
    • $CreationDate — возвращает дату и время создания используемой версии системного ядра Mathematical
    • Date [ ] — возвращает текущее значение даты и времени в виде {год, месяц, день, час, минута, секунда};
    • FromDate [date] — превращает дату date вида {год, месяц, день, час, минута, секунда} в число секунд, прошедших с 1 января 1900 г.;
    • TimeUsedt ] — возвращает полное количество секунд процессорного времени, использованного на данный момент в текущем сеансе Mathematical
    • $TimeUnit — возвращает минимальный временной интервал в секундах, который можно зарегистрировать в вашей компьютерной системе;
    • TimeZone [ ] — возвращает часовой пояс, установленный для вашей компьютерной системы;
    • Timing [ехрг] — вычисляет ехрг и возвращает список, состоящий из значения затраченного времени и результата вычислений;
    • ToDate [time] — преобразует абсолютное время в секундах, прошедшее с 1 января 1900 г., в дату вида {год, месяц, день, час, минута, секунда}.

    Следующие примеры иллюстрируют применение некоторых из этих функций.


    Ввод (In)

    Вывод (Out)

    AbsoluteTime [ ]

    2967708137

    Date[]

    {2000, 7, 16,11, 23, 8}

    FromDate [ {2000 ,7,15,4,51,30}]

    3172625490

    SessionTime[]

    8171.1

    TimeUsedf]

    69.57

    Их действие вполне очевидно и не требует комментариев.

     

    7. Общесистемные функции

     

    Общесистемные функции

     

    Ниже представлены функции общесистемного характера:

    • $Aborted — возвращает сообщение о прекращении вычислений при их прерывании функцией Abort [ ];
    • AbortProtect [ехрг] — вычисляет ехрг, запоминая все попытки прерывания, но не выполняя их до тех пор, пока не будет завершено вычисление либо пока не будет вызвана процедура CheckAbort;
    • Accuracy [x] — указывает число цифр в числе х после десятичной точки, которое используется при вычислениях;
    • ByteCount [expr] — возвращает число байт, которое используется для представления выражения ехрг;
    • Environment [ "var" ] — возвращает значение переменной окружения операционной системы с именем "var";
    • $ Line — глобальная переменная, указывающая номер текущей строки ввода;
    • $MachineEpsilon — возвращает машинную точность представления — наименьшее число, которое, будучи прибавленным к 1.0, даст результат, отличный от 1.0;
    • $MachineID — строка, которая возвращает, если возможно, уникальный код идентификации применяемого компьютера;
    • $MachineName — строка, возвращающая имя, которое присвоено используемому компьютеру, если такое имя определено;
    • $MachinePrecision — возвращает количество десятичных знаков точности представления чисел;
    • $MachineType — строка, возвращающая общий тип компьютера, на котором запущена система Mathematical
    • $MinMachineNumber — наибольшее машинно-представимое число, которое может применять данная компьютерная система;
    • $MaxNumber — возвращает наибольшее из представимых в системе Mathe-matica чисел;
    • $MinMachineNumber — наименьшее положительное машинно-представимое число, которое может применять данная компьютерная система;
    • $MinNumber — возвращает наименьшее (положительное) представимое в системе Mathematica число;
    • $OperatingSystem — строка, дающая тип операционной системы, под управлением которой работает Mathematica;
    • Pause [n] — выдерживает паузу не менее п секунд;
    • $ReleaseNumber — целое число, которое дает младший номер версии ядра данной системы Mathematica;
    • $Remote — имеет значение True, если Mathematica применяется в дистанционном режиме или с программным препроцессором, иначе — значение False;
    • $SessionID — уникальный номер, который присвоен данному сеансу системы Mathematica;
    • SessionTime[ ] — возвращает полное число секунд реального времени, прошедшего с момента начала вашего сеанса работы в системе Mathematica; -
    • $System — представляет собой строку с указанием типа используемой компьютерной системы;
    • $Version — символьная строка, которая представляет используемую версию системы Mathematica;
    • $VersionNumber — вещественное число, которое дает полный номер текущей версии системного ядра Mathematica.

    Ниже приведены примеры использования ряда общесистемных функций.


    Ввод (In)

    Вывод (Out)

    Accuracy [12. 34]

    15

    ByteCount [Exp [x] A 2/a]

    120

    $Version

    4.0 for Microsoft Windows (April 21, 1999)

    $ System

    Microsoft Windows

    $Path

    {C:\Program FilesXCommon Files\Mathematica\ 4.0\Kernel, C:\Program FilesXCommon Files\ Mathematical . 0\AddOns\Autoload, ... }

    $OperatingSystem

    Windows 9 5

    $MachineEpsilon

    2.22045xl0 -16

    $MaxMachineNumber

    1.79769xl0 308

    $MinMachineNumber

    2.22507x10 -308

    $MachinePrecision

    16

    $Packages

    {Global 4 , System 4 }

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

    Что нового мы узнали?

    В этом уроке мы научились:

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

     

    Урок 8. Графика и звук

    Урок 8. Графика и звук

    1. Графика и звук

     

    Графика и звук

    • Двумерные и трехмерные графики
    • Опции графических функций
    • Графические директивы
    • Построение графиков лоточкам
    • Получение информации о графических объектах
    • Перестройка и комбинирование графиков
    • Примитивы двумерной и трехмерной графики
    • Импорт графических изображений
    • Вставка объектов
    • Синтез звуков

    Графика, как важнейшее средство визуализации вычислений, всегда была козырной картой системы Mathematica и во многом способствовала ее высокой репутации как мирового лидера среди систем компьютерной математики. Обширные графические возможности достигаются при небольшом числе встроенных функций графики за счет их модификации с помощью опций и директив. Благодаря этому Mathematica позволяет строить практически любые виды графиков. Для просмотра и изменения опций графика можно (выделив ячейку с графиком) воспользоваться описанным ранее инспектором опций, в котором есть соответствующий раздел. Однако в этом уроке мы инспектором опций пользоваться не будем — все необходимые опции будут вводиться в соответствующие функции так, как это принято делать при программировании задач графики.

     

    2. Двумерная графика

     

    Двумерная графика

     

    Графическая функция Plot

    Концептуально графики в системе Mathematica являются графическими объектами, которые создаются (возвращаются) соответствующими графическими функциями. Их немного, около десятка, и они охватывают построение практически всех типов математических графиков. Как уже отмечалось, достигается это за счет применения опций и директив.

    Поскольку графики являются объектами, то они могут быть значениями переменных. Поэтому Mathematica допускает следующие конструкции:

    • Plot[Sin[x],{x,0,20}] — построение графика синусоиды;
    • g:=Plot [Sin [x], {х, 0, 20} ] — задание объекта — графика синусоиды — с отложенным выводом;
    • g=Plot [Sin [x], {х, 0, 20} ] — задание объекта — графика синусоиды — с немедленным выводом.

    Начнем рассмотрение графических возможностей системы с построения простейших графиков функций одной переменной вида у =f(x) или просто f(x). График таких функций строится на плоскости, то есть в двумерном пространстве. При этом используется прямоугольная (декартова) система координат. График представляет собой геометрическое положение точек (х, у) при изменении независимой переменной (абсциссы) в заданных пределах, например от минимального значения xmin до максимального хтах с шагом dx. По умолчанию строятся и линии координатной системы.

    Для построения двумерных графиков функций вида f(x) используется встроенная в ядро функция Plot:

    • Plot [f, {x, xmin, xmax}] — возвращает объект, представляющий собой график функции f аргумента х в интервале от xmin до xmax;
    • Plot[{f1, f2,...}, {x, xmin, xmax}]— возвращает объект в виде графиков ряда функций fi.

    Функция Plot используется для построения одной или нескольких линий, дающих графическое представление для указанных функций f, f1, f2 и т. д. На рис. 8.1 показано построение графика функции sin(x)/x без использования каких-либо опций (точнее, с набором опций по умолчанию).

    Рис. 8.1. Построение двумерного графика

    Тут виден как раз тот случай, когда масштаб графика по вертикали выбран системой неудачно — часть графика сверху просто отсекается. В большинстве же случаев применение функции Plot позволяет получить вполне «удобоваримый» график.

    Опции функции Plot

    По мере усложнения задач, решаемых пользователем, его рано или поздно перестанут устраивать графики, получаемые при автоматическом выборе их стиля и иных параметров. Для точной настройки графиков Mathematica использует специальные опции графических функций Для вывода их списка надо использовать команду Options [Plot]. Полный список опций дан в приложении.

    Опции внутри.графических функций задаются своим именем name и значением value в виде


    name -> value

    Наиболее распространённые символьные значения опций:

    • Automatic — используется автоматический выбор;
    • None — опция не используется;
    • All — используется в любом случае;
    • True — используется;
    • False — не используется.

    Многие опции могут иметь числовые значения. В сомнительных случаях рекомендуется уточнять форму записи опций и их значений по оперативной справочной смстеме. Рассмотрим примеры применения опций двумерной графики.

    Мы уже отметили неудачный выбор масштаба в случае, представленном на рис. 8.1. Очевидно, этот недостаток графика легко исправить, введя коррекцию масштаба по оси у. Это и сделано в примере, показанном на рис. 8.2. Для изменения масштаба использована опция PlotRange->{ -.25,1.2}. Нетрудно догадаться, что эта опция задает пределы отображения графика по вертикали от -0.25 до 1.2.

    Рис. 8.2. График функции sin(x)/x с масштабом, дающим его отображение в полном виде

    По умолчанию система строит графики, не указывая надписей ни по осям координат (кроме букв х и г/), ни в верхней части графика. Такая надпись на графике по центру сверху называется титульной. Рисунок 8.3 показывает построение графика с надписями у координатных осей. Для создания таких надписей используется опция Axes Label. После нее указывается список, содержащий две надписи — одну для оси х, вторую — для оси у. Надписи указываются в кавычках. Таким образом, задание опции выглядит следующим образом: AxesLabel-> {"X value","f(x)}.

    Рис. 8.3. График с надписями по координатным осям

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

    Рис. 8.4. График без координатных осей, но с титульной надписью

    Часто возникает необходимость построения на одном рисунке нескольких графиков одной и той же функции, но при разных значениях какого-либо параметра — например, порядка специальных математических функций. В этом случае они могут быть заданы в табличной форме. Рисунок 8.5 дает пример построения пяти графиков функций Бесссля.

    Рисунок 8.5 иллюстрирует недостаток одновременного представления нескольких графиков, создаваемого по умолчанию, — все графики построены одинаковыми линиями, и не сразу ясно, какой график к какой функции относится. Рисунок 8.6 показывает возможности управления стилем линий (густотой черного цвета) графиков с помощью опции PlotStyle. Если желательно выделение линий разными цветами, удобно использовать в качестве значения опции PlotStyle список вида {Hue [cl] , Hue [с2] ,...}, где параметры c1, с2, ... выбираются от 0 до 1 и задают цвет соответствующей кривой.

    Рис. 8.5. Семейство функций Бесселя на одном графике

    Риc. 8.6. Построение графиков линиями разного стиля

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

    Директивы двумерной графики

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

    • AbsoluteDashing [ {dl, d2,...}]— задает построение последующих линией пунктиром со смежными (последовательными) сегментами, имеющими абсолютные длины dl, d2, ... (повторяемые циклически). Значения длины di задаются в пикселях;
    • AbsolutePointSize [d] — задает построение последующих точек графика в виде кружков с диаметром d (в пикселях);
    • AbsoluteThickness [d] — задает абсолютное значение толщины (в пикселях) для последующих рисуемых линий;
    • Dashing [{rl, r2,...}] — задает построение последующих линий пунктиром с последовательными сегментами длиной rl, г2, ..., повторяемыми циклически, причем ri задается как доля полной ширины графика;
    • PointSize [d] — задает вывод последующих точек графика в виде кружков с относительным диаметром d, заданным как доля общей ширины графика;
    • Thickness [r] — устанавливает для всех последующих линий толщину г, заданную как доля полной ширины графика.

    Рисунок 8.7 показывает построение графика функции Бесселя в виде пунктирной линии. Она задается с помощью графической директивы Dashing.

    Риc. 8.7. Построение графика функции Бесселя с применением графической директивы Dashing

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

    Построение графика по точкам — функция List Plot

    Часто возникает необходимость построения графика по точкам. Это обеспечивает встроенная в ядро графическая функция ListPlot:

    • ListPlot [ {yl, у2,...}]— выводит график списка величин. Координаты х принимают значения 1, 2, ...;
    • ListPlot [{{x1, y1}, {х2, у2 },...}]—выводит график списка величин с указанными х- иy-координатами.

    В простейшем случае (рис. 8.8) эта функция сама задает значения координаты х= 0, 1, 2, 3, ... и строит на графике точки с координатами (х, у), выбирая у последовательно из списка координат.

    Рис. 8.8. Построение графика по точкам

    Можно заметить характерный недостаток построений — точки (особенно при небольшом размере) имеют вид, заметно отличающийся от идеального круга. Функция ListPlot, особенно в ее второй форме (с заданными координатами х и г/), удобна для вывода на график экспериментальных точек.

    Получение информации о графических объектах

    Порой некоторые детали построения графиков оказываются для пользователя неожиданными и не вполне понятными. Причина этого кроется во множестве опций, которые могут использоваться в графиках, причем в самых различных сочетаниях. Поэтому полезно знать, как можно получить информацию о свойствах графических объектов. Порой небольшая модификация опций (например, замена цвета линий или фона) делает график полностью удовлетворяющим требованиям пользователя. Информацию об опциях графического объекта g дают следующие функции:

    • FullAxes [g] — возвращает список опций координатных осей;
    • Options [g] — возвращает упрощенный список опций;
    • FullOptions [g] — возвращает полный список опций;
    • InputForm[g] — возвращает информацию о графике (включая таблицу точек).

    Пусть задан графический объект g: g:=Plot[Sin[x],{х,-10,10}]

    Ниже представлено получение упрощенного списка опций этого графического объекта:


    Options[g]

    {PlotRange -> Automatic, AspectRatio ->1/GoldenRatio,

    DisplayFunction :> $DisplayFunction, ColorOutput -> Automatic, Axes -> Automatic, AxesOrigin -> Automatic, PlotLabel -> None, AxesLabel -> None, Ticks -> Automatic, GridLines -> None, Prolog -> {}, Epilog -> {}, AxesStyle -> Automatic, Background -> Automatic, DefaultColor -> Automatic, DefaultFont :> $DefaultFont, RotateLabel -> True, Frame -> False, FrameStyle -> Automatic, FrameTicks -> Automatic!, FrameLabel -> None, PlotRegion -> Automatic, ImageSize -> Automatic, TextStyle :> $TextStyle, FormatType :> $FormatType}

    Для получения полного списка опций вместе с их значениями можно использовать функцию FullOptions. Аналогично можно получить и иные данные — они не приводятся ввиду громоздкости выводимой информации. Анализ графиков с применением этих функций может оказаться весьма полезным при построении и редактировании сложных графиков.

    Функции FullOptions и Options можно также использовать в следующем виде:

    • Options [g, option] — возвращает значение указанной опции option;
    • FullOptions [g, option] — возвращает значение указанной опции option.

    В этом случае можно получить информацию по отдельной опции.

    Перестроение и комбинирование графиков

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

    • Show [plot] — построение графика;
    • Show [plot, option -> value] — построение графика с заданной опцией;
    • Show[plotl, plot2,...] — построение нескольких графиков с наложением их друг на друга.

    Директива Show полезна также и в том случае, когда желательно, не трогая исходные графики, просмотреть их при иных параметрах. Соответствующие опции, меняющие параметры графиков, можно включить в состав директивы Show. Другое полезное применение директивы — объединение на одном графике нескольких графиков различных функций или объединение экспериментальных точек и графика теоретической зависимости. Для этого также удобна функция Display-Together, которая будет описана при описании пакета расширения Graphics в уроке 14. В отличие от функции Show, она позволяет объединять графики без предварительного построения каждого из них.

    Рисунок 8.9 показывает создание двух графических объектов g1 и g2 с отложенным выводом, а затем построение графиков функций и применение директивы Show для создания объединенного графика. В этом случае директива Show вначале строит исходные графики отдельно, а затем создает объединенный график. В приведенных ниже примерах оставлен только объединенный график, другие удалены командой меню Edit > Clear.

    Рис. 8.9. Построение двух графических объектов и их объединение

    Разумеется, при использовании директивы Show надо побеспокоиться о выравнивании масштабов графиков, налагаемых друг на друга. Полезно особо обратить внимание на возможность присваивания графиков функций переменным (в нашем примере — g1 и g2) в качестве значений. Такие переменные становятся графическими объектами, используемыми директивой Show для вывода на экран дисплея.

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

    Примитивы двумерной графики

    Примитивами двумерной графики называют дополнительные указания, вводимые в функцию Graphics [primitives, options], которая позволяет выводить различные примитивные фигуры без задания математических выражений, описывающих эти фигуры. Примитивы могут выполнять и иные действия. Они заметно увеличивают число типов графиков, которые способна строить система Mathematica. Имеются примитивы для построения окружностей, эллипсов, кругов, овалов, линий и полигонов, прямоугольников и текстов. Полное описание примитивов дано в разделе приложения, посвященном данному уроку. Примитивы задаются подобно графическим функциям, например, Circle[{x, у}, r] строит окружность с радиусом г и центром в точке {х, у}.

    Рисунок 8.10 показывает применение функции Graphics для построения одновременно трех графических объектов: отрезка прямой, заданного координатами его концевых точек, окружности с центром (0, 0) и радиусом 0.8 и текстовой надписи «Привет!». Каждый объект задан своим примитивом. Из-за искажения масштаба дисплеем компьютера окружность выглядит как эллипс.

    Рис. 8.10. Построение трех графических объектов с помощью примитивов двумерной графики

    На другом рисунке (рис. 8.11) представлено построение пятиугольника, заданного координатами его вершин.

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

    Рис. 8.11. Построение пятиугольника

     

    Графики функций, заданных в параметрической форме

    Построение графиков в полярной системе координат возможно двумя способами. Первый способ основан на использовании обычной декартовой системы координат. Координаты каждой точки при этом задаются в параметрическом виде: x = f x (t) и у = f y (t), где независимая переменная t меняется от минимального значения £ min до максимального t mах с шагом dt. Особенно удобно применение таких функций для построения замкнутых линий, таких как окружности, эллипсы, циклоиды и т. д. Например, окружность радиусом R может быть задана в следующей параметрической форме: х = R cos(t) и у = R sin(t), если t меняется от 0 до 2п. В общем случае радиус также может быть функцией параметра t.

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

    • ParametricPlot [ {fx, fy}, {t, tmin, tmax} ]—строит параметрический график с координатами f х и f у (соответствующими х и у), получаемыми как функции от t;
    • ParametricPlot [{{fx, fy}, {gx, gy},...}, {t, tmin, tmax}] —строит графики нескольких параметрических кривых.

    Функции f x, f у и т. д. могут быть как непосредственно вписаны в список параметров, так и определены как функции пользователя.

    Рисунок 8.12 показывает построение параметрически заданной фигуры Лиссажу. Она задается функциями синуса и косинуса с постоянным параметром R и аргументами, кратными t. Эти фигуры наблюдаются на экране электронного осциллографа, когда на его входы X и Y подаются синусоидальные сигналы с кратными частотами.

    Рис. 8.12. Построение фигуры Лиссажу

    На одном графике можно строить две и более фигур с заданными параметрически уравнениями. На рис. 8.13 показан пример такого построения — строятся две фигуры Лиссажу, причем одна из них является окружностью. Больше двух фигур строить нерационально, так как на черно-белом графике их трудно различить.

    Теперь рассмотрим второй способ построения графиков в полярной системе координат (рис. 8.14). Здесь каждая точка является концом радиус-вектора R(t), причем угол t меняется от 0 до 2я. На рис. 8.14 функция R(t) задана как функция пользователя R[t_] с использованием образца t_ для задания локальной переменной t в теле функции.

    Изменение параметра R позволяет заметно увеличить число отображаемых функций — фактически, их бесконечно много. Помимо описанной фигуры на рис. 8.14 дополнительно построена линия окружности единичного радиуса. Чтобы она имела правильные пропорции на экране, задана опция AspectRatio->l.

    Рис. 8.13. Построение на одном графике двух фигур Лиссажу

    Рис. 8.14. Построение графика функции в полярной системе координат

     

    gl8-1.jpg

    Изображение: 

    gl8-10.jpg

    Изображение: 

    gl8-11.jpg

    Изображение: 

    gl8-12.jpg

    Изображение: 

    gl8-13.jpg

    Изображение: 

    gl8-14.jpg

    Изображение: 

    gl8-2.jpg

    Изображение: 

    gl8-3.jpg

    Изображение: 

    gl8-4.jpg

    Изображение: 

    gl8-5.jpg

    Изображение: 

    gl8-6.jpg

    Изображение: 

    gl8-7.jpg

    Изображение: 

    gl8-8.jpg

    Изображение: 

    gl8-9.jpg

    Изображение: 

    3. Трехмерная графика

     

    Трехмерная графика

     

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

    Построение контурных графиков

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

    Основными функциями и директивами для построения контурных графиков являются следующие:

    • ContourPlot[f,{x, xmin, xmax}, {у, ymin, ymax}] — порождает контурный график f как функции от х и у;
    • ContourGraphics [array] — представляет контурный график массива array;
    • ListContourPlot[array] — формирует контурный график из массива величин высот.

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

    Для управления возможностями графической функции ContourPlot используются опции, полный список которых выводит команда Options [ContourGraphics ]. Помимо уже рассмотренных ранее опций используются следующие:

    • ColorFunction — задает окраску областей между линиями;
    • Contours — задает число контурных линий;
    • ContourLines — задает прорисовку явных (explicit) контурных линий;
    • ContourShading — задает затенение областей между контурными линиями;
    • ContourSmoothing — задает сглаживание контурных линий;
    • ContourStyle — задает стиль рисуемых линий для контурных графиков;
    • MeshRange — задает области изменения х- и y-координат.

    Рисунок 8.15 показывает построение контурного графика с окраской промежуточных областей между линиями. Окраска обеспечивается опцией ColorFunction-> Hue. Опция ContourSmoothing -> True задает сглаживание контурных линий.

    Рис. 8.15. Контурный график поверхности sin(x у) с закраской областей между линиями равного уровня оттенками серого цвета

    Следующий пример (рис. 8.16) иллюстрирует эффективность применения опции ContourShading. Если задать ее значение равным False, то заполнение пространства между линиями будет отсутствовать. Таким образом, в данном случае строятся только линии равного уровня.

    Рис. 8.16. Контурный график, представленный только линиями равного уровня

    Иногда график оказывается более наглядным, если убрать построение контурных линий, но оставить закраску областей между линиями. Такой вариант графика более предпочтителен, если нужно наблюдать качественную картину. Для построения такого графика надо использовать опцию ContourLine->False (рис. 8.17).

    Рис. 8.17. Контурный график без пиний равного уровня

    В данном случае используется вариант монохромной окраски областей между линиями (PostScript). Он может оказаться предпочтителен, например, если предполагается печать графика монохромным принтером.

    Построение графиков плотности

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

    • DensityGraphics [array] — является представлением графика плотности;
    • DensityPlot[f, {х, xmin, xmax}, {у, ymin, ymax}] — строит график плотности f как функции от х и у;
    • ListDensityPlot [array] — формирует график плотности из массива величин высот.

    С этими функциями используется множество (в основном уже рассмотренных) опций. Их перечень можно получить с помощью функции Options.

    Внешне график плотности похож на контурный график. Однако для него характерно выделение элементарных участков (с равной плотностью) в форме квадратиков (рис. 8.18).

    Рис. 8.18. График плотности

    График плотности (рис. 8.18) также дан в режиме PostScript. Цветная функциональная раскраска таких графиков тоже возможна (см. опции, указанные выше для контурных графиков).

    Построение графиков поверхностей — функция Plot 3D

    Функция двух переменных z = f(x, у) образует в пространстве некоторую трехмерную поверхность или фигуру. Для их построения приходится использовать координатную систему с тремя осями координат: х, у и z. Поскольку экран дисплея плоский, то на самом деле объемность фигур лишь имитируется — используется хорошо известный способ наглядного представления трехмерных фигур с помощью аксонометрической проекции.

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

    Для построения графиков трехмерных поверхностей используется основная графическая функция Plot 3D:

    • Plot3D[f, {x, xmin, xmax), {у, ymin, ymax}] — строит трехмерный график функции f переменных х и у;
    • Plot3D[{f, s}, {x, xmin, xmax}, {y, ymin, ymax}] — строит трехмерный график, в котором высоту поверхности определяет параметр f, а затенение — параметр s.

    На рис. 8.19 показан пример построения поверхности, описываемой функцией двух переменных cos(x у) при х и у, меняющихся от -3 до 3. Поверхность строится в виде каркаса с прямоугольными ячейками с использованием функциональной окраски. Все опции заданы по умолчанию.

    Рис. 8.19. Пример построения поверхности cos(xy) функцией Plot3D с опциями по умолчанию

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

    Опции и директивы трехмерной графики

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

    На рис. 8.20 показана исходная поверхность (см. рис. 8.19), построенная с применением опции PlotPoint->50. Это означает, что поверхность по каждой оси делится на 50 частей (в исходном графике по умолчанию используется деление на 10 частей). Масштаб по вертикали задается автоматически, с тем чтобы все высоты поверхности не ограничивались.

    На рис. 8.21 показана та же поверхность, полученная с применением опции PlotRange-> {0, 0.5}, срезающей верхнюю часть поверхности (точки с ординатами выше 0.5). График поверхности при этом существенно меняется (сравните с рис. 8.20).

    Рис. 8.20. Поверхность рис. 8.19 с большим числом ячеек

    Рис. 8.21. Математическая поверхность с отсеченной верхней частью

    Опция Boxed -> False удаляет ограничивающие рамки, образующие «ящик», в который вписывается построенная трехмерная поверхность (рис. 8.22). Остаются лишь координатные оси.

    Опция Viewpoint позволяет включить при построении отображение перспективы и изменять углы, под которыми рассматривается фигура. Рисунок 8.23 иллюстрирует применение этой опции.

    Рис. 8.22. Построение трехмерной поверхности без ограничительного «ящика»

    Рис. 8.23. Математическая поверхность, построенная с учетом перспективы

    Опция Mesh -> False позволяет удалить линии каркаса фигуры. Нередко это придает фигуре более естественный вид (рис. 8.24) — обычно мы наблюдаем такие фигуры без линий каркаса.

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

    Рис. 8.24. Математическая поверхность с удаленными линиями каркаса

    Рис. 8.25. Построение каркаса математической поверхности с использованием алгоритма удаления невидимых линий

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

    Таким образом, как и ранее, применение опций позволяет легко управлять характером и типом графиков, придавая им вид, удобный для заданного применения. На рис. 8.27 показан пример построения трехмерного графика с применением одновременно нескольких опций.

    Риc. 8.26. Построение каркаса математической поверхности без использования алгоритма удаления невидимых линий

    Риc. 8.27. Пример построения трехмерного графика с несколькими опциями

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

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

    Графическая функция ListPlot3D

    Часто трехмерная поверхность задается массивом своих высот (аппликат). Для построения графика в этом случае используется графическая функция ListPlotSD:

    • ListPlot3D [array] — строит трехмерный график поверхности, представленной массивом значений высот;
    • ListPlot3D [array, shades] — строит график так, что каждый элемент поверхности штрихуется (затеняется) согласно спецификации shades.

    Plot Joined — дополнительная опция для ListPlot, указывающая, следует ли соединять линией точки, нанесенные на график.

    Пример применения функции ListPlotSD показан на рис. 8.28. График построен по данным таблицы tS, формирующей значения аппликат поверхности, которая описывается функцией cos(xy).

    Рис. 8.28. Пример применения функции ListPlotSD

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

    Командой Options [ListPlot3D] можно вывести полный список опций данной функции, чтобы использовать их для модификации графиков, которые строит эта функция.

     

    gl8-15.jpg

    Изображение: 

    gl8-16.jpg

    Изображение: 

    gl8-17.jpg

    Изображение: 

    gl8-18.jpg

    Изображение: 

    gl8-19.jpg

    Изображение: 

    gl8-20.jpg

    Изображение: 

    gl8-21.jpg

    Изображение: 

    gl8-22.jpg

    Изображение: 

    gl8-23.jpg

    Изображение: 

    gl8-24.jpg

    Изображение: 

    gl8-25.jpg

    Изображение: 

    gl8-26.jpg

    Изображение: 

    gl8-27.jpg

    Изображение: 

    gl8-28.jpg

    Изображение: 

    4. Специальные средства визуализации и звука

     

    Специальные средства визуализации и звука

     

    Системы Mathematica содержат множество средств, повышающих наглядность представления (визуализации) результатов вычислений — как простых, так и сложных. К ним можно отнести особые виды трехмерной графики, используемые при параметрическом задании поверхностей, в том числе пересекающихся в пространстве, а также графики объемных фигур — полиэдров. Возможности визуализации расширяются при использовании импортируемых рисунков и вставки графических объектов. К специфическим приемам визуализации относится и применение звуковых объектов, способных генерировать и воспроизводить звуки при наличии в компьютере звуковой карты.

    Параметрическая трехмерная графика

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

    Функция ParametricPlot3D используется в следующих видах:

    • PararnetricPlot3D[ {fx, fy, fz}, {t, tmin, tmax}, {u, umin, umax} ] — строит трехмерную поверхность, параметризованную по t и u;
    • ParametricPlot3D[{fx, fy, fz}, {t, tmin, tmax}] — создает трехмерную пространственную кривую, параметризованную переменной t, которая изменяется от tmin до tmax;
    • ParametricPlot3D[ { fx, fy, fz, s},...] — выполняет затенение графика в соответствии с цветовой спецификацией s;
    • ParametricPlot3D[ { {fx, fy, fz}, {gx, gy, gz},...},...] строит несколько объектов вместе.

    Эта функция имеет множество опций, которые можно вывести с помощью команды Options [ParametricPlotSD]. Большая часть из них уже рассматривалась ранее. При этом даже при использовании только опций, заданных по умолчанию, можно получить любопытные построения. На рис. 8.29 показан простой пример применения функции ParametricPlot3D для построения замкнутой линии, расположенной в пространстве. Это, так сказать, объемный вариант, фигур Лиссажу, построение которых было описано ранее.

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

    Рис. 8.29. Построение пространственной кривой, заданной в параметрической форме

    Первым примером может служить фигура «рог изобилия», показанная на рис. 8.30. По существу, это раскручивающаяся объемная спираль, диаметр которой постепенно нарастает.

    Рис. 8.30. Построение фигуры «рог»

    Другой пример — объемное кольцо с сечением, напоминающим знак бесконечности (бесконечность). Результат построения показан на рис. 8.31. Обратите внимание на интересный эффект — из кольца удален сектор, что позволяет рассмотреть его внутреннее строение. Все, что потребовалось для создания этого эффекта, — это задать верхний предел изменения переменной t равным 2л - 0.6. Если сделать этот предел равным 2л, то кольцо станет непрерывным.

    Рис. 8.31. Построение кольца с удаленным сектором

    Рис. 8.32. Построение сферы с удаленным сегментом

    Третий пример такого рода — построение объемной сферы. Этот пример показан на рис. 8.32. Здесь также использован прием изменения значений переменной t для получения выреза сегмента сферы. Опять-таки, задав изменение t от 0 до 2л, можно получить построение всей сферы без выреза.

    Любопытно отметить, что описанные приемы создания вырезов в объемных фигурах позволяют наблюдать внутреннюю часть фигур, которая обычно (без вырезов) не видна. Это делает описанный прием построения фигур с вырезом достаточно продуктивным.

    Построение фигур, пересекающихся в пространстве

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

    Проиллюстрируем это на примере. На рис. 8.33 показано задание и построение одного графического объекта gl — объемной спирали, полученной сворачиванием ленты.

    Рис. 8.33. Построение объекта gl — объемной спирали

    Второй объект, построение которого представлено на рис. 8.34, — это объемное кольцо. Его построение было описано выше. В конце части документа, показанного на рис. 8.34, задана функция Show для вывода объектов на одном графике.

    Рис. 8.34. Построение объекта g2 — объемного кольца с удаленным сегментом

    Рисунок 8.35 демонстрирует комбинированный график, построенный функцией Show. Он показывает кольцо, через отверстие которого проходит объемная спираль. Вырез в кольце показывает, как спираль проходит внутри кольца.

    Рис. 8.35. Построение комбинированного объекта — спираль проходит внутри кольца

    Графики такого типа дают большие возможности визуализации трехмерных поверхностей и фигур.

    Функция Graphics3D, ее опции и примитивы

    Наряду с построением графиков поверхностей, заданных аналитическими выражениями, имеется возможность создания графиков из различных элементарных геометрических объектов, называемых примитивами. Они включаются в список параметров функции Graphics3D [primitives, options] и позволяют строить в пространстве различные простые фигуры. Помимо примитивов двумерной графики могут использоваться примитивы трехмерной графики, приведенные в приложении.

    Функция Graphics3D со своими примитивами может использоваться для построения в пространстве различных объектов, например точек, кубиков или многоугольников.

    Рисунок 8.36 показывает два варианта размещения случайных точек в пространстве. Для генерации координат точек используется функция Random [ ], возвращающая случайные числа, распределенные по равномерному закону.

    Рис. 8.36. Построение случайных точек в пространстве

    Поскольку ограничительный «ящик» не удален, создается впечатление о построении точек внутри куба.

    На рис. 8.37 показано построение в пространстве ряда небольших кубиков. Для этого используется примитив Cuboid, повторенный 7 раз. Для воспроизведения набора кубиков, перечисленных в функции GraphicsSD, применяется функция-директива Show.

    Нетрудно заметить, что и здесь неплохо работают встроенные алгоритмы удаления невидимых линий. Это дает довольно реалистическое изображение объектов в пространстве.

    Рис. 8.37. Построение нескольких кубиков в пространстве

    Еще более наглядное представление об этом алгоритме дает рис. 8.38. На нем показано построение в пространстве ряда плоских многоугольников, частично проникающих друг в друга. Нетрудно заметить, что и здесь алгоритм удаления невидимых поверхностей работает превосходно.

    Рис. 8.38. Построение взаимно пересекающихся плоских многоугольников в пространстве

    Здесь каждый из многоугольников формируется с помощью функции пользователя randpoly [n_], в теле которой используется примитив Polygon. Эта функция формирует случайные многоугольники, выводимые затем функцией-директивой Show.

    Построение полиэдров

    Язык программирования системы Mathematica позволят создавать средства визуального программирования графических задач. Примером таких средств является приложение Polyhedron Explorer, предназначенное для создания множества объемных фигур класса полиэдров. Это приложение (вместе с системой Mathematica, разумеется) вполне может заменить множество бумажных объемных фигур, которые можно еще встретить в кабинетах математики школ и вузов. Его можно получить по Интернету с файлового сервера фирмы Wolfram Research.

    При загрузке этого приложения (как обычного документа) создается панель с окном просмотра фигуры и пультом с множеством кнопок, с помощью которых легко выбрать подходящую фигуру и наблюдать ее в окне просмотра (рис. 8.39).

    Рис. 8.39. Работа с приложением PolyhedronExplorer

    Обратите внимание на кнопки внизу панели пульта (см. рис. 8.39). Стоит нажать кнопку Paste Code, как фрагмент программы, рисующий выбранную фигуру, будет вставлен в окно редактирования документов — оно видно на рис. 8.39 слева.

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

    В состав примеров системы Mathematica входит немало и других иллюстраций реализации объектно-ориентированного программирования: палитры физических констант и химических элементов (таблица Менделеева), палитры дополнительных функций и т. д. Элементы такого программирования просматриваются и при работе с селектором положения трехмерных графиков (вставка опций с указанием о положении графика).

    Импорт графических изображений

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

    Описанное выше приложение PolyhedronExplorer позволяет импортировать выбранную фигуру в документ. Для этого достаточно нажать кнопку Paste Graphic. Этот процесс иллюстрирует рис. 8.40.

    Рис. 8.40. Пример импорта рисунка из приложения PolyhedronExplorer в документ системы Mathematica

    Возможен также импорт изображения с использованием буфера обмена. Нужное -изображение, открытое в каком-либо приложении (например, в графическом редакторе), нужно выделить и поместить в буфер командой Сору или Cut. Затем надо перейти к работе с системой Mathematica. Установив текстовый курсор в нужное место, достаточно исполнить команду меню Edit -> Paste. Если при импорте изображения надо очистить буфер, следует использовать команду Edit -> Paste As -> Paste and Discard.

    Импортированное изображение размещается в ячейке вывода, и с ним возможны все манипуляции, характерные для рисунков в ячейках вывода. Так, их можно растягивать или сжимать, а также перемещать в пределах ячейки. Этот способ импорта изображений полезен для создания средствами системы Mathematica электронных книг, уроков и статей.

    Вставка графических и иных объектов

    Более широкие возможности предоставляет вставка объектов. Как уже отмечалось в уроке 2, она реализуется командой Insert Object из меню Edit. Эта команда открывает окно со списком возможных приложений, которые могут экспортировать объекты в систему Mathematica.

    Если, к примеру, выбрать в качестве объекта рисунок графического редактора Paint, то на экране появится окно редактора (рис. 8.41). Теперь в этом редакторе можно создавать любые изображения, например, вроде рожицы, квадрата и эллипса, представленных в окне редактора на рис. 8.41.

    Если теперь закрыть окно редактора, то созданный рисунок появится в ячейке вывода документа системы Mathematica (рис. 8.42). Его можно выделять, растягивать в разных направлениях, перемещать и т. д.

    Вставка объекта отличается от импорта рисунков (или текстов) одним принципиально важным обстоятельством — объект может редактироваться с автоматическим вызовом приложения, в котором он был создан. Для редактирования объекта, например нашего рисунка, достаточно сделать на нем двойной щелчок. Произойдет загрузка графического редактора, и мы увидим картину, подобную приведенной на рис. 8.41, — в нашем распоряжении будет окно редактора с рисунком, который можно произвольно изменять. После закрытия окна редактора новый рисунок появится в месте вставки.

    Разумеется, объектами вставки могут быть не только рисунки, но также тексты и документы других систем. Интересно оценить, насколько Mathematica восприимчива к другим математическим системам. Увы, эта «высокопоставленная мадам» очень критична к своим возможным партнерам или соперницам. Так, она не воспринимает системы Maple V и MATLAB, которые способны соперничать с ней по своим возможностям и скорости работы. Не понимает система и такую «мелочь», как системы начального уровня Derive и MuPAD.

    Зато Mathematica сравнительно благосклонно относится к системе Mathcad, известной своим бесподобным интерфейсом и, главное, возможностями задания в документах сложных формул в их вполне естественном виде. Рисунок 8.43 показывает подготовку в Mathcad графика трех функций и вычисление определенного интеграла.

    Рис. 8.41. Подготовка объекта в среде графического редактора Paint, вызванного из документа системы Mathematica

    Риc. 8.42. Пример вставленного объекта, созданного в среде графического редактора Paint

    Рис. 8.43 .Подготовка в Mathcad графика функций и вычисление определенного интеграла

    Увы, Mathematica не способна воспринимать документ Mathcad целиком, если в нем больше одного блока, ибо каждый блок воспринимается как отдельный объект. Поэтому приходится располагать блоки Mathcad (поочередно выделяя их) в отдельных ячейках системы Mathematica, что и показано на рис. 8.44.

    Рис. 8.44. Документ системы Mathematica с двумя объектами из документа Mathcad

    Из этого следует, что Mathematica реализует полноценную объектную связь еще далеко не со всеми программами. И, по всей видимости, это сделано разработчиками намеренно. Не случайно пары «Mathematica — Word» и «Mathematica — Excel» поставляются фирмой Wolfram как самостоятельные программные продукты.

    Синтез звуков

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

    Возможности синтеза звука становятся доступными, если компьютер оборудован звуковой картой класса Sound Blaster фирмы Creative Labs или совместимой с ней. К карте должна быть подключена стереофоническая акустическая система для воспроизведения звуков. Возможен синтез как монофонических, так и стереофонических звуков.

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

    Для синтеза звуков в системе Mathematica используются следующие функции:

    • ListPlay [ {a1l, a2,...}] — проигрывает звук с амплитудой, заданной последовательностью уровней ai;
    • Play[f, {t, tmin, tmax}] — воспроизводит звук с амплитудой, заданной f как функцией от времени t в секундах между значениями tmin и tmax;
    • PlayRange — опция для Play и родственных функций, указывающая, какой диапазон уровней звуковых амплитуд должен использоваться;
    • SampleDepth — опция для звуковых примитивов, устанавливающая количество бит для кодирования уровней амплитуды звуковых сигналов;
    • SampledSoundFunction [f, n, r] — звуковой примитив; воспроизводит звук с частотой дискретизации г герц; значения дискретных отсчетов генерируются применением функции f к последовательным целым от 1 до л;
    • SampledSoundList [ {al, а2,...},r] — звуковой примитив, воспроизводящий звук, амплитуда которого имеет уровни ai с дискретностью г раз в секунду;
    • SampleRate — опция для звуковых примитивов, устанавливающая частоту дискретизации звука в герцах;
    • Sound [primitives] — представляет звук;
    • $SoundDisplayFunction — возвращает значение по умолчанию для опции Display Function в звуковых функциях.

    Некоторые из указанных функций напоминают графические функции, и это не случайно. Идеология применения этих функций та же, что при использовании функций графики. Звуковые объекты имеют много схожего с графическими объектами, их можно наряду с последними включать в различные функции-директивы. Таким образом, единство работы со звуком и графикой обеспечено специально.

    Рисунок 8.45 показывает использование функции Sound для создания звукового объекта. Графически этот объект представляет собой сдвоенную «осциллограмму» звука. Слово «осциллограмма» не случайно взято в кавычки — на самом деле речь идет лишь о некотором графическом представлении звуковых сигналов, отдаленно напоминающем осциллограмму. К тому же вид этого отображения сильно зависит от компьютерной платформы, на которой установлена система Mathe-matica и даже от применяемых в компьютере видеосредств.

    Рис. 8.45. Создание звукового объекта

    Принятый в системе способ синтеза звуков имеет определенные недостатки. Звуковые средства слишком привязаны к математике — для задания звука надо описать звуковые колебания математической формулой. Наконец, надо отметить, что графическая интерпретация звукового объекта не всегда понятна — например, неясно, что нового дает нижняя осциллограмма при синтезе монофонического звука.

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

     

    Что нового мы узнали?

    В этом уроке мы научились:

    • Строить двумерные и трехмерные графики различного вида.
    • Использовать опции графических функций для форматирования графиков.
    • Применять графические директивы.
    • Строить графики по точкам.
    • Использовать графические примитивы.
    • Вставлять в документы графические и иные объекты.
    • Осуществлять синтез звуков.

     

    gl8-29.jpg

    Изображение: 

    gl8-30.jpg

    Изображение: 

    gl8-31.jpg

    Изображение: 

    gl8-32.jpg

    Изображение: 

    gl8-33.jpg

    Изображение: 

    gl8-34.jpg

    Изображение: 

    gl8-35.jpg

    Изображение: 

    gl8-36.jpg

    Изображение: 

    gl8-37.jpg

    Изображение: 

    gl8-38.jpg

    Изображение: 

    gl8-39.jpg

    Изображение: 

    gl8-40.jpg

    Изображение: 

    gl8-41.jpg

    Изображение: 

    gl8-42.jpg

    Изображение: 

    gl8-43.jpg

    Изображение: 

    gl8-44.jpg

    Изображение: 

    gl8-45.jpg

    Изображение: 

    Урок 9. Компьютерная алгебра

    Урок 9. Компьютерная алгебра

    1. Компьютерная алгебра

     

    Компьютерная алгебра

    • Работа с выражениями
    • Выделения и подстановки в функциях
    • Рекурсивные функции
    • Инверсные функции
    • Задание математических отношений
    • Упрощение выражений
    • Раскрытие и расширение выражений
    • Функции преобразования тригонометрических выражений
    • Основные операции над полиномами
    • Функции для расширенных операций с выражениями

    Математические выражения — основа описания алгоритмов вычислений. Фактически, вся символьная математика основана на тех или иных видах преобразований выражений. Такие преобразования и описаны в данном уроке.


     

    2. Работа с выражениями

     

    Работа с выражениями

     

    Одним из важнейших понятий системы Mathematica является математическое выражение, или просто выражение — ехрг (от английского слова expression). Работа с математическими выражениями в символьном виде — основа основ символьной математики.

    Выражение может быть представлено в общепринятом виде (как математическая формула или ее часть) с помощью операторов, например, а* (х + у + z) или х ^ у, оно может задавать и некоторую функцию f [х, у,...] или их комбинацию. Наряду с такой формой существует так называемая полная форма представления выражений, при которой основные арифметические операции задаются не операторами, а только соответствующими функциями. Ее примеры даны ниже.


    Выражение ехрг

    Полная форма ехрг

    Комментарий

    х + у + z

    Plus [х, у, z]

    Сложение

    х у z

    Times [x, у, z]

    Умножение

    х^n

    Power [x,n]

    Возведение в степень

    {a,b,c}

    List [a,b, c]

    Создание списка

    a->b

    Rule [a,b]

    Подстановка

    a=b

    Set [a,b]

    Присваивание

    Для вывода выражения ехрг в полной форме используется функция FullForm [ехрг ]. Примеры перевода выражений в полную форму:


    1+х^2+(у+г)^2+2

    3 + х2 + (y+z)2

    FullForm[%]

    Plus[3, Power[x, 2], Power[Plus[у, z] , 2]]

    Integrate[a*Sin[b*x]*Exp[-c*x],x]

    a [(be-cxCos[bx])/{-ib + c) (ib + c)-( ce+cxSin[bx]) \(-ib + c) (ib + c) ]

    FullForm[%]

    Times[a, Plus[Times[-1, b, Power[Plus[Times[Complex[0, -1], b], c] , -1], Power[Plus[Times[Complex[0, 1], b], c] , -1], Power[E, Times[-l, c, x] ] , Cos[Times[b, x] ] ] , Times[-1, c, Power[Plus[Times[Complex[0, -1], b] , c], -1] , Power[Plus[Times[Complex[0, 1] , b], c] , -1] , Power[E, Times[-1, c, x] ] , Sin[Times[b, x]]]]]

    Для определения типа выражения служит функция Head [ехрr ]. Применительно к числовым выражениям она возвращает тип результата, как показано в приводимых ниже примерах.


    Ввод (In)

    Вывод (Out)

    1+2+3 6
    Head[%] Integer
    Head[123/12345] Rational
    Head[2*0.25] Real

    Следующие примеры поясняют действие функции Head для символьных выражений:

    • Head[f [x,y, z] — возвращает f;
    • Head[a+b+c] — возвращает Plus;
    • Head[x ^ n] — возвращает Power;
    • Head[ {a, b, с} ] — возвращает List.

    Другая пара примеров показывает применение Head в списках с разнородными выражениями:


    {Head[l + 2], Head[аЬ] , Head[ 5/7], Headfl + 3i], Head[e2]}

    {Integer, Times, Rational, Complex, Power}

    Head/@{l, 1/3, 2.1, 2 + 3i, x, f [x] , {1, 2, 3}, a+b, a/b}

    {Integer, Rational, Real, Complex, Symbol, f, List, Plus, Times}

    Обратите внимание на второй пример — в нем функция Head применяется к каждому выражению списка, что дает более компактную запись.

    Основные формы записи выражений

    Возможны четыре основные формы записи выражений:

    • f [х, у] — стандартная форма для f [х, у];
    • f @ х — префиксная форма для f [ х ];
    • х / / f — постфиксная форма для f [ х ];
    • х ~ f ~ у — инфиксная форма для f [ х, у ].

    Далее приведены примеры применения этих форм.

    Ввод (In)

    Вывод (Out)

    F[x_] = 2*х^2

    2X 2

    F[a]

    2a 2

    a//F

    2 a 2

    f [x_, y_] = х^ 2 + у^2

    y 2 +x 2

    f[a,b]

    a 2 +b 2

    a-f-b

    a 2 + b 2

    Можно использовать ту или иную форму выражений в зависимости от класса решаемых математических задач.

    Части выражений и работа с ними

    Сложные выражения состоят из частей, которые могут интерпретироваться различным образом.


    Тип части

    Зависимость

    Пример

    Function

    От аргументов или параметров

    Ехр[х], f [х,у]

    Command

    От аргументов или параметров

    Expand [ (х-1) ^2]

    Operator

    От операндов

    x + y+z, a = b

    Head

    От элементов

    {a,b,c}

    Object type

    От контекста

    RGBColor [r,g,b]

    Работа с частями выражений напоминает работу со списками. Для выделения любой заданной части выражения используются функция Part или двойные квадратные скобки;

    • Part [expr, n] или expr [ [n] ] — выделяет п-ю часть выражения, начиная с начала;
    • expr [ [-n] ] — выделяет п-ю часть выражения, начиная с конца;
    • expr [ [nl,n2,...] ] — выделяет части выражения и показывает их в форме дерева;
    • expr [[{nl, n2,...}]] — дает комбинацию нескольких частей выражения. Приведем примеры использования этих средств.

    Ввод (In)

    Вывод (Out)

    f :=а + b*х^2 + с*х^3  

    Part[f, 3]

    ex 3
    Part[f, 2] bx 2

    f[[1]]

    a

    f[[3]]

    ex 3

    f[[-1]]

    ex 3

    Нередко выражения рассматриваются как возможные значения переменных. В этом случае используются операторы присваивания переменным заданных значений. Mathematica имеет два типа присваивания — с помощью символов «: =» и с помощью символа «=». Они различаются временем вычисления выражения, следующего за этими символами. Знак «: =» используется для задержки присваивания до вычисления правой части, например:


    f[x_] := % + 2 х

    Вывода здесь нет. Продолжим наш эксперимент: 1 + у^2


    1 + y2

    g[х_] = % + 2 х

    1 + 2 х + у2

    Теперь вывод есть, так как % (ссылка на предыдущий результат) определена в виде выражения 1 + у^2 и при задании [х_] использован оператор немедленного присваивания. Далее:


    2 + z

    2 + z

    {f[a],g[a]>

    {2 + 2a+z, 1 + 2 а + у2}

    Следующие функции возвращают особые части выражения:

    • Denominator [expr] — возвращает знаменатель выражения ехрг;
    • First[expr] — возвращает первый элемент из ехрг;
    • Last[expr] — возвращает последний элемент из ехрг;
    • Rest [expr] — возвращает ехрг с удаленным первым элементом.

    Ниже приводятся примеры применения этих функций.


    Ввод (In)

    Вывод (Out)

    Denominator [ (х + 1) / (х ^ 2 + 2*х + 3) ]

    3+ 2х+ х^2

    ехрг = а * b + с - d

    ab+ с- d

    First [expr]

    ab

    Last [expr]

    -d

    Rest [expr]

    c-d

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

    Удаление элементов выражения

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

    • Delete [expr, n] — удаляет элемент в позиции п в выражении ехрг. Если п отрицательно, позиция отсчитывается с конца;
    • Deletefexpr, (i, j,...}] — стирает часть выражения в позиции {i, j ,...};
    • Delete [expr, {{i1, j1,...}, {i2, j2,...},...}] — удаляет части выражения в нескольких указанных позициях;
    • DeleteCases [expr, pattern] — удаляет все элементы выражения expr, которые совпадают с образцом pattern;
    • DeleteCases[expr, pattern, levspec] — удаляет все части выражения ехрг на уровнях, указанных levspec и соответствующих образцу pattern.

    Следующие примеры иллюстрируют применение этих функций.


    Ввод (In)

    Вывод (Out)

    ехрr = а * b + с - d

    ab + с - d

    Delete [expr, 1]

    c-d

    Delete [expr, 3]

    ab+ с

    Delete [expr, {{!}, {3}}]

    с

    DeleteCases [expr, а*b]

    c-d

    DeleteCases [expr, с, 1]

    ab-d

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

    Другие манипуляции с выражениями

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

    • Append [expr, elem] — возвращает ехрг с дополнением elem;
    • AppendTo [s, elem] — добавляет elem к значению s и присваивает s новое значение;
    • Apply [f, expr, levelspec] — возвращает ехрг, замещая заголовки в тех частях ехрг, которые указаны спецификацией уровня levelspec;
    • Cancel [expr] — возвращает ехрг с сокращением общих множителей числителя и знаменателя;
    • Cases [expr, pattern, levelspec] — возвращает список всех частей выражения expr на уровнях, указанных спецификацией levelspec, которые соответствуют шаблону pattern;
    • Chop [expr] — присваивает значение 0 тем приближенным вещественным числам в выражении expr, абсолютные величины которых меньше 10 -10 ;
    • Chop [expr, tol ] — присваивает значение 0 тем приближенным вещественным числам в выражении expr, абсолютные величины которых меньше tol;
    • Replace [expr, rules] — возвращает expr с подстановкой, заданной правилом или списком правил rules;
    • ReplaceAll — используется в виде expr /. rules и возвращает expr с подстановками, заданными правилом или списком правил rules;
    • ReplacePart [expr, new, n] — возвращает выражение, в котором п-я часть expr заменена на new;
    • ReplacePart [expr, new, {i, j,...}] — заменяет на new часть в позиции {i, j,...};
    • ReplacePart [expr, new, {{il, jl,...}, {i2, j 2 ,...},...}] — заменяет на new части в нескольких позициях выражения;
    • ReplaceRepeated — применяется в виде expr //. rules и неоднократно выполняет замещения до тех пор, пока expr не перестанет изменяться.

    Действие этих функций достаточно очевидно и поясняется следующими примерами.


    Ввод (In)

    Вывод (Out)

    Append [a + с, b]

    a+ b+ с

    х = {а, b, с}

    {a, b, c}

    AppendTo [ х , 15 ]

    {a, b, c, 15}

    x

    {a, b, c, 15}

    Apply[f, а А 2 + b ^ 2, 2]

    f[a, 2] +f[b, 2]

    Cancel [(z-1) ^ 2/ (z - 1) ]

    -1 + Z

    Cases[{a, 3.5, 2, 5, "HELLO"}, _Integer]

    {2, 5}

    Exp[N[-лI]]

    -1. - 1. 22461 x 10 -16 I

    Chop[%]

    -1.

    Ехр[N[-лI]]

    -1. - 1. 22461 x10 16 I

    Chop[%, 1*10^-10]

    -1.

    Replace[s ^ 2, s ^ 2 -> a]

    a

    s^2 /. s -> a

    a 2

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

    Контроль выражении

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

    • AtomQ [expr] — возвращает True, если выражение ехрг не может быть разложено на подвыражения и является атомарным, и возвращает False в противном случае;
    • FreeQ [expr, form] — возвращает значение True, если в выражении ехрr отсутствует подвыражение, совпадающее с form, в противном случае возвращает False;
    • FreeQ[expr, form, levelspec] — тестирует только части выражения на уровнях, указанных levelspec.

    Следующие примеры показывают действие этих функций.


    Ввод (In)

    Вывод (Out)

    AtomQ [{a

    False

    AtomQ[2+3/4]

    True

    AtomQ [Sin]

    True

    FreeQ[a*x^b,a]

    False

    FreeQ [ a*x ^ b+c , 1 ]

    True

    FreeQ [a*x^b+c, 1,1]

    True

    FreeQ[a*x^b+c,b,2]}]

    True

     

    Приложение имени функции к выражению или его части

    Функции в системе Mathematica характеризуются именем (обобщенно — f) и выражением ехрг, задающим функциональную зависимость. Обычно функция в ответ на обращение к ней возвращает значение выражения — численное или символьное. Однако в системе Mathematica понятие функции значительно расширено, и она может возвращать любой объект, в том числе графический или звуковой. Можно сказать, что входной язык общения с системой Mathematica основан на принципах функционального программирования с применением полных форм представления выражений.

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

    • Apply [f, expr] — замещает заголовок выражения ехрг на f;
    • Nest [f, expr, n] — возвращает выражение, полученное и-кратным применением f к ехрг;
    • Map [f, expr] — применяет f к каждому элементу на первом уровне в ехрr;
    • Map[f, expr, levelspec] — применяет f к частям ехрг, указанным с помощью levelspec;
    • MapAll [f, expr] — применяет f ко всем частям выражения ехрг.

    Приведем примеры действия этих функций.

    Ввод (In)

    Вывод (Out)

    Apply [f, {a, b, x}]

    f [a, b, x]

    Nest[f , x, 3]

    f[f[f[x]]]

    s[x_, y_, z_] := x + y + b

    N[Apply[s, {1, 2, a}]]

    3. + b

    Map[f, {а, Ь, с}]

    {f[a], f[b], f[c]}

    MapAll [f, a*x + b]

    f[f[b] + f[f[a] f[x]]]

    MapAll [f, {а, Ь, с}]

    f[{f[a], f[b] , f[c]}]

     

    Укороченная форма функций

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


    Укороченная форма Полная форма
    f @ ехрг f [expr]
    f @@ ехрг Apply [f, expr]
    f /@ ехрг Map[f, expr]
    f //@ ехрг MapAll [f, expr]

    Смысл укороченных выражений очевиден. Приведем несколько примеров их использования.


    Ввод (In)

    Вывод (Out)

    f@{a, b, с} f[{a, b, c}]
    f@@{a, b, c} f [a, b, c]
    f /@{a, b, c} {f[a], f[b], f[c]}
    f//@{a, b, x} f[{f[a], f[b], f[x]}]

    Укороченная форма функций может оказаться полезной для сокращения записи алгоритмов и программ.

    Выделения и подстановки в функциях

    Функция Slot[n], или, в укороченной форме, #n, представляет n-й аргумент функции. Это иллюстрируют следующие примеры.


    Ввод (In)

    Вывод (Out)

    (5* Slot [1] + Slot [2] *Slot[3] A 2) &[a, b, с]

    5a+bc 2

    #1 A #2 S[a, b] a b

    Объект # эквивалентен #1, a #0 — заголовку абстрактной функции. Таким образом, F[#.#2]&F[a,b] эквивалентно F[a,b].

    Функция SlotSequence [n], или, в укороченной форме, ##n, где п = 1, 2, ..., представляет порядок применения формальных аргументов к абстрактной функции. Таким образом, объект ##n определяет последовательность аргументов, начиная с n-го.


    Ввод (In)

    Вывод (Out)

    (Times[5, ##2] +Times[##2, ##3 A 2]) &[а, b, с]

    Sbobc 3

    Представленные средства обеспечивают работу с функциями на абстрактном уровне.

    Интересные возможности связаны с использованием подстановок при определении функций. Система допускает использование подстановок в виде f [x] = value и f[x_] = value.

    Поясним это несколькими примерами.


    Ввод (In)

    Вывод (Out)

    f[x] =u

    u

    f[x] +f[y]

    u+f ty]

    f [x_] = х^2

    x 2

    f[x] +f[y]

    u+y 2

    Clear [f]

    f[x]+f[y]

    f [x] + f [y]

    Как нетрудно заметить из этих примеров, подстановки в функциях могут существенно изменить исходную функциональную зависимость. А потому важной областью их применения является модификация функций.

    Рекуррентные функции

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


    Операция

    Комментарий

    fact[n_] :=n*fact[n-l]

    Задана рекурсивная функция факториала

    fact[l]=l

    Выполнена инициализация функции

    1

    fact[3]

    Вычислено значение 3!

    6

    fact[10]

    Вычислено значение 10!

    3628800

    ?fact[l]

    Выполнена проверка определения функции

    Global ' fact

    fact[l] = 1

    fact[n_] :=nfact[n-l]

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

    Дополнительные примеры работы с функциями

    Приведем еще ряд примеров действия функций Apply, Map и Nest.


    Ввод (In)

    Вывод (Out)

    Nest[f ,x,3]

    f [f[f [X]]]

    Apply[f,{a,b,c}]

    f[a, b, c]

    s [x_,y_, z_] : =х+у+b

    N[Apply[s,{l,2,a}]]

    3. + b

    Map[f,{a,b,c}]

    {f [a], f [b], f [c] }

    N[Map[Exp, {1,2,3}]]

    {2.71828, 7.38906, 20.0855}

    Map[f ,1+2+c]

    f[3] + f[c]

    m={{a,b},{c,d}}

    {{a, b}, {c, d}}

    Map[f,m]

    {f [{a, b}], f [{c, d}] }

    take2[list_] :=Take[list,2]

    Map[take2,{{a,b,c},{c,a,b),{c,c,a}}]

    {{a, b}, {c, a}, {c, c}}

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

    Вычисление среднего для элементов списка:


    Mean[list_] := Apply[Plus, list] / Length[list] /;

    VectorQ[list] && Length[list] > 0

    General: :spell! : Possible spelling error: new

    symbol name "list" is similar to existing symbol "List".

    Вычисление среднего геометрического для списка:


    GeometricMean[list_] : = Apply

    [Times, list"4 (I/Length [list])] /;

    VectorQ[list] && Length[list] > 0

    Вычисление гармонического среднего для списка:


    HarmonicMean[list_] := Length[list]

    / Apply[Plus, I/list] /;

    VectorQ[list] && Length[list] > 0

    Обратите внимание на то, что при задании первой функции Mathematica предупреждает о том, что введенный идентификатор list подозрительно напоминает зарезервированный идентификатор List. Все приведенные выше функции не имеют смысла, если список пустой. Поэтому в них введен контроль за такой ситуацией.

    Теперь можно выполнить расчеты по этим формулам.


    Ввод (In)

    Вывод (Out)

    data={l,2,3,4}

    {1, 2, 3, 4}

    Mean [data]

    5/2

    GeometricMean [data]

    2 3/4 3 l/4

    N[%]

    2.21336

    HarmonicMean [data]

    48/25

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

    Инверсные функции

    Инверсными функциями называют функции, полученные в результате обращения заданных функций. Например, для функции Sin [x] инверсной будет ArcSin [х] и т. д. Следующие функции обеспечивают представление инверсных функций:

    • InverseFunction [f ] — представляет функцию, обратную для f, то есть определенную таким образом, что InverseFunction [f ] [у] возвращает значение х, для которого f [х] равно у. Для функции нескольких переменных InverseFunction [ f ] представляет обращение по первому аргументу;
    • InverseFunction [f, n] — представляет обращение по п-му аргументу;
    • InverseFunction [f, n, tot] — представляет обращение по п-му аргументу, когда имеется всего tot аргументов.

    Следующие примеры иллюстрируют работу с этими функциями.


    Ввод (In) Вывод (Out)
    InverseFunction [Sin] ArcSin
    %[х] ArcSin[x]
    Composition [ f , g , h] Ccrrposition[f , g, h]
    InverseFunction [Composition [% , q] ] Corpositiont [q- 1 , h- 1 , g- 1 ,f- 1]

    Обратите внимание на то, что в этих примерах фигурируют заголовки функций — например, для получения инверсной функции от Sin [х] следует использовать

    Sin в качестве аргумента f функции InverseFunction [f].

    Задание математических отношений

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

    Однако математика и использующие ее науки непрерывно развиваются. Появляются все новые и новые правила преобразований. Пользователь-математик может пожелать изменить встроенные правила преобразований — например, для создания новых разделов математики, базирующихся на каких-либо новых представлениях. Блестящий пример этого — теория относительности Эйнштейна.

    Таким образом, возникает необходимость расширения математических символьных систем и обучения их новым правилам математических преобразований. Система Mathematica имеет и такие возможности. Поясним на простых примерах, как это делается.

    В математике можно найти множество примеров математических отношений. Например, хорошо известно такое отношение для логарифма и экспоненциальной функции:


    log(exp(x)) = х.

    Не обременяя себя поиском действительно новых закономерностей (порой на это может не хватить жизни, да и везет не каждому ученому), зададим приведенную закономерность для введенных по-новому функций log и ехр. Центральным моментом тут является введение новых имен функций, которые начинаются с малых букв, а не с больших, как у встроенных функций Log и Ехр. Поэтому система воспринимает log и ехр как новые функции.

    Итак, вводим «новую» закономерность следующим образом:


    log[exp[x_]] :=x

    General::spelll : Possible spelling error:

    new symbol name "log" is similar to existing symbol "Log".

    General::spelll : Possible spelling error:

    new symbol name "exp" is similar to existing symbol "Exp".

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


    Ввод (In)

    Вывод (Out)

    log [exp [15]]

    15

    1оg[ехр[у^2+1]] 1+y 2

    Итак, наша «новая» закономерность работает. Можно ввести, скажем, и такое известное отношение:


    log[x_^n_] :=n*log[x]

    Проверим, какие отношения заданы нами для функции log:


    ?log

    Global' log

    log[exp[x_] ] : = x

    log[x_n-] := n log[x]

    Проверим введенные правила, например, так:


    5lоg[[1+х]^5]

    5lоg[1+х]

    Рассмотрим еще пару примеров задания «новых» математических правил. В первом примере задано правило — логарифм произведения равен сумме логарифмов сомножителей:


    log[x_*y_] := log[x] +log[y]

    Любопытно, что эта закономерность действует при любом числе сомножителей:


    log[a*b*c*d*e]

    log [a] + log[b] + log[c] + log[d] + log[e]

    Второй пример иллюстрирует задание объекта, ассоциированного со списком:


    а /: а[х_] +а[у_] :=а[х + у]

    а[х] + а[у] +a[z]

    а[х+ у+ z]

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

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


     

    3. Функции компьютерной алгебры

     

    Функции компьютерной алгебры

     

    Системы компьютерной алгебры имеют несколько характерных для них функций, выполняющих достаточно сложные преобразования выражений. Эти функции имеют вполне установившиеся названия (Simplify, Expand, Collect, Factor и т. д.) и встречаются практически во всех системах символьной математики. Настало время детально познакомиться с ними, что и делается в данном разделе.

    Упрощение выражений — функция Simplify

    Упрощение математических выражений — одна из самых важных задач символьной математики. Частенько невероятно сложное математическое выражение, пугающее новичков своим грозным видом, является просто нулем или единицей либо сводится к простому выражению после ряда вполне заурядных (хотя, порою, и довольно сложных) преобразований. Качество выполнения операции упрощения во многом определяется мощью ядра математической системы, поскольку зависит от числа заложенных в него функций и правил преобразования выражений.

    С точки зрения простоты выражений они делятся на недостаточно простые и достаточно простые выражения. Недостаточно простые выражения таят в себе всевозможные «излишества»: сокращаемые общие члены, лишние переменные и функции, полиномы со степенями, допускающими понижение, и т. д. Это затрудняет качественный анализ выражений и может даже приводить к неоднозначным и даже неверным результатам.

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


    Ввод (In)

    Вывод (Out)

    (Csc[x] Tan[w]) / (Cot[x] Sec[w])

    Sec[x] Sin[w]

    BesselY[5/2, Е] SQRT(2/л)(Cos[E]-[3Cos[E]+3Sin[E]]/SQRT(E))

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

    Для упрощения выражений используется функция Simplify [ехрг]. Она исполняет последовательность алгебраических преобразований над выражением ехрг и возвращает простейшую из найденных форм (обычно это бывает нормальная форма выражения).

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

    Приведем наиболее характерные результаты действия функции Simplify.


    Ввод (In)

    Вывод (Out)

    Комбинирование числовых подвыражений Simplify [6 х 2]

    12 х

    Приведение подобных множителей у произведений Simplify[x ^ 3 у х ^ 5]

    х 8 у

    Приведение подобных членов суммы Simplify[x + 12 + 4 х]

    5 х + 12

    Упрощение тождеств, содержащих 0 или 1 Simplify [2+0] Simplify[l*x]

    2 х

    Распределение целочисленных показателей степени в произведениях Simplify[(5 х ^ 2 у ^ 3) ^ 2]

    5 х 4 у 5

    Приведение общих знаменателей к выражениям с пониженной степенью или с исключением сокращаемых переменных Simplify [2 х / (х ^ 2- 1) - 1/(х + 1) ] 1/(х + 1)
    Разложение полиномов и понижение степени выражений Simplify[(x + 1) ^ 2-х ^ 2] 2 х + 1

    Сокращение на наибольший полиномиальный делитель ; Simplify [ (х ^ 2 - 2 х у + у ^ 2 ) / (х ^ 2 - у ^ 2 ) ]

    (х -у)/(х + у)

    Следующие примеры дополнительно поясняют применение функции Simplify.


    Ввод (In)

    Вывод (Out)

    Simplify[a*a - 2*а*b + b^2]

    (a-b) 2

    Simplify [Exp [х] ^2/х]

    E 2x /X

    Sirnplif у [Sin [x-y] H-Sin [х+у] ]

    2Cos[y] Sin[x]

    Simplif у [Ехр [х] *Ехр [у] /Exp [z] ]

    E x+y-z

    Simplify [Exp [z*Log [b] ] ]

    b z

    Simplify [Log [x/y] ]

    Log[x/y]

    А := (Cos[4*x] - 4*Cos[2*x] +3)/ (4*Cos[2*x] + Cos[4*x] + 3)

    Simplify [A]

    Tan[x] 4

    Simplify[6*Log[10] ]

    6Log[10]

    Simplify[6 Log[10], Complexity Function -> LeafCount]

    Log[ 1000000]

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

    Вообще говоря, понятие упрощения математических выражений не является однозначным. К примеру, некоторые пакеты символьной математики упрощают sin(x)/cos(x) к единой математической функции tan(x), тогда как другие упрощают tan(x) к sin(.r)/cos(.r), считая, что функции sin(x) и cos(.r) более простые, чем функция tan(.r). Эта неоднозначность часто путает неопытных пользователей, пытающихся проверить символьные системы примерами из справочников, — вполне возможно, что авторы их придерживались несколько иного подхода к упрощению выражений, чем разработчики той или иной математической системы.

    Функция полного упрощения FullSimplify

    Функция FullSimplify, область применения которой в Mathematica 4 заметно расширена, обладает заметно большими возможностями, чем функция Simplify. В частности, она обеспечивает упрощение выражений, содержащих специальные математические функции:


    Simplify [Gamma [х] *х* (х+1) * (х+2) * (х+n) ]

    х(1+х) (2 + х) (n+x) Garrma[x]

    FullSimplify [Gamma [х] *х* (х+1) * (х+2) * (х+n) ]

    (п+ х) Garrma[3 + х]

    Simplify[Tan[x] , ComplexityFunction-> (Count[{#l}, _Tan, \ [Infinity]]*;)]

    Tan[x]

    FullSimplify [Tan [x] , ComplexityFunction -> (Count[{#l}, _Tan,

    \ [Infinity]] &)]

    Как видно из этих примеров, функция FullSimplify обеспечивает упрощение даже в том случае, когда функция Simplify пасует. Неплохо упрощаются тригонометрические функции, особенно при использовании опции Complexity-Function, подсказывающей путь упрощения.

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

    Раскрытие и расширение выражений — функции класса Expand

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


    (а -b)2 = (а - b) (а - b)

    можно представить как


    a2-2ab + b2

    Разумеется, такое соответствие существует далеко не всегда. К примеру, выражение в виде числа 1 вовсе не является представлением только выражения sin(X) 2 + cos(x) 2 .

    Ниже представлены основные функции, производящие раскрытие и расширение выражений:

    • ComplexExpand[expr] — раскрывает ехрг, полагая все переменные вещественными;
    • ComplexExpand [expr, {x1, х2,...}] — раскрывает ехрг, считая переменные xi комплексными;
    • FunctionExpand [expr] — раскрывает выражения ехрг, содержащие специальные функции;
    • Expand [ехрг ] — раскрывает произведения и положительные целые степени в ехрг;
    • Expand [expr, patt] — выполняет расширение только для тех элементов ехрг, которые содержат соответствующие шаблону patt члены;
    • Exp_andAll [expr] — раскрывает все произведения и целочисленные степени в любой части ехрг;
    • ExpandAll [expr, patt] — исключает из операции расширения те части ехрг, которые не содержат соответствующие шаблону patt члены;
    • ExpandDenominator [expr] — раскрывает произведение и степени, которые присутствуют в выражении ехрг в роли знаменателей;
    • ExpandNumerator [expr] — раскрывает произведения и степени в числителе выражения ехрг;
    • PowerExpand[expr] — раскрывает вложенные степени, степени произведений, логарифмы от степеней и логарифмы от произведений. Осторожно используйте PowerExpand, так как эта функция не реагирует на разрывный характер выражения ехрг.

    Приведем примеры операций расширения выражений с помощью функции Expand:


    Expand[(х - а)*(х - b)*(х - с)]

    -abc+ abx + acx+bcx-ax2- bx2-cx2 + x3

    Simplify[%]

    -(а-х) (-b+х) (-с + х)

    Expand!(Sin[x]+Cos[x])/(Cos[x]*Sin[x])]

    Csc[x] + Secfx]

    Simplify[%]

    Sirrplfy[Csc[x] + Sec[x] ]

    Expand[2*Cos[x]^2,Trig-> True]

    2Cos[x]2

    Simplify[%]

    l+Cos[2x]

    Expand[Sin[x]^2+Cos[x]^2]

    Cos[y]2+Sin[x]2

    Expand[Sin[x]^2+Cos[x]^2,Trig-> True]

    1- Cos[x]2/2 +Cos [у]2/2 +Sin[x]2/2 -Sin[y]2/2

    Simplify[%]

    1/2 (2-Cos[2x] + Cos[2y])

    В этих примерах полезно обратить внимание на то, что далеко не всегда последовательное применение функций Expand и Simplify дает исходное выражение. Гораздо чаще получается новое выражение, порой представляющее ценность. При операциях с тригонометрическими выражениями нередко нужно использовать опцию Trig->True, намечая тригонометрический путь решения. В противном случае может быть просто выдан отказ от выполнения операции Expand с заданным выражением, которое будет просто повторено в ячейке вывода.

    Приведем примеры использования других функций расширения выражений:


    ExpandAll[Sin[2*Cos[x]], Trig -> True]

    Cos [Cos [x] + ISin[x] ] Sin[Cos[x] - ISin[x] ] +

    Cos [Costx] - ISintx] ] Sin[Cos[x] + ISin[x] ] Simplify[%]

    Sin [ 2 Cos [x]]

    ExpandNumerator[(1 + x)^2/х]

    1 + 2 x + x2/x

    ExpandDenominator[(1 - x)^2/(l + x)^2]

    (1-х)2/1 + 2 x + x2

    ComplexExpand[Sin[a + I*b]]

    Cosh[b] Sin [a] + I Cos [a] Sirihfb]

    ComplexExpand[ (a. + b I) / (x + d I) ]

    -lad/Abs[Id+x]2+bd/Abs[Id+x]2 + ax/Abs[Id + x]2 +Ibx/Abs[Id+x]2

    Simplify[%]

    (-Ia + b) (d + Ix)/^bstld+x]2

    PowerExpand[Sqrt[a^2*b*c]]

    aSQRT(b)SQRT(c)

    FunctionExpand[Gamma[4, x]]

    E-xx3+ 3 (Fxx2+ 2 (E-x+ E-xx))

    FunctionExpand[Beta[4, 2 + x]]

    6/(2 + x) (3+x) (4 + x) (5 + x)

    FunctionExpand[Zeta[3, 2 + x] ]

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

    Функция приведения Collect

    К операциям, расширяющим выражения, относится также функция Collect:

    • Collect[expr, x]— выполняет приведение общих членов выражения по степеням переменной х;
    • Collect [expr, {x1, x2, ...}]— выполняет приведение общих членов выражения по степеням переменных xl, х2, ...

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


    Ввод (In)

    Вывод (Out)

    Collect [%, x]

    -5x+5x 2 -x 3 + x 4

    expr = (5 + x ^ 2) * (x- 1) *x (-1 + x) x(5 + x 2 )
    Collect [a *x ^ 2 +b*x*y+c*y+d*y ^ 2, y] ax + (c+ bx) y+ dy 2
    Collect [a *x ^ 2+b*x*y + c*y+d*y ^ 2, x] ax + cy+ bxy+ dy 2
    Collect[ (x - 1) * (x - 2) * (х^2 - 9) , x] -18-27х-7х 2 -Зх 3 + х 4

    Следующий пример показывает применение функции Collect к выражению с двумя переменными:


    Collect[(х-1)*(у-3)*(х-2)*(у-2)*(х-1),у,х]

    -12.+ 30х-24х2+ 6х3 + (10-25х + 20Х2- Sx3) y+

    (-2+ 5х-4х2 + х3) у2

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

    Функции преобразования тригонометрических выражений

    Хотя представленные выше функции иногда применимы для тригонометрических выражений, для последних есть ряд специальных функций, дающих более надежные результаты в ходе преобразований тригонометрических функций. В названии этой группы функций имеется слово Trig. Начнем с функции Trig-Expand [expr ], которая обеспечивает расширение выражения ехрг, содержащего тригонометрические и гиперболические функции. Представленные ниже примеры иллюстрируют работу этой функции:


    TrigExpandfSin[а+b]]

    Cos[b] Sin[a] +Cos[a] Sin[b]

    TrigExpand[Cos[3*x]] TrigExpand[Cos[3*x]]

    Cos[x]3-3Cos[x] Sin[x]2

    TrigExpand[Sinh[2^x]]

    2Cosh[x] Sinh[x]

    TrigExpand[Sin[Cos[Tan[x]^2]]]

    Cos[1/2Cos[Tan[x]2] + 1/2ISin[Tan[x]2]

    Sin[1/2Cos[Tan[x]2] - 1/2ISin[Tan[x]2]

    Cos[1/2Cos[Tan[x]2] - 1/2ISin[Tan[x]2]

    Sin[1/2Cos[Tan[x]2] + 1/2ISin[Tan[x]2]

    TrigExpand[Sin[2*x]-Cos[3*x]^2]

    1/2 Cos[x]6/2+2Cos[x] Sin[x] + 15/2Cos[x]4Sin[x]2

    15/2Cos[x]2/Sin[x]4+Sin[x]6 /2

    TrigExpand[Sin[2 ArcCoth[t]]]

    2 Cos [ArcCoth[ t] ] Sin[ArcCoth[ t] ]

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

    • TrigToExp [expr] — преобразует тригонометрические выражения к экспоненциальному виду;
    • ExpToTrig [expr] — преобразует экспоненциальные выражения в тригонометрические.

    Примеры применения этих функций:


    TrigToExp[Cos[z]]

    1/2( EIz+EIz)

    ExpToTrig [ % ]

    Cos [ z]

    f := Sinh[z] + Cosh[z] TrigToExp[f]

    Ez

    ExpToTrig[%]

    Cosh[z] + Sinh[z]

    TrigToExp[Sin[x]/Cos[y]]

    I (E-IX- EIX)/(E-IX+ EIX)

    ExpToTrig[%]

    Sec[y] Sin[x]

    Приведем еще две функции:

    • TrigFactor [expr] — раскладывает на простые множители тригонометрическое выражение ехрr;
    • TrigFactorList [expr] — раскладывает тригонометрическое выражение ехрг на списки с термами выражения.

    Следующие примеры показывают применение этих функций:


    expr = TrigExpand[Sin[a + b]^3]

    3/4Cos[b] Sinfa] - 3/4 Cos [a]2 Cos [b]3 Sin [a] +

    1/4 Cos[b]3Sin[a]3 + 3/4 Cos[a] Sin[b]-

    3/4Cos[a]3Cos[b]2Sin[b] +9/4 Cos[a] Cos[b]2Sin[a]2 Sin[b] +

    9/4 Cos[apCos[b] Sin [a] Sin[a]2-3/4 Cos[b] Sin[a]-3 Sin[b]2 +

    1/4Cos[a]3Sin[b]3-3/4 Cos[a] Sin[a]2Sin[b]3

    TrigFactor[expr]

    Sin[a+b]3

    TrigFactorList[expr]

    {{1, 1}, {Sin[a+b] , 3}}

    TrigExpand[Cosh[Sin[x*y]]]

    Cos[1/2 Cos[xy] - 1/2 ISin[xy]] Cos[1/2 Cos[xy] + 1/2 ISin[xy]]

    Sin[1/2Cos[xy] -1/2 ISin[xy]] Sin[1/2 Cos[xy] + 1/2 ISin[xy]]

    TrigFactorList[%]

    {{1, 1}, {Cosh[Sin[xy]], 1}}

    Наконец, функция TrigReduce [expr] упрощает выражения с произведениями тригонометрических функций.

    Примеры применения этой функции:


    TrigReduce[2*Sin[x]*Cos[у]]

    Sin[x- у] + Sin[x + y]

    TrigReduce[Cosh[x]*Tanh[x]]

    Sinh[x]

    TrigReduce[Sin[x]^2 + Cos[x]^2]

    1

    TrigReduce[Sin[x]*Cos[x]]

    1/2 Sin[2x]

    TrigReduce[Sinh[x/y]^3]

    1/4 (-3Sinh[x/y] + Sinh[3x/y])

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

    Основные операции над полиномами

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


    Р(х) = а0 + а1х + а2 х2 + а3 х3 + ... + аnхn.

    Хотя термин «полином» не очень прижился в отечественной математической литературе, мы оставляем его ввиду краткости и ради лучшего понимания синтаксиса функций системы, поскольку слова poly и Polynomial входят в параметры и имена многих функций. При этом полиномы мы будем кратко обозначать как poly или pi (здесь i — индекс или порядковый номер полинома).

    Над полиномами можно выполнять обычные арифметические операции: сложение, вычитание, умножение и деление. Это иллюстрируют следующие примеры (здесь р! и р2 — полиномы от одной переменной х):


    р1 := х^3 + 2*х^2 + 3*х + 4

    р2 := х^2 - 1

    р1 + р2

    3+3х+3х2+х3

    р1 - p2

    5+3х+х2+х3

    Expand[pl*p2]

    -4- 3х + 2х2 + 2х3 + 2х4 + х5

    pl/p2

    [4 + Зх+2х2 + х3]/[-1 + х2]

    Simplify[(х^5 + 2*х^4 + 2*х^3 + 2*х^2 - 3*х - 4)/(х^2 - 1)]

    4+3х+2х2+х3

    Если ситуация со сложением и вычитанием полиномов достаточно очевидна, то с умножением и делением результат часто повторяет задание. Для получения результата умножения полиномов в обычной форме следует использовать функцию расширения символьных выражений Expand.

    Если один полином делится на другой (это бывает далеко не всегда), то для получения результата надо использовать функцию Simplify. В общем случае при делении полиномов может оставаться остаток. Функция, обеспечивающая деление полиномов и вычисляющая остаток, описана ниже.

    Разложение полиномов — функции класса Factor

    Разложение чисел, математических выражений и особенно полиномов на простые , множители является столь же распространенной операцией, что и функции Simplify, Collect и Expand. Имеется целый ряд функций, в названии которых есть слово Factor и которые решают указанные задачи:

    • Factor [poly] — выполняет разложение полинома над целыми числами;
    • Factor [poly, Modulus->p] — выполняет разложение полинома по модулю простого числа р;
    • Factorlnteger [n] — возвращает список простых множителей целого числа п вместе с их показателями степеней. Опция FactorComplete позволяет указать, следует ли выполнять полное разложение;
    • FactorList [poly] — возвращает список множителей полинома с их показателями степени. Опция Modulus->p позволяет представить множители полинома по модулю простого числа р;
    • FactorSquareFree [poly] — записывает полином в виде произведения множителей, свободных от квадратов. Опция Modulus->p позволяет представить разложение полинома по модулю простого числа р;
    • FactorSquareFreeList [poly] — возвращает список множителей полинома, свободных от квадратов, вместе с показателями степени. Может использоваться опция Modulus->р;
    • FactorTerms [poly] — извлекает полный (общий) числовой множитель в poly;
    • FactorTermsList [poly] — возвращает лист всех общих числовых множителей полинома poly.

    Далее представлен ряд примеров применения этих функций.


    Ввод (In)

    Вывод (Out)

    Factor [x ^ 3 - 6*x ^ 2 + 11*х - 6] Factor[x ^ 3 - 6*х ^ 2 + 21*х - 52]

    (-3 + x) (-2+x) (-1 + x) (-4 + x) (13-2X+X 2 )

    Factor [х А 5 + 8*х ^ 4 + 31*х ^ 3 + 80*х ^ 2 + 94*х + 20, Modulus -> 3]

    (1+x) 2 (2+x) 3

    FactorList[x A 4 - 1, Modulus -> 2] FactorSquareFree [ (x ^ 2 + 1)*(х ^ 4 - 1) ]

    {{1, 1}, {1 + x, 4}} (-1+x 2 ) (1 + x 2 ) 2

    FactorSguareFree [ (x ^ 2 + l)*(x ^ 4 - 1) , Modulus -> 2]

    (1+x) 6

    FactorSquareFreeListt (x ^ 2 +1)*

    (x A 4 - 1) , Modulus -> 2] FactorTerms[2*x ^ 2 + 4*x + 6] FactorTermsList[2*x ^ 2 + 4*x + 6]

    {{1, 1), {1 + x, 6}} 2 (3+ 2x+ x 2 ) {2, 3 + 2X+X 2 }

    Factorlnteger [123456789]

    {{3, 2), {3607, 1}, {3803, 1}}

    FactorList[x ^ 4 - 1]

    {{!,.!}, {-1 + x, 1}, {1+x, 1}, {1+x 2 , 1}}

    FactorSquareFreeListt (x ^ 2 +1)* (x ^ 4 - 1) ]

    {{1, 1}, {-1+x 2 , 1}, {1 + x 2 , 2}}

    Обычно функция Factor выявляет внутреннюю суть полинома, раскладывая его на множители, содержащие корни полинома. Однако в ряде случаев корни полинома удобнее получать в явном виде с помощью уже рассмотренной функции Roots.

    Функция Factor может работать и с тригонометрическими выражениями, поскольку многие из них подчиняются правилам преобразований, присущим полиномам. При этом тригонометрический путь решения задается опцией Trig->True. Это иллюстрируют следующие примеры.

    Ввод (In)

    Вывод (Out)

    Factor [Csc[x] + Sec[x], Trig -> True]

    Csc[x] Sec[x] (Cos[x]+ Sin[x] )

    Factor [ Sin [3*x] , Trig -> True] (1+ 2Cos[2x]) Sin[x]

     

    Функции для работы с полиномами

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

    • Decompose [poly, x] — выполняет разложение полинома, если это возможно, на более простые полиномиальные множители;
    • GroebnerBasis [ {polyl, poly2,...}, {xl, х2,...}]—возвращает список полиномов, которые образуют базис Гробнера для идеала, порожденного полиномами polyi;
    • Polynomial-Division [p, q, x] — возвращает список частного и остатка, полученных делением полиномов р и q от х;
    • PolynomialGCD [polyl, poly2,...] — возвращает наибольший общий делитель ряда полиномов polyl, poly2, ... С опцией Modulus->p функция возвращает наибольший общий делитель по модулю простого числа р;
    • PolynomialLCM[polyl, poly2,...] — возвращает наименьшее общее кратное полиномов polyl, poly2, ... С опцией Modulus->p функция возвращает наименьшее общее кратное по модулю простого числа р;
    • PolynomialMod [poly, m] — возвращает полином poly, приведенный по модулю m;
    • PolynomialMod [poly, {ml, m2,...}] — выполняет приведение по модулю всех mi;
    • PolynomialQ [expr, var] — возвращает значение True, если expr является полиномом от var, иначе возвращает False;
    • PolynomialQ [expr, {varl,...}] — проверяет, является ли expr полиномом от vari;
    • PolynomialQuotient [р, q, х] — возвращает частное от деления р и q как полиномов от х, игнорируя какой-либо остаток;
    • PolynomialRemainder [р, q, х] — возвращает остаток от деления р на q как полиномов от х;
    • Resultant [polyl, poly2, var] — вычисляет результант полиномов polyl и poly2 по переменной var. С опцией Modulus->p функция вычисляет результант по модулю простого числа р.

    Итак, работа с этими функциями, по существу, сводит операции с таким сложным видом символьных данных, как многочлены, к типовым алгебраическим операциям над обычными символьными переменными. Следующие примеры поясняют работу с полиномами:


    Р[х] := а*х^3 + b*х^2 + с*х + d

    Q[x] := е*х^2 - f*x - 1

    Null2

    Collect[P[x] + Q[x], x]

    -1 + d+ (c- f) x+ (b+e) x^ax3

    Collect[P[x]*Q[x], x]

    -d+ (-c-df) x+ (-b+de- cf) x2* (-a+ ce-bf) x3 +

    (be-af) x4+aex5

    {PolynomialQ[P[x]], PolynomialQ[Q[x]]}

    {True, True}

    PolynomialQ[Sin[x], x]

    False

    PolynomialQ[P[x] + Q[x]]

    True

    Decompose[P[x], х]

    {d+ cx+ bх2 + ах3}

    PolynomialQuotient[P[x], Q[x], x]

    b/e+af/e2+ax/e

    PolynomialRemainder[Q[x], Р[х], х]

    -1-fx+ex2

    CoefficientList[P[x], x]

    {d, с, b, a}

    Decompose[х^6 + х + 1 - х^3 + 2*х^5, х]

    {1+х-х3+2х5 + х6}

    PolynomialGCD[Р[х], Q[х]]

    1

    PolynomialLCM[P[x], Q[x]]

    Р[х] Q[x]

    PolynomialQuotient[3*x^3 - 2*х^2 + х, х^2 - х + 1, х]

    1+Зх

    PolynomialRemainder[3*х^3 - 2*х^2 + х, х^2 - х + 1, х]

    -1-х

    Reduce[а*х^2 + b*х + с == 0, х]

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

    Функции для расширенных операций с выражениями

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

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

    • Apart [expr] — переписывает рациональное выражение expr в виде суммы членов с минимальными знаменателями;
    • Apart [expr, var] — аналогична Apart [expr], но все переменные, кроме var, интерпретируются как константы.

    Примеры использования функции Apart:


    Apart[(x^4 + 1)/(х^2 - 1)]

    1+-1/(1+X)+X2-1/(1 + х )

    Apart[(х^3 - у^3 - 1)/(х^2 - у), у]

    Две уже знакомые нам функции выделяют знаменатель и числитель выражения в виде дроби:


    Denominator[(х^2 - х - 1)/(х - 1)]

    -1 + х

    Numerator[(х^2 - х - 1)/(х - 1)]

    -1-х + х2

    Следующие функции позволяют судить о размерности выражений:

    • Depth [expr ] — возвращает значение, на единицу превышающее максимальное число индексов, требуемых для указания любой части выражения expr;
    • Dimensions [expr] — возвращает список размерностей выражения expr;
    • Dimensions [expr, n] — возвращает список размерностей expr до уровня n. Примеры применения этих функций:

    Depth[х^3 + х^2 + х + 1]

    3

    Dimensions[х^3 - 2*х^2 + 1]

    {3}.

    Функция Evaluate [expr] вычисляет выражение expr безусловно, то есть даже если оно оказывается аргументом функции, чьи атрибуты определяют его невычисляемым:


    Evaluate[1 + 1 + Sin[l]]

    2+Sin[l]

    Обилие функций для работы с математическими выражениями позволяет решать с помощью системы Mathernatica самые серьезные задачи символьной математики (компьютерной алгебры). Разумеется, для этого требуется время на полное освоение системы и серьезный опыт практического ее использования. Он приходит лишь спустя год-два постоянной и интенсивной работы, поэтому не упускайте возможности потренироваться в работе с системой Mathematica.


     

    4. Что нового мы узнали?

     

    Что нового мы узнали

    В этом уроке мы научились:

    • Записывать выражения в разной форме.
    • Работать с частями выражений.
    • Осуществлять выделения и подстановки в функциях.
    • Работать с рекурсивными функциями.
    • Задавать инверсные функции.
    • Задавать математические отношения.
    • Упрощать, раскрывать и расширять выражения.
    • Преобразовывать тригонометрические выражения.
    • Работать с полиномами.

     

    Урок 10. Основы программирования

    Урок 10. Основы программирования

    1. Основы программирования

     

    Основы программирования

    • Методы программирования
    • Образцы (patterns) и их применение
    • Функции пользователя
    • Функции FixedPoint и Catch
    • Реализация рекурсивных и рекуррентных алгоритмов
    • Использование процедур
    • Организация циклов
    • Условные выражения и безусловные переходы
    • Контексты
    • Подготовка пакетов расширений
    • Средства визуального программирования
    • Отладка и трассировка программ

    Ранее не раз говорилось, что Mathematica, в сущности, является диалоговым языком программирования сверхвысокого уровня. Однако мы еще не поднимались (или не опускались) до уровня подготовки программ в среде Mathematica 3/4. Между тем, Mathematica и впрямь имеет программные средства, ничем не уступающие таковым для современных языков программирования, а в области подготовки программ для математических преобразований и вычислений намного их превосходящие. В этом уроке мы, наконец, изучим систему Mathematica как язык программирования.

     

    2. Методы программирования

     

    Методы программирования

     

    Такие мощные системы, как Mathematica, предназначены, в основном, для решения математических задач без их программирования большинством пользователей. Однако это вовсе не означает, что Mathematica не является языком (или системой) программирования и не позволяет при необходимости программировать решение простых или сложных задач, для которых имеющихся встроенных функций и даже пакетов расширений оказывается недостаточно или которые требуют для реализации своих алгоритмов применения типовых программных средств, присущих обычным языкам программирования. Все обстоит совсем иначе.

    Фактически, основой системы Mathematica является проблемно-ориентированный на математические расчеты язык программирования сверхвысокого уровня. По своим возможностям этот язык намного превосходит обычные универсальные языки программирования, такие как Фортран, Бейсик, Паскаль или С.

    Важно подчеркнуть, что здесь речь идет о языке программирования системы Mathematica, а не о языке реализации самой системы. Языком реализации является универсальный язык программирования C++, показавший свою высокую эффективность в качестве языка системного программирования.

    Как и всякий язык программирования, входной язык системы Mathematica содержит операторы, функции и управляющие стриктуры. Основные операторы и функции этого языка и относящиеся к ним опции мы фактически уже рассмотрели. Набор описанных ранее типовых операторов и функций характерен для большинства современных языков программирования. Мощь системы Mathematica как средства программирования решения математических задач обусловлена необычно большим (в сравнении с обычными языками программирования) набором функций, среди которых немало таких, которые реализуют сложные и практически полезные математические преобразования и современные вычислительные методы (как численные, так и аналитические).

    Число этих функций только в ядре и библиотеках приближается к тысяче. Среди них такие операции, как символьное и численное дифференцирование и интегрирование, вычисление пределов функций, вычисление специальных математических функций и т. д. — словом, реализации именно тех средств, для создания которых на обычных языках программирования приходится составлять отдельные, подчас довольно сложные программы. Почти столько же новых функций (или модернизированных старых) содержат пакеты расширения (Add-on Packages).

    Язык программирования системы Mathematica трудно отнести к какому-либо конкретному типу. Можно разве что сказать, что он является типичным интерпретатором и не предназначен для создания исполняемых файлов. Впрочем, для отдельных выражений этот язык может осуществлять компиляцию с помощью функции Compile, что полезно при необходимости увеличения скорости счета.

    Этот язык вобрал в себя лучшие средства ряда поколений языков программирования, таких как Бейсик, Фортран, Паскаль и С. Благодаря этому он позволяет легко реализовывать все известные типы (концепции) программирования: функциональное, структурное, объектно-ориентированное, математическое, логическое, рекурсивное и т. д. К примеру, вычисление таких функций, как факториал, в Mathematica можно запрограммировать в виде функции пользователя целым рядом способов:


    f[n_] =n!

    f[n_] =Gamma[n-l]

    f [n_] =n*f [n-1] ;f [0]=l;f [1]=1;

    f[n_] =Product[i/i,n]

    f [n_] =Module[t=l,Do[t=t*i,i,n] ;t]

    f [n_] =Module [ { t=l } , For [ i=l , i<=n , i++ , t*=i ] ; t]

    f[n_] =Fold [Times,1, Range [n] ]

    Все их можно проверить с помощью следующего теста:


    {f[0],f[1],f[5],f[10]}

    {1, 1, 120, 3628800}

    Как отмечалось, внутреннее представление всех вычислений базируется на применении полных форм выражений, представленных функциями. И вообще, функциям в системе Mathematica принадлежит решающая роль. Таким образом, Mathematica. фактически, изначально реализует функциональный метод программирования — один из самых эффективных и надежных. А обилие логических операторов и функций позволяет полноценно реализовать и логический метод программирования. Множество операций преобразования выражений и функций позволяют осуществлять программирование на основе правил преобразования.

    Надо также отметить, что язык системы позволяет разбивать программы на отдельные модули (блоки) и хранить эти модули в тексте документа или на диске Возможно создание полностью самостоятельных блоков — именованных процедур и функций с локальными переменными. Все это наряду с типовыми управляющими структурами позволяет реализовать структурное и модульное программирование.

    Столь же естественно язык системы реализует объектно-ориентированное программирование. Оно базируется прежде всего на обобщенном понятии объекта и возможности создания множества связанных друг с другом объектов. В системе Mathematica каждая ячейка документа является объектом и порождается другими, предшествующими объектами. При этом содержанием объектов могут быть математические выражения, входные и выходные данные, графики и рисунки, звуки и т. д.

    С понятием объекта тесно связаны три основных свойства, перечисленные ниже:

    • инкапсуляция — объединение в одном объекте как данных, так и методов их обработки;
    • наследование — означает, что каждый объект, производный от других объектов, наследует их свойства;
    • полиформизм — свойство, позволяющее передать ряду объектов сообщение, которое будет обрабатываться каждым объектом в соответствии с его индивидуальными особенностями.

    Приведенный ниже пример объектно-ориентированного программирования дает три определения, ассоциированные с объектом h:


    h/ : h [x_] +h [y_] : =hplus [х , у]

    h/:p[h[x_],x]:=hp[x]

    h/:f_[h[x_]] :=fh[f,x]

    В принципе, язык программирования системы Mathematica специально создан для реализации любого из перечисленных подходов к программированию, а также ряда других — например, рекуррентного программирования, при котором очередной шаг вычислений базируется на данных, полученных на предыдущих шагах. Наглядным примером этого может служить вычисление факториала рекуррентным методом. Возможно также создание рекурсивных функций (с обращением к самим себе) и, соответственно, использование рекурсивного программирования. Оно, кстати, играет большую роль в осуществлении символьных преобразований.

    Средства языка Mathematica позволяют осуществить и визуально-ориентированное программирование. Его смысл заключается в автоматической генерации программных модулей путем визуального выбора интуитивно понятного объекта — чаще всего путем щелчка на кнопке. Mathematica позволяет создавать палитры и панели с различными кнопками, позволяющими управлять программой или вводить новые программные объекты. Однако визуально-ориентированное программирование не является основным. В основном оно ориентировано на создание палитр пользователя с нужными ему функциями.

    Поскольку алфавит языка программирования системы и набор операторов и функций уже были рассмотрены ранее, в этой главе нам остается рассмотреть лишь специфические средства языка и его управляющие структуры.

     

    3. Образцы и их применение

     

    Образцы и их применение

     

    Образцы (patterns) в системе Mathematica служат для задания выражений различных классов и придания переменным особых свойств, необходимых для создания специальных программных конструкций, таких как функции пользователя и процедуры. Это необычайно гибкое и мощное средство обобщенного представления математических выражений, используемое при любом подходе к программированию.

    Признаком образца являются знаки подчеркивания «_» (от одного до трех). Они обычно выглядят слитно, так что надо внимательно следить за общей длиной символов образцов. Наиболее распространенное применение образцов — указание на локальный характер переменных при задании функций пользователя. Например, функция


    fsc[x_,y_]:= х * Sin[y] + у * Cos[х] + z

    в списке параметров содержит два образца, х_ и у_. В правой части этого выражения переменные х и у, связанные с образцами х_ и у_, становятся локальными переменными, тогда как переменная z будет глобальной переменной. Обратите особое внимание на то, что символы образцов используются только в списках параметров — в правой части выражений они уже не применяются.

    Образцами можно задавать некоторые общие свойства функций. Например, запись


    f[х_,х_] := р[х]

    означает, что функция f двух идентичных аргументов становится тождественной функции р [ х ]. Следовательно, вызов функции


    f[a,a] + f[а,b]

    даст выход в виде


    f[а,b] + р[а]

    а при вызове


    f[a^2- 1, a^2- 1]

    будет получен результат


    р[-1 + а^2]

    Примеры применения образцов для задания функции вычисления факториала приводились выше. В образце можно указывать его тип данных:

    • x_Integer — образец целочисленный;
    • x_Real — образец с действительным значением;
    • x_Complex — образец с комплексным значением;
    • x_h — образец с заголовком h (от слова head — голова).

    Задание типов данных с помощью образцов делает программы более строгими и наглядными и позволяет избежать ошибок, связанных с несоответствием типов.

    В системе Mathematica используются следующие типы образцов.


    Обозначение

    Назначение образца

    -

    Любое выражение

    x_

    Любое выражение, представленное именем х

    : : pattern

    Образец, представленный именем х

    pattern ? test

    Возвращает True, когда test применен к значению образца

    _h

    Любое выражение с заголовком h

    x_h

    Любое выражение с заголовком h, представленное именем х

    -

    Любая последовательность с одним и более выражений

    -

    Любая последовательность с нулем или более выражений

    :x_< ИЛИ х__

    Последовательности выражений, представленные именем х

    _h или h__

    Последовательности выражений, каждое с заголовком h

    x _ h или х__h

    Последовательности выражений с заголовком h, представленные именем х

    x_ :v

    Выражение с определенным значением v

    x_h:v

    Выражение с заголовком h и определенным значением v

    x_.

    Выражение с глобально заданным значением по умолчанию

    Optional [x h]

    Выражение с заголовком h и с глобально заданным значением

    по умолчанию

    Pattern. .

    Образец, повторяемый один или более раз

    Pattern. . .

    Образец, повторяемый ноль или более раз

    Еще раз отметим, что символ «_» в образцах может иметь одинарную, двойную или тройную длину. Надо следить за правильностью его применения, поскольку эти варианты различаются по смыслу. Образцы широко применяются при задании функций пользователя и в пакетах расширения системы.

     

    4. Функции пользователя

     

    Функции пользователя

     

    Понятие функции ассоциируется с обязательным возвратом некоторого значения в ответ на обращение к функции по ее имени с указанием аргументов (параметров) в квадратных скобках. Возврат функциями некоторых значений позволяет применять их наряду с операторами для составления математических выражений.

    Функции подразделяются на встроенные в ядро системы внутренние функции и функции, заданные пользователем. Примером первых могут быть Sin[x], Bessell [n, x] и т.д. Mathematica содержит множество таких функций, охватывающих практически все широко распространенные элементарные и специальные математические функции. Есть и возможность создания функций со специальными свойствами — чистых (pure functions) и анонимных функций.

    Суть функционального программирования заключается в использовании в ходе решения задач только функций. При этом возможно неоднократное вложение функций друг в друга и применение функций различного вида. В ряде случаев, особенно в процессе символьных преобразований, происходит взаимная рекурсия множества функций, сопровождаемая почти неограниченным углублением рекурсии и нарастанием сложности обрабатываемых системой выражений.

    Встроенные стандартные функции и их типовые применения уже были описаны в предшествующих уроках. Так что далее мы рассмотрим только задание функций особого вида, создаваемых пользователем или используемых в управляющих структурах программ.

    Хотя в системах Mathematica имеется около тысячи встроенных функций, любому пользователю рано или поздно может потребоваться создание какой-либо своей функции. Кажется естественным задать ее по правилам, принятым во многих языках программирования. Например, функцию для возведения х в степень п можно было бы определить так:


    powerxn[x, n] := x^n

    Однако такая функция отказывается работать:


    {powerxn[2, 3], powerxn[a, b]}

    {powerxn[2, 3] , powerxn[a, b]}

    Причина этого кроется в том, что в системе Mathematica символы х и n являются обычными символами, не наделенными особыми свойствами. Будучи использованными в качестве параметров функции, они не способны воспринимать формальные параметры [2,3] или [ а, b ]. Так что вычислить нашу ущербную функцию можно лишь при предварительном присваивании х иn нужных значений:


    х := 2; n := 3; powerxn[x, n]

    8

    Разумеется, заданная таким образом функция является неполноценной. Для того чтобы функция пользователя нормально воспринимала переданные ей аргументы, в списке параметров надо использовать образцы в виде переменных, но имеющие после своих имен символы подчеркивания. Образцы способны быть формальными параметрами функций и воспринимать значения фактических параметров (в нашем случае значений 2 и 3). Таким образом, правильной будет запись функции пользователя в виде


    powerxn[x_, n_] := х^n

    Теперь вычисление по заданной функции пользователя пройдет гладко, причем как в численном, так и в символьном виде:


    {powerxn[2, 3], powerxn[z, у], powerxn[x, n]}

    {8, zy, 8}

    Заметим, что для уничтожения определения заданной функции можно использовать команду-функцию Clear [Name_f unction], где Name_f unction — имя функции.

    Можно также задать функцию пользователя, содержащую несколько выражений, заключив их в круглые скобки:


    f[x_] := (t = (1 + х)^2; t = Expand[t])

    Переменные списка параметров, после имен которых стоит знак «_», являются локальными в теле функции или процедуры. На их место подставляются фактические значения соответствующих параметров, например:


    f [а + b]

    1+2а+а2+2b+2ab+b2

    t

    1+2а+а2+2b+2ab+b2

    Обратите внимание на то, что переменная t в функции f является глобальной. Это поясняет результат последней операции. Применение глобальных переменных . в теле функции вполне возможно, но создает так называемый побочный эффект — в данном случае меняет значение глобальной переменной t. Для устранения побочных эффектов надо использовать образцы и другие специальные способы задания функций, описанные ниже. Итак, можно сформулировать ряд правил для задания функций пользователя:

    • такая функция имеет идентификатор — имя, которое должно быть уникальным и достаточно понятным;
    • в списке параметров функции, размещенном в квадратных скобках после идентификатора, должны использоваться образцы переменных, а не просто переменные;
    • может использоваться отложенное (: =) или немедленное (=) присваивание;
    • тело функции может содержать несколько выражений, заключенных в круглые скобки, при этом возвращается значение последнего выражения;
    • переменные образцов в списке параметров являются локальными и действуют только в пределах тела функции;
    • в теле функции могут использоваться глобальные переменные, но при этом возможны побочные эффекты;
    • возможно обращение к функции из тела этой же функции (рекурсия).

    Параметрами функций могут быть списки при условии допустимости их комбинации. Например, допустимо задать х списком, an — переменной или числом:


    powerxn[{l, 2, 3, 4, 5}, z]

    {1, 2Z, 3Z, 4Z, 5Z}

    powerxn[{l, 2, 3, 4, 5}, 2]

    {1, 4, 9, 16, 25}

    После своего задания функции пользователя могут использоваться по тем же правилам, что и встроенные функции.

    Чистые функции

    Иногда может потребоваться создание функции, не имеющей имени (например, если функция будет использоваться только один раз, сразу же после ее создания). Эта функция представляется только выражением без идентификатора, отсюда и ее название — чистая функция (pure function). Для создания такого объекта служит встроенная функция Function, используемая в одном из следующих вариантов:

    • Function [body] — создает чистую функцию с телом body;
    • Function [ {х}, body ] — создает чистую функцию параметра х с телом body;
    • Function [ {xl, х2,...} ,body] — создает чистую функцию ряда параметров x1, х2, ... с телом body.

    Для вычисления созданной таких образом функции после нее задается список параметров в квадратных скобках. Например, взятую ранее в качестве примера функцию возведения в степень можно задать и использовать следующим образом:


    Function[{x, n}, x^n]

    Function! {х, п), xn]

    %[2, 3]

    8

    Чистую функцию можно легко превратить в обычную функцию пользователя, что показывает следующий пример:


    fun=Function[{x,n},х^n]

    Function[ {х, n}, хn]

    {fun[2,3],fun{z,y}}

    {8, zy }

    Анонимные функции

    Предельно компактную форму задания имеют так называемые анонимные функции. Они не имеют ни названия, ни обычного определения и задаются только выражениями специального вида. В этом выражении вместо переменных используют обозначения # (для одной переменной) или #1, #2, ... (для ряда переменных). Завершается тело функции символом «&». Если надо вычислить функцию, то после ее записи в квадратных скобках указывается список фактических параметров.

    Для нашего примера анонимная функция выглядит так:


    #1^#2 &[2, 3]

    8

    #1^#2 &[у, z]

    y^z

    С помощью анонимных функций нетрудно создавать обычные функции пользователя:


    f[x_, y_] = #1^#2 &[х, у]

    хy

    f[2, 3]

    8

    Несмотря на то что применение анонимных функций открывает возможности компактного задания многих функций, эта форма едва ли интересна для большинства читателей — они наверняка предпочтут пусть немного более длинное, но значительно более очевидное задание функций другими способами.

     

    5. Суперпозиция функций

     

    Суперпозиция функций

     

    При функциональном программировании часто используется суперпозиция функций. Для ее реализации используются следующие функции:

    • Nest [expr, x, n] — n раз применяет выражение (функцию) ехрг к заданному аргументу х,
    • NestList [f, x, n] — возвращает список результатов (п+1)-кратного применения функции f к заданному аргументу х;
    • Fold[f, x, list] — дает последний элемент в FoldList [f, x, list];
    • FoldList [f, x, {a,b,...} ] — возвращает список {x,f [x,a],f [f [x,a],b],...};
    • ComposeList [ { f , f ,...}, x] — генерирует список в форме {х,а[х] ,а[а[х] ],...}.

    Примеры, иллюстрирующие действие этих функций, представлены ниже:


    Nest[f, x, 5]

    f[f[f[f[f[x]]]]]

    Nest[Exp[x], x, 5]

    Ех[Ех[Ех[Ех[Ех[х]]]]]

    NestList[f, x, 3]

    {x, f[x], f[f[x]], f[f[f[x]]]}

    Fold[f, x, (-1, 2, 3}]

    f[f[f[x, 1], 2], 3]

    FoldList[f, x, {1, 2, 3}]

    {x, f[x, 1], f[f[x, 1], 2], f[f[f{x, 1], 2], 3]}

    ComposeList[{Exp, Ln, Sin), x]

    {x, Ex, Ln[Ex] , SinlLn[Ex]] ]}

     

    Функции Fixed Point и Catch

    В функциональном программировании вместо циклов, описываемых далее, может использоваться следующая функция:

    • FixedPoint [ f, expr ] — вычисляет expr и применяет к нему f, пока результат не перестанет изменяться;
    • FixedPoint [ f, expr, SameTest->comp] — вычисляет expr и применяет к нему f, пока два последовательных результата не дадут True в тесте SameTest.

    Пример применения функции FixedPoint:


    FixedPoint[Function[t, Print[t]; Floor[t/2]], 27]

    27

    13

    6

    3

    1

    0

    0

    Последний результат (ноль) выводится в отдельной (нумерованной) ячейке вывода и означает завершение процесса итераций — деления t на 2.

    Следующий пример показывает, как можно создать цепную дробь с помощью функции Nest:


    Nest[ Functiontt, 1/(1+t)], у, 3 ]

    1/(1/(1/((1+y)+1)+1)+1)

    Еще одна функция такого рода — это Catch:

    • Catch [expr] — вычисляет expr, пока не встретится Throw [value], затем возвращает value;
    • Catch [expr, form] — вычисляет expr, пока не встретится Throw [value, tag], затем возвращает value;
    • Catch [expr, form, f] — возвращает f [value, tag] вместо value. Ниже представлены некоторые конструкции циклов с оператором Catch:

    Catch[ x, a, f ]

    х

    Catch[ Throw[ x, у ], у, fun ]

    fun[x, у]

    Catch[ NestList[l/(# + 1)&, -3, 5] ]

    {-3,-1/2, 2, 1/3, 3/4, 4/7}

    Catch[ NestList[l/(# + 1)&, -3., 5] ]

    {-3., -0.5, 2., 0.333333, 0.75, 0.571429}

    Catch[Do[Print[i]; If[i > 4, Throw[i+2]], i, 10]]

    1

    2

    3

    4

    5

    7

     

    Реализация рекурсивных и рекуррентных алгоритмов

    Рассмотрим несколько простых примеров, выявляющих суть функционального программирования. Вначале это будет пример, в котором задана функция sen [х, n], вычисляющая сумму синуса в степени n и косинуса в степени n:


    scn[x_, n_] := Sin[x]^n + Cos[х]^n

    scn[l, 2]

    1

    scn[x, 2]

    1

    scn[x, n]

    Cos[x]n+ Sin[x]n

    В этом простейшем примере результат вычислений есть возвращаемое функцией sen значение — численное или символьное. В свою очередь, функция sen в своем теле имеет встроенные функции синуса и косинуса.

    Важное место в решении многих математических задач занимают реализации рекурсивных и рекуррентных алгоритмов. Напомним, что рекурсия означает обращение функции к самой себе внутри ее тела, а рекуррентность — получение результата на данном шаге по результатам вычислений на предшествующих шагах.

    Рассмотрим, как это делается, с помощью описанных выше функций. Классический пример реализации рекурсивного алгоритма — вычисление факториала путем задания функции, в теле которой есть обращение к ней же самой:


    f[n_] :=n*f[n-1];f[0]=l;f[1]=1;

    Полезно, однако, обратить внимание на возможность явного задания результата для конкретных значений аргумента: f [ 0 ] =1 и f [ 1 ] =1. Так что рекурсия реализуется, начиная с n=2 и выше, в соответствии с классическим определением факториала.

    Для реализации рекуррентных алгоритмов в Mathematica имеется ряд функций, таких как Nest или FixedPoint. В следующих примерах показано вычисление

    квадратного корня из числа 5 по известному алгоритму Ньютона, записанному в виде функции newtonS:


    newtonS [x_] := N[ 1/2 ( х + 5/х )]

    Nest[newton5, 1.0, 5]

    2.23607

    NestList [newtonS, 1.0, 5]

    {1., 3., 2.33333, 2.2381, 2.23607, 2.23607}

    FixedPoint [newtonS, 1.0]

    2.23607

    FixedPointList [newtonS, 1.0]

    {1., 3., 2.33333, 2.2381, 2.23607, 2.23607, 2.23607, 2.23607}

    FixedPointList [newtonS, 1.0, SameTest -> (Abs[#l- #2] < 10.A-4 &)]

    {1., 3., 2.33333, 2.2381, 2.23607, 2.23607}

    Обратите внимание на то, что функции Nest и FixedPoint дают единственный конечный результат, тогда как функции NestList и FixedPointList возвращают еще и все промежуточные результаты итераций. Последний пример иллюстрирует остановку вычислений по заданной погрешности, равной 10 -4 .

    Далее зададим функцию, реализующую алгоритм Ньютона для нахождения корня произвольного выражения f(x) при начальном значении х 0 = а, по следующим формулам:


    x0=a;

    xn=xn-1-f(xn-1)/f'(xn-1)

    Эту функцию можно записать следующим образом:


    newtoniter[f_, x0_, n_] :=Nest[(# - f [#]/f'[#]) &, N[x0] , n]

    Тогда вычисления корня из выражения е^x - 2 с начальным приближением х 0 = 0.5 при числе итераций n можно организовать с помощью функций Nest и NestList:


    newtoniter [Function [ {х} , Ехр[х] - 2.0], 0.5, 5]

    0.693147

    newtoniter [Function [ {х }, Ехр[х] - 2.0], 0.5, #] & /@ Range [5]

    {0.713061, 0.693344, 0.693147, 0.693147, 0.693147}

    newtoniterl[f_,x0_,n_] := NestList[ (#-f [#] /f ' [#] ) &,N[x0] , n]

    newtoniterl [Function [{x} , Exp[x] - 2.0], 0.5, 5]

    {0.5, 0.713061, 0.693344, 0.693147, 0.693147, 0.693147}

    В первом случае возвращается только окончательный результат, а в других — еще и все промежуточные. Функция FixedPoint позволяет осуществлять итерации

    до тех пор, пока результат не перестанет изменяться (с машинной точностью). Это иллюстрирует следующий пример:


    newtonfp[f_, х0_] := FixedPoint[ (# - f [#]/f'[#]) &, N[xO]]

    newtonfp[Function[{x} , Exp[x] - 2.0], 0.5]

    0.693147

    Более сложные примеры функционального программирования мы рассмотрим позже, при описании создания пакетов расширения систем Mathematica.

     

    6. Пример программирования графической задачи

     

    Пример программирования графической задачи

    Графические задачи составляют значительную часть задач, решаемых с помощью Mathematica. С точки зрения программирования эти задачи не имеют особой специфики. Большая часть из них сводится к заданию функции, описывающей график, и применению одной из многочисленных графических функций системы с соответствующими опциями и директивами.

    На рис. 10.1 показано задание функции GrayCode и ее графическое представление, полученное с помощью встроенной функции ListPlot.

    Рис. 10.1. Задание функции GrayCode и ее графическое представление на плоскости

    В качестве следующего примера рассмотрим задачу на построение сложного графика функции Мандельброта. Пример задания соответствующей функции MandelbrotFunction и применения графической функции DensityPlot для наглядного визуального представления функции MandelbrotFunction на комплексной плоскости представлен на рис. 10.2.

    Еще более сложную и любопытную задачу демонстрирует рис. 10.3. Здесь задана функция JuliaFunction, которая представляет одну из моделей деления клеток. На этом же рисунке показано построение множества графиков, дающих прекрасное визуальное представление данной функции.

    Рис. 10.2. Пример задания функции MandelbrotFunction и построения ее графика плотности

    Разумеется, приведенные примеры далеко не исчерпывают всего многообразия графических возможностей языка программирования систем Mathematica.

    Рис. 10.3. Задание функции JuliaFunction и ее графическое представление

     

    gl10-1.jpg

    Изображение: 

    gl10-2.jpg

    Изображение: 

    gl10-3.jpg

    Изображение: 

    7. Использование процедур

     

    Использование процедур

     

    В основе процедурного программирования лежит понятие процедуры и типовых средств управления — циклов, условных и безусловных выражений и т. д. Процедурный подход — самый распространенный в программировании, и разработчики Mathematica были вынуждены обеспечить его полную поддержку. Однако программирование систем Mathematica и в этом случае остается функциональным, поскольку элементы процедурного программирования существуют в конечном счете в виде функций.

    Процедуры являются полностью самостоятельными программными модулями, которые задаются своими именами и отождествляются с выполнением некоторой последовательности операций. Они могут быть заданы в одной строке с использованием в качестве разделителя символа «;» (точка с запятой). Вот пример задания однострочной процедуры, отождествленной с именем г:


    r = (1 + х)^2; r= Expand[г]; r - 1

    2Х+Х2

    Обратите внимание на то, что в теле процедуры символ г используется как вспомогательная переменная. Эта процедура возвращает символьное выражение


    Expand[ (1+х)^2] - 1.

    В общем случае в теле процедуры могут находиться произвольные выражения, разумеется, с синтаксисом, присущим языку программирования системы. Процедура может не возвращать никаких значений, а просто выполнять определенный комплекс операций. Область записи подобных элементарных процедур ограничена ячейкой (строкой) ввода.

    Для задания процедуры со списком локальных переменных {а, b,...} и телом ргос может использоваться функция Module [ {а, b,...} ,ргос]. С применением этой функции мы столкнемся позже.

    Для создания полноценных процедур и функций, которые могут располагаться в любом числе строк, может использоваться базовая структура — блок:

    • Block [{x, у,...}, procedure] — задание процедуры с декларацией списка локальных переменных х, у,...;
    • Block[{x = х0, у=у0,...}, procedure] — задание процедуры с декларацией списка переменных х, у,... с заданными начальными значениями.

    Пример использования базовой структуры:


    g[x_] := Block[{u}, u = (1 + х)^2; u = Expand[u] ] g[а + b]

    l+2a+a2+2b+2ab+b2

    u

    u

    u = 123456; g[2]

    9

    u

    123456

    Обратите внимание: последние действия показывают, что переменная и, введенная в тело базовой структуры, является действительно локальной переменной, и присвоение ей символьного выражения (1 + х) ^ 2 в теле блока игнорируется вне этого блока. Если переменная и до применения в функции была не определена, то она так и остается неопределенной. А если она имела до этого некоторое значение (в нашем случае — 123 456), то и по выходе из процедуры она будет иметь это значение.

    Организация циклов

    Многие задачи в системе Mathematica решаются с использованием линейных алгоритмов и программ. Они могут быть представлены непрерывной цепочкой выражений, выполняемых последовательно от начала до конца.

    Однако в большинстве случаев серьезные вычисления базируются на использовании циклических и разветвленных алгоритмов и программ. При этом, в зависимости от промежуточных или исходных данных, вычисления могут идти по разным ветвям программы, циклически повторяться и т. д. Для реализации разветвленных программ язык программирования должен содержать управляющие структуры, то есть специальные конструкции языка, реализующие в программах ветвление. Они используются при различных методах программирования, в том числе при процедурном и функциональном программировании.

    Циклы типа Do

    К важнейшим управляющим структурам в языках программирования относятся циклы. С их помощью осуществляется циклическое исполнение некоторого выражения ехрr заданное число раз. Это число нередко определяется значением некоторой управляющей переменной (например, i, j и т. д.), меняющейся либо с шагом +1, либо от начального значения imin до конечного значения imax с шагом di. Циклы могут быть одинарными или множественными — вложенными друг в друга. Последние используют ряд управляющих переменных. Такого рода циклы организуются с помощью функции Do: О Do [expr, {imax} ] — выполняет imax раз вычисление ехрг; О Do [expr, {i, imax}] — вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);

    • Do [expr, {i, imin, imax} ]—вычисляет ехрr с переменной i, последовательно принимающей значения от imin до imax с шагом 1;
    • Do [expr, {i, imin, imax, di}] — вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax с шагом di;
    • Do [expr, {i, imin, imax}, {j, jmin, j max},...] — вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j, i и т. д.

    Примеры организации цикла Do и его исполнения представлены ниже:


    Do[Print["hello"], {5}]

    hello

    hello

    hello

    hello

    hello

    Do[Print[i], {i, 3}]

    1

    2

    3

    Do[Print[i], {i, 5, 8}]

    5

    6

    7

    8

    Do[Print[i], {i, 0 , 1, 0.25}]

    0

    0.25

    0.5

    0.75

    1.

    Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла ее значение остается тем же, что было до входа:


    i=2

    2

    Do[Print[i], i, 1, 5]

    1

    2

    3

    4

    5

    1

    2

    Вся программа с циклом является содержанием одной ячейки, и ее листинг охвачен квадратной скобкой. Для иллюстрации вывода здесь использована команда Print в теле цикла. Нетрудно заметить, что управляющая переменная цикла может принимать как целочисленные, так и вещественные значения. Возможность организации цикла в цикле иллюстрируется следующим примером:


    Do [Do [Print [i, " ", j, " ", i + j], {j, 1, 3}], {i, 1, 3}];

    1 1 2

    1 2 3

    1 3 4

    2 1 3

    2 2 4

    2 3 5

    3 1 4

    3 2 5

    3 3 6

    Здесь используются два цикла с управляющими переменными i и j. Командой Print выводятся значения переменных i и j, а также их суммы i+j.

    Следующий пример показывает применение цикла Do для задания функции, вычисляющей п-е число Фибоначчи:


    fibonacci[(n_Integer)?Positive] :=

    Module[fnl = 1, fn2 =0,

    Do[fnl, fn2 = fnl + fn2, fnl, n- 1] ; fnl]

    fibonacci[10]

    55

    fibonacci[100]

    354224848179261915075

    fibonacci[-10]

    fibonacci[-10]

    Обратите внимание на применение в этом примере функции Module. Она создает программный модуль с локальными переменными (в нашем случае fnl и fп2), в котором организовано рекуррентное вычисление чисел Фибоначчи.

    Наконец, последний пример показывает применение цикла Do для создания цепной дроби:


    х = у; Do[x = 1/(1 + k х), {k, 2, 8, 2}]; х

    Циклы типа For

    Другой вид цикла — цикл For — реализуется одноименной функцией:


    For[start, test, incr, body]

    В ней сначала один раз вычисляется выражение start, а затем поочередно вычисляются выражения body и incr до тех пор, пока условие test не перестанет давать логическое значение True. Когда это случится, то есть когда test даст False, цикл заканчивается.

    Следующий пример показывает создание простой программы с циклом For и результат ее выполнения:


    Print["i x"]

    For [x=0; i=0, i < 4, i++

    [x += 5*i, Print[i, " ", x]]]

    i x

    15 ,

    2 15

    3 30

    4 50

    Return[x]

    Return[50]

    Программа, приведенная выше, позволяет наблюдать за изменением значений управляющей переменной цикла i и переменной х, получающей за каждый цикл приращение, равное 5*i. В конце документа показан пример на использование функции возврата значений Return [x]. В цикле For не предусмотрено задание локальных переменных, так что надо следить за назначением переменных — при использовании глобальных переменных неизбежны побочные эффекты.

    Циклы типа While

    Итак, функция For позволяет создавать циклы, которые завершаются при выполнении (эволюции) какого-либо условия. Такие циклы можно организовать и с помощью функции While [test, expr], которая выполняет expr до тех пор, пока test не перестанет давать логическое значение True.

    Ниже дан практический пример организации и использования цикла While:


    i := 1; х := 1; Print["i x"] ;

    While[i < 5, i += 1; x += 2*i; Print[i, " ", N[x]]]

    i x

    2 5.

    3 11.

    4 19.

    5 29.

    Return[x]

    Return[29]

    Циклы типа While, в принципе, могут заменить другие, рассмотренные выше, типы циклов. Однако это усложняет запись и понимание программ. Аппарат локальных переменных в этом типе циклов не используется.

    Директивы-функции прерывания и продолжения циклов

    В указанных типах циклов и в иных управляющих структурах можно использовать следующие директивы-функции:

    • Abort [ ] — вызывает прекращение вычислений с сообщением $ Aborted;
    • Break [ ] — выполняет выход из тела цикла или уровня вложенности программы, содержащего данный оператор (циклы типа Do, For и While или тело оператора-переключателя Switch). Оператор возвращает Null-значение (без генерации секции выхода);
    • Continue [ ] — задает переход на следующий шаг текущего цикла Do, For или While;
    • Interrupt [ ] — прерывает вычисления с возможностью их возобновления;
    • Return [ ] — прерывает выполнение с возвратом значения Null;
    • Return [expr] — прерывает выполнение с выводом значения выражения ехрr;
    • Throw [value] — задает прекращение выполнения цикла Catch, если в ходе эволюции ехрг встречается значение value (см. примеры выше).

    На рис. 10.4 представлено применение директив Abort [ ] и Interrupt [ ] в середине набора команд. Нетрудно заметить, что директива Abort [ ] просто прерывает выполнение цепочки команд и выводит сообщение $ Aborted. А вот директива Interrupt [ ] выводит диалоговое окно, с помощью которого можно либо прервать вычисления, либо продолжить их.

    Рис. 10.4. Действие директив Abort[] и lnterrupt[]

    Если продолжить вычисления (нажав кнопку Continue Evaluation), то вывод выражений командами Print будет продолжен, что видно из рис. 10.5.

    Условные выражения и безусловные переходы

    Для подготовки полноценных программ помимо средств организации циклов необходимы и средства для создания разветвляющихся программ произвольной структуры. Обычно они реализуются с помощью условных выражений, позволяющих в зависимости от выполнения или невыполнения некоторого условия (condition) выполнять те или иные фрагменты программ.

    Рис. 10..5. Продолжение вычислений после команды Interrupt[]

    Функция IF

    Как у большинства языков программирования, условные выражения задаются с помощью оператора или функции IF. Система Mathematica имеет функцию If, формы которой представлены ниже:

    • If [condition, t, f] — возвращает t, если результатом вычисления condition является True, и f, если результат равен False;
    • If [condition, t, f, u ]—то же, но дает и, если в результате вычисления condition не было получено ни True, ни False.

    Следующий пример показывает создание программной процедуры с циклом Do, выход из которой реализуется с помощью функции I f и директивы прерывания Aborted! ]:


    х := 1; Print["i x"];

    Do[{If [i == 5, Abort[], None],

    i += 1; x += 2*i; Print[i, " ", N[x]]},

    {i, 1, 100}]

    i x

    2 5

    3 11.

    4 19.

    5 29.

    $Aborted

    Return[x]

    Return[1]

    Тот же пример, но с применением директивы выхода из цикла Break [] в функции If показан ниже:


    х := 1; Print["i x"];

    Do[{If [i == 5, Break[], None],

    i += 1; x += 2*i; Print[i, " ", N[x]]},

    {i, 1, 100}]

    i x

    2 5.

    3 11.

    4 19.

    5 29.

    Return[x]

    Return[29]

    В данном случае никаких специальных сообщений о выходе из цикла не выдается. Функция If обеспечивает ветвление максимум по двум ветвям программы. Для ветвления по многим направлениям можно использовать древовидные структуры программ с множеством функций If. Однако это усложняет исходный текст программы.

    Функции-переключатели

    Для организации ветвления по многим направлениям в современных языках программирования используются операторы-переключатели. В системе Mathematica множественное ветвление организовано с помощью функций Which и Switch:

    • Which [testl, valuel, test2, value2,...] — вычисляет в порядке следования каждый из testi, сразу возвращая именно ту величину из valuei, которая относится к первому testi, давшему True;
    • Switch [expr, forml, valuel, form2, value2,...] — вычисляет селектор expr, затем сравнивает его последовательно с каждой из меток f ormi, вычисляя и возвращая то valuei, которое соответствует первому совпадению.

    Приведем примеры работы функции which:


    Whichtl == 2,1,2== 2, 2, 3 == 3, 3]

    2

    Which[l == 2, x, 2 == 2, у, 3 == 3, z]

    y

    Следующие примеры иллюстрируют работу функции Switch:


    Switch[1, 1, а, 2, b, 3, с]

    а

    Switch[2, 1, а, 2, b, 3, с]

    b

    Switch[3, 1, а, 2, b, 3, с]

    с

    Switch[8, 1, а, 2, b, 3, с]

    Switch[8,

    1, а,

    2, b,

    3, с]

    Обратите внимание на последний пример — при неверном задании первого параметра (селектора) просто повторяется запись функции.

    Следующий пример показывает возможность выбора с применением вещественных значений селектора и меток:


    Switch[8., 1.5, а, 2.5, b, 8., с]

    с

    Switch[1.5, 1.5, а, 2.5, b, 8., с]

    а

    Switch[8, 1.5, а, 2.5, b, 8., с]

    Switch[8,

    1.5, а,

    2.5, b,

    8., с]

    Опять-таки, обратите внимание на последний пример — здесь использован селектор в виде целого числа 8, тогда как метка выбора — вещественное число 8. Выбор при этом не происходит, поскольку целочисленное значение 8 не является тождественным вещественной восьмерке.

    Безусловные переходы

    В целом, условные выражения в языке программирования системы Mathematica позволяют реализовать любой вид ветвления в программах. Однако иногда бывает полезно без лишних раздумий указать в программе явный переход к какой-либо ее части. Для этого используется оператор безусловного перехода Goto [tag]. который дает переход к тому месту программы, которое отмечено меткой Label [tag]. Возможны также формы Goto [expr] и Label [expr], где ехрr — вычисляемое выражение.

    Применение оператора Goto иллюстрирует следующий пример:


    (q = 2; Label[start]; Print[q]; q += 2;

    If[q < 7, Goto[start]])

    2

    4

    6

    Здесь с помощью оператора Goto [start] организован цикл с возвратом на метку Label [start], действующий до тех пор, пока значение q меньше 7. При этом q меняется от начального значения 2 с шагом 2, причем добавление 2 к текущему значению q осуществляется укороченным оператором сложения q+=2.

    Интересной особенностью языка программирования Mathematica является возможность создания переходов по значению вычисляемого выражения. Например, Goto [2+3] дает переход к метке Label [5] или даже Label [1+4], что видно из следующего примера:


    Goto[2 + 3];

    Print["ааааа"];

    Label[1 + 4];

    Print["bbbbb"]

    bbbbb

    Переходы, задаваемые выражениями, и метки, меняющие свой идентификатор, редко встречаются в обычных языках программирования, хотя они обеспечивают новые обширные и довольно необычные возможности по созданию программ с различными ветвлениями.

    Для языка программирования системы Mathematica, ориентированного на безупречное и строгое структурное программирование, введение оператора Goto может расцениваться как отступничество от основополагающих идей структурного программирования. Поэтому на применение этого оператора в методах структурного программирования наложено табу. Тем не менее, этот оператор есть, а применять его или нет — дело пользователя.

     

    gl10-4.jpg

    Изображение: 

    gl10-5.jpg

    Изображение: 

    8. Проблемы совместимости

     

    Проблемы совместимости

     

    Мы уже не раз обращали внимание на то, что при создании документов нередки конфликты между переменными, назначаемыми пользователем, и переменными, входящими в программы ядра, между функциями пользователя и встроенными функциями, между их заголовками и т. д. Ситуация усложняется при использовании пакетов расширения, поскольку в них широко используются переменные и различные функции, причем нередко обозначенные так же, как и встроенные функции.

    Особенно коварны побочные эффекты в конструкциях, содержащих вспомогательные переменные, — например, в итерационных циклах, функциях вычисления суммы и произведения и т. п. Они содержат переменные-итераторы i,. j, k и т. д. Обычно избежать конфликтов можно с помощью механизма локализации итераторов. Вернемся к уже обсуждавшимся примерам. Возьмем пример с вычислением суммы:


    i=2

    2

    Sum[i,{i,l,4}]

    10

    i

    2

    Ясно, что сумма вычисляется с применением цикла с заданным числом повторений. В его конце итератор i получает значение 4. Но глобальная переменная с тем же именем имеет значение 1=2, которое она получила до вычисления суммы с помощью функции Sum. В данном случае это достигнуто за счет того, что в теле функции переменная-итератор является локальной.

    Нетрудно убедиться, что проблемы со статусом переменных возможны и в, казалось бы, изученных функциях суммирования и перемножения. На это явно указывает следующий пример:


    func[x_] :=Sum[x^i, {i,4} ] {func[y] ,func[i] }

    (У +У2+ У3+У4, 30}

    i

    2

    Результат вычисления func [у] вполне понятен, тогда как вычисление func [i] носит явно обескураживающий характер. Причина его в том, что вместо символьного значения i в данном случае оказались использованы численные значения итератора i. А в этом случае функция Sum просто вычисляет численные значения. Говорят, что она работает по контексту]

    А теперь рассмотрим пример с циклом For:


    For [ i=l , i<=4 , i++ , Print [ i ] ]

    1

    2

    3

    4

    i

    5 .

    На этот раз переменная i изменила свое значение в конце цикла с 2 на 5. Это говорит о том, что пользователю-программисту надо очень внимательно относиться к статусу переменных во всех итерационных, да и других программах.

    Разумеется, Mathematica содержит средства для избежания подобного смешения ролей переменных. Одно из них — применение конструкции Module:


    i=2

    2

    Module[{i},For[i=l,i<=4,i++,Print[i]]]

    1

    2

    3

    4

    i

    2

    На этот раз захвата итератором глобальной переменной i удалось избежать. Однако этот пример носит не более чем частный характер. Вообще говоря, если переменная-итератор задается в теле функции, то она будет локальной, а если она задается за пределами функций, то глобальной.

    Понятие о контекстах

    Для разрешения подобных противоречий в системе Mathematica введен особый механизм контекстов. Напомним, что под контекстом подразумевается некоторое разъяснение характера связанных с контекстом объектов. Другими словами, это означает, что с каждым объектом системы Mathematica (например, с переменными или функциями) связан некоторый контекст. Чисто внешне контекст задается в виде Имя_контекста (обратный апостроф в конце имени и есть признак контекста).

    Итак, контекст фактически является некоторым признаком объекта. Каждый объект системы Mathematica имеет свой контекст, который записывается перед именем объекта (знак «'» при этом является разделителем). Обычно он не виден, но существует. Объекты с одинаковыми именами могут иметь разные контексты и действовать по-разному — то есть по контексту. Пользователям полезно усвоить такую аналогию: контексты — это как бы разные папки со своими именами, куда могут помещаться одноименные файлы-объекты.

    С другой стороны, один и тот же контекст может принадлежать разным объектам. Например, все системные переменные и встроенные функции имеют контекст System', то есть они относятся к системным объектам, а все символы, вводимые в начале работы с системой, имеют контекст Global (глобальные).

    Работа с контекстами

    В системе Mathematica есть средства для визуализации контекстов. Прежде всего это функция Context:


    Context[Tan]

    System'

    Context[E]

    System'

    Context/@Cos,Pi,Abort

    {System', System' , System'}

    Текущее значение контекста определяет системная переменная $Context или функция Context [ ]:


    {$Context,Context[]}

    {Global', Global'}

    В начале сеанса работы по умолчанию действует контекст Global ~, что означает глобальный статус вводимых символов:


    Context/@{q,r,w}

    {Global', Global', Global'}

    Однако контекст может быть заменен на любой нужный пользователю просто указанием его перед соответствующим символом или словом:


    {new'q, new' w,Global'r}

    {new'q, new'w, r}

    Context/@{new' q,new' w,Global' r}

    {new', new', Global4}

    Обратите внимание на то, что символы new 4 q и new' w имеют новый контекст new s и отображаются вместе с ним (но контекст указан перед символом). А вот символ Global ~ r отображается лишь своим кратким именем. Причина этого в том, что текущий контекст есть Global 4 , а контекст new 4 отсутствует в списке контекстов (context path). Что касается символов q, r и z, то сами по себе (без новой контекстной приставки) они по-прежнему имеют контекст "Global:


    Context/@{q,r,w}

    {Global 4 , Global 4 , Global 4 }

    Для вывода списка контекстов используется переменная $ContextPath:


    $ContextPath

    {Graphics 4 Animation 4 , Global 4 , System 4 }

    С помощью функции Prepend можно добавить в список новый контекст, например new":


    $ContextPath=Prepend[$ContextPath,"new4"]

    {new', Graphics' Animation', Global', System'}

    Теперь функция Context возвращает только контексты символов new'q, new'w и Global' r:


    Context/@{new'q,new'w,Global'r}

    {new', new', Global'}

    С помощью функции Begin можно изменить текущий контекст на заданный, например Global' на new':


    Begin["new''"]

    new'q=5;

    {q,Context[q]} {5, new'}

    Теперь легко разобраться, как интерпретируются символы с разными контекстами. Любой символ, вводимый без контекстной приставки, то есть своим коротким именем, интерпретируется и выводится с этим именем, если его контекст является текущим. Если символ вводится полным именем, то проверяется, есть ли его контекст в списке $ContextPath. Если он есть, то к символу добавляется самый левый контекст из имеющихся в списке. Таким образом, по мере ввода новых контекстов, имена которых совпадают со старыми, происходит вытеснение новыми контекстами старых. Другими словами, это позволяет обновить уже имеющиеся определения, сохранив их на случай отмены старых контекстов.

    Этот принципиально важный механизм модификации объектов играет решающую роль в создании пакетов расширений. В них часто уже имеющиеся функции (со старыми контекстами) заменяются новыми, одноименными с ними, но имеющими иные контексты.

    Получение списков определений с контекстами

    Для получения списка всех определений с заданным контекстом можно использовать функции Names [ "Context' S" ], где S — шаблон, определяющий интересующие нас имена. Например, для получения всех определений с контекстом System' можно использовать функцию Names ["System' *]. Поскольку этот список довольно большой, ограничимся примером вывода всех определений с контекстом System", начинающихся с буквы U:


    Names["System'U*"]

    {UnAlias, Underflow, Underoverscript, UnderoverscriptBox, UnderoverscriptBoxOptions, Underscript, UnderscriptBox, UnderscriptBoxOptions, UndocumentedTestFEParserPacket, UndocumentedTestGetSelectionPacket, Unequal, Unevaluated, Uninstall, Union, Unique, UnitStep, Unprotect, UnsameQ, Unset, Up, Update, UpperCaseQ, UpSet, UpSetDelayed, Upvalues, URL, Using)

    Функция Names [ ] без параметра выводит полный список всех определений как из ядра, так и из пакетов расширений с указанием их контекстов. Таким образом, данная функция дает самую полную информацию об определениях (функциях, константах и т. д.), которые содержит текущая версия системы Mathematica.

     

    9. Подготовка пакетов расширений системы Mathematica

     

    Подготовка пакетов расширений системы Mathematica

     

    Мощным средством расширения возможностей системы Mathematica является подготовка пакетов расширений. Пакеты расширений позволяют создавать новые процедуры и функции и хранить их на диске в виде файлов с расширением . m. После считывания такого пакета с диска все входящие в него определения функций становятся доступными для использования в соответствии с правилами, принятыми для встроенных функций. Текст пакета расширения не выводится после его вызова, чтобы не загромождать документ вспомогательными описаниями. В сущности, пакеты расширения — это просто наборы программ на языке программирования системы Mathematica, подобранные по определенной тематике.

    Типовая структура пакетов расширения

    Структура пакета расширений (программы) в минимальном виде выглядит следующим образом:


    (* Вводный комментарий *)

    BeginPackage["Имя_пакета' "]

    Mean::usage = "Имя функции[Параметры] Текстовый комментарий"

    Begin[" 'Private' "] Unprotected[Список_имен] Определения новых функций

    End[ ]

    Установка атрибутов защиты EndPackage[ ] (* Завершающий комментарий *)

    Особая структура пакетов расширений связана с реализацией описанной выше идеологии контекстов. Пакет открывается необязательным текстовым комментарием, который обрамляется двойными символами « (*» и «*) ». Он может быть как однострочным, так и многострочным. Обычно вводный комментарий включает в себя имя пакета, наименование фирмы и автора — создателей пакета, историю развития, дату создания и т. д. Если вы программируете для себя, можете на первых порах опустить все эти комментарии. Но не забудьте их ввести после отладки пакета, как того требуют культура и дисциплина программирования.

    Затем пакет открывается словом BeginPackage. Это слово дается с квадратными скобками, в которых указывается контекст (см. выше) пакета. Обратите внимание на то, что после имени пакета должен стоять апостроф или цепочка символов, обрамленная апострофами. Имя пакета не должно совпадать ни с одним из известных, то есть быть уникальным.

    Эта команда изменяет список контекстов, и он принимает вид


    {Имя_пакета',System'}.

    Таким образом, на первом месте списка контекстов оказывается имя пакета, а на втором — контекст System'. Теперь любой вводимый и не встроенный символ приобретает контекстную приставку с именем данного пакета.

    Обратите внимание на то, что контекст System' сохранился в новом списке контекстов, но стал вторым. Это значит, что если вы вводите слова и символы, встроенные в систему, то они будут замещены новыми определениями. К примеру, если вы решили вычислять функцию Sin [x] по новому и ценному для вас алгоритму, то ему будет отдаваться предпочтение при каждом использовании этой функции до тех пор, пока вы работаете с данным пакетом расширения. Однако, как только вы перестанете работать с пакетом, восстановится роль встроенной функции Sin[x].

    Следующий блок пакета — сообщения о назначении функций. Эти сообщения выводятся, если после загрузки пакета задать вопросительный знак с последующим именем функции. Эти сообщения не обязательны, но они обеспечивают единство диалога с системой и, безусловно, нужны при профессиональной подготовке пакета. Обычно в этих сообщениях кратко указываются синтаксические правила использования функций и назначение их параметров, указываемых в квадратных скобках.

    Затем следует главная часть пакета — определения новых функций. Она открывается определением Begin [" ' Private ' "]. Оно, не меняя список контекстов, устанавливает новый текущий контекст Имя_пакета' Private'. Он присваивается всем ранее не встречавшимся символам. Имя Private принято в пакетах расширения системы Mathematica, хотя, в принципе, может быть любым другим именем. После него следуют сами определения, в которых могут использоваться любые средства, включенные в ядро системы.

    В некоторых случаях имена функций могут повторять ранее определенные в ядре системы. Это полезно, если пользователь считает, что введенное им определение уже известной функции более точно или более универсально, чем использованное в системе. В таких случаях перед новым применением идентификатора надо позаботиться о снятии с него защиты с помощью функции Unprotect. Именно эта часть и определяет существо пакета и его ценность.

    Завершается эта часть определением End [ ]. При этом восстанавливается контекст, который был до определения Begin [" ' Private' " ], то есть контекст с именем пакета. После этого идет необязательная часть с указанием атрибутов защиты. Пакет завершается определением EndPackage [ ], которое восстанавливает контекст, бывший текущим до загрузки пакета (например Global' 4 ), a контекст Имя_пакета 4 помещает в начало прежнего списка контекстов..

    Контексты в системах Mathematica 3 и 4 идентичны — иначе и быть не может, поскольку всякая старшая версия системы должна обеспечивать совместимость с предшествующей версией. Впрочем, в Mathematica 4 включены два новых контекста, Developer 4 и Experimental 4 .

    Необязательный заключительный комментарий чаще всего дает список тестовых примеров. Он особенно желателен, если пакет содержит определения не вполне очевидных функций. Не забывайте, что этот комментарий не выводится и не исполняется — он нужен лишь на этапе знакомства с пакетом. Разумеется, такое знакомство необходимо при каждой серьезной попытке применения того или иного пакета расширения или применения системы.

    В принципе, текстовые комментарии могут вводиться на русском языке. Однако при этом возникают определенные трудности. При выводе комментариев на экран дисплея при работе с оболочкой системы Mathematica могут наблюдаться несоответствия между шрифтами, установленными при вводе комментариев и при их выводе. Поэтому лучше использовать комментарии на английском языке, тем более что комментарии ко всем встроенным функциям и к поставляемым расширениям системы даны, естественно, на английском языке.

    Средства создания пакетов расширений

    Для создания пакетов расширений в общем случае используются следующие средства системы:

    • Begin ["context'"] — устанавливает текущий контекст;
    • BeginPackage ["context'"] — делает context единственным активным контекстом. Возможна также форма BeginPackage [ "context" ", { "needl' ", "need2'",...}];'
    • Return [ ] — возвращает Null;
    • End [ ] — возвращает текущий контекст и переходит к предыдущему;
    • EndAdd [ ] — возвращает текущий контекст и переходит к предыдущему, предварительно добавляя текущий контекст к списку контекстов $Context-Path;
    • EndPackage [ ] — восстанавливает $Context и $ContextPath в их значениях до предшествующего BeginPackage и добавляет текущий контекст к списку $ContextPath;
    • Exit [ ] — завершает сеанс работы Mathematica;
    • Goto [tag] —просматривает текущее составное выражение в поиске Label [tag] и передает управление в эту точку;
    • Interrupt [ ] — производит прерывание в теле вычислений;
    • Label [tag] — представляет точку в составном выражении, в которую управление передается директивой Goto;
    • Quit [ ] — завершает сеанс работы Mathematica.

    Приведем пример простого фрагмента программы, дающего определение новой функции ExpandBoth с помощью некоторых из представленных средств:


    (* :Title: ExpandBoth *)

    (* :Context: ProgramminglnMathematica'ExpandBoth" *)

    (* : Author: Roman E. Maeder *)

    ExpandBoth: : usage = "ExpandBoth [e] expands all numerators and denominators in e."

    Begin ["' Private1"]

    ExpandBoth [x_Plus] := ExpandBoth /@ x

    ExpandBoth [x_] := Expand [ Numerator [x] ] / Expand [ Denominator [x] ]

    End [ ] Null

    Этот пример настолько прост, что читателю будет нетрудно разобраться с его сутью — расширением выражения по числителю и знаменателю. Ниже представлен сеанс работы с этим пакетом, файл которого expboth.m размещен в каталоге mypack, включенном в общий каталог пакетов расширений:


    <<mypack\expboth.m

    ?ExpandBoth

    ExpandBoth [e] expands all numerators and denominators in e.

    ExpandBoth [124 /12]

    31/3

    ExpandBoth [1234/12]

    617/6

    Мы вернемся к рассмотрению построения пакетов расширений после более детального рассмотрения некоторых деталей этого процесса.

    Текстовые сообщения и комментарии

    Ценность многих программ на любом языке программирования нередко сводится к нулю из-за отсутствия подробных текстовых комментариев. Из-за этого даже сами разработчики программ через месяц-другой перестают понимать собственные творения. А что говорить о пользователях, рискующих применить такие программы?

    Для создания текстовых комментариев различного назначения (как выводимых, так и не выводимых на экран в ходе работы с пакетом) в языке программирования системы Mathematica используются следующие средства:

    • (* Comment *) — задание не выводимого на экран текстового комментария, как однострочного, так и многострочного, в любом месте пакета;
    • Message [symbol: : tag] — вывод сообщения symbol::tag, если только вывод сообщений не отключен;
    • Message [symbol: :tag, e1, e2,...] — выводит сообщение, вставляя значения ei по мере необходимости;
    • $MessageList — глобальная переменная, возвращающая список имен сообщений, вырабатываемых во время вычисления текущей входной строки. Имя каждого сообщения заключено в HoldForm [ ]. $MessageList сохраняется в MessageList [n] и переустанавливается в { } после того, как произведена п-я выходная строка;
    • MessageList [n] — глобальный объект, который является списком имен (сообщений), которые вырабатываются в процессе обработки п-й входной строки;
    • MessageName, применяется в виде symbol: : tag или MessageName [symbol, "tag" ] — имя для сообщения;
    • $MessagePrePrint — глобальная переменная, чье значение, если установлено, применяется к выражениям перед тем, как они помещаются в текст сообщений;
    • $Messages — возвращает список файлов и каналов, в которые направляется вывод сообщений;
    • Messages [symbol] — возвращает все сообщения, присвоенные данному символу symbol.

    Следует отметить, что широкое применение комментариев обычно является признаком культуры программирования. Это особенно важно для математических систем, реализующих вычисления по сложным и подчас малопонятным для неспециалистов алгоритмам. Без подробных комментариев пакеты расширений и применений теряют свою практическую полезность и превращаются в ребусы — увы, куда менее интересные, чем те, которые публикуются в газетах и журналах.

    Защита идентификаторов от модификации

    Атрибут защиты Protected

    Как уже отмечалось, система Mathematica позволяет вводить константы, переменные и функции со своими именами — идентификаторами. Между функциями можно задавать различные отношения, в том числе и те, которые не соответствуют правилам, заданным в ядре системы.

    Идентификаторы должны быть уникальными, то есть не совпадать с именами встроенных функций, директив, опций, переменных и констант. Однако как быть, если нужно задать новое отношение для уже имеющихся встроенных функций или изменить их определения?

    Для решения таких вопросов в систему введена защита идентификаторов от модификации, которая при необходимости может сниматься. Все встроенные в ядро именованные объекты языка программирования системы являются защищенными по умолчанию. Они имеют соответствующий признак — атрибут Protected (защищенный).

    Установка и снятие атрибута защиты

    Для управления средствами защиты от модификации используются следующие директивы:

    • Protect [s1, s2,...] — устанавливает атрибут защиты от модификации (Protected) для перечисленных символов si;
    • Protect [\"forml\", \"form2\",...] — устанавливает атрибут защиты от модификации для всех символов, имена которых сопоставимы с любым из указанных строковых шаблонов f ormi;
    • Unprotect [s1, s2,...] — удаляет атрибут защиты от модификации (Protected) для символов si, что делает возможной их модификацию;
    • Unprotect [\"forml\", \"form2\",...] — снимает защиту всех символов, имена которых текстуально (по буквам) сопоставимы с любым из указанных formi.

    Дополнительные функции защиты

    Следующие атрибуты и директивы также используются при управлении модификацией:

    • NProtectedAll — атрибут, устанавливающий, что ни один из аргументов функции не будет модифицирован при применении N [ ];
    • NProtectedFirst — атрибут, указывающий, что первый аргумент функции не будет модифицирован применением N [ ];
    • NProtectedRest — атрибут, устанавливающий, что все аргументы после первого аргумента функции не будут модифицированы применением N [ ].

    Мы уже рассматривали модификацию функций, в частности снятие и назначение атрибутов защиты. Отметим лишь, что из последующих примеров будет ясно, что эти операции широко применяются в пакетах расширений.

    Примеры подготовки пакетов расширений

    Наиболее сложным моментом работы с системой Mathematica является разработка пакетов расширения профессионального качества. Именно такие пакеты позволяют приспособить всю мощь системы к решению тех задач, которые полезны конкретному пользователю.

    Начать работу с системой можно за несколько часов. Реальное ее освоение потребует нескольких месяцев упорной работы. А подготовка серьезных пакетов, решающих достаточно сложные задачи, может занять и несколько лет. Для облегчения этого процесса рассмотрим основные приемы подготовки пакетов расширений. Напоминаем, что пакеты можно готовить как в оболочке системы (их затем следует записать на диск как файлы с расширением .т), так и с помощью .внешних текстовых редакторов.

    В этом разделе представлено несколько примеров построения пакетов расширений системы Mathematica (версии не ниже 3.0), взятых из книги [34], а точнее, из примеров этой книги, включенных в справочную базу данных систем Mathematica. Из примеров удалена большая часть текстовых комментариев, сделанных на английском языке.

    Пакет проверки выражений на их алгебраичность

    Следующий пакет содержит определение функции AlgExpQ [expr], которая позволяет выяснить, является ли выражение ехрг алгебраическим.


    (* :Title: AlgExp *)

    (* :Context: Pro gra mminglnMathematica4AlgExp4 *) BeginPackage["ProgramminglnMathematica ' AlgExp '"]

    AlgExpQ::usage = "AlgExpQ[expr] returns true if expr is an algebraic expression."

    Begin["'Privateч"] SetAttributes[AlgExpQ, bistable]

    AlgExpQ[ _Integer ] = True

    AlgExpQ[ _Rational ] = True

    AlgExpQ[ c_Complex ] := AlgExpQ[Re[c]] && AlgExpQ[Im[c]]

    AlgExpQ[ _Symbol ] = True

    AlgExpQ[ a_ + b_ ] := AlgExpQ[a] && AlgExpQ[b]

    AlgExpQ[ a_ * b_ ] := AlgExpQ[a] && AlgExpQ[b]

    AlgExpQ[ a_ ^ b_Integer ] := AlgExpQ[a]

    AlgExpQ[ a_ ^ b_Rational ] := AlgExpQ[a]

    AlgExpQ[_] = False End[]

    EndPackage[]

    Если выражение является алгебраическим, то функция AlgExpQ возвращает логическое значение True, иначе она возвращает значение False:


    <<mypack\algexp.m

    ? AlgExpQ

    AlgExpQ[expr] returns true

    if expr is an algebraic expression.

    AlgExpQ [a * x ^ 2 + b * x + c]

    True

    AlgExpQ[Sqrt[x]]

    True

    AlgExpQ["x^2+l"]

    False

    AlgExpQ[1] True AlgExpQ[1.0]

    False

    Пакет реализации метода Рунге—Кутта

    Теперь рассмотрим, как выглядит пакет расширения, решающий систему дифференциальных уравнений хорошо известным численным методом Рунге—Кутта четвертого порядка. Ниже представлена распечатка данного пакета.


    (* :Title: RungeKutta *)

    (* iContext: ProgramminglnMathematica'RungeKutta' *)

    BeginPackage["ProgramminglnMathematica'RungeKutta'"]

    RKSolve::usage =

    "RKSolve[{el,e2,..}, {yl,y2,..}, {al,a2,..}, {tl, dt}] numerically integrates the ei as functions of the yi with inital values ai.The integration proceeds in steps of dt from 0 to tl.

    RKSolve[{el, e2,..},{yl,y2,..},{al,a2,..},{t,t0,tl, dt} ] integrates a time-dependent system from t0 to tl."

    Begin["'Private'"]

    RKStep[f_, y_, y0_, dt_] :=

    Module [{ kl, k2, k3, k4 }, kl = dt N[ f /. Thread[y -> yO] ];

    k2 = dt N[ f /. Thread[y -> y0 + kl/2] ];

    k3 = dt N[ f /. Thread [y -> yO + k2/2] ] ;

    k4 = dt N[ f /. Thread [y -> yO + k3] ] ;

    y0 + (kl + 2 k2 + 2 k3 + k4)/6

    RKSolve[f_List, y_List, y0_List, {tl_, dt_}] :=

    NestList[ RKStepff, y, #, N[dt]]&, N[y0], Round [N [ tl /dt ]] ] /;

    Length [f] == Length [y] == Length [y0]

    RKSolve [f_List, y_List, y0_List, {t_, t0_, tl_, dt_}] := Module f { res } ,

    res = RKSolve [ Append[f, 1], Append[y, t] , Append[y0, t0], {tl-t0, dt} ] ;

    Drop[#, -1]& /@ res /;

    Length [f] == Length [y] == Length [y0]

    End[]

    Protect [ RKSolve ]

    EndPackage[]

    Знающие реализацию этого метода обратят внимание на естественность записи общеизвестных математических операций. Пакет содержит определения двух функций: основной (RKSolve) и вспомогательной (RKStep). Последняя содержит вычисление решения на очередном шаге алгоритма по результатам вычислений на предшествующем шаге. Используется подстановка для переменной х и вычисление решения на очередном шаге по известной формуле Рунге— Кутта четвертого порядка точности.

    Теперь рассмотрим, как можно использовать такой пакет, создать который можно в любом текстовом редакторе, например в редакторе NotePad, входящем в состав Windows 95/98. Для удобства работы можно поместить файл этого пакета rk4.m в папку Mypack, расположенную в папке со стандартными пакетами. В этом случае вызов пакета и проверка его загрузки осуществляются следующим образом:


    << mypack\rk4.m

    ?RKSolve

    RKSolve [ {el, e2, ..}, {yl,y2,..}, {al,a2,..}, {tl, dt}] numerically integrates the ei as functions of the yi with inital values ai.The integration proceeds in steps of dt from 0 to tl. RKSolve [ {el, e2, ..}, {yl,y2,..}, {al,a2,..}, {t, t0, tl, dt}] integrates a time-dependent system from t0 to tl .

    Итак, при обращении ?RKSolve выводится информация о формате применения функции RKSolve. Она задана на английском языке. Можно записать эту информации и на русском языке, однако при этом возможна нестыковка наборов шрифтов. Поэтому рекомендуется подобную информацию давать на английском языке. В нашем случае решается система дифференциальных уравнений первого порядка в форме Коши, заданная правыми частями {el, е2,...} с переменными {yl, у2,...} и их начальными значениями {al, а2,...} в интервале времени от 0 до .1 при фиксированном шаге dt. Во второй форме записи функции время t может меняться от tO до tl с шагом dt.

    Приведенный ниже пример демонстрирует, как этот пакет используется на практике для решения системы дифференциальных уравнений y' = t*y + z и z' = t + y*z при начальных значениях у = z = 1 и t, меняющемся от 1 до 1.5 с шагом 0.1:


    RKSolve[{t*y + z, t + y*z}, {у, z}, {1, 1}, {t, 1, 1.5, 0.1}]

    {{!., 1.}, {1.22754, 1.22844), {1.52241, 1.53202),

    {1.90912, 1.95373}, {2.42456, 2.57444), {3.12741, 3.55937}}

    Решение представлено списком значений {yi, zi}, определяющим зависимости y(t) и z(t). Этот пример хорошо иллюстрирует реализацию популярного численного метода для решения систем дифференциальных уравнений.

    Пакет символьных преобразований тригонометрических функций

    Следующий пакет служит для демонстрации символьных преобразований тригонометрических функций синуса и косинуса.


    (* :Title: TrigDefine *)

    (* :Context: ProgramminglnMathematica'TrigDefine" *)

    BeginPackage["ProgramminglnMathematica' TrigDefine'"]

    TrigDefine::usage = "TrigDefine.m defines global rules for putting products of trigonometric functions into normal form."

    Begin["'Private'"] (* set the private context *)

    (* unprotect any system functions for which rules will be defined *)

    protected = Unprotect[ Sin, Cos ] (* linearization *) Sin/: Sin[x_] Cos[y_] := Sin[x+y]/2 + Sin[x-y]/2

    Sin/: Sin[x_] Sin[y_] := Cos[x-y]/2 - Cos[x+y]/2 Cos/: Cos[x_] Cos[y_] := Cos[x+y]/2 + Cos[x-y]/2

    Sin/: Sin[x_]An_Integer?Positive :=

    Expandt (1/2- Cos[2x]/2) Sin [x]^(n-2) ]

    Cos/: Cos[x_]An_Integer?Positive :=

    Expand[(l/2 + Cos[2x]/2) Cos[x]^(n-2)]

    Protect[ Evaluate[protected]](* restore protection of system symbols *)

    End[] (* end the private context *) EndPackage[] (* end the package context *)

    Данный пакет задает преобразования для произведений sin(x) cos(x), sin(x) sin(y) и cos(x) cos(y), а также для sin(x) n и cos(x) n . Следующие примеры наглядно показывают работу с этим пакетом:


    << mypack\trigdefine.m

    ?Sin

    Sin[z] gives the sine of z. Sin[a]*Cos[b]

    1/2Sin[a-b] + 1/2 Sin[a+b]

    Sin[a]*Sin[b]

    1/2Cos[a-b] - 1/2Cos[a+b]

    Cos[a]*Cos[b]

    1/2 Costa-b] + 1/2Cos[a+b]

    Sin[x]^2

    1/2-1/2 Cos[2x]

    Cos[x]^3

    Sec[x]/4 +1/2Cos[2x] Sec[x] + 1/4(1/2 + 1/2 Cos[4x]) Sec[x]

    Sin[x]^n

    Sin[x]n

    Данный пример — наглядная иллюстрация программирования символьных вычислений.

    Пакет вычисления функций комплексного переменного

    Еще один пакет расширений для вычисления функций комплексного переменного (блок пакетов ALGEBRA) представлен распечаткой, приведенной ниже.


    (* :Title: Relm *)

    (* :Authors: Roman Maeder and Martin Buchholz *) BeginPackage [ "Algebra 'RelrrT "]

    RealValued::usage = "RealValued[f] declares f to be a real-valued function

    (for real-valued arguments)."

    SBegin["'Private'"]

    protected = Unprotect[Re, Im, Abs, Conjugate, Arg] (* test for "reality", excluding numbers *)

    realQ[x_] /; !NumberQ[x] := Im[x] == 0 imagQ[x_] /; !NumberQ[x] := Re[x] == 0

    (* fundamental rules *)

    Re[x_] := x /; realQ[x] Arg[x_] := 0 /; Positive[x] Arg[x_J :=Pi /; Negative[x] Conjugate[x_] := x /; realQ[x] Conjugate[x_] := -x /; imagQ[x]

    (* there must not be a rule for Im[x] in terms of Re[x] !! *) (* things known to be real *)

    Im[Re[_]] := 0 Im[Im[_]] := 0 Im[Abs[_]] := 0 Im[Arg[_]] := 0 Im[x_?Positive] = 0 Im[x_?Negative] = 0

    Im[x_ ^ y_] := 0,/; Positive[x] && Im[y] == 0 Im[Log[r ?Positive]] := 0

    (*' arithmetic *)

    Re[x_Plus] := Re /@ x Im[x_Plus] := Im /@ x

    Re[x_ y_Plus] := Re[Expand[x y]] Im[x_ y_Plus] := Im[Expand[x y]]

    Re[x_ y_] := Re[x] Re[y]— Im[x] Im[y] Im[x_ y_] := Re[x] Im[y] + Im[x] Re[y]

    (* products *)

    Re[(x_?Positive y_) ^k_] := Re[x^k y^k] Im[(x_?Positive y_)^k_] := Im[x^k yAk]

    (* nested powers *)

    Re[(x_?Positive ^ y_ /; Im[x]==0)^k_] := Re[x^(y k)] Im[(x_?Positive ^ y_ /; Im[x]==0)"kj := Im[хл(у k)]

    Re[ l/x_ ] := Re[x] / (Re[x]^2 + Im[х]^2) Im[ l/x_ ] := -Im[x] / (Re[x]"2 + Im[x]A2)

    Im[x_^2] := 2 Re[x] Im[x]


    Re[ x_^n_Integer ] := Block[{a, b},

    a = Round[n/2]; b = n-a;

    Re[x^a] Re[x^b] - Im[х^а] 1т[х^b] ]

    Im[ x_^n_Integer ] :=Block[{a, b}, a = Round[n/2]; b = n-a; Re[x^a] Im[х^b] + Im[х^a] Re[x^b] ]

    Re[x_IntegerAn_Rational] := 0 /; IntegerQ[2n] && Negative[x]

    Im[x_IntegerAn_Rational] :=

    (-х)лп (-1)л((Numerator[n]-l)/2 /; IntegerQ[2n] && Negative[x]

    (* functions *)

    Re[Log[r_?Negative]] := Log[-r] Im[Log[r_?Negative]] := Pi Re[Log[z_]] := Log[Abs[z]] /; realQ[z] Re[Log[z_]] := (1/2) Log[Re[z]^2 + Im[z]^2] Im[Log[z_]] := Arg[z]

    Re[Log[a_ b_]] := Re[Log[a] + Log[b]]

    Im[Log[a_ b_]] := Im[Log[a] + Log[b]]

    Re[Log[a_^c_]] := Re[c Log[a]]

    Im[Log[a_^c_]] := Im[c Log[a]]

    Ке[Е^х_] :=Cos[Im[x]] Exp[Re[x]] Im[Е^х_] := Sin[Im[x]] Exp[Re[x]]

    Re[Sin[x_]] := Sin[Re[x]] Cosh[Im[x]] Im[Sin[x_]] :=Cos[Re[x]] Sinh[Im[x]]

    Re[Cos[x_]] := Cos[Re[x]] Cosh[Im[x]] Im[Cos[x_]] := -Sin[Re[x]] Sinh[Im[x]]

    Re[Sinh[x_]] := Sinh[Re[x]] Cos[Im[x]] Im[Sinh[x_J] := Cosh[Re[x]] Sin[Im[x]]

    Re[Cosh[x_]] := Cosh[Re[x]] Cos[Im[x]] Im[Cosh[x_]] := Sinh[Re[x]] Sin[Im[x]]

    (* conjugates *)

    Re[Conjugate[z_]] := Re[z] Im[Conjugate[z_]] :=

    Conjugate[x_Plus]:= Conjugate /@ x Conjugate[x_Times]:= Conjugate /@ x Conjugate[x_^n_Integer]:= Conjugate[x]An Conjugate[Conjugate[x_]]:= x

    (* real-valued rules *)

    Attributes[RealValued] = {Listable, HoldAll} Attributes[RealValuedQ] = {HoldFirst}

    RealValued[f_Symbol] := (f/: RealValuedQ[f] = True; f) RealValued[f ] := RealValued /@ {f}

    Im[ (_?RealValuedQ) [_? (Im[#J ==0&)...] ] := 0

    (* define built-in function to be real-valued *)

    DoRules[flist_] := Block[{protected},

    protected = Unprotect[flist];

    RealValued[flist];

    Protect[Evaluate[protected]]

    ]

    DoRules[{Sin, Cos, Tan, ArcSin, ArcCos, ArcTan, ArcCot, Sinh, Cosh, Tanh, ArcSinh, ArcCosh, ArcTanh, Floor, Ceiling, Round, Sign, Factorial}]

    Protect[Evaluate[protected]]

    End[]

    Protect[RealValued]

    EndPackage[]

    Как нетрудно заметить, в этом пакете задано вычисление действительной и мнимой частей для ряда тригонометрических, гиперболических и числовых функций.

    Пакет расширения графики

    Следующий пример иллюстрирует подготовку графического пакета расширения, который строит графики ряда функций с автоматической установкой стиля линий каждой кривой.


    (* :Title: Plot *)

    (* :Context: ProgramminglnMathematica"Plot" *)

    BeginPackage["ProgramminglnMathematica4 Plot4"]

    Plot::usage = Plot::usage <> " If several functions are plotted, different plot styles are chosen automatically."

    Begin["'Private'"] protected = Unprotect[Plot]

    $PlotActive = True

    Plot[f_List, args__]/; $PlotActive := Block[{$PlotActive = False},

    With[{styles = NestList[nextStyle, firstStyle, Length[Unevaluated[f]]-1]}, Plot[f, args, PlotStyle -> styles] ] ]

    (* style definitions *)

    unit = 1/100 max = 5

    firstStyle = Dashing[{}]

    nextStyle[Dashing[{alpha__, x_, y_, omega__}]] /; x > у + unit :=

    Dashing[{alpha, x, у + unit, omega}] nextStyle[Dashing[l_List]] :=

    Dashing[Prepend[Table[unit, {Length[1] +1}], max unit]]

    Protect! Evaluate[protected] ]

    End[]

    EndPackage[]

    Рисунок 10.6 показывает применение данного пакета.

    Пакеты-пустышки

    Разумеется, эти примеры не исчерпывают всего разнообразия пакетов расширений. В сущности, они не дают ничего нового, поскольку приведенные листинги являются просто упрощением гораздо более полных и мощных пакетов, уже входящих в систему. В Mathematica 3 и 4 многие функции из пакетов расширения перекочевали в ядро системы, что позволило существенно ускорить вычисления. Поэтому в пакетах расширения можно встретить определения-пустышки, просто сообщающие об этом и не содержащие новых определений функций. Примером такого рода является модуль countroot.m, листинг которого приведен ниже.

    Рис. 10.6. Пример применения функции Plot из пакета расширения plot.m (* :Name: Algebra"CountRoots' *)


    (* :Copyright: Copyright 1994-1996, Wolfram Research, Inc.*)

    (* :Summary:All CountRoots functionality is now provided by Algebra'Rootlsolation". The package Algebra'CountRoots" is obsolete.

    *)

    Needs["Algebraч Rootlsolation'" ]

    CountRoots::obslt =

    "All CountRoots functionality is now provided by

    Algebra'Rootlsolation'.

    The package Algebra'CountRoots" is obsolete."

    Message[CountRoots::obslt]

    Надо прямо сказать, что в области математики пользователь средней квалификации едва ли может придумать что-либо такое, что еще не включено в ядро или в пакеты расширений системы. Разумно готовить такие пакеты лишь для тех специальных областей применения математики, с которыми работает пользователь, — например в области физики, химии, механики, электротехники и радиотехники и т. д. Однако более вероятно, что пользователь предпочтет готовить не пакеты расширений, а пакеты применений.

    Пакеты применений — это группы документов с программами, предназначенные для решения определенного класса математических или научно-технических проблем и задач. В отличие от пакетов расширения, в документах пакетов применений обычно дается подробно комментируемое описание всех основных алгоритмов решения задач. При этом комментарий, как правило, выводится на экран дисплея.

    Довольно часто в пакетах применений используется прием объединения ряда ячеек в одну с общим текстовым заголовком. Это особенно полезно для организации вспомогательных и промежуточных вычислений, ячейки которых загромождают экран и лишают текст документа наглядности. Данный прием скрывает такие вычисления, но позволяет в любой момент вывести их на экран дисплея при активизации маленького прямоугольника, отмечающего такие совмещенные ячейки. Тексты документов, поставляемых с системой, являются прекрасными образцами использования этого приема.

    Документы пакетов применения — это конечный продукт практического использования системы Mathematica. Поэтому они могут включать в себя все ранее описанные средства системы. Как уже неоднократно отмечалось, документы записываются на диск в виде файлов с расширением .т (в ранних версиях Mathematica — .та), а их полный битовый образ (включающий рисунки) сохраняется во вспомогательных файлах с расширением .mb. При большом числе сложных рисунков в документе эти файлы могут быть весьма большими — сотни килобайт и даже единицы мегабайт.

     

    gl10-6.jpg

    Изображение: 

    10. Создание средств визуального программирования

     

    Создание средств визуального программирования

     

    Что такое визуально-ориентированное программирование

    Под визуально-ориентированным программированием обычно понимается автоматическая генерация кодов программ на некотором языке программирования при активизации различных графических объектов — чаще всего кнопок с наглядным изображением программируемых действий или с надписями, указывающими на-такие действия.

    Mathematica изначально реализует визуально-ориентированное программирование с помощью палитр, содержащих математические операторы и символы. Однако язык программирования системы поддерживает возможность создания таких панелей для произвольных программных модулей. Целый ряд документов, готовящих средства визуально-ориентированного программирования, включен в справочную систему и дает наглядное представление о технике программирования в этой области.

    Пример создания палитры функций

    С помощью директивы Notebook [...] можно создать документ-«блокнот». Ниже представлен такой документ, создающий палитру из нескольких простых функций.


    Notebook[{

    Cell[BoxData[GridBox[{{

    ButtonBox[\(Create\ a\ New\ Notebook\), ButtonFunction:>CompoundExpression[ Needs[ "Graphics"Graphics*"] , Needs[ "Graphics'Colors' "], Clear[ targetNB], Set[ targetNB,

    NotebookCreate[ ] ] ] , ButtonEvaluator->Automatic]}, {ButtonBox[\(f[x_] := \)]},

    {ButtonBox[\(Apply\ DefinitionX),

    ButtonFunction:>CompoundExpression[ NotebookWrite[ targetNB, Cell[

    BoxData[

    FractionBox[ RowBox[ {

    RowBox[ {"f", "[", "x", "]"}]/ "-", RowBox[ {"f", "[", "a", "]"}]}], RowBox[ {"x", "-", "a"}]]],

    "Input"], All],

    SelectionEvaluateCreateCell[ targetNB]], ButtonEvaluator->Automatic]},

    {ButtonBox[\(Cancel[\[SelectionPlaceholder]]\)]}, {ButtonBox[\(Limit[\[SelectionPlaceholder] , x -> a]\)]}, {ButtonBox[\(DisplayX TogetherX),

    ButtonFunction:>CompoundExpression[ NotebookWrite[ targetNB, Cell[

    BoxData[

    RowBox [ {

    RowBox[ {"DisplayTogether", "[", "\n", "\t'V

    RowBox[ {RowBox[ {"Plot", "[",

    RowBox[ {RowBox[ {"f", "[", "x", "]"}], ",",

    RowBox[ {"{", RowBox[ {"x", ",",

    RowBox[ {"-", "5"}], ",", "5"}], "}"}],",",

    RowBox[ {"PlotStyle", "->",

    RowBox[ {"{", "Orange", "}"}]}]}], "]"]],

    RowBox[ {"Plot", "[",

    RowBox[ {"\[Placeholder]", ",",

    RowBox[ {"{",

    RowBox[ {"a", ",",

    D/-M7i2^vr ;» "» "5"}] " , " , "5"}] '} " } ] , " , " KOWBOX [1~л -3)J, ,, Э ] \ , s ) J , ,,

    RowBox[ {"PlotStyle", "->", RowBox [ {"{", "Violet", "}"}]}]}], "]"}]}']/ "]"}], ";"}]], "Input"], All]], ButtonEvaluator->Automatic]}}, RowSpacings->0, ColumnSpacings->0, GridDefaultElement:>ButtonBox[ "\\[Placeholder]"]]],

    NotebookDefault,

    CellMargins->{{Inherited, Inherited}, {5, Inherited}}, Evaluatable->True,

    CellGroupingRules->"InputGrouping", PageBreakAbove->True, PageBreakWithin->False, GroupPageBreakWithin->False, CellLabelMargins->{{11, Inherited},

    {Inherited, Inherited}},

    DefaultFormatType->DefaultInputFormatType, LineSpacing->{!.25, 0}, AutoItalicWords->{}, FormatType->InputForm, ScriptMinSize->9, ShowStringCharacters->True, NumberMarks->True, Counterlncrements->"lnput", StyleMenuListing->None, FontFamily->"Courier", FontWeight->"Bold"]},

    FrontEndVersion->"Microsoft Windows 3.0", ScreenRectangle->{{0, 800}, {0, 544}},

    Editable->False, WindowToolbars->{},PageWidth->358 WindowSize->{151, 105}, WindowMargins->{{291, Automatic} Automatic, 19}},

    WindowFrame->"Palette", WindowElements->{},

    WindowFrameElements->"CloseBox",

    WindowClickSelect->False,

    ScrollingOptions->{"PagewiseScrolling"->True}, ShowCellBracket->False, CellMargins->{{0, 0}/ {Inherited, 0}}, Active->True, CellOpen->True, ShowCellLabel->False, ShowCellTags->False, ImageMargins->{{0, Inherited}, {Inherited! 0}}, Magnification->l]

    Справа показано окно, в котором выполнены операции, шаблоны которых выводит созданная палитра функций. Это окно создается если нажать кнопку Create New Notebook (Создать новый документ)

    Рис. 10.7. Работа с созданной палитрой функций

    Созданная чисто демонстрационная палитра позволяет вводить в окно документа шаблоны нескольких операций. Например, если нажать кнопку f[x ]:= то шаблон этой операми (задание функции пользователя) Аналогично можно ввести в документ шаблоны и для ряда операций.

    К сожалению, даже из приведенного простейшего примера видно, что программы, создающие визуально-ориентированные инструментальные средства, достаточно громоздки. Они используют целый ряд функций, не имеющих никакого отношения к математическим вычислениям и служащих лишь для создания элементов пользовательского интерфейса. Объем данной книги не позволяет описать эти функции более подробно. Читателю рекомендуется просмотреть функции, вошедшие в приведенный пример, и изучить ряд других примеров на создание элементов пользовательского интерфейса.

    Среди этих примеров стоит отметить построение в виде палитры элементов периодической системы Менделеева (рис. 10.8). Активизация любой кнопки с именем химического элемента заносит в строку ввода текущего документа данные об этом элементе.

    Рис. 10.8. Палитра периодической системы Менделеева и ее применение

     

    gl10-7.jpg

    Изображение: 

    gl10-8.jpg

    Изображение: 

    11. Отладка и трассировка программ

     

    Отладка и трассировка программ

     

    Отладка программ, за исключением самых простейших, дело далеко не простое. Начальный опыт программирования на любом языке приходит спустя годы практической работы с ним. Эти сроки намного сокращаются, если пользователь всерьез знаком хотя бы с одним, а лучше с несколькими языками программирования.

    Но даже такой пользователь нуждается в специальных средствах диагностики и контроля программ. Чем их больше, тем совершеннее система программирования. При этом пользователь-программист должен заботиться и о том, чтобы такие средства входили в программные модули, которые создает он сам.

    Некоторые правила культурного программирования

    Выше мы описали множество методов программирования на языке системы Mathematica. Попробуем сформулировать некоторые общие правила так называемого культурного программирования с учетом специфики систем Mathematica, позволяющие создавать надежные и эффективные программные средства:

    • Тщательно продумайте алгоритм решения задачи. Порой выбор лучшего алгоритма позволяет кардинально повысить скорость вычислений и упростить программу (впрочем, одновременно это достигается далеко не всегда).
    • Используйте прежде всего возможности функционального программирования — из него родились основы языка программирования систем Mathematica.
    • Разделяйте задачу на малые части и оформляйте их в виде законченных программных модулей — прежде всего функций.
    • Pie скупитесь на программные комментарии — чем их больше, тем понятнее программа и тем больше шансов, что она заинтересует пользователей и будет долго жить. Учтите, что ясность программы в большинстве случаев важнее скорости ее работы.
    • Тщательно готовьте сообщения об ошибках и диагностические сообщения, а также наименования программных модулей и описания их назначения.
    • Тщательно производите диагностику программных модулей, в том числе с самыми безумными значениями и типами параметров — хорошо спроектированный модуль должен диагностировать любые виды ошибочных ситуаций и реагировать на них адекватным образом.
    • Используйте имена переменных и констант в стиле, принятом в Mathematica, и обязательно с использованием понятных по смыслу обозначений. По мере возможности не используйте в именах зарегистрированные идентификаторы команд и функций.
    • Заменяйте циклы функциями обработки списков, например функциями суммирования и произведения. Применяйте эффективные варианты упрощенных операторов и функций.
    • В максимальной степени используйте функции ядра системы. Обращайтесь к пакетам расширений только в том случае, когда это действительно необходимо.
    • Проводите тщательное тестирование своих модулей, в том числе с выполнением их трассировки. Помните, что нет программы, которую нельзя хоть чуть-чуть, но улучшить и сократить. Однако при этом цените затраченное на это время!
    • По мере возможности используйте готовые апробированные программные модули — изобретать велосипед и делать то, что уже сделано, неразумно.
    • Обращайте особое внимание на реализацию механизма контекстов, позволяющего избежать грубых ошибок при модернизации различных объектов программ, прежде всего наборов функций.
    • Не слишком оригинальничайте! Не применяйте программные трюки и недокументированные приемы программирования. Такие программы в момент создания могут выглядеть удивительно эффектными и потрясающе оригинальными, но вполне возможно, что в следующей версии системы они перестанут работать вообще, поскольку разработчики обычно стараются исключить любые недокументированные трюки в своих программах.

    Применение этих рекомендаций на практике позволит вам создавать программы, которые нужны не только вам, но и многим пользователям системы Mathematica. Только такие программы могут быть размещены в Интернете и, вполне возможно, войти в пакеты расширения и электронные книги системы Mathematica.

    Трассировка программных модулей

    В практике подготовки и отладки программ важное значение имеет наличие специальных средств отладки программ по шагам — средств трассировки. Mathematica имеет ряд функций для осуществления трассировки своих программных конструкций.

    Функция Trace [ехрг] позволяет выполнить трассировку выражения ехрг. Возьмем простой пример — вычисление выражения 2 (3 + 4) 2 /5:


    Trace[2 (3 + 4)^2 / 5]

    {{{{3+4, 7 },7^2,49}, {1/5,1/5}, 49/5, 49/5}, 249/5, 98/5}

    Результат трассировки представлен вложенными списками, имеющими два элемента — вычисляемое выражение и результат вычислений. В частности, для приведенного примера отчетливо видно, что вначале вычисляется выражение в круглых скобках (3 + 4) и получается результат 7, который затем возводится в квадрат — получается число 49. Затем вызывается явно не записанная единица для деления на 5, потом 49 умножается на 1/5 и, наконец, 49/5 умножается на 2 и получается конечный результат. Отсюда ясно, что даже равноценные операции умножения и деления Mathematica разделяет по приоритету — деление выполняется перед умножением! Символьные операции также могут трассироваться:


    Trace[а*а/(b*b)]

    {{ {{bb,b^2}, 1/b^2, 1/b^2}, aa/b^2, a^2/b^2}

    Можно выполнить и трассировку рекуррентных вычислений. Ниже представлен пример трассировки вычисления чисел Фибоначчи:


    fib[n_] := fib[n - 1] + fib[n - 2]

    fib[0] = fib[l] = 1

    1

    Trace[fib[5], fib[n_] -> n]

    {5, {4, {3, {2, {!}, {0}}, {!}}, {2, {1}, {0}}},

    {3, {2, {!}, {0}}, {!}}}

    Trace[fib[3]]

    {fib[3], fib[3-l] + fib[3-2] ,

    {{3- 1, 2}, fib[2] , fib[2-l] + fib[2- 2] , {{2-1, 1}, fibtl], 11, {{2-2, 0}, fib[0] , 1}, 1+1, 2},

    {{3-2, 1}, fib[l], 1}, 2+1, 3}

    Функция TracePrint [expr] дает распечатку последовательности действий при вычислении выражения ехрг:


    TracePrint[a*b/c]

    ab/c

    Times а b _1 с

    Power

    1/c

    ab/с

    Помимо указанных примеров выполнения трассировки и отладки возможны и иные их варианты, осуществляемые с помощью ряда функций. Эти функции представлены в приложении. Надо, однако, отметить, что применение этих функций на современном уровне программирования ограничено — в подобной трассировке особой необходимости нет, поскольку система выдачи диагностических сообщений позволяет выполнять отладку более удобными средствами.

     

    Что нового мы узнали?

    В этом уроке мы научились:

    • Работать с образцами.
    • Создавать функции.
    • Использовать функции FixedPoint и Catch.
    • Реализовывать рекурсивные и рекуррентные алгоритмы.
    • Использовать процедуры.
    • Создавать циклы различного типа.
    • Использовать условные выражения и безусловные переходы.
    • Работать с контекстами.
    • Готовить пакеты расширений системы Mathematica.
    • Создавать простейшие средства визуального программирования.
    • Использовать средства отладки и трассировки программ.

     

    Урок 11. Математические пакеты расширения

    Урок 11. Математические пакеты расширения

    1. Математические пакеты расширения

     

    Математические пакеты расширения

    • Пакет алгебраических функций Algebra
    • Пакет вычислительных функций Calculus
    • Пакет дискретной математики DiscreteMath
    • Геометрические расчеты — пакет Geometry
    • Линейная алгебра — пакет LinearAlgebra
    • Расширение в теории чисел — пакет NumberTheory
    • Численные расчеты — пакет NumericalMath

    Начиная с этого урока, мы переходим к изучению стандартных пакетов расширения (Standard Add-on Packages), которые встроены в системы Mathematica 3/4. Они не требуют отдельной инсталляции, но перед использованием их средств пакеты надо объявлять. Стандартные пакеты расширений содержат примерно столько же дополнительных средств, сколько их содержится в ядре, — то есть тоже порядка тысячи. Применение пакетов расширения особенно эффективно, если оно производится достаточно опытными пользователями.

    Общие замечания по пакетам расширения

    Пакеты расширения системы Mathematica (Add-ons) являются наборами файлов с расширением .т, написанными на языке программирования системы и объединенными под именами соответствующих пакетов. Пакеты добавляют в систему ряд функций, которые отсутствуют в ядре системы. Они могут модифицироваться и создаваться пользователями, что обеспечивает легкую адаптацию системы под задачи конкретного пользователя.

    Применение пакетов имеет три основные особенности:

    • необходимо предварительно объявлять загрузку пакета или отдельных его частей — подпакетов или функций;
    • скорость вычислений для функций пакетов несколько ниже, чем для функций ядра;
    • модификация функций пакетов пользователем может нарушить программную совместимость, что не позволит работать с ними в стандартной системе Mathematica и затруднит обмен документами.

    В системе Mathematica 3 (и особенно в Mathematica 4) проведена тщательная оптимизация ядра, что позволило перенести часть апробированных функций из пакетов расширений в ядро системы и тем самым существенно повысить скорость их выполнения. Однако пакеты расширения по-прежнему относятся к важным средствам дополнения и модернизации системы. Некоторые функции вызываются из пакетов автоматически — они описаны ранее как средства ядра системы Mathematica 4.

    Следует отметить, что систематизация пакетов расширения по содержащимся в них функциям не доведена до совершенства. Например, функции регрессии разбросаны по ряду пакетов расширения. По мере возможности этот недостаток в данной книге устранен.

     

    2. Пакет алгебраических функций Algebra

     

    Пакет алгебраических функций Algebra

     

    Решение неравенств

    Пакет расширения Algebra содержит ряд новых функций для работы с неравенствами, ограниченными полями и полиномами. Для доступа сразу ко всем функциям пакета используется команда «Algebra`.

    Загрузка отдельных функций показана в примерах использования этого пакета, описанных ниже.

    До сих пор мы сталкивались с решениями уравнений, представленных равенствами. Пакет Algebra дает важное дополнение в виде функций, обеспечивающих работу с неравенствами. Прежде всего это функция SemialgebraicCompo-nents [ineqs, vars], которая определят комплект решений неравенств ineqs по переменной vars.

    Приведенные ниже примеры иллюстрируют работу данной функции:


    <<Algebra`Algebraiclnequalities`

    SemialgebraicComponents[{х (х^2 - 1) (х^3 - 2) > 1}, х]

    {-3, 3}

    SemialgebraicComponents[{х + у ^ 2 < 5, х/у > 1}, {х, у}]

    SanialgebraicCarpanents[(x+у 2 < 5, — x/y>1}, {х, у}]

    SemialgebraicComponents[{х ^ 2 + у ^ 2 < 5, х у > 0}, {х, у}]

    {{-3/16,-3/16},{3/16,3/16}}

    SemialgebraicComponents[{x ^ 2 + y ^ 2/4 + z ^ 2/9 > 1, х ^ 2 + (у - 1) ^ 2 + (2- 2) ^ 2 < 0}, {х, у, z}]

    {}

    Для решения неравенства служит функция InequalitySolve [expr, var], которая решает неравенство ехрг относительно переменной var.

    Следующие примеры иллюстрируют применение данной функции:


    <<Algebra` InequalitySolve`

    InequalitySolve [х (х^2- 5) (х^2- 6) > 0, х]

    -sqrt(6) <х<-sqrt(5) | | 0<х<sqrt(6)| | х>7sqrt(6)

    InequalitySolve[x^2/Abs[х- 2] >= 0 && 1/х < х + 1, х]

    -1/2(1-sqrt(5)<x<0| | 1/2(-1+sqrt(5)<x<2| | x>2

     

    Функции для представления комплексных данных — Relm

    Подпакет Relm обеспечивает переназначение функций комплексной переменно!! для более корректной их работы:


    <<Algebra`ReIm`

    Re[l/x+l/y]

    Re[x]/(Im[x]2+Re[x]2 )+ Re[y]/( Iim[y]2+Re[y]2)

    Re[(z + I)^3 + Exp[I z]]

    E[mz] Cos[Re[z]] -2 (1+ Im[z])2Re[z] +

    Re[z] (-(1+ Im[z])2+Re[z]2)

    Im[x] ^= 0; RealValued[f, g]

    {f, g)

    Im[l/(l- I f[x] g[x])]

    f [x] g[x]/(1+ f[x]2g[x]2 )

    Im[Sin[a]]

    Cos[Re[a]] Sinh[Tm[a]]

     

    Операции в конечных полях — FiniteFields

    Поле является алгебраическим понятием, которое может быть определено как множество, имеющее не менее двух элементов, над которыми заданы две бинарные ассоциативные и коммутативные операции — сложения и умножения. Кроме того, для существования поля нужны два особых элемента — нуль 0, задающий правило сложения а + 0 = а, и единица 1 для задания правила умножения а*1 = 1. Определено также понятие противоположного элемента -а, такого что а + (-а) = 0, и обратного элемента а-- 1 , такого что a- 1 а = 1. Поле характеризуется размером р и целым положительным целым d, называемым степенью расширения.

    Пакет задает набор функций GF[p] [{k}], GF[p,l] [{k}], GF[p, {0,1}] [{k}], GF[p,d] HGF[p,ilist] [elist], действие которых иллюстрируют следующие примеры:


    <<Algebra` FiniteFields`

    GF[7][4] + GF[7][6]

    {3}7

    GF[3,4][1,2,1] GF[3,4][2,2,2,0]

    {1, 1, 2, 0}3 GF[5,1][1] + GF[3,4][1,1,1]

    {1, 1, 1, 0}3+ (1)5

    Вряд ли подробное их описание заинтересует большинство читателей. Специалистов по полям не затруднит более детальное знакомство с этими функциями в разделе Add-ons справочной базы данных. Там же можно найти описание ряда других функций, относящихся к теории конечных полей.

    Оценка интервалов изоляции корней полиномов — Rootlsolation

    Следующие функции подпакета Rootlsotation позволяют оценивать интервалы изоляции для действительных и комплексных корней полиномов:

    • CountRoots [poly, {x,ml,m2} ] — возвращает число корней полинома poly от переменной х в комплексном интервале {ml, m2 };
    • RealRootsIntervals [poly] — возвращает разделенный интервал изоляции для вещественных корней полинома poly;
    • RealRootsIntervals [polyl,poly2,...] — возвращает разделенные интервалы изоляции для вещественных корней нескольких полиномов;
    • ComplexRootsIntervals [poly] — возвращает разделенный интервал изоляции для комплексных корней полинома;
    • ComplexlRootsIntervals [polyl, poly2,...] — возвращает разделенные интервалы изоляции для комплексных корней нескольких полиномов;
    • Contractlnterval [a,n] — возвращает интервал изоляции для числа а с точностью, задаваемой числом знаков результата п.

    Применение этих функций поясняют следующие примеры:


    <<Algebra`Rootlsolation`

    f = (x^2- 1) (х^2- 3) (х^2- 5); CountRoots [f, {x, 1, 2}]

    1

    CountRoots[(х^2+2) х^4, {х, -I, 2 I}]

    5

    CountRoots[х^21- 1, {х, 0, 5 + 10*1}]

    5

    RealRootlntervals[f]

    {{-4, -2}, {-2,.-1}, {-1, -1}, {1, 1}, {1, 2}, {2, 4}}

    ComplexRootlntervals[f+5]

    {{-1, 0}, {0, 1}, {-7-71, -7/4}, {-7, -7/4 + 7I},

    {-7/4, -7I + 7/2}, {-7/4, -7/2 + 7I}}

    ComplexRootlntervals[x^3, x^5+l]

    {{{-2, 0}, {0, 0),

    {-3-31, 0}, {-3, 31}, {-31, 3), {0, 3+31}}, {2, 1, 2, 2, 2, 2}}

    Contractlnterval[Root[x^7- 1, 5], 5]

    { 58333/262144 + 511143I/ 524288+ 116665/524288+ 63893I/65536}

    N[%]

    {-0.222523+ 0.9749281, -0.222521 + 0.974931}

     

    Операции с полиномами

    Если конечные поля — понятие достаточно экзотическое, то полиномы встреча- ются сплошь и рядом во многих математических и научно-технических расчетах. В пакете расширения Algebra определен ряд новых операций над полиномами. Начнем их рассмотрение с функции PolynomialExtendedGCD:

    • PolynomialExtendedGCD [polyl, poly2 ] — возвращает наибольший общий делитель двух полиномов;
    • PolynomialExtendedGCD[polyl,poly2,Modulus->p] —возвращает наи- больший общий делитель двух полиномов по модулю р.

    Примеры применения этой функции приведены ниже:

    <<Algebra"PolynomialExtendedGCD

    PolynomialExtendedGCDlxл2 + 3 х + 2, Expand[(x + 1)(х + 2)], Modulus->7]

    {2+ Зх+х2, (0, 1}}

    PolynomialExtendedGCD[

    Expand[ ((12+1) z^2 + 5 z + I) (I z + 3)], Expand[ ((9+1) z + (3+1)) ((31) z +9)]]

    {-31+z,

    {- 2261/3341+ 710I/3341( 35/3341- 3951/10023)+ (5959/20046- 20531/20046)z}}

    Далее следует функция PolynomialPowerMod [polyl, n, (poly2, р} ], которая является существенно ускоренной версией функции PolynomialMod.

    • степени ускорения свидетельствует следующий пример:

    <<Algebra`PolynomialPowerMod`

    Timing[PolynomialPowerMod[1 + х, 200, х^З + x^2 + 1, Prime[4750]]][[1]], Timing [ PolynomialMod [ (1 + x)^200, x^ + х^2 + 1, Prime [4750] ]][[1]]

    {0. Second, 2.37 Second)

    В данном случае вычисления по функции PolynomialPowerMod оказались вы- полненными менее чем за 0.01 с, что дает нулевой результат.

    Еще одна функция в трех ее модификациях работает с симметричными полиномами:

    • SymmetricReduction [ {xl,...,xn}, k] — возвращает симметричный полином степени k по переменным {х1,..., хn);
    • SymmetricReduction [f, {xl,...,xn}] — возвращает часть полинома {p,q} по переменным {х1,...,хп}, где f=p+q, причем р есть симметричная часть, q — остаток;
    • SymmetricReduction [f, {xl,...,xn}, {s1,..., sn} ] — возвращает часть полинома (p,q) попеременным {xl, ...,xn}, где элементарный симметричный полином представляет список {s1,..., sn}.

    Следующий пример поясняет создание симметричного полинома 4-й степени по переменным {х,у, z,w,t}:


    <<Algebra` SymmetricPolynomials`

    SyiranetricPolynomial[{x, y, z, w, t}, 4]

    twxy+ twxz+ twyz+txyz+wxyz

    Действие других функций поясняют следующие примеры:


    SynraetricReduction[(х + у)^2 + (х + z)^2 + (z + у)^2, {х, у, z}]

    {2 (х+у+ z)2- 2 (xy+xz+yz), 0}

    SymmetricReduction[х^5 + у^5 + z^4, {х, у, z}, {s1, s2, s3}]

    {s15- 5s13s2 + 5s1s22+ 5sl2s3- 5s2s3, z4-z5}

    Преобразование полиномов в схему Горнера — Horner

    Подпакет Horner в системе Mathematica 4 реализует хорошо известную схему вычисления полиномов — схему Горнера. При ней операции возведения в степень заменяются операциями умножения. Для этого служит функция Horner:

    • Horner [poly] — устанавливает полином poly в форму Горнера;
    • Horner [poly, vars] — устанавливает полином ряда переменных vars в форму Горнера.

    Примеры преобразования полиномов в схему Горнера:


    <<NumericalMath`Horner`

    Horner[ 11 х^3 -4 х^2 + 7 х + 2 ]

    2+ х (7 + х (-4 + 11х))

    Horner[ а х^3 + bх^2 + с х + d, х ]

    d+ х (с + х (b + ах))

    Horner[ х^(1/3) + х + х^(3/2) ]

    Схема Горнера может использоваться и для отношения полиномов:


    Horner [polyl/poly2] и Horner [polyl/poly2, varsl,vars2] .

    Эти функции можно использовать для улучшенного представления аппроксимации Паде, что демонстрирует следующий пример:


    <<Calculus ` Fade`

    approx = Padef Exp[Log[x] -х] , {х, 0, 3, 2}]]

    Horner[ approx ]

    Переход к схеме Горнера дает ряд преимуществ перед обычным вычислением полиномов: уменьшается время вычислений, повышается их точность, уменьшается вероятность расхождения численных методов, в которых используются полиномы. В системе Mathematica 3 подпакет Corner находился в пакете расширения NumberMath, что было не вполне логично.

     

    3. Пакет вычислительных функций Calculus

     

    Пакет вычислительных функций Calculus

     

    Пакет расширения Calculus содержит представительный набор функций для решения дифференциальных уравнений, задания функций единичного скачка и импульса, выполнения операций с векторами, преобразований Фурье и Лапласа, выполнения спектрального анализа и синтеза, расширенного вычисления пределов и проведения аппроксимаций аналитических функций. Для открытия пакета используется команда Calculus`

    Решение дифференциальных уравнений — DSolvelntegrals

    Многие нелинейные дифференциальные уравнения не имеют общего решения. В под-пакете DSolvelntegrals определены функции, позволяющие найти решения в форме полного интеграла:

    • Completelntegral [eqn, u [х, у,...], {х, у...} ] — создает полный интеграл для дифференциального уравнения, касательного к и [х, у,...];
    • Differential Invariants [ {eqnsl, eqns2,...}, {u [х] , v [х] ,...}, х} — возвращает список дифференциальных инвариантов для простых переменных {u[x] ,v[x] ,...} и х;
    • Differential Invariants [ {eqnsl, eqns2,...}, {u, v,...}, х} — возвращает список дифференциальных инвариантов для простых переменных {u, v,...} и х;

    Применение этих функций поясняют следующие примеры:


    <<Calculus`DSolvelntegrals`

    Completelntegral[

    Derivative[0, 1][u][х, у] == (u[x, у] +

    x^2*Derivative[l, 0][u][x, y]^2)/y, u[x,y], {х,у}]

    Completelntegral[-u[x, у] +

    (2 + y)*Derivative[0, 1][u] [x, y] +

    x*Derivative[l, 0][u][x, y] + 3*Derivative[l, 0][u][x, y]^2 == 0,

    u[x,y], {x,y}, IntegralConstants->F]

    Differentiallnvariants[

    {U`[X] == -(U[X] (U[X] +V[X])),

    V`-[x] == V[x] (u[x] +V[x])},{u, v}, x]

    Дельта-функция Дирака — DiracDelta

    В подпакете DiracDelta системы Mathematica 3 задано определение двух полезных функций Дирака:

    • UnitStep [х] — возвращает функцию с единичным скачком при х = 0 (дает значение 0 при х < 0 и 1 при х > 1);
    • DiracDelta [x] — возвращает дельта-функцию Дирака, которая является импульсом с единичной площадью, бесконечно малой шириной в точке х = 0 и бесконечно большой амплитудой.

    Рисунок 11.1 поясняет применение этих функций. Функция UnitStep имеет простую графическую иллюстрацию, тогда как построение графика функции DiracDelta в принципе невозможно — эта функция представляет собой линию бесконечно большой высоты в точке х - 0. Обратите внимание на то, что интеграл от функции Дирака при интегрировании от -°° до +°° равен 1.

    Рис. 11.1. Робота с функцией единичного скачка и дельта-функцией Дирака

    Обе описанные функции широко применяются при решении задач автоматического регулирования и при математическом моделировании систем и устройств. Поэтому в системе Mathematica 4 они перешли в разряд встроенных функций.

    Улучшенное вычисление пределов — Limit

    Подпакет Limit не создает новых функций. Он просто переопределяет встроенную функцию Limit, так что ограничимся примерами его применения:


    <<Calculus` Limit`

    Limit[Е^х^х/ Е^х^(2 х), x->Infinity]

    0

    Limit [Е^х^х— Е^х^ (2 х) , x->Infinity]

    -бесконечность

    Limit[E:x ExpIntegralE[2, ArcTan[E^x]- Pi/2] -E^x- x, x->Infinity]

    1 - EulerGamma - I л

    Limit[Zeta[l+x, v] - 1/x, x->0]

    -PolyGamma[0, v] ,

    Limit[x^0 PolyGamma[2,x], x->Infinity] .

    0

    Limit[x^2 PolyGamma[2,x], x->Infinity]

    -1

    Limit[x^3 PolyGamma[2,x], x->Infinity]

    -бесконечность

    Работа скорректированной функции наиболее эффективна при вычислении пределов от выражений, содержащих специальные математические функции, и пределов при х, стремящемся к бесконечности.

    Рациональная аппроксимация аналитических функций — Fade

    Полиномиальная аппроксимация и обычное разложение функций в ряд Тейлора нередко дают слишком большую погрешность. Уменьшение ее возможно при представлении аппроксимирующей функции в виде отношения двух полиномов разной степени. В подпакете Fade определены две функции для рациональной аппроксимации Паде:

    • Pade[f, {x,x0,m,k}] — возвращает выражение для аппроксимации Паде функции f(x) в окрестностях точки х0 в виде отношения двух полиномов степеней m и k;
    • EconomizedRationalApproximation [f, {х, {xmin, xmax}, m, k} ] —возвращает выражение для осуществления экономичной рациональной аппроксимации функции f(x) в интервале {xmin, xmax} в виде отношения двух полиномов степеней m и k.

    Аппроксимация Паде является расширением полиномиальной аппроксимации, обеспечивающим повышенную точность представления функции. На рис. 11.2 представлен пример выполнения аппроксимации Паде с построением графика исходной функции (темная линия) и аппроксимирующей функции (более светлая линия).

    Рис. 11.2. Пример, осуществления аппроксимации Паде

    Пример осуществления экономичной рациональной аппроксимации показан на рис. 11.3. Здесь также дана визуализация аппроксимации в виде наложенных друг на друга графиков исходной и аппроксимирующей функций.

    Рис. 11.3. Пример осуществления экономичной рациональной аппроксимации

    Экономичная рациональная аппроксимация обычно позволяет получить приемлемую погрешность при меньшей степени полиномов числителя и знаменателя аппроксимирующей функции. В ограниченной области {xmin, xmax} эта аппроксимация нередко позволяет получить погрешность менее сотых долей процента (рис. 11.4). На этом рисунке показан график погрешности в виде разности между значениями аппроксимирующей и аппроксимируемой функций.

    Рис. 11.4. Пример осуществления экономичной рациональной аппроксимации с построением графика погрешности

    Несмотря на обширные возможности выбора средств аппроксимации, все же надо отметить, что они уступают таковым у конкурента системы Mathematica — Maple V R4/R5, где функций для осуществления аппроксимации больше.

    Векторный анализ —VectorAnalysis

    Подпакет VectorAnalysis содержит множество функций, используемых при выполнении векторного анализа. Здесь надо иметь в виду, что речь идет не о векторах как представителях одномерных массивов, которые рассматривались ранее. В данном случае вектор — это направленный отрезок прямой в пространстве, заданном той или иной системой координат.

    Системы координат и их преобразования

    Заметная часть функций подпакета VectorAnalysis относится к заданию и преобразованию координат:

    • Coordinates [ ] — возвращает имена переменных текущей системы координат;
    • Coordinates [coordsys] — возвращает имена переменных системы координат coordsys;
    • SetCoordinates [coordsys] — устанавливает систему координат coordsys с текущими переменными;
    • Coordinates [coordsys, {vars}] — устанавливает систему координат coordsys с переменными, заданными списком {vars }.

    Ниже даны названия систем координат и соответствующие им представления.

    Наименование

    Представление

    Прямоугольные

    Cartesian [х, у, z]

    Цилиндрические

    Cylindrical [r, theta, z]

    Сферические

    Spherical [r, theta, phi]

    Параболические цилиндрические

    ParabolicCylindrical [u, v, z]

    Параболические

    Paraboloidal [u, v, phi]

    Эллиптические цилиндрические

    EllipticCylindrical [u, v, z, a]

    Вытянутые сфероидальные

    ProlateSpheroidal [xi, eta, phi, a]

    Сплющенные сфероидальные

    OblateSpheroidal [xi, eta, phi, a]

    Биполярные

    Bipolar[u, v, z, a]

    Бисферические

    Bispherical [u, v, phi, a]

    Тороидальные

    Toroidal [u, v, phi, a]

    Конические

    Conical [lambda, mu, nu, a, b]

    Конфокальные эллипсоидальные

    ConfocalEllipsoidal [lambda, rnu, nu, a, b, c]

    Конфокальные параболические

    ConfocalParaboloidal [lambda, mu, nu, a, bj

    Например, параболическую систему координат можно задать следующим образом:


    SetCoordinates[Paraboloidal[x, у, z] ]

    Paraboloidal [x, у, z]

    {CoordinateSystem, Coordinates[]}

    {Paraboloidal, {x, y, z}}

    Ряд функций служит для контроля и установки параметров систем координат:

    • CoordinateRanges [ ] — возвращает пределы изменения переменных текущей координатной системы;
    • Parameters [ ] — возвращает параметры текущей координатной системы;
    • ParametersRanges [ ] — возвращает пределы изменения параметров текущей координатной системы;
    • CoordinateRanges [coordsys] — возвращает пределы изменения переменных координатной системы coordsys;
    • Parameters [coordsys] — возвращает параметры координатной системы coordsys;
    • ParametersRanges [coordsys] — возвращает пределы изменения параметров координатной системы coordsys;
    • SetCoordinates [coordsys, {vars,param} ] — устанавливает параметры текущей координатной системы как параметры coordsys с переменными vars и параметрами param.

    Ниже представлены примеры применения этих функций:


    CoordinateRanges[]

    {0<Х<бесконечности,0<Y<бесконечность,-л<Z<=л}

    Parameters[]

    {}

    ParameterRanges[ ]

    Coordinates[Conical], CoordinateRanges[Conical]

    {{Llanibda, Мmu, Nnu}, {-бесконечность< Llambda< бесконечность, l< Mmu2 < 4, Nnu2< 1}}

    Parameters[Bipolar],ParameterRanges[Bipolar]

    {{1}, 0< #1<бесконечность}

    Для преобразования координат служат следующие функции:

    • CoordinatesToCartesian [pt] — преобразование текущих координат в декартовы;
    • CoordinatesToCartesian [pt, coordsys] — преобразование координат coordsys в декартовы;
    • CoordinatesFromCartesian [pt] — преобразование из декартовых координат в текущие;
    • CoordinatesFromCartesian [pt, coordsys] — преобразование из декартовых координат в координаты coordsys.

    Эти примеры демонстрируют преобразования координат:


    CoordinatesToCartesian[{I, Pi/3, Pi/3}, Spherical]

    CoordinatesToCartesian [u, v, phi}, Bipolar]

    CoordinatesFromCartesian [ {x, y, z} , Bipolar]

    {-2Im[ArcCoth[x+ Iy]] , 2Re[ArcCoth[x+ Iy] ] , z}

    Функции векторного анализа

    Помимо функций для задания и преобразования систем координат подпакет Vector An a lysis содержит ряд функций собственно векторного анализа:

    • DotProduct [vl, v2] — возвращает скалярное произведение векторов vl и v2, заданных в текущей системе координат;
    • CrossProduct [vl,v2] — возвращает векторное произведение векторов vl и v2, заданных в текущей системе координат;
    • ScalarTripleProduct [vl, v2, v3 ] — возвращает тройное скалярное произведение для векторов vl, v2 и v3, заданных в текущей системе координат;
    • DotProduct [vl, vl, coordsys ] — возвращает скалярное произведение векторов vl и v2, заданных в системе координат coordsys;
    • CrossProduct [vl, v2, coordsys] — возвращает векторное произведение векторов vl и v2, заданных в системе координат coordsys.

    Примеры выполнения этих операций представлены ниже:


    SetCoordinates[ParabolicCylindrical[ ]]

    ParabolicCylindrical[Uu, W, Zz]

    DotProduct[{1.2, 1.1, 0}, {5.4, -2, 1.2}]

    -12.8093

    CrossProduct[{1.2, 1.1, 0}, {5.4, -2, 1.2}]

    {-1.78157, 0.0774597, -17.8476}

    ScalarTripleProduct[{1, 0, 1}, {1, 1, 0}, {0, 1, 1}, Cartesian]

    2

    Для вычисления производной дуги служат функции:

    • ArcLengthFactor [ { fx, f у, f z}, t] — дает дифференциал длины дуги, заданной параметрически с параметром t в текущей системе координат;
    • ArcLengthFactor [ {fx, f у, fz}, t, coordsys] — дает дифференциал длины дуги, заданной параметрически с параметром t в системе координат coordsys

    Примеры вычисления дифференциалов и длин дуг с помощью этих функций:


    param = {Cos[t], Sin[t], t}

    {Cos[t], Sin[t], t}

    ArcLengthFactor[ param, t, Cartesian] //Simplify

    корень из 2

    f[x_, y_, z_] := x^2 y^2 z

    Integrate[ f[param] ArcLengthFactor[

    param, t, Cartesian], {t, 0, 2 Pi}] // Simplify

    Ряд функций служит для создания матрицы Якоби (матрицы частных производных) и вычисления относящихся к ней понятий:

    • JacobianMatrix [ ] — возвращает матрицу Якоби, определенную в текущих координатах;
    • JacobianMatrix [pt] — возвращает матрицу Якоби в точке pt и в текущих координатах;
    • JacobianMatrix [coordsys] — возвращает матрицу Якоби, определеннук в системе координат coordsys;
    • JacobianMatrix [pt, coordsys] — возвращает матрицу Якоби в точке pt, определенную в системе координат coordsys;
    • JacobianDeterminant [], JacobianDeterminant [pt] и т. д. — вычисление детерминанта матрицы Якоби при указанных выше определениях;
    • ScaleFactor [ ], ScaleFactor [pt] и т. д. — вычисление масштабного фактора при указанных выше определениях.

    Применение этих функций поясняют следующие примеры:


    JacobianMatrix[Cartesian[x, у, z]]

    {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}

    JacobianMatrix[Spherical[r, t, p] ]

    {{Cos[p] Sin[t] , rCos[p] Cos[t] ,-rSin[p] Sin[t]},

    {Sin[p] Sin[t] , rCos[t] Sin[p] , rCos[p] Sin[t]},

    {Cos[t] , -rSin[t], 0}}

    JacobianDeterminant[Spherical[r, t, p] ]

    r^2Sin[t]

    Integrate[r^2 JacobianDeterminant[ Spherical[r, theta, phi]],

    {r, 0, 2}, {theta, 0, Pi}, {phi, -Pi, Pi}]

    128n/5

    Следующие функции определяют ряд характеристик векторного поля:

    • Div[f] — возвращает дивергенцию векторного поля f в текущей системе координат;
    • Curl [f ] — возвращает вихрь (ротор) векторного поля f в текущей системе координат;
    • Grad[f ] — возвращает градиент векторного поля f в текущей системе координат;
    • Laplasian [f] — возвращает лапласиан векторного поля f в текущей системе координат;
    • Вiharmonic [f] — возвращает лапласиан лапласиана векторного поля f в текущей системе координат;
    • Div [f, coordsys], Curl [f, coordsys] и т. д. — указанные выше функции в системе координат coordsys.

    Приведем примеры использования этих функций:


    Laplacian[x*y^2*z^3,ProlateSpheroidal[х, у, z]]

    (Csc[y] Csch[x] (y2z3Cosh[x] Sin [у] +

    2xyz3Cos[y] Sirih[x] +2xz3Sin[y] Sinh[x] +

    6xy2zCsc[y] Csch[x] (Sin[y]2+ Sinh[x]2))) /

    (Sin[y]2+Sinh[x]2)

    Grad[x^2 y^3 z^4,ProlateSpheroidal[x, у, z]]

     

    Вариационные методы —VariationalMethods

    Подпакет VariationaLMethods содержит функции для реализации вариационных методов. Напомним, что вариационные методы заменяют минимизацию функционала, заданного на некотором бесконечномерном линейном пространстве, задачами его минимизации на последовательности конечномерных подпространств. Функционал в системе Mathematica задается следующим образом:


    F= f[u[x], u'(x),x]dx

    В данный подпакет включены следующие функции:

    • VariationalD [f, u [х] , х] — дает первую вариационную производную для функционала f одной переменной х;
    • VariationalD [f, u [х, у,...] , {х, у,...} ] — дает первую вариационную производную для функционала ряда переменных;
    • VariationalD [f, {u [х, у,...], v [х, у],...}, {х, у,...} ] — дает список первых вариационных производных для функционала ряда переменных;
    • EulerEquations [f, u [х] , х] — дает равенство Эйлера при f с одной переменной;
    • EulerEquations [f, u [х, у,...], {х, у,...} ] — дает равенство Эйлера при f с рядом переменных;
    • EulerEquations [f, {u [х, у,...] , v [х, у,...],...}, {х, у,...} ] — дает список с равенствами Эйлера при f с рядом переменных;
    • Firstlntegral [ f, u [х] , х] — дает первый интеграл с f, определенной для одной переменной х;
    • Firstlntegral [f, {u [х, у,...] ,v [х, у,...],...}, {х, у,...} ] — дает первый интеграл при f с рядом переменных;
    • Firstlntegral[u] — дает первый интеграл, ассоциированный с переменной и.

    Применение данных функций поясняют следующие примеры:


    <<Calculus `VariationalMethods`

    VariationalD[y[x] Sin[l+y'[x]], y[x], x]

    -Cost 1 +У [x]] y'[x] + Sin[l + y'[x]] d+y[x] y'[x])

    EulerEquations[ m1^2 theta1[t]^2/2+m g 1 Cos[theta[t]], theta[t], t]

    -Im(gSin[theta[t]] + 1 theta''[ t]) == 0

    Firstlntegrals[m(r'[t]^2+r[t]^2 phi'[t]^2)/ 2-U[r], r[t],phi[t], t]

    {Firstlntegral[phi] ->-mr[ t]2 phi' [ t] , Firstlntegral[t] -> 1/2 (2U[r] + m (r[t]2phi'[t]2 + r^t]2)) }

    Помимо указанных функций подпакет содержит функцию VariationalBound для представления границ и значений функционала. Ввиду громоздкости записи параметров этой функции ограничимся примерами ее применения:


    VariationalBound[(-u[r] D[r^2 u'[r],r]/r^2-2u[r]^2/r)r^2,

    u[r]^2 r^2,u[r], r,0,Infinity,(a-r)E^(-b r),a,b]

    {-0.25, (a-> 2., b-> 0.5}}

    VariationalBound[-u[x,у](D[u[x,y],x,2]+

    D[u[x,y],y,2]) -2u[x,y],u[x,y],x,-a,a,y,-a,a,

    (x^2-a^2)(y^2-a^2)(al+a2(x^2+y^2)),al,a2]

    С полными возможностями этой функции можно ознакомиться по справочной базе данных (раздел Add-ons).

     

    gl11-1.jpg

    Изображение: 

    gl11-2.jpg

    Изображение: 

    gl11-3.jpg

    Изображение: 

    gl11-4.jpg

    Изображение: 

    4. Пакет дискретной математики DiscreteMath

     

    Пакет дискретной математики DiscreteMath

     

    Пакет DiscreteMath задает набор функций дискретной математики. Это прежде всего функции комбинаторики и работы с графами (более 230 функций). Мы вынуждены рассмотреть их только выборочно.

    Комбинаторика и ее функции — Combinatorica и CombinatorialFunctions

    Несколько функций комбинаторики (Factorial, Factorial2, Binomial, Multinomial, Pochhammer и Fibonacci) могут использоваться без загрузки пакетов расширения. Рисунок 11.5 демонстрирует работу подпакета Combinatorial-Functions (функции комбинаторики). Определения функций этого пакета есть в справочной базе данных.

    Рис. 11.5. Примеры работы с подпакетом функций комбинаторики

    Подпакет Combinatorica задает определение ряда функций комбинаторики и теории графов. Ниже представлены имена функций комбинаторики.

    Функции перестановок и сочетаний

    Backtrack

    BinarySearch

    Binary Subsets

    DerangementQ

    Derangements

    Distinct Permutations

    EquivalenceClasses

    EquivalenceRelationQ

    Equivalences

    Eulerian

    FromCycles

    FromlnversionVector

    GrayCode

    HeapSort

    Heapify

    HideCycles

    Index

    InversePermutation

    Inversions

    InvolutionQ

    Josephus

    Ksubsets

    Lexicographic Permutations

    LexicographicSubsets

    MinimumChangePermutations

    MultiplicationTable

    NextKSubset

    Next Permutation

    NextSubset

    NthPermutation

    NthSubset

    NumberOf Derangements

    NumberOf Involutions

    NumberOf Permu tat ion sByCycles

    PermutationGroupQ

    PermutationQ

    Permute

    Polya

    RandomHeap

    RandomKSubset

    RandomPermutation

    RandomPermutationl

    RandomPermutation2

    RandomSubset

    RankPermutation

    RankSubset

    RevealCycles

    Runs

    SamenessRelation

    SelectionSort

    SignaturePermutation

    StirlingFirst

    StirlingSecond

    Strings

    Subsets

    ToCycles

    ToInversionVector

    TransitiveQ

    Следует отметить, что ввиду обилия функций даже в справочной системе даны примеры лишь для избранных функций. Для ознакомления с назначением конкретной функции достаточно исполнить команду ?Имя_функции, например:


    <<DiscreteMath`Combinatorica`

    ?Permute

    Permute[l, p] permutes list 1 according to permutation p.

    ?KSubsets

    KSubsets[l, k] gives all subsets of set 1 containing exactly k

    elements, ordered lexicographically.

    KSubsets[{l, 2, 3, 4, 5}, 2]

    {{1, 2}, {1, 3), {1, 4}, {1, 5}, {2, 3), {2, 4}, {2, 5}, {3, 4}, {3, 5}, (4, 5}}

    << DiscreteMath`Combinatorica`

    MinimumChangePermutations[{1,2,3}]

    {{1, 2, 3}, {2, 1, 3}, {3, 1, 2}, {1, 3, 2}, {2, 3, 1}, {3, 2, 1}}

    Map[RankPermutation, Permutations[{1,2,3,4}]]

    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}

    InversePermutation[{4,8,5,2,1,3,7,6}]

    (5, 4, 6, 1, 3, 8, 7, 2}

    Polya[Table[ RotateRight[Range[8],i], {i,8}], m]

    1/8 (4m+2m2 +m4 +m8)

    Table[NthSubset[n,a,b,c,d], {n,0,15}]

    {{}, {a}, {b}, {a, b}, {c}, {a, c}, {b, c}, {a, b, c}, {d}, (a, d}, {b, d}, {a, b, d}, {c, d}, {a, c, d}, {b, c, d}, {a, b, c, d}}

    Вторая группа функций комбинаторики представлена следующими функциями.

    Функции разделения, композиции и картин Янга

    CatalanNumber

    Compositions

    ConstructTableau

    DeleteFromTableau

    DurfeeSquare

    EncroachingListSet

    FerrersDiagram

    FirstLexicographicTableau

    . Insert IntoTableau

    LastLexicographicTableau

    Longest IncreasingSubsequence

    NextComposition

    Next Part it ion

    NextTableau

    NumberOf Compos it ions

    NumberOf Partitions

    NumberOf Tableaux

    PartitionQ

    Partitions

    RandomComposition

    RandomPartition

    RandomTableau

    TableauClasses

    TableauQ

    TableauxToPermutation

    Tableaux

    TransposePartition

    TransposeTableau

    Ha рис. 11.6 показано несколько примеров работы с некоторыми из этих функций.

    Рис. 11.6. Примеры работы с функциями разделения, композиции и картин Янга

    Этих примеров достаточно, чтобы заинтересованный читатель по их образцу и подобию изучил свойства и возможности нужных ему функций комбинаторики.

    Графы и их функции

    Mathematica имеет самые обширные возможности решения задач, связанных с графами. Задание графов и манипуляции с ними также включены в пакет комбинаторики. Они представлены четырьмя группами функций.

    Представление графов

    AddEdge

    AddVertex

    Breadth'FirstTraversal

    ChangeEdges

    ChangeVertices

    CircularVertices

    CompleteQ

    Contract

    DeleteEdge

    DeieteVertex

    DepthFirstTr aversal

    Diameter

    DilateVertices

    Distribution

    Eccentricity

    Edges

    EmptyQ

    FromAd j acencyLists

    FromOrderedPairs

    FromUnorderedPairs

    GraphCenter

    GraphComplement

    InduceSubgraph

    M

    MakeSimple

    MakeUndirected

    Normal! zeVerticesPointsAndLines

    Pseudograph

    RadialEmbedding

    Radius

    RankGraph

    RankedEmbedding

    ReadGraph

    RemoveSelf Loops

    RootedEmbedding

    RotateVertices

    ShakeGraph

    ShowGraph

    ShowLabe 1 edGr aph

    SimpleQ

    Spectrum

    SpringErrbedding

    ToAdjacencyLists

    ToOrderedPairs

    ToUnorderedPairs

    TranslateVertices

    UndirectedQ

    UnweightedQ

    Vertices

    WriteGraph

    Одной из самых важных функций этой группы является функция ShowGraph (показать граф). Она обеспечивает визуальное представление графа, заданного аргументом функции. Покажем работу избранных функций этой группы на нескольких примерах.

    На рис. 11.7 показано построение полного графа и его таблицы. Параметром графа является число 6, характеризующее число узловых точек графа, соединенных друг с другом.

    Изменяя значение параметра графа, можно получить множество других графов. На рис. 11.8 показан вид двух разных графов. Верхний граф — многолучевая звезда с добавленным отрезком, полученная с помощью функции AddEdge. Первый аргумент задает исходный граф (в нашем случае — звезду с 11 узлами), а второй — соединяемые отрезком прямой точки. Нижний рисунок иллюстрирует построение подграфа.

    Еще пара графов представлена на рис. 11.9. Этот рисунок иллюстрирует применение функций Contract и GridGraph. Последняя из них строит сеточный граф.

    Рис. 11.7. Пример построения полного графа и его таблицы

    Рис. 11.8. Построение графа звезды и подграфа

    Рис. 11.9. Примеры построения графов с помощью функций Contractn GridGraph

    Приведенный выше набор функций позволяет строить практически любые виды графов и обеспечивает высокую степень их визуализации.

    Создание графов

    CartesianProduct

    CirculantGraph

    CodeToLabeledTree

    CompleteGraph

    Cycle

    DegreeSequence

    EmptyGraph

    ExactRandomGraph

    ExpandGraph

    Functional-Graph

    GraphDif ference

    Graphlnter section

    GraphJoin

    GraphPower

    GraphProduct

    GraphSum

    GraphUnion

    GraphicQ

    GridGraph

    Hypercube

    IncidenceMatrix

    IntervalGraph

    LabeledTreeToCode

    LineGraph

    MakeGraph

    NthPair

    Path

    RandomGraph

    RandomTree

    RandomVertices

    RealizeDegreeSequence

    RegularGraph

    RegularQ

    Turan

    Wheel

    -

    Рисунок 11.10 показывает применение функций GraphUnion (верхний график) и GraphProduct (нижний график).

    Рис. 11.10. Создание графов с помощью функций GraphUnion и GraphProduct С действием других функций нетрудно ознакомиться самостоятельно.

    Свойства графов

    ArticulationVertices

    Automorphisms

    Bi Connected

    Components

    BiconnectedQ

    BipartiteQ

    Bridges

    ChromaticNumber

    Chromatic

    Polynomial

    CliqueQ

    Connected

    Components

    ConnectedQ

    DeBruijnSequence

    DeleteCycle

    EdgeChromatic

    Number

    EdgeColoring

    EdgeConnectivity

    Element

    EulerianCycle

    EulerianQ

    ExtractCycles

    FindCycle

    Girth

    GraphPower

    HamiltonianCycle

    HamiltonianQ

    Harary

    HasseDiagram

    IdenticalQ

    Independent SetQ

    IsomorphicQ

    Isomorphism

    IsomorphismQ

    MaximumClique

    Maximum

    lndependentSet

    Minimum

    VertexCover

    OrientGraph

    PartialOrderQ

    PerfectQ

    SelfComplementaryQ

    StronglyConnected

    Components

    TopologicalSort

    TransitiveClosure

    TransitiveReduction

    TravelingSalesman

    TravelingSalesman

    Bounds

    TreeQ

    Trianglelnequality

    TwoColoring

    VertexColoring

    VertexConnectivity

    VertexCoverQ

    WeaklyConnected

    Components

    Рисунок 11.11 (сверху) показывает применение функции OrientGraph для построения ориентированного графа, который представляется стрелками. Там же (снизу) показано применение функции ShowLabeledGraph для построения графа с маркированными числами вершинами. Напомним, что функция ShowGraph позволяет наблюдать графы без маркировки вершин.

    Рис. 11.11. Построение графов — ориентированного (сверху) и с маркированными вершинами (снизу)

    Построение широко используемой в теории графов диаграммы Хассе (Hasse) иллюстрирует рис. 11.12.

    Алгоритмическая теория графов

    AllPairsShor test Path

    BipartiteMatchin

    Cofactor

    Dijkstra FindSet GraphPower
    InitializeUnionFind Maxima IMatching MaximumAntichain
    MaximumSpanningTree MinimumChainPartition MinimumSpanningTree
    NetworkFlowEdges Networks' low NumberOfSpanningTrees
    PathConditionGraph PlanarQ Shortest PathSpanningTree
    ShortestPath StableMarriage UnionSet

    Рисунок 11.13 показывает действие функции MinimumSpanningTree с выводом графа с метками узловых точек.

    Риc. 11.12. Построение диаграммы Хассе

    Риc. 11.13. Пример применения функции MinimumSpanningTree

    В целом следует отметить, что набор функций в области создания, визуализации и теории графов весьма представителен, так что специалисты в области графов могут найти в этом наборе как типовые, так и уникальные средства.

    Функции вычислительной геометрии — ComputationalGeometry

    В подпакете ComputationalGeometry заданы следующие функции, относящиеся к геометрическим поверхностям:

    • ConvexHull [ { {xl, yl...}, {х2, у2,...},...] — вычисляет выпуклость оболочки в точках плоскости;
    • DelaunayTriangulation[ {{xl,yl...}, {х2, у2,...},...] — вычисляет триангуляцию Делоне (разбивку на выпуклые треугольники) в точках плоскости;
    • DelaunayTriangulationQ [ {{xl, yl...}, {х2, у2,...},...}, trival] — тестирует триангуляцию Делоне в точках плоскости; ,
    • DiagramPlot [ {{xl, yl...}, {х2, у2,...},...] — построение диаграммы по заданным точкам (после списка параметров возможны спецификации в виде списков diagvert, diagval);
    • PlanarGraphPlot [{ {xl, yl...}, {x2, y2,...},...] — построение планарного графа по заданным точкам (после списка параметров возможна спецификация в виде списка indexlist или vals);
    • TriangularSurfacePlot [ {{xl,yl, zl}, {x2,y2, z2 },...] — строит поверхность из треугольников по заданным точкам;
    • VoronoiDiagramm[ {{xl, yl...}, {х2, у2,...},...] — вычисляет данные для построения диаграммы Вороного.

    Примеры применения этих функций приведены ниже:


    <<DiscreteMath`ComputationalGeometry`

    ConvexHull[{{0,2}, {1,1}, {0,0}, {2,0}, {1,2}}]

    {4, 5, 1, 3}

    delval = (DelaunayTriangulation[{{l,2J, {0,3}, {1,1}}]) // Short[#,2]&

    {{1, {2, 3}}, {2, {3, 1}}, {3, {1, 2}}}

    VoronoiDiagram[{{l,2}, {0,3}, {1,1}}]

    {{{-0.50000000000000, 1.5000000000000},

    Ray [{- 0.50000000000000, 1.5000000000000},

    {1.5000000000000, 3.5000000000000}],

    Ray [ {- 0.50000000000000, 1.5000000000000},

    {2.0000000000000,1.50000000000000}],

    Ray[ {- 0.50000000000000, 1.5000000000000},

    {-2.5000000000000, 0.50000000000000} ]},

    {{1, {1, 3, 2}}, {2, {1, 2, 4}}, {3, {1, 4, 3}}}}

    Рисунок 11.14 показывает задание на плоскости массива точек data2D, построение планарного графа и его выпуклой огибающей с помощью функции Convex-Hull.

    Рис. 11.14. Пример построения планарного графа и его выпуклой огибающей Выполнение триангуляции Делоне иллюстрирует рис. 11.15.

    Рис. 11.15. Выполнение триангуляции Делоне

    Наконец, на рис. 11.16 показаны результаты действия еще двух функций — построение диаграммы и триангуляция в пространстве.

    Рис. 11.16. Построение диаграммы (сверху) и триангуляция в пространстве (снизу)

    Дискретные функции единичного скачка и импульса — KroneckerDelta

    В подпакете KroneckerDelta системы Mathematica 3 заданы дискретные функции единичного скачка и единичного импульса:

    • DiscreteStep [n] — возвращает единичный скачок при целом n=0;
    • DiscreteStep [n1, n2,...] — функция многомерного единичного скачка;
    • KroneckerDelta [n] — возвращает 1 при целом n=0 и 0 во всех других случаях;
    • KroneckerDelta [n1, n2,...] — многомерная функция Кронекера.

    Примеры использования этих функций в одномерном варианте представлены ниже:


    <<DiscreteMath` KroneckerDelta`

    Table[DiscreteStep[n], {n, -3, 3}]

    {0, 0, 0, 1, 1, 1, 1}

    Table[DiscreteStep[n], {n, -3, 3, 1/2}]

    {0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1}

    Table[KroneckerDelta[n], {n, -2, 2, 1/2}]

    {0, 0, 0, 0, 1, 0, 0, 0, 0}

    Sum[KroneckerDelta[n— a]f[n], {n, -Infinity, Infinity}]

    f[a]

    Sum[( (KroneckerDelta[n]— KroneckerDelta[n-1]) -

    (KroneckerDelta[n-1]— KroneckerDelta[n-2]) ) f[n], {n, -Infinity, Infinity}]

    f[0]-2f[l] +f[2]

    Рисунок 11.17 иллюстрирует применение функции единичного скачка в двумерном случае.

    Рис. 11.17. Пример применения функции скачка в двумерном случае

    В системе Mathematica 4 функция KroneckerDelta стала встроенной. В данный подпакет входят еще две функции:

    • SimplifyDiscreteStep [ехрr] — упрощение выражения ехрг с функциями дискретного скачка;
    • SimplifyKroneckerDelta [ехрг] — упрощение выражения ехрг с дельта-функцией Кронекера.

    Действие этих функций демонстрируют следующие примеры:


    DiscreteStep[n - 1] (KroneckerDelta[n - 2] + DiscreteStep[n, m] DiscreteStep[m - 1]) // SimplifyDiscreteStep

    DiscreteStep[-1+m]

    DiscreteStep[-l+m] + KroneckerDelta[-2+n]

    (f[n] + KroneckerDelta[n]) DiscreteStep[n-l] // SimplifyKroneckerDelta

    DiscreteStep [ -1 + n] f [ n]

    Дискретные перестановки — Permutations

    В подпакете Permutations определен ряд функций дискретных перестановок:

    • RandomPermutation [n] — случайные перестановки из n элементов;
    • Ordering [list] — дает перестановки в установленном списком list порядке;
    • ToCycles [perm] — дает циклическую декомпозицию для списка list;
    • FromCycles [ {cicl, cic2,...}] — возвращает перестановки из циклических декомпозиций cic1, cic2, ...;
    • PermutationQ [list] — возвращает True, если список list представляет перестановки, и False в ином случае.

    Работа функций поясняется следующими примерами:


    <<DiscreteMath`Permutations`

    RandomPermutation[16]

    {16, 12, 11, 5, 3, 4, 9, 14, 2, 8, 15, I, 13, 7, 10, 6}

    ToCycles[%]

    {{16, 6, 4, 5, 3, 11, 15, 10, 8, 14, 7, 9, 2, 12, 1}, {13}}

    FromCycles[%]

    {16, 12, 11, 5, 3, 4, 9, 14, 2, 8, 15, 1, 13, 7, 10, 6}

    Ordering[%]

    {12, 9, 5, 6, 4, 16, 14, 10, 7, 15, 3, 2, 13, 8, 11, 1}

     

    Решение рекуррентных разностных уравнений — RSolve

    Для решения рекуррентных разностных уравнений в подпакет RSolve введены следующие функции:

    • RSolve [eqn, a [n] , n] — решает рекуррентное уравнение для а [n];
    • RSolve [eqn, a, n] — решает рекуррентное уравнение для функции а;
    • RSolvet {eqnl, eqn2,...}, {al, a2,...},n] — решает систему рекуррентных уравнений, представленных списками.

    Ниже представлены примеры применения данных функций:


    <<DiscreteMath` RSolve`

    RSolve[a[n+l] == 2 a[n], a[n], n]

    {{a[n] -> 2nC[l]}}

    RSolve[a[n] == a[n-l] + a[n-2], a[0] == a[l] == 1, a[n], n]

    RSolve[ a[0] == a[l] == 2,

    (n+1) (n+2) a[n+2]- 2 (n+1) a[n+l]- 3 a[n] == 0, a[n], n]

     

    Деревья—Tree

    Подпакет Tree содержит функции создания и применения древовидных структур, именуемых деревьями. Вот эти функции:

    • MakeTree [list] — создает дерево по информации, представленной в списке list;
    • TreeFind [tree, x] — возвращает позицию наименьшего элемента, превосходящего х в списке list, представляющем дерево.

    Действие этих функций поясняют следующие примеры:


    <<DiscreteMath` Tree`

    MakeTree[{el, e2, е3, е4}]

    {{e2, 2), {{el, 1}, {}, {}}, {{e3, 3}, {}, {{e4, 4}, {}, {}}}}

    tree = MakeTree[{8.5, 1.2, 9.1, 3.4, 5., 7.6 ,6.4}]

    {{6.4, 4}, {{3.4, 2}, {{1.2, 1}, {}, {}}, {{5., 3}, {}, {}}},

    {{8.5, 6}, {{7.6, 5}, {}, {}}, {{9.1, 7}, {},{}}}}

    TreeFind[tree, 1.2]

    1 . .

    TreeFind[tree, 1]

    0

    Для визуализации деревьев служат следующие функции:

    • TreePlot [tree] — строит график дерева tree;
    • ExprPlot [expr] — строит график, представляющий ехрг в виде дерева.

    Примеры построения графиков деревьев представлены на рис. 11.18. Верхнп; график построен по данным дерева tree, определенного в приведенных выи: примерах, а нижний — по данным случайного дерева.

    Построение графиков деревьев по выражению ехрг с помощью функции ExprPlot демонстрирует рис. 11.19.

    Рис. 11.18. Примеры визуализации деревьев

    Рис. 11.19 . Построение графиков деревьев с помощью функции ExprPlot

     

    gl11-10.jpg

    Изображение: 

    gl11-11.jpg

    Изображение: 

    gl11-12.jpg

    Изображение: 

    gl11-13.jpg

    Изображение: 

    gl11-14.jpg

    Изображение: 

    gl11-15.jpg

    Изображение: 

    gl11-16.jpg

    Изображение: 

    gl11-17.jpg

    Изображение: 

    gl11-18.jpg

    Изображение: 

    gl11-19.jpg

    Изображение: 

    gl11-5.jpg

    Изображение: 

    gl11-6.jpg

    Изображение: 

    gl11-7.jpg

    Изображение: 

    gl11-8.jpg

    Изображение: 

    gl11-9.jpg

    Изображение: 

    5. Геометрические расчеты — пакет Geometry

     

    Геометрические расчеты — пакет Geometry

     

    В этом разделе описан пакет Geometry, содержащий ряд функций, полезных при выполнении геометрических расчетов. В основном это функции, относящиеся к построению регулярных полигонов на плоскости и полиэдров в пространстве. Кроме того, в пакете есть функции, задающие вращение фигур на плоскости и в пространстве.

    Характеристики регулярных полигонов и полиэдров — Polytopes

    Подпакет Polytopes содержит ряд функций для регулярных полигонов (многоугольников):

    • NumberOfVertices [р] — число вершин углов полигона;
    • NumberOfEdges [p] — число сторон полигона;
    • NumberOf Faces [p] — число граней полигона;
    • Vertices [р] — список координат вершин углов полигона;
    • Area [р] — площадь полигона при длине каждой стороны, равной 1;
    • InscribeciRadius [р]— радиус вписанной в полигон окружности;
    • CircumscribedRadius [р] — радиус описывающей полигон окружности.

    В этих функциях наименование полигона р может быть следующим (в скобках дано число сторон):


    Digon (2)

    Triangle (3)

    Square (4)

    Pentagon (5)

    Hexagon (6)

    Heptagon (7)

    Octagon (8)

    Nonagon (9)

    Decagon (10,)

    Undecagon (11)

    Dodecagon (12)

    На рис. 11.20 показаны примеры применения некоторых из этих функций и построение крупными точками вершин полигона — Пентагона (пятиугольника).

    Для объемных фигур — полиэдров — имеются следующие функции:

    • NumberOfVertices [р] — число вершин углов полиэдра;
    • NumberOfEdges [р] — число сторон полиэдра;
    • NumberOf Faces [р] — число граней полиэдра;
    • Vertices [p] — список координат вершин углов полиэдра;
    • Area [p] — площадь полиэдра при длине каждой стороны, равной 1;
    • InscribedRadius [р] — радиус вписанной в полиэдр окружности;
    • CircumscribedRadius [р] — радиус окружности, описывающей полиэдр;
    • Volume [p] — объем полиэдра;
    • Dual[p] — дуальный полиэдр;
    • Schlafli[p] — символ полиэдра.

    Рис. 11.20. Примеры работы с функциями полигонов

    Здесь наименование полиэдра может быть следующим:


    Tetrahedron (4)

    Cube (6)

    Octahedron (8)

    Didecahedron (12)

    Icosahedron (20)

    Примеры применения функций полиэдров представлены ниже:


    Volume[Octahedron]

    (Корень из 2) /3

    Vertices [Octahedron]

    {{0, 0, 1.41421}, {1.41421, 0, 0}, {0, 1.41421, 0},

    {0, 0, -1.41421}, {-1.41421, 0, 0}, {0, -1.41421, 0}}

    Dual [Octahedron]

    Cube

    InscribedRadius [Octahedron]

    1/(Корень из 6)

    GircumscribedRadius [Octahedron]

    1/(Корень из 2)

     

    Вращение фигур на плоскости и в пространстве — Rotations

    Для задания поворота плоских фигур на заданный угол в подпакете Rotations заданы следующие функции:

    • RotationMatrix2D[theta] — дает матрицу для поворота на угол theta в двух измерениях;
    • Rotate2D [vec, theta] — поворачивает вектор vec по часовой стрелке на угол theta;
    • Rotate2D[vec,theta,{x,y}] — поворачивает вектор vec по часовой стрелке на угол theta относительно точки с координатами {х, у}.

    Рисунок 11.21 иллюстрирует работу с этими функциями.

    Рис. 11.21. Работа с функциями поворота

    Аналогичные функции существуют и для поворота трехмерных фигур:

    • RotationMatrix3D [psi, theta,phi] — дает матрицу поворота на заданные углы в трехмерном пространстве;
    • Rotate3D [vec, psi, theta, phi] — поворачивает вектор vec на заданные углы в трехмерном пространстве;
    • Rotate3D [vec, psi, theta, phi,{x,y,z}]— поворачивает вектор vec на заданные углы в трехмерном пространстве относительно точки с координатами {х,у, z}.

    Приведем пример вычисления матрицы трехмерного поворота:


    RotationMatrix3D[Pi, Pi/2, Pi/6]

    {{-(Корень из 3)/2,0,1/2 }},{1/2,0,(Корень из 3)/2},{ 0,1,0,}}

     

    gl11-20.jpg

    Изображение: 

    gl11-21.jpg

    Изображение: 

    6. Линейная алгебра — пакет LinearAlgebra

     

    Линейная алгебра— пакет LinearAlgebra

     

    Пакет расширения LinearAlgebra добавляет ряд новых функций, полезных при решении сложных задач линейной алгебры.

    Декомпозиция Холесского — Cholesky

    Подпакет Cholesky содержит единственную функцию HoleskyDecomposition [m], которая вычисляет декомпозицию (факторизацию, разложение) Холесского для симметричной положительно определенной матрицы т.

    Примеры выполнения декомпозиции Холесского даны ниже:


    <<LinearAlgebra`Cholesky`

    hil = Tablet l/(i + j - 1) , {i, 1, 4}, {j, 1, 4}]

    Eigenvalues[ N[hil] ]

    {1.50021, 0.169141, 0.00673827, 0.0000967023}

    u = CholeskyDecomposition[hil]

    MatrixForm[Transpose[u] . u]

     

    Метод исключения Гаусса — GaussianElimination

    Следующие функции обеспечивают реализацию метода исключения Гаусса при решении линейного уравнения вида А-x =b:

    • LUFactor [m] — возвращает LU-декомпозицию матрицы m;
    • LUSolve [lu, b] — решает систему линейных уравнений с матрицей коэффициентов lu и вектором свободных членов b методом исключения переменных Гаусса;
    • LU [a, pivots] — создает объект, используемый в LUSolve. Применение этих функций поясняют примеры, показанные ниже:

    <<LinearAlgebra`GaussianElimination`

    MatrixForm[a = {{1, 2, 3}, {4, 5, 6}, {-1, 5, -5}}]

    lu = LUFactor[a]

    b = {10, -3, 12}

    {10, -3, 12}

    LUSolve[lu, b]

    Метод исключения Гаусса является хорошо апробированным методом решения систем линейных уравнений, что делает реализацию описанных функций полезным дополнением к встроенным функциям линейной алгебры.

    Операции с матрицами — MatrixManipulation

    Подпакет MatrixManipulation добавляет к матричным функциям ядра системы Ма-thematica ряд новых функций. Начнем с функций объединения матриц:

    • AppendColumns [ml,m2,...] — объединяет по столбцам матрицы ml,m2,...;
    • AppendRows [ml,m2,...] — объединяет по строкам матрицы ml,m2,...;
    • BlockMatrix [blocks] — объединяет по строкам и столбцам блоки blocks, создавая новую матрицу.

    Данные операции с матрицами иллюстрируют следующие примеры:


    << LinearAlgebra`MatrixManipulation`

    a = {{a11, a12}, {a21, a22}}; MatrixFormfa]

    b = {{b11, b12}, {b21, b22}}; MatrixForm[b]

    MatrixForm[AppendColumns[a, b] ]

    AppendRows[a, b] //MatrixForm

    BlockMatrix[{{a, b}, {b, {{0, 0}, {0, 0}}}}] //MatrixForm

    Следующая группа функций вставляет или удаляет столбцы или строки матриц:

    • TakeRows [mat, n] — вставляет в матрицу mat n-ю строку;
    • TakeRows [mat, -n] — удаляет из матрицы mat п-ю строку;
    • TakeRows [mat, {m,n} ] — вставляет в матрицу mat строки от m до n;
    • TakeColumns [mat, n] — вставляет в матрицу mat п-й столбец;
    • TakeColumns [mat, -n] — удаляет из матрицы mat п-й столбец;
    • TakeColumns [mat, {m, n} ] — вставляет в матрицу mat столбцы от m до п.

    Действие функции иллюстрируется следующими примерами:


    mat = Array[m, 3, 4]; MatrixForm[mat]

    m[l, 1] m[l, 2] m[l, 3] m[l, 4]

    m[2, 1] m[2, 2] m[2, 3] m[2, 4]

    m[3, 1] m[3, 2] m[3, 3] m[3, 4]

    TakeRows[mat, -2] //MatrixForm

    m[2, 1] m[2, 2] m[2, 3] m[2, 4]

    m[3, 1] m[3, 2] m[3, 3] m[3, 4]

    TakeColumns[mat, {2,3}] //MatrixForm

    m[l, 2] m[l, 3] )

    m[2, 2] m[2, 3]

    m[3, 2] m[3, 3]

    TakeMatrix[mat, {2, 3}, {3, 4}] //MatrixForm

    m[2, 3] m[2, 4]

    m[3, 3] m[3, 4]

    SubMatrix[mat, {2, 3}, {2, 2}] //MatrixForm

    m[2, 3] m[2, 4]

    m[3, 3] m[3, 4]

    Следующая группа функций служит для задания матриц специального вида:

    • UpperDiagonalMatrix [f, n] — формирует наддиагональную матрицу размером пхп;
    • LowerDiagonalMatrix [f, n] — формирует поддиагональную матрицу размером пхп;
    • ZeroMatrix [n] — формирует квадратную нулевую матрицу размером пхп;
    • ZeroMatrix [m, n] — формирует нулевую матрицу размером тхп;
    • HilbertMatrix [n] — формирует квадратную матрицу Гильберта размером пхп;
    • HilbertMatrix [m, n] — формирует матрицу Гильберта размером тхп;
    • HankelMatrix [n] — формирует квадратную матрицу Ганкеля размером пхп;
    • HankelMatrix [m, n] — формирует матрицу Ганкеля размером тхп.

    Примеры задания матриц разного типа приведены ниже:


    UpperDiagonalMatrix[f, 3] //MatrixForm

    LowerDiagonalMatrix[#1 + #2 &, 4] //MatrixForm

    HilbertMatrix[2, 4] //MatrixForm

    HankelMatrix[{w, x, y, z}] //MatrixForm

    Наконец, в подпакет входит еще одна функция, LinearEquationsToMatri-ces [eqns, vars], которая из записи линейного уравнения eqns с переменными vars формирует расширенную матрицу, содержащую матрицу коэффициентов левой части уравнения и вектор свободных членов.

    Пример применения данной функции:


    LinearEquationsToMatrices[

    а[1,1]*х + а[1,2]*у == с[1],

    а[2,1]*х + а[2,2]*у == с[2], х, у]

    {{{{{a11, a12), {а21, а22}}[1, 1],

    {{a11, a12), {a21, а22}}[1, 2]}, {{{a11, a12}, {a21, a22}}[2, 1],

    {{a11, a12), {a21, a22}} [2, 2]}}, {c[l],c[2]}}

     

    Ортогонализация и нормализация — Ortogonalization

    В подпакете ортогонализации Ortogonalization имеются следующие функции:

    • GramSchmidt [ {vl, v2,...} ] — создает ортогональное множество на основе списка векторов v1, v2, ...;
    • Normalize [vect] — возвращает нормированный вектор vect;
    • Projection [vectl, vect2] — дает ортогональную проекцию вектора vl на вектор v2.

    В этих функциях после аргументов допустимы опции InnerProduct->exprn Normalized->False (отказ от нормировки). Примеры работы с функциями ортогонализации представлены ниже:


    <<LinearAlgebra`Orthogonalization`

    {wl, w2, w3} = GramSchmidt[ {{1,3,2}, {2,4,3}, {2,4,6}}]

    { wl . w2, w2 . w3, wl . w3, wl . wl, w2 . w2, w3 . w3}

    {0, 0, 0, 1, 1, 1}

    GramSchmidt[{1, x, x^2, x^3, x^4}, InnerProduct -> (Integrate[#l #2,{x,-l,l}]&)] //Simplify

    Normalize[LegendreP[2,x], InnerProduct ->(Integrate[#l #2,{x,-l,l}]&)]

    {wl, w2} = GramSchmidt[{{3,4,3}, {2,3,6}}, Normalized -> False]

    {wl . wl, wl . w2}

    {34, 0}

     

    Решение линейных уравнений с трехдиагональной матрицей —Tridiagonal

    При решении линейных уравнений часто встречаются матрицы особой формы — трехдиагональные. Подпакет Tridiagonal имеет функцию для решения линейных уравнений с такой матрицей:

    • TridiagonalSolve [a,b, с, г] — решение системы линейных уравнений с трехдиагональной матрицей m. х==г (диагонали представлены векторами а, b и с, вектор свободных членов — г).

    Пример применения данной функции:


    <<LinearAlgebra` Tridiagonal`

    {а, b, с} = {{1, 2, 3}, {4, 5, б, 7}, {10, 9, 8}}

    {{1, 2, 3}, {4, 5, 6, 7}, {10, 9, 8}}

    m = Table[Switch[ j-i, -1, a[[j]], 0, b[[jj], 1, c[[j-l]], _, 0], {i, 4}, {j, 4}]//MatrixForm

    TridiagonalSolve[a, b, c, {8, 3, 4, 5}

    С учетом представленных функций и функций ядра набор матричных средств системы Mathematica является одним из наиболее полных. В области решения задач в численном виде он несколько уступает лишь специализированной матричной системе MATLAB 5.0/5.3.

     

    7. Расширение в теории чисел — пакет NumberTheory

     

    Расширение в теории чисел

     

    Мы уже описывали уникальные возможности систем Mathematica 3/4 в области обработки чисел и численных вычислений. Эти возможности существенно расширяет пакет NumberTheory, содержащий функции, реализующие алгоритмы теории чисел. Данный раздел посвящен знакомству с этим пакетом.

    Цепные дроби — ContinuedFractions

    Следующие функции подпакста ContinuedFractions служат для представления чисел в виде цепных дробей или для формирования цепной дроби из списков:

    • ContinuedFraction [х] — возвращает цепную дробь для рационального числа х;
    • ContinuedFraction [х, n] — возвращает цепную дробь для числа х с числом членов п;
    • ContinuedFractionForm [{а0, al,...}] — создает цепную дробь из списка {a0,al,...};
    • Normal [ContinuedFractionForm[ {а0, al,...}]] — представление в нормальной форме.

    Примеры разложения чисел на цепные дроби:


    <<NumberTheory`

    ContinuedFractionss ContinuedFraction[123/1234]//ContinuedFractionForm

    ContinuedFraction[Sqrt[5], 10]//ContinuedFractionForm 2,

    ContinuedFraction[GoldenRatio, 6 ] //ContinuedFractionForm

    Table[ Normal[ContinuedFractionForm[Table[1, {n}]]], {n, 9}]

    %- N[GoldenRatio]

    {-0.618034, 0.381966, -0.118034, 0.0486327,

    -0.018034, 0.00696601, -0.00264937, 0.00101363,-0.00038693}

    В подпакете имеются также следующие функции:

    • ToPeriodicForm[x] — дает десятичное представление для рациональнЪго числа 0 < х < 1;
    • ToPeriodicForm [х, b] — дает представление рационального числа х числом с основанием b;
    • PeriodicForm[ {а0,...}, {am,...}] — дает периодическую форму представления списков;
    • PeriodicForm[ {а0,...}, {am,...},b] — дает периодическую форму представления списков с основанием b;
    • Normal [ PeriodicForm [{а0,...}, {am,...}]] — преобразование в нормальную форму;
    • Normal [PeriodicForm[ {а0,...}, {am,...} ,b] ] — преобразование в нормальную форму с основанием b.

    Ниже представлены примеры применения этих функций:


    ToPeriodicForm[ 1/50 ]

    0.02

    ToPeriodicForm[ 1/23 ]

    0.0434782608695652173913

    PeriodicForm[1,2,3,4]

    0.1234

    RealDigits[ N[ 1/23, 25 ] ]

    {{4, 3, 4, 7, 8, 2, 6,

    0, 8, 6, 9, 5, 6, 5, 2, 1, 7, 3, 9, 1, 3, 0, 4, 3, 5},

    -1}

    ToPeriodicForm[ 1/20, 2 ]

    0.000011 ToPeriodicForm[ 1/127 ]

    0.007874015748631496062992l2598425l968503937

    Normal[%]

    1/127

    В системе Mathematica 4 функция ContinuedFraction стала встроенной. Имеется также встроенная функция FromContinuedFraction [list], которая строит цепную дробь по элементам списка list.

    Улучшенное разложение на простые множители — FactorlntegerECM

    Алгоритм разложения чисел на простые множители, реализованный в ядре Mathematiica 3, способен за 3 часа (на рабочих станциях) разлагать числа, имеющие до 18 цифр. Улучшенный алгоритм в подпакете FactorlntegerECM позволяет увеличить максимальное число цифр до 40. Реализуется разложение следующей функцией:

    • FactorIntegerECM[n] — возвращает один из делителей числа п. Возможны опции FactorSize->q, CurveNumber->b и CurveCountLimit->c.

    Примеры применения этой функции:


    <<NumberTheory`FactorlntegerECM`

    FactorIntegerECM[123456789]

    34227

    3*5*7*9

    945

    FactorlntegerECM[945]

    189

    Функции теории чисел — NumberTheory Functions

    В подпакете NumberTheoryFunctions имеется ряд функций, относящихся к теории чисел:

    • SquareFreeQ[n] — дает True, если п не имеет квадратичного фактора, и False в ином случае;
    • NextPrime [n] — дает наименьшее простое число, превосходящее п;
    • ChineseRemainderTheorem[listl, Iist2.] — дает наименьшее неотрицательное целое г, такое что Mod [r, Iist2] ==list1;
    • SqrtMod [d, n] — дает квадратный корень из (d mod п) для нечетного n;
    • PrimitiveRoot [n] — дает примитивный корень п;
    • QuadraticRepresentation [d, n] — дает решение {х,у} для уравнения х 2 + (d у) 2 ==п для нечетного п и положительного d;
    • ClassList[d] — дает список неэквивалентных квадратичных форм дискриминанта d для отрицательного и свободного от квадратов целого d вида 4n+1;
    • ClassNumber [d] — дает список неэквивалентных квадратичных форм дискриминанта d;
    • SumOf Squares [d, n] — дает число представлений целого числа п в виде суммы d квадратов;
    • SumOf SquaresRepresentations [d, n] — дает список представлений целого числа п в виде суммы d квадратов, игнорируя порядок и знаки.

    Примеры применения данных функций приведены ниже:


    <<NumberTheory`NumberTheoryFunctions`

    SquareFreeQ[2*3*5*7]

    True SquareFreeQ[50]

    False

    NextPrime[1000000]

    1000003

    ChineseRemainderTheorem[{0, 1, 2}, {4, 9,

    244

    ChineseRemainderTheorem[Range[16], Prime[Range[16]]]

    20037783573808880093

    SqrtMod[3, 11]

    5

    SqrtMod[2, 10^64 +57]

    876504467496681643735926111996

    54610040103361197677707490912

    2865

    PrimitiveRoot[7]

    3

    QuadraticRepresentation[l, 13]

    {3,. 2}

    ClassList[-19]

    {{1, 1, 5}}

    ClassNumber[-10099]

    25

    SumOfSquaresRepresentations[3, 100]

    {{0, 0, 10}, (0, 6, 8}}

     

    Работа с простыми числами-PrimeQ

    В подпакете PrimeQ в дополнение к функции ядра PrimeQ [n] имеется ряд функций для работы с простыми числами:

    • ProvablePrimeQ [n] — возвращает True, если п проверено на простоту, и False в ином случае;
    • PrimeQCertif icate [n] — возвращает сертификат о том, что n— простое или композитное число;
    • ProvablePrimeQ [n, Certif icate->True] — возвращает сертификат, который может использоваться для проверки чисел на простоту;
    • PrimeQCertif icateCheck [check, n] — проверяет, удостоверяет ли сертификат check простоту или композитность п.

    Следующие примеры показывают работу с простыми числами:


    <<NumberTheory` PrimeQ`

    PrimeQ[127]

    True

    ProvablePrimeQ[127]

    True

    PrimeQCertificate[127]

    {127, 3, {2, {3, 2, {2}.}, {7, 3, {2, {3, 2, {2}}}}}}

    ProvablePrimeQ[127, Certificate->True]

    (True, {127, 3, {2, {3, 2, {2}}, {7, 3, {2, {3, 2, {2}}}}}}}

    PrimeQCertificate[3511, SmallPrime -> 1000]

    {{CertificatePrime -> 3511,

    CertificatePoint->PointEC[2, 2467, 1447, 2135, 3511], Certif icateK-> 32, Certif icateM -> 3424,

    CertificateNextPrime -*107, CertificateDiscriminant -> -7},

    107, 2, {2, {53, 2, {2, {13, 2, {2, {3, 2, {2}}}}}}}}

     

    Вычисление примитивных элементов — Primitive Element

    Подпакет PrimitiveElement содержит всего одну функцию для вычисления примитивных элементов множественного алгебраического выражения:

    • PrimitiveElement [z, {а1„а2,...} ] — возвращает список {b, { f1, f2,...}}, где b — примитивный элемент расширения рациональных алгебраических чисел al, а2,... и f1, f 2,... — полином переменной z, представляющей al, a2, ... как термы примитивного элемента.

    Ее действие видно из следующего примера:


    <<NumberTheory`PrimitiveElement`

    PrimitiveElement[z, {Sqrt[2], Sqrt[3]}]

    RootReduce[%[[2]] /. z -> %[[1]]]

     

    Создание рядов Рамануджанат-Дирихле — Ramanujan

    В подпакете Ramanujan определены следующие функции:

    • RamanujanTau [n] — n-й коэффициент ряда Рамануджана т-Дирйхле (т n );
    • RamanujanTauGeneratingFunction [z] — производящая функция ряда Рамануджана т-Дирихле;
    • RamanujanTauDirichletSeries [s] — ряд Рамануджана т-Дирихле f(s);
    • RamanujanTauTheta [t] — функция Рамануджана т-Дирихле o(t)
    • RamanujanTauZ [t] — функция Рамануджана т-Дирихле z(t).

    Это довольно редкие функции, представляющие интерес для специалистов в теории чисел. Достаточно подробные их определения даны в справочной базе данных. Ограничимся приведением примеров их использования:


    <<NumberTheory`Ramanujan`

    RamanujanTau[5]

    4830

    Sum[RamanujanTau[n] z^n, {n, 5}]

    z - 24 z2 + 252 z3 - 1472 z4 + 4830 z5

    RamanujanTauGeneratingFunction[. 1]

    0.00610209

    RamanuJanTauGeneratingFunction[.99]

    4.10287803703 x -1673

    RamanujanTauDirichletSeries[6 + 9.221]

    0.00040309-0.002390131

    z = RamanujanTauZ[9.22]

    0.00242388

    theta = RamanujanTauTheta[9.22]

    1.40372043366323 z Exp[-I theta]

    0.00040309 - 0.00239013 I

     

    Рационализация чисел — Rationalize

    Подпакет Rationalize расширяет возможности представления чисел в рациональном виде. Он содержит определения следующих функций:

    • ProjectiveRationalize [ {х0, xl,..., хn} ] — возвращает список целых чисел, дающих рациональные представления для чисел заданного списка;
    • ProjectiveRationalize [ {х0, xl,..., хn} ,ргес] — возвращает список целых чисел, дающих рациональные представления с погрешностью не более 10- рreк
    • Af f ineRationalize [ {х0, xl,..., хn} ] — возвращает список рациональных приближений для чисел заданного списка;
    • Aff ineRationalize [ {х0, xl,..., xn} ,prec] — возвращает список рациональных приближений для чисел заданного списка, вычисленных с погрешностью не более 10- ргес .

    Встроенная в ядро функция Rationalize дает рациональное представление для одиночных вещественных чисел. Приведенные функции выполняют рационализацию для списков чисел. Примеры их применения представлены ниже:


    <<NumberTheory` Rationalize`

    Rationalize[N[3 Pi], 6]/ Rationalize[N[11 Pi], 6]

    9/35

    ProjectiveRationalize[{N[3 Pi], N[11 Pi]}]

    {3, 11}

    AffineRationalize[{N[3 Pi], N[11 Pi]}, 6]

    {1065/113, 3905/113 }

     

    Нахождение полинома, дающего заданный корень — Recognize

    Подпакет Recognize содержит определение одноименной с ним функции в двух формах:

    • Recognize [x,n,t] — находит полином переменной t степени, большей п, такой, что х является его корнем;
    • Recognize [х, n, t, k] — находит полином переменной t степени, большей п, такой, что х является его корнем, и со штрафным весовым коэффициентом k, предназначенным для подавления генерации полиномов высших степеней.

    Действие этой функции поясняют следующие примеры:


    <<NumberTheory`Recognize`

    NSolve[2 x^3- x + 5 == 0]

    {{x->-1.4797}, {x-> 0.739852-1.068711}-,

    {x->0.739852+ 1.068711}}

    sol = First[x /. %]

    -1.4797

    Recognize[sol, 3, t]

    5-t+2t3

    Recognize[sol, 2, t]

    -225599 - 1464961 + 4032 t2

    Recognize[N[Sqrt[3^(2/5)]], 5, t]

    -3+t5

    Recognize[N[Sqrt[3A(2/5)]], 5, t, 10]

    -14625 + 11193 t + 328 t2 + 8813 + t4

     

    Тета-функция Зигеля

    Подпакет SiegelTheta содержит еще одну редкую функцию:

    • SiegelTheta [z, s] — возвращает значение тета-функции Зигеля Q(Z, s).

    Примеры вычисления этой функции даны ниже:


    << NumberTheory` SiegelTheta`

    SiegelTheta[{1+1,2+1}, {2+1,-1+41}, {1.2, 2.3+.3I}]

    0.973715-0.0002970481

    Sum[E^(Pi I {tl,t2}.{ {1+1,2+1}, {2+1, -1+41} }.{tl,,t2} +

    2 Pi I {tl,t2}.{l.2,2.3+.31}), {tl,-10,10>, {t2,-10,10}]

    0.973715 - 0.000297048 I

    В заключительной части этого примера дано вычисление тета-функции Зигеля по ее исходному определению.

     

    8. Численные расчеты — пакет NumericalMath

     

    Численные расчеты — пакет NumericalMath

     

    Пакет расширения NumericalMath содержит множество полезных функций для тех, кто имеет дело с численными расчетами. В их числе функции для выполнения высокоточных аппроксимаций рациональными функциями, численного интегрирования и дифференцирования, вычисления пределов функций, решения уравнений, разложения в ряд и т. д. Ниже описано подавляющее большинство функций этого расширения. Исключены лишь отдельные функции, представляющие ограниченный интерес и несложные для самостоятельного изучения (в подпаке-mах Butcher, Microscope и ComputerArithmetic).

    Аппроксимация аналитических функций — Approximations

    Подпакет Approximations содержит ряд функций для улучшенной рациональной аппроксимации аналитических функций. Для рациональной интерполяции и аппроксимации функций по заданным значениям абсцисс служит следующая функция:

    • Rationallnterpolation [f, {x,m, k}, {x 1 , x 2 , ...,.x m+k+1 } ] — возвращает аппроксимирующее функцию f выражение в виде отношения полиномов а степенью полинома числителя m и знаменателя k в абсциссах, заданных списком {x l ,x 2 ,...,x m+jt+1 }.

    Пример применения этой функции:


    <<NumericalMath `Approximations`

    ril = Rationallnterpolation[ Exp[x], {х, 2, 4}, {0, 1/3, 2/3, 1, 4/3, 5/3, 2}]

    Построим график погрешности аппроксимации, то есть график разности функ ии ril и Ехр [х] — он представлен на рис. 11.22.

    Нетрудно заметить, что если в центральной части области аппроксимации погрешность мала (менее 5-10- 7 ), то у правого края она резко возрастает.

    Представленная функция может использоваться и в иной форме:


    Rationallnterpolation[f,{х, m, k},{x, xmin, xmax}]

    Рис. 11.22. График погрешности рациональной аппроксимации экспоненциальной функции

    В данном случае выбор абсцисс осуществляется автоматически в интервале от xmin до mах. В отличие от первого случая, когда абсциссы могли быть расположены неравномерно, в данном случае расположение их будет равномерным. Приведем пример аппроксимации функции синуса в интервале от n до n:


    ri2 = RationalInterpolation[Sin[x],{x,3,4},{x,-Pi,Pi}]

    Интересно оценить погрешность аппроксимации. Для этого достаточно построить график разности аппроксимирующей и аппроксимируемой функций. Это построение представлено на рис. 11.23. Любопытно, что хотя максимальная погрешность и значительна, резких выбросов погрешности в данном случае нет.

    Рис. 11.23. График погрешности аппроксимации синусоидальной функции

    При рациональной аппроксимации можно задать опции WorkingPrecision и Bias со значениями по умолчанию $MachinePrecision и 0 соответственно. Опция Bias обеспечивает автоматическую расстановку узлов интерполяции. При Bias->0 обеспечивается симметрирование выбросов погрешности, дающее наименьшее ее значение в пиках. Ниже приведен пример интерполяции (аппроксимации) экспоненциальной функции в интервале изменения х от 0 до 2:


    ri3 = RationalInterpolation[Exp[x],{x,2,4},{x,0,2},Bias->.25]

    Построение графика погрешности (рис. 11.24) показывает, что правильным выбором центра интерполяции можно существенно уменьшить ее погрешность. Теперь большая погрешность наблюдается в левой части графика. Однако резкого выброса погрешности в данном случае нет.

    Рис. 11.24. Погрешность аппроксимации экспоненты при выборе опции Bias->.25

    Из приведенных примеров ясно, что рациональная аппроксимация способна дать существенное уменьшение погрешности при некотором оптимальном расположении узлов аппроксимации и выравнивании погрешностей по абсолютной величине в точках минимумов и максимумов кривой погрешности. Это лежит в основе так называемой минимаксной аппроксимации. Она реализуется следующей функцией:

    • MiniMaxApproximation[f,{x,{xmin,xmax},m,k}] — возвращает рациональную функцию минимаксной аппроксимации f при степени полиномов числителя и знаменателя {m, k} ив интервале изменения х от xmin до xmax:
    • MiniMaxApproximation [f, approx, {x, {xmin, xmax} ,m, k} ] —возвращает рациональную функцию минимаксной аппроксимации f при степени полиномов числителя и знаменателя {m, k} ив интервале изменения х от xmin до xmax с возможностью выбора метода аппроксимации approx.

    Эта аппроксимация использует итерационный алгоритм вычислений. Они начинаются с первого шага, на котором используется функция Rational Interpolation. Затем аппроксимация последовательно улучшается применением алгоритма Ремеза, лежащего в основе этого вида аппроксимации.

    Функция MiniMaxApproximation возвращает два списка — первый с координатами абсцисс, при которых наблюдается максимальная погрешность, второй содержит рациональную функцию аппроксимации. Ниже представлен пример аппроксимации экспоненциальной функции:


    mmlist = MiniMaxApproximation[Ехр[х], {х, {0, 2}, 2, 4}]

    Выделим формулу аппроксимации:


    mmfunc = mmlist[[2, 1]]

    Теперь можно построить график погрешности аппроксимации (рис. 11.25).

    Рис. 11.25. График погрешности при минимаксной аппроксимации экспоненциальной функции

    Следует отметить, что малость абсолютной ошибки для ряда функций (например, тригонометрических) может приводить к большим относительным погрешностям в точках, где функции имеют нулевые значения. Это может привести к отказу от выполнения аппроксимации вследствие исчерпания числа итераций (опция Maxlterations по умолчанию имеет значение 20). Такой случай наблюдается, например, при исполнении следующей команды:


    MiniMaxApproximation[Cos[x], {х, {1, 2}, 2, 4}]

    Делением функции на (x-Pi/2) можно исключить эту ситуацию:


    MiniMaxApproximation[Cos[x]/(x-Pi/2),{*,{1!,2},2,4}] [[2,1]]

    График погрешности для этого примера представлен на рис. 11.26. Обратите внимание на то, что в этом примере погрешность аппроксимации не превышает (б...7)-10- 10 .

    В приложении дан список функций общей рациональной интерполяции (аппроксимации) для аналитических зависимостей, заданных параметрически. Примеры применения этого довольно редкого вида аппроксимации можно найти в справочной базе данных системы Mathematica. Там же можно найти дополнительные соображения по уменьшению погрешности аппроксимации.

    Рис. 11.26. График погрешности при минимаксной аппроксимации функции косинуса

     

    Нули функций Бесселя — BesselZeros

    В подпакете BesselZeros определены функции, дающие список аргументов функций Бесселя в их первых п нулевых точках: BesselJZeros [mu, n], Bessel-YZeros[mu,n], BesselJPrimeZeros[mu,n], BesselYPrimeZeros[mu,n] и др. Ввиду редкого использования функций этого класса ограничимся парой примеров их применения:


    <<NumericalMath`BesselZeros`

    BesselJZeros[0, 5]

    {2.40483, 5.52008, 8.65373, 11.7915, 14.9309}

    BesselJYJYZeros[2, 6/5, 3, WorkingPrecision -> 20]

    {15.806622444176579073, 31.46556009153683, 47.1570167108650315}

     

    Поиск корней уравнений с интерполяцией — InterpolateRoot

    Подпакет InterpolateRoot дает средства для ускоренного и более точного поиска корней уравнений по сравнению с соответствующими функциями ядра. Достигается это за счет применения интерполяции функции, корни которой ищутся. Под-пакет задает функцию InterpolateRoot [f, {х, a, b} ], которая находит корень функции f в интервале х от а до b. Вместо функции f можно задавать уравнение eqn. Возможны опции AccuracyGoal->Automatic, Maxlterations->15, WorkingPrecision->$MachinePrecision и ShowProgress->False (указаны принятые по умолчанию значения).

    Примеры применения данной функции (n — число итераций):


    <<NumericalMath` InterpolateRoot`

    n = 0; FindRoot[n++; Exp[x] == 2, {x, 0, 1},

    WorkingPrecision -> 100, AccuracyGoal -> 95]

    {x->

    0.693147180559945309417232121458176568075500134360255 2541206800094933936219696947156058633269964186876}

    n

    17

    n = 0; f[x_] := (n++; Exp[x]-2) /; NumberQ[x]

    InterpolateRoot[f[x], {x, 0, 1), WorkingPrecision -> 100,

    AccuracyGoal -> 95]; n 10

    InterpolateRoot[Exp[x] ==2, {x, 0, 1},ShowProgress -> True,

    WorkingPrecision -> 40]

    {0, 0.58197670686932642439}

    {21, 0, -0.12246396352039524100}

    {1, 0.7019353037882764014443370764853594873432}

    {21, 20, 0.0130121629575404389120930392554}

    {3,0.6932065772065263165289985793736618546663}

    {21, 20, 0.000062480788747713548804773113708}

    {6, 0.6931471932603933841618726058237307884661}

    {21, 20, 1.26443483693584888038460396742xHT8}

    {12, 0.693147180559945119457822446

    95590259222308309027205042483074}

    {40, 20, -1.89953767048152086910014102216x 10-16}

    {24, 0.6931471805599453094172321214

    5786257157118117337249076750141}

    Реализация интервальных методов —IntervalRoots

    Иногда важно не найти приближенное значение корня, а уточнить интервал, в котором он находится. В подпакете IntervalRoots для этого используется ряд известных методов, реализованных следующими функциями:

    • IntervalBisection [f ,x, int, eps] — находит корень функции f(x) путем уточнения исходного интервала int с заданной погрешностью eps методом половинного деления;
    • IntervalSecant [f ,x, int, eps] — находит корень функции f(x) путем уточнения исходного интервала int с заданной погрешностью eps методом секущей;
    • IntervalNewton [ f, x, int, eps ] — находит корень функции/(x) путем уточнения исходного интервала int с заданной погрешностью eps методом Ньютона (касательной).

    Во всех функциях можно опциями задать максимальное число рекурсий (Max-Recursion) и погрешность (WorkingPrecision). Примеры применения этих функций даны ниже:


    <<NumericalMath`IntervalRoots`

    IntervalBisection[Sin[x], x, Interval[{2., 8.}], .1]

    Interval[{3.125, 3.218750000000001}, {6.218750000000003, 6.312500000000006}]

    IntervalBisection[Sin[x], x, Interval[{2., 8.}], .01]

    Interval[{3.125, 3.17188}, {6.26563, 6.3125}]

    IntervalBisection[Sin[x], x, Interval[{2., 8.}], .01, MaxRecursion -> 10]

    Interval[{3.13672, 3.14258}, {6.27734, 6.2832}]

    IntervalSecant[Sin[x], x, Interval[{2., 8.}], .01]

    Interval[{3.14159, 3.1416}, {6.28316, 6.28321}]

    IntervalSecant[Sin[x], x, Interval[{2., 8.}], .01]

    Interval[{3.14159, 3.1416}, {6.28316, 6.28321}]

    IntervalBisection[Sin[x], x,

    Interval[{2, 8}], .1, WorkingPrecision -> Infinity]

     

    Табличное численное интегрирование — Listlntegrate

    Встроенная в ядро функция NIntegrate вычисляет определенные интегралы при известной подынтегральной функции. Однако нередко, например при экспериментах, такая функция задается таблицей или списком значений. В подпакете List-Integrate имеются функции для решения этой задачи — табличного интегрирования:

    • Listlntegrate [ {yl, y2,..., yn} ,h] — возвращает численное значение интеграла для функции, заданной списком ординат yi при заданном шаге h по х;
    • Listlntegrate [ {yl, y2,..., yn}, h, k] — возвращает численное значение интеграла для функции, заданной списком ординат yi при заданном шаге h по х, используя k точек каждого подинтервала;
    • Listlntegrate [ {{xl, yl}, {х2, у2 },..., {хп, уп}}, k] — возвращает численное значение интеграла для функции, заданной списком координат {х.., у.}. используя k точек для каждого подынтервала.

    Примеры применения данной функции:


    <<NumericalMath`Listlntegrate`

    data = Tablet n^2, {n, 0, 7}]

    {0, 1, 4, 9, 16, 25, 36, 49}

    ListIntegrate[data, 1]

    343/3

    Listlntegrate[{{0,0},{1,1},{2,4},{5,25},{7,49}},2] 241/2

    При проведении интегрирования для данных, заданных таблично, можно использовать интерполяцию:


    арр = Listlnterpolation[data,{{0,7}}] Integrate[app[x],{x,0,7}]

    343/3

    Integrate[Interpolation[{{0,0},{1,1},{2,4}, {5,25}, {7,49}},

    InterpolationOrder->l][x],{x,0,7}]

    241/2

     

    Численное вычисление пределов — NLimit

    В подпакете N limit определена функция


    Nlimit[expr,х->х0]

    для численного вычисления пределов выражений ехрг (см. примеры ниже):


    <<NumericalMath` NLimit`

    NLimit[Zeta[s] - l/(s-l), s->l]

    0.577216

    N[EulerGamma]

    0.577216

    С помощью команды Options [NLimit] можно просмотреть опции, которые используются функцией NLimit по умолчанию. В этом подпакете задано также вычисление бесконечных сумм Эйлера EulerSum[f, { i, imin, Infinity} ]. Например:


    EulerSum[(-l)^k/(2k + 1) , {k, 0, Infinity}]

    0.785398

    EulerSumt(-1)^k/(2k +1), {k, 0, Infinity},

    WorkingPrecision->40, Terms->30, ExtraTerms->30]

    0.78539816339744830961566084579130322540

    %- N[Pi/4, 40]

    -2.857249565x 10-29

    Имеется также функция вычисления производной в численном виде:

    • ND [ f, х, хО] — вычисляет первую производную f(x) в точке х0;
    • ND[f, {x,n} ,х0] — вычисляет п-ю производную f(X) в точке х0. Пример вычисления производной:

    ND[Exp[Sin[x]], х, 2]

    -1.03312

    Options[ND]

    {WorkingPrecision-> 16, Scale-> 1, Terms-> 7, Method-> EulerSum]

    В некоторых случаях вычисления могут быть ошибочными. Тогда следует использовать опции — особенно опцию выбора метода Method. Помимо метода по умолчанию (EulerSum) можно использовать NIntegrate (метод интегрирования по формуле Коши).

    Численное вычисление остатка — N Residue

    В подпакете NResidue имеется функция вычисления остатка NResidue [expr, {x, x0} ] в точке х=х0:


    <<NumericalMath` NResidue`

    NResidue[1/z, {z, 0}]

    1. + 6.35614x 10-18 I

    Residue[f, {z, 1.7}]

    0

    NResidue[f, {z, 1.7}]

    0.259067 - 1.9353xl0-17I

    l/((z+.2+.5 I)(z+.2-.5 I)) /. z -> 1.7

    0.259067 + 0. I

    Options[NResidue]

    Обратите внимание на возможные опции для этой функции в последнем примере.

    Численное разложение в ряд — NSeries

    Подпакет NSeries вводит функцию NSeries [f, {x,xO,n}], которая дает численный ряд, аппроксимирующий функцию f(x) в окрестности точки х = х 0 , включая термы от (х -х 0 ) -n до (х - х 0 ) п .

    Примеры применения данной функции:


    <<NumericalMath`NSeries`

    NSeries[Sin[х], {х, -2, 2}]

    Rationalize[Chop[%]]

    Rationalize[Chop[NSeries[Log[x], {x, 1, 5}, Radius -> 1/8]]]

    Rationalize[Chop[NSeries[Exp[x], {x, 0, 5},

    WorkingPrecision -> 40, Radius -> 1/8]]]

    Rationalize[Chop[NSeries[Exp[x], {x, 0, 5}, Radius -> 4]]]

    Chop[NSeries[Zeta[s], {s, 1, 3}]]

     

    Вычисление коэффициентов формулы интегрирования Ньютона—Котесса — NewtonCotes

    Функция NIntegrate, имеющаяся в ядре системы Mathematica, реализует метод интегрирования Гаусса—Кронрода. Еще одним известным методом интегрирования является метод Ньютона—Котесса, сводящий интегрирование к вычислению взвешенных ординат функции в равномерно расположенных точках оси абсцисс. Для реализации метода используются следующие функции:

    • NewtonCotesWeights [n, a, b] — возвращает список весовых коэффициентов и абсцисс узловых точек {wi, xi} для квадратуры Ньютона—Котесса на интервале от а до b;
    • NewtonCotesError [n, f, a, b] — возвращает погрешность формулы Ньютона—Котесса для заданной функции f.

    Примеры применения этих функций представлены ниже:


    <<NumericalMath` NewtonCotes`

    NewtonCotesWeights[5, 0, 10]

    NewtonCotesError[5, f, 0, 10]

    NewtonCotesError[5, f, a, a+h]

    NewtonCotesWeights[5, -0, 10, QuadratureType -> Open]

    NewtonCotesError[5, f, 0, 10, QuadratureType -> Open]

    Обратите внимание на то, что приведенные формулы готовят данные для численного интегрирования методом Ньютона—Котесса, но не выполняют самого интегрирования.

    Что нового мы узнали?

    В этом уроке мы научились:

    • Пользоваться алгебраическими функциями пакета Algebra.
    • Применять вычислительные функции пакета Calculus.
    • Работать с функциями дискретной математики из пакета DiscreteMath.
    • Производить геометрические расчеты с помощью пакета Geometry.
    • Выполнять алгебраические вычисления с помощью пакета LinearAlgebra.
    • Пользоваться расширенными функциями теории чисел из пакета NumberTheory.
    • Осуществлять численные расчеты с помощью пакета NumericalMath.

     

     

    gl11-22.jpg

    Изображение: 

    gl11-23.jpg

    Изображение: 

    gl11-24.jpg

    Изображение: 

    gl11-25.jpg

    Изображение: 

    gl11-26.jpg

    Изображение: 

    Урок 12. Статистические расчеты

    Урок 12. Статистические расчеты

    1. Статистические расчеты

     

    Статистические расчеты

    • Статистические расчеты — пакет Statistics
    • Построение гистограмм
    • Статистика распределен и и
    • Статистическая обработка данных
    • Сглаживание данных
    • Регрессия различного вида

    В ядре системы Mathematica практически нет статистических функций. Зато пакет расширения Statistics дает сотни функций, охватывающих практически все разделы теоретической и прикладной статистики. Тем не менее, вопрос о привлечении универсальных математических систем к выполнению серьезных математических расчетов является спорным из-за существования множества специальных статистических компьютерных систем, таких как Statistica, StatGraphics и т. д.

    Большинство специализированных статистических программ предлагают специальный интерфейс, базирующийся на обработке табличных данных большого объема, реализуют многовариантный расчет необходимых статистических параметров (например, регрессию сразу по десяткам формул) и отсев заведомо ошибочных данных. Поэтому при статистических расчетах применение подобных программ предпочтительно.

     

    2. Статистические расчеты— пакет Statistics

     

    Статистические расчеты— пакет Statistics

     

    Учитывая ограниченный объем книги и приведенные выше обстоятельства, данный раздел не содержит исчерпывающего описания всех сотен функций расширения Statiatics, а лишь дает обзор этого пакета с описанием наиболее часто используемых средств статистики, относящихся к обработке данных. Это не слишком снижает ценность описания, поскольку функции статистики по большей части просты и имеют вполне очевидные (для специалистов) имена.

    Состав пакета Statistics

    Пакет расширения Statistics содержит следующие подпакеты:

    • Confidencelntervals — функции доверительных интервалов;
    • ContinuousDistributions — функции непрерывных распределений;
    • DataManipulation — манипуляции с данными;
    • DataSmoothing — сглаживание данных;
    • DescriptiveStatistics — статистика распределений;
    • DiscreteDistributions — функции дискретных распределений;
    • HypothesisTests — проверка статистических гипотез;
    • LinearRegression — линейная регрессия;
    • MultiDescriptiveStatistics — статистика многомерных распределений;
    • MultinormalDistribution — функции многомерных нормальных распределений;
    • NonlinearFit — нелинейная регрессия;
    • NormalDistribution — функции нормального распределения;
    • Common — данные общего характера.

    Как и ранее, для работы каждого из подпакетов требуется его загрузка в память компьютера с помощью команды


    <<Statistics`Имя_подпакета`

    Имена подпакетов расширения статистики приведены выше.

    Манипуляции с данными — DataManipulation

    Статистические данные обычно бывают представлены в виде списков — как одномерных, так и двумерных (таблиц и матриц) и даже многомерных. Большая часть функций, обеспечивающих манипуляции с данными, сосредоточена в подпакете DataManipulation.

    Данные могут вводиться в строках ввода или считываться из файлов с помощью функции ReadList. Для манипуляций с данными могут использоваться многие функции ядра системы, описанные ранее, — в частности, все функции обработки списков. Подпакет DataManipulation дает ряд удобных функций. Ниже представлена первая группа таких функций:

    • Column [data, n] — возвращает n-й столбец списка data;
    • Column [data, {nl, n2,...}] — возвращает список из столбцов ni списка данных;
    • ColumnTake [data, spec] — возвращает столбцы списка data с данной спецификацией spec;
    • ColumnDrop [data, spec] — удаляет столбцы списка data с данной спецификацией spec;
    • Column Jo in [datal, data2,...] — объединяет столбцы списков datai;
    • RowJoin [datal, data2,...] — объединяет строки списков datai;
    • DropNonNumeric [data] — удаляет из списка data нечисловые элементы;
    • DropNonNumericColumnfdata] — удаляет из списка data столбцы с нечисловыми элементами.

    Примеры применения этих функций:


    <<Statistics`DataManipulation `

    data = {{а, 3}, {b, 6}, {с, 4}, {d, i},

    {e, 5}, {i 4}}

    {{a, 3}, {b, 6}, {c, 4}, {d, i}, {e, 5), {f, 4}}

    col2 = Column[data, 2]

    {3, 6, 4/i, 5, 4}

    newdata = DropNonNumeric[col2]

    {3, 6, 4, 5, 4}

    Полезны также следующие функции подпакета:

    • BooleanSelect [list, sel] — удаляет из list элементы, которые дают True при тестировании выражения sel;
    • TakeWhile [list,pred] — удаляет из list все элементы, начиная с того, для которого pred дает True;
    • LengthWhile [list,pred] — возвращает число элементов, которые были удалены после того, как pred дало значение True (отсчет с начала списка).

    Примеры применения этих функций:


    TakeWhile[col2, NumberQ]

    (3,6, 4}

    LengthWhile[col2, NumberQ]

    3

     

    Построение гистограмм

    Ряд функций служит для подготовки данных с целью построения гистограмм:

    • Frequencies [list] — готовит данные для представления частотной гистограммы;
    • QuantileForm[list] — дает отсортированные данные для представления квантилей;
    • CumulativeSums [list] — дает кумулятивное суммирование данных списка.

    Пример построения гистограммы по данным списка из двойных элементов с помощью функции Frequencies дан на рис. 12.1. Для построения графика при этом использована функция BarChart из пакета расширения Graphics.

    Рис. 12.1. Пример построения гистограммы по данным функции Frequencies

    Для подготовки гистограмм могут использоваться и следующие функции:


    BinCounts[data,{min,max,dx}]

    RangeCounts [data, {cl, c2,...} ]

    CategoryCounts [data, {el, e2,...} ]

    BinLists[data,{min,max,dx}]

    RangeLists [data, {cl,c2,...} ]

    CategoryLists [data, {el, e2,...} ]

    С примерами их работы можно ознакомиться по справочной системе Mathenatica, содержащей полное описание данного подпакета.

     

    Статистика распределений — DescriptiveStatistics

    В подпакете DescriptiveStatistics сосредоточены наиболее важные функции по статистике распределений:

    • CentralMoment (data, r) — возвращает центральный момент данных data порядка r;
    • Mean [data] — возвращает среднее значение данных data;
    • MeanDeviation [data] — возвращает среднее отклонение данных;
    • Median [data] — возвращает центральное значение (медиану) данных;
    • MedianDeviation [data] — возвращает абсолютное отклонение (от медианы) данных;
    • Skewness [data] — возвращает коэффициент асимметрии данных;
    • StandardDeviation [data] — возвращает стандартное отклонение данных;
    • GeometricMean [data] — возвращает геометрическое среднее данных;
    • HarmonicMean [data] — возвращает гармоническое среднее данных;
    • RootMeanSquare [data] — возвращает среднеквадратичное значение данных;
    • Quantile [data, q] — возвращает q-й квантиль;
    • InterpolatingQuantile [data, q] — возвращает q-й квантиль, используя при вычислениях интерполяцию данных;
    • VarianceData [data] — возвращает среднеквадратичное отклонение данных.

    Мы не приводим определений этих функций, поскольку при символьных данных data их легко получить именно в том виде, который реализован в системе Mathematica:


    ds={xl,x2,x3} {xl, x2, хЗ}

    Mean[ds]

    1/3 *(xl + x2 + x3)

    MeanDeviation[ds]

    1/3 (Abs[xl + — (-xl-x2-x3)] +

    Abs[x2+ 1/3 (-xl-x2-x3) + Abs 1/3[-xl-x2-x3) +хЗ])

    Median[ds]

    x2

    Variancefds]

    1/2((x1+1/3(-xl + x2 - x3))2 + (x2 + 1/3 (-xl-x2-x3))2 + (— (-xl-x2-x3) + x3)2)

    Skewness[ds]

    (SQRT(3) ( (xl 4- -1 (-xl - x2 - x3))3 +

    (x2+1/3 (-xl-x2-x3))3 + (1/3 (-xl -x2- x3) + x3))2 /

    (x2+ 1/3 (-xl-x2-x3))2 +(1/3 (-xl-x2-x3) +х3)2 )^(3/2)

    Следующие примеры поясняют действие этих функций при обработке численных данных:


    <<Statistics'DescriptiveStatis tics'

    data:={10.1,9.6,11,8.2,7.5,12,8.6,9}

    CentralMoment[data,2]

    1.9525

    Mean[data]

    9.5

    MeanDeviation[data]

    1.175

    Median[data]

    9.3

    MedianDeviation[data]

    0.95

    Skewness[data]

    0.374139

    StandardDeviation[data]

    1.4938

    GeometricMean[data]

    9.39935

    HarmonicMean[data]

    9.30131

    RootMeanSquare[data]

    9.60221

    Quantile[data,1]

    12

    InterpolatingQuantile[data,1]

    InterpolatingQuantile[

    {10.1, 9.6, 11, 8.2, 7.5, 12, 8.6, 9), 1]

    Variance[data]

    2.23143

    С рядом других, менее распространенных функций этого подпакета можно ознакомиться с помощью справочной системы. Там же даны примеры их применения.

    Сглаживание данных — DataSmoothing

    В подпакете DataSmoothing определены функции для сглаживания данных, имеющих большой случайный разброс. К таким данным обычно относятся результаты ряда физических экспериментов, например по энергии элементарных частиц, или сигналы, поступающие из космоса. Для того чтобы отсеять информацию из таких данных с большим уровнем шумов и применяется процедура сглаживания. Она может быть линейной (например, усреднение по ряду точек) или нелинейной.

    Определены следующие функции сглаживания:

    • MovingAverage [data, r] — сглаживание данных data методом усреднения для г точек;
    • MovingMedian [data, r] — сглаживание данных data по медиане для г точек (опция RepeatedSmoothing->True используется для повторного сглаживания);
    • LinearFilter [data, {c0, cl,..., сr-1} ] — линейная фильтрация (сj— весовые множители);
    • ExponentialSmoothing [data, a] — экспоненциальное (нелинейное) сглаживание, параметр а задает степень сглаживания.

    Ниже представлены результаты сглаживания символьных данных, выявляющие соотношения, используемые при сглаживании:


    ds : = {xl, х2 , хЗ , х4 , х5}

    MovingAverage[ds,3]

    {1/3* (xl + x2 + x3), — (х2 + хЗ + х4), — (хЗ + х4 + х5)}

    MovingMedian[ds,3]

    {х2, хЗ, х4}

    ExponentialSmoothing[ds, 0.2]

    {xl, xl + 0.2 (-xl + x2) , xl+0.2 (-xl + x2) +0.2 (-xl-0.2 (-xl + x2) + x3) , xl+0.2(-xl+x2)+0.2 (-xl-0.2 (-xl + x2) +x3) +

    0.2 (-xl-0.2 (-xl+x2) - 0.2 (-xl- 0.2 (-xl + x2) + x3) + x4) , xl+0.2(-xl + x2) +0.2(-xl-0.2(-xl + x2) +x3) + 0.2 (-xl- 0.2 (-xl+x2) -0.2(-xl-0.2(-xl + x2) + x3) + x4) + 0.2 (-xl- 0.2 (-xl+x2) - 0.2 (-xl- 0.2 (-xl+x2) + x3) -

    0.2 (-xl-0.2 (-xl+x2) -0.2 (-xl-0.2 (-xl + x2) + x3) + x4) + x5)}

    Применение сглаживания усреднением иллюстрирует рис. 12.2. На нем задан массив (таблица) из 500 случайных точек с равномерным распределением и создан графический объект из этих точек в виде кружков малого диаметра. Затем выполнена операция сглаживания (по 12 смежным точкам) и создан графический объект сглаженных точек в виде кружков большего диаметра. Для сопоставления оба объекта построены на одном графике функцией Show.

    Рис. 12.2. Пример линейного сглаживания данных из 500 точек

    Нетрудно заметить, что сглаженные точки группируются вокруг среднего значения, равного 0.5, тогда как исходные точки разбросаны практически равномерно по всему полю рисунка. Эффективность нелинейного (экспоненциального) сглаживания демонстрирует рис. 12.3. Показанный на этом рисунке документ построен по тому же принципу, что и документ рис. 12.2.

    Остальные функции сглаживания можно использовать аналогичным образом. Выбор метода сглаживания зависит от решаемых пользователем задач и остается за ним.

    Рис. 12.3. Пример экспоненциального сглаживания

     

    Другие подпакеты расширения Statistics

    Подпакет NormalDistribution содержит хорошо известные функции нормального распределения вероятностей и родственные им функции следующих распределений:

    • NormalDistribution [mu, sigma] — нормальное распределение;
    • StudentTDistribution [r] — T-распределение Стьюдента;
    • ChiSquareDistribution [r] — X 2 -распределение;
    • FRatioDistribution [rl, r2] — F-распределение.

    Для этих и многих других непрерывных распределений заданы также функции плотности распределения, среднего значения, среднеквадратичного отклонения, стандартного отклонения, вычисления коэффициента асимметрии и т. д. Целый ряд таких функций задан и в подпакете ContinuousDistributions для ряда функций непрерывного распределения. Мы не приводим их, поскольку они подобны функциям обработки списков, описанным выше.

    Рисунок 12.4 иллюстрирует получение выражения для плотности нормального распределения pdf и получение графика плотности этого распределения со смещенной вершиной.

    Подпакет DiscreteDistributions содержит подобные функции для дискретного распределения вероятностей (Пуассона, биномиального, гипергеометрического и иных распределений). Таким образом, три упомянутых подпакета охватывают практически все имеющие применение законы распределения. Функции для оценки доверительных интервалов сосредоточены в подпакете Confidencelntervals.

    Рис. 12.4. Пример работы с функцией нормального распределения

    В подпакете HypothesisTests сосредоточено сравнительно небольшое число хорошо известных функций для выполнения тестов проверки статистических гипотез. Загрузка пакета и проведение теста на среднее значение показаны ниже:


    <<Statistics` HypothesisTests`

    datal = {34, 37, 44, 31, 41, 42, 38, 45, 42, 38};

    MeanTest[datal, 34, KnownVariance -> 8]

    QneSidedPValue -> 3.05394 x 10-9 ...

    У специалистов в области статистики интерес вызовут подпакеты MultiDescriptive-Statistics и MultinormalDistribution с многочисленными функциями многомерных распределений. Они позволяют оценивать статистические характеристики объектов, описываемых функциями нескольких переменных. Рисунок 12.5 поясняет загрузку подпакета MultinormalDistribution, получение выражения для плотности нормального распределения по двум переменным xl и х2 и получение трехмерного графика для плотности такого распределения.

    Подпакет Common используется остальными подпакетами пакет Statistics.

    Рис. 12.5. Получение аналитического выражения и графика нормального распределения по двум переменным

     

    gl12-1.jpg

    Изображение: 

    gl12-2.jpg

    Изображение: 

    gl12-3.jpg

    Изображение: 

    gl12-4.jpg

    Изображение: 

    gl12-5.jpg

    Изображение: 

    3. Регрессия

     

    Регрессия

     

    Линейная регрессия общего вида — LinearRegression

    В подпакете LinearRegression имеются расширенные функции для проведения линейной регрессии общего вида — в дополнение к включенной в ядро функции Fit. Прежде всего это функция Regress:

    • Regress [data, { I, х, х^2 }, х] — осуществляет регрессию данных data, используя квадратичную модель;
    • Regress [data, {I, x1, x2, xlx2 }, {x1, x2 }] — осуществляет регрессию, используя в ходе итераций зависимость между переменными x 1 и х 2 ;
    • Regress [data, {f 1, f2,...}, vars] — осуществляет регрессию, используя модель линейной регрессии общего вида с уравнением регрессии, представляющим линейную комбинацию функций f i от переменных vars.

    Данные могут быть представлены списком ординат {у1,у2,...} или списком


    {{xll,xl2,...,yl}, {х21,х22,...,у2},...}.

    Ниже приведены примеры использования функции Regress:


    <<Statistics`LinearRegression`

    data={{1,1.9},{2,2.95},{3,4.3},{4,4.8},{5,5}}

    {{1, 1.9}, {2, 2.95}, {3, 4.3}, {4, 4.8}, (5, 5}}

    (regress = Regress[data, {l,x, x^2}, x] Chop[regress, 10^(-6)])

    [Parameter-Table->

    Estimate

    SE

    TStat

    PValue

    1

    0.1

    0.421613

    0.237185

    0.834595

    x

    1.89786

    0.321297

    5.90687

    0.0274845'

    X 2

    -0.182143

    0.0525376

    -3.4669

    0.0740731

    RSquared->0.988994, AdjustedRSquared ->0.977988,

    EstimatedVariance -> 0.0386429, ANOVATable ->

    Model

    DF

    2

    SumOfSq

    6.94471

    MeanSq

    3.47236

    FRatio

    89.8577

    PValue

    0.0110062,

    Error 2 0.0772857 0.0386429    

    Total

    4

    7.022

    func = Fit[data, {l,x,.x^2}, x]

    0.1 +1.89786x-0.182143x2

    Options[Regress]

    {RegressionReport -> SurnmaryReport, IncludeConstant -» True, BasisNames->Automatic, Weights->Automatic, Tolerance->Automatic, ConfidenceLevel->0.95}

    На рис. 12.6 показан еще один пример проведения регрессии, сопровождаемой графической визуализацией с помощью функции MultipleListPlot.

    Риc. 12.6. Пример проведения регрессии с графической визуализацией

    Пакет линейной регрессии содержит и ряд иных функций, с которыми можно ознакомиться с помощью справочной базы данных системы Mathematica. Напоминаем еще раз, что сама функция при линейной регрессии может быть нелинейна, она является линейной только относительно искомых коэффициентов регрессии.

    Нелинейная регрессия — NonlinearFit

    В подпакете NonlinearFit содержатся функции для выполнения нелинейной регрессии общего вида:

    • NonlinearFit[data,model,variables,parameters] — выполняет регрессию по заданной модели (формуле) model с переменными variables и параметрами parameters для заданных данных data;
    • NonlinearRegress[data,model,variables,parameters] —выполняет регрессию по заданной модели (формуле) model с переменными variables и параметрами parameters для заданных данных data с выдачей списка диагностики.

    Данные могут быть представлены списком ординат {у1,у2,...} или списком {{x11,x12,..., yl}, {х21, х22,..., у2},...}. В ходе регрессии минимизируются заданные параметры, так что заданная модель регрессии приближает данные с минимальной среднеквадратичной погрешностью.

    На рис. 12.7 показан пример выполнения логарифмической регрессии. При ней модель представлена выражением a*Log[b*x]. Результатом действия функции NonlinearFit является уравнение регрессии в виде этой модели с найденными значениями параметров а и Ь. Представлена также визуализация регрессии в виде графика функции-модели и исходных точек. Следует отметить, что реализация нелинейной регрессии разными методами может давать заметно различающиеся результаты, так что представленные результаты не являются абсолютно строгими.

    Рис. 12.7. Пример логарифмической регрессии

    Применение функции NonlinearRegress иллюстрирует следующий пример:


    NonlinearRegress [data, a*Log[b*x] ,{x},{a,b}]

    {BestFitParameters -> {a -> 0.665503, b -4 4. 11893},

    ParameterCITable ->

    Estimate Asymptotic SE CI

    a 0.665503 0.0504167 {0.525524, 0.805482},

    b 4.11893 0.806289 {1.88031, 6.35754}

    EstimatedVariance -> 0 . 00558058,

    DF SumOfSq MeanSq

    Model 2 17.7425 8.87126

    ANOVATable ->

    Error 4 '0.0223223 0.00558058,

    Uncorrected Total 6 17.7648

    Corrected Total 5 0.994689

    1. -0.972212 AsymptoticCorrelationMatrix ->

    Curvature

    Max Intrinsic 2 . 94314 x lO'16,

    FitCurvatureTable -» }

    Max Parameter-Effects 2.07792

    95. % Confidence Region 0.379478

    Как нетрудно заметить, в данном случае выдается отчет о проведении регрессии. Более детальные данные об опциях и обозначениях в отчетах нелинейной регрессии можно найти в справочной базе данных.

    Полиномиальная регрессия — PolynomialFit

    К сожалению, средства регрессии в Mathematica разбросаны по разным пакетам. Так, в подпакете PolynomialFit пакета NumericalMath определена функция для полиномиальной регрессии:

    • PolynomialFit [data, n] — возвращает полином степени п, обеспечивающий наилучшее среднеквадратичное приближение для данных, представленных параметром data. Если data является списком ординат функции, то абсциссы формируются автоматически с шагом 1. Если data является списком координат {xi,yi}, то полином наилучшим образом приближает зависимости

    Ниже представлен пример применения функции полиномиальной аппроксимации


    <<NumericalMath`PolynomialFit`

    р = PolynomialFit[{l,3.9,4.1,8.9,16,24.5,37,50},3]

    FittingPolyncmial [ <> , 3]

    p[5]

    15.8727

    Expand[p[x]]

    2.35-1.44066x+0.659848x2 +0.0338384x3

    Другой пример с построением графиков исходных точек и аппроксимирующего полинома дан на рис. 12.8.

    Рис. 12.8. Графики точек исходной зависимости и аппроксимирующего полинома

    Нетрудно заметить, что точки исходной зависимости неплохо (но не точно) укладываются на график полинома.

    Сплайн-регрессия — SplineFit

    Сплайны представляют собой набор полиномов невысокой степени, последовательно применяемых к наборам точек аппроксимирующей функции. Чаще всего используется кубическая сплайновая аппроксимация, при которой коэффициенты полиномов выбираются из условий равенства в стыкуемых точках не только значений функции, но также первой и второй производных. Это придает графику сплайна вид плавной кривой, точно проходящей через узловые точки и напоминающей изгибы гибкой линейки (spline в переводе — гибкая линейка).

    Подпакет SplineFit пакета NumericalMath содержит функцию для проведения сплайн- регрессии, при которой сплайн-функция проходит максимально близко к аппроксимируемым точкам в смысле наилучшего среднеквадратичного приближения. Для этого используется функция SplineFit [data, type], которая возвращает сплайн функцию для данных data, используя сплайн-аппроксимацию типа type — по умолчанию это кубический сплайн Cube (другие типы — Bezier и CompositeBezier).

    Рисунок 12.9 показывает пример сплайн- регрессии для обычной зависимости у(х), представленной пятью парами точек. На нем построены также графики аппроксимирующей функции и исходных точек.

    Рис. 12.9. Пример сплайн- регрессии для зависимости у(х), заданной списком координат своих узловых точек

    Рис. 12.10. Пример сплайн-интерполяции параметрически заданной функции

    Специфика сплайн- регрессии по функции SplineFit заключается в преобразовании значений как xi, так и yi. Это позволяет представлять сплайнами в общем виде параметрически заданные функции, что поясняет рис. 12.10.

    Тригонометрическая регрессия — TrigFit

    Многие выражения содержат периодические тригонометрические функции, например sin(X) или cos(X). Помимо обычного спектрального представления выражений, подпакет TrigFit пакета NumericalMath имеет функции для тригонометрической регрессии:

    • TrigFit [data, n, x] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(n x) и sin(n x) и с периодом 2л;
    • TrigFit [data, n, {x,L}] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(2лuc/L) и sm(2лnx/L) и с периодом I;
    • TrigFit [data, n, {x, x0, xl} ] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(2лn(x - х 0 )/ (x-x0)) и sin(2лn(x-x 0 )/(x 1 -x 0 )) и с периодом (x1-x0).

    Примеры выполнения тригонометрической регрессии даны ниже:


    <<Numerical Math'TrigFit'

    data = Table[l+2Sin[x]+3Cos[2x],{x, 0, 2Pi-2Pi/7, 2Pi/7}];

    TrigFit[data, 0, x]

    1.

    TrigFit[data, 1, {x, L}]

    l.+ 0.Cos 2[лx/L]+ 2. Sin [2лx/L]

    Fit[Transpose!{Range[0, 2Pi-2Pi/7, 2Pi/7], data}],

    {1, Cos[x], Sin[x]}, x]

    1. - 4.996xl(T16Cos[x] + 2. Sin[x]

    TrigFit[data, 3, {x, x0, xl}];

    Chop[%]

    l. + 3.Cos [4л (x-x0)/(-x0+x1)]+2. Sin [2л (x-x0)/(-x0+x1)]

     

    Что нового мы узнали?

    В этом уроке мы научились:

    • Вычислять ортогональные многочлены.
    • Выполнять статистические расчеты с помощью пакета Statistics.
    • Строить гистограммы.
    • Вычислять статистики распределений.
    • Использовать статистическую обработку данных.
    • Сглаживать данные.
    • Выполнять регрессию различного вида.

     

    gl12-10.jpg

    Изображение: 

    gl12-6.jpg

    Изображение: 

    gl12-7.jpg

    Изображение: 

    gl12-8.jpg

    Изображение: 

    gl12-9.jpg

    Изображение: 

    Урок 13. Полезные функции

    Урок 13. Полезные функции

    1. Полезные функции

     

    Полезные функции

     

     

    • Синтез звуков — Audio
    • Синтез музыкальных звуков — Music
    • Функции времени и дат — Calendar
    • Географические и картографические данные — World Data
    • Физические константы и размерные величины — PhysicalConstants
    • Данные о химических элементах — ChemicalElements
    • Задание данных только вещественного типа — RealOnly
    • Работа с бинарными файлами — BinaryFiles
    • Запись графических объектов в файл формата DXF
    • Фильтрация опций — FiltersOptions
    • Уплотнение памяти — MemoryConserve
    • Работа с пакетами расширений — Package
    • Показ времени операций — ShowTime

    Пакет расширения Miscellaneous

    Слово Miscellaneous в переводе на русский язык означает «всякая всячина». Большинство функций этого пакета, на первый взгляд, не имеет прямого отношения к математическим расчетам. Однако как сказать! Этот пакет представляет систему Mathematica в особом свете — как систему, имеющую далеко не стандартные средства синтеза звука и графического представления информации самого общего вида. Физики, химики, географы и даже музыканты могут найти в этом пакете средства, полезные им при обработке на компьютере информации произвольного вида.

    Синтез звуков — Audio

    Подпакет Audio служит для генерации стандартных звуковых сигналов разной формы, частоты и длительности, модуляции сигналов по амплитуде и по частоте и считывания звуковых файлов с дисков. Для создания звуковых объектов служит функция Waveform:

    • Waveform [type, freq, dur] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах). Возможны следующие формы сигнала: Sinusoid — синусоидальный, Triangle — треугольный, Square — прямоугольный и Sawtooth — пилообразный;
    • Waveform [type, freq, dur, Overtones->n] — создает звуковой сигнал формы type с частотой freq (в герцах) и длительностью dur (в секундах), имеющий п гармоник.

    Приведенный на рис. 13.1 пример дает генерацию прямоугольного сигнала частотой 1000 Гц и длительностью 0.5 с. Следует обратить внимание.на то, что созданный звуковой объект проигрывается и показывается после команды Show.

    Звуковой объект, как отмечалось, ассоциируется с графическим объектом. К сожалению, явной связи между осциллограммой звукового сигнала и его графическим образом нет. Более того, вид графического объекта сильно зависит от компьютерной платформы, на которой установлена система Mathematica. Так что графический звуковой объект — это просто некий условный графический образ звукового сигнала.

    Рисунок 13.2 показывает генерацию прямоугольного сигнала с двумя гармониками. Здесь используется опция Overtones->2. Ее нельзя применять к синусоидальному сигналу, поскольку он принципиально не имеет гармоник.


    Рис. 13.1. Создание и просмотр звукового объекта — синусоидального сигнала

     


    Рис. 13.2. Генерация прямоугольного сигнала с двумя гармониками

    Когда указана опция Overtones, функция Waveform использует ряд Фурье для создания высших гармоник, обогащающих тембр звука. При этом возможно изменение числа гармоник. Возможно также создание сигнала с заданными номерами и амплитудами гармоник. Для этого служит функция ListWaveform:

    • ListWaveform[ { {nl, al}, {n2, a2 },...}, freq, dir] — создает звуковой объект с частотой основной гармоники f req и длительностью dir, содержащий дополнительные частоты с кратностями ni и амплитудами ai.

    На рис. 13.3 представлен пример создания звукового объекта сложного типа, содержащего ряд частотных составляющих. Данные представлены списком partial-List. С помощью функции Table подготовлен объект, содержащий шесть звуковых подобъектов.


    Рис. 13.3. Генерация многочастотного сигнала

    Для создания звуковых объектов, порождающих звук с амплитудной и частотной модуляцией, служат следующие функции:

    • AmplitudeModulation [f c , f m ,m t ,dur] — создает амплитудно-модулирован-ный синусоидальный сигнал с несущей частотой f c , частотой модуляции f m , коэффициентом модуляции m. и длительностью dur. Опция RingModula-tion->True позволяет получить амплитудную модуляцию с подавленной несущей;
    • FrequencyModulation [f c , {{f m ,pd}, dur] — создает частотно-модулированный синусоидальный сигнал с несущей частотой f c , модулированный по частоте сигналом с частотой модуляции f m , с девиацией частоты pd (в герцах) и длительностью dur.

    Рисунок 13.4 демонстрирует создание звукового объекта с амплитудной и частотной модуляцией. Обратите внимание на то, что объект показывается сразу, поскольку в состав его выражения включена команда //Show.

    Для создания сложных сигналов с частотной модуляцией функция Frequency-Modulation используется в следующем виде:

    • FrequencyModulation [fc, {{f l,pdl}, (f2,pd2 },...}, dur] — создает частотно-модулированный синусоидальный сигнал длительностью dur с несущей частотой f с и каскадом частот модуляции fmi с девиациями pdi. Опция ModulationType->Parallel создает сигнал, независимо промодулированнып всеми указанными частотами, а опция ModulationType->Cascade включает режим, при котором перечисленные частоты последовательно модулируют друг друга.

    Рисунок 13.5 показывает создание и воспроизведение композитного звуковок сигнала. Он представлен списком объектов {s 1, s 2, s 3}.

     


    Рис. 13.4. Генерация звуковых объектов с амплитудной (сверху) и частотной (снизу) модуляцией

     


    Рис. 13.5. Генерация композитного звукового сигнала

    Для считывания звуковых файлов с магнитного диска служит функция Read-Soundfile:

    • ReadSoundf ile [ "soundfile" ] — опознает файлы разного формата и конвертирует их в список, содержащий целые числа в диапазоне от -32 768 до +32 767. Опция PrintHeader->True позволяет вывести отчет о звуковом файле. Поддерживаются следующие форматы звуковых файлов: NeXT/Sun, WAVE и AIFF.

    Разумеется, считываемый звуковой файл должен быть расположён в текущей директории или его имя должно точно указывать местоположение файла. Файлы отображаются соответствующим графическим образом (как описывалось выше).

    Синтез музыкальных звуков — Music

    Подпакет Music как бы продолжает рассмотренный ранее подпакет поддержки звуковых возможностей системы Mathematica. Он задает функцию последовательного воспроизведения списка, содержащего отдельные звуки:

    • Scale [ilist, freq, dur] — генерирует звуковой объект, представленный данными списка ilist музыкальных интервалов, с частотой freq и длительностью dur.

    Пример воспроизведения мажорной гаммы (поставляемая с системой мелодия JustMajor) представлен на рис. 13.6. Помимо фрагмента JustMajor имеется еще 11 фрагментов, которые поставляются с системой Mathematica (QuarterTone, Mean-Major, MeanMinor, SixthTone, JustMinor и т. д.). Все они могут воспроизводиться функцией Scale.

     


    Рис. 13.6. Пример воспроизведения музыкального фрагмента

    Кроме того, есть ряд функций преобразования:

    • HertzToCents [f list] — преобразует список частот (в герцах) в список музыкальных интервалов (в центах);
    • CentsToHertz [ilist] — преобразует список музыкальных интервалов (в центах) в список частот (в герцах), начиная с частоты 440 Гц;
    • CentsToHertz [ilist, f ] — преобразует список музыкальных интервалов (в центах) в список частот (в герцах), начиная с заданной частоты f.

    Примеры преобразования даны ниже:


    <<Miscellaneous`Music`

    HertzToCents[{400, 450, 525}]

    {203.91, 266.871}

    alist = Tablet N[440 2^(i/12)], {i, 0, 12}]

    {440,., 466.164, 493.883, 523.251, 554.365, 587.33, 622.254,

    659.255, 698.456/739.989, 783.991, 830.609, 880.}

    HertzToCents[alist]

    {100., 100., 100., 100., 100., 100., 100., 100., 100., 100., 100., 100.}

    CentsToHertz[{0, 600}]

    {440., 622.254}

     Описанные возможности синтеза музыки являются скорее данью моде на мультимедиа, чем нужными на практике. Так, время подготовки музыкального объекта довольно значительно (до десятка секунд на компьютере с процессором Pentium II 350). Так что они годятся только для создания простейших музыкальных звуков, которыми можно сопровождать некоторые учебные программы.

    Функции времени и дат — Calendar

    В пакете расширений Miscellaneous есть ряд подпакетов, содержащих функции времени и даты. Так, в подпакете Calendar сосредоточены вычисления, относящиеся к календарным датам:

    • DayOfWeek [ {year, month, day} ] — вычисляет день недели по заданным году, месяцу и числу;
    • DaysBetween[{yearl,monthl,dayl},{year2, month2, day2} — вычисляет число суток между двумя датами:
    • DaysPlus [ {year, month, day}, n] — дает дату и-го дня после заданной даты.

    Во всех этих функциях возможна опция Calendar->cal. Имеется также функция смены календаря:

    • CalendarChange [ {year, month, day}, call, cal2] — преобразует заданную дату из одного календаря в другой.

    Примеры вычислений с датами:


    <<Miscellaneous` Calendar`

    DayOfWeek{[1988, 6, 23}]

    DaysBetween[{1900, 1, 1}, {1901, 1,1}]

    365

    DaysPlus[{1900, 1, 1}, 366]

    {1901, 1, 2}

    DaysBetween[{1900, 1, 1},{1901, 1, 1},Calendar -> Julian]

    366

    Calendar-Change[{1992, 2, 29}, Gregorian, Julian]

    {1992, 2, 16}

    CalendarChange[{1992, 2, 29}, Gregorian, Islamic]

    {1412, 8, 25}

    CalendarChange[{1,1,1}, Islamic, Julian]

    {622, 7, 16}

     

    Города и расстояния — CityData и Geodesy  

    В подпакете CityData можно найти функции, позволяющие найти координаты большинства крупных городов мира: CityData [city, datatype], CityData [city] иCityData[datatype]. Например:


    <<Miscellaneous`CityData`

    CityData["Montreal",

    CityPosition]

    {{45, 30}, {-73, -36}}

    CityData["Washington"]

    {{CityPosition, {{38, 53, 42}, {-77, -2, -12}}}}

     Координаты (широта и долгота) выдаются в формате {градусы, минуты} или {градусы, минуты, секунды}.

    В этом же подпакете есть функции для вычисления расстояний между городами:

    • CityDistance [ "cityl", "pity"] — возвращает расстояние между двумя указанными городами;
    • CityDistance["cityl","city",CityDistanceMethod->Method] — возвращает расстояние между двумя указанными городами со спецификацией метода вычислений (по умолчанию используется функция SphericalDistance из подпакета Geodesy).

    Пример вычисления расстояния между городами дан ниже:


    CityDistance["Washington", "Montreal"]//N

    786.915

    Базу данных можно расширять, добавляя в нее информацию о новых городах:

    CityPosition[{"Champaign", "USA", "IL"}] = {{40, 7, 5},

    {-88, -14, -48}};

     Убедимся, что информация действительно добавлена:

    CityData["Champaign", CityPosition]

    {{40, 7, 5}, {-88, -14, -48}}

     Для добавления новых полей в базу данных можно использовать функцию AppendTc (см. урок 9). Например, добавим поле для хранения информации о населении:

    AppendTo[$CityFields, CityPopulation]

     Теперь введем в базу данных информацию о населении Вашингтона:

    CityPopulation[{"Washington", "USA", "DC"}] = 638000;

    Проверим результат, запросив всю имеющуюся в базе информацию об этом городе:


    CityData["Washington"]

    {{CityPosition, {{38, 53, 42}, {-77, -2, -12}}},

    {CityPopulation, 638000}}

     Как видите, результат теперь включает новую информационную категорию —

    CityPopulation. 

    В подпакете Geodesy есть функции, вычисляющие расстояние между двумя точками с учетом выпуклости Земли:

    • SphericalDistance [posl,pos2] — вычисляет расстояние между двумя точками в предположении, что Земля — идеальный шар (сфера);
    • SpheroidalDistance [posl,pos2] — вычисляет расстояние между двумя точками в предположении, что Земля — приплюснутый шар (сфероид).

    Примеры вычислений по этим функциям представлены ниже:


    SphericalDistance[{0, 0}, {45,-45}] //N

    6671.7

    SpheroidalDistance[{0, 0}, {45, 45}] //N

    6662.47 % - %%

    -9.23014

     

    Географические и картографические данные — WortdData, WorldNames и WorldPlot

    В пакете Miscellaneous имеется база данных по странам мира. Доступ к ней открывает подпакет WorldData. Для этого имеется функция WorldData [ "Страна" ], возвращающая список координат конечных отрезков прямых, которые задают контурный график — карту заданной страны. Например, данные по Азербайджану можно получить следующим образом:


    <<Miscellaneous` WorldData`

    WorldData["Azerbaijan"]

    {{{2378, 2689}, {2374, 2770}, {2344, 2806}, {2330, 2770}, {2378, 2689}}, {{2361, 2849}, {2419, 2781}, {2472, 2701}, {2445, 2823}, {2509, 2778}, {2473, 2871}, {2510, 2915}, {2414, 3024}, {2307, 2933}, {2376, 2888}, {2361, 2849}}}

     Попробуйте сами найти данные по России (Russia) — мы их не приводим ввиду громоздкости списка, что вполне естественно, поскольку Россия — крупнейшая страна мира и имеет самую длинную границу (контурную линию) с многочисленными изломами.

    В подпакете WorldNames имеется список стран, систематизированный по континентам: Africa, Asia, Europa, MiddleEa.st, NorthAmerica, Oceania, South-America и World (весь мир). Например, так можно узнать, какие страны расположены в Океании:


    <<Miscellaneous`WorldNames`

    Oceania // InputForm

    {"Indonesia", "Papua New Guinea", "Fiji", "Australia", "New Zealand")

    Наиболее эффектными являются возможности подпакета WorldPlot, функции которого позволяют строить карты любой страны или всего мира:

    • WorldPlot [countrylist] — построение карты страны по списку ее данных;
    • WorldPlot [countrylist, RandomColors] — построение карты страны по списку ее данных с раскраской случайными цветами;
    • WorldPlot [countrylist, RandomGrays] — построение карты страны по списку ее данных с раскраской случайными оттенками серого цвета;
    • WorldPlot [ {countrylist, colorfunc} ] — построение карты страны по списку ее данных с раскраской по функции colorfunc;
    • WorldPlot [ {countrylist, colorlist) ] — построение карты страны по списку ее данных с раскраской по списку colorlist.

    На рис. 13.7 показано построение контурной карты России (верхний рисунок) и цветной карты мира. Раскраска достигается применением директивы RandomColors.


    Рис. 13.7. Контурная карта России и цветная карта мира

    Следующий рисунок (рис. 13.8) показывает возможность композиционного изображения картографических изображений. На нем построена карта Америки и особо выделены (более темным цветом) территории Канады и Мексики. Здесь для цветовых выделений использована директива GrayLevel, позволяющая задавать степень густоты серого цвета.


    Рис. 13.8. Карта Америки с выделенными Канадой и Мексикой

    Карты могут строиться в различных проекциях: Albers, Equirectangular, LambertAzimuthal, LambertCylindrical, Mercator, Mollweide, Orthographic и Sinusoidal. Для этого используется опция WorldProjection-> Имя_проекции.

    На рис. 13.9 представлена цветная карта всего мира, построенная в синусоидальной проекции. Такая проекция удобна для общего обозрения всей поверхности земного шара при взгляде с экватора (сравните рис. 13.9 с рис. 13.7).


    Рис. 13.9. Вид на земной шар при синусоидальной проекции

    Выбор вида проекции способен преобразовать вид изображения. Для иллюстрации этого на рис. 13.10 представлена карта мира в иной проекции — азимутальной проекции Ламберта (LambertAzimuthal). В таком виде получается прекрасный вид на Землю со стороны Северного полюса.


    Рис. 13.10. Вид но земной шор со стороны Северного полюса при азимутальной проекции Ламберта

    Еще один пример (с цилиндрической проекцией Ламберта) представлен на рис. 13.11. Здесь показана карта Африки. Цилиндрическая проекция в некоторых случаях позволяет визуально уменьшить геометрические искажения границ, обусловленные сферической поверхностью Земли. Обратите также внимание на технику окраски самого континента, фона и рамки.


    Рис. 13.11. Контурная карта Африки в цилиндрической проекции

    В подпакет World Plot включены функции преобразования углов:

    • ToMinutes [deg] — преобразует градусы в минуты;
    • ToMinutes [ {deg,min} ] — преобразует градусы и минуты в минуты с долями;
    • ToMinutes [ {deg,min, sec} ] — преобразует градусы, минуты и секунды в минуты с долями.

    Примеры преобразований представлены ниже:


     ToMinutes [1]

    60

    ToMinutes [{1,20}]

    80

    ToMinutes [{1,20,10}]

    481/6

    N[%]

    80.1667

     

    Физические константы и размерные величины — PhysicalConstants

    В подпакете PhysicalConstants определено несколько десятков наиболее употребительных физических констант. Они представлены как размерные величины, то есть помимо своего численного значения имеют единицы измерения. Физические константы вводятся своими полными символьными именами, например, как показано в следующей таблице.


    Ввод и вывод

     Комментарий

     <<Miscellaneous " PhysicalConstants " SpeedOfLight

    299792458 Meter/Second

    Загрузка подпакета Скорость света

     Second SpeedOfLight AgeOfUniverse    1. 40902 xl0 26 Meter

     Выражение с константами
     ElectronMass

    9 . 10939 x 10- 31 Kilogram

     Масса электрона

     AccelerationDueToGravity 9. 80665 Meter/Second 2

     Ускорение свободного падения

    Полные списки физических констант приведены в справочной базе данных по подпакету PhysicalConstants.

    Для выполнения физических, химических и иных расчетов в Mathematica предусмотрена возможность работы с размерными переменными. Для этого база данных системы содержит символьные имена практически для всех единиц измерения (времени, массы, расстояния, температуры и т. д.). Данные о них можно найти в справочной базе данных подпакета Units. Там же имеются функции для перевода единиц измерении из одной системы размерных единиц в другую.

    Начнем с функции Convert [old, newunits], которая осуществляет преобразование одних единиц в другие. Например:


    <<Miscellaneous`Units`

    Convert[12 Meter/Second, Mile/Hour]

    26. 8432 Mile / Hour

    Convert[3 Kilo Meter / Hour, Inch / Minute]

    1968. 5 Inch / Minute

     Для преобразования температуры служит функция ConvertTemperature [temp, oldutits, newunits], производящая преобразование температуры из одних единиц в другие. Возможные единицы измерения температуры следующие: Celsius (шкала Цельсия), Centigrade (то же самое), Fahrenheit (шкала Фаренгейта), Kelvin (шкала Кельвина) и Rankine (шкала Ренкина).

    Пример преобразования температуры:


    ConvertTemperature[20, Fahrenheit, Centigrade]

    -6.66667

    Наконец, имеются три широкопрофильные функции преобразования в различные системы единиц:

    • SI [ехрr] — преобразует ехрг в Международную систему единиц SI;
    • MKS [ехрr] — преобразует ехрг в систему единиц МКС (метр/килограмм секунда);
    • CGS [ехрr] — преобразует ехрг в систему единиц СГС (сантиметр/грамм секунда).

    Пример преобразования дан ниже:


     SI[3 Atmosphere]

    303975. Pascal

    ?Pascal

    Pascal is the derived SI unit of pressure.

     Помимо возможности задания физических констант в пакете расширения Miscellaneous системы Mathematica 4 имеются три дополнительных подпакета: Standard-Atmosphere (данные об атмосфере), ResonanceAbsorptionLines (построение резонансных линий поглощения) и BlackBodyRadiation (излучение абсолютно черного тела).

    Ввиду узкой направленности входящих в них функций эти подпакеты подробно не описываются. С ними несложно познакомиться по справочной базе данных системы Mathematica 4 (раздел Add-ons).

    Данные о химических элементах — ChemicalElements

    В подпакете ChemicalElements имеется ряд функций, позволяющих выявить свойства химических элементов. Начнем с функции без параметров Elements, выводящей список всех химических элементов (он полезен для знакомства с англоязычными наименованиями элементов):


    <<Miscellaneous` ChemicalElements`

    Elements

    {Hydrogen, Helium, Lithium, Beryllium, Boron, Carbon, Nitrogen, Oxygen, Fluorine, Neon, Sodium, Magnesium, Aluminium, Silicon, Phosphorus, Sulfur, Chlorine, Argon, Potassium, Calcium, Scandium, Titanium, Vanadium, Chromium, Manganese, Iron, Cobalt, Nickel, Copper, Zinc, Gallium, Germanium, Arsenic, Selenium, Bromine, Krypton, Rubidium, Strontium, Yttrium, Zirconium, Niobium, Molybdenum', Technetium, Ruthenium, Rhodium, Palladium, Silver, Cadmium, Indium, Tin, Antimony, Tellurium, Iodine, Xenon, Caesium, Barium, Lanthanum, Cerium, Praseodymium, Neodymium, Promethium, Samarium, Europium, Gadolinium, Terbium, Dysprosium, Holmium, Erbium, Thulium, Ytterbium, Lutetium, Hafnium, Tantalum, Tungsten, Rhenium, Osmium, Iridium, Platinum, Gold, Mercury, Thallium, Lead, Bismuth, Polonium, Astatine, Radon, Francium, Radium, Actinium, Thorium, Protactinium, Uranium, Neptunium, Plutonium, Americium, Curium, Berkelium, Californium, Einsteinium, Fermium, Mendelevium, Nobelium, Lawrencium, Rutherfofdium, Dubnium, Seaborgium, Bohrium, Hassium, Meitnerium, Ununnilium, Unununium, Ununbium}

    Для выявления свойств элементов служат следующие функции:

    • Abbreviation [element] — возвращает стандартную аббревиатуру элемента;
    • AtomicNumber [element] — возвращает атомный номер элемента;
    •  AtomicWeight [element] — возвращает атомный вес элемента;
    • Stablelsotopes [element] — возвращает список стабильных изотопов элемента.

    <<Miscellaneous`ChemicalElements`

    Abbreviation[Wolfram]

    W

    AtomicNumber[Wolfram]

    74

    AtomicWeight[Wolfram]

    183.85

    Stablelsotopes[Wolfram]

    {180, 182, 183, 184, 186}

    Off[AtomicWeight::unstable]

     Рисунок 13.12 графически показывает отношение атомного веса к атомному номеру для разных элементов.


    Рис. 13.12. График отношения атомного веса к атомному номеру химических элементов

    Полезны также функции, возвращающие значения величин, определяющих физические свойства элементов:

    • MeltingPoint [element] — температура в точке плавления (здесь и далее в Кельвинах);
    • BoilingPoint [element] — температура в точке кипения;
    • HeatOf Fusion [element] — теплота плавления (килоджоуль/моль);
    • HeatOfVaporization [element] — теплота парообразования (килоджоуль/моль):
    • Density [element] — плотность в килограммах на кубический метр (при 298 К);
    •  TermalConductivity [element] — теплопроводность элемента;
    • ElectronConf iguration [element] — конфигурация электронов в виде списка;
    • ElectronConf igurationFormat [element] — конфигурация электронов Б стандартной форме записи.

    Используемая в размерных значениях этих функций величина «моль» является мерой количества вещества, численно равной 6.0221367х10 23 молекул вещества. Определим свойства элемента — вольфрама (чувствуете намек на фамилию создателя системы Mathematica?):


    MeltingPoint[Wolfram]

    3680. Kelvin

    BoilingPoint[Wolfram]

    5930.Kelvin

    HeatOfFusion[Wolfram]

    35.2 Joule Kilo/Mole

    HeatOfVaporization[Wolfram]

    824.2 Joule Kilo / Mole

    Density[Wolfram]

    19300. Kilogram / Meter3

    ThermalConductivity[Wolfram]

    174. Watt /Kelvin Meter

    ElectronConfiguration[Wolfram]

    {{2}, {2, 6}, {2, 6, 10}, {2, 6, 10, 14}, {2, 6, 4}, {2}}

    ElectronConfigurationFormat[Wolfram]

    1s2 2s22p6 3s23p63d10 4s24p64d104f14 5s25p65d4 6s2

     Вольфрам — один из самых тугоплавких элементов в природе. Недаром из него делают нити для ламп накаливания.

    Задание данных только вещественного типа — RealOnly

    В ряде случаев (как при вычислениях, так и при построении графиков) Mathematica сообщает о наличии у функций особых значений. Это хорошо иллюстрирует рис. 13.13, на котором предпринята попытка построения графика, казалось бы, простой функции х^ (1/3). Нетрудно заметить, что график в отрицательной области значений х не построен и перед построением неполного графика выдан целый букет предупреждающих сообщений.

    Причина этой частичной неудачи в том, что в некоторых точках данная функция дает комплексные значения. Например:


    (-8.0) ^ (1/3)

    1. + 1.732051

     Подпакет ReaLOnly не вводит никаких новых функций. Он просто превращает данные последующих вычислений в чисто вещественные. Так что после его загрузки построение графика указанной функции проходит без каких-либо проблем (рис. 13.14).

     


    Рис. 13.13. Попытка построения графика функции х^(1/3)

     


    Рис. 13.14. Построение графика функции х^(1/3) после загрузки подпа.кета RealOnly

    Разумеется, подобное свойство нужно далеко не всегда и при неумелом его применении способно привести к ошибочным результатам. Тем не менее, есть случаи (см. приведенный пример), когда оно полезно.

     

    gl13-1.jpg

    Изображение: 

    gl13-10.jpg

    Изображение: 

    gl13-11.jpg

    Изображение: 

    gl13-12.jpg

    Изображение: 

    gl13-13.jpg

    Изображение: 

    gl13-14.jpg

    Изображение: 

    gl13-2.jpg

    Изображение: 

    gl13-3.jpg

    Изображение: 

    gl13-4.jpg

    Изображение: 

    gl13-5.jpg

    Изображение: 

    gl13-6.jpg

    Изображение: 

    gl13-7.jpg

    Изображение: 

    gl13-8.jpg

    Изображение: 

    gl13-9.jpg

    Изображение: 

    2. Пакет расширения с утилитами — Utilities

     

    Пакет расширения с утилитами— Utilities

     

    Утилитами принято называть небольшие программы, в основном вспомогательного назначения. Они предназначены чаще всего для работы с файлами и памятью компьютера. Ряд таких утилит включен в пакет расширения Utilities, знакомству с которым и посвящен данный небольшой раздел.

    Работа с бинарными файлами — BinaryFiles

    В подпакете BinaryFiles имеются типовые функции для работы с бинарными файлами:

    • OpenReadBinary [ "filename" ] — открытие файла для считывания бинарных данных;
    • OpenWriteBinary["filename"] — открытие файла для записи бинарных данных;
    • OpenAppendBinary ["filename"] — открытие файла для добавления данных в конец;
    • ReadBinary [stream, type] — считывает бинарные данные из потока;
    • ReadBinary [ stream, expr ] — считывает из потока бинарные данные, типы которых определяются выражением ехрг.

    Функции


    ReadListBinary[filename,type]

    ReadListBinary[stream,type, n]

    ReadListBinary[stream,type]

     оперируют с данными в виде списков, а функция WriteBinary [stream, data] записывает данные в поток в бинарной форме. Примеры применения этих функций представлены ниже:

    << Utilities`BinaryFiles`

    data = N[Table[10^n, {n, -10, 10}]]

    {l.x l10-10, 1.x 10-9, 1.x 10-8, 1.x 10-7, 1.x 10-6, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1., 10., 100.-, 1000., 10000., 100000., 1.x 106, 1.x 107, 1.x 108, 1.x 109, 1.x 1010}

    stream = OpenWriteBinary["binarytest"]

    OutputStream["binarytest" , 4]

    WriteBinary[stream, data]

    Close[stream]

    binarytest

    ReadListBinary["binarytest", Double]

    {1.х10-10, 1. xlO-9, 1. x10-8, 1.x 10-7, 1.x 10-6, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1., 10., 100., 1000., 10000., 100000., 1.x 106, 1.x 107, l.xl08, 1.x 109, 1.x 1010}

    ReadListBinary["binarytest", Signedlntl6, 5]

    {15835, 31967,-9769, -16965, 15889}

    Для конвертирования выражений ехрг в байтовый формат служат функции ТоBytes[expr] и ToBytes[expr, type].

    Например:


    ToBytes[-34.3421435]

    {192, 65, 43, 203, 91, 128, 0, 0}

    ToBytes[-34.3421435, CString]

    {45, 51, 52, 46, 51, 52, 50, 49, 52, 51, 53, 0}

     

    Запись графических объектов в файл формата DXF

    В широко распространенных графических системах AutoCAD используется формат файлов DXF. Подпакет DXF позволяет записывать графические объекты Mathematica в этом формате с помощью функции WriteDXF["filename", graphics].

    Здесь filename — имя файла, a graphics — имя предварительно созданного графического объекта. Применение данной функции вполне очевидно.

    Фильтрация опций — FilterOptions

    В ряде случаев возникает необходимость в передаче опций из одной функции в другую. При этом передавать нужно не- все опции, а только те из них, которые имеют смысл для вызываемой функции. В подпакете FilterOptions имеется функция, позволяющая фильтровать опции:

    • FilterOptions [symbol, optl, opt2,...] — возвращает набор опций, применимых к объекту symbol.

     


    Риc. 13.15. Пример применения подпакета FilterOptions

    Рисунок 13.15 поясняет применение опции фильтрации для создания графической функции Plotlntegrate, строящей график интеграла от заданной функции. Показан также пример построения графика интеграла от функции Cos [x] в интервале от 0 до 2п. Как и следовало ожидать, график функции очень близок к синусоиде.

    Вы можете опробовать действие этой графической функции и на других примерах (желательно, чтобы интегрируемая функция не имела особенностей в пределах области построения графика).

    Уплотнение памяти — MemoryConserve

    Подпакет MemoryConserve в дополнение к имеющейся в ядре функции освобождения памяти Share [ ] содержит две директивы управления памятью:

    • On [MemoryConserve] — включает автоматическое сжатие занимаемой системой памяти;
    • Off [MemoryConserve] — отключает автоматическое сжатие памяти. Ниже демонстрируется применение этого подпакета:

    <<Utilities 'MemoryConserve' $MemoryIncrement

    100000

    ТаЫе[ ToString[0], {2^15} ] ;

    Length[ % ]

    MemoryConserve::start : Running Share[] to conserve memory. MemoryConserve::end : Finished running Share[];

    929200 bytes of memory freed.

    32768

    Off[ MemoryConserve ]

    On[ MemoryConserve ]

     

    Данная утилита полезна лишь при использовании системы Mathematica на компьютерах с малым объемом оперативной памяти.

    Работа с пакетами расширений — Package

    В подпакете Package имеется несколько функций, полезных при работе с пакетами расширения:

    • FindPackages [path] — возвращает список файлов с расширением .m, имеющихся в каталоге path. Опция FullPath->True дает возврат полных (вместе с путем) имен файлов;
    • FindPackages [path, pattern] — возвращает список файлов с расширением .m, имеющихся в каталоге path и удовлетворяющих заданному образцу pattern;
    • Annotation [package] — возвращает список ключевых слов, содержащихся в аннотации пакета;
    • Annotation [package, keyword] — возвращает текст аннотации пакета, связанной с ключевым словом keyword.

    Примеры работы с этими функциями:


      <<Utilities' Package'

    FindPackages[$Path, "*ca"]

    {{}, {}, {}, {DiscreteMath'Combinatorica'}, {}}

    FindPackages[$Path, "*ca",

    FullPath -> True]

    {{},(},{},

    {/usr/local/mathematica/AddOns/StandardPackages/ DiscreteMath/Combinatorica.m}, {}}

    Annotation["Utilities' Package'"]

    {Title, Context, Author, Summary, Package Version, Mathematica Version, Copyright, History, Keywords, Limitations, Discussion}

    Annotation["Utilities'Package'", "Mathematica Version"]

    {(* :Mathematica Version: 4.0 *)}

     

    Показ времени операций — ShowTime

    В подпакете ShowTime собраны средства для осуществления контроля за временем выполнения различных операций:

    • ShowTime [expr] — выводит время выполнения операции ехрr;
    • On [ShowTime] — включает вывод времени исполнения последовательности операций;
    • Off [ShowTime] — выключает вывод времени исполнения последовательности операций.

    Следующие примеры иллюстрируют применение этих средств:


    <<Utilities'ShowTime'

    NIntegrate[x Exp[-x] Sin[x], {x, 0, Infinity}]

    0.05 Second

    0.5

    Off[ShowTime]

    0. Second

    ShowTime[Sum[1/n, {n, I, 999}]];

    0.11 Second

     Контроль за временем исполнения операций — важная часть отладки высокоэффективных программ и программных модулей.

    Обратите внимание на то, что время исполнения использованных в примерах выражений относится к компьютеру, на котором примеры выполнялись (Pentium II 350 МГц). Для других компьютеров результаты хронометража будут другими.

     

    Что нового мы узнали?

    В этом уроке мы научились:

    • Синтезировать звуки.
    • Использовать функции времени и дат.
    • Работать с географическими и картографическими данными.
    • Вводить физические константы и размерные величины.
    • Получать данные о химических элементах.
    • Задавать данные только вещественного типа.
    • Работать с бинарными файлами.
    • Записывать графические объекты в файл формата DXF.
    • Применять фильтрацию опций.
    • Выполнять уплотнение памяти.
    • Выводить данные о времени выполнения операций.

     

    gl13-15.jpg

    Изображение: 

    Урок 14. Расширения графики— пакет Graphics

    Урок 14. Расширения графики— пакет Graphics

    1. Расширения графики— пакет Graphics

     

    Расширения графики— пакет Graphics

     

    • Анимация графиков различного типа
    • Использование цвета
    • Построение стрелок
    • Графики комплекснозначных функций
    • Построение объемных контурных графиков
    • Построение графиков с окраской внутренних областей
    • Графики специальных типов
    • Специальные типы трехмерных графиков
    • Построение графиков неявных функций
    • Вывод обозначений кривых
    • Построение трехмерных параметрических графиков
    • Представление полей на плоскости и в пространстве
    • Трехмерные графические объекты

    Пакет расширения Graphics дает множество средств для построения графиков самого изысканного вида. Он является прекрасным инструментом для визуализации задач, допускающих представление результатов в графической форме. Объем материала данного пакета намного выходит за пределы одного урока, поскольку предполагает отбор нужного материала для изучения того или иного вида графики.

    Анимация графиков различного типа — Animation

    Фактически, техника анимации (оживления) графиков уже была описана. Напомним, что она сводится к подготовке отдельных кадров анимационного рисунка, которые специфицируются особой изменяющейся переменной t. Это не обязательно время, возможно, что t задает размеры изображения, его положение или иную характеристику. Естественно, что имя переменной можно выбирать произвольно.

    Подпакет Animation подключается автоматически и в ряде случаев не требует загрузки (хотя на всякий случай его лучше загрузить при использовании средств анимации). Пакет задает две важнейшие функции:

    • Animate [grcom, {t, tmin, tmax, dt] — задает построение серии графических объектов grcom при изменении параметра t от tmin до tmax с шагом dt;
    • ShowAnimation [ {p1,p2, р3,...} ] — дает анимацию последовательным воспроизведением ранее подготовленных объектов p1, р2, рЗ, ...

    Рисунок 14.1 показывает пример подготовки к анимации простого графика — функции n*Sin [х] /х при n, меняющемся от 0.1 до 1 с шагом 0.1. Таким образом демонстрируется изменение данной функции по высоте (амплитуде).

    При задании анимации есть небольшая проблема — Mathematica автоматически меняет масштаб с тем, чтобы график был наиболее представительным. Но для анимации это недопустимо, поэтому опцией PlotRange задан фиксированный масштаб для всех кадров анимации. Выполнив показанные на рис. 14.1 команды, можно наблюдать построение всех кадров — для n = 0.1,0.2,0.3,..., 1. 0. Первые три кадра анимации видны на рис. 14.1 снизу.

    Теперь для наблюдения анимации достаточно двойным щелчком выделить первый рисунок. Будет видна быстрая смена кадров. Остановить анимацию и снова запустить ее можно нажатием клавиш Ctrl+Y. При выполнении анимации внизу окна документа появляются кнопки анимационного проигрывателя (рис. 14.2).

    Рис. 14.1. Демонстрация графика функции n*Sin[x]/x, меняющейся по высоте

    Рис. 14.2. Стоп-кадр анимации графика функции n*Sin[x]/x

    Проигрыватель имеет мнемонику кнопок, подобную мнемонике бытовых проигрывателей видеодисков. Есть кнопки пуска и остановки, реверса проигрывания, замедления и ускорения проигрывания. Последние особенно важны, поскольку на современных компьютерах анимация рисунков происходит слишком быстро и лишь ее замедление позволяет обеспечить хорошую визуализацию данного процесса. Число кадров анимации не должно быть меньше 8-10, иначе вместо плавного движения будут видны резкие скачки изображения.

    Следующий пример иллюстрирует анимацию графика с параметрическим заданием функции:


    ShowAnimation[Table[ Graphics[Line[{{0 0},

    {Cos[t], Sin[t]}}], PlotRange -> {{-1, 1}, {-1, 1}}],

    {t, 0, 2Pi, Pi/8}]]

    Запустив этот фрагмент программы, вы увидите построение отрезка прямой, вращающегося вокруг одного неподвижного конца. Здесь для анимации вначале строится набор кадров, а затем используется функция ShowAnimation.

    Аналогичным образом осуществляется анимация трехмерных графиков поверхностей или фигур. Рисунок 14.3 показывает начало подготовки к анимации сложной поверхности, описываемой функцией Бесселя, аргумент которой меняется от кадра к кадру.

    Рис. 14.3. Подготовка к анимации сложной трехмерной поверхности

    Обратите внимание на применение функций Show и Graph!csArray для построения на одном графике сразу всех кадров (фаз) анимации. Порой этот набор кадров даже важней, чем анимация, длящаяся доли секунд или несколько секунд.

    Рисунок 14.4 иллюстрирует следующий шаг анимации — исполнение функции ShowAnimation. Как и для предшествующих примеров, она строит последовательно все рисунки — кадры анимации.

    Рис. 14.4. Подготовка кадров анимации сложной трехмерной поверхности

    Запуск анимации выполняется, как уже было описано (рис. 14.5). При этом наблюдаются характерные колебания поверхности — пик ее проваливается вниз, образуя впадину, а затем снова выходит вверх. Внизу графика видны кнопки анимационного проигрывателя, работа с которым также была описана выше.

    Для упрощения анимации сложных графиков в подпакете Animations задан ряд специализированных функций, которые приведены в приложении. Рисунок 14.6 поясняет задание анимации и построение начального кадра для параметрически заданной раскручивающейся спирали — используется функция MovieParametricPlot. Запустив начальный кадр, можно наблюдать раскручивание спирали.

    Рис. 14.5. Один из стоп-кадров анимации сложной трехмерной поверхности

    Рис. 14.6. Построение раскручивающейся спирали

    Еще один пример построения сложной вращающейся в пространстве фигуры, напоминающей гантель, показан на рис. 14.7. В данном случае трехмерная фигура задана в параметрической форме, а для последующей ее анимации используется функция SpinShow.

    Последние примеры даны в упрощенной форме — без окна с проигрывателем. Разумеется, кнопки проигрывателя появляются при реальном пуске анимации.

    Рис. 14.7. Построение вращающейся в пространстве фигуры — «гантели»

     

    gl14-1.jpg

    Изображение: 

    gl14-2.jpg

    Изображение: 

    gl14-3.jpg

    Изображение: 

    gl14-4.jpg

    Изображение: 

    gl14-5.jpg

    Изображение: 

    gl14-6.jpg

    Изображение: 

    gl14-7.jpg

    Изображение: 

    2. Установка аргумента цвета — ArgColor

     

    Установка аргумента цвета — ArgColor

     

    При построении графиков в полярной системе координат полезно использовать цвет, зависящий от фазы комплексного числа. Для этого в подпакете ArgColor служат следующие функции:

    • ArgColor [z] — дает цвет, определяемый фазой комплексного аргумента z;
    • ArgShade [ z ] — дает уровень серого цвета, определяемый фазой комплексного аргумента z.

    Рис. 14.8. Построение кругов, расположенных по окружности, с разной степенью окраски серыми полутонами

    Действие функции ArgShade иллюстрирует показанный на рис. 14.8 пример. Он строит 12 расположенных по окружности кругов с разной степенью окраски (от белого до черного) с помощью функции ArgShade.

    Заменив в этом программном модуле функцию ArgShade на ArgColor, вы сможете наблюдать окраску кругов разными цветами.

    Установка цветовой системы — Colors

    Обычно цвета задаются в цветовой системе RGB (Red-Green-Blue). В подпакете Colors содержатся функции установки цвета, заданного в других известных цветовых системах:

    • CMYColor [с, m, у] — установка цвета по системе CMY (Cyan-Magenta-Yellow);
    • YIQColor[y,i,q] — установка цвета по системе YIQ (используется в телевизионном стандарте NTSC);
    • HLSColor [h, I, s ] — установка цвета по системе HLS (Hue-Lightness-Saturation);
    • AllColors — переменная-функция, выводящая список установленных цветов.

    Примеры применения функций даны ниже:


    <<Graphics" Colors"

    RGBColor[0.5, -O.I, 0.2]

    RGBColor[0.53, 0.4, 0.957]

    RGBColor[0.5, -0.1, 0.2]

    RGBColor[0.53, 0.4, 0.957]

    Orange

    RGBColor[l., 0.5, 0.]

    Кроме этого в подпакете имеется внушительная таблица англоязычных наименований разных цветов и цветовых оттенков — она выводится функцией AllColors. Их можно использовать для задания в качестве аргумента у функций, управляющих цветами. Например, шоколадный цвет можно задать следующим образом:


    Chocolate

    RGBColor[0.823496, 0.411802, 0.117603]

     

    Построение стрелок — Arrow

    Подпакет Arrow служит для построения стрелок на двумерных графиках (или самих по себе). Для этого предназначена функция Arrow [start, finish, opts], которая строит стрелку по координатам ее начала start и конца finish. Рекомендуется просмотреть список опций этой функции.

    Рисунок 14.9 показывает построение множества стрелок, острия которых находятся на спирали. Для этого координаты стрелок задаются в параметрическом виде.

    Рис. 14.9. Построение множества стрелок с остриями, расположенными по спирали

    Другой пример, представленный на рис. 14.10, иллюстрирует построение двуна-равленной стрелки, опирающейся на иглу, стоящую на кресте, — получается своеобразная модель компаса.

    Рис. 14.10. Построение двунаправленной стрелки, опирающейся на иглу

    Построение стрелок оживляет многие типы графиков. Их можно использовать, к примеру, для указания особых точек на графиках.

    Графики комплексных функций — ComplexMap

    Подпакет ComplexMap задает функции для построения графиков комплексных функций комплексной переменной путем демонстрации преобразования координатных линий:

    • CartesianMap [f, {xmin,xmax}, {ymin,ymax}] — строит изображение декартовых координатных линий после их преобразования функцией f;
    • PolarMap[f, {rmin,rmax}, {thetamin, thetamax} ] — строит изображение координатных линий полярной системы после их преобразования функцией f.

    Действие этих довольно простых функций иллюстрирует рис. 14.11.

    Рис. 14.11. Построение неискаженной декартовой координатной сетки (сверху) и полярной координатной сетки, искаженной воздействием функции Sqrt (снизу)

     

    gl14-10.jpg

    Изображение: 

    gl14-11.jpg

    Изображение: 

    gl14-8.jpg

    Изображение: 

    gl14-9.jpg

    Изображение: 

    3. Построение объемных контурных графиков — ContourPlot3D

     

    Построение объемных контурных графиков — ContourPlot3D

     

    В подпакете ContourPlotSD заданы две функции, которые строят контурные объемные графики. Напоминаем, что функции ядра ContourPlot и ListContourPlot строят только двумерные графики этого типа. Для построения объемных контурных графиков надо использовать следующие функции:

    • ContourPlotSD[f,{x,xmin,xmax},{у,ymin,углах),{z,zmin,zmax)] — строит трехмерный контурный график функции f трех переменных: х, у и z;
    • ListContourPlot3D[f, { fill, f 112,...}, { f 121, f 122,...},...},...}] -строит контурный график по данным трехмерного массива значений f .

    На рис. 14.12 показано построение сферы с отверстием с помощью первой из этих функций.

    Обратите внимание на то, что никаких усилий по созданию в сфере отверстия не требуется, Оно получено просто усечением ограничительного «ящика», в котором размещается сфера. Для этого пределы по оси у заданы как {-1.2,2}, тогда как по остальным осям используются пределы {-2,2}.

    Рис. 14.12. Построение сферы с отверстием

    Интересные возможности открывает опция Contours, которая позволяет как бы раздвинуть в пространстве части трехмерной поверхности. Рисунок 14.13 демонстрирует ее действие.

    Риc. 14.13. Построение частей сферы в пространстве

    Вторая функция— ListContourPlot3D — позволяет строить ряд фигур или поверхностей в пространстве. Пример такого построения дан на рис. 14.14. Масштабы осей подобраны так, чтобы фигура была несколько обрезана справа, что создает изображение отверстия во внутренней яйцеобразной фигуре.

    Рис. 14.14. Построение яйцо, вложенного в параболы

    Как видно из этих примеров, применение описанных функций позволяет упростить построение трехмерных поверхностей и добиться интересных эффектов.

    Построение графиков с окраской внутренних областей — FilledPlot

    Многие графики сильно выигрывают при их построении с закраской. Например, чтобы проиллюстрировать значение определенного интеграла от какой-то функции f(x), достаточно просто закрасить ее график в диапазоне изменения х от нижнего предела интегрирования а до верхнего b. Для построения подобных графиков в подпакете FilledPlot имеется ряд полезных функций.

    Начнем их описание с основных:

    • FilledPlot [f, {х, xmin, xmax} ] — строит график функции/(x) с окраской площадей, образованных линией функции и горизонтальной осью х. По умолчанию действуют опции Fills->Automatic и Curves->Back (то есть кривые строятся на заднем плане, при значении Front построение фигур производится на переднем плане);
    • FilledPlot [{ fl, f2,...}, {х, xmin, xmax} ] — строит графики функций с выделением областей между ними разной окраской (цвет задается автоматически).

    Поясним применение этих функций рядом примеров. Перед этим надо не забыть загрузить подпакет командой


    << Graphics`FilledPlot`

    На рис. 14.15 показано построение смещенной по оси у экспоненты с закраской области между линией экспоненты и горизонтальной осью х.

    Рис. 14.15. Построение экспоненты с закраской областей между ней и осью абсцисс

    Действие функции FilledPlot при построении графиков трех функций показано на рис. 14.16. Здесь использована опция Curves->Front, выводящая построение кривых на первый план, благодаря чему отчетливо видны разделительные линии перекрывающихся областей.

    Рис. 14.16. Построение трех кривых с закраской областей между ними и осью абсцисс

    Еще один пример построения графиков трех фигур показан на рис. 14.17. Здесь для закраски областей между фигурами и осью абсцисс использована опция Fills и директива GrayLevel (окраска серым цветом заданной плотности).

    Рисунок 14.18 иллюстрирует закраску областей совместного применения двух функций, одна из которых — корень квадратный из х - 1 — определена только для И > 1. Именно эта область и закрашена.

    Рис. 14.17. Построение трех кривых с закраской серым цветом

    Рис. 14.18. Пример закраски области совместного действия двух функций

    Имеется также ряд специальных функций для построения кривых с окраской образуемых ими областей:

    • FilledListPlot [ {yl, у2,...} ] —строит графики с окраской, меняющейся между кривыми {1, y1}, {2, у2 } и осью абсцисс х;
    • FilledListPlot [ {{xl, yl}, {х2, у2},...}] — строит графики ряда кривых с окраской, заданной {xi,yi} и осью абсцисс х;
    • FilledListPlot [datal, data2,...}] — строит графики ряда кривых с закраской областей, специфицированных данными datai.

    Применение функции FilledListPlot показано на рис. 14.19.

    Иногда важное значение может иметь опция AxesFront->Значение. При значении этой опции False область закраски закрывает соответствующую часть осей, а при значении True оси выводятся поверх закраски. Сам по себе вывод осей задастся опцией Axes->True. При Axes->False они вообще не выводятся. Рисунок 14.20 поясняет вывод осей и их построение поверх закращениой области.

    В данном случае область окраски ограничена треугольником, который строится как полигон. Если установить опцию AxesFront->False, то часть осей (внутри треугольника) будет не видна.

    Рис. 14.19. Пример применения функции FilledListPlot

    Рис. 14.20. Пример вывода осей поверх закрашенной области

     

    Графики специальных типов — Graphics

    Подпакет Graphics задает ряд функций для построения специальных графиков, например с логарифмическими и полулогарифмическими масштабами, с нанесенными на кривые точками, графиков в виде гистограмм и т. д. Такие графики широко применяются для визуализации не только математических и физических, но также финансовых и экономических расчетов. К примеру, функция Log-Plot [f, {х,xmin,xmax}] строит линейно-логарифмический график/(x) при изменении х от xmin до xmax. Список таких функций дан в приложении.

    Ввиду очевидности этих функций ограничимся одним примером — построением экспоненциальной функции в полулогарифмическом масштабе (по оси у масштаб логарифмический, а по оси х~ линейный). Как видно из рис. 14.21, график вырождается в прямую линию.

    Для построения графиков в полярной системе координат заданы следующие функции:

    • PolarPlotff, {t, tmin, tmax} ] — строит график функции в полярной системе координат как положение конца радиус-вектора f при изменении угла t от tmin до tmax;
    • PolarPlot [ { f 1, f 2,...}]- строит графики ряда функций f 1, f 2,... в полярной системе координат;
    • PolarListPlot [ {rl, r2,...} ] — строит график списка радиусов ri, равномерно изменяя угловую координату.

    Рис. 14.21. Построение графика экспоненты в полулогарифмическом масштабе

    Построение графика трех функций в полярной системе координат с помощью функции PolarPlot представлено на рис. 14.22.

    Рис. 14.22. Построение графиков трех функций в полярной системе координат

    В ряде случаев удобно представление данных в виде столбцовых и круговых диаграмм. Для построения столбцовых диаграмм служат функции, описанные ниже:

    • BarChart [datalistl,datalist2,...] — строит столбцовую диаграмму по данным списков, располагая столбцы рядом и обеспечивая их автоматическую закраску цветом (рис. 14.23).

    Здесь любопытно отметить, что списки данных могут иметь разную длину. Число столбцов задается большим списком. Отсутствующие данные у спис-

    ков меньшей длины считаются нулевыми, и для них столбцы не строятся. Данные, представленные отрицательными числами, строятся как столбцы, обращенные вниз.

    Рис. 14.23. Построение столбцовых диаграмм для двух списков данных с расположением столбцов друг рядом с другом

    • StackedBarChart [datalist1, datalist2,...] — строит столбцовую диаграмму, располагая столбцы одних данных над столбцами других данных (рис. 14.24) с автоматическим выбором цветов для каждого набора данных.

    Рис. 14.24. Построение столбцовых диаграмм со столбцами, расположенными друг над другом

    В этой столбцовой диаграмме вначале строятся столбцы, представляющие данные для первого списка, над ними надстраиваются столбцы новых данных, так что общая высота столбцов пропорциональна сумме численных значений i-x элементов списков.

    • PercentileBarChart [datalistl, datalist2,...] — строит столбцовую диаграмму, отображающую нормированные данные в процентах (рис. 14.25).

    Здесь построение идет так же, как в предыдущем случае. Однако высоты столбцов указываются в процентах и нормируются — за 100 % принимается максимальная высота столбцов выше горизонтальной оси, а за -100 % — максимальная высота столбца ниже горизонтальной оси.

    • GeneralizedBarChart [datalistl, datalist2,...] — строит столбцовую диаграмму с заданной высотой и шириной столбцов (рис. 14.26).

    Рис. 14.25. Построение столбцовых диаграмм с процентным отсчетом

    Рис. 14.26. Построение столбцовых диаграмм с произвольной шириной столбцов

    В этом случае имеется возможность указать в списках данных позицию по оси х, высоту столбца и его ширину. Ширина задается в относительных единицах: при ширине, равной 1, столбцы сливаются (но выделяются цветом), при величине меньше 1 они разделяются пустыми промежутками, а при величине, большей 1, столбцы перекрываются.

    Все указанные функции имеют опции, существенно влияющие на вид диаграмм. Рекомендуется просмотреть их с помощью функции Options. Ограничимся тремя наглядными примерами на применение опций. Рисунок 14.27 показывает построение столбцовой диаграммы с горизонтальным расположением столбцов и произвольным выбором цвета для каждого набора.

    На рис. 14.28 построена диаграмма для одного комплекта данных. Но выбор цвета каждого из столбцов задается с помощью условного оператора. На рис. 14.29 показан наиболее сложный пример построения столбцовых диаграмм. Наряду с цветовыми эффектами задается обвод пунктирной линией столбцов одного из комплектов данных и, главное, — вывод надписей (названий месяцев) под наборами столбцов. Обратите внимание на то, что надписи могут быть на русском языке.

    Рис. 14.27. Построение столбцовой диаграммы с горизонтально расположенными столбцами и произвольным выбором цвета для каждого набора данных

    Рис. 14.28. Столбцовая диаграмма с выбором цвета столбцов по условию

    Рис. 14.29. Комплексное построение столбцовых диаграмм

    Следующая функция позволяет стоить круговые диаграммы. Они наиболее удобны, когда оцениваются относительные величины, при этом сумма данных соответствует площади круга:

    • PieChart [data] — строит круговые диаграммы по данным data (рис. 14.30). Тип диаграммы задается опциями, список которых и значения по умолчанию можно получить командой Options [PieChart]. Одна из опций— PieExploded — позволяет отделить заданный сектор от диаграммы, что порой повышает наглядность представления данных.

    Рис. 14.30. Построение набора круговых диаграмм Здесь использована также одна из следующих функций:

    • DisplayTogether [plotl,plot2,..., opts] — строит комбинированный графический объект, объединяя графики ploti в общих координатных осях;
    • DisplayTogetherArray [plotl,plot2,..., opts] — строит комбинированный графический объект, выводя графики ploti в виде массива.

    На рис. 14.31 показано построение круговой диаграммы с применением окраски чередующихся секторов оттенками серого цвета.

    Рис. 14.31. Построение круговой диаграммы с раскраской чередующихся секторов оттенками серого цвета

    Еще одну возможность разнообразить круговые диаграммы иллюстрирует рис. 14.32. Здесь показано, что в секторы можно заносить небольшие надписи, например имена людей, даты и т. д.

    Рис. 14.32. Построение круговой диаграммы с надписями внутри секторов

    Функция DisplayTogether позволяет объединять графики разного типа. На рис. 14.33 показано построение графика экспериментальных точек и линий линейной и параболической регрессии.

    Рис. 14.33. Совместное построение исходных точек данных и линий линейной и параболической регрессии

    Применение функции DisplayTogetherArray для построения трех круговых диаграмм с номерами секторов показано на рис. 14.34. Это те же диаграммы, что и на рис. 14.30, но аргумент функции DisplayTogetherArray на сей раз представляет собой не одномерный, а двумерный массив (в первой строке два графика, во второй — один).

    Рис. 14.34. Построение трех круговых диаграмм с номерами секторов

    Иногда нужно использовать в качестве точек графика цифры. Это реализует следующая функция, имеющая три формы:

    • TextListPlot [ {y1, у2,...} ] — построение точек с ординатами yi и абсциссами 1, 2, ... с представлением их числами 1, 2, ... (рис. 14.35);
    • TextListPlot [ {{xl, yl}, {х2, у2},...} ] — построение точек с координатами {xi, yi} и представлением их числами 1, 2, ...;
    • TextListPlot [ {{xl, yl, exprl), {x2,y2,expr2 },...}] — построение точек с координатами {xi, yi} и представлением их числами, заданными выражениями expri.

    Рис. 14.35. Построение графика сточками, представленными цифрами

    Еще одна функция, также имеющая три формы, дает тот же результат, но дополнительно строит и сами точки:


    LabelListPlot [ {yl, у2,...} ] LabelListPlot [{ {xl,yl}, {х2,у2 },...}] LabelListPlot [{ {x1, y1, expr1}, {х2, у2, expr2 },...}]

    Наконец, есть еще одна функция:

    • ErrorListPlot [{{yl, dl}, {y2, d2 },...}] — построение графика точек yi с зонами ошибок di (рис. 14.36).

    Рис. 14.36. График с точками и зонами ошибок

    Таким образом, подпакет Graphics обеспечивает построение наиболее распространенных типов графиков, используемых в научно-технической и финансово-экономической литературе.

     

    gl14-12.jpg

    Изображение: 

    gl14-13.jpg

    Изображение: 

    gl14-14.jpg

    Изображение: 

    gl14-15.jpg

    Изображение: 

    gl14-16.jpg

    Изображение: 

    gl14-17.jpg

    Изображение: 

    gl14-18.jpg

    Изображение: 

    gl14-19.jpg

    Изображение: 

    gl14-20.jpg

    Изображение: 

    gl14-21.jpg

    Изображение: 

    gl14-22.jpg

    Изображение: 

    gl14-23.jpg

    Изображение: 

    gl14-24.jpg

    Изображение: 

    gl14-25.jpg

    Изображение: 

    gl14-26.jpg

    Изображение: 

    gl14-27.jpg

    Изображение: 

    gl14-28.jpg

    Изображение: 

    gl14-29.jpg

    Изображение: 

    gl14-30.jpg

    Изображение: 

    gl14-31.jpg

    Изображение: 

    gl14-32.jpg

    Изображение: 

    gl14-33.jpg

    Изображение: 

    gl14-34.jpg

    Изображение: 

    gl14-35.jpg

    Изображение: 

    gl14-36.jpg

    Изображение: 

    4. Специальные типы трехмерных графиков — Graphics3D

     

    Специальные типы трехмерных графиков— Graphics3D

     

    В подпакете Graphics3D, загружаемом командой


    <<Graphics`Graphics 3D`

    имеется ряд программ для простого построения трехмерных графиков. Они описаны ниже с примерами:

    • BarChart3D[ {{ zll, z!2,...},{z21, z22 },...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z 11 , z п , ... (рис. 14.37);
    • BarChart3D[ {{{zll, stylell}, {z21, style21},...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z u , z vl , ... с указанием спецификации стиля для каждого столбца.

    Нетрудно заметить, что функция BarChartSD автоматически задает стиль и цвет построения столбцов диаграммы. Эта функция имеет массу опций, с помощью которых можно менять вид диаграммы (рис. 14.38). Как обычно, перечень опций можно вывести с помощью команды Options [BarChart3D].

    Рис. 14.37. Построение трехмерной столбцовой диаграммы

    Рис. 14.38. Вариант диаграммы с черно-белой раскраской

    • Scatter Plot 3D [{ {x1, yl, zl}, {х2, у2, z2 },...}] — строит точки в пространстве по их заданным координатам. При использовании опции Plot-Joined->True точки соединяются отрезками прямых, и строится линия в пространстве (рис. 14.39).

    Рис. 14.39. Построение пространственной кривой по точкам

    Обратите внимание на то, что список точек формируется с помощью функции Table. Это возможно, когда построение делается для аналитически заданной функции, описывающей трехмерную поверхность.

    • ListSurfacePlot3D[{ { {x11, y11, zll}, {x12, y12, z13},...} } }] - строит трехмерную поверхность по координатам ее точек-(рис. 14.40).

    Рис. 14.40. Построение трехмерной поверхности по координатам ее точек

    Здесь список координат точек также задаются функцией Table. Выбором диапазона изменения значений переменных х, у и z можно добиться различных эффектов, например изображения только части сферы (на рис. 14.40, к примеру, показано построение полусферы).

    Следующие функции дают построения с проекциями:

    • ShadowPlot3D [f, {х, xmin, xmax}, {у, ymin, углах} ] — строит график поверхности f(z, y) с ее проекцией на опорную плоскость (рис. 14.41);
    • ListShadowPlot3D[{{ {xll, yll, zll}, {x!2, y!2, z!3},...}} }] -строит график поверхности z(x, у) с ее проекцией на опорную плоскость по координатам точек поверхности.

    Рис. 14.41. Построение графика трехмерной поверхности и ее проекции на опорную плоскость

    Еще один простой и эффектный пример применения функции ShadowPlot3D показан на рис. 14.42. Здесь изображение поверхности — пика — проецируется на верхнюю плоскость, что дает наглядное представление о построенной фигуре.

    Рис. 14.42. Построение фигуры — пика — и ее проекции на верхнюю плоскость

    С помощью функции Shadow [go], где до — графический объект, представляющий трехмерную фигуру, можно построить и более сложные рисунки — например, график объемной фигуры и сразу всех трех ее проекций на взаимно перпендикулярные плоскости. Такое построение иллюстрируется документом, показанным на рис. 14.43.

    С функцией Shadow можно использовать различные опции. Отметим наиболее существенные — XShadow, YShadow и ZShadow. Например, задав Zshadow-> False, можно удалить одну из проекций, плоскость которой перпендикулярна оси z.

    Для получения проекций на заданную плоскость, расположенную в пространстве, служат следующие функции:

    • Project [g,pt] — дает проекцию объекта g на плоскость, нормаль которой задана списком из трех элементов pt. Например, список {1,1,0} даст проекцию на диагональную плоскость;
    • Project[g, {e1,e2},pt] — дает проекцию объекта g в плоскости, определенной векторами {el,e2}, выходящими из точки с координатами pt (рис. 14.44);
    • Project[g, {e1, e2 } ,pt, origin] — то же, но направление проецирования определяется точками pt и origin.

    В конце подпакета определена функция StackGraphics [ {gl, g2,...}], которая строит двумерные графические объекты, располагая их каскадно, то есть разнося в пространстве по третьей координате (рис. 14.45).

    Рис. 14.43. Построение объемной фигуры и всех трех ее проекций

    Рис. 14.44. Пример построения проекции но заданной плоскости

    Обратите внимание на то, что здесь каждая синусоида расположена на своей плоскости.

    Рис. 14.45. Пример построения трех синусоид, расположенных каскадно

     

    Построение графиков неявных функций — ImplicitPlot

    Подпакет ImplicitPlot задает три варианта функции для построения графиков неявно заданных функций:

    • ImplicitPlot [eqn, {x, xmin, xmax} ] — построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax;
    • ImplicitPlot [eqn, {x, xmin,ml,m2,..., xmax} ] — построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax с исключением точек m1, m2, ...;
    • ImplicitPlot [ {eqnl, eqn2,...}, ranges, options] — построение функций, неявно заданных уравнениями eqni, при х, меняющемся в пределах ranges и при задании опций options.

    Примером может быть функция х 2 + k у 2 = r 2 , задающая построение эллипса. На рис. 14.46 показано такое построение.

    Вторая форма задания функции иллюстрируется рис. 14.47. Здесь строится сразу целое семейство эллипсов.

    И, наконец, на рис. 14.48 показано применение третьей формы функции ImplicitPlot с использованием опции PlotStyle и директивы Dashing.

    Рис. 14.46. Построение эллипса по неявному выражению

    Рис. 14.47. Построение семейства эллипсов по их уравнениям

    Рис. 14.48. Пример применения функции ImplicitPlot с опцией PlotStyle

     

    gl14-37.jpg

    Изображение: 

    gl14-38.jpg

    Изображение: 

    gl14-39.jpg

    Изображение: 

    gl14-40.jpg

    Изображение: 

    gl14-41.jpg

    Изображение: 

    gl14-42.jpg

    Изображение: 

    gl14-43.jpg

    Изображение: 

    gl14-44.jpg

    Изображение: 

    gl14-45.jpg

    Изображение: 

    gl14-46.jpg

    Изображение: 

    gl14-47.jpg

    Изображение: 

    gl14-48.jpg

    Изображение: 

    5. Вывод обозначений кривых — Legend

     

    Вывод обозначений кривых— Legend

    Наглядность графиков, особенно имеющих несколько кривых, повышается при выводе обозначений кривых — так называемой легенды. В подпакете Legend для этого имеются следующие средства:

    • PlotLegend->{textl,text2,...} — опция для функции Plot, устанавливающая легенду в виде последовательных текстовых надписей (рис. 14.49);
    • ShowLegend [graphic, legendl, Iegend2,...] — добавляет легенду в имеющийся график graphic;
    • {{{boxl, textl},...}, opts} — спецификация легенды с цветными примитивами или графиками для рамок boxi с текстами texti;
    • {colorfunction, n, ninstring,maxstring, opts} — спецификация легенды с n рамками, указанием цветовой спецификации и строк, размещаемых в рамках.

    Рис. 14.49. Пример построения графиков двух функций с выводом легенды

    Обратите внимание на то, что среди многочисленных опций функции Plot имеется ряд, относящихся к параметрам легенды: LegendPosition-> {-1,1} — установка позиции легенды, LegendSize->Automatic — установка размера легенды, LegendShadow->Automatic — установка тени для рамки легенды, Legend-Orientation->Vertical — ориентация рамки легенды, LegendLabel->None — заголовок легенды и LegendTextDirection->Automatic — направление текста. С помощью этих опций можно существенно влиять на вид легенды.

    На рис. 14.50 показано построение графика плотности с применением функции ShowLegend для вывода легенды в виде таблицы плотностей. Обратите внимание на применение опции LegendPosition для вывода легенды справа от графика.

    Рис. 14.50. Построение графика плотности с легендой

    Для иллюстрации эффективности применения опций функции Plot, влияющих на вид легенды, рассмотрим еще один пример, представленный на рис. 14.51.

    Рис. 14.51. Пример построения графика двух функций с легендой и установкой ряда ее опций

    В заключение отметим еще две функции подпакета Legend:

    • Legend [legendargs, opts] — создает графический примитив для задания индивидуальной легенды;
    • ShadowBox [pos, size, opts] — создает графический примитив в виде рамки для легенды.

    К примеру, показанный ниже вызов функции ShadowBox создает графический примитив в виде пустой рамки с тенью:

    ShadowBox[{0, 0}, {1, 1},ShadowBackground -> GrayLevel[.8]]

    {GrayLevel[0.8], Rectangle[{0.1, -0.1), {1.1, 0.9}], GrayLevel[l], Rectangle[{0, 0}, {1, 1}], Thickness[0.001], GrayLevel[0], Line[{{0, 0), {1, 0), {1, 1}, {0, 1), {0, 0}}]} Для просмотра полученной рамки можно использовать команду Show[Graphics[%]]

    Применение функции Graphics здесь связано с тем, что ShadowBox порождает графический примитив, а не законченный графический объект.

     

    Построение графиков с множеством объектов — MultipleListPlot

    В подпакете MultipleListPlot содержится расширенный вариант встроенной функции ListPlot:

    • MultipleListPlot [listl, Iist2,...] — строит множество графических объектов по данным списков. Списки могут быть представлены ординатами у, координатами точек {х,у), в виде {point, ErrorBar [ {negerr,poserr} ] } и т.д.

    Рис. 14.52. Создание трех списков значений функций и их построение

    Рисунок 14.52 иллюстрирует создание трех списков — 11, 12 и 13 — для трех функций и вывод их графиков в виде различных маленьких фигур.

    Особое значение имеет опция Plot Joined. Если она используется в виде Plot-Joined->True, то это означает соединение точек на графиках отрезками линий разного стиля, выбираемого автоматически (рис. 14.53).

    Рис. 14.53. Графики трех функций, построенные линиями, соединяющими их точки

    Эта опция может быть представлена и со значением в виде списка. Например, ее применение в виде PlotJoined->{True, False, False} означает, что точки первой кривой соединяются линиями, тогда как точки второй и третьей кривых линиями не соединяются. Рисунок 14.54 поясняет этот способ построения графиков.

    Рис. 14.54. Построение трех графиков, только у одного из которых точки соединены линиями

    Функция MultipleListPlot может использовать в списках указания на построение точки с зоной погрешности (ErrorBar). Этот случай иллюстрирует рис. 14.55.

    Более интересный случай построения точек с двумерными зонами погрешности в виде окружностей или эллипсов демонстрирует рис. 14.56.

    Рис. 14.55. Построение точек с одномерными зонами погрешности

    Рис. 14.56. Построение точек с двумерными зонами погрешности

    • Следующие функции служат для вывода символов в качестве точек:
    • PlotSymbol [type] — задает тип символа (возможные значения: Box, Diamond, Star или Triangle). Возможно применение опции_ Filled-> False;
    • PlotSymbol [type, size] — задает тип символа и его размер size;
    • MakeSymbol [primitives] — задает вывод символа, создаваемого графическим примитивом.

    Рисунок 14.57 показывает построение точек с применением графических примитивов. Этот путь позволяет обозначать точки графиков практически любыми фигурами.

    Рис. 14.57. Построение точек с применением графических примитивов

    Для создания примитивов в виде правильных многоугольников (полигонов) используется директива RegularPolygon:

    • RegularPolygon [n] — правильный «-угольный полигон;
    • RegularPolygon [n, rad] — правильный и-угольный полигон с заданным радиусом описанной окружности rad;
    • RegularPolygon [n, rad, ctr] — то же с заданным центром ctr;
    • RegularPolygon [n, rad, ctr, tilt] — то же с углом поворота фигуры на tilt градусов;
    • RegularPolygon [n, rad, ctr, titl, k] — соединение линиями через k вершин.

    Рисунок 14.58 показывает построение полигона — семиугольника с радиусом 3, центром в точке {0, 0}, углом поворота 20° и соединением через 3 вершины (попробуйте задать этот параметр другим целым числом и убедитесь, насколько меняется форма фигуры).

    Директивы Dashing[ {Dot, Dash, LongDash,...} ] и AbsoluteDashing[ {Dot,...} ] служат для спецификации типа линий графиков. На рис. 14.59 представлены примеры такой спецификации и построения отрезков прямой линиями разных типов.

    Применение функций подпакета MultipleListPlot наиболее ценно при визуализации математических расчетов, где преобладают графики тех типов, которые создаются этими функциями.

    Рис. 14.58. Построение полигона

    Рис. 14.59. Примеры построения отрезков прямых разными стилями

     

    gl14-49.jpg

    Изображение: 

    gl14-50.jpg

    Изображение: 

    gl14-51.jpg

    Изображение: 

    gl14-52.jpg

    Изображение: 

    gl14-53.jpg

    Изображение: 

    gl14-54.jpg

    Изображение: 

    gl14-55.jpg

    Изображение: 

    gl14-56.jpg

    Изображение: 

    gl14-57.jpg

    Изображение: 

    gl14-58.jpg

    Изображение: 

    gl14-59.jpg

    Изображение: 

    6. Построение 3D-параметрических графиков — ParametricPlot3D

     

    Построение 3D-параметрических графиков — ParametricPlot3D

    Трехмерные графики с параметрически заданными функциями, описывающими положение их точек, относятся к числу наиболее сложных, но в то же время весьма эффектных. В подпакете ParametricPlotSD определены функции, упрощающие подготовку таких графиков:

    • ParametricPlot3D[{fx,fy,fz},{u,u0,ul,du},{v,c0,vl,dv}] — строит трехмерную поверхность, заданную параметрически функциями f x, f у и f z от переменных и и v с заданными диапазонами изменения и приращениями du и dv (рис. 14.60);
    • PointParametricPlot3D[ { fx, f у, f z},{u,u0,ul,du}] — строит точками трехмерную поверхность, заданную параметрически функциями fx, f у и f z от одной переменной и с заданным диапазоном изменения и приращением du;
    • PointParametricPlot3D[{fx,fy,fz},{u,u0,ul,du),{v,c0,vl,dv}] — строит точками трехмерную поверхность, заданную параметрически функциями fx, f у и f z от переменных и и v с заданными диапазонами изменения и приращениями du и dv.

    Рис. 14.60. Пример построения сферы с вырезом с помощью функции ParametricPlot3D

    Обратите внимание на то, что выбором диапазона изменения углов можно получить вырез сферы. Окраска поверхности осуществляется автоматически.

    На рис. 14.61 показан пример применения функции PointParametricPlotSD. Здесь сфера построена отдельными точками.

    Для построения трехмерных поверхностей в сферической и цилиндрической системах координат служат следующие функции:

    • SphericalPlot3D[r, {t, trnin, tmax}, {p,pmin,pmax} ] — построение графика в сферической системе координат;
    • CylindricalPlot3D[z,{t,tmin,tmax},{p,pmin,pmax}] — построение графика в цилиндрической системе координат.

    На рис. 14.62 показано построение усеченной сверху сферы с помощью функции SphericalPlot3D. Нетрудно заметить, что применение данной функции — самый простой способ построения сферы. Это естественно, поскольку система координат сферическая.

    Риc. 14.61. Пример построения сферы точками

    Рис. 14.62. Пример построения сферы с помощью функции SphericolPlot3D

    Пример построения поверхности, напоминающей по виду «тарелку» спутниковой антенны, в цилиндрической системе координат дан на рис. 14.63.

    С помощью опции Viewpoint можно изменять положение точки, с которой рассматривается фигура. Это существенно меняет ее вид (рис. 14.64).

    Еще раз напоминаем, что интерфейс Mathematica предусматривает изменение точки просмотра уже построенной фигуры. При этом Mathematica 4 позволяет вращать фигуру мышью. Рекомендуется просмотреть список опций данных функций, позволяющих в широких пределах менять вид и стиль построения графиков.

    Рис. 14.63. Пример построения поверхности в цилиндрической системе координат

    Рис. 14.64. Пример построения фигуры, видимой из заданной точки просмотра

     

    Представление полей на плоскости — PlotField

    В подпакете PlotField имеются функции, позволяющие строить стрелками графики полей:

    • PlotVectorField[ {fx, f у}, {x, xmin, xmax), {y, ymin, ymax} ] —строит плоскость из векторов (стрелок), ограниченную пределами изменения х и у;
    • PlotGradientField[f,{x,xmin,xmax},{у,ymin,ymax}] — строит плоскость из векторов (стрелок) градиента функции f, ограниченную пределами изменения х и у;
    • PlotHamiltonianField[f,{x,xmin,xmax},{у,ymin,ymax}] — строит плоскость из векторов (стрелок) гамильтониана функции f, ограниченную пределами изменения х и у;
    • PlotPolyaField[f, {х,xmin,xmax}, {у, ymin, ymax} ] — представляет график комплексной функции f(x, у).

    Рисунок 14.65 показывает применение функции PlotVectorField для построения векторного поля согласно параметрически заданной на плоскости функции.

    Риc. 14.65. График векторного поля на плоскости

    Еще один пример (рис. 14.66), иллюстрирует построение градиента поля с помощью функции PlotGradientField. Применение функции PlotHamiltonianField демонстрирует рис. 14.67.

    Указанные функции имеют множество опций. Отметим основные из них (в качестве значений приведены значения по умолчанию):

    • ScaleFactor->Automatic — устанавливает размер векторов (стрелок);
    • ScaleFunction->None — устанавливает функцию, вычисляющую размер стрелок;
    • MaxArrowLenght->None — устанавливает ограничение длины стрелок;
    • ColorFunction->None — задает функцию цвета;
    • PlotPoints->15 — задает число точек по координатам для построения стрелок.

    Рис. 14.66. График градиента поля

    Риc. 14.67. Пример применения функции PlotHamiltonianField

    Пример построения сложного графика с применением шестнадцати узловых точек по каждому направлению и использованием опции ScaleFunction показан на рис. 14.68.

    Работу функции PlotPolyaField поясняет рис. 14.69. Обратите внимание на то, что функция в данном случае комплексная.

    Рис. 14.68. Пример графика поля с применением нескольких опций

    Рис. 14.69. Пример графика поля для комплексной функции

    Применение опций позволяет строить самые разнообразные графики различных полей — тепловых, гравитационных, электрических и др.

    В подпакете PlotField есть еще одна функция, представляемая в двух формах:

    • ListPlotVectorField [ {{vect 11, vect12,...},{vect21, vect22,...},...} ] — строит график векторного поля прямоугольного массива векторов vect xy ;
    • ListPlotVectorField [{{pt1, vect1,...}, (pt2,vect2,...},...}] —строит график векторного поля по списку векторов vect xy , расположенных в точках pti.

    Применение этой функции поясняет график, представленный на рис. 14.70.

    Рис. 14.70. Пример построения графика векторного поля с помощью функции ListPlotVectorField

    Приведенных примеров вполне достаточно, чтобы судить о возможностях подпа-кета PlotField. В справочной базе данных можно найти другие примеры построения графиков векторных полей.

    Представление полей в пространстве — PlotField3D

    Для представления векторных полей в пространстве служат функции подпакета PlotField3D:

    • PlotVectorField3D[{fx,fy,fz},{x,xmin,xmax},{y,ymin, ymax}, {z, zmin, zmax} ] — строит график векторного поля параметрически заданной трехмерной фигуры;
    • PlotGradientField3D[{fx,fy,fz},{x,xmin,xmax},{y,ymin,ymax}, {z, zmin, zmax} ] — строит график градиента векторного поля параметрически заданной трехмерной фигуры.

    Эти функции подобны описанным в предшествующем разделе, но используются для построения векторных полей не на плоскости, а в пространстве. Рисунок 14.71 показывает пример такого построения.

    Как видно из рис. 14.71, векторное поле строится отрезками прямых, а не стрелками. Последнее связано с тем, что по умолчанию задана опция VectorHeads-> False. Изменив ее на VectorHeads->True, можно получить представление векторного поля направленными стрелками. Кроме того, используя опцию Plot-Points->n, можно получить заданное число стрелок п по всем направлениям графика. Все это учтено на графике, представленном на рис. 14.72.

    Рис. 14.71. Пример построения графика векторного поля в пространстве отрезками прямых

    Рис. 14.72. Пример построения графика градиента поля направленными стрелками

    В подпакете PlotFieldSD имеется еще одна функция:

    • ListPlotVectorField3D[{ {ptl, vectl}, {pt2, vect2 },...} ] -строит график векторного поля в пространстве по данным векторов vecti, расположенных в точках pti.

    Рисунок 14.73 поясняет применение этой функции.

    Рис. 14.73. Пример построения графика векторного поля функцией ListPlotVectorReld3D

    Нетрудно заметить, что при большом числе векторов в пространстве графики этого типа теряют наглядность. Рекомендуется тщательно отлаживать их, используя весь набор опций (как его получить, описывалось неоднократно).

     

    gl14-60.jpg

    Изображение: 

    gl14-61.jpg

    Изображение: 

    gl14-62.jpg

    Изображение: 

    gl14-63.jpg

    Изображение: 

    gl14-64.jpg

    Изображение: 

    gl14-65.jpg

    Изображение: 

    gl14-66.jpg

    Изображение: 

    gl14-67.jpg

    Изображение: 

    gl14-68.jpg

    Изображение: 

    gl14-69.jpg

    Изображение: 

    gl14-70.jpg

    Изображение: 

    gl14-71.jpg

    Изображение: 

    gl14-72.jpg

    Изображение: 

    gl14-73.jpg

    Изображение: 

    7. Построение полиэдров — Polyhedra

     

    Построение полиэдров — Polyhedra

     

    Подпакет Polyhedra служит для создания регулярных пространственных фигур — полиэдров. Они задаются как графические примитивы и выводятся функцией Show:

    • Show [Polyhedron [polyname] ] — строит полиэдр с именем polyname в центре графика;
    • Show[Polyhedron[polyname,{х,у,z},scale]] — строит полиэдр с именем polyname с центром в точке {х, у, z} и параметром масштаба scale.

    Возможно задание следующих имен полиэдров: Tetrahedron, Cube, Octahedron, Dodecahedron, Icosahedron, Hexahedron, GreatDodecahedron, Small-StellatedDodecahedron, GreatStellatedDodecahedron и Greatlcosa-hedron. Пример построения полиэдра Icosahedron показан на рис. 14.74.

    Рис. 14.74. Построение полиэдра Icosahedron

    Возможность вывода с помощью функции Show двух полиэдров иллюстрирует рис. 14.75.

    Рис. 14.75. Вывод функцией Show двух полиэдров

    Для вывода полиэдров служит также ряд описанных ниже функций. Так, для построения звездчатых форм полиэдров предназначена функция Stellate:

    • Show [Stellate [Polyhedron [polyname] ] — построение звездчатых форм полиэдров;
    • Show[Stellate[Polyhedron[polyname], ratio] — построение звездчатых форм полиэдров с заданным отношением радиусов описанной и вписанной сфер ratio.

    Рисунок 14.76 показывает построение звездообразного (или игольчатого) полиэдра. Представленная фигура напоминает некоторых морских животных — ежей и звезд.

    Рис. 14.76. Построение звездчатой формы полиэдра

    Полиэдры, применяемые в геодезии, можно получить с помощью следующей функции:

    • Show [Geodesate [Polyhedron [polyname], n] — построение полиэдра с вершинами, лежащими на сфере, представляющего собой результат я-кратно-го разбиения на треугольники граней полиэдра polyname;
    • Show [Geodesate [Polyhedron [polyname] , n, {x, y, z}, radius] —построение полиэдра с вершинами, лежащими на сфере с заданным положением центра {x,y,z} и радиусом radius, представляющего собой результат п-кратного разбиения на треугольники граней полиэдра polyname.

    Рисунок 14.77 показывает применение этой функции.

    Для построения усеченных полиэдров предназначены следующие функции:

    • Show [Truncate [Polyhedron [polyname] ] ] — построение усеченных полиэдров;
    • Show [Truncate [Polyhedron [polyname], ratio] — построение усеченных полиэдров с заданным коэффициентом усечения ratio (от 0 до 0.5);
    • Show[OpenTruncate[Polyhedron[polyname]]] — построение полиэдров с открытым усечением;
    • Show[OpenTruncate[Polyhedron[polyname], ratio] — построение полиэдров с открытым усечением и заданным коэффициентом усечения ratio (от 0 до 0.5).

    Рис. 14.77. Построение полиэдра в виде сферы

    Рисунок 14.78 показывает построение усеченного полиэдра Усечение сделано так, будто полиэдр заполнен материалом. Поэтому усеченные области выглядят как дополнительные грани. Параметр ratio, задающий степень усечения, может иметь значения от 0 до 0.5 (в ином случае выводятся сообщения об ошибке в задании параметра).

    Рис. 14.78. Построение усеченного полиэдра

    Усечение может быть открытым — такой вариант реализуется функцией со словом Open в имени. В этом случае фигура выглядит так, будто она склеена из тонкого картона (рис. 14.79). При этом в местах усечения фигура прозрачна.

    Рис. 14.79. Построение усеченного полиэдра с открытыми местами усечения

    В заключение этого раздела отметим следующие функции:

    • First [Polyhedron [polyname] ] — возвращает список полигонов для указанного полиэдра;
    • Vertices [polyname] — возвращает список координат вершин полиэдра;
    • Faces [polyname] — возвращает список вершин, ассоциированных с каждой гранью.

    Они ничего не строят, а лишь возвращают специфические параметры полиэдров. Примеры применения этих функций представлены ниже:


    First[ Polyhedron[ Octahedron ]]

    {Polygon[{{0, 0, 1.41421}, {1.41421, 0, 0}, {0, 1.41421, 0}}],

    Polygon[{{0, 0, 1.41421}, {0, 1.41421, 0}, {-1.41421, 0, 0}}],

    Polygon[{{0, 0, 1.41421}, {-1.41421, 0, 0}, {0, -1.41421, 0}}],

    Polygon[{{0, 0, 1.41421}, {0, -1.41421, 0}, {1.41421, 0, 0}}],

    Polygon[{{1.41421, 0, 0}, {0, -1.41421, 0}, {0, 0, -1.41421}}],

    Polygon[ {{1.41421, 0, 0}, {0, 0, -1.41421}, {0, 1.41421, 0}}],

    Polygon[{{0, 0, -1.41421}, {0, -1.41421, 0}, {-1.41421, 0, 0}}],

    Polygon[{{0, 1.41421, 0}, {0, 0, -1.41421}, {-1.41421, 0, 0}}]}

    Vertices[ Octahedron ]

    {{0, 0, 1.41421}, {1.41421, 0, 0},

    {0, 1.41421, 0}, {0, 0, -1.41421},

    {-1.41421, 0, 0}, {0, -1.41421, 0}}

    Faces[ Octahedron ]

    {{1, 2, 3}, {1, 3, 5}, {1, 5, 6},

    {1, 6, 2}, {2, б, 4}, {2, 4, 3}, {4, б, 5}, {3,4,5}}

    Приведенные выше функции можно использовать на занятиях по стереометрии, где полученные с их помощью фигуры могут прекрасно иллюстрировать теоретические положения курса.

    Создание графических форм — Shapes

    Нередко желательно придать трехмерным объектам определенную форму, например кольца или бублика. Некоторые возможности для этого дают функции под-пакета Shapes. Основной из них является функция Show [Graphics3D [shape] ], которая производит отображение формы со спецификацией shape.

    С ней могут использоваться графические примитивы:

    • Cone [r, h, n] — конус с основанием радиуса r и высотой h на основе n-сто-роннего полигона;
    • Cylinder [r, h, n] — цилиндр радиуса r и высотой h на основе и-стороннего полигона;
    • Torus[rl,r2,n,m] — объемное кольцо с внешним и внутренним радиусами rl и г 2 и числом сторон каркаса n и m;
    • Sphere [r, n,m] — сфера радиуса г, составленная из многоугольников с параметрами n и m и числом сторон п(т - 2) + 2;
    • MoebiusStrip [rl, r2, n] — кольцо Мебиуса с радиусами rl и r2, построенное на основе полигона с 2n сторонами;
    • Helix[r,h,m,n] — плоская спираль радиусом г и высотой h c m витками на основе поверхности, разбитой на nxm четырехугольников;
    • DoubleHelix[r,h,m,n] — плоская двойная спираль радиусом r и высотой h с m витками на основе поверхности, разбитой на nxm четырехугольников.

    Возможно указание фигур без параметров. Это означает, что они выбираются по умолчанию следующими:


    Соnе[1, 1, 20]

    Cylinder[1, 1, 20]

    Helix[l, 0.5, 2, 20]

    DoubleHelix[l, 0.5, 2, 20]

    MoebiusStrip[1, 0.5, 20]

    Sphere[l, 20, 15]

    Torus[l, 0.5, 20, 10]

    На рис. 14.80 показан пример построения фигуры DoubleHelix без указания ее параметров с помощью функций Show и GraphicsSD.

    Рисунок 14.81 показывает построение другой фигуры — кольца Мебиуса с указанием параметров фигуры. Обратите внимание на то, что в обоих случаях автоматически обеспечивается функциональная окраска фигур, облегчающая их восприятие.

    Рис. 14.80. Пример построения фигуры без указания параметров

    Рис. 14.81. Построение кольца Мебиуса

    Для преобразования графических объектов в подпакете Shapes имеются следующие функции:

    • RotateShape [g,phi, theta,psi] — поворот графического объекта на углы phi, theta и psi;
    • TranslateShape [g, {х, у, z} ] — сдвиг графического объекта на расстояния {х,у, z};
    • Af fineShape [g, {scalel, svale2, scaleS} ] — умножение всех координат объекта g на указанные множители.

    Рисунок 14.82 иллюстрирует осуществление вращения для кольца Мебиуса. Эффект вращения хорошо заметен, если сравнить положения фигуры на рис. 14.81 и 14.82.

    Рис. 14.82. Кольцо Мебиуса после поворота

    Функции Show и Graphics3D позволяют строить трехмерные фигуры, которые пересекаются в пространстве. Пример такого построения приведен на рис. 14.83. Нетрудно заметить, что линии пересечения строятся с точностью до одной ячейки — полигона. Поэтому для получения качественных фигур надо увеличивать число полигонов, из которых фигуры синтезируются. Это, однако, увеличивает время построения фигур — оно становится заметным даже при работе на современных компьютерах с процессорами Pentium II и Pentium III.

    Рис. 14.83. Фигуры, пересекающиеся в пространстве

    В заключение этого раздела отметим, что функция WireFrame [g] дает «каркас» графического объекта, то есть делает все его грани прозрачными. Применение этой функции иллюстрирует пример, показанный на рис. 14.84.

    Рис. 14.84. Пример применения функции WireFrame для построения каркаса сферы

     

    gl14-74.jpg

    Изображение: 

    gl14-75.jpg

    Изображение: 

    gl14-76.jpg

    Изображение: 

    gl14-77.jpg

    Изображение: 

    gl14-78.jpg

    Изображение: 

    gl14-79.jpg

    Изображение: 

    gl14-80.jpg

    Изображение: 

    gl14-81.jpg

    Изображение: 

    gl14-82.jpg

    Изображение: 

    gl14-83.jpg

    Изображение: 

    gl14-84.jpg

    Изображение: 

    8. Примитивы, использующие сплайны — Spline

     

    Примитивы, использующие сплайны — Spline

     

    Подпакет Spline вместе с уже описанным подпакетом NumericalMath'SplineFit' (сплайновая регрессия) обеспечивает представление данных с помощью сплайна. В подпакете Spline определена единственная функция Spline [points, type], которая создает графический примитив, представляющий сплайн-кривую типа type (Cubic, Bezier или CompoziteBezier — см. описание подпакета NumericalMath'SplineFit').

    Среди ее опций важно отметить следующие (как и ранее, приведены значения, используемые по умолчанию): SplineDots->None, SplinePoints->25, Max-Bend->10.0 и SplineDivision->20.0.

    Рисунок 14.85 показывает задание массива из пяти точек на плоскости и соединение их отрезками прямых и кубическими сплайн-функциями. Хорошо видна аналогия сплайна с гибкой линейкой.

    Сплайн-функции в данном случае применяются в порядке задания точек в списке pts. В этом случае возможно создание замкнутых линий (рис. 14.85 является наглядным примером этого).

    Следует отметить, что хотя сплайн-аппроксимация дает хорошие результаты при умеренном числе точек, при малом их числе и неудачном выборе типа сплайнов результат может оказаться неудовлетворительным. Рисунок 14.86 иллюстрирует такую ситуацию.

    Рисунок 14.87 показывает возможность построения сплайн-функции вместе с точками, через которые она проходит.

    Рис. 14.85. Пример интерполяции пяти точек отрезками прямой и сплайнами

    Рис. 14.86. Пример срыва сплайн-интерполяции точек

    Рис. 14.87. Построение исходных точек и проходящей через них сплайн-функции

     

    Создание поверхностей вращения — SurfaceOfRevolution

    Одна из задач компьютерной графики — создание поверхностей вращения. Средства для этого дает подпакет SurfaceOfRevolution. Они представлены следующими функциями:

    • SurfaceOfRevolution [f, {x, xmin, xmax} ] — строит поверхность, образованную вращением кривой, описанной функцией f, при изменении х от xmin до xmax, в плоскости ху;
    • SurfaceOfRevolution [{fx, f у}, {t, tmin, tmax} ] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной на плоскости функцией {f x, f у}, в плоскости xz при изменении параметра t от tmin до tmax;
    • SurfaceOfRevolution[{fx,fy,fz},{t,tmin,tmax}] — строит поверхность, образованную вращением кривой, описываемой параметрически заданной в пространстве функцией {fx, fy, fz}, в плоскости xz при изменении параметра t от tmin до tmax;
    • SurfaceOfRevolution[f,{{x,xmin,xmax},{theta,thetamin,thetamax}}] — строит поверхность вращения кривой, описываемой функцией f, при угле theta, меняющимся от thetamin до thetamax.

    Рисунок 14.88 дает простой пример построения поверхности, образованной линией cos(x) при изменении х от 0 до 4л, вращающейся вокруг оси xz. Построение задано функцией SurfaceOfRevolution [f, {x, xmin, xmax} ]. В этом случае линия вращается в пределах угла от 0 до 2-я, поэтому поверхность получается круговой.

    Рис. 14.88. Фигура, образованная вращением линии cos(x)

    Следующий пример показывает ту же фигуру (рис. 14.89) в другом положении. Это достигается сменой угла обзора с помощью опции viewVertical.

    Рис. 14.89. Фигура рис. 14.88 в другом положении

    Пример применения функции SurfaceOfRevolutibn [ {fx, fy}, {t, tmin, tmax) ] представлен на рис. 14.90. Формируется этакое декоративное яйцо на подставке. Заменив в определении функции Cos [u] на Sin [u], можно получить изображение рюмки.

    Рис. 14.90. Построение декоративного яйца на подставке

    Рисунок 14.91 демонстрирует возможность построения объемной фигуры с вырезами. Все, что для этого надо, — удачно выбрать диапазон изменения угла вращения. Если он будет от 0 до 2л, то фигура будет сплошной, не содержащей вырезов.

    Рис. 14.91. Построение яйца с вырезом

    Для управления положением оси вращения служат следующие опции:

    • RevolutionAxis->{x, z } — задает поворот вокруг оси, соединяющей начало координат с точкой {х, z} в плоскости xz\
    • RevolutionAxis-> {х, у, z} — задает поворот вокруг оси, соединяющей начало координат с точкой {х, у, z}.

    Рисунок 14.92 иллюстрирует применение опции RevolutionAxis->{x, у, z }.

    Следующая функция позволяет построить фигуру вращения, образующая линия которой задается массивом точек:

    • ListSurfaceOfRevolution [ {point1,point2,...} ] — создает поверхность вращения, заданную массивом точек pointl, point2, ...;
    • ListSurfaceOfRevolution[{point1,point2,...}, {theta,thetamin,thetamax}] — создает поверхность вращения, заданную массивом точек, при угле вращения theta от thetamin до thetamax.

    Рисунок 14.93 показывает задание массива точек с помощью функции Table и фигуру вращения, полученную при использовании функции ListSurfaceOf-Revolution во второй форме.

    Рис. 14.92. Управление положением оси вращения

    Рис. 14.93. Пример построения фигуры вращения с образующей, заданной массивом точек

     

    Что еще есть в пакете расширения Graphics

    Помимо уже рассмотренных подпакетов пакет расширения Graphics содержит подпакеты ThreeScript и Common. Подпакет ThreeScript содержит функцию преобразования трехмерных графических объектов в программный код формата 3-Script, например:


    <<Graphics 'ThreeScript'

    obj = Graphics3D[Polygon[0,0,0, 0,1,0, 0,1,1]]

    • GraphicsSD •

    ThreeScript[ "object.ts", obj]

    object.ts

    !!object.ts

    % Graphics3D objects

    boundingbox

    0 0 0

    0 1 1

    viewpoint

    1.3 -2.399999999999999 2.

    ambientlight

    000

    lightsources

    1. 0. 1.

    1 0 0

    1. 1. 1.

    0 1 0

    0. 1. 1.

    0 0 1

    polygon

    0 0 0

    0 1 0

    0 1 1

    Подпакет Common содержит просто перечень системных символов (точнее, слов), которые приняты во всех подпакетах пакета Graphics. Вот этот список: Horizontal, MaxArrowLength, ScaleFactor, ScaleFunction и Vertical.

     

    Что нового мы узнали?

    В этом уроке мы научились:

    • Выполнять анимацию графиков различного типа.
    • Управлять цветами графиков.
    • Строить стрелки на графиках.
    • Строить графики комплекснозначных функций.
    • Строить объемные контурные графики.
    • Строить графики с окраской внутренних областей.
    • Строить графики специальных типов.
    • Строить графики неявных функций.
    • Выводить обозначения кривых — легенды.
    • Строить графики с множеством объектов.
    • Строить параметрические трехмерные графики.
    • Представлять поля на плоскости и в пространстве.
    • Строить объемные многогранники — полиэдры.
    • Создавать графические формы.
    • Работать с примитивами, использующими сплайны.
    • Создавать поверхности вращения.

     

    gl14-85.jpg

    Изображение: 

    gl14-86.jpg

    Изображение: 

    gl14-87.jpg

    Изображение: 

    gl14-88.jpg

    Изображение: 

    gl14-89.jpg

    Изображение: 

    gl14-90.jpg

    Изображение: 

    gl14-91.jpg

    Изображение: 

    gl14-92.jpg

    Изображение: 

    gl14-93.jpg

    Изображение: 

    Приложение. Данные по дополнительным функциям Mathematica

    Приложение. Данные по дополнительным функциям Mathematica 4

    1. Данные по дополнительным функциям Mathematica 4, К уроку 3

     

    Данные по дополнительным функциям Mathematica 4

    В этом приложении даны некоторые дополнительные функции систем Mathematica 3/4 и (иногда) примеры их применения. В основном это редко используемые функции, и они приведены для того, чтобы пользователь имел достаточно полную информацию по большинству из примерно 1000 функций, встроенных в ядро систем, и по ряду функций пакетов применения. Функции классифицированы по урокам, в которых описаны базовые функции близкого назначения.

    К уроку 3

    Дополнительные логические функции

    • DigitQtstring] — вырабатывает значение True, если все символы строки string являются цифрами от 0 до 9, иначе возвращает False.
    • Identity [ехрг] — возвращает ехрг (операция тождественности).
    • Implies [p, q] — представляет логическую импликацию р => q.
    • IntegerQ [ехрг] — возвращает True, если ехрг является целым числом, иначе False.
    • LetterQ [string] — вырабатывает True, если все символы строки string являются буквами, иначе False.
    • ListQ [ехрг] — возвращает True, если ехрг является списком, иначе False.
    • LowerCaseQ [string] — вырабатывает значение True, если все символы в строке являются строчными буквами (буквами нижнего регистра), иначе False.
    • MachineNumberQ[х] — возвращает True, если х является числом в машинном формате с плавающей точкой, иначе возвращает False.
    • MatchQ[expr, form] — возвращает True, если модель (образец) form соответствует ехрг, и возвращает False в противном случае.
    • NumberQ [ехрг] — возвращает True, если ехрг является числом, иначе False.
    • OddQ[expr] — возвращает True, если ехрг нечетное целое, иначе False.
    • OptionQ[e] — возвращает True, если е может считаться опцией или списком опций, иначе False.
    • PrimeQ [ехрг] — дает True, если ехрг является простым числом, иначе дает False.
    • TrueQfexpr] — возвращает True, если expr имеет значение True, иначе возвращает False.
    • UnsameQ — применяется в виде: Ihs =1 = rhs; возвращает True, если выражение Ihs не тождественно (не идентично) rhs, в противном случае возвращает False.
    • ValueQ [expr] — возвращает True, если было определено значение для ехрг, иначе возвращает False.
    • VectorQ [expr] — возвращает True, если expr является списком, но ни один из его элементов, в то же время, сам не является списком, иначе возвращает False.
    • VectorQ [expr, test] — возвращает True, только если test, будучи применен к каждому элементу ехрr, дает True.

    В систему Mathematica 4 помимо указанных выше функций дополнительно включены побитовые логические функции: BitAnd [n1, n2,...], BitOr [n1, n2,...], BitXor [n1, n2,...] и BitNot[n]. Их действие вполне очевидно.

    Элементарные функции

    • Abs [ z ] — возвращает абсолютное значение для действительного числа и модуль для комплексного z.
    • ArcCos [z] — возвращает арккосинус комплексного числа z.
    • ArcCoshfz] — возвращает значение обратного гиперболического косинуса комплексного аргумента z.
    • ArcCot [ z ] — возвращает значение арккотангенса комплексного аргумента z.
    • ArcCoth [ z ] — возвращает обратный гиперболический котангенс комплексного аргумента z.
    • ArcCsc [ z ] — возвращает арккосеканс комплексного аргумента z.
    • ArcCsch [z] — возвращает обратный гиперболический косеканс комплексного аргумента z.
    • ArcSecfz] — возвращает арксеканс комплексного аргумента z.
    • ArcSech [z] — возвращает обратный гиперболический секанс комплексного аргумента z.
    • ArcSin [ z ] — возвращает арксинус комплексного аргумента z.
    • ArcSinhfz] — возвращает обратный гиперболический синус комплексного аргумента z.
    • ArcTan [z] — возвращает арктангенс аргумента z.
    • ArcTan [х, у] — возвращает арктангенс отношения у/х вещественных х и у для квадранта, в котором лежит точка (х, у).
    • ArcTanh [ z ] — возвращает обратный гиперболический тангенс комплексного аргумента z.
    • Cos [z] — возвращает косинус аргумента z.
    • Cosh[z] — возвращает гиперболический косинус аргумента z.
    • Cot [ z ] — возвращает значение котангенса аргумента z.
    • Coth [ z ] — возвращает гиперболический котангенс аргумента z.
    • Csc [z] — возвращает значение косеканса z.
    • Csch[z] — возвращает гиперболический косеканс z.
    • Ехр [ z ] — возвращает значение exp(z).
    • Log [ z ] — возвращает натуральный логарифм аргумента z (логарифм по основанию Е).
    • Log [b, z] — возвращает логарифм по основанию b.
    • Sec [ z ] — возвращает секанс аргумента z.
    • Sech[z] — возвращает гиперболический секанс z.
    • Sign [х] — возвращает -1, 0 или 1, если аргумент х, соответственно, отрицательный, нулевой или положительный.
    • Sign [z] — возвращает отношение z/Abs [z] для комплексного числа z.
    • sin [z] — возвращает синус аргумента z.
    • Sinh[z] — возвращает гиперболический синус z.
    • Sqrt [z] — возвращает корень квадратный из аргумента z.
    • Tan [ z ] — возвращает тангенс аргумента z.
    • Tanh[z] — возвращает гиперболический тангенс z.

    Дополнительные функции для работы со списками

    • Accumulate [f, g [el, e2,...]] —возвращает g[el,f [el,e2] , f'[f [el,e2] ,e3 ],...].
    • Cases [{el, e2,...}, pattern] — возвращает список тех ei, которые соответствуют заданному шаблону pattern.
    • Cases [ {el,...}, pattern -> rhs] или Cases [ {el,...}, pattern :> rhs] — возвращает список значений rhs, соответствующих тем ei, которые подходят под шаблон pattern.
    • CoefficientList [poly, var] — возвращает список коэффициентов перед степенями переменной var в полиноме poly, начиная со степени 0.
    • CoefficientList [poly, {varl, var2,...}] — возвращает матрицу коэффициентов vari.
    • $CommandLine — список строк, возвращающий элементы командной строки, с помощью которой была вызвана Mathematica.
    • Compose [а, b, с, d] — возвращает а [b [с [d] ]].
    • ComposeList [ {f I, f2,...}, х] — формирует список формы {x,fl[x],
    • ComposeSeries [s, t, u,...] — объединяет степенные ряды, подставляя в ряд s ряд t, затем ряд и и т. д. Ряды (исключение для первого элемента) должны начинаться положительной степенью переменной.
    • Composition [f1, f2, f3,...] — представляет композицию функций fl, f2, f 3, ...
    • FoldList[f, x, {a, b,...}]—возвращает {x, f [x, a] , f [f [x, a] ,b],...}.
    • HeadCompose [a, b, c, d] — возвращает a [b] [c] [d].
    • bistable — атрибут, который может назначаться символу f для указания того, что если функция f получит аргумент (аргументы) в виде списка, то и результатом будет являться список.
    • MemberQ [list, form, levelspec] — тестирует все части списка list, определяемые спецификацией уровня levelspec.
    • Partition [list,n] — разбивает список list на неперекрывающиеся части длиной п. Если количество элементов в списке не делится нацело на п, то последние k (k < п) элементов удаляются.
    • Partition [list, n, d] — как и предшествующая функция, дает разбиение списка, но со сдвигом между соседними подсписками, равным d. При d<n подсписки перекрываются.
    • Permutations [list] — генерирует список всех возможных перестановок элементов в списке list.
    • Position [expr, pattern] — возвращает список позиций в ехрг, в которых размещаются объекты, сопоставимые с указанным шаблоном pattern.
    • Position [expr, pattern, levspec] — выполняет поиск только объектов, находящихся на уровнях, указываемых levspec.
    • RealDigits [x] — возвращает список цифр в приближенном вещественном числе х вместе с количеством цифр слева от десятичной точки, присутствующих в научной записи числа.
    • RealDigits [x,b] — возвращает список цифр числа х по основанию Ь.
    • Signature [list] — дает сигнатуру перестановки, необходимой для размещения элементов списка list в каноническом порядке.
    • SingularValues [m] — возвращает особое значение декомпозиции для чис-ловой матрицы т. Результатом будет список {u, w, v}, где w — список ненулевых особых значений, а исходная матрица m может быть записана как Соп-jugate[Transpose[u]].DiagonalMatrix[w].v.
    • SequenceLimit [list] — возвращает по эпсилон-алгоритму Винна аппроксимацию предела последовательности, первые несколько членов которой зада-. ны в виде списка list. Этот алгоритм может давать конечные значения для расходящихся последовательностей.
    • SubValues [f ] — возвращает список правил преобразования, относящихся ко всем подзначениям (значениям для f [х,...][...] и т.д.), определенным для символа f.
    • $SuppressInputFormHeads — представляет собой список заголовков тех выражений, чьи Input Form не должны автоматически пересылаться в программный препроцессор.

    Функции расширения списков нулями

    PadLeft[list] PadLeft[list,n]

    PadLeft[list,f,n] PadRight[list]

    PadRight[list,n]

    PadRightLeft[list,n]

    Примеры их применения:

    • PadLeft [ {a,b, с}, 6] — возвращает список {0, 0, 0, a,b, с}.
    • PadRight [ {a,b, с}, 6] — возвращает список {а,b, с, 0, 0,0}.

    Дополнительные матричные функции

    • MatrixExp [m] — возвращает экспоненциал матрицы m.
    • MatrixPower [m, n] — возвращает п-ю степень матрицы m.
    • MatrixQ [ехрг] — возвращает True, если ехрг является списком списков, который может представлять матрицу, иначе возвращает False.
    • MatrixQ [expr, test] — возвращает True, только если test дает True в применении к каждому элементу матрицы в ехрг.
    • Minors [m, k] — возвращает матрицу, составленную из определителей всех kxk субматриц m.
    • NullSpace [m] — возвращает список векторов, которые формируют базис для нулевого пространства матрицы m
    • Pivoting — опция, относящаяся к функциям декомпозиции матрицы; указывает, что должен выполняться поворот столбца. Результат имеет форму {Q, R, Р}, где Р — матрица перестановок, такая что имеет место соотношение M.P=Conjugate [Transpose [Q] ] .R, где М— начальная (исходная) матрица.
    • Pseudolnverse [m] — ищет псевдообратную матрицу для прямоугольной матрицыm.
    • QRDecomposition [m] — возвращает QR-разложение (декомпозицию) для числовой матрицы m. Результат представляет собой список {q, r), где q — ортогональная матрица, r — верхняя треугольная матрица.
    • ZeroTest — опция для LinearSolve и других линейных алгебраических функций; дает функцию для применения ее к сочетаниям (комбинациям) из матричных элементов с целью определения, следует ли полагать их равными нулю.

     

    2. К уроку 4

     

    К уроку 4

    Опции численного интегрирования

    • AccuracyGoal — указывает число цифр, задающих точность промежуточных результатов.
    • Compiled — указывает на возможность компиляции функции.
    • GaussPoints — устанавливает количество точек в гауссовой части квадратуры Гаусса—Кронрода.
    • MaxPoint — задает максимальное число точек при интегрировании.
    • MaxRecursion — задает максимальную глубину рекурсии.
    • Method -> DoubleExponential — назначает для использования алгоритм двойной экспоненциальной сходимости.
    • Method -> MultiDimensional — назначает для использования многомерный алгоритм. Имеет смысл только для интегрирования кратных интегралов.
    • Method -> GaussKronrod — выбирает для использования адаптивную квадратуру Гаусса—Кронрода. При многомерном интегрировании GaussKronrod обращается к декартову произведению одномерных квадратурных формул Гаусса—Кронрода.
    • Method -> Trapezoidal — назначает для решения рекурсивный метод трапеций. Он особенно успешен, если подынтегральная функция периодична и интервал интегрирования составляет точно один период. Для многомерного интегрирования данный метод обращается к декартову произведению одномерных правил трапеций.
    • MinRecursion — задает минимальную глубину рекурсии.
    • PrecisionGoal — задает погрешность вычислений.
    • SingularityDepth — указывает, насколько глубокая рекурсия допустима перед тем, как начинается изменение переменной на границах интервала интегрирования.

     

    3. К уроку 6

     

    К уроку 6

    Дополнительные специальные функции

    • ArithmeticGeometricMean [а, b] — арифметико-геометрическое среднее значение аргументов а иb.
    • IncludeSingularTerm — опция для LerchPhi и Zeta, определяющая, следует ли включать члены вида (k+a) A -s при k + а == 0.
    • InverseErf [s] — инверсная функция ошибок.
    • InverseErfс [s] — инверсная дополнительная функция ошибок.
    • InverseGammaRegularized[a, s] — инверснаярегуляризированнаянеполная гамма-функция.
    • InverseBetaRegularized[s,a,b] — инверсная регуляризированная неполная бета-функция.
    • InverseSeries [s] — берет ряд s, порождаемый директивой Series, и возвращает ряд для функции, обратной по отношению к функции, представленной рядом s.
    • InverseSeries [s, у] — обратный ряд по переменной у.
    • InverseWeierstrassP [ {Р, Р'}, g2, gЗ ]— возвращает величину и, такую что P=WeierstrassP[и, д2, дЗ] иP'=WeierstrassPPrirne[и, д2, дЗ]. Следует заметить, что Р и Р' не являются независимыми.
    • JordanDecomposition[A] — возвращает список {S,J}, такой что A=S.J. Inverse [S] и J является канонической формой Жордана для матрицы А.
    • LerchPhi[z, s, a] — трансцендентная функция Лерча Ф(г, s, a).
    • MathieuC[a, q, z] и MathieuS [a, q, z] — функции Матье.
    • MathieuCPrime [a, q, z] и MathieuSPrime [a, q, z] —производные от функций Матье.
    • MathieuCharacteristic** [r, q] — характеристическая функция Матье (** может иметь значения А, В и Exponent).
    • MeijerG[{{a 1 ,...,a /] },{a ji+1 ,...,a p }}, {{bl,...,bm}, {b m+1 ,...,b q }}, z] - G-функция Мейджера.
    • MoebiusMu [n] — значение функции Мебиуса ц(и).
    • PolyLogtn, z] — п-я полилогарифмическая функция от z.
    • RiemannSiegelTheta [t] — аналитическая функция g(E), удовлетворяющая уравнению RiemannSiegelZ[t] = Exp[I RiemannSiegelTheta[t]] Zeta[l/2 + I t]. Аргумент t не обязательно должен быть вещественным, но если является таковым, тогда RiemannSiegelTheta[t]] = Im[LogGamma[1/4 + I t/2]]-- t Log[Pi]/2.
    • RiemannSiegelZ [t] — возвращает значение Exp[I RiemannSiegelTheta[t]] Zeta[l/2 + I t].
    • SphericalHarmonicY [1, m, theta, phi] — сферическая гармоника уде, Ф ).
    • Zeta[s] — дзета-функция Римана (s).
    • Zeta[s, а]— возвращает значение обобщенной дзета-функции Римана.

    Ниже даны примеры использования некоторых из этих функций.

    Ввод (In)

    Вывод (Out)

    LerchPhi[2.+3.*I,l,2] 0.0145978+ 0.256525 I ..
    InverseErf [0 . 1] 0.088856

    InverseErf с [0.1]

    1.16309

    InverseGammaRegularized[l, 0.5]

    0.693147

    InverseBetaRegularized[0.5, 1, 2]

    0.292893

    MathieuC[l,2,0.1]

    0.196600+0.879889 I

    MathieuS[l,2,0.1]

    0.133005- 0.0297195 I

    MathieuCharacteristicAfl . 5,2.]

    2.85238

    Mei jerG[ { {1, 1), {)},{{!) Л 0}),x]

    Log[l+x]

    MoebiusMu[3]

    -1

    NBernoulliB[2]

    0.166667

    NBernoulliB[l,5]

    -0.5

    PolyLog[2,2.+3.*I]

    -0.280988 + 3.01725 I

    RiemannSiegelTheta [1 . ]

    -1.76755

    RiemannSiegelZ [1 . ]

    -0.736305

    SphericalHarmonicY [ 0 . 1 , 0 . 5 , Pi/3 , Pi/2 ]

    0.195671 + 0.195671 I

    Zeta[0.1]

    -0.603038

    Zeta[0.1,0.5]

    -0.0432821

     

    Функции Струве

    В Mathematica 4 добавлены новые встроенные функции struveH [n, z ] и StruveL [n, z ], вычисляющие функции Струве порядка n для комплексного аргумента z.

     

    4. К уроку 7

     

    К уроку 7

    Функции задания формата

    • CForm[expr] — выполняет вывод ехрг в форме, принятой для языка С.
    • ColonForm[a,b] — выводит в виде а:b.
    • ColumnForm[ {el, e2,...} ] — дает вывод в виде столбца с el над е2 и т.д.
    • ColumnForm[list, horiz] — при выводе дает горизонтальное выравнивание каждого элемента.
    • ColumnForm[list, horiz, vert] — при выводе дает как горизонтальное, так и вертикальное выравнивание всего столбца.
    • FontForm[expr, {"font", size}] — устанавливает шрифт "font" и размер size, с которыми выводится выражение ехрг.
    • Format [ехрг] — выводит ехрг в форматированном виде.
    • Format [expr, type] — возвращает формат для указанного типа type.
    • InputForm[expr] — выводит ехрг во входной форме.
    • NumberForm[expr, n] — выполняет вывод приближенного представления вещественного значения ехрr с точностью до n цифр.
    • OutputForm[expr] — выполняет вывод ехрr в стандартной выходной форме системы Mathematica.
    • PaddedForm[expr, n] — выводит все числа ехрr, заполняя оставшиеся места так, чтобы каждое число содержало n знаков.
    • PaddedForm[expr, {n, f} ]—выводит ехрг с приближенными вещественными числами, имеющими ровно f цифр справа от десятичной точки.
    • PrecedenceForm[expr, prec] — выводит выражение ехрг, заключенное в скобки так, как если бы оно содержало оператор с приоритетом ргес.
    • Prefix [f [ехрг] ] — выводит функцию f [ехрг] в префиксной форме: f @ ехрг.
    • Prefix [f [ехрг] , h] — выводит функцию f [ехрг] с заголовком h, то есть как hexpr.
    • $ Print Forms — является списком базисных форм вывода. Он автоматически обновляется при создании описаний Format, использующих новые формы вывода.
    • TextForm[expr] — выполняет вывод ехрг в обычном текстовом формате.
    • Unevaluated [ехрr] — представляет невычисляемую форму выражения ехрг, когда оно используется как аргумент функции.

    Для функции Number Form и родственных функций используется ряд опций:

    • DigitBlock — указывает максимальную длину групп разрядов при использовании разделителей.
    • FormatType — указывает тип формата по умолчанию при выводе выражений.
    • NumberFormat — указывает, как мантисса, основание и порядок должны быть скомпонованы в конечную форму вывода.
    • NumberPadding — задает символы, которые будут использоваться для заполнения с левой и правой сторон числа.
    • NumberPoint— задает строку для использования в качестве десятичной точки.
    • NumberSeparator — задает строку для вставки между группами разрядов.
    • Right — используется для указания правостороннего выравнивания в таких формах вывода, как ColumnForm и TableForm.

    Дополнительные функции и опции ввода/вывода

    • Attributes [symbol] — возвращает список атрибутов символа symbol.
    • Bastchlnput — возвращает True, если ввод в текущем сеансе работы производится непосредственно в ядро системы в пакетном режиме, и False в противном случае.
    • $BatchOutput — возвращает True, если вывод в текущем сеансеработы пересылается в пакетном режиме и пригоден для чтения другими программами, и False в ином случае.
    • Characters ["string"] — возвращает список символов в строке.
    • Dialog[ ]— инициирует диалог (часто используется совместно с функцией Return).
    • Dialog [ехрг] — инициирует диалог с использованием ехрг как текущего значения.
    • Dialoglndent [d] — возвращает величину отступа для строк ввода и вывода, которая используется в диалогах с глубиной вложенности d.
    • FullDefinition [s1, s2,...] — выводит определения, присвоенные символам si и всем символам, от которых данные символы зависят.
    • Information [symbol] — выводит информацию о символе symbol.
    • $ Input — глобальная переменная, значением которой является имя потока, из которого Mathematica в данный момент ожидает поступления входной информации.
    • $ Language — является списком строк, которые дают названия языков, используемых для сообщений.
    • Normal [ехрг] — преобразует ехрг из ряда специальных форм в нормальное выражение.
    • Out [n] — глобальный объект, соответствующий выводу, произведенному в и-й выходной строке (ячейке).
    • % — возвращает последний произведенный результат.
    • % % — возвращает предпоследний результат.
    • %%...% (k раз) — возвращает k-й предшествующий результат.
    • %k — возвращает результат из k-й выходной строки (абсолютная адресация).
    • Shallow [ехрг] — выводит первые четыре уровня ехрг, за исключением частей ехрг, длина которых превышает 10. Остальные части выводятся в структурной (скелетной) форме.
    • Shallow [expr, depth] — выводит части выражения ехрг до указанной глубины depth. Остальные части выводятся в структурной (скелетной) форме.
    • Shallow [expr, {depth, length}] — возвращает в структурной (скелетной) форме также и те части, длины которых выше указанного предела length.
    • Shallow[expr, {depth, length}, form] — использует скелетную форму для любых частей выражения, сопоставимых с указанным шаблоном form.
    • Short [expr] — выводит краткую форму ехрг, не превышающую длину одной строки.
    • Short [expr, n] — выводит ехрг в форме длиной около n строк.
    • SpaceFormfn] — выводит n пробелов.

    Некоторые из этих функций используют приведенные ниже опции:

    • Above — опция, используемая для установки выравнивания в таких формах вывода, как ColumnForm и TableForm.
    • Bottom— является возможным значением опции TableAlignments для TableForm.
    • Below — используется для указания выравнивания в таких формах вывода, как ColumnForm и TableForm.
    • Center — устанавливает выравнивание в таких формах вывода, как Column-Form и TableForm.
    • DialogProlog — опция для Dialog, которая позволяет вычислить выражение до начала диалога.
    • DialogSymbols — опция для Dialog, которая возвращает список символов, чьи значения будут локализованы в диалоге.
    • Heads — опция для функций, которые используют спецификации уровня, указывающая, следует ли включать заголовки выражений.
    • IgnoreCase — опция для функций манипулирования строками и функций поиска, которая указывает, следует ли считать прописные и строчные буквы эквивалентными.
    • SignPadding — опция для NumberForm и родственных функций, указывающая, что заполнитель (если он используется) должен размещаться после знака числа.

    Приведем примеры использования этих форм вывода.


    Ввод (In) Вывод (Out)
    Dialog [] ^n Return [a+b+c] (a+b+c) n
    Dialog []*y Return [x] xy
    Shallow [Exp [х ^ (a/b) ] /x/a] e Power[ /ax
    Short [Exp [х ^ (a/b) ] /x/a, 1] e x^a/b /ax

    В этих примерах надо обратить особое внимание на применение функции Dialog. При ее начальном вызове строка вывода не формируется. Она появляется после исполнения ячейки ввода с функцией Return, причем ячейки ввода в пределах тела диалога нумеруются так: (Dialog) In[n]:=.

    Функции для работы со строками

    • $StringConversion — возвращает установочное значение по умолчанию для опции StringConversion в выходных функциях (функциях вывода).
    • StringConversion — опция для функций вывода (выходных функций), которая устанавливает, каким образом должны быть выведены строки, содержащие специальные символы.
    • StringDrop ["string", n] — возвращает строку "string", отбрасывая первые n ее символов.
    • StringDrop ["string", -n] — возвращает строку "string", отбрасывая последние n символов.
    • StringDrop ["string", {n} ] — возвращает строку "string", удалив n-й символ.
    • StringForm["controlstring", exprl,...] — выводит текст контрольной (управляющей) строки controlstring с внедрением в нее печатных форм expri.
    • Stringlnsert ["string", "snew", n] — формирует новую строку, помещая "snew" внутрь строки "string", начиная с позиции п.
    • Stringlnsert ["string", "snew", -n] — делает вставку, отсчитывая позицию n с конца "string".
    • StringJoin (объединение строк) — применяется в виде "s1"<>"s2"<>...
    • StringMatchQ [ "string", "pattern" ] — вырабатывает True, если "string" сопоставим с указанным строковым шаблоном, и False — в противном случае.
    • $StringOrder — дает порядок символов для использования в строках сортировки и символьных именах.
    • StringPosition ["string", "sub"] — возвращает список начальных и конечных символьных позиций, в которых "sub" появляется как подстрока строки "string".
    • StringPosition ["string", "sub", k] — возвращает только первые k вхождений "sub".
    • StringPosition ["string", {"subl", "sub2",...}] — возвращает позиции всех "subi".
    • StringQ [expr] — возвращает True, если ехрг является символьной строкой, иначе дает False.
    • StringSkeleton [n] — представляет последовательность из n пропущенных символов в строке, выведенной с помощью Short.

    Стандартные функции для работы с файлами и директориями

    • CopyDirectory ["dirl", "dir2"] — копирует директорию dirl в dir2.
    • CopyFile["filel", "file2"] — копирует файл filel в file2.
    • CreateDirectory ["dir"] — создает директорию.
    • DeleteDirectory [ "dir" ] — удаляет указанную директорию. Опция DeleteContents позволяет указать, следует ли удалять непустую директорию.
    • DeleteFile ["filename"] — удаляет файл filename.
    • DeleteFile [ {"file1", "file2",...} ]—удаляет список файлов.
    • Display [channel, graphics] — направляет графический объект graphics или звук в указанный выходной канал channel.
    • $DumpSupported — имеет значение True, если Dump может использоваться в данной версии системы Mathematica, и False в противном случае.
    • Encode ["source", "dest"] — пишет закодированную версию файла source в файл dest. Вызов «dest декодирует файл перед чтением его содержимого.
    • Encode ["source", "dest", "key"] — производит закодированный файл, который нужно считывать, используя Get [ "dest", "key" ].
    • FileNames [forms, dirs, n] — возвращает список файлов в поддиректориях вплоть до уровня п.
    • InputStream["name", n] — объект, представляющий входной поток для таких функций, как Read и Find.
    • OutputStream [ "name", n] — объект, представляющий выходной поток для функций типа Write.
    • $PathnameSeparator — строка, выполняющая роль разделителя имен каталогов и файлов в указателях пути, используемых данной операционной системой.
    • PageHeight — опция для потоков вывода, которая указывает количество строк текста, выводимых между разрывами страниц.
    • PageWidth — опция, которая может устанавливаться для выходных потоков, указывая ширину строки выводимого текста.
    • Read [stream] — читает одно выражение из входного потока stream и возвращает это выражение.
    • Read[stream, type] — читает один объект указанного типа type из входного потока stream.
    • Read [stream, {typel, type2,...}] — читает последовательность объектов указанных типов typei из входного потока stream.
    • RenameDirectory ["dirl", "dir2"] — переименовывает каталог dir1 в dir2.
    • RenameFile ["filel", "file2"] — переименовывает файл с именем filel в файл с именем f ile2.
    • ResetDirectory [ ] — сбрасывает (восстанавливает) имя текущего рабочего каталога в его предыдущее значение.
    • ResetMedium["file", options] — сбрасывает (восстанавливает) опции, связанные с файлом file, который уже открыт.
    • ResetMedium[options] — сбрасывает опции для стандартного вывода.
    • SetDirectory ["dir"] — устанавливает текущий рабочий каталог.
    • SetFileDate ["filename"] — устанавливает датой модификации файла текущую дату.
    • SetFileDate [ "filename", date] — устанавливает датой модификации указанную дату date. Дата должна быть представлена в формате функции Date: {год, месяц, день, час, минута, секунда}.
    • SetOptions [stream,...] или SetOptions [ "name",...] — устанавливает опции, связанные с указанным потоком stream.
    • Socket — возможное значение, возвращаемое FileType и родственными функциями.
    • StringToStream["string"] — открывает входной поток для чтения из строки.

    Мы не приводим примеров использования этих функций ввиду очевидности их действия и отсутствия прямого отображения результата.

    Функции поиска записей в файлах

    • Find [stream, "text"] — ищет первую запись во входном потоке stream, которая содержит указанную строку.
    • Find[stream, {"textl", "text2",...} ] — ищет первую запись, в кото-рой содержится любая из указанных строк.
    • FindList ["filename", "text"] — возвращает список всех записей в файле filename, которые содержат указанную строку.
    • FindList ["filename", {"textl", "text2",...} ] - дает список всех записей, содержащих любую из указанных строк.
    • FindList [{ "filename1",...}, text] — возвращает список записей, содержащих указанные строки, в любом из данных файлов.
    • FindList [files, text, n] — возвращает только первые п найденных записей.

    Это достаточно редкие в применении функции, так что заинтересованный пользователь может опробовать их самостоятельно.

    Функции открытия и закрытия файлов и потоков

    • Close [stream] — закрывает поток stream.
    • EndOfFile — символ, возвращаемый командой Read при достижении ею конца файла.
    • $lgnoreEOF — указывает, должна ли Mathematica завершать работу, получив признак конца файла на входе.
    • OpenAppend["filename"] — открывает файл для подсоединения (конкатенации — присоединения в конец) к нему вывода и возвращает объект OutputStream.
    • OpenRead [ "filename" ] — открывает файл для чтения данных и возвращает объект InputStream.
    • OpenTemporary [ ] — открывает временный файл, в который может записываться вывод, и возвращает объект OutputStream.
    • OpenWrite ["filename" ] — открывает файл для записи в него вывода и возвращает объект OutputStream.
    • TextRendering — опция, которая указывает, каким образом должен воспроизводиться текст в данном выходном файле.

     

    5. К уроку 8

     

    К уроку 8

    Опции функции Plot

    Ниже дан список опций, при этом знаком «*» отмечены опции, применяемые как для двумерной, так и для трехмерной графики:

    • *AspectRatio — задает пропорцию графика — отношение высоты к ширине (значение по умолчанию, 1/GoldenRatio, задает отношение по правилу золотого сечения — около 1.618).
    • *Axes — задает прорисовку координатных осей (False — осей нет, True — строятся обе оси, а список {Boolean, Boolean} задает построение осей раздельно).
    • *AxesLabel — задает вывод меток для осей в виде {"stringX", "stringY"}
    • * AxesOrigin — задает начало отсчета для осей (указывает точку пересечения осей).
    • *AxesStyle — задает стиль вывода осей с помощью ряда директив.
    • *Background — задает цвет фона в одной из трех цветовых систем.
    • *ColorOutput — задает цвет построений в одной из трех цветовых систем.
    • *DefaultFont — задает шрифт для текста в графиках.
    • Frame — задает прорисовку рамки вокруг графика при значении True и ее отсутствие при False.
    • FrameLabel — задает надписи на гранях рамки (FrameLabel -> { "Text1", "Text2", "Text3", "Text4" }, причем построение идет по часовой стрелке, начиная с нижней надписи).
    • FrameStyle — задает стиль граней рамки с помощью ряда директив.
    • FrameTicks — задает прорисовку штриховых меток для граней рамки.
    • GridLines — задает прорисовку линий сетки.
    • *PlotLabel — задает вывод титульной надписи (PlotLabel->"Text").
    • *PlotRange — задает масштаб построения в относительных единицах.
    • *PlotRegion — задает область построения в относительных единицах.
    • RptateLabel — задает разворот символьных меток на вертикальных осях фрейма с тем, чтобы они стали вертикальными.
    • *Ticks — устанавливает штриховые метки для осей. Кроме того, имеется ряд характерных для функции Plot дополнительных опций:
    • Compiled — задает компиляцию функции перед выводом.
    • MaxBend — задает максимальный угол излома между сегментами кривой.
    • PlotDivision — задает количество делений при построении гладкой кривой.
    • PlotPoints — задает число точек выборки, участвующих в построении.
    • PlotStyle — задает стиль линий или точек графика.

    Графические примитивы функции Graphics

    • Circle[{x, у}, r]— строит окружность с радиусом г и центром в точке {х, у}.
    • Circle [{х, у), {rх, rу) ] — строит эллипс с центром {х,у} и полуосями гх и гу.
    • Circle[{x, у}, r, {thetal, theta2 }]— представляет дугу окружности радиусом г с центром {х, у} и углами концевых точек thetal и theta2.
    • Disk[{x, у), r]— является примитивом двумерной графики, представляющим закрашенный круг радиусом г с центром в точке {х, у}.
    • Disk [ {х, у}, {rх, rу} ] — строит закрашенный овал с полуосями rх и rу и центром {х, у}.
    • Disk[{x, у}, r, {thetal, theta2}]—строит сегмент круга радиусом г с центром {х, у} и углами концевых точек thetal и theta2.
    • Line [ {pt1 pt2,...} ] — строит линию, соединяющую последовательность точек.
    • Point[{x,y}] — строит точку с координатами х и у.
    • Polygon [{x1, y1},{х2, у2},...] — построение полигона с закраской.
    • PostScript [ "string" ] — построение объекта, заданного на языке PostScript.
    • Rectangle [ {xmin, ymin}, {xmax, ymax}]—строит закрашенный прямоугольник, ориентированный параллельно осям и намеченный координатами противолежащих углов.
    • Rectangle [ {xmin, ymin}, {xmax, ymax}, graphics] — строит закрашенный прямоугольник, заполненный в соответствии с указаниями в функции graphics и заданный координатами противолежащих углов.
    • Raster [{{all, a 12,...},...}] — строит прямоугольный массив ячеек яркости.
    • RasterArray [ {{gll, g!2,...},...}] — строит прямоугольный массив ячеек, окрашенных в соответствии с графическими директивами gij.
    • Text[expr, coords] — выводит текст, соответствующий печатной форме выражения ехрг, центрированный в точке с указанными координатами coords.

    Опции трехмерной графики

    • AmbientLight — задает директиву фоновой подсветки сцены.
    • AxesEdge — определяет, на каких гранях ограничительного параллелепипеда («ящика») должны выводиться оси.
    • Boxed — указывает, надо ли рисовать контуры (ребра, грани) ограничительного параллелепипеда в трехмерном изображении.
    • BoxRatios — задает значение отношений длин сторон для ограничительного параллелепипеда трехмерного изображения.
    • BoxStyle — задает прорисовку ограничительного параллелепипеда.
    • Background — задает цвет фона.
    • ClipFill — определяет, как должны выводиться отсекаемые части поверхности.
    • ColorFunction — определяет функцию, используемую для функциональной окраски.
    • ColorOutput — задает тип производимого цветового вывода.
    • Def aultFont — возвращает шрифт по умолчанию для текста в графике.
    • DefaultColor — задает цвет по умолчанию для линий, точек и т. д.
    • $DisplayFunction — задает значение по умолчанию для опции Display-Function в графических функциях.
    • DisplayFunction — определяет функцию, которая применяется к графическим и звуковым примитивам для их отображения.
    • Epilog — опция для графических функций, дающая список графических примитивов, которые должны воспроизводиться после воспроизведения главной части графики.
    • FaceGrids — опция для функций трехмерной графики; устанавливает вывод линий сетки на гранях (лицевых сторонах) ограничительного параллелепипеда.
    • HiddenSurf асе — определяет, нужно или нет удалять невидимые линии каркаса.
    • Lighting — указывает, следует ли моделировать освещение в трехмерных изображениях.
    • LightSources — опция для Graphics3D и родственных функций, которая устанавливает возможности (свойства) точечных источников света для моделируемого освещения.
    • Mesh — указывает, следует ли прорисовывать явно заданную х-у-сетку.
    • MeshRange — устанавливает диапазон (область изменения) х- и y-координат, которые соответствуют массиву заданных величин z.
    • MeshStyle — задает стиль вывода линий сетки.
    • SphericalRegion — указывает, следует ли конечный образ масштабировать так, чтобы сфера, рисуемая вокруг трехмерного ограничительного параллеле-пипеда, вписывалась в область отображения.
    • Polygonlntersections — опция для Graphics3D, которая определяет, следует ли пересекающиеся многоугольники оставлять без изменения.
    • Prolog — опция для графических функций, дающая список графических примитивов, которые визуализируются до вывода главной части графики.
    • RenderAll — опция для Graphics3D, которая указывает, должен ли код PostScript генерироваться для всех многоугольников (включая невидимые).
    • Shading — опция для Surf aceGraphics, указывающая, следует ли выполнять затенение поверхностей.
    • ToColor [color, form] — превращает color в form; если form представляет собой функцию GrayLevel, RGBColor или CMYKColor, то color превращается в нее. В противном случае вычисляется form [color] — ожидается, что результат будет допустимой цветовой директивой.
    • ViewCenter — задает масштабные координаты точки, оказывающейся в центре области отображения в окончательном графике.
    • Viewpoint — меняет точку пространства, из которой рассматривается объект.
    • ViewVertical — устанавливает, какое направление в относительных координатах должно быть вертикальным в окончательном образе.

    Дополнительные директивы и функции трехмерной графики

    • CMYKColor [cyan, magenta, yellow, black] — устанавливает составляющие цвета.
    • EdgeForm [g] — указывает, что грани многоугольников должны быть нарисованы с применением графической директивы или списка директив.
    • FaceForm [gf, gb] — указывает, что передние грани (лицевые поверхности) многоугольников должны выводиться с применением графического примитива gf, a задние грани (невидимые поверхности) — посредством gb.
    • FullAxes [graphics] — возвращает опции осей графического объекта.
    • FullGraphics [g] — берет графический объект и производит новый, в котором объекты, определяемые графическими опциями, даются как явные (точные) списки графических примитивов.
    • FullOptions [expr] — возвращает полные установки опций, которые явно определены в выражении типа графического объекта.
    • Hue [h] — указывает, что графические объекты, которые последуют, должны будут по возможности отображаться в цвете h.
    • Hue [h, s, b] — определяет цвета в значениях оттенка h, насыщенности s и яркости b.
    • LineForm[g] — устанавливает, что вывод линий следует выполнять с применением графической директивы g или списка графических директив g.
    • PointForm [g] — указывает, что вывод точек следует выполнять с применением графической директивы g.
    • PointSize[r] — указывает, что точки при последующем выводе должны изображаться по возможности в виде кругов радиусом г (доля от общей ширины графика).
    • RGBColor [red, green, blue] — указывает, что последующие графические объекты должны отображаться заданной совокупностью цветов. Значения red (красный), green (зеленый) и blue (синий) указываются в относительных единицах — от 0 до 1.
    • SurfaceColor [dcol] — устанавливает, что последующие многоугольники должны действовать как рассеивающие (диффузные) отражатели света с заданным цветом dcol.
    • SurfaceColor [dcol, scol]—указывает, что в последующих многоугольниках должен содержаться компонент зеркального отражения с цветом, заданным scol.
    • SurfaceColor [dcol, scol, n] — указывает, что отражение должно происходить с показателем зеркального отражения п.

    Примитивы функции Graphics3D

    • Cuboid [ {xmin, ymin, zmin} ] — представляет единичный куб, ориентированный параллельно осям.
    • CellArray [ { {all, a12,...},...}] — представляет прямоугольный массив элементов яркости.
    • Cuboid [ {xmin, ymin, zmin}, {xmax, ymax, zmax}] — представляет прямоугольный параллелепипед, заданный координатами противоположных вершин.
    • PostScript ["string1", "string2",...] — графический примитив, задающий построение графика по кодам языка PostScript.
    • SurfaceGraphics [array, shades] — представляет поверхность, части которой затеняются согласно массиву shades.
    • SurfaceGraphics [array] — представляет трехмерный график поверхности, для которого значения высоты каждой точки на сетке заданы элементами массива.
    • SurfaceGraphics [array, shades] — представляет поверхность, части которой затеняются согласно массиву shades.
    • SurfaceGraphics [array] — представляет трехмерный график поверхности, для которого значения высоты каждой точки на сетке заданы элементами массива.

     

    6. К уроку 9

     

    К уроку 9

    Дополнительные функции для работы с выражениями

    • Catch [expr] — возвращает аргумент первого Throw, генерируемого при вычислении ехрr.
    • Check!;expr, failexpr] — вычисляет ехрг и возвращает его результат, если только в процессе вычислений не вырабатывались сообщения, иначе вычисляет и возвращает failexpr.
    • Check[expr, failexpr, s1: :t1, s2 : :t2,...] — выполняет контроль только для указанных сообщений.
    • CheckAbort [expr, failexpr] — вычисляет expr, возвращая failexpr в случае прерывания.
    • Coefficient [expr, form] — возвращает коэффициент перед form в полиномиальном выражении expr.
    • Coefficient [expr, form, n] — возвращает коэффициент перед f о гт л п в выражении expr.
    • CompoundExpression — применяется в виде exprl; expr2;... и вычисляет expri по очереди, возвращая последнее как результат . .
    • Edit [expr__] — предоставляет возможность редактирования выражения expr.
    • Exponent [expr, form] — возвращает максимальную степень, с которой form присутствует в expr.
    • Exponent [expr, form, h]— применяет h к множеству показателей степеней (экспонент), с которыми form обнаруживается в выражении expr.
    • FlattenAt [expr, {i, j,...}] — выравнивает часть выражения expr на позиции {i, j ,...}.
    • FlattenAt [expr, {{il, jl,...}, {i2, j 2,...},...}]—выравнивает части выражения expr в нескольких позициях.
    • HeldPart [expr, pos] — извлекает (удаляет) часть или несколько частей, указанных при помощи pos, и помещает их в Hold.
    • Hold [expr] — содержит expr в невычисленном виде.
    • HoldFormfexpr] — выводит выражение expr, сохраняя при этом его в невычисленной форме.
    • LeafCount [expr] — возвращает общее (полное) число неделимых подвыражений в expr.
    • Length [expr] — возвращает число элементов в expr.
    • Level [expr, levelspec] — возвращает список всех подвыражений выражения expr на уровнях, указанных параметром levelspec.
    • Level [expr, levelspec, f ]—относит f к списку подвыражений.
    • Literal [expr] — является эквивалентом expr в смысле совпадения формы, но содержит expr в непреобразованном виде.
    • LogicalExpand[expr] — выполняет расширение выражений, содержащих логические связи, такие как & & и | |.
    • Map At [f, expr, n] — применяет f к элементу на позиции n в выражении expr. Если n отрицательно, позиция отсчитывается с конца.
    • MapAt[f, expr, {i, j,...}] — применяет f к частям expr на позиции {i, j,...}.
    • MapAt[f, expr, {{il, jl,...}, {12, j2,...},...}]— применяет f к частям expr в ряде позиций.
    • Maplndexed [f, expr] — применяет f к элементам ехрг, возвращая спецификацию части каждого элемента в качестве второго аргумента в f.
    • Maplndexed [f, expr, levspec] — применяет f ко всем частям ехрг на уровнях, указанных с помощью levspec.
    • Order [expr1, expr2] — возвращает 1, если exprl предшествует ехрг2 в канонической последовательности, и дает -1, если exprl стоит после ехрг2 в каноническом порядке. Результатом будет 0, если exprl тождественно ехрг2.
    • Postfix[f[expr]] — дает вывод функции f [ехрг], заданной по умолчанию в постфиксной форме: expr // f.
    • Postf ix [f [expr] , h] — дает вывод в виде exprh.
    • Prepend[expr, elem] — возвращает ехрг, к которому предварительно добавлен el em.
    • Print [exprl, expr2,...] — выводит на экран дисплея выражения expri и затем дает перевод строки. Может использоваться для создания диалога.
    • Return [ехрr] — возвращает из функции величину ехрг.
    • Run[expr1, expr2,...] — создает выходную форму выражений expri, разделенных пробелами, и выполняет ее как внешнюю команду операционной системы.
    • RunThrough ["command", expr] — выполняет внешнюю команду, передавая ей в качестве аргумента результат вычисления ехрг, а затем интерпретирует вывод, производимый командой, и возвращает его в качестве результата.
    • Scan [f, expr] — вычисляет f, применяемую к каждому элементу ехрг по очереди.
    • Scan[f, expr, levelspec] — применяет f к частям выражения ехрг, указанным с помощью levelspec.
    • SequenceForm[exprl, expr2,...] — выводит в виде текстовой конкатенации (объединения) печатные формы выражений expri.
    • SetAccuracy[ехрг, n] — дает вариант ехрг, в котором все числа представлены с п цифр после десятичной точки.
    • SetPrecision [ехрг, n] — вырабатывает вариант ехрг, в котором все числа установлены с точностью представления п значащих цифр.
    • Share [expr] — меняет способ внутреннего хранения выражения ехрг, что минимизирует объем используемой памяти.
    • Through [expr, h] — выполняет преобразование всюду, где h появляется в заголовке выражения ехрг.
    • Together [ехрr] — приводит члены суммы к общему знаменателю и сокращает множители в полученном результате.
    • Variables [ехрr] — возвращает список всех независимых переменных в выражении.
    • With[{x = х0, у = у0,...}, ехрг] — указывает, что в случае обнаружения в выражении ехрг символов х, у, ... они должны быть заменены на х0, у0 и т. д.
    • Write [channel, exprl, expr2,...] — записывает в указанный выходной канал channel последовательно (один за другим) выражения expri, завершаемые переводом строки.
    • WriteString [channel, exprl, expr2,...]—превращает expri в строки символов, а затем последовательно записывает их в указанный выходной канал channel.

     

    7. К уроку 10

     

    К уроку 10

    Функции трассировки и отладки программ

    • Off [s] — отключает сообщения трассировки, связанные с символом s.
    • Off [m1, m2,...] — отключает несколько сообщений.
    • Off[ ] — отключает все сообщения трассировки.
    • On [s] — включает трассировку для символа s.
    • On [m1, m2,...] — включает ряд сообщений.
    • On [ ] — включает трассировку для всех символов.
    • Trace [ехрг] — генерирует список всех выражений, используемых при вычислении ехрг.
    • Trace[expr, form] —включает в список только те выражения, которые сопоставимы с form.
    • Trace [ехрr, s] — включает в список все вычисления, которые используют правила преобразования, связанные с символом s.
    • TraceDialog [ехрг] — инициирует диалог для каждого выражения, используемого при вычислении ехрr (на каждом шаге продолжение диалога осуществляется исполнением команды Return []).
    • TraceDialog [expr, form] — инициирует диалог только для выражений, сопоставимых с form.
    • TraceDialog [expr, s] — инициирует диалоги только для выражений, при вычислении которых используются правила преобразований, связанные с символом S.
    • TraceLevel [ ] — всякий раз, когда вычисляется Trace [ ] или родственная функция, TraceLevel [ ] возвращает тот уровень ее выхода, который в данный момент заполняется.
    • TracePrint [ехрr] — выводит (печатает) все выражения, используемые в процессе вычисления ехрг.
    • TracePrint [expr, form] — включает в операцию только те выражения, которые совпадают с form.
    • TracePrint [expr, s] — включает в вывод все вычисления, которые применяют правила преобразования, связанные с указанным символом s.
    • TraceScan[f, expr] — применяет f ко всем выражениям, используемым при вычислении ехрr,
    • TraceScan[f, expr, form] — включает только те выражения, которые сопоставимы с form.
    • TraceScan [f, expr, s] — включает все вычисления, которые применяют правила преобразования, связанные с символом s.
    • TraceScan [f, expr, form, fp] — применяет f до вычисления, a fp после вычисления к выражениям, используемым при вычислении ехрr.

    С этими функциями могут использоваться следующие основные опции и относящиеся к ним значения:

    • TraceForward — указывает, следует ли включать в вычислительную цепочку более поздние (последующие) выражения, которые содержат искомую форму шаблона.
    • Tracelnternal — имея значения True или False, указывает, следует ли трассировать вычисления выражений, генерируемые внутри Mathematica. Вспомогательная установка Automatic трассирует выбранное множество внутренний вычислений, включая сообщения и установки или отмены установок видимых символов.
    • $TraceOff — является значением активной в данный момент опции Trace-Off, относящейся к Trace и родственным функциям. В течение трассировки она может быть переустановлена для изменения множества выражений, в которых трассировка заблокирована.
    • TraceOf f — отключает трассировку.
    • $ТгасеОn — является значением активной в данный момент опции ТгасеОn, относящейся к функции Trace и родственным функциям. Она может быть переустановлена в процессе трассировки для изменения множества выражений, в которых трассировка произойдет.
    • ТгасеОп — включает трассировку.
    • TraceOriginal — указывает, следует ли проверять форму каждого выражения перед вычислением его заголовка и аргументов.
    • $TracePattern — активный в данный момент параметр-шаблон, относящийся к Trace и родственным функциям. Он может быть переустановлен в процессе трассировки для изменения множества записываемых или выводимых выражений.
    • $TracePostAction — активный в данный момент четвертый параметр функции TraceScan (или эквивалент в родственных функциях). Он может быть переустановлен во время трассировки для изменения операции, применяемой после того, как перехваченные выражения вычислены.
    • $TracePreAction — активный в данный момент первый аргумент функции TraceScan (или эквивалент в родственных функциях). Он может быть переустановлен во время трассировки для изменения действия, предпринимаемого перед тем, как перехваченные выражения будут вычислены.

     

    8. К уроку 11

     

    К уроку 11

     

    Функции общей рациональной интерполяции

    • GeneralRationalInterpolation[{f x , f y }, {t,m, k}, {t 1 , t 2 ,..., t n+A+1 } ] -дает рациональную интерполяцию параметрически заданной функции для списка значений параметра t.
    • GeneralRationallnterpolation[{f x , f y },{t,m,k}, {t,tmin,tmax}] — дает рациональную интерполяцию параметрически заданной функции при автоматическом выборе значений параметра t.

    С помощью других функций можно осуществить общую минимаксную интерполяцию, обычно обеспечивающую минимальную погрешность:

    • GeneralMiniMaxInterpolation[{± х , f y ],{t, (tmin,tmax},m,k},x] — дает рациональную минимаксную интерполяцию параметрически заданной функции с параметром t.
    • GeneralMiniMaxInterpolation[{f x , f },approx,(t,(tmin,tmax},m,k},x] — дает рациональную минимаксную интерполяцию параметрически заданной функции для списка значений параметра t с указанием метода аппроксимации арргох.
    • GeneralMiniMaxInterpolation[{f x , f ,g},{t, (tmin,tmax},m,k},x] — дает рациональную минимаксную интерполяцию параметрически заданной функции при автоматическом выборе значений параметра t, используя вычисление ошибки с помощью функции g(t) .

    К уроку 14

    Функции создания анимационной графики

    • MoviePlot[f[x,t],{x,xmin,xmax},{t,tmin,tmax}] — дает анимацию графика Plot[f[x,t],{x,xmin,xmax}].
    • MoviePlot3D[f[x,y,t],{x,xmin,xmax},{y,ymin,ymax},{t,tmin,tmax}] — дает анимацию трехмерного графика.
    • MovieDensityPlot[f[x,y,t],{x,xmin,xmax},{y,ymin,ymax},{t,tmin, tmax} ] — дает анимацию трехмерного графика плотности.
    • MovieContourPlot[f[x,у,t],{x,xmin,xmax}, {y, ymin,ymax},{t, tmin, tmax} ] — дает анимацию контурного графика.
    • MovieParamenticPlot[{f[s,t},{g[s,t)}],{s,smin,smax},{t,tmin, tmax} ] — дает анимацию параметрического графика.
    • SpinShow [graphics] — дает вращение графического объекта. Эта функция имеет ряд опций, которые можно просмотреть командой Options [SpinShow].

    Функции для построения графиков в логарифмическом масштабе

    • LogPlotff, {x,xmin,xmax} ] — строит линейно-логарифмический график f(x) при изменении х от xmin до хтах.
    • LogLinearPlot [f, {х, xmin, хтах} ] — строит логарифмически-линейный график f(x).
    • LogLogPlot [f, {х, xmin, xmax} ] — строит логарифмический (по обеим осям) график f(x).
    • LogListPlot [{{xl, yl}, {х2, у2},...}] — строит линейно-логарифмический график точек.
    • LogLinearListPlot [ {{xl, yl}, {х2, у2},...}] — строит логарифмически-линейный график точек.
    • LogLogListPlot [{{xl, у 1},{х2, у2},...}] — строит логарифмический (по обеим осям) график точек.

    Функции LogListPlot [ {yl, y2,...}], LogLinearListPlot [{ yl, y2,...}] и LogLogListPlot [ {yl, y2,...} ] дают те же построения, что и предшествующие функции, с той разницей, что ординаты абдцисс точек х равны 1, 2, 3 и т. д. Это иногда упрощает задание графиков.

     

    Самоучитель по SPSS



    Самоучитель по SPSS


    Глава 1. Программа SPSS

    Глава 1. Программа SPSS

    1. Программа SPSS

    Программа SPSS


    SPSS является самой распространённой программой для обработки статистической информации. В настоящем разделе описан путь этой программы к такому выдающемуся успеху. Затем приведен обзор отдельных модулей программы.

    1.1 История SPSS

    1.1 История SPSS


    Два студента Норман Най (Norman Nie) и Дейл Вент (Dale Bent), специализировавшиеся в области политологии в 1965 году пытались отыскать в Стенфордском университете Сан-Франциско компьютерную программу, подходящую для анализа статистической информации. Вскоре они разочаровались в своих попытках, так как имеющиеся программы оказывались более или менее непригодными, неудачно построенными или не обеспечивали наглядность представления обработанной информации. К тому же принципы пользования менялись от программы к программе.


    Так, не долго думая, они решили разработать собственную программу, со своей концепцией и единым синтаксисом. В их распоряжении тогда был язык программирования FORTRAN и вычислительная машина типа IBM 7090. Уже через год была разработана первая версия программы, которая, еще через год, в 1967, могла работать на IBM 360. К этому времени к группе разработчиков присоединился Хэдлай Халл (Hadlai Hull).


    Как известно из истории развития информатики, программы тогда представляли собой пакеты перфокарт. Как раз на это указывает и исходное название программы, которое авторы дали своему продукту: SPSS — это аббревиатура от Statistical Package for the Social Science.


    В 1970 году работа над программой была продолжена в Чикагском университете, а Норман Най основал соответствующую фирму — к тому моменту уже было произведено шестьдесят инсталляций. Первое руководство для пользователей описывало одиннадцать различных процедур.


    Спустя пять лет SPSS была уже инсталлирована шестьсот раз, причём под разными операционными системами. С самого начала версиям программы присваивали соответствующие порядковые номера. В 1975 была разработана уже шестая версия (SPSS6). До 1981 последовали версии 7, 8 и 9.


    Командный язык (синтаксис) SPSS в то время был ещё не так хорошо развит, как сейчас, и естественно ориентирован на перфокарты. Поэтому так называемые управляющие карты SPSS состояли из идентификационного поля (столбцы 1-15) и из поля параметров (столбцы 16-80).


    В 1983 году командный язык SPSS был полностью переработан, синтаксис стал значительно удобней. Что бы отметить этот факт, программа была переименована в SPSSX, где буква X должна была служить как номером версии в римскими числами, так и сокращением для extended (расширенный).


    Так как применение перфокарт к этому моменту уже стало историей, то программа SPSS и информация, подлежащая обработке, сохранялись в отдельных файлах на винчестерах больших ЭВМ, которые тогда использовались повсеместно. Год от года постоянно увеличивалось и количество процедур.


    С появлением персональных компьютеров была разработана также и PC-версия SPSS, с 1983 года появилась PC-версия SPSS\PC+. рассчитанная на MS-DOS. Позже, с момента основания в 1984 году европейского торгового представительства в Горинхеме в Нидерландах, SPSS стал широко применяться и в Европе. В настоящее время это самое распространённое программное обеспечение для статистического анализа во всём мире.


    Для того, чтобы отразить возможность использования программы во всех областях, имеющих отношение к статистическому анализу, буква X вновь была удалена из названия марки, а исходной аббревиатуре присвоено новое значение: Superior Performance Software System (система программного обеспечения высшей производительности).


    Если PC версия SPSS/PC+ была чуть усовершенствованной версией для больших ЭВМ, то SPSS для операционной системой Windows (SPSS for Windows) стала большим шагом вперёд. Во первых эта версия SPSS обладает всеми возможностями версии для больших ЭВМ, во вторых, за некоторыми немногочисленными исключениями, программой можно пользоваться без особых знаний в области прикладного программирования. Вызов необходимых процедур статистического анализа происходит при помощи стандартной техники, применяемой в Windows, то есть с помощью мыши и соответствующих диалоговых окон.


    Первая версия SPSS для Windows имела порядковый номер 5. Затем последовали версии 6.0 и 6.1 с некоторыми нововведениями в статистической и графической областях; версия 6.1 была первой статистической программой для Windows, которая использовала 32 битную архитектуру Windows 3.1. Это можно было заметить по более высокой скорости выполнения вычислений. Усовершенствования коснулись также и интерфейса пользователя. В конце концов, была выпущена версия 6.1.3, которая уже могла работать и под Windows 95 и под NT.


    В начале 1996 года появилась 7-я версия SPSS, сначала как версия 7.0, а затем 7.5. Наряду с расширением возможностей в сфере статистики, разница между этими двумя версиями заключалась в том, что в версии 7.5 как меню, так и интерфейс программы были выполнены уже не только на английском, но и на других наиболее распространенных языках.


    Самым весомым отличием версии 7 по отношению к предыдущим версиям, был абсолютно новый подход к выводу информации на экран. Так, во первых, получил новые очертания так называемый Viewer (Окно просмотра), и, во вторых, более приятный внешний вид приобрели таблицы результатов расчётов (мобильные таблицы). Появившаяся технология мобильных таблиц позволяет перестраивать полученные таблицы различным способами.


    Если предшественница данной версии — версия 6.1.3 могла работать как под старой Windows 3.1 так и под новой Windows 95 (NT), то SPSS версии 7 могла работать только при наличии Windows 95 (NT).


    За версией 7.5 последовала версия 8.0, прогресс которой заключался в усовершенствовании графической оболочки. Возможность составления интерактивных графиков предоставляет рад преимуществ по сравнению с традиционными графиками, которые являются стандартом для многих других пакетов.


    Версия 9.0 включала в себя несколько новых статистических методов, в т.ч. многозначную логистическую регрессию, и несколько новых графических возможностей, расширяющих область интерактивных графиков.


    Версия, описываемая в этой книге имеет порядковый номер 10.0. Ниже изложены важнейшие нововведения, относящиеся к этой версии.

    1.2 Новое в версии 10.0

    1.2 Новое в версии 10.0


    Версия 10.0 SPSS имеет два самых существенных отличия по сравнению с предыдущей версией 9.0. Они будут рассмотрены в этой книге:


    Было изменено строение Редактора данных. Благодаря закладкам Данные и Переменные облегчён переход между областями ввода данных и описания переменных. Таким образом, форма описания переменных была упрощена и соответствует теперь общепринятым стандартам, применяемым в сфере табличных расчётов.


    В области статистики был добавлен регрессионный анализ с категориальной целевой переменной.

    1.3 Модули SPSS

    1.3 Модули SPSS


    Основу программы SPSS составляет SPSS Base (базовый модуль), предоставляющий разнообразные возможности доступа к данным и управления данными. Он содержит методы анализа, которые применяются чаще всего.


    Традиционно вместе с SPSS Base (базовым модулем) поставляются ещё два модуля: Advanced Models (продвинутые модели) и Regression Models (регрессионные модели). Эти три модуля охватывают тот спектр методов анализа, который входил в раннюю версию программы для больших ЭВМ.


    В приложении А Вы сможете найти информацию о том, какие методы анализа относятся к тому или иному модулю. Пользователь, который приобрёл все эти три модуля, может не обращать внимания на данное приложение.


    Наряду с тремя упомянутыми, существует еще ряд специальных дополнительных модулей и самостоятельных программ, число которых постоянно растёт, так что пользователям следует постоянно знакомиться с информацией о нововведениях в SPSS.


    В этой книге описываются базисный модуль, а также модули Regression Models, Advanced Models и Tables. Назначением последнего модуля является составление презентационных таблиц. В книге не рассматриваются логлинейные модели, анализ выживания и многомерное шкалирование, а также процедура составления презентаций.


    SPSS Base (Базовый модуль)


    SPSS Base входит в базовую поставку. Он включает все процедуры ввода, отбора и корректировки данных, а также большинство предлагаемых в SPSS статистических методов. Наряду с простыми методиками статистического анализа, такими как частотный анализ, расчет статистических характеристик, таблиц сопряженности, корреляций, построения графиков, этот модуль включает t-тесты и большое количество других непараметрических тестов, а также усложненные методы, такие как многомерный линейный регрессионный анализ, дискриминантный анализ, факторный анализ, кластерный анализ, дисперсионный анализ, анализ пригодности (анализ надежности) и многомерное шкалирование.


    Regression Models


    Данный модуль включает в себя различные методы регрессионного анализа, такие как: бинарная и мультиномиальная логистическая регрессия, нелинейная регрессия и пробит-анализ.


    Advanced Models


    В этот модуль входят различные методы дисперсионного анализа (многомерный, с учетом повторных измерений), общая линейная модель, анализ выживания, включая метод Каплана-Майера и регрессию Кокса, логлинейные, а также логитлоглинсйные модели.


    Tables


    Модуль Tables служит для создания презентационных таблиц. Здесь предоставляются более широкие возможности по сравнению со упрощенными частотными таблицами и таблицами сопряженности, которые строятся в SPSS Base (базовом модуле).


    Ниже в алфавитном порядке приведен список остальных модулей и программ предлагаемых для расширения SPSS.


    Amos


    Amos (Analysis of moment structures — анализ моментных структур) включает методы анализа с помощью линейных структурных уравнений. Целью программы является проверка сложных теоретических связей между различными признаками случайного процесса и их описание при помощи подходящих коэффициентов. Проверка проводится в форме причинного анализа и анализа траектории. При этом пользователь в графическом виде должен задать теоретическую модель, в которую вместе с данными непосредственных наблюдений могут быть включены и так называемые скрытые элементы. Программа Amos включена в состав модулей расширения SPSS, как преемник L1SREL (Linear Structural RELationships — линейные структурные взаимоотношения).


    AnswerTree


    AnswerTree (дерево решений) включает четыре различных метода автоматизированного деления данных на отдельные группы (сегменты). Деление проводится таким образом, что частотные распределения целевой (зависимой) переменной в различных сегментах значимо различаются. Типичным примером применения данною метода является создание характерных профилей покупателей при исследовании потребительского рынка. AnswerTree является преемницей программы СНАШ (Chi squared interaction Detector — детектор взаимодействий на основе хи-квадрата).


    Categories


    Модуль содержит различные методы для анализа категориальных данных, а именно: анализ соответствий и три различных метода оптимального шкалирования (анализ однородности, нелинейный анализ главных компонент, нелинейный канонический корреляционный анализ).


    Clementine


    Clementine — это программа для data mining (добычи знаний), в которой пользователю предлагаются многочисленные подходы к построению моделей, к примеру, нейронные сети, деревья решений, различные виды регрессионного анализа. Clementine представляет собой "верстак" аналитика, при помощи которого можно визуализировать процесс моделирования, перепроверять модели, сравнивать их между собой. Для удобства пользования программой имеется вспомогательная среда внедрения результатов.


    Conjoint (совместный анализ)


    Совместный анализ применяется при исследовании рынка для изучения потребительских свойств продуктов на предмет их привлекательности. При этом опрашиваемые респонденты по своему усмотрению должны расположить предлагаемые наборы потребительских свойств продуктов в порядке предпочтения, на основании которого можно затем вывести так называемые детализированные показатели полезности отдельных категорий каждого потребительских свойства.


    Data Entry (ввод данных)


    Программа Data Entry предназначена для быстрого составления вопросников, а также ввода и чистки данных. Заданные на этапе создания вопросника вопросы и категории ответов потом используются в качестве меток переменных и значений.


    Exact Tests (Точные тесты)


    Данный модуль служит для вычисления точного значения вероятности ошибки (величины р) в условиях ограниченности данных при проверке по критерию х2 (Chi-Quadrat-Test) и при непараметрических тестах. В случае необходимости для этого также может быть применён метод Монте-Карло (Monte-Carlo).


    GOLDMineR


    Программа содержит специальную регрессионную модель для регрессионного анализа упорядоченных зависимых и независимых переменных.


    SamplePower


    При помощи SamplePower может быть определён оптимальный размер выборки для большинства методов статистического анализа, реализованных в SPSS.


    SPSS Missing Value Analysis


    Данный модуль служит для анализа и восстановления закономерностей, которым подчиняются пропущенные значения. Он предоставляет различные варианты замены недостающих значений.


    Trends


    Модуль Trends содержит различные методы для анализа временных рядов, такие как: модели ARIMA, экспоненциальное сглаживание, сезонная декомпозиция и спектральный анализ.


    Модули Amos, AnswerTree, Categories, Conjoint, LISREL и Trends описаны в книге этих же авторов: "SPSS. Методы исследования рынка и мнений".

    Глава 2. Инсталляция

    Глава 2. Инсталляция

    1. Инсталляция

    Инсталляция


    В этой главе мы покажем, как установить SPSS с компакт-диска, создать ярлык на эту программу и задать рабочий каталог. Далее мы расскажем об установке прилагаемого к книге компакт-диска примеров.

    2.1 Системные требования для инсталляции SPSS

    2.1 Системные требования для инсталляции SPSS 10.0


    Чтобы вы могли использовать SPSS 10.0 для Windows на своем компьютере, аппаратное и программное обеспечение должны удовлетворять следующим минимальным требованиям:

    •  Windows 95, Windows 98, Windows NT 4.0 или Windows 2000,

    •  процессор Pentium 90 МГц (или более),

    •  не менее 16 Мбайт оперативной памяти (рекомендуется 64 Мбайт),

    •  не менее 80 Мбайт свободного места на жестком диске (для базовой системы) и еше 80 Мбайт для работы SPSS,

    •  привод CD-ROM,

    •  видеокарта с минимальным разрешением 800*600 (SVGA). 

    Кроме того, для инсталляции необходимы:

    •  серийный номер SPSS, который указан на коробке компакт-диска,

    •  лицензионный код для SPSS, который прилагается на отдельном листке.

    Лицензионный код дает возможность инсталлировать базовую систему и модули расширения SPSS, приобретаемые дополнительно.

    2.2 Инсталляция SPSS

    2.2 Инсталляция SPSS 11.5


    В следующем описании мы исходим из того, что на вашем компьютере установлена операционная система Windows 98 или Windows 2000.

    •  Вставьте инсталляционный компакт-диск SPSS 11.5 для Windows в привод CD-ROM.

    •  Немного подождите — должна автоматически запуститься программа инсталляции. На рабочем столе Windows вы увидите следующее окно.

    •  Щелкните на пункте Install SPSS (Установить SPSS).

    Программа инсталляции SPSS подготовит так называемый "мастер InstallShield", который будет сопровождать вас в процессе инсталляции.

    •  Подождите, пока подготовка к инсталляции не завершится.


    Рис. 2.1: Начальный экран программы инсталляции


    Наконец, программа инсталляции SPSS 11.5 для Windows готова к работе. Прежде чем запускать ее, рекомендуется закрыть все программы Windows.

    •  Если все остальные программы Windows закрыты, щелкните на кнопке Next (Далее). На экране появится Лицензионное соглашение SPSS.

    •  Примите предлагаемые условия, щелкнув на кнопке "Yes" (Да). Теперь можно задать каталог, в который будет инсталлирована SPSS 10.0 для Windows.

    •  Чтобы принять предлагаемый по умолчанию каталог (C:\Program Files\SPSS), щелкните на кнопке Далее.

    Но если вы хотите установить SPSS в другой каталог, щелкните на кнопке Browse (Обзор). Откроется диалоговое окно Select Directory (Выбрать каталог). Здесь можно установить желаемый каталог.


    На следующем этапе работы мастера требуется ввести данные пользователя. Здесь следует указать серийный номер SPSS.

    •  Введите соответствующие данные и подтвердите их кнопкой Next.

     Теперь вы должны выбрать один из трех типов инсталляции:

    •  Standard (Стандартная): Программа будет установлена в наиболее употребительной конфигурации. Этот тип инсталляции рекомендуется для большинства пользователей.

    •  Minimal (Минимальная): Будет инсталлирована лишь минимально необходимая конфигурация.


    Рис. 2.2: Сведения о пользователе

    •  Custom (Специальная): Здесь можно выбрать, какие функции программы будут инсталлированы. Этот тип инсталляции рекомендуется для опытных пользователей.

      •  Подтвердите настройку по умолчанию Standard щелчком на кнопке Next. Затем мастер потребует от вас указать вид инсталляции.

      •  Подтвердите установку для одной рабочей станции щелчком на кнопке Next.

    На следующем этапе мастер требует ввести код лицензии, который вы должны были получить для SPSS.

    •  Введите код лицензии на программу. Обратите внимание, что группы цифр в коде обязательно должны быть разделены пробелом.

    •  Подтвердите ввод, щелкнув на кнопке Next. Теперь можно выбрать, какие модули SPSS должны быть установлены. Свой выбор так же подтвердите кнопкой Next.

    После этого SPSS будет искать файлы модулей, выбранных для инсталляции ("Files to install are determined..." — Определяются файлы для инсталляции).

    •  Наконец, на заключительном этапе вы можете еще раз проверить сделанные ранее установки ("Ready to install files" — Готов к инсталляции файлов).


    Рис. 2.3: Ввод кода лицензии

    •  Подтвердите сделанные установки щелчком на кнопке Next. SPSS начнет инсталляцию файлов.

    •  После инсталляции файлов программы мастер спросит в вас, когда вы желаете зарегистрировать SPSS — сейчас или позже. Выберите нужный вариант и щелкните на Next.

    Теперь инсталляция SPSS для Windows 10.0 завершена; вы получаете соответствующее указание ("Setup was finished" — Инсталляция завершена). Вы можете запустить интерактивную обучающую программу или вернуться на рабочий стол Windows.

    •  Чтобы выйти из процесса инсталляции, щелкните на кнопке Finish (Готово); в этом случае интерактивная обучающая программа не запустится.

    •  В результате вы вернетесь на рабочий стол Windows и снова увидите начальный экран программы инсталляции (см. рис. 2.1). Щелкните здесь на кнопке Exit (Выход).

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    2.3 Создание ярлыка

    2.3 Создание ярлыка


    Мы предполагаем, что в дальнейшем вы часто будете работать с SPSS и вам будет необходим быстрый доступ к этой программе. Поэтому мы предлагаем вам создать для нее ярлык.

    •  Щелкните правой кнопкой мыши на свободном месте рабочего стола Windows 98. Появится контекстное меню.

    •  Выберите в контекстном меню команду Создать (New).

    •  Щелкните на пункте Ярлык (Shortcut). Рабочий стол Windows 98 приобрет вид, показанный на рис. 2.4.

    Откроется диалоговое окно Создать ярлык (Create Shortcut).

    •  Введите в этом диалоговом окне путь и имя исполняемого файла — как правило, это будет "C:\Program Files\SPSS\spsswin.exe" — или выберите путь и файл с помощью кнопки Обзор (Browse), если вы не помните их в точности. Эта кнопка открывает структуру каталогов, в которой можно найти файл spsswin.exe.

    •  Подтвердите ввод, щелкнув на кнопке Далее (Next).

    Откроется диалоговое окно Выбор названия программы (Select a Title for the Program).

    •  Введите в поле Укажите название ярлыка (Select a name for the shortcut) текст "SPSS 10".

    •  Завершите создание ярлыка, подтвердив введенные данные кнопкой Готово (Finish).

    Теперь ярлык создан.


    Вы можете запускать SPSS прямо с рабочего стола. Для этого достаточно просто дважды щелкнуть на значке SPSS.

    2.4 Установка рабочего каталога

    2.4 Установка рабочего каталога


    Теперь мы должны установить рабочий каталог. В этом каталоге будут храниться создаваемые вами файлы данных и выходные файлы. В дальнейшем в рабочий каталог надо будет скопировать файлы с компакт-диска примеров (см. главу 2.5). Мы рекомендуем дать этому каталогу имя SPSSBOOK.


    Чтобы задать рабочий каталог, поступите следующим образом.



    Рис. 2.4: Создание ярлыка

    •  Через окно MS-DOS (Меню Пуск Программы | Сеанс MS-DOS) перейдите на уровень MS-DOS.

    •  Командой CD (change directory) перейдите в корневой каталог С:\:Prompt:\> CD C:\

    •  Командой MD (make directory) создайте подкаталог "SPSSBOOK": С : \> MD SPSSBOOK

    •  Закройте сеанс DOS командой EXIT: С:\> EXIT

    Вы снова окажетесь на рабочем столе Windows 98.


    Теперь мы должны зарегистрировать вновь созданный каталог SPSSBOOK как рабочий каталог для SPSS 10.0.

    •  Для этого поместите курсор на значок SPSS и щелкните правой кнопкой мыши. Откроется контекстное меню.

    •  Выберите пункт Свойства (Properties).

    Откроется диалоговое окно SPSS 10: Свойства (SPSS 10 Properties).

    •  Введите в поле Рабочий каталог (Working directory) текст "C:\SPSSBOOK".

    •  Подтвердите ввод кнопкой ОК.


    Рис. 2.5: Переход на уровень MS-DOS



    Рис. 2.6: Диалоговое окно Свойства: SPSS 10


    Теперь рабочий каталог задан. В дальнейшем SPSS будет использовать его как стандартный каталог (Default Directory).

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    2.5 Инсталляция прилагаемого компакт-диска

    2.5 Инсталляция прилагаемого компакт-диска


    Сейчас мы скопируем содержимое компакт-диска примеров в только что установленный каталог SPSSBOOK. Поступите следующим образом:

    •  Через окно сеанса MS-DOS перейдите на уровень MS-DOS.

    •  Командой CD (change directory) перейдите в каталог SPSSBOOK: Prompt:\> CD C:\SPSSBOOK

    После этого приглашение DOS приобретет следующий вид:


    C:\SPSSBOOK\>

    •  Командой DOS COPY скопируйте содержимое компакт-диска примеров в каталог C:\SPSSBOOK: C:\SPSSBOOK> COPY D:\*.* или вместо буквы D укажите обозначение привода CD-ROM на вашей машине.

    •  Закройте сеанс DOS командой EXIT: C:\SPSSBOOK> EXIT

    Вы вернетесь на рабочий стол Windows 98. Все этапы инсталляции успешно завершены.

    2.6 Возобновление лицензии

    2.6 Возобновление лицензии


    Если срок действия вашей лицензии на SPSS истек и вы приобрели лицензию на новый период, можно возобновить лицензию, не повторяя весь процесс инсталляции заново. Для этого служит программа licrenew.exe.

    •  Откройте окно сеанса MS-DOS.

    •  Перейдите в каталог SPSS.

    •  Введите licrenew.exe.

    •  Введите код лицензии и подтвердите его.

    2.7 Добавление компонентов

    2.7 Добавление компонентов


    Чтобы добавить компоненты, например, другие модули SPSS, следует запустить файл setup.exe с компакт-диска. После этого можно выбрать любые компоненты или функции. Убедитесь, что выбраны все функции — как вновь добавляемые, так и уже установленные. Если в SPSS добавляется новый модуль, следует также ввести новый код лицензии.

    Глава 3. Подготовка данных

    Глава 3. Подготовка данных

    1. Подготовка данных

    Подготовка данных


    В этой главе мы на небольшом примере опишем процесс подготовки данных. За основу мы возьмем вымышленный опрос — так называемый "воскресный вопрос", который студенты, изучающие политологию в Марбургском университете, задавали избирателям:


    "За кого бы вы голосовали, если бы в воскресенье были выборы в бундестаг?" С помощью следующей анкеты был проведен телефонный опрос 30 человек. Мы ограничили количество респондентов, чтобы избавить вас от ввода слишком большого количества данных.



    После заполнения анкет, их следует подготовить для ввода данных в компьютер и обработки с помощью программы SPSS для Windows.

    1.gif

    Изображение: 

    3.1 Кодирование и кодировочная таблица

    3.1 Кодирование и кодировочная таблица


    Для того чтобы полученные данные можно было обработать, прежде всего следует создать кодировочную таблицу. Кодировочная таблица устанавливает соответствие между отдельными вопросам анкеты и переменными. используемыми при компьютерной обработке данных. Например, пункту анкеты "Пол" может быть поставлена в соответствие переменная sex.


    Переменные — это ячейки памяти, в которые можно записывать значения, введенные с клавиатуры. Мы выбрали для переменной имя sex, так как имена переменных в SPSS для Windows могут содержать до восьми символов. Другое, более подробное имя было бы слишком длинным. Имена переменных могут состоять из букв латинского алфавита, цифр и специальных символов; причем первым символом имени должна быть буква.


    Переменные могут принимать различные значения. Переменная sex может иметь два возможных значения: "женский" и "мужской". Кодировочная таблица определяет кодовые числа, соответствующие отдельным значениям переменных; например, значению "женский" может соответствовать цифра "1", а значению "мужской" — "2".


    Подитожим задачи, которые решаются при составлении кодировочной таблицы:

    •  Кодировочная таблица устанавливает соответствие между отдельным вопросам анкеты и переменными.

    • " Кодировочная таблица устанавливает соответствие между возможным значениями переменных и кодовыми числами.

    Для нашей анкеты мы можем составить следующую кодировочную таблицу. Она приводится в самой анкете.


    2.gif

    Изображение: 

    3.2 Матрица данных

    3.2 Матрица данных


    Предположим, что 30 анкет были заполнены следующим образом:


    fragebnr


    Sex


    age


    party


    1


    W-001


    женский


    45


    ХДС/ХСС


    2


    W-002


    мужской


    22


    СДПГ


    3


    W-003


    мужской


    19


    сдпг


    4


    W-004


    женский


    42


    ХДС/ХСС


    5


    W-005


    мужской


    34


    Зеленые/Союз 90


    6


    W-006


    женский


    72


    сдп


    7


    W-007


    мужской


    38


    СДПГ


    8


    W-008


    женский


    56


    СДПГ


    9


    W-009


    мужской


    61


    ХДС/ХСС


    10


    W-010


    женский


    77


    ХДС/ХСС


    11


    W-01 1


    женский


    23


    Зеленые/Союз 90


    12


    W-012


    мужской


    67


    Республиканцы


    13


    W-013


    мужской


    79


    Прочие


    14


    W-01 4


    женский


    26


    СДПГ


    15


    W-01 5


    мужской


    59


    ХДС/ХСС


    16


    O-001


    женский


    34


    Зеленые/Союз 90


    17


    O-002


    мужской


    18


    Республиканцы


    18


    O-003


    женский


    44


    ХДС/ХСС


    19


    O-004


    мужской


    68


    ХДС/ХСС


    20


    O-005


    женский


    33


    пдс


    21


    O-006


    мужской


    66


    ХДС/ХСС


    22


    O-007


    женский


    22


    нет данных


    23


    O-008


    мужской


    нет данных


    СДПГ


    24


    O-009


    женский


    67


    СДПГ


    25


    O-010


    мужской


    33


    сдп


    26


    O-011


    мужской


    44


    ХДС/ХСС


    27


    O-012


    женский


    22


    СДПГ


    28


    O-013


    женский


    19


    Прочие


    29


    O-014


    женский


    55


    ХДС/ХСС


    30


    O-015


    мужской


    39


    СДПГ


    Приведенная выше таблица называется матрицей данных. Данные, предназначенные для обработки в SPSS для Windows, должны быть представлены в виде такой матрицы. Матрица данных состоит из определенного числа строк и столбцов. Строки и столбцы образуют прямоугольную таблицу. При этом каждая строка соответствует одной анкете, а каждый столбец — одной переменной. Так как в нашем небольшом опросе участвовало 30 респондентов, матрица содержит 30 строк. Каждая строка включает четыре столбца для переменных fragebnr, sex, age и party.


    Мы предполагаем, что опрос проводился как в старых, так и в новых федеральных землях. Опрашивающие должны были отмечать это с помощью буквы перед номером анкеты. Буква "W" с дефисом должна была обозначать старые федеральные земли (West), а буква "О" — новые (Ost). Например, W-001 означает первую анкету, которая была заполнена в старых федеральных землях, а О-005 — пятую анкету, которая была заполнена в новых федеральных землях.

    3.3 Запуск SPSS

    3.3 Запуск SPSS


    Начнем с ввода данных для небольшого примера анализа.

    •  Запустите SPSS для Windows, дважды щелкнув левой кнопкой мыши на значке SPSS.

    Откроется редактор данных SPSS (см. рис. 3.1).


    Редактор данных — это одно из многих окон SPSS. Здесь можно вводить новые данные или загружать существующие из файлов данных с помощью команд меню File (Файл) Open... (Открыть...)


    Так как при запуске SPSS ни один файл данных еще не загружен, в заголовке редак тора данных стоит "Untitled" (Без имени). Над изображением таблицы в редакторе данных имеются строка меню и панель символов.

    3.4 Редактор данных

    3.4 Редактор данных


    Сейчас с помощью редактора данных мы создадим файл данных. Редактор данных это приложение, напоминающее электронную таблицу. Под электронной таблицей подразумевается рабочий лист, разделенный на строки и столбцы, который позволяет про сто и эффективно вводить данные. Отдельные строки таблицы соответствуют отдельным наблюдениям. Например, при обработке данных опроса одна строка содержит данные одного респондента. Отдельные столбцы соответствуют отдельным переменным. При обработке данных наблюдений анкеты в одной переменной хранятся ответы на отдельный вопрос. Отдельные ячейки таблицы содержат значения переменных для каждого отдельного наблюдения; в каждой ячейке хранится одно значение переменной.


    Рис. 3.1: Редактор данных: просмотр данных

    3.gif

    Изображение: 

    3.4.1 Определение переменных

    3.4.1 Определение переменных


    Начнем с определения переменных. Переменную можно определить следующим образом:

    •  В редакторе данных дважды щелкните на ячейке с надписью var или щелкните на ярлычке Variable view (Просмотр переменных) на нижнем краю таблицы.

    В обоих случаях вы перейдете в режим просмотра переменных, который обеспечивает редактор данных (см. рис. 3.2). Здесь мы можем последовательно, строка за строкой определить необходимые переменные.


    Имя переменной


    Чтобы задать имя переменной, поступите следующим образом:

    •  Введите в текстовом поле Name (Имя) выбранное имя переменной. В нашем примере мы сначала определим переменную fragebnr. Для этого введите в поле Name текст "fragebnr".

    При выборе имени переменной следует соблюдать определенные правила:

    •  Имена переменных могут содержать буквы латинского алфавита и цифры. Кроме того, допускаются специальные символы _ (подчеркивание), . (точка), а также символы @ и #. Не разрешаются, например, пробелы, знаки других алфавитов и специальные символы, такие как !, ?," и *.

    •  Имя переменной должно начинаться с буквы.

    •  Последний символ имени не может быть точкой или знаком подчеркивания (_).

    •  Длина имени переменной не должна превышать восьми символов.


    Рис. 3.2: Редактор данных: просмотр переменных

    •  Имена переменных нечувствительны к регистру, то есть прописные и строчные буквы не различаются.

    Примеры допустимых имен переменных:


    budget99


    gender


    zarplata


    quest_13


    var3_1_2


    Примеры недопустимых имен переменных:


    1nа1


    Имя начинается не с буквы


    Assignment


    Имя длиннее 8 символов


    Прибыль


    Имя содержит символы другого алфавита


    State 94


    Имя содержит пробел


    None!


    Символ "!" не разрешается

    •  Нажмите на клавишу <Таb>, чтобы подтвердить ввод и перейти к установке типа переменной.

    Тип переменной


    Как видно из электронной таблицы, вновь созданные в SPSS переменные по умолчанию являются численными с максимальной длиной восемь знаков, причем дробная часть состоит из двух знаков (формат F8.2).


    • Если требуется изменить тип переменной, щелкните в ячейке на кнопке с тремя точками:


    Откроется диалоговое окно Define Variable Type (Определение типа переменной).



    Рис. 3.3: Диалоговое окно Define Variable Type (для численной переменной)


    В SPSS существуют следующие типы переменных:


    Numeric (Численный)


    К допустимым значениям относятся цифры, перед которыми стоит знак плюс или минус и десятичный разделитель. Знак плюс перед числом, в отличие от минуса, не отображается. В текстовом поле Length (Длина) задается максимальное количество знаков, включая позицию для десятичного разделителя. В текстовом поле Decimals (Десятичные разряды) вводится количество отображаемых знаков дробной части.


    Comma (Запятая)


    К допустимым значениям относятся цифры, перед которыми стоит знак плюс или минус, точка, как десятичный разделитель и одна или несколько запятых в качестве разделителей групп разрядов. Если запятые опускаются при вводе, они вставляются автоматически. Длина такой переменной равна максимальному количеству знаков, включая десятичный разделитель и запятые между группами разрядов.


    Dot (Точка)


    К допустимым значениям относятся цифры, перед которыми стоит знак плюс или минус, запятая, как десятичный разделитель и одна или несколько точек в качестве разделителей групп разрядов. Если точки опускаются при вводе, они вставляются автоматически.


    Scientific notation (Экспоненциальное представление)


    При вводе данных разрешаются все допустимые численные значения, включая экспоненциальное представление, о котором свидетельствует содержащаяся в числе буква Е или D, а также знак плюс или минус.


    Date (Дата)


    Допустимые значения — дата и/или время.


    Dollar (Доллар)


    К допустимым значениям относятся: знак доллара, точка, как десятичный разделитель и запятые, как разделители групп разрядов. Если знак доллара или запятые опускаются при вводе, они вставляются автоматически.


    Special currency (Специальная валюта)


    Пользователь может задавать собственные форматы валюты. В поле Length в этом случае задается максимальное количество знаков, включая все знаки, заданные пользователем. Обозначение валюты при вводе не указывается; оно вставляется автоматически.


    String (Строка)


    Строка символов. К допустимым значениям относятся: буквы, цифры и специальные символы. Различаются короткие и длинные строковые переменные. Короткие строковые переменные могут содержать не более восьми знаков. В большинстве процедур SPSS применение длинных строковых переменных ограничивается или вообще не допускается.


    При вводе и выводе данных надо учитывать следующие особенности:

    •  Численные форматы: В численных форматах десятичным разделителем может быть либо точка, либо запятая. Тип десятичного разделителя зависит от настроек диалогового окна Язык и стандарты (Regional Settings) на панели управления Windows. Точное значение переменной хранится внутри программы, а Редактор данных отображает на экране лишь заданное число десятичных разрядов. Значения, которые имеют больше десятичных разрядов, округляются. Для вычислений применяется точное значение.

    •  Строковые форматы: В длинных строковых переменных значения дополняются пробелами до максимальной длины. Например, в строковой переменной длины 10 значение "SPSS" хранится внутри программы как "SPSS

    •  Форматы даты и времени: В форматах даты в качестве разделителей между значениями дня, месяца и числа могут применяться косая черта, дефис, пробел, запятая или точка. Можно выбрать один из нескольких форматов даты (dd-mm-yyyy, dd-mmm-yy, mm/dd/yyyy и т.д.). Дата в формате dd-mmm-yy отображается с разделителем-дефисом и сокращением названия месяца из трех букв. Дата в форматах dd/mm/yy и mm/dd/yy отображается с разделителем-косой чертой и номером месяца вместо названия.

    •  Всего доступно 27 различных форматов даты и времени, которые отображаются в разворачивающемся списке. В форматах времени в качестве разделителей между значениями часов, минут и секунд могут использоваться двоеточие, точка или пробел.

    •  Специальная валюта: Форматы отображения валюты ССА, ССВ, ССС, CCD и ССЕ задаются с помощью вкладки Currency (Валюта), которая открывается командой меню Edit (Правка) Options... (Параметры...)

    •  Установите для переменной fragebnr тип String и длину пять символов и щелкните на кнопке ОК.


    Рис. 3.4: Диалоговое окно Define Variable Type (для строковой переменной).


    Переменная fragebnr получила строковый тип. С такими переменными нельзя выполнять никаких вычислительных операций, но можно проводить, например, подсчеты повторяемости. Кроме того, становится возможным ввод букв, например, "W" для старых федеральных земель и "О" — для новых. Мы выбрали длину пять символов, чтобы можно было кодировать до 999 анкет для обеих групп земель. В этом случае для анкет в старых федеральных землях можно будет задавать номера анкет от "W-001" до "W-999", а для новых федеральных земель — от "О-001" до "О-999".

    •  Нажмите клавишу <ТаЬ>, чтобы перейти к установке формата столбца. 

    Формат столбца (Width)

    •  Для переменной fragebnr задано число позиций в столбце, равное "5". Это значение следует из длины переменной, указанной в диалоге Define Variable Type.

    •  Чтобы изменить этот формат представления переменной, перенесенный из диалога Define Variable Type, щелкните на кнопке лифта:

    •  В этом случае выбранное значение ширины подтверждается клавишей <Таb>. 

    Десятичные разряды (Decimals)

    •  Так как переменная fragebnr является строковой, для нее задано количество десятичных разрядов "0". Увеличение или уменьшение этого значения, определенного настройкой в диалоге Define Variable Type, также производится при помощи кнопки лифта: Подтвердите значение "0", нажав клавишу <Таb>.

    Метка переменной (Label)

    Метка переменной — это название, позволяющая описать переменную более подробно. Метка переменной может содержать до 256 символов. В метках переменных различаются прописные и строчные буквы. Они отображаются в том виде, в каком были введены. Для переменной fragebnr введите в качестве метки в поле Variable label текст "Номер анкеты".


    Метки значений (Values)


    Метки значений — это название, позволяющее более подробно описать возможные значения переменной. Так, например, в случае переменной sex можно задать метку "женский" для значения "1" и метку "мужской" для значения "2". Подтвердите настройку по умолчанию None (Нет) клавишей <Таb>. Впрочем, ввод данных также можно подтвердить клавишей <Enter>.


    Пропущенные значения (Missing values)


    В SPSS допускаются два вида пропущенных значений:

    •  Пропущенные значения, определяемые системой (System-defined missing values): Если в матрице данных есть незаполненные численные ячейки, система SPSS самостоятельно идентифицирует их как пропущенные значения. Этот факт отображается в матрице данных с помощью запятой (,).

    • Пропущенные значения, задаваемые пользователем ( User-defined missing values): Если в определенных случаях у переменных отсутствуют значения, например, если на вопрос не был дан ответ, ответ неизвестен, или существуют другие причины, пользователь может с помощью кнопки Missing объявить эти значения как пропущенные. Пропущенные значения можно исключить из последующих вычислений. В нашем примере пропущенным значением, определяемым пользователем мы объявим вариант ответа "0" (нет данных) для переменной sex.

    •  Подтвердите настройку по умолчанию None (Нет) клавишей <Enter>.

    Столбцы (Columns)


    Поле Columns определяет ширину, которую будет иметь в таблице данный столбец при отображении значений. Ширину столбца также можно изменить непосредственно в окне редактора данных. Для этого поместите указатель мыши на разделитель между двумя заголовками столбцов с именами переменных. Вид указателя изменится. Появившаяся двойная стрелка указывает, что соответствующий столбец можно расширить или сузить путем перетаскивания.

    •  Подтвердите настройку по умолчанию "8" клавишей <Enter>.

    Выравнивание (Alignment)


    Здесь можно задать вид выравнивания значений, т.е. определить, как они будут отображаться в таблице. Возможные виды выравнивания — "Right" (по правому краю), "Left" (no левому краю) и "Center" (по центру). Чтобы задать вид выравнивания, щелкните на кнопке

    •  Подтвердите настройку по умолчанию Right клавишей <Enter>.

    Шкала измерения (Measure)


    Здесь можно задать шкалу переменной, которая может быть номинальной (шкала наименований), порядковой или метрической (см. главу 5.1.1). По умолчанию принимается метрическая шкала измерения. Правда, это различие имеет значение только при создании интерактивных графиков, где номинальная и порядковая шкала измерений объединяются в "категориальный" тип.


    Если вы загружаете файлы, созданные в предыдущих версиях SPSS, или шкала измерений не определяется явно, SPSS вначале автоматически предполагает метрическую шкалу. Однако если соответствующая переменная имеет метки значений или принимает менее 24 различных значений, то задается порядковая шкала.

    •  Подтвердите настройку по умолчанию Nominal (шкала наименований) клавишей <Таb>. Затем снова поместите курсор в поле Name, чтобы начать объявление следующей переменной.

    Теперь мы займемся определением переменной sex.

    •  Введите в поле Name текст "sex" и подтвердите ввод нажатием на клавишу <Enter> или <Таb>.

    •  Чтобы задать тип переменной, щелкните в поле Туре на кнопке с тремя точками. Откроется диалоговое окно Define Variable Type (Определение типа переменной). Примите предлагаемую настройку Numeric (Численный) и установите длину "1" и количество десятичных разрядов "0", так как в этой переменной будут храниться только значения 1, 2 или 0. Подтвердите настройку кнопкой ОК и перейдите к следующему полю клавишей <Таb>.

    •  Для формата столбца примите без изменений предлагаемые значения формата "1" и количества десятичных разрядов "0". На этом этапе можно было бы изменить сделанные ранее настройки.

    •  Для метки переменной задайте текст "Пол".

    •  Щелкните в поле Value Labels на кнопке . Откроется диалоговое окно Define Value Labels (Определение меток значений).


    Рис. 3.5: Диалоговое окно Define Value Labels


    Метки значений определяются следующим образом:

    •  Вначале введите в поле Value (Значение) число "1". Нажмите клавишу <Таb>.

    •  Введите в поле Value label (Метка значения) текст "женский".

    •  Щелкните на кнопке Add (Добавить). Метка значения будет добавлена в список. Для этой цели можно также нажать комбинацию клавиш <Alt>+<h>.

    •  Повторите эти действия для значений "2" — "мужской" и "0" — "нет данных". Максимально допустимая длина метки значения составляет 60 знаков.

    Результат ввода всех значений в диалоговом окне показан на рис. 3.6.



    Рис. 3.6: Заполненное диалоговое окно Define Value Labels (Определение меток значений)

    •  Подтвердите введенные данные кнопкой ОК, а затем — клавишей <ТаЬ>.

    •  Чтобы задать пропущенные значения, щелкните в поле Missing на кнопке с тремя точками . Откроется диалоговое окно Define Missing Values (Определение пропущенных значений).


    Рис. 3.7: Диалоговое окно Define Missing Values


    По умолчанию предлагается вариант No missing values (Нет пропущенных значений), то есть все значения в настоящее время рассматриваются как допустимые.

    •  Щелкните на пункте Discrete missing values (Отдельные пропущенные значения). Для одной переменной нужно задать до трех пользовательских пропущенных значений. Введите значение "О".

    Существует еще один вариант:

    •  Range and one optional Discrete missing value (Диапазон и единичное отсутствующее значение): при выборе этого варианта все значения в диапазоне от Minimum (Наименьшее значение) до Maximum (Наибольшее значение) включительно объявляются как пропущенные. Кроме того, можно объявить как отсутствующее еще одно значение вне этого диапазона.

    К сожалению, при сборе данных, как правило, не удается избежать пропущенных значений. Во многих статистических методах, прежде всего одномерных, учет пропущенных значений не составляет проблемы, так как кроме соответствующего уменьшения количества наблюдений не нужно вносить никаких дополнительных изменений в расчетный метод. Однако при двумерном, а тем более при многомерном анализе пропущенные значения в списках переменных создают более значительные проблемы, так как одного-единственного отсутствующего значения достаточно, чтобы сделать всю выборку непригодной для анализа. Впрочем, для многих методов анализа SPSS предлагает выход из такой ситуации.

    •  Подтвердите выбор пропущенных значений для переменной sex кнопкой ОК.

    •  В полях Columns и Alignment примите настройки, предлагаемые по умолчанию.

    •  В поле Measure щелкните на кнопке — откроется список с тремя возможными шкалами измерения:

    •  Измените первоначальную настройку Scale (Метрическая) на Nominal (Номинальная) и нажмите клавишу <Таb>.

    Теперь мы займемся определением переменной age.

    •  Введите в поле Name текст "age" и подтвердите ввод.

    •  Чтобы задать тип переменной, щелкните в поле Туре на кнопке с тремя точками .Откроется диалоговое окно Define Variable Type. Примите предлагаемую настройку Numeric и установите длину "2" (мы предполагаем, что все респонденты не старше 99 лет) и количество десятичных разрядов "0". Подтвердите настройку кнопкой ОК и перейдите к следующему полю клавишей <Таb>.

    •  В полях Column format и Decimals примите настройки, предлагаемые по умолчанию.

    •  Для метки переменной введите текст "Возраст", а для меток значений примите предлагаемую настройку None, нажав <Enter>.

    •  Чтобы задать пропущенные значения, щелкните в поле Missing values на кнопке с тремя точками . Откроется диалоговое окно Define Missing Values. По умолчанию предлагается вариант No missing values (Нет пропущенных значений), то есть все значения рассматриваются как допустимые. Введите единичное отсутствующее значение "0" и закройте диалоговое окно кнопкой ОК.

    •  Примите предлагаемые настройки "8" в поле Columns, "Right" в поле Alignment и "Scale" в поле Measure.

    Создание маски данных мы завершаем объявлением переменной party.

    •  Введите в поле Name текст "party" и подтвердите ввод нажатием клавиши <Таb>.

    •  Чтобы задать тип переменной, щелкните в поле Туре на кнопке с тремя точками. Откроется диалоговое окно Define Variable Type. Примите предлагаемую настройку Numeric и установите длину "1" и количество десятичных разрядов "0", так как в этой переменной будут храниться только значения от 1 до 7 и 0 как отсутствующее значение. Подтвердите настройку кнопкой ОК и перейдите к следующему полю клавишей <Таb>.

    •  Для формата столбца примите значение "1" и количество десятичных разрядов "0".

    •  Для метки переменной задайте текст "Партия".

    •  Щелкните в поле Value labeb на кнопке .Откроется диалоговое окно Define Value Labels (см. рис. 3.5).

    •  Вначале введите в поле Value (Значение) число "1". Нажмите клавишу <Таb>.

    •  Введите в поле Value label (Метка значения) текст "ХДС/ХСС".

    •  Щелкните на кнопке Add (Добавить). Метка значения будет добавлена в список.

    •  Повторите эти действия для значений "2" — "СДП", "3" — "СЕПГ", 4 — "Зеленые/ Союз90", 5 — "ПДС", 6 — "Республиканцы", "7" — "Прочие" и "0" — "Нет данных".

    Результат ввода всех значений в диалоговом окне показан на рис. 3.8.



    Рис. 3.8: Заполненное диалоговое окно Define Value Labels для переменной party

    •  Подтвердите введенные данные кнопкой О К, а затем — клавишей <Таb>.

    •  Чтобы задать пропущенные значения, щелкните в поле Missing на кнопке с тремя точками . Откроется диалоговое окно Define Missing Values. Щелкните на пункте Discrete missing values и задайте значение "0".

    •  Подтвердите выбор пропущенных значений для переменной party кнопкой ОК и нажмите клавишу <Таb>.

    •  В полях Columns и Alignment примите настройки, предлагаемые по умолчанию.

    •  В поле Measure щелкните на кнопке с тремя точками и выберите вариант Nominal.

    4.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    15.gif

    Изображение: 

    19.gif

    Изображение: 

    3.4.2 Ввод данных

    3.4.2 Ввод данных


    Приступим ко вводу данных:


    fragebnr


    sex


    age


    party


    1


    W-001


    1


    45


    1


    2


    W-002


    2


    22


    3


    3


    W-003


    2


    19


    3


    4


    W-004


    1


    42


    1


    5


    W-005


    2


    . 34


    4


    6


    W-006


    1


    72


    2


    7


    W-007


    2


    38


    3


    8


    W-008


    1


    56


    3


    9


    W-009


    2


    61


    1


    10


    W-010


    1


    77


    1


    11


    W-011


    1


    23


    4


    12


    W-012


    2


    67


    6


    13


    W-013


    2


    79


    7


    14


    W-014


    1


    26


    3


    15


    W-015


    2


    59


    1


    16


    О-001


    1


    34


    4


    17


    О-002


    2


    18


    6


    18


    О-00З


    1


    44


    1


    19


    О-004


    2


    68


    1


    20


    О-005


    1


    33


    5


    21


    О-006


    2


    66


    1


    22


    О-007


    1


    22


    0


    23


    О-008


    2


    0


    3


    24


    О-009


    1


    67


    3


    25


    О-010


    2


    33


    2


    26


    0-011


    2


    44


    1


    27


    О-012


    1


    22


    3


    28


    О-013


    1


    19


    7


    29


    О-014


    1


    55


    1


    30


    0-01 5


    2


    39


    3


    Данные можно вводить по отдельным наблюдениям (строкам) или по отдельным переменным (столбцам). Действуйте следующим образом:

    •  Щелкните на ячейке в левом верхнем углу. Вокруг ячейки появится рамка. Таким образом эта ячейка обозначается как активная.

    •  Введите значение, в нашем примере это "W-001". Это значение отобразится в редакторе ячеек в верхней части окна редактора данных.

    •  Нажмите клавишу <Таb>. Значение из редактора ячеек отобразится в ячейке.

    В следующих таблицах показано, каким клавишам в редакторе данных соответствует какая функция. Здесь, как и далее, мы предполагаем, что активизирована таблица просмотра данных.


    Позиционирование


    Клавиша


    Функция


    <Таb> или <стрелка вправо>


    Перемещает курсор на ячейку вправо.


    <Enter> или <стрелка вниз>


    Перемещает курсор на ячейку вниз.


    <стрелка вверх>


    Перемещает курсор на ячейку вверх.


    <Shift> <Tab> или <стрелка влево>


    Перемещает курсор на ячейку влево, т.е. в предыдущее поле.


    <Ноте>


    Перемещает курсор в первую ячейку строки или случая.


    <End>


    Перемещает курсор в последнюю ячейку случая.


    <Ctrl> <стрелка вверх>


    Перемещает курсор в первый случай столбца.


    <Ctrl> <стрелка вниз>


    Перемещает курсор в последний случай столбца.


    <Ctrl> <Home>


    Перемещает курсор в первую ячейку первого случая.


    <Ctrl> <End>


    Перемещает курсор в последнюю ячейку последнего случая.


    <Page Up>


    Прокручивает таблицу на одну страницу вверх.


    <Page Down>


    Прокручивает таблицу на одну страницу вниз.


    Выделение


    <Shift> <пробел>


    Выделяет всю строку.


    <Ctri> <пробел>


    Выделяет весь столбец.


    <Shift> <клавиши со стрелками>


    Выделение области случаев и переменных. Также можно щелкнуть мышью и перетянуть ее из верхнего левого угла области в нижний правый угол.


    Редактирование


    F2


    Переключает в режим редактирования. Следующее нажатие <F2> отключает режим редактирования.


    <стрелка вправо>


    Переместить позицию редактирования в ячейке вправо на один знак.


    <стрелка влево>


    Переместить позицию редактирования в ячейке влево на один знак.


    <Ноте>


    Перейти в начало значения ячейки.


    <End>


    Перейти в конец значения ячейки.

    3.5 Сохранение файла данных

    3.5 Сохранение файла данных


    Сейчас мы сохраним созданный файл данных. Поступите следующим образом:

    •  Выберите в меню команды File (Файл) Save as... (Сохранить как...) Откроется диалоговое окно Save Data as (Сохранить данные как).

    По умолчанию SPSS сохраняет файл данных в текущем каталоге с расширением .sav. 

    Если вы следовали указаниям по инсталляции и задали рабочий каталог \SPSSBOOK, он будет предлагаться по умолчанию.

    •  Задайте имя файла, соответствующее соглашению об именах в DOS. Для рассматриваемого примера мы предлагаем имя файла "btwahl.sav". Расширение .sav SPSS присваивает файлам данных по умолчанию. Поэтому расширение .sav вводить необязательно.


    Рис. 3.9: Диалоговое окно Save Data as

    22.gif

    Изображение: 

    3.6 Копирование описаний переменных

    3.6 Копирование описаний переменных


    В исследовании на тему "Здоровье и питание", в частности, проводится опрос о предпочитаемых диетах. Респонденты должны ответить, насколько к ним относится одно из следующих высказываний.


    Я предпочитаю следующую диету


    Да, конечно


    Да


    Частично


    В малой степени


    Нет


    вегетарианскую


    X


    X


    X


    X


    X


    биодинамическую


    X


    X


    X


    X


    X


    с низким содержанием животных белков


    X


    X


    X


    X


    X


    фаст-фуд


    X


    X


    X


    X


    X


    с учетом калорийности


    X


    X


    X


    X


    X


    сытную


    X


    X


    X


    X


    X


    дешевую


    X


    X


    X


    X


    X


    Так как в этом случае описания семи переменных в матрице данных почти одинаковы, можно сэкономить время, просто перенеся параметры описания первой переменной на остальные шесть. Для этого поступите следующим образом.

    •  Активизируйте вид данных редактора данных, введите в поле Name текст "vegetar" и подтвердите ввод нажатием клавиши <Таb>.

    •  Чтобы задать тип переменной, щелкните в поле Туре на кнопке с тремя точками Откроется диалоговое окно Define Variable Type. Примите предлагаемую настройку Numeric и установите длину 1 и количество десятичных разрядов I) , так как в этой переменной будут храниться только значения от 1 до 5 и 0 как отсутствующее значение. Подтвердите настройку кнопкой ОК и перейдите к следующему полю клавишей <Таb>.

    •  Для формата столбца примите значение "1" и количество десятичных разрядов "0".

    •  Для метки переменной задайте текст "вегетарианская".

    •  Щелкните в поле Values на кнопке Откроется диалоговое окно Define Value Labels.

    •  Вначале введите в поле Value число "1". Нажмите клавишу <Таb>.

    •  Введите в поле Label текст "да, конечно".

    •  Щелкните на кнопке Add. Метка значения будет добавлена в список.

    •  Повторите эти действия для значений "2" — "да", "3" — "частично", "4" — "в малой степени", "5" — "нет" и "0" — "нет данных".

    •  Подтвердите введенные данные кнопкой ОК, а затем — клавишей <Таb>.

    •  Чтобы задать пропущенные значения, щелкните в поле Missing на кнопке с тремя точками . Откроется диалоговое окно Define Missing Values. Щелкните на пункте Discrete missing values и задайте значение 0 .

    •  Подтвердите выбор пропущенных значений для переменной vegetar кнопкой ОК и нажмите клавишу <Таb>.

    •  В полях Columns, Alignment и Measure примите настройки, предлагаемые по умолчанию.

    •  Поместите курсор в ячейку с номером 1, т.е. в начало первой строки, и нажмите левую кнопку мыши. Параметры описания первой переменной будут выделены (см. рис. 3.10).


    Рис. 3.10: Выделенное описание переменной

    •  Выберите в меню команды Edit (Правка) Сору (Копировать)

    •  Поместите курсор в ячейку с номером 2, т.е. в начало второй строки, и нажмите левую кнопку мыши — будет выделена вторая строка.

    •  Выберите в меню команды Edit (Правка) Paste (Вставить) 

    Параметры объявления первой переменной будут скопированы во вторую строку.



    Рис. 3.11: Скопированные параметры описания .переменной

    •  Далее измените предлагаемое имя переменной var0000l на biolog и повторите эти действия для всех остальных переменных.

    •  После пометки и копирования описания переменной, когда выделена вторая строка для вставки описания, вместо команд Edit Paste можно также использовать команду меню Edit Paste variables... (Вставить переменные) Откроется диалоговое окно Paste Variables.


    Рис. 3.12: Диалоговое окно Paste Variables

    •  Замените предлагаемое имя vege на новое имя biolog и щелкните на кнопке ОК.

    Диалоговое окно Paste Variables (см. рис. 3.12) дает возможность указать количество новых переменных. Если задать здесь число 6, параметры объявления переменной vegetar можно будет перенести на все остальные переменные за одну операцию. В этом случает таблица будет выглядеть так:



    Рис. 3.13: Таблица после вставки нескольких переменных


    Нам остается только заменить имена переменных vege I — vege6 на желаемые, например, biolog, lowprot, fastfood, calbal, rich и cheap, и все переменные шкалы "Предпочтения в питании" будут объявлены.

    26.gif

    Изображение: 

    27.gif

    Изображение: 

    28.gif

    Изображение: 

    29.gif

    Изображение: 

    3.7 Завершение сеанса работы

    3.7 Завершение сеанса работы


    Сейчас мы завершим наш сеанс работы с SPSS. 

    •  Выберите в меню команды File (Файл) Exit (Выход) 

    Для каждого из открытых окон SPSS спрашивает, надо ли сохранить его содержимое. Если щелкнуть на кнопке "Yes" (Да) или нажать <Enter>, SPSS открывает специальное диалоговое окно, в котором надо указать тип сохраняемого файла (файл данных, вывода или синтаксиса).


    Так как у нас было открыто только окно редактора данных и мы уже сохранили его содержимое в разделе 3.5, программа ничего не запрашивает и просто закрывается.

    Глава 4. SPSS для Windows — обзор

    Глава 4. SPSS для Windows — обзор

    1. PSS для Windows — обзор

    SPSS для Windows — обзор


    В этой главе мы хотим дать обзор использования SPSS для Windows на примере файлов данных wahl.sav и zahri.sav. Наш обзор в первую очередь будет касаться технических приемов работы с программой.

    •  Запустите SPSS, дважды щелкнув мышью на значке SPSS.

    •  Загрузите файл wahl.sav из каталога \SPSSBUCH. Этот файл соответствует файлу btwahl.sav, который мы сохранили ранее (см. главу 3). Для этого выберите в меню команды File (Файл) Open... (Открыть)... Появится диалоговое окно Open file (Открыть файл) (см. рис. 4.1).

    Если вы следовали нашим инструкциям по установке примеров с компакт диска (см. главу 2) и создали рабочий каталог под названием SPSSBOOK, вы увидите список файлов в каталоге \SPSSBOOK.

    •  Щелкните на кнопке со стрелкой вправо на линейке прокрутки этого списка. Удерживайте кнопку мыши нажатой, пока не появится файл wahl.sav. Выделите этот файл. Его имя должно появиться в текстовом поле File name (Имя файла). Имя нужного файла можно ввести в этом поле и непосредственно.


    Рис. 4.1. Диалоговое окно Open file

    •  Подтвердите выбор, щелкнув на кнопке Open (Открыть). Подтвердить выбор файла также можно, дважды щелкнув мышью на имени wahl.sav. После этого содержимое файла wahl.sav отобразится в окне редактора данных, как показано на рис. 4.2. Если был активизирован просмотр переменных, потребуется еще перейти на вкладку Data View (просмотр данных).

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    4.1 Выбор статистической процедуры

    4.1 Выбор статистической процедуры


    Меню статистики, которое открывается по команде меню Analyze (Анализ), содержит список статистических методов. После каждого пункта этого меню стоит стрелка. Она указывает на существование следующего уровня меню.


    Доступный набор статистических методов зависит, в частности, от того, какие модули были установлены. В варианте установки SPSS, показанного на рис. 4.3, кроме модулей, описанных в этой книге, установлены дополнительные модули Amos, AnswerTree и Trends. Эти модули рассматриваются в нашей книге "SPSS. Методы изучения рынка и общественного мнения" (SPSS. Methoden fur die Markt- und Meinungs-forschung").


    В качестве примера попробуем построить частотное распределение. Выполните следующие действия.


    Выберите в меню команды Analyze (Анализ) Descriptive statistics (Описательная статистика) Frequency... (Частоты...)



    Рис. 4.2: Фрагмент файла данных wahl.sav



    Рис. 4.3: Меню статистики Появится диалоговое окно Frequency (см. рис. 4.4).



    Рис. 4.4: Диалоговое окно Frequency


    Диалоговые окна статистических процедур содержат следующие компоненты:

    •  Список исходных переменных — список всех переменных в файле данных. В данный момент в списке исходных переменных присутствуют следующие переменные: age, fragebnr, partei, sex. Перед именем каждой переменной стоит значок; по которому можно определить, является ли эта переменная численной или строковой.

    •  Список выбранных переменных — список, содержащий переменные файла данных, которые были выбраны для анализа. Список выбранных переменных также называют целевым списком или списком тестируемых переменных. Этот список имеет заголовок Variable(s) (Переменная(ые)). Так как мы еще не выбрали ни одной переменной, этот список пуст.

    • Командные кнопки — кнопки, при щелчке на которые выполняются определенные действия. В этом диалоговом окне расположены кнопки OK, Paste (Вставить), Reset (Сброс или Отклонить), Cancel (Отмена) и Help (Справка), а также кнопки, открывающие вспомогательные диалоговые окна: Statistics... (Статистика), Charts... (Диаграммы или Графики) и Format... (Формат). Кнопки вспомогательных диалоговых окон отличаются троеточием (...) после названия.

    Пять стандартных командных кнопок в главном диалоговом окне имеют следующее назначение:

    •  ОК — кнопка ОК запускает соответствующую процедуру. Одновременно она закрывает диалоговое окно.

    •  Paste — эта кнопка переносит выбранный в диалоговом окне синтаксис команды в редактор синтаксиса. Здесь можно отредактировать синтаксис команды и дополнить его другими опциями, недоступными в данном диалоговом окне.

    •  Reset — эта кнопка отменяет перенос выделенной переменной в целевой список переменных.

    •  Cancel — эта кнопка отменяет все изменения, сделанные с момента последнего открытия диалогового окна, и закрывает его.

    •  Help — эта кнопка выводит контекстно-чувствительную справку. При щелчке на ней открывается окно справки, содержащее сведения о текущем диалоговом окне.

    Выбор переменных


    Сначала мы построим частотное распределение для переменной partei. Выполните следующие действия:

    •  Выделите переменную party в списке исходных переменных.

    •  Щелкните на кнопке, которая находится рядом со списком выбранных переменных. Переменная party будет перенесена из списка исходных переменных в список выбранных переменных. Можно также дважды щелкнуть на нужной переменной, и она будет перенесена в список выбранных переменных.

    •  Подтвердите операцию, щелкнув на кнопке ОК. Результаты будут отображены в окне просмотра (Viewer).

    Окно просмотра разделено на две части. В левой отображается структура вывода, а в правой — собственно выводимые данные. В разделе вывода отображаются как таблицы, так и графики. Подробное описание окна просмотра и возможностей, которое оно предоставляет, приводится в разделе 4.5.


    Вернемся в редактор данных. Это можно сделать двумя различными способами:

    •  Выберите в меню команды Window (Окно) 1 Wahl.sav — SPSS Data Editor или щелкните на панели инструментов на символе редактора данных  

    Рис. 4.5: Окно просмотра


    Чтобы для построения частотного распределения выбрать все переменные, содержащиеся в файле данных, выполните следующие действия:

    •  Щелкните на имени первой переменной и задержите нажатой левую кнопку мыши. Перетащите мышь, пока не будут выделены все переменные.

    •  Затем, щелкнув на кнопке с треугольником, перенесите переменные в список выбранных переменных.

    Для выполнения этой же задачи можно также щелкнуть на первой переменной, а затем, нажав клавишу <Shift> — на последней переменной (метод "Shift-клик"). Чтобы выделить несколько переменных, которые находятся в разных местах списка, следует поступить следующим образом:

    •  Щелкните на первой переменной, а затем, при нажатой клавише <Ctrl>, — на следующей и т.д. (метод "Ctrl-клик").

    Вспомогательные диалоговые окна


    Сейчас мы попробуем определить наименьшее, наибольшее и среднее значения переменной age.

    •  Выберите в меню команды Analyze (Анализ) Descriptive statistics (Дескриптивные статистики) Frequency... (частота распределения)

    •  В диалоговом окне Frequency щелкните сначала на кнопке Reset(C6poc). Затем перенесите переменную age в конечный список переменных.

    • Щелкните на кнопке Statistics... Откроется диалоговое окно Frequency: Statistics (Частотное распределение: Статистика) (см. рис. 4.6).


    Рис. 4.6: Диалоговое окно Frequency: Statistics

    •  Установите флажки Minimum (Наименьшее значение), Maximum (Наибольшее значение) и Average (Среднее значение).

    •  Щелкните на кнопке Next (Далее). Настройки будут сохранены и мы вернемся в главное диалоговое окно.

    •  Снимите флажок Display frequency tables (Показывать частотные таблицы).

    •  Запустите вычисление, щелкнув на кнопке ОК. Результаты будут показаны в окне просмотра:

    Статистика


    Возраст


    N


    Имеется


    29


    Отсутствует


    1


    Среднее


    44,28


    Наименьшее


    18


    Наибольшее


    79

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    4.10 Настройки

    4.10 Настройки

    •  Для того, чтобы изменить системные настройки SPSS, выберите в меню Edit (Правка) Options... (Параметры)

    Откроется диалоговое окно Options (Параметры).


    В этом диалоговом окне находятся десять регистрационных карт. Названия отдельных параметров говорят сами за себя, поэтому мы остановимся только на описании самих регистрационных карт.

    •  General (Общие): здесь вы можете задать тип сортировки списков переменных. Сортировка в алфавитном порядке, установленная по умолчанию, может быть изменена на порядок, в котором переменные были расположены в рабочем файле. Вы можете также задать, что указывать во всех диалоговых окнах — метки значений или имена переменных.

    •  Viewer (Окно просмотра): здесь можно установить тип и размер шрифта заголовков и текста, отображаемых в окне просмотра, а также задать размеры страницы.

    •  DraftViewer (Окно текстового режима): на этой карте присутствуют различные установки внешнего вида таблиц и текста.

    •  Output Labels (Обозначение выводимых значений): Вы можете выбрать, будут ли для обозначения переменных указываться их имена или соответствующие метки (установка по умолчанию) или и то и другое одновременно. Для обозначения категорий переменной вы можете выбрать значение переменной или метку значения (установка по умолчанию) или оба варианта одновременно.


    Рис. 4.35: Диалоговое окно Параметры SPSS

    •  Charts (Диаграммы): наряду с установками шрифта вы можете также задать, будут ли различные столбцы, линии, области и т.д. отображаться разными цветами (установка по умолчанию) или же при помощи разных штриховок и соответственно типов линий. Вы также можете управлять компоновкой рамки (рамка снаружи или внутри) и организовывать отображение координатной сетки.

    •  Interactive (Интерактивный режим): Вы можете выбрать параметры интерактивных графиков задав, к примеру, некоторый образец. Если из соображений последующей обработки и вывода на печать вы хотите, чтобы диаграмма была построена в чёрно-белом виде, активируйте для этого образец Grayscale.do (Оттенки серого).

    •  Pivot Tables (Мобильные таблицы): здесь Вы можете выбрать внешний вид (компоновку) мобильных таблиц.

    •  Data (Данные): в этой карте может быть изменён формат представления рассчитанных переменных (установка по умолчанию: восемь позиций, причём две из них приходятся десятичные знаки). Для отображения года двумя последними цифрами Вы можете дополнительно указать столетие. Если вы активируете автоматическую опцию, столетие будет отсчитываться будет в пределах от 1931 до 2030.

    •  Currency (Денежная единица): здесь можно указать денежный формат (см. гл. 3.4.1).

    •  Scripts (Сценарии): Вы можете активировать автоматические сценарии. 

    Теперь Вы разбираетесь в технических тонкостях управления программой.

    55.gif

    Изображение: 

    4.2. Настройки редактора данных

    4.2. Настройки редактора данных


    Меню View (Вид) редактора данных содержит множество опций, с помощью которых можно произвести индивидуальную настройку редактора данных. В частности, можно:

    •  Показать или скрыть строку состояния. Команда: Status bar (Строка состояния)

    •  Увеличить значки на панели символов и включить или отключить отображение кратких сведений. Команда: Toolbars... (Панели символов)

    •  Выбрать другой тип, начертание и размер шрифта. Команда: Fonts... (Шрифты)

    •  Включить или отключить отображение линий сетки. Команда: Grid lines (Линии сетки)

    •  Отображать метки значений вместо фактических значений переменных. Команда: Value labels (Метки значений)

    Рассмотрим следующий пример:


    Мы хотим, чтобы вместо значений переменных файла wahl.sav отображались метки значений.

    •  В первую очередь командами меню Window 1 Wahl.sav — SPSS Data Editor перейдите в редактор данных, если окно вывода еще активно.

    •  Выберите в меню команды: View Value labels

    Теперь в редакторе данных файл wahl.sav будет отображен с метками значений вместо значений переменных.


    Метки значений также позволяют как вводить данные, так и изменять их. Выполните следующие действия:

    •  Щелчком мыши выделите, например, ячейку переменной partei. Появится кнопка

    •  Щелкните на этой кнопке. Отобразится список меток значений переменной party (см. рис. 4.8).


    Рис. 4.7: Редактор данных с метками значений



    Рис. 4.8: Список меток значений в редакторе данных

    •  Выберите из списка метку, которую хотите ввести. После щелчка выделенная метка значения будет перенесена в ячейку. Это позволяет относительно быстро исправлять ошибки в содержимом ячеек данных.

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    4.3 Панели символов

    4.3 Панели символов


    SPSS имеет следующие окна:

    •  Редактор данных (Data Editor)

    •  Окно просмотра (Viewer)

    •  Окно просмотра текста (Text Viewer)

    •  Редактор мобильных таблиц (Pivot Table Editor)

    •  Редактор диаграмм (Diagram Editor)

    •  Редактор текстового вывода (Text Output Editor)

    •  Редактор синтаксиса (Syntax Editor)

    •  Редактор скриптов (Script Editor)

    Редактор данных был подробно описан в разделе 3.4, другие окна мы рассмотрим позже. Каждое окно, кроме редактора мобильных таблиц, имеет одну или две панели символов для вызова часто используемых команд. Краткие сведения о каждом символе можно получить, если поместить на него указатель мыши.


    Ниже представлены прежде всего те символы, которые встречаются в большинстве или во всех окнах.

    Открыть файл: Этот символ активизирует диалоговое окно открытия файла, причем по умолчанию предлагается открыть документ того же типа, который находится в активном окне. Следовательно, при помощи этого символа можно открыть файл данных, файл вывода или файл синтаксиса.

    Сохранить файл: Этот символ предназначен для сохранения рабочего файла. Если рабочему файлу еще не присвоено имя, этот символ активизирует диалоговое Save as (Сохранить как). Если вы находитесь не в окне редактора данных, активизируется диалоговое окно сохранения файла соответствующего типа — файла вывода или синтаксиса.

    Печать: Этот символ вызывает диалоговое окно вывода на печать в соответствии с типом активного окна. Он позволяет напечатать весь документ или только выделенную область.

    История вызова диалоговых окон: Этот символ выводит список 12 последних вызванных диалоговых окон. Это дает возможность быстро перейти к одному из недавно вызванных диалоговых окон. Окно, вызванное в последнюю очередь, всегда находится в начале списка.

     

    Чтобы заново вызвать диалоговое окно, просто щелкните на соответствующем пункте списка.

    Перейти в редактор данных: Этот символ обеспечивает переход в редактор данных из любого окна.

    Перейти к наблюдению: Этот символ открывает диалоговое окно Go to case (Перейти к наблюдению). Его можно использовать для перехода к определенному наблюдению, так в SPSS называется набор значений переменных, набранных в строке редактора данных.

    Выбрать наблюдения: -этот символ открывает диалоговое окно select cases (Выбрать наблюдения). Его можно использовать для отбора наблюдений, для которых выполняется определенное условие.

    Информация о переменных: Этот символ открывает диалоговое окно Variables, в котором отображаются описания выделенных переменных. Из множества символов, которые возникают только в одном определенном окне, мы покажем лишь несколько. О назначении остальных легко можно узнать из кратких сведений (Quick Info) по данному символу.

    В редакторе синтаксиса большое значение имеет символ Syntax-Start (Синтаксис-Начать), в случае если для вызова статистических процедур Вы пользуетесь командным синтаксисом SPSS (см. главу 26):

    Синтаксис-Начать: В окне редакторе синтаксиса этот символ запускает на выполнение выделенные команды SPSS. Если не выделено ни одной команды, запускается команда, на которой находится курсор.

    Три следующих символа могут быть задействованы в редакторе данных.

    Вставить наблюдение: В редакторе данных щелчок на этом символе вызывает вставку наблюдения над активной ячейкой.

    Вставить переменную: В редакторе данных щелчок на этом символе вызывает вставку новой переменной слева от активной переменной.

    Метки значений: Этот символ позволяет переключаться между отображением значений и меток значений.

    Символы, доступные в редакторе диаграмм, подробно описаны в разделе 22.16.

    16.gif

    Изображение: 

    4.4 Построение и редактирование графиков

    4.4 Построение и редактирование графиков


    Представим в графическом виде значения переменной partei (партия).

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  При помощи кнопки Reset (Сброс) удалите все предыдущие установки.

    •  Щёлкните дважды на переменной partei (партия), чтобы поместить её в список отобранных переменных.

    •  Щёлкните на выключателе Charts... (Диаграммы). Откроется диалоговое окно Frequencies: Charts (Частоты: Диаграммы) (см. рис. 4.9).

    •  Щёлкните на опции Bar Charts (Столбчатые диаграммы), в области Chart Values (Значения диаграммы) щёлкните на опции Percentages (Проценты) и затем на Continue (Далее).

    •  В главном диалоговом окне деактивируйте опцию Display frequency tables (Показать частотные таблицы).

    •  Щёлкните на ОК. В окне просмотра появится столбчатая диаграмма (см. рис. 4.10).


    Рис. 4.9: Диалоговое окно Frequencies: Charts (Частоты: Диаграммы)


    Предположим, у Вас появилось желание отредактировать построенный график в соответствии со своими требованиями.

    •  Щёлкните дважды на какой-либо точке в пределах графика. После этого он будет помещён в редактор диаграмм (см. рис. 4.11).

    Панель меню изменилась. Теперь в меню присутствуют только опции, предназначенные для обработки графиков (см. гл. 22.16). Также претерпели изменения и панели инструментов. Изменим сначала метод представления столбцов. Столбцы, в соответствии с нашим желанием, должны быть представлены в трёхмерном виде.



    Рис. 4.10: Столбчатая диаграмма в окне просмотра



    Рис. 4.11: Столбчатая диаграмма в окне редактора диаграмм

    •  В меню редактора диаграмм выберите Format (Формат) Bar Style... (Вид столбца) 

    Откроется диалоговое окно Bar Styles (Виды столбцов) (см. рис. 4.12).



    Рис. 4.12: Диалоговое окно Ва Styles (Виды столбцов)

    •  Щёлкните на области 3-D effect (3-D эффект).

    •  В поле Depth (Глубина) введите число "40".

    •  Щёлкните Apply All (Применить для всех) и затем на выключателе Close (Закрыть). Теперь столбчатая диаграмма выглядит так, как изображено на рисунке 4.13.


    Рис. 4.13: Столбиковая диаграмма с 3D эффектом


    Теперь дадим графику название.

    •  Выберите в меню Chart (Диаграмма) Title... (Заголовок)

    •  Откроется диалоговое окно Titles (Заголовки).

    •  В поле Title 1 (Заголовок 1) введите текст "Парламентские выборы", а в поле ТШе2 (Заголовок 2) "Воскресный опрос". Выберите для заголовка и подзаголовка центральное выравнивание — Center (Центр). Подтвердите нажатием ОК.

    Теперь выделим график при помощи рамки.

    •  Выберите в меню Chart (Диаграмма) Outer Frame (Рамка снаружи) Пометим столбцы точными процентными показателями.


    Рис. 4.14: Диалоговое окно Titles (Заголовки)

    •  Выберите в меню Format (Формат) Bar Label Style... (Метки столбцов)

    Откроется диалоговое окно Bar Label Styles (Метки столбцов).

    •  Щёлкните на области Framed (В рамке), затем на Apply All (Применить для всех) и в заключение на Close (Закрыть). Отредактированная нами диаграмма отображена на рисунке 4.16.


    Рис. 4.15: Диалоговое окно Bar Label Styles (Метки столбцов)



    Рас. 4.16: Столбиковая диаграмма с метками столбцов


    Если Вы желаете сохранить построенный график, то поступите следующим образом: 

    •  При помощи щелчка на значке закройте редактор диаграмм.

    Отредактированный график останется в окне просмотра. Этот график (а в общем случае и любые другие результаты, выведенные в окно просмотра) мы хотим сохранить в файле, который имеет формат Viewer (средства просмотра SPSS).

    •  Выберите в меню File (Файл) Save As... (Сохранить как) 

    Откроется диалоговое окно Save As (Сохранить как) (см. рис. 4.17).


    Согласно предварительным установкам, SPSS обозначает файлы, которые имеют формат средства просмотра, присваивая им расширение .spo.

    •  Задайте подходящее имя файла и щёлкните на ОК.


    Рис. 4.17: Диалоговое окно Save As (Сохранить как)


    Теперь распечатаем график на принтере.

    •  Выберите в меню File (Файл) Print... (Печать)

    •  Подтвердите установки диалогового окна Print (Печать) при помощи кнопки ОК.

    25.gif

    Изображение: 

    26.gif

    Изображение: 

    27.gif

    Изображение: 

    28.gif

    Изображение: 

    29.gif

    Изображение: 

    30.gif

    Изображение: 

    31.gif

    Изображение: 

    32.gif

    Изображение: 

    34.gif

    Изображение: 

    4.5 Окно просмотра

    4.5 Окно просмотра


    Рассмотрим на конкретном примере возможности, предоставляемые пользователю окном средства просмотра результатов. Для того, чтобы иметь рабочий материал в окне просмотра, произведём некоторые операции с файлом wahl.sav и построим несколько таблиц и график.


    На первом шаге подсчитаем частоты переменной partei (партия).

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  Перенесите переменную partei (партия) в поле тестируемых переменных и подтвердите действие при помощи ОК.

    Теперь создадим таблицу сопряженности для переменных partei (партия) и sex (пол).

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  Поместите переменную partei (партия) в поле строчных переменных (Row), а переменную sex (пол) в поле столбцовых (Column).

    •  При помощи выключателя Cells... (Ячейки) организуйте вывод процентных показателей по столбцам (опция Column (Столбец)).

    •  Щёлкните на выключателе Statistics (Статистики) и активируйте тест Chi-square (Тест Хи-квадрат).

    Представим распределение частотных показателей переменной partei (партия) в виде круговой диаграммы.

    •  Выберите в меню Graphs (Графики) Pie... (Круговые)

    •  Оставьте, установленную по умолчанию, опцию Summaries for groups of cases (Обработка категорий одной переменной), щелкните на кнопке Define (Определить), поместите переменную partei (партия) в поле для сегментов, озаглавленное Define slices by (Создать сектора на основе).

    В заключение подсчитаем для переменной alter (возраст) статистические показатели.

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Descriptives... (Дескриптивные)

    •  Перенесите переменную alter (возраст) в поле тестируемых переменных.

    Результаты производимых нами расчётов будут по очереди появляться в окне просмотра, согласно установкам, каждый последующий результат расчёта будет помещаться в конец окна. Если Вас вся эта процедура сильно утомляет, Вы можете просто в окне просмотра открыть файл beispiel.spo, в котором сохранены все рассчитанные нами данные. Окно просмотра Viewer будет выглядеть так, как изображено на рисунке 4.18.


    Окно просмотра состоит из двух частей. В левой части находится иерархия (обзор содержания) результатов; в правую часть помещаются таблицы с результатами расчётов и построенные графики. Ширину этих частей окна можно изменять перетаскиванием разделительной границы при помощи мыши.


    Рассмотрите полученные результаты, помещенные в правую часть окна и ознакомьтесь с формой таблиц. В качестве примера рассмотрим поподробнее таблицу сопряженности между полом (sex) и переменной partei (партия), характеризующей партийные предпочтения респондентов.



    Рис. 4.18: Окно просмотра


    Partei * Geschlecht Crosstabulation (Таблица сопряженности Партия * Пол)


    Geschiecnt (Пол)


    lTotal


    weiblich (женский)


    mannlich (мужской)


    (Сумма)


    Partei


    (Партия)


    CDU/CSU


    Count (Количество)


    5


    5


    10


    % within Geschiecht (% для пола)


    35,7%


    33,3%


    34,5%


    FDP


    Count (Количество)


    1


    1


    2


    % within Geschlecht (% для пола)


    7,1%


    6,7%


    6,9%


    SPD


    Count (Количество)


    4


    5


    9


    % within Geschlecht (% для пола)


    28,6%


    33,3%


    31,0%


    Grbne/ Bundnis (Зелёные / Союз 90)


    Count (Количество)


    2


    1


    3


    % within Geschlecht (% для пола)


    14,3%


    6,7%


    10,3%


    PDS


    Count (Количество)


    1


    1


    % within Geschlecht (% для пола)


    7,1%


    3,4%


    Republikaner


    (Респуб- ликанцы)


    Count (Количество)


    2


    2


    % within Geschlecht (% для пола)


    13,3%


    6,9%


    Sonstige (прочие)


    Count (Количество)


    1


    1


    2


    % within Geschlecht (% для пола)


    7,1%


    6,7%


    6,9


    Total


    (Сумма)


    Count (Количество)


    14


    15


    29


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%


    Иерархию окна просмотра можно увидеть в левой части рисунка 4.18.


    Результаты каждой выполненной статистической процедуры, а также графический вывод, отображаются в окне просмотра в виде блока, причём каждый блок является отдельным объектом. В иерархии каждый блок озаглавливается соответствующим именем процедуры, перед которым устанавливается значок блока. Этому значку предшествует небольшой четырёхугольник, в котором сначала указывается знак минус. Внутри каждого блока сначала Вы видите заголовок и примечания. Далее идёт перечисление элементов блока, которым тоже предшествуют соответствующие символы. Благодаря такой конструкции иерархии объектов, вы можете производить поиск необходимых элементов, переставлять их местами, копировать, удалять и т.д.


    Поиск в окне просмотра

    •  Чтобы увидеть в области вывода необходимый объект или элемент, Вам не нужно прокручивать всё окно просмотра. Чтобы попасть в нужное место, щёлкните на соответствующем символе в иерархии.

    Удаление в окне просмотра

    •  Чтобы удалить некоторые элементы результатов расчётов, щёлкните на соответствующем символе и выберите в меню Edit (Правка) Delete (Удалить)

    Вы можете также просто нажать на клавиатуре клавишу <Delete>. 


    Скрытый режим


    Вместо того, чтобы удалять части блоков, Вы можете на некоторое время их "скрыть". Они становятся невидимыми на экране и при печати.

    •  Чтобы скрыть части результатов, щёлкните дважды на соответствующем символе в иерархии или выделите нужный элемент одним щелчком с последующим выбором меню View (Вид) Hide (Скрыть)

    •  Если Вы вновь хотите сделать элемент видимым, повторно щёлкните дважды на значке или выделите его одним щелчком с последующим выбором меню View (Вид) Show (Показать)

    •  Если же Вы хотите скрыть целый блок, содержащий весь вывод отдельной процедуры, щёлкните на маленьком квадратике слева от значка блока. При этом знак минус в квадратике превратится в знак плюс и данная процедура вместе со всем её содержимым исчезнет.

    •  Вы можете также выделить значок блока и произвести следующий выбор меню View (Вид) Collapse (Свернуть)

    •  Блок можно вновь сделать видимым при помощи повторного щелчка на квадратике; при этом знак плюс опять будет заменён знаком минус. Можно также щелчком выделить значок блока и выбрать в меню View (Вид) Expand (Развернуть)

    Перестановка в окне просмотра

    •  Если Вы хотите переместить некоторую часть результатов на другое место, выделите соответствующий значок (если необходимо, то значок блока) и удерживая нажатой левую кнопку мыши, переместите его к тому элементу, после которого Вы бы хотели расположить данные результаты или блок.

    •  Альтернативная возможность перемещения элементов заключается в выделении значка, соответствующего необходимой части информации с последующим выбором меню Edit (Правка) Cut (Вырезать)

    •  Затем выделите значок, позади которого вы бы хотели вставить вырезанный элемент и выберите в меню Edit (Правка) Paste After (Вставить после)

    Копирование в окне просмотра

    •  Если вы хотите скопировать какую-либо часть информации в другое место (при этом сохранив её на прежнем месте), щёлкните на значке, соответствующем нужному элементу или блоку, не отпуская кнопку мыши, нажмите на клавиатуре клавишу <Ctrl> и перетащите значок к тому элементу, после которого должен быть вставлен копируемый элемент.

    •  Вы можете также щёлкнуть на значке копируемого элемента и выбрать в меню следующие опции: Edit (Правка) Сору (Копировать)

    •  Затем щёлкните на значке элемента, после которого должен быть вставлен копируемый элемент и выберите в меню Edit (Правка) Paste After (Вставить после) 

    Вывод примечаний


    При чтении результатов расчётов очень помогают примечания. В них содержится информация о соответствующем файле и общих установках программы. По умолча--ию эти примечания сначала являются скрытыми, но их можно сделать видимыми, если, к примеру, дважды щёлкнуть на значке примечания (Notes). В качестве приме-га отобразим примечание для процедуры подсчёта частоты.


    Notes (Примечания)


    Output Created (Расчёт произведен)


    18-ОСТ-2001 16:26:51


    Comments (Комментарии)


    input (Ввод)


    Data (Данные)


    E:\WAHL.SAV


    Filter (Фильтр)


    <nоnе> (отсутствует)


    Weight (Вес)


    <nоnе> (отсутствует)


    Split File (Разделение файла)


    <nоnе> (отсутствует)


    N of Rows in Working Data File (Количество строк в рабочем файле)


    30


    Missing Value Handling (Обработка отсутствующих значений)


    Definition of Missing (Определение отсутствующих значений)


    User-defined missing values are treated as missing. (Отсутствующие значения указанные пользователем, обрабатываются как отсутствующие)


    Cases Used (Использованные случаи)


    Statistics are based on all cases with valid data. (Статистики базируются на всех случаях с допустимыми переменными)


    Syntax (Синтаксис)


    FREQUENCIES VARIABLES=partei /ORDER= ANALYSIS . (Частотная переменная=раг1е1/Команда = анализ)


    Resources (Ресурсы)


    Total Values Allowed (Данные, пригодные для расчёта)


    18724


    Elapsed Time (Продолжительность расчёта)


    0:00:00,22


    Изменение размера и типа шрифта иерархического списка

    •  Чтобы изменить размер знаков и тип шрифта в иерархическом списке, выберите в меню View (Вид) Outline Size (Размер знаков) и соответственно View (Вид) Outline Font (Шрифт знаков)

    У Вас появится возможность выбора среди трёх размеров (Small (Мелкий), Medium (Средний), Large (Крупный)) и большого количества шрифтов.

    35.gif

    Изображение: 

    4.6 Редактирование таблиц

    4.6 Редактирование таблиц


    В главе 4.5 мы уже рассматривали, как при помощи иерархического списка в окне просмотра можно управлять выводом элементов результатов расчётов. Теперь мы расскажем о возможностях, которые существуют для редактирования элементов результатов. Так как приёмы редактирования графиков уже рассматривались в разделе 4.4, здесь мы остановимся только на редактировании таблиц.


    Многие элементы результатов расчетов представлены в виде так называемых мобильных таблиц. Это новая форма таблиц, которая позволяет менять местами строки, столбцы и слои таким образом, чтобы результаты можно было бы оценить с разных точек зрения. Хорошим примером их применения могут послужить, прежде всего, таблицы сопряженности.

    •  Откройте файл zahn.sav и выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    Переменной рu (периодичность чистки) присвойте статус строчной переменной, а переменной g (пол) статус столбцовой переменной. Через выключатель Cells... (Ячейки) наряду с установленным по умолчанию выводом наблюдаемых частот, организуйте вывод процентных показателей по столбцам (опция Column (Столбец)). Эти действия приведут к отображению следующей перекрёстной таблицы (предшествующая таблица "Case Processing Summary" (Итоги для обработанных наблюдений) была пропущена).


    Putzhaeufigkeit * Geschlecht Crosstabulation (Перекрёстная таблица Периодичность чистки * Пол)


    Geschlecht (Пол)


    Total


    (Сумма)


    weiblich (женский)


    mannlich (мужской)


    Putzha-eufigkeit


    (Перио-дичность


    чистки)


    < 1-mal taeglich


    (< 1 раза в день)


    Count (Количество)


    14


    4


    18


    % within Geschlecht (% для пола)


    2,0%


    ,9%


    1,6%


    1-mal taeglich


    (1 раз в день)


    Count (Количество)


    177


    56


    233


    % within Geschlecht (% для пола)


    25,1%


    13,2%


    20,6%


    2-mal taeglich


    (2 раза в день)


    Count (Количество)


    490


    342


    832


    % within Geschlecht (% для пола)


    69,4%


    80,7%


    73,6%


    > 2-mal taeglich


    (> 2 раз в день)


    Count (Количество)


    25


    22


    47


    % within Geschlecht (% для пола)


    3,5%


    5,2%


    4,2%


    Total (Сумма)


    Count (Количество)


    706


    424


    1130


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%

    •  Если Вы хотите узнать о возможностях редактирования, которые предоставляет техника мобильных таблиц, щёлкните дважды на этой таблице. В результате будет активирован редактор мобильных таблиц.

    4.6.1 Редактор мобильных таблиц

    4.6.1 Редактор мобильных таблиц


    Об активировании редактора мобильных таблиц Вы узнаете по изменившейся панели меню.

    •  Выберите в меню Pivot (Мобильная таблица) Pivoting Trays (Поля вращения)

    Откроется окно Pivoting Trays (Поля вращения) (см. рис. 4.20), содержащее три панели, обозначенные как Layer (Слой), Row (Строка) и Column (Столбец). На панели строк расположены два значка, а на панели столбцов один значок. Для того, чтобы получить информацию о назначении этих значков, пройдитесь по ним указателем, ненадолго задерживая его над значками — будут выведены метки соответствующих переменных.


    Два значка на панели строк соответствуют переменной ри (периодичности чистки) и "статистике" соответственно, причём под статистикой в данном случае понимаются процентные показатели по столбцам, затребованные нами при построении таблицы сопряженности. Значок на панели столбцов соответствует переменной g (полу). На панели слоев значки отсутствуют; они бы там были, если бы Вы в диалоговом окне Crosstabs... (Таблицы сопряженности) ввели одну или несколько переменных слоя.



    Рис. 4.19: Редактор мобильных таблиц



    Рис. 4.20: Окно Pivoting Trays

    • При помощи этих значков Вы можете изменить структуру таблицы. Щёлкните, например, на значке Statistics панели строк и перетащите его мышью за значок, находящийся на панели столбцов. После этого процентные показатели будут отображаться в колонках таблицы.

    Putzhaeufigkeit * Geschlecht Crosstabulation (Таблица сопряженности Периодичность чистки * Пол)


    Geschlecht (Пол)


     


    Total(Сумма)


    rnannlicn (мужской)


    weiblicn (женский)


    Count (Количе ство)


    % within Geschle cht (% для пола)


    Count (Количе ство)


    % within Geschle cht (% для пола)


    Count (Количе ство)


    % within Geschle cht (% для пола)


    Putzhaeufigkeit (Перио дичность чистки)


    < 1-mal taeglich (< 1 раза в день)


    14


    2,0%


    4


    ,9%


    18


    1,6%


    1-mal taeglich (1 раз в день)


    177


    25,1%


    56


    13,2%


    233


    20,6%


    2-mal taeglich (2 раза в день)


    490


    69,4%


    342


    80,7%


    832


    73,6%


    > 2-mal taeglich


    25


    3,5%


    22


    5,2%


    47


    4,2%


    Total (Сумма)


    706


    100,0%


    424


    100,0%


    1130


    100,0%

    •  Теперь щёлкните на значке Geschlecht (пол), находящемся на панели столбцов, и разместите его позади значка, оставшегося на панели строк. Теперь обе переменные расположены по строкам. Испытайте самостоятельно и другие возможности изменения структуры таблицы.

    •  Если у Вас появилось желание выйти из редактора мобильных таблиц, щёлкните в какой-либо точке за пределами выделенной таблицы.

    •  Чтобы увидеть пример таблицы сопряженности с использованием переменных слоя, в диалоговом окне Crosstabs (Таблицы сопряженности) дополнительно к произведенным установкам поместите переменную s (образование) в поле переменных слоя. После этого построенная ранее таблица сопряженности будет разбита ещё и по категориям этой переменной. Это разбиение можно наблюдать в нижеследующей таблице.

    Putzhaeufigkeit * Geschlecht * Schulbildung Crosstabulation (Таблица сопряженности Периодичность чистки * Пол * Образование)


    Schulbildung (Обрэзование)


    Geschleсht(Пол)


    Total (Сумма)


    mannlich (мужской)


    weiblich (женский)


    Sonderschule


    Специальное)


    Putzha- euflgkeit


    (Перио- дичность чистки)


    < 1-mal taeglich


    (< 1 раза в цень)


    Count (Количество


    1



    1


    % within Geschlecht (% для пола)


    100,0%



    100,0%


    Total (Сумма)


    Count (Количество


    1



    1


    % within Geschlecht (% для пола)


    100,0%



    100,0%


    Hauptschule


    Начальная школа)


     


     


     


     


     


     


     


     


    Putzha- euflgkeit


    (Перио- дичность чистки)


    < 1-mal taeglich


    (< 1 раза в цень)


    Count (Количество


    8


    2


    10


    % within Geschlecht (% для пола)


    5,6%


    3,0%


    4,7%


    1-mal taeglich


    Count (Количество


    71



    91


    (1 раз в день)


    % within Geschlecht (% для пола)


    49,3%


    29,9%


    43,1%


    2-mal taeglich


    (2 раза в день)


    Count (Количество


    65


    42


    107


    % within Geschlecht (% для попа)


    45,1%


    62,7%


    50,7%


    > 2-mal taeglich


    > 2 раз в день)


    Count (Количество



    2


    т


    % within Geschlecht (% для пола)



    4,5%


    1,4%


    Total (Сумма)


    Count (Количество


    144


    67


    211


    % within Geschlecht (% для попа)_


    100,0%


    100,0%


    100,0%


    mittlere Reife


    Незаконченное среднее)


     


     


     


     


     


     


     


     


    Putzha- eufigkeit


    Перио- дичность


    < 1-mal taeglich


    Count (Количество


    6


    2


    8


    (< 1 раза в день


    % within Geschlecht (% для пола)


    1,6%


    ,8%


    1,2%


    1-mal taeglich


    1 раза в день


    Count (Количество


    89


    31


    120


    % within Geschlecht (% для пола)


    23.1%


    11,9%


    18,6%


    2-mal taeglich


    Count (Количество


    284


    216


    500


    (2 раза в день)


    % within Geschlecht (% для пола)


    73,6%


    83,1%


    77,4%


    > 2-mal taeglich


    Count (Количество


    7


    11


    18


    '> 2 раз в день)


    % within Geschlecht (% для пола)


    1,8%


    4,2%


    2,8%


    Total (Сумма)


    Count (Количество


    386


    260


    646


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%


    Abitur


    Аттестат зрелости)


    Putzha- eufigkeit


    (Перио- дичность


    чистки)


    1-mal taeglich


    1 раз в день)


    Count (Количество


    9


    1


    10


    % within Geschlecht (% для пола)


    12,7%


    10,0%


    12,3%


    2-mal taeglich


    (2 раза в день)


    Count (Количество


    56


    8


    64


    % within Geschlecht (% для пола)


    78,9%


    80,0%


    79,0%


    > 2-mal taeglich


    > 2 раз в день)


    Count (Количество


    6


    1


    7


    % within Geschlecht (% для пола)


    8,5%


    10,0%


    8,6%


    Total (Сумма)


    Count (Количество


    71


    10


    81


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%


    Hochschule


    Высшее)


    Putzha- eufigkeit


    (Перио- дичность


    чистки)


     


     


     


    1-mal taeglich


    '1 раз в день)


    Count (Количество


    7


    4


    11


    % within Geschlecht (% для пола)


    6,7%


    4,6%


    5,8%


    2-mal taeglich


    '2 раза в день)


    Count (Количество


    85


    76


    161


    % within Geschlecht (% для пола)


    81,7%


    87,4%


    84,3%


    > 2-mal taeglich


    > 2 раз в день)


    Count (Количество


    12


    7


    19


    % within Geschlecht (% для пола)


    11,5%


    8,0%


    9,9%


    Total (Сумма)


    Count (Количество


    104


    87


    191


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%

    •  Дважды щёлкните на таблице и выберите в меню Pivot (Мобильная таблица) Pivoting Trays (Поля вращения) На панели строк появился ещё один значок.

    •  Если Вы пройдётесь указателем мыши по этим значкам, то заметите, что первый из трёх значков соответствует переменной Schulbildung (образование). Щёлкните на этом значке и, не отпуская кнопку мыши, перетащите его на панель переменных слоя.

    Теперь в редакторе мобильных таблиц будет представлена таблица сопряженности между периодичностью чистки зубов и полом для первой категории образования Sonderschule (специальное).

    •  Закройте окно Pivoting Trays (Поля вращения)

    •  Выберите в меню Pivot (Мобильная таблица) Go to Layer... (Перейти к слою)

    Откроется диалоговое окно Go to Layer Category (Переход к категории слоя) (см. рис. 4.21).



    Рис. 4.21: Диалоговое окно Go to Layer Category (Переход к категории слоя)

    •  Выделите категорию "Hauptschule" (Начальная школа), теперь в окне просмотра будет отображена таблица только для этой категории.

    Putzhaeufigkeit * Geschlecht * Schulbildung Crosstabulation (Таблица сопряженности Периодичность чистки * Пол * Образование)


    Schulbildung: He suptschule (Образ ование: Начальная школа)


    Geschle:ht (Пол)


    Total


    (Сумма)


    nannlich (мужской)


    weiblich (женский)


    Putzhaeufigkeit


    (Периодичность чистки)


    < 1-mal taeglich


    (< 1 раза в день)


    Count (Количество)


    8


    2


    10


    % within Geschlecht (% для пола)


    5,6%


    3,0%


    4,7%


    1-mal taeglich


    (1 раз в день)


    Count (Количество)


    71



    91


    % within Geschlecht (% для пола)


    49,3%


    29,9%


    43,1%


    2-mal taeglich


    (2 раза в день)


    Count (Количество)


    65


    42


    107


    % within Geschlecht (% для пола)


    45,1%


    62,7%


    50,7%


    >2-mal taeglich


    (> 2 раз в день)


    Count (Количество)



    f.


    Т


    % within Geschlecht (% для пола)



    4,5%


    1,4%


    Total (Сумма)


    Count (Количество)


    144


    67


    211


    % within Geschlecht (% для пола)


    100,0%


    100,0%


    100,0%


    Остальные возможности изменения положения строк, столбцов и слоев испытайте, пожалуйста, самостоятельно.

    36.gif

    Изображение: 

    37.gif

    Изображение: 

    38.gif

    Изображение: 

    4.6.2 Дополнительные возможности редактирования таблиц

    4.6.2 Дополнительные возможности редактирования таблиц


    Применение техники мобильных таблиц для изменения структуры таблиц результатов статистических расчетов была представлена в разделе 4.6.1. Однако для изменения внешнего вида таблиц и их содержания, помимо описанной техники, существуют также и следующие возможности:

    •  выбор внешнего вида таблицы из библиотеки таблиц

    •  изменение свойств таблицы

    •  изменение свойств ячеек 

    •  изменение текста в таблице

    •  добавление пояснений

    •  добавление сносок

    •  ввод названия объекта и дополнительного текста

    Рассмотрим самые важные аспекты перечисленных возможностей редактирования таблиц.


    Выбор внешнего вида таблицы


    В качестве примера таблицы, для которой нужно будет применить редактирование, рассмотрим повторно перекрёстную таблицу между периодичностью чистки и полом.

    •  Дважды щёлкните на таблице; это приведёт к активированию редактора мобильных таблиц.

    •  Чтобы выбрать другой внешний вид таблицы, выберите в меню Format (Формат) TabelLooks... (Дизайн таблиц) Откроется диалоговое окно TabelLooks (Дизайн таблиц) (см. рис. 4.22).

    •  В этом диалоговом окне Вы можете выбрать среди более чем пятидесяти различных заготовок внешнего вида (дизайна) таблиц. Выберите, к примеру, заготовку Avant-gard и покиньте диалоговое окно нажатием ОК.


    Рис. 4.22: Диалоговое окно Tabe/Looks (Дизайн таблиц)


    Наша таблица теперь будет выглядеть следующим образом.


    Putzhaeufigkeit * Geschlecht * Schulbildung Crosstabulation (Таблица сопряженности Периодичность чистки * Пол)

     

    Geschlecht(Пол)


    Total


    (Сумма)


    mannlich (мужской)


    weiblich (женский)


    Putzhaeufigkeit


    (Периодичность чистки)


    < 1-mal taeglich


    < 1 раза в день)


    Count (Количество)



    14


    4


    18


    % within Geschlecht


    (% для пола)


    2,0%


    ,9%


    1 ,6%


    1-mal taeglich


    (1 раз в день)


    Count (Количество



    177


    56


    233


    % within Geschlecht


    (% для пола)


    25,1%


    13,2%


    20,6%


    2-mal taeglich


    (2 раза в день)


    Count (Количество)



    490


    342


    832


    % within Geschlecht


    (% для пола)


    69,4%


    80,7%


    73,6%


    > 2-mal taeglich


    (> 2 раз в день)


    Count (Количество



    25


    22


    47


    % within Geschlech


    (% для пола)


    3,5%


    5,2%


    4,2%


    Total (Сумма)


    Count (Количество)



    706


    424


    1130


    % within Geschlechl


    (% для пола)


    100,0%


    100,0%


    100,0%

    •  При помощи выключателя Edit Look (Редактировать дизайн) диалогового окна TabelLooks (Дизайн таблиц) Вы можете открыть вспомогательное диалоговое окно Table Properties (Свойства таблицы), в котором можно дополнительно изменить отдельные элементы компоновки таблицы. Отредактированный дизайн Вы можете сохранить при помощи команд Save Look (Сохранить дизайн) и Save as... (Сохранить как).

    Изменение свойств таблицы

    •  Чтобы изменить свойства таблицы, выберите в меню Format (Формат) Table Properties... (Свойства таблицы) Откроется диалоговое окно Table Properties (Свойства таблицы).


    Рис. 4.23: Диалоговое окно Table Properties (Свойства таблицы)


    Вы можете по своему вкусу изменить представление некоторых данных, ссылки, форматы ячеек и виды рамок. Для отдельных областей таблицы, таких как индивидуальные ячейки, вы можете также изменить и шрифт.

    •  Выделите щелчком одну из таких областей активированной мобильной таблицы и выберите в меню Format (Формат) Font... (Шрифт)

    •  Если вы хотите установить одинаковую ширину для всех ячеек таблицы, то это можно сделать посредством выбора меню Format (Формат) Set Data Cell Widths... (Ширина ячеек данных)

    Изменение свойств ячеек


    Наряду со свойствами всей таблицы можно также изменять и свойства отдельных ячеек.

    •  Выделите щелчком в активированной мобильной таблице необходимую ячейку и выберите в меню Format (Формат) Cell Properties... (Свойства ячейки) Откроется диалоговое окно Cell Properties (Свойства ячейки).


    Рис. 4.24: Диалоговое окно Cell Properties (Свойства ячейки)


    При помощи регистрационных карт, имеющихся в этом диалоговом окне, Вы можете выбрать необходимый формат чисел, выравнивание в ячейке, поля и оттенок. В поле образца (Sample) всегда будет приводиться образец надписи с учетом соответствующих установок.


    Изменение текста в таблице

    •  Создадим сначала частотную таблицу. Если файл zahn.sav уже открыт, выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  В диалоговом окне Frequencies (Частоты) поместите переменную s (образование) в поле тестируемых переменных. Вы получите соответствующую частотную таблицу.

    •  Двойным щелчком на таблице активируйте редактор мобильных таблиц и затем тоже дважды щёлкните на ячейке с текстом "Frequency" (Частота). В таком режиме можно вместо имеющегося текста указать в данной ячейке другой текст, к примеру, "Count" (Количество); после ввода текста нажмите клавишу Enter. Таким же образом можно поступить и с другими текстами, имеющимися в таблице.

    •  Если Вы произвели все необходимые замены, покиньте редактор мобильных таблиц щелчком на области за пределами выделенной таблицы. Теперь таблица будет выглядеть следующим образом.

    Schulbildung (Образование)

     

    Count (Количество)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи- тельные значения)


    Sonderschule (Специальное)


    1


    ,1


    ,1


    ,1


    Hauptschule (Начальная школа)


    211


    18,7


    18,7


    18,8


    mittlere Reife (Незаконченное среднее)


    646


    57,2


    57,2


    75,9


    Abitur (Аттестат зрелости)


    81


    7,2


    7,2


    83,1


    Hochschule (Высшее)


    191


    16,9


    16,9


    100


    Total (Сумма)


    1130


    100,0


    100,0



    Добавление пояснений

    •  Чтобы под таблицей разместить пояснение, активируйте двойным щелчком режим редактирования таблиц и выберите в меню Insert (Вставка) Caption (Подпись)

    •  Под таблицей появится рамка с текстом Table Caption (Подпись таблицы) внутри. Щёлкните дважды на этом тексте и наберите, к примеру, "Данные 1994 года".

    Добавление сносок

    •  Везде в таблице можно добавлять сноски. Нужную таблицу двойным щелчком перенесите в редактор мобильных таблиц и выделите щелчком любой текст в таблице. Рассмотрим, например, созданную нами частотную таблицу и текст "Hochschule" (Высшее).

    •  После выделения текста выберите в меню Insert (Вставка) Footnote (Сноска)

    • В появившейся рамке дважды щёлкните на тексте "Footnote" (Сноска) и наберите вместо него необходимый текст, для данного случая, к примеру, "Включая специальные высшие учебные заведения".

    •  Если Вы посмотрите на сноску, то заметите, что перед ней в соответствии с установками появился маркер в виде буквы уменьшенного размера (для первой сноски это буква а). Если вы хотите изменить маркер, выделите щелчком сноску и выберите в меню Format (Формат) Footnote Marker... (Маркер сноски)

    •  Активируйте опцию Special marker (Специальный маркер) и введите цифру 1. Изменённая частотная таблица теперь выглядит следующим образом.

    Schulbildung (Образование)



     


    Count (Количество)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи-


    Sonderschule (Специальное)


    1


    ,1


    ,1


    ,1


    тельные значения)


    Hauptschule (Начальная школа)


    211


    18,7


    18,7


    18,8



    mittlere Reife (Незаконченное среднее)


    646


    57,2


    57,2


    75,9



    Abitur (Аттестат зрелости)


    81


    7,2


    7,2


    83,1



    Hochschule1 (Высшее)


    191


    16,9


    16,9


    100,0



    Total (Сумма)


    1130


    100,0


    100,0



    Данные 1994 года 


    1. Включая специальные высшие учебные заведения


    Ввод названия объекта и дополнительного текста

    •  Чтобы добавить название или какой-либо текст, выделите щелчком соответствующий объект (заголовок, таблицу, график и т.д.), после которого вы хотите добавить подзаголовок или текст. Затем выберите в меню Insert (Вставка) New Title (Новое название) и соответственно Insert (Вставка) New Text (Новый текст)

    •  После двойного щелчка на новом объекте Вы можете ввести необходимое название или текст.

    •  Если необходимый текст находится в текстовом файле, то выберите в меню Insert (Вставка) Text File... (Текстовый файл) И в появившемся диалоговом окне укажите имя файла.

    39.gif

    Изображение: 

    40.gif

    Изображение: 

    41.gif

    Изображение: 

    4.6.3 Операции с таблицами большого размера

    4.6.3 Операции с таблицами большого размера


    Очень длинные таблицы полностью не помещаются в окне просмотра. Визуально это отмечается при помощи маркировки красного цвета в месте разрыва. В этом случае щёлкните дважды на таблице и при нажатой левой кнопке мыши Вы сможете переместить этот маркер вниз.

    4.6.4 Окно просмотра текста

    4.6.4 Окно просмотра текста


    Если Вы хотите работать не с интерактивными мобильными таблицами, а с простой текстовой выдачей пропорциональным (системным) шрифтом, то используйте для этого окно просмотра текста.

    •  Режим просмотра текста можно установить при помощи выбора меню Edit (Правка) Options... (Параметры) с последующим активированном на регистрационной карте General (Общие) опции вывода информации в виде окна просмотра текста (DraftViewer). Чтобы установки вступили в силу необходимо перезапустить программу.

    •  Различные возможности редактирования элементов при данном режиме работы окна просмотра находятся на регистрационной карте DraftViewer (Окно текстового режима) диалогового окна Options (Параметры). Данные, находящиеся в окне текстового режима, будут сохранены в формате RTF (Rich Text).

    •  Дополнительную информацию о текстовом режиме просмотра результатов Вы можете получить после выбора меню Help (Помощь) Topics (Темы)

    •  В окне Help: SPSS for Windows (Справочная система: SPSS для Windows) выберите закладку Index (Указатель), в поисковом поле наберите "Draft Viewer" и дважды щёлкните на нужной позиции.

    4.7 Редактор синтаксиса

    4.7 Редактор синтаксиса


    Редактор синтаксиса представляет собой текстовое окно, применяемое для набора и запуска на исполнение команд SPSS. Вы можете вводить команды непосредственно в окне набора или просто переносить установки диалоговых окон при помощи выключателя Paste (Вставить), находящегося в самих диалоговых окнах. Этот перенос возможен благодаря тому, что все диалоговые окна написаны на командном языке SPSS. С целью реализации дополнительных возможностей или каких-либо индивидуальных подходов к обработке данных, команды, помещённые в редактор синтаксиса, можно изменять.

    •  Откройте сначала файл wahl.sav.

    •  Чтобы открыть редактор синтаксиса, выберите в меню File (Файл) New (Новый) Syntax (Синтаксис)

    •  Наберите следующую команду

    FREQUENCIES VARIABLES = sex alter partei.

    Редактор синтаксиса будет выглядеть так, как на рисунке 4.25.



    Рис. 4.25: Редактор синтаксиса

    •  Запустите команду SPSS на исполнение путём нажатия кнопки со значком Run . Current (Выполнить текущую команду).

    SPSS перейдёт в окно просмотра результатов. В окне просмотра будет отображены распределения частот переменных sex, alter и partei.


    Для выполнения команд SPSS при помощи редактора синтаксиса, поступайте следующим образом:

    •  Выделите щелчком и перетаскиванием курсора команды, которые Вы хотели бы выполнить.

    •  Если вы хотите выполнить одну команду, расположите курсор в любом месте этой команды.

    •  Если Вы желаете выполнить все команды, находящиеся в редакторе, выберите в меню Edit (Правка) Select All (Выделить всё) В редакторе будут выделены все команды.

    •  Затем для выполнения команд щёлкните на кнопке Run Current (Выполнить текущую команду) редактора синтаксиса или нажмите одновременно клавиши <Ctrl> <R>.

    Перенос синтаксиса команд из диалоговых окон


    Установки диалоговых окон можно переносить в редактор синтаксиса при помощи переключателя Paste (Вставить). Рассмотрим пример:

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  При необходимости для устранения всех предыдущих установок щёлкните на выключателе Reset (Сброс).

    •  Перенесите переменную alter (возраст) в список целевых переменных.

    •  Щёлкните на переключателе Statistics (Статистики) и проставьте флажки активации опций Mean (Среднее значение), Minimum (Минимум) и Maximum (Максимум). Подтвердите нажатием Continue (Далее).

    •  В главном диалоговом окне деактивируйте опцию Display frequency tables (Показать частотные таблицы).

    •  Теперь щёлкните на Paste (Вставить).

    Установки диалогового окна будут размещены в редакторе синтаксиса.



    Рис. 4.26: Командный язык SPSS


    Сохранение файла синтаксиса


    Для сохранения файла синтаксиса необходимо выполнить следующие шаги:

    •  Активируйте редактор синтаксиса, в котором содержатся команды, предназначенные для сохранения.

    •  Выберите в меню File (Файл) Save (Сохранить)

    Откроется диалоговое окно Save as... (Сохранить как). В соответствии с установками программа SPSS прибавляет к своим синтаксическим файлам расширение .sps.

    •  Введите название сохраняемого файла и подтвердите нажатием кнопки Save (Сохранить).

    Можно также щёлкнуть на значке сохранения Save File (Сохранить файл).


    Больше подробностей о работе с синтаксисом программы вы узнаете в главе 26.

    42.gif

    Изображение: 

    44.gif

    Изображение: 

    4.8 Информация о файле

    4.8 Информация о файле


    Для любого файла SPSS Вы можете получить следующую информацию:

    •  список переменных с их описанием,

    •  полную информацию обо всех переменных и

    •  перечень наблюдений.

      •  Откройте файл wahl.sav.

      •  Если вы хотите просмотреть информацию о значениях переменных, их формате и метках, выберите в меню Utilities (Дополнительные возможности) Variables... (Переменные)

      •  Если в появившемся диалоговом окне Вы щёлкните, к примеру, на переменной sex (пол), то увидите информацию, отображаемую на рисунке 4.27.


    Рис. 4.27: Диалоговое окно Variables (Переменные)


    В информационном окне выводится имя переменной, значения и метки переменной, тип переменной, а также указывается количество пропущенных значений. Из диалогового окна Variables (Переменные) можно сразу перейти к рассматриваемой переменной в окно данных.

    •  Щёлкните для этого на выключателе Go to (Перейти к).

    Окно данных прокручивается горизонтально таким образом, что переменная, отмеченная нами в диалоговом окне Variables (Переменные), оказывается в окне данных на первой позиции. Выключатель Paste (Вставить) копирует имена всех выделенных переменных в редактор синтаксиса.


    Некоторую информацию о переменной можно также получить и в любой момент, находясь в диалоговом окне какой-либо статистической процедуры. Для изучения этой операции рассмотрим следующий пример. Допустим, Вы исследуете частотное распределение переменной partei (партия).

    •  В диалоговом окне Frequencies (Частоты) перенесите переменную partei (партия) в поле целевых переменных.

    Теперь Вам захотелось, не покидая диалогового окна, вскользь взглянуть на значения этой переменной.

    •  Выделите её так же, как Вы выделяете и другие переменные в диалоговых окнах и нажмите правую кнопку мыши.

    •  В появившемся меню выберите опцию Variable Information (Информация о переменной).

    Откроется информационное окно переменной изображённое на рисунке 4.28. В этом окне также приводится имя переменной, тип статистической шкалы, к которой она относится и метки значений.

    •  Если Вы щёлкните на стрелке, указывающей вниз, то увидите список всех значений и их меток.


    Рис. 4.28: Информационное окно переменной


     Чтобы закрыть информационное окно, просто щёлкните на любой точке за его пределами.

    •  Если же Вы хотите получить полную информацию обо всех переменных текущего (рабочего) файла, выберите в меню Utilities (Дополнительные возможности) File Info (Информация о файле)

    В окне просмотра появится следующая информация по файлу wahl.sav: 

     List of variables on the working file (Список переменных рабочего файла)
     Name (Имя) Position (Позиция) 
    FRAGEBNR Fragebogen-Nr. (Номер анкеты) 1 
    Measurement Level: Nominal (Шкала: номинальная)
    Column Width: Unknown (Ширина столбцов: неизвестна)
     Alignment: Left (Выравнивание: влево)
     Print Format: AS (Формат печати: А5) 
    Write Format: AS (Формат записи: AS)
    SEX Geschlecht (Пол) 2 
     Measurement Level: Nominal (Шкала: номинальная) 
     Column Width: Unknown (Ширина столбцов: неизвестна) 
     Alignment: Right (Выравнивание: вправо) 
     Print Format: Fl (Формат печати: Fl) 
     Write Format: Fl (Формат записи: Fl)
      Missing Values: 0 (Отсутствующие значения: 0)
     Value (Значение) Label (Метка)
     0 М keine Angabe (Данные отсутствуют)
     1 weiblich (Женский)
     2 maennlich (Мужской)
     ALTER Lebensalter (Возраст) 3
      Measurement Level: Scale (Шкала: метрическая) 
     Column Width: Unknown (Ширина столбцов: неизвестна)
      Alignment: Right (Выравнивание: вправо) 
     Print Format: F2 (Формат печати: F2)
      Write Format: F8.2 (Формат записи: F8.2)
      Missing Values: 0 (Отсутствующие значения: 0)
     Value (Значение) Label (Метка)
     0 М keine Angabe (Данные отсутствуют)
     PARTEI Partei (Партия) 4 
     Measurement Level: Nominal (Шкала: номинальная) 
     Column Width: Unknown (Ширина столбцов: неизвестна) 
     * Alignment: Right (Выравнивание: вправо)
      Print Format: Fl (Формат печати: Fl)
      Write Format: F8.2 (Формат записи: F8.2) 
     Missing Values: 0 (Отсутствующие значения: 0)
     Value (Значение) Label (Метка)
     0 М keine Angabe (Данные отсутствуют)
     1 CDU/CSU
     2 FDP
     3 SPD
     4 Gruene/Buendnis 90 (Зелёные/Союз 90)
     5 PDS
     6 Republikaner (Республиканцы)
     7 Sonstige (Прочие)
    •  Если вы хотите получить такую информацию о файле, который не является в данный момент рабочим, то выберите в меню File (Файл) Display Data Info... (Показать информацию о файле) Откроется соответствующее диалоговое окно (см. рис. 4.29).


    Рис. 4.29: Диалоговое окно Display Data Info (Показат< информацию о файле)

    •  Выделите необходимый файл, к примеру, wahl.sav и подтвердите выбор нажатием кнопки Open (Открыть).

    Информация о выбранном файле появится в окне просмотра.

    •  Если же у Вас появится желание проверить фактическое содержание некоторого файла, к примеру, список наблюдений, то выберите в меню Analyze (Анализ) Reports (Отчёты) Case Summaries... (Сводка по наблюдениям)

    Вы увидите диалоговое окно Summarize Cases (Формирование итогов по наблюдениям) (см. рис. 4.30).



    Рис. 4.30: Диалоговое окно Summarize Cases (Формирование сводки по наблюдениям)


    Переменные файла будут показаны в списке исходных переменных. Здесь Вы можете выделить одну или несколько переменных, наблюдения для которой должны быть помещены в сводку. Опции диалогового окна говорят сами за себя.

    •  В качестве упражнения перенесите в список выбираемых переменных переменную partei (партия) и активируйте опцию Show case numbers (Отобразить номера наблюдений).

    •  Подтвердите установки нажатием ОК. В окне просмотра будут отображены значения переменной partei (партия) для всех наблюдений.

    46.gif

    Изображение: 

    47.gif

    Изображение: 

    48.gif

    Изображение: 

    49.gif

    Изображение: 

    4.9 Справочная система

    4.9 Справочная система


    Справку в SPSS можно вызвать несколькими способами:

    •  Нажать в любой момент работы функциональную клавишу <F1>. Откроется диалоговое окно Help: SPSS for Windows (Справочная система: SPSS для Windows).

    •  Выбрать в главном меню опцию Help (Справка).

    •  Находясь в любом диалоговом окне, нажать переключатель с названием Help (Справка) и Вы получите справку по текущей теме.

    Изучим вызов справки при помощи нескольких примеров:

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  Щёлкните на переключателе Help (Справка). Откроется диалоговое окно справки SPSS (см. рис. 4.31).


    Рис. 4.31: Справка SPSS


    Рассмотрим следующий пример:

    •   Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  Перенесите переменную partei (партия) в поле целевых переменных. Щёлкните на переключателе Paste (Вставить). Установки диалогового окна будут перенесены в редактор синтаксиса.

    •  В редакторе синтаксиса щёлкните в панели инструментов на кнопке со значком Syntax-Help (Справка по теме синтаксиса)

    В окне справки появится синтаксис соответств. команды SPSS (см. рис. 4.32).


    Если Вы щёлкните на переключателе Index (Указатель), то в окне справки будет отображён список тем SPSS (см. рис. 4.33).


    Чтобы, находясь в справочной системе, параллельно иметь возможность работать в редакторе синтаксиса Вы можете уменьшить окно справки до любого необходимого Вам, размера и расположить его в удобном для Вас месте. Рассмотрим ещё один пример:

    •  В редакторе данных в списке меню шёлкните на опции Help (Справка). Откроется вспомогательное меню.

    •  Щёлкните на позиции Topics (Темы). Появится перечень тем SPSS. В списке тем SPSS присутствуют и определения статистических терминов.

    •  В списке тем выделите строку 25th percentile (25-й процентиль) и щёлкните на кнопке Display (Показать). Вы увидите информацию, отображаемую на рисунке 4.34.

    •  Любую информацию, находящуюся в диалоговом окне справки, можно напечатать с помощью принтера. Для этого выберите команду Print (Печать).


    Рис. 4.32: Окно справки синтаксиса SPSS



    Рис. 4.33: Список тем SPSS



    Рис. 4.34: Информация о значениях процентиля

    50.gif

    Изображение: 

    52.gif

    Изображение: 

    53.gif

    Изображение: 

    54.gif

    Изображение: 

    Глава 5. Основы статистики

    Глава 5. Основы статистики

    1. Основы статистики

    Основы статистики


    Овладение приемами работы с такой программой, как SPSS требует предварительных познаний в области статистики. Здесь мы коротко остановимся на некоторых основных понятиях, с которыми непременно должен быть знаком пользователь, если он хочет использовать SPSS. В первую очередь сюда относятся предварительные оценки, которые выполняются перед проведением любого статистического теста: классификация переменных по статистическим шкалам, проверка наличия нормального распределения и выделение независимых и зависимых выборок. В следующих разделах представлено описание наиболее часто проводимой процедуры проверки гипотезы о среднем значении и рассматривается значение вероятности ошибки р. Завершает главу обзор методов статистической обработки с указанием глав, в которых они будут рассматриваться в этой книге.

    5.1 Предварительные условия для проведения статистического теста

    5.1 Предварительные условия для проведения статистического теста


    В большинстве случаев перед применением статистического теста ставится вопрос: каков характер заданных условий? В частности, необходимо выяснить следующие моменты:

    •  К какой статистической шкале относится данная переменная?

    •  Если речь идёт о переменных с интервальной шкалой, то подчиняются ли они закону нормального распределения?

    •  Являются ли сравниваемые выборки зависимыми или независимыми?

    5.1.1 Типы статистических шкал

    5.1.1 Типы статистических шкал


    В эмпирическом исследовании могут встречаться, к примеру, следующие переменные (указано их наиболее вероятное кодирование):


    Пол


    1 = мужской


    2 = женский


    Семейное положение


    1 = холост/не замужем


    2 = женат/замужем


    3 = вдовец/вдова


    4 = разведен(а)


    Курение


    1 = некурящий


    2 = изредка курящий


    3 = интенсивно курящий


    4 = очень интенсивно курящий


    Месячный доход


    1 = до 3000 DM


    2 = 3001 - 5000 DM


    Коэффициент интеллекта (I.Q.)


    3 = более 5000 DM


    Возраст, лет


    Рассмотрим сначала графу Пол. Мы видим, что назначение соответствия цифр 1 и 2 обоим полам абсолютно произвольно, их можно было поменять местами или обозначить другими цифрами


    Мы, конечно, не имеем в виду, что женщины стоят на ступеньку ниже мужчин, или :о мужчины значат меньше, чем женщины. Следовательно, отдельным числам не соответствует никакою эмпирического значения. В этом случае говорят о переменных, относящихся к номинальной шкале. В нашем примере рассматривается переменная с номинальной шкалой, имеющая две категории. Такая переменная имеет еще одно название- дихотомическая.


    Такая же ситуация и с переменной Семейное положение. Здесь также соответствие -:жду числами и категориями семейного положения не имеет никакого эмпирического значения. Но в отличии от Пола, эта переменная не является дихотомической — у нее четыре категории вместо двух. Возможности обработки переменных, относящихся к номинальной шкале очень ограничены. Собственно говоря, можно провести только частотный анализ таких переменных. К примеру, расчет среднего значения для переменной Семейное положение, совершенно бессмысленен. Переменные, относящиеся к номинальной шкале часто используются для группировки, с помощью которых совокупная выборка разбивается по категориям этих переменных. В частичных выборках проводятся одинаковые статистические тесты, результаты которых затем сравниваются друг с другом.


    В качестве следующего примера рассмотрим переменную Курение. Здесь кодовым цифрам присваивается эмпирическое значение в том порядке, в котором они расположены в списке. Переменная Курение, в итоге, сортирована в порядке значимости снизу вверх: умеренный курильщик курит больше, нежели некурящий, а сильно курящий — больше, чем умеренный курильщик и т.д. Такие переменные, для которых используются численные значения, соответствующие постепенному изменению эмпирической значимости, относятся к порядковой шкале.


    Однако эмпирическая значимость этих переменных не зависит от разницы между соседними численными значениями. Так, несмотря на то, что разница между значениями кодовых чисел для некурящего и изредка курящего и изредка курящего и интенсивно курящего в обоих случаях равна единице, нельзя утверждать, что фактическое различие между некурящим и изредка курящим и между изредка курящим и интенсивно курящим одинаково. Для этого данные понятия слишком расплывчаты.


    К классическими примерами переменных с порядковой шкалой относятся также переменные, полученные в результате объединения величин в классы, как Месячный доход в нашем примере.


    Кроме частотного анализа, переменные с порядковой шкалой допускают также вычисление определенных статистических характеристик, таких как медианы. В некоторых случаях возможно вычисление среднего значения. Если должна быть установлена связь (корреляция) с другими переменными такого рода, для этой цели можно использовать коэффициент ранговой корреляции.


    Для сравнения различных выборок переменных, относящихся к порядковой шкале, могут применяться непараметрические тесты, формулы которых оперируют рангами.


    Рассмотрим теперь коэффициент интеллекта (IQ). Не только его абсолютные значения отображают порядковое отношение между респондентами, но и разница между двумя значениями также имеет эмпирическую значимость. Например, если у Ганса IQ равен 80, у Фрица — 120 и у Отто — 160, можно сказать, что Фриц в сравнении с Гансом настолько же интеллектуальнее насколько Отто в сравнении с Фрицем (а именно — на 40 единиц IQ). Однако, основываясь только на том, что значение IQ у Ганса в два раза меньше, чем у Отто, исходя из определения IQ нельзя сделать вывод, что Отто вдвое умнее Ганса.


    Такие переменные, у которых разность (интервал) между двумя значениями имеет эмпирическую значимость, относятся к интервальной шкале. Они могут обрабатываться любыми статистическим методами без ограничений. Так, к примеру, среднее значение является полноценным статистическим показателем для характеристики таких переменных.


    Наконец, мы достигли наивысшей статистической шкалы, на которой эмпирическую значимость приобретает и отношение двух значений. Примером переменной, относящейся к такой шкале является возраст: если Максу 30 лет, а Морицу 60, можно сказать, что Мориц вдвое старше Макса. Шкала, к которой относятся данные называется шкалой отношений. К этой шкале относятся все интервальные переменные, которые имеют абсолютную нулевую точку. Поэтому переменные относящиеся к интервальной шкале, как правило, имеют и шкалу отношений.


    Подводя итоги, можно сказать, что существует четыре вида статистических шкал, на которых могут сравниваться численные значения:


    Статистическая шкала


    Эмпирическая значимость


    Номинальная


    Нет


    Порядковая


    Порядок чисел


    Интервальная


    Разность чисел


    Шкала отношений


    Отношение чисел


    На практике, в том числе в SPSS, различие между переменными, относящимися к интервальной шкале и шкале отношений обычно несущественно. То есть в дальнейшем практически всегда речь будет идти о переменных, относящихся к интервальной шкале.


    Пользователь SPSS должен четко разбираться в видах статистических шкал и при выборе метода обращать внимание на то, чтобы были определены надлежащие виды шкал.


    Мы уже указывали, что переменные, относящиеся к номинальной шкале допускают весьма ограниченные возможности для проведения анализа. Исключение в некоторых ситуациях составляют дихотомические переменные. Для них можно, по крайней мере, определять ранговую корреляцию. Если, например, обнаруживается корреляция коэффициента интеллекта с полом, то положительный коэффициент корреляции означает, что женщины интеллектуальнее, чем мужчины. Однако если переменные, относящиеся к номинальной шкале не являются дихотомическими, вычисление коэффициентов ранговой корреляции не имеет смысла.

    5.1.2 Нормальное распределение

    5.1.2 Нормальное распределение


    Многочисленные методы, с помощью которых обрабатываются переменные, относящиеся к интервальной шкале, исходят из гипотезы, что их значения подчиняются нормальному распределению. При таком распределении большая часть значений группируется около некоторого среднего значения, по обе стороны от которого частота наблюдений равномерно снижается.


    В качестве примера рассмотрим нормальное распределение возраста, которое строится по данным исследований гипертонии (файл hyper.sav) с помощью команд меню Graphs (Графы) Histogramm... (Гистограмма) (см. рис. 5.1).


    На диаграмме нанесена кривая нормального распределения (Колокол Гаусса). Реальное распределение в большей или меньшей степени отклоняется от этой идеальной кривой. Выборки, строго подчиняющиеся нормальному распределению, на практике, как правило, не встречаются. Поэтому почти всегда необходимо выяснить, можно ли реальное распределение считать нормальным и насколько значительно заданное распределение отличается от нормального.


    Перед применением любого метода, который предполагает существование нормального распределения, наличие последнего нужно проверять в первую очередь. Классическим примером статистического теста, который исходит из гипотезы о нормальном распределении, можно назвать t-тест Стьюдента, с помощью которого сравнивают две независимые выборки. Если же данные не подчиняются нормальному распределению, следует использовать соответствующий непараметрический тест, в случае двух независимых выборок — U-тест Манна и Уитни.


    Если визуальное сравнение реальной гистограммы с кривой нормального распределения кажется недостаточным, можно применить тест Колмогорова-Смирнова, который находится в меню Analyze (анализ данных) в наборе непараметрических тестов (см. раздел 14.5).



    Рис. 5.1: Распределение возраста


    В нашем примере с распределением возрастов тест Колмогорова-Смирнова не показывает значительного отклонения от нормального распределения.


    Еще одну возможность проверки наличия нормального распределения дает построение графика нормального распределения (см. разделы 10.4.1, 22.12), в котором наблюдаемые значения сопоставляются с ожидаемыми при нормальном распределении.

    1.gif

    Изображение: 

    5.1.3 Зависимость и независимость выборок

    5.1.3 Зависимость и независимость выборок


    Две выборки зависят друг от друга, если каждому значению одной выборки можно закономерным и однозначным способом поставить в соответствие ровно одно значение другой выборки. Аналогично определяется зависимость нескольких выборок.


    Чаще всего зависимые выборки возникают, когда измерение проводится для нескольких моментов времени. Зависимые выборки образуют значения параметров изучаемого процесса, соответствующие различным моментам времени.


    В SPSS зависимые (также связанные, спаренные) выборки будут представляться разными переменными, которые сопоставляются друг с другом в соответствующем тесте на одной и той же совокупности наблюдений.


    Если закономерное и однозначное соответствие между выборками невозможно, эти выборки являются независимыми. В SPSS независимые выборки содержат разные наблюдения (например, относящиеся к различным респондентам), которые обычно различаются с помощью групповой переменной, относящейся к номинальной шкале.

    5.2 Обзор распространенных тестов для проверки гипотез о среднем

    5.2 Обзор распространенных тестов для проверки гипотез о среднем


    В наиболее распространенной ситуации, когда требуется сравнить друг с другом разные выборки по их средних значениям или медианам, с учетом условий, описанных в разделе 5.1, обычно применяется один из восьми следующих тестов.


    Переменные, относящиеся к интервальной шкале и подчиняющиеся нормальному распределению


    Количество сравниваемых выборок


    Зависимость


    Тест


    1


    Независимые


    t-тест Стьюдента


    1


    Зависимые


    t-тест для зависимых выборок


    >2


    Независимые


    Простой дисперсионный анализ


    >2


    Зависимые


    Простой дисперсионный анализ с повторными измерениями


    Переменные, относящиеся к порядковой шкале или переменные, относящиеся к интервальной шкале, но не подчиняющиеся нормальному распределению


    Количество сравниваемых выборок


    Зависимость


    Гест


    1


    Независимые


    U-тест Манна и Уитни


    2


    Зависимые


    тест Уилкоксона


    >2


    Независимые


    Н-тест Крускала и Уоллиса


    >2


    Зависимые


    тест Фридмана


    Для каждой из этих двух групп тестов в SPSS имеются отдельные пункты меню, а именно Analyze (Анализ) Compare Means (Сравнение средних) или Analyze (Анализ) Nonparametric Tests (Непараметрические тесты)


    Исключение составляет простой дисперсионный анализ с повторными измерениями. Этот метод нельзя найти в разделе Compare Means. Он вызывается командой меню General Linear Model (Общая линейная модель).

    5.3 Вероятность ошибки р

    5.3 Вероятность ошибки р


    Если следовать подразделению статистики на описательную и аналитическую, то задача аналитической статистики - предоставить методы, с помощью которых можно было бы объективно выяснить, например, является ли наблюдаемая разница в средних значениях или взаимосвязь (корреляция) выборок случайной или нет.


    Например, если сравниваются два средних значения выборок, то можно сформулировать две предварительных гипотезы:

    •  Гипотеза 0 (нулевая): Наблюдаемые различия между средними значениями выборок находятся в пределах случайных отклонений.

    •  Гипотеза 1 (альтернативная): Наблюдаемые различия между средними значениями нельзя объяснить случайными отклонениями.

    В аналитической статистике разработаны методы вычисления так называемых тестовых (контрольных) величин, которые рассчитываются по определенным формулам на основе данных, содержащихся в выборках или полученных из них характеристик. Эти тестовые величины соответствуют определенным теоретическим распределениям (t-pacnpe-лелению, F-распределению, распределению X2 и т.д.), которые позволяют вычислить так называемую вероятность ошибки. Это вероятность равна проценту ошибки, которую можно допустить отвергнув нулевую гипотезу и приняв альтернативную.


    Вероятность определяется в математике, как величина, находящаяся в диапазоне от 0 до 1. В практической статистике она также часто выражаются в процентах. Обычно вероятность обозначаются буквой р:


    0<р< 1


    Вероятности ошибки, при которой допустимо отвергнуть нулевую гипотезу и принять альтернативную гипотезу, зависит от каждого конкретного случая. В значительной степени эта вероятность определяется характером исследуемой ситуации. Чем больше требуемая вероятность, с которой надо избежать ошибочного решения, тем более узкими выбираются границы вероятности ошибки, при которой отвергается нулевая гипотеза, так называемый доверительный интервал вероятности.


    Существует общепринятая терминология, которая относится к доверительным интервалам вероятности. Высказывания, имеющие вероятность ошибки р <= 0,05. называются значимыми; высказывания с вероятностью ошибки р <= 0,01 - очень значимыми, а высказывания с вероятностью ошибки р <= 0,001 - максимально значимыми. В литературе такие ситуации обозначают одной, двумя или тремя звездочками.


    Вероятность ошибки


    Значимость


    Обозначение


    р > 0.05


    Не значимая


    ns


    р <= 0.05


    Значимая


    *


    р <= 0.01


    Очень значимая


    **


    р <= 0.001


    Максимально значимая


    ***


    В SPSS вероятность ошибки р имеет различные обозначения; звездочки для указания степени значимости применяются лишь в немногих случаях.


    Времена, когда не было компьютеров, пригодных для статистического анализа, давали практикам по крайней мере одно преимущество.: Так как все вычисления надо было выполнять вручную, статистик должен был сначала тщательно обдумать, какие вопросы можно решить с помощью того или иного теста. Кроме того, особое значение придавалось точной формулировке нулевой гипотезы.


    Нос помощью компьютера и такой мощной программы, как SPSS, очень легко можно провести множество тестов за очень короткое время. К примеру, если в таблицу сопряженности свести 50 переменных с другими 20 переменными и выполнить тест %2, то получится 1000 результатов проверки значимости или 1000 значений р. Некритический подбор значимых величин может дать бессмысленный результат, так как уже при граничном уровне значимости р = 0,05 в пяти процентах наблюдений, то есть в 50 возможных наблюдениях, можно ожидать значимые результаты.


    Этим ошибкам первого рода (когда нулевая гипотеза отвергается, хотя она верна) следует уделять достаточно внимания. Ошибкой второго рода называется ситуация, когда нулевая гипотеза принимается, хотя она ложна. Вероятность допустить ошибку первого рода равна вероятности ошибки р. Вероятность ошибки второго рода тем меньше, чем больше вероятность ошибки р.

    5.4 Обзор статистических методов

    5.4 Обзор статистических методов


    В этом разделе мы попытаемся составить небольшой путеводитель по данной книге, дав обзор последовательности действий, которые выполняются при статистическом анализе.

    5.4.1 Структурирование, вводи проверка данных

    5.4.1 Структурирование, ввод и проверка данных


    Прежде чем мы сможем применить статистические методы или строить графики, естественно, следует представить собранные данные в форме, пригодной для обработки. При этом рекомендуется придерживаться следующего плана действий:

    •  Проведите структурирование набора данных; прежде всего выясните, к какими категориям относятся Ваши наблюдения и к каким — переменные. В большинстве случаев это ясно сразу. Если структурирование провести не удается, SPSS применять нельзя, да и все остальные статистические программы также требуют, чтобы данные были структурированы. Подробнее об этом см. раздел 3.2.

    •  Определите шкалу, к которой относятся переменные (см. раздел 5.1.1).

    •  Составьте кодировочную таблицу (см. раздел 3.1).

    •  Введите данные в Редакторе данных (см. раздел 3.4), учитывая кодировочную таблицу. Если для ввода данных вы хотите использовать другие программы (например, Excel, dBase), это вполне допустимо; SPSS может работать с файлами данных этих программ. Не вводите данные, которые можно вычислить на основе других данных. Эти вычисления следует предоставить компьютеру (см. главу 8). Если данные уже были введены в других программах статистики (например, SAS, Stata. Statistica), их можно преобразовать в файлы SPSS с помощью таких утилит, как, к примеру, DBMS/COPY.

    •  Проверьте введенные данные на отсутствие ошибок и осмысленность. Подробнее об этом см. раздел 10.1.

    •  Установите, подчиняются ли нормальному распределению переменные, относящиеся к интервальной шкале (см. раздел 5.1.2).

    Теперь можно начинать статистическую обработку введенных данных. Учтите, что анализ может быть выполнен только для наблюдений, сгруппированных определенным образом см. главу 7). Об основных принципах работы с версией 9 можно прочесть в главе 4.

    5.4.2 Описательный (дескриптивный) анализ

    5.4.2 Описательный (дескриптивный) анализ


    Этот вид анализа включает описательное представление отдельных переменных. К нему относятся создание частотной таблицы, вычисление статистических характеристик или графическое представление. Частотные таблицы строятся для переменных, относящихся к номинальной шкале и для порядковых переменных, имеющих не слишком много категорий; об этом см. главы 6, 12 и 24.


    Для переменных относящихся к номинальной шкале нельзя вычислить никаких значимых статистических характеристик. Наиболее часто для порядковых переменных и переменных, относящихся к интервальной шкале, но не подчиняющихся нормальному распределению, вычисляются медианы и оба квартиля (см. раздел 6.2); при небольшом числе категорий можно использовать вариант для концентрированных данных см. раздел 6.3).


    Для переменных, относящихся к интервальной шкале и подчиняющихся нормальному распределению, чаще всего вычисляется среднее значение и стандартное отклонение пли стандартная ошибка (см. раздел 6.2). Однако следует выбрать только одну из этих двух характеристик разброса. Для переменных, относящихся ко всем статистическим шкалам, можно построить большое разнообразных графиков, на которых представлены частоты, средние значения или другие характеристики. Подробнее об этом в главах 22 и 23.

    5.4.3 Аналитическая статистика

    5.4.3 Аналитическая статистика


    Практически любой статистический анализ наряду с чисто описательными операциями включает те или иные аналитические методы (тесты значимости), при применении которых в конечном счете определяется вероятности ошибки р (см. раздел 5.3).


    Большая группа тестов служит для выяснения того, различаются ли две или более различных выборки по своим средним значениям или медианам. При этом учитывается разница между независимыми выборками (разные наблюдения) и зависимыми выборками (разные переменные; см. раздел 5.1.3). В зависимости количества выборок (две или более), от того, зависимы ли выборки или нет, относятся ли переменные к интервальной или порядковой шкале, подчиняются ли нормальному распределению — применяются специализированные тесты (см. раздел 5.2).


    Очень часто встречается ситуация, когда сравниваются различные группы наблюдений или значений переменных, относящихся к номинальной шкале. В этом случае строятся таблицы сопряженности (см. главу 11). Другая группа тестов касается исследования связей между двумя переменными, то есть выявления корреляций и восстановления регрессий (см. главу 15, раздел 16.1).


    Кроме этих довольно простых статистических методов существуют также более сложные методы многомерного анализа, в которых обычно одновременно используется очень много переменных. К примеру, если требуется свести большое количество переменных к меньшему количеству "пучков переменных", называемых факторами, то проводится факторный анализ (глава 19). Если же наша цель, противоположна — объединить заданные наблюдения, образовав из них кластеры, то применяется кластерный анализ (глава 20).


    В определенной группе многомерных тестов вводится различие между зависимой переменной, называемой также целевой и несколькими независимыми переменными (переменными влияния или прогнозирования).


    Зависимая переменная


    Независимые переменные


    Многомерный метол


    Дихотомическая


    Любые


    Двоичная логистическая регрессия (раздел 16.4); дискриминантный анализ (глава 18)


    Дихотомическая


    С номинальной или порядковой шкалой


    Логит-логарифмические линейные модели


    С номинальной шкалой


    С номинальной или порядковой шкалой


    Мультиномиальная логистическая регрессия (раздел 16.5)


    С порядковой шкалой


    С номинальной или порядковой шкалой


    Порядковая регрессия (раздел 16.6)


    С интервальной шкалой


    С номинальной или порядковой шкалой


    Дисперсионный анализ (раздел 17.1)


    С интервальной шкалой


    Любые


    Ковариационный анализ (раздел 17.2); множественный регрессионный анализ (раздел 16.2)


    При мультиномиальной логистической регрессии и порядковой регрессии могут также использоваться ковариации, относящиеся к интервальной шкале.


    Независимые переменные, относящиеся к номинальной шкале, при двоичной логистической регрессии, дискриминантном анализе и многозначном регрессионном анализе должны быть дихотомическими либо раскладываться на набор дихотомических переменных (см. раздел 16.2). Логит-логарифмические линейные модели рассматриваются не в этой книге, а во втором томе, посвященном методам исследования рынка и общественного мнения.


    Кроме упомянутых здесь, существует еще несколько методов анализа, например, пробит-анализ или анализ надежности; об их назначении можно узнать из соответствующих глав.

    Глава 6. Частотный анализ.

    Глава 6. Частотный анализ

    1. Частотный анализ

    Частотный анализ


    Первым этапом статистического анализа данных, как правило, является частотный анализ. В этой главе мы проведем частотный анализ на примере файла Studium.sav. Этот файл находится на компакт-диске примеров или в рабочем каталоге \SPSSBOOK. Он содержит результаты опроса студентов об их психическом состоянии и социальном положении. Опрос касался таких предметов, как социальное положение, психическая ситуация и успеваемость. Кроме того, затрагивались такие данные, как изучаемый предмет, пол, возраст и национальность.

    6.1 Частотные таблицы

    6.1 Частотные таблицы

    •  Сначала загрузите файл Studium.sav, выбрав команды меню File (Файл) Open... (Открыть...) Появится диалог Open File (Открыть файл).

    •  Выберите указанный выше файл Studium.sav и подтвердите выбор кнопкой Open (Открыть). Файл появится в Редакторе данных.

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies (Частоты) Появится диалоговое окно Frequencies (см. рис. 6.1).

    •  Кнопкой с треугольником перенесите переменную psyche в список выходных переменных и подтвердите операцию кнопкой ОК.


    Рис. 6.1: Диалоговое окно Frequencies (Частоты)


    Результаты появятся в окне просмотра результатов. Перед самой частотной таблицей выводится небольшая таблица с обзором допустимых и отсутствующих значений. Здесь она не показана.


    Психическое состояние


    Частота


    Проценты


    Допус- тимые проценты


    Нако- пленные проценты


    Крайне неустой- чивое


    20


    18,5


    18,7


    18,7


    Неустой- чивое


    40


    37,0


    37,4


    56,1


    Допус- тимые


    Устойчивое


    41


    38,0


    38,3


    94,4


    Очень устойчивое


    6


    5,6


    5,6


    100,0


    Всего


    107


    99,1


    100,0


    Отсут-ствующие


    нет данных


    1


    ,9


    Всего


    108


    100,0


    Каждая строка частотной таблицы описывает одно возможное значение. Строка с пометкой нет данных представляет наблюдения, в которых не было дано никакого ответа. Всего имеется 107 допустимых ответов, а также одно наблюдение, в котором психическое состояние неизвестно (данные отсутствуют либо утеряны). Первый столбец содержит метки отдельных значений (крайне неустойчивое, неустойчивое, устойчивое, ...). Во втором столбце под заголовком «Частота» приведена частота каждого из вариантов ответа на вопрос из теста. Так, к примеру, 20 человек на вопрос о психическом состоянии дали ответ: «крайне неустойчивое», а 40 человек — «неустойчивое». В третьем столбце показана процентная частота каждого ответа. Процентная частота соответствует отношению каждого из вариантов ответа к общему количеству опрашиваемых, включая утерянные значения. В четвертом столбце дано допустимое процентное значение. При определении этого значения утерянные данные исключаются. Последний столбец содержит накопленные процентные значения. Накопленные проценты — это сумма процентных частот допустимых ответов. Так, например, процент респондентов, которые дали ответ крайне неустойчивое или неустойчивое, составляет 56,1%. Это число определяется выражением: 18,7% + 37,4% = 56,1%. В последней строке содержится сумма всех столбцов (Всего).

    1.gif

    Изображение: 

    6.2 Вывод статистических характеристик

    6.2 Вывод статистических характеристик


    Чтобы получить описательную статистику числовых переменных, можно щелкнуть в диалоге Frequencies на кнопке Statistics... (Статистика). Откроется диалоговое окно Frequencies: Statistics (Частоты: Статистика).


    В группе Percentile Values (Значения процентилей) можно выбрать следующие варианты:

    •  Quartiks (Квартили): Будут показаны первый, второй и третий квартили. Первый квартиль (Q,) — это точка на шкале измеренных значений, ниже (левее) которой располагаются 25 % измеренных значений. Второй квартиль (Q2) — это точка, ниже которой располагаются 50 % измеренных значений. Второй квартиль также называется медианой. Третий квартиль (Q3) — это точка на шкале измеренных значений, ниже которой располагаются 75 % значений. Если данные имеются только в форме порядкового отношения, то качестве меры разброса используется межквартильная широта. Она определяется как

     

    Рис. 6.2: Диалоговое окно frequencies: Statistics

    •  Cut points (Точки раздела): Будут вычислены значения процентилей, разделяющие выборку на группы наблюдений, которые имеют одинаковую ширину, то есть включают одно и то же количество измеренных значений. По умолчанию предлагается количество групп 10. Если задать, к примеру, 4, то будут показаны квартили, то есть квартили соответствуют процентилям 25, 50 и 75. Видно, что число показываемых процентилей на единицу меньше заданного числа групп.

    •  Percentile(s) (Процентили): Здесь имеются в виду значения процентилей, определяемые пользователем. Введите значение процентиля в пределах от 0 до 100 и щелкните на кнопке Add (Добавить). Повторите эти действия для всех желаемых значений процентилей. Значения в порядке возрастания будут показаны в списке. Например, если ввести значения 25, 50 и 75, то мы получим квартили. Можно задавать любые значения процентилей, например, 37 и 83. В первом случае (37) будет показано значение выбранной переменной, ниже которого лежат 37 % значений, а во втором случае (83) — значение, ниже которого располагаются 83 % значений.

    В группе Dispersion (Разброс) можно выбрать следующие меры разброса:

    •  Std. deviation (Стандартное отклонение): Стандартное отклонение — это мера разброса измеренных величин; оно равно квадратному корню из дисперсии. В интервале шириной, равной удвоенному стандартному отклонению, который отложен по обе стороны от среднего значения, располагается примерно 67% всех значений выборки, подчиняющейся нормальному распределению.

    •  Variance (Дисперсия): Дисперсия — это квадрат стандартного отклонения и, следовательно, эта характеристика также является мерой разброса измеренных величин. Она определяется как сумма квадратов отклонений всех измеренных значений от их среднеарифметического значения, деленная на количество измерений минус 1.

    •  Range (Размах): Размах — это разница между наибольшим значением (максимумом) и наименьшим значением (минимумом).

    •  Minimum (Минимум): Наименьшее значение.

    •  Maximum (Максимум): Наибольшее значение.

    •  S.E. mean (Стандартная ошибка): Это стандартная ошибка среднего значения. В интервале шириной, равной удвоенной стандартной ошибке, отложенному вокруг среднего значения, располагается среднее значение генеральной совокупности с вероятностью примерно 67 %. Стандартная ошибка определяется как стандартное отклонение, деленное на квадратный корень из объема выборки.

    Обычно мерами разброса переменных, относящихся к интервальной шкале и подчиняющихся нормальному распределению, служат стандартное отклонение и стандартная ошибка. Как было сказано выше, стандартное отклонение позволяет задать диапазон разброса отдельных значений. По так называемому правилу кулака, в одном диапазоне стандартного отклонения (охватывающем ширину стандартного отклонения в обе стороны от среднего значения) располагается примерно 67 % значений, в диапазоне удвоенного стандартного отклонения — примерно 95 %, а в диапазоне утроенного стандартного отклонения — примерно 99 % значений.


    С другой стороны, стандартная ошибка позволяет задать доверительный интервал для среднего значения. В диапазоне удвоенной стандартной ошибки по обе стороны от среднего значения с вероятностью примерно 95 % находится среднее значение генеральной совокупности. С вероятностью примерно 99 % она лежит в диапазоне утроенной стандартной ошибки. Часто указывают только одну из этих двух мер разброса, обычно — стандартную ошибку, так как ее значение меньше. Во всех случаях следует точно выяснить, какая из мер разброса имеется в виду.


    В группе Central Tendency (Средние) можно выбрать следующие характеристики:

    •  Mean (Среднее значение): Среднее значение — это арифметическое среднее измеренных значений; оно определяется как сумма значений, деленная на их количество. Например, если имеется 12 измеренных значений и их сумма составляет 600, то среднее значение будет х = 600 : 12 = 50.

    •  Median (Медиана): Медиана — это точка на шкале измеренных значений, выше и ниже которой лежит по половине всех измеренных значений. Например, если измеренные значения таковы:

     37854639284,


    то сначала они располагаются в порядке возрастания: 23344567889.


    В данном случае медианой будет значение 5. Всего у нас 11 измеренных значений, следовательно, медианой является шестое значение. Выше него располагается 5 значений, и ниже — тоже 5. При нечетном количестве значений медиана всегда будет совпадать с одним из измеренных значений. При четном количестве медиана будет средним арифметическим двух соседних значений. Например, если имеются следующие измеренные значения:


    3445678899


    то медиана в этом случае будет равна: (6 + 7) : 2 = 6,5.

    •  Mode (Мода): Мода — это значение, которое наиболее часто встречается в выборке. Если одна и та же наибольшая частота встречается у нескольких значений, то выбирается наименьшее из них.

    •  Sum (Сумма): Сумма всех значений.

    В группе Distribution (Распределение) можно выбрать следующие меры несимметричности распределения:

    •  Skewness (Коэффициент асимметрии): Коэффициент асимметрии — это мера отклонения распределения частоты от симметричного распределения, то есть такого, у которого на одинаковом удалении от среднего значения по обе стороны выборки данных располагается одинаковое количество значений. Если наблюдения подчиняются нормальному распределению, то асимметрия равна нулю. Для проверки на нормальное распределение можно применять следующее правило: Если асимметрия значительно отличается от нуля, то гипотезу о том, что данные взяты из нормально распределенной генеральной совокупности, следует отвергнуть. Если вершина асимметричного распределения сдвинута к меньшим значениям, то говорят о положительной асимметрии, в противоположном случае — об отрицательной.

    •  Kurtosis (Коэффициент вариации или эксцесс): Коэффициент вариации указывает, является ли распределение пологим (при большом значении коэффициента) или крутым. Коэффициент вариации равен нулю, если наблюдения подчиняются нормальному распределению. Поэтому для проверки на нормальное распределение можно применять еще одно правило: Если коэффициент вариации значительно отличается от нуля, то гипотезу о том, что данные взяты из нормально распределенной генеральной совокупности, следует отвергнуть.

    Как правило, для переменных, относящихся к интервальной шкале и подчиняющихся нормальному распределению, в качестве основной характеристики используют среднее значение, а в качестве меры разброса — стандартное отклонение или стандартную ошибку. Для порядковых или интервальных переменных, не подчиняющихся нормальному распределению, — соответственно медиану или первый и третий квартили. Для переменных относящихся к номинальной шкале, нельзя дать других значимых характеристик кроме моды.


    В диалоге есть еще один флажок:

    •  Values are group midpoints (Значения являются средними точками групп): Если установить этот флажок, то при вычислении медианы и остальных значений процен-тилей оценки этих характеристик будут определяться для концентрированных данных. Этому вопросу посвящен отдельный раздел.

    Для переменной alter (возраст) мы определим следующие характеристики: среднее значение, медиану, моду, квартили, стандартное отклонение, дисперсию, размах, минимум, максимум, стандартную ошибку, асимметрию и эксцесс. Поступите следующим образом:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  В диалоге Frequencies щелкните на кнопке Reset (Сброс), чтобы отменить прежние настройки.

    •  Перенесите переменную alter в список выходных переменных.

    •  Щелкните на кнопке Statistics... (Статистика).

    •  В диалоге Frequencies: Statistics установите флажки желаемых характеристик. Затем щелкните на кнопке Continue (Продолжить). Вы вернетесь в диалог Frequencies.

    •  В диалоге Frequencies деактивируйте опцию Display frequency tables (Показывать частотные таблицы). Щелкните на кнопке ОК.

    В окне просмотра появятся следующие результаты:


    Статистика


    Alter


    N


    Допустимые


    106


    Утерянные


    2


    Среднее значение


    22,24


    Стандартная ошибка среднего значения


    21


    Медиана


    22,00


    Мода


    21


    Стандартное отклонение


    2,19


    Дисперсия


    4,79


    Асимметрия


    ,859


    Стандартная ошибка асимметрии


    ,235


    Эксцесс


    1,042


    Стандартная ошибка эксцесса


    ,465


    Размах


    11


    Минимум


    18


    Максимум


    29


    Процентили


    25


    21,00


    50


    22,00


    75


    23,00


    Респонденты опроса о психическом состоянии и социальном положении имеют средний возраст 22,24 года. Медиана составляет 22. Большинству респондентов 21 год (это мода). Самому молодому респонденту 18 лет (минимум), самому старшему — 29 лет (максимум). Самый старший респондент на 11 лет старше самого молодого (размах). Стандартное отклонение составляет 2,19. Следовательно, дисперсия — квадрат стандартного отклонения — равна (2,19)2 = 4,79. Асимметрия и коэффициент вариации даны с соот-ветсвующими стандартными ошибками.

    3.gif

    Изображение: 

    6.3 Медиана для концентрированных данных

    6.3 Медиана для концентрированных данных


    Для данных, имеющих форму частотной таблицы, определение медианы и остальных процентилей обычным методом будет слишком неточным. В таких случаях есть возможность вычислить медиану и любые другие процентили более точным методом. Мы поясним это на примере стоматологических данных.

    •  Загрузите файл cpitn.sav, содержащий результаты стоматологического исследования.

    Кроме переменных schule и mhfreq, которые определяют уровень образования и то, сколько раз в день обследуемый чистит зубы, этот файл содержит шесть переменных cpitnl—cpitn6, которые указывают степень пародонтального заболевания каждой из шести частей челюсти — так называемый параметр CPITN, задаваемый с помощью следующей кодировочной таблицы:


    0


    Здоровый пародонт


    1


    Кровоточивость


    2


    Зубные отложения


    3


    Глубина десенных карманов 3,5-5,5 мм


    4


    Глубина десенных карманов 6 мм и более

    •  С помощью команд меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies (Частоты) создайте частотную таблицу, к примеру, для переменной cpitnl. Если задать вычисление среднего значения и медианы, мы получим следующий результат:

    Статистика


    CPITN1


    N


    Допустимые


    2548


    Утерянные


    0


    Среднее значение


    2,24


    Медиана


    2,00


    CPITN1


    Частота


    Проценты


    допустимые проценты


    накопленные проценты


    Допустимые здоровый


    109


    4,3


    4,3


    4,3


    кровоточивость


    389


    15,3


    15,3


    19,5


    отложения


    921


    36,1


    36,1


    55,7


    глубина карманов


    1042


    40,9


    40,9


    96,6


    3,5-5,5 глубина карманов >=6


    87


    3,4


    3,4


    100,0


    Всего


    2548


    100,0


    100,0


    При определении медианы обычным методом ее значение равно 2. Это значение, хотя формально и правильное, но дает совершенно неудовлетворительный, недостаточно значимый результат. В данном случае, когда данные являются концентрированным, для уточнения медианы применяется следующая расчетная формула:


    Здесь:


    n


    Количество измеренных значений


    m


    Класс, в котором находится медиана


    u


    Нижняя граница класса m


    fm


    Абсолютная частота в классе m


    Fm-1


    Накопленная частота вплоть до предыдущего класса m — 1


    B


    Ширина класса


    Следовательно, решающее значение имеет правильный выбор границ классов; их следует выбирать так, чтобы значения кодовых чисел соответствовали середине каждого класса. В данном примере для границ классов следует выбрать значения


    -0,5 0,5 1,5 2,5 3,5 4,5


    Ширина класса равна 1.


    Следовательно,


    n = 2548


    m = 3 (так как медиана находится в третьем классе)


    u = 1,5


    fm = 921


    Fm-1 = 109 + 389 = 498


    b = 1


    Если сравнить это значение со средним значением (2,24), то можно установить следующее правило — оказывается, что при распределении со сдвигом вправо (как в данном случае) медиана больше среднего значения.


    Описанный точный метод вычисления медианы будет использован в SPSS, если в диалоге Frequencies: Statistics установить флажок Values are group midpoints.


    В этом случае мы получим точное значение медианы (2,32).


    По определению, медиана — это значение, выше и ниже (правее и левее) которого расположено по 50 % всех значений, если они упорядочены по величине. Обобщая эту характеристику, мы приходим к определению так называемых процентилей. Эти характеристики позволяют, например, указать значение, ниже которого лежит 10 % всех значений (а выше расположено 90 % значений). Чаше всего применяются процентили 25 % и 75 %, называемые также соответственно первым и третьим квартилями.


    В диалоге Frequencies: Statistics можно последовательно задать любые значения процентилей. Если данные концентрированы, снова следует установить флажок Values are group midpoints.


    Формула вычисления процентиля для любого значения:


    Здесь:


    n


    Класс, в котором находится процентиль


    m


    Нижняя граница класса т


    P


    Процентное значение процентиля


    Нm


    Процентная частота в классе m-1


    Hm-1


    Процентная накопленная частота в классе m-1


    b


    Ширина класса


    Для процентиля 50 % (Р = 50) после некоторых преобразований получается формула для медианы, приведенная выше.


    В столбчатых, линейных, круговых диаграммах и диаграммах с областями, на которых предусмотрено отображение медианы и других процентилей, при наличии концентрированных данных используется модифицированный способ расчета (см. раздел 22.1.1).

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    6.4 Форматы частотных таблиц

    6.4 Форматы частотных таблиц

    •  Загрузите файл studium.sav (см. раздел 6.1).

    Сейчас мы попробуем вывести частотную таблицу переменной fach, отсортированную по убыванию частоты. Поступите следующим образом:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  Перенесите переменную fach (специальность) в список выходных переменных.

    •  Щелкните на кнопке Format.... Откроется диалоговое окно Frequencies: Format (Частоты: Формат).


    Рис. 6.3: Диалоговое окно Frequencies: Format


    В группе Order by (Сортировать по) можно выбрать порядок, в котором будут отображены значения в частотной таблице. Возможны следующие варианты:

    •  Ascending values (По возрастанию значений): Данные сортируются по возрастанию значений. Это настройка по умолчанию.

    •  Descending values (По убыванию значений): Данные сортируются по убыванию значений.

    •  Ascending counts (По возрастанию частот): Данные сортируются по возрастанию частот.

    •  Descending counts (По убыванию частот): Категории сортируются по убыванию частот.

    Кроме того, флажок Suppress tables -with more than ... categories (He выводить таблицы с более чем... категориями) позволяет избежать вывода длинных частотных таблиц.

    •  Выберите вариант Descending counts.

    •  Подтвердите выбор кнопкой Continue (Продолжить).

    •  Щелкните на кнопке ОК, чтобы начать вычисление. Мы получим следующие результаты:

    Специальность


    Частота


    Проценты


    Допустимые проценты


    Накоплен- ные проценты


    Допус-тимые


    Гуманитар- ные науки 


    25


    23,1


    23,1


    23,1


    Юриспру- денция


    22


    20,4


    20,4


    43,5


    Экономика


    19


    17,6


    17,6


    61,1


    Психология


    11


    10,2


    10,2


    71,3


    Медицина


    10


    9,3


    9,3


    80,6


    Теология


    9


    8,3


    8,3


    88,9


    Естествен- ные науки


    9


    8,3


    8,3


    97,2


    Техника


    2


    1,9


    1,9


    99,1


    Прочие


    1


    ,9


    ,9


    100,0


    Всего


    108


    100,0


    100,0


    Основные специальности респондентов отображены в порядке убывания частоты.

    7.gif

    Изображение: 

    6.5 Графическое представление

    6.5 Графическое представление


    Результаты частотного распределения можно представить графически. Для примера мы создадим столбчатую диаграмму для частотного распределения основных специальностей. Поступите следующим образом:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies (Частоты)

    •  Перенесите переменную fach в список выходных переменных.

    •  Щелкните на кнопке Charts... (Диаграммы). Откроется диалоговое окно Frequencies: Charts (Частоты: Диаграммы).

    •  Выберите в группе Chart Type (Тип диаграммы) пункт Bar charts (Столбчатая диаграмма), а в группе Chart Values (Значения диаграммы) — пункт Percentages (Проценты). Подтвердите выбор кнопкой Continue (Продолжить). Вы вернетесь в диалог Frequencies.

    •  В диалоговом окне Frequencies снимите флажок Display frequency tables (Показывать частотные таблицы). — Щелкните на кнопке ОК. Диаграмма будет показана в окне просмотра (см. рис. 6.5).


    Рис. 6.4: Диалоговое окно Frequencies: Charts


    Усовершенствуем вид этой диаграммы.

    •  Чтобы начать редактирование, дважды щелкните в области столбчатой диаграммы. Диаграмма будет показана в редакторе диаграмм.

    •  На панели инструментов редактора диаграмм щелкните на символе меток столбцов:

     

    Рис. 6.5: Столбчатая диаграмма в средстве просмотра


    Откроется диалоговое окно Bar Label Style (Стиль меток столбцов). Выберите пункт Framed (В рамке), щелкните на кнопке Apply all (Применить для всех) и затем на Close (Закрыть). На каждом столбце появится надпись с его процентным значением.

    •  Щелкните мышью на любом из столбцов. На верхней стороне каждого столбца появится по два маленьких черных квадрата. Это означает, что области столбцов готовы для редактирования.

    •  Щелкните мышью на символе образца заливки:

    Откроется диалоговое окно Fill Patterns (Образцы заливки).

    •  Выберите в нем подходящий образец заливки. Подтвердите выбор кнопкой Apply (Применить) и закройте диалоговое окно.


    Рис. 6.6: Диалоговое окно Fill Patterns


    Столбцы будут заполнены выбраннои заливкой. 

    •  Щелкните мышью на символе вида столбцов:

    •  Выберите пункт Drop shadow (Тень), щелкните на кнопке Apply all (Применить для всех) и затем на Close (Закрыть).

    •  Дважды щелкните на заголовке диаграммы Fachbereich. Откроется диалоговое окно Titles (Заголовки) (см. рис. 6.7).

    •  Измените заголовок на «Основная специальность» и закройте диалог кнопкой ОК.

    •  В меню Chart (Диаграмма) установите флажок Outer Frame (Внешняя рамка). Закройте редактор диаграмм; получившийся график показан на рис. 6.8.


    Рис. 6.7: Диалоговое окно Tirles



    Рис. 6.8: Отредактированная диаграмма


    Рассмотрим другой пример — визуальное представление частотного анализа.

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies (Частоты)

    •  Щелкните на кнопке Reset (Сброс), чтобы установить стандартные настройки.

    •  Перенесите переменную sozial (социальное положение) в список выходных переменных.

    •  Щелкните на кнопке Charts... (Диаграммы). В диалоговом окне Frequencies: Charts выберите пункт Histograms (Гистограмма). Установите флажок With normal curve (С кривой нормального распределения). Щелкните на кнопке Continue.

    •  В диалоговом окне Frequencies снимите флажок Display frequency tables (Показывать частотные таблицы). Щелкните на кнопке ОК. Гистограмма будет показана в окне просмотра (см. рис. 6.9).


    Рис. 6.9: Гистограмма


    Частоты на гистограмме обозначены колонками, которые, но отличие от столбчатой диаграммы, не изолированы, а примыкают друг к другу. Отображаются также стандартное отклонение, среднее значение и общее количество наблюдений(М). Кроме того, показана кривая нормального распределения.

    •  Дважды щелкните на области гистограммы — откроется редактор диаграмм, в котором можно придать гистограмме желаемый вид. График отобразится в редакторе диаграмм.

    •  Выберите другой образец заливки и снабдите колонки надписями.

    •  При желании проверьте другие функции редактора диаграмм.

    На этом мы завершаем тему частотного анализа. Попробуйте самостоятельно выполнить частотный анализ переменной studium (время обучения) и представьте результаты распределения частот в графическом виде.

    8.gif

    Изображение: 

    10.gif

    Изображение: 

    12.gif

    Изображение: 

    14.gif

    Изображение: 

    15.gif

    Изображение: 

    16.gif

    Изображение: 

    Глава 7. Отбор данных

    Глава 7. Отбор данных

    1. Отбор данных

    Отбор данных


    В этой главе мы на примере файлов wahl.sav и studium.sav покажем разнообразные возможности, предоставляемые в SPSS для отбора данных. Отбор данных — это выбор наблюдений по определенным критериям; так, например, при опросе избирателей (файл wahl.sav) можно отобрать только мужчин, голосующих за ХДС/ХСС, а при опросе студентов (файл studium.sav) — только студенток, изучающих психологию и медицину. После этого все вычисления будут проводиться только с этими отобранными наблюдениям.


    Для этого в SPSS существует три принципиальные возможности:

    •  Выбор наблюдений по определенному условию (логическому выражению),

    •  Извлечение случайной выборки наблюдений из файла данных,

    •  Разделение наблюдений на группы в соответствии со значениями одной или нескольких переменных.

    Данная глава разбита на три раздела, посвященные каждой из этих возможностей. Еще в одном разделе рассматривается вопрос сортировки наблюдений, содержащихся в файле данных, по значениям выбранных переменных.

    7.1 Выбор наблюдений

    7.1 Выбор наблюдений


    Проведем частотный анализ переменной partei (партия). При этом мы будем учитывать только респондентов-женщин. Поступите следующим образом:

    •  Загрузите файл wahl.sav в редактор данных.

    •  Выберите в меню команды Data (Данные) Select Cases... (Выбрать наблюдения)

    Откроется диалоговое окно Select Cases (см. рис. 7.1). По умолчанию в этом диалоге выбран пункт All cases (Все наблюдения).

    •  Выберите пункт If condition is satisfied (Если выполняется условие) и щелкните на кнопке If... (Если). Откроется диалоговое окно Select Cases: If (см. рис. 7.2).

    Это диалоговое окно разделено на следующие части:

    •  Список исходных переменных: Содержит переменные, содержащиеся в открытом файле данных. В нашем случае это переменные fragebnr, sex, alter и partei.

    •  Редактор условий: Здесь записывается логическое выражение, по которому должны быть отобраны наблюдений. В данный момент редактор условий пока пуст.


    Рис. 7.1: Диалоговое окно Select Cases



    Рис. 7.2: Диалоговое окно Select Cases: If

    •  Кнопка с треугольником: Эта кнопка позволяет перенести переменную из списка исходных переменных в редактор условий.

    •  Клавиатура: Содержит цифры, а также арифметические, логические операторы и операторы отношения; с ней можно работать как с обыкновенным калькулятором. Если щелкнуть на какой-нибудь кнопке мышью, соответствующий знак, например, +, *, 7, будет скопирован в редактор условий.

    •  Список функций: Содержит около 140 функций. Каждую из функции можно скопировать в редактор условий двойным щелчком.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    7.1.1 Классификация операторов

    7.1.1 Классификация операторов


    Операторы делятся на арифметические, логические и операторы отношения. Арифметические операторы применяются в так называемых арифметических выражениях (математических формулах), которые при отборе данных имеют лишь второстепенное значение. Арифметические операторы всегда можно использовать в логических выражениях, однако это встречается нечасто. Решающую роль эти операторы играют при модификации данных; поэтому они и описаны в разделе 8.1, посвященном модификации данных.


    Логические операторы и операторы отношения применяются исключительно в логических выражениях, которые рассматриваются в настоящей главе.

    7.1.2 Операторы отношения

    7.1.2 Операторы отношения


    Отношение — это логическое выражение, в котором два значения сравниваются друг с другом посредством оператора отношения. В областях, где применяется SPSS в операторах отношения значения переменной сравниваются с каким-либо численным значением (константой), например


    sex = 2 partei ~= 3 alter > 30


    Для построения логических выражений могут применяться следующие операторы отношения:


    Знак на кнопке


    Альтернативный текст


    Значение (рус./англ.)


    <


    LT


    меньше (less than)


    >


    GT


    больше (greater than)


    <=


    LE


    меньше или равно (less than or equal to)


    >—


    GE


    больше или равно (greater than or equal to)


    =


    EQ


    равно (equal to)


    ~=


    NE или <>


    не равно (not equal to)


    Операторы можно ввести в редактор условий либо щелкнув в диалоговом окне на кнопке с соответствующим знаком, либо введя с клавиатуры альтернативный текст. Например, вместо ~= можно ввести NE или <>.

    7.1.3 Логические операторы

    7.1.3 Логические операторы


    Для построения условных выражений могут применяться следующие логические операторы:


    Знак на кнопке


    Альтернативный текст


    Значение


    &


    AND


    Логическое И


    |


    OR


    Логическое ИЛИ


    ~


    NOT


    Логическое НЕ


    Логические операторы AND и OR связывают два отношения, а логический оператор МОТ меняет значение истинности условного выражения на противоположное. Между логическими операторами устанавливаются следующие приоритеты:


    Приоритет


    Оператор


    1


    NOT


    2


    AND


    3


    OR

    7.1.4 Булева алгебра

    7.1.4 Булева алгебра


    Логические операторы основаны на принципах булевой алгебры (логики высказываний), краткий обзор которых приводится в данном разделе.


    Оператор И (конъюнкция)


    Выражение 1


    Выражение 2


    Результат


    и


    и


    и


    и


    л


    л


    л


    и


    л


    л


    л


    л


    Легенда: и = истина (true); л = ложь (false)


    При конъюнкции все участвующие выражения (отношения) должны быть истинными, чтобы общий результат также являлся истинным. Примеры:


    Выражение


    Истинность


    (3<7) AND (8>5)


    и


    (12=8) AND (4=4)


    л


    (3<=5) AND (4>=1)


    и


    (8=4) AND (7=3)


    л


    Оператор ИЛИ (дизъюнкция)


    Выражение 1


    Выражение 2


    Результат


    и


    и


    и


    и


    л


    и


    л


    и


    и


    л


    л


    л


    При дизъюнкции хотя бы одно из участвующих отношений должно быть истинным, чтобы общий результат также был истинным. Примеры:


    Выражение


    Истинность


    (3<5) OR (47+1 0<10)


    и


    (3=8) OR (7>5)


    и


    (4:7=2) OR (8*4=21)


    л


    (42=16) OR (23=3)


    и


    Логическое НЕ (отрицание)


    Выражение


    Результат


    и


    л


    л


    и


    Отрицание меняет истинность выражения на противоположную. Примеры:


    Выражение


    Истинность


    NOT [(3<5) AND (4>5)]


    и


    NOT [(4<5) AND (8<12)]


    л


    При отрицании следует учитывать эквивалентность операторов:


    отрицаемый оператор


    эквивалентный оператор


    <


    >-


    >


    < =


    <=


    >


    > =


    <


    В заключение приведем пример более сложного логического выражения: [(NOT A) AND (NOT В)] OR С


    Согласно правилам приоритета скобки здесь не нужны. Мы поместили их только для повышения наглядности. Истинность выражения можно определить при помощи следующей таблицы:


    А


    И


    С


    NOT A


    NОТ В


    (NОT A) AND (NОT В)


    OR С


    и


    и


    и


    л


    л


    л


    и


    и


    и


    л


    л


    л


    л


    л


    и


    л


    и


    л


    и


    л


    и


    и


    л


    л


    л


    л


    л


    л


    л


    и


    и


    и


    л


    л


    и


    л


    и


    л


    и


    л


    л


    л


    л


    л


    и


    и


    и


    и


    и


    л


    л


    л


    и


    и


    и


    и


    Для более сложных выражений также следует составлять подобные таблицы.


    Если все эти элементы логики высказываний кажутся вам слишком математизированными или абстрактными, вполне можно ориентироваться по разговорному употреблению союза "и". Высказывание: "Я был в кино и видел интересный фильм", истинно тогда и только тогда, когда истинны обе его части. Если, несмотря на то, что вы ходили в кино, но на сеансе заснули от скуки, это выражение не будет истинным. Также оно не будет истинным, если вы смотрели интересный фильм по телевизору. И, конечно же, оно будет совершенно ложным (хотя здесь нас не интересует степень ложности), если вы и не были в кино, и не смотрели там интересный фильм.


    Иначе обстоит дело при разговорном применении союза "или", которое в основном означает исключающее "или", когда, например, дети хотят получить на Рождество или компьютер, или велосипед.

    7.1.5 Функции

    7.1.5 Функции


    Список функций, который мы сейчас рассмотрим, — следующая важная часть диалогового окна Select Cases: If.


    Этот список содержит множество математических функций, большая часть из которых, однако, имеет отношение только к модификации данных (расчету новых переменных). Поэтому обзор этих функций представлен в соответствующем разделе (см. раздел 8.1.2). Здесь мы рассмотрим только логические и строковые функции.


    Логические функции


    В SPSS реализованы две логические функции:

    •  RANGE (variable, begin, end): Функция RANGE возвращает значение 1, или true, если значение переменной лежит в диапазоне между заданными начальным и конечным значениями. Переменная может иметь как численный, так и строковый тип. RANGE (alter, 18, 22) возвращает значение 1, то есть true, если значение переменной alter лежит между 18 и 22 включительно. Можно задавать несколько диапазонов, например, RANGE (alter, 1,17, 63, 99). В этом случае функция возвращает true, если значение переменной alter лежит между 1 или 17 или между 63 и 99 включительно. В функции RANGE можно также использовать переменные строкового типа, например, RANGE (name, A, Mzzzzzz). Тогда функция будет возвращать 1 для имен, начинающихся с букв от А до М включительно. Если имя начинается с другой буквы, функция возвратит 0.

    •  ANY (variable, vail, va!2, val3,...): Функция ANY возвращает значение 1, или true, если значение переменной (значение первого аргумента) совпадает по крайней мере с одним из значений, указанных в последующем списке параметров (vail, va!2, va!3, ...). В противном случае возвращается значение 0 или false. Первый элемент, как правило, — переменная численного или символьного типа. Примеры: ANY (jahr, 1991, 1992, 1993, 1994) возвращает true, если значение переменной jahr равно 1991, 1992, 1993 или 1994. ANY (name, Schmidt, Meier, Raabe) возвращает значение true или 1 в тех случаях, когда переменная name содержит значения Schmidt, Meier или Raabe. Во всех остальных случаях возвращается значение 0. Не забывайте заключать строковые значения в двойные кавычки.

    Строковые функции


    Из общего количества 18 строковых функций мы рассмотрим три самых важных, на наш взгляд.

    •  SUBSTR (variable, begin, length): Эта функция извлекает определенную часть из строки. Она возвращает подстроку или отдельный символ. Например, если строковая переменная name содержит значение Mannheim, то следующий вызов функции

    SUBSTR (name, 1, 2)


    возвратит значение Ма. Здесь из переменной name извлекаются два знака (третий аргумент) начиная с первой позиции (второй аргумент). Выражение


    SUBSTR (name, I, 2) = Ma


    будет истинным для значений переменной Maus, Mannesmann или Mahlmann. При сравнении со строками вместо двойных кавычек (= "Ма") можно также применять простые (= 'Ма'). Однако смешение простых и двойных кавычек (= 'Ма") не допускается.

    •  UPCASE (argument): Функция UPCASE преобразует строчные буквы в прописные. В качестве аргумента можно задавать строку или переменную символьного типа. UPCASE (vorname) возвращает значение ANNA, если переменная vorname имеет значение Anna.

    •  LOWER (argument): Функция LOWER преобразует прописные буквы в строчные.

    В качестве параметра можно задавать строку или переменную символьного типа.

    • LOWER (vorname) возвращает значение anna, если переменная vorname имеет значение ANNA или Anna. 

    Функции переносятся в редактор условий следующим образом:

    •  Поместите курсор на место в условном выражении, на котором должна быть вставлена функция.

    •  Дважды щелкните на функции в списке функций или выделите функцию и щелкните на кнопке с треугольником около списка функций.

    Функция будет вставлена в выражение. Вместо аргументов в этой функции будут стоять вопросительные знаки. Количество вопросительных знаков указывает минимальное количество аргументов, которое следует вставить. Отредактировать функцию можно следующим образом:

    •  Выделите вопросительные знаки во вставленной функции.

    •  Замените их соответствующими аргументами. Имена переменных для аргументов можно перенести из списка исходных переменных.

    В заключение мы составим список приоритетов при построении логических выражений:


    Приоритет


    Оператор/функция


    Значение


    1


    0


    Оператор скобок


    2


    Функции


    Различные значения


    3


    <


    Меньше


    <=


    Меньше или равно


    >


    Больше


    >=


    Больше или равно


    =


    Равно


    "=


    Не равно


    4



    Логическое НЕ


    5


    6,


    Логическое И


    6


    I


    Логическое ИЛИ

    7.1.6 Ввод условного выражения

    7.1.6 Ввод условного выражения


    Теперь попробуем снова выполнить отбор, но в этот раз будем выбирать только респондентов-женщин. Выполните следующие действия:

    •  Перенесите переменную sex в редактор условий, дважды щелкнув на ней или выделив ее и щелкнув на кнопке с треугольником.

    •  Щелкните на кнопке со знаком равенства на клавиатуре. Этот знак будет скопирован в редактор условий.

    •  Щелкните на кнопке 1 на клавиатуре. Знак будет скопирован в редактор условий. Вид диалогового окна показан на рис. 7.3.

    Условие имеет вид sex = 1, то есть будут выбраны все наблюдения, для которых переменная sex имеет значение 1 (женский).



    Рис. 7.3: Условие в редакторе условий

    •  Подтвердите выбор кнопкой Continue (Продолжить). Вы вернетесь в диалог Select Cases. Однако теперь в диалоговом окне появилось условие sex = 1.

    • Щелкните на кнопке ОК. Вы снова окажетесь в редакторе данных. 

    Примечание: Выбранные опции соответствуют следующему командному синтаксису:


    SELECT IF sex = 1.


    EXECUTE .

    Теперь фильтрация наблюдений включена. О том, что отбор, заданный с помощью диалоговых окон осуществлен свидетельствует сообщение Filter on (Фильтр включен), которое появляется в строке состояния в нижней части окна SPSS. Система создает переменную filter_S. Это численная переменная с длиной один байт. Она имеет следующие метки значений: 0 = Not Selected (Не выбрано), 1 = Selected (Выбрано), так как нуль обозначает ложь (false), а единица — истину (true). При всех последующих операциях будут учитываться только наблюдения, для которых значение этой переменной равно 1, то есть те, для которых выполняется условие sex = 1. Номера неотобранных наблюдений отображаются зачеркиванием в левом крае редактора данных. Теперь проведем частотный анализ переменной partei. Мы получим следующий результат:


    Партия


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    ХДС/ХСС


    5


    33,3


    35,7


    35,7


    СДП


    1


    6,7


    7,1


    42,9


    сдпг


    4


    26,7


    28,6


    71,4


    Зеленые/Союз 90


    2


    13,3


    14,3


    85,7


    пдс


    1


    6,7


    7,1


    92,9


    Прочие


    1


    6,7


    7,1


    100,0


    Всего


    14


    93,3


    100,0


    Missing Total


    нет данных


    1 15


    6,7 100,0


    Из 30 наблюдений файла wahl.sav условие отбора выполняется в 15 наблюдениях; для них sex = 1. Эти 15 наблюдений и учитываются при частотном анализе переменной partei. Для одного из отобранных наблюдений данных о партии нет.


    Обратите внимание, что фильтр действует и при остальных статистических процедурах. Команда SPSS SELECT IF или соответствующие настройки в диалоговых окнах фильтруют наблюдения постоянно, то есть до тех пор, пока фильтр не будет удален или деактивирован. Чтобы удалить фильтр, поступите следующим образом:

    •  Щелкните на имени переменной filter_$. Весь столбец будет выделен.

    •  Нажмите клавишу <Backspace>. Переменная фильтра будет удалена.

    Если требуется не удалять фильтр, а лишь временно деактивизировать его, выполните следующие действия:

    •  Выберите в меню команды Data (Данные) elect Cases... (Выбрать наблюдения)

    •  В диалоговом окне Select Cases щелкните на кнопке All cases (Все наблюдения). Условие фильтра будет деактивировано, однако переменная filter_S сохранится. В любой момент ее можно будет активизировать снова.

    На уровне синтаксических команд отбор можно выполнить при помощи единственной процедуры, которая показана ниже. Для этого применяется команда TEMPORARY:

     TEMPORARY.
    SELECT IF sex = 1. FREQUENCIES VARIABLES = partei. 

    Временный фильтр можно ввести только вручную в редакторе синтаксиса SPSS; через диалоговые окна этого сделать невозможно. Этот пример показывает, что непосредственный ввод команд в редакторе синтаксиса имеет некоторые преимущества. Об этом мы еще расскажем в главе 26 (Программирование).


    При вводе команд в редакторе синтаксиса следует обращать внимание на различие между численными и строковыми переменными.


    Численная переменная:


    SELECT IF sex = 1.


    Строковая переменная:


    SELECT IF fragebnr = "W-001".


    Для строковых переменных (как fragebnr (код анкеты) в этом примере) следует применять простые или двойные кавычки. Слова SELECT IF необходимы только при непосредственном вводе команды в редакторе синтаксиса; та же самая строка в редакторе условий диалога Select Cases: If будет более компактной:


    sex = 1 ИЛИ


    fragebnr = "W-001"


    Здесь также следует учитывать различие между численными и строковыми переменными.

    3.gif

    Изображение: 

    7.1.7 Примеры отбора данных

    7.1.7 Примеры отбора данных


    Здесь мы представим некоторые примеры отбора данных. Рассмотрим следующие условия:


    1. Требуется отобрать только респондентов-мужчин. В редакторе условий вводится следующая строка:


    sex = 2


    Эту строку можно набрать непосредственно или перенести с помощью кнопки с треугольником и кнопок клавиатуры.


    2. Требуется отобрать только респондентов-женщин, которые голосовали за ХДС/ХСС. В редакторе условий вводится следующая строка:


    sex = 1 & partei = 1


    ИЛИ


    sex = 1 AND partei = 1


    Обратите внимание на значение переменной фильтра в наблюдении 22 (fragebnr = 0-007). Здесь это системное пропущенное значение. В этом случае SPSS не может сделать никакого вывода об истинности, так как переменная partei имеет значение О = нет данных или данные не введены. Поэтому условие sex =1 & partei = 1 в наблюдении 22 нельзя проверить на истинность. Оно может быть как истинным, так и ложным. Для такого неопределенного случая SPSS присваивает переменной filter_$ системное пропущенное значение.


    Следовательно, таблицу истинности можно дополнить случаем отсутствующих значений:


    Конъюнкция


    Логическое выражение


    Результат


    true AND true


    true


    true AND false


    false


    false AND true


    false


    false AND false


    false


    true AND missing


    missing


    false AND missing


    false


    missing AND missing


    missing


    Дизъюнкция


    Логическое выражение


    Результат


    true OR true


    true


    true OR false


    true


    false OR true


    true


    false OR false


    false


    true OR missing


    true


    false OR missing


    missing


    missing OR missing


    missing


    Отрицание:


    Логическое выражение


    Результат


    true


    false


    false


    true


    missing


    missing


    Если результат логического выражения равен missing (отсутствует), то данный случай, как и при результате false, не учитывается при дальнейшей обработке.


    3. Требуется отобрать только респондентов, имеющих возраст от 40 до 60 лет включительно.


    alter >= 40 & alter <= 60


    ИЛИ


    alter >= 40 AND alter <= 60


    Более изящным будет применение здесь функции 


    RANGE: RANGE (alter, 40, 60).


    4. Требуется отобрать только респондентов-женщин, которые старше 60 лет. sex =1 & alter > 60 ИЛИ sex =1 AND alter > 60.


    5. Требуется отобрать только респондентов-мужчин, возраст которых не превышает 25 лет и которые голосовали за СДПГ. При формулировке условия не старше 25 лет применяется оператор NOT:


    sex = 2 S partei = 3 & ~ alter > 25


    ИЛИ


    sex = 2 S partei = 3 S NOT alter > 25.


    Оператор NOT обязательно должен стоять в начале логического выражения. Выражение & alter ~> 25 не допускается в SPSS. В этом случае вы получите сообщение об ошибке с подсказкой, где должен находиться оператор NOT.


    6. Требуется отобрать респондентов, которые голосовали за ХДС, СДП или республиканцев.


    partei = 1 | partei = 2 | partei = 6


    ИЛИ


    partei = 1 OR partei = 2 OR partei = 6.


    Здесь более изящным будет применение функции ANY:


    ANY (partei, 1, 2, 6).


    7. Отберем респондентов, которые опрашивались в Западной Германии:


     fragebnr >= "W-"


    Здесь более изящным будет применение функции SUBSTR:


    SUBSTR (fragebnr,1,1) = "W"


    ИЛИ


    SUBSTR (fragebnr,1,2) = "W-"


    Можно также применить функцию RANGE:


    RANGE (fragebnr, W-001, W-999)


    ИЛИ


    RANGE (fragebnr, "W-001", "W-999").


    8. Отберем респондентов, которые опрашивались в Восточной Германии: fragebnr >= "0-" & fragebnr < "W-"


    Достаточно также просто ввести


    fragebnr < "W-"


    И в этом случае изящнее будет вариант с SUBSTRING:


    SUBSTR(fragebnr,1,1) = "О"


    или


    SUBSTR(fragebnr,1,2) = "0-"


    Можно также применить функцию RANGE:


    RANGE (fragebnr, "O-001", "0-999")


    Удобно использовать оператор NOT:


    ~ fragebnr >= "W"


    Далее мы рассмотрим применение функций UPCASE и LOWER. При этом будем исходить из следующей ситуации.: При вводе номеров анкет иногда по ошибке вме-^то прописного "W" для Западной Германии было закодировано строчное "w". Эти наблюдения не будут отобраны по условию SUBSTR(fragebnr, 1,1) = "W". В таком ^лучае может помочь функция UPCASE или LOWER:


    SUBSTR (UPCASE (fragebnr,1,1) = "W".


    Рассмотренная конструкция называется вложенной функцией. Вложенные функции вычисляются в направлении изнутри наружу. Функция UPCASE преобразует содержимое переменной fragebnr в прописные буквы. Преобразованное содержимое затем передается в функцию SUBSTR. Эта функция выделяет из строки первую букву. Полученная буква сравнивается с буквой W. Если они совпадают, данное наблюдение выбирается, то есть переменная фильтра filter_S приобретает значение 1. Если применяется функция LOWER, строка в редакторе условий будет выглядеть так:


    SUBSTR (LOWER (fragebnr, 1,1) = "w".


    Функция LOWER преобразует содержимое переменной fragebnr в строчные буквы. Преобразованное содержимое передается в функцию SUBSTR. Эта функция выделяет из строки первую букву. Полученная буква сравнивается с буквой w. Если они совпадают, данное наблюдение отбирается.

    7.2 Извлечение случайной выборки

    7.2 Извлечение случайной выборки


    При большом количестве наблюдений для экономии времени может быть полезно использовать небольшую случайную выборку при первой предварительной проверке гипотезы. Чтобы извлечь случайную выборку из совокупности всех наблюдений, выполните следующие действия:

    •  Выберите в меню команды Data (Данные) Select Cases... (Выбрать наблюдения)

    •  Выберите пункт Random sample of cases (Случайная выборка), а затем щелкните на кнопке Sample... (Выборка). Откроется диалоговое окно Select Cases: Random Sample (Выбрать наблюдения: Случайная выборка).


    Рис. 7.4: Диалоговое окно Select Cases: Random Sample


    В группе Sample Size (Размер выборки) можно выбрать один из следующих способов определения объема выборки:

    •  Approximately (Приблизительно): Пользователь может указать здесь процентного значение. SPSS создаст случайную выборку с объемом, приблизительно соответствующим указанному проценту наблюдений.

    •  Exactly (Точно): Пользователь должен указать здесь точное количество наблюдений в случайной выборке. Кроме того, здесь надо задать количество наблюдений, из которых будет извлечена выборка. Второе число не должно превышать общего количества наблюдений в файле данных. Для каждой случайной выборки генератор случайных чисел SPSS использует новое начальное значение. Таким образом, каждый раз при обращении к данному диалогу создается новая выборка наблюдений, отличная от прежних. Если требуется, чтобы случайная выборка повторялась, надо задать начальное значение самостоятельно.

    •  Для этого выберите в меню команды Transform (Преобразовать) Random Number Seed... (Установить начальное положение генератора случайных чисел)

    Откроется диалоговое окно Random Number Seed.


    Начальное значение может быть любым положительным целым числом. Это значение можно задать самостоятельно или предоставить сделать это SPSS (вариант Random Seed, принятый по умолчанию).



    Рис. 7.5: Диалоговое окно Random Number Seed.

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    7.3 Сортировка наблюдений

    7.3 Сортировка наблюдений


    Данные в SPSS можно сортировать в соответствии со значениями одной или нескольких переменных. Рассмотрим следующий пример: Требуется упорядочить данные файла wahl.sav по возрасту. Для этого поступите следующим образом:

    •  Выберите в меню команды Data (Данные) Sort Cases... (Сортировать наблюдения)

    Откроется диалоговое окно Sort Cases. Переменные файла данных будут отображены в списке исходных переменных.



    Рис. 7.6: Диалоговое окно Sort Cases

    •  Перенесите переменную alter в список Sort by (Сортировать по). В группе Sort order (Порядок сортировки) по умолчанию выбран вариант Ascending (По возрастанию). Эта опция сортирует наблюдения в порядке возрастания значения переменной сортировки, а следующая опция, Descending — в порядке убывания.

    •  Подтвердите настройки кнопкой ОК. В редакторе данных файл wahl.sav будет отсортирован по возрастанию значений переменной alter.

    Примечание: Выбранные опции соответствуют следующему командному синтаксису:


    SORT CASES BY alter (A) .


    или, если надо сортировать по убыванию:


    SORT CASES BY alter (D) .


    Здесь А обозначает ascending (возрастание), a D — descending (убывание). Если выбрать несколько переменных сортировки, их последовательность в списке Sort by будет определять порядок, в котором будут отсортированы наблюдения. Рассмотрим следующий пример: Необходимо отсортировать файл wahl.sav по значениям переменных nartei и alter. Переменная partei должна быть первым критерием сортировки, а переменная alter — вторым. Сортировка по переменной partei должна быть в порядке возрастания, а по переменной alter — в порядке убывания. Для этого перенесите в список переменных сортировки вначале переменную partei, а затем переменную alter. Выделите переменную alter и щелкните на опции Ascending.


    Примечание: Выбранные опции соответствуют следующему командному синтаксису:


    SORT CASES BY partei (A) alter (D) .


    В редакторе данных файл wahl.sav будет отсортирован по возрастанию значений переменной partei. Наблюдения, относящиеся к одной и той же партии будут отсортированы по убыванию возраста.

    6.gif

    Изображение: 

    7.4 Разделение наблюдений на группы

    7.4 Разделение наблюдений на группы


    В SPSS можно выполнять анализ данных раздельно по группам. Группой в этом контексте называется определенное количество наблюдений с одинаковыми значениями признаков. Чтобы можно было производить обработку по группам, файл должен быть отсортирован по группирующим переменным. Такой переменной может быть, например, переменная sex. В этом случае все переменные со значением признака 1 (женский) образуют одну группу, а все переменные со значением признака 2 (мужской) — другую группу. С каждой группой можно проводить определенные операции, например, выполнять частотный анализ. При этом частотный анализ проводится раздельно для признаков мужской и женский. В SPSS такое разделение на группы можно выполнять автоматически. Рассмотрим следующий пример, основанный на опросе студентов об их психическом состоянии и социальном положении:


    Проведем частотный анализ переменной psyche (психическое состояние) раздельно для всех изучаемых специальностей. В соответствии со значениями переменной fach (специальность) у нас образуются 9 групп (1 = Юриспруденция, 2 = Экономика, 3 = Гуманитарные науки, 4 = Психология и т.д.). В этом случае файл данных studium.sav должен быть сначала отсортирован по переменной fach. Поступите следующим образом:

    •  Загрузите файл studium.sav в редактор данных.

    •  Выберите в меню команды Data (Данные) Split File... (Разделить файл) Откроется диалоговое окно Split File.


    Рис. 7.7: Диалоговое окно Split File


    По умолчанию разделение на группы не предполагается. Если выбрать пункт Organize output by groups (Разделить вывод на группы), мы получим вывод результатов по каждой группе отдельно. Эти группы должны быть определены в поле Groups based on (Группы, созданные на основе) на базе соответствующих переменных.


    Еще одну возможность предоставляет опция Compare Groups (Сравнить группы). Она организует вывод таким образом, что можно визуально сравнить разные группы друг с другом. Но сначала мы рассмотрим раздельный вывод.

    •  Выберите опцию Organize output by groups. Для раздельного выполнения операций по группам необходимо, чтобы файл данных был предварительно отсортирован по этим группирующим переменным. По этой причине опция Sort the file by grouping variables (Сортировать файл по группирующим переменным) выбрана по умолчанию.

    •  Перенесите переменную fach в поле Groups based on. Если выбирается несколько группирующих переменных, то последовательность, в которой они стоят в списке, определяет порядок или приоритет сортировки.

    •  Щелкните на кнопке ОК. Файл studium.sav будет отсортирован по переменной fach, то есть разбит на группы в соответствии с ее значениями. Сообщение File split on (Разделение файла включено) в строке состояния внизу окна SPSS информирует об активации режиме разделения.

    •  Выполните частотный анализ переменной psyche.

    Вы получите следующий результат (ниже для экономии места показаны частотные таблицы только для специальностей Юриспруденция и Естественные науки).


    Специальность = Юриспруденция


    Статистика(а)


    Психическое состояние


    N Valid


     Missing


    22


    0


    а. Специальность = Юриспруденция


    Психическое состояние(а)


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Крайне неустойчивое


    2


    9,1


    9,1


    9,1


    Неустойчивое


    5


    22,7


    22,7


    31,8


    Устойчивое


    12


    54,5


    54,5


    86,4


    Очень устойчивое


    3


    13,6


    13,6


    100,0

    Total  22 100,0 100,0

    Спциальность = юриспруденция


    Специальность = Естественные науки


    Статистика(а)


    N Valid 


    Missing


    18


    1


    а. Специальность = Естественные науки


    Психическое состояние(а)


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Крайне неустойчивое


    1


    5,3


    5,6


    5,6


    Неустойчивое


    4


    21,1


    22,2


    27,8


    Устойчивое


    11


    57,9


    61,1


    88.9


    Очень устойчивое


    2


    10,5


    11,1


    100,0


    Всего


    18


    94,7


    100,0


    Missing


    нет данных


    1


    5,3


    Всего


    19


    100,0


    а. Специальность = Естественные науки


    Как видно, результаты частотного анализа переменной psyche выводятся раздельно по специальностям студентов.

    •  Теперь выберите другой пункт — Compare groups (Сравнить группы).

    •  Снова выполните частотный анализ переменной psyche. Вы получите следующую результирующую таблицу:

    Психическое состояние


    Специальность




    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Юриспру- денция


    Valid


    Крайне неустойчивое


    2


    9,1


    9,1


    9,1



    Неустойчивое


    5


    22,7


    22,7


    31,8



    Устойчивое


    12


    54,5


    54,5


    86,4



    Очень устойчивое


    3


    13,6


    13,6


    100,0



    Всего


    22


    100,0


    100,0



    Экономика


    Valid


    Крайне неустойчивое


    1


    5,3


    5,6


    5,6



    Неустойчивое


    4


    21,1


    22,2


    27,8



    Устойчивое


    11


    57,9


    61,1


    88,9



    Очень устойчивое


    2


    10,5


    11,1


    100,0



    Всего


    18


    94,7


    100,0



    Missing


    нет данных


    1


    5,3




    Total


    19


    100,0





    Гуманитар- ные науки


    Valid


    Крайне неустойчивое


    10


    40,0


    40,0


    40,0



    Неустойчивое


    14


    56,0


    56,0


    96,0



    Устойчивое


    1


    4,0


    4,0


    100,0



    Всего


    25


    100,0


    100,0



    Психология


    Valid


    Крайне неустойчивое


    3


    27,3


    27,3


    27,3



    Неустойчивое


    6


    54,5


    54,5


    81,8



    Устойчивое


    2


    18,2


    18,2


    100,0



    Всего


    11


    100,0


    100,0



    Теология


    Valid


    Крайне неустойчивое


    2


    22,2


    22,2


    22,2



    Неустойчивое


    5


    55,6


    55,6


    77,8



    Устойчивое


    2


    22,2


    22,2


    100,0



    Всего


    9


    100,0


    100,0



    Медицина


    Valid


    Крайне неустойчивое


    1


    10,0


    10,0


    10,0



    Неустойчивое


    3


    30,0


    30,0


    40,0



    Устойчивое


    5


    50,0


    50,0


    90,0



    Очень устойчивое


    1


    10,0


    10,0


    100,0



    Всего


    10


    100,0


    100,0



    Естествен- ные науки


    Valid


    Неустойчивое


    3


    33,3


    33,3


    33,3



    Устойчивое


    6


    66,7


    66,7


    100,0



    Всего


    9


    100,0


    100,0



    Техника


    Valid


    Крайне неустойчивое


    1


    50,0


    50,0


    50,0



    Устойчивое


    1


    50,0


    50,0


    100,0



    Всего


    2


    100,0


    100,0



    Прочие


    Valid


    Устойчивое


    1


    100,0


    100,0


    100,0


    Учтите, что файл данных останется разделенным на подгруппы, пока вы не деактивируете соответствующие опции. Для этого поступите следующим образом: 

    •  Выберите в меню команды Data (Данные) Split File... (Разделить файл)

    •  В диалоговом окне Split File выберите опцию Analyze all cases, do not create groups (Анализировать все наблюдения, не создавать группы). Теперь разделение файла убрано.

    •  Если требуется дополнительно убрать сортировку по специальностям, выберите в меню следующие команды Data (Данные) Sort Cases... (Сортировать наблюдения)

    •  Перенесите переменную fragebnr (код анкеты) в список переменных сортировки и подтвердите операцию кнопкой ОК. Данные будут отсортированы в исходном порядке — по номерам анкет.

    На этом мы заканчиваем обзор возможностей отбора данных в SPSS и переходим к изучению средств модификации данных.

    7.gif

    Изображение: 

    Глава 8. Модификация данных

    Глава 8. Модификация данных

    1. Модификация данных

    Модификация данных


    Для проведения анализа часто бывает необходимо выполнить преобразование данных. На основе первоначально собранных данных можно создать новые переменные и изменить кодирование. Подобные преобразования называются модификацией данных.


    В SPSS существует много возможностей для модификации данных. К важнейшим из них относятся:

    •  Вычисление новых переменных путем использования различных арифметических выражений (математических формул)

    •  Подсчет частоты появлений определенных значений

    •  Перекодирование значений

    •  Вычисление новых переменных при выполнении определенного условия

    •  Агрегирование данных

    •  Ранговые преобразования

    •  Вычисление весов наблюдений

    Разделы этой главы посвящены всем перечисленным возможностям модификации данных.

    8.1 Вычисление новых переменных

    8.1 Вычисление новых переменных


    Путем вычислений в SPSS можно образовать новые переменные и добавить их в файл данных. Так, например, в медицинском исследовании (см. главу 9, файл hyper.sav) в два момента времени (до и после приема лекарства) проводились измерения систолического кровяного давления, которые фиксировались в переменных rrs0 и rrsl.


    Если нас интересует изменение давления между двумя этими моментами, было бы глупо каждый раз вычислять разницу двух значений и вручную вводить ее в новую переменную. Эту работу можно переложить на компьютер, который сделает ее быстро и, главное, без ошибок. Для этого поступите следующим образом:

    •  Загрузите файл hyper.sav в редактор данных.

    •  Выберите в меню команды Transform (Преобразовать) Compute... (Вычислить) Откроется диалоговое окно Compute Variable (Вычислить переменную).


    Рис. 8.1: Диалоговое окно Compute Variable


    В поле Target Variable (Выходная переменная) указывается имя переменной, которой присваивается вычисленное значение. В качестве выходной переменной может служить уже существующая или новая переменная. В поле Numeric Expression (Численное выражение) вводится выражение, применяемое для определения значения выходной переменной. 3 этом выражении могут использоваться имена существующих переменных, константы, арифметические операторы и функции.

    •  Введите в поле Target Variable имя rrsdiff, а в поле Numeric Expression формулу rrs0— rrsl. Зту формулу можно ввести либо вручную, либо используя список переменных и клавиатуру диалогового окна. Кнопка с треугольником позволяет копировать в поле формулы имена переменных, а кнопки клавиатуры — вставлять цифры и знаки.

    •  Щелкните на кнопке Type&Label... (Тип и метка).

    Откроется диалоговое окно Compute Variable: Type and Label (Вычислить переменную: Тип и метка).


    Здесь можно задать метку для новой переменной rrsdiff. В поле Label введите текст Изменение сист. кровяного давления и щелкните на кнопке Continue.

    •  В диалоговом окне Compute Variable щелкните на кнопке ОК.


    Рис. 8.2: Диалоговое окно Compute Variable: Type and Label


    Примечание: Выбранные опции соответствуют следующему командному синтаксису:

     COMPOTE rrsdiff = rrs0 - rrsl. 
     VARIABLE LABELS rrsdiff = "Изменение сист. кровяного давления". 
     EXECUTE. 

    Общий формат команды COMPUTE имеет следующий вид:


     COMPUTE целевая_переменная = арифметическое_выражение.


    Команда EXECUTE считывает данные и выполняет предшествующие команды преобразования. В файл данных добавляется новая переменная rrsdiff. Теперь ее, как и прочие переменные, можно применять для вычислений. Для SPSS нет разницы, введены ли значения переменных через редактор данных или вычислены по формуле.


    Вместо слова формула мы будем использовать в дальнейшем понятие численное выражение. При формулировке таких численных выражений нужно соблюдать определенные правила, которые представлены в следующем разделе.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    8.1.1 Формулировка численных выражений

    8.1.1 Формулировка численных выражений


    Для построения численных выражений можно применять следующие арифметические операторы:


    Арифметические операторы


    +


    Сложение


    -


    Вычитание


    *


    Умножение


    /


    Деление


    **


    Возведение в степень


    С помощью арифметических операторов в численных (арифметических) выражениях можно задавать такие основные действия, как сложение и вычитание.


    Так как структура выражений может быть сложной, следует учитывать следующие приоритеты арифметических операторов:


    Приоритет


    Оператор


    Значение


    1


    ()


    Оператор скобок


    2


    **


    Возведение в степень


    3


    *


    Умножение


    /


    Деление


    4


    +


    Сложение



    Вычитание


    Операции более высокого приоритета выполняются раньше операций с более низким приоритетом; приоритет 1 наивысший, а 4 — самый низкий. Далее на нескольких типичных примерах показано, на что следует обращать внимание при записи численных выражений. Если вы хотите выразить только что вычисленное изменение кровяного давления в процентах от исходного значения, надо составить следующую команду:


    COMPUTE rrsdiff = (rrsl - rrsO) / rrs0 * 100 .


    В этой формуле выполняются операции трех разных видов, имеющие разные приоритеты. Так, умножение и деление выполняются всегда перед сложением и вычитанием, если только, как в данном примере, скобки не определяют другую последовательность выполнения.


    Если рост (в см) записан в переменной gr, и вы хотите определить на его основе нормальный вес, который обычно равен росту в см минус 100, команда, которая создает для этой величины новую переменную, будет следующей:


    COMPUTE ng = gг - 100 .


    Если же требуется вычислить избыточный вес как разницу фактического веса, который хранится в переменной gew, и этой новой величины, для этого служит команда


    COMPUTE uegew = gew — ng .


    Отрицательное значение uegew указывает на недостаточный вес. Оба выражения можно объединить:


    COMPUTE uegew = gew — (gr — 100) .


    Это можно также записать в виде


    COMPUTE uegew = gew — gr + 100 .


    Формула для определения избыточного веса в процентах к нормальному:


    COMPUTE puegew = (gew — ng) / ng * 100 .


    Без использования вспомогательной переменной ng эта формула имеет вид


    COMPUTE puegew = (gew - (gr - 100)) / (gr - 100) * 100 .


    Эта запись выглядит уже довольно сложной и имеет тот недостаток, что выражение gr — 100 должно быть вычислено дважды. Разумеется, при высокой производительности компьютера это не так важно.


    Мы уже видели, что в арифметических выражениях могут участвовать переменные и константы. Сейчас мы рассмотрим применение и них функций, которые встроены в SPSS. Если нас интересует не само изменение кровяного давления, а только его абсолютная ветчина, в этом случае можно применить функцию ABS:


    COMPUTE rrsd = ABS(rrsl - rrs0)


    Чтобы вычислить десятичный логарифм переменной х, применяется функция LG10:


    COMPUTE у = LG10(x)


    Мы также можем вычислить гипотенузу по теореме Пифагора, использовав функцию SQRT для извлечения квадратного корня и оператор возведения в степень:


    COMPUTE с = SQRTfa ** 2 + b ** 2) .


    Аргументы функций сами могут быть арифметическими выражениями: Если вы не хо-:ите работать с командами синтаксиса SPSS, можно, как показано в начале главы, применить диалоговое окно Compute Variable. В этом случае в редакторе условий достаточно вместо


    COMPUTE rrsd = rrs1 - rrs0 .


    ввести просто


    rrsd = rrsl - rrs0 для достижения той же цели — вычисления изменения кровяного давления rrsd.

    8.1.2 Функции

    8.1.2 Функции


    Из числа функций, которые отображаются в диалоговом окне Select Cases: If, мы рассмотрели только логические и строковые функции. Остальные функции можно разделить на следующие классы:

    •  арифметические функции

    •  статистические функции

    •  функции даты и времени

    •  функции обработки отсутствующих значений

    •  функции извлечения значений наблюдений

    •  статистические функции распределения

    •  функции генерации случайных чисел.

    Параметрами функций могут быть переменные, константы или выражения. Параметры заключаются в круглые скобки; несколько параметров отделяются друг от друга запятыми, например, SUM (5, 8, 10). Функция SUM вычисляет сумму трех параметров. SUM (5, 8, 10) возвращает значение 23.


    Арифметические функции

    •  ABS (numexpr): Функция ABS возвращает абсолютное значение. Если переменная celsius имеет значение -6,5, ABS (celsius) возвращает 6,5, a ABS (celsius + 3) — значение 3,5.

    •  RND (numexpr): Функция RND округляет до ближайшего целого числа. Если переменная celsius имеет значение 3,6, RND (celsius) возвращает 4, a RND (celsius + 6) — значение 10.

    •  TRUNC (numexpr): Функция отбрасывает дробную часть значения; округления не происходит. Если переменная celsius имеет значение 3,9, TRUNC (celsius) возвращает 3, a TRUNC (celsius + 4) — значение 7.

    •  MOD (numexpr, modulus): Функция MOD возвращает остаток от деления первого аргумента (numexpr) на второй (modulus). Если переменная jaehr имеет значение 1994, MOD (jaehr, 100) возвращает 94.

    •  SQRT (numexpr): Функция SQRT возвращает квадратный корень. Если переменная zahll имеет значение 9, SQRT (zahll) возвращает значение 3.

    •  ЕХР (numexpr): Показательная функция.

    •  LG10 (numexpr): Десятичный логарифм.

    •  LN (numexpr): Натуральный логарифм.

    •  ARSIN (numexpr): Арксинус.

    •  ARTAN (numexpr): Арктангенс.

    •  SIN (numexpr): Синус.

    •  COS (numexpr): Косинус.

    В тригонометрических функциях аргументы задаются в радианах.


    Статистические функции


    Статистические функции могут иметь любое количество параметров.

    •  SUM (numexpr, numexpr,...): Функция SUM возвращает сумму значений допустимых аргументов. SUM (zahll, zahll, zah!3) возвращает сумму значений трех переменных.

    •  MEAN (numexpr, numexpr,...): Функция MEAN возвращает среднее арифметическое допустимых аргументов. MEAN (42, 19, 29) возвращает значение 30.

    •  SD (numexpr, numexpr,...): Функция SD возвращает стандартное отклонение значений допустимых аргументов.

    •  VARIANCE (numexpr, numexpr,...): Функция VARIANCE возвращает дисперсию значений допустимых аргументов.

    •  CFVAR (numexpr, numexpr,...): Функция CFVAR возвращает коэффициент вариации значений допустимых аргументов.

    •  MIN (numexpr, numexpr,...): Функция MIN возвращает наименьшее из значений допустимых аргументов.

    •  MAX (numexpr, numexpr,...): Функция МАХ возвращает набольшее из значений допустимых аргументов.

    Функциям SUM, MEAN, MIN и МАХ требуется хотя бы один допустимый аргумент, функциям SD, VARIANCE и CFVAR — два. Остальные аргументы могут содержать отсуттвуюшие значения. Если это свойство, принятое по умолчанию, требуется деактивировать, то к имени функции через точку прибавляют количество необходимых аргументов, например, MEAN. 10. В этом случае значение функции вычисляется только тогда, когда существует хотя бы указанное количество аргументов (в данном примере 10).


    Функции даты и времени


    В SPSS очень часто в различных целях используются дата и время. Для ввода данных гтого типа в редакторе данных SPSS предоставляет ряд различных форматов, описанных в разделе 3.4.1. Существующие форматы можно просмотреть в диалоговом окне Variable Tуре (Тип переменной).


    Мы рекомендует использовать общепринятый формат даты: указание числа месяца двумя цифрами, месяца — также двумя цифрами и года — четырьмя цифрами через течку: dd.mm.yyyy.


    Экономии места за счет отбрасывания двух первых цифр года в последнее время, как известно, уделяется много внимания. При указании года двумя цифрами в качестве столетнего диапазона в SPSS принят срок с 1931 по 2030 г., следовательно, год 28 интерпретируется как 2028, а 32 — как 1932. В меню Edit (Правка) Options... (Параметры...) на вкладке Data (Данные) пользователь может самостоятельно задать столетний диапазон..


    Если число или месяц можно записать одной цифрой, их не нужно дополнять спереди нулями. Таким образом, указание даты в следующих форматах будет допустимым:


    20.6.1998


    13.12.1887


    1.10.2003


    5.2.1997


    Компьютер замечает противоречивое указание даты при вводе. Например, если попытаться ввести дату 29.2.1997, это значение не записано принято в ячейку.


    Для времени мы рекомендуем формат hh:mm:ss, т.е. одна или две цифры для часов, минут и секунд через двоеточие. При отсутствии секунд можно также применять формат hh:mm. Примеры:


    23:34:55


    8:5:12


    12:17:5


    12:47 8:12


    Дату и время, введенные в любом виде, SPSS преобразует во внутренний формат. Для даты это количество секунд, прошедших с 0 часов 15.10.1582 г. (момента введения григорианского календаря) до 0 часов заданного дня; для времени — количество секунд с 0 часов до заданного момента времени.


    В принципе можно также хранить число, месяц, год, часы, минуты и секунды в отдельных переменных и определять дату или время во внутреннем формате при помощи соответствующих функций.


    Всего в SPSS имеется 25 различных функций для работы с датой и временем. Важнейшие из них представлены ниже.


    XDATE.MDAY(arg)


    Выделяет из даты число


    XDATE.MONTH(arg)


    Выделяет из даты месяц


    XDATE.YEAR(arg)


    Выделяет из даты год


    XDATE.WKDAY(arg)


    Номер дня недели (1 =' воскресенье, ,..., 7 = суббота)


    XDATE.JDAY(arg)


    Номер дня в году


    XDATE.QUARTER(arg)


    Номер квартала в году


    XDATE.WEEK(arg)


    Номер недели в году


    XDATE.TDAY(arg)


    Количество дней начиная с 15.10.1582


    XDATE.DATE(arg)


    Количество секунд начиная с 15.10.1582


    DATE.DMY(d,m,y)


    Преобразует данные числа месяца, месяца и года во внутреннюю дату


    DATE.MOYR(m.y)


    Преобразует данные месяца и года во внутреннюю дату


    YRMODA(y,m,d)


    Преобразует данные года, месяца и числа месяца (строго в приведенной последовательности) в количество дней начиная с 15.10.1582


    XDATE.TIME(arg)


    Количество секунд начиная с 0 часов


    TIME.HMS(h,m,s)


    Преобразует данные часов, минут и секунд в секунды


    Функции даты и времени применяются чаще всего в ситуациях, когда требуется вычислить промежуток между двумя датами или моментами времени. Например, если имеется две даты, записанные в переменных datum 1 и datum2, длительность промежутка между ними в днях можно рассчитать по следующей формуле:


    COMPUTE tage=XDATE.TDAY(datum2) - XDATE.TDAY(datural). EXECUTE.


    Пример использования функции YRMODA приводится в разделе 8.8. Функции обработки пропущенных значений

    •  VALUE (variable): Функция VALUE объявляет недействительным пользовательское пропущенное значение.

    •  MISSING (variable): Функция MISSING возвращает значение 1 (или true), если переменная содержит пользовательское или системное пропущенное значение.

    •  SYSMIS (variable): Функция SYSMIS возвращает значение 1 (или true), если переменная содержит системное пропущенное значение.

    •  NMISS (variable,variable,...): Функция NMISS возвращает количество пропушен-нных значений в списке переменных.

    •  NVALID (variable,variable,...): Функция NMISS возвращает количество допустимых значений в списке переменных.

    Функции извлечения значений наблюдений

    •  LAG (variable,n): Функция LAG возвращает значение соответствующей переменной за я наблюдений до текущего. Так, например, LAG( variable, I) позволяет получить значение переменной в предыдущем случае (см. первый пример в разделе 8.8).

    Статистические функции распределения


    В SPSS реализовано в совокупности 20 статистических функций распределения. Эти функций вычисляют значение вероятности для следующих распределений: ß-распределения, распределения Коши, хи-квадрат, экспоненциального распределения, Г-распределения, F-распределения, распределения Лапласа, логистического, логарифмически нормального. нормального распределений, распределения Парето, распределения Стьюдента, равномерного распределения, распределения Вейбулла (непрерывные функции), а также распределения Бернулли, биномиального, геометрического, гипергеометрического, негативно-биномиального распределений и распределения Пуассона (дискретные функции). Для 14 непрерывных функций распределения существуют соответствующие обратные функции.


    Так, например, функция CDF.T(t,df) возвращает вероятность ошибки р для заданного значения функции распределения Стьюдента, t и числа степеней свободы df, функция IDF. T(p,df) возвращает значение t для заданных вероятности ошибки р и числа степеней свободы df.


    Функции генерации случайных чисел


    В SPSS реализовано в совокупности 24 функции генерации случайных чисел, в том теле для 20 встроенных статистических функций распределения; например функция RV.T(df) возвращает случайные числа, подчиняющиеся распределению Стьюдента при df степенях свободы. Функция UNIFORM (numexpr) генерирует равномерно распределенные случайные величины, находящиеся в интервале от 0 до 1, а ее аргумент задает начальное значение для генератора случайных чисел.

    8.2 Подсчет частоты появлений определенных значений

    8.2 Подсчет частоты появлений определенных значений


    В SPSS есть возможность подсчитать количество появления одного и того же значения или значений для определенной переменной. Например, членам Дортмундского спортивного клуба задавались следующие вопросы:


    Вопрос1:


    Вопрос 2:


    Вопрос3:


    Укажите Ваш пол ...


    Укажите Ваш возраст ...


    Какими из следующих видов спорта Вы активно занимаетесь:


     3_1 : Плаванием: да/нет? 


    3_2: Гимнастикой: да/нет? 


    3_3: Легкой атлетикой: да/нет? 


    3_4: Волейболом: да/нет?


     3_5: Теннисом: да/нет?


    3 6: Велосипедным спортом: да/нет? 


    3_7: Футболом: да/нет? 


    3_8: Гандболом: да/нет? 


    3_9: Баскетболом: да/нет?


    Если во всех наблюдениях этого примера подсчитать число появлений значения 1 (= да) для переменных 3_1—3_9, то для каждого респондента мы получим количество видов спорта, которыми он активно занимается.


    Для этого поступите следующим образом:

    •  Загрузите файл sport.sav в редактор данных.

    •  Выберите в меню команды Transform (Преобразовать) Count... (Подсчитать)

    Откроется диалоговое окно Count Occurences of Values within Cases (Подсчитать количество значений в наблюдениях).



    Рис. 8.3: Диалоговое окно Count Occurences of Values wirhin Cases


    Это диалоговое окно разделено на следующие части:

    •  Target variable (Выходная переменная): В поле Target variable указывается имя переменной, в которой будут содержаться подсчитанные значения.

    •  Target Label (Метка): В поле Target Label указывается метка для выходной переменной.

    •  Variables (Переменные): Этот список содержит переменные, выбранные из списка исходных переменных, хранящихся в файле данных, для которых нужно подсчитать определенные значения. Список не может одновременно содержать численные и строковые переменные.

    •  Выделите в списке исходных переменных переменные v3_l—v3_9. Перенесите их в список переменных.

    •  Присвойте выходной переменной имя sports и метку: «Количество разных видов спорта».

    • Щелкните на кнопке Define values... (Определить значения). Откроется диалоговое окно Count Values within Cases: Values to Count (Подсчитать значения в наблюдениях: какие значения?). (См. рис. 8.4.)


    Рис. 8.4: Диалоговое окно Count Values within Cases:values to Count


    Это диалоговое окно служит для определения подсчитываемых значений. Можно задать отдельное значение, диапазон или сочетание того и другого. В группе Value (Значение) можно выбрать один из следующих вариантов:

    •  Value: Вводится отдельное значение, частоту которого необходимо подсчитать.

    •  System missing (Системное пропущенное): Подсчитывается количество появлений системного пропущенного значения. В списке Values to count (Подсчитываемые значения) оно отображается как SYSMIS. Для строковых переменных этот вариант неприменим.

    •  System- or user-missing (Пользовательские или системные пропущенные): Если выбрать этот вариант, будет подсчитано количество появлений всех пропущенных значений, как системных, так и пользовательских. В списке Values to count эти значения отображаются как MISSING.

    •  Range through (Дипазон): Подсчитывается количество значений, находящихся в определенном диапазоне. Этот вариант также неприменим для строковых переменных.

    •  Range: Lowest through (Диапазон: от наименьшего до): Подсчитывается количество значений, находящихся в диапазоне от наименьшего наблюдаемого до указанного. Этот вариант неприменим для строковых переменных.

    •  Range: through highest (Диапазон: до наибольшего): Подсчитывается количество значений, находящихся в диапазоне от указанного до наибольшего наблюдаемого. Этот вариант неприменим для строковых переменных.

    Если требуется подсчитать повторяемость нескольких значений, щелкните после выбора опции на кнопке Add (Добавить). В этом случае будет подсчитана частота повторений каждого значения, присутствующего в списке Values to count.

    •  Задайте отдельное значение 1 и щелкните на кнопке Add.

    •  Подтвердите ввод кнопкой Continue, а затем — ОК. В файл данных будет добавлена переменная sports, содержащая количество видов спорта, которыми занимается респондент.

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    8.3 Перекодирование значений

    8.3 Перекодирование значений


    Первоначально собранные данные можно перекодировать с помощью средств SPSS. Перекодирование численных данных необходимо, например, тогда, когда первоначальное разнообразие исходных данных не нужно для последующего анализа. В этом случае перекодирование означает уменьшение объема обрабатываемой информации. Перекодирование данных можно выполнить вручную или автоматически. Мы рассмотрим оба этих метода.

    8.3.1 Ручное перекодирование

    8.3.1 Ручное перекодирование


    Для примера мы проанализируем результаты воскресного опроса (файл wahl.sav). Нас интересует процентное распределение опрашиваемых в классическом политическом спектре правые-левые. В этом случае переменную partei следует перекодировать и создать новую переменную lire (левые-правые). Новые значения будут определены следующим образом:


    Левые:


    СПДГ


    Зеленые/Союз 90


    ПДС


    Правые:


    ХДС/ХСС


    СДП


    Республиканцы


    не определено:


    нет данных


    Прочие


    Сравним значения переменной partei со значениями переменной lire:


    Переменная partei Значения


    Метки значений


    Переменная lire Значения


    Метки значений


    0


    нет данных


    0


    не определено


    1


    ХДС/ХСС


    2


    правые


    2


    СДП


    2


    правые


    3


    СДПГ


    1


    левые


    4


    Зеленые/Союз 90


    1


    левые


    5


    ПДС


    1


    левые


    6


    Республиканцы


    2


    правые


    7


    Прочие


    0


    не определено


    Значение 1 (ХДС/ХСС) переменной partei соответствует значению 2 (правые) переменной lire, значение 2 (СДП) — значению 2 (правые), значение 3 (СДПГ) — значению 1 (левые) и т.д. Значение 0 переменной lire объявляется как отсутствующее.


    Перекодирование производится следующим образом:

    •  Загрузите файл wahl.sav в редактор данных.

    •  Выберите в меню команды Transform (Преобразовать) Recede (Перекодировать)

    Можно хранить перекодированные значения в той же переменной или перенести их в другую переменную. Если мы проведем перекодировку в прежней переменной, все ее старые значения будут стерты.

    •  Выберите в подменю пункт Into Different Variables... (В другие переменные). Откроется диалоговое окно Recede into Different Variables (Перекодировать в другие переменные).


    Рис. 8.5: Диалоговое окно Recede into Different Variables


    Список исходных переменных содержит переменные файла данных. Здесь можно выбрать одну или несколько переменных для перекодирования. Если выбираются несколько переменных, все они должны быть одного типа.

    •  Перенесите переменную partei (партия) в поле Input Variable -> Output Variable (Входная переменная > Выходная переменная). Вопросительный знак, добавленный в поле, говорит о том, что надо задать имя выходной переменной.

    •  Введите в поле Name (Имя) текст lire. Щелкните на кнопке Change (Изменить). Вопросительный знак в поле Input Variable -> Output Variable будет заменен на lire.

    •  Введите в поле Label обозначение: «Политический спектр». Подтвердите ввод, щелкнув на Change.

    •  Чтобы установить значения, которые следует перекодировать, щелкните на кнопке Old and New Values... (Старые и новые значения). Откроется диалоговое окно Recede into Different Variables: Old and New Values.

    Для осуществления каждого перекодирования надо указать значение или диапазон входной переменной и соответствующее значение выходной переменной. Перекодирование завершается щелчком на кнопке Add.


    Это диалоговое окно разделено на следующие части. В группе Old Value (Старое значение) можно выбрать один из следующих вариантов:



    Рис. 8.6: Диалоговое окно Recede into Different Variables: Old and New Values

    •  Value: Вводится отдельное значение.

    •  System missing (Системное пропущенное): С помощью этой опции значение входной переменной обозначается, как системное пропущенное. Это значение обозначается в списке значений переменных как SYSMIS. Такой вариант неприменим для строковых переменных.

    •  System- or user-missing (Пользовательские или системные пропущенные): Эта опция служит для обозначения всех пользовательских или системных пропущенных значений. В списке значений переменных пользовательские пропущенные значения отображаются как MISSING.

    •  Range through (Дипазон): Здесь можно задать замкнутый интервал значений. Этот вариант неприменим для строковых переменных.

    •  Range: Lowest through (Диапазон: от наименьшего до): В этом случае будут перекодированы все значения от наименьшего наблюдаемого до указанного. Этот вариант неприменим для строковых переменных.

    •  Range: through highest (Диапазон: до наибольшего): В этом случае будут перекодированы все значения от указанного до наибольшего наблюдаемого. Этот вариант неприменим для строковых переменных.

    •  All other values (Все остальные значения): Эта опция касается всех еще не указанных значений. В списке значений переменных они отображаются как ELSE.

    В группе New Value (Новое значение) можно выбрать один из следующих вариантов:

    •  Value: Здесь вводится новое значение.

    •  System missing (Системное отсутствующее): Эта опция служит для обозначения значения выходной переменной как системного отсутствующего значения. Значение появляется в списке значений переменных в виде SYSM1S. Этот вариант неприменим для строковых переменных.

    •  Copy old value(s) (Копировать старые значения): Значения входной переменной сохранятся без изменений.

    Если новые выходные переменные являются строковыми, следует установить флажок Output variables are strings (Выходные переменные являются строками). Теперь выполните следующие действия:

    •  Введите старые и новые значения согласно следующей таблице:

    1->2 
     2->2 
     3->1 
     4->1 
     5->1 
     6->2 
     ELSE -> 0.
    •  При этом старое значение вводите в поле Value в группе Old Value, новое значение — в поле Value в группе New Value и щелкайте на кнопке Add.

    •  Чтобы перекодировать старые значения 0 и 7, выберите опцию All other values. Введите 0 в поле Value в группе New Value и щелкните на кнопке Add.

    •  Щелкните на кнопке Continue, а затем на ОК. Новая переменная lire будет добавлена в файл wahl.sav. 

    Примечание: Выбранные опции соответствуют следующему командному синтаксису:

     RECODE partei 
     (1=2) (2=2) (3=1) (4=1) (5=1) (6=2) (ELSE=0)  
     INTO lire . VARIABLE LABELS 
     lire "Политический спектр" EXECUTE .
    •  В редакторе данных дважды щелкните на lire, чтобы перейти в редактор вида переменных.

    •  Установите следующие параметры: тип переменной — численный, ширина — 1, десятичные разряды — 0. Укажите следующие метки значений:

    0 = не определено


    1 = левые


    2 = правые.

    •  Объявите нуль как пропущенное значение.

    •  В заключение выполните частотный анализ переменной lire. Вы получите следующий результат:

    Политический спектр


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    левые


    13


    43,3


    48,1


    48,1


    правые


    14


    46,7


    51,9


    100,0


    Total


    27


    90,0


    100,0


    Missing


    не определено


    3


    10,0


    Total


    30


    100,0


    Из 30 респондентов 46,7% выбрали партии правого направления, а 43,3% — партии левого направления. Трое опрашиваемых (10%) не дали никакого ответа на вопрос: «За кого бы вы голосовали, если бы в воскресенье были выборы в бундестаг?».

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    8.3.2 Автоматическое перекодирование

    8.3.2 Автоматическое перекодирование


    Если категории не были закодированы непрерывно начиная с 1, то это может приводить к негативным последствиям при решении многих задач в SPSS. Поэтому для преобразования значений численных или строковых переменных в непрерывную последовательность целых чисел в SPSS реализована возможность автоматического перекодирования. В качестве примера рассмотрим автоматическое перекодирование строковой переменной в численную.

    •  Загрузите файл string.sav.

    В редакторе данных отобразятся значения строковой переменной beschw (недуги), соответствующие характеру жалоб пациентов. Они состоят не более чем из двадцати символов.

    •  Выберите в меню команды Transform (Преобразовать) Automatic Recode... (Автоматическое перекодирование)

    Откроется диалоговое окно Automatic Recede (см. рис. 8.7).



    Рис. 8.7: Диалоговое окно Automatic Recede

    •  Перенесите строковую переменную в поле Variable -> New Name (Переменная > Новое имя). В текстовое поле под ним введите новое имя, например, beschwn, и щелкните на кнопке New Name (Новое имя).

    •  Щелкните на кнопке ОК.

    В окне просмотра будет отображена таблица соответствия, отрывок из которой приводится ниже:


    BESCHW Old Value


    BESCHWN New Value


    Жалобы Value Label


    Абсцесс


    1


     Абсцесс


    Аллергия



    Аллергия


    Стенокардия



    Стенокардия


    Одышка



    Одышка


    Бактерии в моче



    Бактерии в моче


    Боли в позвоночнике



    Боли в позвоночнике


    Боли в животе



    Боли в животе


    Затруднения



    Затруднения


    Метеоризм



    Метеоризм


    Гипертония


    10 


    Гипертония


    Жжение


    11 


    Жжение


    Бронхит


    12 


    Бронхит


    Воспаление кишечника


    13 


    Bocпаление кишечника


    Диабет


    14 


    Диабет


    Диализ


    15 


    Диализ


    Нарушения кровообр .


    1б 


    Нарушения кровообращения


    Понос


    17 


    Понос


    Воспаления


    18 


    Воспаления


    Лихорадка


    19 


    Лихорадка


    Различным значениям строковой переменной beschw, выстроенным в алфавитном порядке, поставлена в соответствие непрерывная последовательность натуральных чисел от 1 до 58; эти численные значения сохраняются в переменной beschwn. Прежние строковые значения стали метками значений этой переменной.

    7.gif

    Изображение: 

    8.4 Вычисление новых переменных в соответствии с определенными условиями

    8.4 Вычисление новых переменных в соответствии с определенными условиями


    Вычисление новых переменных может быть поставлено в зависимость от определенных условий, как показано в разделе 8.4.1. Во втором разделе этого параграфа приводится практический пример использования условного вычисления — создание индекса.

    8.4.1 Формулировка условий

    8.4.1 Формулировка условий


    В файле studium.sav (психологическое состояние и социальное положение студентов), в частности, содержатся переменные alter (возраст), fach (специальность), semester (количество семестров) и sex (пол).


    Допустим, нам требуется образовать из переменных alter и semester новую переменную, которая будет показывать возраст студента в начале обучения. Кроме того, это значение следует вычислять только для старших курсов (semester>6).

    •  Загрузите файл Studium.sav и выберите команды меню Transform (Преобразовать) Compute... (Вычислить)

    •  В открывшемся диалоговом окне в поле выходной переменной (см. раздел 8.1) задайте, например, studbeg, а для численного выражения — alter — semester /2.

    •  Щелкните на кнопке If... (Если). Откроется диалоговое окно Compute Variable: If Cases (Вычислить переменную: Если выполняется условие). Измените начальную настройку Include all cases (Включить все наблюдения) на Include if case satisfies condition (Включить, если для наблюдения выполняется условие). В поле под этой опцией введите условие: semester>6.

    •  Закройте это диалоговое окно, щелкнув на кнопке Continue, и диалог Compute Variable кнопкой ОК.

    Теперь в файле данных появилась переменная studbeg, которая в случаях, когда заданное условие не выполняется, содержит системное отсутствующее значение.


    Примечание: Выбранные опции соответствуют следующему командному синтаксису:

     IF (semester > 6) studbeg = alter - semester /2 . 
      EXECUTE . 

    Ниже приведен другой типичный пример условного вычисления новых переменных.


    Если, к примеру, требуется определить, значительно ли отличаются юристы (fach = 1) от гуманитариев (fach = 3) по количеству семестров, которые прозанимались эти студенты, можно использовать переменную fach как группирующую и сравнить результаты U-теста по Манну и Уитни для переменной semester при значениях fach=l и fach=3 (см. раздел 14.1). Если же требуется сравнить юристов-мужчин с гуманитариями-мужчинами, то оба набора значений надо дополнительно ограничить условием sex = 2 (см. раздел 7. 1).


    Однако, когда надо сравнить, например, юристов-мужчин со студентками-гуманитариями, возникает проблема — в этом случае появляются две группирующих переменных. В подобных ситуациях помогает создание вспомогательной переменной. Этой переменной присваивается значение 1, когда наблюдение соответствует студенту-юристу, и 2 — когда студентке гуманитарной специальности. Затем вспомогательная переменная используется как группирующая при проведении теста по Манну и Уитни.

    •  Чтобы построить такую переменную, выберите в меню команды Transform (Преобразовать) Compute... (Вычислить)

    •  Задайте выходную переменную, например, gruppe, а в поле численного выражения введите значение 1. В диалоговом окне If... укажите условие fach=l and sex=2.

    •  Закройте диалоги кнопками Continue и ОК.

    •  Повторите процесс; снова задайте выходную переменную gruppe, но численное выражение 2. В диалоге If... сформулируйте условие fach=3 and sex=l. На вопрос Change existing variables?, который появляется после закрытия диалогов, ответьте утвердительно (ОК).

    В редакторе данных появится новая переменная gruppe, которая в наблюдениях, соответствующих сформулированным условиям, имеет значения ] или 2, Эту операцию можно выполнить быстрее при помощи командного синтаксиса SPSS.

    •  Для этого командами меню File (Файл) New (Создать) Syntax (Синтаксис) откройте редактор синтаксиса и введите следующие команды:

    IF (fach = 1 and sex = 2) gruppe = 1. 
      IF (fach = 3 and sex = 1) gruppe = 2. EXECUTE. 
    •  После выделения всех строк командами меню Edit (Правка) Select All (Выделить все) и щелчка на значке запуска (Run) в открытый файл данных будет добавлена новая переменная со значениями 1 (мужчины-юристы) и 2 (женщины-гуманитарии), которая может служить группирующей переменной, например, при U-тесте Манна и Уитни.

    8.4.2 Создание индекса

    8.4.2 Создание индекса


    Индексом называют объединение нескольких отдельных вопросов (элементов) в едином показателе, который характеризует сложные, многоплановые состояния — например, показатель уровня жизни или уровня интеллекта. Создание такого индекса мы рассмотрим на примере теоремы об изменении ценностей американского политолога Рональда Инглхарта (Inglehart).


    В своей работе «Культурный сдвиг. Смена ценностей в западном мире» (см. список литературы) Инглхарт выдвинул положение о том, что представления о ценностях в западном обществе претерпели значительное изменение. Ранее на первом месте стояли материальное благополучие и физическая безопасность, тогда как сегодня больше значения придается качеству жизни. Таким образом, ценностные приоритеты сместились от материализма к постматериализму. Это смещение Инглхарт объясняет, в частности, тем, что после второй мировой войны, прежде всего в западноевропейских странах и США, люди ощутили большую экономическую и физическую безопасность чем когда-либо до сих пор. Более молодые поколения, годы формирования которых пришлись на период безопасности и стабильности, будут постепенно отдаляться от традиционных норм и представлений о ценностях, свойственных старшим поколениям. Основываясь на факте достижения высокой экономической безопасности и стабильности, Инглхарт делает вывод о смене ценностей между поколениями, которая влечет за собой значительные социальные последствия.


    Далее мы построим индекс, который будет указывать, придерживается ли респондент  материалистических или же постматериалистических ценностей, согласно Рональду Ингчарту. Этот индекс будет построен на основе опроса ALLBUS, проведенного в 1991 г. В опpoce ALLBUS фигурировало четыре вопроса, касающиеся теоремы Инглхарта об изменении ценностей. В частности, респондента спрашивали, какое значение он придает ценностям «Спокойствие и порядок в стране» (переменная v108), «Увеличение степени частая народа в решениях власти» (переменная v109), «Борьба с ростом цен» (переменная v110) и «Право на свободное выражение мнения» (переменная v111). Респондент, :гавнивая эти четыре ценности между собой, мог указать для каждой из них один из четырех приоритетов: первостепенное значение, второстепенное значение, значение третье степени и значение четвертой степени. Данные находятся в файле ingle.sav.

    •  Загрузите файл ingle.sav.

    •  Чтобы получить первоначальное представление, проведите частотный анализ переменных v108, v109, v110 и v111. В окне просмотра вы увидите следующие результаты:

    ВАЖНОСТЬ СПОКОЙСТВИЯ И ПОРЯДКА


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    первостепенная важность


    1313


    42,9


    42,9


    42,9


    второстепенная


    691


    22,6


    22,6


    65,5


    важность третьей степени


    597


    19,5


    19,5


    85,1


    важность четвертой степени


    395


    12,9


    12,9


    98,0


    не знаю


    30


    1,0


    1,0


    99,0


    нет данных


    32


    1,0


    1,0


    100,0


    total


    3058


    100,0


    100,0


    ВАЖНОСТЬ ВЛИЯНИЯ ГРАЖДАН НА ВЛАСТЬ


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    первостепенная важность


    976


    31,9


    31,9


    31,9


    второстепенная важность


    790


    25,8


    25,8


    57,8


    важность третьей степени


    736


    24,1


    24,1


    81,8


    важность четвертой степени


    477


    15,6


    15,6


    97,4


    не знаю


    44


    1,4


    1.4


    98,9


    нет данных


    35


    1,1


    1,1


    100,0


    total


    3058


    100,0


    100,0


    ВАЖНОСТЬ БОРЬБЫ С ИНФЛЯЦИЕЙ


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    первостепенная важность


    248


    8,1


    8,1


    8,1


    второстепенная важность


    696


    22.8


    22,8


    30,9


    важность третьей степени


    879


    28,7


    28.7


    59,6


    важность четвертой степени


    1142


    37,3


    37,3


    97,0


    не знаю


    48


    1.6


    1.6


    98,5


    нет данных


    45


    1,5


    1,5


    100,0


    total


    3058


    100,0


    100,0


    ВАЖНОСТЬ СВОБОДНОГО ВЫРАЖЕНИЯ МНЕНИЙ


    Частота


    Проценты


    Допустимые


    Накопленные проценты


    Valid


    первосте- пенная важность


    488


    16,0


    16,0


    16,0


    второсте- пенная важность


    839


    27,4


    27,4


    43,4


    важность третьей степени


    762


    24,9


    24,9


    68,3


    важность четвертой степени


    880


    28,8


    28,8


    97,1


    не знаю


    49


    1,6


    1,6


    98,7


    нет данных


    40


    1,3


    1,3


    100,0


    total


    3058


    100,0


    100,0


    Элементы vl08 (Спокойствие и порядок) и v110 (Борьба с ростом цен/инфляцией) соответствуют материалистическим ценностям, а элементы v!09 (Влияние граждан на власть) и vl11 (Свободное выражение мнений) — постматериалистическим. Таким образом, за каждым материалистическим элементом следует постматериалистический элемент. Именно так эти четыре классических элемента были расположены в исследовании Инглхарта Это. В своих многочисленных работах, которые выходили с начала 70-х гг., Рональд Инглхарт объединял эти четыре элемента в шкалу из четырех степеней, или индекс. При этом элементы v!08 (Спокойствие и порядок) и v110 (Борьба с ростом цен/ инфляцией) служили для выделения материалистов, а элементы v!09 (Влияние граждан на власть) и v111 (Свободное выражение мнений) — для выделения постматериалистов. В зависимости от сочетания ответов Инглхарт классифицировал опрашиваемого как

    •  чистого материалиста

    •  чистого постматериалиста

    •  материалистический смешанный тип

    •  постматериалистический смешанный тип.

    Сочетание ответов v108/v110 соответствует чистому материалисту, а сочетание v109/ v111 — чистому постматериалисту. При оставшихся сочетаниях ответов, в зависимости от того, был ли главной целью респондента материалистический или постматериалистический элемент, опрашиваемый классифицируется как материалистический или постматериалистический смешанный тип. Таким образом, мы получаем следующие варианты сочетаний для создаваемого индекса:


    Индекс Инглхарта


    Цель первостепенной важности


    Цель второстепенной важности


    Инлекс Инглхарта


    v108


    v110


    чистый материалист


    v110


    v108


    чистый материалист


    v109


    v111


    чистый постматериалист


    v111


    v109


    чистый постматериалист


    v108


    v109


    материалистический смешанный тип


    v108


    v111


    материалистический смешанный тип


    v110


    v109


    материалистический смешанный тип


    v110


    v111


    материалистический смешанный тип


    v109


    v108


    постматериалистический смешанный тип


    v109


    v110


    постматериалистический смешанный тип


    v111


    v108


    постматериалистический смешанный тип


    V111


    v110


    постматериалистический смешанный тип


    Рассмотрим теперь нижеследующую программу SPSS, которая строит индекс в соответствии с вышеприведенной таблицей.

     /* Создание индекса */ 
      .'* на примере теоремы Рональда 
       Инглхарта об изменении ценностей */ 
      /* чистые материалисты */ 
      if (v!08 = 1 and vl10 = 2) 
      ingl_ind = 4 . if (vl10 = 1
       and vl08 = 2) ingl_ind = 4 .
      /* чистые постматериалисты */ 
      if (v!09 = 1 and vlll = 2) 
       ingl_ind = 1 . 
      if (vl11 = 1 and vl09 = 2)  
       ingl_ind = 1 . 
      /* материалистический смешанный тип 
        */ if <vl08 = 1 and vl09 = 2)  
       ingl_ind = 3 . if (vl08 = 1 
      and vl11= 2) ingl_ind = 3 . 
       if {vl10 = 1 and vl09 = 2) 
       ingl_ind = 3 . 
       if (vl10 = 1 and vl11 = 2) 
       ingl_ind = 3 . 
      /* постматериалистические 
       смешанные типы */ 
      if (v!09 = 1 and v!08 = 2) 
       ingl_ind = 2 . 
      if (vl09 = 1 and vl10 = 2)  
       ingl_ind = 2 . 
      if (vl11 = 1 and vl08 = 2) 
       ingl_ind = 2 . 
      if (vl11 = 1 and vk10 = 2)  
       ingl_ind = 2 . 
      /* He знаю */ 
      if (vl08 = 8 and vl09 = 8 
       and vl10 = 8 and vl11 = 8)  
             ingl_ind = 8 . 
      if (vl08 = 8 and vl09 = 8  
       and vl10 = 8) ingl_ind = 8 . 
      if (vl08 = 8 and vl09 = 8 
      and vl11 = 8) ingl_ind = 8 . 
      if (vl08 = 8 and vl10 = 8  
       and vl11 = 8) ingl_ind = 8 . 
      if (vl09 = 8 and vl10 = 8  
       and vl11 = 8) ingl_ind = 8 . 
      /* нет данных */ 
      if (vl08 = 9 and vl09 = 9  
      and vl10 = 9 and vl11 = 9) 
      ingl_ind = 9 . 
      if (vl08 = 9 and vl09 = 9 
      and vl10 = 9) ingl~ind = 9 . 
      if (vl08 = 9 and vl09 = 9  
      and vl11 = 9) ingl_ind = 9 . 
      if (vl08 = 9 and vl10 = 9  
      and vl11 = 9) ingl_ind = 9 . 
      if (vl09 = 9 and vl10 = 9  
      and vl11 = 9) ingl~ind = 9 . 
      variable labels ingl_ind  
       'Индекс Инглхарта' 
      value labels ingl_ind    1  
       'Постматериалисты' 
      2 'ПМ, смешанный тип' 
      3 'M, смешанный тип' 
      4 ' Материалисты' 
      8 'Не знаю' 
      9 'нет данных' . 
      execute . 

    Программа начинается с двух строк комментариев, которые содержат информацию о том, что целью ее выполнения является построение индекса на примере теоремы Рональда Инглхарта об изменении ценностей. Комментарии обозначаются в SPSS символами /* в начале строки комментария и */ — в конце комментария. При выполнении программы процессор SPSS пропускает эти строки.


    Далее вычисляется индекс для чистых материалистов. Если выполняется условие, что переменная v!08 имеет значение 1, а переменная v110 — значение 2, то переменная индекса ingMnd должна иметь значение 4 (Материалисты). После этого вычисляется индекс для чистых постматериалистов. Он равен 1. Для материалистических и постматериалистических смешанных типов имеется по четыре сочетания, которые обрабатываются в двух следующих блоках. Два последних блока программы обрабатывают ответы не знаю и нет данных. Индекс Инглхарта равен 8 (не знаю), если на три или четыре вопроса дан ответ не знаю, и 9 (нет данных), если на три или четыре вопроса дан ответ нет данных. Например, если респондент придал элементу v!08 первостепенную важность, а на три остальных вопроса ответил не знаю, он попадает в категорию не знаю.


    Следует отметить, что находящиеся друг под другом в программе операторы AND (конъюнкции) можно преобразовать в дизъюнкцию, связав их операторами OR (см. главу 7). Следующая команда variable labels присваивает переменной ingl_ind метку «Индекс Инглхарта». Команда value labels устанавливает шесть меток значений для этой переменной. Команда execute в конце программы запускает выполнение всех необходимых преобразований.


    Эта программа находится на компакт-диске примеров или в рабочем каталоге C:\SPSSBOOK. Она называется ingle.sps.

    •  Загрузите программу в редактор синтаксиса ingle.sps, вызвав команды меню File (Файл) Open (Открыть).

    •  Выделите текст программы следующими командами меню Edit (Правка) Select All (Выделить все)

    •  Запустите программу, щелкнув на значке Run (Запуск).

    •  Перейдите в редактор данных.

    •  Выполните частотный анализ переменной ingljnd. Вы получите следующий результат:

    Индекс Инглхарта


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Постматериалисты


    673


    22,0


    22,0


    22,0


    ПМ, смешанный тип


    789


    25,8


    25,8


    47,8


    М, смешанный тип


    956


    31,3


    31,3


    79,1


    Материалисты


    598


    19,6


    19,6


    98,6


    Не знаю


    19


    ,6


    ,6


    99,2


    нет данных


    23


    ,8


    ,8


    100,0


    Total


    3058


    100,0


    100,0


    Из 3058 опрошенных 98,6% поддаются классификации; 41,6% относятся к чистым типам. В группу материалистического смешанного типа попадает почти треть всех наблюдений. Постматериалистическому смешанному типу соответствует чуть больше четверти. В чистых группах постматериалисты выражены несколько сильнее материалистов. Материалисты и материалистические смешанные типы составляют вместе 50,9%; постматериалисты и постматериалистические смешанные типы — 47,8%. Таким образом, наблюдается небольшой перевес в сторону материализма.


    Данные четырех классических элементов Инглхарта содержит также файл beamte.sav. Он касается опроса ALLBLJS, проводившегося в 1988 г.. Для упражнения постройте индекс Инглхарта для этих данных. При сравнении с данными 1991 г. следует учитывать, что опрос ALLBUS 1991 впервые проводился во всех землях Германии, включая восточные.

    8.5 Агрегирование данных

    8.5 Агрегирование данных


    На базе значений одной или нескольких группирующих переменных (переменных разбиения) можно объединить наблюдения в группы (агрегировать) и создать новый файл данных, содержащий по одному наблюдению для каждой группы разбиения. Для этого SPSS предоставляет большое количество функций агрегирования.


    В сельскохозяйственном исследовании рассматривалось содержание свиней в двух различных типах свинарников. При этом в каждом из двух свинарников осуществлялся мониторинг поведения восьми свиней в течение двадцатидневного периода. На протяжении этого периода фиксировалась длительность определенных действий животных (то есть сколько времени свиньи рылись, ели, чесали голову и туловище). Данные хранятся в файле schwein.sav, содержащем следующие переменные:


    Имя переменной


    Пояснение


    stall


    Тип свинарника (1 или 2)


    nr


    Порядковый номер свиньи (от 1 до 8)


    zert


    Номер дня (от 1 до 20)


    wuehlen


    Длительность рытья (в секундах)


    fressen


    Длительность кормежки (в секундах)


    massage


    Длительность чесания (в секундах)


    Следует выяснить, значительно ли различается по длительности эти три действия в свинарниках обоих типов, для чего необходимо применить соответствующий статистический текст, например, тест Стьюдента (см. главу 13).


    В каждой из двух выборок для каждого из трех действий имеется по 8 + 20=160 измерений. Однако выполнение статистического тест на основе этих данных будет не совсем корректно, так как они относятся к восьми особям, для каждой из которых было проведено по двадцать измерений.


    Поэтому мы просуммируем длительности для каждой отдельной свиньи и для каждого отдельного действия. Затем полученные наборы сумм мы сравним при помощи теста Стьюдента. Это типичный пример агрегирования данных.

    •  Загрузите файл schwein.sav.

    •  Выберите в меню команды Data (Данные) Aggregate... (Агрегировать)

     Откроется диалоговое окно Aggregate Data (Агрегировать данные).

    •  В качестве переменных разбиения перенесите переменные stall и nr в поле Break Variable(s), а в качестве переменных агрегирования (Aggregate Variable(s)) выберите wuehlen, fressen и massage. Диалоговое окно приобретет вид, показанный на рис. 8.8.

    Будут показаны три новые переменные wuehle_l, fresse_l и massag_l, имена которых состоят из первых шести букв имен соответствующих переменных агрегирования и комбинации символов _1. По умолчанию в качестве функции агрегирования принято среднее значение. Мы должны выбрать вместо него сумму.

    •  Для этого щелкните на первой переменной, а затем на кнопке Funktion... (Функция). Откроется диалоговое окно Aggregate Data: Aggregate Function (Агрегировать данные: Функция агрегирования) (см. рис. 8.9).

    Можно выбрать одну из шестнадцати функций агрегирования, имена которых не требуют особых пояснений.

    •  Выберите пункт Sum of values (Сумма значений) и щелчком на кнопке Continue вернитесь в первое диалоговое окно.

    •  Выполните те же действия для двух других переменных агрегирования. Агрегированные данные будут сохранены в новом файле.

    •  Щелкните на кнопке File... и выберите для нового файла имя pigaggr.sav.


    Рис. 8.8: Диалоговое окно Aggregate Data



    Рис. 8.9: Диалоговое окно Aggregate Data: Aggregate Function


    После щелчка на кнопке Отбудет создан новый файл, содержащий 2 х 8=16 наблюдений и переменные stall, nr, wuehle_l, fresse_l и massag_l.

    •  Загрузите этот файл и просмотрите его содержимое в редакторе данных.

    •  Как описано в разделе 13.1, проведите тест Стьюдента для независимых выборок с группирующей переменной stall и тестируемыми переменными fresse_l, massag_l и wuehle_l. Вы получите следующий результат:

    Group Statistics (Статистика группы)


    STALL


    N


    Mean (Среднее значение)


    Std. Deviation (Стандартное отклонение)


    Std. Error Mean (Стандартная ошибка среднего значения)


    FRESSE 1 1


     2


    8


    8


    339,0125 231,6750


    98,2384 109,5381


    34,7325 38,7276


    MASSAG 1 1


     2


    8


    8


    2,2875 40,3625


    3,3689 54,1795


    1,1911 19,1553


    WUEHLE 1 1


     2


    8


    8


    1996,587 1964.600


    326,3919 642,5314


    115,3970 227,1692


    Independent Samples Test (Тест для независимых выборок)

     

    Levne's Test forEquality of Variancies


    (Tecт Левена на равенство дисперсий)  


    Т-Test for Equality of Means (Тест Стьюдента на равенство средних)


    F


    Значи-мость


    Т


    df


    (дву сторон-няя)


    Разность средних


    Стан-дартная ошибка разницы


    95% доверительный интервал разности 


     Нижняя и Верхняя          


    FRES-SE_.1


    Equal variances assumed (Дис-персии равны) Equal variances not assumed (Дис-персии не равны)


    .128


    .726


    2,063 2,063


    14 13, 837


    ,058 ,058


    107 ,3375 107 ,3375


    52, 0209 52 ,0209


    -4,2362 -4,3594


    218, 9112 219, 0344


    MAS-SAG 1


    Equal variances assumed (Дис-персии равны) Equal variances not assumed (Дис-персии не равны)


    7.390


    ,017


    -1,984 -1,984


    14 7,054


    ,067 ,087


    -38, 0750 -38,0750


    19, 1923 19. 1923


    -79,2385 -83,3872


    3,0885 7,2372


    WU-EHLE_1


    variances assumed (Дис-персии равны) Equal variances not assumed (Дис-персии не равны)


    2,274


    ,154


    ,126 ,126


    14 10 ,387


    ,902 ,902


    31, 9875 31 ,9875


    254 ,7985 254 ,7985


    -514 ,5010 -532, 8844


    578. 4760 596 ,8594


    В первом свинарнике свиньи ели в продолжение наблюдаемого периода в среднем 339,0 секунд в день, а в другом — только 231,7 секунд. Это различие является почти статистически значимым (р= 0,058).

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    8.6 Ранговые преобразования

    8.6 Ранговые преобразования


    В SPSS существует возможность задавать ранги для измеренных значений переменной, проводить оценки Сэвиджа, вычислять процентные ранги и формировать процентильные группы, добавляя в файл данных соответствующие переменные.


    Так, например, в формулах для непараметрических тестов (см. главу 14) вместо исходных измеренных значений переменной используются присвоенные им ранги. Однако эти процедуры производят автоматическое присвоение рангов и в явном виде выполнять предварительные ранговые преобразования не требуется. Поэтому они играют второстепенную роль.


    Мы продемонстрируем присвоение рангов на более наглядном примере, а затем проведем обзор различных типов рангов.

    8.6.1 Пример рангового преобразования

    8.6.1 Пример рангового преобразования


    В главе 20 представлен файл europa.sav, содержащий отдельные статистические показатели по 28 европейским странам. В частности, он включает переменные land (краткое обозначение страны) и tjul (средняя дневная температура в июле). Требуется расположить страны в нисходящем порядке согласно значениям последней переменной и затем вывести их в отсортированном виде.

    •  Загрузите файл europa.sav.

    •  Выберите в меню команды Transform (Преобразовать) Rank Cases... (Присвоить ранги наблюдениям) Откроется диалоговое окно Rank Cases.


    Рис. 8.10: Диалоговое окно Rank Cases

    •  Щелкните в списке переменных на переменной tju1. В поле By: (По) можно задать группирующую переменную. В этом случае назначение рангов будет выполнено раздельно по группам, образуемым этой переменной.

    •  Присвоим самой теплой стране (с максимальным значением переменной tju1) ранг 1; для этого щелкните в поле Assign Rank I to (Присвоить ранг 1) на опции Largest value (Максимальное значение).

    Щелкнув на кнопке Rank types... (Типы рангов), можно увидеть стандартную настройку Rank. Пока оставим ее без изменений; остальные настройки мы рассмотрим в разделе 8.6.2.

    •  Кнопка Ties... (Связки) открывает диалоговое окно Rank Cases: Ties.

    Его настройки указывают, как программа будет поступать при появлении одинаковых измеренных величин. По умолчанию принято (и, как правило, это наилучший вариант), что присваивается среднее (Mean) из значений рангов этих величин. При установке Low все значения получают наименьший, при установке High — наибольший из этих рангов. При выбранной опции Sequential ranks to unique values (Присваивать последовательные ранги) все связанные наблюдения получают одинаковый ранг; следующему наблдению присваивается следующее по порядку целое число. Поэтому максимальный присвоенный ранг равен не общему количеству значений, а количеству различных значений.


    Перечисленные четыре способа присвоения рангов можно пояснить с помощью простого примера, в котором семь значений расположены по убыванию.



    Рис. 8.11: Диалоговое окно Rank Cases: Ties


    Значение


    Mean


    Low


    High


    Sequential ranks to unique values


    190


    1


    1


    1


    1


    187


    2,5


    2


    3


    2


    187


    2,5


    2


    3


    2


    185


    5


    4


    6


    3


    185


    5


    4


    6


    3


    185


    5


    4


    6


    3


    184


    7


    7


    7


    4

    •  Оставьте стандартную настройку и закройте диалоговое окно кнопкой Continue.

    •  Начните присвоение рангов, щелкнув на ОК.

    В файл данных будет добавлена переменная rtju1, содержащая ранги, присвоенные значениям переменной tju1. Для обозначения ранговой переменной к имени исходной переменной спереди дописывается буква г.


    Затем отсортируем файл данных по этой ранговой переменной.

    •  Для этого, как описано в разделе 7.3, выберите в меню команды Data (Данные) Son Cases... (Сортировать наблюдения) и в появившемся диалоговом окне выберите в качестве переменной сортировки rtjul. Примите предлагаемый по умолчанию порядок сортировки по возрастанию.

    •  Запустите сортировку кнопкой ОК. Теперь выведем значения переменных rtju1, land и tju1 в отсортированном виде.

    •  Для этого выберите в меню команды (см. раздел 4.8) Analyze (Анализ) Reports (Отчеты) Case summaries... (Итоги по наблюдениям) и перенесите в поле Variables переменные rtjul, land и tjul в указанной последовательности.

    •  Запустите создание отчета кнопкой ОК. В окне просмотра будет показана следующая таблица.

    Отсюда можно заключить, что Греция является самой теплой страной (ранг 1), за ней следует Италия (ранг 2), следующий ранг имеют две страны — Албания и Румыния (средний ранг 3,5) и т.д.


    Case Processing Summary a (Сводка случаев)


    RANK TJU


    LAN


    Средняя дневная температура в июле


    1


    1,00


    GRI


    33


    2


    2,00


    ITA


    31


    3


    3,50


    ALB


    30


    4


    3,50


    RUM


    30


    5


    5,50


    JUG


    29


    6


    5,50


    TUE


    29


    7


    7,50


    BUL


    28


    8


    7,50


    UNG


    28


    9


    9,50


    FOR


    27


    10


    9,50


    SPA


    27


    11


    13,00


    DEU


    25


    12


    13,00


    FRA


    25


    13


    13,00


    OES


    25


    14


    13,00


    SCH


    25


    15


    13,00


    TSC


    25


    16


    17,00


    DD


    24


    17


    17,00


    POL


    24


    18


    17,00


    SOW


    24


    19


    19,50


    BEL


    23


    20


    19,50


    LUX


    23


    21


    23,50


    DAE


    22


    22


    23,50


    FIN


    22


    23


    23,50


    GRO


    22


    24


    23,50


    NIE


    22


    25


    23,50


    NOR


    22


    26


    23,50


    SCH


    22


    27


    27,00


    IRL


    20


    28


    28,00


    ISL


    15

    Total (Всего)N  28 28 28

     a. Limited to first 100 cases(Ограничено первыми 100 случаями)

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    8.6.2 Типы рангов

    8.6.2 Типы рангов


    В диалоге Rank Cases можно, щелкнув на кнопке Rank Types... (Типы рангов), от-крыть диалоговое окно Rank Cases: Types (Ранги: Типы). В этом окне представлены шесть типов рангов; щелкнув на кнопке More » (Еще), можно увидеть еще два.


    Ниже приведено объяснение различных типы рангов.

    •  Rank (Ранг): Абсолютные значения рангов (см. раздел 8.6.1). Это установка по умолчанию.

    •  Savage score (Оценка Сэвиджа): Это значения ранга, полученное на основе экспоненциального распределения. При общем количестве значений переменной т оценка Сэвиджа для i-го ранга определяется по формуле

     


    Рис. 8.12: Диалоговое окно Rank Cases: Types

    •  Fractional Rank (Относительный ранг): Это значение ранга деленное на количество наблюдений.

    •  Fractional Rank as % (Относительный ранг в %): Это численные значения относительных рангов, умноженные на 100. Например, процентный ранг 33,93 означает, что 33,93% всех наблюдений имеют более низкий ранг.

    •  Sum of case weights (Сумма весов наблюдений): Эта величина представляет интерес только при определении рангов для подгрупп и является постоянной в каждой подгруппе; она соответствует количеству случаев в подгруппе.

    •  Ntiles (N-процентили): Пользователь может задать число групп процентилей, на которые должны быть разбиты наблюдения (по умолчанию 4). Тогда каждому случаю присваивается значение процентильной группы, к которой он принадлежит.

    •  Proportion estimates (Долевые оценки): Вычисление накопленной доли при предположении нормальном распределении переменной. Для ранга г и количества наблюдений я соответствующие долевые оценки вычисляются по четырем нижеследующим формулам.


    Blom:


    (r-3/8)/(n+1/4)


    Tukey:


    (r-1/3)/(n+1/3)


    Rankit:


    (r-1/2)/n


    Van der Waerden:


    r/(n+1)

    •  Normal scores (Нормальные ранги): Значения процентилей, относящиеся к долевым оценкам.

    Для перечисленных рангов SPSS автоматически задает имена переменных, которые приведены в нижеследующей таблице. При этом имеет значение, был ли выбран единственный тип ранга или одновременно вычислялись ранги нескольких типов (что является исключением). В последнем случае, для обеспечения однозначности переменных имена должны различаться. В таблице приводятся также принятые в SPSS метки этих переменных. Для долевых оценок и нормальных рангов здесь приведен вариант, когда применяется формула Блома (Blom); при выборе других формул расчета этих рангов метки соответственно изменяются. Имя исходной переменной — lem (в нашем примере — это средняя ожидаемая продолжительность жизни мужчин).


    Тип ранга


    Единственный тип ранга


    Несколько типов


    Метка переменной


    Ранг


    rlem


    rlem


    RANK of LEM


    Оценка Сэвиджа


    slem


    slem


    SAVAGE of LEM


    Относительный ранг


    rlem


    rfrOO-1


    RFRACTION of LEM


    Относительный ранг в %


    plem


    perOO!


    PERCENT of LEM


    Сумма весов наблюдений


    nlem


    nOOl


    N of LEM


    N-процентили


    nlem


    ntiOOl


    NTILES of LEM


    Долевые оценки (по Блому)


    plern


    plem


    PROPORTION of LEM using BLOM


    Нормальные ранги (по Блому)


    nlem


    nlem


    NORMAL of LEM using BLOM


    Если провести ранговые преобразования всех возможных типов и вывести получившиеся значения с помощью средства формирования сводки наблюдений, мы получим следующую таблицу.


    Case Processinq Summary3 (Сводка наблюдений)



    LAN


    RANK LE


    SAVAG of


    RFRACT Nof


    PERCE of


    Nof


    NTILES LE


    PROPOR Nof using


    NORM of usin BLO


    1


    ALB


    3,00



    ,107


    10,7


    28


    1


    ,092



    2


    BEL


    11,50



    ,410


    41,0


    28


    2


    ,393



    3


    BUL


    15,50



    ,553


    55,3


    28


    3


    ,535


    ,088


    4


    DAE


    24,00


    ,843


    ,857


    85,7


    28


    4


    ,836


    ,979


    5


    DEU


    13,00



    ,464


    46,4


    28


    2


    ,446



    6


    DO


    17,00



    ,607


    60,7


    28


    3


    ,588


    ,223


    7


    FIN


    4,00



    ,142


    14,2


    28


    1


    ,128



    8


    FRA


    19.00


    ,098


    ,678


    67,8


    28


    3


    ,659


    ,410


    9


    GRI


    11,50



    ,410


    41,0


    28


    2


    ,393



    10


    GRO


    20,00


    ,209


    ,714


    71,4


    28


    3


    ,694


    ,509


    11


    IRL


    15,50



    ,553


    55,3


    28


    3


    ,535


    ,088


    12


    ISL


    27,00


    1,927


    ,964


    96,4


    28


    4


    ,942


    1,575


    13


    ITA


    18,00



    ,642


    64,2


    28


    3


    ,623


    ,315


    14


    JUG


    1,00



    ,035


    3,5


    28


    1


    ,022



    15


    LUX


    14,00



    ,500


    50,0


    28


    2


    ,482



    16


    NIE


    25,00


    1,093


    ,892


    89,2


    28


    4


    ,871


    1,134


    17


    NOR


    28,00


    2,927


    1,000


    100,0


    28


    4


    ,977


    2,011


    18


    OES


    9,00



    ,321


    32,1


    28


    2


    ,305



    19


    POL


    7,00



    ,250


    25,0


    28


    1


    ,234



    20


    POR


    2,00



    ,071


    7,1


    28


    1


    ,057



    21


    RUM


    6,00


    -


    ,214


    21,4


    28


    1


    ,199



    22


    SCH


    26,00


    1,427


    ,928


    92,8


    28


    4


    ,907


    1,323


    23


    SCH


    23,00


    ,643


    ,821


    82,1


    28


    4


    ,800


    ,844


    24


    sow


    22.00


    ,477


    ,785


    78,5


    28


    4


    ,765


    ,724


    25


    SPA


    21,00


    ,334


    ,750


    75,0


    28


    3


    ,730


    ,613


    26


    TSC


    5,00


    -


    ,178


    17,8


    28


    1


    ,163



    27


    TUE


    10,00


    -


    ,357


    35,7


    28


    2


    ,340


    -


    28


    UNG


    8,00



    ,285


    28,5


    28


    2


    ,269



    Total (Всего) N


    28


    28


    28


    28


    28


    28


    28


    28


    28


    a. Limited to first 100 cases (Ограничено первыми 100 наблюдениями)

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    8.7 Веса случаев

    8.7 Веса случаев


    SPSS предоставляет возможность определения веса данных. При этом данным, относящимся к разным наблюдениям, присваиваются различные весовые коэффициенты посредством так называемой переменной взвешивания. Эта процедура может быть полезной в следующих ситуациях:

    •  Данная выборка не является репрезентативной, то есть частотные характеристики выборки, состоящей из переменных, достаточных для обеспечения репрезентативности, не соответствуют частотным характеристикам генеральной совокупности.

    •  Анализ данных, которые уже представлены в виде частотных таблиц.

    Эти ситуации рассматриваются в двух следующих разделах. Подробнее о таблицах сопряженности, которые используются при этом, см. в главе 11.

    8.7.1 Коррекция при отсутствии репрезентативности

    8.7.1 Коррекция при отсутствии репрезентативности


    Перед служащими и представителями других социальных групп были поставлены четыре классических вопроса Инглхарта, уже известные нам из раздела 8.4.2, то есть, было предложено выбрать одну из четырех степеней важности для каждого из нижеследующих пунктов:


    1. Поддержание спокойствия и порядка


    2. Усиление влияния граждан на власть


    3. Борьба с инфляцией


    4. Обеспечение свободного выражения мнений


    Данные, взятые из опроса ALLBUS 1988 г., хранятся в файле beamte.sav. При этом переменной beamier присваивается кодировка 1 или 2 в зависимости от того, является ли респондент служащим; переменные themal-Hhema4 содержат оценки четырех вышеприведенных пунктов.

    •  Загрузите файл beamte.sav и командами меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты) создайте частотные таблицы переменных beamier и themaS:

    Служащий?


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Да


    137


    10,5


    10,5


    10,5


    Нет


    1162


    89,5


    89,5


    100,0


    Total


    1299


    100,0


    100,0


    Борьба с инфляцией


    Valid


    первостепенная важность


    Frequency 109


    Percent 8,4


    Valid Percent 8,4


    Cumulative Percent 8,4


    второстепенная важность


    237


    18,2


    18,2


    26,6


    важность третьей степени


    374


    28,8


    28,8


    55,4


    важность четвертой степени


    579


    44,6


    44,6


    100,0


    Total


    1299


    100,0


    100,0


    Из частотной таблицы переменной beamier можно заключить, что в данной выборке 10,5% респондентов являются служащими, хотя известно, что доля служащих в общем населении составляет только 8,4%.


    Прежде чем мы скорректируем это небольшое искажение при помощи переменной взвешивания, составим таблицу сопряженности для переменных themaS (строки) и beamter (столбцы).

    •  Командами меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности) создайте таблицу сопряженности из этих переменных.

    •  Дополнительно кнопкой Cells... (Ячейки) задайте вывод процентов по строкам (Percentages — Row) и столбцам (Column), а кнопкой Statistics... (Статистика) — выполнение теста %2(Chi-square):

    Таблица сопряженности Борьба с инфляцией* Служащий?


    Служащий?


    Да


    нет


    Total


    Борьба с инфля- цией


    первостепен ная важность


    Count (Коли- чество)


    6


    103


    109


    % от Борьба с инфляцией


    5,5%


    94,5%


    100,0%


    %от Служащий?


    4,4%


    8,9%


    8,4%


    второстепенн ая важность


    Count


    14


    223


    237


    % от Борьба с инфляцией


    5,9%


    94,1%


    100,0%


    %от Служащий?


    10,2%


    19,2%


    18,2%


    важность третьей степени


    Count


    37


    337


    374


    % от Борьба с инфляцией


    9,9%


    90,1%


    100,0%


    %от Служащий?


    27,0%


    29,0%


    28,8%


    важность четвертой степени


    Count


    80


    499


    579


    % от Борьба с инфляцией


    13,8%


    86,2%


    100,0%


    %от Служащий?


    58,4%


    42,9%


    44,6%


    Total


    Count


    137


    1162


    1299


    % от Борьба с инфляцией


    10,5%


    89,5%


    100,0%


    %от Служащий?


    100,0%


    100,0%


    100,0%


    Chi-Square Tests (Тесты хи-квадрат)


    Value (Значение)


    df


    Asymp. Sig. (2-sided) (Асимптотическая значимость (двусторонняя))


    Pearson Chi-Square хи-квадрат по Пирсону)


    15,077 (а)


    3


    ,002


    Likelihood Ratio (Степень правдоподобия)


    16,032


    3


    ,001


    Linearly-Linear Association (Зависимость линейный-линейный)


    14,302


    1


    ,000


    N of Valid Cases (Кол-во допустимых случаев)


    1299


    a. 0 cells (,0%) have expected count less than 5. The minimum expected count is 11,50. (Ячейки с нулями (,0%) имеют ожидаемую частоту менее 5. Минимальная ожидаемая частота 11,50.)


    Результаты показывают, что для служащих борьба с инфляцией имеет меньшее значение, чем для остальных респондентов.


    Теперь путем взвешивания мы попробуем скорректировать искажение доли служащих, имеющееся в выборке. Принцип заключается в том, что для каждого значения переменной (в данном случае переменной beamier) вычисляется весовой коэффициент как отношение необходимого значения к существующему.


     Весовой коэффициент = (необходимое значение)/(существующее значение)


    Для служащих весовой коэффициент равен


    8,4/10,5=0,8


     а для остальных —


    91,5/89,5 = 1,023 

    •  Командами меню File (Файл) New (Создать) Syntax (Синтаксис) откройте редактор синтаксиса.

    •  Чтобы создать переменную взвешивания, введите следующие команды:

    IF beamter=1 gewicht=8.4/10.5 . 
     IF beamter=2 gewicht=91.6/89. 5 . 
      EXECUTE . 

    Исходя из соображений точности расчета рекомендуется вводить сами значения, а не их отношения, и предоставлять их вычисление компьютеру.

    •  Выделите введенные команды, выбрав в меню Edit (Правка) Select All (Выделить все)

    •  Щелкните на символе Run, и в файл данных будет добавлена новая переменная gewicht. Ее мы и будем использовать как переменную взвешивания.

    Для создания переменных взвешивания можно и не использовать команды синтаксиса SPSS, а повторить подход, описанный в разделе 8.4.1.

    •  Выберите в меню команды Data (Данные) ; Weight Cases... (Взвесить наблюдения)

     Появится диалоговое окно Weight Cases.



    Рис. 8.13: Диалоговое окно Weight Cases

    •  Выберите в этом диалоговом окне опцию Weight cases by и перенесите переменную gewicht в поле под ней (в диалоге это поле называется Frequency Variable).

    •  Описанным выше путем создайте частотные таблицы переменных beamier и thema3 и таблицу сопряженности из этих переменных. Вы получите следующий результат:

    Служащий?


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    да


    110


    8,4


    8,4


    8,4


    нет


    1189


    91,6


    61,6


    100,0


    Total


    1299


    100,0


    100,0


    Борьба с инфляцией


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    первостепенная важность


    110


    8,5


    8,5


    8,5


    второстепенная важность


    239


    18,4


    18,4


    26,9


    важность третьей степени


    375


    28,8


    28,8


    55,8


    важность четвертой степени


    575


    44,2


    44,2 ,


    100,0


    Total


    1299


    100,0


    100,0


    Таблица сопряженности Борьба с инфляцией * Служащий?


    Служащий?


    да


    Нет


    Total


    Борьба с инфляцией


    первосте- пенная важность


    Count


    5


    105


    110


    % от Борьба с инфляцией


    4,5%


    95,5%


    100,0%


    %от Служащий?


    4,5%


    8,8%


    8,5%


    второсте- пенная важность


    Count


    11


    228


    239


    % от Борьба с инфляцией


    4,6%


    95,4%


    100,0%


    %от Служащий?


    10,0%


    19,2%


    18,4%


    важность третьей степени


    Count


    30


    345


    375


    % от Борьба с инфляцией


    ,U /0


    92,0%


    100,0%


    %от Служащий?


    27,3%


    29,0%


    28,9%


    важность четвертой степени


    Count


    64


    511


    575


    % от Борьба с инфляцией


    11,1%


    88,9%


    100,0%


    %от Служащий?


    58,2%


    43,0%


    44,3%


    Total


    Count


    110


    1189


    1299


    % от Борьба с инфляцией


    8,5%


    91,5%


    100,0%


    %от Служащий?


    100,0%


    100,0%


    100,0%


    Chi-Square Tests


    Value


    Df


    Asymp. Sig. (2-sided)


    Pearson Chi-Square


    12,156 a


    3


    ,007


    Likelihood Ratio


    12,972


    3


    ,005


    Linear-by-Linear Association


    11,410


    1


    ,001


    N of Valid Cases


    1299


    а. 0 cells (,0%) have expected count less than 5. The minimum expected count is 9,31. (Ячейки с нулями (,0%) имеют ожидаемую частоту менее 5. Минимальная ожидаемая частота 9,31.)


    Общая частота осталась неизменной — 1299, но взаимное отношение частот изменилось. В переменной beamter количество служащих снизилось с 137 до 110, что соответствует реальной доле служащих 8,4%. Также незначительно изменилась частотная таблица для переменной themaS; взвешивание повлияло и на нее.


    То же можно сказать и о таблице сопряженности. Однако здесь процентные значения по столбцам не изменились; сохранились соотношения между отдельными значениями переменных в ячейках.


    Установленное взвешивание будет действовать до тех пор, пока вы снова не выберете в диалоговом окне Weight Cases опцию Do not weight cases (He взвешивать наблюдения).


    Описанный метод взвешивания при отсутствии репрезентативности может привести к возникновению некоторых проблем, которые, впрочем, не проявляются в изученном примере.


    Если мы рассмотрим, например, взвешенную частотную таблицу переменной «Борьба с инфляцией», то обнаружим, что общее количество наблюдений (1299) не меняется при взвешивании. Это связано с тем, что сумма весовых коэффициентов по всем случаям равна числу случаев. Однако в варианте взвешивания, который будет изложен в разделе 8.7.2, это не так.


    Если вы попробуете вручную просуммировать частоты упоминания всех четырех вариантов ответов, то в результате вы также получите число 1299. Однако это не закономерность, а скорее счастливое совпадение, о чем свидетельствует следующий пример.

    •  Загрузите файл mai.sav, содержащий результаты опроса членов профсоюза на тему 1 мая (см. главу 24).

    •  С помощью команд меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты) создайте частотные таблицы переменных v2 (Пол) и v20 (Занятие).

    Пол


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    женский


    77


    28,4


    28,4


    28,4


    мужской


    184


    71,6


    71,6


    100,0


    Total


    271


    100,0


    100,0


    Занятие


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Учащийся


    8


    3,0


    3,0


    3,0


    Рабочий


    47


    17,3


    17,3


    20,3


    Квалифици- рованный рабочий


    47


    17,3


    17,3


    37,6


    Специалист


    4


    1,5


    1,5


    39,1


    Служащий


    66


    24,4


    24,4


    63,5


    Менеджер


    8


    3,0


    3,0


    66,4


    Государствен- ный служащий


    31


    11,4


    11,4


    77,9


    Пенсионер


    42


    15,5


    15,5


    93,4


    Домохозяйка


    g


    3,3


    3,3


    96,7


    Нетрудоспо- собный


    1


    ,4


    ,4


    97,0


    Безработный Total


    8 271


    3,0 100,0


    3,0 100,0


    100,0

    •  Взвесим наблюдения так, чтобы устранить неравномерность между количествами респондентов обоих полов. Учитывая частотное распределение полов, характерное для имеющейся выборки, это выполняется при помощи следующих команд:

    IF v2=1 w=135.5/77. 


    IF v2=2 w=135.5/194.


     EXECUTE

    •  Теперь описанным выше способом проведем взвешивание, используя только что полученную переменную w, и построим обе частотные таблицы заново:

    Пол


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    женский


    135


    50,0


    50,0


    50,0


    мужской


    135


    50,0


    50,0


    100,0


    Total


    271


    100,0


    100,0


    Занятие


    Frequency


    Percent


    Valid Percent


    Cumulative Percent


    Valid


    Учащийся


    10


    3,6


    3,6


    3,6


    Рабочий


    46


    16,8


    16,8


    20,4


    Квалифици- рованный рабочий


    35


    12,9


    12,9


    33,3


    Специалист


    3


    1,0


    1,0


    34,4


    Служащий


    83


    30,7


    30,7


    65,1


    Менеджер


    7


    2,5


    2,5


    67,5


    Государствен- ный служащий


    32


    11,9


    11,9


    79,4


    Пенсионер


    36


    13,2


    13,2


    92,6


    Домохозяйка


    9


    3,5


    3,5


    96,1


    Нетрудоспо- собный


    2


    ,6


    ,6


    96,8


    Безработный


    9


    3,2


    3,2


    100,0


    Total


    271


    100,0


    100,0


    Хотя общее число наблюдений, 271, опять не изменилось, но суммирование частот по категориям дает несколько другие результаты.


    Это особенно заметно для переменной Пол. Так как после определения переменной взвешивания обе категории должны иметь одинаковые частоты, с самого начала ясно, что сумма не может быть нечетной. Для переменной занятие сложение частот по категориям также дает результат 272, что на единицу отличается от общего количества наблюдений — 271, выводимого в окне просмотра. SPSS всегда, в том числе при взвешивании, выдает целочисленные частоты. Поэтому негативное влияние округления будет неизбежным. Другие статистические программы, например, Stata, обходят эту ситуацию, вычисляя взвешенные частоты с дробной частью.


    Если сделать выборку наблюдений, то отображаемые программой суммы до и после взвешивания, как правило, также будут различаться. Это связано с тем, что в частичной выборке количество наблюдений обычно не соответствует сумме весовых коэффициентов, попадающих в эту выборку. Это можно проверить, создав на основе открытого файла данных частотную таблицу переменной «Занятие» до взвешивания и после взвешивания, но только для приверженцев партии СДПГ (v22=2). Тогда мы получим соответственно суммы 91 и 83.


    Взвешивание для выравнивания характеристик при нарушении репрезентативности применяется в первую очередь при эпидемиологических исследованиях. Так как при весовом коэффициенте, превосходящем единицу, количество наблюдений искусственно увеличивается по сравнению с фактически измеренным, к результатам теста на значимость следует подходить весьма критически.

    14.gif

    Изображение: 

    8.7.2 Анализ концентрированных данных

    8.7.2 Анализ концентрированных данных


    На предприятии с семнадцатью работниками девять из них удовлетворены условиями труда. Двое из этой последней группы в текущем году болели гриппом; из восьми работников, которые не удовлетворены условиями труда, гриппом болели пятеро. Это дает нам следующую таблицу:


    удовлетворены


    не уловлетворены


    болели 


    не болели


    1


    7



    3


    Следует выяснить, является ли значимой большая доля болевших среди неудовлетворенных условиями труда. Подходящим статистическим тестом для этой задачи будет точный тест Фишера и Йейтса, который выполняется после создания таблицы сопряженности в дополнении к обычному тесту %2, если количество наблюдений очень мало.


    Чтобы можно было решить эту задачу с применением SPSS, в первую очередь следует построить соответствующий файл данных, состоящий из наблюдений и переменных. Примером такого файла служит grippe.sav. Загрузите этот файл. В окне редактора данных вы получите структуру с четырьмя наблюдениями и тремя переменными.


    Она содержит переменную grippe с категориями 1 и 2 (болели — не болели), переменную zuf с категориями 1 и 2 (удовлетворены — не удовлетворены) и переменную freq, которая указывает частоту каждого сочетания и будет использоваться в качестве переменной взвешивания.

    •  Выберите в меню команды Data (Данные) Weight Cases... (Взвесить наблюдения)

    •  В диалоговом окне Weight Cases выберите опцию Weight cases by и перенесите переменную freq в поле Frequency variable.

    •  Закройте диалоговое окно и выберите команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  Перенесите переменную grippe в список переменных строк (Rows), переменную zuf— в список переменных столбцов (Columns), и в диалоге, открываемом кнопкой Statistics..., задайте проведение теста %2 (Chi-square).

    В окне просмотра появится следующий результат:


    Таблица сопряженности Болели? * Удовлетворены?


    Count (Количество)


    Удовлетворены?


    Total


     


    да                   нет


    Болели?


    Да


    2


    5


    7


    Нет


    7


    3


    10


    Total


    9


    8


    17


    Chi-Square Tests


    Value


    df


    Asymp. Sig. (2-sided)


    Exact Sig. (2-sided) (Точная значимость (двусторон-няя))


    Exact Sig. (1-sided) (Точная значимость (односторон-няя))


    Pearson Chi-Square (?2 пo Пирсону)


    2,837 "


    1


    ,092


    Continuity Correction (b) (Коррекция непреры-вности)


    1,418


    1


    ,234


    Likelihood Ratio (Отношение правдопо-добия)


    2,915


    1


    ,088


    Fisher's Exact Test (Точный тест Фишера)


    ,153


    ,117


    Linear-by-Linear Association (Зависимость линейный-линейный)


    2,670


    1


    ,102


    N of Valid Cases (Кол-во допустимых случаев)


    17


    a. Computed only for a 2x2 table (Вычислено только для таблицы 2Х2)


    b. 3 cells (75,0%) have expected count less than 5. The minimum expected count is 3,29 (3 ячейки (75%) имеют ожидаемую частоту менее 5. Минимальная ожидаемая частота 11,50.)


    Односторонний тест Фишера-Йейтса даст в этом случае р =0,117, т.е. отсутствие значимой разницы.


    Следующий пример взят из биологии. Исследовалось количество особей девяти различных видов кузнечиков на пяти разных лугах. Частоты сведены в следующую таблицу


    Луг


    Вид кузнечика


    1


    2


    3


    4


    5


    1


    0


    0


    1


    1


    1


    2


    1


    1


    1


    1


    0


    3


    61


    51


    17


    122


    54


    4


    36


    32


    23


    38


    11


    5


    2


    0


    2


    6


    0


    6


    3


    1


    2


    2


    1


    7


    0


    0


    0


    2


    0


    8


    26


    50


    25


    54


    22


    9


    35


    33


    36


    25


    12


    Следует выяснить, являются ли повышенная концентрация или недостаток отдельных видов кузнечиков на определенных лугах статистически значимыми. Для этого следует применить тест по критерию хи-квадрат.


    И в этом случае решение задачи SPSS должна начаться с составления файла данных, содержащего три переменные: переменную для вида кузнечиков (с категориями 1—9), переменную для луга (категории 1—5) и переменную, содержащую частоту данного вида на данном лугу.

    •  Загрузите файл wiese.sav и исследуйте его структуру в редакторе данных.

    •  Выберите в меню команды Data (Данные) Weight Cases... (Взвесить наблюдения) Откроется диалоговое окно Weight Cases.

    •  Выберите опцию Weight cases by и перенесите переменную h в поле Frequency variable.

    •  Закройте диалоговое окно кнопкой ОК и выберите команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности) 

    Появится диалоговое окно Crosstabs.

    •  Перенесите переменную heuschr в список переменных строк, переменную wiese — в список переменных столбцов, и в диалоге, открываемом кнопкой Cells..., кроме вывода наблюдаемых частот (флажок Observed в группе Counts), задайте также вывод ожидаемых частот (флажок Expected) и нормированных остатков (флажок Standardized в группе Residuals). После закрытия диалогового окна будет выведена следующая таблица.

    Таблица сопряженности HFUSflHR * WIFSF


    WIESE


    Total


    1


    2


    3


    4


    5


    HEUSCHR


    1


    Count (Количество)


    0


    0


    1


    1


    1


    3


    Expected Count (Ожидаемое количество)


    ,6


    ,6


    ,4


    1,0


    ,4


    3,0


    Std. Residual (Нормиро- ванный остаток)


    -,8


    -,8


    ,9


    ,0


    1,0


    2


    Count


    1


    1


    1


    1


    0


    4


    Expected Count


    ,8


    ,8


    ,5


    1,3


    ,5


    4,0


    Std. Residual


    ,2


    ,2


    ,6


    -,2


    -,7


    3


    Count


    61


    51


    17


    122


    54


    305


    Expected Count


    63,2


    64,8


    41,3


    96,8


    38,9


    305,0


    Std. Residual


    -,3


    -1,7


    -3,8


    2,6


    2,4


    4


    Count


    36


    32


    23


    38


    11


    140


    Expected Count


    29,0


    29,7


    18,9


    44,4


    17,9


    140,0


    Std. Residual


    1,3


    ,4


    ,9


    -1,0


    -1,6


    5


    Count


    2


    0


    2


    6


    0


    10


    Expected Count


    2,1


    2,1


    1,4


    3,2


    1,3


    10,0


    Std. Residual


    -,1


    -1,5


    ,6


    1,6


    -1,1


    6


    Count


    3


    1


    2


    2


    1


    9


    Expected Count


    1,9


    1,9


    1,2


    2,9


    1,1


    9,0


    Std. Residual


    ,8


    -,7


    ,7


    -,5


    -,1


    7


    Count


    0


    0


    0


    2


    0


    2


    Expected Count


    ,4


    ,4


    ,3


    ,6


    ,3


    2,0


    Std. Residual


    -,6


    -,7


    -,5


    1,7


    -,5


    8


    Count


    26


    50


    25


    54


    22


    177


    Expected Count


    36,7


    37,6


    23,9


    56,2


    22,6


    177,0


    Std. Residual


    -1,8


    2,0


    ,2


    -,3


    -,1


    9


    Count


    35


    33


    36


    25


    12


    141


    Expected Count


    29,2


    29,9


    19,1


    44,7


    18,0


    141,0


    Std. Residual


    1,1


    ,6


    3,9


    -3,0


    -1,4


    Total


    Count


    164


    168


    107


    251


    101


    791


    Expected Count


    164,0


    168,0


    107.0


    251,0


    101,0


    791,0


    В ячейках таблицы последовательно располагаются наблюдаемые частоты (fy), ожидаемые частоты (fg) и нормированные остатки, определяемые по формуле:


    Считается, что существует значимое различие между наблюдаемой и ожидаемой частотой, если нормированный остаток больше или равен 2. Другие предельные значения принимаются в соответствии со следующей таблицей.


    Нормированный остаток


    Уровень значимости


    >=2,0


    р<0,05 (*)


    >=2,6


    р<0,01 (**)


    >=3,3


    P<0,001 (***)


    Однако эти правила применимы, только в том случае, если ожидаемая частота не меньше 5. Если, к примеру, взять вид кузнечиков № 3, то для него наблюдается значимый недостаток на лугу 3, очень значимая концентрация на лугу 4 и значимая концентрация на лугу 5.

    15.gif

    Изображение: 

    8.8 Примеры вычисления новых переменных

    8.8 Примеры вычисления новых переменных


    Два следующих примера демонстрируют возможности языка программирования SPSS.

    8.8.1 Первый пример: вычисление расхода бензина

    8.8.1 Первый пример: вычисление расхода бензина


    Предположим, что мы ведем книгу учета расхода бензина. При каждой заправке в нее записывается дата, пробег в километрах и объем заправки в литрах:


    Дата


    Пробег


    Литров


    16.12.1992


    20580


    60,3


    23.12.1992


    21250


    57,4


    04.01.1993


    21874


    56,6


    17.01.1993


    22476


    56,3


    28.01.1993


    22954


    45,4


    12.02.1993


    23450


    48,6


    27.02.1993


    24020


    57,0


    14.03.1993


    24611


    56,7


    Эти данные записаны соответственно в переменных tag, monat, jaehr, kmstand и liter файла tank.sav. Для каждой даты (кроме первой, где это невозможно) требуется вычислить пробег за день и средний расход бензина в расчете на сто километров, а также вывести их через новые переменные.


    Это типичный случай, где рационально применить функций LAG и YRMODA. Используя пояснения к этим функциям, которые содержатся в разделе 8.1.2, попробуйте самостоятельно интерпретировать смысл следующих команд:

     COMPUTE   ntage=yrmoda(jahr,monat,tag)     . 
      COMPUTE difftage=ntage-lag(ntage,1) 
      COMPUTE diffkm=kmstand-lag(kmstand/1). 
      COMPUTE  verbr=liter*100/diffkm   . 
      COMPUTE     kmtag=diffkm/difftage     . 
      EXECUTE    . 
    •  Загрузите файл tank.sav.

    •  Введите приведенные выше команды в редактор синтаксиса или примените для этого диалоговое окно Compute Variable.

    •  В заключение командами меню Analyze (Анализ) Reports (Отчеты) Case summaries... (Сводка наблюдений) выведите значения переменных tag, monat, jahr, kmtag и verbr.

    8.8.2 Второй пример: вычисление даты пасхи

    8.8.2 Второй пример: вычисление даты пасхи


    Никейский собор в 325 г. установил, что пасху следует праздновать в первое воскресенье после первого весеннего полнолуния. На этом основан метод Гаусса для определения даты пасхального воскресенья. Согласно нему, если задан год jahr (например, 1994), то дату пасхального воскресенья, можно вычислить с помощью следующих операций:

     k = целый результат деления jahr/100 
      р = целый результат деления k/3 
      q = целый результат деления k/4 
      m = 15 + k — p — q 
      ml = остаток от деления т/30 
       n = 4 + k - q 
      nl = остаток от деления п/7 
      а = остаток от деления jahr/19 
      Ь = остаток от деления jahr/4 
      с = остаток от деления jahr/7 
      d = 19 * а + ml 
      dl = остаток от деления d/30 
      e = 2*b + 4*c + 6*dl + nl 
      el = остаток от деления е/7 
      х = 22 + dl + el 

    Для определения х существует два исключения

    •  Если x=57, то х принимается равным 50

    •  Если d1=28 и el=6, а остаток деления в выражении (11*m+11)/30 меньше 19, то х принимается равным 49

    Пасхальное воскресенье выпадает на х-ое марта или, если х больше 31, — на х— 31-ое апреля. Этот алгоритм дает превосходный пример для знакомства с арифметическими функциями TRUNC и MOD (см. раздел 7.1.3). Кроме того, можно еще раз потренироваться в использовании оператора IF (раздел 8.4).


    Сначала в редакторе данных следует создать файл данных, содержащий единственную переменную jahr. Затем в строках редактора необходимо ввести годы, для которых вы желаете вычислить дату пасхи. Можно также загрузить файл примеров ostern.sav, содержащий годы с 1995 по 2030.


    Затем откройте редактор синтаксиса и введите следующую программу. Команды COMPUTE вплоть до вычисления х можно также ввести в соответствующем диалоговом окне (см. раздел 8.1). Команды, приведенные ниже, вводятся в редакторе синтаксиса. Для того, чтобы избежать ручного ввода этой программы, можно просто загрузить в редактор синтаксиса файл ostern.sps.

    COMPUTE k=TRUNC(jahr/100)  . 
      COMPUTE p=TRUNC(k/3) . 
      COMPUTE q=TRUNC(k/4)  . 
      COMPUTE m=15+k-p-q . 
      COMPUTE ml=MOD(m,30)  . 
      COMPUTE n=4+k-g . 
      COMPUTE nl=MOD(n,7)  . 
      COMPUTE a=MOD(jahr,19)  . 
      COMPUTE b=MOD(jahr,4)  . 
      COMPUTE c=MOD(jahr,7)  
      COMPUTE d=19*a+ml . 
      COMPUTE dl=MOD(d,30)  . 
      COMPUTE e=2*b+4*c+6*dl+nl . 
      COMPUTE el=MOD(e,7)  . 
      COMPUTE x=22+dl+el . 
      IF x=57 x=50 . 
      IF dl=28 AND el=6  
       AND MOD (ll*m+ll,30)<19 x=49 . 
      COMPUTE tag=x . 
      COMPUTE monat=3 . 
      IF (x > 31) tag=x-31 . 
      IF (x > 31) monat=4 . 
      COMPUTE odatum=DATE.MDY(raonat,tag,jahr)  . 
      FORMATS odatum(DATEll)  . 
      LIST odatum . 

    Переменные tag и monat определяют дату пасхального воскресенья заданного года (переменной jahr). На их основе функция DATE.MDY вычисляет значение времени во внутреннем формате SPSS (число секунд после введения григорианского календаря). Затем это значение записывается в переменную odatum, которая преобразуется в формат даты DATE11.


    После ввода программы или открытия файла в редакторе синтексиса с помощью меню Edit (Правка) выделите все строки и запустите программу. С помощью команды LIST в окне просмотра буде сформирована следующая таблица, фрагмент которой с 1995 до 2002 года, приводится ниже:

     ODATUM 
      16-APR-1995  
       07-APR-1996  
       30-MAR-1997  
       12-APR-1998  
       04-APR-1999  
       23-APR-2000  
       15-APR-2001  
       31-MAR-2002 

    Обладая некоторой фантазией и знанием командного синтаксиса SPSS, можно решать задачи, не связанные непосредственно со статистическими вычислениями.

    Глава 9. Статистические характеристики

    Глава 9. Статистические характеристики

    1. Статистические характеристики

    Статистические характеристики


    Статистические характеристики вычисляются в основном для переменных, относящихся к интервальной шкале. Для этого используются следующие четыре команды меню.


    Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Descriptives.., (Описательная статистика). Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты). Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Explore... (Исследовать)Analyze (Анализ) Reports (Отчеты)Case summaries... (Итоги по наблюдениям)


    Создание частотных таблиц рассматривается в главе 6, а исследование данных — в главе 10.


    В нижеследующей таблице приведен обзор характеристик, рассчитываемых в SPSS. В меню Descriptives... можно также провести стандартизацию переменных (z-преобразование).


    Характе- ристика


    Descrip-tives


    Frequen- cies


    Explore


    Case summaries


    Среднее значение


    X


    X


    X


    X


    Сумма


    X


    X


    X


    Медиана


    X


    X


    X


    Групповая медиана


    X


    X


    Квартиль


    X


    Процеитиль


    X


    X


    Мода


    X


    Стандартное отклонение


    X


    X


    X


    X


    Стандартная ошибка


    X


    X


    X


    X


    Дисперсия


    X


    X


    X


    X


    Минимум


    X


    X


    X


    X


    Максимум


    X


    X


    X


    X


    Размах


    X


    X


    X


    X


    Межквартильная широта


    X


    Эксцесс (вариация)


    X


    X


    X



    Асимметрия


    X


    X


    X


    X


    Стандартная ошибка эксцесса


    X


    X


    X


    X


    Стандартная ошибка асимметрии


    X


    X


    X


    X


    Доверительный интервал


    X


    Гармоническое среднее


    X


    Геометрическое среднее


    X


    М-оценка (Хампеля)


    X


    Выброс


    X


    Усеченное среднее


    X


    Статистические характеристики, которые задаются в меню Case summaries, можно также вычислить раздельно по категориям группирующих переменных, относящихся к номинальной или порядковой шкале.


    В качестве примера для этой и следующей главы мы рассмотрим исследование, относящееся к области медицины — анализ действия двух различных лекарств (с вымышленными названиями альфасан и бетасан) на снижение кровяного давления у гипертоников. Эти данные хранятся в файле hyper.sav, содержащем 174 наблюдения и значения следующих переменных:


    nr


    Номер пациента


    med


    Лекарство (1 = альфасан, 2 = бетасан)


    g


    Пол (1 = мужской, 2 = женский)


    а


    Возраст, лет


    gr


    Рост, см


    gew


    Вес, кг


    rrs0


    Систолическое кровяное давление, исходное значение


    rrs1


    то же, через 1 месяц


    rrs6


    то же, через 6 месяцев


    rrs12


    то же, через 12 месяцев


    rrd0


    Диастолическое кровяное давление, исходное значение


    rrd1


    то же, через 1 месяц


    rrd6


    то же, через 6 месяцев


    rrd12


    то же, через 12 месяцев


    chol0


    Холестерин, исходное значение


    chol1


    то же, через 1 месяц


    chol6


    то же, через 6 месяцев


    chol12


    то же, через 12 месяцев


    bz0


    Сахар в крови, исходное значение


    bz1


    то же, через 1 месяц


    bz6


    то же, через 6 месяцев


    bz12


    то же, через 12 месяцев


    ak


    Возрастной класс (1 = до 55 лет, 2 = 56-65 лет, 3 = 66-75 лет, 4 = более 75)

    9.1 Описательная статистика

    9.1 Описательная статистика


    Для ознакомления с характеристиками описательной статистики рассмотрим переменную а, отражающую возраст.

    •  Загрузите файл hyper, sav и выберите команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Descriptives... (Описательная статистика) Откроется диалоговое окно Descriptives.


    Рис. 9.1: Диалоговое окно Descriptives

    •  Перенесите переменную а в список тестируемых переменных, и щелкните на кнопке Options... (Параметры).

    Здесь можно задать вычисление следующих статистических характеристик:

    •  Среднего значения,

    •  Суммы,

    •  Стандартного отклонения,

    •  Стандартной ошибки,

    •  Дисперсии,

    •  Минимума,

    •  Максимума,

    •  Размаха,

    •  Эксцесса (вариации),

    •  Асимметрии.

    •  Установите флажки для вывода следующих характеристик: Mean (Среднее значение), Minimum (Минимум), Maximum (Максимум) и S.E. mean (Стандартная ошибка).

    Если анализируется несколько переменных, можно также задать последовательность вывода:

    •  в порядке возрастания средних значений,

    •  в порядке убывания средних значений,

    •  по алфавиту (по именам переменных),

    •  согласно списку выбранных целевых переменных.

    По умолчанию выбран последний вариант. Если имеется только одна переменная, как в данном примере, порядок не имеет значения.

    •  Пометив желаемые характеристики, щелкните на кнопке Continue... (Далее). В главном диалоговом окне укажите, чтобы стандартизованные значения были сохранены в новой переменной открытого файла данных, для чего установите флажок Save standardized values as variables.

    •  Запустите вычисление, щелкнув на кнопке ОК. Результат будет показан в окне просмотра:

    Descriptive Statistics (Описательная статистика)


    N


    Minimum


    Maximum


    Mean


    Statistic


    Statistic


    Statistic


    Statistic


    Std. Error

    Statistic

    Возраст


    174


    36


    87


    62,11


    ,88


    Valid N (listvise) (Допустимых значений (по списку))


    174


    О значении отдельных характеристик описательной статистики можно прочесть в главе 6.


    Видно, что в файле данных появилась новая переменная za. Она содержит нормированные значения переменной а (Возраст). По умолчанию к имени исходной переменной спереди дописывается буква z. При этом стандартизация (z-преобразование) значения х выполняется по формуле


    Здесь m — среднее значение переменной, a s — стандартное отклонение.


    Проведение стандартизации переменных может быть целесообразным при использовании некоторых статистических методов. Его также можно выполнять в тех случаях, когда несколько переменных, которые имеют различный размах или отличаются на порядки по значению, должны быть приведены к общему показателю. В подобной ситуации сначала необходимо провести стандартизацию этих переменных, а затем, путем усреднения, вывести общее значение из полученных стандартизованых значений (z-зна-чений).

    1.gif

    Изображение: 

    9.2 Сводка наблюдений

    9.2 Сводка наблюдений


    Этот пункт меню позволяет как выводить значения переменных по наблюдениям, так и вычислять статистические характеристики.


    Первую из этих возможностей мы рассмотрели в разделе 4.7; сейчас мы опишем вычисление статистических характеристик. В качестве примера снова выберем файл hyper.sav.

    •  Загрузите файл hyper.sav и выберите команды меню Analyze (Анализ) Reports (Отчеты) Case summaries... (Сводка наблюдений)

    Откроется диалоговое окно Summarize Cases (Вывести сводку наблюдений) (см. рис. 9.2).

    •  Перенесите переменную а в правый список и снимите флажок Display Cases (Показывать наблюдения).

    •  Щелкните на кнопке Statistics... (Статистика). Откроется диалоговое окно Summary Report: Statistics (Сводка: Статистика) (см. рис. 9.3).

    •  Выберите в списке вычисление среднего значения (Mean), медианы (Median), гармонического среднего (Harmonic Mean) и геометрического среднего (Geometric Mean).

    •  Кнопка Options... позволяет задать заголовок для сводной таблицы и способ обработки пропущенных значений.


    Рис. 9.2: Диалоговое окно Summarize Cases



    Рис. 9.3: Диалоговое окно Summary Report: Statistics


    В окне просмотра будут показаны следующие результаты:


    Case Processing Summary (Обработанные наблюдения)


    Cases (Случаи)


    Included (Включенные)


    Excluded (Исключенные)


    Total (Всего)


    N


    Percent


    N


    Percent


    N


    Percent


    Возраст


    174


    100,0%


    0


    ,0%


    174


    100,0%


    Case Summaries (Сводка наблюдений)


    Возраст


    Mean


    Median


    Harmonic Mean


    Geometric


    Mean


    62,11


    63,00


    59,80


    60,98


    Описательные характеристики можно также вычислить раздельно по категориям группирующей переменной.

    •  Выберите в качестве тестируемой переменной chol0, а в качестве группирующей переменной — g.

    •  Задайте вычисление среднего значения, стандартного отклонения, стандартной ошибки среднего (Std. Error of Mean) и медианы.

    В окне просмотра будут показаны следующие результаты:


    Case Processing Summary


    Cases


    Included


    Excluded


    Total


    N


    Percent


    N


    Percent


    N


    Percent


    Холестерин, исходный * Пол


    174


    100,0%


    0


    ,0%


    174


    100,0%


    Case Summaries


    Холестерин, исходный


    Пол


    Mean


    Std. Deviation


    Std. Error Mean


    Median


    мужской


    228,95


    54,63


    7,11


    216,00


    женский


    241,54


    46,19


    4,31


    241,00


    Total


    237,27


    49,42


    3,75


    234,50


    О настройках, предназначенных для вывода значений по наблюдениям см. раздел 4.8. Раздельное вычисление по категориям группирующей переменной можно также выполнить при помощи команд меню Analyze (Анализ) Compare Means (Сравнение средних) Means... (Средние). Analyze (Анализ) Reports (Отчеты) OLAP Cubes... (OLAP-кубы)


    Здесь доступны те же характеристики, что и в меню Case summaries...


    Метод вычисления в форме OLAP-кубов (Online Analytical Processing) впервые появился в версии 9 SPSS. Он отличается тем, что таблицы, получающиеся при разбиении по группирующим переменным, можно активировать, пользуясь мобильными таблицами.

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    Глава 10. Исследование данных

    Глава 10. Исследование данных

    1. Исследование данных

    Исследование данных


    Когда данные введены в компьютер, не следует сразу же приступать к анализу. На первом этапе сами данные следует подвергнуть подробному и всестороннему исследованию. Подобное исследование преследует три основных цели:

    •  Обнаружение ошибок ввода,

    •  Проверка закона распределения,

    •  Описание данных подходящими статистическими характеристиками.

    10.1 Обнаружение ошибок ввода

    10.1 Обнаружение ошибок ввода


    Самый точный метод проверки данных (то есть значений всех переменных) на ошибки при вводе состоит в том, чтобы командами меню Analyze (Анализ) Reports (Отчеты) Case summaries... (Сводка наблюдений) вывести их список (см. раздел 4.6) и сравнить каждое значение с оригиналом (например, анкетой). Однако этот способ требует очень много времени, особенно при большом объеме данных. Поэтому решиться на проведение такой скучной и утомительной работы можно только в редких случаях — как правило, когда объем данных ограничен. В общем случае рекомендуется проводить частотный анализ значений переменных; для этого служат команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты) (см. главу 6). Результаты этого анализа при внимательном рассмотрении позволяют выявить недопустимые значения. Например, если переменная содержит данные роста в сантиметрах, то значение 384, обнаруживаемое при частотном анализе, явно свидетельствует о том, что в данных имеется ошибка. После проведения частотного анализа это значение можно отыскать в файле данных и исправить. Следовательно, при изучении частотных таблиц особое внимание надо обращать на максимальное и минимальное значения. Однако если вместо возраста 65 лет было введено, например, значение 56, то при помощи частотной таблицы эту ошибку обнаружить невозможно. Часто имеется также возможность провести смысловой анализ данных путем создания таблиц сопряженности (см. главу 11). Например, если данные взяты из анкеты, в которой имелся вопрос о семейном положении (холост/не замужем, женат/замужем, вдовец/вдова, разведен(а)), то, построив таблицу сопряженности для этого вопроса и вопроса типа: «Если у вас есть семья, то приемлемо ли для вас проводить отпуск раздельно?», легко можно обнаружить, ответили ли на него только женатые/замужние опрашиваемые.


    Обладая некоторыми практическими навыками и фантазией, с помощью описанных и им подобных способов можно выявить большое количество ошибок ввода. Все такие ошибки обязательно должны быть исправлены. Даже если наблюдений несколько тысяч, то даже одно-единственное противоречивое значение наносит вред вашему исследованию: создается впечатление, что работа по сбору о подготовке информации выполнена поверхностно.

    10.2 Проверка закона распределения

    10.2 Проверка закона распределения


    В первую очередь представляет интерес закон распределения, особенно для переменных, относящихся к интервальной шкале и шкале отношений. Чаще всего при этом ставится вопрос, подчиняются ли значения переменных нормальному распределению. Именно от этого практически всегда зависит выбор соответствующих аналитических тестов.


    В этом отношении самым распространенным и рекомендуемым является графическое изображение распределения данных в форме гистограммы (см. главы 6 и 22). Объективная проверка на нормальное распределение проводится с помощью подходящего статистического критерия (теста Колмогорова-Смирнова). Эта операция представлена в разделе 14.5.

    10.3 Вычисление характеристик

    10.3 Вычисление характеристик


    SPSS предоставляет различные возможности для вычисления статистических характеристик, помогающих оценить положение вершины и разброс распределения. К таким характерам относятся, например, среднее значение, медиана, стандартное отклонение и т.д. Эти возможности перечислены в обзоре в начале главы 9.


    В рамках исследования данных можно определить другие характеристики, называемые робастными оценками. Этот метод исследования данных также предоставляет возможности для обнаружения ошибок ввода (например, путем выявления выбросов) и проверки формы распределения.

    10.4 Исследование данных

    10.4 Исследование данных


    Чтобы понять, что может предложить нам SPSS для решения этой задачи, возьмем для примера переменную а (Возраст) из исследования эффективности лекарств (см. главу 9).

    •  Загрузите файл hyper.sav.

    •  Перейдите к исследованию данных, выбрав команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Explore... (Исследовать) Откроется диалоговое окно Explore.


    Рис. 10.1: Диалоговое окно Explore


    Поначалу вас может смутить то, что в этом диалоговом окне проводится различие между зависимыми переменными и факторами. Это означает, что можно выполнять анализ раздельно по группам наблюдений. В этом случае анализируемой переменной будет зависимая переменная, а группирующей переменной — фактор. Если же такой раздельный анализ проводить не требуется, список факторов не используется.


    В следующем разделе мы рассмотрим для начала такой анализ данных, который не должен производиться по группам раздельно.

    1.gif

    Изображение: 

    10.4.1 Анализ без группирующей переменной

    10.4.1 Анализ без группирующей переменной


    Проведем анализ возраста пациентов.

    •  Перенесите переменную а в список зависимых переменных (Dependent List). Так как сначала мы хотим выяснить, какие методы анализа выполняются по умолчанию, то не будем пока вносить никаких изменений в настройки.

    •  Запустите вычисление, щелкнув на кнопке ОК. Будут созданы следующие таблицы:

    Case Processing Summary (Обработанные наблюдения)


    Cases (Случаи)


    Valid (Допустимые)


    Missing (Отсутствующие)


    Total (Всего)


    N


    Percent


    N Percent


    N


    Percent


    Возраст


    174


    100,0%


    0 ,0%


    174


    100,0%


    Descriptives (Описательная статистика)


    Statistic


    Std. Error


    Возраст


    Mean (Среднее)


    62,11


    ,88


    95% Confidence Interval for Mean (95% доверительный интервал среднего)


    Lower Bound (Нижняя граница) Upper Bound (Верхняя граница)


    60,38 63,84


    5% Trimmed Mean (5% усеченное среднее)


    62,25


    Median (Медиана)


    63,00


    Variance (Дисперсия)


    133,358


    Std. Deviation (Стандартное отклонение)


    11,55


    Minimum (Минимум)


    36


    Maximum (Максимум)


    87


    Range (Размах)


    51


    Interquartile Range (Межквартильная широта)


    17,25


    Skewness (Асимметрия)


    -,143


    ,184


    Kurtosis (Коэффициент вариации)


    -,635


    ,366


    Возраст Stem-and-Leaf Plot (диаграмма ветвей и листьев)


    Frequency


    Stem &


    Leaf


    6,00


    3 .


    677999


    7,00


    4 .


    0223333


    14,00


    4 .


    66677788888999


    23,00


    5 .


    01111111122223333333444


    20,00


    5 .


    55667777778888888899


    27,00


    6 .


    000011111222333333333444444


    27,00


    6 .


    555555666666677888888999999


    24,00


    7 .


    000000011111122233333444


    13,00


    7 .


    5566666788899


    11,00


    8 .


    00001111224


    2,00


    8 .


    67


    Stem width :


    10


    Each leaf:


    1 case(s)


    В этом случае окно вывода результатов содержит:

    •  статистические характеристики,

    •  диаграмму stem-and-leaf (ветвей и листьев)

    •  коробчатую диаграмму (box plot).

    Большую часть статистических характеристик мы уже рассмотрели в главах 6 и 9. Появились новые характеристики:

    •  5% усеченное среднее: среднее значение, вычисленное без учета 5% наименьших и 5% наибольших значений.

    •  95% доверительный интервал: доверительный интервал, в котором находится среднее значение с вероятностью 95%.

    •  Межквартилъная широта: расстояние между первым и третьим квартилями.

    Диаграмма ветвей и листьев представляет собой комбинацию гистограммы и табличного списка. Как на гистограмме, длина каждой строки соответствует количеству наблюдений, попадающих в определенный интервал. Но, сверх этого, на данной диаграмме выводится также наблюдаемое численное значение для каждого наблюдения. Для этой цели численное значения разбиваются на два компонента: ветвь, представляющую собой первую цифру или группу цифр и лист — последующие цифры. Ветвь соответствует тем разрядам численного значения наблюдаемой переменной, которые не изменяются, а листья — разрядам, которые изменяются в пределах избранного интервала. В рассматриваемом примере ветви разбиты на две части — одну для листьев с 0 по 4 и другую — для листьев с 5 по 9.


    Коробчатая диаграмма состоит из прямоугольника, занимающего пространство от первого до третьего квартиля (то есть, от 25 до 75 процентиля). Линия внутри этого прямоугольника соответствует медиане. Кроме того, на коробчатой диаграмме отмечаются максимальное и минимальное значения, если только они не являются выбросами (см. ниже).


    Значения, удаленные от границ более чем на три длины построенного прямоугольника (экстремальные значения), помечаются на диаграмме звездочками. Значения, удаленные более чем на полторы длины прямоугольника, помечаются кружками.


    Теперь посмотрим, какие еще статистические характеристики можно вычислить в дополнение к стандартным.



    Рис. 10.2: Коробчатая диаграмма

    •  В диалоговом окне Explore щелкните на кнопке Statistics... (Статистика).

    Откроется диалоговое окно Explore: Statistics (см. рис. 10.3).

    •  Статистические характеристики, установленные по умолчанию уже вычислены, поэтому флажок для них (Descriptives) можно снять.

    •  Установите флажки для вычисления М-оценок Губера, Тьюки, Эндрюса и Хампеля (М-estimators), выбросов (Outliers) и процентилей (Percentiles).

    •  Закройте диалог, щелкнув на Continue, и запустите вычисления кнопкой ОК. Результат этих вычислений приводится ниже.

     



    Рис. 10.3: Диалоговое окно Explore: Statistics


    M-Estimators


    Huber's M-Estimator ia) (М-оценка Губера)


    Tukey's Biweight (b) (Оценка Тьюки)


    Hampel M-Estimator (с) (М-оценка Хампеля)


    Andrews' Wave (d) (Волна Эндрюса)


    Возраст


    62,38


    62,51


    62,31


    62,51


    a. The weighting constant is 1,339 (Весовая константа равна 1,339).


    b. The weighting constant is 4,685 (Весовая константа равна 4,685).


    с. The weighting constants are 1,700, 3,400 and 8,500 (Весовые константы равны 1,700, 3,400 и 8,500).


    d. The weighting constant is 1,340*pi (Весовая константа равна 1,340*pi).


    Percentiles


    Percentiles


     


    5


    10


    25


    50


    75


    90

    95

    Weighted Возраст Average(Definition 1 ) (Взвешенное среднее, определение 1 )


    42,00


    47,00


    53,00


    63,00


    70,25


    78,00


    81,00


    Tukey's Hinges Возраст (угловые точки Тьюки)


    53,00


    63,00


    70,00


    Extreme Values (Экстремальные значения)


    Case Number (Номер случая)


    Value (Значение)


    Возраст


    Highest (Наибольшие значения)


    1


    96


    87


    2


    53


    86


    3


    99


    84


    4


    86


    82


    5


    62


    82


    Lowest (Наименьшие значения)


    1


    68


    36


    2


    23


    37


    3


    64


    37


    4


    122


    39


    5


    45



    a. Only a partial list of cases with the value 39 are shown in the table of lower extremes (В таблице наименьших экстремальных значений показан только частичный список наблюдений со значением 39).


    В этих таблицах выводятся М-оценки Губера, Тьюки, Хампеля и волна Эндрюса. Основная идея М-оценок состоит в том, чтобы перед вычислением среднего значения присвоить отдельным наблюдениям разные веса. В распространенных М-оценках применяются веса, уменьшающиеся с удалением от центра распределения. Следовательно, обычное среднее значение можно рассматривать как М-оценку с единичными весами для всех наблюдений.


    Из возможных процентилей выводятся семь значений: для 5, 10, 25, 50, 75, 90 и 95 процентов. Дополнительно вычисляются угловые точки Тьюки: 25%, 50% и 75%-про-центили.


    В таблице «Экстремальные значения» выводятся пять наибольших и пять наименьших значений (выбросы).


    Теперь обратимся к диаграммам, которые можно построить при исследовании данных в SPSS.

    •  В диалоговом окне Explore щелкните на кнопке Plots... (Диаграммы). Откроется диалоговое окно Explore: Plots (см. рис. 10.4).

    С коробчатой диаграммой и диаграммой ветвей и листьев мы уже ознакомились.

    •  Поэтому в поле Boxplots (Коробчатые диаграммы) выберите опцию None (Нет) и снимите флажок Stem-and-leaf; вместо него установите флажок Histogram (Гистограмма).

    •  Щелкните на кнопке Continue, а затем на ОК. В окне просмотра появится гистограмма.


    Рис. 10.4: Диалоговое окно Explore: Plots



    Рис. 10.5: Гистограмма возрастной структуры


    Далее мы посмотрим, какие результаты можно получить, если установить в диалоговом окне Explore: Plots флажок Normality plots with tests (Диаграмма нормального распределения с тестами).

    •  Установите этот флажок и подтвердите настройку кнопкой ОК.

    В окне просмотра будет показан результат теста Лиллифора (модификации теста Колмогорова-Смирнова) на нормальное распределение.


    Если в результате получена вероятность ошибки р менее 0,05, то данное распределение значимо отличается от нормального. В данном примере при р = 0,200 распределение можно считать нормальным. При объеме выборки менее 50 наблюдений проводится также тест Шапиро-Уилкса.


    Tests of Normality (Тесты на нормальное распределение)


    Kolmoqorov-Smirnov (а) (Колмогоров-Смирнов)


    Statistic


    df


    Sig.


    Возраст


    ,059


    174


    ,200*


    *. This is a lower bound of the true significance (Это нижняя граница истинной значимости), a. Lilliefors Significance Correction (Коррекция значимости по Лиллифору).


    В окне просмотра будут показаны две диаграммы:

    •  диаграмма нормального распределения

    •  диаграмма с исключенным трендом

    По диаграмме нормального распределения (также называемой диаграммой Q-Q) можно визуально определить, достаточно ли близко заданное распределение приближается к нормальному. Здесь каждое наблюдаемое значение сравнивается со значением, ожидаемым при нормальном распределении. При условии точного выполнения нормального распределения все точки лежат на прямой. Наблюдаемые значения откладываются по оси X, а ожидаемые — по оси Y, при этом все значения подвергаются стандартизации (z-преобразованию). В данном примере (см. рис. 10.6) наблюдаемые значения достаточно близки к прямой.



    Рис. 10.6: Диаграмма нормального распределения


    На диаграмме с исключенным трендом отклонения наблюдаемых значений от ожидаемых при нормальном распределении представлены в зависимости от наблюдаемых значений. В случае нормального распределения все точки лежат на горизонтальной прямой, проходящей через нуль. Явное отклонение от прямой указывает на отличие распределения от нормального. На этой диаграмме все значения, также подвергаются стандартизации (z-преобразованию) (см. рис. 10.7).



    Рис. 10.7: Диаграмма с исключенным трендом


    Заканчивая рассмотрение диалога Explore... (Исследовать), следует упомянуть еще кнопку Options... (Параметры), которая позволяет задать способ обработки пропущенных значений, и содержит группу опций Display (Показывать). Последняя позволяет запретить вывод диаграмм или статистических таблиц.

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    10.4.2 Анализ для групп наблюдений

    10.4.2 Анализ для групп наблюдений


    Проанализируем исходное содержание холестерина (переменная cho10), которое содержится в файле hyper.sav, для четырех возрастных классов (переменная ak).

    •  В диалоговом окне Explore кнопкой Reset (Сброс) восстановите настройки по умолчанию и перенесите переменную cholO в список зависимых переменных (Dependent List), а переменную ak — в список факторов (Factor List).

    •  Щелкните на кнопке ОК.

    В результате будут вычислены характеристики описательной статистики и построена диаграмма ветвей и листьев раздельно по четырем возрастным классам. На коробчатой диаграмме соответственно появятся четыре прямоугольника (см. рис. 10.8).


    Остальные статистические параметры также можно вычислить раздельно по разным значениям группирующей переменной (в данном случае по возрастным классам). Это относится и к выводу гистограмм и диаграмм нормального распределения в окне просмотра.


    Далее можно проверить, значимо ли различаются группы наблюдений, образованные в соответствии со списком факторов, по дисперсиям зависимых переменных. В нашем примере можно выяснить, существуют ли значимые различия между пациентами четырех возрастных классов по разбросу содержания холестерина. Такая проверка гомогенности дисперсий необходима, например, если требуется провести для четырех возрастных группах простой дисперсионный анализ на сравнение средних (см. главу 13). Дисперсионный анализ как раз предусматривает гомогенность распределения дисперсий по отдельным ячейкам.

    •  В диалоговом окне Explore: Plots в группе Spread vs. Level with Levene Test (Зависимость «Разброс — средний уровень по тесту Левена») выберите опцию Power estimation (Экспоненциальная оценка).

    •  Запустите вычисления, щелкнув на Continue и ОК.


    Рис. 10.8: Коробчатая диаграмма по группам


    В результате во всех четырех вариантах будет проведен тест Левена на гомогенность дисперсий. Этот тест определяет уровень значимости (допустимую вероятность ошибки р. При р > 0,05 различие дисперсии между данными группами не значимо. Следовательно, их можно рассматривать как гомогенные. В данном примере тест Левена не дает значимого результата.


    Test of Homogenity of Variances (Тест на гомогенность дисперсий)


    Levene Statistic (Статистика Левена)


    df1


    df2


    Sig. (Значи-мость)


    холестерин, исходный


    Based on Mean (На основе среднего)


    ,190


    3


    170


    ,903


    Based on Median (На основе медианы)


    ,157


    3


    170


    ,925


    Based on Median and with adjusted df (Ha основе медианы и с уточненным df)


    ,157


    3


    169,024


    ,925


    Based on trimmed mean (На основе усеченного среднего)


    ,178


    3


    170


    ,912


    Далее выводится диаграмма, на которой для каждой группы изображена зависимость разброса значений от центрального значения. Точнее говоря, на оси X откладывается логарифм медианы, а на оси Y — логарифм межквартильной широты. Если дисперсии не гомогенны, а гетерогенны (тест Левена дает значимый результат, SPSS дает возможность провести так называемое степенное преобразование данных. Для этого выберите в диалоговом окне Explore: Plots опцию Transformed (С пре-5разованием) и в списке Power (Степень) выберите подходящую степень. Возможные степеные преобразования показаны в нижеследующей таблице.


    Степень


    Преобразование


    3


    кубическое


    2


    квадратное


    |


    квадратный корень


    В


    натуральный логарифм.


    -1/2


    величина, обратная квадратному корню


    -1


    обратная величина


    Успешность преобразования можно оценить, вновь построив зависимость разброса от среднего уровня (Spread vs. Level with Levene Test). Однако с такими преобразованиями следует обходиться очень осторожно. Нелинейные преобразования изменяют отношения между группами, и, кроме того, статистические суждения в таком случае основываются уже не на исходных, а на преобразованных значениях.

    8.gif

    Изображение: 

    Глава 11. Таблицы сопряженности

    Глава 11. Таблицы сопряженности

    1. Таблицы сопряженности

    Таблицы сопряженности


    До сих пор мы рассматривали только отдельные переменные. Мы проводили частотный анализ, а также описывали отдельные переменные статистическими характеристиками, такими как минимум, максимум и среднее значение. Методы анализа такого рода называются одномерными. В текущей главе мы перейдем к двумерному анализу и займемся выяснением вопроса, существует ли взаимосвязь между двумя или более переменными.


    В SPSS имеется большое количество разнообразных процедур, при помощи которых можно произвести анализ связи между двумя переменными. Связь между неметрическими переменными, то есть переменными, относящимися к номинальной шкалу или к порядковой шкале с не очень большим количеством категорий, лучше всего представить в форме таблиц сопряженности. Для этой цели в SPSS реализован тест %2, при котором проверяется, есть ли значимое различие между наблюдаемыми и ожидаемыми частотами. Кроме того, существует возможность расчета различных мер связанности. Восстановление зависимостей между метрическими переменными, то есть имеющими интервальную шкалу или шкалу отношений, рассматривается в главе 15.

    11.1 Создание таблиц сопряженности

    11.1 Создание таблиц сопряженности

    •  Загрузите файл studium.sav.

    •  Для создания таблиц сопряженности и вычисления меры связанности на их основе, выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности) Откроется диалоговое окно Crosstabs (см. рис. 11.1).

    Список исходных переменных содержит переменные открытого файла данных. Здесь можно выбрать переменные для строк и столбцов таблицы сопряженности. Для каждого сочетания двух переменных будет создана таблица сопряженности. Например, если в списке строк (Rows) находится три переменных, а в списке столбцов (Columns) — две, то мы получим 3*2 = 6 таблиц сопряженности. Сначала мы построим таблицу сопряженности из переменных sex (пол) и psyche (психическое состояние). Поступите следующим образом:

    •  Перенесите переменную sex в список строк, а переменную psyche — в список столбцов.


    Рис. 11.1: Диалоговое окно Crosstabs (Таблицы cопряженности)

    •  Щелкните на ОК, и будет создана таблица сопряженности в стандартном формате. В окне просмотра будут показаны следующие таблицы:

    Case Processing Summary (Обработанные наблюдения)


    Cases (Случаи)


    Valid (Допусти-мые)


    Missing (Отсутству-ющие)


    Total (Всего)


    N


    Percent


    N


    Percent


    N


    Percent


    Пол* Психическое состояние


    106


    98,1%


    2


    1,9%


    108


    100,0%


    Пол * Психическое состояние Crosstabulation (Таблица сопряженности)


    Count (Число)


    Психическое состояние


    Total


     


    Крайне неустой- чивое


    Неустой-чивое

    Устой-чивое Очень устойчивое

    Пол


    Женский


    16


    18

    9

    1


    44


    Мужской


    3


    22

    32

    5


    62


    Total


    19


    40

    41

    6


    106


    Первая таблица содержит информацию о числе самих наблюдений; два наблюдения содержат пропущенные значения по крайней мере в одной из двух участвующих переменных. Вторая таблица — это собственно таблица сопряженности. Переменная 'Психическое состояние" (psyche) является столбцовой переменной, так как каждое ее значение (крайне неустойчивое, устойчивое, ...) отображается в отдельном столбце. Переменная "Пол" (sex) — это переменная строк, так как каждое ее значение (женский, мужской) отображается в отдельной строке таблицы. Значение в каждой ячейке таблицы — количество наблюдений (частота). Так, например, здесь видно, что 16 респонденток оценивают свое психическое состояние как "крайне неустойчивое", а 5 респондентов-мужчин — как "очень устойчивое". Если для таблицы сопряженности приняты параметры по умолчанию, в каждой ячейке отображается только абсолютная частота. Метки переменных и значений в таблице соответствуют определениям переменных в файле данных SPSS. Числа в последней строке и в последнем столбце (Всего) показывают суммы значений соответственно по строкам и столбцам. В данном примере суммы по строкам указывают, что 44 (16+18+9+1) опрошенных — лица женского пола, а 62 — мужского. Суммы по столбцам показывают, что


    19 опрошенных (16 + 3) оценивают свое психическое состояние как "крайне неустойчивое", 40 как неустойчивое, 41 как устойчивое и 6 как очень устойчивое. При анализе принимались в расчет 106 допустимых наблюдений. Полученные результаты мы можем интерпретировать следующим образом:

    •  Из 106 опрошенных, которые учитывались при анализе, — 44 женщины и 62 мужчины.

    •  16 женщин оценивают свою психику как "крайне неустойчивую", тогда как для мужчин это количество составляет только 3.

    •  Лишь одна женщина считает свое психическое состояние "очень устойчивым", а мужчин с таким состоянием пятеро.

    Даже первое впечатление, которое возникает при анализе таблицы сопряженности, свидетельствует о том, что зависимость между переменными Пол и Психическое состояние существует. Женщины считают свое психическое состояние более неустойчивым, чем мужчины. Исследуем эту зависимость чуть более детально; для этого нам понадобится точно ответить на следующие вопросы:

    •  Существует ли зависимость вообще?

    •  Что можно сказать об интенсивности этой зависимости?

    •  Что можно сказать о направлении и характере этой зависимости?

    Более тщательно исследовать существование зависимости позволяет вычисление значений ожидаемых частот. Чтобы определить эти значения, выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    В списке строк у нас должна стоять переменная sex, а в списке столбцов — переменная psyche.

    •  Щелкните на кнопке Cells... (Ячейки). Откроется диалоговое окно Crosstabs: Cell Display (Таблицы сопряженности: Отображение ячеек).

    По умолчанию в ячейках таблицы сопряженности отображаются только наблюдаемые значения частот. В группе Counts (Частоты) можно выбрать один или более следующих вариантов отображения:

    •  Observed (наблюдаемые): Будут отображаться наблюдаемые частоты. Это настройка по умолчанию.

    •  Expected (Ожидаемые): Если установить этот флажок, будут отображаться ожидаемые частоты. Они вычисляются как произведение сумм соответствующей строки и столбца, деленное на общую сумму частот.


    Рис. 11.2: Диалоговое окно Crosstabs: Cell Display

    •  Установите флажок Expected.

    •  Щелкните на кнопке Continue, а затем на ОК. Вы получите следующую таблицу сопряженности.

    Пол * Психическое состояние Crosstabulation (Таблица сопряженности)


    Психическое состояние


    Крайне неустой-чивое


    Неусто- йчивое


    Устой-чивое


    Очень устой-чивое


    Total


    Пол


    женский


    Count


    16


    18


    9


    1


    44


    Expected Count (Ожида- емое число)


    7,9


    16,6


    17,0


    2,5


    44,0


    мужской


    Count


    3


    22


    32


    5


    62


    Expected Count


    11,1


    23,4


    24,0


    3,5


    62,0


    "Total


    Count


    19


    40


    41


    6


    106


    Expected Count


    19,0


    40,0


    41,0


    6,0


    106,0


    Теперь под наблюдаемыми частотами (Count) появились ожидаемые значения Expected Count). Эти данные мы можем интерпретировать так:


    Для значений переменной "психическое состояние" "крайне неустойчивое" и "неустойчивое" абсолютная частота у опрашиваемых женщин выше, чем ожидаемая (16 и 7,9; j и 16,6), тогда как при значениях "устойчивое" и "очень устойчивое" она ниже (9 и ".0; 1 и 2,5).


    У опрашиваемых мужчин мы находим противоположную тенденцию. Для значений ' крайне неустойчивое" и "неустойчивое" абсолютная частота ниже, чем ожидаемая (3 и ' 1.1; 22 и 23,4), тогда как для значений "устойчивое" и "очень устойчивое" она выше :2 и 24,0; 5и 3,5). Эти результаты мы можем объединить в следующую таблицу:


    крайне неустойчивое; неустойчивое


    очень устойчивое; устойчивое

    Женщины абс. частота > ожидаемой частоты  абс. частота < ожидаемой частоты 

    Мужщины


    абс. частота < ожидаемой частоты


    абс. частота > ожидаемой частоты


    Таким образом, наше первоначальное впечатление, что женщины считают свое психическое состояние менее устойчивым, чем мужчины, подтверждается. Еще одну возможность выявления существования зависимости между переменными дает вычисление остатков. Эти остатки являются показателем того, насколько сильно наблюдаемые и ожидаемые частоты отклоняются друг от друга. Чтобы получить остатки частот, выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    В списке переменных строк у нас должна стоять переменная sex, а в списке переменных столбцов — переменная psyche.

    •  Щелкните на кнопке Cells... Флажки Observed и Expected следует оставить помеченными.

    В группе Residuals (Остатки) можно выбрать один или более следующих вариантов отображения:

    •  Unstandardized (Ненормированные): Отображаются ненормированные остатки, то есть разность наблюдаемых (f) и ожидаемых (f) частот.

    •  Standardized (Нормированные): Отображаются нормированные остатки. Для этого ненормированные остатки делятся на квадратный корень из ожидаемой частоты:


    Нормированные остатки полезны при последующем проведении анализа тестов по критерию х2 (см. раздел 11.3.1).

    •  Adj. standardized (Уточненные нормированные): Нормированные остатки вычисляются с учетом сумм по строкам и столбцам:


    Здесь z — сумма по текущей строке, a s — сумма по текущему столбцу; N — общая сумма частот.

    •  Установите флажок Unstandardized.

    •  Щелкните на кнопке Continue, а в главном диалоговом окне — на ОК. Вы получите следующую таблицу сопряженности.

    Пол * Психическое состояние Таблица сопряженности


    9



    Психическое состояние


    Total




    Крайне неустой-чивое Неустой-чивое

    Устой-чивое

    Очень устой-чивое

    Пол


    жен-ский


    Count

    16 18

    1


    44


    Expected Count

    7,9 16,6

    17,0


    2,5


    44,0


    Residual (Остаток)

    8,1 1,4

    -8,0


    -1,5



    муж-ской


    Count

    3 22

    32


    5


    62


    Expected Count

    11,1 23,4

    24,0


    3,5


    62,0


    Residual

    -8,1 -1,4

    8,0


    1,5



    Total



    Count

    19 40

    41


    6


    106


    Expected Count

    19,0 40,0

    41,0


    6,0


    106,0


    Можно заметить, что каждый остаток равен разности наблюдаемой и теоретически ожидаемой частот в данной ячейке (например, в первой ячейке 16 - 7,9 = 8,1). Остатки делают еще более заметной противоположную тенденцию самооценки у мужчин и женщин.


    Таблицы сопряженности, которые мы рассмотрели выше, имеют тот недостаток, что в них приводятся только абсолютные значения. Чтобы узнать, насколько эти значения важны по отношению к общему количеству, надо определить их процентную долю для вычисления процентных значений выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Cmsstabs... (Таблицы сопряженности)

    •  Не изменяя прежних настроек, щелкните на кнопке Cells... Откроется диалоговое окно Crosstabs: Cell Display (Таблицы сопряженности: Отображение ячеек). В группе Percentages (Проценты) можно выбрать один или более из нижеследующих вариантов отображения:

    •  Row (По строкам): Вычисляются процентные значения по строкам: количество наблюдений в каждой ячейке, отнесенное к сумме по строке.

    •  Column (По столбцам): Вычисляются процентные значения по столбцам: количество наблюдений в каждой ячейке в отношении к сумме столбца.

    •  Total (Полные): Вычисляются полные процентные значения: количество наблюдений в каждой ячейке, отнесенное к общей сумме наблюдений.

    Пол * Психическое состояние Таблица сопряженности

       

    Психическое состояние


    Total




    Крайне неустой-чивое

    Неустой-чивое


    Устой-чивое

    Очень устой-чивое

    Пол


    жен-ский


    Count

    16

    18


    9


    1


    44


    Expected Count

    7,9

    16,6


    17,0


    2,5


    44,0


    % от Пол

    36,4%

    40,9%


    20,5%


    2,3%


    100,0 %


    % от Психическое состояние

    84,2%

    45,0%


    22,0%


    16,7%


    41,5%


    % of Total

    15,1%

    17,0%


    8,5%


    ,9%


    41.5%


    Residual

    8,1

    1,4


    -8,0


    -1.5



    муж-ской


    Count

    3

    22


    32


    5


    62


    Expected Count

    11,1

    23,4


    24,0


    3,5


    62,0


    % от Пол

    4,8%

    35,5%


    51,6%


    8.1%


    100,0


    %


    % от Психическое состояние

    15,8%

    55,0%


    78,0%


    83,3%


    56,5%


    % of Total

    2,8%

    20,8%


    30,2%


    4,7%


    58,5%


    Residual

    -8,1

    -1,4


    8,0


    1,5



    Тotal


    Count

    19

    40


    41


    6


    106


    Expected Count

    19,0

    40,0


    41,0


    6,0


    106,0


    % от Пол

    17,9%

    37,7%


    38,7%


    5,7%


    100.0


    %


    % от Психическое состояние

    100,0%

    100,0%


    100,0 %


    100.0%


    100,0


    %


    % of Total

    17,9%

    37,7%


    38,7%


    5,7%


    100,0


    %

    •  Установите флажки Row, Column и Total.

    •  Щелкните на кнопке Continue, а в главном диалоговом окне — на ОК. В окне просмотра результатов будет получена таблица сопряженности, приведенная выше.

    В ней дополнительно отображаются процентные значения частот по отношению к суммам строк, столбцов и общей сумме.


    Возьмем для примера первую ячейку. Значения, содержащиеся в ней можно интерпретировать следующим образом:

    •  16 из 44 женщин-респонденток или 36,4% от общего числа опрашиваемых охарактеризовали свое психическое состояние как "крайне неустойчивое".

    •  Из 19 респондентов с "крайне неустойчивым" состоянием 16 — женщины, что составляет 84,2%.

    •  16 женщин-респонденток дали ответ "крайне неустойчивое", что по отношению ко всей таблице (общему количеству респондентов) составляет 15,1%.

    Можно также сделать следующие общие выводы:

    •  36,4% женщин оценивают свою психику как "крайне неустойчивую", тогда как среди мужчин эта доля составляет только 4,8%.

    •  Среди опрашиваемых, оценивающих свою психику как "крайне неустойчивую", женщины составляют 84,2%, а мужчины — лишь 15,8%.

    •  77,3% (36,4% + 40,9%) женщин считают свое психическое состояние "крайне неустойчивым" или "неустойчивым", в то время, как только 40,3 % (4,8 % + 35,5 %) мужчин дают такую же оценку своего психического состояния.

    •  22,8% (20,5 %+ 2,3%) женщин и 59,7% (51,6% + 8,1%) мужчин оценивают свою психику как "устойчивую" или "очень устойчивую".

    •  2,3% женщин оценивают свое психическое состояние как "очень устойчивое", а среди мужчин эта доля составляет 8,1%.

    •  Среди опрашиваемых, оценивающих свою психику как "очень устойчивую", женщины составляют 16,7%, а мужчины — 83,3%.

    На вопрос, существует ли зависимость между переменными sex и psyche, наиболее ясный ответ в данном примере дают процентные частоты по столбцам. Эти частоты сведены в следующую таблицу:


    Крайне неустойчивое


    Неустой-чивое


    Устой-чивое


    Очень устойчивое

    Женский    84,2 45,0  22,0 16,7 
       Мужской 

      1 5,8


    55,0


     78,0


    83,3


    Так как в нашем случае процентные распределения значительно различаются, мы можем сделать вывод о существовании статистической зависимости между признаками sex и psyche. Значительно больше женщин, чем мужчин, оценивают свое психическое состояние как "крайне неустойчивое", и значительно больше мужчин, чем женщин, оценивают свое психическое состояние как "очень устойчивое". Таким образом, наблюдается различие в оценках психического состояния, связанное с полом. Является ли это различие значимым, можно выяснить при помощи хи-квадрат-теста (см. раздел 11.3.1).


    Форматы таблиц сопряженности


    Можно изменить порядок сортировки переменных строк в таблице сопряженности, щелкнув в диалоговом окне Crosstabs на кнопке Formal... (Формат). Откроется диалоговое окно Crosstabs: Table Format (Таблицы сопряженности: Формат таблицы).


    В группе Row Order (Порядок строк) можно выбрать один из следующих вариантов сортировки значений:

    •  Ascending (По возрастанию): Значения переменных строк отображаются в порядке возрастания от наименьшего к наибольшему. Это настройка по умолчанию.

    •  Descending (По убыванию): Значения переменных строк отображаются в порядке убывания от наибольшего к наименьшему.


    Рис. 11.3: Диалоговое окно Crosstabs: Table Format


    Применение переменных групп и слоев


    Созданные выше таблицы сопряженности можно разделить по специальностям. Вполне может быть, что переменная fach (Специальность) оказывает влияние на зависимость между sex и psyche. Чтобы выявить возможные различия, следует создать отдельные таблицы, в нашем случае — по одной таблице для каждой специальности. Такие таблицы могут выявить интересные различия между отдельными специальностями. В рассматриваемом примере переменная fach играет роль переменной слоев. Анализ производится по группам, то есть для каждой группы — в нашем случае для каждой специальности — составляется отдельная таблица сопряженности.


    Чтобы задать переменную слоев, поступите так:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблица сопряженности)

    В списке строк у нас должна стоять переменная sex, а в списке столбцов — переменная psyche.

    • Перенесите переменную fach в список переменных слоев. В диалоговом окне это третий сверху список; он еще пуст. Диалоговое окно Crosstabs приобретет вид, показанный на рис. 11.4.


    Рис. 11.4: Заполненное диалоговое окно Crosstabs


    Можно выбрать другие уровни переменных слоев. Для каждой категории каждой из переменной слоев будет создана отдельная таблица сопряженности. Чтобы добавить новый слой, щелкните на кнопке Next (Следующий). Каждый последующий уровень делит таблицу сопряженности на меньшие подгруппы. Переходить от одного слоя к другому можно при помощи кнопок Next и Previous (Предыдущий).

    •  Щелкните на ОК. Вы получите таблицы сопряженности переменных sex и psyche отдельно для каждой специальности. Предоставляем вам самостоятельно интерпретировать их содержание.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    11.2 Графическое представление таблиц сопряженности

    11.2 Графическое представление таблиц сопряженности


    Чтобы сделать более наглядными данные, содержащиеся в таблицах сопряженности, их можно представить визуально. Для этого поступите следующим образом:

    •  Выберите в меню команды Graphs (Графики) Ваr... (Столбчатые) Откроется диалоговое окно Bar Charts (Столбчатые диаграммы).

    •  Выберите пункт Clustered (Группированные), оставьте предлагаемую по умолчанию опцию Summaries for groups of cases (Сводка категорий переменной) и щелкните на кнопке Define (Определить). Откроется диалоговое окно Define Clustered Bar: Summaries for groups of cases (Определить столбчатую диаграмму: Сводка категорий переменной).

    •  Выберите пункт % of cases (% наблюдений).

    •  Перенесите переменную psyche в поле Category Axis (Ось категорий), а переменную sex — в поле Define Clusters by (Определить группы по).

    •  Щелкните на кнопке Titles... (Заголовки). Откроется диалоговое окно Titles (см. рис. 11.6).

    •  В поле Line 1 (Строка 1) введите заголовок "Психическое состояние в зависимости от пола", в поле Subtitle — подзаголовок "Изучение психического состояния и социального положения студентов", а в поле Footnote, Line 1 (Нижний колонтитул, строка 1) — текст "Опрос студентов WS 93/94". Подтвердите ввод кнопкой Continue.

    •  Щелкните на кнопке Options... (Параметры). Откроется диалоговое окно Options.


    Рис. 11.5: Диалоговое окно Define Clustered Bar: Summaries for groups of cases



    Рис. 11.6: Диалоговое окно Titles



    Рис. 11.7: Диалоговое окно Options

    •  Снимите в нем флажок Display groups defined by missing values (Отображать группы, образование пропущенными значениями).

    •  Щелкните на кнопке Continue, а затем на ОК. В окне просмотра появится график.

    •  Дважды щелкните на этом графике — откроется редактор диаграмм, в котором его можно править.

    •  Выберите в меню команды Format (Формат) Bar Label Style... (Стиль меток столбцов) Откроется диалоговое окно Bar Label Style.

    •  Выберите пункт Framed (В рамках), щелкните на кнопке Apply all (Применить для всех) и затем на Close (Закрыть).

    •  Щелкните на одном из столбцов, отображающем психическое состояние женщин, или в легенде на поле "женский". Столбцы, отображающие психическое состояние женщин, будут выделены. Это можно определить по маленьким черным квадратикам на углах столбцов.

    •  Выберите в меню команды Format (Формат) Color... (Цвет)

    Откроется диалоговое окно Colors (Цвета). Здесь можно изменить стандартный цвет столбцов, а также цвет их контура.

    •  Щелкните на сером поле, а затем на кнопках Apply (Применить) и Close (Закрыть).

    •  Таким же способом измените цвет столбцов для мужчин на черный.

    •  В заключение вызовите команды меню Chart (Диаграмма) Outer Frame (Внешняя рамка)

    Получится графическое представление таблицы сопряженности, показанное на рис. 11.8.


    Можно не вызывать меню Graph, а просто установить в диалоге Crosstabs флажок Display clustered bar charts (Показывать столбчатые кластеризованные диаграммы). Тогда на диаграмме будут показаны две группы столбцов для двух переменных строк. Чтобы придать диаграмме такой вид, как на рис. 11.8, надо поменять переменные строк и столбцов местами.

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    11.3 Статистические критерии для таблиц сопряженности

    11.3 Статистические критерии для таблиц сопряженности


    Чтобы получить статистические критерии для таблиц сопряженности, щелкните на кнопке Statistics... (Статистика) в диалоговом окне Crosstabs. Откроется диалоговое окно Crosstabs: Statistics (Таблицы сопряженности: Статистика) (см. рис. 11.9).


    Флажки в этом диалоговом окне позволяют выбрать один или несколько критериев.

    •  Тест хи-квадрат (X2)

    •  Корреляции

    •  Меры связанности для переменных, относящихся к номинальной шкале

    •  Меры связанности для переменных, относящихся к порядковой шкале

    •  Меры связанности для переменных, относящихся к интервальной шкале

    •  Коэффициент каппа (к)


    Рис. 11.8: Графическое представление: столбчатая диаграмма



    Рис. 11.9: Диалоговое окно Crosstabs: Statistics

    •  Мера риска

    •  Тест Мак-Немара

    •  Статистики Кохрана и Мантеля-Хэнзеля

    Эти критерии рассматриваются в двух последующих разделах, причем из-за того, что критерий хи-квадрат имеет большое значение в статистических вычислениях, ему посвящен отдельный раздел.

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    11.3.1 Тест хи-квадрат

    11.3.1 Тест хи-квадрат (X2)


    При проведении теста хи-квадрат проверяется взаимная независимость двух переменных таблицы сопряженности и благодаря этому косвенно выясняется зависимость обоих переменных. Две переменные считаются взаимно независимыми, если наблюдаемые частоты (f0) в ячейках совпадают с ожидаемыми частотами (fe).


    Для того, чтобы провести тест хи-квадрат с помощью SPSS, выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  Кнопкой Reset (Сброс) удалите возможные настройки.

    •  Перенесите переменную sex в список строк, а переменную psyche — в список столбцов.

    •  Щелкните на кнопке Cells... (Ячейки). В диалоговом окне установите, кроме предлагаемого по умолчанию флажка Observed, еще флажки Expected и Standardized. Подтвердите выбор кнопкой Continue.

    •  Щелкните на кнопке Statistics... (Статистика).

    Откроется описанное выше диалоговое окно Crosstabs: Statistics.

    •  Установите флажок Chi-square (Хи-квадрат). Щелкните на кнопке Continue, а в главном диалоговом окне — на ОК.

    Вы получите следующую таблицу сопряженности.


    Пол * Психическое состояние Таблица сопряженности

       

    Психическое состояние


    Total




    Крайне неустой-чивое

    Неустой-чивое


    Устой-чивое

    Очень устойчивое

    Пол


    женский


    Count

    16

    18


    9


    1


    44


    Expected Count

    7,9

    16,6


    17,0


    2,5


    44,0


    Std. Residual

    2,9

    ,3


    -1,9


    -.9



    Мужской


    Count

    3

    22


    32


    5


    62


    Expected Count

    11,1

    23,4


    24,0


    3,5


    62,0


    Std. Residual

    -2,4

    -,3


    1,6


    ,8



    Total



    Count

    19

    40


    41


    6


    106


    Expected Count

    19,0

    40,0


    41,0


    6,0


    106,0


    Кроме того, в окне просмотра будут показаны результаты теста хи-квадрат: 


    Chi-Square Tests (Тесты хи-квадрат)


    Value (Значение)


    df


    Asymp. Sig. (2-sided) (Асимптотическая значимость (двусторонняя))


    Pearson Chi-Square (Хи-квадрат по Пирсону)


    22,455 (а)


    3


    ,000


    Likelihood Ratio (Отношение правдоподобия)


    23,688


    3


    ,000


    Linear-by-Linear Association (Зависимость линейный-линейный)


    20,391


    1


    ,000


    N of Valid Cases (Кол-во допустимых случаев)


    106


    а. 2 cells (25,0%) have expected count less than 5. The minimum expected count is 2,49 (2 ячейки (25%) имеют ожидаемую частоту менее 5. Минимальная ожидаемая частота 2,49.)


    Для вычисления критерия хи-квадрат применяются три различных подхода: формула Пирсона, поправка на правдоподобие и тест Мантеля-Хэнзеля. Если таблица сопряженности имеет четыре поля и ожидаемая вероятность менее 5, дополнительно выполняется точный тест Фишера.


    Критерий хи-квадрат по Пирсону


    Обычно для вычисления критерия хи-квадрат используется формула Пирсона:


    Здесь вычисляется сумма квадратов стандартизованных остатков по всем полям таблицы сопряженности. Поэтому поля с более высоким стандартизованным остатком вносят более весомый вклад в численное значение критерия хи-квадрат и, следовательно, — в значимый результат. Согласно правилу, приведенному в разделе 8.7.2, стандартизованный остаток 2 или более указывает на значимое расхождение между наблюдаемой и ожидаемой частотами.


    В рассматриваемом нами примере формула Пирсона дает максимально значимую величину критерия хи-квадрат (р<0,001). Если рассмотреть стандартизованные остатки в отдельных полях таблицы сопряженности, то на основе вышеприведенного правила можно сделать вывод, что эта значимость в основном определяется полями, в которых переменная psyche имеет значение "крайне неустойчивое". У женщин это значение сильно повышено, а у мужчин — понижено.


    Корректность проведения теста хи-квадрат определяется двумя условиями: во-первых, ожидаемые частоты < 5 должны встречаться не более чем в 20 % полей таблицы; во-вторых, суммы по строкам и столбцам всегда должны быть больше нуля.


    Однако в рассматриваемом примере это условие выполняется не полностью. Как указывает примечание после таблицы теста хи-квадрат, 25 % полей имеют ожидаемую частоту менее 5. Однако, так как допустимый предел4в 20 % превышен лишь ненамного и эти поля, вследствие своего очень малого стандартизованного остатка, вносят весьма незначительную долю в величину критерия хи-квадрат, это нарушение можно считать несущественным.


    Критерий хи-квадрат с поправкой на правдоподобие


    Альтернативой формуле Пирсона для вычисления критерия хи-квадрат является поправка на правдоподобие:


    При большом объеме выборки формула Пирсона и подправленная формула дают очень близкие результаты. В нашем примере критерий хи-квадрат с поправкой на правдоподобие составляет 23,688.


    Тест Мантеля-Хэнзеля


    Дополнительно в таблице сопряженности под обозначением linear-by-linear ("линейный-по-линейному") выводится значение теста Мантеля-Хэнзеля (20,391). Эта форма критерия хи-квадрат с поправкой Мантеля-Хэнзеля — еще одна мера линейной зависимости между строками и столбцами таблицы сопряженности. Она определяется как произведение коэффициента корреляции Пирсона на количество наблюдений, уменьшенное на единицу:


    Полученный таким образом критерий имеет одну степень свободы. Метод Мантеля-Хэнзеля используется всегда, когда в диалоговом окне Crosstabs: Statistics установлен флажок Chi-square. Однако для данных, относящихся к с номинальной шкале, этот критерий неприменим.

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    11.3.2 Коэффициенты корреляции

    11.3.2 Коэффициенты корреляции


    До сих пор мы выясняли лишь сам факт существования статистической зависимости между двумя признаками. Далее мы попробуем выяснить, какие заключения можно сделать о силе или слабости этой зависимости, а также о ее виде и направленности. Критерии количественной оценки зависимости между переменными называются коэффициентами корреляции или мерами связанности. Две переменные коррелируют между собой положительно, если между ними существует прямое, однонаправленное соотношение. При однонаправленном соотношении малые значения одной переменной соответствуют малым значениям другой переменной, большие значения — большим. Две переменные коррелируют между собой отрицательно, если между ними существует обратное, разнонаправленное соотношение. При разнонаправленном соотношении малые значения одной переменной соответствуют большим значениям другой переменной и наоборот. Значения коэффициентов корреляции всегда лежат в диапазоне от -1 до +1.


    В качестве коэффициента корреляции между переменными, принадлежащими порядковой шкале применяется коэффициент Спирмена, а для переменных, принадлежащих к интервальной шкале — коэффициент корреляции Пирсона (момент произведений). При этом следует учесть, что каждую дихотомическую переменную, то есть переменную, принадлежащую к номинальной шкале и имеющую две категории, можно рассматривать как порядковую.


    Для начала мы проверим существует ли корреляция между переменными sex и psyche из файла studium.sav. При этом мы учтем, что дихотомическую переменную sex можно считать порядковой. Выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  Перенесите переменную sex в список строк, а переменную psyche — в список столбцов.

    •  Щелкните на кнопке Statistics... (Статистика). В диалоге Crosstabs: Statistics установите флажок Correlations (Корреляции). Подтвердите выбор кнопкой Continue.

    •  В диалоге Crosstabs откажитесь от вывода таблиц, установив флажок Supress tables (Подавлять таблицы). Щелкните на кнопке ОК.

    Будут вычислены коэффициенты корреляции Спирмена и Пирсона, а также проведена проверка их значимости:


    Symmetric Measures (Симметричные меры)

     

    Value (Значение)


    Asympt. Std. Error (а) Асимпто-тическая стандарт-ная ошибка)


    Approx. Т (b) (Приблиз. Т)


    Approx. Sig. (Приблизи- тельная значи-мость)


    Interval by Interval (Интерваль- ный-интерваль- ныи)


    Pearson's R (R Пирсона)


    ,441


    ,081


    5,006


    ,000 (с)


    Ordinal by Ordinal (Порядковый-порядковый)


    Spearman Correlation (Корреляци я по Спирмену)


    .439


    ,083


    4,987


    ,000 (с)


    N of Valid Cases (Кол-во допустимых случаев)



    106





    a. Not assuming the null hypothesis (Нулевая гипотеза не принимается).


    b. Using the asymptotic standard error assuming the null hypothesis (Используется асимптотическая стандартная ошибка с принятием нулевой гипотезы).


    с. Based on normal approximation (На основе нормальной аппроксимации).


    Так как здесь нет переменных с интервальной шкалой, мы рассмотрим коэффициент корреляции Спирмена. Он составляет 0,439 и является максимально значимым (р<0,001).


    Для словесного описания величин коэффициента корреляции применяется следующая таблица:


    Значение коэффициента корреляции r


    Интерпретация


    0 < г <= 0,2


    0,2 < г <= 0,5 


    0,5 < г <= 0,7 


    0,7 < г <= 0,9


    0,9 < г <= 1


    Очень слабая корреляция


     Слабая корреляция


     Средняя корреляция


     Сильная корреляция


     Очень сильная корреляция


    Исходя из вышеприведенной таблицы, можно сделать следующие заключения: Между переменными sex и psyche существует слабая корреляция (заключение о силе зависимости), переменные коррелируют положительно (заключение о направлении зависимости).


    В переменной psyche меньшие значения соответствуют отрицательному психическому состоянию, а большие — положительному. В переменной sex, в свою очередь, значение "1" соответствует женскому полу, а "2" — мужскому.


    Следовательно, однонаправленность соотношения можно интерпретировать следующим образом: студентки оценивают свое психическое состояние более негативно, чем '.х коллеги-мужчины или, что вероятнее всего, в большей степени склонны согласиться на такую оценку при проведении анкетирования. Строя подобные интерпретации, нужно учитывать, что корреляция между двумя признаками не обязательно равнозначна их Функциональной или причинной зависимости. Подробнее об этом см. в разделе 15.3.


    Теперь проверим корреляцию между переменными alter и semester. Применим методику, описанную выше. Мы получим следующие коэффициенты:


    Symmetric Measures


    Value


    Asympt. Std. Error (a)


    Approx. Т (b)


    Approx. Sig.


    Interval by  Interval


    Pearson's R


    ,807


    ,041


    13,930


    ,000 (c)


    Ordinal by Ordinal


    Spearman Correlation


    ,743


    ,060


    11,310


    ,000 (c)


    N of Valid Cases


    106


    a. Not assuming the null hypothesis (Нулевая гипотеза не принимается).


    э. Using the asymptotic standard error assuming the null hypothesis (Используется асимптотическая стандартная ошибка с принятием нулевой гипотезы).


    с. Based on normal approximation (На основе нормальной аппроксимации).


    Так как переменные alter и semester являются метрическими, мы рассмотрим коэффициент Пирсона (момент произведений). Он составляет 0,807. Между переменными alter и semester существует сильная корреляция. Переменные коррелируют положительно. Следовательно, старшие по возрасту студенты учатся на старших курсах, что, собственно, не является неожиданным выводом.


    Проверим на корреляцию переменные sozial (оценку социального положения) и psyche. Мы получим следующие коэффициенты:


    Symmetric Measures


    Value


    Asympt. Std. Error (a)


    Approx. Т (b)


    Approx. Sig.


    Interval by Interval


    Pearson's R


    -,688


    ,057


    -9,703


    ,000 (c)


    Ordinal by Ordinal


    Spearman Correlation


    -,703


    ,059


    -10,123


    ,000 (c)


    N of Valid Cases


    107


    a. Not assuming the null hypothesis (Нулевая гипотеза не принимается).


    b. Using the asymptotic standard error assuming the null hypothesis (Используется асимптотическая стандартная ошибка с принятием нулевой гипотезы).


    с. Based on normal approximation (На основе нормальной аппроксимации).


    В этом случае мы рассмотрим коэффициент корреляции Спирмена; он составляет -0,703. Между переменными sozial и psyche существует средняя или сильная корреляция (граничное значение 0,7). Переменные коррелируют отрицательно, то есть чем больше значения первой переменной, тем меньше значения второй и наоборот. Так как малые значения переменной sozial характеризуют позитивное состояние (1 = очень хорошее, 2 = хорошее), а большие значения psyche — отрицательное состояние (1 = крайне неустойчивое, 2 = неустойчивое), следовательно, психологические затруднения во многом обусловлены социальными проблемами.

    11.3.3 Меры связанности для переменных с номинальной шкалой

    11.3.3 Меры связанности для переменных с номинальной шкалой


    Коэффициент корреляции нельзя применять в качестве характеристики зависимости между переменными, если эти переменные принадлежат к номинальной шкале и имеют более двух категорий, потому что между их кодировками невозможно установить порядкового отношения и, следовательно, они не могут быть расположены в определенном, рационально объяснимом порядке.


    Наилучшим средством для анализа таких зависимостей считается представленный в разделе 11.3.1 тест хи-квадрат, после которого при необходимости можно провести анализ наблюдаемых и ожидаемых частот, а также нормированных остатков. Этот анализ был описан в разделе 8.7.2.


    Тем не менее и в этом случае также производились попытки разработать критерии количественной оценки степени связанности двух переменных, поставленных во взаимное соответствие. Эти критерии показывают степень взаимной зависимости или независимости двух переменных, принадлежащих к с номинальной шкале, причем значение 0 соответствует полной независимости переменных, а 1 — их максимальной зависимости. Меры связанности не могут иметь отрицательных значений, так как при отсутствии порядкового отношения нельзя дать ответа на вопрос о направлении зависимости.


    В опросе членов городской организации одной из политических партий среди прочего выяснялось их занятие и определялось, выполняет ли респондент какую-либо партийную функцию. Выдержка из ответов респондентов-мужчин содержится в файле partei.sav.

    •  Загрузите файл partei.sav и создайте таблицу сопряженности с переменной funk в строках и переменной beruf в столбцах. 

    •  Задайте вывод ожидаемых частот, стандартизованных остатков, процентов по столбцам и критерия хи-квадрат.

    Занятие * Партийная работа Crosstabulation (Таблица сопряженности)


    Занятие


    Total




    Наемный работник

    Государст- венный служащий

    Предпри-ниматель

    Партийная работа


    да


    Count

    13

    16


    7


    36


    Expected Count

    12,4

    10,1


    13,5


    36,0


    % от Занятие

    59,1%

    88,9%


    29,2%


    56,3%


    Std. Residual

    ,2

    1,8


    -1,8



    нет


    Count

    9

    2


    17


    28


    Expected Count

    9,6

    7,9


    10,5


    28,0


    % от Занятие

    40,9%

    11,1%


    70.8%


    43,8%


    Std. Residual

    -,2

    -2,1


    2,0



    Total


    Count

    22

    18


    24


    64


    Expected Count

    22,0

    18,0


    24,0


    64,0


    % от Занятие

    100,0%

    100,0%


    100,0%


    100,0%


    Chi-Square Tests


    Value


    df


    Asymp. Sig. (2-sided)


    Pearson Chi-Square (Критерий хи-квадрат по Пирсону)


    15,01 7 (a)


    2


    ,001


    Likelihood Ratio (Отношение правдоподобия)


    16,421


    2


    ,000


    Li near-by-Li near Association (Зависимость линейный-линейный)


    4,420


    1


    ,036


    N of Valid Cases


    64


    а. и cells (,0%) have expected count less than 5. The minimum expected count is 11,50. (0 ячеек (,0%) имеют ожидаемую частоту менее 5. Минимальная ожидаемая частота 7,88.)


    Результат получился максимально значимым: участие в партийной работе весьма характерно для государственных служащих, а для предпринимателей — совсем не характерно, тогда как наемные работники находятся посредине. Теперь зададим (кнопкой Statistics...) вывод всех мер связанности для переменных, принадлежащих к номинальной шкале (флажки в группе Nominal).


    Directional Measures (Направленные меры)



    Value


    Asympt. Std. Error (a)


    Approx. Т (b)


    Approx.


    sig.


    Nominal by Nominal (Номиналь- ный-номина- льный)


    Lambda (Лямбда)


    Symmetric (Симметри- ческая)


    ,279


    ,104


    2,554


    ,011


    Партийная работа Dependent (B зависимости от Партийная работа)


    ,357


    ,140


    ,211


    ,035


    Занятие Dependent (В зависимости от Занятие)


    ,225


    ,106


    1,930


    ,054


    Goodman and Kruskal tau (Tay Гудмена-Крускала)


    Партийная работа Dependent


    ,235


    ,093



    ,001 (c)


    Занятие Dependent


    ,116


    ,051



    ,001 (c)


    Uncertainty Coefficient (Коэффициент неопреде- ленности)


    Симметричный


    ,144


    ,063


    2,269


    ,000 (d)


    Партийная работа Dependent


    ,187


    ,082


    2,269


    ,000 (d)


    Занятие Dependent


    ,118


    ,052


    2,269


    ,000 (d)


    a. Not assuming the null hypothesis (Нулевая гипотеза не принимается).


    b. Using the asymptotic standard error assuming the null hypothesis (Используется асимптотическая стандартная ошибка с принятием нулевой гипотезы).


    с. Based on chi-square approximation (На основе аппроксимации по распределению хи-квадрат).


    d. Likelihood ratio chi-square probability (Степень правдоподобия при распределении вероятности по закону хи-квадрат).


    Symmetric Measures (Симметричные меры)


    Value


    Approx. Sig.


    Nominal by Nominal (Номинальный-номинальный)


    Phi (Фи)


    ,484


    ,001


    Cramer's V (V Крамера)


    ,484


    ,001


    Contingency Coefficient (Коэффициент сопряженности признаков)


    ,436


    ,001


    N of Valid Cases


    64


    a. Not assuming the null hypothesis (Нулевая гипотеза не принимается).


    b. Using the asymptotic standard error assuming the null hypothesis (Используется асимптотическая стандартная ошибка с принятием нулевой гипотезы).


    Коэффициент сопряженности признаков (Пирсона)


    Его величина всегда находится в пределах от 0 до 1 и вычисляется (как и значения критериев Фишера (<р) и Крамера (V)) с использованием значения критерия хи-квадрат:


    Здесь N — общая сумма частот в таблице сопряженности. Так как N всегда больше нуля, коэффициент сопряженности признаков никогда не достигает единицы. Максимальное значение зависит от количества строк и столбцов таблицы сопряженности и в таблице размером 3*2 составляет (как в данном примере) 0,762. По этой причине коэффициенты сопряженности признаков для двух таблиц с разным количеством полей несопоставимы.


    Критерий Фишера (<р)


    Этот коэффициент можно использовать только для таблиц 2*2, так как в других случаях он может превысить значение 1:


    Критерий Крамера (V)


    Этот критерий представляет собой модификацию критерия Фишера и для любых таблиц сопряженности он дает значение в пределах от 0 до 1, включая 1:


    Здесь k — наименьшее из количеств строк и столбцов.


    Три названных критерия основаны на использовании критерия хи-квадрат. Они различными способами нормируют его значение по отношению к размеру выборки. Так, если формуле для V Крамера положить k = 2, то значения (р и V Крамера совпадут. Определение значимости основано на значении критерия хи-квадрат.


    При оценке полученных значений мер связанности, находящихся в нашем примере в промежутке между 0,4 и 0,5, следует учесть, что значение 1 достигается очень редко или вообще никогда. Другие меры связанности (Я, т Гудмена-Крускала и коэффициент неопределенности) определяются на основе так называемой концепции пропорционального сокращения ошибки. При определении этих критериев одна переменная рассматривается как зависимая; по этой причине данные критерии называются "направленными мерами".


    Лямбда 


    В данном примере вопрос о партийной работе можно рассматривать как зависимую переменную, определяемую родом занятий. Если для какого-то отдельно взятого человека надо сделать предположение о том, выполняет ли он партийную работу или нет, то, естественно, делается наиболее вероятное предположение, соответствующее наиболее часто даваемому ответу — в данном случае, предположение о том, что опрашиваемый занимается партийной работой. Такой ответ дают 56,3% респондентов; однако в 43,7% наблюдений наше предположение будет неверным.


    Вероятность предположения можно повысить, если учитывать другую переменную — род занятий. Для наемных работников, как и для государственных служащих, можно достаточно уверенно прогнозировать участие в партийной работе, причем этот прогноз окажется неверным для 9 наемных работников и для 2 государственных служащих. В то же время для предпринимателей можно с большими основаниями предположить, что они не занимаются партийной работой, и ошибиться в 7 наблюдениях. Таким образом, для общего числа 64 опрашиваемых мы получаем 9 + 2 + 7=18 наблюдений, или 28,1 %, в которых прогноз будет неверен. Легко видеть, что первоначальная вероятность ошибки 43,7% значительно сократилась.


    На основе этих двух вероятностей можно вычислить относительное сокращение ошибки, которое и называется лямбда:


    Лямбда=(Ошибка при первом прогнозе — Ошибка при втором прогнозе)/Ошибка при первом


     В нашем примере:


     Лямбда =( 43,7% - 28.1%)/43,7% = ,357


    Если ошибка при втором прогнозе сокращается до 0, лямбда будет равна 1. Если ошибки при первом и при втором прогнозе одинаковы, лямбда = 0. В этом случае вторая переменная никак не помогает в уточнении предсказания значения первой (зависимой переменной); то есть выбранные две переменные совершенно не зависят друг от друга.


    Так как ваш быстрый, но совершенно не умеющий соображать компьютер не знает, какую переменную следует считать зависимой, SPSS вычисляет оба значения Я, поочередно рассматривая каждую из переменных как зависимую. В случае, если выясняется, что ни одну из выбранных переменных нельзя объявить зависимой, выводится среднее двух этих значений с обозначением "лямбда -симметричная".


    Тау (т) Гудмена-Крускала


    Это вариант меры связанности , который SPSS всегда вычисляет совместно с ней. При определении этой меры количество правильных предсказаний определяется по-иному: наблюдаемые частоты взвешиваются с учетом своих процентов и складываются. Для первого прогноза это дает:


    36 * 56,3% + 28 * 43,8% =32,53


    Согласно этому выражению, из 64 респондентов неверное предположение сделано для 31,47, что составляет 49,17%.


    С учетом второй переменной количество верных предположений (второй прогноз) составляет:


    13 * 59,1 % + 16 * 88,9 % + 7 * 29,2 % + 9 * 40,9 % + 2 * 11,1 % + 17 * 70,8 % = 39,89


    Итак, при втором прогнозе сделано 24,11 неверных прогнозов из 64, что составляет 37,67%. Тогда сокращение ошибки равно


    (49.17 %-37.67%)/49,17 %=0,235


    Это значение выводится под названием "тау Гудмена-Крускала". И в этом случае SPSS выдает второе значение т, рассматривая вторую переменную, как зависимую.


    Коэффициент неопределенности


    Это еще один вариант критерия лямбда, при определении которого имеется в виду не ошибочное предсказание, а "неопределенность", то есть степень неточности предсказаний. Эта неопределенность вычисляется по достаточно сложным формулам, которые мы опускаем. Коэффициент неопределенности также принимает значения в диапазоне от 0 до 1. Значение 1 говорит о том, что одну переменную можно точно предсказать по значениям другой.

    15.gif

    Изображение: 

    16.gif

    Изображение: 

    17.gif

    Изображение: 

    11.3.4 Меры связанности для переменных с порядковой шкалой

    11.3.4 Меры связанности для переменных с порядковой шкалой


    Все эти критерии основаны на количестве нарушений порядка (так называемых инверсий, обозначаемых через 1). Количество инверсий можно определить, если расположить в порядке возрастания значения одной из двух переменной между которыми необходимо установить степень взаимосвязи, а рядом с ними записать соответствующие значения другой переменной. Число нарушений порядка расположения второй переменной и есть количество инверсий. Это количество вместе с количеством соблюдений порядка (проверсий, обозначаемых через Р) используется в различных формулах для определения меры связанности, которые дают значения этого параметра в диапазоне от -1 до +1.


    Гамма (ÿ)


    Гамма вычисляется по простой формуле:


    Если инверсий не наблюдается (I = 0), то мы имеем у =1 (полную зависимость). Если же не встречается проверсий, а только инверсии (Р = 0), то говорят о максимально разнонаправленной зависимости (у = -1). Если Р= I, зависимости вообще не существует (y=0).


    d Сомера


    Существуют две асимметричных и симметричная меры связанности d Сомера. Для их вычисления используется формула для ус корректирующим членом Т, который учитывает количество связей зависимых переменных (одинаковых значений, встречающихся в измерениях):


    Для сопряженной асимметричной меры связанности d Сомера используется корректирующий член Г, соответствующий количеству связей независимой переменной. В знаменателе симметричной rf-статистики Сомера стоит среднее значение двух асимметричных коэффициентов.


    Тау-б (Tb Кендалла)


    Этот коэффициент одновременно учитывает связи как зависимых, так и независимых переменных:


    tb может приобретать значения -1 и +1 только для квадратных таблиц сопряженности.


    Тау-ц (tc) Кендалла


    Этот критерий может достигать значений -1 и +1 в любых таблицах:


    Здесь N — общая сумма частот; m — наименьшее из количеств строк и столбцов.

    19.gif

    Изображение: 

    20.gif

    Изображение: 

    21.gif

    Изображение: 

    11.3.5 Другие меры связанности

    11.3.5 Другие меры связанности


    SPSS позволяет вычислить другие специальные меры связанности, обзор которых приводится ниже.


    Эта


    Этот коэффициент применяется, если зависимая переменная принадлежит к интервальной шкале, а независимая — к порядковой или шкале наименований, эта2 представляет собой долю общей дисперсии, которую можно объяснить влиянием независимой переменной.


    Коэффициент каппа (к)


    Коэффициент каппа Козна (к) можно вычислить только для квадратных таблиц сопряженности, в которых применяются одинаковые числовые кодировки для переменных строк и столбцов. Типичный случай применения этого критерия — оценка людей или объектов двумя экспертами. В таком случае к указывает на степень согласия между экспертами.


    Мера риска


    С помощью этой опции в SPSS реализован расчет трех различных коэффициентов, которые могут быть определены для таблицы сопряженности, состоящей из 2 строк и 2 столбцов, созданной на основании строго определенных правил, которые будут сформулированы в конце данного параграфа. При расчете меры риска анализируется так называемая переменная риска, которая имеет две категории и указывает, произошло ли определенное событие или нет. Анализ переменной риска проводится в зависимости от причинной (независимой) переменной, которая должна также быть дихотомической.


    Это положение можно пояснить на типичном примере. Исследование депрессии на базе 294 респондентов дало следующую частотную таблицу:


    Депрессия


    Да


    Нет


    Женщины 


    а = 40 


    Ь = 143 

    Мужчины с = 10 d = 101

    Обе переменные, входящие в таблицу, — являются дихотомическими. Депрессия, имеющая две категории (да-нет), является переменной риска, а пол с двумя категориями (женщины-мужчины) — независимой (причинной) переменной.


    Исследование, проводимое в такой форме, называется групповым или когортным. При когортном исследовании определенная группа наблюдений, в которых анализируемое событие еще не произошло, изучается на протяжении известного промежутка времени. Определяется, в каких наблюдениях данное событие произошло, а в каких — нет, и различается ли риск наступления события между разными категориями независимой переменной. При групповых исследованиях группа наблюдений, в которых событие уже произошло, сравнивается с контрольной группой.


    Два из трех коэффициентов риска, определяемых в SPSS, обычно относятся к когортным исследованиям, а третий — к групповым. При когортном исследовании для обеих категорий независимой переменной (в данном случае пола) определяется инцидентность. У респондентов-женщин инцидентность наступления депрессии равна:


    40/(40 + 143)=0,219


    У респондентов-мужчин инцидентность равна


    10/(10 + 101)=0,09


    Отношение инцидентностей составляет


    0,219/0,090 = 2,426 


    и называется относительным риском или мерой относительного риска. Риск попасть в депрессию у женщин в 2,426 раза выше, чем у мужчин. Так как компьютер не знает, какое из двух кодовых значений переменной риска соответствует наличию депрессии, относительный риск вычисляется для обоих значений.


    При групповом исследовании применяется несколько отличный вариант коэффициента, называемый также "отношением шансов" (отношением перекрестных произведений). "Шансы" попасть в депрессию у женщин составляют 40/143, а у мужчин — 10/101. Следовательно, отношение шансов равно


    (40 * 101)/(143 * 10)= 2,825 


    Если обозначить четыре частоты в таблице буквами а, Ь, с и d (см. выше), то формулы, которые SPSS использует для вычисления мер риска, можно записать так:


    Проведем анализ приведенного примера в SPSS.

    •  Загрузите файл depr.sav.

    Этот файл содержит переменную риска depr с кодовыми значениями 1 = да и 2 = нет и независимую (причинную) переменную sex с кодовыми значениями 1 = женщины и 2 = мужчины. Еще одна переменная, n, содержит частоты наблюдений.

    •  Выберите в меню команды Data (Данные) Weight Cases... (Взвесить наблюдения) и задайте n как переменную взвешивания.

    •  В диалоговом окне Crosstabs определите переменную sex как переменную строк и depr — как переменную столбцов, а во вспомогательном диалоге Statistics установите флажок Risk (Риск).

    В окне просмотра будут показаны следующие результаты.


    Пол * Депрессия Таблица сопряженности


    Депрессия


    Total


    да

    нет

    Пол

    Женщины

    40


    143


    183

    Мужчины

    10 50


    101


    111


    Total


    244


    294


    Risk Estimate (Оценка риска)

    Value

     


    95% Confidence Interval (95% доверительный интервал)


     


    Lower (Нижняя граница)

    Upper (Верхняя граница)

    Odds Ratio for (Отношение шансов для) Пол (Женщины / Мужчины)

    2,825

    1,350


    5,911


    For cohort (Для когорты) Депрессия = да

    2,426

    1,265


    4,655


    For cohort (Для когорты) Депрессия = нет

    ,859

    ,780


    ,946


    N of Valid Cases

    294

     


    Здесь последовательно показаны отношение шансов (RO) и оба коэффициента относительного риска (R1 и R2). Кроме того, для каждой величины определен 95 % доверительный интервал.


    Чтобы правильно вычислить отношение шансов и относительный риск, надо учитывать следующие правила построения таблиц сопряженности:

    •  Определяйте причинную (независимую) переменную как переменную строк, а переменную риска — как переменную столбцов.

    •  В первой ячейке каждой строки таблицы должна находиться группа с наибольшим риском.

    •  В первой ячейке каждого столбца таблицы должно стоять кодовое значение совершения события.

    Тест хи-квадрат по Мак-Немару


    Тест хи-квадрат по Мак-Немару применяется при наличии двух независимых дихотомических переменных; он рассматривается в разделе 14.2.


    Статистика Кохрана и Мантеля-Хзнзеля


    Эта статистика включает метод вычисления отношения шансов в таблицах сопряженности 2x2. Расчет этой статистики задается флажком Risk. При вычислениях используется переменная слоев (ковариация) и определяется, значительно ли отличаются категории этой переменной по своему отношению шансов от 1 (или другой величины). Это можно пояснить на примере.

    •  Загрузите файл angst.sav.

    В этом файле в трех переменных хранятся сведения о 1737 людях: их пол (1 = женский, 2 = мужской), наличие тревожной депрессии (1 = да, 2 = нет) и избыточного веса (1 = нет, 2 = да). Для людей с избыточным весом и с недостатком веса составим раздельные таблицы сопряженности пола и наличия тревожной депрессии, а затем вычислим отношение шансов.

    •  Выберите в меню команды Data (Данные) Split File... (Разделить файл)

    Выберите опцию Organize output by groups (Разделить вывод на группы) и задайте gewicht как группирующую переменную.

    •  Выберите команды меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  Перенесите переменную sex в список переменных строк, а переменную angst — в список переменных столбцов.

    •  Кнопкой Cells... (Ячейки) задайте вывод процентов по строкам (Percentages — Row), а кнопкой Statistics... (Статистика) — вывод риска (Risk):

    Основная часть результатов приводится ниже.


    Пол * Тревожная депрессия Crosstabulation (a)


    Тревожная депрессия


    Total


     


     

    Да нет

    Пол


    женский


    Count

    154

    592


    746


    % от Пол

    20,6%

    79,4%


    100,0%


    мужской


    Count

    79

    715


    794


    % от Пол

    9,9%

    90,1%


    100,0%


    Total


    Count

    233

    1307


    1540


    % от Пол

    15,1%

    84,9%


    100,0%


     Избыточный вес = нет


    Risk Estimate (a)

    95% Confidence Interval

     


     


    Value

    Lower Upper

    Odds Ratio for Пол (женский / мужской)


    2,354

    1,758

    3,154


    For cohort Тревожная депрессия = да


    2,075

    1,612

    2,670


    For cohort Тревожная депрессия = нет


    ,881

    ,844

    ,920


    N of Valid Cases


    1540


    а. Избыточный вес = нет


    Пол * Тревожная депрессия Crosstabulation (a)


    Тревожная депрессия


    Total

    Да нет

    Пол


    женский


    Count


    22


    62


    84


    % от Пол


    26,2%


    73,8%


    100,0%


    мужской


    Count


    9


    104


    113


    % от Пол


    8,0%


    92,0%


    100,0%


    Total


    Count


    31


    166


    197


    % от Пол


    15,7%


    84,3%


    100,0%


     Избыточный вес; = да


    Risk Estimate (a)

    Value

    95% Confidence Interval


     


    Lower

    Upper

    Odds Ratio for Пол (женский / мужской)

    4,100

    1,776


    9,468


    For cohort Тревожная депрессия = да

    3,288

    1,597


    6,771


    For cohort Тревожная депрессия = нет

    ,802

    ,698


    ,921


    N of Valid Cases

    197

     


    а. Избыточный вес = да


    В обоих случаях тревожная депрессия у женщин наступает значительно чаще. Отношение шансов для людей с недостатком веса составляет 2,354, а для людей с избыточным весом — 4,100.


    Теперь вычислим статистику Кохрана и Мантеля-Хэнзеля.

    •  Чтобы отменить разделение на группы, после вызова команд меню Data (Данные) Split File... (Разделить файл) выберите опцию Analyze all cases, do not create groups (Анализировать все наблюдения, не создавать группы).

    •  В диалоговом окне Crosstabs задайте gewicht как переменную слоев, во вспомогательном диалоге Statistics снимите флажок Risk и установите флажок Cochran and Mantel-Haenszel statistics (Статистика Кохрана и Мантеля-Гензеля).

    •  В поле Test common odds ratio equals (Общее отношение шансов) оставьте значение 1, установленное по умолчанию.

    Из полученных результатов ниже приводится только статистика Кохрана и Мантеля-Гензеля.


    Test of Homogenity of the Odds Ratio (Тест на гомогенность отношения шансов) Statistics


    Statistics


    Chi-Squared (Хи-квадрат)


    df


    Asymp. Sig. (2-sided)


    Conditional (Условная независимость)


    Cochran (Кохран)


    44,665


    1


    ,000


    Mantel-Haenszel (Мантель-Гензель)


    43,724


    1


    ,000


    Homogeneity (Гомогенность)


    Breslow-Day (Бреслоу-Дэй)


    1,522


    1


    ,217


    Tarone (Тарой)


    1,522


    1


    ,217


    Under the conditional independence assumption, Cochran's statistic is asymptotically distributed as a 1 df chi-squared distribution, only if the number of strata is fixed, while the Mantel-Haenszel statistic is always asymptotically distributed as a 1 df chi-squared distribution. Note that the continuity correction is removed from the Mantel-Haenszel statistic when the sum of the differences between the observed and the expected is 0. (При гипотезе условной независимости статистика Кохрана дает распределение, асимптотически приближающееся к распределению хи-квадрат с 1-ой степенью свободы, только при фиксированном количестве слоев, в то время как статистика Мантеля-Хэнзеля при той же гипотезе всегда дает такое распределение. Обратите внимание, что в статистике Мантеля-Хэнзеля опускается коррекция на непрерывность, если сумма разностей наблюдаемых и ожидаемых величин равна 0.)


    Mantel-Haenszel Common Odds Ratio Estimate (Оценка общего отношения шансов Мантеля-Гензеля)


    Estimate (Оценка)


    2,503


    ln(Estimate)


    ,918


    Std. Error of (Стандартная ошибка) In(Estimate)


    ,141


    Asymp. Sig. (2-sided) (Асимптотическая значимость (двусторонняя)


    ,000


    Asymp. 95% Confidence Interval (Асимптотический 95 % доверительный интервал)


    Common Odds Ratio (Общее отношение шансов)


    Lower Bound (Нижняя граница)


    1,901


    Upper Bound (Верхняя граница)


    3,297


    ln(Common Odds Ratio)


    Lower Bound (Нижняя граница)


    ,642


    Upper Bound (Верхняя граница)


    1,193


    The Mantel-Haenszel common odds ratio estimate is asymptotically normally distributed under the common odds ratio of 1,000 assumption. So is the natural log of the estimate. (Оценка общего отношения шансов Мантеля-Хэнзеля при условии, что общее отношение шансов равно 1,000, имеет асимптотически нормальное распределение. То же распределение сохраняется и для натурального логарифма оценки.)


    Результаты тестов Кохрана и Мантеля-Хэнзеля очень близки; в обоих случаях для весовых групп наблюдается максимально значимое отличие отношения шансов от 1 (р<0,001). Тесты как Бреслоу-Дэя, так и Тарона позволяют сохранить допущение о гомогенности отношения шансов для весовых групп (р = 0,217).


    Оценка объединенного отношения шансов дает те значения, которые будут получены при вычислении риска, если не разделять данные по переменной слоев.

    22.gif

    Изображение: 

    Глава 12. Анализ множественных ответов

    Глава 12. Анализ множественных ответов

    1. Анализ множественных ответов

    Анализ множественных ответов


    В этой главе мы рассмотрим особенности кодирования и анализа множественных ответов. Вопросы, на которые можно дать несколько ответов одновременно ( это и есть множественные ответы), имеются во многих анкетных исследованиях. Для кодировкии анализа таких множественных ответов SPSS представляет два различных метода: метод множественной дихотомии и категориальный метод. Оба этих метода рассматриваются в последующих разделах на одном и том же примере. Пример взят из анкетирования членов городской организации политической партии, в котором исследовались их мнения и пожелания.

    12.1 Дихотомный метод

    12.1 Дихотомный метод


    В упомянутой анкете был задан вопрос: "Как можно сделать партию более привлекательной?" Предлагались следующие варианты ответов:

    •  больше активности в период между выборами 

    • повышение эффективности общих собраний

    •  больше неформальных встреч

    •  открытые общие собрания

    •  большая близость к населению на местах 

    • лучше информировать членов партии об актуальных событиях

    •  привлечение не членов партии к различным партийным проектам 

    •  больше мероприятий по актуальным политическим темам на местах

    В методе множественной дихотомии для каждой из возможностей ответа определяется отдельная переменная. В рассматриваемом примере для этого понадобится восемь переменных. Если член партии отметит  ответ "больше активности в период между выборами ",соответствующая переменная получит значение "1", если нет-"0", если член партии отметит  ответ "повышение эффективности общих собраний", соответствующая переменная получит значение "1", если нет-"0",и т.д. для остальных переменных. Таким образом мы получили восемь переменных  с кодовыми значениями 0 и 1. Кодовые значения при этом выбираются произвольно, однако для всех ответов они должны быть одинаковы и введены в компьютер на правильном месте.


    Ответы на этот и другие вопросы анкетирования членов партии содержаться в файле meinug.sav. Сначала мы посмотрим частотную таблицу ответов на вопрос "Как можно сделать партию более привлекательной?", а затем перекрестную таблицу этого вопроса и пола.

    12.1.1 Определение наборов

    12.1.1 Определение наборов


    Ответы на наш вопрос закодированы вышеописанным способом в переменных att1+attS. В первую очередь мы должны сообщить компьютеру, что эти восемь переменных принадлежат к одному "набору переменных".

    •  Загрузите файл meinung.sav.

    •  Выберите в меню команды Analyze (Анализ) Multiple Response (Множественные ответы) Define Sets... (Определить наборы)

    Откроется диалоговое окно Define Multiple Response Sets (Определение наборов ответов).

    •  Выделите в списке исходных переменных переменные att1+att8 и перенесите их в список Variables in Set (Переменные в наборе).

    •  Задайте дихотомическую кодировку переменных (опция Dichotomies в группе Variables Are Coded As). Эта настройка выбирается по умолчанию. В поле Counted Value (Учитываемое значение) введите "1".

    •  Присвойте набору имя "attrak" и метку "Повышение привлекательности".

    •  Щелкните на кнопке Add (Добавить), и созданный набор будет внесен в список наборов множественных ответов (Mult Response Sets).

    SPSS начинает имена наборов переменных со знака доллара; следовательно, вновь созданный набор получит имя Sattrak.

    •  Щелкните на кнопке Close (Закрыть), чтобы закончить процесс определения набора.

    12.1.2 Частотные таблицы для дихотомических наборов

    12.1.2 Частотные таблицы для дихотомических наборов

    •  Чтобы создать частотную таблицу для дихотомического набора, выберите команды меню Analyze (Анализ) Multiple Response (Множественные ответы) Frequencies... (Частоты)


    Рис. 12.1: Диалоговое окно Define Multiple Response Sets



    Рис. 12.2: Диалоговое окно Multiple Response Frequencies


    Откроется диалоговое окно Multiple Response Frequencies (Частоты множественных ответов).


    В списке Mult Response Sets этого диалога отображаются уже определенные наборы переменных; в нашем примере это набор Sattrak.

    •  Перенесите набор Sattrak в список Table(s) for (Таблицы для).

    •  Щелкните на кнопке ОК.

    В окне просмотра появятся следующие результаты:


    Group $ATTRAK Повышение привлекательности (Value tabulated = 1)


    Pet of Pet of


    dichotomy label


    Name Count Responses


    Cases


    больше активности в период между выборами


    ATT1


    81


    20


    ,4


    77


    ,1


    повышение эффективности общих собраний


    ATT2


    24


    6


    ,0


    22


    ,9


    больше неформальных встреч


    ATT3


    24


    6


    ,0


    22


    ,9


    открытые общие собрания


    ATT4


    25


    6


    ,3


    23


    ,8


    большая близость к населению на местах


    ATT5


    80


    20


    ,1


    76


    ,2


    лучше информировать членов партии


    ATT6


    51


    12


    ,8


    48


    , 6


    привлечение не членов партии


    ATT7


    46


    11


    ,6


    43


    ,8


    больше мероприятий по актуальным темам


    ATT8


    67


    16


    ,8


    63


    ,8


    Total responses


    398


    100


    ,0


    379


    ,0


    5 missing cases; 105 valid cases


    В столбце "Dichotomy label" (Метка дихотомии) приводятся метки переменных, принадлежащих к набору. Показано, что имеется 5 пропущенных и 105 допустимых наблюдений. Отсутствующим наблюдением считается, если ни одна из переменных набора не имеет учитываемого значения (в данном примере значения "1").


    Можно получить еще один вариант таблицы, если в диалоговом окне Multiple Response Frequencies установить флажок Exclude cases listwise with dichotomies (Для дихотомических переменных исключать наблюдения по списку). Тогда к пропущенным будут причисляться и те наблюдения, в которых хотя бы одна переменная набора имеет отсутствующее значение — в данном примере не закодирована ни единицей, ни нулем. Это вариант представления может быть полезен, если данный ответ в анкете не определен однозначно.


    Для наблюдаемых частот выводятся два разных процентных значения. При определении первого из них наблюдаемая частота отнесена к общему числу ответов "да" (398), а при определении второго — к общему числу допустимых наблюдений (105). Однако самая удобная процентная характеристика, а именно процент от количества всех наблюдений (110), отсутствует. Первую строку частотной таблицы можно интерпретировать, например, так: 81 член партии считает, что большая активность в период между выборами может повысить привлекательность партии. Это 20,4 % от общего количества положительных ответов или 77,1 % членов партии, которые дали хотя бы один вариант ответа.


    Как мы уже говорили, в этой таблице, к сожалению, отсутствует процент от общего количества опрошенных членов партии (НО наблюдений). Если вам нужна эта наиболее информативная характеристика, ее можно вычислить вручную или применить следующий прием.

    •  С помощью команд синтаксиса

     COMPUTE att9 = 1. 
      EXECUTE. 

    создайте новую переменную и поместите ее в набор. Вы получите следующую частотную таблицу:


    Group $ATTRAK Повышение привлекательности (Value tabulated = 1)


    Pct of 


    Pct of


    Dichotomy label


    Name


    Count Responses


    Cases


    больше активности в период между выборам


    ATT1


    81


    15


    , 9


    73


    ,6


    повышение эффективности общих собраний


    ATT2


    24


    4


    ,7


    21


    / &


    больше неформальных встреч


    ATT3


    24


    4


    , 7


    21


    ,8


    открытые общие собрания


    ATT4


    25


    4


    , 9


    22


    , 7


    большая близость к населению на местах


    ATT5


    80


    15


    ,7


    72


    , 7


    лучше информировать членов партии


    ATT6


    51


    10


    ,0


    46


    ,4


    привлечение не членов партии


    ATT7


    46


    9


    ,1


    41


    ,8


    больше мероприятий по актуальным темам


    ATT8


    67


    13


    ,2


    60


    ,9


    ATT9


    110


    21


    ,7


    100


    ,0


    Total responses


    508


    100


    ,0


    461


    ,8


    0 missing cases; 110 valid cases


    Теперь расчет процентов от общего количества ответов потерял смысл, а второй столбец процентов относится к фактическому числу всех наблюдений. То есть 73,6 % всех опрошенных членов партии считают, что большая активность в период между выборами может повысить привлекательность партии.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    12.1.3 Таблицы сопряженности с дихотомическими наборами

    12.1.3 Таблицы сопряженности с дихотомическими наборами


    Таблицы сопряженности можно создавать между двумя наборами переменных, а также между набором и "обычной" переменной. Так, к примеру, нам необходимо в одной таблице сопряженности отобразить соотношение между набором Sattrak и переменной geschl, которая с помощью кодировок 1 = женский и 2 = мужской характеризует пол респондентов.

    •  Выберите в меню команды Analyze (Анализ) Multiple Response (Множественные ответы) Crosstabs... (Таблицы сопряженности) Появится диалоговое окно Multiple Response Crosstabs.


    Рис. 12.3: Диалоговое окно Multiple Response Crosstabs


    В списке исходных переменных показаны переменные файла meinung.sav. В списке наборов множественных ответов показан ранее определенный набор.

    •  Перенесите в список переменных строк набор Sattrak, а в список переменных столбцов — переменную geschl. Эта переменная появится в списке столбцов с двумя вопросительными знаками, заключенными в скобки. Если таблица сопряженности строится между элементарными переменными (не являющимися наборами) и наборами, то для первых следует задать диапазон значений.

    •  Щелкните на кнопке Define Ranges... (Определить диапазоны).

    Откроется диалоговое окно Multiple Response Crosstabs: Define Variable Range (Таблицы сопряженности для множественных ответов: Определить диапазон переменной).

    •  Задайте минимальное значение (Minimum) "1", а максимальное (Maximum) — "2".

    •  Подтвердите выбор кнопкой Continue. Теперь вопросительные знаки заменены значениями "1" и "2".

    •  Щелкните на кнопке Options... (Параметры). 

    Откроется диалоговое окно Multiple Response Crosstabs: Options.



    Рис. 12.4: Диалоговое окно Multiple Response Crosstabs: Define Variable Range


    Абсолютные частоты в ячейках выводятся всегда. Дополнительно в группе Cell Percentages (Проценты в ячейках) можно выбрать одну или несколько характеристик:

    •  Row (По строкам): Отображаются проценты для строки.

    •  Column (По столбцам). Отображаются проценты для столбца.

    •  Total (Полные): Отображаются общие проценты для таблицы.

    В группе Percentages based on (Проценты вычисляются на основе) можно выбрать одну из следующих опций:



    Рис. 12.5: Диалоговое окно Multiple Response Crosstabs: Options

    •  Cases (Наблюдения): Это настройка по умолчанию. Основанием для расчёта процентных показателей в ячейках является число наблюдений, соответствующие количеству опрошенных респондентов.

    •  Responses (ответы): Основой расчета процентного отношения в ячейке является количество ответов. Для наборов множественных дихотомий количество ответов равно частоте учитываемого значения во всех наблюдениях.

    Обработка пропущенных значений уже рассматривалась в разделе 12.1.2.


    Флажок Match variables across response sets (Учитывать переменные из наборов попарно) имеет смысл, только если таблица сопряженности строится на основе двух наборов переменных. В этом случае первая переменная из первого набора сочетается с первой переменной из второго набора, и т.д.

    •  В группе Percentages based on сохраните настройку по умолчанию Cases.

    •  В группе Cell Percentages установите флажок Column.

    •  Подтвердите ввод кнопкой Continue, а затем — ОК. В окне просмотра будет показана следующая таблица.


    * * * СR0SSТABULATION * * *


    $ATTRAK (tabulating 1)


    Erhohung


    der Attraktivitat


    by GESCHL Geschlecht


    GESCHL


    Count Iweiblich


    maennlic


    Col pet Ih


    Row


    Total


    I


     


    I


    1


    I


    2


    I


    $ATTRAK X


    ATT1 I


    21


    + -I


    60


    + I


    81


    mehr Prasenz zwische I


    72,4


    I


    78,9


    I


    77,1


    + —


    _ _ _


    + —


    _ _ _


    +


    ATT2 I


    6


    I


    18


    I


    24


    Verbesserung der Hit I


    20,7


    I


    23,7


    I


    22,9


    + —


    _ _ _


    + —


    _ _ _


    +


    ATT3 I


    5


    I


    19


    I


    24


    mehr gesellige Zusam I


    + -


    17 ,2


    I


    25, 0


    I


    22, 9


    ATT4 I


    2


    + -


    I


    23


    + I


    25


    offentlich zuganglic I


    6,9


    I


    30,3


    I


    23,8


    + -


    _ _ _


    + -


    _ _ _


    +


    ATT5 I


    23


    I


    57


    I


    80


    mehr Burgernahe mit I


    79,3


    I


    75,0


    I


    76,2


    + -


    _ _ _


    + —


    _ _ _


    +


    ATT6 I


    14


    I


    37


    I


    51


    bessere Information I


    48,3


    I


    48,7


    I


    48,6


    + -


    _ _ _


    + -


    _ _ _


    +


    ATT7 I


    12


    I


    34


    I


    46


    Beteiligung von Nich I


    41,4


    I


    44,7


    I


    43,8


    + -


    _ _ _


    + —


    _ _ _


    +


    ATT 8 I


    18


    I


    49


    I


    67


    mehr Veranstaltungen I


    62,1


    I


    64,5


    I


    63,8


     


    _ _ _


    + —


    _ _ _


    +


    Column


    29


    76


    105


    Total


    27, 6


    72,4


    100,0


    Percents and totals based on respondents 105 valid cases; 5 missing cases


    Полученные проценты соответствуют отношению частот к числу допустимых наблюдений; ср. заключения сделанные в разделе 12.1.2. К сожалению, длина меток переменных ограничивается лишь двадцатью символами.


    Если сравнить оба пола, то значительное различие заметно только при анализе переменной att4: 30,3 % мужчин считают, что открытые собрания повышают привлекательность партии, но лишь 6,9 % женщин придерживаются этого мнения.


    К сожалению, для множественных ответов SPSS не проводит проверку значимости с помощью критерия хи-квадрат. Если выполнение такой проверки необходимо, то следует поступить, как указано в разделе 8.7.2.

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    12.2 Категориальный метод

    12.2 Категориальный метод


    Альтернативный способ кодирования множественных ответов предоставляет метод множественных категорий, или категориальный. Для применения этого метода должно быть известно максимальное количество возможных ответов. Это количество можно, например, задать в анкете (указанием типа "Отмечайте не более пяти вариантов") или установить после проверки анкет.


    Чтобы узнать, почему члены партии, не имеющие партийного поручения, не хотят его получить или не участвуют в партийной работе иным образом, в анкете задавался вопрос "Что мешает Вашему участию в партийной работе?". После вопроса было помещено указание, что можно отметить не более пяти из приводимых вариантов ответа:


    Мне неизвестны возможности для участия в работе


    1


    Функции уже распределены


    2


    Поведение функционеров


    3


    Групповщина не дает стимула для участия


    4


    У меня слишком мало политического опыта


    5


    Я опасаюсь негативного влияния на свою работу/карьеру


    6


    Я опасаюсь негативного влияния на свою личную жизнь


    7


    Не желаю


    8


    Здоровье не позволяет


    9


    Так как количество ответов составляет не более пяти, для того, чтобы закодировать все варианты ответов будет достаточно пяти переменных. В файле meinung.sav это переменные mit1+mitS, которые после загрузки файла отображаются в редакторе данных.


    Каждая из пяти переменных кодируется одинаковыми категориями, причем вне зависимости от количества данных ответов область этих пяти переменных заполняется слева направо.


    Так, в первом наблюдении при ответе на вопрос отмечены категории 3, 4 и 6 (Поведение функционеров, Групповщина, Негативное влияние в работе). Следующие три респондента не отметили ни одного ответа, в наблюдении 8 дан только один ответ (Категория 1, "Неизвестны возможности участия") и т.д. Для этого вопроса мы также построим частотную таблицу и таблицу сопряженности с полом. Но сначала определим набор переменных.



    Рис. 12.6: Множественные отпеты при категориальном методе

    6.gif

    Изображение: 

    12.2.1 Определение наборов

    12.2.1 Определение наборов


    Сначала следует определить набор. Выполите следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Multiple Response (Множественные ответы) Define Sets... (Определить наборы)

    Появится уже известное вам диалоговое окно Define Multiple Response Sets. В списке исходных переменных Set Definition (Определение набора) показаны переменные файла meimmg.sav.

    •  Выделите переменные mit1+mitS и перенесите их в список Variables in Set (Переменные в наборе).

    •  Задайте категориальную кодировку переменных (опция Categories). В полях Range — through укажите диапазон "1" + "9".

    •  Присвойте набору имя "mitwirk" и метку "Препятствия в сотрудничестве".

    •  Щелкните на кнопке Add (Добавить), и созванный набор будет внесен в список наборов множественных ответов (Mult Response Sets).

    •  Щелкните на кнопке Close, чтобы завершить определение набора.

    12.2.2 Частотные таблицы для категориальных наборов

    12.2.2 Частотные таблицы для категориальных наборов

    •  Для того, чтобы создать частотную таблицу, выберите в меню команды Analyze (Анализ) Multiple Response (Множественные ответы) Frequencies... (Частоты) Откроется диалоговое окно Multiple Response Frequencies.

    •  Перенесите набор Smitwirk в список Table(s) for.

    •  Щелкните на кнопке ОК.

    В окне просмотра будет показана следующая частотная таблица.


    Group $MITWIRK Препятствия в сотрудничестве


    Pet of Pet of


    Category label                              Code


    CountResponses


    Cases


    Неизвестны возможности участия


    1


    24


    12


    ,8


    27


    ,6


    Функции уже распределены


    2


    26


    13


    ,9


    29


    , 9


    Поведение функционеров


    3


    36


    19


    ,3


    41


    ,4


    Групповщина


    4


    20


    10


    ,7


    23


    ,0


    Недостаток политического опыта


    5


    29


    15


    ,5


    33


    , 3


    Негативное влияние, в работе


    6


    8


    4


    ,3


    9


    ,2


    Негативное влияние в личной жизни


    7


    6


    3


    ,2


    6


    , 9


    Нежелание


    8


    14


    7


    ,5


    16


    , 1


    Здоровье


    9


    24


    12


    ,8


    27


    , 6


    Total responses


    187


    100


    ,0


    214


    ,9


    23 missing cases; 87 valid cases


    В столбце "Category label" (Метки категорий) показаны (единообразные) метки значений переменных, объединенных в набор. Показано, что имеется 23 пропущенных и 87 допустимых наблюдений. Наблюдение считается пропущенным, если ни одна из переменных, принадлежащих к набору не имеет кодового значения


    Можно получить еще один вариант таблицы, если в диалоговом окне Multiple Response Frequencies установить флажок Exclude cases listwise with categories (Для категориальных переменных исключать наблюдения по списку). Тогда допустимыми будут считаться только наблюдения, в которых все переменные набора имеют кодовые значения.


    Обе процентные характеристики уже рассматривались в разделе 12.1.2. Первую строку частотной таблицы можно интерпретировать следующим образом: 24 члена партии считают, что их участию в партийной работе мешает то, что им неизвестны возможности такого участия. Это 12,8 % данных ответов и 27,6 % респондентов, которые дали хотя бы один вариант ответа.

    12.2.3 Таблицы сопряженности с категориальными наборами

    12.2.3 Таблицы сопряженности с категориальными наборами


    На основе наборов со множественными категориями также можно строить таблицы сопряженности с другими переменными. Для примера рассмотрим таблицу сопряженности между набором Smitwirk и переменной geschl. Выполните следующие действия:

    •  Выберите в меню команды Analyze (Анализ) Multiple Response (Множественные ответы) Crosstabs... (Таблицы сопряженности)

    Появится диалоговое окно Multiple Response Crosstabs.

    •  Перенесите в список переменных строк набор Smitwirk, а в список переменных столбцов — переменную geschl. Эта переменная появится в списке столбцов с двумя вопросительными знаками, заключенными в скобки.

    •  Щелкните на кнопке Define Ranges... (Определить диапазоны).

    Откроется диалоговое окно Multiple Response Crosstabs: Define Variable Range.

    •  Введите минимальное значение 1 и максимальное "2".

    •  Подтвердите выбор кнопкой Continue.

    •  Щелкните на кнопке Options... (Параметры).

    Откроется диалоговое окно Multiple Response Crosstabs: Options.

    •  В группе Percentages based on сохраните настройку по умолчанию Cases.

    •  В группе Cell Percentages установите флажок Column.

    •  Подтвердите ввод кнопкой Continue, а затем — ОК.

    В окне просмотра будет показана следующая таблица сопряженности.


    *** CROSSTABULATION * **


    $MITWIRK (group) Scheiterungby GESCHL Geschlecht der Mitwirkung


    GESCHL


    Count Iweiblich maennlic


    Col pet


    I


    h


    ROW


    I


    Total


    I


    1


    I


    2


    I + I


    24


    1


    + -


    I


    7


    + - -


    I


    17


    Moglichkeiten nicht


    I


    30,4


    I 26


    ,6


    I


    27,6


    + -


    _ _ _


    + — —


    — —


    +


    2


    I


    3


    I


    23


    I


    26


    Mandate bereits bese


    I


    13,0


    I 35


    ,9


    I


    29,9


    + -


    + — —


    +


    3


    I


    10


    I


    26


    I


    36


    Fuhrungs verbal ten de


    I


    43,5


    I 40


    ,6


    I


    41,4


    + -


    _ _ _


    •f - —


    — —


    +


    4


    I


    4


    I


    16


    I


    20


    keine Forderung wage


    I


    17 ,4


    I 25


    ,0


    I


    23,0


    + -


    — — —


    + — —


    — —


    +


    5


    I


    11


    I


    18


    I


    29


    zu wenig politische 6


    I + —


    I


    47 ,8


    I 28


    ,1


    I + I


    33,3 8


    0


    + - -


    I


    8


    Befurchtung beruflic 7


    I + -I


    , 0


    I 12


    ,5


    I + I


    9,2 6


    0


    + - —


    I


    6


    Befurchtung persqnli


    I


    , 0


    I 9


    ,4


    I


    6,9


    + —


    _ _ _


    + - -


    — —


    +


    8


    I


    4


    I


    10


    I


    14


    nichts bewegen konne


    I


    17,4


    I 15


    ,6


    I


    16,1


    + -


    _ _ _


    + - - -


    - - +


    9


    I


    7


    I


    17 I


    24


    gesundheitliche


    Grun


    I


    30,4


    I


    26,6 I


    27,6


    + —


    _ _ _


    + - -


    - — - +


    Column


    23


    64


    87


    Total


    26,4


    73,6


    100,0


    Percents


    and


    totals based


    on


    respondents


    S7


    valid


    cases ;


    23


    missing cases


    Процентные значения рассчитываются на основе количества допустимых наблюдений. Если сравнить оба пола, то значительное различие заметно только в частоте упоминания мнения, что функции уже распределены и в боязни негативного влияния на работу и личную жизнь; такие ответы мужчины дают чаще. Женщины, напротив, чаще ссылаются на недостаток политического опыта.

    12.3 Упражнение

    12.3 Упражнение


    В заключение проведем анализ множественных ответов на следующем примере. При анкетировании 530 туристов в Кении задавался вопрос о влиянии туризма. Рассмотрим интересующий нас отрывок из этой анкеты:


    Варианты ответов на вопрос "Какое влияние, по Вашему мнению, оказывает туризм в Кении?" закодированы по методу множественных категорий. При этом установлено, что было зачеркнуто не более шести возможных ответов. Для шести вариантов определены переменные vnl+vn6. Эти переменные могут иметь следующие значения:


    1 = "Приток валюты"


    2 = "Подорожание"


    3 = "Нагрузка на окр. среду"


    4 = "Рабочие места"


    5 = "Развитие инфраструктуры"


    6 = "Переселение в города"


    7 = "Взаимопонимание"


    8 = "Разрушение культуры"


    9 = "Сохранение культуры"


     Загрузите файл kenia.sav.

    •  Определите набор переменных. Перенесите в набор переменные vnKvn6. Задайте категориальную кодировку (активируйте опцию Categories в группе Variables Coded by...). Установите диапазон от 1 до 9.

    •  Присвойте набору имя "tour" и метку "Влияние туризма".

    •  Щелкните на кнопке Add, чтобы добавить сформированный набор в список наборов.

    •  Проведите частотный анализ набора Stour как было описано выше. Вы получите следующий результат:


    Group $TOUR Влияние туризма


    Pet of


    Pet of


    Category label Code


    Count


    Responses


    Cases


    Приток валюты


    1


    457


    22,7


    88,2


    Подорожание


    2


    105


    5,2


    20,3


    Нагрузка на окр. среду


    3


    209


    10,4


    40,3


    Рабочие места


    4


    441


    21,9


    85,1


    Развитие инфраструктуры


    5


    170


    8,4


    32,8


    Переселение в города


    6


    125


    6,2


    24,1


    Взаимопонимание


    7


    206


    10,2


    39,8


    Разрушение культуры


    8


    262


    13,0


    50,6


    Сохранение культуры


    9


    41


    2,0


    7,9


    Total responses


    2016


    100,0


    389 ,2


    12 missing cases; 518 valic


    i cases


    Постройте перекрестные таблицы набора Stour последовательно с переменными g (пол), s (образование) и alter (возраст). Проинтерпретируйте результаты самостоятельно.

    7.gif

    Изображение: 

    12.4 Сравнение дихотомного и категориального методов

    12.4 Сравнение дихотомного и категориального методов


    Дихотомный метод


    Категориальный метод


    Особенности:


    Особенности:


    • Определяется по одной переменной для каждого варианта ответа.


    • Оценка максимального количества возможных ответов.


    • Отображение множественных ответов с помощью нескольких дихотомических переменных.


    в Определение такого же числа переменных, соответствующего максимальному количеству возможных ответов.


    • Переменные объединяются в наборы из нескольких дихотомий.


    • В наборы, соответствующие множественным ответам, объединяются переменные из нескольких категорий.


    Преимущества:


    Преимущества:


    • Предварительная оценка максимального количества выбранных вариантов ответов не требуется.


    • Меньшее число переменных, если количество вариантов ответов, выбранных в каждом отдельном случае, меньше совокупного количества возможных вариантов ответов.


    Недостатки:


    Недостатки:


    • Если количество всех возможных ответов велико, а максимальное количество ответов, выбранных в каждом отдельном случае мало, то затрачивается слишком много переменных по сравнению с категориальным методом.


    • Вследствие распределения по разным переменным при проведении последующего анализа затруднено получение совокупного результата.


    О недостатке категориального метода, отмеченном в таблице, следует рассказать подробнее. Например, если потребуется подвергнуть переменную с дихотомическим кодированием att3 из файла mcinung.sav ("неформальные встречи повышают привлекательность партии") какому-либо последующему анализу, то это можно будет сделать без особого труда. Это такая же переменная, как и все остальные.


    Но если мы рассмотрим ответ "У меня слишком мало политического опыта" на вопрос "Что мешает Вашему участию в партийной работе", то этот вариант ответа нельзя идентифицировать с помощью однозначно определенной переменной. Этому варианту ответа будет соответствовать одна из переменных mitl-mit5, причем привязка к одной их этих переменных будет меняется от наблюдения к наблюдению.


    Чтобы решить эту проблему, следует с помощью команды DO REPEAT (см. раздел 26.3) создать новую переменную:

     COMPUTE wenigerf=0. 
      DO REPEAT mit=mitl to mit5. 
      IF mit=5 wenigerf=1
      END REPEAT. 
      EXECUTE. 

    Переменная wenigerf своими кодовыми значениями 1 = да и 0 = нет будет указывать, ответил ли член партии, что у него мало политического опыта, или нет. Эту переменную можно использовать при последующем анализе.


    Данный недостаток категориального метода мы считаем настолько значительным, что рекомендуем применять дихотомный метод.

    Глава 13. Сравнение средних

    Глава 13. Сравнение средних

    1. Сравнение средних

    Сравнение средних


    Сравнение средних значений различных выборок относится к наиболее часто применяемым методам статистического анализа. При этом всегда должен быть выяснен вопрос, можно ли объяснить имеющееся различие средних значений статистическими колебаниями или нет. В последнем случае говорят о значимом различии.


    При сравнении средних значений выборок предполагается, что обе выборки подчиняются нормальному распределению. Если это не так, то вычисляются медианы и для сравнения выборок используется непараметрический тест.


    При сравнении средних значений выборок выделяют четыре различные тестовые ситуации:

    •  сравнение двух независимых выборок

    •  сравнение двух зависимых (спаренных) выборок

    •  сравнение более двух независимых выборок

    •  сравнение более двух зависимых выборок

    В этих ситуациях соответственно применяются следующие статистические тесты:

    •  t-тест для независимых выборок (тест Стьюдента)

    •  t-тест для зависимых выборок

    •  однофакторный дисперсионный анализ

    •  однофакторный дисперсионный анализ с повторными измерениями

     Первые три из этих тестов вызываются с помощью меню Analyze (Анализ) Compare Means (Сравнение средних)


    Чтобы провести однофакторный дисперсионный анализ с повторными измерениями (очень часто встречающаяся тестовая ситуация) надо вызвать команду меню Analyze (Анализ) General Linear Model (Общая линейная модель) Repeated Measures... (Повторные измерения)


    Сначала мы рассмотрим тесты, вызов которых происходит посредством пункта меню Compare Means. Для примера мы возьмем данные исследования гипертонии в файле hyper.sav (см. главу 9).

    •  Загрузите файл hyper.sav.

    •  Выберите в меню команды Analyze (Анализ) Compare Means (Сравнение средних)

    В подменю содержатся, в частности, t-тест для независимых выборок (Independent-Samples Т Test), t-тест для парных выборок (Paired-Samples Т Test) и однофакторный дисперсионный анализ (ANOVA) для сравнения нескольких независимых выборок ( One-Way ANOVA).


    Еще один тест, включенный в данное подменю, это t-тест случайной выборки, используемый для сравнения с заданным значением (One-Sample T Test), рассматривается в разделе 13.5. В подпункте меню Means... (Средние) вычисляются средние значения раздельно по категориям группирующей переменной; здесь также можно проверить существование значимого различия при помощи однофакторного дисперсионного анализа. В этом отношении данный подпункт предоставляет меньше возможностей, чем подпункт One-Way ANOVA..., и поэтому здесь не рассматривается.

    13.1 Сравнение двух независимых выборок

    13.1 Сравнение двух независимых выборок


    Мы хотим проверить, значительно ли различается действие двух групп медикаментов на людей в зависимости от их возраста. Такое различие было бы, конечно, нежелательным, так как в этом случае разницу в действии лекарств можно было бы объяснить разным возрастным составом пациентов.

    •  Выберите в подменю команду Independent-Samples T Test... (t-тест для независимых выборок)

    Откроется диалоговое окно Independent-Samples T Test (см. рис. 13.1).

    •  В списке исходных переменных щелкните на переменной а и щелчком на кнопке с треугольником перенесите ее в список тестируемых переменных (Test Variable(s)).

    •  Таким же способом перенесите переменную med в поле Grouping Variable (Группирующая переменная).

    •  Щелчком на кнопке Define Groups... (Определить группы) открывается окно, в котором можно ввести значения двух категорий для группирующей переменной. Мы будем сравнивать две группы, удовлетворяющие условиям соответственно med = 1 и med = 2. Поэтому внесите в поле Group 1 (Группа 1) значение 1, а в поле Group2 — значение 2.

    •  Щелчком на кнопке Continue вернитесь в основное диалоговое окно.

    •  Теперь следует выяснить, какие параметры установлены по умолчанию. Щелкните для этого на кнопке Options... (Параметры). Не изменяя настроек, щелкните на кнопке Continue и вернитесь в основное диалоговое окно.


    Рис. 13.1: Диалоговое окно Independent-Samples T Test

    •  Запустите t-тест, щелкнув на ОК. В окне просмотра появятся следующие результаты:

    Group Statistics (Статистика групп)


    Лекарство


    N


    Mean (Среднее)


    Std. Deviation (Стандартное отклонение)


    Std. Error Mean (Стандартная ошибка среднего)


    Возраст


    Альфасан


    87


    62,24


    11,19


    1,20


    Бетасан


    87


    61,98


    11,96


    1,28


    Independent Samples Test (Тест для независимых выборок)

     

    Levene's Test for Equality of Variancies (Тест Левена на равенство дисперсий)


    t-test for Equality of Means (Тест Стьюдента на равенство средних)


    F


    Sig. (Значи-мость)


    Т


    df


    Sig. (2-tailed) (Значимость (двусто- ронняя))


    Mean Diffe-rence (Разность средних)


    Std. Error Differe-псе (Станда- ртная ошибка разницы)


    95 % Confidence Interval of the Difference (Довери-тельный интервал разницы)

     

    Lower (Нижняя граница)


    Upper (Верхняя граница)


    Возраст


    Equal variances assumed (Дис-персии равны)


    ,54


    ,462


    ,151


    172


    ,880


    ,26


    1,76


    -3,20


    3,73


    Equal variances not assumed (Ди- сперсии не равны)




    ,15'


    171,249


    ,880


    ,26


    1,76


    -3,20


    3,73


    Выведенные результаты содержат:

    •  количество наблюдений, средние значения, стандартные отклонения и стандартные ошибки средних в обеих группах,

    •  результаты теста Левена на равенство дисперсий.

    Как правило, гипотеза о равенстве (гомогенности) дисперсий не принимается, если тест Левена дает значение р < 0,05 (гетерогенность дисперсий). Для случаев как гомогенности (равенства), так и гетерогенности (неравенства) выводятся следующие характеристики:

    •  результаты t-теста: значение распределения t, количество степеней свободы df, вероятность ошибки р (под обозначением "Значимость (2-сторонняя)"), а также

    •  разница средних значений, ее стандартная ошибка и доверительный интервал.

    В данном примере мы не получаем значимого различия воздействия двух группами лекарств по возрасту (р = 0,880).


    В следующем t-тесте мы проверим, различается ли действие двух групп лекарств по так называемому индексу Брока. Этот индекс, разработанный одним парижским хирургом, предусматривает, что нормальный вес человека можно определить из следующего уравнения:


    Нормальный вес (кг) = Рост (см) — 100


    Если взять отношение фактического веса человека к нормальному весу по этой рормуле, то мы получим процентный показатель, который у людей с нормальным весом равен 100, у людей с избытком веса > 100 и т.д.


    Индекс Брака =((Вес в кг)/(Рост в см - 100)) • 100

    •   Определим на основе существующих переменных новую переменную, для чего выберем команды меню Transform (Преобразовать) Compute... (Вычислить)

    •  В поле выходной переменной (Target Variable) задайте новое имя "broca", а в поле численного выражения (Numeric Expression) введите выражение gew I (gr- 100) * 100

    •  Щелкните на кнопке ОК. Теперь можно командами меню Analyze (Анализ) Compare Means (Сравнение средних) Independent Samples T Test... (t-тест для независимых выборок) описанным выше способом провести t-тест для новой переменной broca.

    И этот тест показывает, что между двумя труппами лекарств не наблюдается значимого различия по индексу Брока (р = 0,233).

    1.gif

    Изображение: 

    13.2. Сравнение двух зависимых выборок

    13.2. Сравнение двух зависимых выборок


    Сейчас мы выясним, значимо ли изменяется содержание холестерина через месяц : осле начала приема лекарств. Для этого мы сравним переменные cho10 и cho11 при помощи t-теста для зависимых выборок. В этом тесте будут участвовать данные всех пациентов, независимо от группы принимаемых лекарств.

    •  Выберите в соответствующем подменю команду Paired-Samples Т Test... (t-тсст для парных выборок) 

    Откроется диалоговое окно Paired-Samples T Test.



    Рис. 13.2: Диалоговое окно Paired-Samples T Test

    •  Перенесите переменные cholO и choll из списка исходных переменных в поле парных переменных (Paired Variables).

    •  Щелкните на ОК, чтобы начать вычисления. В окне просмотра появятся следующие результаты:

    Paired Samples Statistics (Статистика для парных выборок)


    Mean


    N


    Std. Deviation


    Std. Error Mean


    Pair (Пары)


    Холестерин, исходный


    237,27


    174


    49,42


    3,75


    Холестерин, через 1 мес.


    239,20


    174


    49,51


    3,75


    Paired Samples Correlations (Корреляции для парных выборок)


    N


    Correlation (Корреляция)


    Sig. (Значимость)


    Pair (Пары)


    Холестерин, исходный & Холестерин, через 1 мес.


    174


    ,861


    ,000


    Paired Samples Test (Тест для парных выборок)


    Paired Differences (Парные разницы)

    Т

    df

    Sig.

    (2-tailed)

    Mean

    Std. Devi-ation

    Std. Error Mean

    95% Confi-dence Interval of the Diffe-rence

    Lower

    Upper

    Pair (Пары)

    Холе- стерин, исходный -Холе- стерин, через 1 мес.

    -1,93

    26,09

    1,98

    -5,83

    1,98

    -,974

    173

    ,332

    Результаты, выведенные в окне просмотра, содержат:

    •  средние значения, количество наблюдений, стандартные отклонения и стандартные ошибки средних для обеих переменных,

    •  коэффициент корреляции (момент произведений Пирсона) между переменными и значимость его отклонения от нуля,

    •  среднее значение, количество наблюдений, стандартное отклонение и стандартная ошибка разницы,

    •  результаты t-теста: тестовая величина, полученная из распределения Стьюден-та, количество степеней свободы df, вероятность ошибки р, обозначенная "Sig. (2-tailed)").

    Значимого изменения содержания холестерина за один месяц после начала приема лекарств не наблюдается (р = 0,332).


    Повторим вычисления, но теперь только для пациентов, принимавших альфасан (переменная med имеет значение 1; условие med = 1).

    •  Выберите в меню команды Data (Данные) Select Cases... (Выбрать наблюдения)

    •  Выберите опцию If condition is satisfied... (Если выполняется условие). Щелчком на кнопке If... (Если) откройте диалоговое окно, в котором можно сформулировать условие. Введите в соответствующем поле условие "med = 1".

    •  Щелкните на кнопке Continue, а в основном диалоге — на кнопке ОК.

    •  Снова запустите t-тест. Теперь он будет выполнен только для наблюдений (N = 87), относящихся к первой группе лекарств. Мы снова получим незначимый результат (р = 0,666).

    •  Чтобы последующий анализ снова можно было проводить с использованием всех наблюдений, откройте диалоговое окно Select Cases и выберите в нем опцию All cases (Все наблюдения).

    2.gif

    Изображение: 

    13.3 Сравнение более двух независимых выборок

    13.3 Сравнение более двух независимых выборок


    Далее мы исследуем, существует ли значимое различие веса (переменная gr) между четырьмя разными возрастными группами (переменная ak).

    •  Выберите в подменю команду One-Way ANOVA... (Однофакторный дисперсионный анализ)

    Подобная возможность есть и в первом пункте подменю (Means...), но она дает значительно более ограниченные возможности для анализа, и поэтому мы ее не рассматриваем. Появится диалоговое окно One-Way AN OVA.

    •  Перенесите переменную gr в список зависимых переменных (Dependent List), a переменную ak — в поле Factor (Фактор).

    •  Посмотрите, какие параметры можно задать для этого теста (кнопка Options...). Задайте вывод описательной статистики (флажок Descriptive) и проверку на гомогенность дисперсий (флажок Homogeneity-of-variance).

    •  Чтобы выполнить апостериорный тест, вернувшись в основное диалоговое окно, щелкните на кнопке Post Нос... Откроется диалоговое окно One-Way ANOVA: Post Hoc Multiple Comparisons (Однофакторный дисперсионный анализ: апостериорные множественные сравнения) рис. 13.4.

    •  Выберите тест Дункана (флажок Duncan). При значимом результате дисперсионного анализа этот тест показывает, какие именно возрастные группы значимо отличаются друг от друга. По умолчанию установлен уровень значимости 0,05; можно выбрать и другое значение.

    •  Запустите тест, щелкнув на ОК.


    Рис. 13.3: Диалоговое окно One-Way ANOVA



    Рис. 13.4: Диалоговое окно One-Way AN OVA: Post Hoc Multiple Comparisons


    В окне просмотра появятся следующие результаты:


    Descriptives (Описательная статистика)


    Рост


    N


    Mean


    Std. Devi-ation


    Std. Error


    95 % Confidence Interval for Mean (95 % доверительный интервал среднего).


    Mini-mum


    Maxi-mum


    Lower Bound


    Upper Bound


    до 55 лет


    52


    169,10


    8,21


    1,14


    166,81


    171,38


    150


    185


    56ч 65 лет


    51


    164,82


    7,62


    1,07


    162,68


    166,97


    146


    185


    66ч75 лет


    47


    162,47


    7,22


    1,05


    160,35


    164,59


    145


    175


    >75 лет


    24


    162,67


    7,38


    1,51


    159,55


    165,78


    150


    178


    Total


    174


    165,17


    8,08


    61


    16396


    166,38


    145


    185


    Test of Homogeneity of Variances (Тест гомогенности дисперсий)


    Рост


    Levene Statistic (Статистика Левена)


    dfl


    df2


    Sig.


    ,639


    3


    170


    591


    ANOVA (Дисперсионный анализ)


    Рост


    Sum of Squares (Сумма квадратов)


    Df


    Mean Square (Средний квадрат)


    F


    Sig. (Значимость)


    Between Groups (Между группами)


    1301,200


    3


    433,733


    7,380


    ,000


    Within Groups (В группах)


    9990,966


    170


    58,770


    Total


    111292,167


    173


    Апостериорные тесты Гомогенные подгруппы


    Рост


    Dunean"


    Возрастной класс


    N


    Subset for alpha = ,05 (Подгруппа для альфа = ,05).


    1


    2


    66-75 лет


    47


    162.47


    >75 лет


    24


    162,67


    56-65 лет


    51


    164,82


    до 55 лет


    52


    169,10


    Sig. (Значимость)


    ,201


    1,000


    Means for groups in homogeneous subsets are displayed (Показаны средние значения для групп внутри гомогенных подгрупп).


    a. Uses Harmonic Mean Sample Size = 39,300 (Используется гармоническое среднее для размера выборки = 39,300).


    b. The group sizes are unequal. The harmonic mean of the group sizes is used. Type I error levels are not guaranteed. (Размеры групп неодинаковы. Используется гармоническое среднее размеров групп. Уровни ошибок типа I не гарантируются).


    Выведенные результаты содержат:

    •  количество наблюдений, средние значения, стандартные отклонения и стандартные ошибки средних, 95 % доверительные интервалы, минимумы и максимумы для всех слоев фактора,

    •  результаты теста Левена на гомогенность дисперсий,

    •  типовую схему дисперсионного анализа, включая вероятность ошибки р (значимость) для оценки общей значимости,

    •  результаты многорангового теста Дункана.

    В этом примере дисперсионный анализ дает максимально значимый результат (р < 0,001). Тест Дункана выделяет две гомогенные подгруппы (со стандартным значением р = 0,05), одна из которых включает возрастной класс до 55 лет, а другая — три остальных класса. Это означает, что возрастной класс до 55 лет значимо отличается от трех других возрастных классов, которые, в свою очередь, не обнаруживают значимого различия между собой.


    Уменьшение роста с увеличением возраста может быть связано с тем, что в старших возрастных классах преобладают женщины, рост которых мал по сравнению с мужчинами, что и вызывает данный эффект. Повторим этот анализ для категорий пола. Окажется, что у мужчин факт уменьшения роста с увеличением возраста подтверждается, а для женщин — нет.


    Далее мы подробно рассмотрим имеющиеся в диалоговом окне AN OVA кнопки Contrasts (Контрасты), Post Hoc... и Options..., а также возможности, которые они предоставляют.

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    13.3.1 Разложение на составляющие тренда

    13.3.1 Разложение на составляющие тренда


    Сумму квадратов между группами можно разложить на линейные или полиномиальные (до 5 степени включительно) составляющие тренда.

    •  В диалоговом окне ANOVA щелкните на кнопке Contrasts... Появится диалоговое окно One-Way ANOVA: Contrasts (Однофакторный дисперсионный анализ: Контрасты).


    Рис. 13.5: Диалоговое окно One-Way AN OVA: Contrasts

    • Установите флажок Polynomial (Многочлен); после этого в списке Degree (Степень) можно будет выбрать порядок многочлена (линейный, квадратный, кубический, биквадратный или 5-й степени).

    5.gif

    Изображение: 

    13.3.2 Априорные контрасты

    13.3.2 Априорные контрасты


    Различия средних значений зависимых переменных, получаемые на базе априорных контрастов, можно подвергнуть t-тесту. Эта процедура называется априорным множественным сравнением. Контрасты определяются как последовательность (линейная комбинация) коэффициентов, каждый из которых соответствует отдельной категории независимой переменной.


    Для коэффициентов, используемых при определении контрастов, можно задавать положительные, отрицательные, целые и дробные значения. Категории независимой переменной, соответствующие отрицательным коэффициентам, комбинируются, эти комбинации сопоставляются с комбинациями категорий, которые соответствуют положительным коэффициентам. Категории, которым соответствуют нулевые коэффициенты, не учитываются. Сумма всех коэффициентов должна равняться нулю.


    В нашем примере сравнивались четыре возрастных класса (категории 1 -4) по переменной роста. Допустим, нам требуется сопоставить первую возрастную группу и комбинацию из трех остальных групп; для этого мы выберем нижеследующие априорные коэффициенты:


    -3 1 1 1


    Если же требуется сравнить комбинацию первых двух групп с последней группой, следует выбрать такие коэффициенты:


    -1-1 0 2


    Для определения описанных контрастов по вышеописанной процедуре множественного сравнения откроем в диалоге AN OVA вспомогательное диалоговое окно Contrasts. В поле Coefficients этого диалогового окна введем первый коэффициент и щелкнем на кнопке Add. Таким же образом вводятся остальные коэффициенты.


    Когда все коэффициенты задачи введены, можно кнопкой Next (Следующий) перейти ко вводу следующей комбинации коэффициентов. После задания коэффициентов для всех требуемых контрастов кнопкой Continue закройте это диалоговое окно. Можно задать до десяти контрастов, каждый из которых содержит до пятидесяти коэффициентов.

    13.3.3 Апостериорные тесты

    13.3.3 Апостериорные тесты


    Чтобы провести апостериорные тесты множественного сравнения средних, щелкните в диалоговом окне ANOVA на кнопке Post Hoc... В появившемся окне можно выбрать 'Мин или несколько из восемнадцати тестов, которые производят такие сравнения для всех групп:

    •  Наименьшая значимая разность (многократный t-тест без альфа-коррекции) —LSD

    •  Тест Бонферрони (многократный t-тест с альфа-коррекцией) — Bonferroni

    •  t-тест Сидака (Sidak)

    •  Тест Шеффе (Scheffe)

    •  Процедура Райана-Эйно-Габриеля-Уэлша, или F-тест (R-E-G-W-F)

    •  Процедура Райана-Эйно-Габриеля-Уэлша, или определение стьюдентизированного критерия размаха выборки (R-E-G-W-Q)

    •  Тест Стьюдента-Иьюмена-Кейлса (S-N-K)

    •  Тест Тьюки (Tukey) 

    • b Тьюки (Tukey's b)

    •  Тест Дункана (Duncari)

    •  GT2 Хохберга (Hochberg's GT2)

    •  Тест Габриеля (Gabriel)

    •  Тест Уоллера-Дункана (Waller-Duncan)

    •  t-тест Даннета, одно- и двусторонний (Dunnetf)

    •  Т2 Тэмхена (Tamehane 's T2)

    •  ТЗ Даннета (Dunnett's ТЗ)

    •  Тест Геймса-Ховелла (Games-Howell)

    •  С Даннета (Dunnett's С).

    Средние значения групп выводятся в порядке возрастания.

    13.3.4 Другие параметры

    13.3.4 Другие параметры


    В диалоговом окне ANOVA: Options, кроме способа обработки пропущенных значений, можно дополнительно задать вывод описательной статистики по группам (средних значений, стандартных отклонений, стандартных ошибок, минимумов, максимумов, 95 % доверительных интервалов и количеств наблюдений), а также проверку на гомогенность дисперсий посредством теста Левена. Можно также задать вывод линейчатых графиков средних значений.

    13.4. Сравнение более чем двух зависимых выборок

    13.4. Сравнение более чем двух зависимых выборок


    На основе данных по гипертонии исследуем, значимо ли изменяется содержание холестерина в течение четырёх промежутков времени (такое сравнение для первых двух промежутков времени мы уже провели в параграфе 13.2).


    Для достижения этой цели подходит однофакторный дисперсионный анализ с повторными измерениями. Пользователи SPSS, работавшие с этим пакетом на больших компьютерах, знают, что выполнить эту весьма распространенную операцию можно было только с помощью процедуры MANOVA (многомерный дисперсионный анализ). Ясно, что эта процедура предназначена для разнообразных методов многомерного анализа, но может быть использована при одномерном дисперсионном анализе с повторными измерениями.


    Начиная с версии 7 SPSS процедура MANOVA была заменена процедурой GLM (General Linear Model). Однако и в текущей версии процедура MANOVA по прежнему остается доступной при использовании программного синтаксиса.


    Разнообразные возможности анализа, предоставляемые этими процедурами (GLM и MANOVA), обеспечиваются ценой уже практически необозримого количества команд, спецификаций, параметров и ключевых слов. Даже при решении такой простой задачи, как рассматриваемая, надо уметь ориентироваться в этом многообразии. Несколько подробнее процедура GLM рассматривается в главе 17; однако в рамках этой книги невозможно охватить всю широту диапазона возможностей, предоставляемых этой процедурой.  Теперь перейдем к решению нашей задачи при помощи однофакторного дисперсионного анализа с повторными измерениями.

    •  Загрузите файл hyper, sav.

    •  Выберите в меню команды Analyze (Анализ) General Linear Model (Общая линейная модель) Repeated Measures... (Повторные измерения)

    Откроется диалоговое окно Repeated Measures Define Factors) (Определить фактор(ы) для повторных измерений).


    В данном примере мы подвергнем анализу четыре переменных: cho10, cho11, cho16 и chol12; следовательно, фактор повторных измерений будет задаваться четырьмя уровнями (слоями).

    •  Введите число 4 в поле Number of Levels (Количество уровней). По умолчанию принимается имя фактора faktorl; при желании можно задать для него любое другое i имя (например, "время").

    •  Щелкните на кнопке Add. Других факторов повторных измерений у нас нет, поэтому можно сразу закрыть этот диалог кнопкой Define (Определить). Появится диалоговое окно Repeated Measures (Повторные измерения) (см. рис. 13.7).

    •  Перенесите переменные cho10, choll, cho16 и chol12 в список Within-Subject Variables (Переменные внутри субъекта); далее кнопками, которые находятся внизу диалогового окна, можно установить дополнительные параметры но мы не будем их рассматривать.

    •  Запустите вычисления, щелкнув на ОК.


    Рис. 13.6: Диалоговое окно Repeated Measures Define Factor(s)



    Рис. 13.7: Диалоговое окно Repeated Measures

    •  Проанализируйте результаты, появившиеся в окне просмотра.

    Вы убедитесь, что для неподготовленного пользователя толкование полученных результатов расчёта может составить большие трудности. Подробнее о них мы поговорим в главе 17. Теперь же мы ограничимся указанием, что результаты обычного дисперсионного анализа содержатся в строке "Sphericity assumed" (Предположение о сферичности) таблицы вывода, приведенной ниже:


    Tests of Within-Subjects Effects (Тест эффектов внутри субъекта)


    Measure: MEASURE_1


    Source (Источник)


    Type III Sum of Squares (Сумма квадратов типа III)


    df


    Mean Square (Среднее квадратов)


    F


    Sig. (Значи-мость)


    FACTOR1


    Sphericity Assumed (Прини- мается гипотеза о сферич- ности)


    3381,822


    3


    1127,274


    2,653


    ,048


    Greenhouse- Geisser


    3381,822


    2,509


    1347,779


    2,653


    ,058


    Huynh-Feldt


    3381 ,822


    2,549


    1326,675


    2,653


    ,058


    Lower Bound


    3381,822


    1,000


    3381,822


    2,653


    ,105


    Error (FACTOR1)


    Sphericity Assumed (Прини- мается гипотеза о сферич- ности)


    220504,678


    519


    424,865




    Greenhouse- Geisser


    220504,678


    434,088


    507,972




    Huynh-Feldt


    220504,678


    440,994


    500,018




    Lower Bound


    220504,678


    173,000


    1274,594




    Вероятность ошибки р составляет 0,048, что указывает на значимое различие между отдельными моментами времени. К сожалению, даже в 10-й версии SPSS отсутствует возможность провести апостериорный тест для повторных измерений, чтобы выяснить, какие именно промежутки времени значимо отличаются друг от друга. В случае, если выявлены значимые отличия, как в рассмотренном примере, пользователю не остается ничего другого, кроме выполнения парного t-теста.

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    13.5 t-тест одной выборки

    13.5 Мест одной выборки


    Этот тест позволяет выяснить, отличается ли среднее значение, полученное на основе данной выборки, от предварительно заданного контрольного значения.


    Мы проверим, отличается ли средний показатель холестерина, полученный при исследовании гипертонии, от значения 229, которое могло быть определено в каком-либо другом исследовании.

    •  Загрузите файл hyper.sav.

    •  Выберите в меню команды Analyze (Анализ) Compare Means (Сравнение средних) One-Sample T Test... (t-тест для одной выборки) Откроется диалоговое окно One-Sample T Test (см. рис. 13.8).

    •  Перенесите переменную cho10 в поле Test Variable(s) и введите в поле Test Value (Контрольное значение) значение 229.

    •  Запустите вычисления, щелкнув на ОК.

    Результаты, показанные в окне просмотра, свидетельствуют о том, что в данном исследовании средний исходный уровень холестерина составляет 237,27, что значимо (р = 0,029) отличается от контрольного значения 229.



    Рис. 13.8: Диалоговое окно One-Sample T Test


    One-Sample Statistics (Статистика одной выборки)


    N


    Mean


    Std. Deviation


    Std. Error Mean


    Холестерин, исходный


    174


    237,27


    49,42


    3,75


    One-Sample Test (Тест пои одной выборке)


    Test Value = 229


    T


    df


    Sig. (2-tailed)


    Mean Difference


    95 % Confidence Interval of the Difference


    Upper

    Lower

    Холестерин, исходный


    2,207


    173


    ,029


    8,27


    ,88


    15,66


    Кнопкой Options... (Параметры) можно задать вместо 95 % любой другой доверительный интервал. Значение доверительного интервала может принимать значения в промежутке от 1 до 99%.

    8.gif

    Изображение: 

    Глава 14. Непараметрические тесты

    Глава 14. Непараметрические тесты

    1. Непараметрические тесты

    Непараметрические тесты


    Непараметрические (не основанные на каком-либо распределении вероятности) тесты применяются там, где выборки из переменных, принадлежащих к интервальной шкале, не подчиняются нормальному распределению. Так как в этих тестах обрабатывается не само измеренное значение, а его ранг (положение внутри выборки), то эти тесты нечувствительны к выбросам. Непараметрические тесты применяются также в тех случаях, когда переменные относятся к порядковой, а не к интервальной шкале. В меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты)


    SPSS предоставляет в распоряжение пользователей немалое количество непараметрических тестов. Все эти тесты приведены в нижеследующей таблице. В левой колонке находятся описания вспомогательных меню, а правая содержит описания тестов, вызываемых через соответствующие диалоговые окна.


    Вспомогательные меню


    Аналоговое окно


    Chi-Square (Хи-квадрат)


    Binomial (Биномиальный)


    Runs (Последовательности)


    1 -Sample K-S... (Колмогоров-Смирнов для одной выборки)


    2 Independent Samples (Две независимые выборки)


    Mann-Withney-U-Test (U-тест Манна-Уитни)


    Moses extreme reactions (Экстремальные реакции по Мозесу)


    Z Kolomgorov-Smirnov (Z-тест Колмогорова-Смирнова


    Wald-Wolfowitz runs (Последовательности Уалда-Вольфовица)


    К Independent Samples (К независимых выборок)


    Н Kruskal-Wallis (Н-тест Крускала-Уоллиса) Median (Медианный тест)


    2 Related Samples (Две связанные выборки)


    Wilcoxon (Тест Уилкоксона) Sign (Знак)


    McNemar (Тест МакНемара)


    К Related Samples (К связанных выборок)


    Friedman (Тест Фридмана)


    W Kendall (W-тест Кендала)


    Q Cochran (Q-тест Кохрана)


    Наиболее часто применяемыми тестами являются тесты для сравнения двух и более независимых или зависимых выборок. Наиболее известными тестами, служащими для этих целей являются U-тест Манна-Уитни, Н-тест Крускала-Уоллиса, тест Уилкоксона и тест Фридмана. Важную роль также играет тест Колмогорова-Смирнова для одной выборки, который может применяться для проверки наличия нормального распределения.


    Непараметрические тесты могут, конечно, применяться и в случае нормального распределения значений. Но в этом случае они будут иметь лишь 95 %-ую эффективность по сравнению с параметрическими тестами. Если Вы хотите, к примеру, произвести множественное сравнение средних значений двух независимых выборок, причем выборки являются частично подчиняются нормальному распределению, а частично — нет, то рекомендуется всегда применять U-тест Манна и Уитни.

    14.1 Сравнение двух независимых выборок

    14.1 Сравнение двух независимых выборок


    В этом разделе описано четыре теста. Наиболее часто применяемым является U-тест Манна и Уитни, который поэтому и будет представлен в первую очередь.

    14.1.1 U-тест по методу Манна и Уитни

    14.1.1 U-тест по методу Манна и Уитни


    Это самый известный и самый распространенный тест непараметрического сравнения двух независимых выборок. Он основан на использовании одной общей последовательности значений обоих выборок.


    Мы хотим проверить, отличаются ли показатели сахара в крови для мужчин и женщин в примере об исследовании гипертонии (файл hyper.sav).


    Если Вы построите гистограмму показателя сахара в крови (переменная bz0), то заметите явную деформацию распределения в левую сторону. Тест Колмогорова-Смирнова (см. гл. 14.5) также показывает очень значительное отклонение от нормального распределения. Стало быть, для сравнения обоих выборок следует вместо t-теста Стьюдента применить U-тест по методу Манна и Уитни.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) 2 Independent Samples... (Две независимые выборки)

    Появится диалоговое окно Two Independent Samples Tests (Тесты для двух независимых выборок) (см. рис. 14.1).


    U-тест по методу Манна и Уитни является предварительной установкой.

    •  Перенесите переменную bz0 из поля исходных переменных в поле тестируемых переменных, а переменную g в поле групповых переменных.

    •  После щелчка на кнопке Define Groups (Определить группы). Вы получите возможность внести коды (1 — мужской и 2 — женский), необходимые для идентификации групп.

    •  После щелчка на Continue Вы опять попадаете в исходное диалоговое окно.

    •  Запустите программу вычисления путём нажатия на ОК. 

    В окне просмотра появятся следующие результаты:



    Рис. 14.1: Диалоговое окно Two Independent Samples Tests (Тесты для двух независимых выборок)


    Ранги


    Пол


    N


    Mean Rank (Усреднённый ранг)


    Sum of Ranks (Ранговая сумма)


    Blutzucker, Ausgangswert (Сахар, исходное значение)


    maennlich (Мужской)


    59


    81,66


    4818,00


    weiblich Женский


    115


    90,50


    10407,00


    Total (Сумма)


    174


    Статистика теста а


    Blutzucker, Ausgangswert (Сахар, исходное значение)


    Mann-Whitney U jU-тест по Манну и Уитни)


    3048,000


    W Уилкоксона


    4818,000


    Z


    -1,096


    Asymp. Sig. (2-tailed) Асимптотическая значимость (2-сторонняя)


    ,273


    a Grouping Variable: Geschlecht (Групповая переменная: пол).


    Выведенные результаты включают следующие показатели:

    •  количество наблюдений, усреднённые ранги и ранговая сумма для двух выборок (причём большим значениям присваиваются низшие ранговые места),

    •  тестовую величину U, определенную с помощью теста Манна и Уитни,

    •  наименьшее значение из обоих ранговых сумм (W-тест Уилкоксона),

    •  точное значение вероятности ошибки р при количестве наблюдений менее 30 и

    •  тестовую величину z, определенную по тесту Колмогорова-Смирнова, а также относящуюся к ней вероятность ошибки р, которую следует использовать при количестве наблюдений более 30.

    Выясняется, что в рассматриваемом примере разница показателей сахара в крови между полами не является статистически значимой (р = 0,273).


    Нажав кнопку Options, Вы можете выбрать дополнительные возможности вывода данных, относящихся к рассмотренному и к другим непараметрическим тестам. Наряду с обычной обработкой пропущенных значений, можно организовать расчет дескриптивных статистик (среднее значение, минимум, максимум, стандартное отклонение, количество наблюдений) и квартилей (25, 50 и 75 процентили). Однако в этом случае характеристики дескриптивной статистики будут определяться одновременно для тестируемых и группирующих переменных. Это абсолютно бесполезно, так как в данном случае дескриптивная статистика имеет смысл только для тестируемых переменных, разбитых на группы по группирующим переменным. К сожалению, данная ошибка не была исправлена и в 10 версии SPSS.


    В рассмотренном примере проведения U-теста был бы также очень полезен расчет медиан обеих групп. Медианы определяются с помощью других средств SPSS. В нашем примере медиана показателя сахара для мужчин равна 93, а для женщин 97.

    1.gif

    Изображение: 

    14.1.2 Тест Мозеса (Moses)

    14.1.2 Тест Мозеса (Moses)


    Данный тест проверяет различие размаха двух независимых выборок, которые состоят из переменных, относящихся к порядковой шкале, причем одна выборка рассматривается как контрольная группа, а другая как экспериментальная. Так как размах экстремальных значений может давать искаженные представления, то при помощи установки по умолчанию по обеим сторонам распределения контрольной группы отсекаются в обшей сложности 5 процентов значений.


    Однако, это может привести к тому, что реальные различия в наблюдаемых значениях переменных, будут искусственно стёрты. Это можно увидеть на следующем примере, который уже рассматривался при изучении U-теста по Манну и Уитни.

    •  Откройте файл hyper.sav.

    •  В диалоговом окне Two Independent Samples Tests (Тесты для двух независимых выборок) удалите флажок для U-теста по методу Манна и Уитни и отметьте вместо этого тест Мозеса (Moses extreme reactions).

    •  В качестве тестовой переменной выберите переменную rrsl, а в качестве групповой переменной переменную med с кодировками 1 и 2.

    •  Запустите программу вычисления путём нажатия на ОК. В окне просмотра появятся следующие результаты:

    Частоты


    Медикамент


    N


    syst. Blutdruck, Ausgangswert (Систолическое давление, через 1 месяц)


    Alphasan (контрольный)


    87


    Betasan (экспериментальный)


    87


    Total (Сумма)


    174


    Статистика теста a,b


    Систолическое давление, через 1 месяц


    Observed Control Group Span (Наблюдаемый размах контрольной группы)


    NSig. (1 -tailed) N Значимость (1 -сторонняя)


    167 ,032


    Trimmed Control Group Span (Размах усеченной контрольной группы)


    N Sig. (1-tailed) N Значимость (1-сторонняя)


    156 ,500


    Outliers Trimmed from each End (Выбросы удалены с обеих сторон)


    4


    а. Тест Мозеса


    b. Групповая переменная: медикамент


    При проведении теста Мозеса первая из двух групп рассматривается как контрольная. Значения обеих групп располагаются на порядковой шкале и им присваиваются соответствующие ранговые места. В контрольной группе подсчитывается размах между этими ранговыми местами, то есть разность между большим и меньшим рангом. Этот размах равен 167 с соответствующим значением вероятности ошибки р = 0,032. Полученное значение вероятности ошибки указывает на значимое отклонение от размаха, ожидаемого при равномерном распределении. Эта значимость полностью исчезает (р = 0,500), если при подсчёте размаха контрольной группы удалить по четыре самых больших и самых малых ранга.

    14.1.3 Тест Колмогорова-Смирнова

    14.1.3 Тест Колмогорова-Смирнова


    Условия применения данного теста такие же, как и при использовании U-теста по методу Манна и Уитни. Тест Колмогорова-Смирнова является предпочтительным тогда, когда количество категорий для тестируемых переменных ограничено. Если для такого j случая применять U-тест Манна и Уитни, то появляется большое количество ранговых мест, к которым относится сразу несколько переменных, то есть возникают неоднозначные ранговые последовательности. Основой теста является расчет максимальной разности между кумулятивными частотами обеих выборок. Эта разность  обозначается величиной z, на основании которой, выводится вероятность ошибки р.  В главе 11 рассматривался файл studium.sav, в котором при помощи переменной  psyche отражалось психологическое состояние студентов (закодированное цифрами от 1  до 4 для значений: очень неустойчивое до очень устойчивое), а при помощи переменной sex — пол (1 = женский, 2 = мужской). Раньше различия между полами проверялись при помощи теста хи-квадрат. В данном случае для определения различия I можно также применить тест Колмогорова-Смирнова.

    •  Откройте файл studium.sav.

    •  Активируйте в диалоговом окне Two Independent Samples (Тесты для двух независимых выборок) тест Колмогорова-Смирнова.

    •  Перенесите переменную psyche в поле тестируемых переменных, а переменной sex присвойте статус групповой переменной с категориями 1 и 2.

    • Запустите вычисления путём нажатия на ОК.

     В окне просмотра появятся следующие результаты расчёта:


    Статистика теста а 


    Psychische Lage


    ,370


    ,000 


    -,370 


    Most Extreme Differences (Самые экстремальные разности)


    Абсолютно Положительно Отрицательно


    Z-Колмогорова-Смирнова


     

    1,875
    Asymp.Sig.(2-tailed) (Статистическая значимость (2-сторонняя)

    ,002


    a. Grouping Variable: Geschlecht (Групповая переменная: пол)


    Получается очень значимая разница между полами в отношении психологического состояния (р = 0,002).

    14.1.4 Тест Уалда-Вольфовица (Wald-Wolfowitz)

    14.1.4 Тест Уалда-Вольфовица (Wald-Wolfowitz)


    Условия применения данного теста те же, что и при U-тесте по методу Манна и Уитни или при тесте Колмогорова-Смирнова. Значения обоих групп выстраиваются в единую последовательность по рангу. Затем производится подсчёт количества смен группового признака, с помощью которого можно найти количество непрерывных


    последовательностей (количество смен плюс 1). Если появляются одинаковые значения (ранговые связки), то выводятся значения минимального и максимального числа возможных непрерывных последовательностей. Исходя из количества непрерывных последовательностей, можно найти вероятность ошибки р. Данный тест не пригоден для переменных с малым числом категорий, так как в этом случае очень сильно возрастает количество ранговых связок.


    В качестве примера рассмотрим уже многократно использовавшийся пример со сравнением показателя кровяного давления.

    •  Откройте файл hyper.sav.

    •  В диалоговом окне Two Independent Samples (Тесты для двух независимых выборок) активируйте тест Уалда-Вольфовица.

    •  Перенесите переменную rrsl в поле для тестируемых переменных, переменной med присвойте статус групповой переменной с категориями 1 и 2.

    •  Запустите вычисления путём нажатия ОК. В окне просмотра появятся следующие результаты:

    Статистика теста b,c

     

    Number of Runs (Число непрерывных последователь- ностей)


    Z


    Asymp. Sig. (1-tailed) (Статисти- ческая значимость , (1 -сторонняя))


    Syst. Blutdruck, nach 1 Monat (Систолическое давление, через 1 месяц)


    Minimum Possible (Минимально возможное)


    13"


    -11,404


    ,000


    Maximum Possible (Максимально возможное)


    146 а


    8,819


    1,000


    a. There are 10 inter-group ties involving 165 cases. (Между группами насчитывается 10 связок, которые охватывают 165 наблюдений.)


      b. Wald-Wolfowitz Test (Тест по методу Уалда-Вольфовица) 


    с. Grouping Variable: Medikament (Групповая переменная: медикамент)


    В результате мы получаем различие между минимальной и максимальной возможной непрерывной последовательностью (значение Z) и связанную с ним вероятность ошибки. Так как рассчитываемые значения Z располагаются по обоим краям стандартного нормального распределения, то выборка может содержать исходные данные, не пригодные для проведения этого теста. Поэтому тест Уальда-Вольфовица является не очень убедительным, в особенности при наличии ранговых связок.

    14.2 Сравнение двух зависимых выборок

    14.2 Сравнение двух зависимых выборок


    Понятие о зависимости выборок было рассмотрено в главе 5.1.3. Для проведения сравнения для таких выборок SPSS предлагает три различных теста, среди которых установленным по умолчанию является тест Уилкоксона. Заслуживает внимания так же и знаковый тест. При наличии дихотомических переменных применяется тест хи-квадрат по методу МакНемара.

    14.2.1 Тест Уилкоксона (Wilcoxon)

    14.2.1 Тест Уилкоксона (Wilcoxon)


    Этот тест является традиционным непараметрическим тестом для сравнения двух зависимых выборок. Он основан на построении ранговой последовательности абсолютных разностей пар значений.


    Мы уже установили (см. раздел 14.1), что для обоих медикаментов после 1 месяца приема наблюдается значительное понижение систолического кровяного давления. Теперь мы хотим проверить, является ли это изменение закономерным. Для простоты мы сначала должны быть рассмотрены все наблюдения подряд, то есть без разделения на группы по принимаемым медикаментам.


    Переменные rrs0 и rrs1 (начальный уровень систолического давления и уровень через месяц после начала приема медикамента) представляют собой типичный пример связанных (зависимых) выборок.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze (Анализ) Nonparametric Tests... (Непараметрические тесты) 2 Related Samples... (Две связанные выборки)

    Вы сможете убедиться в том, что предварительно по умолчанию установлен тест Уил-коксона (см. рис. 14.2)

    •  Теперь в поле тестируемых переменных нужно выделить две необходимые переменные и эту пару перенести в поле для спаренных переменных. В нашем примере такими переменными являются rrsO и rrsl.

    •  Запустите тест Уилкоксона на исполнение нажатием клавиши ОК. В окне просмотра появятся результаты расчёта:

    Ranks (Ранги)


    N


    Mean Rank (Средний ранг)


    Sum of Ranks (Ранговая сумма)


    syst. Blutdruck, nach 1 Monat - syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, через 1 месяц -систолическое кровяное давление, исходная величина)


    Negative Ranks (Отрицательные ранги)


    144а


    77,81


    11204,00


    Positive Ranks (Положительные ранги)



    53,00


    424,00


    Ties (Связи)


    22е


    Total (Сумма)


    174


    a. syst Blutdruck, nach 1 Monat < syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, через 1 месяц < систолическое кровяное давление, исходная величина)


    b. syst. Blutdruck, nach 1 Monat > syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, через 1 месяц > систолическое кровяное давление, исходная величина)


    с. syst. Blutdruck, nach 1 Monat = syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, через 1 месяц = систолическое кровяное давление, исходная величина)


    Статистика теста b


    syst. Blutdruck, nach 1 Monat - syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, через 1 месяц -систолическое кровяное давление, исходная величина)


    Z


    -9,970а


    Asymp. Sig. (2-tailed) (Статистическая значимость (2-сторонняя))


    ,000


    a. Based on positive ranks (Основано на положительных рангах)


      b. Wilcoxon test (Тест Вилоксона)


    Результаты расчёта включают следующие данные:



    Рис. 14.2: Диалоговое окно Two-Related-Samples Tests (Тесты для двух связанных выборок)

    •  количества, средние ранги и ранговые суммы для отрицательных и положительных разностей (причём большим абсолютным разностям присваивается более высокое ранговое место)

    •  количество нулевых разностей и

    •  контрольную величину z с соответствующей вероятностью ошибки р.

    Полученная в приведенном примере величина р = 0,000 свидетельствует об очень  значимой разнице.


    Теперь повторим тест, но отдельно для каждого медикамента. Это значит, что один раз расчёт нужно произвести с условием med = 1, а второй с условием med = 2.


    Для расчёта можно применить метод "Выбрать наблюдения", однако метод "Разделить файл" является более быстрым (см. гл. 7.4).

    •  Выберите в меню Data (Данные) Split file... (Разделить файл)

    •  Активируйте опцию Organize output by groups (Выводить результаты по группам), и перенесите переменную med в поле Groups based on (Группы основываются на).

    •  Т.к. данные не сортированы по групповым признакам, оставьте опцию Sort the File by grouping variables... (Файл сортировать по групповым признакам) включённой и щёлкните на ОК.

    •  Проведите ещё раз тест Уилкоксона, как было описано в начале раздела. Теперь он производится отдельно для каждого медикамента.

    2.gif

    Изображение: 

    14.2.2 Знаковый тест

    14.2.2 Знаковый тест


    Условия применения данного теста те же, что и для теста Уилкоксона, но в отличие от него здесь ведётся подсчёт только положительных и отрицательных разностей, что может оказаться полезным тогда, когда различия между выборками будут не слишком заметны.


    До и после проведения курса лечения 67 пациентов были опрошены на предмет их самочувствия со следующими вариантами ответов: "хорошее", "относительно нормальное" или "плохое". Из 5 пациентов, самочувствие которых до прохождения курса лечения было хорошим, 3 после лечения отметили ответ "хорошее", а 2 "относительно нормальное". 18 пациентов до курса лечения оценили своё самочувствие как "относительно нормальное". 9 из них после лечения дали ответ "хорошее", 7 — "относительно нормальное" и 2 — "плохое". 44 пациента до лечения отозвались о своём самочувствии как о плохом. Из них 8 после лечения дали ответ "хорошее", 22 — "относительно нормальное", а 14 как и прежде — "плохое". Требуется проверить, является ли значимым успех лечения.


    Данные находятся в файле kur.sav, который содержит переменные befl и bef2 (самочувствие до и после лечения с кодировками 1 = хорошо, 2 = относительно нормально, 3 = плохо) и n (частоты соответствующих комбинаций состояния пациентов).

    •  Откройте файл kur.sav.

    •  Используя меню Data (Данные) Weight cases... (Взвесить наблюдения) присвойте переменной п статус частотной переменной (см. гл. 8.7.2).

    •  После вызова меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) 2 Related Samples... (Две связанные выборки) откроется диалоговое окно Two-Related-Samples Tests (Тесты для двух связанных выборок).

    •  Укажите переменные befl и bef2 в качестве тестируемой пары.

    •  Из-за принятой кодировки переменных, вместо предварительно установленного теста Уилкоксона необходимо выбрать знаковый тест.

    •  Запустите расчёт на исполнение при помощи нажатия ОК. В окне просмотра появятся следующие результаты расчёта:

    Frequencies (Частоты)


    N


    Befinden nach der Kur - Befinden vor der Kur (Самочувствие после лечения - самочувствие до лечения)


    Negative Differences (Отрицательные разности) г


    39


    Positive Differences (Положительные разности) "


    4


    Ties (Связки) с


    27


    Total (Сумма)


    67


    a. Befinden nach der Kur < Befinden vor der Kur (Самочувствие после лечения < самочувствие до лечения)


    b. Befinden nach der Kur > Befinden vor der Kur (Самочувствие после лечения > самочувствие до лечения)


    с. Befinden nach der Kur = Befinden vor der Kur (Самочувствие после лечения = самочувствие до лечения)


    Test Statistics3 (Статистика теста)


    Befinden nach der Kur - Befinden vor der Kur (Самочувствие после лечения - самочувствие до лечения)


    Z


    -5,185


    Asymp. Sig. (2-tailed) (Статистическая значимость (2-сторонняя))


    ,000


    a. Sign test (Знаковый тест)


    Результаты расчёта дают 39 отрицательных разностей (bef2 < befl), которые свидетельствуют о наступлении улучшений и 4 положительных разности, а в 24 наблюдениях изменений самочувствия не наблюдается. Вследствие того, что количества положительных и отрицательных разностей отличаются, значение z получается равным -5,185; этому показателю соответствует вероятность ошибки р < 0,001. Стало быть, наблюдается очень значимый успех лечения.

    14.2.3 Тест хи-квадрат по методу МакНемара (McNemar)

    14.2.3 Тест хи-квадрат по методу МакНемара (McNemar)


    Данный тест применяется исключительно при наличии дихотомических переменных. При этом для двух зависимых переменных выясняется, происходят ли какие-либо изменения в структуре распределения их значений. В большинстве наблюдений сравнение проводится с учётом временного фактора по схеме "до — после".


    В качестве примера рассмотрим исследование, проведенное в области стоматологии, где изучается факт кровоточивости дёсен до и после лечения.

    •  Откройте файл zahnblut.sav.

    Он содержит две переменные b1 и b2, которые своими кодировками (1 = да, 2 = нет) указывают на наличие кровоточивости дёсен соответственно до и после лечения.

    •  В диалоговом окне Two-Related-Samples Tests (Тесты для двух связанных выборок) выберите тест МакНемара и перенесите обе переменные Ы и Ь2 в поле тестируемых пар.

    •  Запустите расчёт на исполнение нажатием кнопки ОК. В окне просмотра появятся следующие результаты:

    Zahnfleischbluten vor Behandlung & Zahnfleischbluten nach Behandlung (Кровоточивость дёсен до лечения & Кровоточивость дёсен после лечения)


    Zahnfleischbluten vor Behandlung (Кровоточивость дёсен до лечения)


    Zahnfleischbluten nach Behandlung (Кровоточивость дёсен после лечения)


    2

    1

    1


    362


    808


    2


    240


    1565


    Test Statistics (Статистика теста) b


    Zahnfleischbluten vor Behandlung & Zahnfleischbluten nach Behandlung (Кровоточивость дёсен до лечения & Кровоточивость дёсен после лечения)


    N


    2975


    Chi-Square (Хи-квадрат) а


    306,764


    Asymp. Sig. (Статистическая значимость)


    ,000


    a. Continuity Corrected (Непрерывность откорректирована) b. McNemar Test (Tea МакНемара)


    Принимая во внимание кодировки выясняется, что в 808 наблюдениях после лечения кровоточивость дёсен исчезла, однако, с другой стороны, в 240 наблюдениях после прохождения курса лечения вновь появилась. В 362 наблюдениях кровоточивость оставалась постоянной. В 1565 наблюдениях кровоточивости не наблюдалось ни перед, ни после лечения. В соответствии с вероятностью ошибки, соответствующей величине критерия хи-квадрат (р < 0,001), можно констатировать, что разница между количеством улучшений (808) и количеством ухудшений (240) является очень значимой.

    14.3 Сравнение более чем двух независимых выборок

    14.3 Сравнение более чем двух независимых выборок


    Наряду Н-тестом по Крускалу и Уоллису, который установлен по умолчанию, предлагается тест медиан, не очень рекомендуемый для применения.

    14.3.1 Н-тест по методу Крускала и Уоллиса

    14.3.1 Н-тест по методу Крускала и Уоллиса


    Этот тест является модификацией U-теста Манна и Уитни на случай для более двух 1езависимых выборок. Он также базируется на общей ранговой последовательности значений всех выборок.


    В данном случае нам необходимо протестировать четыре возрастные категории из рассмотренного выше исследования гипертонии на предмет значимости различия исходного показателя систолического кровяного давления.

    •  Откройте файл hyper.sav Если бы Вы через меню Analyze (Анализ) Compare Means (Сравнить средние значения) Means... (Средние значения) вычислили средние значения исходного показателя давления (переменная rrs0) для четырёх возрастных категорий, то получили бы следующие результаты:

    Report (Сводка)


    jyst. Blutdruck, Ausgangswert (Систолическое кровяное давление, исходное значение)


    Altersklassen (Возрастные категории)


    Mean (Среднее значение)


    N


    Std. Deviation (Стандартное отклонение)


    до 55 лет


    170,38


    52


    15,37


    56-65 лет


    172,16


    51


    13,12


    66-75 лет


    175,64


    47


    13,62


    > 75 лет


    168,75


    24


    11,44


    Сумма


    172,10


    174


    13,86

    •  Для проверки значимости выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) К Independent Samples... (Несколько независимых выборок)

    Появится диалоговое окно Tests for Several Independent Samples (Тесты для нескольких независимых выборок) (см. рис. 14.3).


    Н-тест по методу Крускала и Уоллиса является установкой по умолчанию.

    •  Перенесите переменную rrs0 в поле тестируемых переменных, а переменную ak, которая описывает четыре возрастные категории, в список групповых переменных.


    Рис. 14.3: Диалоговое окно Tests for Several Independent Samples (Тесты для нескольких независимых выборок)

    •  Щёлкните на Define Range... (Определить диапазон) и введите значения 1 и 4 для минимального и максимального значения переменной соответственно.

    •  Вернувшись снова в исходное диалоговое окно (щелчок на Далее), начните вычисления путём щелчка на ОК.

    В окне просмотра появятся следующие результаты:


    Ranks (Ранги)


    Altersklassen (Возрастные категории)


    N


    Mean Rank (Средний ранг)


    syst. Blutdruck, Ausgangswert (Систолическое давление, исходная величина)


    до 55 лет


    52


    79,76


    56-65 лет


    51


    87,51


    66-75 лет


    47


    102,17


    > 75 лет


    24


    75,52


    Total (Сумма)


    174


    Test Statistics (Статистика теста) а, b


    syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, исходная величина)


    Chi-Square (Хи-квадрат)


    6,801


    Df


    3


    Asymp. Sig. (Статистическая значимость)


    ,079


    a. Kruskal Wallis Test (Тест Крускала-Уолхлиса)


    b. Grouping Variable: Altersklassen (Групповая переменная: Возрастные категории)


    В результаты расчёта входят:

    •  усреднённые ранги в отдельных группах (где большим значениям отдаются более высокие места) и

    •  величина критерия хи-квадрат, соответствующее число степеней свободы (df) и вероятность ошибки р.

    В данном примере для которого р = 0,079 граница значимости преодолена незначительно, это означает, что всё же наблюдается тенденция к проявлению закономерности. В случае выявления существенной закономерности, для определения групп, которые значимо отличаются друг от друга, необходимо протестировать все группы попарно (как в тесте по методу Манна и Уитни).

    3.gif

    Изображение: 

    14.3.2 Медианный тест

    14.3.2 Медианный тест


    Для всех независимых выборок вычисляется общая медиана; затем подсчитывается, какое количество измеряемых величин находится ниже и выше медианы. Это приводит к построению полевой таблицы, содержащей 2*k полей, которая затем подвергается тесту хи-квадрат. Как уже указывалось, эффективность данного теста не очень высока.


    Используем пример, использованный для изучения Н-теста по Крускалу и Уоллису.

    •  В этот раз вместо указанного теста активируйте медианный тест.

    •  Запустите расчёт путём нажатия ОК.

    В окне просмотра появятся следующие результаты:


    Frequencies (Частоты)


    Altersklassen (Возрастные категории)


     


    до 55 лет


    56-65 лет

    66-75лет >75лет

    syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, исходная величина)


    > медианы <=


    медианы


    18


    19

    24

    7


    34


    32

    23

    17


    Test Statistics (Статистика для теста) b


    syst. Blutdruck, Ausgangswert (Систолическое кровяное давление, исходная величина)


    N


    174


    Медиана


    170,00


    Хи-квадрат


    4,333а


    Df


    3


    Asymp. Sig. (Статистическая значимость)


    ,228


    a. 0 cells (,0%) have expected frequencies less than 5. The minimum expected cell frequency is 9,4. (В 0 ячеек (,0%) ожидается значение частоты менее 5. Минимальная ожидаемая частота в ячейке равна 9,4.)


    b Grouping Variable: Altersklassen (Групповая переменная: возрастные категории)


    Так как в Н-тесте получилась р = 0,079, то он оказывается более подходящим для выявления закономерностей.

    14.4 Сравнение более чем двух зависимых выборок

    14.4 Сравнение более чем двух зависимых выборок


    Наиболее часто применяемым является тест Фридмана, в то время как W-тест Кендала и Q-тест Кохрана предназначены для отдельных специальных случаев.

    14.4.1 Тест Фридмана

    14.4.1 Тест Фридмана


    Этот тест представляет собой расширение теста Уилкоксона для случая наличия более чем двух зависимых выборок. Он основывается на ранговых последовательностях, которые строятся для значений всех переменных участвующих в тесте.

    •  Если Вы с помощью меню Analyze (Анализ) Reports (Сводка) Case Summaries... (Итоги по наблюдениям)

    произведёте расчёт медиан для диастолического кровяного давления из исследования гипертонии (файл hyper.sav) для четырёх последовательных моментов времени (переменные rrdO, rrdl, rrd6, rrd!2), то получите следующие значения:


    Case Processing Summary (Сводная таблица наблюдений)


    Median (Медианы)


    diast. Blutdruck, Ausgangswert (Диастоли- ческое кровяное давление, исходная величина)


    diast. Blutdruck, nach 1 Monat (Диастолическое кровяное давление, через 1 месяц )


    diast. Blutdruck, nach 6 Monaten (Диастоли- ческое кровяное давление, через 6 месяцев)


    diast. Blutdruck, nach 12 Monaten (Диастоли- ческое кровяное давление, через 12 месяцев)


    100,00


    95,00


    90,00


    85,00


    Видно, что Диастолическое кровяное давление непрерывно снижается. Этот факт следует проверить при помощи теста на значимость. В приведенном примере речь идёт о нескольких (а именно, — о четырёх) связанных выборках. Подходящим непараметрическим тестом для сравнения этих выборок является тест Фридмана.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) К Related Samples... (Две связанные выборки)

    В диалоговом окне Вы увидите, что предварительно установлен тест Фридмана (см. рис. 14.4).

    •  Перенесите по очереди переменные rrd0, rrdl, rrd6 и rrd12 в поле тестируемых переменных. После щелчка на кнопке Statistics... (Статистики) у Вас появилась бы возможность организовать вывод дескриптивных статистик и квантилей, но в данном случае мы от этого воздержимся.

    •  Запустите расчёт путём нажатия ОК.


    Рис. 14.4: Диалоговое окно Tests for Several Related Samples (Тесты для нескольких связанных выборок)


    В окне просмотра появятся следующие результаты:


    Ranks (Ранговые ряды)


    Mean Rank (Средний ранг)


    diast. Blutdruck, Ausgangswert (Диастолическое кровяное давление, исходная величина )


    3,81


    diast. Blutdruck, nach 1 Monat Диастолическое кровяное давление, через 1 месяц )


    2,57


    diast. Blutdruck, nach 6 Monaten (Диастолическое кровяное давление, через 6 месяцев)


    2,02


    diast. Blutdruck, nach 12 Monaten (Диастолическое кровяное давление, ЧЙПРЗ 1 9 Миля! ien^


    1,60


    Test Statistics (Статистика теста)a


    N


    174


    Chi-Square (Хи-квадрат)


    317,754


    Df


    3


    Asymp. Sig. (Статистическая значимость)


    ,000


    а. Тест Фридмана


    Полученные результаты содержат:

    •  усреднённые ранги участвующих переменных (где большим значениям присваиваются более высокие места) и

    •  количество наблюдений, величина критерия хи-квадрат, полученная в результате теста, соответствующее число степеней свободы (df) и вероятность ошибки р.

    В приведенном примере получился очень значимый показатель р < 0,001. Теперь, применяя попарное тестирование, при помощи теста Уилкоксона Вы самостоятельно можете выяснить, какие временные моменты по отдельности отличаются друг от друга.

    4.gif

    Изображение: 

    14.4.2 W Кендала

    14.4.2 W Кендала


    Коэффициент согласованности Кендала (W) измеряет степень согласованности между несколькими связанными выборками. Он был специально разработан для проведения тестов в ситуации, когда большое количество рецензентов высказывают своё мнение о большом количестве рецензируемых персон (объектов).


    При этом рецензируемые образуют отдельные переменные, а рецензенты — отдельные наблюдения. На этом несколько неожиданном разделении следует остановиться подробнее. Каждый рецензент при помощи заданных наперед оценок выстраивает рецензируемых по рангу. Затем для каждого рецензируемого определяется сумма ранговых номеров. Исходя из этих сумм, определяется масштаб различных отзывов. Коэффициент согласованности W, вычисленный на основании этого масштаба, указывает на меру согласия между рецензентами. Коэффициент согласованности может принимать значения между 0 и 1. Значение 1 соответствует наличию полного согласия.


    Три крупные спортивные газеты оценивали футболистов высшей лиги, игравших в прошлом туре чемпионата, при помощи оценок от 1 до 6 (к примеру 1 за "мировой уровень" и 6 за "не отработал свои деньги"). Оценки для 22 футболистов, участвовавших в одной игре, находятся в файле fussball.sav, который содержит три наблюдения, соответствующие трем рецензентам и 22 переменные (sl-s22), соответствующие 12 рецензируемым игрокам.

    •  Откройте файл fussball.sav.

    •  Переместите в диалоговом окне Tests for Several Related Samples (Тесты для нескольких связанных выборок) переменные sl-s22 в поле тестируемых переменных.

    •  Вместо предварительно установленного теста Фридмана активируйте РК-тест Кендала.

    •  Запустите расчёт путём нажатия ОК. В окне просмотра появятся следующие результаты:

    Ranks (Ранги)


    Mean Rank (Усреднённый ранг)


    S1


    12,33


    S2


    6,17


    S3


    10,33


    S4


    3,50


    S5


    8,50


    S6


    19,33


    S7


    18,50


    S8


    10,50


    S9


    6,17


    S10


    14,67


    S11


    16,67


    S12


    12,67


    S13


    6,67


    S14


    15,33


    S15


    19,67


    S16


    3,33


    S17


    12,33


    S18


    17,00


    S19


    2,17


    S20


    12,33


    S21


    16,33


    S22


    8,50


    Test Statistics (Статистика теста)


    N


    3


    W Кендала а


    ,741


    Хи-квадрат


    46,695


    Df


    21


    Asymp. Sig. (Статистическая значимость)


    ,001


    a. Kendall's Coefficient of Concordance (Коэффициент согласованности Кендала)


    Очень значимый (р = 0,001) коэффициент согласованности W (0,741) указывает на высокую согласованность всех трёх спортивных газет при оценке 22 игроков.

    14.4.3 ОКохрана

    14.4.3 Q Кохрана


    Этот тест представляет собой расширенный хи-квадрат-тест по МакНемару для случая с несколькими зависимыми выборками; стало быть, он может применяться при наличии более чем двух дихотомических переменных.


    В главе 21 будет описан файл neugier.sav, который содержит 18 вопросов, с помощью которых исследовалась степень любопытства респондентов. Следующие три вопроса взяты из этого файла:


    Вопрос 10:


    Хотели бы Вы полететь на Луну?


    Вопрос 12:


    Спрашивали ли Вы себя когда-нибудь, как будет выглядеть мир через сто лет?


    Вопрос 14:


    Предоставили бы Вы себя в руки учёных для проведения научных экспериментов?


    Переменные, соответствующие ответам на эти вопросы, имеют кодировки 1 (да) и 2 (нет). Мы должны найти ответ на вопрос, существуют ли значимые отличия в ответах на эти три вопроса.

    •  Откройте файл neugier.sav.

    •  В диалоговом окне Tests for Several Related Samples (Тесты для нескольких связанных выборок) переместите переменные item10, item12 и item14 в поле тестируемых переменных.

    •  Вместо установленного теста Фридмана активируйте Q-тест Кохрана.

    •  Запустите расчёт путём нажатия ОК. В окне просмотра появятся следующие результаты:

    Frequencies (Частоты)


    Value (Значение)


    2


    item 10


    9


    21


    item 12


    15


    15


    item14


    12


    18


    Test Statistics (Статистика теста)


    N


    30


    Q тест Кохрана


    3,375"


    df


    2


    Asymp. Sig. (Статистическая значимость)


    ,185


    a. 2 is treated as a success. (2 рассматривается, как успешный результат).


    К результатам данного теста относятся частоты для обеих категорий переменных и тестовое значение Q, полученное на основании распределения хи-квадрат. Между частотными распределениями ответов на эти вопросы не существует значимого различия (р = 0,185).

    14.5 Тест Колмогорова-Смирнова для проверки формы распределения

    14.5 Тест Колмогорова-Смирнова для проверки формы распределения


    При помощи этого теста по выбору можно проверить, соответствует ли реальное распределение переменной нормальному, равномерному, экспоненциальному распределению или распределению Пуассона. Разумеется, самым распространённым видом проверки является проверка наличия нормального распределения.


    Чтобы продемонстрировать работу данного теста, проверим на предмет наличия нормального распределения исходные значения холестерина, то есть переменную cho10 из файла hyper.sav.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) 1-Sample KS (К-С одной выборки)

    Появится диалоговое окно One Sample .\olomgorov-Smirnov Test (Тест Колмогорова-Гмирнова для одной выборки) (см. рис. 4.5).

    •  Перенесите переменную cho10 в поле тестируемых переменных.

    •  Если Вы щёлкните на кнопке Options... (Опции), то сможете дополнительно организовать вывод характеристик дескриптивной статистики и квартилей.

    •  Щёлкните на ОК.


    Рис. 14.5: Диалоговое окно One Sample Kolomgorov-Smirnov Test (Тест Колмогорова-Смирнова для одной выборки)


    Предварительно установленной является проверка на нормальное распределение. В окне просмотра появятся следующие результаты:


    One-Sample Kolmogorov-Smirnov Test (Тест Колмогорова-Смирнова для одной выборки)


    Cholesterin, Ausgangswert (Холестерин, исходная величина)


    N


    174


    Normal Parameters (Параметр нормального распределения) а' ь


    Mean (Среднее значение) Std. Deviation (Стандартное отклонение)


    237,27 49,42


    Most Extreme Differences (Экстремальные разности)


    Absolute (Абсолютные) Positive (Положительные) Negative (Отрицательные)


    ,057 ,057 -,046


    Z Колмогорова-Смирнова


    ,756


    Asymp. Sig. (2-tailed) (Статистическая значимость (2-сторонняя))


    ,616


    a. Test distribution is Normal. (Тестируемое распределение является нормальным распределением.) 


    b. Calculated from data. (Рассчитано исходя из исходных данных.)


    Полученные результаты включают:

    •  среднее значение и стандартное отклонение

    •  промежуточные результаты, полученные в результате теста Колмогорова-Смирнова

    •  вероятность ошибки р.

    Отклонение от нормального распределения считается существенным при значении р < 0,05; в этом случае для соответствующих переменных следует применять непараметрические тесты. В рассматриваемом примере ( значение р = 0,616), то есть вероятность ошибки является не значимой; поэтому значения переменной достаточно хорошо подчиняются нормальному распределению.

    5.gif

    Изображение: 

    14.6 Отдельный тест по критерию хи-квадрат

    14.6 Отдельный тест по критерию хи-квадрат


    С помощью этого теста проверяют, насколько значительно отличаются друг от друга наблюдаемые и ожидаемые частоты переменных, относящихся к номинальной шкале. Как правило, при этом ожидаемая частота подчиняется равномерному распределения; однако в SPSS существует возможность задать соответствующие пропорции.


    Одним из примеров ожидаемого равномерного распределения частот являются кости. Предположим, Вы бросили один игральную кость 3000 раз и получили следующее частоты для выпавших очков.


    Число очков


    Частота


    Число очков


    Частота


    1


    511


    4


    498


    2


    472


    5


    513


    3


    572


    6


    434


    Исходя из предположения об идеальности игральную кость (равной вероятности выпадения любого числа очков), ожидаемая частота для каждого из выпавших чисел составит 3000 / 6 = 500. Необходимо проверить, значимо ли отличаются наблюдаемые частоты от ожидаемых. Данные, а именно переменные augen (число очков) и n (частота), находятся в файле wuerfel.sav. Последнюю переменную следует применить в качестве весовой переменной.

    •  Откройте файл wuerfel.sav.

    •  Сначала выберите в меню Data (Данные) Weight Case (Взвесить наблюдения)

    •  Переменную n объявите частотной (см. гл. 8.7), выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) Chi-Square (Хи-квадрат) Откроется диалоговое окно Chi-Square Test (Тест хи-квадрат) (см. рис. 14.6).

    •  Перенесите переменную augen в поле тестируемых переменных.

    Если Вы, как в рассматриваемом примере, хотите подвергнуть анализу все категории тестируемых переменных, то оставьте в разделе Expected range (Ожидаемый диапазон) включённой опцию Get from Data (Из исходных данных); в противном случае у Вас есть возможность ограничить вовлекаемые категории посредством ввода нижней и верхней границ. Так как ожидаемые частоты одинаковы для всех категорий (была принята гипотеза о равномерном распределении), то эта предварительная установка остаётся в силе.


    После нажатия кнопки Опции... у Вас появится возможность организовать вывод характеристик дескриптивной статистики и квартилей (что в данном случае является абсолютно бессмысленным).

    •  Запустите расчёт путём нажатия ОК.

    В окне просмотра появятся следующие результаты:


    Augenzahl (Число очков)


    Observed N (Наблюдаемое N)


    Expected N (Ожидаемое N)


    Residuals (остатки)


    1


    511


    500,0


    11,0


    2


    472


    500,0


    -28,0


    3


    572


    500,0


    72,0


    4


    498


    500,0


    -2,0


    5


    513


    500,0


    13,0


    6


    434


    500,0


    -66,0


    Total (Сумма)


    3000


    Test Statistics (Статистика теста)


    Augenzahl (Число)


    Chi-Square (Хи-квадрат) а


    21,236


    Df


    5


    Asymp. Sig. (Статистическая значимость)


    ,001


    a. 0 cells (,0%) have expected frequencies less than 5. The minimum expected cell frequency is 500,0. (В 0 ячеек (,0%) ожидаемая частота имеет значение менее 5. Минимальная ожидаемая частота в одной ячейке равна 500,0.)


    Получилось очень значимое значение критерия хи-квадрат (р = 0,001). В рассматриваемом случае желателен вывод не абсолютных, а стандартизированных остатков, определяемых по формуле:

     

    Рис. 14.6: Диалоговое окно СЫ-Square Test (Хи-квадрат-тест)


    (см. гл. 11.1). При помощи основополагающего правила, приведенного в главе 8.7.2, можно точно определить те категории, для которых наблюдается значительное отклонение наблюдаемых частот от ожидаемых:


    Стандартизированные остатки >= 2,0 указывают на значительное, >= 2,6 на очень значительное и >= 3,3 на сверх значительное отклонение. Если следовать этому правилу, то в экспериментах с игральной костью наблюдается очень значимое превышение количества выпадений 3 очков и очень, очень значимое занижение количества выпадений 6 очков.


    Во втором примере, который принадлежит к области ботаники, нужно проверить не равномерное распределение, а наличие распределения подчиняющегося заданному соотношению.


    Потомки трёх сортов бобовой культуры были разделены на три типа, которые находятся в соотношении между собой как 1:2:1. Во время некоторого эксперимента, проведенного с сотней таких потомков тип 1 появился 29 раз, тип 2 — 44 раза и тип 3 — 27 раз. Необходимо исследовать значительно ли отклоняется полученное распределение от теоретического распределения 1:2:1.


    Данные находятся в файле bohnen.sav, причём переменная typ соответствует типу, а переменная n частоте.

    •  Откройте файл bohnen.sav.

    •  Сначала действуйте так же, как в первом примере, и взвесьте наблюдения с частотной переменной n.

    •  В диалоговом окне Chi-Square Test (тест Хи-квадрат) присвойте переменной typ статус тестируемой переменной.

    •  В поле Expected values (Ожидаемые значения) активируйте в этот раз опцию Values (Значения). Введите числа 1, 2 и 1 в предусмотренное для этого поле, и щёлкните дополнительно на кнопке Add (Добавить).

    •  Запустите расчёт путём нажатия ОК. В окне просмотра появятся следующие результаты:

    Тур (Тип)


    Observed N (Наблюдаемое N)


    Expected N (Ожидаемое N )


    Residual (Остаток)


    1


    29


    25,0


    4,0


    2


    44


    50,0


    -6,0


    3


    27


    25,0


    2,0


    Total (Сумма)


    100


    Test Statistics (Статистика теста)


    Тур (Тип)


    Chi-Square (Хи-квадрат) а


    1,520


    Of


    2


    Asymp. Sig. (Статистическая значимость)


    ,468


    а. 0 cells (,0%) have expected frequencies less than 5. The minimum expected cell frequency is 25,0. (В 0 ячеек (,0%) ожидаемая частота имеет значение менее 5. Минимальная ожидаемая частота в одной ячейке равна 25,0.)


    Ожидаемые частоты выстроены в соответствии с заданным соотношением. На сей раз значимого отклонения наблюдаемых частот от ожидаемых не наблюдается (р = 0,468).

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    14.7 Биномиальный тест

    14.7 Биномиальный тест


    Этот тест проверяет дихотомические переменные на наличие различия между частотами обоих проявлений признака. Недихотомические переменные могут быть диэтомизированы (разделены на две категории) при помощи задания некоторой разделительной величины.


    Представьте себе, что Вы играете со своим партнёром по теннису 50 матчей и выигрываете 29. Ваш партнёр, выигравший 21 раз, думает, что Вы ничем не лучше, а эта разница является случайной.


    Чтобы это проверить можно выполнить биномиальный тест.

    •  Откройте файл match.sav, содержащий две переменные: spieler и n.

    Первая переменная имеет кодировки 1 и 2, которые соответствуют двум игрокам. Переменная n указывает на частоту выигрыша; ей присваивается статус весовой переменной.

    •  Сначала выберите в меню Data (Данные) Weight Cases (Взвесить наблюдения)

    •  Укажите переменную п как частотную переменную (см. гл. 8.7).

    •  Затем выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) Binomial (Биномиальное распределение)

    Откроется диалоговое окно Binomial Test (Тест на биномиальное распределение) см. рис. 14. 7.

    •  Перенесите щелчком переменную spieler в поле тестируемых переменных.

    Если бы эта переменная не была дихотомической, Вы бы могли в поле Определить дихотомию (Define Dichotomy) ввести разделительную величину для проведения раздвоения (дихотомизации). Предварительно установленная тестовая пропорция (0,50) показывает на ожидаемую относительную частоту появления первой из двух дихотомических категорий. Здесь Вы можете задать и другое значение. После нажатия кнопки Options... (Опции) Вы можете организовать вывод (абсолютно бессмысленных) характеристик дескриптивной статистики.

    •  Запустите расчёт путём нажатия ОК.

    В окне просмотра появятся следующие результаты:


    Binomial Test (Тест на биномиальное распределение)

     

    Category (Категория)


    N


    Observed Prop. (Наблюда- емая пропорция)


    Test Prop. (Тестовая пропорция)


    Asymp. Sig. (2-tailed) (Статисти- ческая значимость (2-сторонняя))


    SPIELER (Игрок)


    Группа 1


    1


    29


    ,58


    ,50


    ,322а


    Группа 2


    2


    21


    ,42




    Total (Сумма)



    50


    1,00




    a. Based on Z Approximation. (Основываясь на Z-аппроксимации.)



    Рис. 14.7: Диалоговое окно Тест на биномиальное распределение


    В выводимые результаты включают наблюдаемые абсолютные и относительные частоты обеих категорий, а так же ожидаемую относительную частоту первой категории Полученная вероятность ошибки (р = 0,322) говорит о том, что между наблюдаемой и ожидаемой относительными частотами не существует значимого различия. Стало быть и разница между обеими частотами выигрыша не является значимой.

    8.gif

    Изображение: 

    14.8 Анализ последовательностей

    14.8 Анализ последовательностей


    При проверке последовательности дихотомических значений переменной выясняется следующий вопрос: идёт ли речь о случайном ряде или ряд построен в соответствии с определённой закономерностью.


    В качестве примера рассмотрим три различные очереди людей, стоящих у кассы кинотеатра, учитывая пол.


    1. Очередь: мжмжмжмжмжмжмжмжмжмж


    2. Очередь: жмжммжжммжмжмжжмжммж


    3. Очередь: мжжжжммммжжжжмжжмжмж


    В первой очереди можно заметить явную закономерность, т.к. посетители стоят всегда по парам, при чём мужчина всегда стоит впереди. Во второй очереди, также просматривается попарный рисунок, хотя очерёдность мужчин и женщин меняется Третья очередь была выстроена генератором случайных чисел. Для первой очереди следует ожидать значительное отклонение от случайной последовательности, для второй очереди скорее всего так же, а для третьей нет.


    Данные рассматриваемого примера соответствуют трем переменными rl, r2 и r3 в файле kino.sav. Мужчинам присвоен код 0, а женщинам 1.

    •  Откройте файл kino.sav.

    •  Выберите в меню Analyze (Анализ) Nonparametric Tests (Непараметрические тесты) Runs (Последовательности) Появится диалоговое окно Runs Test (Критерий серий) см. рис. 14.8.

    •  Перенесите переменные rl, г2 и гЗ в поле тестируемых переменных.


    Рис. 14.8: Диалоговое окно Runs Test (Тест для последовательностей)

    •  Для дихотомических переменных, закодированных при помощи 0 и 1, как в рассматриваемом примере, активируйте в поле Cut Point (Разделительная величина) опцию Custom (Пользовательская) и введите значение 1.

    •  Запустите расчёт путём нажатия ОК.

    В окне просмотра появятся следующие результаты.


    Runs Test (Критерий серий)


    Test Value (Проверяемое значение) "


    R1 1


    R2 1


    R3 1


    Total Cases (Общее количество случаев)


    20


    20


    20


    Number of Runs (Количество последовательностей)


    20


    15


    10


    Z


    3,905


    1,608


    -,048


    Asymp. Sig. (2-tailed) (Статистическая значимость (2-сторонняя))


    ,000


    ,108


    ,962


    а. User-specified. (Определяется пользователем)


    Вычисленные программой значения р соответствуют ожиданиям.

    9.gif

    Изображение: 

    Глава 15. Корреляции

    Глава 15. Корреляции

    1. Корреляции

    Корреляции


    В этой главе речь пойдёт о связи (корреляции) между двумя переменными. Расчёты подобных двумерных критериев взаимосвязи основываются на формировании парных значений, которые образовываются из рассматриваемых зависимых выборок.


    Если в качестве примера мы возьмём данные об уровне холестерина для первых двух моментов времени из исследования гипертонии (файл hyper.sav), то в данном случае следует ожидать довольно сильную связь: большие значения в исходный момент времени являются веским поводом для ожидания больших значений и через 1 месяц.


    Для графического представления подобной связи можно использовать прямоугольную систему координат с осями, которые соответствуют обеим переменным. Каждая; пара значений маркируется при помощи определенного символа. Такой график, называемый «диаграммой рассеяния» для двух зависимых переменных можно построить путём вызова меню Graphs... (Графики) Scatter plots... (Диаграммы рассеяния) (см. гл. 22.8).


    Образовавшееся скопление точек показывает, что обследованные пациенты с высокими исходными показателями, как правило, имеют высокие значения холестерина и при повторном опросе через месяц. Это, конечно же, не является неожиданностью; данный пример был выбран, чтобы продемонстрировать наличие явной связи.


    Статистик говорит о корреляции между двумя переменными и указывает силу связи при помощи некоторого критерия взаимосвязи, который получил название коэффициента корреляции. Этот коэффициент, всегда обозначаемый латинской буквой г, может принимать значения между -1 и +1, причём если значение находится ближе к 1, то это означает наличие сильной связи, а если ближе к 0, то слабой.



    Рис. 15.1.Диаграммы рассеяния


    Если коэффициент корреляции отрицательный, это означает наличие противоположной связи: чем выше значение одной переменной, тем ниже значение другой. Сила связи характеризуется также и абсолютной величиной коэффициента корреляции. Для словесного описания величины коэффициента корреляции используются следуюшие градации:


    Значение


    Интерпретация


    до 0,2


    Очень слабая корреляция


    до 0,5


    Слабая корреляция


    до 0,7


    Средняя корреляция


    до 0,9


    Высокая корреляция


    свыше 0,9


    Очень высокая корреляция


    Метод вычисления коэффициента корреляции зависит от вида шкалы, которой относятся переменные.

    •  Переменные с интервальной и с номинальной шкалой: коэффициент корреляции Пирсона (корреляция моментов произведений).

    •  По меньшей мере, одна из двух переменных имеет порядковую шкалу либо не является нормально распределённой: ранговая корреляция по Спирману или т (тау-грого-соая) Кендала.

    •  Одна из двух переменных является дихотомической: точечная двухрядная корреляция. Эта возможность в SPSS отсутствует. Вместо этого может быть применён расчёт ранговой корреляции.

    •  Обе переменные являются дихотомическими: четырёхполевая корреляция. Данный вид корреляции рассчитываются в SPSS на основании определения мер расстояния и мер сходства (см. гл 15.4).

    Расчёт коэффициента корреляции между двумя недихотомическими переменными не лишён смысла только тогда, кода связь между ними линейна (однонаправлена). Если связь, к примеру, U-образная (неоднозначная), то коэффициент корреляции непригоден для использования в качестве меры силы связи: его значение стремится к нулю. В следующих разделах будут рассмотрены корреляции по Пирсону, Спирману и Кендалу. Ешё один раздел специально посвящён частной корреляции.

    1.gif

    Изображение: 

    15.1 Коэффициент корреляции Пирсона

    15.1 Коэффициент корреляции Пирсона


    Данный коэффициент вычисляется по следующей формуле:


    где xi и уi значения двух переменных, х- и у- их средние значения, a sx и sy их стандартные отклонения; n количество пар значений.


    На основании данных исследования гипертонии нам нужно рассчитать коэффициент корреляции по Пирсону попарно для переменных cho10, cho11, cho!6 и chol12 (то есть сформировать для этих переменных корреляционную матрицу).

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze... (Анализ) Correlate... (Корреляция) Bivariate... (Парные) Появится диалоговое окно Bivariate Correlations (Парные корреляции) (см. рис. 15.21.)

    •  Переменные cho10, cho11, cho16 и chol12 перенесите по очереди в поле тести-! руемых переменных. Расчёт коэффициента корреляции по Пирсону является' предварительной установкой, также как двусторонняя проверка значимости и маркировка значимых корреляций.

    •  Начните расчёт путём нажатия кнопки ОК.

    В окне просмотра появятся следующие результаты:


    Correlations (Корреляции)

     

    Cholesterin, Ausga- ngswert (Холесте- рин, исходная величина)


    Cholesterin, nach 1 Monat (Холесте- рин, через 1 месяц)


    Cholesterin, nach 6 Monaten (Холесте- рин, через 6 месяцев)


    Cholesterin, nach 12 Monaten (Холесте- рин, через 12 месяцев)


    Cholesterin, Ausga- ngswert (Холестерин, исходная величина)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    1,000 174


    ,861"


    ,000 174


    ,775"


    ,000 174


    ,802"


    ,000 174


    Cholesterin, nach 1 Monat (Холесте- рин, через 1 месяц)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,861"


    ,000 174


    1,000 174


    ,852"


    ,000 174


    ,813"


    ,000 174


    Cholesterin, nach 6 Monaten (Холесте-рин, через 6 месяцев)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,775"


    ,000 174


    ,852"


    ,000 174


    1,000 174


    ,892"


    ,000 174


    Cholesterin, nach 12 Monaten (Холесте- рин, через 12 месяцев)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,802"


    ,000 174


    ,813"


    ,000 174


    ,892"


    ,000 174


    1,000 174


    ** Correlation is significant at the 0.01 level (2-tailed). (Корреляция является значимой на уровне 0,01 (2-стороння)).



    Рис. 15.2: Диалоговое окно Bivariate Correlations (Двумерные корреляции)


    Полученные результаты содержат: корреляционный коэффициент Пирсона r, количество использованных пар значений переменных и вероятность ошибки р, соответствующая предположению о ненулевой корреляции. В приведенном примере присутствует сильная корреляция, поэтому все коэффициенты конечно же являются сверхзначимыми (р < 0,001). Следовательно, маркировка корреляции, приведенная :-низу таблицы, должна была бы состоять из трёх звёздочек, которыми обозначается уровень р=0,001.


    При помощи щелчка на кнопке Options... (Опции) можно организовать расчёт среднего значения и стандартного отклонения для двух переменных. Дополнительно могут выводиться отклонения произведений моментов (значений числителя формулы для коэффициента корреляции) и элементы ковариационной матрицы (числитель, делённый на n - 1).

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    15.2 Ранговые коэффициенты корреляции по Спирману и Кендалу

    15.2 Ранговые коэффициенты корреляции по Спирману и Кендалу


    Для переменных, принадлежащих к порядковой шкале или для переменных, не подчиняющихся нормальному распределению, а также для переменных принадлежащих к интервальной шкале, вместо коэффициента Пирсона рассчитывается ранговая корреляция по Спирману. Для этого отдельным значениям переменных присваиваются ранговые места, которые впоследствии обрабатываются с помощью соответствующих формул. Чтобы выявить ранговую корреляцию, уберите в диалоговом окне Bivariate Correlations... (Парные корреляции) метку для расчета корреляции по Пирсону, установленную по умолчанию. Вместо этого активируйте расчет корреляции Спирмана. Это расчет даст следующие результаты (см. стр. 260).


    Коэффициенты ранговой корреляции весьма близки к соответствующим значениям коэффициентов Пирсона (исходные переменные имеют нормальное распределение). Ещё одним вариантом ранговых коэффициентов корреляции являются коэффициенты Кендала (tb Кендала), расчет которых можно вызвать в диалоговом окне Bivariate Correlations... (Парные корреляции). В этом методе одна переменная представляется в виде монотонной последовательности в порядке возрастания величин; другой переменной присваиваются соответствующие ранговые места. Количество инверсий (нарушений монотонности по сравнению с первым рядом) используется в формуле для корреляционных коэффициентов. Применение коэффициента Кендала является предпочтительным, если в исходных данных встречаются выбросы.


    Correlations (Корреляции)

     

    Chole- sterin, Ausgan-gswert (Холе-стерин, исходная величина)


    Chole-sterin, nach 1 Monat (Холе-стерин, через 1 месяц)


    Chole-sterin, nach 6 Monaten (Холе-стерин, через 6 месяцев)


    Chole- sterin, nach 12 Monaten (Холе-стерин, через 12 месяцев)


    Spearman's rho (рСпир-мана)


    Chole-sterin, Ausgang-swert (Холес-терин, исходная величина)


    Correlation Coefficient (Коэф- фициент корре- ляции) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    1,000 174


    ,877"


    ,000 174


    ,791"


    ,000 174


    ,792"!


    ,000 174


    Chole-sterin, nach 1 Monat (Холес-терин, через 1 месяц)


    Correlation Coefficient (Коэф- фициент корре- ляции) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,877"


    ,000 174


    1,000 174


    ,874**


    ,000 174


    ,834"


    ,000 174


    Chole-sterin, nach 6 Monaten (Холес-терин, через 6 месяцев)


    Correlation Coefficient (Коэф- фициент корр-еляции) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,791**


    ,000 174


    ,874**


    ,000 174


    1,000 174


    ,879"


    ,000 174


    Choles-terin, nach 12 Monaten (Холес-терин, через 12 месяцев)


    Correlation Coefficient (Коэф- фициент корре- ляции) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,792**


    ,000 174


    .834"


    ,000 174


    ,879"


    ,000 174


    1,000 174


    ** Correlation is significant at the .01 level (2-tailed). (Корреляция является значимой на уровне 0,01 (2-сгороння)).


    Если рассчитать корреляционную матрицу Кендала, то станет заметно, что в данном случае коэффициенты значительно ниже корреляционных коэффициентов Спирмана.

    15.3 Частная корреляция

    15.3 Частная корреляция


    Если исследовать достаточно большую совокупность мужчин и сопоставить размер их обуви с уровнем образованности, то между этими двумя переменными можно заметить хоть и небольшую, но в то же время значимую корреляцию. Это корреляция может послужить примером так называемой ложной корреляции. Здесь статистически значимый коэффициент корреляции является не проявлением некоторой причинной связи между двумя рассматриваемыми переменными, а в большей степени обусловлен некоторой третьей переменной.


    В рассматриваемом примере такой переменной является рост. С одной стороны существует некоторая незначительная корреляция между ростом и уровнем образованности, а с другой — вполне объяснимая и логичная связь между ростом и размером обуви. Вместе эти две корреляции приводят к упоминавшейся ложной корреляции. Для исключения одной такой искажающей переменной необходим расчёт так называемой частной корреляции.


    Если присвоить коррелирующим переменным индексы 1 и 2, а искажающей переменной — индекс 3, и попарно рассчитать корреляционный коэффициент (Пирсона) r12,r13, и r23 , то для частных корреляционных коэффициентов получим:


    Достаточно давно в социологических исследованиях, проводимых в Германии, выяснялось отношение населения к приезжим рабочим-иностранцам. Для этого было сформулировано несколько отдельных вопросов. Ответы на вопросы суммировались. Сумма могла принимать значения от 0 до 30, причём большее значение соответствует более негативному отношению к приезжим рабочим.


    Среди многочисленных дополнительных переменных учитывались: возраст опрашиваемых и частота посещения церкви. Последней характеристике были присвоены значения от 1 (никогда) до 6 (по меньшей мере, 2 раза в неделю). Небольшая выборка из оригинальных данных опроса (35 респондентов с этими тремя переменными) наводится в файле kirche.sav. Откройте этот файл, если Вы хотите самостоятельно провести следующие расчёты.


    Если подсчитать корреляции между этими тремя переменными, то при выборе коэффициентов Пирсона для анализа взаимосвязи, получатся следующие результаты закроем глаза на то, что одна из переменных, а именно частота посещения церкви, имеет порядковую шкалу):


    Correlations (Корреляции)


    ALTER (Возраст)


    GAST (Приезжий)


    KIRCHE (Церковь)


    ALTER (Возраст)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    1,000 35


    ,468" ,005 35


    ,779" ,000 35


    GAST (Приезжий)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,468" ,005 35


    1,000 35


    ,432** ,010 35


    KIRCHE (Церковь)


    Pearson Correlation (Корреляция по Пирсону) Sig. (2-tailed) (Значимость (2-сторонняя)) N


    ,779" ,000 35


    ,432" ,010 35


    1,000 35


    "* Correlation is significant at the .01 level (2-tailed). Корреляция является закономерной на уровне 0,01 (2-стороння).


    Принимая во внимание полярность, полученные результаты можно трактовать, к примеру, таким образом, что частые посещения церкви коррелируют с отрицательным отношением к приезжим рабочим (r = 0,432). Прежде, чем поставить в упрёк церкви враждебность по отношению к иностранцам, нужно учесть влияние возраста. Он также коррелирует с враждебным отношением к иностранным рабочим (r = 0,468) и сильно коррелирует с частотой посещения церкви (r = 0.779). Таким образом, возникает подозрение, что возраст является искажающим признаком, виновным в ложной корреляции между частотой посещения церкви и отрицательным отношением к иностранным рабочим. Докажем это путём расчёта частных корреляционных коэффициентов.

    •  Откройте файл kirche.sav.

    •  Выберите в меню Analyse... (Анализ) Correlate... (Корреляция) Partial... (Частная)

    Откроется диалоговое окно Partial Correlations (Частные корреляции).

    •  Перенесите переменные gast и kirche в поле признаков, а переменную alter в поле контрольных переменных и оставьте предварительную установку для двухстороннего теста значимости.

    При помощи щелчка на кнопке Options... (Опции) наряду с традиционной обработкой пропущенных значений, Вы можете организовать расчёт среднего значения, стандартного отклонения и вывод «корреляций нулевого порядка» (то есть простых корреляционных коэффициентов).


    В случае одной искажающей переменной, как в приведенном примере, возможен расчёт частной корреляции первого порядка, при наличии нескольких искажающих переменных, SPSS выдаёт корреляции высших порядков.

    •  Начните расчёт щелчком на кнопке ОК. Вязкие просмотра появится следующий результат:


    Partial correlation coefficients (Частичные корреляционные коэффициенты)


    Controlling for... A (Контрольная переменная) (


    LTER Возраст)


    GAST (Приезжий)  

    GAST ( Приезжий)

    1,0000 ( 0) P= ,


     KIRCHE (Церковь) ,1215 ( 32) P= ,494


    KIRCHE (Церковь) 

    ,1215 ( 32) P= ,494

    1,0000 ( 0)


    P= ,


    Вас, возможно, удивит, что в данном случае всё ещё выводится старый вариант таблицы результатов, соответствующий прежним версиям SPSS. Результаты включают: частный корреляционный коэффициент, число степеней свободы (число наблюдений минус 3) и уровень значимости. Исходя из полученных результатов, можно сделать вывод, что при исключении искажающей переменной alter больше не наблюдается существенной корреляции между частотой посещения церкви и отрицательным отношением к иностранным рабочим.



    Рис. 15.3: Диалоговое окно Partial Correlations (Частичные корреляции)

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    15.4 Мера расстояния и мера сходства

    15.4 Мера расстояния и мера сходства


    Наряду с приведенными корреляционными коэффициентами, SPSS дополнительно предлагает расчет ряда мер расстояния и мер сходства. Так, к примеру, реализован расчет многочисленных мер сходства при анализе взаимосвязи между дихотомическими переменными. Некоторые статистические процедуры, такие как факторный анализ, кластерный анализ, многомерное масштабирование, построены на применении этих мер, а иногда сами представляют добавочные возможности для вычисления 1 ер подобия. Если Вы во время выполнения этих процедур захотите использовать какую-либо меру, не предусмотренную в выбранной процедуре, то Вам следует воспользоваться дополнительными возможностями, предоставляемыми SPSS.


    В качестве примера возьмем анкету, которая будет рассматриваться в главе 21. Она посвящена исследованию степени любознательности опрашиваемых.

    •  Откройте файл neugier.sav.

    •  Выберите в меню Analyze... (Анализ) Correlate... (Корреляция) Distances... (Расстояния)

    Появится диалоговое окно Distances... (Расстояния).


    В этом диалоговом окне Вы можете организовать расчет расстояния между наблюдениями или между переменными, а также выбрать тип рассчитываемой меры мера отличия или мера подобия). Щелчком на кнопке Measures... (Меры) можно выбрать формулу вычисления меры расстояния для интервальных или дихотомических (бинарных) переменных. В основу расчета мер отличия могут быть также положены и частоты.


    Все меры отличия и сходства для переменных, принадлежащих к интервальной шкале, будут рассмотрены в главе 20.3. Эти меры являются важным элементом кластерного анализа. Ниже приведены формулы для мер сходства между бинарными (дихотомическими) переменными, принадлежащими к интервальной шкале. Символами а, b, с и d обозначены частоты, находящиеся в ячейках таблицы 2x2 (четырёхполевой таблицы). В случае необходимости, более подробное объяснение этих формул Вы найдёте в главе 20.3.3.



    Рис. 15.4: Диалоговое окно Distances... (Расстояния).


    Рассел и Рао (Russel and Rao)


    Простое согласование


    Джаккард (Jaccard)


    Игральная кость


    Роджерс и Танимото (Rogers and Tanimoto)


    Соукал и Снис 1 (Sokal and Sneath)


    Соукал и Снис 2


    Соукал и Снис 3


    Кульчинский 1 (Kulczynski)


    Кульчинский 2


    Соукал и Снис 4


    Хаманн (Hamann)


    Лямбда


    D Андерберга (Anderberg)


    YtOiBi


    О Юля


    Очиаи lOchiai)


    Соукал и Скис 5


    4 точечная ц-корреляция


    Дисперсия


    Два следующих примера помогут нам разобраться в особенностях работы с мерами расстояния.


    Пример первый: сходства между дихотомическими переменными.

    •  Создайте сначала таблицу сопряженности для переменных item3 и item 14. Эти переменные соответствуют ответам на вопросы «Считаете ли Вы, что развитие космонавтики необходимо?» и соответственно «Согласились бы Вы предоставить себя в распоряжение учёным для научных экспериментов?» (с кодировками 1 = да и 2 = нет).

    Частоты в таблице 2x2 распределились следующим образом:



     Рис. 15.5: Частоты в таблице 2x2

    •  Выберите в меню Analyze... (Анализ) Correlate... (Корреляция) Distances... (Расстояния)

    •  Перенесите переменные item3 и item 14 в поле тестируемых переменных.

    •  Активируйте расчёт расстояний Between Variables (Между переменными) и в качестве типа меры выберите Similarities... (Подобия).

    •  Щёлкните на кнопке Measures... (Меры) и, в открывшемся диалоговом окне, активируйте Binary (Бинарные). Оставьте предварительную установку мер вычисления по методу Рассела и Рао.

    •  Так как в приведенном примере отрицательному ответу присвоен код 2, а в предварительных установках предусмотрен 0, то Вам необходимо откорректировать это значение в поле Absent (Отсутствует).

    •  Покиньте диалоговое окно мер нажатием Continue (Далее) и в главном диалоговом окне начните расчёт щелчком на ОК.

    В результате Вы получите значение меры подобия равное 0,3. Оно определяется как частное от деления частоты а на сумму всех четырёх частот:


    Proximity Matrix (Матрица близости)


    Russell and Rao Measure (Мера подобия Рассела и Рао)


    ITEM3

    ITEM14

    ITEM3 ITEM 14


    ,300


    ,300


    This is a similarity matrix (Это матрица подобия) ;


    Пример второй: расчёт корреляционной матрицы 2x2 в качестве базиса для факторного анализа


    Мы хотим рассчитать корреляционную матрицу для восемнадцати переменных item1-item18 с применением четырёхточечная корреляция фи. В этом случае корреляционную матрицу можно использовать в качестве базиса для факторного анализа. Для решения этой задачи нам предстоит поработать с программным синтаксисом SPSS.

    •  Перенесите переменные item1-item18 в поле тестируемых переменных.

    •  Активируйте расчёт расстояний Between Variables (Между переменными) и в качестве типа меры выберите Similarities... (Подобия).

    •  Откройте щелчком на кнопке Measures... (Меры) соответствующее диалоговое окно, активируйте в нём Binary (Бинарные) и присвойте параметру Absent (Отсутствует) код 2. В заключении вместо меры по Расселу и Рао выберите 4 точечную µ-корреляцию.

    •  При помощи щелчка на Continue (Далее) вернитесь в основное диалоговое окно, после прохождения кнопки Paste... (Вставить) просмотрите синтаксис команд.

    •  Внесите в синтаксис следующие корректировки:

    PROXIMITIES 
     item1 item2 item3 item4  
     item5 item6 item7 item8  
     item9 item10 item11 item12 
    Lzem13 item14 item15 item16
     item17 item18
     VIEW=VARIABLE 
     MEASURE= PHI (1,2) 
     MATRIX=OUT(*) . 
     SSCODE rowtype_ ( "PROX"='CORR') . 
      FACTOR /MATRIX=IN(COR=*). 
    •  Начните расчёт при помощи символа Syntax-Start (Синтаксис-Начать).

    В окне просмотра появятся результаты факторного анализа, а в окне редактора данных будет показана корреляционная матрица.

    6.gif

    Изображение: 

    8.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    17.gif

    Изображение: 

    18.gif

    Изображение: 

    19.gif

    Изображение: 

    20.gif

    Изображение: 

    21.gif

    Изображение: 

    23.gif

    Изображение: 

    24.gif

    Изображение: 

    25.gif

    Изображение: 

    26.gif

    Изображение: 

    27.gif

    Изображение: 

    15.5 Внутриклассовый коэффициент корреляции (Intraclass Correlation Coefficient (ICC))

    15.5 Внутриклассовый коэффициент корреляции (Intraclass Correlation Coefficient (ICC))


    Внутриклассовый коэффициент корреляции (ICC) со значениями, находящимися в диапазоне между -1 и +1, применяется в качестве меры связанности в том случае, когда согласованность двух признаков должна быть проверена не так, как при расчете рассмотренных выше корреляционных коэффициентов, относительно её общей направленности ("чем больше одна переменная, тем больше вторая"), а также и относительно средних уровней обеих переменных. Таким образом, расчёт ICC считается уместным только тогда, когда обе переменные имеют приблизительно одинаковый уровень значений. Подобная ситуация вероятнее всего возникнет в случае, когда одной и той же величине дается двоякая оценка.


    ICC играет также важную роль при анализе достоверности (гл. 21), где он применяется в качестве меры достоверности. При его расчёте используется более двух переменных, называемых в данном случае объектами. В связи с этим расчёт ICC в SPSS производится в рамках анализа достоверности.


    Рассмотрим расчёт ICC на данных одного типичного примера.

    •  Откройте файл alter.sav.

    В файле находятся три переменные: a, agesch и agesch10. Переменной а обозначен фактический возраст респондентов, agesch — возраст по оценке со стороны. Переменная agesch10 соответствует возрасту по оценке со стороны минус 10 лет.


    Если Вы произведёте расчёт корреляционных коэффициентов Пирсона (см. гл. 15.1) для переменных а и agesch, то получите значение г = 0,944. Такое же значение Вы получите при расчёте корреляции между переменными а и agesch2, так как соотношение между обоими переменными не изменилось.


    Определим теперь ICC.

    •  Выберите в меню Analyze... (Анализ) Scale... (Масштабировать) Reliability Analysis... (Анализ пригодности)

    •  Перенесите обе переменные а и agesch в список объектов.

    •  Через кнопку Statistics... (Статистика), активируйте опцию Intraclass Correlation Coefficient (Корреляционный коэффициент внутри классов).

    •  В качестве модели выберите One-Way Random (Однократно, случайно), которая соответствует традиционному расчёту ICC.

    •  Оставьте предварительно установленный 95 % доверительный интервал и подтвердите нажатием Continue (Далее) и ОК.

    В окне просмотра появятся следующие результаты:

     RELIABILITY  ANALYSIS  -  SCALE  (ALPHA) 
      Intraclass  Correlation  Coefficient 
       One-way random effect model:  People  Effect Random 
      Single  Measure  Intraclass  Correlation  =  ,9367 
      95,00%  C.I.:  Lower =  Л9156  Upper =  ,9526 
      F = 30,5740 DF =  ( 173,  174,0) 
       Sig. =  ,0000  (Test Value =  ,0000 )  
       Average  Measure  Intraclass  Correlation  =  , 9673 
      95,00%  C.I.:  Lower =   ,9559   Upper = ,9757 
      F = 30,5740 DF =  ( 173,  174,0) 
       Sig. = ,0000  (Test Value = ,0000 ) 
      Reliability   Coefficients 
      N of Cases =   174,0 N of Items =   2 
      Alpha =   ,9680 

    Результаты обычного расчёта ICC Вы найдёте под заголовком «Single Measure Intraclass Correlation». Вы получите значение ICC = 0,9367, которое с 95 %-м доверительным интервалом принадлежит к диапазону от 0,9156 до 0,9526. Это значение весьма близко к корреляционным коэффициентам Пирсона.

    •  Повторите теперь расчёт для переменных а и agesch10.

    В последней переменной из сторонней оценки возраста вычитается постоянная величина. Так как обе переменные теперь имеют различные уровни, то ICC теперь показывает заметно более низкое значение: ICC = 0,6957.


    Ещё одним типичным случаем для применения расчёта ICC является определение связей между фактическим весом и весом по оценке со стороны или фактическим и оценочным ростом.

    Глава 16. Регрессионный анализ

    Глава 16. Регрессионный анализ

    1. Регрессионный анализ

    Регрессионный анализ


    Если расчёт корреляции характеризует силу связи между двумя переменными, то регрессионный анализ служит для определения вида этой связи и дает возможность для прогнозирования значения одной (зависимой) переменной отталкиваясь от значения другой (независимой) переменной.

    •  Чтобы вызвать регрессионный анализ в SPSS, выберите в меню Analyze... (Анализ) Regression... (Регрессия)

    Откроется соответствующее подменю.


    Разделы этой главы соответствуют опциям вспомогательного меню. Причём при изучении линейного регрессионного анализа снова будут проведено различие между простым анализом (одна независимая переменная) и множественным анализом (несколько независимых переменных). Собственно говоря, никаких принципиальных отличий между этими видами регрессии нет, однако простая линейная регрессия является простейшей и применяется чаще всех остальных видов.



    Рис. 16.1: Вспомогательное меню Regression (Регрессия)


    Для проведения линейного регрессионного анализа зависимая переменная должна иметь интервальную (или порядковую) шкалу. В то же время, бинарная логистическая регрессия выявляет зависимость дихотомической переменной от некой другой переменной, относящейся к любой шкале. Те же условия применения справедливы и для пробит-анализа. Если зависимая переменная является категориальной, но имеет более двух категорий, то здесь подходящим методом будет мультиномиальная логистическая регрессия. Новшеством в 10 версии SPSS является порядковая регрессия, которую можно использовать, когда зависимые переменные относятся к порядковой шкале. И, наконец, можно анализировать и нелинейные связи между переменными, которые относятся к интервальной шкале. Для этого предназначен метод нелинейной регрессии.


    Методы криволинейного приближения, весовые оценки и 2-ступенчатые наименьшие квадраты исследуют соответственно приближённость пути прохождения кривых при помощи компенсационных кривых, регрессионный анализ для изменяющейся дисперсии и проблемы из области эконометрии.

    1.gif

    Изображение: 

    16.1 Простая линейная регрессия

    16.1 Простая линейная регрессия


    Этот вид регрессии лучше всего подходит для того, чтобы продемонстрировать основополагающие принципы регрессионного анализа. Рассмотрим для этого диаграмму рассеяния из главы 15.1, которая иллюстрирует зависимость показателя холестерина спустя один месяц после начала лечения от исходного показателя, полученную при исследовании гипертонии. Можно легко заметить очевидную связь: обе переменные развиваются в одном направлении и множество точек, соответствующих наблюдаемым значениям показателей, явно концентрируется (за некоторыми исключениями) вблизи прямой (прямой регрессии). В таком случае говорят о линейной связи.


    у=b*х + а


    где b — регрессионные коэффициенты, a — смещение по оси ординат.


    Смещение по оси ординат соответствует точке на оси у (вертикальной оси), где прямая регрессии пересекает эту ось. Коэффициент регрессии b через соотношение


    b = tg(a) указывает на угол наклона прямой.


    При проведении простой линейной регрессии основной задачей является определение параметров b и а. Оптимальным решением этой задачи является такая прямая, для которой сумма квадратов вертикальных расстояний до отдельных точек данных является минимальной.


    Если мы рассмотрим показатель холестерина через один месяц (переменная chol1) как зависимую переменную (у), а исходную величину как независимую переменную (х), то тогда для проведения регрессионного анализа нужно будет определить параметры соотношения


    chol1 = b-chol0 + a


    После определения этих параметров, зная исходный показатель холестерина, можно спрогнозировать показатель, который будет через один месяц.

    16.1.1 Расчёт уравнения регрессии

    16.1.1 Расчёт уравнения регрессии


     Откройте файл hyper.sav.

    •  Выберите в меню Analyze... (Анализ) Regression...(Регрессия) Linear... (Линейная) Появится диалоговое окно Linear Regression (Линейная регрессия).

    •  Перенесите переменную chol1 в поле для зависимых переменных и присвойте переменной chol0 статус независимой переменной.

    •  Ничего больше не меняя, начните расчёт нажатием ОК.

     Вывод основных результатов выглядит следующим образом:


    Model Summary (Сводная таблица по модели)


    Model (Модель)


    R


    R Square (R-квадрат)


    Adjusted R Square (Смещенный R-квадрат)


    Std. Error of the Estimate (Стандартная ошибка оценки)


    1


    ,861а


    ,741


    ,740


    25,26


    а. Predictors: (Constant), Cholesterin, Ausgangswert (Влияющие переменные: (константы), холестерин, исходная величина)


    ANOVA b


    Model (Модель)


    Sum of Squares (Сумма Квадратов)


    df


    Mean Square (Сред-нее значе- ние квадра- та)


    F


    Sig. (Значи-мость)


    1


    Regre- ssion (Регре- ссия)


    314337,948


    1


    314337,9


    492,722


    ,000a


    Residual (Остатки)


    109729,408


    172


    637,962


    Total (Сумма)


    424067,356


    173


    a. Predictors: (Constant), Cholesterin, Ausgangswert (Влияющие переменные: (константа), холестерин, исходная величина)


    b. Dependent Variable: Cholesterin, nach 1 Monat (Зависимая переменная холестерин через 1 месяц)



    Рис.16.2: Диалоговое окно Линейная регрессия


    Coefficients (Коэффициенты) а


    Model (Модель)

     

    Unstan- dardized Coefficients (Не стандарти-зированные коэф-фициенты)


    Standa-rdized Coef- ficients (Стандарти-зированные коэф- фициенты)


    Т


    Sig. (Значи-мость)



    В

    Std: Error (Стандар-тная ошибка)

    ß (Beta)

    1


    (Constant) (Конста- нта)

    34,546

    9,416

     

    3,669


    ,000


    Choles- terin, Ausga- ngswert (холес- терин, исходная величина)

    ,863

    ,039


    ,861


    22,197


    ,000


    a. Dependent Variable (Зависимая переменная)


    Рассмотрим сначала нижнюю часть результатов расчётов. Здесь выводятся коэффициент регрессии b и смещение по оси ординат а под именем "константа". То есть, уравнение регрессии выглядит следующим образом:


    chol1 = 0,863-chol0 + 34,546


    Если значение исходного показателя холестерина составляет, к примеру, 280, то через один месяц можно ожидать показатель равный 276.


    Частные рассчитанных коэффициентов и их стандартная ошибка дают контрольную величину Т; соответственный уровень значимости относится к существованию ненулевых коэффициентов регрессии. Значение коэффициента (3 будет рассмотрено при изучении многомерного анализа.


    Средняя часть расчётов отражает два источника дисперсии: дисперсию, которая описывается уравнением регрессии (сумма квадратов, обусловленная регрессией) и дисперсию, которая не учитывается при записи уравнения (остаточная сумма квадратов). Частное от суммы квадратов, обусловленных регрессией и остаточной суммы квадратов называется "коэфициентом детерминации". В таблице результатов это частное выводится под именем "R-квадрат". В нашем примере мера определённости равна


    314337,948/ 424067,356 =0,741


    Эта величина характеризует качество регрессионной прямой, то есть степень соответствия между регрессионной моделью и исходными данными. Мера определённости всегда лежит в диапазоне от 0 до 1. Существование ненулевых коэффициентов регрессии проверяется посредством вычисления контрольной величины F, к которой относится соответствующий уровень значимости.


    В простом линейном регрессионном анализе квадратный корень из коэфициента детерминации, обозначаемый "R", равен корреляционному коэффициенту Пирсона. При множественном анализе эта величина менее наглядна, нежели сам коэфициент детерминации. Величина "смещенный R-квадрат" всегда меньше, чем несмещенный. При наличии большого количества независимых переменных, мера определённости корректируется в сторону уменьшения. Принципиальный вопрос о том, может ли вообще имеющаяся связь между переменными рассматриваться как линейная, проще и нагляднее всего решать, глядя на соответствующую диаграмму рассеяния. Кроме того, в пользу гипотезы о линейной связи говорит также высокий уровень дисперсии, описываемой уравнением регрессии. О том, как регрессионную прямую можно встроить в диаграмму рассеяния, будет рассказано в разделе 16.1.3.


    И, наконец, стандартизированные прогнозируемые значения и стандартизированные остатки можно предоставить в виде графика. Вы получите этот график, если через кнопку Plots...(Графики) зайдёте в соответствующее диалоговое окно и зададите в нём параметры *ZRESID и *ZPRED в качестве переменных, отображаемых по осям у и х соответственно. В случае линейной регрессии остатки распределяются случайно по обе стороны от горизонтальной нулевой линии.

    2.gif

    Изображение: 

    16.1.2 Сохранение новых переменных

    16.1.2 Сохранение новых переменных


    Многочисленные вспомогательные значения, рассчитываемые в ходе построения уравнения регрессии, можно сохранить как переменные и использовать в дальнейших расчётах.

    •  Для этого в диалоговом окне Linear Regression (Линейная регрессия) щёлкните на кнопке Save (Сохранить).

    Откроется диалоговое окно Linear Regression: Save (Линейная регрессия: Сохранение) как изображено на рисунке 16.3.


    В 10 версии SPSS появилась новая возможность сохранять информацию о модели в так называемом XML-файле. В дальнейшем он может использоваться некоторыми дополнительными SPSS-продуктами (к примеру, Whatlf?).


    Интересными здесь представляются опции Standardized (Стандартизированные значения) и Unstandardized (Нестандартизированные значения), которые находятся под рубрикой Predicted values (Прогнозируемые величины опции). При выборе опции Не стандартизированные значения будут рассчитывается значения у, которое соответствуют уравнению регрессии. При выборе опции Стандартизированные значения прогнозируемая величина нормализуется. SPSS автоматически присваивает новое имя каждой новообразованной переменной, независимо от того, рассчитываете ли Вы прогнозируемые значения, расстояния, прогнозируемые интервалы, остатки или какие-либо другие важные статистические характеристики. Нестандартизированным значениям SPSS присваивает имена pre_1 (predicted value), pre_2 и т.д., а стандартизированным zpr_l.



    Рис. 16.3: Диалоговое окно Линейная регрессия: Сохранение

    •  Щёлкните в диалоговом окне Linear Regression: Save (Линейная регрессия: Сохранение) в поле Predicted values (Прогнозируемые значения) на опции Unstandardized (Нестандартизированные значения).

    •  Подтвердите нажатием Continue (Далее) и в заключение ОК.

    Вы увидите, что в редакторе данных была образована новая переменная под именем рrе_1 и добавлена в конец списка переменных в файле. Для объяснения значений, находящихся в переменной рrе_1, возьмём случай 5. Для случая 5 переменная рrе_1 содержит нестандартизированное прогнозируемое значение 263,11289. Это прогнозируемое значение слегка отличается в сторону увеличения от реального показателя содержания холестерина, взятого через один месяц (chol1) и равного 260. Нестандартизированное прогнозируемое значение для переменной chol1, так же как и другие значения переменной рге_1, было вычислено исходя из соответствующего уравнения регрессии.


    Если мы в уравнение регрессии


    chol1 = 0,863 • chol0 + 34,546


    подставим исходное значение для chol0 (265), то получим chol1 = 0,863 -265 + 34,546 =263,241


    Небольшое отклонение от значения, хранящегося в переменной рге_1 объясняется тем, что SPSS использует в расчётах более точные значения, чем те, которые выводятся в окне просмотра результатов. На этом этапе мы ещё раз проиллюстрируем возможность использования регрессии в качестве прогноза.

    •  Добавьте для этого в конец файла hyper.sav, ещё два случая, используя фиктивные значения для переменной chol0. Пусть к примеру, это будут значения 282 и 314.

    Мы исходим из того, что нам не известны значения показателя холестерина через месяц после начала лечения, и мы хотим спрогнозировать значение переменной chol1.

    •  Оставьте предыдущие установки без изменений и проведите новый расчёт уравнения регрессии.

    В конце списка переменных добавится переменная рге_2. Для нового добавленного случая (№175) для переменной chol1 будет предсказано значение 277,77567, а для случая №176 — значение 305,37620.

    3.gif

    Изображение: 

    16.1.3 Построение регрессионной прямой

    16.1.3 Построение регрессионной прямой


    Чтобы на диаграмме рассеяния изобразить регрессионную прямую, поступите следующим образом:

    •  Выберите в меню следующие опции Graphs ... (Графики) Scatter plots... Диаграммы рассеяния 

    Откроется диалоговое окно Scatter plots... (Диаграмма рассеяния) как изображено на рисунке 16.4.

    •  В диалоговом окне Scatter plots...(Диаграмма рассеяния) оставьте предварительную установку Simple (Простая) и щёлкните на кнопке Define (Определить).

    Откроется диалоговое окно Simple Scatter plot (Простая диаграмма рассеяния) (см. рис. 16.5).



    Рис. 16.4: Диалоговое окно Scatter plots... (Диаграмма рассеяния)



    Рис. 16.5: Диалоговое окно Simple Scatterplot (Простая диаграмма рассеяния).

    •  Перенесите переменную chol1 в поле оси Y, а переменную chol0 в поле оси X.

    •  Подтвердите щелчком на ОК.

    В окне просмотра результатов появится диаграмма рассеяния (см. рис. 16.6).

    •  Щёлкните дважды на этом графике, чтобы перенести его в редактор диаграмм.

    •  Выберите в редакторе диаграмм меню Chart... (Диаграмма) Options... (Опции)

    Откроется диалоговое окно Scatterplot Options (Опции для диаграммы рассеяния) (см. рис. 16.7).

    •  В рубрике Fit Line (Приближенная кривая) поставьте флажок напротив опции Total (Целиком для всего файла данных) и щёлкните на кнопке Fit Options (Опции для приближения). Откроется диалоговое окно Scatterplot Options: Fit Line (Опции для диаграммы рассеяния: приближенная кривая) (см. рис. 16.8).

    •  Подтвердите предварительную установку Linear Regression (Линейная регрессия) щелчком Continue (Далее) и затем на ОК.

    •  Закройте редактор диаграмм и щёлкните один раз где-нибудь вне графика.


    Рис. 16.6: Диаграмма рассеяния в окне просмотра



    Рис. 16.7: Диалоговое окно Scatterplot Options (Опции для диаграммы рассеяния)



    Рис. 16.8: Диалоговое окно Scatterplot Options: Fit Line (Опции для диаграммы рассеяния:


    Теперь в диаграмме рассеяния отображается регрессионная прямая (см. рис. 16.9).

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    16.1.4 Выбор осей

    16.1.4 Выбор осей


    Для диаграмм рассеяния часто оказывается необходимой дополнительная корректировка осей. Продемонстрируем такую коррекцию при помощи одного примера. В файле raucher.sav находятся десять фиктивных наборов данных. Переменная konsum указывает на количество сигарет, которые выкуривает один человек в день, а переменная puls на количество времени, необходимое каждому испытуемому для восстановления пульса до нормальной частоты после двадцати приседаний. Как было показано ранее, постройте диаграмму рассеяния с внедрённой регрессионной прямой.

    •  В диалоговом окне Simple Scatterplot (Простая диаграмма рассеяния) перенесите переменную puls в поле оси Y, а переменную konsum — в поле оси X.


    Рис. 16.9: Диаграмма рассеяния с регрессионной прямой


    После соответствующей обработки данных в окне просмотра появится диаграмма рассеяния, изображённая на рисунке 16.10.



    Рис. 16.10: Диаграмма рассеяния с регрессионной прямой до коррекции осей


    Так как никто не выкуривает минус 10 сигарет в день, точка начала отсчёта оси X является не совсем корректной. Поэтому попробуем эту ось откорректировать.

    •  Дважды щёлкните на графике и в меню редактора диаграмм вберите опции Chart... (Диаграмма) Axis... (Оси) Откроется диалоговое окно Axis Selection (Выбор оси) (см. рис. 16.11).

    •  Подтвердите предварительный выбор оси X нажатием кнопки ОК.

    Откроется диалоговое окно X-Scale Axis (Ось X) (см. рис. 16.12).

    •  В редактируемом поле Displayed (Отображаемый) в рубрике Range (Диапазон) измените минимальное значение на 0.

    •  Подтвердите нажатием на ОК.


    Рис. 16.11: Диалоговое окно Axis Selection (Выбор оси)



    Рис. 16.12: Диалоговое окно X-Scale Axis (Ось X)

    •  Выберите вновь в меню редактора диаграмм опции Chart... (Диаграмма* Axis... (Оси)

    •  Активируйте в диалоговом окне Axis Selection (Выбор оси) опцию Y Scale (Ось Y). Откроется диалоговое окно Y-Scale Axis (Ось Y).

    •  И здесь в рубрике Range (Диапазон) в редактируемом поле Displayed (Отображаемый) измените минимальное значение на "0".

    •  Подтвердите нажатием на ОК.

    В окне просмотра Вы увидите откорректированную диаграмму рассеяния (см. рис. 16.13).


    На откорректированной диаграмме рассеяния теперь стало проще распознать начальную точку на оси Y, которая образуется при пересечении с регрессионной прямой. Значение этой точки примерно равно 2,9. Сравним это значение с уравнением регрессии для переменных puls (зависимая переменная) и konsum (независимая переменная). В результате расчёта уравнения регрессии в окне отображения результатов появятся следующие значения:


    Coefficients (Коэффициенты)а


    Model (Модель)

     

    Unstandardized Coefficients (He стандартизированные коэф- фициенты)


    Standar- dized Coefficients (Стандарти- зированные коэф- фициенты)


    Т


    Sig. (Значи- мость)



    В

    Std. Error (Стандар- тная ошибка) ß (Beta)

    1


    (Constant) (Константа)


    2,871

    ,639  

    4,492


    ,002


    tgl. Zigaretten-konsum (Коли- чество сигарет в день)


    ,145

    ,038

    ,804


    3,829


    ,005


    a. Dependent Variable: Pulsfrequenz unter 80 (Зависимая переменная: частота пульса ниже 80)



    Рис. 16.13: Диаграмма рассеяния с регрессионной прямой после корректировки осей


    Что дает следующее уравнение регрессии: 


    pids = 0,145-konsum + 2,871


    Мы видим, что константа в вышеприведенном уравнении регрессии (2,871) соответствует точке на оси Y, которая образуется в точке пересечения с регрессионной прямой.

    9.gif

    Изображение: 

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    16.10 Двухступенчатый метод наименьших квадратов

    16.10 Двухступенчатый метод наименьших квадратов


    При помощи этого метода, используемого в эконометрии, производится анализ переменных, представленных в виде временных рядов. Примером может здесь послужить классическая эконометрическая модель, в которой спрос на некоторый продукт зависит от его цены, уровня обеспеченности (достатка) потенциальных покупателей и других неизвестных факторов:


    Спрос = ß0 + ß1 • Цена + ß2 • Достаток + Ошибка


    Наряду с независимыми переменными (называемыми также объявленными переменными) в этом уравнении должно быть указано, по меньшей мере, такое же количество так называемых инструментальных переменных. Они могут оказывать влияние на независимые переменные, при этом сами независимые переменные оказывать влияния на них не могут. Если речь идёт о сельскохозяйственном продукте, то такими переменными могут быть климатические переменные. Инструментальные переменные должны иметь сильную корреляцию с независимыми переменными, но совсем не иметь корреляции со слагаемыми ошибки.


    В диалоговом окне для этого метода выводится запрос по поводу зависимых, объявленных и инструментальных переменных. На данном этапе рассмотрение конкретного примера мы опустим.

    16.2 Множественная линейная регрессия

    16.2 Множественная линейная регрессия


    В общем случае в регрессионный анализ вовлекаются несколько независимых переменных. Это, конечно же, наносит ущерб наглядности получаемых результатов, так как подобные множественные связи в конце концов становится невозможно представить графически.


    В случае множественного регрессионного анализа речь идёт необходимо оценить коэффициенты уравнения


    у = b11+b22+... + bnn+а,


    где n — количество независимых переменных, обозначенных как х1 и хn, а — некоторая константа.


    Переменные, объявленные независимыми, могут сами коррелировать между собой; этот факт необходимо обязательно учитывать при определении коэффициентов уравнения регрессии для того, чтобы избежать ложных корреляций.


    В качестве примера рассмотрим стоматологическое обследование 1130 человек, в котором исследуется вопрос необходимости лечения зубного ряда, измеряемой при помощи так называемого показателя CPITN, в зависимости от набора различных переменных.


    При этом зубной ряд был разделён на секстанты, для которых и происходило определение показателя CPITN. Этот показатель может принимать значения от 0 до 4, где 0 соответствует здоровому состоянию, а 4 наибольшей степени развития заболевания. Затем значения показателя CPITN для всех секстант были усреднены.


    Файл zahn.sav содержит следующие переменные:


    Имя переменной


    Расшифровка


    cpitn


    Усредненное значение CPITN


    alter


    Возраст


    g


    Пол (1 = мужской, 2 = женский)


    s


    Образование (1 = специальное школьное, 2 = неполное школьное, 3 = среднее, 4 = аттестат зрелости, 5 = высшее образование)


    pu


    Периодичность чистки зубов (1 = меньше одного раза в день, 2 = один раз в день, 3 = два раза в день, 4 = долее двух раз в день)


    zb


    Смена зубной щётки (1 = каждый месяц, 2 = каждые три месяца, 3 = раз в полгода, 4 = ещё реже)


    beruf (профессия)


    Профессия (1 = государственный служащий/служащий, 2 = рабочий/профессиональный рабочий, 3 = занятость в области медицины, 4 = военный)


    Переменные cpitn и alter принадлежат к интервальной шкале, а переменные s, pu и zb при более подробном рассмотрении можно отнести к порядковой шкале, так что они могут быть подвергнуты регрессионному анализу. Переменная g относится к номинальной шкале, но в то же время является дихотомической. Поэтому если при оценке результатов обратить внимание на полярность, то и эта переменная так же может быть вовлечена в регрессионный анализ. Однако, переменная beruf относится к номинальной шкале и имеет более двух (а именно четыре) категории. Поэтому, без дополнительной обработки ее нельзя применять в дальнейших расчётах.


    В данном случае можно прибегнуть к специальному трюку: разложить переменную beruf на четыре, так называемых, фиктивных переменных, с кодировками отвечающими О (действительно) и 1 (ложно). В файл добавляются четыре новые переменные: berufl-beruf4, которые поочередно соответствуют четырём различным кодировкам переменной beruf. Так, к примеру, переменная berafl указывает на то, является ли данный респондент государственным служащим/работником (кодировка 1) или нет (кодировка 0).

    •  Откройте файл zahn.sav.

    •  Выберите в меню Analyze... (Анализ) Regression...(Регрессия) Linear... (Линейная)

    •  Поместите переменную cpitn в поле для зависимых переменных, объявите переменные: alter, berafl, bеrа0, beru0, beruf4, g, pu, S.H zb независимыми.

    Для множественного анализа с несколькими независимыми переменными не рекомендуется оставлять метод включения всех переменных, установленный по умолчанию. Этот метод соответствует одновременной обработке всех независимых переменных, выбранных для анализа, и поэтому он может рекомендоваться для использования только в случае простого анализа с одной независимой переменной. Для множественного анализа следует выбрать один из пошаговых методов. При прямом методе независимые переменные, которые имеют наибольшие коэффициенты частичной корреляции с зависимой переменной пошагово увязываются в регрессионное уравнение. При обратном методе начинают с результата, содержащего все независимые переменные и затем исключают независимые переменные с наименьшими частичными корреляционными коэффициентами, пока соответствующий регрессионный коэффициент не оказывается незначимым (в данном случае уровень значимости равен 0,1).


    Наиболее распространенным является пошаговый метод, который устроен так же, как и прямой метод, однако после каждого шага переменные, используемые в данный момент, исследуются по обратному методу. При пошаговом методе могут задаваться блоки независимых переменных; в этом случае заданные блоки на одном шаге обрабатываются совместно.

    •  Выберите пошаговый метод, но воздержитесь от блочной формы ввода данных, не задавайте больше ни каких дополнительных расчётов и начните вычисление нажатием ОК.

    Model Summary (Сводная таблица модели)


    Model (Модель)


    R


    R Square (Коэф- фициент детерми- нации)


    Adjusted R Square (Скорректи- рованный R-квадрат)


    Std. Error of the Estimate (Станда- ртная ошибка оценки)






    5


    ,452а


    ,564b


     ,599с 


    ,609d


    ,613е


    ,204 


    ,318 


    ,359 


    ,371 


    ,375


    ,203 


    ,317 


    ,358 


    ,369 


    ,373


    ,8316 


    ,7698 


    ,7467 


    ,7402 


    ,7380


    a. Predictors: (Constant), Alter (Влияющие переменные: (константа), возраст)


    b. Predictors: (Constant), Alter, Putzhaeufigkeit (Влияющие переменные: (константа), возраст, периодичность чистки)


    c Predictors: (Constant), Alter, Putzhaeufigkeit, Zahnbuerstenwechsel (Влияющие переменные: (константа), возраст, периодичность чистки, смена зубной щётки)


    d Predictors: (Constant), Alter, Putzhaeufigkeit, Zahnbuerstenwechsel, Schulbildung (Влияющие переменные: (константа), возраст, периодичность чистки, смена зубной щётки, образование)


    е. Predictors: (Constant), Alter, Putzhaeufigkeit, Zahnbuerstenwechsel, Schulbildung, Arbeiter/Facharbeiter (Влияющие переменные: (константа), возраст, периодичность чистки, смена зубной щётки, образование, рабочий/профессиональный работник) .


    Из первой таблице следует, что вовлечение переменных в расчет производилось за пять шагов, то есть переменные возраст, периодичность чистки, смена зубной щётки, образование, рабочий/профессиональный работник поочерёдно внедрялись в уравнение регрессии. Для каждого шага происходит вывод коэффициентов множественной регрессии, меры определённости, смещенной меры определённости и стандартной ошибки.


    К указанным результатам пошагово присоединяются результаты расчёта дисперсии (см. гл. 16.1.1), которые здесь не приводятся. Также, пошаговым образом, производится вывод соответствующих коэффициентов регрессии и значимость их отличия от нуля.


    Coefficients (Коэффициенты) a


    Model (Модель)   UnStan- dardized Coefficients (He стандарти-зированные коэф- фициенты) Standa- rdized Coefficients (Стандарти-зированные коэф-фициенты) Т Sig. (Значи мость)
      В Std. Error (Станда- ртная ошибка) ß (Beta)
      (Constant) (Константа) Alter (Возраст) 1,295 3,31 Е-02 ,071 

    ,002

    ,452 18,220 17,006 ,000 ,000
    2 (Константа) Возраст Перио- дичность чистки 3,024 3.20Е-02 -,604 ,142 

    ,002 

    ,044

    ,437

     -,339

    21,317 17,765 -13,756 ,000 ,000 ,000
    3 (Константа) Возраст Перио- дичность чистки Смена зубной щётки 1,903 3.25Е-02 -,439 ,253   ,191 

    ,002 

    ,047 ,030

    ,443 

    -,246

     ,222

     9,976 18,555 -9,376 8,473 ,000 ,000,

    ,000 ,000

    4 (Константа) Возраст Перио- дичность чистки Смена зубной щётки Образование 2,188 3,31 Е-02 -,391 ,226 -,115 ,199 

    ,002 

    ,048 

    ,030 

    ,025

    ,451

     -,220

     ,199 

    -,116

    10,992 19,011 -8,235 7,498 -4,580 ,000 ,000

    ,000 ,000

    ,000 

    5 (Константа) Возраст Перио- дичность чистки Смена зубной щётки Образование Рабочий/ Профес- сиональный работник

    2,022 3.20Е-02 -,379 ,229 -8.3Е-02


    ,143

     

    ,208 


    ,002 


    ,048 


    ,030 


    ,028


    ,052

     

    ,437


     -,213


     ,201 


    -,084


    ,075

     

     9,743 18,041 -7,964 7,613 -2,983

    2,757

    ,000 ,000 ,000 ,000 ,003

    ,006

    а. Dереnаdеnt variable: Mittlerer CPITN-Wert (Зависимая переменная: усреднённое значение CPITN)


    Вдобавок ко всему для каждого шага анализируются исключённые переменные. В вышеприведенной таблице в объяснениях нуждаются лишь коэффициенты ß. Это — регрессионные коэффициенты, стандартизованные соответствующей области значений, они указывают на важность независимых переменных, вовлечённых в регрессионное уравнение.


    Уравнение регрессии для прогнозирования значения CPITN выглядит следующим образом:


    cpitn = 0,032•alter - 0.379•рu + 0,229•zb - 0,083•s + 0,143- benif 2 + 2,022


    Для 40-летнего рабочего с неполным школьным образованием, который ежедневно чистит зубы один раз в день и меняет щётку раз в полгода, с учётом соответствующих кодировок, получается следующее уравнение:


    cpitn = 0,032•40-0,379•2 + 0,229•3- 0,083•2 + 0,143•1 + 2,022 = 3,208


    При помощи соответствующих опций можно организовать вывод большого числа дополнительных статистических характеристик и графиков, на которых мы здесь останавливаться не будем. Можно также создать много дополнительных переменных и добавить их в исходный файл данных.


    Важным моментом является анализ остатков, то есть отклонений наблюдаемых значений от теоретически ожидаемых. Остатки должны появляться случайно (то есть не систематически) и подчиняться нормальному распределению. Это можно проверить, если с помощью кнопки Charts... (Диаграммы) построить гистограмму остатков. В приведенном примере наблюдается довольно хорошее согласование гистограммы остатков с нормальным распределением.


    Проверка на наличие систематических связей между остатками соседних случаев (что, однако, является уместным только при наличии так называемых данных с продольным сечением), может быть произведена при помощи теста Дарбина-Ватсона (Durbin-Watson) на автокорреляцию. Этот тест вычисляет коэффициент, лежащий в диапазоне от 0 до 4. Если значение этого коэффициента находится вблизи 2, то это означает, что автокорреляция отсутствует. Тест Дарбина-Ватсона можно активировать через кнопку Statistics (Статистические характеристики). В данном примере тест дает удовлетворительное значение коэффициента, равное 1,776.


    Ещё одной дополнительной возможностью является задание переменной отбора в диалоговом окне Linear Regression (Линейная регрессия). Здесь, с помощью кнопки Rule... (Правило) в диалоговом окне Linear Regression: Define Selection Rule (Линейная регрессия: ввод условия отбора), Вы получаете возможность при помощи избирательного признака сформулировать условие, которое будет ограничивать количество случаев, вовлеченных в анализ.



    Рис. 16.14: Гистограмма остатков

    14.gif

    Изображение: 

    16.3 Нелинейная регрессия

    16.3 Нелинейная регрессия


    Многие связи по своей природе, то есть в реальной жизни, либо являются строго линейными, либо их можно привести к линейному виду. Один пример линейной связи из области медицины был приведен в главе 16.1; ещё одним, уже знакомым нам примером является линейная связь между весом и ростом. При условии наличия лопаточного количества респондентов, на основании измеренных пар значений можно вывести уравнение регрессионной прямой, к которой более или менее приближается '.тожество точек, соответствующие парам значений.


    Существуют также линейные связи, следующие непосредственно из физических закономерностей. Так путь s, пройденный, при постоянной скорости с за промежуток времени : рассчитывается по формуле:


    s=c•t


    Стало быть, путь является линейной функцией времени. А если мы рассмотрим закон свободного падения, то в этом случае расстояние s. которое проходили падающее тело увеличивается пропорционально квадрату времени:


    где g — ускорение свободного падения.


    Если Вы захотите проверить это экспериментально, то Вам надлежит сделать серию опытов, в которых будет необходимо бросать некоторый предмет, например, камень, с различной высоты (лучше всего, конечно же, в разряжённом, безвоздушном пространстве) и засекать время падения. Предположим, у Вас получились следующие результаты:


    s (см)


    t (сек)


    5


    1,0


    9


    1,4


    16


    1,8


    26


    2,3


    40


    2,8


    65


    3,6


    98


    4,5


    Хотя связь между 5 и с и не является линейной, её можно перевести в линейную модель, если взять квадратный корень из обоих сторон закона свободного падения:


    С помощью преобразования данных, мы разрешаем компьютеру создать новую переменную, содержащую значения квадратного корня из величины s и рассматривать её как зависимую переменную, а время / как независимую переменную. Рассчитаем коэффициент регрессии b так, как это было изложено в разделе 16.1.


    Используя этот коэффициент, можно теперь рассчитать искомое ускорение свободного падения:


    Если Вы выполните эти вычисления, то получите b = 0,2224 и g = 9,88.


    При помощи соответствующих трансформаций в линейную модель можно перевести и другие исходно нелинейные связи. К примеру, очень часто встречающуюся экспоненциальную связь


    у = а•еbx


    можно преобразовать в линейную при помощи вычисления логарифма от обеих сторон уравнения


    ln (у) = ln(a) + b•x


    То есть в данном случае до проведения линейного регрессионного анализа необходимо прологарифмировать независимые переменные.


    Связи, которые при помощи соответствующих трансформаций могут быть переведены в линейную связь, называются линейными по существу (Intrinsically Linear Model). Возможность перевода в линейную модель нужно использовать всегда, так как в этом случае параметры регресии вычисляются непосредственно, а не определяются с помощью итераций.


    В качестве примера нелинейной по существу связи (Intrinsically Nonlinear Model) можно привести динамику роста населения США (этот пример взят из Справочника по SPSS):


    Год


    Лекала


    Население


    1790


    0


    3,895


    1800


    1


    5,267


    1810


    2


    7,182


    1820


    3


    9,566


    1830


    4


    12,834


    1840


    5


    1 6,985


    1850


    6


    23,069


    1860


    7


    31,278


    1870


    8


    38,416


    1880


    9


    49,924


    1890


    10


    62,692


    1900


    11


    75,734


    1910


    12


    91,812


    1920


    13


    109,806


    1930


    14


    122,775


    1940


    15


    131,669


    1950


    16


    150,697


    1960


    17


    178,464


    В таблице приведена численность населения в миллионах и дополнительно количество декад (десятилетий), прошедших с 1790 года.


    Зависимость численности населения (переменная pop) от времени t (выраженного здесь в декадах) часто описывается при помощи следующей формулы:


    Эту связь нельзя перевести в линейную форму. Она включает три параметра: а, b и с, которые должны быть определены при помощи подходящего метода. Для этого необходимо задать начальные значения этих параметров.


    Общего универсального метода определения параметров подобной нелинейной связи, к сожалению, не существует, поэтому описанная ниже последовательность действий может служить только примером.


    В рассматриваемом примере параметр с является амплитудой, так что начальное значение может быть задано немного большим, чем максимум значения pop, то есть приблизительно с = 200.


    При помощи значения параметра pop при t = 0 и начального значения параметра с можно получить начальную оценку параметра а:


    3,895 = 200/(1+e2


    и следовательно


    а = ln((200/3,895-1)) = 3,9


    Исходя из значения параметра pop для первой декады, можно вычислить начальное значение параметра b:


    5,267=200/(1+e3,9+b)


    и следовательно


    b=ln(5,267-1)-3,9 = -0,3


    Определим теперь более точные значения параметров а, b и с с помощью итераций.

    •  Откройте файл usa.sav.

    •  Выберите в меню Analyze... (Анализ) Regression... (Регрессия) Nonlinear... (Нелинейная)

    •  В диалоговом окне Nonlinear Regression (Нелинейная регрессия) перенесите переменную pop в поле для зависимых переменных.

    •  Щёлкните на поле Model Expression (Модельное выражение) и внесите в него следующую формулу:

    c/(l+exp(a+b*dekade))


    При вводе формулы можно использовать клавиатуру, находящуюся в диалоговом окне. Диалоговое окно будет выглядеть так, как изображено на рисунке 16.15. Нам осталось только задать начальные значения параметров.

    •  Щёлкните на кнопке Parameter... (Параметр)

    Вы получите диалоговое окно, в котором сможете задавать начальные значения.

    •  Укажите в поле имён имя первого параметра, то есть, к примеру, а, затем щёлкните в поле Starting value (Начальное значение), введите значение 3,9 и щёлкните на Add (Добавить).


    Рис. 16.15: Диалоговое окно Nonlinear Regression (Нелинейная регрессия).

    •  Поступите таким же образом с двумя другими параметрами бис (начальные значения —0,3 и 200 соответственно).

    •  Покиньте диалоговое окно нажатием Далее.

    •  Щёлкните на кнопке Save (Сохранить). Отметьте в диалоговом окне Nonlinear Regression: Save New Variables (Нелинейная регрессия: Сохранить новые переменные) параметры: Predicted Values (Прогнозируемые значения) и Residuals (Остатки). Таким образом, Вы создадите две новые переменные (с именами: pred_ и resid), которые содержат вычисленные значения и остатки для каждого года.

    •  Начните расчёт нажатием ОК.

    На экране появятся результаты, причём Вы можете заметить, что вывод происходит не в виде привычных современных таблиц. Сначала протоколируется процесс итерации; в рассматриваемом примере для достижения заданного уровня точности понадобилось 10 итерационных шагов. Дополнительно выводятся следующие статистические характеристики:


    Nonlinear Regression


    Summary Statistics Dependent Variable POP


    Source


    DF


    Sum of Squares


    Mean Square


    Regression


    3


    123048 ,61437


    41016,20479


    Residual


    15


    186,50337


    12,43356


    Uncorrected Total


    18


    123235,11774


     


    (Corrected Total)


    17


    53291,50763


     


    R squared = 1Residual SS / CorrectedSS = ,99650


    Здесь интерес может представлять только член, обозначенный R squared; его следует понимать как часть суммарной дисперсии, которая обусловлена построенной моделью. Вычисленное значение этого параметра, 0.9965, указывает на очень хорошую степень приближения. После этого вывода следует распечатка конечных значений всех трех параметров вместе с соответствующей стандартной ошибкой и доверительным интервалом:


    Asymptotic 95 % Asymptotic Confidence Interval


    Parameter Estimate


    Std. Error


    Lower Upper


    A


    3,888771432 ,


    093688592


    3,6890789254 ,088463938


    В


    -,278834486,


    015593535


    -,312071318 - ,245597654


    С


    244,01372955


    17,974966354


    205, 70099568 282


    ,32646341


    Завершает список выводимых результатов корреляционная матрица оценок параметров:


    Asymptotic


    Correlation А


    Matrix of В


    the


    Parameter Estimates С


    А 


    В 


    С


    1,0000


     -,7243


     -,3759


    -,724:


     1,000


     ,904


    3


    '0 


    3


    -,3759 


    ,9043 


    1,0000


    Очень высокие абсолютные значения корреляций указывают на то, что модель содержит неоправданно большое количество параметров. В рассматриваемом примере и модель с меньшим количеством параметров даст столь же хорошее приближение.

    •  Если Вы хотите визуально сравнить рассчитанные значения с наблюдаемыми, то можете посредством меню Graph... (Графики) Scatter plots... (Диаграммы рассеяния)

    построить многослойную диаграмму рассеяния (Staggered), на которой Вы можете представить переменные pop и pred_ в зависимости от переменной jahr. Также можно поступить и с остатками (переменная rcsid).


    Согласно предварительным установкам при расчете нелинейной регрессии происходит минимизация суммы квадратов остатков. При помощи кнопки Loss...(Остаток) можно задать какую-либо другую минимизирующую функцию. Далее при помощи кнопки Constraints...(ограничения) может быть открыто окно, в котором можно задать ограничения для определяемых параметров нелинейной регрессии.

    16.gif

    Изображение: 

    19.gif

    Изображение: 

    16.4 Бинарная логистическая регрессия

    16.4 Бинарная логистическая регрессия


    С помощью метода бинарной логистической регрессии можно исследовать зависимость дихотомических переменных от независимых переменных, имеющих любой вид шкалы.


    Как правило, в случае с дихотомическими переменными речь идёт о некотором событии, которое может произойти или не произойти; бинарная логистическая регрессия в таком случае рассчитывает вероятность наступления события в зависимости от значений независимых переменных.


    Вероятность наступления события для некоторого случая рассчитывается по формуле


    где z= b1*X1 + b2хХ2+ ...+ bnxXn+ a ,


    X1 — значения независимых переменных, b1 — коэффициенты, расчёт которых является задачей бинарной логистической регрессии, а — некоторая константа.


    Если для р получится значение меньшее 0,5, то можно предположить, что событие не наступит; в противном случае предполагается наступление события.


    В качестве примера рассмотрим два диагностических теста из области медицины на предмет обнаружения карциномы (злокачественной опухоли) мочевого пузыря: подсчет количества (типизация) Т-клеток и тест LAI. Результатами первого теста являются значения, принадлежащие к интервальной шкале, а тест LAI дает дихотомический результат: "положительно" или "отрицательно".


    Оба теста были проведены со здоровыми людьми и заведомо больными пациентами. Результаты представлены в следующей таблице:


    Коллектив


    Типизация t-клеток


    LAI


    Коллектив


    Типизация t-клеток


    LAI


    болен


    48.5


    положи-тельно


    болен


    73.5


    положи-тельно


    болен


    55.5


    положи-тельно


    здоров


    61.1


    положи-тельно


    болен


    57.5


    положи-тельно


    здоров


    62.5


    отрица-тельно


    болен


    58.5


    положи-тельно


    здоров


    63.5


    отрица-тельно


    болен


    61.0


    положи-тельно


    здоров


    64.5


    положи-тельно


    болен


    61.5


    положи-тельно


    здоров


    69.5


    положи-тельно


    болен


    61.5


    положи-тельно


    здоров


    70.0


    отрица-тельно


    болен


    6,2.0


    положи-тельно


    здоров


    70.0


    отрица-тельно


    болен


    62.0


    положи-тельно


    здоров


    71.0


    положи-тельно


    болен


    62,0


    положи-тельно


    здоров


    71,5


    положи-тельно


    болен


    62.5


    положи-тельно


    здоров


    71.5


    отрица-тельно


    болен


    63.0


    положи-тельно


    здоров


    72.0


    отрица-тельно


    болен


    63.5


    положи-тельно


    здоров


    73.0


    отрица-тельно


    болен


    65.0


    положи-тельно


    здоров


    76.0


    отрица-тельно


    болен


    65.0


    отрица-тельно


    здоров


    72.5


    отрица-тельно


    болен


    66.5


    отрица-тельно


    здоров


    73.0


    отрица-тельно


    болен


    66.5


    отрица-тельно


    здоров


    73.5


    отрица-тельно


    болен


    66.5


    положи-тельно


    здоров


    74.0


    отрица-тельно


    болен


    68.5


    положи-тельно


    здоров


    75.0


    отрица-тельно


    болен


    69.0


    отрица-тельно


    здоров


    77.0


    отрица-тельно


    болен


    71.0


    положи-тельно


    здоров


    77.0


    отрица-тельно


    болен


    71.0


    положи-тельно


    здоров


    78.5


    отрица-тельно


    болен


    71.0


    положи-тельно





    Если сначала посмотреть на результаты типизации Т-клеток, то можно заметить, что здесь для здоровых людей значения в среднем выше, чем для больных. Следовательно, исходя из значений, получившихся при типизации Т-клеток, можно попытаться, вывести вероятность наличия карциномы мочевого пузыря.


    Приведенные в таблице данные находятся в файле hkarz.sav. Больным присвоена кодировка 1, а здоровым 2; для теста LA1 кодировка 0 соответствует положительному результату, а 1 отрицательному.

    •  Откройте файл hkarz.sav.

    •  Выберите в меню Analyze... (Анализ) Regression... (Регрессия) Binary logistic... (Бинарная логистическая)

     Открывается диалоговое окно Logistic Regression (Логистическая регрессия).

    •  Поместите переменную gruppe (группа), содержащую информацию о принадлежности к одному или второму коллективу (больным или здоровым), в поле для зависимых переменных, а переменную tzell — в поле ковариат. Результаты теста LAI сначала мы не будем использовать в расчёте.


    Рис. 16.16: Диалоговое окно -Ogistic Regression  (Логистическая регрессия).


    В качестве метода использования переменных в вычислениях предварительно установлен метод Enter (Вложение), при котором в расчёт одновременно вовлекаются :-:е переменные объявленные ковариатами. Альтернативой здесь являются прогрессивная и обратная селекции. В случае наличия лишь одной ковариаты, как в указаном примере, для расчёта подходит только предварительно установленный метод.


    Кнопка Select» (Выбрать) предоставляет возможность отбора определённых случаев для дальнейшего анализа.


    Используя кнопку Categorical... (Категориальные) Вы можете подготовить для расчета категориальные переменные (то есть переменные, принадлежащие к номинальной шкале). На этом мы остановимся более подробно, рассматривая второй пример.


    При помощи кнопки Save... (Сохранить) Вы можете добавить в файл дополнительные переменные; активируйте к примеру в разделе Predicted Values (Спрогнозированные значения) предварительные установки Probabilities (Вероятности) и Принадлежность к группе.


    Нажав на кнопку Options... (Опции), Вы сможете организовать вывод дополнительных статистических характеристик, различных диаграмм и произвести некоторые дополнительные установки. В данном расчёте мы этого делать не будем.

    •  Начните расчёт нажатием ОК.

    Наиболее важные результаты приведены в нижеследующей таблице, причём в 10 версии SPSS они уже выводятся в новой табличной форме.


    Omnibus Tests of Model Coefficients (Универсальный критерий коэффициентов модели)


    Chi-square (Хи-квадрат)


    Df


    Sig. (Значимость)


    Step 1 (ШаМ)


    1


    Step (Шаг)


    18,789


    1


    ,000


    Block (Блок)


    18,789


    1


    ,000


    Model (Модель)


    18,789


    1


    ,000


    Model Summary (Сводная таблица модели)


    Step (Шаг)


    -2 Log likelihood (-2 логарифмическое правдоподобие)


    Сох & Snell R Square (R-квадрат Кокса и Шнела)


    R Square Nadelkerkes (R-квадрат Наделькеркеса)


    1


    43,394


    ,341


    ,456


    Качество приближения регрессионной модели оценивается при помощи функции подобия. Мерой правдоподобия служит отрицательное удвоенное значение логарифма этой функции (-2LL). В качестве начального значения для -2LL применяется значение, которое получается для регрессионной модели, содержащей только константы. После добавления переменной влияния tzell значение -2LL равно 43,394; это значение на 18,789 меньше, чем начальное. Подобное снижение величины означает улучшение; разность обозначается как величина хи-квадрат и является очень значимой.


    Это означает, что начальная модель после добавления переменной tzell претерпела значительное улучшение. Если при наличии некоторого количества независимых переменных анализ производится не при помощи метода вложения, а пошаговым образом, то получающиеся изменения отображаются в разделах "Блок" и "Шаг". При этом, если Вы производили ввод переменных в блочной форме, то показатель в разделе "Блок" приобретает особое значение.


    Два других выведенных показателя, названные именами Кокса & Шела и Наделькеркеса, являются мерами определённости. Они также как и при линейной регрессии указывают на ту часть дисперсии, которую можно объяснить с помощью логистической регрессии. Мера определённости по Коксу и Шелу имеет тот недостаток, что значение равное 1 является теоретически не достижимым; этот недостаток устранен благодаря модификации данной меры по методу Наделькеркеса. Часть дисперсии, объяснимой с помощью логистической регрессии, в данном примере составляет 45,6 %.


    Далее приводится классификационная таблица, в которой наблюдаемые показатели принадлежности к группе (1 = болен, 2 = здоров) противопоставляются предсказанным на основе рассчитанной модели.


    Classification Table (Классификационная таблица) а


    Observed (Наблюдаемый показатель)


    Predicted (Спрогнозировано)


    GRUPPE (Группа)


    Percentage Correct (Процентный показатель верных показателей)


    Krank (болен)

    Gesund (здоров)

    Шаг 1

    GRUPPE (Группа) Krank (болен)

    18


    6


    75,0

    Gesund (здоров)

    4


    17


    81,0

    Overall Percentage (Суммарный процентный показатель)

     


    77,8


    a. The cut value is ,500 (Разделительное значение равно ,500)


    Из таблицы можно сделать вывод о том, что из общего числа больных, равного 24, тестом были признаны таковыми только 18 (в медицинской диагностике в таких случаях говорят о "строго положительных" результатах). Остальных 6 называют "ложно отрицательными"; они были признаны тестом здоровыми, хотя и являются больными. Из общего числа здоровых, равного 21, тестом были признаны таковыми только 17 ("строго отрицательные"), 4 признаны больными, хотя они и являются здоровыми ("ложно положительные"). В общем, правильно были распознаны 35 случаев из 45, это составляет 77,8 %.


    В заключении выводятся результаты о рассчитанных коэффициентах и проверке их значимости:


    Variables in the Equation (Переменные в уравнении)




    В (Коэф-фициент регрессии В)


    S.E. (Стандарт- ная ошибка)


    Wald (Вальд)


    df


    Sig. (Значи-мость)


    Ехр


    (В)


    Step 1 (Шаг 1)а


    TZELL


    ,278


    ,082


    11,599


    1


    ,001


    1,321



    Constant (Константа)


    -19,005


    5,587


    11,571


    1


    ,001


    ,000


    a. Variable(s) entered on step 1: TZELL (Переменные, введенные на шаге 1: TZELL)


    Проверка значимости отличия коэффициентов от нуля, проводится при помощи статистики Вальда, использующей распределение хи-квадрат, которая представляет собой квадрат отношения соответствующего коэффициента к его стандартной ошибке.


    В приведенном примере получились сверх значимые коэффициенты а = -19,005 bt = 0,278. При помощи этих двух значений коэффициентов мы можем для каждого значения Т-типизации рассчитать вероятность р. К примеру, для некоего обследуемого со значением Т-типизации 72 получим


    z= - 19,005+ 0,278x72= 1,018


    и таким образом


    Рассчитанная вероятность р всегда указывает на исполнение предсказании, которое соответствует большей из двух кодировок зависимых переменных, в данном случае — на исполнение предсказания "здоров". Следовательно, рассматриваемый человек является здоровым с вероятностью 0,735.


    Рассчитанная вероятность для всех случаев и связанная с ней принадлежность к группе кодировка 1 для болен и 2 для здоров) добавлены к файлу под именами рге_1 и pgr_l.


    Теперь подключим к нашему анализу тест LAI. Дополнительно к переменной tzell теперь в поле ковариат поместите и переменную lai.


    Расчёт выдаст сначала заметно снизившееся значение -2LL (хи-квадрат = 25,668) и следующую классификационную таблицу. Доля правильно спрогнозированных диагнозов незначительно выросла (с 77,8 % до 80,0 %).


    Classification Table (Классификационная таблица)а


    Observed (Наблюдаемый показатель)

    Predicted (Спрогнозировано)

    Группа

    Percentage Correct (Процентный показатель верных показателей)

    Krank (болен) Gesund (здоров)

    Шаг

    1

    GRUPPE (Группа) Krank (болен)

    20

    4

    83,3

    Gesund (здоров)

    5

    16

    76,2

    Overall Percentage (Суммарный процентный показатель)

    80,0

    а. The cut value is ,500 (Разделительное значение равно ,500)


    Количество ложно отрицательных диагнозов снизилось на 2, а количество ложно положительных повысилось на 1. Для коэффициентов получим:


    Variables in the Equation (Переменные в уравнении)




    В (Коэф0 фициент регрессии В)


    S.E. Стандартная ошибка)


    Wald (Вальд)


    df


    Sig. (Значи0 мость)


    Ехр


    (В)


    Stepl (UJarlf


    TZELL


    ,201


    ,094


    4,574


    1


    0,32


    1,222


    LAI


    2,205


    ,877


    6,324


    1


    ,012


    9,074


    Constant (Константа)


    -14,645


    6,328


    5,356


    1


    ,021


    ,000


    a. Variable(s) entered on step 1: TZELL, LAI. (Переменные, вводимые на шаге 1: TZELL, LAI)


    Для обследуемого с типизированным числом Т-клеток равным 72 получилась вероятность оказаться здоровым р = 0,735. Если в дополнении к этому и тест LAI отрицателен (кодировка 1), то эта же вероятность рассчитывается следующим образом:


    Вероятность, оказаться здоровым, при наличии данных уже двух диагностических методов значительно возросла.


    Ещё один пример из области медицины, теперь уже с большим количеством независимых переменных, должен помочь нам разобраться в пошаговом методе анализа. Кроме того, в состав независимых переменных будет включена категориальная переменная.


    Для данного примера в некоторой клинике со специальными автоматизированными методиками лечения были накоплены данные о пациентах с тяжёлыми (или даже смертельными) повреждениями лёгких. Из большого количества переменных были выбраны следующие:


    Имя переменной


    Расшифровка


    out


    Исход (0 = скончался, 1 = выздоровел)


    alter (возраст)


    Возраст


    bzeit


    Время проведения искусственного дыхания в часах


    kob


    Концентрация кислорода в воздушной массе для искусственного


    дыхания


    адд


    Интенсивность искусственного дыхания


    gesch (пол)


    Пол (1 = мужской, 2 = женский)


    gr


    Рост


    ursache (причина)


    Причина повреждения лёгких (1 = несчастный случай, 2 = воспаление лёгких, 3 = прочее)


    Наряду с переменной out (исход), имеются переменные, при первом же взгляде на которые можно понять, что они с ней связаны. Причина повреждения лёгких является категориальной переменной, которая перед проведением анализа должна быть преобразована в несколько дихотомических переменных (к примеру, несчастный случай: да — нет).


    Вопрос, на который нам предстоит найти ответ, звучит так: какое влияние на вероятность выздоровления оказывают отобранные переменные.

    •  Откройте файл lunge.sav.

    •  После выбора соответствующего меню в диалоговом окне Logistic Regression (Логистическая регрессия) переменной out присвойте статус независимой переменной, а всем остальным (кроме пг) присвойте статус ковариат. Здесь, как и при множественной линейной регрессии, ввод ковариат Вы можете производить по блокам.

    Из-за вовлечения в анализ большого количества переменных компьютер должен решить, какие из них в конечном случае будут отобраны для использовании в уравнении вероятности. Поэтому здесь должен быть выбран не метод вложения, который включает в расчёт все переменные, а один из пошаговых методов.


    Метод прямой селекции начинается с использования одних лишь констант на стартовом этапе , а затем последовательно подключаются переменные, которые демонстрируют сильную корреляцию с зависимыми переменными. Далее опять следует проверка того, какие переменные должны быть исключены, причём в качестве критерия проверки выбирается либо статистика Вальдовского (Wald), либо функция правдоподобия, либо один из вариантов, называемых "условной статистикой" (которые, однако, не рекомендуются). Метод обратной селекции сначала берёт в расчёт все переменные, а затем в обратном порядке происходит исключение малозначимых переменных.

    •  Выберите в качестве метода Forward: LR (Прямой:LR) и щёлкните на кнопке Categorical... (Категориальные), чтобы поместить переменную ursache в поле, предусмотренное для категориальных ковариат.

    Количество образовываемых "фиктивных" дихотомических переменных должно быть всегда на 1 меньше, чем число количество заданных категорий. Категория, оказавшаяся лишней, называется эталонной категорией и, в соответствии с предварительными установками, является последней категорией. При помощи поля контрастов Contrast) Вы можете управлять особенностями вовлечения в анализ образованных Фиктивных переменных; при контрасте равном Deviation (Отклонение) все категории кроме эталонной будут проверяются относительно суммарного эффекта.

    •  Установите контраст Deviation (Отклонение) и при помощи щелчка на Continue (Далее) вернитесь в исходное диалоговое окно.

    •  Начните расчёт нажатием ОК.

    Вы можете проследить, какие переменные вовлекаются в анализ и как улучшается вероятность прогноза после вовлечения каждой новой переменной. На завершающей стати анализа присутствуют четыре переменные, а именно: возраст, время проведения искусственного дыхания, рост и концентрация кислорода в воздушной массе для искусственного дыхания.


    Точность исполнения прогноза, которая достигается при использовании этих четыpex переменных, составляет 71,0 %; её можно увидеть в нижеследующей классификанионной таблице на стр 25.


    Classification Table (Классификационная таблица)а


    Observed (Наблюдаемый показатель) Predicted (Спрогнозировано)
    Outcome (Исход) Percentage Correct (Процентный показатель верных прогнозов)
    gestorben (скончался) ueberlebt (выздоровел)

    Step 1 (Шаг)

     

    Outcome (Исход) gestorben (сконча-лся) 29 34 46,0
    ueberlebt (выздоро- вел) 14 54 79,4
        63,4
    Overall Percentage (Суммарный процентный показатель)  

    Step 2 Шаг


    2)

     

    Outcome (Исход) gestorben (сконча- лся) 32 31 50,8
    ueberlebt (выздоро- вел) 16 52 76,5
        64,1
    Overall Percentage (Суммарный процентный показатель)  
    StepS (Шаг 3) Outcome (Исход) gestorben (сконча- лся) 33 30 52,4
    ueberlebt (выздоро- вел) 19 49 72,1
    Overall Percentage (Суммарный процентный показатель)       62,6
    Step 4 (Шаг 4) Outcome (Исход) gestorben (сконча-лся) 37 26 58,7
    ueberlebt (выздоро- вел) 12 56 82,4
        71,0
    Overall Percentage (Суммарный процентный показатель)  

    a. The cut value is ,500 (Разделительное значение равно ,500)


    Прогноз оправдался для 58,7 % умерших пациентов и для 82,4 % выздоровевших. Значения коэффициента Ь. и константы а для расчёта вероятности (выздоровления) находятся в следующей таблице:


    Variables in the Equation (Переменные в уравнении)


    В Коэф-фициент регрессии В)


    S.E. (Стандар-тная ошибка)


    Wald (Валь-довский)


    df


    Sig. (Значи- мость)


    Ехр


    (В)


    Шаг 1а


    BZEIT


    -,081


    ,028


    8,482


    1


    ' ,004


    ,922


    Конста- нта


    1,104


    ,385


    8,205


    1


    ,004


    3,017


    Шаг


    2b


    GR


    ,038


    ,017


    5,109


    1


    ,024


    1,039


    BZEIT


    -,073


    ,028


    L 6,688


    1


    ,010


    ,930


    Конста- нта


    -5,460


    2,924


    L 3,487


    1


    ,062


    ,004


    Шаг 3c


    КОВ


    -2,678


    1,264


    4,489


    1


    ,034


    ,069


    GR


    ,037


    ,017


    4,622


    1


    ,032


    1,038


    BZEIT


    -,077


    ,029


    6,866


    1


    ,009


    ,926


    Конста- нта


    -2,995


    3,192


    ,880


    1


    ,348


    ,050


    Шаг


    4d


    ALTER (возраст)


    -.037


    ,017


    4,653


    1


    ,031


    ,963


    КОВ


    -3,028


    1,302


    5,410


    1


    ,020


    ,048


    GR


    ,044


    ,017


    6,650


    1


    ,010


    1,045


    BZEIT


    -,062


    ,029


    4,639


    1


    ,031


    ,940


    Конста- нта


    -2,884


    3,079


    ,877


    1


    ,349


    ,056


    a. Variable(s) entered on step 1: BZEIT. (Переменные, вводимые на шаге 1: BZEIT.) 


    b. Variable(s) entered on step 2: GR. (Переменные, вводимые на шаге 2: GR.) 


    с. Variable(s) entered on step 3: КОВ. (Переменные, вводимые на шаге 3: КОВ.) 


    d. Variable(s) entered on step 4: ALTER. (Переменные, вводимые на шаге 4: ALTER.)


    Если мы рассмотрим случай с 30-тилешим пациентом, с ростом 180 см, которому делали искусственное дыхание в течении 10 часов при концентрации кислорода в смеси равной 0,7, то исходя из соотношения


    z= - 2,884- 0,037x30- 0,062x10+ 0,044x180- 3,028x0,7= 1,12В получим вероятность выздоровления


    следовательно, вероятность выздоровления пациента равна 0,755

    21.gif

    Изображение: 

    22.gif

    Изображение: 

    23.gif

    Изображение: 

    16.5 Мультиномиальная логистическая регрессия

    16.5 Мультиномиальная логистическая регрессия


    Этот метод является вариантом логистической регрессии, при которой зависимая переменная не является дихотомической, как при бинарной логистической регрессии, а имеет больше двух категорий. В то время как, при бинарной логистической регрессии независимая переменная может иметь интервальную шкалу, то мультиномиальная логистическая регрессия пригодна только для категориальных независимых переменных, причём имеет значение, относятся ли они к шкале наименований или к порядковой шкале. Конечно же, не исключается возможность задания в качестве ковариат переменных, имеющих интервальную шкалу.


    Начиная с 10 версии SPSS для независимых переменных, относящихся к порядковой шкале предусмотрен метод порядковой регрессии (см. гл. 16.6), который в данном случае является предпочтительным.


    Для представления метода мольтиномиальной логистической регрессии был сначала взят простой пример с одной независимой переменной. Данные для этого примера "ыли взяты из ALLBUS (общий социологический опрос населения) 1998 года.

    •  Откройте файл polein.sav, и при помощи выбора меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    достройте частотные таблицы для четырёх переменных, находящихся в этом файле:


    Alter (Возраст)



    Frequency (Частота)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи- тельное значение)


    bis 45 Jahre (До 45 лет)


    1306


    50,1


    50,1


    50,1


    ueber 45 Jahre (Свыше 45 лет)


    1301


    49,9


    49,9


    100,0


    Total (Сумма)


    2607


    100,0


    100,0



    Politische Links-Rechts-Einschaetzung (Политическая принадлежность к левым или правым)



    Frequency (Частота)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи- тельное значение)


    eher links (Скорее левый)


    740


    28,4


    28,4


    28,4


    Mitte (Центрист)


    1212


    46,5


    46,5


    74,9


    eher rechts (Скорее правый)


    655


    25,1


    25,1


    100,0


    Total (Сумма)


    2607


    100,0


    100,0



    Schicht (Прослойка)

     

    Frequency (Частота)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи- тельное


    Unterschicht (Нижняя прослойка)


    879


    33,7


    33,7


    33,7


    значение)


    Mittelschicht (Средняя прослойка)


    1477


    56,7


    56,7


    90,4



    Oberschicht (Верхняя прослойка)


    251


    9,6


    9,6


    100,0



    Total (Сумма)


    2607


    100,0


    100,0



    Schulbildung (Школьное образование)

     

    Frequency (Частота)


    Percent (Процент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент)


    Valid (Действи- тельное значение)


    Hauptschule (Неполное среднее)


    1499


    57,5


    57,5


    57,5


    Mittlere Reife (Среднее)


    610


    23,4


    23,4


    80,9


    Abitur (Атестат зрелости)


    498


    19,1


    19,1


    100,0


    Total (Сумма)


    2607


    100,0


    100,0



    Мы хотим рассмотреть переменную polire (Политическая принадлежность к левым или правым) как зависимую переменную, а три остальные — как независимые переменные (факторы). В первом примере в качестве независимой переменной мы возьмем только переменную "Alter" (Возраст). Прежде всего построим таблицу сопряженности для этих двух переменных.

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    Переменной alter присвойте статус строчной переменной, a polire — столбцовой переменной, и через выключатель Cells... (Ячейки) активируйте вывод процентных показателей для ячеек.


    Alter * Politische Links-Rechts-Einschfltzung Crosstabulation


    (Возраст * Политическая принадлежность к левым или правым -  таблица сопряженности)


     


     


    Politische Links-Rechts-Einschfltzung (Политическая принадлежность к левым или правым)


    Total (Сумма)


    eher links (Скорее левый)

    Mitte (Цент- рист) eher rechts (Скорее правый)

    Alter (Воз-раст)


    bis 45 Jahre (До 45 лет)

    Count (Коли- чество)

    446

    615

    245


    1306

    % of Total (% от возраста)

    34,2%

    47,1%

    18,8%


    100,0%


    ueber 45 Jahre (Свыше 45 лет)

    Count % of Total (Коли- чество)

    294

    597

    410


    1301

    (% от возраста)

    22,6%

    45,9%

    31,5%


    100,0%


    Total (Сум- ма)

    Count (Коли- чество)

    740

    1212

    655


    2607

    % of Total (% от возраста)

    28,4%

    46,5%

    25,1%


    100,0%


    Для младшей возрастной категории политическое самоопределение имеет тенденцию склонения симпатий к левым партиям, а для старшей — скорее к правым. Рассмотрим простую мультиномиальную логистическую модель, которая отражает взаимосвязь между политическим самоопределением и возрастом.


    Так как политическое самоопределение, как зависимая переменная, включает три категории, то для определения вероятностей отнесения респондентов к этим трем категориям можно сформировать два недублированных логита, причём последняя категория "eher rechts" (скорее правый) будет использоваться как эталонная:


    Нахождение коэффициентов b10, b11, b20 и b21 (называемых параметрическими оценками) и является основной задачей мультиномиальной логистической регрессии. Первая цифра индекса указывает на номер логита, а вторая на порядковый номер коэффициента в данном логите, причём цифра 0 на второй позиции индекса означает константу, за которой далее следует ровно столько коэффициентов, сколько независимых переменных (факторов) взято в рассмотрение. Коэффициентам последней (эталонной) категории присваивается значение 0.


    Переменная Alter (Возраст), как единственная независимая переменная, имеет две категории, одна из которых рассматривается как эталонная, ее коэффициенты принимаются равными 0.

    •  Выберите в меню Analyze (Анализ) Regression ...(Регрессия) Multinomial Logistic... (Мультиномиальная логистическая)

    Откроется диалоговое окно Multinomial Logistic Regression (Мультиномиальная логистическая регрессия).

    •  Переменную polire поместите в поле для зависимых переменных, а переменную alter (возраст) в поле для факторов и нажмите выключатель Statistics (Статистики).

    Откроется диалоговое окно Multinomial Logistic Regression: Statistics (Мультиномиальная логистическая регрессия: Статистики)

    •  Оставьте активированным вывод параметрических оценок с доверительным интервалом соответствующим 95 % и покиньте это диалоговое окно нажатием Далее и ОК.


    Рис. 16.17: Диалоговое окно Multinomial Logistic Regression (Множественная логистическая регрессия)



    Рис. 16.18: Диалоговое окно Multinomial Logistic Regression: Statistics (Множественная логистическая регрессия: Статистики)


    Содержание таблицы результатов расчёта, выглядит следующим образом. Для не дублирующих категорий она содержит параметрические оценки, стандартную ошибку, проверку значимости при помощи статистики Вальда, значение экспоненциальной функции от параметрической оценки и его доверительный интервал.


    Parameter Estimates (Оценки параметров)


    Politische Links-Rechts-Einschaetzung (Политическая принадлежность к левым или правым)


    В


    Std. Error (Станда- ртная ошибка)


    Wald (Вальд)


    df (Сте-пень сво- боды)


    Sig. (Значи- мость)


    Ехр(В)


    95% Confidence Interval for Ехр(В) (95 % довери- тельный интервал для Ехр(В))


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)

     

    eher links (Скорее левый)


    Intercept (Постоян- ное слага- емое)


    -,333


    ,076


    18,938


    1


    ,000





    [ALTER= 1,00]


    ,932


    ,110


    71,353


    1


    ,000


    2,539


    2,045


    3,151


    [ALTER= 2,00]


    Оа


    0



    0



    ,




    Mitte (Цен-трист)


    Intercept (Постоян- ное слага-емое)


    ,376


    ,064


    34,320


    1


    ,000





    [ALTER= 1,00]


    ,545


    ,099


    30,198


    1


    ,000


    1,724


    1,420


    2,094


    rALTER= 2,00]


    0"


    0



    0






    a. This parameter is set to zero because it is redundant (Данный параметр обнуляется, т.к. он является дублирующим)


    Из таблицы можно взять следующие значения для b-коэффициентов:


    b10 =-0,333


    b11 (до 45 лет) = 0,932


    b20 = 0,376


    b21 (до 45 лет) = 0,545 1


    Таким образом, для возрастной группы до 45 лет получим


    g1 = -0,333 + 0,932 = 0,599


    g2 = -0,376 + 0,545 = 0,921


    и следовательно


    Для дублирующего логита по правилам вычисления логарифма справедливо


    К примеру, в возрастной категории до 45 лет вероятность быть более склонным к тевым течениям в 1,820 раз выше вероятности склонности к правым течениям. Такой же расчёт можно произвести и для другой возрастной категории; в данном случае будут отсутствовать коэффициенты b11 и b21, т.к. они приравниваются к нулю.


    Следует отметить, что прямое определение вероятности для трёх категорий политической самооценки, интересней, чем соотношение этих вероятностей между собой. Для каждой i-ой категории зависимых переменных эта вероятность может быть вычислена по следующей формуле:


    Здесь для большей удобочитаемости экспоненциальная функция обозначена как ехр. n указывает на число категорий (здесь n=3).


    Для возрастной группы до 45 лет для трёх категорий политической самооценки получатся следующие вероятности:


    Стало быть, для отдельного человека, принадлежащего к возрастной группе до 45 лет вероятность склонения политической самооценки в сторону левых составляет, 0,341 или 34,1 %, в сторону центристов 47,1 % и в сторону правых 18,8 %. Внимательный читатель может заметить, что эти числа соответствуют процентным показателям таблицы сопряженности для возраста и политической самооценки. Таким образом, в случае наличия лишь одной независимой переменной легко удостовериться в правдоподобности расчётов, производимых при мультиномиальной логистической регрессии.


    Для возрастной группы свыше 45 лет расчёты будут выглядеть следующим образом:


    g1 = - 0,333 + 0 = - 0,333 


    g2 = 0,376 + 0 = 0,376


    gз=0


    ехр (g1) - ехр (-0,333) = 0,717


    ехр (g2). ехр (0,376) = 1,456 


    ехр (g3) = ехр (0) = 1


    Если выразить полученные показатели в процентах, то и здесь так же наблюдается полное согласование с соответствующими процентными показателями таблицы сопряженности.


    Следует отметить, что только в случае наличия лишь одной независимой переменной, как в приведённом примере, проведение расчёта с применением столь громоздкого метода, как многозначная логистическая регрессия, является достаточно бессмысленным — все соотношения могут быть выяснены проще, при помощи таблиц сопряженности. Поэтому мы введем в рассмотрение ещё одну дополнительную переменную — переменную schule (образование).

    •  В диалоговом окне Multinomial Logistic Regression (Мультиномиальная логистическая регрессия) поместите переменную schule вместе с переменной alter в поле факторов.

    •  В диалоговом окне Multinomial Logistic Regression: Statistics (Мультиномиальная логистическая регрессия: Статистики) активируйте дополнительные опции Cell probabilities (Вероятность по ячейкам) и Likelihood ratio test (Тест отношения правдоподобия) и начните расчёт вновь.

    Таблица теста коэффициентов правдоподобия содержит изменения функции правдоподобия для случая, когда исключается соответствующий главный действующий фактор; эти изменения выражаются через соответствующие значения теста %2 (хи-квадрат). Выдаваемый уровень значимости р < 0,001 указывает на то, что оба фактора (возраст и школьное образование) оказывают очень значимое влияние на зависимую переменную (политическая самооценка).


    Model Fitting Information (Информация о приближении, обеспечиваемой моделью)


    Model (Модель)


    -2 Log likelihood (-2 логарифми- ческое правдопо- добие)


    Chi-square (Хи-квадрат)


    df (степень свободы)


    Sig. (Значи- мость)


    Intercept Only (Только постоянное слагаемое)


    252,208


    Final (Оконча- тельно)


    93,429


    158,779


    6


    ,000


    Likelihood Ratio Tests (Тест отношения правдоподобия)


    (Результат)


    -2 Log Likelihood of Reduced Model (-2 логарифми-ческое правдоподобие для сокращённой модели)


    Chi-square (Хи-квадрат)


    df (Степень свободы)


    Sig. (Значи- мость)


    Intercept (Постоянное слагаемое)


    93,429


    ,000


    0



    ALTER (Возраст)


    171,496


    78,067


    2


    ,000


    SCHULE (Образо- вание)


    178,489


    85,060


    4


    ,000


    The chi-square statistic is the difference in -2 tog-likelihoods between the final model :-~d a reduced model. The reduced model is formed by omitting an effect from the final model. The null hypothesis is that all parameters of that effect are 0 (Статистика хи-квадрат отображает различие -2 логарифмического правдоподобия между окончательной моделью и усеченной моделью. Суть расчёта усеченной модели сводится к тому, что из окончательной модели исключается один фактор влияния.


    Нулевая гипотеза соответствует обнулению всех параметров параметрических оценок данного фактора влияния).


    Таблица (b — коэффициентов) выглядит следующим образом. 


    Parameter Estimates (Оценки параметров)


    Politische Links-Rechts-Einschaetzung Политическая принадлежность к левым пли правым)


    В


    Std. Error (Стан- дартная ошибка)


    Wald (Вальд)


    df (Сте-пень сво-боды)


    Sig. (Значи- мость)


    Exp (В)


    95% Confidence Interval for Exp(B) (95 % довери- тельный интервал для Ехр(В))


    Lower Bound (Ниж-ний пре-дел)


    Upper Bound (Верх-ний пре-дел)


    eher links (Ско- рее левый)


    (Посто-янное слага-емое)


    -,129


    ,137


    ,8feO


    1


    ,345





    [ALTER= 1,00]


    ,952


    ,117


    66,600


    1


    ,000


    2,591


    2,061


    3,256


    ALTER= 2,00]


    Oa


    0



    0



    ,


    ,



    SCHULE= 1,00]


    -,179


    ,142


    ,592


    1


    ,207


    ,836


    ,632


    1,104


    SHULE= 2,00]


    -,480


    ,158


    9,249


    1


    ,002


    ,619


    ,454


    ,843


    [SHULE= 3,00]


    0"


    0


    l


    0



    ,


    ,



    Mine (Цент-рист)


    (Постоян-ное слага-емое)


    -,236


    ,137


    2,982


    1


    ,084





    [ALTER= 1,00]


    ,766


    ,106


    52,174


    1


    ,000


    2,152


    1,748


    2,939


    [ALTER= 2,00]


    Oa


    0



    0


    ,





    [SCHULE= 1,00]


    ,802


    ,141


    32,539


    1


    ,000


    2,231


    1,693


    2,939


    [SHULE= 2,00]


    ,149


    ,155


    ,922


    1


    ,337


    1,161


    ,856


    1,574


    [SHULE= 3,00]


    Oa


    0


    ,


    0


    ,


    ,


    ,


    ,


    a. This parameter is set to zero because it is redundant (Данный параметр обнуляется, так как он является дублирующим)


    В качестве примера определим вероятности для политической самооценки отдельного человека, принадлежащего к возрастной группе свыше 45 лет с неполным средним образованием. Для этого по аналогии с предыдущим примером произведём следующие вычисления:

     g1 = - 0,129 + 0 - 0,179= - 0,308  
     g2 = - 0,236 + 0 + 0,802 = 0,566 
     gз= 0 
     exp (g1) = 0,735 
     exp (g2) = 1,761 
     exp (g3) - 1 


    Если перевести данные результаты в процентные показатели, то они будут означать, что среди граждан в возрасте свыше 45 лет с неполным средним образованием 21,0 % симпатизируют левым политическим течениям, 28,6 % правым, а 50,4 % остаются по центру.


    Нет необходимости вычислять процентные показатели вероятностей самостоятельно. Вы можете взять их из следующей таблицы, отображающей наблюдаемые и прогнозируемые частоты:


     


    Observed and Predicted Frequencies (Наблюдаемые и прогнозируемые частоты)


    Schulb-ildung (Образо- вание)


    Alter (Возраст)


    Politische Links-Rechts-Einschfltzung (Политическая левая или правая принадлежность)


    Frequency (Частота)


    Percentage (Процент)


    Observed (Наблю-даемая)


    Predicted (Прогно-зируемая)


    Pearson Residual (Остаток Пирсона)


    Observed (Набл-юдаемый)


    Predicted (Прогно-зируемый)


    Haupt- schule (Непол-ное среднее)


    bis 45 Jahre (До 45 лет)


    eher links (Скорее левый)


    143


    157,488


    -1,365


    25,8%


    28,4%


    Mitte (Центрист)


    312


    313,760


    -,151


    56,3%


    56,6%


    eher rechts (Скорее правый)


    99


    82,752


    1,937


    17,9%


    14,9%


    ueber 45 Jahre(Свыше 45 лет)


    eher links (Скорее левый)


    213


    198,512


    1,157


    22,5%


    21,0%


    Mitte (Центрист)


    478


    476,240


    ,115


    50,6%


    50,4%


    eher rechts (Скорее правый)


    254


    270,248


    -1,170


    26,9%


    28,6%


    Mifflere Reife (Сред-нее)


    bis 45 Jahre (до 45 лет)


    eher links (Скорее левый)


    129


    131,561


    -,271


    31,5%


    32,2%


    Mitte (Центрист)


    192


    184,113


    ,784


    46,9%


    45,0%


    eher rechts (Скорее правый)


    88


    99,326


    -,628


    21,5%


    22.8%


    ueber 45 Jahre(Свыше 45 лет)


    eher links (Скорее левый)


    47


    44,439


    ,435


    23,4%


    22.1%


    Mitte (Центрист)


    67


    74,887


    -1,151


    33,3%


    37,3%


    eher rechts (Скорее правый)


    87


    81,674


    ,765


    43,3%


    40,6%


    Abitur (Аттестат зрелости)


    bis 45 Jahre (до 45 лет)


    eher links (Скорее левый)


    174


    156,952


    1,848


    50,7%


    45,8%


    Mitte (Центрист)


    111


    117,127


    -,698


    32,4%


    34,1%


    eher rechts (Скорее правый)


    58


    68,922


    -1,472


    16,9%


    20,1%


    ueber 45 Jahre(Свыше  45 лет)


    eher links (Скорее левый)


    34


    51,048


    -2,914


    21,9%


    32,9%


    Mitte (Центрист)


    52


    45,873


    1,078


    33,5%


    29,6%


    eher rechts (Скорее правый)


    69


    58,078


    1,812


    44,5%


    37,5%


    The percentages are based on total observed frequencies in each subpopulation (Процентные показатели основываются на наблюдаемых суммарных частотах для каждой частичной совокупности).


    Теперь вы можете видеть, что наблюдаемые и прогнозированные значения оказались рассогласованными. Это произошло потому, что теперь в модель входят только главные факторы влияния, а не взаимодействия.

    •  Чтобы это изменить, в диалоговом окне Multinomial Logistic Regression (Мультиномиальная логистическая регрессия) задействуйте выключатель Model (Модель).

    Откроется диалоговое окно Multinomial Logistic Regression: Model (Мультиномиальная логистическая регрессия: Модель).


    Вы можете включить в расчёт все главные факторы влияния и взаимодействия, если вместо предварительно установленной по умолчанию опции Main effects (Основные эффекты) активируете опцию Full factorial (Полнофакторная модель). При помощи опции Custom (Пользовательский режим), Вы можете отобрать включаемые в расчёт факторы влияния.

    •  Активируйте опцию Full factorial (Полнофакторная модель) и начните расчёт вновь.

    В таблице оценки параметра теперь находятся и взаимодействия. Если Вы обратите внимание на наблюдаемые и ожидаемые частоты, то заметите, что теперь они совпадают.



    Рис. 16.19: Диалоговое окно Multinomial Logistic Regression: Model (Множественная логистическая регрессия: Модель)

    •  Постройте самостоятельно ещё одну логистическую регрессию, в которой Вы можете взять .переменную schicht (Принадлежность к прослойке) в качестве третьего фактора.

    25.gif

    Изображение: 

    26.gif

    Изображение: 

    27.gif

    Изображение: 

    28.gif

    Изображение: 

    29.gif

    Изображение: 

    30.gif

    Изображение: 

    31.gif

    Изображение: 

    32.gif

    Изображение: 

    33.gif

    Изображение: 

    35.gif

    Изображение: 

    16.6 Порядковая регрессия

    16.6 Порядковая регрессия


    В то время как, мультиномиальная регрессия, представленная в разделе 16.5, предназначена для зависимой переменной, относящейся к номинальной шкале, то порядковая регрессия предназначена для целевой переменной, принадлежащей к порядковой шкале. Независимые переменные и здесь должны быть категориальными (то есть иметь номинальную или порядковую шкалу), однако в качестве ковариат допускается применение переменных с интервальной шкалой.


    Мы изучим данный метод при помощи примера из области психологии. В главе 19.3 будет рассматриваться "Анкета о специфике лечения психических заболеваний в больнице Фрайбурга", которая дает представление о работе с пациентами на основании 35 отдельных пунктов. К примеру, восприимчивость пациента к целенаправленным лечебным действиям выясняется при помощи пункта "Разработать план и затем приступить к его воплощению", причём ответ даётся в соответствии с пятибалльной шкалой: от "абсолютно не верно" (кодировка 1) до "абсолютно верно" (кодировка 5).


    Эта типичная порядковая переменная должна быть исследована в зависимости от возраста, пола, продолжительности болезни и образования. Значения приведенных переменных были собраны в отношении 85 пациентов и находятся в файле plan.sav.

    •  Откройте файл plan.sav.

    •  Выберите в меню Analyze... (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты) и постройте частотные таблицы для всех переменных.

    Alter (Возраст)


    Freq-uency (Часто-та)


    Percent (Про-цент)


    valid Percent (Действи- тельный процент)


    uumuiative percent (Совокупный процент)


    Valid (Действи-тельное значение)


    bis 40 Jahrejflo 45 лет)


    29


    34,1


    34,1


    34,1


    41-55 Jahre (41-55 лет)


    29


    34,1


    34,1


    68,2


    ueber 55 Jahre (Свыше 55 лет)


    27


    31,8


    31,8


    100,0


    Total (Сумма)


    85


    100,0 | 100,0


    Geschlecht (Пол)


    Frequ-ency (Часто-та)


    Percent (Про-цент)


    Valid Percent (Действи- тельный процент)


    Cumulative Percent (Совокупный процент


    Valid (Действи-тельное значение)


    maennlich (Мужской)


    44


    51,8


    51,8


    51,8


    weiblich (Женский)


    41


    48,2


    48,2


    100,0


    Total (Сумма)


    85


    100,0


    100,0


    Krankheitsdauer (Продолжительность болезни)


    Frequ-ency (Часто-та)


    Percent (Про-цент)


    Valid Percent (Действи- тельный процент)


    Cumu-lative Percent (Сово-купный процент)


    Valid


    bis 5 Jahre {До 5 лет)


    24


    28,2


    28,2


    28,2


    (Действи-


    6-10 Jahre (6-1 Олег)


    16


    18,8


    18,8


    47,1


    тельное


    11-20 Jahre (11-20 лет)


    32


    37,6


    37,6


    84,7


    значение)


    ueber 20 Jahre (Свыше 20 лет)


    13


    15,3


    15,3


    100,0


    Total (Сумма)


    85


    100,0


    100,0


    Schulbildung (Образование)


    Freq-uency (Часто- та)


    Percent (Про-цент)


    Valid Percent (Действи- тельный процент)


    Cumu-lative Percent (Сово-купный процент)


    Valid (Действи-тельное значение)


    Haupt-schule (неполное среднее)


    53


    62,4


    62,4


    62,4


    Mittlere Reife (среднее)


    18


    21,2


    21,2


    83,5


    Abitur (аттестат зрелости)


    14


    16,5


    16,5


    100,0


    Total (Сумма)


    85


    100,0


    100,0


    Einen Plan machen und danach handeln (Разработать план и затем приступить к его воплощению)


    Freq-uency (Часто-та)


    Percent (Про-цент)


    Valid Percent (Действи-тельный процент)


    Cumu-lative Percent (Сово-купный процент)


    Valid (Действи-тельное значе- ние)


    gar nicht (абсолютно не верно)


    24


    28,2


    28,2


    28,2


    Wenig (слабо)


    18


    21,2


    21,2


    49,4


    mittelmaessig (посред- ственно)


    18


    21,2


    21,2


    70,6


    ziemlich(достаточно)


    16


    18,8


    18,8


    89,4


    sehr stark (абсолютно верно)


    9


    10,6


    10,6


    100,0


    (Сумма)


    85


    100,0


    100,0

    •  Если Вы с помощью меню Analyze...(Анализ) Correlate (Корреляция) Bivariate... (Парная)

    произведёте расчёт ранговой корреляции по Спирману между пунктом "Составить план и затем приступить к его воплощению" и другими переменными (с использованием синтаксических приемов, описанных в главе 26.3), то получите следующий результат:


    Correlations (Корреляции)


    Einen Plan machen und danach handeln (Разработать план и затем приступить к его воплощению)


    Spearman's rho (p Спирмана)


    Alter (Возраст)


    Correlation Coefficient (Корре-ляционный коэффициент)


    -,376**


    Sig. (2-tailed) (Значимость (2-сторонняя))


    ,000


    N


    85


    Geschlecht (Пол)


    Correlation Coefficient (Корре-ляционный коэффициент)


    ,298"


    Sig. (2-tailed) (Значимость (2-сторонняя))


    ,006


    N


    85


    Krankheitsda uer (Продолжи- тельность болезни)


    Correlation Coefficient (Корре-ляционный коэффициент)


    -,260*


    Sig. (2-tailed) (Значимость (2-сторонняя))


    ,016


    N


    85


    Schulbildung (Образование)


    Correlation Coefficient (Корре-ляционный коэффициент)


    ,314**


    Sig. (2-tailed) (Значимость (2-сторонняя))


    ,003


    N


    85


    **. Correlation is significant at the .01 level (2-tailed) (Корреляция является значимой на уровне 0,01 (2 - сторонняя)).


    *. Correlation is significant at the .05 level (2-tailed) (Корреляция является значимой на уровне 0,01 (2 - сторонняя)).


    Стало быть, существует значимая, хоть и не очень большая корреляция. Если учесть принятое кодирование переменных, то можно заметить, что женщины более склонны сначала составить план действий, а затем приступать к лечению, чем мужчины. Кроме того, более молодые пациенты, пациенты с непродолжительным периодом болезни и пациенты, имеющие высшее образование, более активно занимаются своим лечением.


    Попытаемся теперь изучить одновременное влияние возраста, пола, продолжительности болезни и образования на целевую переменную "Разработать план и затем приступить к его воплощению". Подходящим методом для этого является порядковая регрессия. 

    •  Выберите в меню Analyze (Анализ) Regression (Регрессия) Ordinal... (Порядковая)

    Откроется диалоговое окно Ordinal Regression (Порядковая регрессия).



    Рис. 16.20: Диалоговое окно Ordinal Regression (Порядковая регрессия)

    •  Переменной plan (план) присвойте статус зависимой переменной, а переменным alter (возраст), g, kdauer (продолжительность болезни) и schule (образование) — статус факторов.

    •  В поле Covariate(s) (Ковариаты) вы можете внести ковариаты, относящиеся к интервальной шкале. Однако, в нашем примере таковые отсутствуют.

    •  Нажмите кнопку Options... (Опции).

    Наряду с параметрами, которые управляют итерационным процессом (предварительные установки для них мы оставляем без изменения), можно выбрать одну из пяти связующих функций, смысл которых будет пояснен далее. Функцией, установленной по умолчанию, является Logit (Логит); эта связь, как правило, оказывается лучшей.

    •  Щёлкните на кнопке Output... (Вывод). Откроется диалоговое окно Ordinal Regression:Output (Порядковая регрессия: Вывод).

    Здесь Вы получаете возможность управлять данными, выводимыми в окне просмотра и создавать новые переменные.

    •  В разделе Display (Показать) оставьте предварительные установки Goodness of Jit statistics (Статистика критерия согласия), Summary statistics (Отчётная статистика) и Parameter estimates (Параметрические оценки). В разделе Saved variables (Сохранённые переменные) активируйте опции Estimated response probabilities (Оценочные вероятности отклика), Predicted category (Прогнозируемая категория) и Predicted category probability (Вероятность прогнозируемой категории).

    •  Теперь нажмите кнопку Location... (Положение)

    Здесь у Вас появляется возможность выбора между моделью, которая содержит только главные факторы влияния и, в случае необходимости, — ковариаты, а также моделью, которую Вы можете подобрать самостоятельно (Custom). В последнем случае у Вас появляется возможность учесть также все мыслимые взаимодействия. В данном случае, сначала мы хотим учесть только главные эффекты, что соответствует предварительной установке.

    •  Посредством кнопки Scale... (Шкала) можно ввести, так называемые, компоненты шкалы. Как правило, это не является необходимым, и мы от них откажемся.

    •  Начните расчёт нажатием ОК.


    Рис. 16.21. Диалоговое окно Ordinal Regression: Output (Порядковая регрессия: Вывод)


    Отображение результатов в окне просмотра начинается с вывода предостережения. В 66,2% всех ячеек, которые образовываются из комбинаций факторов и зависимых переменных, частота равна нулю. При этом не учитываются те комбинации факторов, которые повторяются. Вы можете включить в список выдачи наблюдаемые и ожидаемые частоты, а также их остатки, если после нажатия кнопки Output... (Вывод) активируете опцию Cell infonnation (Информация по ячейкам).


    Warnings (Предостережения)


    Далее следует таблица, содержащая абсолютные и выраженные в процентах частоты различных категорий зависимых переменных и факторов.


    Case Processing Summary (Сводная таблица обработки наблюдений)


    N (Коли-чество)


    Marginal Percentage (Предельный процент)


    Einen Plan machen und danach handeln (Разработать план и затем приступать к лечению)


    gar nicht (Абсолютно не верно)


    24


    28,2%


    wenig (Слабо)


    18


    21,2%


    mittelmaessig (Посредственно)


    18


    21,2%


    ziemlich (Достаточно)


    16


    18,8%


    sehr stark (Абсолютно верно)


    9


    10,6%


    Alter (Возраст)


    bis 40 Jahre (До 45 лет)


    29


    34,1%


    41-55 Jahre (41-55 лет)


    29


    34,1%


    ueber 55 Jahre (Свыше 55 лет)


    27


    31,8%


    Geschlecht (Пол)


    maennlich (Мужской)


    44


    51,8%


    weiblich (Женский)


    41


    48,2%


    Krankheitsdauer (Продолжительность болезни)


    bis 5 Jahre (До 5 лет)


    24


    28,2%


    6-10 Jahre (6-10 лет)


    16


    18,8%


    (6-10 лет)


    32


    37,6%


    11-20 Jahre (11 -20 лет)


    13


    15,3%


    Schulbildung (Образование)


    Hauptschule (Неполное среднее)


    53


    62,4%


    Mittlere Reife (Среднее)


    18


    21,2%


    Abitur (Аттестат зрелости)


    14


    16,5%


    Valid (Действительное значение)


    85


    100,0%


    Missing (Пропущенное значение)


    0


    Tola (Сумма)


    85


    В качестве оценки значимости вклада отдельных независимых переменных в улучшение прогнозов, получаемых с помощью модели также, как и при бинарной логистической регрессии, служит отрицательное значение 2LL (Удвоенное значение логарифма функции правдоподобия). Разность между начальным значением ("Только постоянное слагаемое") и конечным значением ("Окончательно") указывается в виде значения теста хи-квадрат. которому соотнесен соответствующий уровень значимости. В приведенном примере наблюдается очень значимое улучшение (р < 0,001).


    Model Fitting Information (Информация о приближении модели)


    Model (Модель)


    -2 Log likelihood (-2 логарифми-ческое правдоподобие)


    Chi-Square (Хи-квадрат)


    df (Степень свободы)


    Sig. (Значи-мость)


    Intercept Only (Только постоянное слагаемое)


    207,180


    Final (Окончательно)


    170,408


    36,772


    8


    ,000


    Link function: Logit (Связывающая функция: Логит).


    Для проверки, будут ли наблюдаемые частоты по ячейкам значимо отличаться от ожидаемых частот, рассчитанных на основе модели, выполняется хи-квадрат тест по Пирсону. Его результатом, для данного примера, является не значимая разность значений (р = 0,190), что говорит о достижении высокой степени приближения. Однако, следует обратить внимание на то, что из-за большого количества пустых ячеек применение теста хи-квадрат становится проблематичным.


    Goodness of fit (Критерий согласия)


    Chi-Square (Хи-квадрат)


    df (Степень свободы)


    Sig. (Значимость)


    Pearson (Пирсон)


    158,733


    144


    ,190


    Deviance (Отклонение) 


    127,454


    144


    ,835


    Link function: Logit (Связывающая функция: Логит).


    Из трёх мер согласия приведенных ниже, мера, вычисленная по методу Нагелькерке (Nagelkerke) является мерой определённости, которая указывает на процентную долю дисперсии, объяснимой при помощи порядковой регрессии, (см. разд. 16.4). В приведенном примере оценка дисперсии составляет 36,7 %.


    Pseudo R-Square (Псевдо R-квадрат)


    Сох and Snell (Кокс и Шелл)


    ,351


    Nagelkerke (Нагелькерке)


    ,367


    McFadden (МакФадден)


    ,138


    Linkfunction: Logit (Связывающая функция: Логит).


    Результатом анализа являются оценки параметров регрессии приведенные в нижеследующей таблице.


     


    Parameter Estimates (Оценки параметров регрессии)



    Esti-mate (Оце-нка)


    Std. Error (Стандар-тная ошибка)


    Wald (Валь-дов-ский)


    df (Сте-пень сво-боды)


    Sig. (Значи-мость)


    95% Confidence Interval (95 % довери- тельный интервал)


    Lower Bound


    Upper Bound


    Threshold (Порог)


    [PLAN = 1]


    -,220


    ,968


    ,052


    1


    ,820


    -2,118


    1,677


    [PLAN = 2]


    ,981


    ,988


    ,986


    1


    ,321


    -,955


    2,918


    [PLAN = 3]


    2,253


    1,013


    4,949


    1


    ,026


    ,268


    4,238


    [PLAN = 4]


    3,907


    1,048


    13,905


    1


    ,000


    1,853


    5,960


    Location (Поло-жение)


    [G=1]


    2,145


    ,540


    15,787


    1


    ,000


    1,087


    3,204


    [G=2]


    1,357


    ,529


    6,574


    1


    ,010


    ,320


    2,394


    [ALTER =1]


    Oa


    ,


    ,


    0


    ,


    f


    (


    [ALTER =2]


    -1,091


    ,433


    6,355


    1


    ,012


    -1,939


    -,243


    [ALTER =3]


    Oa


    ,


    ,


    0


    ,


    f


    j


    [KDAUER =1]


    1,811


    ,740


    5,990


    1


    ,014


    ,361


    3,261


    JKDAUER =2]


    1,486


    ,782


    3,606


    1


    ,058


    -4.772E-02


    3,019


    IKDAUER =3]


    1,340


    ,678


    1 3,905


    1


    ,048


    1.101E-02


    2,669


    [KDAUER =4]


    Oa


    ,


    ,


    0


    ,


    (


    ,


    [SCHULE =1]


    -1,183


    ,618


    3,665


    1


    ,056


    -2,394


    2.807E-02


    [SCHULE =2]


    -,659


    ,700


    ,886


    1


    ,347


     -2,031


    ,713


    rSCHULE =31


    Oa




    0





    Link function: Logit (Связывающая функция: Логит).


    a. This parameter is set to zero because it is redundant (Этот параметр приравнен к нулю, так как является дублирующим). !


    Каждой категории зависимых переменных и каждой категории факторов сопоставлена оценка параметра регрессии, причём оценки для соответствующих категорий высших порядков являются дублирующими и поэтому приравнены к нулю. Оценки параметров регрессии для зависимой переменной являются пороговыми оценками, которые для факторов называются оценками положения.


    Оценки положения дают возможность толковать влияние факторов и указывают на степень этого влияния. Поэтому, прежде чем будет продемонстрирована точная математическая связь между факторами влияния и зависимой переменной, можно констатировать следующее:

    •  Из таблицы можно узнать, какие из факторов вообще оказывают значимое влияние на зависимую переменную. Такими факторами являются возраст, пол и продолжительность болезни, в то время как образование находится на самой границы значимости, до перехода этой границы осталось совсем не много.

    •  Положительные оценки означают, что соответствующая категория действует в качестве высшей категории зависимой переменной; отрицательные оценки указывают на действие в качестве низших категорий зависимых переменных.

    Принадлежность к младшим возрастным группам является причиной более единодушного одобрения предложения: "Разработать план лечения и затем приступать к его воплощению", все мужчины менее склонны к такому предложению, небольшая продолжительность болезни, а также высокое или низкое образование ведут к снижению степени одобрения. Это соответствует результатам корреляционного анализа.


    Математическое значение оценок параметров регрессии заключается в том, что на них основе могут быть вычислены кумулятивные (суммарные) вероятности для категорий независимых переменных. Покажем это на конкретном примере.


    Для этого возьмем в редакторе данных первого пациента и рассчитаем совокупную вероятность для случая, когда он отмечает одну из первых двух категорий ("gar nicht" (абсолютно не верно) или "wenig" (слабо)) для зависимой переменной.


    Первый пациент является мужчиной средней возрастной группы с большой продолжительностью болезни и неполным средним образованием. Учитывая все эти сведения, можно ожидать высокую вероятность того, что больной проявит слабую готовность планомерно лечить свою болезнь.


    На первом шаге расчёта мы должны сложить оценки положения, соответствующие отдельным категориям:


    alter = 2


    1,347


    g = 1


    -1,091


    Kdauer = 4


    0,000


    Schule = 1


    -1,183


    Сумма


    -0,917


    Эту сумму нам теперь нужно отнять от пороговой величины второй категории зависимой переменной (plan = 2):


    0,981 - (-0,917) = 0,981 + 0,917 = 1,898


    Как можно заметить по значению, которое превосходит единицу, этот показатель пока ещё не является искомой совокупной вероятностью того, что больной отметит одну из первых двух категорий. Значение этого показателя соответствует связующей функции, приведенной к этой вероятности. В нашем примере мы выбрали в качестве связующей логит-функцию, установленную по умолчанию, так что для искомой вероятности справедливо следующее выражение:


    Таким образом, вероятность того, что первый пациент отметит одну из первых двух категорий, составляет р = 0,87 или 87 %. Фактически пациент отметил категорию 1.


    Чтобы успокоить пользователей программы, следует сказать, что Вы можете избежать этих сложных расчётов. В диалоговом окне Ordinal Regression:Output (Порядковая регрессия: Вывод) мы активировали опцию сохранения некоторых переменных, которые теперь можем просмотреть.


    Пять переменных est1_1-est5_1 соответствуют вероятностям для пяти категорий зависимой переменной. Если мы возьмем первого пациента, то достаточно сложить вероятности для первых двух категорий:


    0,67 + 0,20 = 0,87


    Это соответствует тому значению, которое мы рассчитали для совокупной вероятности второй категории. В переменной рге_1 сохранен номер категории, которой соответствует самая высокая вероятность, названная "прогнозируемой категорией". Переменная рср_1 ещё раз дает вероятность выбора этой категории.


    Связующая логит-функция выбранная нами для этого примера, принадлежит к набору из пяти функций, приведенных ниже.


    Функция


    Форма


    Применение


    Logit (Логит)


    In (р/(1-р))


    Равномерно распределённые категории


    Complementary log-log (Сопряженный двойной логарифм)


    ln(-ln(1-p))


    Высшие категории представлены сильнее


    Negative log-log (Отрицательный двойной логарифм)


    -ln(-ln(p))


    Низшие категории представлены сильнее


    Probit (Пробит)


    Инверсия стандартного комулятивного нормального распределения


    Нормально распределённые частоты


    Cauchit (Коши)


    tan(7t(p-0.5))


    Появление пиковых значений


    В качестве меры качества прогнозирования можно использовать ранговую корреляцию по Спирману между фактически наблюдаемой категорией (переменная plan) и прогнозируемой категорией (переменная рге_1). Для приведенного примера (связующая функция — логит) получим г = 0,611; для других связующих функций получаются более низкие значения.


    Лучшую модель можно получить, если в диалоговом окне Ordinal Regression: Location (Порядковая регрессия: Положение) наряду с главными эффектами включить и взаимодействия. После активирования опции Custom (Пользовательский режим) в вашем распоряжении появляется вспомогательное меню, при помощи которого вместе с главным эффектом Вы сможете включить в модель и различные виды взаимодействия.

    •  Активируйте опцию Custom (Пользовательский режим) и сперва выберите в появившемся списке Main effects (Главные эффекты).

    •  При помоши транспортной кнопки перенесите все факторы в поле Location model: (Определение положения для модели).

    •  Затем отметьте в разворачивающемся меню Interaction (Взаимодействие) и повторно перенесите все факторы в поле Location model: (Определение положения для модели). Будет выбрано взаимодействие четвёртого уровня. При помоши опции All 2-way (Все дважды) Вы можете задать взаимодействие второго уровня, при помощи опции АН З-way (Все трижды) — взаимодействие третьего уровня и т.д.

    Теперь прогноз будет лучше; в случае применения для данного примера взаимодействия четвёртого уровня ранговая корреляция между наблюдаемой и прогнозируемой категориями возрастает с 0,611 до 0,739. При этом, конечно же, возрастает и количество параметрических оценок.

    36.gif

    Изображение: 

    37.gif

    Изображение: 

    38.gif

    Изображение: 

    39.gif

    Изображение: 

    16.7 Пробит-анализ

    16.7 Пробит-анализ


    Этот метод известен также под именем "Дозаторный анализ кривых воздействия" и находит применение преимущественно в области токсикологии. В большинстве случаев речь идёт о том, как на заданное количество индивидуумов воздействуют различные дозировки некоторого вещества (к примеру, некоторого токсичного вещества).


    Классический пример, который вошёл и в справочник по SPSS, исследует действие средства, предназначенного для уничтожения насекомых. При этом производится подсчёт, сколько насекомых из заранее известного количества погибли при воздействии определённых доз вещества. Особенный интерес в данном случае представляет дозировка, при которой уничтожается половина имеющихся насекомых.


    Оставим животных в покое и обратимся, в виде исключения, к одному специально придуманному примеру. Шеф секретной службы некоторой вымышленной страны пожелал узнать, сколько денег он должен предложить гражданам соседнего государства, чтобы они доставляли ему некоторую тайную информацию. Для этой цели через своего посредника он предлагает первой группе 1000 долларов и отмечает, сколько человек соглашаются на его предложение вести шпионскую деятельность. Второй группе он предлагает 2000 долларов и вновь отмечает себе количество попаданий в цель. Он продолжает предлагать деньги и дальше, действуя таким пошаговым образом и доходит до суммы 10000 долларов. При этом исследованиям подвергаются две различные категории людей. К первой категории относятся люди, которые недовольны своим материальным положением, ко второй — люди, удовлетворенные своим материальным положением.


    Для обеих категорий шеф секретной службы желает выяснить, сколько он должен предложить денег, чтобы достичь желаемой доли положительных ответов. К примеру, его интересует сумма, которую он должен заплатить, чтобы на его предложение согласилась половина опрашиваемой группы.


    Для обеих категорий удовлетворенности материальным положением (доволен — недоволен) в нижеследующей таблице представлены долларовые суммы в порядке возрастания, количество вовлечённых в эксперимент людей (nges) и количество фактически завербованных шпионов (п).


    группа


    доллар


    количество вовлечённых в эксперимент людей


    количество фактически завербованных шпионов


    недоволен


    1000


    59


    8


    недоволен


    2000


    56


    22


    недоволен


    3000


    53


    28


    недоволен


    4000


    49


    30


    недоволен


    5000


    51


    35


    недоволен


    6000


    43


    34


    недоволен


    7000


    40


    36


    недоволен


    8000


    45


    41


    недоволен


    9000


    40


    38


    недоволен


    10000


    35


    34


    доволен


    1000


    61


    1


    доволен


    2000


    45


    13


    доволен


    3000


    52


    21


    доволен


    4000


    45


    22


    доволен


    5000


    46


    26


    доволен


    6000


    38


    27


    доволен


    7000


    45


    35


    доволен


    8000


    42


    33


    доволен


    9000


    37


    32


    доволен


    10000


    36


    33


    Эта информация построчно хранится в файле dollar.sav (переменные: gruppe, dollar, nges, n).

    •  Откройте файл dollar.sav.

    •  Выберите в меню Analyze (Анализ) Regression (Регрессия) Pmbit... (Пробит) 

    Откроется диалоговое окно Probit Analysis (Пробит-анализ).


    Рис. 16.22: Диалоговое окно Probit Analysis (Пробит-анализ)

    •  Поочерёдно перенесите переменные п в поле частоты отклика, переменную nges в поле наблюдаемого общего количества, переменную gruppe в поле факторов и переменную dollar в поле ковариат.

    •  При помощи соответствующей кнопки для факторной переменной необходимо определить область принадлежности; для нашего примера она равна целым числам: 1 и 2.

    •  Стандартным подходом при проведении пробит-анализа стало логарифмическое преобразование значений ковариат (при помощи десятичного логарифма); задайте и Вы это преобразование.

    •  Оставьте установку обычной пробит-модели и щёлкните на кнопке опций. Дополнительно к установленным статистикам активируйте тест параллельности, который является уместным при анализе разнообразных групп.

    •  Начните расчёт нажатием ОК.

    Результирующие данные выводятся в старой табличной форме и являются довольно обширными. На одном из первых шагов определяются так называемые "пробиты". Они представляют собой стандартные значения, которые отвечают площади под частью кривой стандартной нормального распределения, соответствующей отношению частоты положительных ответов к общей частоте. Так, в первой группе, которой предлагалось по 1000 долларов, это предложение приняли 8 человек из 59, что соответствует относительной доле, равной


    р=8/59= 0,1356


    Это значение интерпретируется как часть площади под кривой стандартного нормального распределения (которая, как известно, суммарно нормирована к 1). По соответствующей статистической таблице можно установить, что стандартное значение равно -1,10. Это значение является пробитом к дозировке 1000 долларов.


    Упомянутые пробиты для обеих групп в зависимости от логарифма дозировки представлены на одной диаграмме, которую вы можете увидеть в окне просмотра:


    Для обеих групп график является практически линейным, что является предпосылкой для дальнейших рассуждений. В противном случае дополнительно следовало было бы рассматривать ход процесса воздействия на основе исходных значений (то есть без логарифмического преобразования).



    Рис. 16.23: Отклики, трансформированные пробитом


    Для обеих кривых определяется уравнение регрессионных прямых, причём для обеих прямых вычисляется общий угол наклона:


    Regression Coeff.


    Standard Error


    Coeff./S.E.


    DOLLAR


    2,78749


    ,17640


    15,80205


    Intercept


    Standard Error


    Intercept/S.E.


    GRUPPE

    -9 ,59552 ,63415 -15, 13130 1
    2
    -9 ,99490  ,64731 -15,44060
    Pearson  Goodness -of -Fit Chi Square=10,043 DF = 17 P = ,902

    Parallelism Test Chi  Square   = ,164  DF = 1 P = ,686


    При тесте на качество согласия большое значение р (как в рассматриваемом примере) указывает на лучшее приближение. Второй тест по критерию хи-квадрат проясняет вопрос, действительно ли обе прямые могут рассматриваться как параллельные. Параллельности прямых соответствует незначимый результат теста (как в рассматриваемом случае).


    Если мы рассмотрим уравнение регрессии для первой группы, то получим следующее уравнение, прогнозирующее значение пробита:


    Probit= 2,78749xlog(Dollar)- 9,59552 


    Для значения 1000 долларов получим 


    Probit= 2,78749x3- 9,59552= - 1,2331


    Если мы вновь обратимся к статистической таблице, содержащей значения стандартной кривой нормального распределения, то полученному стандартизированному значению в данном случае соответствует площадь 0,10878. Это значение используется для того, чтобы определить ожидаемую частоту отклика:


    59x0,10878= 6,418


    Полученные результаты сведены в следующую таблицу:


    Number of Observed Expected


    GRUPPE


    DOLLAR


    Subjects Responses Responses Residual


    Prob


    1


    3


    , 00


    59


    ,0


    8


    ,0


    6,418


    1


    ,582


    ,10878


    1


    3


    ,30


    56


    ,0


    22,


    0


    19


    ,422


    2


    ,578


    ,34681


    1


    3


    ,48


    53


    ,0


    28,


    0


    28


    ,546


    -


    ,546


    ,53860


    1


    3


    , 60


    49


    ,0


    30,


    0


    32


    , 923


    -


    2, 923


    , 67191


    1


    3


    ,70


    51


    ,0


    35,


    0


    38


    , 902


    -


    3, 902


    ,76279


    1


    3


    ,78


    43


    ,0


    34,


    0


    35


    ,491


    -


    1,491


    ,82537


    1


    3


    , 85


    40


    ,0


    36,


    0


    34


    ,768


    1


    ,232


    ,86921


    1


    3


    , 90


    45


    ,0


    41,


    0


    40


    ,522


    ,


    478


    , 90048


    1


    3


    , 95


    40


    ,0


    38,


    0


    36


    ,928


    1


    ,072


    , 92319


    1


    4


    ,00


    35


    ,0


    34,


    0


    32


    ,899


    1


    ,101


    , 93996


    2


    3


    ,00


    61


    ,0


    1,


    0


    3,


    129


    -


    2,129


    ,05129


    2


    3


    ,30


    45


    ,0


    13,


    0


    9,


    621


    3


    ,379


    ,21380


    2


    3


    ,48


    52


    ,0


    21,


    0


    19


    ,820


    1


    ,180


    ,38115


    2


    3


    ,60


    45


    ,0


    22,


    0


    23


    ,322


    -


    1,322


    ,51826


    2


    3


    ,70


    46


    ,0


    26,


    0


    28


    ,703


    -


    2,703


    ,62397


    2


    3


    ,78


    38


    ,0


    27,


    0


    26


    ,761


    ,


    239


    ,70425


    2


    3


    ,85


    45


    ,0


    35,


    0


    34


    ,436


    ,


    564


    ,76524


    2


    3


    ,90


    42


    ,0


    33,


    0


    34


    ,100


    -


    1,100


    ,81190


    2


    3


    ,95


    37


    ,0


    32,


    0


    31


    ,373


    f


    627


    ,84791


    2


    4


    ,00


    36


    /o


    33,


    0


    31


    ,535


    1


    ,465


    ,87597


    Сразу же после этой таблицы для заданных вероятностей ( вероятности здесь следует понимать, как отношение частоты желательного отклика к общему числу испытуемых) выводятся значения необходимых дозировок (в нашем случае: денежная сумма в долларах) и их 95%-ый доверительный интервал. Ниже приводится таблица значений для первой группы:


    95% Confidence Limits


    Prob


    DOLLAR


    Lower


    Upper


    ,01


    405,30868


    289,59056


    529,15509


    ,02


    507,66784


    373,66257


    647,93485


    ,03


    585,63448


    439,14578


    736,94514


    , 04


    652,08194


    495,79196


    811,99633


    ,05


    711,65439


    547,15681


    878,74346


    ,06


    766,62851


    594,99562


    939,94335


    , 07


    818,31336


    640,32303


    997,17444


    ,08


    867,54082


    683,78664


    1051,43643


    ,09


    914,87813


    725,82978


    1103,40905


    ,10


    960,73191


    766,77131


    1153,57841


    , 15


    1176,35221


    961,74200


    1387,62679


    ,20


    1381,73708


    1150,43739


    1608,52696


    ,25


    1586,29202


    1340,43221


    1827,40833


    ,30


    1795,67203


    1536,35222


    2050,97344


    ,35


    2014,28728


    1741,83765


    2284,49983


    ,40


    2246,29254


    1960,31730


    2533,03836


    ,45


    2496,16365


    2195,45599


    2802,13038


    ,50


    2769,19498


    2451,53866


    3098,44683


    ,55


    3072,09057


    2733,92871


    3430,56245


    , 60


    3413,82108


    3049,73874


    3810,08632


    ,65


    3807,02441


    3408,93562


    4253,51516


    , 70


    4270,51303


    3826,32195


    4785,56534


    ,75


    4834,19240


    4325,40532


    5445,75782


    ,80


    5549,85527


    4946,81830


    6303,01441


    ,85


    6518,83063


    5769, 66817


    7493,47901


    , 90


    7981,87380


    6980,17468


    9345,15098


    , 91


    8381,92608


    7305,70121


    9861,25890


    ,92


    8839,28528


    7675,37386


    10455, 92397


    , 93


    9371,03216


    8102,08907


    11153,16983


    ,94


    10002,81198


    8605,11895


    11989,28434


    ,95


    10775,51263


    9215,02568


    13022,52271


    , 96


    11759, 93430


    9984,40147


    14354,56418


    , 97


    13094,24400


    11015,11467


    16185,74513


    ,98


    15105,23259


    12545,80989


    18995,72850


    , 99


    18920,00171


    15388,14261


    24468,76250


    Для того, чтобы переманить на свою сторону половину группы граждан чужой страны, недовольных своим финансовым положением (Prob = 0,5), начальник секретной службы должен предложить каждому по 2769 долларов, причём с 95%-ой вероятностью эта сумма колеблется от 2452 до 3098 долларов. Для группы довольных финансовым положением (для которой распечатка данных здесь не приведена) придётся заплатить больше: 3852 доллара, с 95%-ым доверительным интервалом эта сумма колеблется от 3437 до 4296 долларов.


    Отношение этих двух значений медиан составит:


    2769/3852= 0,719 


    Это соотношение отображается в небольшой статистической сводке:


    Estimates of Relative Median Potency


    95%


    Confidence


    Limits


    GRUPPE 1 VS. 2


    Estimate ,7190


    Lower ,60280


    Upper ,84419


    Если Вы в диалоговом окне выберите не пробит, а логит-модель, то отношение частоты положительных откликов к общему количеству опрашиваемых р заменяется выражением


    40.gif

    Изображение: 

    41.gif

    Изображение: 

    42.gif

    Изображение: 

    16.8 Приближение с помощью кривых

    16.8 Приближение с помощью кривых


    При помощи этого пункта меню можно строить графики реального течения наблюдаемых процессов и приближать их при помощи аппроксимационных кривых. Для этого в ваше распоряжение предоставляется, в общей сложности, одиннадцать различных типов кривых. В большинстве случаев речь здесь будет идти о временных рядах.


    В качестве примера рассмотрим изменение зарплаты в Федеративной республике Германии с 1950 года по 1988, описываемое так называемым индексом действительной зарплаты. Его можно получить при помощи соотнесения текущего годового уровня зарплаты к уровню к 1980 году, для которого значение индекса принимается равным 100.


    Год


    Индекс действительной зарплаты


    1950


    28,6


    1960


    46,9


    1965


    63,0


    1970


    80,4


    1975


    87,9


    1980


    100,0


    1981


    98,2


    1982


    96,5


    1983


    96,0


    1984


    96,9


    1985


    98,0


    1986


    101,2


    1987


    104,5


    1988


    107,6


    Эти данные находятся в файле lohasav. В файле также находится и ещё одна, третья, переменная, которая отражает разность между текущим значением года и 1949 годом. Эта переменная принимает значения от 1 до 39 и указывает на количество лет, прошедших с 1949 года.

    •  Откройте файл lohn.sav.

    •  Выберите в меню Analyze (Анализ) Regression (Регрессия) Curve Estimation...(Подгонка кривых)


    Рис. 16.24: Диалоговое окно Curve Estimation (Подгонка кривых)


    Откроется диалоговое окно Curve Estimation (Подгонка кривых), в котором можно выбрать одну из одиннадцати различных моделей.


    Предлагаемым моделям соответствуют следующие формулы:

    Молель  Формула

    Линейная


     


    у= b0+ b1хX


    Логарифмическая


    у= b0+ b1х ln(х)


    Обратная



    Квадратичная


    у= b0+ b1хX + b2хX2


    Кубическая


    у= b0+ b1хХ + b2хX2 + b3хX3


    Степенная


    y= b0хXb1


    Показательная (комбинированная)


    y= b0 * b1


    S


    у= е^(b0+b1xX)


    Логистическая



    Рост


    у= е^(b0+b1xX)


    Экспоненциальная


    y=b0 х е^(b1xt)


    Для логистической модели необходимо предварительно задать параметр и, который задается непосредственно в диалоговом окне Curve Estimation (Подгонка кривых) в качестве верхнего предела. Задачей программы является определение коэффициентов b0, b1, b2 и b3.


    В поле для меток наблюдений (Case labels) можете указать некоторую переменную для описания данного наблюдения, которая затем будет появляться в режиме выбора точек (см. гл. 22.8.1) на построенном графике (см. рис. 16.25).

    •  Перенесите переменную lohn в поле для зависимых переменных, а переменную anz в поле для независимых переменных.

    •  Произведём оценку при помощи квадратичной функции; деактивируйте линейную модель и отметьте вместо неё квадратичную модель.

    Активирование опции Time (Время) имеет смысл только тогда, когда анализируемые переменные представлены в виде временных рядов с одинаковыми интервалами.

    •  Затем щёлкните на кнопке Save (Сохранение) и в появившемся диалоговом окне выберите опцию, с помощью которой прогнозируемые значения переменной будут сохранены в исходном файле данных.

    •  Вернувшись в первое диалоговое окно, начните расчёт нажатием ОК.

    Вывод результатов производится в старой табличной форме. Самыми важными показателями являются:

     Independent: ANZ 
     Dependent Mth Rsq d.f. F Sigf b0 b1 b2  
     LOHN QUA ,979 11 251,10 ,000 22,5918 3,0615 -,0242 

    Эта таблица содержит значения коэффициентов а, b1, и b2. К данным исходного файла была добавлена переменная fit_1, которая содержит прогнозируемые значения, найденные на основе рассчитанных коэффициентов. Далее в окне просмотра появляется график, на котором отображаются кривые, соответствующие изменению наблюдаемых и спрогнозированных значений.


    Приближение с помощью выбранной кривой, как кажется, удалось довольно не плохо. В противном случае можно было бы применить и другие модели, для использования которых, конечно же, не помешал бы некоторый опыт в области подобных криволинейных приближений.



    Рис 16.25: Наблюдаемая и оценочная кривая

    43.gif

    Изображение: 

    45.gif

    Изображение: 

    46.gif

    Изображение: 

    16.9 Взвешенное оценивание (оценка с весами)

    16.9 Взвешенное оценивание (оценка с весами)


    В линейном регрессионном анализе, рассмотренном до настоящего времени, все наблюдения входят в модель равнозначно. При этом, исходной предпосылкой является тот факт, что все наблюдения должны иметь одинаковую дисперсию.


    Если это условие не выполняется и дисперсия увеличивается с ростом значения независимой переменной, то отдельные точки можно взвесить так, чтобы наблюдения с большой дисперсией имели меньшее влияние.


    В качестве примера рассмотрим тест, проверяющий знания детей в области географии. Дети в возрасте от 3 до 14 лет должны были в течение двух минут назвать как можно больше городов Германии. Результаты теста сведены в нижеследующей таблице, причём количество детей в каждой возрастной группе варьируется от двух до пяти:


    Возраст


    Количество названных городов


    3


    2, 1, 0, 4


    4


    4, 2, 6


    5


    3, 8, 4, 7


    6


    3, 8, 9, 5


    7


    6, 10


    8


    7, 14, 10


    9


    9, 16, 10


    10


    9, 16, 15, 9


    11


    18, 12


    12


    22, 11, 14, 16


    13


    14, 21


    14


    20, 15, 23, 14, 26


    Эти данные для сорока детей в общей сложности хранятся в переменных alter (возраст) и staedte (города), которые содержатся в файле snamen.sav.

    •  Откройте файл snamen.sav.

    •  Выберите в меню Graphs (Графики) Scatterplot... (Диаграмма рассеяния)


    Рис. 16.26: Диаграмма рассеяния

    •  Отметьте и постройте простую диаграмму рассеяния с переменной alter по оси абсцисс и переменной staedte пo оси ординат.

    Вы увидите, что с ростом возраста растёт не только количество названных городов, но и рассеяние, то есть дисперсия, становится больше.

    •  В соответствии с описанием из главы 16.1 проведите линейный регрессионный анализ, причём переменной staedte присвойте статус зависимой переменной, а переменной alter — независимой переменной.

    •  Вы получите следующие результаты:

    Model Summary (Сводная таблица по модели)


    Model (Модель)


    R


    R Square (R-квадрат)


    Adjusted R Square (Смещенный R-квадрат)


    Std. Error of the Estimate (Стандартная ошибка оценки)


    1


     


    ,879а 


    ,772 


    ,766


    3,1623 


    a. Predictors: (Conslant), Alter (Bлияющие переменные: (Константа), возраст)


    Coefficients (Коэффициенты) а


    Model (Модель)


    Unstandardized Coefficients (He стандарти-зированные коэф-фициенты)


    Standardized Coefficients (Стандарти-зированные коэф-фициенты)


    Т 


    Sig. (Значи-мость)


    В


    Std. Error (Станда-ртная ошибка)


    /3 (Beta)


    1


    a. Dep


    (Constant) (Koнстанта)


    -2,722


    1,273



    -2,138


    ,039


    Alter (Возраст) endent Variable


    1,569 (Зависим


    ,138 ая перемен-ная)


    ,879


    11,357


    ,000


    Коэффициент корреляции равен 0,879, а мера определённости 0,772.


    В данном примере мы имеем дело с группами случаев, разделёнными по годам возраста, для которых независимая переменная имеет всегда одно и то же значение. Исходя из значений зависимой переменной сопоставленных каждому случаю, можно определить дисперсию; обратное значение этой дисперсии применяется обычно в качестве весового фактора для соответствующего случая.


    Если подобной группировки данных нет, то пытаются выявить такую связь между дисперсией и переменной, чтобы степень дисперсии была пропорциональна значению данной переменной. При поиске так называемых весовых переменных речь идет о независимой переменной или, если их много, — об одной из независимых переменных. В приведенном примере такой переменной, очевидно, является независимая переменная alter, по которой и можно проследить изменение дисперсии.


    Целью анализа сначала является определение наилучшей возможной степени р. а затем подсчёт веса для каждого случая, причём вес для значения переменной х определяется как


    1/хp

    •  Выберите в меню Analyze (Анализ) Regression.. .(Регрессия) Weight Estimation... (Взвешенное оценивание)

    Откроется диалоговое окно Weight Estimation (Взвешенное оценивание).



    Рис. 16.27: Диалоговое окно Weight Estimation (Весовая цепка)

    •  Перенесите переменную staedte в поле зависимых переменных, а переменную alter в поля для независимых и для весовых переменных. Согласно с установками по умолчанию оптимальная степень вычисляется в пределе от —2 до 2 с шагом 0,5; измените шаг на 0,2.

    •  Щёлкните на кнопке опций и в появившемся диалоговом окне активируйте опцию Save best weight as new variable (Сохранить лучший вес, как новую переменную).

    Результаты расчёта, вывод которых производится в старой табличной форме, выглядят следующим образом:


    Source variable


    . . ALTER


    Dependent variable. . STAEDTE


    Log- likelihood


    Function =-116,950816


    POWERvalue= -2,000


    log- likelihood


    Function =-115,170919


    POWERvalue=-1,800


    Log- likelihood


    Function =-113,434617


    POWERvalue=-1,600


    Log- likelihood


    Function =-111,746484


    POWERvalue=-1,400


    Log- likelihood


    Function =-110,111706


    POWERvalue=-1,200


    Log- likelihood


    Function =-108,536154


    POWERvalue=-1,000


    Log- likelihood


    Function =-107,026465


    POWERvalue=-,800


    Log- likelihood


    Function =-105,590111


    POWERvalue=-,600


    Log- likelihood


    Function =-104,235463


    POWERvalue=-,400


    Log- likelihood


    Function =-102,971835


    POWERvalue=-,200


    Log- likelihood


    Function =-101,809499


    POWERvalue=,000


    Log- likelihood


    Function =-100,759655


    POWERvalue=,200


    Log- likelihood


    Function =-99,834344


    POWERvalue=,400


    Log- likelihood


    Function =-99,046284


    POWERvalue=,600


    Log- likelihood


    Function =-98,408623


    POWERvalue=,800


    Log- likelihood


    Function =-97,934594


    POWERvalue=1,000


    Log- likelihood


    Function =-97,637078


    POWERvalue=1,200


    Log- likelihood


    Function =-97,528092


    POWERvalue=1,400


    Log- likelihood


    Function =-97,618231


    POWERvalue=1,600


    Log- likelihood


    Function =-97,916114


    POWERvalue=1,800


    Log- likelihood


    Function =-98,427890


    POWERvalue=2,000


    The Value ofPOWER MaximizingLog-likelihood Function =1,400


    Source variable 


    ALTER


    POWERvalue=:1,400


    Dependent variable. . STAEDTE


    Multiple R, 90081


    R Square,81146


    Adjusted R Square ,80650


    Standard Error ,68669



    Analysis of Variance :





    DF Sum of Squares


    Mean Square



    Regression Residuals


    1 77,121477 38 17,918483


    77,121477 ,471539



    P = 163,55269


    Signif F = ,0000




    -------


    - — — Variables in the Equation —


    - - - - -


    - - -


    Variable


    В SE В Beta


    Т


    Sig Т


    ALTER (Constant)


    1,569996 ,122764 ,900813 -2,728584 ,840793


    12,789 -3,245


    ,0000 ,0025


    Log-likelihood


    Function = -97,528092




    The following


    new variables are being created:




    Name


    Label




    WGT_1


    Weight for STAEDTE from WLS, MOD_


    1 ALTER**


    -1,400


    Оптимальная степень оценивается при помощи логарифма функции правдоподобия; в данном случае максимальное значение получается при значении степени равном 1,4. Это значение используется для определения веса для каждого случая. К примеру, для трёхлетнего ребёнка вес равен


    1/(31,4)=0,2148 


    Весовые показатели были добавлены в исходный файл под переменной с именем wgt_1. Затем повторно был выполнен расчёт регрессии. Корреляционный коэффициент при этом возрос до 0,90081, а мера определённости до 0,81146. Хотя эти изменения, а также изменение рассчитанных коэффициентов регрессии и констант незначительны, зато стала намного меньше соответствующая им стандартная ошибка.

    47.gif

    Изображение: 

    48.gif

    Изображение: 

    Глава 17. Дисперсионный анализ

    Глава 17. Дисперсионный анализ

    1. Дисперсионный анализ

    Дисперсионный анализ


    С помощью дисперсионного анализа исследуют влияние одной или нескольких независимых переменных на одну зависимую переменную (одномерный анализ) или на несколько зависимых переменных (многомерный анализ). В обычном случае независимые переменные принимают только дискретные значения (и относятся к номинальной или порядковой шкале); в этой ситуации также говорят о факторном анализе. Если же независимые переменные принадлежат к интервальной шкале или к шкале отношений, то их называют ковариациями, а соответствующий анализ — ковариационным.


    В рамках дисперсионного анализа SPSS предлагает множество возможностей, в которых, однако, не всегда легко разобраться, в особенности для новичка. Даже учебники по SPSS напрямую не способствуют облегчению освоения имеющихся возможностей. Во-первых, нужно отметить, что в принципе дисперсионный анализ может выполняться в рамках двух подходов:

    •  при помощи традиционного "классического" метода по Фишеру (Fisher) и

    •  при помощи нового метода "обобщенной линейной модели".

    Первый подход сводится к разложению по методу наименьших квадратов (МНК); в однофакторном случае совокупная дисперсия всех наблюдаемых значений раскладывается на дисперсию внутри отдельных групп и дисперсию между группами. В основе обобщенной линейной модели напротив, лежит, корреляционный или регрессионный анализ.


    До 6 версии SPSS обобщенная линейная модель была реализована на основе процедуры MANOVA, управление которой могло происходить как через диалоговое окно, так и при помощи командного синтаксиса. В 7-ой версии эта процедура была заменена на процедуру GLM; при этом процедура MANOVA осталась, как и прежде, доступной через командный синтаксис.


    Главным отличием между GLM и MANOVA является то, что в MANOVA используется, так называемая, "full rank linear model" (линейная модель полного ранга), а в GLM, так называемая, "поп full rank linear model" (линейная модель неполного ранга). Более подробную информацию по этому вопросу можно найти в специальной литературе, к примеру, в книге Р. Е. Кирка (R. E. Kirk) (см. список литературы). В GLM предлагаются ещё и дополнительные расширения, самым важным из которых, конечно же, является тест для сравнения средних значений отдельных слоев (подпопуляций), который выполняется после проведения дисперсионного анализа. Слои или подпопуляций определяются различными уровнями величины фактора, положенного в основу классификации. В то же время, MANOVA включает ряд дополнительных видов анализа (регрессионный анализ, дискриминантный анализ, канонический анализ, анализ главных компонентов и т.д.), которых нет в GLM.


    В дальнейшем мы ограничимся рассмотрением только наиболее часто употребительных видов дисперсионного анализа. При этом будет проведено различие между, одномерными и многомерным дисперсионным анализом (в зависимости от количества зависимых переменных), а также выделен случай, когда факторы (независимые переменные) включают повторные измерения.


    После открытия соответствующего файла (к примеру, varana.sav), дисперсионный анализ может быть вызван посредством выбора меню Analyze (Анализ) General Linear Model (Общая линейная модель)


    Откроется вспомогательное меню (см. рис. 17.1)


    Все без исключения возможности, предлагаемые в диалоговом окне, предполагают проведение расчётов на основе общей линейной модели. Если перечислять по очереди, то с помощью данного меню можно провести одномерный дисперсионный анализ (Univariate...), многомерный дисперсионный анализ (Multivariate...), многомерный дисперсионный анализ с учетом повторных измерений (Repeated Measures...). И, наконец, в данном меню имеется один пункт для расчёта компонентов дисперсии (Variance Components...) (см. гл. 17.4).


    Возможно также проведение дисперсионного анализа по традиционному "классическому" методу Фишера. Однако такой анализ выполним только за счёт использования программного синтаксиса (процедура ANOVA). Этому методу посвящен отдельный раздел (см. гл. 17.1.2).



    Рис. 17.1: Вспомогательное меню General Linear Model (Общая линейная модель)


    В рамках данной книги нет возможности полностью рассмотреть все, что предлагается пользователю SPSS для проведения дисперсионного анализа, поэтому с помо-:лью нескольких примеров мы попытаемся сделать общий обзор и изложить вводные замечания для основных ситуаций. К основным ситуациям относятся:

    •  одномерный анализ,

    •  ковариационный анализ и

    •  многомерный анализ.

    Для одномерного анализа будут рассмотрены варианты без повторных измерений и с повторными измерениями. Последний раздел главы посвящен расчёту компонентов дисперсии.

    1.gif

    Изображение: 

    17.1 Одномерный дисперсионный анализ

    17.1 Одномерный дисперсионный анализ


    Однофакторный дисперсионный анализ (без и с повторными измерениями) уже рассматривался в главе 13, поэтому мы сразу обратимся к многофакторному дисперсионному анализу.


    Так как дисперсионный анализ очень часто находит применение в области психологии, то первым примером и будет пример из этой области. В четыре различных момента времени 27 испытуемых были подвергнуты тесту на внимательность. Причём для каждого испытуемого регистрировался пол и возраст. Собранные значения представлены в следующей сводной таблице.


    С


    А


    M1


    М2


    М3


    М4


    С


    А


    М1


    М2


    МЗ


    М4


    1


    1


    16


    18


    21


    20


    1


    3


    8


    11


    12


    12


    1


    1


    17


    19


    18


    22


    2


    1


    17


    18


    20


    21


    1


    1


    15


    15


    17


    18


    2


    1


    15


    15


    18


    17


    1


    1


    16


    17


    18


    19


    2


    1


    16


    17


    17


    18


    1


    2


    15


    16


    20


    18


    2


    2


    15


    18


    19


    21


    1


    2


    16


    19


    18


    20


    2


    2


    17


    20


    21


    22


    1


    2


    13


    14


    16


    17


    2


    2


    14


    16


    17


    20


    1


    2


    14


    14


    15


    17


    2


    2


    14


    14


    16


    18


    1


    2


    15


    16


    16


    18


    2


    3


    12


    11


    14


    15


    1


    3


    13


    14


    15


    16


    2


    3


    10


    12


    13


    14


    1


    3


    14


    17


    16


    19


    2


    2


    10


    10


    11


    13


    1


    3


    13


    13


    15


    16


    2


    3


    9


    10


    12


    11


    1


    3


    10


    11


    11


    11


    2


    3


    10


    9


    12


    13


    1


    3


    9


    10


    10


    13


    Полу (G) соответствуют коды: 1 для мужского и 2 для женского; возраст (А) представлен тремя возрастными группами. Испытуемым в возрасте до 30 лет соответствует код 1, испытуемым в возрасте от 31 до 50 лет — код 2 и испытуемым в возрасте свыше 50 лет — код 3. Четыре показателя внимательности соответствуют переменным М1-М4.


    При помощи этого примера мы рассмотрим, во-первых, одномерный дисперсионный анализ без повторных измерений и, во-вторых, одномерный дисперсионный анализ с повторными измерениями. Одномерный дисперсионный анализ без повторных измерений может быть проведен как при помощи общей линейной модели, так и при помощи классического метода Фишера.

    17.1.1 Одномерный дисперсионный анализ (общий многофакторный)

    17.1.1 Одномерный дисперсионный анализ (общий многофакторный)


    Исследуем влияние пола и возраста на результирующую величину показателя внимательности (M1). Здесь мы имеем дело с двумя факторами, из которых один (пол) разделён на две категории, а второй (возраст) на три. Комбинации этих двух факторов образуют в общей сложности шесть групп испытуемых (называемых также ячейками). Число наблюдений, относящихся к отдельным ячейкам является не одинаковым, а наоборот различным.

    •  Откройте файл varana.sav.

    •  Выберите в меню Analyze (Анализ) General Linear Model (Общая линейная модель) Univariate... (Одномерная) Откроется диалоговое окно Univariate (Одномерная) (см. рис. 17.2).

    •  Перенесите переменную ml в поле зависимых переменных, а переменные geschl (пол) и alter (возраст) в поле фиксированных факторов.

    Понятия "фиксированные" и "случайные" факторы требуют дополнительного объяснения. Фиксированными факторами или факторами с фиксированными эффектами называются такие факторы, которые охватывают все возможные классификационные слои одной независимой переменной, к примеру, пол мужской — женский или образование начальное — среднее — высшее. Однако, если слои (подпопуляции) фактора выбирается случайным образом из бесконечного множества возможных подпопуляции факторов, называемого генеральной популяцией, то говорят о факторах со случайными эффектами. В этом случае является уместным компонентный анализ, то есть расчёт так называемых компонентов дисперсии (см. гл. 17.4).

    •  Щёлкните по кнопке Model... (Модель)

    Откроется диалоговое окно Univariate: Model (Одномерная: Модель) (см. рис. 17.3).



    Рис. 17.2: Диалоговое окно Univariate (Одномерная)



    Рис. 17.3: Диалоговое окно Univariate: Model (Одномерная: Модель)


    Модель дисперсионного анализа — это математическое соотношение, в котором каждая переменная представлена в виде суммы среднего значения и ошибки. Что касается выбора конкретной формы модели, то по умолчанию установлена полнофакторная модель Full factorial). В этой модели среднее значение каждого наблюдения представлено в виде генерального среднего и суммы вклада всех главных "эффектов" (факторов влияния), помимо которых производится также расчёт всех взаимодействий между факторами. Альтернативой является возможность выбора отдельных взаимодействий факторов влияния, которая осуществляется посредством активирования опции Custom (Пользовательский режим). Таким же образом должны быть отобраны и взаимодействия с ковариациями.


    Для формирования сумм квадратов для МНК существует четыре различных подхода (четыре типа, обозначенных с помощью римских чисел I, II, III и IV), по умолчанию установлен тип III.

    •  Оставьте в этом окне все установки по умолчанию и покиньте диалоговое окно нажатием кнопки Continue (Далее).

    •  Щёлкните на выключателе Options... (Опции)

    Откроется диалоговое окно Univariate: Options (Одномерная: Опции) (см. рис. 17.4)

    •  Перенесите OVERALL (В целом) и обе переменные geschl (пол) и alter (возраст) в поле Display means for (Показать средние значения для); в этом случае в качестве результатов будут выведены средние значения и стандартная ошибка для совокупной выборки (OVERALL) и для всех слоев по обоим факторам. Средние значения для комбинаций взаимодействия на этом этапе рассчитываются только для неполнофакторных моделей.

    •  Затем активируйте Descriptive Statistics (Дескриптивные статистики); благодаря выбору этой опции выводятся среднее значение, стандартные отклонения и количество наблюдений во всех ячейках.

    •  Активируйте затем опцию Homogeneity tests (Тесты на однородность). Таким образом активируется проверка однородности дисперсии. Покиньте диалоговое окно нажатием Continue (Далее).

    •  При помощи выключателя Plots... (Диаграммы) откройте диалоговое окно Univariate: Profile Plots (Одномерная: Профильные диаграммы) (см. рис. 17.5).


    Рис. 17.4: Диалоговое окно Univariate: Options (Одномерная: Опции)



    Рис. 17.5: Диалоговое окно Univariate: Profile Plots (Одномерная: Профильные диаграммы)


    В случае профильных диаграмм речь идёт о графическом представлении средних значений слоев выбранных факторов в виде линейчатых диаграмм. При этом слои второго фактора соответственно могут быть использованы для отображения второй линии. Таким образом можно наглядно изобразить взаимодействия между двумя факторами.

    •  Поместите переменную alter (возраст) в поле Horizontal Axis (Горизонтальная ось), а переменную geschl (пол) в поле Separate Lines (Отдельные линии). В принципе можно указывать дополнительную переменную и в поле Separate Plots (Отдельные графики); тогда для отдельных слоев этой переменной будут построены отдельные диаграммы.

    •  Щёлкните на выключателе Add (Добавить) и покиньте диалоговое окно нажатием Continue (Далее).

    •  В заключение щёлкните на выключателе Post Hoc... (Дополнительный тест). Откроется диалоговое окно Univariate: Post Hoc Multiple Comparisons for Observed Means (Одномерная: Дополнительно — множественные сравнения для наблюдаемых средних значений).

    У Вас появится возможность выбрать один или несколько из восемнадцати тестов, необходимых для проведения дополнительного сравнения отдельных слоев выбранных факторов. Конечно же, это имеет смысл только для факторов с более чем двумя слоями.

    •  Поместите переменную alter (возраст) в поле Post Hoc Tests for (Дополнительные тесты для).

    •  Активируйте тест Шеффе (Scheffe). Теперь диалоговое окно выглядит так, как изображено на рисунке 17.6.

    •  Покиньте диалоговое окно нажатием Continue (Далее).

    •  Далее Вы имеете возможность определить контрасты и для каждого наблюдения сохранить некоторые статистические характеристики, как новые переменные. Мы от этого откажемся. Начните расчёт нажатием ОК.

    В окне сначала появляется сводная таблица, озаглавленная "Межсубъектные факторы". Затем следует вывод средних значений, стандартных отклонений и количества наблюдений для отдельных ячеек, а также результаты теста на однородность.



    Рис. 17.6: Диалоговое окно Univariate: Post Hoc Multiple Comparisons for Observed Means (Одномерная: Дополнительно — многократные сравнения для наблюдаемых средних значений)


    Between-Subjects Factors (Межсубъектные факторы)


    Value Label (Метка значения)


    N


    GESCHL (Пол)


    1


    maennlich (Мужской)


    15


    2


    weiblich (Женский)


    12


    ALTER (Возраст)


    1


    bis 30 Jahre (До 30 лет)


    7


    2


    31 - 50 Jahre (31 - 50 лет)


    9


    3


    ueber 50 Jahre (Свыше 50 лет)


    11


    Descriptive Statistics (Дескриптивные статистики)


    Dependent Variable: М1 (Зависимая переменная: М1)


    GESCHL ' (Пол)


    ALTER (Возраст)


    Mean (Среднее значение)


    Std. Deviation (Стандартное отклонение)


    N


    maennlich (Мужской)


    bis 30 Jahre (До 30 лет)


    16,00


    ,82


    4


    31 - 50 Jahre (31 - 50 лет)


    14,60


    1,14


    5


    ueber 50 Jahre (Свыше 50 лет)


    11,7


    2,48


    6


    Total (Сумма)


    13,60


    2,69


    15


    weiblich (Женский)


    bis 30 Jahre (До 30 лет)


    16,00


    1,00


    3


    31 - 50 Jahre (31 - 50 лет)


    15,00


    1,41


    4


    ueber 50 Jahre (Свыше 50 лет)


    10,20


    1,10


    5


    Total (Сумма)


    13,25


    2,93


    12


    Total (Сумма)


    bis 30 Jahre (До 30 лет)


    16,00


    ,82


    7


    31 - 50 Jahre (31 - 50 лет)


    14,78


    1,20


    9


    ueber 50 Jahre (Свыше 50 лет)


    10,73


    1,95


    11


    Levene's Test of Equality of Error Variances a (Тест Левене на равенство дисперсии ошибок)


    Dependent Variable: М1 (Зависимая переменная: М1)


    F


    df1


    df2


    Sig(Значимость)


    4,177


    5


    21


    ,009


    Tests the null hypothesis that the error variance of the dependent variable is equal across groups (Проверяет нулевую гипотезу о том, что дисперсия ошибок зависимых переменных одинакова для всех групп).


    a. Design: Intercept+GESCHL+ALTER+GESCHL * ALTER (Компоновка: Отрезок + Пол + Возраст + Пол*Возраст)


    К сожалению, тест Левене на равенство дисперсий показывает, значимый результат со значением вероятности ошибки р = 0,009. Это означает, что отсутствует однородность дисперсий между группами, которая наряду с нормальным распределением значений выборки, является основной предпосылкой для возможности проведения дисперсионного анализа.


    Традиционная схема дисперсионного анализа (еще раз отметим: проводимого на основе общей линейной модели) показывает незначимое влияние пола (р = 0,761), очень значимое влияние возраста (р = 0,001) и незначимое взаимодействие между обоими переменными (р = 0,611).


    Tests of Between-Subjects Effects (Тест межсубъектных эффектов)


    Dependent Variable: M1 (Зависимая переменная: М1)


    Source (Источник)


    Type III Sum of Squares (Сумма квадратов III типа)


    Df


    Mean Square (Среднее значение квадрата)


    F


    Sig. (Значи-мость)


    Corrected Model (Подпра- вленная модель)


    145,833a


    5


    29,167


    12,049


    ,000


    Intercept (Отрезок)


    4916,763


    1


    4916,763


    2031,187


    ,000


    GESCHLJOonl


    ,229


    1


    ,229


    ,095


    ,761


    ALTER (Возраст)


    144,273


    2


    72,137


    29,801


    ,000


    GESCHL * ALTER (Пол'Возраст)


    2,446


    2


    1,223


    ,505


    ,611


    Error (Ошибка)


    50,833


    21


    2,421


    Total (Сумма)


    5077,000


    27


    Corrected Total


    196,667


    26


    a R Squared = ,742 (Adjusted R Squared = ,680) (R-квадрат = 0,742 (смещённый R-квадрат = 0,680))


    В случае отсутствия однородности дисперсии границу значимости рекомендуется устанавливать равной не р = 0,05, а р =0,01. Значимое влияние возраста проявляется в любом случае.


    Если вы сравните эти результаты с результатами, полученными при методе Фишера (Fisher) (см. гл. 17.1.2), то заметите незначительное отклонение значения р для фактора влияния пол (geschlecht). Далее следует вывод дескриптивных статистик для совокупной выборки и для отдельных слоев факторов.


    1. Grand Mean (Общее среднее значение)

    Dependent Variable: М1 (Зависимая переменная: М1)

    Mean (Среднее значение)


    Std. Error (Стандартная ошибка)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    13,828


    ,307


    13,190


    14,466


    2. GESCHL (Пол)

    Dependent Variable: М1 (Зависимая переменная: М1)

    GESCHL (Пол)


    Mean (Среднее значение)


    Std. Error (Стандартная ошибка)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    maennlich (Мужской)


    13,922


    ,407


    13,075


    14,769


    weiblich (Женский)


    13,733


    ,459


    12,779


    14,688


    3. ALTER (Возраст)

    Dependent Variable: М1 (Зависимая переменная: М1)

    ALTER (Возраст)


    Mean (Среднее значение)


    Std. Error (Стандартная ошибка)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    bis 30 Jahre (До 30 лет}


    16,000


    ,594


    14,764


    17,236


    31 - 50 Jahre (31 - 50 лет)


    14,800


    ,522


    13,715


    15,885


    ueber 50 Jahre (Свыше 50 лет)


    10,683


    ,471


    9,704


    11,663


    Затем следует вывод результатов теста Шеффе по сравнению отдельных возрастных групп. На основании частично дублированных результатов, можно сделать вывод, что самая старшая возрастная группа очень значимо отличается от двух других:


    Multiple Comparisons (Множественные сравнения)

    Dependent Variable: M1 (Зависимая переменная: М1) Scheffe (Шеффе)

    (I) ALTER (Возраст)


    (J) ALTER (Возраст)


    Mean Difference (I-J) (Средняя разность)


    Std. Error (Стандар -тная ошибка)


    Sig. (Значи-мость)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    bis 30 Jahre (До 30 лет)


    31 -50 Jahre (31 -50 лет)


    1,22


    ,784


    ,317


    -.84


    3,29


    ueber 50 Jahre (Свыше 50 лет)


    5,27*


    ,752


    ,000


    3,29


    7,25


    31 -50 Jahre (31 -50 лет)


    bis 30 Jahre (До 30 лет)


    -1,22


    ,784


    ,317


    -3,29


    ,84


    ueber 50 Jahre (Свыше 50 лет)


    4,05*


    ,699


    ,000


    2,21


    5,89


    ueber 50 Jahre (Свыше 50 лет)


    bis 30 Jahre (До 30 лет)


    -5,27*


    ,752


    ,000


    -7,25


    -3,29


    31 -50 Jahre (31 -50 лет)


    -4,05*


    ,699


    ,000


    -5,89


    -2,21


    Based on observed means (Основываясь на наблюдаемых средних значениях). * The mean difference is significant at the ,05 level (Усреднённая разность является значимой на уровне 0,05).


    Этот факт подтверждается ещё раз при выводе результатов для рассматриваемых "однородных подгрупп" в другой форме.


    М1

    Scheffe аbс (Шеффе)

    ALTER


    N


    Subset (Подгруппа)


    1


    2


    ueber 50 Jahre (Свыше 50 лет)


    11


    10,73


    31 - 50 Jahre (31 - 50 лет)


    9


    14,78


    bis 30 Jahre (До 30 лет)


    7


    16,00


    Sig. (Значимость)


    1,000


    ,283


    Means for groups in homogeneous subsets are displayed (Выводятся средние значения для групп в однородных подгруппах).


    Based on Type III Sum of Squares (На основе суммы квадратов III типа).


    The error term is Mean Square(Error) = 2,421 (Слагаемое ошибки равно среднему значению квадрата (ошибки) = 2,421).


    a. Uses Harmonic Mean Sample Size = 8,699 (Используя среднегармонический размер выборок = 8,699).


    b. The group sizes are unequal (Размеры групп не одинаковы). The harmonic mean of the group sizes is used (Используется среднее гармоническое размера групп). Туре I error levels are not guaranteed (Уровень ошибки для I типа не гарантируется).


    с. Alpha = ,05


    Завершает вывод результатов профильная диаграмма, в которой представлена линейчатая диаграмма возраста отдельно для каждого пола:


    Вид графиков для обоих полов почти одинаков, что свидетельствует о незначимом взаимодействии между двумя факторами. Кроме того, наглядно проявляется незначимость различия между двумя полами.


    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    17.1.2 Одномерный дисперсионный анализ по методу Фишера (Fisher)

    17.1.2 Одномерный дисперсионный анализ по методу Фишера (Fisher)


    Проанализируем теперь пример, приведенный в разделе 17.1.1, при помощи традиционного "классического" метода Фишера. Так как, начиная с 8.0 версии программы, этот вид анализа уже не выводится в диалоговое окно, то нам придётся воспользоваться программным синтаксисом (процедура AN OVA).

    •  Откройте файл varana.sav.

    •  Выберите в меню File (Файл) New (Новый) Syntax (Синтаксис) Наберите следующую команду в поле редактора синтаксиса:

     ANOVA VARIABLES=ml  BY  geschl  (1,2)  alter  (1,3) 
        /STATISTICS  MCA  MEAN  
      /METHOD   EXPERIM. 

    SPSS предлагает три метода для разложения квадратов отклонения в МНК для случая, когда объемы отдельных ячеек (количества наблюдений, относящихся к данной ячейке) не равны. При такой "несбалансированной компоновке", которая часто появляется при "непланируемых" (не экспериментальных) исследованиях, без дальнейшей обработки нельзя к общей сумме прибавлять суммы квадратов отдельных эффектов. Вы можете выбрать один из следующих методов обработки:

    •  UNIQUE: Вклад каждого из факторов влияния рассматривается одновременно; каждый из них рассчитывается при условии сохранения постоянного значения всех остальных. Так как в этом случае можно сделать неявное предположение о возможном существовании причинной связи между факторами, то этот вариант следует выбирать тогда, когда не должно проводиться весовое сравнение значения отдельных факторов. Этот метод устанавливается по умолчанию.

    •  HIERARCHICAL: Очерёдность расчёта эффектов определяется очерёдностью выбранных факторов. Этот метод следует применять тогда, когда можно заранее предположить иерархическую упорядоченность факторов.

    •  EXPERIMENTAL: Эффекты обрабатываются в следующей последовательности: эффекты ковариаций, главные эффекты, взаимодействия в порядке возрастания. При расчёте одного эффекта производится вычисление всех предшествующих эффектов и эффектов, находящихся на том же уровне.

    При одинаковых объемах ячеек ("ортогональная компоновка") все три метода дают одинаковые результаты.


    При помощи вспомогательной команды STATISTICS можно организовать вывод следующих данных:

    •  Mean: Выводятся средние значения и количество наблюдений для совокупной популяции, отдельных слоев фактора и каждой ячейки. Удивительно, но если вы выбираете метод UNIQUE для разложения суммы квадратов в МНК, то эта опция становится недоступной.

    •  MCA (Множественный классификационный анализ): С помощью специальных коэффициентов (называемых т) (Eta) и Р (Beta)) отображается сила связи между отдельным фактором и зависимой переменной. Это является уместным, если не наблюдается ни каких значимых взаимодействий. Вывод результатов МСА недоступен при выборе метода UNIQUE.

    •  Запустите команду ANOVA на исполнение щелчком на знаке Run Current (Запустить синтаксис).

    После обычной сводной таблицы обрабатываемых наблюдений, сначала выводятся средние значения и частоты (соответствующие результаты вывода здесь не приводятся). Затем следует сводка дисперсионного анализа с суммами квадратов, степенями свободы, средними значениями сумм квадратов и т.д.:


    ANOVA a



    Experimental Method (Экспериментальный метод)


    Sum of Squares (Сумма квадра-тов)


    df (Степень свободы)


    Mean Square (Среднее значение квадрата)


    F


    Sig. (Значи-мость)


    М1


    Main Effects (Главные эффекты)


    (Combined) (Объеди-нённо)


    143,388


    3


    47,796


    19,745


    ,000


    GESCHL (Пол)


    ,458


    1


    ,458


    ,189


    ,668


    ALTER (Возраст)


    142,571


    2


    71,285


    29,449


    ,000


    2-Way Interacti-ons (2-сторонние взаимо-действия)


    GESCHL * ALTER (Пол' Возраст)


    2,446


    2


    1,223


    ,505


    ,611


    Model (Модель)


    145,833


    5


    29,167


    12,049


    ,000


    Residual (Остатки)


    50,883


    21


    2,421




    Total (Сумма)


    196,667


    26


    7,564




    а М1 by GESCHL, ALTER (М1/по полу, возрасту)


    Вероятность ошибки р, соответствующая тестовому значению F-критерия, выводится в правой колонке под заголовком "Sig." ("Значимость"). Ее величина свидетельствует о глобальной значимости для главных эффектов (р < 0,001). Данное значение основано только на факторе Alter (Возраст) (р < 0,001), но не на факторе Geschlecht (Пол) (р = 0,668). Взаимодействия в данном случае не наблюдаются (р = 0,611). Результаты очень близки к результатам расчёта при помощи общей линейной модели (см. гл. 17.1.1).


    Результаты МСА выглядят следующим образом:


    MCA a (Множественный классификационный анализ)



    N


    Predicted Mean (Прогнозируемое среднее значение)


    Deviation (Отклонение)


    Unadjusted (Несме-щенное)


    Adjusted for Factors (Смещенное по факторам)


    Unad-justed (Несме-щенное)


    Adjusted for Factors (Смещенное по факторам)


    М1


    GESCHL (Пол)


    maennlich (Мужской)


    15


    13,60


    13,56


    ,16


    ,12


    weiblich (Женский)


    12


    13,25


    13,30


    -,19


    -.15


    ALTER (Возраст)


    bis 30 Jahre (До 30 лет)


    7


    16,00


    16,00


    2,56


    2,55


    31 - 50 Jahre (31 -50 лет)


    9


    14,78


    14,78


    1,33


    1,33


    ueber 50 Jahre (Свыше 50 лет)


    11


    10,73


    10,73


    -2,72


    -2,71


    a Ml by GESCHL, ALTER (M1/no полу, возрасту)


     


    Factor Summary a (сводные данные для факторов)


    Eta (Эта)


    Beta (Бета)


    Adjusted for Factors (Смещено по факторам)


    М1 GESCHL (Пол)


    ,064


    ,048


    ALTER (Возраст)


    ,853


    ,852


    а М1 by GESCHL, ALTER (М1/по полу, возрасту)


    Model Goodness of Fit (Критерий согласия для модели)


    R


    R Squared (R-квадрат)


    М1 by GESCHL, ALTER (М1/по полу, возрасту)


    ,854


    ,729


    Оба коэффициента n (Eta) являются мерой силы связи (корреляции) между соответствующим фактором и зависимыми переменными, относящейся сюда же коэффициент (i (Beta) имеет частную природу и характеризует силу связи при отсутствии влияний со стороны других факторов. Значительное отличие коэффициентов Eta и Beta друг от друга (которое в данном случае не наблюдается) указывает на наличие взаимосвязи между факторами. И, наконец, величина "R Squared" ("R-квадрат") указывает на ту степень отклонения от совокупной дисперсии, которая может быть объяснена главными эффектами.

    17.1.3 Одномерный дисперсионный анализ с повторным измерением

    17.1.3 Одномерный дисперсионный анализ с повторным измерением


    Исследуем вопрос следующего характера: наблюдаются ли в течение четырёх моментов времени значимые изменения показаний теста на внимательность. При этом необходимо учесть влияние двух факторов: пола и возраста.


    В общем, в нашем распоряжении имеется три фактора: пол с двумя категориями, возраст с тремя категориями и время с четырьмя категориями. Это приводит к необходимости выполнения трёхфакторного дисперсионного анализа, в котором третий фактор (время) является фактором с повторным измерением. Этот фактор будет представлен не при помощи отдельных групп испытуемых, а при помощи значений переменных ml-m4.

    •  Откройте файл varana.sav.

    •  Выберите в меню Analyze (Анализ) General Linear Model (Общая линейная модель) Repeated Measures... (Повторные измерения)

    •  Как уже было изложено в главе 13.4, отроется диалоговое окно Repeated Measures Define Factors(s) (Повторные измерения: Определение фактора(ов)).

    •  Вместо установленного по умолчанию имени фактора factorl введите новое имя: zeit (время).

    •  В поле Number of Levels (Количество слоев) введите значение 4. Щёлкните на Add (Добавить), и, если больше цет никаких факторов с повторными измерениями, покиньте диалоговое окно посредством нажатия кнопки Define (Определить).

    Появится диалоговое окно Repeated Measures (Повторные измерения) (см. рис. 17.7).

    •  Здесь, в первую очередь, последовательно перенесите четыре переменные повторных измерений ml-m4 в поле для внутрисубъектных переменных (Within-Subjects Variables).

    •  Затем, переменные geschl (пол) и alter (возраст) перенесите в поле для межсубъектных факторов (Between-Subjects Factor(s)).

    •  В диалоговом окне Options (Опции) активируйте вывод средних для трёх факторов: geschl (пол), alter (возраст) и zeit (время), в поле отображаемых результатов (Display) активируйте вывод дескриптивных статистик и, помимо этого, сделайте запрос на тест однородности.


    Рис. 17.7: Диалоговое окно Repeated Measures (Повторные измерения)

    •  Начните расчёт нажатием ОК.

    На экране появятся довольно обширные результаты расчёта. Их расшифровка может оказаться довольно проблематичной для новичка. Поэтому ниже будет рассмотрена только та часть результатов, которая является важной для поиска ответа на вопрос: какой из трёх факторов — пол, возраст или время, оказывает значимое влияние и какие взаимодействия между этими факторами являются значимыми.


    Сначала даётся сводная таблица для внутрисубъектных (время) и межсубъектных (пол и возраст) факторов. Затем выводятся дескриптивные статистики (среднее значение, стандартное отклонение, количество наблюдений) для отдельных ячеек, то есть характеристики переменных ml-m4 отдельно для пола и возрастных групп. Вывод этих показателей в книге не приводится.


    Далее следуют результаты расчёта для фактора "Zeit" ("Время") и для взаимодействий с этим фактором, в основу которых положен метод общей линейной модели. Для этого были определены различные тестовые величины, которые выводятся под наименованиями: "Pillai's Trace" (След Пиллая), "Wilks' Lambda" (Лямбда Уилкса), "Hotelling's Trace" (След Хоттелинга) и "Roy's Largest Root" (Максимальный характеристический корень по методу Роя). С помощью надлежащих преобразований по этим тестовым величинам восстанавливается рампределения значение F, по которому затем определяется значение р, приводимое в колонке "Значимость" (Sig). Следует отметить, что след Пиллая ("Pillai's Trace") является наиболее сильным и устойчивым (робастным) тестом.


    Результаты первых трёх тестов являются практически идентичными. Обнаружено очень значимое влияние временного фактора, а вот взаимодействия других факторов со временем, напротив, оказались не значимыми.


    Одни и те же расчёты, то есть проверка временного фактора и взаимодействий со временем, производятся также при помощи традиционного "классического" метода Фишера. Соответствующие результаты можно взять из строки "Предполагается сферичность" во второй из нижеследующих таблиц, которая наряду с ними содержит ещё три варианта проверок.


    Multivariate Tests c (Многомерные тесты)


    Effect (Эффект)


    Value (Значе-ние)


    F


    Hypothesis df (Гипотеза df)


    Error df (Ошибка df)


    Sig. (Зна-чимость)


    ZEIT (Время)


    Pillai's Trace (След Лиллая)


    ,955]


    133,367"


    3,000


    19,000


    ,000


    Wilks' Lambda (Лямбда Уилкса)


    ,045


    133,367"


    3,000


    19,000


    ,000


    Hotelling's Trace (След Хоттелинга)


    21,058


    133,367а


    3,000


    19,000


    ,000


    Roy's Largest Root (Макси-мальный характе-ристический корень по методу Роя)


    21,058


    133,367е


    3,000


    19,000


    ,000


    ZEIT*GESCHL (Время'Пол)


    Pillai's Trace (След Пиллая)


    ,106


    ,752"


    3,000


    19,000


    ,535


    Wilks1 Lambda (Лямбда Уилкса)


    ,894


    ,752а


    3,000


    19,000


    ,535


    Hotelling's Trace (След Хоттелинга)


    ,119


    ,752а


    3,000


    19,000


    ,535


    Roy's Largest Root (Макси-мальный характе-ристический корень по методу Роя)


    ,119


    ,752"


    3,000


    19,000


    ,535


    ZEIT * ALTER (Время* Возраст)


    Pillai's Trace (След Пиллая


    ,293


    1,145


    6,000


    40,000


    ,355


    Лямбда Уилкса)


    ,710


    1,183а


    6,000


    38,000


    ,336


    Hotelling's Trace (След Хоттелинга)


    ,404


    1,213


    6,000


    36,000


    ,322


    Roy's Largest Root (Макси-мальный характе-ристический корень по методу Роя)


    ,394


    2,625"


    3,000


    20,000


    ,079


    ZEIT * GESCHL * ALTER (Время'Пол* Возраст)


    Pillai's Trace (След Пиллая)


    ,406


    1,699


    6,000


    40,000


    ,146


    Wilks1 Lambda (Лямбда Уилкса)


    ,622


    1,699а


    6,000


    38,000


    ,148


    Hotelling's Trace (След Хоттелинга)


    ,564


    1,691


    6,000


    36,000


    ,151


    Roy's Largest Root (Макси-мальный характе-ристический корень по методу Роя)


    ,468


    3,118Ь


    3,000


    20,000


    ,049


    a, b, с — см. след. стр.


    Tests of Within-Subjects Effects (Тест внутрисубъектных эффектов)


    Measure: MEASURE_1 (Мера: MEASURE_1 )


    Source Источник)


    Type III Sum of Squares (Сумма квадратов III типа)


    df


    Чеап Square (Среднее значение квадрата)


    F


    Sig. (Значи-мость)


    ZEIT Время)


    Sphericity Assumed (Предполагается сферичность)


    185,661


    3


    61,887


    83,028


    ,000


    Greenhouse-Geisser (Гринхауз-"айссер)


    185,661


    2,577


    72,055


    83,028


    ,000


    Huynh-Feldt (Гин-Фельд)


    185,661


    3,000


    61,887


    83,028


    ,000


    Lower-bound (Нижний предел)


    185,661


    1,000


    185,661


    83,028


    ,000


    ZEIT* GESCHL Время * Пол)


    Sphericity Assumed (Предполагается сферичность)


    1,520


    3


    ,507


    ,680


    ,568


    Greenhouse-Geisser (Гринхауз-"айссер)


    1,520


    2,577


    ,590


    ,680


    ,547


    Huynh-Feldt (Гин-Фельд1


    1,520


    3,000


    ,507


    ,680


    ,568


    .ower-bound (Нижний предел)


    1,520


    1,000


    1,520


    ,680


    ,419


    ZEIT* ALTER (Время * Возраст)


    Sphericity Assumed ^Предполагается сферичность)


    4,190


    6


    ,698


    ,937


    ,475


    Greenhouse-Geisser (Гринхауз-Гайссер)


    4,190


    5,153


    ,813


    ,937


    ,467


    Huynh-Feldt (Гин-Фельд)


    4,190


    6,000


    ,698


    ,937


    ,475


    Lower-bound (Нижний предел)


    4,190


    2,000


    2,095


    ,937


    ,408


    ZEIT* GESCHL* ALTER Время * Пол* Зозраст)


    Sphericity Assumed (Предполагается сферичность)


    6,557


    6


    1,093


    1,466


    ,204


    Greenhouse-Geisser (Гринхауз-Гайссер^


    6,557


    5,153


    1,272


    1,466


    ,215


    Huynh-Feldt (Гин-Фельд)


    6,557


    6,000


    1,093


    1,466


    ,204


    Lower-bound (Нижний предел)


    6,557


    2.00C


    3,278


    1,466


    ,254


    Error (ZEIT) (Ошибка (Время))


    Sphericity Assumed (Предполагается сферичность)


    46,958


    63


    ,745




    Greenhouse-Geisser (Гринхауз-Гайссер)


    46,958


    54,110


    ,868




    Huynh-Feldt (Гин-Фельд)


    46,95f


    63,000


    ,745




    Lower-bound (Нижний предел)


    46,958


    21.00C


    2,236




    a Exact statistic (Точная статистика)


    b The statistic is an upper bound on F that yields a lower bound on the significance level (Статистической характеристикой является верхний придел значения Е-распределе-ния, который указывает на нижний предел уровня значимости).


    c Design: Intercept+GESCHL+ALTER+GESCHL * ALTER (Компоновка: Отрезок + Пол + Возраст + Пол * Возраст )


    Within Subjects Design: ZEIT (Компоновка внутри субъектов: Время)


    Полученные результаты близки к результатам расчётов по общей линейной модели. Тест Левене на равенство дисперсий демонстрирует однородность дисперсии для моментов времени со второго по четвёртый и неоднородность дисперсии (р = 0,009) для первого момента (см. гл. 17.1.1).


    Levene's Test of Equality of Error Variances a (Тест Левене на равенство дисперсии ошибок)


    F


    df1


    df2


    Sig. (Значимость)


    М1


    4,177


    5


    21


    ,009


    М2


    ,878


    5


    21


    ,513


    МЗ


    1,751


    5


    21


    ,167


    М4


    2,022


    5


    21


    ,117


    Tests the null hypothesis that the error variance of the dependent variable is equal across groups (Проверяется нулевая гипотеза о том, что дисперсия ошибки независимых переменных остаётся постоянной для всех групп). a. Design: Intercept+GESCHL+ALTER+GESCHL * ALTER (Компоновка: Отрезок + Пол + Возраст + Пол * Возраст ) Within Subjects Design: ZEIT (Компоновка внутри субъектов: Время)


    Далее идут расчёты для обоих факторов (пол и возраст), для которых не производятся повторные измерения, а также для их взаимодействия.


    Tests of Between-Subjects Effects (Тест межсубъектных эффектов)


    Measure: MEASURE_1 (Мера: MEASURE_1)


    Transformed Variable: Average (Трансформированная переменная: Среднее значение)


    Source (Источник)


    Type III Sum of Squares (Сумма квадратов III типа)


    Df


    Mean Square (Среднее значение квадрата)


    F


    Sig. (Значимость)


    Intercept (Отрезок)


    25080,367


    1


    25080,367


    2029,299


    ,000


    GESCHL (Пол)


    ,738


    1


    ,738


    ,060


    ,809


    ALTER (Возраст)


    667,147


    2


    333,573


    26,990


    ,000


    GESCHL * ALTER (Пол * Возраст)


    33,571


    2


    16,785


    1,358


    ,279


    Error (Ошибка)


    259,542


    21


    12,359


    Получается незначимое влияние пола (р = 0,809), очень значимое влияние возраста (р < 0,001) и незначимое взаимодействие (р = 0,279). Под заголовком "Оцененные пределы средних" (Estimated Marginal Means) выводится информация о средних значениях и стандартных отклонениях для отдельных слоев факторов:


    1. GESCHL (Пол)

    Measure: MEASURE_1 (Мера: MEASURE_1)

    GESCHL (Пол)


    Mean (Среднее значение)


    Std. Error (Стандартная ошибка)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    maennlich (Мужской)


    15,700


    ,460


    14,743


    16,657


    weiblich (Женский)


    15,531


    ,519


    14,452


    16,609


    2. ALTER (Возраст)

    Measure: MEASURE 1 (Мера: MEASURE 1)

    ALTER (Возраст)


    Mean (Среднее значение)


    Std. Error (Стандартная ошибка)


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    bis 30 Jahre (До 30 лет)


    17,646


    ,671


    16,250


    19,042


    31 - 50 Jahre (31 - 50 nejr)


    16,988


    ,590


    15,761


    18,214


    ueber 50 Jahre (Свыше 50 лет)


    12,213


    ,532


    11,106


    13,319


    3. ZEIT (Время)

    Measure: MEASURE_1 (Мера: MEASURE_1)

    ZEIT


    (Время)


    Mean (Среднее значение


    Std. Error (Стандартная ошибка;


    95% Confidence Interval (95 % доверительный интервал)


    Lower Bound (Нижний предел)


    Upper Bound (Верхний предел)


    1


    13,828


    ,307


    13,190


    14,466


    2


    14,964


    ,405


    14,121


    15,807


    3


    16,275


    ,386


    15,472


    17,078


    4


    17,394


    ,400


    16,562


    18,227


    Для факторов, для которых не производятся повторные измерения (межсубъектные эффекты), можно вновь провести дополнительные тесты (Post Hoc), но, к сожалению, их нельзя применить для факторов, для которых производятся повторные измерения.

    8.gif

    Изображение: 

    17.2 Ковариационный анализ

    17.2 Ковариационный анализ


    Если в дисперсионном анализе используется независимая переменная, относящаяся к интервальной шкале или к шкале отношений (метрической), то говорят не о факторе, а о ковариации. Поясним значение такой "контрольной переменной" на следующем примере.


    Двадцать испытуемых с избыточным весом (11 мужчин и 9 женщин) изъявили желание похудеть и для этого взялись следовать определённой диете. Одиннадцать испытуемых дополнительно вступили в некоторое общество для желающих похудеть, в котором процесс похудения подстегивается при помощи специальных стимулирующих лекций и других мотивирующих методов. Для всех тестируемых были сняты показатели роста (в см) и веса (в кг) до и после прохождения курса. Далее при помощи расчета индекса Брока (Вгоса) фактический вес был отнесен к нормальному весу, где нормальный вес в килограммах мы можем получить, если от роста, взятого в сантиметрах, отнимем 100:


    Так индекс Брока, равный 100 процентам означает нормальный вес, превышающий 100 процентов — избыточный вес.

    •  Откройте файл gewicht.sav.

    Переменная beh указывает на группу (1 = диета, 2 = диета + общество для желающих похудеть), а переменная g указывает на пол (1 = мужской, 2 = женский). К остальным переменным, участвующими в расчётах, относятся: gr (Рост), gew (Вес до лечения), gewl (Вес в конце лечения), ЬгосаО (Индекс Брока до лечения), brocaab (Уменьшение индекса Брока). Последняя переменная должна служить мерой эффективности диеты.


    Мы хотим провести двухфакторный дисперсионный анализ с использованием переменных beh и g в качестве независимых переменных (факторов) и переменной brocaab в качестве зависимой переменной.

    •  Выберите в меню Analyze (Анализ) General Linear Model (Общая линейная модель) Univariate... (Одномерная)

    •  В появившемся диалоговом окне переменной brocaab присвойте статус зависимой переменной, а переменным beh и g — статус постоянных факторов.

    •  После прохождения кнопки Options... (Опции) активируйте вывод оценки пределов средних для факторов beh и g.

    •  Начните расчёт нажатием ОК.

    Для группы, члены которой дополнительно вступили в общество для желающих похудеть, средний показатель снижения индекса Брока равен 11,558, в то время как для группы, члены которой худеют только при помощи одной диеты, снижение в среднем составляет 5,178. Дисперсионный анализ дает следующие результаты:


    Tests of Between-Subjects Effects (Тесты межсубъектных эффектов)


     Dependent Variable: BROCAAB (Зависимая переменная: BROCAAB)


    Source (Источник)


    Type III Sum of Squares (Сумма квадратов III типа)


    Df


    Mean Square (Средний квадрат)


    F


    Sig. (Значи-мость)


    Corrected Model (Подправленная модель)


    209,636"


    3


    69,879


    12,836


    ,000


    Intercept (Отрезок)


    1371,877


    1


    1371,877


    252,002


    ,000


    ВЕН


    199,414


    1


    199,414


    36,631


    ,000


    G


    1.998E-03


    1


    1.998E-03


    ,000


    ,985


    BEH*G


    3,026


    1


    3,026


    ,556


    ,467


    Error (Ошибка)


    87,103


    16


    5,444


    Total (Сумма)


    1805,668


    20


    Corrected Total (Подправленная суммарная вариация)


    296,738


    19


    a R Squared = ,706 (Adjusted R Squared = ,651) (R - квадрат = ,706 (смещённый R-квадрат = ,651))


    Получается очень значимая разница между двумя группами (р < 0,001): то есть, членство в обществе оказывает очень значимое воздействие на процесс снижения веса.


    Если рассмотреть результаты поподробнее, то можно заметить, что начальное значения индекса Брока для группы, дополнительно входящей в общество похудения, значительно выше (132,0 против 113,1). Таким образом, шансы потери веса в этой группе с самого начала выше, чем в другой. Поэтому было бы уместно включить в анализ начальное значение индекса Брока (переменную brоса0) в качестве контрольной переменной, то есть ковариации.

    •  Откройте вновь диалоговое окно Univariate (Одномерная) и поместите дополнительно переменную brоса0 в поле ковариации.

    •  Начните расчёт нажатием ОХ.

    Результат ковариационного анализа будет выглядеть следующим образом:


    Tests of Between-Subjects Effects (Тесты межсубъектных эффектов)


    Dependent Variable: BROCAAB (Зависимая переменная: BROCAAB)


    Source (Источник)  


     


    Type III Sum of Squares (Сумма квадратов III типа)


     


    df


     


     


    Mean Square (Средний квадрат)


    F


    Sig. (Значи-мость)

    Corrected ModelПодправленная модель)  231,170a 4

    57,842 


    13,273 


    ,000

    Intercept (Отрезок) 8.568 1 8,568 1,966 ,181
    BRACAO 21,734 1 21,734 4,987  ,041
    ВЕН 11.077 1 11,077 2, 542 ,132


      3.830


    1  


    3,830


     


    ,879


    ,363


    ВЕН *G 


    4.644


    1


    4,644


    1,066


    ,318


    Error (Ошибка)


    65.368


    15


    4,358


    Total (Сумма)


    1805,668


    20


    Corrected Total (Подправленная суммарная вариация)


    296,738


    19


    a R Squared = ,780 (Adjusted R Squared = ,721) (R - квадрат = ,780 (смещённый R-квадрат = ,721))


    В результате, как и ожидалось, обнаружилось сильное влияние ковариации brоса0 (р = 0,041). Это ведёт к тому, что в обеих группах пропадает значимый эффект (р = 0,132). Из-за сильно отличающихся исходных показателей, доказательство значимого воздействия дополнительного членства в обществе для желающих похудеть является невозможным.

    17.3 Многомерный дисперсионный анализ

    17.3 Многомерный дисперсионный анализ


    Многомерный дисперсионный анализ применяется тогда, когда в одном дисперсионном анализе необходимо одновременно исследовать влияние факторов и возможных ковариации (независимых переменных) на несколько зависимых переменных. Такой многомерный дисперсионный анализ следует предпочесть одномерному тогда (и только тогда), когда зависимые переменные не являются независимыми друг от друга, а наоборот коррелируют между собой.


    Если Вы откроете данные из исследования гипертонии (файл hyper.sav) и рассчитаете корреляции между исходными значениями систолического и диастолического давлений, уровнями холестерина и сахара в крови (переменные rrs0, rrd0, cho10 и bz0), то вы заметите, что эти переменные, хотя и не сильно, но всегда значимо коррелируют между собой.


    Если Вы хотите узнать, значимо ли отличаются перечисленные переменные для четырёх заданных возрастных групп (переменная ak), то вместо четырёх отдельных одномерных однофакторных дисперсионных анализов Вы должны провести один многомерный однофакторный анализ.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Analyze (Анализ) General Linear Model (Общая линейная модель) Multivariate... (Многомерная)

    Откроется диалоговое окно Multivariate (Многомерная) (см. рис. 17.8).


    Поместите переменные rs0, rrd0, cho10, и bz0 в поле. предусмотренное для зависимых переменных, а переменной ak присвойте статус постоянного фактора.


    Под выключателями Contrasts... (Контрасты), Model... (Модель) и Options... (Опции) Вы найдёте множество разнообразных возможностей для задания контрастов, выбора различных вариантов моделей или организации вывода всевозможных дополнительных результатов расчёта; к примеру, здесь можно активировать тесты проверки дисперсии на однородность.


    Уже было указано на невозможность в рамках этой книги представить все имеющиеся возможности по отдельности. Чтобы рассмотреть все эти возможности Вам придётся обратиться к оригинальному учебнику по SPSS; опытному же пользователю для понимания будет достаточно просто посмотреть на пункты, имеющиеся в диалоговом окне. В крайнем случае, можно воспользоваться справкой.

    •  Оставьте все установки по умолчанию и начните расчёт нажатием ОК.


    Рис. 17.8: Диалоговое окно Multivariate (Многомерная)


    Появятся довольно обширные результаты расчёта. Важным для нас является в первую очередь глобальный многомерный тест на предмет выявления значимых различий "где-нибудь" между возрастными группами:


    Multivariate Tests c (Многомерные тесты)


    Effect (Эффект )


    Value (Зна-чение)


    F


    Hypo-thesis df (Гипо-теза df)


    Error df (Ошибка df)


    Sig. (Значи-мость)


    Inte-rcept Отре-зок)


    Pillai's Trace (След Пиллая)


    ,996


    9252, 061а


    4,000


    167,000


    ,000


    Wilks' Lambda (Лямбда Уилкса) 


    ,004


    9252,061 а


    4,000


    167,000


    ,000


    Hotelling's Trace (След Хоттелинга)


    221,606


    9252, 061а


    4,000


    167,000


    ,000


    Roy's Largest Root 'Макси-мальный характе-ристический корень по методу Роя)


    221,606


    9252,061 а


    4,000


    167,000


    ,000


    АК


    Dillai's Trace (След Пиллая)


    ,178


    2,661


    12,00ol


    507,00o'


    ,002


    Wilks' Lambda (Лямбда Уилкса) 


    ,827


    2,740


    12,000


    442,132


    ,001


    Hotelling's Trace (След Хоттелинга)


    ,203


    ,805


    12,000


    197,000


    ,001


    Roy's Largest Root (Макси-мальный характе-ристический корень по методу Роя)


    ,169


    7,159Ь


    4,000


    167,000


    ,000


    a. Exact statistic (Точная статистика)


    b. The statistic is an upper bound on F that yields a lower bound on the significance level (Статистической характеристикой является верхний придел значения F-распределе-ния, который указывает на нижний предел уровня значимости).


    с Design: Intercept+AK (Компоновка: Отрезок + АК)


    Здесь производится расчёт величин, традиционных для общей линейной модели. Они уже представлены в главе 17.1.3. Основываясь на критерии "След Пиллая" ("Pillai's Trace"), следует отклонить нулевую гипотезу о том, что между четырьмя возрастными группами не наблюдается различий ни для одной из зависимых переменных (значение р = 0,002).


    Для проверки, какие из четырёх зависимых переменных в чем-то различаются между собой, были проведены одномерные тесты. Результаты этих тестов полностью соответствуют результатам отдельного одномерного дисперсионного анализа для каждой зависимой переменной.


    Мы здесь воздержимся от подробной расшифровки довольно большой таблицы "Тесты межсубъектных эффектов". Отметим только, что для систолического и диастолического давлений, уровней холестерина и сахара в крови получаются следующие значения вероятности ошибки р: 0,153, 0,002, 0,267 и 0,688 соответственно. Причиной суммарной значимости, поучающейся в результате многомерного теста, являются прежде всего значимые различия для диастолического давления.


    Для опытных статистиков, хорошо знакомых с тонкостями многомерных методов, SPSS может предложить избыточное количество разнообразных возможностей в области дисперсионного анализа. В первую очередь можно использовать разнообразные возможности процедуры MANOVA, доступной отныне только через командный синтаксис. Эта процедура позволяет проводить простой и множественный регрессионный анализ, дискриминантный анализ, канонический анализ, анализ главных компонентов и др. Однако сложность работы с заданием параметров может составить некоторые затруднения для менее опытных пользователей. Поэтому в данной книге мы ограничились рассмотрением наиболее часто применяемых компоновок дисперсионного анализа.

    10.gif

    Изображение: 

    17.4 Компоненты дисперсии

    17.4 Компоненты дисперсии


    Расчёт компонентов дисперсии в общей линейной модели производится при наличии факторов со случайными эффектами. Факторами со случайными эффектами являются те факторы, слои которых были случайно выбраны из популяции (совокупности) многих возможных слоев факторов.


    Проанализируем длину листьев растений растущих на одной клумбе. Для этого вырвем произвольно три растения, листья которых мы и будем измерять.


    Растения


    Длина листьев (см)


    Растения


    Длина листьев (см)


    1


    9,5


    2


    9,0


    1


    9,8


    2


    9,5


    1


    8,7


    3


    8,0


    1


    8,8


    3


    7,8


    1


    8,9


    3


    9,0


    1


    10,0


    3


    8,7


    2


    11,0


    3


    8,9


    2


    10,5


    Так как из большого количества растений мы произвольно взяли для исследований только три, то здесь можно говорить о факторе со случайными эффектами. Это следует учитывать, если при помощи некоего метода дисперсионного анализа нужно будет установить, зависит ли длина листьев от конкретного растения или насколько велика та часть дисперсии, причиной которой является неоднородность растений. Эти вопросы можно прояснить при помощи расчёта компонентов дисперсии.

    •  Откройте файл pflanze.sav.

    •  Выберите в меню Analyze (Анализ) General Linear Model (Общая линейная модель) Variance Components... (Компоненты дисперсии)

    Откроется диалоговое окно Variance Components (Компоненты дисперсии).

    •  Поместите laenge (длина) в поле для зависимой переменной, a pflanze (растение) в поле для случайных факторов.

    •  Пройдя через кнопку Model... (Модель) вы можете выбрать, будете ли вы рассчитывать полнофакторную модель (установка по умолчанию) или включите в расчёт только некоторые факторы. При наличии только одного фактора, как в приведенном примере, можно говорить, конечно же, только о полнофакторной модели.

    •  Выключатель Options... (Опции) предоставляет возможность выбора между четырьмя методами оценки компонентов дисперсии. Лучшим методом считается метод MINQUE (Minimum norm quadratic unbiased estimator) (Минимум нормы квадратической несмещённой оценки); поэтому он и установлен по умолчанию.

    •  При помощи выключателя Save... (Сохранить) вы можете сохранить некоторые результаты в файле.

    •  Оставьте это окно без изменений и начните расчёт нажатием ОК.


    Рис. 17.9: Диалоговое окно Variance Components (Компоненты дисперсии)


    В окне просмотра появятся оценки компонентов дисперсии.


    Factor Level Information (Информация о слоях фактора)


    N


    PFLANZE (Растение)


    1,00


    6


    2,00


    4


    3,00


    5


    Dependent Variable: LAENGE (Зависимая переменная: Длина) 


    Variance Estimates (Оценки дисперсии)


    Component (Компоненты)


    Estimate (Оценка)


    Var(PFLANZE) (Переменная (Растение))


    ,471


    Var(Error) (Переменная (Ошибка))


    ,438


    Dependent Variable: LAENGE (Зависимая переменная: Длина) Method: Minimum Norm Quadratic Unbiased Estimation (Weight = 1 for Random Effects and Residual) (Метод: Минимум нормы квадратичной несмещённой оценки (Вес = 1 для случайных эффектов и остатков))


    На основе этих результатов можно найти процентную долю дисперсии, получающуюся из-за наличия разных растений:


    0,471/(0,471+0,438)=51,8%


    Приведём ещё один несколько усложненный пример из учебника SPSS. На некоторой фирме, работающей в области электроники, в 36 различных печах при различных температурах (550 и 600 градусов по Фаренгейту) измеряют выносливость (в минутах) определенных радиоэлектронных комплектующих. Один инженер предполагает, что не все печи создают одинаковые условия для тестирования комплектующих. Чтобы это проверить, он случайно выбирает три печи и для каждой печи делает по три измерения выносливости комплектующих для каждой из температур.


    Данные находятся в файле ofen.sav в переменных of en (печь), temp (температура) и zeit (время). Переменная ofen (печь) соответствует фактору со случайными эффектами, так как из 36 печей три были выбраны случайно. Температура также является фактором со случайными эффектами, так как температуры 550 и 600 градусов были выбраны из бесконечного множества возможных температур.


    Так как вполне возможно, что в разных печах действуют различные температурные режимы, предположим, что температурный фактор является вложенным в фактор печей — т.н. ("гнездовая компоновка'").

    •  Откройте файл ofen.sav.

    •  Откройте так, как было изложено ранее, диалоговое окно Variance Components (Компоненты дисперсии).

    •  Переменную zeit (время) поместите в поле зависимых переменных, а переменные ofen (печь) и temp (температура) в поле случайных факторов.

    Мы должны здесь также учесть и вложенность фактора temp (температура) в фактор ofen (печь). Это можно осуществить только при помощи программного синтаксиса.

    •  Щёлкните по выключателю Paste (Внести) для того, чтобы перенести синтаксис данной команды в редактор синтаксиса.

    В редакторе будет показан следующий синтаксис: 

    VARCOMP 
     zeit BY ofen temp 
     /RANDOM = ofen temp 
     /METHOD = MINQUE (1) 
     /DESIGN 
     /INTERCEPT = INCLUDE .
    •  Дополните вспомогательную команду DESIGN следующим образом:

    VARCOMP 
     zeit BY ofen temp  
     /RANDOM = ofen temp 
      /METHOD = MINQUE (1) 
      /DESIGN = ofen temp(ofen) 
      /INTERCEPT = INCLUDE .
    •  Запустите команду на исполнение при помощи кнопки Run Current. В окне просмотра появятся следующие оценки дисперсии:

    Variance Estimates (Оценки дисперсии)


    Component (Компонент)


    Estimate (Оценка)


    Var(OFEN) (Переменная (Печь))


    29,287


    Var(TEMP(OFEN)) (Переменная Температура (Печь))


    1525,889


    Var(Error) (Переменная (Ошибка))


    69,778


    Dependent Variable: ZEIT (Зависимая переменная: Время) Method: Minimum Norm Quadratic Unbiased Estimation (Weight = 1 for Random Effects and Residual) (Метод: Минимум нормы квадратичной несмещённой оценки (Вес = 1 для случайных эффектов и остатков))


    Из таблицы можно узнать, что доля дисперсии объясняемая наличием разных печей очень незначительна:


    [29, 287/(29,287 + 1525,889 + 69,778)]*100 = 1,8% 


    До этого момента мы рассматривали только модели со случайными эффектами. Модели, содержащие как случайные, так и постоянные эффекты, получили название "смешанных" моделей.


    И, наконец, следует указать на то, что методы MINQUE и ANOVA иногда могут выдавать негативные оценки компонентов дисперсии, что собственно противоречит самому определению дисперсии. Это может происходить потому, что количество наблюдений слишком мало, некоторые значения отсутствуют или выбран неподходящий метод оценки.

    11.gif

    Изображение: 

    Глава 18. Дискриминантный анализ

    Глава 18. Дискриминантный анализ

    1. Дискриминантный анализ

    Дискриминантный анализ


    С помощью дискриминантного анализа на основании некоторых признаков (независимых переменных) индивидуум может быть причислен к одной из двух (или к одной из нескольких) заданных заранее групп.


    Такая постановка задачи, в особенности в случае двух заранее заданных групп, очень сильно напоминает постановку задачи для метода логистической регрессии (см. гл. 16.4). Ядром дискриминантного анализа является построение так называемой дискриминантной функции


    d = b1х1+b2х2+... + bnхn+а ,


    где x1 и хn — значения переменных, соответствующих рассматриваемым случаям, константы b1-bn и a — коэффициенты, которые и предстоит оценить с помощью дискриминантного анализа. Целью является определение таких коэффициентов, чтобы по значениям дискриминантной функции можно было с максимальной четкостью провести разделение по группам.

    18.1 Пример из области медицины

    18.1 Пример из области медицины


    Обратимся ещё раз к примеру, который уже приводился при рассмотрении логистической регрессии. В этом примере приводятся выборочные данные о пациентах с нарушениями работы легких. Эти данные хранятся в файле lunge.sav. Приведем ещё раз переменные, которые в данном случае будут применяться при дискриминантом анализе:


    Имя переменной


    Значение


    out


    Исход (0 = скончался, 1 = выжил)


    alter


    Возраст


    bzeit


    Время проведения искусственного дыхания в часах


    kob


    Концентрация кислорода в смеси для искусственного дыхания


    адд


    Интенсивность искусственного дыхания


    geschl


    Пол (1 = мужской, 2 = женский)


    gr


    Рост


    Переменная out делит пациентов на две группы; при помощи остальных переменных предстоит прогнозировать принадлежность к одной из групп.

    •  Откройте файл lunge.sav.

    •  Выберите в меню Analyze (Анализ) Classify (Классифицировать) Discriminant... (Дискриминантный анализ) 

    Откроется диалоговое окно Discriminant Analysis (Дискриминантный анализ).



    Рис. 18.1: Диалоговое окно Discriminant Analysis (Дискриминантный анализ).

    •  Поместите переменную out в поле, предназначенное для групповых переменных.

    •  После щелчка по выключателю Define Range... (Определить промежуток) введите минимальное и максимальное значения этой переменной: 0 и 1.

    •  Переменным agg, alter, bzeit, gcschl, gr и kob присвойте статус независимых переменных. Для начала оставим установленный по умолчанию метод: Enter independents together (Одновременный учет всех независимых переменных), при котором в анализе одновременно будут участвовать все независимые переменные.

    •  После щелчка по выключателю Statistics... (Статистики) активируйте опции: Means (Средние значения), Univariate ANOVAs (Одномерные тесты ANOVA), Unstandardized Function Coefficients (Нестандартизированные коэффициенты функции) и Within-groop Correlation Matrice (Корреляционная матрица внутри группы).

    •  Через выключатель Classify (Классифицировать) сделайте дополнительно запрос на вывод диаграмм по отдельным группам (Separate-groups Plots), результатов для отдельных наблюдений (Casewise results) и сводной таблицы (Summary table). При выводе результатов для отдельных наблюдений ограничимся первыми двадцатью, поместив этот предел в соответствующую позицию диалогового окна.

    Довольно полезный график для объединенных групп, который был реализован в ранних версиях SPSS, и сейчас можно активировать в диалоговом окне, однако вместо графика в окне отображения результатов будет появляться предупреждение о том, что такая гистограмма в анализах более не доступна.

    •  При помощи выключателя Save... (Сохранить) активируйте сохранение значения дискриминантной функции в дополнительной переменной (Discriminant Scores).

    •  Начните расчёт нажатием ОК.

    После вводного обзора действительных и пропущенных значений приводятся средние значения, стандартные отклонения, количество наблюдений для каждой группы в отдельности и суммарные показатели для обеих групп.


    Переменная geschl является при этом дихотомической переменной, принадлежащей к номинальной шкале с кодировками: 1 (мужской пол) и 2 (женский пол). Средние значения пола для обоих групп по исходу Легения, кажущиеся на первый взгляд бесполезными, равны 1,63492 и 1,45588; если бы вместо этого переменные были закодированы при помощи 0 и 1, то оба средних значения равнялись бы 0,63492 и 0,45588 соответственно. Для таких дихотомических переменных, кодированных при помощи 0 и 1, среднее значение указывает на долю наблюдений с кодировкой 1. Это означает, что для группы "скончался" доля женщин в процентном отношении составляет 63,492, а для группы "выжил" 45,588.


    Group Statistics (Статистики для групп)


    Outcome (Исход)


    Mean (Среднее значение)


    Std. Deviation (Стандартное отклонение)


    Valid N (listwise) (Действительные значения (по списку))


    Unwe-ighted (Не взвешено)


    Weig-hted (Взве-шено)


    gesto-rben (Скон-чался)


    Aggressivitaet der Beatmung (Интенси-вность искус-ственного дыхания)


    15,90013


    10,90013


    63


    63,000


    ALTER (Возраст)


    31,92063


    13,82529


    63


    63,000


    Beatmungszeit in Std. (Время проведения искус-ственного дыхания в часах)


    15,36508


    10,50085


    63


    63,000


    Geschlecht (Пол)


    1,63492


    ,48532


    63


    63,000


    Koerper-groesse (Рост)


    165,1429


    15,55931


    63


    63,000


    Sauerstoff-Konzentration (Концент-рация кислорода в смеси для искус-ственного дыхания)


    ,85952


    ,14807


    63


    63,000


    ueberlebt (Выжил)


    Aggressivitaet der Beatmung (Интенси-вность искус-ственного дыхания)


    11,69699


    8,16057


    68


    68,000


    ALTER (Возраст)


    27,97059


    10,86411


    68


    68,000


    Beatmungszeit in Std. (Время проведения искус-ственного дыхания в часах)


    10,79412


    5,10065


    68


    68,000


    Geschlecht (TlonJ


    1,45588


    ,50175


    68


    68,000


    Koerpe-rgroesse (Рост)


    172,0588


    11,01137


    68


    68,000


    Sauerstoff-Konzentration (Концентрация кислорода в смеси для искус-ственного дыхания)


    ,80338


    ,15493


    68


    68,000


    Total


    Aggressivitaet der Beatmung (Интенси-вность искус-ственного дыхания)


    13,51843


    9,72600


    131


    131,000


    ALTER (Воз_раст)


    29,87023


    12,48654


    131


    131,000


    Beatmungszeit in Std. (Время проведения искус-ственного дыхания в часах)


    12,99237


    8,44120


    131


    131,000


    Geschlecht (Пол)


    1,54198


    ,50015


    131


    131,000


    Koerpe-rgroesse (Рост)


    168,7328


    13,78339


    131


    131,000


    Sauerstoff-Konzentration (Конце-нтрация кислорода в смеси для искус-ственного дыхания)


    ,83038


    ,15369


    131


    131,000


    Затем проводится тест, насколько значимо различаются между собой переменные в обеих группах; наряду с тестовой величиной, в качестве которой служит Лямбда Уилкса ("Wilks-Lambda"), применяется также и простой дисперсионный анализ. Для всех переменных (кроме возраста, для которого однако также просматривается сильная тенденция к значимости) получается значимое различие между обеими группами:


    Tests of Equality of Group Means (Тест равенства групповых средних значений)


    Wilks Lambda (Лямбда Уилкса)


    F


    df1


    df2


    Sig. (Значи-мость)


    Aggressivitaet der Beatmung (Интенсивность искусственного дыхания)


    ,962


    5,116


    1


    129


    ,025


    ALTER (Возраст)


    ,975


    3,331


    1


    129


    ,070


    Beatmungszeit in Std. (Время проведения искусственного дыхания в часах)


    ,926


    10,273


    1


    129


    ,002


    Geschlecht (Пол)


    ,968


    4,297


    1


    129


    ,040


    Koerpergroesse (Рост)


    ,937


    8,722


    1


    129


    ,004


    Sauerstoff-Konzentration (Концентрация кислорода в смеси для искусственного дыхания)


    ,966


    4,481


    1


    129


    ,036


    Далее следует корреляционная матрица между всеми переменными, в которой приводятся коэффициенты, осредненные для обеих групп:


    Pooled Within-Groims Matrices (Объединённые внутригрупповые матрицы)

     

    Aggres-sivitaet der Beat-mung (Интен-сивность искус-ственного дыхания)


    ALTER (Воз-раст)


    Beatmun-gszeit in Std. (Время прове-дения искус-ственного дыхания в часах)


    Gesc-hlecht (Пол)


    Koerper-groesse (Рост)


    Saue-rstoff- Konzen-tration (Концен-трация кисл-орода в смеси для искус-ственного дыхания)


    Corre-lation (Корре-пяция)


    Aggres-sivitaet der Beatmung (Интен-сивность искус-ственного дыхания)


    1,000


    -,072


    -,058


    ,141


    -,042


    ,285


    ALTER (Возраст)


    -,072


    1,000


    ,093


    -,040


    ,277


    -.119


    Beatmu-ngszeit in Std. (Время прове-дения искус-ственного дыхания в часах)


    -,058


    ,093


    1,000


    ,069


    -,126


    -,089


    Geschlecht (Пол)


    .141


    -0,40


    ,069


    1,000


    -,481


    -,066


    Koerpe-rgroesse (Рост)


    -,042


    ,277


    -,126


    -,481


    1,000


    ,000


    Sauer-stoff-Konze-ntration (Конце-нтрация кисло-рода в смеси для искус-ственного дыхания)


    ,285


    -,119


    -,089


    -,066


    ,000


    1,000


    Следующими шагами являются расчёт и анализ коэффициентов дискриминантной функции. Значения этой функции должны как можно отчётливей разделять обе группы. Мерой удачности этого разделения служит корреляционный коэффициент между рассчитанными значениями дискриминантной функции и показателем принадлежности к группе:


    Eigenvalues (Собственные значения)


    Function (Функция)


    Eigenvalue (Собственное значение)


    % of Variance (% дисперсии)


    Cumulative % (Сово-купный %)


    Canonical Correlation (Канони-ческая корреляция)


    1


    ,256"


    100,0


    100,0


    ,452


    a. First 1 canonical discriminant functions were used in the analysis (В этом анализе используются первые 1 канонические дискриминантные функции).


    Wilks' Lambda (Лямбда Уилкса)


    Test of Function(s) (Тест функции (и))


    Wilks' Lambda (Лямбда Уилкса)


    Chi-square (Хи-квадрат)


    df


    Sig. (Значимость)


    1


    ,796


    28,733


    6


    ,000


    Судя по значению коэффициента, равному 0,452, корреляция абсолютно не удовлетворительная. При помощи Лямбда Уилкса производится тест на то, значимо ли в обеих группах отличаются друг от друга средние значения дискриминантной функции; в приводимом примере, значение р < 0,001, указывает на очень значимое различие.


    Значение, выводимое под именем "Eigenvalue" (Собственное значение), соответствует отношению суммы квадратов между группами к сумме квадратов внутри групп. Эти две суммы Вы сможете получить, если проведете дисперсионный анализ значений дискриминантной функции (переменная dis1_1) по фактору out (см. гл. 13.3). Большие собственные значения (в данном случае такого, к сожалению, не наблюдается) указывают на "хорошие" (удачно подобранные) дискриминантные функции.


    Следующая таблица дает представление о том, как сильно отдельные переменные, применяемые в дискриминантной функции, коррелируют со стандартизированными значениями этой дискриминантной функции. При этом корреляционные коэффициенты были рассчитаны в обеих группах по отдельности и затем усреднены:


    Standardized Canonical Discriminant Function Coefficients


     (Стандартизиро-ванные канонические коэффициенты дискриминантной функции)


    Function (Функция)


    1


    Aggressivitaet der Beatmung (Интенсивность искусственного дыхания)


    ,316


    ALTER (Возраст)


    ,494


    Beatmungszeit in Std. (Время проведения искусственного дыхания в часах|


    ,491


    Geschlecht (Пол)


    ,066


    Koerpergroesse (Рост)


    -,544


    Sauerstoff-Konzentration (Концентрация кислорода в смеси для искусственного дыхания)


    ,385


    Structure Matrix 


    (Структурная матрица)


    Function (Функция)


    1


    Beatmungszeit in Std. (Время проведения искусственного дыхания в часах)


    ,558


    Koerpergroesse (Рост)


    -,514


    Aggressivitaet der Beatmung (Интенсивность искусственного дыхания)


    ,393


    Sauerstoff-Konzentration (Концентрация кислорода в смеси для искусственного дыхания)


    ,368


    Geschlecht (Пол)


    ,361


    ALTER (Возраст)


    ,318


    Pooled within-groups correlations between discriminating variables and standardized canonical discriminant functions (Объединённые корреляции внутри групп между диск-риминантными переменными и стандартизированными каноническими дискриминант-ными функциями).


    Variables ordered by absolute size of correlation within function (Переменные расположены в соответствии с абсолютными корреляционными величинами внутри функции).


    И в заключение, приводятся сами коэффициенты дискриминантной функции:


    Canonical Discriminant Function Coefficients


    (Канонические коэффициенты дискриминантной функции)


    Function (Функция)


    1


    Aggressivitaet der Beatmung (Интенсивность искусственного дыхания)


    ,033


    ALTER (Возраст)


    ,040


    Beatmungszeit in Std. (Время проведения искусственного дыхания в часах)


    ,060


    Geschlecht (Пол)


    ,133


    Koerpergroesse (Рост)


    -,041


    Sauerstoff-Konzentration (Концентрация кислорода в смеси для искусственного дыхания)


    2,539


    (Constant)


    2,121


    Unstandardized coefficients (Нестандартизированные коэффициенты)


    Здесь речь идёт о нестандартизированных коэффициентах — это множители при заданных значениях переменных, входящих в дискриминантную функцию. Стандартизированные коэффициенты, которые приводились ранее, основаны на стандартизированных значениях переменных, получаемых с помощью z-преобразования.


    Далее приводятся средние значения дискриминантной функции в обеих группах:


    Functions at Group Centroids 


    (Функции групповых центроидов)


    Outcome (Исход)


    Function (функция)


    1


    gestorben (Скончался)


    ,522


    ueberlebt (Выжил)


    -,483


    Unstandardized canonical discriminant functions evaluated at group means (Heстандартизированные канонические дискриминантные функции, которые оцениваются по групповым средним значениям).


    Далее следует таблица, в которой построчно для каждого наблюдения приводится информация о значении дискриминантной функции и определяется принадлежность к одной из двух групп. Мы здесь ограничились первыми двадцатью наблюдениями.


    Группа, к которой фактически принадлежит наблюдение, отображается в колонке с именем "Actual Group" (Фактическая группа). В следующих трёх колонках содержится информация о прогнозе принадлежности к группе, сделанном на основании значения дискриминантной функции. Сначала приводится прогнозируемая принадлежность к группе; если она не соответствует фактической принадлежности, то в колонке "Predicted Group" (Прогнозируемая группа) отображаются две звёздочки (**).


    Casewise Statistics 


    (Статистики для наблюдений)



    Case Number (Поряд-ковый номер случая)


    Actual Group (Факти-ческая груп-па)


    Highest Group (Старшая группа)


    Second Highest Group (Вторая по старшинству группа)


    Discri-minant Scores (Значе-ния дискри-ми- нант-ности)


    Predic-ted Group (Прогно-зируе-мая груп-па)


    P(D>d G=g)


    P(G=g | D=d)


    Squared Maha-lanobis Distance to Centroid (Квадрат рас-стояния Махапа-нобиса до центро-ида)


    Group (Груп-па)


    P(G=g |D=d)


    Squared Maha-lanobis Distance to Centroid (Квадрат рас-стояния Маха-ланобиса до центро-ида)


    Function 1 (Фун-кция 1)


    р


    df


    1


    Origi-nal (Перво-нача-льно)


    1


    0


    1"


    ,727


    1


    ,702


    ,122


    0


    ,298


    1,834


    -.833


    2


    1


    0"


    ,116


    1


    ,889


    2,464


    1


    ,111


    6,631


    2,092


    3


    0


    1"


    ,842


    1


    ,576


    ,040


    0


    ,424


    ,650


    -,284


    4


    1


    1


    ,310


    1


    ,821


    1,032


    0


    ,179


    4,085


    -1,499


    5


    1


    1


    ,495


    1


    ,767


    ,465


    0


    ,233


    2,846


    -1,165


    6


    1


    1


    ,453


    1


    ,779


    ,563


    0


    ,221


    3,081


    -1,234


    7


    0


    1"


    ,635


    1


    ,728


    ,225


    0


    ,272


    2,189


    -,958


    8


    1


    1


    ,549


    1


    ,752


    ,359


    0


    ,248


    2,575


    -1,083


    9


    1


    1


    ,880


    1


    ,587


    ,023


    0


    ,413


    ,729


    -,332


    10


    0


    1"


    ,952


    1


    ,609


    ,004


    0


    ,391


    ,893


    -,423


    11


    0


    0


    ,026


    1


    ,940


    4,980


    1


    ,060


    10,477


    2,753


    12


    1


    0"


    ,618


    1


    ,501


    ,249


    1


    ,499


    ,256


    ,023


    13


    0


    0


    ,930


    1


    ,603


    ,008


    1


    ,397


    ,841


    ,434


    14


    1


    1


    ,817


    1


    ,676


    ,053


    0


    ,324


    1,528


    -,714


    15


    1


    1


    ,958


    1


    ,611


    ,003


    0


    ,389


    ,908


    -,431


    16


    0


    1"


    ,685


    1


    ,524


    ,165


    0


    ,476


    ,359


    -,077


    17


    1


    1


    ,388


    1


    ,798


    ,745


    0


    ,202


    3,492


    -1,347


    18


    0


    1"


    ,763


    1


    ,550


    ,091


    0


    ,450


    ,496


    -,182


    19


    1


    1


    ,748


    1


    ,696


    ,103


    0


    ,304


    1,760


    -,805


    20


    0


    0


    ,308


    1


    ,822


    1,037


    1


    ,178


    4,095


    1,540


    ** Мisciassiriea case (Неправильно классифицированное наблюдение;


    Далее выводятся две вероятности. Вторая из этих двух вероятностей, обозначенная P(G=g|D=d), является мерой принадлежности к одной из двух групп. Это вероятность того, что некоторой наблюдение принадлежит к прогнозированной группе, которая рассчитывается на основе подстановки в дискриминантную функцию значений набора переменных, соответствующих данному наблюдению. Вероятность того, что данный наблюдение принадлежит к другой группе получается вычитанием меры принадлежности из 1. Она приводится в колонке с названием "Second Highest Group" (Вторая по старшинству группа). Если мы рассмотрим первый наблюдение, то здесь вероятность того, что данный пациент выживет, рассчитанная на основании значении исходных переменных, равна 0,702 (в действительности он скончался).


    Первую из двух рассмотренных вероятностей, получившую название Р (D>d|G=g), называют ещё и условной вероятностью. Это вероятность того, что пациент, принадлежащий к прогнозируемой группе, действительно имеет значения параметров, соответствующие дискриминантной функции или некоторые другие крайние значения.


    В другой колонке приводится квадрат расстояния Махаланобиса до центроида (среднего значения группы значений дискриминантной функции). В правой колонке таблицы приводится соответствующее значение дискриминантной функции. Распределение значения дискриминантной функции отдельно по группам изображается на двух отдельных гистограммах.


    Можно заметить, что значения дискриминантной функции для первой группы (скончался) смещены вправо, а значения второй группы (выжил) — влево, что однако свидетельствует об очень сильном смешении.


    В завершении приводится классификационная таблица с указанием достигнутой точности прогнозирования. Значение этой точности равно 68,7 %, что является неудовлетворительным:



    Рис. 18.2: Распределение значений дискриминантной функции для группы «скончался»



    Рис. 18.3: Распределение значений дискриминантной функции для группы «выжил»


    Classification Results 3 


    (Классификационные результаты)


    Outcome (Исход)


    Predicted Group Membership (Предсказанная принадлежность к одной из групп)


    Total (Сум-ма)


    gestorben (Сконча-лся)


    ueberlebt (Выжил)


    Original Перво-начально)


    Count (Колич-ество)


    gestorben (сконча-лся


    38


    25


    63


    ueberlebt (Выжил)


    16


    52


    68


    %


    gestorben (сконча-лся


    60,3


    39,7


    100,0


    ueberlebt (Выжил)


    23,5


    76,5


    100,0


    а. 68,7% of original grouped cases correctly classified (68,7 % первоначально сгруппированных наблюдений были классифицированы корректно).


    При применении метода логарифмической регрессии (см. гл. 16.4) результат получился немного лучше (доля корректного прогноза 70,99 %).


    Для случая, когда пациенту мужского пола, 25 лет, ростом 184 см искусственное дыхание делали на протяжении 5 часов, при концентрации кислорода равной 0,7 и интенсивности соответствующей значению 10, получается следующее значение дискриминантной функции


    d = 2,121 + 0,033*10 + 0,04*25 + 0,06*5 + 0,133*1-0,041*184 + 2,539*0,7 = -1,883


    Опираясь на распределение значений дискриминантной функции, этого пациента можно отнести к группе выживших.


    При выполнении дискриминантного анализа, как и для других многомерных процедур, можно применять и пошаговый образ действий, который как раз и рекомендуется при наличии большого количества независимых переменных. Этот метод похож на многомерный регрессионный анализ, однако переменные при проведении дискриминантного анализа выбираются по другим критериям.


    Рассчитаем ещё раз наш пример, но уже с применением пошагового метода.

    •  В исходном диалоговом окне дискриминантного анализа активируйте опцию Use stepwse method (Использовать пошаговый метод).

    •  Щёлкните на кнопке Method... (Метод)

    Откроется диалоговое окно Discriminant Analysis: Step-wise Method (Дискриминантаый анализ: Пошаговый метод).

    •  Выберите метод, при помощи которого будет отобрана та переменная, которая увеличивает расстояние Махаланобиса (Mahalanobis) между двумя группами. Эта дистанционная мера базируется на евклидовых расстояниях между нормализованными значениями выборок с учётом корреляции соответствующих переменных.

    •  Чтобы искусственно не раздувать объём выводимых результатов, в этот раз через кнопку Classify... (Классифицировать), активируйте опцию Summary table (Сводная таблица).

    В рассматриваемом случае мы отказываемся от графического представления результатов. В анализ по очереди будут включены переменные: bzeit, gr, alter и kob; это те же самые переменные, которые использовались при применении метода логистической регрессии. По заключительной классификационной таблице можно сделать вывод о том, что в результате отбрасывания неподходящих переменных доля попаданий слегка выросла. Значение надежности прогноза составило 70,2 %.


    Для проведения дискриминантного анализа Вы можете использовать и пример с двумя диагностическими тестами для обнаружения карциномы мочевого пузыря, рассмотренный в главе 16.4. Здесь можно получить более чёткое разделение двух групп (здоров — болен). Точность прогнозирования здесь составляет 82,2 %.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    18.2 Пример из области социологии

    18.2 Пример из области социологии


    В своём исследовании "Культурный прорыв. Изменение ценностей в западном мире" (см. дополнительную литературу) Рональд Инглехарт (Ronald Inglehart) приводит тезис, что в более зрелых возрастных группах значимо большее количество человек высказались в пользу материальных ценностей (см. гл. 8.4.2). Среди младших поколений, согласно Инглехарту, растёт доля постматериалистов. Склонность опрошенных к постматериалистическим ценностям зависит от их образования и профессиональной квалификации. Чем выше образование и профессиональная квалификация, тем выше склонность к постматериалистическим ценностям. Значение имеет также и социально-экономический статус отца; согласно мнению Инглехарта, чем он выше, тем значительней доля постматериалистов. При помощи дискриминантного анализа мы проверим эту теорему смены ценностей, сформулированную американским политологом.

    •  Откройте в редакторе данных файл postmat.sav.

    Переменные, которые вы сможете найти в этом файле, приводятся в нижеследующей таблице.


    Имя переменной


    Значение


    ingMnd


    Индекс Инглехарта


    Ценности:


    1 Постматериалисты


    2 Постматериалисты смешанного типа


    3 Материалисты смешанного типа


    4 Материалисты


    5 Не могу дать ответ


    6 Нет данных


    statpaps


    Социально-экономический статус отца (индекс)


    Значения:


    1 Низкий


    5 Высокий


    8 Формируется в данный момент (отсутствующее значение)


    9 Безработный, в заключении, умер, пенсионер и т.д. (отсутствующее


    значение)


    schule


    Уровень образования опрашиваемых


    Значения:


    1 Без образования


    2 Начальная школа


    3 Незаконченное среднее


    4 Среднее


    alter


    Возраст опрашиваемых


    Значения:


    1 18 до 29 лет


    2 30 до 44 лет


    3 45 до 59 лет


    4 60 до 74 лет


    5 75 до 88 лет


    6 89 и старше


    9 Не указан (отсутствующее значение)


    ausbild


    Профессиональное образование опрашиваемых Значения: 0 Образование отсутствует (отсутствующее значение) 1 Краткосрочное образование 2 Ученик 3 Мастер/техник 4 Высшее образование


    Прежде чем преступить к дискриминантному анализу, преобразуем сначала переменную ingl_ind к дихотомическому типу. Значения признаков: 1 ("Постматериалисты") и 2 ("Постматериалисты смешанного типа") должны бить включены в новое значение признака 1 ("Постматериалистические типы") переменной ingMnd, а значения признаков: 3 ("Материалисты смешанного типа") и 4 ("Материалисты") в новое значение признака 2-"Материалистические типы".

    •  Для этого в редакторе синтаксиса введите следующие команды:

     RECODE ingl_ind (1,2 = 1) (3,4 = 2) 
     INTO ingl_dic. VARIABLE LABELS 
      ingl_dic = "Inglehart-Index, dichotom". 
      VALUE LABELS  
     ingl_dic 1 "Postmat. Typen" 
     2 "Materialist.Typen".  
     EXECUTE.
    •  Вы можете также загрузить в редактор синтаксиса и файл ingledic.sps, в котором находятся эти команды.

    •  Пометьте команды и запустите программу щелчком на кнопке Run Current (Выполнить текущие команды).

    В редакторе данных появится новая переменная ingl_dic. Теперь проведите дискриминантный анализ.

    •  Выберите в меню опции Analyze (Анализ) Classify (Классифицировать) Discriminant... (Дискриминантный анализ)

    •  Переменную ingl_dic поместите в поле групповых переменных.

    •  Щёлкните на выключателе Define Range... (Определить область) и в качестве минимального значения введите 1, а в качестве максимального значения 2.

    •  Переменные statpaps, schule, alter и ausbild поместите в список Independents (Независимые переменные). Оставьте метод ввода переменных Enter independents together (Независимые переменные вводить одновременно), установленный по умолчанию.

    Диалоговое окно Discriminant Analysis (Дискриминантный анализ) должно теперь выглядеть так, как показано на рисунке 18.4.



    Рис. 18.4: Диалоговое окно Discriminant Analysis (Дискриминантный анализ).

    •  Щёлкните по выключателю Statistics... (Статистики)

    Откроется диалоговое окно Discriminant Analysis: Statistics (Дискриминантный анализ: Статистики) (см. рис. 18.5).



    Рис. 18.5: Диалоговое окно Discriminant Analysis: Statistics (Дискриминантный анализ: Статистики)

    •  Активируйте опции: Means (Средние значения), Univariate ANOVAs (Одномерные тесты AN OVA), Unstandardized Func-tion Coefficients (He стандартизированные коэффициенты функции) и Within-groops Correlation Matrice (Корреляционная матрица внутри группы).

    •  Подтвердите нажатием Continue (Далее).

    •  Щёлкните на выключателе Classify... (Классифицировать). Откроется диалоговое окно Discriminant Analysis: Classification (Дискриминантный анализ: Классификация) (см. рис. 18.6).


    Рис. 18.6: Диалоговое окно Discriminant Analysis: Classification (Дискриминантный анализ: Классификация)

    •  Сделайте здесь запрос на Summary table (Сводную таблицу).

    •  Щёлкните на выключателе Save... (Сохранить). Откроется диалоговое окно Discriminant Analysis: Save (Дискриминантный анализ: Сохранить) (см. рис. 18.7).


    Рис. 18.7: Диалоговое окно Discriminant Analysis: Save (Дискриминантный анализ: Сохранить)


    Видно, что в 10 версии появилась возможность сохранения информации о модели в так называемом, XML-файле (см. примечания к рис. 16.3).

    •  Активируйте вывод Predicted group membership (Прогнозируемой принадлежности к группе), Discriminant scores (Значений дисриминантной функции) и Probabilities of group membership (Вероятностей принадлежности к группе).

    •  Подтвердите нажатием Continue (Далее) и затем ОК.

    В окне просмотра появится сначала обзор действительных и пропущенных значений:


    Analysis Case Processing Summary (Анализ обработанных наблюдений)


    Unweighted Cases (He взвешенные случаи)


    N


    Percent (Процент)


    Valid (Действительные)


    2200


    71,9


    Excluded (Исключенные)


    Missing or out-of-range group codes (Отсутствующие или находящиеся за пределами допустимой области кодировки принадлежности к группе)


    19


    ,6


    At least one missing discriminating variable (По меньшей мере одна отсутствующая дискриминационная переменная)


    816


    26,7


    Both missing or out-of-range group codes and at least one missing discriminating variable (Обе кодировки принадлежности к группе отсутствуют или находятся за пределами допустимой области, или по меньшей мере одна отсутствующая дискриминационная переменная)


    23


    ,8


    Total (Общее количество исключённых)


    858


    28,1


    Total (Общее количество случаев)


    3058


    100,0


    В общей сложности 858 наблюдений из 3058, находящихся в файле postmat.sav, были исключены из анализа из-за отсутствия значения переменной ingl_dic или отсутствия значений одной из дискриминационных переменных. Таким образом анализ проводился для 2200 наблюдений. Далее приводятся средние значения, стандартные отклонения и количество наблюдений для всех переменных из обеих групп и для каждой группы в отдельности.


    По средним значениям уже заметно, что для постматериалистических типов характерны: более высокий социально-экономический статус отца (2,8148 по сравнению с 2,3904), более высокое образование (2,9853 по сравнению с 2,5248) и принадлежность к младшей возрастной группе (2,1842 по сравнению с 2,8151).


    Group Statistics 


    (Статистики для групп)


    INGL_DIC (Индекс Ингпехарта, дихото-мический)



    Mean (сред-нее значе-ние)


    Std. Deviation (Станда-ртное отклоне-ние)


    Valid N (listwise) (Действительные значения (по списку))


    Unwei-ghted (Не взвеше-нные)


    Weigh-ted (Взвеше-нные)


    1,00 (Пост-материа-листический тип)


    SES-lndex des Vaters (социально-экономи-ческий статус отца)


    2,8148


    1,1718


    1091


    1091,000


    Schulabschluss (Образование)


    2,9853


    ,8194


    1091


    1091,000


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст, опрошен-ного(ой), разбит на категории)


    2,1842


    1,0887


    1091


    1091,000


    Berufsaus-bildung (Профес-сиональное образо-вание)


    2,1888


    1,1562


    1091


    1091,000


    2,00 (Материа-листический тип)


    SES-lndex des Vaters (социально-экономи-ческий статус отца)


    2,3904


    1,0407


    1109


    1109,000


    Scnulabschluss (Образование)


    2,5248


    ,7627


    1109


    1109,000


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст ,опрошен-ного(ой), разбит на категории)


    2,8151


    1,2111


    1109


    1109,000


    Berufsa-usbildung (Профес-сиональное образование)


    1,8792


    1,0249


    1109


    1109,000


    Total (Сумма)


    SES-lndex des Vaters (социально-экономи-ческий статус отца)


    2,6009


    1,1275


    2200


    2200,000


    Schulabschluss (Образование)


    2,7532


    ,8240


    2200


    2200,000


    ALTER, BEFRAGTE<R>, KATEGORI-SIERT (Возраст, опрошен-ного(ой), разбит на категории)


    2,5023


    1,1942


    2200


    2200,000


    Berufsa-usbildung (Профес-сиональное образование)


    2,0327


    1,1027


    2200


    2200,000


    Затем проводится тест на значимость различия между переменными, относящимися к обеим группам, то есть выясняется присутствуют ли в них разделяющие (дискриминирующие) особенности, позволяющие судить об отношении к одной из двух групп (постматериалисты — материалисты).


    Tests of Equality of Group Means (Тест равенства групповых средних значений)


    Wilks1 Lambda (Лямбда Уилкса)


    F


    df1


    df2


    Sig. (Значимость)


    SES-lndex des Vaters (социально-экономический статус отца)


    ,965


    80,746


    1


    2198


    ,000


    Schulabschluss (Образование)


    ,922


    186,281


    1


    2198


    ,000


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст, опрошенного(ых), разбит на категории)


    ,930


    164,951


    1


    2198


    ,000


    Berufsausbildung (Профессиональное образование)


    ,980


    44,222


    1


    2198


    ,000


    Как следует из колонки значимости, по всем переменным наблюдается значительное различие между группами (р < 0,001).


    Далее приводится корреляционная матрица между всеми переменными, причём коэффициенты были рассчитаны для обеих групп:


    Pooled Within-Groups Matrices (Объединённые матрицы внутри групп)

     

    SES-lndex des Vaters (социально- экономи-ческий статус отца)


    Schulab-schluss (Образо-вание)


    ALTER, BEFRAG -TE<R>, KATEGO-RISIERT (Возраст, опрошен-ного(ой), разбит на категории)


    Berufsau-sbildung (Профес- сиона-льное образо-вание)


    Corre-lation (Корре-ляция)


    SES-lndex des Vaters (социально-экономи-ческий статус отца)


    1,000


    ,327


    -,033


    ,137


    Schula-bschluss (Образо-вание)


    ,327


    1,000


    -,275


    ,377


    ALTER, BEFRA-GTE<R>, KATEGO-RISIERT (Возраст, опрошен-ного(ых), разбит на категории)


    -,033


    -,275


    1,000


    ,018


    Berufsa-usbildung (Профес-сиональное образо-вание)


    ,137


    ,377


    ,018


    1,000


    Прежде всего, здесь очень заметна корреляция между переменными schule и statpas и между переменными ausbild и schule. Чем выше социально-экономический статус отца, тем выше школьное образование опрашиваемого; чем выше его школьное образование, тем выше и профессиональное образование.


    Далее следует анализ коэффициентов дискриминантной функции. Корреляционный коэффициент между рассчитанными значениями дискриминантной функции и реальной принадлежностью к группе, равный 0,353, является неудовлетворительным:


    Eigenvalues (Собственные значения)


    Function (Функция)


    Eigenvalue (Собствен-ное значение)


    % of Variance (% диспе-рсии)


    Cumulative % (Сово-купный %)


    Canonical Correlation (Канони-ческая корре-ляция)


    1


    ,142а


    100,0


    100,0


    ,353


    a. First 1 canonical discriminant functions were used in the analysis (Первые 1 канонические дискриминантные функции будут применяться в анализе).


    Wilks' Lambda (Лямбда Уилкса)


    Test of Function(s) Wilks' Lambda (Тест функции (и)) (Лямбда Уилкса)


    Chi-square (Хи-квадрат)


    df


    Sig. (Значимость)


    1 ,875


    292,431


    4


    ,000


    Тест, проведенный с помощью критерия "Лямбда Уилкса" (k), на предмет, значимо ли различаются между собой средние значения дискриминантной функции в обеих группах, показал очень значимый результат (значение р < 0,001).


    Затем приводятся стандартизированные коэффициенты дискриминантной функции и их корреляция с используемыми переменными:


    Standardized Canonical Discriminant Function Coefficients 


    (Стандартизиро-ванные канонические коэффициенты дискриминантной функции)


    Function (Функция)


    1


    SES-lndex des Vaters (социально-экономический статус отца)


    ,321


    Schulabschluss (Образование)


    ,434


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст, опрошенного(ой), разбит на категории)


    -,599


    Berufsausbildung (Профессиональное образование)


    ,179


    Structure Matrix


     (Структурная матрица)


    Function (Функция)


    1


    Schulabschluss (Образование)


    ,771


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст, опрошенного(ой), разбит на категории)


    -,726


    SES-lndex des Vaters (социально-экономический статус отца)


    ,508


    Berufsausbildung (Профессиональное образование)


    ,376


    Pooled within-groups correlations between discriminating variables and standardized canonical discriminant functions (Объединённые корреляции внутри групп между дискриминантными переменными и стандартизированными каноническими дискриминант-ными функциями)


    Variables ordered by absolute size of correlation within function (Переменные расположены соответственно величине их абсолютных корреляционных показателей).


    После этого приводятся нестандартизированные коэффициенты дискриминантной функции и средние значения дискриминантной функции в обеих группах:


    Canonical Discriminant Function Coefficients 


    (Канонические коэффициенты дискриминантной функции)


    Function (Функция)


    1


    SES-lndex des Vaters (социально-экономический статус отца)


    ,290


    Schulabschluss (Образование)


    ,549


    ALTER, BEFRAGTE<R>, KATEGORISIERT (Возраст, опрошенного(ой), разбит на категории)


    -,520


    Berufsausbildung (Профессиональное образование)


    ,164


    (Constant) (Постоянно)


    -1,297


    Unstandardized coefficients (нестандартизированные коеффициенты)


    Functions at Group Centroids (Функции для групповых центроидов)


    INGL DIC


    Function (Функция)

    1

    1 ,00 (Постматериалистический тип)


    ,380


    2,00 (Материалистический тип)


    -.374


    Unstandardized canonical discriminant functions evaluated at group means (Нестандартизированные канонические дискриминантные функции, оценка которых происходит относительно средних значений групп).


    В данном случае мы отказались от вывода очень длинной таблицы, в которой для каждого наблюдения построчно, приводится информация о значении дискриминантной функции и принадлежности к одной из двух групп.


    В заключении приводится классификационная таблица с указанием точности попадания прогнозов:


    Classification Resultsа 


    (Классификационные результаты)

     

    INGL_DIC (Индекс Инглехарта, дихото-мический)


    Predicted Group Membership (Прогнозируемая принадлежность к группе)


    Total (Сум-ма)


    1,00 (Постматери-алисти-ческий тип)


    2,00 (Материа-листи-ческий тип)


    Original (Перво-начально)


    Count (Коли-чество)


    1 ,00 (Пост-материа-листи-ческий тип)


    710


    381


    1091


    2,00 (Материа-листический тип)


    410


    699


    1109


    Ungrouped cases (He сгруп-пирован-ные наблю-дения)


    7


    12


    19


    %


    1 ,00 (Постматериа-листический тип)


    65,1


    34,9


    100,0


    2,00 (Материа-листи-ческий тип)


    37,0


    63,0


    100,0


    Ungrouped cases (He сгруп-пирован-ные наблю-дения)


    36,8


    63,2


    100,0


    а. 64,0% of original grouped cases correctly classified (64 % наблюдений, первоначально разнесённых по группам, были классифицированы корректно).


    Правая колонка таблицы ("Total" (Сумма)) указывает на общее количество наблюдений, которые фактически относятся к соответствующим группам. К группе постматериалистических типов относится 1091 наблюдение, а к группе материалистических типов 1109. Обе колонки, объединенные общим наименованием ("Predicted Group Membership" (Прогнозируемая принадлежность к группе)), указывают на фактическое количество наблюдений, относящихся к каждой из групп. Первая колонка указывает на количество наблюдений, которые были отнесены к первой группе. Из 1091 постматериалистическйх наблюдений корректно определены были 710, это соответствует 65,1 % всех наблюдений. 381 наблюдение было по ошибке отнесено ко 2 группе, что соответствует 34,9 % всех наблюдений. Из 1109 материалистических наблюдений по ошибке к группе 1 были отнесены 410, что соответствует 37,0 %. 699 наблюдений были корректно отнесены к группе 2, что составило 63 %. Строка "Ungrouped cases" (Несгруппированные наблюдения) содержит наблюдения, которые не соответствуют ни одной из групп. Хотя эти наблюдения и не учитываются при расчёте дискриминантной функции, значение функции для них всё равно вычисляется. Из 19 наблюдений, для которых отсутствуют данные о принадлежности к какой-либо группе, 7 были отнесены к постматериалистическим типам, а 12 к материалистическим. В строке под таблицей приводится итоговый результат. 64 % наблюдений были классифицированы корректно. Так как даже при чисто случайном отнесении некоторого наблюдения к одной из двух имеющихся групп, корректность классификации данного наблюдения составила бы 50 %, то 64 %-ную точность прогноза следует рассматривать как довольно умеренный результат. Такой неудовлетворительный результат можно попытаться объяснить тем, что в обе группы входили смешанные типы, которые тяжелее классифицировать, нежели чистые типы. Проверим это предположение путём повторного проведения расчёта, но уже с учётом только чистых типов.

    •  Выберите в меню Data (Данные) Select Cases... (Выбрать наблюдения)

    •  Щёлкните на опции If condition is satisfied (Если выполняется условие) и затем на выключателе If... (Если).

    •  В редакторе условий введите следующее условие: 

    ing1_ind = 1 OR ing1_ind = 4

    •  Подтвердите нажатием Continue (Далее) и затем ОК.

    •  В диалоговом окне Discriminant Analysis (Дискриминантный анализ) переменную ingl_ind (не ingl_dic!) поместите в поле для групповых переменных. В качестве границ области изменения задать значения 1 и 4.

    •  В список независимых переменных поместите переменные statpaps, schule, alter и ausbild.

    •  Дополнительные установки под выключателями Statistics... (Статистики), Classify... (Классифицировать) и Save... (Сохранить) произведите так, как было описано ранее.

    Вы получите следующую классификационную таблицу:


    Classification Results 


    (Результаты классификации)


    INGLEHART-INDEX (Индекс Инглехарта, дихото-мический)


    Predicted Group Membership (Прогнозируемая принадлежность к группе


    Total (Сумма)


    POSTMATE-RIALISTEN (Постмате-риалисты)


    MATERI-ALISTEN (Матери-алисты)


    Original (Перво-начально)


    Count (Коли-чество)


    POSTMATE-RIALISTEN (Постмате-риалисты)


    409


    109


    518


    MATERI-ALISTEN (Матери-алисты)


    133


    297


    430


    %


    POSTMATE-RIALISTEN (Постмате-риалисты)


    79,0


    21,0


    100,0


    MATERI-ALISTEN (Матери-алисты)


    30,9


    69,1


    100,0


    а. 74,5% of original grouped cases correctly classified (74,5 % наблюдений, первоначально разнесённых по группам, были классифицированы корректно).


    К группе постматериалистов относится 518 наблюдений. 409 наблюдений (79 %) были спрогнозированы корректно, а 109 (21,0 %) по ошибке отнесены к группе 4 ("чистые материалисты"). В группе чистых материалистов насчитывается 403 наблюдения. 297 наблюдений (69,1 %) были определены корректно, а 133 (30,9 %) по ошибке были отнесены к группе 1 ("чистые постматериалисты"). Конечным результатом является корректная идентификация наблюдений, равная 74,5 %. Этот показатель значительно выше предыдущего и может быть расценен как приемлемый.

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    18.3 Пример из области биологии

    18.3 Пример из области биологии


    Дискриминантный анализ очень часто применяется для обработки данных из области биологии. В следующем типичном примере для некоторого количества индивидуумов принадлежность к группе уже известна, на основании чего и строится дискриминантная функция. Далее она используется для того, чтобы оценить принадлежность к определенной группе тех индивидуумов, для которых она ещё не известна.


    В файле vogel.sav хранятся данные о половой принадлежности, длине крыла, длине клюва, размере головы, длине лап и весе 245 птиц определённого вида. Причём пол смогли определить только для 51 особи. Кодировка пола соответствует 1 = мужской и 2 = женский; отсутствие данных кодируется 9.


    Если для перечисленных параметров Вы рассчитаете средние значения для самцов и самок, то для самок получите более высокие показатели. Исходя из этого, при помощи дискриминантного анализа можно попытаться определить пол тех особей, для которых этого нельзя было сделать ранее.

    •  Откройте файл vogel.sav.

    •  В диалоговом окне Discriminant Analysis (Дискриминантный анализ) переменной geschl (Пол) присвойте статус групповой переменной с пределами от 1 до 2, а переменным fluegel (Длина крыла), schnl (Длина клюва), kopfl (Размер головы), fuss (Длина лап) и gew (Вес) — статус независимых переменных. Выберите пошаговый метод.

    •  В диалоговом окне Discriminant Analysis: Classify (Дискриминантный анализ: Классифицировать) активируйте Casewise results (Результаты для отдельных наблюдений) с ограничением в 40 наблюдений и Summary table (Сводная таблица).

    •  Через выключатель Save... (Сохранить) при помощи активирования опций Predicted group membership (Прогнозируемая принадлежности к группе) и Probabilities of group membership (Вероятности принадлежности к группе) затребуйте генерирование соответствующих переменных.

    Из всех результатов, приводимых в окне просмотра, в книге рассматриваются только статистики для каждого наблюдения. По классификационной таблице видно, что для 51 наблюдения с заранее известным полом 44 раза, т.е. в 86,3 % наблюдений, пол был спрогнозирован верно (см. следующую таблицу).


    Если мы рассмотрим наблюдение 8, то здесь пол известен — женский и в результате прогноза получается женский пол, а вот для наблюдения 30 пол известен как мужской, но прогнозируется как женский. Наблюдения с нераспознанным полом приводятся в таблице как "ungrouped" (не группированные).


    Для наблюдения 1, для которого пол оказался неизвестным, он прогнозируется как женский. Значение вероятности прогнозирования, 0,990, указывается в колонке "P(G=g | D=d)" под заголовком "Highest Group" (Старшая группа). Менее достоверным является прогноз пола для наблюдения 10, здесь вероятность прогнозирования составляет только 0,721.


    Casewise Statistics 


    (Статистики для наблюдений)

     

    Case Number (Номер случая)


    Actual Group (Факти-ческая группа)


    Highest Group (Старшая группа)


    Second Highest Group (Вторая по старшинству группа)


    Discri-minant Scores (Значе-ния диск-рими- нантной фун-кции)


    Predicted Group (Прог-нози- руемая группа)


    P(D>d |


    e=g)


    P(G=9 I D=d)


    Squared Ma-hala-nobis Distance to Cent-raid (Квадрат рас-стояния Маха-ланобиса до цент-роида)


    Group (Груп-па)


    P(G=g |D=d)


    Squared Ма-halanobis Distance to Centraid (Квадрат рас-стояния Маха-ланобиса до центро-ида)


    Fun-ction 1 (Фун-кция 1 )


    P


    df


    Original (Пер- вона- чаль -но)


    1


    ungrouped (не груп-пирова-нный)


    2


    ,222


    1


    ,990


    1,489


    1


    ,010


    10,679


    2,304


    2


    ungrouped (не груп-пирова-нный)


    2


    ,063


    1


    ,997


    3,453


    1


    ,003


    15,254


    2,942


    3


    ungrouped (не груп-пирова-нный)


    2


    ,064


    1


    ,997


    3,433


    1


    ,003


    15,213


    2,937


    4


    ungrouped (не груп-пирова-нный)


    2


    ,245


    1


    ,989


    1,353


    1


    ,011


    10,307


    2,247


    5


    ungrouped (не груп-пирова-нный)


    2


    ,126


    1


    ,995


    2,338


    1


    ,005


    12,792


    2,613


    6


    ungrouped (не груп-пирова-нный)


    2


    ,319


    1


    ,984


    ,995


    1


    ,016


    9,271


    2,081


    7


    ungrouped (не груп-пирова-нный)


    2


    ,485


    1


    ,971


    ,489


    1


    ,029


    7,543


    1,783


    8


    2


    2


    ,102


    1


    ,996


    2,673


    1


    ,004


    13,561


    2,719


    9


    ungrouped (не груп-пирова-нный)


    2


    ,387


    1


    ,980


    ,748


    1


    ,020


    8,482


    1,949


    10


    ungrouped (не группирова-нный)


    2


    ,576


    1


    ,721


    ,313


    1


    ,279


    2,213


    ,524


    11


    ungrouped (не груп-пирова-нный)


    2


    ,651


    1


    ,954


    ,205


    1


    ,046


    6,248


    1,536


    12


    ungrouped (не груп-пирова-нный)


    2


    ,140


    1


    ,994


    2,177


    1


    ,006


    12,411


    2,559


    13


    ungrouped (не груп-пирова-нный)


    2


    ,435


    1


    ,976


    ,609


    1


    ,024


    7,995


    1,864


    14


    ungrouped (не группиро-ванный)


    2


    ,471


    1


    ,973


    ,519


    1


    ,027


    7,662


    1,804


    15


    ungrouped (не группиро-ванный)


    2


    ,764


    1


    ,938


    ,090


    1


    ,062


    5,510


    1,384


    16


    ungrouped (не группиро-ванный)


    2


    ,481


    1


    ,972


    ,497


    1


    ,028


    7,576


    1,789


    17


    ungrouped (не груп-пирова-нный)


    2


    ,172


    1


    ,993


    1,868


    1


    ,007


    11,658


    2,451


    18


    2


    2


    ,399


    1


    ,979


    ,712


    1


    ,021


    8,359


    1,928


    19


    ungrouped (не груп-пирова-нный)


    2


    ,705


    1


    ,946


    ,143


    1


    ,054


    5,884


    1,462


    20


    2


    2


    ,969


    1


    ,898


    ,002


    1


    ,102


    4,355


    1,123


    21


    2


    2


    ,249


    1


    ,989


    1,328


    1


    ,011


    10,238


    _ 2,236


    22


    ungrouped (не груп-пиров-анный)


    2


    ,121


    1


    ,995


    2,407


    1


    ,005


    12,953


    2,636


    23


    2


    2


    ,071


    1


    ,997


    3,263


    1


    ,003


    14,853


    2,890


    24


    ungrouped (не груп-пирова-нный)


    2


    ,367


    1


    ,981


    ,815


    1


    ,019


    8,704


    1,987


    25


    ungrouped (не груп-пиров-анный)


    2


    ,880


    1


    ,857


    ,023


    1


    ,143


    3,598


    ,933


    26


    ungrouped (не груп-пирова-нный)


    2


    ,537


    1


    ,966


    ,382


    1


    ,034


    7,103


    1,702


    27


    ungrouped (не группиро-ванный)


    1


    ,640


    1


    ,955


    ,218


    2


    ,045


    6,323


    -1,431


    28


    2


    2


    ,744


    1


    ,806


    ,107


    1


    ,194


    2,960


    ,757


    29


    ungrouped (не груп-пирова-нный)


    2


    ,969


    1


    ,883


    ,001


    1


    ,117


    4,035


    1,045


    30


    1


    2"


    ,625


    1


    ,749


    ,239


    1


    ,251


    2,428


    ,595



    31


    ungrouped (не груп-пирова-нный)


    2


    ,646


    1


    ,760


    ,211


    1


    ,240


    2,521


    ,624


    32


    2


    2


    ,173


    1


    ,993


    1,860


    1


    ,007


    11,636


    2,448


    33


    1


    2"


    ,504


    1


    ,970


    ,447


    1


    ,030


    7,378


    1,753


    34


    ungrouped (не груп-пирова-нный)


    2


    ,544


    1


    ,966


    ,368


    1


    ,034


    7,046


    1,691


    35


    ungrouped (не груп-пирова-нный)


    2


    ,618


    1


    ,958


    ,248


    1


    ,042


    6,480


    1,582


    36


    ungrouped (не груп-пирова-нный)


    2


    ,727


    1


    ,943


    ,122


    1


    ,057


    5,744


    1,433


    37


    2


    2


    ,458


    1


    ,974


    ,551


    1


    ,026


    7,781


    1,826


    38


    2


    2


    ,362


    1


    ,981


    ,829


    1


    ,019


    8,750


    1,995


    39


    2


    2


    ,814


    1


    ,929


    ,055


    1


    ,071


    5,211


    1,319


    40


    ungrouped (не груп-пирова-нный)


    2


    ,812


    1


    ,930


    ,057


    1


    ,070


    5,222

    1,322

    ** Misclassified case (** - Неверно классифицированный случай)


    Для того, чтобы хотя бы частично сократить количество ошибочных значений для переменной пола, при анализе вы можете применять прогнозируемую групповую принадлежность только в тех случаях, для которых вероятность прогнозирования принимает некоторое минимально допустимое значение, к примеру, 0,9.

     IF (dis_1 = 1 and disl_1 >= 0,9)  
      geschl=1
     . IF (dis_1 = 2 and dis2_1 >= 0,9)  
     geschl=2. 
      EXECUTE.

    Таким образом, в используемом примере можно присвоить половой показатель ещё 90-а птицам. Если вы снизите минимально допустимое значение вероятности прогнозирования, то это число станет ещё больше.


    К файлу были добавлены три новые переменные:


    dis_1: Прогнозируемая группа


    disl_1: Вероятность принадлежности к группе 1


    dis2_1: Вероятность принадлежности к группе 2.

    18.4 Пример из области биологии (три группы)

    18.4 Пример из области биологии (три группы)


    В предыдущих примерах дискриминантный анализ всегда проводился при наличии лишь двух групп. В этой главе рассматривается пример, в котором групповая переменная имеет больше двух категорий, а именно три.


    В файле kaefer.sav содержатся данные о длине и ширине грудной клетки трёх видов жуков (обозначенных как А, В и С). Если вы проведёте однофакторный дисперсионный анализ с последующими дополнительными тестами (Post-hoc-Tests), то увидите, что три разновидности жуков очень значимо различаются между собой как по длине, так и по ширине, поэтому вполне можно предположить, что этих жуков можно классифицировать между упомянутыми видами на основании их длины и ширины посредством дискриминантного анализа.

    •  Откройте файл kaefer.sav.

    Вы увидите, что 17 жуков из 30 не отнесены ни к иной из групп; поэтому классификация жуков по группам должна быть произведена при помощи дискриминантного анализа.

    •  В диалоговом окне Discriminant Analysis (Дискриминантный анализ) переменной kaefer (Жук) присвойте статус групповой переменной с пределами от 1 до 3, а переменным laenge (Длина) и breite (Ширина) статус независимых переменных. Оставьте активной установку по умолчанию Enter independents together (Независимые переменные вводить одновременно).

    •  В диалоговом окне Discriminant Analysis: Statistics (Дискриминантный анализ: Статистики) в разделе Descriptives (Дискриптивние статистики) активируйте опции: Means (Средние значения), Univariate ANOVAs (Одномерные тесты ANOVA) и в разделе Function Coefficients (Коэффициенты функции) опцию Unstandardized (He стандартизированные).

    •  В диалоговом окне Discriminant Analysis: Classify (Дискриминантный анализ: Классифицировать) сделайте запрос на Case-wise results (Результаты для отдельных наблюдений) и Summary table (Сводную таблицу) и в разделе Plots (Графики) активируйте опцию Territorial map (Территориальная карта). Эта опция служит для построения классификационной диаграммы, так называемой территориальной карты (Territorial map). Построение этой диаграммы типично для случая с более чем двумя группами.

    •  В заключение, в диалоговом окне Discriminant Analysis: Save (Дискриминантный анализ: Сохранить), активируйте все опции, находящиеся там, с целью создания соответствующих переменных в исходном файле.

    Из всей гаммы приводимых результатов расчёта мы рассмотрим только самые важные. Из групповых статистик можно узнать, что в семейство А входят самые большие, а в семейство В самые маленькие жуки.


    Group Statistics 


    (Статистики для групп)


    KAEFEP (Жук)


    Mean (Сред-нее значе-ние)


    Std. Deviation (Станда-ртное отклоне-ние)


    Valid N (listwise) (Действительные значения (по списку))


    Unweighted (Не взвеше-нное)


    Weighted (Взвеше-нное)


    1 (Семейство А)


    LAENGE (Длина)


    1 ,6226


    5.968Е-02


    42


    42,000


    BREITE (Ширина)


    1 ,2607


    4J54E-02


    42


    42,000


    2 Семейство В)


    LAENGE (Длина)


    1 ,3089


    7.634Е-02


    45


    45,000


    BREITE (Ширина)


    1,0122


    4.415Е-02


    45


    45,000


    3 Семейство С)


    LAENGE (Длина)


    1,4788


    6.029Е-02


    26


    26,000


    BREITE (Ширина)


    1,1192


    5.114Е-02


    26


    26,000


    Total


    LAENGE (Длина)


    1,4646


    ,1535


    113


    113,000


    BREITE (Ширина)


    1,1292


    ,1191


    113


    113,000


    Статистика Лямбда Уилкса (>i) свидетельствует о том, что жуки очень значимо делятся на группы как по длине, так и по ширине.


    Tests of Equality of Group Means (Тест на равенство средних значений групп)


    Wilks' Lambda (Лямбда Уилкса)


    F


    df1


    df2


    Sig. (Значимость)


    LAENGE (Длина)


    ,187


    239,154


    2


    110


    ,000


    BREITE (Ширина)


    ,153


    303,326


    2


    110


    ,000


    Если насчитывается более двух классификационных групп, то можно образовать больше одной дискриминантной функции; при трёх группах, как в приведенном примере, их будет две. Следующая таблица свидетельствует о том, что обе дискриминантные функции дают значимые результаты для разделения между группами и, следовательно, могут быть использованы соответствующим образом. Однако, первая функция дает вероятность прогноза 98,7 %, а вторая только 1,3 %.


    Eigenvalues (Собственные значения)


    Function (Функция)


    Eigenvalue (Собствен-ные значение)


    % of Variance (% диспер-сии)


    Cumulative % (Совокуп-ный %)


    Canonical Correlation (Канони-ческая корре-ляция)


    1


    6,040а


    98,7


    98,7


    ,296


    2


    ,078а


    1,3


    100,0


    ,269


    a. First 2 canonical discriminant functions were used in the analysis (В этом анализе используются первые 2 канонические дискриминантные функции).


    Wilks' Lambda (Лямбда Уилкса)


    Test of Function(s) (Тест функции (й))


    Wilks1 Lambda (Лямбда Уилкса)


    Chi-square (Хи-квадрат)


    df


    Sig. (Значимость)


    1 through 2 (1 до 2)


    ,132


    221,900


    4


    ,000


    2


    ,928


    8,202


    1


    ,004


    Затребованные нестандартизированные коэффициенты функций приводятся в следующей таблице.


    Canonical Discriminant Function Coefficients 


    (Канонические коэффициенты дискриминантных функций)


    Function (Функция)


    1


    2


    LAENGE (Длина)


    5,831


    18,769


    BREITE (Ширина)


    14,891


    -23,659


    (Constant) (Константа)


    -25,355


    -,773


    Unstandardized coefficients (Нестандартизированные коэффициенты)


    Мы здесь опускаем вывод статистик для каждого отдельного случая. В результате расчетов Вы получаете соответствующие номера групп и вероятность прогнозирования под заголовком P(G = g|D = d). Прогнозирование осуществлено и для 17 неклассифицированных случаев.


    На территориальной карте показано разделение на области, которые означают принадлежность к группе. При этом в пределах границ соответствующей области вероятность отнесения к данной группе выше, чем для других групп. На границах областей вероятности для граничащих групп одинаковы.


    Значения обеих дискриминантных функций, на основе которых построена эта территориальная карта, Вы можете увидеть в редакторе данных под именами двух вновь созданных переменных: dis1_1 и dis2_1.


    В заключение приводится обзор результатов классификации. По ним Вы можете заметить, что прогноз для групп А и В практически полностью был сделан верно и корректно классифицированы, в общей сложности, 91,2 % всех случаев.


    Classification Results a 


    (Результаты Классификации)


    FUND (Семе-йство)


    Predicted Group Membership


    Total (Сум-ма)


    1 (Семей-ство А)


    2 (Семей-ство В)


    3 (Семей-ство С)


    Original (Перво-нача-льно)


    Count (Коли-чество)


    1 (Семейство А)


    41


    0


    1


    42


    2 (Семейство В)


    0


    43


    2


    45


    3 (Семейство С)


    4


    3


    19


    26


    Ungrouped cases (He груп-пирован-ные случаи)


    7


    6


    4


    17


    %


    1 (Семейство А)


    97,6


    ,0


    2,4


    100,0


    2 (Семейство В)


    ,0


    95,6


    4,4


    100,0


    3 (Семейство С)


    15,4


    11,5


    73,1


    100,0


    Ungrouped cases (He груп-пирован-ные случаи)


    41,2


    35,3


    23,5


    100,0


    а. 91,2% of original grouped cases correctly classified (91,2 % первоначально сгруппированных случаев были классифицированы корректно).



     


    Символы, используемые втерриториальной карте


    Символ


    Группа


    Метка


    1


    2


    3


    1



    3


    Семейство А 


    Семейство В


     Семейство С


    Маркировка 


    Центроиды групп


    Наряду с уже упоминавшимися значениями обеих дискриминантных функции в редакторе данных были созданы: переменная dis_1, содержащая значение прогнозируемой группы и переменные disl_2, dis2_2 и dis3_2, которые содержат прогнозируемые вероятности отнесения к одной из трёх групп. Группа, которой соответствует наибольшая вероятность прогнозирования и есть прогнозируемая группа.

    8.gif

    Изображение: 

    Глава 19. Факторный анализ

    Глава 19. Факторный анализ

    1. Факторный анализ

    Факторный анализ


    Факторный анализ это процедура, с помощью которой большое число переменных, относящихся к имеющимся наблюдениям сводит к меньшему количеству независимых влияющих величин, называемых факторами. При этом в один фактор объединяются переменные, сильно коррелирующие между собой. Переменные из разных факторов слабо коррелируют между собой. Таким образом, целью факторного анализа является нахождение таких комплексных факторов, которые как можно более полно объясняют наблюдаемые связи между переменными, имеющимися в наличии.

    19.1 Порядок выполнения факторного анализа

    19.1 Порядок выполнения факторного анализа


    На первом шаге процедуры факторного анализа происходит стандартизация заданных значений переменных (z-преобразование); затем при помощи стандартизированных значений рассчитывают корреляционные коэффициенты Пирсона между рассматриваемыми переменными.


    Исходным элементом для дальнейших расчётов является корреляционная матрица. Для понимания отдельных шагов этих расчётов потребуются хорошие знания, прежде всего, в области операций над матрицами; интересующимся подробностями советуем обратиться к специальной литературе. Для построенной корреляционной матрицы определяются, так называемые, собственные значения и соответствующие им собственные векторы, для определения которых используются оценочные значения диагональных элементов матрицы (так называемые относительные дисперсии простых факторов).


    Собственные значения сортируются в порядке убывания, для чего обычно отбирается столько факторов, сколько имеется собственных значений, превосходящих по величине единицу. Собственные векторы, соответствующие этим собственным значениям, образуют факторы; элементы собственных векторов получили название факторной нагрузки. Их можно понимать как коэффициенты корреляции между соответствующими переменными и факторами. Для решения такой задачи определения факторов были разработаны многочисленные методы, наиболее часто употребляемым из которых является метод определения главных факторов (компонентов).


    Описанные выше шаги расчёта ещё не дают однозначного решения задачи определения факторов. Основываясь на геометрическом представлении рассматриваемой задачи, поиск однозначного решения называют задачей вращения факторов. И здесь имеется большое количество методов, наиболее часто употребляемым из которых является ортогональное вращение по так называемому методу варимакса. Факторные нагрузки повёрнутой матрицы могут рассматриваться как результат выполнения процедуры факторного анализа. Кроме того на основании значений этих нагрузок необходимо попытаться дать толкование отдельным факторам.


    Если факторы найдены и истолкованы, то на последнем шаге факторного анализа, отдельным наблюдениям можно присвоить значения этих факторов, так называемые факторные значения. Таким образом для каждого наблюдения значения большого количества переменных можно перевести в значения небольшого количества факторов.

    19.2 Пример из области социологии

    19.2 Пример из области социологии


    Изложенный метод будет проиллюстрирован на примере анкеты, составленной в Институте Социологии Университета Марбург. На основе этой анкеты на двух гессенских металлургических предприятиях было произведено исследование отношения к иностранцам. Опрашиваемым предложили высказать свое отношение к следующим пятнадцати положениям:


    1. Необходимо улучшить интеграцию иностранцев.


    2. Необходимо мягче относиться к беженцам.


    3. Деньги Германии должны быть потрачены на нужды страны.


    4. Германия — это не служба социальной помощи для всего мира.


    5. Необходимо стараться налаживать хорошие отношения друг с другом.


    6. Права беженцев следует ограничить.


    7. Немцы станут меньшинством.


    8. Право беженцев необходимо охранять во всей Европе.


    9. Враждебность к иностранцам наносит вред экономике Германии.


    10. Сначала необходимо создать нормальные жилищные условия для немцев.


    11. Мы ведь тоже практически везде являемся иностранцами.


    12. Мультикультура означает мультикриминал.


    13. В лодке нет свободных мест.


    14. Иностранцы вон.


    15. Интеграция иностранцев — это убийство нации.


    Оценки ставились по семибальной шкале: от полного несогласия (1) до полного согласия (7). Результаты опроса для 90 человек хранятся в файле ausland.sav в переменных а1-а15.

    •  Откройте файл ausland.sav. В файле Вы заметите несколько дополнительных переменных, о которых мы расскажем позже.

    •  Выберите в меню Analyze (Анализ) Data Reduction (Сокращение объема данных) Factor... (Факторный анализ)

    Откроется диалоговое окно Factor Analysis (Факторный анализ) (см. рис. 19.1).



    Рис. 19.1: Диалоговое окно Factor Analysis (Факторный анализ)

    •  Переменные a1-a15 поместите в поле тестируемых переменных и ознакомьтесь с возможностями, предлагаемыми различными кнопками этого диалогового меню.

    •  После щелчка по кнопке Descriptive Statistics (Дескриптивные статистики) оставьте вывод первичных результатов, которые включают в себя первичные относительные дисперсии простых факторов, собственные значения и процентные доли объяснённой дисперсии. Довольно часто бывает необходим также вывод одномерных статистик и корреляционных коэффициентов.

    С помощью кнопки Extraction... (Отбор) Вы можете выбрать метод отбора; оставьте здесь анализ главных компонентов, установленный по умолчанию. Количество отобранных в этом случае факторов приравнивается к числу собственных значений, превосходящих единицу. У Вас также есть возможность собственноручно указать это количество. Так как неповёрнутое факторное решение, предоставляет малозначимую информацию, предотвратите его вывод щелчком на соответствующей опции.


    Выключатель Rotation... (Вращение) позволяет выбрать метод вращения. Активируйте метод варимакса и оставьте активированным вывод повёрнутой матрицы факторов. Далее вы можете организовать вывод факторных нагрузок в графическом виде, в котором первые три фактора будут представлены в трёхмерном пространстве; в случае наличия только двух факторов в слое приводится только одно изображение.


    Если Вы хотите найти значения факторов и сохранить их в виде дополнительных переменных задействуйте выключатель Scores... (Значения) и отметьте Save as variables (Сохранить как переменные). По умолчанию установлен регрессионный метод. Выключатель Options... (Опции) предназначен для обработки пропущенных значений. Здесь обеспечивается возможность заменить пропущенные значения средними значениями соответствующих переменных.

    •  Для проведения расчётов щёлкните на ОК.

    •  В окне обзора появятся результаты. Сначала приводятся первичные статистики:

    Total Variance Explained 


    (Объяснённая суммарная дисперсия)


    Compo-nent (Компо-ненты)


    Initial Eigenvalues (Первичные собственные значения)


    Rotation Sums of Squared Loadings (Повёрнутые суммы квадратов нагрузок)


    Total (Сумма)


    % of Variance (% диспе-рсии)


    Cumulative % (Сово-купный %)


    Total (Сум-ма)


    % of Variance (% дис-персии)


    Cumu-lative % (Сово-купный %)


    1


    5,146


    34,308


    34,308


    3,466


    23,105


    23,105


    2


    1,945


    12,970


    47,278


    2,536


    16,907


    40,013


    3


    1,415


    9,433


    56,711


    2,505


    16,698


    56,711


    4


    ,990


    6,601


    63,312


    5


    ,936


    6,238


    69,550


    6


    ,760


    5,068


    74,617


    7


    ,693


    4,622


    79,240


    8


    ,612


    4,083


    83,323


    9


    ,529


    3,529


     86,852


    10


    ,473


    3,151


    90,004


    11


    ,433


    2,889


     92,893


    12


    ,339


    2,262


    95,1555


    13


    ,301


    2,007


    97,161


    14


    ,245


    1,635


    98,797


    15


    ,181


    1,203


    100,000


    Extraction Method: Principal Component Analysis (Метод отбора: Анализ главных компонентов).


    По таблице можно увидеть, что три собственных фактора имеют значения превосходящие единицу. Следовательно для анализа отобрано только три фактора. Первый фактор объясняет 34,308 % суммарной дисперсии, второй фактор 12,97 % и третий фактор 9,433 %. Так как мы запретили вывод неповернутой матрицы факторов, то далее приводится повёрнутая матрица (см. следующую таблицу).


    При факторном анализе постоянно появляются сообщения об ошибках, — так нам жаловался один пользователь, — например 2,56Е-02 и т.п. Действительно такой формат вывода в глазах непосвященного пользователя очень портит картину всей таблицы. Это, так называемый, Е-формат, знакомый всем программистам по языку Фортран (Fortran), где буква Е соответствует 10 в некоторой степени; для числа 2,5Е-02 можно было бы записать и 0,0256. Во втором примере (гл. 19.3) мы покажем Вам, как выходить из такой ситуации.


    Rotated Component Matrix

    (Повёрнутая матрица компонентов)

    Component (Компонент)


    1


    2


    3


    А1


    -,466


    ,628


    -,191


    А2


    -,141


    ,657


    ,215


    A3


    ,327


    -,153


    ,711


    А4


    ,533


    -,106


    ,394


    А5


    -,362


    ,783


    4.52Е-02


    А6


    -1.2Е-02


    -3.8Е-02


    ,763


    А7


    ,525


    3.58Е-02


    ,543


    А8


    -,117


    ,719


    -,267


    А9


    2.56Е-02


    ,551


    -8.8Е-02


    А10


    ,252


    -9.5Е-02


    ,685


    А11


    ,125


    ,392


    -,292


    А12


    ,802


    -,199


    ,108


    А13


    ,685


    -,110


    ,465


    А14


    ,837


    -,144


    -2.5Е-02


    А15


    ,725


    -4.8Е-02


    ,144


    Extraction Method: Principal Component Analysis ((Метод отбора: Анализ главных компонентов).


    Rotation Method: Varimax with Kaiser Normalization (Метод вращения: Варимакс с нормализацией Кайзера), 


    a. Rotation converged in 8 iterations (Вращение осуществлено за 8 итераций).


    Здесь начинается самая интересная часть факторного анализа: Вы должны попытаться объяснить отобранные факторы. Для этого возьмите в руки карандаш и в каждой строке повёрнутой факторной матрицы отметьте ту факторную нагрузку, которая имеет наибольшее абсолютное значение.


    Как уже было сказано, эти факторные нагрузки следует понимать как корреляционные коэффициенты между переменными и факторами. Так переменная a1 сильнее всего коррелирует с фактором 2, а именно, величина корреляции составляет 0,628, переменная а2 также сильнее всего коррелирует с фактором 2 (0,657), переменная же а3 коррелирует сильнее всего с фактором 3 (0,711) и т.д. В большинстве случаев включение отдельной переменной в один фактор, осуществляемое на основе коэффициентов корреляции, является однозначным. В исключительных случаях, к примеру, как в ситуации с переменной а7, переменная может относиться к двум факторам одновременно. Могут быть также и переменные, в нашем примере a11, которыми нельзя нагрузить ни один из отобранных факторов.


    Если поступить так, как изложено выше, то варианты мнений, указанные вначале рассмотрения примера, можно отнести в следующем порядке к трём факторам:

    •  Фактор 1:

    Германия — это не служба социальной помощи для всего мира.


    Немцы станут меньшинством.


    Мультикультура означает мультикриминал.


    В лодке нет свободных мест.


    Иностранцы вон.


    Интеграция иностранцев — это убийство нации.

    •  Фактор 2

    Необходимо улучшить интеграцию иностранцев.


    Необходимо мягче относиться к беженцам.


    Необходимо стараться налаживать хорошие отношения друг с другом.


    Права беженцев необходимо охранять во всей Европе.


    Враждебность к иностранцам наносит вред экономике Германии.


    Мы ведь тоже практически везде являемся иностранцами.

    •  Фактор 3

    Деньги Германии должны быть потрачены на нужды страны.


    Права беженцев следует ограничить.


    Немцы станут меньшинством.


    Сначала необходимо создать нормальные жилищные условия для немцев.

    Из-за равных по величине нагрузок, как для фактора 3, так и для фактора 1, положение "Немцы станут меньшинством" включено в оба фактора. Теперь мы подошли к последнему и решающему шагу факторного анализа: необходимо обнаружить и описать смысловую связь факторов. В рассматриваемом примере это можно сделать без особых усилий.


    Первый фактор, и это очевидно, собрал все положения, враждебно настроенные по отношению к иностранцам. На основании позитивных корреляционных коэффициентов участвующих переменных с фактором и принимая во внимание полярность значений переменных (большое значение означает полное согласие) большое значение фактора означает высокую враждебность к иностранцам.


    Во второй фактор входят те положения, которые указывают на дружелюбное отношение к иностранцам. Большое значение фактора означает здесь доброжелательное отношение к иностранцам.


    Во второй фактор вошли точки зрения, соответствующие осторожному отношению к иностранцам; в противоположность к первому фактору это не враждебные точки зрения, а по большей части социальные страхи (деньги, жильё в первую очередь для немцев и т.д.). Большое значение фактора указывает здесь на высокую степень социального сомнения.


    В соответствии с порядком изложения эти три фактора можно кратко охарактеризовать при помощи следующих выражений: Враждебная позиция, Доброжелательная позиция и Социальные страхи. Однако столь явно, как в приведенном примере факторы удаётся объяснить не всегда. Если нет возможности провести вербальное объяснение факторов, то факторный анализ можно считать неудавшимся.


    Значения факторов


    Поскольку мы пожелали произвести расчёт значений факторов, то в соответствии с тремя отобранными факторам были сгенерированы три новые переменные, на-


    званные fac1_1, fac2_1 и fac3_1, которые содержат вычисленные значения факторов. Если Вы просмотрите текущий файл после поведения факторного анализа, то сможете увидеть имеющие нормализованные значения факторов. По каждому из отобранных фактору для каждого опрошенного было рассчитано специальное факторное значение. Факторное значение, как правило, лежит в пределах —3 до +3.


    Рассмотрим факторную переменную fac1_1. Она включает следующие элементарные переменные: а4, а12, а13, а14 и а15. В качестве метки для этого фактора мы выбрали выражение: "Враждебная позиция". Большое положительное значение фактора означает одобрение элементарных переменных, то есть положений, входящих в этот фактор. Одобрение элементарных переменных, относящихся к первому фактору, тождественно ярко выраженным расистским взглядам. Для подтверждения этого факта рассмотрим два примера. Наблюдение 4 характеризуется очень низким факторным значением в переменной fac1_1. Оно равно —2,00455. В данном случае можно сделать заключение о том, что здесь не наблюдается расистская направленность или она очень слаба. Соответственно этому ведут себя и отдельные значения элементарных переменных (а4 = 2, а13 = 1, а14 = 1, а15 = 1). Наблюдение 17, в отличие от наблюдения 4, характеризуется очень высоким положительным значением фактора, который равен 3,14801. Основываясь на этом значении, мы можем исходить из того, что здесь явно заметна экстремально-расистская позиция. Соответственно этому ведут себя и отдельные значения элементарных переменных (а4 = 7, а13 = 7, а14 = 7, а15 = 7).


    Рассмотрим факторную переменную fac2_1. К ней относятся элементарные переменные: a1, a2, а5, а8, а9 и a11. В качестве метки для этого фактора мы выбрали выражение: "Доброжелательная позиция". Большое положительное значение фактора означает полное согласие. Полное согласие соответствует дружелюбному отношению к иностранцам. И здесь рассмотрим два выборочных примера. Наблюдение 17 характеризуется очень малым значением фактора, которое составляет —3,32632. Основываясь на значении этого фактора можно сделать вывод, что едва ли в этом случае присутствует доброжелательное отношение к иностранцам. Соответственным образом ведут себя и отдельные значения элементарных переменных (a1 = 1, а2 = 1, а5 = 1, а8 = 2, а9 = 4, a11 = 6). В наблюдении 17 и следовало ожидать низкого значения фактора, так как здесь наблюдается высокое положительное факторное значение для факторной переменной fac1_1. В таком случае говорят, что существует отчётливая консистенция. По сравнению с предыдущим наблюдением, наблюдение 6 характеризуется очень высоким положительным значением факторной переменной fac2_1. Оно равно 1,23438. Исходя из значения фактора, можно сделать вывод, что существует сильное дружелюбное отношение к иностранцам. Соответственным образом ведут себя и отдельные значения элементарных переменных (a1 = 7, а2 = 7, а5 = 7, а8 = 7, а9 = 7, a11 = 7).


    В заключение рассмотрим факторную переменную fac3_1. К ней относятся элементарные переменные аЗ, а6, а7 и а10. В качестве метки для этого фактора мы выбрали выражение: "Социальные страхи". Большое положительное значение фактора означает одобрение элементарных переменных. Одобрение элементарных переменных тождественно ярко выраженным социальным страхам. Рассмотрим для доказательства этого факта два примера. Наблюдение 5 характеризуется очень низким значением факторной переменной fac3_1. Оно равно —1,66369. В этом случае наблюдаются очень слабые социальные страхи и едва ли на основании социальных страхов можно наблюдать враждебное отношение к иностранцам. Соответственно этому ведут себя и отдельные значения элементарных переменных (аЗ = 5, аб = 2, а7 = 2, а 10 = 1). Наблюдение 43 в отличие от наблюдения 5 характеризуется очень высоким положительным факторным значением. Оно равно 1,93125. В этом случае наблюдаются очень сильные социальные страхи. Соответственным образом ведут себя и отдельные значения элементарных переменных (аЗ = 7, аб = 7, а7 = 7, а 10 = 7). В файле ausland.sav находятся ещё несколько дополнительных переменных, а именно:

    •  ewv


    Удовлетворённость собственным местом в экономических отношениях (1 = да, 2 = нет)

    • gebjg


    Год рождения (1 = 1935-1949, 2 = 1941-1950, 3 = 1951-1960, 4 = 1961-1970)

    • geschl


    Пол (1 = мужской, 2 = женский)

    • sozeng


    Социально-политическая активность (1 = да, 2 = нет)

    • s+ellung


    Занимаемая должность (1 = рабочий, 2 = специалист, 3 = служащий)


    Эти переменные можно использовать для того, чтобы устанавливать связи для факторных значений. Самым распространённым методом для этого является разбиение факторных значений на четыре группы процентилей (см. гл. 8.6.2). Покажем это на примере первого факторного значения (переменная facl_l).

    •  Выберите в меню Transform (Трансформировать) Rank Cases... (Создать иерархию наблюдений)

    Откроется диалоговое окно Rank Cases (Создать иерархию наблюдений).

    •  Переменную fac1_1 перенесите в список тестируемых переменных.

    •  Щёлкните на выключателе Rank Types... (Типы иерархии), деактивируйте установленную по умолчанию опцию Rank (Ранг) и активируйте опцию Fractional rank as % (Дробный ранг как процентили). Оставьте установленное по умолчанию количество групп равное 4.

    •  Подтвердите свой выбор нажатием на Continue (Далее) и затем на ОК.

    Будет создана переменная nfac1_1, которая содержит значения 1 до 4 с примерно равномерной частотой.

    •  Перейдите в редактор данных и измените имя переменной nfac1_1 на более удобное имя ausfeind, в поле метки наберите Враждебное отношение и значениям присвойте следующие метки: 1 = отсутствует, 2 = слабое, 3 = сильное и 4 = очень сильное. Теперь создадим таблицу сопряженности для новой переменной и переменной stellung (Занимаемая должность).

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Crosstabs... (Таблицы сопряженности)

    •  В диалоговом окне Crosstabs (Таблицы сопряженности) переменную stellung поместите в поле строк, а переменную ausfeind в поле столбцов и через выключатель Cells... (Ячейки) сделайте дополнительно запрос на вывод процентных значений по строкам.

    В окне просмотра появится следующая таблица сопряженности.


    berufliche Stellung * fremdenfeindliche Einstellung Crosstabulation 


    (Занимаемая должность * Враждебное отношение Таблица сопряженности )



    fremdenfeindliche Einstellung (Враждебное отношение)


    Total (Сум-ма)


    keine (отсу-тствует)


    swach (сла- бое)


    stark (силь-ное)


    sehr stark (очень силь- ное)


    beru-fliche Ste- llung (Зани-маемая дол-жность)


    Arbe- iter (Рабо-чий)


    Count (Коли-чество)


    6


    7


    7


    11


    31


    % within berufliche Stellung (% от Зани-маемой долж-ности)


    19,4%


    22,6%


    22,6%


    35,5%


    100,0%


    Facha-rbeiter (Специ-алист)


    Count (Коли-чество)


    5


    7


    7


    8


    27


    % within beru-fliche Stellung (% от Зани-маемой долж-ности)


    18,5%


    25,9%


    25,9%


    29,6%


    100,0%


    Anges-tellte (Служа-щий)


    Count (Коли-чество)


    10


    9


    8


    3


    30


    % within beru-fliche Stellung (% от Зани-маемой долж-ности)


    33,3%


    30,0%


    26,7%


    10,0%


    100,0%


    Total (сумма)



    Count (Коли-чество)


    21


    23


    22


    22


    88


    % within beru-fliche Stellung (% от Зани-маемой долж-ности)


    23,9%


    26,1%


    25,0%


    25,0%


    100,0%


    Враждебное отношение к иностранцам у рабочих и специалистов выражено ярче, чем у служащих. Однако тест по критерию Хи-квадрат демонстрирует о незначимом различии.


    Попытайтесь найти связи между другими факторными значениями и переменными.

    1.gif

    Изображение: 

    19.3 Пример из области психологии

    19.3 Пример из области психологии


    В анкете изучения вариантов поведения при заболевании по пунктам описываются возможные варианты поведения, дающие объяснение отношения больных к их болезни. На основании пятибалльной шкалы, балы которой соответствуют выражениям: абсолютно не подходит (1) —- незначительно (2) — умеренно (3) — довольно значительно (4) — и очень сильно (5), психолог должен понять, насколько сильно указанная ситуация подходит их пациенту. Помимо этого, посредством факторного анализа необходимо будет ещё определить, можно ли пункты анкеты логически связать с факторами, которые дают объяснение возможной типологии отношения к болезни. Сначала рассмотрим пункты стандартной анкеты:


    1. Искать информацию о заболевании и лечении


    2. Не желать признать случившееся


    3. Занижать значение и важность болезни


    4. Размышлять и мечтать о своём


    5. Винить самого себя


    6. Считать виноватыми других


    7. Предпринимать активные действия для решения проблемы


    8. Составить план и затем приступить к действиям


    9. С нетерпением и раздражённо на всё реагировать


    10. Выносить все эмоции наружу


    П. Подавлять эмоции, проявлять самообладание


    12. Искать улучшение настроения в употреблении алкоголя или успокаивающих средств


    13. Больше себе позволять


    14. Пытаться интенсивней жить


    15. Решиться на борьбу с болезнью


    16. Жалеть себя


    17. Подбадривать себя


    18. Пытаться достичь успеха и самоутверждения


    19. Пытаться отвлечься


    20. Искать уединения


    21. Принимать болезнь как судьбу


    22. Впасть в бесконечные размышления


    23. Искать утешения в религии


    24. Пытаться найти какой-либо смысл в болезни


    25. Утешать себя тем, что другим ещё хуже


    26. Ссылаться на судьбу


    27. Точно следовать указаниям врача


    28. Надеяться на врачей


    29. Не доверять врачам, перепроверять диагноз, искать других врачей


    30. Желать делать добро другим


    31. Изображать напускное веселье


    32. Принимать помощь от других


    33. Позволять о себе заботиться


    34. Отдаляться от других людей


    35. Пытаться припомнить личный опыт и методы борьбы с подобными ударами судьбы


    Результаты для 160 пациентов хранятся в файле fkv.sav в переменных fl-f35.

    •  Откройте файл fkv.sav

    •  Выберите в меню Analyze (Анализ) Data Reduction (Сокращение объема данных) Factor... (Факторный анализ)

    Откроется диалоговое окно Factor Analysis (Факторный анализ) (см. рис. 19.1). Поместите переменные П-О5 в поле тестируемых переменных.

    •  Щёлкните на выключателе Descriptives... (Дескриптивные статистики). Откроется диалоговое окно Factor Analysis: Descriptives (Факторный анализ: Дескриптивные статистики), как представлено на рисунке 19.2. Оставьте установленную по умолчанию опцию вывода Initial solution (Первичного решения).

    •  Щёлкните на выключателе Extraction... (Извлечение), оставьте установку Principal components (Анализ главных компонентов). В отличие от первого примера факторного анализа, здесь количество факторов сознательно ограничим пятью. Если бы мы не сделали такого ограничения, то в соответствии с начальными установками было бы создано одиннадцать факторов, количество, которое очень тяжело поддаётся обзору.


    Рис. 19.2: Диалоговое окно Factor Analysis: Descriptives (Факторный анализ: Дескриптивные статистики)


     

    •  Щёлкните поэтому на опции Number of factors (Количество факторов) и введите число 5. Щелчком на соответствующей опции деактивируйте вывод неповёрнутых значений факторов. Активируйте опцию Scree plot (Точечная диаграмма). Точечная диаграмма графически представляет собственные значения факторов, упорядоченные по величине.

    Диалоговое окно Factor Analysis:Extraction < Факторный анализ: Извлечение) должно теперь выглядеть так, как представлено на рисунке 19.3.



    Рис. 19.3: Диалоговое окно Factor Analysis: Extraction (Факторный анализ: Отбор)

    •  Подтвердите произведенные установки нажатием Continue (Далее). Щёлкните на выключателе Rotation... (Вращение) и выберите метод варимакса. Если вы желаете наряду с выводом повёрнутой матрицы факторов, установленным по умолчанию, получить факторные нагрузки в графическом виде, то щёлкните на опции Loading plot(s) (Диаграммы нагрузок). Диалоговое окно Factor Analysis:Rotation (Факторный анализ: Вращение) должно теперь выглядеть так, как изображено на рисунке 19.4.

    •  Подтвердите нажатием кнопки Continue (Далее). Щёлкните по выключателю Scores... (Значения) и активируйте Save as variables (Сохранить как переменные), чтобы рассчитанные значения факторов сохранить в виде дополнительных переменных. Диалоговое окно Factor AnalysisiFactor Scores (Факторный анализ: Значения факторов) выглядит теперь так, как изображено на рисунке 19.5.


    Рис. 19.4: Диалоговое окно Factor Analysis:Rotation (Факторный анализ: Вращение)

    •  В заключение, с помощью кнопки Options... (Опции) Вы получите возможность, организовать вывод коэффициентов, отсортированных по размеру. В отличие от первого примера факторного анализа, здесь мы воспользуемся предлагаемой сортировкой.

    •  Поэтому активируйте опцию Sorted by size (Сортированные по размеру).


    Рис. 19.5: Диалоговое окно Factor Analysis:Factor Scores (Факторный анализ: Значения факторов)


    Теперь мы запретим вывод малых факторных нагрузок и для этого установим граничное значение выводимых нагрузок равным 0,4. Достоинство этого шага состоит в том, что устраняется непривлекательное отображение малых значений в Е-формате (см. раздел 19.2).

    •  Активируйте опцию Suppress absolute values less then: (He выводить абсолютные значения меньшие, чем:) и введите предельное значение 0,4.

    Диалоговое окно Factor Analysis:0ptions (Факторный анализ: Опции) выглядит теперь так, как изображено на рисунке 19.6.

    •  Для проведения факторного анализа подтвердите произведенные установки нажатием Continue (Далее) и в главном диалоговом окне ОК.

    Рассмотрит результаты расчёта, которые появились в окне просмотра. Сначала приводятся первичные статистики.



    Рис. 19.6: Диалоговое окно Factor Analysis:Options (Факторный анализ: Опции)


    Total Variance Explained 


    (Объяснённая совокупная дисперсия)


    Component (Компо-ненты)


    initial eigenvalues (Первичные собственные значения)


    Kotation Sums of Squared Loadings (Повёрнутая сумма квадратов нагрузок)


    Total (Сумма)


    % of Variance (% дис-персии)


    Cumulative % (Совокупный процент)


    Total (Сумма)


    % of Variance (% дис-персии)


    Cumulative % (Совокупный процент)


    1


    5,0226


    14,359


    14,359


    4,388


    12,538


    12,538


    2


    3,937


    11,250


    25,609


    3,972


    11,349


    23,887


    3


    2,356


    6,731


    32,340


    2,396


    6,845


    30,732


    4


    2,073


    5924


    38,264


    2,257


    6,447


    37,179


    5


    1,706


    4,873


    43,138


    2,085


    5,958


    43,138


    6


    1,478


    4,222


    47,359





    7


    1,319


    3,768


    51, 127





    8


    1,258


    3,595


    54, 722





    9


    1,228


    3,508


    58, 230





    10


    1,082


    3,092


    61,322





    11


    1,029


    2,941


    64,263





    12


    ,942


    2,692


    66. 955





    13


    ,890


    2,542


    69, 497





    14


    ,878


    2,508


    72, 005





    15


    ,823


    2,353


    74, 358





    16


    ,737


    2,104


    76, 462





    17


    ,704


    2,011


    78, 473





    18


    ,664


    1,898


    80, 371





    19


    ,652


    1,862


    82, 232





    20


    ,618


    1,766


    83, 998





    21


    ,572


    1,634


    85, 632





    22


    ,516


    1,474


    87, 106





    23


    ,473


    1,352


    88, 458





    24


    ,466


    1,331


    89, 788





    25


    ,459


    1,310


    91,099





    26


    ,432


    1,234


    92, 332





    27


    ,417


    1,192


    93, 524





    28


    ,388


    1,108


    94, 632





    29


    ,345


    ,985


    95,617





    30


    ,324


    ,927


    96, 544





    31


    ,287


    ,821


    97, 365





    32


    ,259


    ,740


    98, 105





    33


    ,240


    ,684


    98, 789





    34


    ,223


    ,638


    99, 427





    35


    ,201


    ,573


    100,000





    Extraction Method: Principal Component Analysis (Метод отбора: Анализ главных компонентов).


    Насчитывается одиннадцать собственных значений, превосходящих единицу, что означало бы отбор одиннадцати факторов, если бы Вы не изменили установку по умолчанию Eigenvalues over: 1 (Собственные значения, превосходящие единицу) и не ограничили бы количество рассматриваемых факторов пятью. После точечной диаграммы, которую мы объясним позже, следует вывод повёрнутой факторной матрицы:


    Rotated Component Matrix a 


    (Повёрнутая матрица компонентов)


    Component (Компоненты)


    1


    2


    3


    4


    5


    F5


    ,683


    F16


    ,683


    F22


    ,620


    F9


    ,581


    F26


    ,580


    F6


    ,544


    F35


    ,515


    F33


    ,491


    F12


    ,488


    F34


    ,458


    F4


    ,447


    F7


    ,710


    F8


    ,690


    F17


    ,654


    F14


    ,621


    F15


    ,597


    F18


    ,589


    F19


    ,572


    F1


    ,563


    F13


    ,510


    F20


    F28


    ,816


    F27


    ,765


    F31


    -,493


    F29


    F21


    ,683


    F25


    ,592


    F30


    ,522


    F23


    ,426


    ,469


    F24


    ,404


    F3


    ,677


    F2


    ,457


    ,567


    F10


    -,564


    F11


    ,403


    F32


    Extraction Method: Principal Component Analysis (Метод отбора: Анализ главных компонентов).


    Rotation Method: Varimax with Kaiser Normalization (Метод вращения: варимакс с нормализацией Кайзера).


     a. Rotation converged in 6 iterations (Вращение получено за б итераций).


    Здесь мы опять подходим к самой интересной части факторного анализа — толкованию факторов. Факторные нагрузки пяти факторов в блочном виде расположены по диагонали матрицы. Переменные, находящиеся внутри одного блока, отсортированы в порядке убывания факторных нагрузок, причём был запрещен вывод факторных нагрузок, меньших 0,4. Высказывания f5, f16, f22, f9, f26, f6, f35, f33, f12, f34 и f4 принадлежат первому фактору, высказывания f7, f8, f17, f14, f15, f18, f19, f1, f1З и f10 второму и т.д. Высказывание f5 своим значением 0,683 нагружает сильнее всего первый фактор, высказывание f7 — второй фактор (со значением 0,710), высказывание f28 — третий фактор (со значением 0,816) и т.д.


    Для того, чтобы отдельные высказывания отнести к определенному фактору, при выводе отсортированных значений Вам уже не нужно маркировать их карандашом, так как сопоставление в этом случае будет произведено автоматически. Несмотря на то, что представление данных в таком виде значительно удобнее, всё же здесь существует один серьёзный недостаток: сопоставление высказывания некоторому фактору рассматривается как единственно верное решение, без проверки, не имеет ли данное высказывание примерно такую же нагрузку и для какого-либо другого фактора. Рассмотрим, к примеру, пунктf23. Пункт f23 нагружает фактор 1 значением 0,426, а фактор 4 значением 0,469. Для обеспечения корректности в этом случае следует иметь дело с обоими факторами. Если нельзя чётко объяснить принадлежность одного из многих высказываний одному-единственному фактору, то факторный анализ следует считать неудавшимся. Аналогично, Вы не должны забывать об этой проблеме при выводе сортированных данных. Кроме того, факторный анализ считается неудавшимся и тогда, когда нельзя однозначно интерпретировать факторы. Поэтому далее мы попытаемся интерпретировать факторы из рассматриваемого примера.

    •  Фактор 1:

    Винить самого себя

    Жалеть себя

    Впасть в бесконечные размышления

    С нетерпением и раздражённо на всё реагировать

    Жаловаться на судьбу

    Считать виноватыми других

    Пытаться припомнить личный опыт и методы борьбы с подобными ударами судьбы

    Искать улучшение настроения в употреблении алкоголя или успокаивающих средств

    Размышлять и мечтать о своём

    •  Фактор 2:

    Предпринимать активные действия для решения проблемы


    Составить план и затем приступить к действиям


    Подбадривать себя


    Пытаться интенсивней жить


    Решиться на борьбу с болезнью


    Пытаться достичь успеха и самоутверждения


    Пытаться отвлечься


    Искать информацию о заболевании и лечении

    •  Фактор 3:

    Надеяться на врачей


    Точно следовать указаниям врача


    Изображать наигранное веселье

    •  Фактор 4:

    Принимать болезнь как судьбу


    Утешать себя тем, что другим ещё хуже


    Желать делать добро другим


    Искать утешения в религии


    Пытаться найти какой-либо смысл в болезни

    •  Фактор 5:

    Занижать значение и важность болезни Не желать признать случившееся Выносить все эмоции наружу Подавлять эмоции, самообладание


    В этом примере, также как и в предыдущем случае, можно без особых усилий истолковать содержание этих факторов.


    Первый фактор собрал все пункты, описывающие депрессивное отношение к тяжёлой болезни. Эти пункты описывают состояние подавленности, удручённости и сомнений; здесь речь идёт о потере желания жить и попытке спрятаться за алкоголем и психотропными средствами. Обозначим фактор 1 меткой "Депрессивный подход".


    Второй фактор собрал все пункты, описывающие активный подход к борьбе с болезнью. Эти пункты описывают состояние пробуждения желания жить, которое проявляется в рациональном подходе к борьбе с болезнью (Поиск информации), в нежелании позволить болезни ввести себя в угнетённое состояние (Пытаться отвлечься). Фактору 2 присвоим следующую метку: "Активное действие, направленное на решение проблемы".


    Третий фактор собрал все пункты, основывающиеся на отношении врач-пациент. Следует обратить внимание на то, что высказывание f31 отрицательно нагружает этот фактор, то есть о наигранном веселье скорее всего речь не идёт. Для краткой характеристики этого фактора можно было бы выбрать выражение: "Надеяться на врачей".


    Фактор 4 собрал все высказывания, указывающие на фаталистический или религиозно-направленный поиск смысла происходящего. В качестве краткой характеристики здесь можно было бы выбрать выражение: "Религиозность и поиск смысла".


    В факторе 5 собрались все пункты, характеризующие состояние, в котором опрашиваемый не склонен признавать болезнь путём занижения её важности или нежелания осознавать реальность, а также душевной отчуждённости (Подавлять эмоции). Здесь следует обратить внимание на то, что пункт f10 (Выносить все эмоции наружу) нагружает фактор отрицательным значением, то есть эмоции скорее не выносятся наружу. В качестве краткой характеристики этого фактора можно было бы выбрать выражение: "Недооценка и психологическая отрешённость".


    Точечная диаграмма


    Займёмся теперь анализом точечной диаграммы, представленной на рисунке 19.7.


    Точечная диаграмма может нам помочь определить количество учитываемых факторов. Как Вам уже известно, согласно установке по умолчанию, SPSS учитывает в результирующей модели все те факторы, собственное значение которых превосходит единицу. В нашем примере это было бы одиннадцать факторов.


    Количество учитываемых факторов вы можете задать сами, что мы и сделали ранее. В качестве вспомогательного средства для определения задаваемого числа факторов может послужить специальная точечная диаграмма. Слово Screeplot, употребляемое для обозначения этой диаграммы состоит из двух частей: английского слова scree, что означает щебень и слова plot, что в английском соответствует графическому представлению. Такая диаграмма служит для того, чтобы маловажные факторы — щебень — можно было отделить от самых значимых факторов. Эти значимые факторы на графике образовывают в своего рода склон, то есть ту часть линии, которая характеризуется крутым подъёмом. В приведенной диаграмме такой крутой подъём наблюдается


    в области первых пяти факторов. Пять факторов мы и положили в основу модели в самом начале анализа. Если посмотреть на график, то можно заметить что склон, то есть область значимых факторов, наблюдается выше пятого фактора (пятый, четвёртый, третий, второй ...), а ниже пятого фактора (шестой, седьмой, восьмой ...) расположился щебень, область незначимых факторов. Вы можете самостоятельно провести расчет с использованием модели, включающей различное число факторов; в рассмотренном примере было бы уместным произвести сравнение моделей с учётом четырёх, пяти и шести факторов.



    Рис. 19.7: Точечная диаграмма

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    19.4 Задача вращения

    19.4 Задача вращения


    Рассмотрим поподробнее задачу вращения. Используем для этого приводившийся в разделе 19.2 пример опроса, исследующего отношение к иностранцам.

    •  Откройте файл ausland.sav.

    •  Выберите в меню Analyze (Анализ) Data Reduction (Сокращение объема данных) Factor... (Факторный анализ)

    •  В диалоговом окне Factor Analysis (Факторный анализ) поместите переменные al-а!5 в поле тестируемых переменных.

    •  С помощью кнопки Extraction... (Извлечение) укажите требуемое число создаваемых факторов равное двум, чтобы получить легко интерпретируемый двумерный пример.

    •  Через выключатель Rotation... (Вращение) активируйте опцию Loading plot(s) (Диаграмма нагрузок), но для модели вращения оставьте установленную по умолчанию опцию None (Отсутствует).

    •  В результате мы оставляем вывод так называемой компонентной диаграммы.


    Рис. 19.8: Компонентная диаграмма без вращения


    На этой диаграмме в графическом виде представлены факторные нагрузки обоих факторов. Для интерпретации факторов было бы оптимально, если бы точки лежали ближе к осям и подальше от точки начала отсчёта; тогда каждая переменная имела бы значительную нагрузку для одного фактора и незначительную для другого. Этого можно достичь поворотом осей против часовой стрелки, причём ортогональность системы координат (прямой угол между осями) должна сохраниться. В данном двумерном примере это вращение можно представить себе довольно наглядно, математически же подобный поворот можно произвести также и в и—мерном пространстве (то есть при наличии произвольного количества факторов).


    Альтернативой прямоугольному (ортогональному) вращению является косоугольное вращение. В этом случае после вращения оси не сохраняют прямой угол по отношению друг к другу. В то время как при прямоугольном вращении корреляция между факторами отсутствует, то при косоугольном вращении этот принцип нарушается — факторы могут коррелировать между собой.


    SPSS предлагает в общей сложности пять методов вращения: три метода для ортогонального вращения, один для косоугольного и еще один, который является комбинацией двух видов вращения. Эти методы Вы можете активировать через выключатель Rotation... (Вращение) в диалоговом окне Factor Analysis: Rotation (Факторный анализ: Вращение).

    •  Varimax: Ортогональное вращение, при котором происходит минимизация количества переменных с высокой факторной нагрузкой. Этот метод является наиболее часто применяемым, поскольку он облегчает интерпретацию факторов.

    •  Quartimax: Ортогональное вращение, при котором происходит минимизация количества факторов, необходимых для объяснения переменной. Этот метод используется редко и вообще не рекомендуется для применения.

    •  Equamax: Ортогональное вращение; компромисс между предыдущими методами.

    •  Direct oblimin: Косоугольное вращение.

    •  Рrоmах: Комбинация ортогонального и косоугольного видов вращений.

    Обычно для ортогонального вращения применяют метод варимакса, а для косоугольного — Direct oblimin. При помощи компонентной диаграммы отследим действие вращения, осуществленного с использованием метода варимакса.

    •  В диалоговом окне Factor Analysis: Rotation (Факторный анализ: Вращение) вместо опции None (Отсутствует) активируйте опцию Varimax (Ba-римакс).

    •  Рассмотрите изменённую компонентную диаграмму.


    Рис. 19.9: Компонентная диаграмма после вращения


    На диаграмме стало заметно смещение факторных нагрузок в сторону главных осей.


    Факторный анализ является самым излюбленным приёмом практических статистиков, служащим для сокращения количества переменных. Наиболее интересной частью факторного анализа является толкование получающихся факторов, над которым, правда, придётся поразмыслить и применить весь имеющийся опыт.

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    Глава 20. Кластерный анализ

    Глава 20. Кластерный анализ

    1. Кластерный анализ

    Кластерный анализ


    В результате кластерного анализа при помощи предварительно заданных переменных формируются группы наблюдений. Под наблюдениями здесь понимаются отдельные личности (респонденты) или любые другие объекты. Члены одной группы (одного кластера) должны обладать схожими проявлениями переменных, а члены разных групп различными.


    Наряду с кластеризацией наблюдений в SPSS предусмотрена кластеризация переменных. Здесь на основе заданных наблюдений образовываются группы переменных. Так как в принципе то же самое делает и факторный анализ (см. гл. 19), то в этой главе мы ограничимся рассмотрением только кластеризации наблюдений.

    20.1 Принцип кластерного анализа

    20.1 Принцип кластерного анализа


    Для рассмотрения принципа кластерного анализа выберем сначала очень простой пример.

    •  Откройте файл bier.sav, который содержит некоторые данные о 17 сортах пива (см. рис. 20.1).


    Рис. 20.1: Данные файла bier.sav в редакторе данных


    Переменная herkunft (производитель) указывает на страну-производителя пива, где США закодированы с помощью единицы. Расходы (kosten) приведены в долларах США для ёмкости равной 12 унциям для жидкости (примерно одна треть литра); калорийность указана для одинакового количества пива. Содержание алкоголя приводится в процентах.


    Возьмём переменные kalorien (калории) и kosten (расходы) и представим их при помощи простой диаграммы рассеяния.

    •  Выберите в меню Graphs (Графики) Scalier... (Диаграмма рассеяния)

    •  Переменную kalorien (калории) поместите в поле оси х, а переменную kosten (расходы) в поле оси у, и для обозначения наблюдения используйте переменную bier (пиво).

    •  Через кнопку Options... (Опции) активируйте опцию Display Chart with case labels (Показывать график с метками наблюдений).

    Вы получите диаграмму рассеяния, представленную на рисунке 20.2.


    Вы увидите четыре отдельных отчётливых группировки точек, три из них в нижней половине диаграммы и одну в верхнем правом углу. Следовательно, переменные kalorien (калории) и kosten (расходы), явно распадаются на четыре различных кластера по сортам пива.


    Сорта пива, которые по значениям двух рассмотренных переменных похожи друг на друга, принадлежат к одному кластеру; сорта пива, находящиеся в различных кластерах, не похожи друг на друга. Решающим критерием для определения схожести и различия двух сортов пива является расстояние между точками на диаграмме рассеяния, соответствующими этим сортам.


    Самой распространенной мерой для определения расстояния между двумя точками на плоскости, образованной координатными осями х и у, является евклидова мера:


    где x1:, и хn — координаты первой точки, у: и уг — координаты второй точки.



    Рис. 20.2: Диаграмма рассеяния переменных kalorien (калории) и kosten (расходы)


    В соответствии с этой формулой расстояние между сортами пива Budweisei Heineken составляет:


    Это расстояние лишь незначительно превосходит то, которое получилось бы, если бы для расчета была взята только одна переменная — kalorien (калории):


    |144 - 152 | = 8


    Данный эффект можно объяснить тем, что уровни значений переменных kalorien (калории) и kosten (расходы) очень сильно отличаются друг от друга: у переменной kosten (расходы) значения меньше 1, а у переменной kalorien (калории) больше 100. Согласно формуле евклидовой меры, переменная, имеющая большие значения, практически полностью доминирует над переменной с малыми значениями.


    Решением этой проблемы является рассмотренное в главе 19.1 z-преобразование (стандартизация) значений переменных. Стандартизация приводит значения всех преобразованных переменных к единому диапазону значений, а именно от —3 до +3.


    Если Вы произведёте такое преобразование для переменных kalorien (калории) и kosten (расходы), то для пива Budweiser получите стандартизованные значения равные 0,400 и —0,469 соответственно, а для пива Heineken стандартизированные значения 0,649 и 1,848 соответственно.


    Тогда расстояние между двумя сортами пива получится равным


    Таким образом, при помощи диаграммы рассеяния для двух переменных: kalorien (калории) и kosten (расходы), мы провели самый простой кластерный анализ. Мы выбрали такой вид графического представления, с помощью которого можно было бы отчётливо распознать группирование в кластеры (четыре в нашем случае).


    К сожалению, столь отчётливая картина отношений между переменными, как в приведенном примере, встречается очень редко. Во-первых, структуры кластеров, если вообще таковые имеются, не так чётко разделены, особенно при наличии большого количества наблюдений. Скорее наоборот, кластеры размыты и даже проникают друг в друга. Во-вторых, как правило, кластерный анализ проводится не с двумя, а с намного большим количеством переменных.


    При кластерном анализе с тремя переменными можно ввести ещё одну ось — ось z и рассматривать размещение наблюдений, а также проводить расчёт расстояния по формуле евклидовой меры в трёхмерном пространстве.


    При наличии более трёх переменных определение расстояния между двумя точками х и у в любом n-мерном пространстве для математиков не представляет особого труда. Формула Евклида в таких случаях приобретает следующий вид:


    Наряду с евклидовой мерой расстояния, SPSS предлагает и другие дистанционные меры, а также меры подобия. Так что кластерный анализ можно проводить не только с переменными, относящимися к интервальной шкале, как в приведенном случае, но и с дихотомическими переменными, к примеру. В таком ситуации применяется уже другие дистанционные меры и меры подобия (см. разд. 20.3).


    При проведении кластерного анализа отдельные кластеры могут формироваться при помощи пошагового слияния, для которого существует ряд различных методов (см. разд. 20.4). Важную роль играют иерархические и партиционные методы, причём последние применяются в подавляющем большинстве случаев. Оба эти метода можно задействовать, если пройти через меню Analyze (Анализ) Classify (Классифицировать)


    Они помещены в этом меню под именами Hierarchical Cluster... (Иерархический кластер) и K-Means Cluster... (Кластерный анализ методом к-средних).


    Рассмотрим сначала иерархический кластерный анализ, причём начнём с простого примера с 17 сортами пива.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    6.gif

    Изображение: 

    20.2 Иерархический кластерный анализ

    20.2 Иерархический кластерный анализ


    В иерархических методах каждое наблюдение образовывает сначала свой отдельный кластер. На первом шаге два соседних кластера объединяются в один; этот процесс может продолжаться до тех пор, пока не останутся только два кластера. В методе, который в SPSS установлен по умолчанию (Between-groups linkage (Связь между группами)), расстояние между кластерами является средним значением всех расстояний между всеми возможными парами точек из обоих кластеров.

    20.2.1 Иерархический кластерный анализ с двумя переменными

    20.2.1 Иерархический кластерный анализ с двумя переменными


    Соберём заданные 17 сортов пива в кластеры при помощи параметров kalorien (калории) и kosten (расходы).

    •  Выберите в меню Analyze (Анализ) Classify (Классифицировать) Hierarchical Cluster... (Иерархический кластерный анализ)

    Вы увидите диалоговое окно Hierarchical Cluster Analysis (Иерархический кластерный анализ) (см. рис. 20.3).

    •  Переменные каlorien (калории) и kosten (расходы) поместите в поле тестируемых переменных, а текстовую переменную bier (пиво) в поле с именем Label cases by: (Наименования (метки) наблюдений:).

    •  Щелчком по выключателю Statistics... (Статистики) откройте диалоговое окно Hierarchical Cluster Analysis: Statistics (Иерархический кластерный анализ: Статистики) и наряду с выводом последовательности слияния (Agglomeration schedule) активируйте вывод показателя принадлежности к кластеру для каждого наблюдения. Хотя на основании графического представления на диаграмме рассеяния (см. рис. 20.2) и ожидается результат в виде четырёх кластеров, но не можем быть полностью уверены в достижении этого результата. Поэтому, для верности активируйте Range of solutions: (Область решений) и введите числа 2 и 5 в качестве границ области.

    •  Вернувшись в главное диалоговое окно, щёлкните по выключателю Plots... (Диаграммы). Активируйте опцию вывода древовидной диаграммы (Dendrogram) и посредством опции None (Нет) отмените вывод накопительной диаграммы.


    Рис. 20.3: Диалоговое окно Hierarchical Cluster Analysis (Иерархический кластерный анализ)

    •  С помощью кнопки Method... (Метод) Вы получаете возможность выбрать метод образования кластеров, а также метод расчета дистанционной меры и меры подобия соответственно.

    SPSS предлагает, в общей сложности, семь различных методов объединения, которые будут рассмотрены в главе 20.4. Метод Between-groups linkage (Связь между группами) устанавливается по умолчанию.


    Дистанционные меры и меры подобия зависят от вида переменных, участвующих в анализе, то есть выбор меры зависит от типа переменной и шкалы, к которой она относится: интервальная переменная, частоты или бинарные (дихотомические) данные. В рассматриваемом примере фигурируют данные, относящиеся к интервальной шкале, для которых по умолчанию в качестве дистанционной меры устанавливается квадрат евклидового расстояния (Squared Euclidean distance). Некоторые дистанционные меры и меры подобия будут рассмотрены в главе 20.3.

    •  Оставьте предварительные установки и в поле Transform Values (Преобразовывать значения) установите z-преобразование (стандартизацию) значений; необходимость этой опции была уже рассмотрена в главе 20.1. Другие предлагаемые возможности стандартизации играют скорее второстепенную роль.

    •  Вернитесь назад в главное диалоговое окно и начните расчёт нажатием ОК.

    После обычной обшей статистической сводки итогов по наблюдениям, в окне просмотра сначала приводится обзор принадлежности, из которого можно выяснить очерёдность построения кластеров, а также их оптимальное количество. По двум колонкам, расположенным под общей шапкой Cluster Combined (Объединение в кластеры), можно увидеть, что на первом шаге были объединены наблюдения 5 и 12 (т.е. Heineken и Becks); эти две марки максимально похожи друг на друга и отдалены друг от друга очень малое расстояние. Эти два наблюдения образовывают кластер с номером 5, в то время как кластер 12 в обзорной таблице больше не появляется. На следующем шаге происходит объединение наблюдений 10 и 17 (Coors Light и Schlitz Light), затем 2 и 3 (Lowenbrau и Michelob) и т.д.


    Agglomeration Schedule 


    (Порядок агломерации)


    Stage (Шаг)


    Cluster Combined (Объединение в кластеры)


    Coefficients (Коэффициенты)


    Stage Cluster First Appears (Шаг, на котором кластер появляется впервые)


    Next Stage (Следу-ющий шаг)


    Cluster 1 (Кластер 1 )


    Cluster 2 (Кластер 2)


    Cluster 1 (Кластер 1 )


    Cluster 2 (Кластер 2)


    1


    5


    12


    8.508Е-03


    0


    0


    9


    2


    10


    17


    2.880Е-02


    0


    0


    4


    3


    2


    3


    4.273Е-02


    0


    0


    13


    4


    8


    10


    6.432Е-02


    0


    2


    7


    5


    7


    13


    8.040Е-02


    0


    0


    8


    6


    1


    15


    ,117


    0


    0


    8


    7


    8


    9


    ,206


    4


    0


    14


    8


    1


    7


    ,219


    6


    5


    12


    9


    5


    11


    ,233


    1


    0


    11


    10


    14


    16


    ,313


    0


    0


    14


    11


    4


    5


    ,487


    0


    9


    16


    12


    1


    6


    ,534


    8


    0


    13


    13


    1


    2


    ,820


    12


    3


    15


    14


    8


    14


    1,205


    7


    70


    15


    15


    1


    8


    4,017


    13


    14


    16


    16


    1


    4


    6,753


    15


    11


    0


    Для определения, какое количество кластеров следовало бы считать оптимальным, решающее значение имеет показатель, выводимый под заголовком "коэффициент". По этим коэффициентом подразумевается расстояние между двумя кластерами, определенное на основании выбранной дистанционной меры с учётом предусмотренного преобразования значений. В нашем случае это квадрат евклидового расстояния, определенный с использованием стандартизованных значений. На этом этапе, где эта мера расстояния между двумя кластерами увеличивается скачкообразно, процесс объединения в новые кластеры необходимо остановить, так как в противном случае были бы объединены уже кластеры, находящиеся на относительно большом расстоянии друг от друга.


    В приведенном примере — это скачок с 1,205 до 4,017. Это означает, что после образования трёх кластеров мы больше не должны производить никаких последующих объединений, а результат с тремя кластерами является оптимальным. Визуально же мы ожидали результат с четырьмя кластерами. Оптимальным считается число кластеров равное разности количества наблюдений (здесь: 17) и количества шагов, после которого коэффициент увеличивается скачкообразно (здесь: 14).


    В пояснении нуждаются ещё и три последние колонки вышеприведенной таблицы, отражающей порядок агломерации; для этого в качестве примера мы рассмотрим строку, соответствующую 14 шагу. Здесь объединяются кластеры 8 и 14. Перед этим кластер 8 уже участвовал в объединениях на шагах 4 и 7, последний раз, стало быть, на шаге 7. Строго говоря, название колонки Stage Cluster First Appears (Шаг, на котором кластер появляется впервые) можно считать ошибочным и вместо этого её следовало назвать Cluster Last Appears (Последнее появление кластера). Кластер 14 последний раз участвовал в объединении кластеров на шаге 10. Новый кластер 8 затем примет участие в объединении кластеров на шаге 15 (колонка: Next Stage (Следующий шаг)).


    Далее по отдельности для результатов расчёта содержащих 5, 4, 3 и 2 кластеров, приводится таблица с информацией о принадлежности каждого наблюдения к кластеру.


    Cluster Membership (Принадлежность к кластеру)


    Case (Случай)


    5 Clusters (5 кластеров)


    4 Clusters (4 кластера)


    3 Clusters (3 кластера)


    2 Clusters (2 кластера)


    1:Budweiser


    1


    1


    1


    1


    2:Lowenbrau


    2


    1


    1


    1


    3:Michelob


    2


    1


    1


    1


    4:Kronenbourg


    3


    2


    2


    2


    5:Heineken


    3


    2


    2


    2


    6:Schmidts


    1


    1


    1


    1


    7:Pabst Blue Ribbon


    1


    1


    1


    1


    8:Miller Light


    4


    3


    3


    1


    9:Budweiser Light


    4


    3


    3


    1


    10:Coors Light


    4


    3


    3


    1


    11:Dos Equis


    3


    2


    2


    2


    12:Becks


    3


    2


    2


    2


    13:Rolling Rock


    1


    1


    1


    1


    14:Pabst Extra Light


    5


    4


    3


    1


    15:Tuborg


    1


    1


    1


    1


    16:OlympiaGold Light


    5


    4


    3


    1


    17:Schlitz Light


    4


    3


    3


    1


    Таблица показывает, что два наблюдения 14 и 16 (Pabst Extra Light и Olympia Gold Light) при переходе к 3-х кластерному решению были включены в кластеры, соседствующие на диаграмме рассеяния; эти марки пива при оптимальном кластерном решении рассматриваются как принадлежащие к одному кластеру. Если посмотреть на 2-х кластерное решение, то оно группирует наблюдения 4, 5, 11 и 12 (Kronenbourg, Heineken, Dos Equis, Becks), то есть марки верхних правых кластеров диаграммы рассеяния; это марки иностранного производства.


    В заключение приводится затребованная нами дендрограмма, которая визуализирует процесс слияния, приведенный в обзорной таблице порядка агломерации. Она идентифицирует объединённые кластеры и значения коэффициентов на каждом шаге. При этом отображаются не исходные значения коэффициентов, а значения приведенные к шкале от 0 до 25. Кластеры, получающиеся в результате слияния, отображаются горизонтальными пунктирными линиями.


    ******HIERARCHICAL CLUSTER ANALYSIS*** Dendrogram usinc ( Average Linkage (Between Groups)


    Rescaled Distantce


     Cluster Combine


    CASE


    0 5 10 15 20 25


    Label


    Hum +---- + ---- + ---- + _--_-- + ------ +


    Heineken


    5


    Becks


    12 - -


    Dos Equis


    11---------------------------------


    Krcnenbourg


    4 --


    LcMBribrau


    2 ----


    Michelcb


    3 - -


    Pabst Blue Ribbon


    7 ------------------------------


    Rolling Rode


    13 -- -


    Budweiser


    4 ---------------


    Tuborg


    15 - -


    Schmdts


    6 ----------------------


    Coors Light


    10 -


    Schlitz Light


    17 -


    Miller Light


    8 - - - - -


    Budweiser Light


    9 -------------------


    Pabst Extra Light


    14 -------------------


    Olynpia Gold Light


    16 - -------------------


    В то время как дендрограмма годится только для графического представления процесса слияния, по диаграмме накопления можно проследить деление кластеров. Так как начиная с 7 версии SPSS графическое представление диаграммы накопления оставляет желать лучшего, мы отказались от активирования ее вывода.


    Для вводного рассмотрения мы выбрали довольно простой пример, включающий только две переменных. В этом случае конфигурация кластеров поддается представлению в графическом виде.

    7.gif

    Изображение: 

    20.2.2 Иерархический кластерный анализ с более чем двумя переменными

    20.2.2 Иерархический кластерный анализ с более чем двумя переменными


    Рассмотрим пример из области кадровой политики некоего предприятия. 18 претендентов прошли 10 различных тестов в кадровом отделе предприятия. Максимальная оценка, которую можно было получить на каждом из тестов, составляет 10 балов. Список тестов был следующим:


    № теста


    Предмет теста


    1


    Память на числа


    2


    Математические задачи


    3


    Находчивость при прямом диалоге


    4


    Тест на составление алгоритмов


    5


    Уверенность во время выступления


    6


    Командный дух


    7


    Находчивость


    8


    Сотрудничество


    9


    Признание в коллективе


    10


    Сила убеждения


    Результаты теста хранятся в файле assess.sav в переменных t1-t10. В файле находится также и текстовая переменная для характеристики тестируемых. С использованием результатов теста соответствия, мы хотим провести кластерный анализ, целью которого является обнаружение групп кандидатов, близких по своим качествам.

    •  Откройте файл assess.sav.

    •  Выберите в меню Analyze (Анализ) Classify (Классифицировать) Hierarchical Cluster... (Иерархический кластерный анализ)

    •  В диалоговом окне Hierarchical Cluster Analysis (Иерархический кластерный анализ) переменные tl-tlO поместите в поле тестируемых переменных, а текстовую переменную name (имя) используйте для обозначения (маркировки) наблюдений.

    •  Для начала должно быть достаточно вывода обзорной таблицы порядка агломерации; не делайте больше запроса на какие-либо данные и деактивируйте вывод диаграмм. Так как все переменные в этом примере имеют одинаковые пределы значений, стандартизация переменных является излишней.

    Обзорная таблица порядка агломерации выглядит следующим образом: 


    Agglomeration Schedule 


    (Порядок агломерации)


    Stage (Шаг)


    Cluster Combined (Объединение в кластеры)


    Coefficients (Коэф-фициенты)


    Stage Cluster First Appears (Шаг, на котором кластер появляется впервые)


    Next Stage (Следую-щий шаг)


    Cluster 1 (Кластер 1)


    Cluster 2 (Кластер 2)


    Cluster 1 (Кластер 1)


    Cluster 2 (Кластер 2)


    1


    1


    4


    ,000


    0


    0


    6


    1


    14


    18


    2,000


    0


    0


    4


    3


    12


    15


    2,000


    0


    0


    6


    4


    9


    14


    2,000


    0


    2


    8


    5


    2


    10


    2,000


    0


    0


    13


    6


    1


    12


    3,000


    1


    3


    15


    7


    13


    16


    4,000


    0


    0


    12


    8


    9


    11


    4,000


    4


    0


    11


    9


    5


    7


    5,000


    0


    0


    14


    10


    6


    17


    6,000


    0


    0


    13


    11


    3


    9


    6,000


    0


    8


    15


    12


    8


    13


    7,000


    0


    7


    14


    13


    2


    6


    7,500


    5


    10


    16


    14


    5


    8


    12,833


    9


    12


    16


    15


    1


    3


    194,000


    6


    11


    17


    16


    2


    5


    198,500


    13


    14


    17


    17


    1


    2


    219,407


    15


    16


    0


    Значительный скачок коэффициента наблюдается после 14-го шага; как указанно в разделе 20.1, это означает, что для данных, включающих 18 наблюдений, оптимальным является решение с четырьмя кластерами. Авторы в этом месте добавляют следующее: данный пример является искусственным, и из дидактических соображений мы предварительно скомпоновали данные таким образом, чтобы получился однозначный результат. После определения оптимального количества кластеров организуем для каждого наблюдения вывод информации о принадлежности к кластеру.

    •  Для этого вновь откройте диалоговое окно Hierarchical Cluster Analysis (Иерархический кластерный анализ) и щёлкните по выключателю Statistics... (Статистики). В разделе Cluster Membership (Принадлежность к кластеру) активируйте опцию Single solution (Одно решение) и укажите желаемое количество кластеров 4.

    Информацию о принадлежности каждого наблюдения к определённому кластеру вы можете сохранить в новой переменной.

    •  Пройдите выключатель Save... (Сохранить), активируйте опцию Single solution (Одно решение) и для указания желаемого количества кластеров введите 4. Теперь помимо таблицы порядка агломерации для каждого наблюдения будет выводиться и информация о принадлежности к кластеру.

    Из следующей таблицы видно, что в первый кластер входят четыре человека, во второй кластер — опять четыре человека, в третий кластер — пять человек и в четвёртый кластер — снова пять человек. Неясно ещё, что означают эти четыре кластера, то есть о чём говорят результаты 10 тестов, соответственно относящиеся к этим кластерам. Разобраться в значении кластеров нам помогут кластерные профили; они представляют собой средние значения переменных, которые включены в анализ, распределённые по кластерной принадлежности.


    Cluster Membership (Принадлежность к кластеру)


    Case (Случай)


    4 Clusters (4 кластера)


    1:VolkerR


    1


    2:Sigrid К


    2


    3:Elmar M


    3


    4:Peter В


    1


    5:Otto R


    4


    6:Elke M


    2


    7:Sarah К


    4


    8:PeterT


    4


    9:Gudrun M


    3


    10:Siglinde P


    2


    1 1 :Werner W


    3


    12:Achim Z


    1


    13:DieterK


    4


    14:Boris P


    3


    15:Silke W


    1


    16:ClaraT


    4


    17:Manfred К


    2


    18:Richard M


    3


    Если Вы рассмотрите данные в редакторе данных, то заметите, что добавилась переменная clu4_l; эта переменная указывает на кластерную принадлежность каждого наблюдения и может быть использована для расчёта кластерного профиля.

    •  Выберите в меню Analyze (Анализ) Compare Means (Сравнить средние значения) Means... (Средние значения) 

    Переменным t1-t10 присвойте статус зависимых переменных, а переменной clu4_1 статус независимой переменной, и начните расчёт. В качестве результатов расчёта выводятся средние значения и стандартные отклонения итогов десяти тестов для четырёх кластеров. Для удобства поместим средние значения в отдельную таблицу.


    Кластер 1


    Кластер 2


    Кластер 3


    Кластер 4


    Память на числа


    10,00


    10,00


    4,20


    4,80


    Математические задачи


    10,00


    10,00


    4,80


    4,40


    Находчивость при прямом диалоге


    9,00


    4,25


    10,00


    4,00


    Тест на составление алгоритмов


    10,00


    10,00


    4,40


    4,00


    Уверенность во время выступления


    10,00


    4,75


    10,00


    4,20


    Командный дух


    9,50


    4,50


    4,40


    10,00


    Находчивость


    9,25


    3,75


    10,00


    4,40


    Сотрудничество


    9,75


    4,25


    4,00


    10,00


    Признание в коллективе


    10,00


    4,25


    3,80


    10,00


    Сила убеждения


    9,50


    4,25


    10,00


    5,00


    Тестируемые, входящие в первый кластер имеют очень хорошие показатели во всех тестах. Это те конкурсанты, которые наверняка прошли бы на завершающий отборочный тур. Во второй кластер включены те, кто имеет хорошие показатели по математическим тестам (память на числа, математические задачи, тест на составление алгоритмов), но со слабыми оценками в социальной компетентности и уверенности при выступлениях. В третий кластер вошли те, кто уверенно себя чувствует во время выступления, но имеют слабые показатели в математических тестах и социальной компетентности. В конце концов, в четвёртом кластере, собраны люди с высоким уровнем социальной компетентности, но со слабыми результатами в тестах на решение математических задач и на силу убеждения.


    В примерах, подобных этому, перед проведением кластерного анализа рекомендуется сократить количество переменных. Подходящим методом для этого является факторный анализ (см. гл. 19), который большое количество переменных заменяет меньшим количеством факторов. Продемонстрируем данный процесс на следующем примере.

    20.2.3 Иерархический кластерный анализ с предварительным факторным анализом

    20.2.3 Иерархический кластерный анализ с предварительным факторным анализом


    Рассмотрим пример из области географии. В 28 европейских странах в 1985 году были собраны следующие данные, выступающие здесь в качестве переменных:


    Переменная


    Значение


    land


    Страна


    sb


    Процент городского населения


    lem


    Средняя продолжительность жизни мужчин


    lew


    ks


    Детская смертность на 1000 новорожденных


    so


    Количество часов ясной погоды в году


    nt


    Количество дней пасмурной погоды в году


    tjan


    Средняя дневная температура в январе


    tjul


    Средняя дневная температура в июле


    Эти данные вы увидите, если откроете файл europa.sav. Переменная land является текстовой переменной, предназначенной для обозначения страны.


    Целью нашего кластерного анализа является нахождение стран с похожими свойствами. При самом общем рассмотрении переменных (от непосредственного указания стран мы здесь воздержимся) становится заметным, что данные, содержащиеся в файле связаны исключительно с ожидаемой продолжительностью жизни или с климатом. Лишь процентный показатель населения, проживающего в городах, не вписывается в эти рамки. Стало быть, сходства, которые возможно будут найдены между некоторыми странами, основываются на продолжительности жизни и климате этих стран.


    Исходя из вышесказанного, в данном случае перед проведением кластерного анализа рекомендуется сократить количество переменных. Подходящим методом для этого является факторный анализ (см. гл. 19), который вы можете провести, выбрав в меню Analyze (Анализ) Data Reduction (Преобразование данных) Factor... (Факторный анализ)


    Если Вы проведёте факторный анализ и примените, к примеру, вращение по методу варимакса, то получите два фактора. В первый фактор войдут переменные: lem. lew, ks и sb, а во второй фактор - переменные: so, nt, tjan и tjul. Первый фактор однозначно характеризует продолжительность жизни, причём высокое значение фактора означает высокую продолжительность жизни, а второй отражает климатические условия; здесь высокие значения означают тёплый и сухой климат. Вместе с тем, Вы наверняка заметили, что в первый фактор интегрирована и переменная sb, что очевидно указывает на высокую ожидаемую продолжительность жизни при высоких процентных долях городского населения. Вы можете рассчитать факторные значения для этих двух факторов и добавить их к файлу под именами fac1_1 и fac2_1. Чтобы Вам не пришлось самостоятельно проводить факторный анализ на этом этапе, указанные переменные уже включены в файл europa.sav. Вы можете видеть, к примеру, что высокой продолжительностью жизни обладают северные страны (высокие значения переменной fac1_1) или южные страны с тёплым и сухим климатом (высокие значения переменной fac2_1). Факторные значения можно вывести с помощью меню Analyze (Анализ) Reports (Отчёты) Case Summaries... (Итоги по наблюдениям)


    Они выглядят следующим образом:


    Case Summaries a (Итоги по наблюдениям)


    LAND (Страна)


    Lebenserwartung (Ожидаемая продолжительность жизни)


    Klima (Климат)


    1


    ALBA


    -1,78349


    ,57155


    2


    BELG


    ,55235


    -,57937


    3


    BULG


    -,43016


    -,13263


    4


    DAEN


    ,97206


    -,23453


    5


    DDR


    ,26961


    -,3351 1


    6


    DEUT


    ,19121


    -,44413


    7


    FINN


    -,30226


    -1,28467


    8


    FRAN


    1,05511


    1,04870


    9


    GRIE


    ,12794


    2,65654


    10


    GROS


    ,75443


    -,05221


    11


    IRLA


    ,16370


    -,66514


    12


    ISLA


    1,75315


    -,97421


    13


    ITAL


    ,40984


    1,68933


    14


    JUGO


    -2,63161


    -,44127


    15


    LUXE


    -.16469


    -,98618


    16


    NIED


    1,31001


    -,29362


    17


    NORW


    ,96317


    -,46987


    18


    OEST


    -,20396


    -,31971


    19


    POLE


    -,65937


    -,92081


    20


    PORT


    -1,10510


    1,59478


    21


    RUMA


    -1,32450


    ,09481


    22


    SCHD


    1,22645


    -,20543


    23


    SCHZ


    , 56289


    -,45454


    24


    SOWJ


    -,67091


    -1,32517


    25


    SPAN


    , 83627


    1,91193


    26


    TSCH


    -,59407


    -,40632


    27


    TUER


    -,52049


    1,04424


    28


    UNGA


    -,75761


    -,08695


    Total N


    28


    28


    28


    a. Limited to first 100 cases (Ограничено первыми 100 наблюдениями).


    Распределим эти 28 стран по кластерам при помощи двух факторов: ожидаемая продолжительность жизни и климат.

    •  Выберите в меню Analyze (Анализ) Classify (Классифицировать) Hierarchical Cluster... (Иерархический кластерный анализ)

    •  Переменные fac1_1 и fac2_1 поместите в поле тестируемых переменных, а переменную land (страна) — в поле с именем Label cases by: (Наименование (маркировка) наблюдений).

    •  После прохождения выключателя Statistics... (Статистики), наряду с таблицей порядка агломерации сделайте запрос на вывод информации о принадлежности к кластеру для наблюдений. Активируйте Range of solutions: (Область решений) и введите граничные значения 2 и 5.

    •  Для сохранения информации о принадлежности отдельных наблюдений к кластеру в виде дополнительных переменных, воспользуйтесь выключателем Save... (Сохранить). В соответствии с установками, произведенными в диалоговом окне статистики, активируйте и здесь Range of solutions: (Область решений) и введите граничные значения 2 и 5.

    •  Деактивируйте вывод дендрограмм. Так как переменные, используемые в данном кластерном анализе, являются факторными значениями с одинаковыми областями допустимых значений, то стандартизация (z-преобразование) значений является излишней.

    Agglomeration Schedule 


    (Порядок агломерации)


    Stage (Шаг)


    Cluster Combined (Объединение в кластеры)


    Coefficients (Коэф-фициенты)


    Stage Cluster First Appears (Шаг, на котором кластер появляется впервые)


    Next Stage (Следу-ющий шаг)


    Cluster 1 (Кластер 1)


    Cluster 2 (Кластер 2)


    Cluster 1 (Кластер 1)


    Cluster 2 (Кластер 2)


    1


    16


    22


    1,476


    0


    0


    8


    2


    2


    23


    1,569


    0


    0


    10


    3


    5


    6


    1,803


    0


    0


    5


    4


    4


    17


    5,546


    0


    0


    8


    5


    5


    11


    8,487


    3


    0


    10


    6


    3


    18


    8,617


    0


    0


    12


    7


    7


    15


    ,108


    0


    0


    15


    8


    4


    16


    ,118


    4


    1


    13


    9


    26


    28


    ,129


    0


    0


    12


    10


    2


    5


    ,148


    2


    5


    18


    11


    19


    24


    ,164


    0


    0


    15


    12


    3


    26


    ,183


    6


    9


    20


    13


    4


    10


    ,228


    8


    0


    18


    14


    13


    25


    ,231


    0


    0


    19


    15


    7


    19


    ,254


    7


    11


    20


    16


    1


    21


    ,438


    0


    0


    22


    17


    20


    27


    ,645


    0


    0


    22


    18


    2


    4


    ,648


    10


    13


    21


    19


    8


    13


    ,810


    0


    14


    23


    20


    3


    7


    ,939


    12


    15


    24


    21


    2


    12


    1,665


    18


    0


    24


    22


    1


    20


    1,793


    16


    17


    25


    23


    8


    9


    1,839


    19


    0


    27


    24


    2


    3


    2,229


    21


    20


    26


    25


    1


    14


    4,220


    22


    0


    26


    26


    1


    2


    5,925


    25


    24


    27


    27


    1


    8


    6,957


    26


    23


    0


    Сначала приводятся самые важные результаты. В таблице порядка агломерации Вы можете проследить последовательность образования кластеров; объяснения по этому поводу приводились в разделе 20.1. Скачкообразное изменение коэффициентов наблюдается при значениях 2,229 и 4,220; это означает, что после образования четырёх кластеров больше не должно происходит ни каких объединений и решение с четырьмя кластерами является оптимальным.


    Принадлежность наблюдений к кластерам можно взять из нижеследующей таблицы, которая содержит также и информацию о принадлежности к кластерам для других вариантов решения (пять, три и два кластера).


    Если Вы посмотрите на четырёхкластернное решение на нижеследующей таблице, то заметите, к примеру, что к третьему кластеру относятся следующие страны: Франция, Греция, Италия и Испания. Это страны с высокой продолжительностью жизни и тёплым климатом и поэтому не зря они являются предпочтительными для отдыха.


    Cluster Membership (Принадлежность к кластеру)


    Case (Случай)


    5 Clusters (5 кластеров)


    4 Clusters (4 кластера)


    3 Clusters (3 кластера)


    2 Clusters (2 кластера)


    1:ALBA


    1


    1




    2:BELG


    2


    2


    2


    1


    3:BULG


    3



    2


    1


    4:DAEN 5:DEUT



    2


    2



    6:DDR


    2


    2



    1


    7:FINN


    3



    -3


    2


    8:FRAN


    4


    3


    -3


    2


    9:GRIE


    4


    2


    2


    1


    10:iGROS


    2


    2


    1


    11:IRLA


    2



    2


    1


    12:ISLA


    2


    3


    о


    2


    13:ITAL


    4


    4


    1


    1


    14:JUGO


    5


    2


    2


    1


    1 5:LUXE


    3


    2


    2


    1


    16:NIED


    2


    2


    1


    17:NORW


    2


    2


    2


    1


    18:OEST


    3


    2


    2


    1


    19:POLE


    3


    2


    1


    1


    1


    20:PORT


    1


    1


    1


    1


    21:RUMA


    1


    2


    1


    22:SCHD 23:SCHZ



    2


    2


    1


    24:SOWJ


    3


    1


    i


    2


    !25:SPAN


    4


    1


    26:TSCH


    3


    1


    1


    1


    27:TUER 28:UNGA


    1


    2


    1


    1

    20.3 Меры расстояния и меры сходства

    20.3 Меры расстояния и меры сходства


    Основой кластеризации (образования групп) наблюдений является дистанционная матрица и матрица подобия наблюдений. Так как расстояние (дистанция) также применяется и для оценки подобия, то разница между этими двумя матрицами не велика. В зависимости от того, к какой шкале измерений относятся переменные, участвующие в анализе, SPSS предлагает различные дистанционные меры и меры подобия.

    20.3.1 Переменные, относящиеся к интервальной шкале (метрические переменные)

    20.3.1 Переменные, относящиеся к интервальной шкале (метрические переменные)


    Для переменных такого рода на выбор предлагается восемь различных мер расстояния и мер сходства, которые мы и рассмотрим далее. Примером расчёта послужат два наблюдения из файла assess.sav (см. гл. 20.3), для которых расстояние и подобие должны быть рассчитаны с использованием переменных t3 и t4:


    t3


    t4


    Отто P.


    5


    4


    Эльке М.


    4


    10


    Евклидова дистанция (расстояние) 


    Евклидова дистанция между двумя точками х и у — это наименьшее расстояние  между ними. В двух- или трёхмерном случае — это прямая, соединяющая данные точки. Общей формулой для n-мерного случая (л переменных) является: 1


    Сокращение dist, как и в следующей формуле, соответствует слову дистанция. Для ! приведенного примера получим


    Квадрат евклидового расстояния


    Этот вариант устанавливается по умолчанию. Благодаря возведению в квадрат при расчёте лучше учитываются большие разности. Эта мера должна всегда использоваться при построении кластеров при помощи центроидного и медианного методов, а также метода Варда (Ward-Method) (см. разд. 20.5).


    Для приведенного примера имеем cfot=(5-4)2 + (4-10)2 =37


    Косинус


    Как и для корреляционных коэффициентов Пирсона, область значений этой меры находится между -1 и +1.


    Для приведенного примера имеем


    Корреляция Пирсона


    Если кластеризация наблюдений осуществляется только на основании двух переменных, то корреляционный коэффициент Пирсона (см. разд. 15.1) со значениями находящимися в пределах от -1 до +1 не годится для использования в качестве меры подобия; он будет давать только значения -1 или +1.


    Чебышев (Chebychev)


    Разностью двух наблюдений является абсолютное значение максимальной разности последовательных пар переменных, соответствующих этим наблюдениям.


    В приведенном примере абсолютная разность значений первой переменной равна 1, а второй переменной — 6. Поэтому разность Чебышева равна 6.


    Блок (Block)


    Эта дистанционная мера, называемая также дистанцией Манхэттена или в шутку — дистанцией таксиста, определяется суммой абсолютных разностей пар значений. Для двумерного пространства это не прямолинейное евклидова расстояние между двумя точками, а путь, который должен преодолеть Манхэттенский таксист, чтобы проехать от одного дома к другому по улицам, пересекающимся под прямым углом.


    Для нашего примера имеем dfst = |5-4| + |4-10| = 7


    Минковский (Minkowski)


    Расстояние Минковского равно корню r-ой степени из суммы абсолютных разностей пар значений взятых в r-ой степени:


    В SPSS при расчете этого расстояния допускается применение только квадратного корня, в то время как степень разности значений можно выбрать в пределах от 1 до 4. Если эту степень взять равной 2, то получим евклидово расстояние.


    Пользовательская мера


    Это обобщенный вариант расстояния Минковского. Это расстояние, называемое также степенным расстоянием, равно корню r-ой степени из суммы абсолютных разностей пар значений взятой в р-ой степени:


    Здесь как для корня, так и для степени суммы можно выбирать значения от 1 до 4.

    8.gif

    Изображение: 

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    14.gif

    Изображение: 

    15.gif

    Изображение: 

    20.3.2 Частоты

    20.3.2 Частоты


    В качестве примера возьмём файл laender.sav, в котором значения переменных отображают частоты. В файле находится текстовая переменная land (федеральная земля) и три переменные cdu, spd и andere (другие). Для шестнадцати земель Федеративной Республики Германия в 1994 году эти переменные отображают количество мест в земельном парламенте, принадлежащих двум основным партиям — CDU и SPD, а также места, относящиеся к другим партиям.

    •  Откройте файл laender.sav.

    •  На основании трёх переменных cdu, spd и andere проведите иерархический кластерный анализ, текстовую переменную land примените для обозначения наблюдений.

    •  Через выключатель Method... (Метод) активируйте опцию Counts (Частоты). У Вас появится возможность выбора между двумя дистанционными мерами.

    Мера хи-квадрат 


    Для того, чтобы найти расстояние между двумя наблюдениями, сравнивают частоты выпадения переменных, относящихся к этим наблюдениям. В качестве примера рассмотрим две федеративные земли: Хессен и Тюринген:


    CDU


    SPD


    Andere (Другие)


    Хессен 


    46 


    46 


    18 

    Тюринген 43 21 25

    Для такой таблицы долей присутствия разных партий подходит статистика хи-квадрат (см. разд. 11.3.1). Квадратный корень из значения хи-квадрат будет применяться в качестве дистанционной меры.


    В приведенном примере значение хи-квадрат получилось равным 8,447 значит дистанционная мера равна 2,9064.


    Мера фи-квадрат 


    Эта мера представляет собой попытку нормализации меры хи-квадрат. Для этого она делится на квадратный корень общей суммы частот.


    В рассматриваемом примере сумма частот для двух земель Хессен и Тюринген равна 199, так что мера фи-квадрат получается равной 0,2060.


    Если Вы в качестве дистанционной меры выберите меру хи-квадрат, то получите результат, в котором оптимальным решением окажется решение с пятью кластерами. Два самых больших кластера образовываются землями, в которых CDU или SPD имеют большинство мест, один кластер — землями Бранденбург и Бремен, в управлении которых относительно велико представительство других партий, один кластер образует Бавария, в связи с абсолютно доминирующей ролью CDU и один кластер — Саксония, тоже в связи с доминирующей ролью CDU, но с некоторой долей других партий, которая больше доли SPD.

    20.3.3 Бинарные переменные

    20.3.3 Бинарные переменные


    Здесь, как правило, речь идёт о переменных, которые указывают на факт осуществления некоторого события или выполнения определённого критерия. В файле данных это обстоятельство должно быть закодировано при помощи двух численных значений, причём в соответствии с установками по умолчанию, SPSS для кодировки осуществления события ожидает цифру 1.


    Если сопоставить друг с другом две переменные, то все возможные сочетания наблюдений дают четыре различные частоты, которые называются а, Ь, с, d и имеют следующий смысл:

    Переменная 2
    сбылось  не сбылось

    Переменная 1


    Сбылось 


    а 


    Не сбылось с d

    На основании этих частот, можно рассчитать множество различных дистанционных мер, 27 из которых применяются в SPSS. Двадцать разновидностей мер, называемых мерами подобия, рассмотрены в разделе 15.4. Остальные приводятся ниже.


    Квадрат евклидовою расстояния


    Бинарное евклидово расстояние, возведенное в квадрат, представляет собой количество наблюдений, для которых, по крайней мере, один из критериев присутствует и один отсутствует. Эта мера является установкой по умолчанию.


    dist= b + с


    Евклидово расстояние


    Бинарное евклидово расстояние представляет собой корень из числа наблюдений, для которых, по крайней мере, один из критериев присутствует и один отсутствует.


    Разность длин


    Эта мера имеет минимальное значение равное 0 и не имеет верхнего придела.


    Образцовая разность


    Образцовая разность может принимать значения от 0 до 1.


    Дисперсия


    Дисперсия имеет минимальное значение равное 0 и не имеет верхнего придела.


    Форма


    У этой дистанционной меры нет ни нижнего ни верхнего предела


    Мера Ланса и Уильямса (Lance and Williams) 


    Эта мера может принимать значения от 0 до 1.


    Приведенные меры отличаются друг от друга присутствием в соответствующей формуле различных наборов из четырёх частот: а, b, с и d


    Так, для евклидовой меры в расчёт включают только те наблюдения, для которых имеется один признак и отсутствует другой, а в других дистанционных формулах учитываются все частоты. Исключением является дистанционная мера по Лансу и Уильямсу, в которой в расчет не берутся те наблюдения, для которых отсутствуют оба признака.


    На какой мере Вы остановите свой выбор, зависит от того, какую роль вы отводите частотам а, b, с и d.

    17.gif

    Изображение: 

    18.gif

    Изображение: 

    19.gif

    Изображение: 

    20.gif

    Изображение: 

    20.4 Методы объединения

    20.4 Методы объединения


    SPSS предлагает, в общей сложности, семь методов объединения. Из них метод Связь между группами (Between-groups linkage) устанавливается по умолчанию.


    Связь между группами


    Дистанция между кластерами равна среднему значению дистанций между всеми возможными парами наблюдений, причём один наблюдения берётся из одного кластера, а другой из другого. Информация, необходимая для расчёта дистанции, находится на основании всех теоретически возможных пар наблюдений. По этой причине данный метод и устанавливается по умолчанию.


    Связь внутри групп


    Это вариант связи между группами, а именно, здесь дистанция между двумя кластерами рассчитывается на основании всех возможных пар наблюдений, принадлежащих обоим кластеров, причём учитываются также и пары наблюдений, образующиеся внутри кластеров.


    Близлежащий сосед


    Дистанция между двумя кластерами определяется, как расстояние между парой значений наблюдений, расположенных друг к другу ближе всего, причём каждое наблюдение берётся из своего кластера.


    Дальний сосед


    Дистанция между двумя кластерами определяется как расстояние между самыми удалёнными друг от друга значениями наблюдений, причём каждое наблюдение берётся из своего кластера.


    Центроидная кластеризация


    В обоих кластерах рассчитываются средние значения переменных относящихся к ним наблюдений. Затем расстояние между двумя кластерами рассчитывается как дистанция между двумя осредненными наблюдениями.


    Медианная кластеризация


    Этот метод похож на центроидную кластеризацию. Однако в предидущем методе центроид нового кластера получается как взвешенное среднее центроидов обоих исходных кластеров, причём количества наблюдений исходных кластеров образовывают весовой коэффициент. В медианном же методе оба исходных кластера берутся с одинаковым весом.


    Метод Варда (Ward-Method)


    Сначала в обоих кластерах для всех имеющихся наблюдений производится расчёт средних значений отдельных переменных. Затем вычисляются квадраты евклидовых расстояний от отдельных наблюдений каждого кластера до этого кластерного среднего значения. Эти дистанции суммируются. Потом в один новый кластер объединяются те кластера, при объединении которых получается наименьший прирост общей суммы дистанций. Так как некоторые из предлагаемых методов имеют явные недостатки (Близлежащий сосед, Дальний сосед), а другие очень мало наглядны и плохо поддаются последующему анализу, рекомендуется применять устанавливаемый по умолчанию и наиболее понятный метод Between-groups linkage (Связь между группами).

    20.5 Кластерный анализ при большом количестве наблюдений (Кластерный анализ методом к-средних)

    20.5 Кластерный анализ при большом количестве наблюдений (Кластерный анализ методом к-средних)


    Иерархические методы объединения, хотя и точны, но трудоёмки: на каждом шаге необходимо выстраивать дистанционную матрицу для всех текущих кластеров. Расчётное время растёт пропорционально третьей степени количества наблюдений, что при наличии нескольких тысяч наблюдений может утомить и серьёзные вычислительные машины.


    Поэтому при наличии большого количества наблюдений применяют другие методы. Недостаток этих методов заключается в том, что здесь необходимо заранее задавать количество кластеров, а не так как в иерархическом анализе, получить это в качестве результата Эту проблему можно преодолеть проведением иерархического анализа со случайно отобранной выборкой наблюдений и, таким образом, определить оптимальное количество кластеров. Если количество кластеров указать предварительно, то появляется следующая проблема: определение начальных значений центров кластеров. Их также можно взять из предварительно проведённого иерархического анализа, в котором для каждого наблюдения рассчитывают средние значения переменных, использовавшихся при анализе, а потом в определённой форме сохраняют их в некотором файле. Этот файл может быть затем прочитан методом, который применяется для обработки больших количеств наблюдений. Если нет желания проходить весь этот длинный путь, то можно воспользоваться методом, предлагаемым для данного наблюдения программой SPSS. Если количество кластеров k, которое необходимо получить в результате объединения, задано заранее, то первые k наблюдений, содержащихся в файле, используются как первые кластеры. На последующих шагах кластерный центр заменяется наблюдением, если наименьшее расстояние от него до кластерного центра больше расстояния между двумя ближайшими кластерами. По этому правилу заменяется тот кластерный центр, который находится ближе всего к данному наблюдению. Таким образом получается новый набор исходных кластерных центров. Для завершения шага процедуры рассчитывается новое положение центров кластеров, а наблюдения перераспределяются между кластерами с изменённым центрами. Этот итерационный процесс продолжается до тех пор, пока кластерные центры не перестанут изменять свое положение или пока не будет достигнуто максимальное число итераций.


    В качестве примера расчёта по этому алгоритму, рассмотрим выборку из результатов исследований Института социологии Марбургского Университета им. Филипса, в котором проводился опрос 1000 студентов относительно использования ими компьютера и их отношения к современным информационным и телекоммуникационным технологиям. В разделе "Пользование компьютерными программами" были представлены следующие вопросы с различным количеством подпунктов, на которые необходимо было ответить в соответствии с пятибальной шкалой (от отлично до абсолютно не использую): 


    1. Насколько свободно вы можете работать в следующих приложениях?


    Обработка текста, Графические программы, обработка звука или видео,  монтаж Базы данных и табличные расчёты


    2. Насколько хорошо вы владеете следующими языками программирования?


    BASIC, Paskal ,С, Машинные языки, Программирование для Интернета(к примеру, HTML), Java 


    3. Насколько хорошо Вы можете работать в следующих операционных системах?


    DOS , Windows ,UNIX 


    4. Насколько хорошо Вы разбираетесь в  следующих возможностях Интернета?


      E-mail, группы новостей,  почтовая рассылка, Путешествие по всемирной сети Интернет, Chat, IRC, ICQ, Предложение собственных услуг(к примеру, домашней страницы)


     5. Насколько хорошо Вы разбираетесь в  играх?


      Как часто Вы играете в компьютерные  игры,  Насколько хорошо Вы ориентируетесь в сценах компьютерных игр?


    Ответы на эти вопросы хранятся в переменных vla-v5b в файле computer.sav. В этом файле также находятся и другие переменные, использовавшиеся при исследовании (пол, возраст, место жительства, профессия). На основании вопросов об использовании программных продуктов попытаемся определить группы (кластеры) пользователей. Для начала рекомендуется сократить количество переменных при помощи факторного анализа, как описано в разделе 20.2.3.

    •  Откройте файл computer.sav

    •  Выберите в меню Analyze (Анализ) Data Reduction (Преобразование данных) Factor... (Факторный анализ)

    •  Переменные vla-v5b внесите в список целевых переменных.

    •  Через выключатель Extraction... (Отбор) деактивируйте вывод неповёрнутого факторного решения.

    •  Через выключатель Rotation... (Вращение) для осуществления вращения активируйте метод варимакса.

    •  Минуя выключатель Options... (Опции) в разделе Coefficient Display Format (Формат отображения коэффициентов) (подразумеваются факторные нагрузки) активируйте Sorted by Size (Отсортированные по размеру). Затем активируйте опцию Suppress absolute values less then: (He выводить абсолютные значения меньше чем:) и введите значение ,40.

    •  В заключение щёлкните по выключателю Scores... (Значения), чтобы значения факторов сохранить в виде новых переменных.

    В результате расчёта было отобрано четыре фактора и добавлено в файл четыре переменные от (fac1_1 до fac4_1), которые и отображают эти четыре фактора. Среди результатов присутствует повёрнутая факторная матрица (см. следующую таблицу).


    Факторная матрица красноречиво демонстрирует, что отобранные факторы могут быть расположены в следующей смысловой последовательности (по убыванию значимости):

    •  Приложение

    •  Программирование

    •  Использование Интернета

    •  Игры

    Rotated Component Matrix


    (Повёрнутая матрица компонентов)


    Component (Компонент)


    1


    2


    3


    4


    Textverarbeitung (Обработка текста)


    ,848


    Windows


    ,840


    DOS


    ,653


    WWW


    ,619


    Datenbanken (Базы данных и табличные расчёты)


    ,611


    Multimedia (Мультимедиа)


    ,535


    С


    ,771


    Maschinensprache (Машинные языки)


    ,741


    PASCAL


    ,729


    BASIC


    ,612


    Java


    ,606


    ,474


    UNIX


    ,587


    ,504


    Chat


    ,699


    eigene Dienste (Предложение собственных услуг )


    ,696


    Internetsprachen (Программирование для Интернет)


    ,468


    ,670


    Email


    ,584


    ,609


    ICQ


    ,601


    Szene (Сцены компьютерных игр)


    ,881


    Intensitaet (Интенсивность)


    ,850


    Extraction Method: Principal Component Analysis (Метод отбора: Анализ главных компонентов).


    Rotation Method: Varimax with Kaiser Normalization (Метод вращения: варимакс с нормализацией Кайзера).


    a. Rotation converged in 11 iterations (Вращение осуществлено за 11 итераций).


    Теперь используем сохранённые нами значения этих четырёх факторов для проведения кластерного анализа для студентов. Так как количество наблюдений равное 1085 слишком велико для иерархического кластерного анализа, выберем метод анализа кластерных центров.

    •  Присвойте переменным fac1_1-fac4_1 метки: "Приложения", "Программирование", "Использование Интернет" и "Игры" соответственно.

    •  Выберите в меню Analyze (Анализ) Classify (Классифицировать) K-Means Cluster... (Кластерный анализ методом к-средних)

    Откроется диалоговое окно K-Means Cluster Analysis (Кластерный анализ методом к-средних).



    Рис. 20.4: Диалоговое окно K-Means Cluster Analysis (Анализ кластерных центров)

    •  Переменные от fac1_1 до fac4_1 поместите в поле тестируемых переменных. Теперь Вы подошли к тому месту, где нужно указывать количество кластеров. Подходящим вариантом было бы сперва провести иерархический кластерный анализ для произвольно выбранных наблюдений и получившееся количество кластеров принять за оптимальное. Вы, конечно же, можете провести и несколько опытных, пробных расчётов с различным количеством кластеров и после этого определиться с подходящим вариантом решения.

    •  Мы остановимся на четырёх кластерах; введите это значение в поле Number of Clusters (Количество кластеров).

    •  Через выключатель Iterate... (Итерации) укажите число итераций равное 99; установленное по умолчанию количество итераций равное 10, оказалось бы недостаточным.

    •  Щёлкните по выключателю Save... (Сохранить), чтобы при помощи дополнительных переменных зафиксировать принадлежность наблюдений к кластеру.

    •  Щёлкните на ОК, чтобы начать расчёт.

    Сначала приводятся первичные кластерные центры и обобщённые данные итерационного процесса (30 итераций); затем выводятся окончательные кластерные центры и информация о количестве наблюдений.


    Final Cluster Centers 


    (Кластерные центры окончательного решения)


    Cluster (Кластер)


    1


    2


    3


    4


    Приложение


    -,15219


    -,62362


    -,23459


    1,16856


    Программирование


    -2,91321


    ,232223


    ,23371


    ,05918


    Использование Интернет


    -1,71057


    ,7232


     -.02994


    ,25268


    Игры


    ,04717


    ,51053


    -1,51014


    ,26081


    При оценке кластерных центров следует в первую очередь обратить внимание на то, что здесь речь идёт о средних значениях факторов, которые находятся в пределах примерно от -3 до +3. К тому же, надо помнить, что в соответствии с кодировкой ответов (1 = отлично, 5 = абсолютно не использую) большое отрицательное значение фактора означает его большую степень его проявления, то есть сигнализирует о высокой компетентности, и наоборот, большое положительное значение фактора подразумевает низкую степень его проявления.


    Если учесть всё вышесказанное, то наши четыре кластера можно интерпретировать следующим образом:


    Кластер1: Программисты, Интернет-эксперты


    Кластер2: Пользователи стандартного программного обеспечения


    КластерЗ: Игроки


    Кластер4: Начинающие пользователи


    В заключение выводятся показатели количества наблюдений, относящихся к каждому из кластеров. Группа пользователей (кластер 2) наиболее многочисленна.


    Number of Cases in each Cluster 


    (Количество наблюдений в каждом кластере)


    Cluster (Кластер)


    1


    63,000


    2


    488,000


    3


    221,000


    4


    313,000


    Valid (Действительные)


    1085,000


    Missing (Отсутствующие)


    ,000


    К исходному файлу была добавлена переменная qc1_1, отражающая принадлежность к определённому кластеру. Эту переменную можно использовать для обнаружения возможных связей между кластерной принадлежностью и полом, возрастом, профессией и происхождением (западные земли Германии, восточные земли Германии, зарубежные страны).


    Наряду с количеством кластеров можно так же, как было упомянуто в начале главы, задать и первичные кластерные центры. Для этого их необходимо определённым образом ввести в файл данных SPSS. Изучим процесс создания такого файла на рассмотренном примере,

    •  После щёлка в диалоговом окне K-Means Cluster Analysis (Кластерный анализ методом k-средних) по выключателю Centers» (Центры), диалоговое окно примет расширенный вид (см. рис. 20.5).

    •  Активируйте Read initial from (Читать первичные значения из) и щёлкните на выключателе File... (Файл). Откроется диалоговое окно K-Means Cluster Analysis: Read initial from (Кластерный анализ методом К-средних: Читать первичные значения из).

    •  Откройте файл zentren.sav.

    Файл содержит

    •  количественную переменную с именем cluster_

    •  одну строку для каждого кластера

    •  первичные значения для каждой кластерной переменной.

    То, как выглядит этот файл в редакторе данных, Вы можете увидеть на рисунке 20.6. Аналогично тому, как Вы смогли считать из файла первичные кластерные центры, при помощи выключателя Write final as (Сохранить окончательные результаты как), Вы можете сохранить окончательные кластерные центры в отдельном файле для дальнейших расчётов.



    Рис. 20.5: Диалоговое окно K-Means Cluster Analysis (Анализ кластерных центров)



    Рис. 20.6: Файл с первичными кластерными центрами


    Мы надеемся, что при помощи приведенных примеров нам удалось пробудить у Вас интерес к кластерному анализу и облегчить понимание интереснейших статистических методов.

    22.gif

    Изображение: 

    23.gif

    Изображение: 

    24.gif

    Изображение: 

    Глава 21. Анализ пригодности

    Глава 21. Анализ пригодности

    1. Анализ пригодности

    Анализ пригодности


    Анализ пригодности (а также: анализ вопросов или анализ заданий) помогает подбирать вопросы (задания) для тестов. При помощи разнообразных критериев а результате такого такой анализа устанавливается, какие задания подходят для определённого теста, а какие нет.


    Для этой цели некоторой совокупности (выборке) респондентов предлагают предварительный вариант теста со всеми предполагаемыми заданиями и проводят анализ этих заданий. При помощи этого анализа исключают неподходящие задания, а оставшиеся включают в итоговую форму теста. Тест составленный таким образом должен рассматриваться не как статистический проверочный метод (к примеру, t-тест или U-тест), а как метод исследования личностных признаков.


    Более подробную информацию о построении и анализе тестов Вы сможете найти в книге Линерта (Lienert) (см. список литературы). Линерт подразделяет тесты в зависимости от вида исследуемого личностного признака, а именно выделяются тест уровня образованности, тест способностей и личностный тест. Тестовое задание состоит преимущественно из двух частей: проблемы или вопроса и варианта решения проблемы или ответа.


    Следует понимать разницу между заданиями, для которых считается правильным только один ответ, а другие — неправильными, и заданиями со ступенчатым ответом. Примерами пунктов, построенными по принципу верно — не верно могут служить следующие пункты:

    •  Покупаете ли вы дорогую одежду (да — нет)?

    •  Является ли кит представителем семейства млекопитающих (верно — неверно)? Возможны также и задания с множественными ответами:

    • Кем по национальности был Альфред Нобель (немец — швейцарец — швед — австриец — датчанин)?

    Задания со ступенчатым вариантом ответа построены иначе. Исследуемый личностный признак оценивается не при помощи ответа верно — не верно, а при помощи ответов, указывающих на силу проявления признака, к примеру:

    •  Я теряю самообладание (никогда — редко — иногда — часто).

    Для оценки таких ответов каждому варианту ответа присваивается некоторый количественный показатель (как правило, 1, 2, 3 ...).

    21.1 Задания типа верно — не верно

    21.1 Задания типа верно — не верно


    В качестве примера, который мы хотим обработать при помощи SPSS, рассмотрим личностный тест, с помощью которого определяется степень любопытства опрашиваемых.



    Вопрос


    Правильный ответ


    1


    У Вас много книг?


    Да


    2


    Ходите ли Вы за покупками всё время в одни и те же магазины?


    Нет


    3


    Считаете ли Вы, что космонавтику развивать необходимо?


    Да


    4


    Вас не интересует, почему на вашего соседа одели наручники?


    Нет


    5


    Можете ли Вы долго заниматься чем-нибудь одним?


    Да


    6


    Регулярно ли Вы смотрите новости?


    Да


    7


    Знаете ли Вы, сколько человек живёт в городе, в котором проживаете Вы?


    Да


    8


    Ходите ли Вы на работу всегда одной и той же дорогой?


    Нет


    9


    Становится ли Вам иногда скучно?


    Нет


    10


    Хотели бы Вы полететь на Луну?


    Да


    11


    Читаете ли Вы ежедневные газеты регулярно?


    Да


    12


    Спрашивали ли Вы уже себя, как будет выглядеть мир через сто лет?


    Да


    13


    Замечаете ли вы иногда, что недовольны тем, что Вы можете и знаете?


    Да


    14


    Предоставите ли Вы себя для научных экспериментов?


    Да


    15


    Интересует ли Вас, сколько зарабатывает ваш сосед?


    Да


    16


    Бездельничаете ли Вы во время отпуска?


    Нет


    17


    Приятней ли Вам находиться в кругу большого количества друзей, нежели с одним другом?


    Да


    18


    Случается ли с вами часто так, что Вы не знаете с чего начать?


    Да


    Здесь речь идёт о вопросах, на которые следует давать строго определенные ответы: верно или не верно. Ответ верно соответствует наличию любопытства. Такое же самое значение можно присвоить и ответу не верно; при разработке теста, в него рекомендуется включать и такие вопросы, значимым ответом на которые является отрицательный. Это всегда возможно при соответствующей формулировке.


    Если следовать Линерту, то для оценки пригодности отдельных пунктов следует применять нижеследующие два критерия:


    Индекс сложности


    В простейшем случае он представляет собой долю правильных ответов на данный вопрос, взятую в процентах от общего количества ответов. Для вопросов с несколькими возможными ответами и ступенчатыми ответами существуют модифицированные формулы. Удивительно, но для сложных вопросов индекс сложности принимает малые значения, а для лёгких большие. Вопросы с низким и высоким индексом сложности считаются не желательными.


    Коэффициент избирательности


    Коэффициентом избирательности, который является важным критерием для оценки применимости вопроса, служит корреляционный коэффициент между ответом на вопрос и суммарным показателем теста. В качестве суммарного показателя теста берётся сумма всех ответов. Это означает, что все правильные ответы должны иметь одинаковый знак! К сожалению, этому важному обстоятельству в справочниках уделяется не достаточно внимания. Для приведенного примера это означает, что пункты 2, 4, 8, 9 и 16 перед анализом должны быть подвергнуты перекодировке.


    Для определения корреляционного коэффициента Линерт предлагает различные варианты, так, к примеру, двухрядная поточечная корреляция между заданием с ответом верно — не верно и значением масштаба или ранговая корреляция между заданием со ступенчатым ответом и значением масштаба. Как ни странно: SPSS всегда использует коэффициенты Пирсона.


    Непригодные для применения пункты обычно отбираются посредством сравнения индексов сложности и избирательности. Самым простым способом является отбор сначала тех вопросов, которые обладают индексом сложности ниже 20 или выше 80, а затем из списка оставшихся вопросов исключаются те, которые имеют самые низкие коэффициенты избирательности. Линерт предлагает рассчитывать ещё и дополнительные показатели вопросов, такие как: индекс однородности, индекс пригодности, селекционный показатель и (если имеется так называемый внешний критерий) коэффициенты действительности.


    Коэффициент пригодности


    Коэффициент пригодности является важным критерием для оценки результата теста. Он является мерой точности, с которой проводится тестирование некоторого признака. SPSS предлагает для этой цели множество методов; по умолчанию устанавливается альфа Кронбаха (Cronbach's Alpha) со значением, модуль которого находится между 0 и 1. Обработаем наш пример при помощи SPSS.

    •  Откройте файл nuegier.sav.

    Помните о том, что вопросы 2, 4, 8, 9 и 16 должны быть перекодированы; их кодовые числа необходимо поменять местами (1 станет 2, 2 станет 1).

    •  Это можно сделать при помощи метода, рассмотренного в главе 8, посредством выбора меню Transform (Трансформировать) Recode (Перекодировать) Into same Variables... (В те же переменные)

    Можно было бы также воспользоваться и синтаксисом. Для этого необходимо было бы записать следующие инструкции:

    RECODE item2, item4,   item8, item9, item16   (1=2) (2=1).  EXECUTE. 
    •  После перекодировки выберите в меню Analyze (Анализ) Scale (Масштабировать)  Reliability Analysis... (Анализ пригодности) Откроется диалоговое окно Reliability Analysis (Анализ пригодности).

    •  Переменные iteml-itemlS поместите в поле пунктов (Items:). Затем из числа предлагаемых методов расчёта коэффициентов пригодности необходимо выбрать подходящий:


    Рис. 21.1: Диалоговое окно Reliability Analysis (Анализ пригодности)

    •  Alpha (Альфа): Альфа Кронбаха (при дихотомических пунктах используется формула Кудера-Ричардсона 20 (Kuder-Richardson- Formula 20))

    •  Split-half (Расщепление на две половины): Определение пригодности с расщеплением на две половины по Спирману-Брауну (Spearman-Brown)

    •  Guttman (Гуттман): Определение нижней границы пригодности Гуттмана

    •  Parallel (Парралельно): Оценка максимального правдоподобия пригодности теста при условии наличия одинаковых дисперсий пунктов

    •  Strict parallel (Строго параллельно): Оценка максимального правдоподобия пригодности теста при условии наличия одинаковых средних значений пунктов и одинаковых дисперсий пунктов.

    •  Оставьте предварительную установку Alpha (Альфа) и щёлкните на выключателе Statistics...(Статистики). Откроется диалоговое окно Reliability AnalysisStatistics (Анализ пригодности: Статистики).

    Вы можете произвести следующие виды расчётов:

    •  Descriptives for (Дескриптивные (описательные) статистики для) Item (Пункт): Среднее значение и стандартное отклонение для каждого пункта анкеты или вопроса Scale (Шкала): Среднее значение, дисперсия и стандартное отклонение для значения масштаба


    Рис. 21.2: Диалоговое окно Reliability Analysis'.Statistics (Анализ пригодности: Статистики)


    Scale if item deleted (Масштабировать, если пункт удалён): Когда при расчёте значения масштаба этот пункт (вопрос) не учитывается, для каждого такого Пункта (ответа на вопрос анкеты), выводятся: среднее значение и дисперсия значения шкалы, корреляция пункта со значением масштаба (то есть избирательность) и альфа Кохрана.

    •  Summaries (Итоги, общие сведения) 

    Means (Средние значения): Различные виды статистик для средних значений пунктов


    Variances (Дисперсия): Различные виды статистик для дисперсий пунктов


    Covariances (Ковариации): Различные виды статистик для ковариаций между пунктами


    Correlations (Корреляции): Различные виды статистик для корреляций между пунктами.

    •  Inter-Item (Между пунктами)

    Correlations (Корреляции): Корреляционная матрица Covariances (Ковариации): Ковариационная матрица

    •  ANOVA-ТаЫе (Таблица ANOVA)

    F test (F тест): Двухфакторный дисперсионный анализ (факторы: наблюдения, пункты) с повторным измерением и одним значением в каждой ячейке Friedman chi-square (Хи-квадрат Фридмана): тест Хи-квадрат Фридмана и коэффициент согласования Кендала (при наличии переменных, относящихся к порядковой шкале)


    Cochran chi-square (Хи-квадрат Кохрана): Q Кохрана (при наличии дихотомических переменных).


    Далее ещё имеются:

    •  Hottelling's T-square (Т-квадрат Хоттелинга): Тест Хоттелинга для проверки утверждения, что средние значения пунктов равны между собой.

    •  Tukey's test ofadditivity (Критерий аддитивности Тьюки): Тест Тьюки на аддитивность пунктов.

    В случае установки опции Intraclass correlation coefficient (Корреляционный коэффициент внутри класса) речь идёт о расчёте корреляционного коэффициента внутри класса (ICC); информацию по этому поводу Вы найдёте в разделе 15.5.

    •  Здесь ограничьтесь активизацией опции Scale if item deleted (Масштабировать, если пункт удалён) и щёлкните на Continue (Далее).

    •  Начните расчёт нажатием ОК.

    В окне просмотра появятся результаты расчёта. И в 10 версии вывод этих результатов ещё не производится в новой табличной форме.


    RЕLIАВILIТУ ANALYSIS SCALE (ALPHA)


    Item-total


    Statistics


    Scale Mean if Item Deleted


    Scale Variance if Item Deleted


    Corrected Item-Total Correlation


    Alpha if Item Deleted


    ITEM1


    24,9333


    13,5126


    ,5410


    ,7664


    ITEM2


    25,0667


    14,4092


    ,2679


    ,7862


    ITEM3


    25,1000


    13,5414


    ,5097


    ,7684


    ITEM4


    25,4333


    16,0471 -


    -,1676


    ,8052


    ITEMS


    25,2000


    13,6828


    ,4907


    ,7701


    ITEM6


    25,1667


    14,5575


    ,2358


    ,7883


    ITEM7


    25,5000


    15,2931


    ,1738


    ,7887


    ITEMS


    24,8000


    15,1310


    ,1154


    ,7942


    ITEM9


    25,2000


    13,8897


    ,4304


    ,7745


    ITEM10


    24,8667


    13,8437


    ,4732


    ,7717


    ITEM11


    25,3667


    14,2402


    ,4223


    ,7760


    ITEM12


    25,0667


    13,3057


    ,5763


    ,7633


    ITEM13


    25,0000


    13,2414


    ,6017


    ,7615


    ITEM14


    24,9667


    13,8954


    ,4196


    ,7752


    ITEM15


    25,0000


    13,3103


    ,5813


    ,7630


    ITEM16


    25,0333


    14,0333


    ,3713


    ,7787


    ITEM17


    24,9667


    15,3437


    ,0283


    ,8023


    ITEM18


    24,9667


    13,9644


    ,4000


    ,7766


    Reliability Coefficients


    N of Cases =30,0


    N of Items= 18


    Alpha =,7887


    Коэффициент пригодности, равный 0,7887, является очень высоким. В колонке с названием Corrected Item-Total Correlation (Откорректированный пункт — суммарная корреляция) находятся коэффициенты избирательности. Основываясь на значении этих коэффициентов, пункты 4 и 17 можно считать непригодными для дальнейшего использования, да и пункт 8 должен быть исключён.

    •  Мы уже говорили о необходимости проведения расчета индекса сложности. Для расчёта индекса сложности выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    Процентный показатель частоты появления правильного ответа (кодировка 1) является индексом сложности соответствующего пункта. Все индексы сложности собраны в нижеследующей таблице.


    Пункт


    Индекс сложности


    Пункт


    Индекс сложности


    1


    36,7


    10


    30,0


    2


    50,0


    11


    80,0


    3


    53,3


    12


    50,0


    4


    86,7


    13


    43,3


    5


    63,3


    14


    40,0


    6


    60,0


    15


    43,3


    7


    93,3


    16


    46,7


    8


    23,3


    17


    40,0


    9


    63,3


    18


    40,0


    Если следовать рекомендации, сформулированной в начале раздела и исключать пункты с индексом сложности меньшим 20 и большим 80, то помимо пунктов 4, 8 и 17 необходимо исключить из списка и пункт 7.


    Если вновь провести анализ пунктов с оставшимися четырнадцатью пунктами, то коэффициент пригодности получится равным 0,8297. Благодаря исключению неподходящих пунктов он стал ещё выше.

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    21.2 Задания со ступенчатыми ответами

    21.2 Задания со ступенчатыми ответами


    В разделе 19.3 была представлена анкета исследования Фрайбургского университета, посвященного отношению респондентов к болезни. Эта анкета охватывает в общей сложности 35 пунктов, отображающих при помощи кодировок 1 = "абсолютно нет" до 5 = "очень сильно" ситуацию, характеризующую то, как пациенты склонны бороться с поразившим их недугом. Пункты были подвергнуты факторному анализу; один из пяти результирующих факторов мы назвали: "Активное действие, направленное на решение проблемы".


    В этот фактор вошли следующие переменные:


    11


    Искать информацию о заболевании и лечении


    17


    Предпринимать активные действия для решения проблемы


    f8


    Составить план лечения и затем приступить к его реализации


    f13


    Больше себе позволять


    f14


    Пытаться интенсивней жить


    f15


    Решиться на борьбу с болезнью


    f17


    Подбадривать себя


    f18


    Пытаться достичь успеха и самоутверждения


    f19


    Пытаться отвлечься


    110


    Искать уединения


    Эти пункты можно собрать в один тест, который для каждого пациента будет давать некоторое значение на шкале уровня активности его действий. При помощи теста пригодности проверим также реальную пригодность этих пунктов. Так как все пункты имеют положительную кодировку в направлении активного образа действия, в перекодировке, как в разд. 19.1, нет необходимости.

    •  Откройте файл fkv.sav.

    •  Выберите в меню Analyze (Анализ) Scale (Масштабировать) Reliability Analysis... (Анализ пригодности)

    •  Переменные f1, f7, f8, f1З, f14, f15, f17, f18, f19 и f20 поместите в поле, предназначенное для пунктов (вопросов анкеты).

    •  Через выключатель Statistics...(Статистики) в группе Descriptives for (Дескриптивные статистики для) активируйте опцию Scale if Item deleted (Масштабировать, если пункт удалён).

    В окне просмотра появятся следующие результаты.


    RELIABILITY ANALYSIS-SCALE (ALPHA)


    Item-total 

    Statistics

    Scale Scale Mean Variance if Item if Item Deleted Deleted


    Corrected Item-Total Correlation


    Alpha if Item Deleted


    F1 30,2750 45,5214


    ,4514


    ,8059


    F7 30,3937 43,9761


    ,5534


    ,7944


    F8 31,0812 43,8990


    ,5453


    ,7953


    F13 31,1125 46,1885


    ,4592


    ,8046


    F14 30,4250 45,8057


    ,4857


    ,8019


    F15 30,2937 45,1899


    ,4351


    ,8084


    F17 30,4312 43,4418


    ,6558


    ,7840


    F18 30,7000 44,3245


    ,5701


    ,7929


    F19 30,5750 46,7491


    ,4632


    ,8042


    F20 30,7687 48,2166


    ,3679


    ,8131


    Reliability Coefficients


    N of Cases = 160,0


    N of Items =10


    Alpha = ,8170


    В колонке Corrected Item-Total Correlation (Откорректированный пункт — суммарная корреляция) приводятся коэффициенты избирательности, а внизу таблицы можно увидеть коэффициент пригодности. В нашем случае он является довольно высоким — значение равно 0,817. На основании получившихся коэффициентов избирательности нет повода для исключения каких-либо пунктов; после любого такого исключения, в рассматриваемом случае, коэффициент пригодности снижался бы, как показано в колонке Alfa if Item Deleted (Альфа, если пункт удалён).


    Пригодность всех пунктов не является сюрпризом, т.к., за исключением пункта 20 (который к тому же имеет и наименьшую избирательность), все пункты обладают достаточными факторными нагрузками (> 0,4). Как показывает нижеследующая таблица, большие факторные нагрузки говорят о высоких коэффициентах избирательности.


    Избирательность


    Факторная нагрузка


    f1


    0,6558


    0,654


    f7


    0,5701


    0,589


    f8


    0,5534


    0,710


    f13


    0,5453


    0,690


    f14


    0,4857


    0,621


    f15


    0,4632


    0,572


    f17


    0,4592


    0,510


    f18


    0,4514


    0,563


    f19


    0,4351


    0,597


    f20


    0,3679


    <0,400


    Что же касается расчёта индекса сложности, то в данном примере он довольно проблематичен; пожалуй, к правильному ответу можно отнести только кодировки 4 и 5.

    Глава 22. Стандартные графики

    Глава 22. Стандартные графики

    1. Стандартные графики

    Стандартные графики


    Одним из достоинств SPSS для Windows является наличие большого количества разнообразных графиков, которые могу быть построены как при помощи процедур меню графиков, так и из разнообразных процедур меню статистик. Что касается последнего меню, то для выяснения специальных возможностей графического представления Вы можете обратиться к главам: 6 (частотный анализ), 10 (предварительное исследование данных), И (таблицы сопряженности), 16 (регрессионный анализ), 20 (анализ выживания) и 24 (многомерное масштабирование). В главе 4 (Краткий обзор SPSS для Windows) уже были рассмотрены некоторые вопросы построения и редактирования графиков.


    Каждый созданный график появляется в окне просмотра вместе с другими таблицами. Для построения графика, как правило, оказывается достаточным после выбора типа графика указать необходимые переменные, на основании которых он и будет построен по ранее заданной схеме. Если же у Вас появилось желание отредактировать график по своему вкусу, то для этого необходимо дважды щёлкнуть на какой-либо точке в пределах графика. После этого у Вас появится множество возможностей для дополнительного редактирования.


    Начиная с 8-ой версии в SPSS наряду с традиционными стандартными графиками существует возможность создавать и интерактивные графики. Стандартные графики строятся при помощи многочисленных процедур статистического меню или меню графиков, составные компоненты которых и соответственно их возможности нисколько не изменились. Однако, в меню графиков добавилась ещё одна позиция — Interactive (Интерактивно), которая открывает ещё одно собственное меню, служащее для построения так называемых интерактивных графиков. Интерактивные графики дают довольно широкую палитру новых возможностей.


    Наряду с удобными глобальными возможностями менять отдельные стилевые элементы графиков и преобразовывать переменные, используемые для построении графика, отныне при помощи интерактивных графиков становится также возможным одновременное построение нескольких графиков для отдельных категорий дополнительных переменных.


    Чтобы последовательно изложить эти новые возможности интерактивных графиков, процедуры построения графиков в SPSS должны быть рассмотрены в двух отдельных главах. В текущей главе рассматриваются исключительно традиционные стандартные графики; новые интерактивные графики будут представлены в следующей главе (гл. 23). Обратимся теперь к стандартным графикам.


    Разобраться в многочисленных графиках, создаваемых при помощи меню графиков составляет трудность пожалуй только для новичка, поэтому мы не будем здесь рассматривать все имеющиеся тонкости. Однако мы попытаемся дать обзор графиков при помощи типичных практических примеров. При этом в окно просмотра будет выводиться установленный по умолчанию базовый вид графиков, правда, с необходимыми для нас заголовками, подзаголовками и сносками. Возможные изменения (штриховки, цвет, виды линий, виды диаграмм, изменение типа и размера шрифта и т.д.) будут рассмотрены в разделе 22.16.


    При разработке графического представления диаграмм можно заметить, что в принципе на практике существуют две различные исходные ситуации. Наиболее часто встречается ситуация, когда дополнительно к результатам статистического анализа, хранящимся в файле данных SPSS, необходимо построить и графическое представление этих результатов. К примеру, у Вас появилось желание представить частоты четырёх возрастных групп из исследования гипертонии (файл hyper.sav) в виде линейчатой диаграммы. В этом случае компьютер сам при помощи соответствующих расчётов находит частоты, необходимые для построения столбцов диаграммы.


    Совсем другую ситуацию можно наблюдать, если перед нами находятся уже подсчитанные и обработанные данные. Такой случай возникает, если бы, к примеру, Вы взяли из газеты информацию о ежедневной добыче нефти стран, входящих в ОРЕС, и захотели бы представить эти данные в виде линейчатой диаграммы. При наличии таких готовых данных, очень часто приходится поразмыслить над тем, как их представить в файле.

    •  Если Вы щёлкните в списке меню на Graphs (Графики), то увидите меню с вариантами графиков.

    Различные виды графиков будут по отдельности рассмотрены в разделах 22.1 по 22.14.


    Перед рассмотрением графиков необходимо остановиться ещё раз на одном важном моменте. Установки по умолчанию задают различные цвета, в которые окрашиваются элементов графиков (к примеру, маркеры, сегменты) и линии, что облегчает понимание диаграммы и улучшает презентабельность. Если же Вы хотите напечатать график на принтере или представить его в других формах, то в большинстве подобных случаев использовать цветные графики не рекомендуется. В таких случаях разные поверхности Вы можете обозначить при помощи различных штриховок, а разные линии при помощи различных видов линий.

    •  Эти свойства вы сможете изменить, если выберите в меню Edit (Правка) Options... (Параметры) и в диалоговом окне Options (Параметры) щёлкните на Charts (Диаграммы).

    •  В разделе Fill Patterns and Line Styles (Заливка узором и стиль линий) вместо опции Cycle through colors, then patterns (Сначала просмотреть цвета, затем узоры) активируйте опцию Cycle through patterns (Просмотреть узоры).

    В рассматриваемых далее методах построения графиков через выключатель Titles... (Заголовки) Вы можете присвоить диаграмме своё название, через выключатель Options... (Параметры) выбрать метод обработки пропущенных значений и в поле Template (Шаблон) при помощи активирования Use chart specifications from: (Установки диаграммы взять из:) загрузить установки для построения графика из других файлов.

    22.1 Столбчатые диаграммы

    22.1 Столбчатые диаграммы


    Столбчатые диаграммы применяются, как правило, в следующих ситуациях:

    •  Отображение частот переменных, относящихся к номинальной или порядковой шкале


    Рис. 22.1: Меню с вариантами графиков

    •  Отображение средних значений, сумм или других показателей последовательных переменных (т.е. переменных, принадлежащих к интервальной шкале или к шкале отношений), отображение переменных, сгруппированных по категориям переменных с номинальной или порядковой шкалой или временной зависимости.

    •  Для построения столбчатой диаграммы, после открытия соответствующего файла SPSS, выберите в меню Graphs (Графики) Ваг... (Столбчатые)

    Откроется диалоговое окно Bar Charts (Столбчатые диаграммы) (см. рис. 22.2).


    Вы можете выбрать между простой, кластеризованной (кластерной) и состыкованной столбчатыми диаграммами. Данные, отображаемые в этих диаграммах, могут быть заданы как категории одной переменной, как разные переменные или как значения отдельных наблюдений.



    Рис. 22.2: Диалоговое окно Bar Charts (Столбчатые диаграммы)

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    22.1.1 Простые столбчатые диаграммы

    22.1.1 Простые столбчатые диаграммы

    •  Откройте файл с данными об исследовании гипертонии (файл hyper.sav).

    Мы хотим построить столбчатую диаграмму для процентных показателей частот четырёх возрастных групп (переменная ak).

    •  Щёлкните на области Simple (Простая) и оставьте предварительную установку Summaries for groups of cases (Обработка категорий одной переменной).

    • Щёлкните по кнопке Define (Определить); откроется соответствующее диалоговое окно.

    •  В поле Category Axis: (Ось категорий) введите переменную ak, активируйте % of cases (% наблюдений) и, пройдя выключатель Titles... (Заголовок), введите заголовок для диаграммы.

    •  Щёлкните на ОК.


    Рис. 22.3: Диалоговое окно Define Simple Bar: Summaries for groups of cases (Простая столбчатая диаграмма: Обработка категорий одной переменной)


    Будет построен график, показанный на рисунке 22.4.


    Теперь представим в графическом виде изменение среднего значения уровня сахара в крови (переменные bz0, bz1, bz6 и bz12), взятого из того же файла (hyper.sav).

    •  В этот раз в диалоговом окне Ваг Charts (Столбчатые диаграммы) активируйте Summaries of separate variables (Обработка отдельных переменных); после нажатия выключателя Define (Определить) откроется соответствующее диалоговое окно (см. рис. 22.5).

    •  В поле Bars Represent (Значения столбцов) по очереди внесите переменные bz0, bz1, bz6 и bz12 и оставьте установленную по умолчанию функцию Mean of values (Средние значения).

    •  Пройдя выключатель Titles... (Заголовок), введите заголовок диаграммы.

    •  Щёлкните на ОК.


    Рис. 22.4: Простая столбчатая диаграмма (Категории одной переменной)


    Будет построен график, приведенный на рисунке 22.6.


    Следует отметить тот недостаток, что в этой диаграмме не полностью приведены метки значений и на вертикальной оси показана только ограниченная область от 103,5 до 106,0, из-за чего по ошибке можно сделать неверное заключение о сильном изменении уровня сахара. Вы можете подкорректировать эти ошибки в редакторе диаграмм.



    Рис. 22.5: Диалоговое окно Define Simple Bar: Summaries of separate variables (Построение простой столбчатой диаграммы: Обработка отдельных переменных)

    •  Если Вы хотите выбрать функцию отличную от установленной по умолчанию Mean of values (Средние значения), щёлкните на одной из переменных в списке и затем на выключателе Change Summary...(Изменить метод обработки).

    Откроется диалоговое окно с перечнем функций (см. рис. 22.7).


    Это диалоговое окно появляется только для столбчатой, линейной, круговой диаграмм и диаграммы с областями, причём не каждая из находящихся здесь функций пригодна для всех видов диаграмм. Если для имеющихся данных Вы хотите отобразить медианы или другие процентили (сравните с гл. 6), то активируйте опцию Values are grouped midpoints (Значения являются сгруппированными средними точками).


    В следующем примере рассматривается вопрос отображения готовых данных. Допустим, Вы взяли из некоторой газеты данные по 1993 году о добыче нефти в семи странах, входящих в ОРЕС и являющихся ведущими в этой отрасли.



    Рис. 22.6: Простая столбчатая диаграмма (Отдельные переменные)


    Страна


    Млн.баррель/день


    Саудовская- Аравия


    8,0


    Иран


    3,3


    Венесуэла


    2,3


    Объединённые Арабские Эмираты


    2,2


    Нигерия


    1,8


    Кувейт


    1,6


    Ливия


    1,4


    Представим эти данные в форме столбчатой диаграммы.

    •  Откройте файл oel.sav.

    •  В диалоговом окне Bar Charts (Столбчатые диаграммы) активируйте опцию Values of individual cases (Значения отдельных наблюдений).

    После нажатия выключателя Define (Определить) откроется соответствующее диалоговое окно.

    •  В поле Bars Represent (Значения столбцов) внесите переменную barrel; в группе Category Labels (Метки категорий) активируйте Variable: (Переменная) и внесите переменную land.


    Рис. 22.7: Диалоговое окно Summary Function (Обрабатывающая функция).



    Рис. 22.8: Диалоговое окно Define Simple Bar: Values of individual cases (Построение простой столбчатой диаграммы: Значения отдельных случаев)

    •  Пройдя выключатель Titles... (Заголовок), введите заголовок диаграммы и щёлкните на ОК.

    График будет выглядеть так, как на рисунке 22.9.



    Рис. 22.9: Простая столбчатая диаграмма (Значения отдельных случаев)

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    22.1.2 Кластеризованные столбчатые диаграммы

    22.1.2 Кластеризованные столбчатые диаграммы


    Теперь в целях обработки данных, полученных в ходе исследования гипертонии (файл hyper.sav), отдельно для двух методик лечения (переменная med с двумя своими значениями, равными 1 и 2) в графическом виде должны быть представлены частотные показатели четырёх возрастных групп (переменная ak) в процентном выражении.

    •  Откройте файл hyper.sav.

    •  В диалоговом окне Bar Charts (Столбчатые диаграммы) щёлкните на области Clustered (Кластеризованная); активируйте опцию, устанавливаемую по умолчанию, Summaries for groups of cases (Обработка категорий одной переменной).

    •  Щёлкните на кнопке Define (Определить); откроется главное диалоговое окно, изображённое на рисунке 22.10.


    Рис. 22.10: Диалоговое окно Define Clustered Bar: Summaries for groups of cases (Построение группированной диаграммы: Обработка категорий одной переменной)

    •  В поле Category Axis: (Ось категорий) введите переменную ak, в поле Define Clusters by: (Создать группы при помощи:) введите переменную med. Активируйте % of cases (% наблюдений).

    •  Пройдя выключатель Titles... (Заголовок), введите заголовок для диаграммы и  начните построение диаграммы щелчком на ОК (см. рис. 22.11).

     В качестве примера графического представления готовых данных рассмотрим доли I рынка принадлежащие самым крупным изготовителям компьютеров в 1991 и 1992 годах:


    Изготовитель

    Доля рынка, %

     1991


    1992


    IBM


    16,3


    12,4


    Apple


    11,2


    11,9


    Compaq


    6,0


    6,6


    NEC


    6,4


    5,1


    Dell


    1,7


    3,5


    Эти данные построчно сохранены в переменных firma (изготовитель), jahr (год) и anteil (доля) в файле pc.sav.

    • Откройте файл pc.sav и просмотрите его содержимое в редакторе данных.

    •  В диалоговом окне Bar Charts (Столбчатые диаграммы) щёлкните на области Clustered (Кластеризованная) и активируйте устанавливаемую по умолчанию опцию Summaries for groups of cases (Обработка категорий одной переменной).

    •  После щелчка на выключателе Define (Определить) в открывшемся диалоговом окне в поле Category Axis: (Ось категорий) введите переменную firma, а в поле Define Clusters by: (Определить группы по:) — переменную jahr. В группе Bars Represent (Значения столбцов) активируйте Other summary function (Другая обрабатывающая функция) и в появившееся поле введите переменную anteil; функцию Mean of values (Средние значения) можете оставить.

    •  Пройдя выключатель Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.


     Рис. 22.11: Группированная столбчатая диаграмма



    Рис. 22,12: Группированная столбчатая диаграмма

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    22.1.3 Состыкованные диаграммы

    22.1.3 Состыкованные диаграммы


    Как правило, состыкованная столбчатая диаграмма применяется тогда, когда столбцы отражают частоты, которые должны быть разделены при помощи некоторой внешней переменной. В таком случае, и обзор суммарных частот предоставляется пользователю иначе, нежели в виде кластеризованной столбчатой диаграммы.

    •  Откройте файл studium.sav, содержащий данные опроса студентов.

    Мы хотим отобразить в графическом виде распределение частот, отражающих психологическое состояние студентов (переменная psyche), отдельно для каждого пола (переменная sex).

    •  В диалоговом окне Bar Charts (Столбчатые диаграммы) щёлкните на области Stacked (Состыкованная) и активируйте опцию, устанавливаемую по умолчанию, Summaries for groups of cases (Обработка категорий одной переменной). Щелчком по кнопке Define (Определить) откройте соответствующее диалоговое окно.

    •  В поле Category Axis: (Ось категорий) введите переменную psyche, а в поле Define Stacks by: (Создать штабели при помощи:) введите переменную sex. Оставьте установку по умолчанию N of cases (Количество наблюдений).

    •  Пройдя выключатель Titles... (Заголовок), введите подходящий заголовок.

    В данном примере имеются пропущенные значения, которые в соответствии с установками по умолчанию будут обрабатываться как отдельные категории.

    •  Для того, чтобы запретить это действие щёлкните на выключателе Options... (Параметры) и уберите отметку для опции Display groups defined by missing values (Пропущенные значения отображать как категории).

    •  Вернувшись в диалоговое окно Define Stacked Bar: Summaries for groups of cases (Построение состыкованной диаграммы: Обработка категорий одной переменной) щелчком на ОК начните построение диаграммы (см. рис. 22.11).

    В следующем примере рассматривается графическое представление уже имеющихся (готовых) данных. Приведенная ниже таблица содержит показатели рождаемости в западных и восточных землях Германии, начиная с 1985 по 1992 год:



    Рис. 22.13: Диалоговое окно Define Stacked Bar: Summaries for groups of cases (Построение штабельной диаграммы: Обработка категорий одной переменной)



    Рис. 22.14: Штабельная столбчатая диаграмма


    Гол

    Количество

     Запал


    Восток


    1985


    586.155


    227.648


    1986


    635.963


    222.229


    1987


    642.010


    225.959


    1988


    677.259


    215.734


    1989


    681.537


    198.922


    1990


    727.199


    178.476


    1991


    722.250


    107.769


    1992


    718.730


    87.030

    •  Откройте файл geburten.sav и просмотрите его содержимое в редакторе данных.

    Эти данные построчно сохранены в переменных jahr (год), wo и anz (количество). Переменная wo при помощи кодировок 1 и 2 указывает на принадлежность к Западной или Восточной Германии.

    •  В диалоговом окне Bar Charts (Столбчатые диаграммы) щёлкните на области Stacked (Состыкованная) и активируйте опцию Summaries for groups of cases (Обработка категорий одной переменной), устанавливаемую по умолчанию.

    •  После щелчка на выключателе Define (Определить) в открывшемся диалоговом окне в поле Category Axis: (Ось категорий) введите переменную jahr, а в поле Define Stacks by: (Создать штабели при помощи:) — переменную wo. В группе Bars Represent (Значения столбцов) активируйте Other summary function (Другая обрабатывающая функция) и в появившееся поле введите переменную anz; вместо установленной по умолчанию функции Mean of values (Средние значения), пройдя выключатель Change Summary...(Изменить метод обработки) отметьте функцию суммы (Sum of values).

    •  С помощью кнопки Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.

    13.gif

    Изображение: 

    14.gif

    Изображение: 

    22.10 Диаграммы Парето

    22.10 Диаграммы Парето


    Диаграмма Парето представляет собой столбчатую диаграмму, в которой столбцы располагаются в порядке убывания, а дополнительная кривая может указывать на совокупную частоту для представленных категорий. При этом при суммировании отдельных столбцов по заданному правилу должна получаться некоторая итоговая величина, имеющая определенный смысл.

    •  Чтобы построить диаграмму Парето, после открытия необходимого Вам файла SPSS, выберите в меню Graphs (Графики) Pareto... (Парето)

    Откроется соответствующее диалоговое окно.


    Вы можете построить простую или состыкованную диаграмму Парето, причём и здесь существует три варианта представления данных.


    Для иллюстрации процесса построения этих диаграмм достаточно одного примера. В следующей таблице приведены данные текущих расходов семей западной Германии в 1992 году.



    Рис. 22.55: Диалоговое окно Pareto Charts (Диаграммы Парето)


    Статья расходов


    Расколы (/миллиарды DM)


    Квартира


    302,5


    Одежда


    116,2


    Аренда


    247,7


    Электричество


    55,6


    Бытовые расходы


    137,4


    Здоровье


    78,8


    Проезд


    253,5


    Отдых


    147,9


    Прочее


    108,5

    •  Откройте файл privver.sav, в котором построчно в переменных zweck (статья) и dm сохранены эти данные.

    •  В диалоговом окне Pareto Charts (Диаграммы Парето) щёлкните на области Simple (Простая) и оставьте опцию Counts or sums for groups of cases (Частоты или суммы категорий одной переменной), установленную по умолчанию,.

    •  Нажатием выключателя Define (Определить) откройте следующее диалоговое окно.

    •  В поле Category Axis: (Ось категорий) введите переменную zweck. В группе Bars Represent (Значения столбцов) поставьте маркер рядом с опцией варианта выбора Sums of variable: (Суммы переменных) и переведите переменную dm в появившееся поле. Отображение совокупной (кумулятивной) кривой устанавливается по умолчанию.


    Рис. 22.56: Диалоговое окно Define Simple Pareto: Counts or Sums for Groups of Cases (Построение простой диаграммы Парето: Частоты или суммы категорий одной переменной)

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок.

    •  Щелчком на ОК начните построение диаграммы (см. рис. 22.57).

    Из-за отображения кумулятивной (совокупной) кривой некоторые столбцы пришлось опустить довольно низко. В подобных случаях намного удобнее запретить отображение совокупной кривой. График без совокупной кривой Вы можете видеть на рисунке 22.58.

    57.gif

    Изображение: 

    58.gif

    Изображение: 

    22.11 Контрольные карты

    22.11 Контрольные карты


    С помощью построения контрольных карт при наличии временной зависимости Вы можете проверить, лежат ли средние значения переменных в пределах области рассеяния, объясняемой действием случайных факторов, или же они выходят за пределы этой области. В общем случае подразделение данных может происходить не только по временным интервалам, а и посредством других подгрупп.

    •  После открытия необходимого Вам файла SPSS выберите в меню Graphs (Графики) Control... (Контроль)

    Откроется диалоговое окно Control Charts (Контрольные карты).



    Рис. 22.57: Диаграмма Парето (с кумулятивной кривой)



    Рис. 22.58: Диаграмма Парето (без совокупной кривой)


    Существует четыре разновидности контрольных карт и две возможности представления данных. Поэтому число возможных контрольных карт довольно велико и не может быть полностью рассмотрено в рамках этой книги. С одной стороны речь идёт об анализе средних значений, а с другой об анализе относительных частот переменных, относящихся к номинальной шкале.


    Для рассмотрения этих диаграмм нам будет достаточно одного типичного примера. В этом примере необходимо проверить качество изделий, которые были произведены шестью станками за определённый промежуток времени. К примеру, необходимо произвести контроль длины этих изделий. Измерения длины изделий (в см) были произведены на шести станках для двенадцати промежутков времени и помещены в следующую сводную таблицу.



    Рис. 22.59: Диалоговое окно Control Charts (Контрольные карты)


    Интервал


    Станок 1


    Станок 2


    Станок 3


    Станок 4


    Станок 5


    Станок 6


    1


    24,07


    24,11


    24,17


    24,02


    24,07


    23,95


    2


    23,98


    24,09


    24,03


    24,18


    24,10


    24,20


    3


    24,14


    23,99


    23,93


    24,06


    24,04


    24,10


    4


    23,96


    24,10


    23,97


    23,90


    24,00


    23,91


    5


    23,98


    24,02


    24,00


    24,05


    23,84


    23,95


    6


    24,01


    23,95


    23,97


    23,83


    24,12


    24,02


    7


    23,98


    24,05


    24,16


    24,07


    23,90


    24,00


    8


    24,07


    24,12


    24,07


    24,14


    23,99


    23,96


    9


    24,11


    24,16


    24,22


    24,12


    24,00


    24,05


    10


    24,05


    24,04


    23,90


    24,10


    24,10


    23,97


    11


    24,00


    24,08


    23,97


    23,87


    23,92


    24,06


    12


    24,07


    24,01


    23,89


    24,04


    23,92


    24,09

    •  Откройте файл werk.sav.

    •  В диалоговом окне Control Charts (Контрольные карты) щёлкните на области X-Bar, R, s. Поставьте маркер рядом с опцией Cases are subgroups (Наблюдения используются в качестве подгрупп).

    •  Щелчком по выключателю Define (Определить) откройте соответствующее диалоговое окно (см. рис. 22.60).

    •  В поле Subgroups Labeled by: (Метки подгрупп:) введите переменную zeit (время), а в поле Samples (Образцы) переменные ml, m2, m3, m4, т5 и тб.

    •  Оставьте устанавливаемую по умолчанию функцию X-Bar and range (Х-горизонталь диапазон) и щелчком на ОХ начните построение диаграммы (см. рис. 22.61).

    На втором графике, который помещается в окне просмотра, будет отображено изменение стандартного отклонения.



    Рис. 22.60: Диалоговое окно X-Bar, R, s: Cases Are Subgroups (Х-горизонталь, R, s: Случаи в качестве подгрупп)



    Рис. 22.61: Контрольная карта

    59.gif

    Изображение: 

    60.gif

    Изображение: 

    61.gif

    Изображение: 

    62.gif

    Изображение: 

    63.gif

    Изображение: 

    22.12 Диаграммы нормального распределения

    22.12 Диаграммы нормального распределения


    При проведении практически всех статистических тестов важную роль играет вопрос, подчиняются ли анализируемые данные нормальному распределению (для сравнения см. разд. 5.1.2). Проверку нормального распределения можно производить визуально, при помощи гистограммы (для пояснения см. разд. 22.9), однако лучше это осуществлять с использованием специального статистического теста, к примеру, теста Колмогорова-Смирнова (для получения подробной информации см. разд. 14.5). Ещё одну возможность анализа нормального распределения предоставляют диаграммы нормального распределения, которые в SPSS подразделяются на два вида:

    •  Р-Р- нормальный вероятностный график

    •  Q-Q-нормальный вероятностный график

    В первом случае (Р-Р) в форме диаграммы рассеяния на графике отображается зависимость ожидаемых совокупных частот от фактических совокупных частот, а во втором случае (Q-Q) зависимость ожидаемой частоты от наблюдаемой частоты.


    Построение диаграмм нормального распределения типа Q-Q можно производить и в рамках предварительного исследования данных. В таком варианте они уже были рассмотрены ранее (для получения подробной информации см. разд. 10.4.1). Поэтому здесь мы приведём пример, касающийся только диаграммы нормального распределения типа Р-Р.

    •  Откройте файл hyper.sav и выберите в меню Graphs (Графики) Р-Р... (Р-Р-диаграммы) Откроется диалоговое окно Р-Р Plots (Р-Р-диаграммы).


    Рис. 22.62: Диалоговое окно Р-Р Plots (Р-Р-диаграммы)


    Вы видите, что тест на нормальное распределение устанавливается по умолчанию. Наряду с этим Вы можете производить тестирование на предмет наличия ещё двенадцати видов распределения, к примеру, на наличие распределения Вайбула (Weibull), Лапласа (Laplace), Хи-квадрат (%2) и /-распределения Стьюдента (Student). Вы можете просмотреть все предлагаемые типы распределений в ниспадающем меню.

    •  Мы хотим проверить на предмет нормального распределения переменную а (Alter — возраст); для этого перенесите эту переменную в поле тестируемых переменных.

    В диалоговом окне присутствуют также и различные возможности преобразования данных, в состав которых входят: пересчет в натуральные логарифмы, z-преобразование (перевод к стандартизованному виду) и два вида преобразований, применяемых для временных последовательностей.


    Для подсчёта ожидаемых значений, подчиняющихся нормальному распределению, на выбор предлагаются четыре различных метода. Если количество значений, полученных в результате наблюдений, обозначить буквой п, а ранговые показатели этих значений буквой г (г = 1, ..., п), то формулы, соответствующие указанным методам, будут выглядеть следующим образом:


    Blom (Блом):


    (r-3/8) / (n+1/4)


    Rankit (Ранговое преобразование):


    (r-1/2) / n


    Tukey (Тьюки):


    (r-1/З) / (n+1/З)


    Van der Waerden (Ван дер Верден):


    r / (n+1)


    Формула Блома (Blom) устанавливается по умолчанию. Далее Вам предоставляется возможность выбора одного из четырёх различных методов для обозначения одинаковых значений (так называемых связок).


    Среднее значение:


    Равным значениям присваивается средний ранг


    Максимум:


    Равным значениям присваивается ранг, высший из двух


    Минимум:


    Равным значениям присваивается ранг, низший из двух


    Связи разрывать произвольно


    Если в первых трёх методах для дельнейшего анализа используется только один элемент данных, то в этом методе может использоваться столько элементов, сколько значений имеется в наличии.

    •  Оставьте предварительные установки и подтвердите построение диаграммы нажатием ОК.

    Будут построены две диаграммы. На первой, простой Р-Р-диаграмме отображается зависимость ожидаемых совокупных частот от фактических совокупных частот, рассчитанная при помощи формулы рангового преобразования Блома (Blom). На второй диаграмме, Р-Р-диаграмме без тренда, отображается разность между фактическими и ожидаемыми совокупными (кумулятивными) частотами в зависимости от фактических совокупных частот.



    Рис. 22.63: Диаграмма нормального распределения типа Р-Р



    Рис. 22.64: Диаграмма нормального распределения типа Р-Р с исключённым трендом

    64.gif

    Изображение: 

    65.gif

    Изображение: 

    66.gif

    Изображение: 

    22.13 Кривые ROC

    22.13 Кривые ROC


    Понятие кривых ROC (Receiver Operating Characteristic — функциональные характеристики приемника) взято из методологии анализа качества приёма сигнала (Signal Detection Analysis). Теория, стоящая за этим анализом, Theorie of Signal Detectability (TSD — "Теория определимости сигнала"), хотя и происходит первоначально из электроники и электротехники, но может также быть применена в области медицины, для анализа взаимодействия чувствительности и представительности диагностического теста. Поясним это при помощи примера.


    В разделе 16.4 (Бинарная логистическая регрессия) было показано, каким образом при помощи переменных, соответствующих результатам Т-типизации клеток, которые относятся к интервальной шкале, может быть спрогнозировано появление карциномы мочевого пузыря. Если вы посмотрите на обе группы (больных и здоровых), то заметите, что здоровые демонстрируют более высокие значения Т-типизации ячеек, а больные скорее более низкие значения. Поэтому можно попытаться найти граничное значение Т-типизации ячеек, которое будет чётко разделять обе группы больных и здоровых.


    Это и было достигнуто при помощи метода бинарной логистической регрессии. Пройдём ещё раз тот путь, который мы проходили в главе 16.4.

    •  Откройте файл hkarz.sav.

    •  Выберите в меню Analyze... (Анализ) Regression. ..(Регрессия) Binary logistic... (Бинарная логистическая)

    •  В диалоговом окне Logistic Regression (Логистическая регрессия) переменную gruppe (группа) поместите в поле зависимых переменных, а переменную tzell — в поле ковариций. Результаты теста LAI мы сначала не будем использовать в расчёте. При помощи выключателя Save... (Сохранить) организуйте сохранение прогнозируемой принадлежности к группе в виде дополнительной переменной. Начните расчёт нажатием ОК.

    К исходному файлу данных добавилась переменная pgr_1. Если Вы построите таблицу сопряженности между переменной gruppe (группа) в качестве строчной переменной и переменной pgr_1 в качестве столбцовой переменной, то получите следующий результат (для сравнения см. рис. 16.7):


    GRUPPE * Predicted group Crosstabulation 


    (GRUPPE * Прогнозируемая группа таблица сопряженности)


    Count (Количество)


    Predicted group (Прогнозируемая группа)


    Total (Сумма)


    krank (Болен)


    gesund (Здоров)


    GRUPPE


    krank (Болен)


    18


    6


    24


    gesund (Здоров)


    4


    17


    21


    Total (Сумма)


    22


    23


    45


    Среди 24 фактически больных 18 были верно расценены как больные (Rightly Positive (Верно положительный), RP), а 6 не верно отнесены к группе здоровых (Wrong Negative (Ложно отрицательный), WN). Из 21 фактически здорового человека 17 были верно отнесены к группе здоровых (Rightly Negative (Верно отрицательный), RN) и 4 не верно расценены больными (Wrong Positive (Ложно положительный), WP).


    В качестве чувствительности теста выступает доля верно положительных предсказаний в суммарном количестве больных.


    Эта величина характеризует способность теста как можно точнее отфильтровывать пациентов с сомнительным наличием болезни.


    Под представительностью теста понимают долю верно отрицательных среди здоровых пациентов:


    Эта величина характеризует способность теста обнаруживать исключительно пациентов с сомнительным наличием болезни. Для приведенного примера имеем


    Чувствительность =18/(18 + 6) = 0,750 


    Представительность = 17/(17 + 4) = 0,810

    •  Если при помощи меню Data (Данные) Sort Cases... (Сортировать наблюдения)

    вы отсортируйте данные по переменной tzcll, то заметите, что все наблюдения со значениями, лежащими ниже 66,5, отнесены к категории болен, а все наблюдения со значениями, находящимися выше 66,5, отнесены к категории здоров.

    •  Если Вы сместите граничное значение вниз или вверх и вновь рассчитаете чувствительность и специфичность, то результаты изменятся таким образом, что повышение чувствительности будет идти за счёт представительности, а повышение представительности за счёт чувствительности. Эту зависимость можно анализировать при помощи кривой ROC.

    •  Выберите в меню Graphs (Графики) ROC Curve... (Кривая ROC)

    Откроется диалоговое окно ROC Curve (Кривая ROC)

    •  Переменной tzell присвойте статус тестируемой переменной, а переменной gruppe — статус переменной состояния. Под значением Value of State Variable: (Значение переменной состояния) понимается положительное значение, т.е. кодировка, соответствующая состоянию "болен". Введите в это поле 1. В группе Display (Показать) активируйте все имеющиеся опции.

    •  Щелчком по кнопке Options... (Параметры) откройте диалоговое окно ROC Curve: Options (Кривая ROC: Опции) (см. рис. 22.66).

    •  Активируйте опцию Smaller test result indicates more positive test (Меньший результат теста означает более положительный результат), так как в данном примере состоянию "болен" соответствует тенденция к уменьшению значений тестируемых переменных по сравнению с состоянием "здоров".

    Результаты анализа, отображаемые в окне просмотра, приводятся ниже.


    Case Processing Summary (Обработанные наблюдения)


    GRUPPE b 

    Valid N (listwise) (Действительные случаи (в соответствии со списком))

    Positive a (Положительные) 

    24

    Negative (Отрицательные) 

    21

    Smaller values of the test result variable(s) indicate stronger evidence for a positive actual state (Низкие значения переменной(ых) указывают на скорее положительный результат теста).


    a. The positive actual state is krank (Положительный результат теста соответствует состоянию болен).


    b. The test result variable(s): TZELL has at least one tie between the positive actual state group and the negative actual state group (Результирующая переменная (переменные) теста: TZELL имеет по крайней мере одну связку между положительной и отрицательной группами).



    Рис. 22.65: Диалоговое окно ROC Curve (Кривая ROC)


     



    Рис. 22.66: Диалоговое окно ROC Curve: Options (Кривая ROC: Опции)



     


    Area Under the Curve (Площадь под кривой)

    Test Result Variable(s): TZELL (Переменная(ые) результата теста: TZELL)

    Area (Площадь)


    Std. Error (Стандартная ошибка)


    Asymptotic Sig.a (Асимптотическ ая значимость)


    Asymptotic 95% Confidence Interval (Асимптотический 95 % доверительный интервал)


    Lower Bound (Нижняя граница)


    Upper Bound (Верхняя граница)


    ,849


    ,059


    ,000


    ,734


    ,964


    The test result variable(s): TZELL has at least one tie between the positive actual state group and the negative actual state group (Результирующая переменная(ые) теста: TZELL имеет по крайней мере одну связку между положительной и отрицательной группами). Statistics may be biased (Статистики могут быть искажены (сдвинуты)). 


    a. Under the nonparametric assumption (В соответствии с непараметрическим предположением) 


    b. Null hypothesis: true area = 0.5 (Нулевая гипотеза: истинное значение площади = 0,5)


    Coordinates of the Curve (Координаты кривой)


    Test Result Variable(s): TZELL (Результирующая переменная(ые) теста: TZELL)


    Positive if Less Than or Equal Toa (Положительно, если меньше или равно)


    Sensitivity (Чувствительность)


    1 - Specificity (1-Представительность)


    47,5000


    ,000


    ,000


    52,0000


    ,042


    ,000


    56,5000


    ,083


    ,000


    58,0000


    ,125


    ,000


    59,7500


    ,167


    ,000


    61,0500


    ,208


    ,000


    61,3000


    ,208


    ,048


    61,7500


    ,292


    ,048


    62,2500


    ,417


    ,048


    62,0000


    ,458


    ,095


    63,7500


    ,500


    ,095


    64,7500


    ,542


    ,143


    64,5000


    ,542


    ,190


    65,7500


    ,625


    ,190


    67,2500


    ,750


    ,190


    68,7500


    ,792


    ,190


    69,2500


    ,833


    ,190


    69,7500


    ,833


    ,238


    70,5000


    ,833


    ,333


    71,2500


    ,958


    ,381


    71,7500


    ,958


    ,476


    72,2500


    ,958


    ,524


    72,7500


    ,958


    ,571


    73,2500


    ,958


    ,667


    73,7500


    1,000


    ,714


    74,5000


    1,000


    ,762


    75,5000


    1,000


    ,810


    76,5000


    1,000


    ,857


    77,7500


    1,000


    ,952


    79,5000


    1,000


    1,000


    The test result variable(s): TZELL has at least one tie between the positive actual state group and the negative actual state group (Результирующая переменная(ые) теста: TZELL имеет по крайней мере одну связь между положительной и отрицательной группами), 


    a. The smallest cutoff value is the minimum observed test value minus 1, and the largest cutoff value is the maximum observed test value plus 1. All the other cutoff values are the averages of two consecutive ordered observed test values.(Минимальное разделяющее значение равно минимальному наблюдаемому значению теста минус 1, максимальное разделительное значение равно максимальному наблюдаемому значению теста плюс 1. Все остальные разделительные значения являются средними значениями двух соседних наблюдаемых значений теста.)


    С помощью кривой ROC чувствительность и комплиментарное значения представительности приводятся к единице. Диагностируемое значение с нулевой степенью прогнозирования изображается здесь линией, наклоненной под углом 45 градусов (диагональю). Чем больше выгнута кривая ROC, тем более точным является прогнозирование результатов теста. Индикатором этого свойства служит площадь под кривой ROC, которая для теста с нулевой степенью прогнозирования равна 0,5, а для случая с максимальной степенью прогнозирования — 1. Для рассматриваемого примера получилось значение равное 0,849, причём 95 % доверительный интервал соответствует значениям площади, принадлежащим диапазону от 0,734 до 0,964.


    В следующей таблице Вы можете увидеть чувствительность и представительность для различных граничных значений. Для граничного значения 67,5 Вы вновь встретите уже рассчитанные нами показатели.

    69.gif

    Изображение: 

    70.gif

    Изображение: 

    71.gif

    Изображение: 

    22.14 Временные диаграммы и графики последовательностей

    22.14 Временные диаграммы и графики последовательностей

    •  Посторонние временных рядов и графиков последовательностей происходит посредством выбора меню Graphs (Графики) Time Series... (Временной ряд) и Graphs (Графики) Sequence... (Последовательность)

    соответственно. В связи с тем, что в модулях SPSS, рассматриваемых в этой книге, отсутствует анализ временных рядов, мы не будем подробно останавливаться на этой диаграмме. Информацию по этому вопросу Вы можете найти в книге этих же авторов: 'SPSS. Методы исследования рынка и мнений".

    22.15 Основы редактирования графиков

    22.15 Основы редактирования графиков


    Для того, чтобы разобраться во всех возможностях, которые SPSS для Windows предоставляет для редактирования графиков, наверняка потребуется некоторое время.


    Построение графиков происходит при помощи большого количества процедур меню статистик и из меню графиков. Все графики, построенные таким образом, попадают сразу в окно просмотра. Отсутствует промежуточное сохранение, существовавшее вплоть до 6-ой версии SPSS.


    Даже при построении Ваших первых графиков (теперь в SPSS они, как правило, называются диаграммами) можно не беспокоиться об их внешнем виде, поскольку в силу вступают соответствующие установки по умолчанию. Если Вы к тому же добавили некоторые наименования (заголовок, подзаголовок, сноски), то такой вид уже будет вполне достаточен для того, чтобы графики можно было использовать в большинстве практических ситуаций.


    Если Вы хотите придать графикам более наглядный и презентабельный вид или же существует необходимость произвести определённые корректировки (к примеру, если метки переменных слишком длинны), то график следует перенести в редактор диаграмм. Для этого в окне просмотра дважды щёлкните в любом месте в области диаграммы.


    В редакторе диаграмм Вы сможете производить над графиком следующие действия:

    •  корректировать (или изменить)

    •  сохранить график в каком-либо другом графическом формате

    •  сохранить как образец для других графиков и

    •  копировать в буфер обмена Windows.

    Обзор всего многообразия возможностей дополнительной обработки, которые предлагает Вам редактор диаграмм, приводится в разделе 22.16. В разделе 22.17 рассматриваются три типичных примера редактирования.

    22.16 Редактор диаграмм

    22.16 Редактор диаграмм


    Для того, чтобы график можно было изменить (доработать, редактировать), он должен быть помещён в редактор диаграмм. Это происходит после двойного щелчка на какой-либо точке в области диаграммы, находящейся в окне просмотра. Тогда редактор диаграмм будет выглядеть так, как на рис. 22.67.


    В верху редактора диаграмм присутствуют меню и две панели инструментов. Если Вы пройдётесь курсором по кнопкам панелей инструментов, не нажимая их, то сможете увидеть краткое описание кнопок. При помощи кнопок верхней панели инструментов, Вы можете получить информацию о диалоговых полях, которые Вы заполняли в последних построенных диаграммах, перейти в редактор данных, в нём перейти к нужному Вам наблюдению; а также получить информацию об отдельных переменных.


    Кнопки, стоящие во второй панели инструментов, преимущественно служат для вызова форматирующих меню и будут рассмотрены в соответствующем разделе. Статистические, графические меню и меню помощи уже известны, и поэтому здесь они рассматриваться не будут.



    Рис. 22.67: Редактор диаграмм

    •  File (Файл): При помощи меню File (Файл) построенную диаграмму Вы можете сохранить, вывести на печать или скопировать свойства с некоторого графика-образца.

    •  Edit (Правка): При помощи меню Edit (Правка) Вы можете скопировать график в буфер обмена или изменить установки графика.

    •  View (Вид): В меню View (Вид) Вы можете включить или выключить строку состояния и управлять панелями инструментов.

    •  Gallery (Галерея): При помощи меню Gallery (Галерея) Вы можете выбрать другой тип графика для отображения ваших данных. Причём в списке Вы увидите некоторые дополнительные типы графиков, которые ещё не были рассмотрены, к примеру, смешанные диаграммы, диаграммы связывающих линий и разделённые круговые диаграммы.

    •  Chart (Диаграммы): Меню Chart (Диаграммы) служит для изменения внешнего вида диаграммы и элементов ее описания.

    Пункты меню Options... (Параметры), Axis... (Оси) и Bar Spacing... (Расстояние между столбцами) являются специфическими для текущего типа диаграммы. После выбора этих опций открываются соответствующие диалоговые окна, содержание которых говорит само за себя.

    •  Series (Ряды): При помощи меню Series (Ряды) можно менять представление данных, то есть столбцы на линии или другие виды графического представления.

    •  Format (Формат): Если Вы щёлкните на этой кнопке, то получите список меню, представленный на рис. 22.68.

    Большинство пунктов этого меню выведены на вторую панель инструментов. Вместо того, чтобы открывать меню, вы можете просто щёлкнуть на кнопке с соответствующим символом на панели инструментов.

    Point Id (Выделение точек)

    При помощи этой кнопки Вы можете менять режимы отображения точек на диаграмме рассеяния (для сравнения см. разд. 22.8.1)

    Fill Pattern (Заливка узором)

    Откроется диалоговое меню, в котором Вы можете выбрать необходимый рисунок из восьми образцов заливки для окрашивания замкнутых контуров, таких как: столбцы, области под линиями и области заднего плана.


    Нужный объект выделяется щелчком на его поле. После этого на углах объекта должны появиться маркеры коррекции.


    Вы выбираете необходимый тип заливки и щелчком на кнопке Apply (Применить) присваиваете его выбранному объекту.


    Заливка белого цвета является прозрачной. Этот вид заливки следует выбирать тогда, когда некоторая последовательность данных должна быть показана на фоне другой последовательности.



    Рис. 22.68: Меню Format (Формат)

    Color (Цвет)

    Для изменения цвета объекта графика (элемента представления данных или текста) выделите данный объект и выберите этот пункт меню. Откроется палитра с шестнадцатью различными цветами. Кому этого не достаточно, может открыть ещё одну дополнительную значительно более обширную палитру.


    Выбором опций Fill (Заливка) и Border (Рамка) происходит переключение между возможностью изменить цвет объекта или рамки (контура) выделенного объекта.


    Выберите одну из двух имеющихся опций. При помощи Apply (Применить) цвет будет перенесён на выделенный объект.


    Чтобы расширить имеющуюся палитру цветов, щёлкните на кнопке Edit (Правка); после этого Вы сможете создать дополнительные или пользовательские цвета.


    Если текущей палитре должен быть присвоен статус палитры по умолчанию, то щёлкните на выключателе Save as Default (Сохранить как палитру по умолчанию).

    Marker (Маркер)

    Эта кнопка открывает палитру из 28-ми различных маркеров для обозначения положения точки данных на линейчатых диаграммах, диаграммах с областями и диаграммах рассеяния. Вы можете также установить один из четырёх предустановленных размеров маркеров.


    Для изменения вида представления точек или рядов данных выделите сначала нужный элемент при помощи щелчка на графике. После этого на выделенном объекте появятся чёрные маркеры коррекции.


    В группе Style (Стиль) выберите необходимую маркировку.


    В группе Size (Размер) активируйте одну из опций предустановленных размеров маркеров. На экране разница между размерами отображаемых маркеров не значительна, но при печати она будет довольно хорошо заметна.


    При помощи Apply (Применить) присвойте выделенному ряду данных маркеры с выбранными свойствами. Если Вы нажмёте кнопку Apply All (Применить для всех), то выбранный тип маркировки будет присвоен всем последовательностям данных.


    Если изменения должны коснуться только размера маркеров, но не стиля маркировки, то следует деактивировать опцию Apply style (Применить стиль).


    Если изменения должны коснуться только стиля представления маркеров, но не размера, то следует деактивировать опцию Apply size (Применить размер).


    Маркеры на линейчатых диаграммах и диаграммах с областями становятся видимыми только в том случае, если их вывод будет задан в диалоговом окне Interpolation (Интерполяция). Это диалоговое окно вызывается из меню Format (Формат). Маркеры не могут быть заданы для изображения точек гистограмм и столбчатых диаграмм.

    Line Style (Линии)

    Здесь на выбор предлагаются четыре типа линий и четыре предустановленные толщины для этих линий.


    На графике щелчком необходимо выделить линию, которую необходимо изменить. После этого на объекте появятся маркеры коррекции.


    В группе Style (Стиль) выберите тип линии.


    В группе Weight (Толщина) присвойте необходим} ю то.глину выбранному типу линии.


    После щелчка на кнопке Apply (Применить) выбранная конфигурация линии будет присвоена активному объекту. Эта кнопка остаётся неактивной, если выделены данные, которые не могут быть представлены на графике при помощи линии или элемента, содержащего линии (рамки, оси).

    Bar Style (Столбцы)

    Эта опция служит для изменения представления столбцов в графиках, содержащих столбцы. Некоторые типы столбцов не могут применяться для гистограмм.


    Программа предлагает в Ваше распоряжение несколько типов столбцов. Если выбраны столбцы с тенью (Drop shadow) или с ЗD-эффектами (3D-effect), то для этих типов столбцов дополнительно ещё может устанавливаться и толщина (Depth). Эта опция управляет толщиной сторон и верхнего торца столбца. Толщина при этом указывается в процентах от ширины столбца. При положительных значениях параметра Depth (Толщина) эффект строится начиная с правой стороны столбца, как показано на рисунках соответствующих опций, а при отрицательных значениях — с левой стороны столбца.


    Если Вы нажмёте кнопку Apply All (Применить для всех), то установленные свойства будут применены ко всем столбцам. Эта кнопка становится активной только тогда, когда в редакторе диаграмм находится столбчатая диаграмма или интервальная столбчатая диаграмма.

    Bar Label Style (Метки столбцов)

    Программа предлагает три варианта идентификации столбцов при помощи числовых значений.


    Если выбран один из стилей оформления числового значения (кроме None), то на каждом столбце появляется числовое значение, соответствующее высоте этого столбца. Для столбчатой диаграммы с областями метки столбцов указываются сверху и снизу каждого столбца. Три опции представленные в диалоговом окне Bar Label Styles (Метки столбцов) определяют внешний вид метки на столбце. Если Вы применяете тёмные цвета или узоры, в таком случае рекомендуется выбирать опцию Framed (В рамке), числовое значение в рамке будет лучше читаться.


    Если Вы нажмёте кнопку Apply All (Применить для всех), то установленные свойства метки будут применены ко всем столбцам. Эта кнопка становится активной только тогда, когда в редакторе диаграмм находится столбчатая диаграмма, интервальная столбчатая диаграмма или гистограмма.

    Interpolation (Интерполяция)

    В данном диалоговом окне задаются различные возможности и методы для соединения точек данных.


    Эта опция может применяться для диаграмм с областями, линейчатых диаграмм, линейчатых диаграмм разностей, для последовательностей средних значений в диаграммах величины ошибки, для заключительных показателей на диаграммах максимальных и минимальных значений, а также в диаграммах рассеяния (исключая 3D-диаграммы рассеяния).


    На графике щелчком выделите линию или последовательность данных. После этого на каждом объекте появятся маркеры коррекции.


    В группе Line Interpolation (Вид интерполяционной линии) выберите один из методов соединения точек при помощи некоторой кривой. Если SPSS должна рассчитать регрессионную прямую для диаграммы рассеяния, выберите в меню Chart (Диаграммы) пункт Options (Параметры).


    Если Вы нажмёте кнопку Apply All (Применить для всех), интерполяция будет применена ко всем последовательностям данных. При помощи Apply (Применить) интерполяция будет применена только к объектам, выделенным в данный момент. Если Вы выделили данные, которые не могут быть отображены на графике при помощи линии, кнопка Apply (Применить) становится неактивной.


    Если активировать опцию Display markers (показать маркеры), то для каждой точки выделенной кривой будет отображена маркировка. Тип маркера может быть выбран при помощи опции Marker (Маркер), находящейся в меню Format (Формат).


    Существуют следующие виды интерполяции:

    •  None (Отсутствует): при выборе этой опции соединение между точками отсутствует.

    •  Straight (Прямая): точки последовательно соединяются прямой линией в том порядке, в котором они находятся в файле данных.

    •  В списке Steps (Шаги) Вы можете выбрать один из альтернативных методов построения ступенчатой интерполяции. Эти методы соответствуют шаговым функциям, в которых точки данных соединяются с левых сторон, в центрах или с правых сторон шагов, в зависимости от того была ли выбрана опция Left step (Левый шаг), Center step (Центральный шаг) или Right step (Правый шаг). Шаги между собой соединяются вертикальными отрезками.

    •  В списке Jump (Прыжок) может быть выбран один из методов скачкообразной интерполяции. Скачкообразные методы строятся точно так же, как и пошаговые, но в них отсутствуют вертикальные соединения. В зависимости от выбора Left jump (Прыжок слева) Center jump (Прыжок по центру) или Right jump (Прыжок справа) точки данных будут лежать с левой стороны, по середине или с правой стороны горизонтальных отрезков.

    •  В списке Spline (Сплайн) может быть выбран один из методов соединения точек данных при помощи кривой.

    — при выборе опции Spline (Сплайн) для соединения точек данных между собой строятся кубические сплайны.


    — при выборе опции 3rd-order Lagrange (Лагранж 3-го порядка) осуществляется интерполяция, при которой кривая аппроксимируется полиномом третье! о порядка, который строится на основе четырёх последовательных точек данных.


    — при выборе опции 5rd-order Lagrange (Лагранж 5-го порядка) осуществляется интерполяция, при которой кривая аппроксимируется полиномом пятого порядка, который строится на основе шести последовательных точек данных.

    Text (Текст)

    Эта опция предоставляет возможность изменить шрифт и размер текстовых элементов.


    Сначала одним щелчком выделяют текст на графике. После этого на тексте появляются метки коррекции.


    В группе Font (Шрифт) выбирают необходимый тип шрифта, а в группе Size (Размер) необходимый размер. Размер шрифта (кегль) выражается в точках.


    После щелчка на кнопке Apply (Применить) выбранные свойства будут перенесены на выделенный объект. Эта кнопка становится активной только тогда, когда выделен текстовый объект.

    3D-Rotation (ЗО-врашение)

    Это один из двух методов, с использованием которых можно вращать ЗD-диаграмму рассеяния. При помощи переключателей на левой стороне диалогового окна диаграмму можно вращать вперёд или назад относительно осей X, Y и Z.


    Рисунки на переключателях указывают на ось и направление вращения. Вы можете вращать систему координат при помощи коротких щелчков на соответствующих переключателях или удерживая нажатой кнопку мыши. Вращение, задаваемое таким образом, отображается на упрощенной схеме, где изображены три оси; эта схема находится в центре диалогового окна.


    Если активирована опция Show tripod (Показать треножник), то будет показан треножник, линии которого проходят через центр области построения диаграммы параллельно осям. Активирование треножника особенно рекомендуется тогда, когда необходимо проследить вращение осей при выключенном обрамлении трехмерного графика.


    Вращение выделенной диаграммы происходит при помощи кнопки Apply (Применить).


    График будет повёрнут только тогда, когда к нему будет применено заданное вращение. В течении операции вращения применение каких-либо других команд становится невозможным.

    Swap Axes (Смена осей)

    При помощи этой опции в двумерном графике можно поменять местами вертикальную и горизонтальную оси.

    Explode Slice (Выдвинуть сегмент)

    Чтобы выдвинуть сегмент круговой диаграммы, выделите его и нажмите эту кнопку.

    Break Lines at Missing (Разорвать линию в месте отсутствующего значения)

    Разрыв линии на линейной диаграмме при наличии отсутствующего значения.

    Chart options (Параметры графика)

    Здесь Вам предлагается выбор дополнительных параметров для столбчатых и линейчатых диаграмм, а также диаграмм с областями. В случае линейчатых диаграмм, Вы также можете разделить линии по категориям.


    При активировании опции Change scale to 100 % (Перевести масштаб в проценты) точки данных столбчатых диаграмм и частотных диаграмм с областями переводятся в процентные показатели и отображаются как процентные доли. Если редактируемая диаграмма является столбчатой, то столбцы будут автоматически штабелированы. Если на редактируемой диаграмме столбец или область отображает только один ряд данных, то эта опция остаётся недосягаемой. Эта опция также неприменима в случае, если диаграмма отображает функцию накопительной суммы.


    В группе Line Options (Параметры линии) предлагаются ещё две возможности обработки линейных диаграмм.

    •  Опция Connect markers within categories (Соединить маркеры внутри категорий) соединяет маркеры, которые принадлежат к одним и тем же категориям, но лежат на разных кривых. Эта опция может применяться для диаграмм, на которых представлены как минимум две кривые. Она не влияет на текущий статус интерполяции или маркировки кривых.

    •  Опция Display projection (Показать проекцию) позволяет выделить некоторую про-екцируемую категорию. Категории, находящиеся справа от проецируемой категории отображаются иначе.

    Если на диаграмме в виде столбцов представлены по меньшей мере два ряда данных, то при помощи группы Ваг Туре (Тип столбцов), её можно преобразовать в кластеризованную или состыкованную диаграмму. Если активирована опция Change scale to 100 % (Перевести масштаб в проценты), то группа Ваг Туре (Тип столбцов) становится недоступной.

    Set/exit spin mode (Включить/выключить режим вращения)

    И эта кнопка делает возможным непосредственное вращение ЗD-диаграммы рассеяния в окне редактора диаграмм; но здесь в процессе вращения диаграмма претерпевает некоторые упрощения.


    Вращать диаграмму вперёд и назад относительно осей X, Y и Z можно при помощи кнопок с соответствующими символами в левой части диалогового окна.


    Символы на клопах вращения указывают на оси и направление вращения. Вы можете вращать область координат пошагово при помощи коротких щелчков или беспрерывно, удерживая кнопку мыши нажатой. Производимое таким образом вращение, отображается при помощи системы трех осей в центре окна редактора диаграмм.

    72.gif

    Изображение: 

    75.gif

    Изображение: 

    22.17 Примеры редактирования графиков

    22.17 Примеры редактирования графиков


    Некоторые примеры редактирования графиков уже приводились в главах 4, 6 и 11. В этой главе мы рассмотрим ещё три дополнительных примера.

    22.17.1 Пример первый: изменение наименования осей

    22.17.1 Пример первый: изменение наименования осей

    •  Откройте в окне просмотра результатов файл balken.spo, в котором хранится график, изображённый на рис. 22.43.

    Здесь необходимо изменить наименование вертикальной оси.

    •  Двойным щелком перенесите график в редактор диаграмм и щелчком выделите наименование вертикальной оси.

    •  После этого выберите в меню Chart (Диаграмма) Axis... (Ось)

    В появляющемся окне Вам предлагается множество разнообразных возможностей редактирования оси.

    •  Измените название оси на "Холестерин, исходный показатель" и покиньте диалоговое окно нажатием ОК.

    В результате Вы увидите отредактированный график, который после закрытия редактора диаграмм будет отображён и в окне просмотра результатов.

    22.17.2 Пример второй: редактирование круговой диаграммы

    22.17.2 Пример второй: редактирование круговой диаграммы

    •  Откройте файл kreis.spo, в котором хранится круговая диаграмма, представленная на рис. 22.30. Эта диаграмма пока ещё не показывает результаты голосования в процентах.

    •  Двойным щелком перенесите график в редактор диаграмм.

    •  Щёлкните дважды на названии одной из представленных партий (к примеру, SPD или CDU).

    •  Откроется диалоговое окно Pie Options (Параметры круговой диаграммы) (см. рис. 22.69).

    •  Поставьте маркер в поле Percents (Проценты) и щёлкните на кнопке Format... (Формат).

    Откроется диалоговое окно Pie Options: Label Format (Параметры круговой диаграммы: Формат метки), представленное на рисунке 22.70.


    Здесь Вам предоставляется возможность указать место нахождения численного значения переменной.

    •  В группе Display Frame Around (Показать круговую рамку) активируйте опцию Outside labels (Метка снаружи).

    •  Подтвердите нажатием Continue (Далее) и затем на ОК. Вы получите диаграмму, изображённую на рисунке 22.71.


    Рис. 22.69: Диалоговое окно Pie Options (Параметры круговой диаграммы)

    89.gif

    Изображение: 

    22.17.3 Пример третий: нанесение регрессионных линий

    22.17.3 Пример третий: нанесение регрессионных линий

    •  В окне просмотра результатов откройте файл streumat.spo, в котором находится матричная диаграмма рассеяния, изображённая на рис. 22.50, и двойным щелком перенесите её в редактор диаграмм.

    •  В списке меню редактора диаграмм выберите Chart (Диаграмма) Options... (Параметры)


    Рис. 22.70: Диалоговое окно Pie Options: Label Format (Параметры круговой диаграммы: Формат метки)



    Рис. 22.71: Результаты голосования на местных выборах в земле Гессен 1993.


    Откроется диалоговое окно Scatterplot Options (Параметры диаграммы рассеяния) (см. рис. 22.72).

    •  В группе Fit Line (Приближённая линия) активируйте опцию Total (Обобщённая).

    •  Щёлкните на выключателе Fit Options... (Параметры приближения). Откроется диалоговое окно Scatterplot Options: Fit Line (Параметры диаграммы рассеяния: Приближённая линия).

    •  Щёлкните на области Linear regression (Линейная регрессия) и в группе Regression Prediction Line(s) (Линия(и) для оценки качества регрессии) отметьте опцию Mean (Среднее значение); таким образом для регрессионной прямой Вы получите 95 % доверительный интервал.

    •  Покиньте диалоговое окно нажатием Continue (Далее) и затем ОК.

    Теперь на рассматриваемой диаграмме рассеяния присутствуют регрессионные прямые и соответствующие им доверительные интервалы.



    Рис. 22.72: Диалоговое окно Scatterplot Options (Параметры диаграммы рассеяния)



    Рис. 22.73: Диалоговое окно Scatterplot Options: Fit Line (Параметры диаграммы рассеяния: Приближённая линия)


    В корректировке нуждаются ещё названия переменных.

    •  Дважды щёлкните на тексте в левом верхнем диагональном элементе.

    •  В появившемся диалоговом окне Scatterplot Matrix Scale Axes (Оси матричной диаграммы рассеяния) в группе Individual Axes (Отельные оси) отметьте редактируемый текст и щёлкните на выключателе Edit... (Правка).

    Откроется диалоговое окно Scatterplot Matrix Scale Axes: Edit Selected Axis (Оси матричной диаграммы рассеяния: Редактирование выделенной оси).

    •  Наберите в диалоговом окне более короткий текст, к примеру, "ожидаемая продолжительность жизни" (Lebenserwartung) и подтвердите нажатием Continue (Далее).

    •  Поступите также и с двумя другими диагональными элементами матричной диаграммы рассеяния.

    •  Закончите редактирование графика нажатием ОК (см. рис. 22.74).

    Всё многообразие возможностей для корректировки графиков, предлагаемых программой, при помощи нескольких приведенных примеров можно рассмотреть только в самых общих чертах. Эти примеры, по меньшей мере, должны были послужить Вам мотивацией для самостоятельного проведения дальнейших опытов, в ходе которых можно выяснить и другие возможности приведения графиков к более презентабельному виду.



    Рис. 22.74: Матричная диаграмма рассеяния с регрессионными прямыми и доверительными интервалами

    90.gif

    Изображение: 

    91.gif

    Изображение: 

    92.gif

    Изображение: 

    93.gif

    Изображение: 

    94.gif

    Изображение: 

    22.2 Линейчатые диаграммы

    22.2 Линейчатые диаграммы


    Линейчатую диаграмму вместо столбчатой следует выбирать тогда, когда необходимо отобразить большое количество столбцов, а также тогда, когда столбцы располагаются в определённой последовательности. Как правило, это временная последовательность.



    Рис. 22.15: Штабельная столбчатая диаграмма

    •  Для построения линейной диаграммы после открытия соответствующего файла SPSS выберите в меню: Graphs (Графики) Line... (Линейчатые)

    Откроется диалоговое окно Line Charts (Линейчатые диаграммы) (см. рис. 22.16).


    Вы можете построить простую, сложную и связанную линейные диаграммы. Как и для столбчатых диаграмм данные, отображаемые в этих диаграммах, могут быть заданы как категории одной переменной, как разные переменные или как значения отдельных наблюдений.



    Рис. 22.16: Диалоговое окно Line Charts (Линейчатые диаграммы)

    15.gif

    Изображение: 

    16.gif

    Изображение: 

    22.2.1 Простые линейчатые диаграммы

    22.2.1 Простые линейчатые диаграммы


    В файле buecher.sav хранится информация о развитии книгопечатания в Германии с 1962 по 1991 год.

    •  Откройте файл buecher.sav и просмотрите его содержимое в редакторе данных.

    •  В диалоговом окне Line Charts (Линейчатые диаграммы) щёлкните на области Simple (Простая) и оставьте, опцию Summaries for groups of cases (Обработка категорий одной переменной), устанавливаемую по умолчанию.

    •  После щелчка по выключателю Define (Определить) откроется соответствующее диалоговое окно.

    •  В поле Category Axis: (Ось категорий) введите переменную jahr (год). В группе Line Represent (Значения линий) активируйте Other summary function (Другая обрабатывающая функция) и в появившееся поле введите переменную anz (количество). Вместо установленной по умолчанию функции Mean of values (Средние значения), пройдя выключатель Change Summary...(Изменить метод обработки), отметьте функцию суммы значений (Sum of values) (которая в данном случае, правда, дает тот же эффект).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок.

    •  Начните построение диаграммы щелчком на ОК.


    Рис. 22.17: Диалоговое окно Define Simple Line: Summaries for Groups of Cases (Построение простой линейчатой диаграммы: Обработка категорий одной переменной)



    Рис. 22.18: Линейчатая диаграмма

    17.gif

    Изображение: 

    18.gif

    Изображение: 

    22.2.2 Сложные линейчатые диаграммы

    22.2.2 Сложные линейчатые диаграммы


    Следующая таблица демонстрирует тенденцию нарушения законов по охране окружающей среды в Западной Германии с 1985 по 1992 год:


    Гол

    Нарушения

    UA


    CV


    UB


    1985


    2.750


    8.562


    901


    1986


    3.682


    9.294


    1.161


    1987


    5.390


    10.529


    1.311


    1988


    6.748


    1 1 .968


    1.671


    1989


    8.559


    1 1 .827


    1.590


    1990


    8.157


    9.942


    1.525


    1991


    9.724


    9.601


    1.457


    1992


    12.453


    8.687


    1.573


    Где


    UA — Переработка мусора, наносящая вред окружающей среде


    GV — Загрязнение воды


    UB — Использование запрещённого промышленного оборудования


    Эти данные построчно сохранены в переменных jahr (год), ua, gv и ub в файле umwelt.sav.

    •  Откройте файл umwelt.sav и просмотрите его содержимое в редакторе данных.

    •  В диалоговом окне Line Charts (Линейчатые диаграммы) щёлкните на области Multiple (Сложная) и активируйте опцию Summaries of separate variables (Обработка отдельных переменных).

    •  После щелчка по выключателю Define (Определить) откроется соответствующее диалоговое окно (см. рис. 22.19).

    •  В поле Category Axis: (Ось категорий) введите переменную jahr. В поле Line Represent (Значения линий) по очереди введите переменные ua, gv и ub; вместо установленной по умолчанию функции Mean of values (Средние значения), с помощью выключателя Change Summary...(Изменить метод обработки), отметьте функцию суммы значений (Sum of values).

    •  После щелчка по выключателю Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.


    Рис. 22.19: Диалоговое окно Define Multiple Line: Summaries of Separate Variables (Построение сложной линейчатой диаграммы: Обработка отдельных переменных)

    19.gif

    Изображение: 

    22.2.3 Связанные линейчатые диаграммы

    22.2.3 Связанные линейчатые диаграммы


    Это разновидность сложной линейчатой диаграммы, в котором точки данных обозначены разными символами и соединены вертикальной связью.

    •  Воспользуйтесь примером из предыдущего раздела и в диалоговом окне Line Charts (Линейчатые диаграммы) щёлкните на области Drop-line (Связанные линии).

    •  Во всём остальном поступите так же, как и в предыдущем разделе.


    Рис. 22.20: Сложная линейчатая диаграмма


    Построенная нами диаграмма будет соответствовать приведенной на рисунке 22.21.

    20.gif

    Изображение: 

    22.3 Диаграммы с областями

    22.3 Диаграммы с областями


    Диаграммы с областями являются разновидностью линейчатой диаграммы, в которой области, находящиеся под линиями, закрашиваются благодаря чему график выглядит более наглядным.

    •  Для построения диаграммы с областями, после открытия необходимого файла SPSS, выберите в меню Graphs (Графики) Area... (С областями)

    Откроется диалоговое окно Area Charts (Диаграммы с областями) Вы можете построить простую или состыкованную диаграмму с областями. И здесь данные, отображаемые в этих диаграммах, могут быть заданы как категории одной переменной, как разные переменные или как значения отдельных наблюдений.



    Рис. 22.21: Связанная линейчатая диаграмма



    Рис. 22.22: Диалоговое окно Area Charts (Диаграммы с областями)

    21.gif

    Изображение: 

    22.gif

    Изображение: 

    22.3.1 Простая диаграмма с областями

    22.3.1 Простая диаграмма с областями


    Следующая таблица содержит информацию о производстве велосипедов с 1986 по 1992 год. Производственные показатели разбиты дополнительно на сбыт внутри страны и экспорт.


    Год

    Штук (млн.)

    Производство


     Внутри страны


    Экспорт


    1986


    4,00


    3,14


    0,86


    1987


    3,74


    3,01


    0,73


    1988


    3,88


    3,14


    0,74


    1989


    4,40


    3,67


    0,73


    1990


    4,81


    4,08


    0,73


    1991


    4,91


    4,35


    0,56


    1992


    4,55


    4,10


    0,45


    Эти данные построчно сохранены в переменных jahr (год), gesamt (общий объем производства), inland (внутри страны) и export (экспорт) в файле fahrrad.sav.

    •  Откройте файл fahrrad.sav и просмотрите его содержимое в окне редактора данных.

    Сначала данные о совокупном производстве представим в виде простой диаграммы с областями.

    •  В диалоговом окне Area Charts (Диаграммы с областями) щёлкните на области Simple (Простая) и оставьте опцию Summaries for groups of cases (Обработка категорий одной переменной), устанавливаемую по умолчанию.

    •  После щелчка по выключателю Define (Определить) откроется главное диалоговое окно (см. рис. 22.23).

    •  В поле Category Axis: (Ось категорий) введите переменную jahr и в группе Area Represents (Значения областей) установите маркер возле Other summary function (Другая обрабатывающая функция). В появившееся поле введите переменную gesamt и оставьте функцию Mean of values (Средние значения), устанавливаемую по умолчанию.

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.


    Рис. 22.23: Диалоговое окно Define Simple Area: Summaries for Groups of Cases (Построение простой диаграммы с областями: Обработка категорий одной переменной)



    Рис. 22.24: Диаграмма с областями


    Следует отметить то, что начальной точкой отсчёта вертикальной оси является не ноль, а значение 3,6.

    23.gif

    Изображение: 

    24.gif

    Изображение: 

    22.3.2 Состыкованные диаграммы с областями

    22.3.2 Состыкованные диаграммы с областями


    Этот вид диаграмм следует применять только тогда, когда штабелируемые области дают не лишенный смысла эффект суммирования. Мы ещё раз обратимся к примеру, рассмотренному в предыдущем разделе, но теперь совокупную производительность разделим на продукцию, реализуемую внутри страны и экспорт.

    •  В диалоговом окне Area Charts (Диаграммы с областями) щёлкните на области Stacked (Состыкованная) и отметьте опцию Summaries of separate variables (Обработка отдельных переменных).

    •  После щелчка по выключателю Define (Определить) откроется соответствующее диалоговое окно.

    •  В поле Category Axis: (Ось категорий) введите переменную jahr, а в поле Areas Represent (Значения областей) введите обе переменные inland и export и оставьте функцию Sum of values (Сумма значений), устанавливаемую по умолчанию.

    •  Минуя выключатель Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.


    Рис. 22.25: Диалоговое окно Define Stacked Area: Summaries of Separate Variables (Построение штабельной диаграммы с областями: Обработка отдельных переменных)



    Рис. 22.26: Штабельная диаграмма с областями.

    25.gif

    Изображение: 

    26.gif

    Изображение: 

    22.4 Круговые диаграммы

    22.4 Круговые диаграммы


    Представление данных в виде круговых диаграмм стоит выбирать тогда, когда частоты или значения переменных можно, не нарушая здравого смысла, сложить вместе и эта сумма будет соответствовать ста процентам.


    Отобразим при помощи круговой диаграммы частоты категорий переменной psyche (психологическое состояние студентов) из файла studium.sav.

    •  Откройте файл studium.sav и выберите в меню Graphs (Графики) Pie... (Круговые) Откроется диалоговое окно Pie Charts (Круговые диаграммы).

    •  Оставьте опцию Summaries for groups of cases (Обработка категорий одной переменной), установленную по умолчанию и щелчком на кнопке Define (Определить) откройте следующее диалоговое окно.


    Рис. 22.27: Диалоговое окно пе Charts (Круговые диаграммы)



    Рис. 22.28: Диалоговое окно Define Pie: Summaries for Groups of Cases (Построение круговой диаграммы: Обработка категорий одной переменной)

    •  В поле Define slices by: (Создать сектора при помощи:) введите переменную psyche.

    •  Щёлкните на выключателе Options... (Параметры) и уберите маркер с опции Display groups defined by missing values (Пропущенные значения отображать как категории).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК (см. рис. 22.29).

    Типичным примером применения круговой диаграммы является отображение процентных показателей голосов избирателей, проголосовавших за те или иные партии.


    На местных выборах земли Гессен в 1993 году получилось следующее распределение голосов в процентах:


    Партия


    ДОЛЯ ГОЛОСОВ (%)


    SPD


    36,4


    CDU


    32,0


    Gruene (Зелёные)


    11,0


    Republikaner (Республиканцы)


    8,3


    FPD


    5,1


    Прочие


    7,2


    Этот пример является примером с уже имеющимися (готовыми) данными.



    Рис. 22.29: Круговая диаграмма

    •  Откройте файл kommunal.sav, в котором в переменных р и рг построчно находятся необходимые для нас данные.

    •  В диалоговом окне Pie Charts (Круговые диаграммы) опять оставьте опцию Summa-ries for groups of cases (Обработка категорий одной переменной), установленную по умолчанию.

    •  После щелчка по выключателю Define (Определить) в поле Define slices by: (Создать сектора при помощи:) введите переменную р. Поставьте маркер возле Other summary function (Другая обрабатывающая функция) и в появившееся поле введите переменную рг. Используйте установленную по умолчанию опцию Sum of values (Сумма значений).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК (см. рис. 22.30).

    В главе 22.17 мы придадим этой диаграмме более презентабельный вид.

    27.gif

    Изображение: 

    28.gif

    Изображение: 

    29.gif

    Изображение: 

    22.5 Диаграммы максимальных и минимальных значений

    22.5 Диаграммы максимальных и минимальных значений


    Если вы посмотрите на поведение биржевых котировок акций, то заметите, что для фиксированного промежутка времени, к примеру, для одного дня, существует три важнейших характеристики: максимальное и минимальное значения, а также значение в конце промежутка, при закрытии биржи. Такой и подобные ему процессы могут быть представлены при помощи диаграммы максимальных и минимальных значений, которая на биржевом сленге иногда называется потолок-пол-закрытие.

    •  После открытия необходимого Вам файла SPSS выберите в меню Graphs (Графики) High-Low... (Максимум-минимум)

    После этого откроется соответствующее диалоговое окно.


    Существует пять видов диаграмм максимума-минимума, данные для которых, как и для предыдущих графиков, могут интерпретироваться тремя различными способами.

    22.5.1 Простые биржевые диаграммы — потолок-пол-закрытие

    22.5.1 Простые биржевые диаграммы - потолок-пол-закрытие


    Предположите, что вы располагаете некоторыми акциями и фиксировали их котировки в течение десяти дней:



    Рис. 22.30: Круговая диаграмма



    Рис. 22.31: Диалоговое окно Higli-Low Charts (Диаграммы максимума-минимума)


    День


    Максимальная котировка


    Минимальная котировка


    Окончательная котировка


    1


    164,35


    161,48


    162,33


    2


    166,12


    163,03


    164,12


    3


    167,84


    164,75


    165,97


    4


    167,79


    163,93


    166,13


    5


    171,14


    / 168,04


    170,94


    6


    175,33


    171,44


    171,99


    7


    174,88


    172,93


    173,01


    8


    173,20


    170,50


    171,82


    9


    169,54


    166,43


    167,28


    10


    168,24


    165,14


    166,43


    Эти данные построчно сохранены в четырёх переменных tag (день), hoch (максимум), tief (минимум) и ende (окончательная котировка) в файле aktien.sav.

    •  Откройте файл aktien.sav и в диалоговом окне High-Low Charts (Диаграммы максимума-минимума) щёлкните на области Simple High-Low-Close (Простая диаграмма — потолок-пол-закрытие).

    •  Установите метку возле опции Summaries of separate variables (Обработка отдельных переменных) и нажатием выключателя Define (Определить) откройте следующее диалоговое окно (см. рис. 22.32).

    •  В поле Category Axis: (Ось категорий) введите переменную tag и в соответствующие поля введите переменные hoch (High), tief (Low) и ende (Close). Оставьте установленную по умолчанию функцию Mean of values (Средние значения).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок.

    •  Начните построение диаграммы щелчком на ОК.


    Рис. 22.32: Диалоговое окно Define Simple High-Low-Close: Summaries of Separate Variables (Построение простой диаграммы — потолок-пол-закрытие: Обработка отдельных переменных)



    Рис. 22.33: Простая диаграмма — потолок-пол-закрытие

    30.gif

    Изображение: 

    31.gif

    Изображение: 

    32.gif

    Изображение: 

    33.gif

    Изображение: 

    22.5.2 Кластеризованные диаграммы — максимум-минимум-закрытие

    22.5.2 Кластеризованные диаграммы - максимум-минимум-закрытие


    При помощи этого метода осуществляется возможность представить несколько процессов потолок-пол-закрытие в одной диаграмме. Для реализации этой возможности в диалоговом окне High-Low Charts (Диаграммы максимума-минимума) щёлкните на области Clustered high-low-close (Кластеризованная диаграмма — максимум-минимум-закрытие).

    22.5.3 Линейчатые диаграммы разностей

    22.5.3 Линейчатые диаграммы разностей


    При помощи этой диаграммы может быть представлено взаимное изменение значений двух переменных, причём обе результирующие кривые могут пересекаться. Это пересечение как раз и может быть очень наглядно представлено с помощью линейчатых диаграмм разностей.


    Нижеследующая таблица содержит данные о развитии рынка образования в Германии с 1985 по 1992 год.


    Год


    Количество учебных мест 

    Предложение Спрос

    1985


    719.110


    755.994


    1986


    715.880


    730.980


    1987


    690.287


    679.622


    1988


    665.964


    628.793


    1989


    668.649


    602.014


    1990


    659.435


    559.531


    1991


    668.000


    550.671


    1992


    721.756


    608.121

    •  Откройте файл lehre.sav, в котором в переменными jahr (год), angeb (предложение) и nachf (спрос) хранятся необходимые нам данные.

    •  В диалоговом окне High-Low Charts (Диаграммы максимума-минимума) щёлкните на области Difference Line (Линия разностей). Установите метку возле опции Summaries of separate variables (Обработка отдельных переменных).

    •  Нажатием выключателя Define (Определить) откройте следующее диалоговое окно (см. рис. 22.34).

    •  В поле Category Axis: (Ось категорий) введите переменную jahr и в группе Differenced Pair Represents (Значения разностных пар) в поля 1 и 2 введите переменные angeb и nachf. Активируйте функцию суммы (Sum of values) с помощью кнопки Change Summary (Сменить процедуру обработки).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок.

    •  Начните построение диаграммы щелчком на ОК.


    Рис. 22.34: Диалоговое окно Define Difference Line: Summaries of Separate Variables (Построение линейчатой диаграммы разностей: Обработка отдельных переменных).



    Рис. 22.35: Линейчатая диаграмма разностей

    34.gif

    Изображение: 

    35.gif

    Изображение: 

    22.5.4 Простые интервальные столбцы

    22.5.4 Простые интервальные столбцы


    Этот вид диаграммы является разновидностью простой диаграммы — потолок-пол-закрытие, в которой, однако, отображается только максимальное и минимальное значения, а окончательное отсутствует.


    В качестве примера рассмотрим ситуацию, когда Вы, предположим, на протяжении десяти дней фиксировали свою максимальную и минимальную температуры:


    День


    Температура(°С)


      Минимум

     Максимум

    14 марта 1994


    2,4


    11,3


    15 марта 1994


    2,6


    11,5


    16 марта 1994


    3,7


    12,4


    17 марта 1994


    6,2


    14,8


    18 марта 1994


    6,2


    14,8


    19 марта 1994


    1,9


    9,7


    20 марта 1994


    4,3


    11,3


    21 марта 1994


    7,6


    13,4


    22 марта 1994


    7,0


    12,9


    23 марта 1994


    6,3


    11,0


    Эти данные построчно сохранены в трёх переменных (tag (день), train (минимальная температура), tmax (максимальная температура)) в файле celsius.sav.

    •  Откройте файл celsius.sav и в диалоговом окне High-Low Charts (Диаграммы максимума-минимума) щёлкните на области Simple range bar (Простые интервальные столбцы).

    •  Установите метку возле опции Summaries of separate variables (Обработка отдельных переменных).

    •  Нажатием выключателя Define (Определить) откройте следующее диалоговое окно (см. рис. 22.36).

    •  В поле Category Axis: (Ось категорий) введите переменную tag и в группе Bar Pair Represents (Значения пары столбцов) введите переменные tmin и tmax в поля 1 и

    2. Установленную по умолчанию функцию Mean of values (Средние значения) можете оставить.

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.

    22.5.5 Кластеризованные интервальные столбцы

    22.5.5 Кластеризованные интервальные столбцы


    В одной диаграмме при помощи интервальных столбцов могут быть представлены и изменения нескольких переменных.

    •  Для этого в диалоговом окне High-Low Charts (Диаграммы максимума-минимума) щёлкните на области Clustered range bar (Кластеризованные интервальные столбцы).


    Рис. 22.36: Диалоговое окно Define Simple Range Bar: Summaries of Separate Variables (Построение диаграммы с простыми интервальными столбцами: Обработка отдельных переменных)

    36.gif

    Изображение: 

    22.6 Коробчатые диаграммы

    22.6 Коробчатые диаграммы


    Метод, при помощи которого, можно отобразить медиану и оба квартиля, минимальные и максимальные значения, а также пропущенные и экстремальные значения, уже рассматривался в главе 10.4.1. Эти диаграммы могут быть построены в ходе предварительного исследования данных или через меню графиков.

    •  После открытия необходимого Вам файла SPSS выберите в меню Graphs (Графики) Boxplot... (Коробчатые диаграммы) Откроется диалоговое окно Boxplot (Коробчатая диаграмма) (см. рис. 22.38).

    •  Вы можете выбрать простую или.кластеризованную диаграмму, причём данные могут быть представлены в виде категорий одной переменной или в виде разных переменных.


    Рис. 22.37: Простые интервальные столбцы



    Рис. 22.38: Диалоговое окно Boxplot (Коробчатая диаграмма)

    37.gif

    Изображение: 

    38.gif

    Изображение: 

    22.6.1 Простые коробчатые диаграммы

    22.6.1 Простые коробчатые диаграммы


    В рамках исследования гипертонии (файл hyper.sav) мы хотим для четырёх разных возрастных категорий (переменная ak) отобразить исходные показатели систолического кровяного давления (переменная rrs0).

    •  Откройте файл hyper.sav.

    •  В диалоговом окне Boxplot (Коробчатая диаграмма) щёлкните на области Simple (Простая) и оставьте опцию Summaries for groups of cases (Обработка категорий одной переменной), устанавливаемую по умолчанию.

    •  Щелчком по выключателю Define (Определить) откройте главное диалоговое окно, в котором в поле Category Axis: (Ось категорий) введите переменную ak, а в поле Variable: (Переменная) переменную rrs0. Если Вы введёте какую-либо переменную в поле Label Cases by: (Метки наблюдений), то её метки значений будут использованы для обозначения пропущенных и экстремальных значений.

    •  Начните построение диаграммы щелчком на ОК (см. рис. 22.39).

    Если необходимо отобразить изменение систолического давления с течением времени, то для этого следует выбрать переменные rrs0, rrs1, rrs6 и rrs12.

    •  Щёлкните вновь на области Simple (Простая), но теперь поставьте маркер возле опции Summaries of separate variables (Обработка отдельных переменных).

    •  Щелчком по выключателю Define (Определить) откройте следующее диалоговое окно, в котором в поле Boxes Represent (Значения коробок) по очереди введите переменные rrs0, rrs1, rrs6 и rrs12.

    •  Вновь начните построение диаграммы щелчком на ОК (см. рис. 22.40).

    На этой диаграмме метки отображаются не полностью, поэтому их ещё необходимо доработать.



    Рис. 22.39: Коробчатая диаграмма (категории одной переменной)



    Рис. 22.40: Коробчатая диаграмма (разные переменные)

    39.gif

    Изображение: 

    40.gif

    Изображение: 

    22.6.2 Кластеризованные коробчатые диаграммы

    22.6.2 Кластеризованные коробчатые диаграммы


    Вы можете использовать в данной диаграмме ещё одну переменную, тогда коробчатые диаграммы будут сгруппированы по категориям этой переменной.

    •  Для этого в диалоговом окне Boxplot (Коробчатая диаграмма) щёлкните на области Clustered (Кластеризованная).

    22.7 Столбики ошибок

    22.7 Столбики ошибок


    Если при помощи коробчатой диаграммы представляются медиана и оба квартиля, то диаграмма столбцов по величинам ошибки служит для отображения средних значений и характеристик рассеяния (стандартное отклонение, стандартная ошибка или доверительный интервал — по выбору).

    •  После открытия необходимого Вам файла SPSS выберите в меню Graphs (Графики) Error Bar... (Столбики ошибок)

    Откроется диалоговое окно Error Bar (Столбики ошибок).


    Также как и для коробчатых диаграмм, Вы можете выбрать простую или кластеризованную диаграмму столбцов по величинам ошибки, причём данные могут быть представлены в виде отдельных категорий одной переменной или в виде разных переменных.



    Рис. 22.41: Диалоговое окно Error Bar (Столбцы по величинам ошибки)

    41.gif

    Изображение: 

    22.7.1 Простая диаграмма величины ошибки

    22.7.1 Простая диаграмма величины ошибки


    В рамках исследования гипертонии (файл hyper.sav) для четырёх разных возрастных категорий (переменная ak) мы хотим отобразить исходные показатели уровня холестерина (переменная chol0).

    •  Откройте файл hyper.sav.

    •  В диалоговом окне Error Bar (Столбики ошибок) щёлкните на области Simple (Простая) и оставьте опцию Summaries for groups of cases (Обработка категорий одной переменной), устанавливаемую по умолчанию.

    •  Щелчком по выключателю Define (Определить) откройте соответствующее диалоговое окно (см. рис. 22.42).

    •  В поле Category Axis: (Ось категорий) введите переменную ak, а в поле Variable: (Переменная) переменную chol0.

    В группе Bars Represent (Значения столбцов) Вам предлагаются на выбор следующие варианты:

    •  Доверительный интервал для среднего значения (по умолчанию равен 95 %)


    Рис. 22.42: Диалоговое окно Define Simple Error Bar: Summaries for Groups of Cases (Построение простой диаграммы величины ошибки: Обработка категорий одной переменной)

    •  Стандартная ошибка (предустановленный множитель равен 2)

    •  Стандартное отклонение (предустановленный множитель равен 2)

    •  Выберите отображение простого стандартного отклонения (множитель равен 2).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.

    Если необходимо отобразить изменение уровня холестерина с течением времени, то для построения графика необходимо использовать переменные chol0, chol1, chol6 и chol12.



    Рис. 22.43: Простая диаграмма величины ошибки (категории одной переменной)

    •  В диалоговом окне Error Bar (Столбики ошибок) вновь щёлкните на области Simple (Простая), но теперь поставьте маркер возле опции Summaries of separate variables (Обработка отдельных переменных).

    •  Щелчком по выключателю Define (Определить) откройте следующее диалоговое окно, в котором по очереди введите переменные chol0, chol1, chol6 и chol12 в поле Error Bars (Значения столбцов ошибок). В этом случае выберите отображение 95 % -го доверительного интервала (который является установкой по умолчанию).

    •  С помощью выключателя Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК (см. рис. 22.44).


    Рис. 22.44: Простая диаграмма величины ошибки (разные переменные)


     Метки значений на горизонтальной оси необходимо будет ещё подкорректировать.


     

    42.gif

    Изображение: 

    43.gif

    Изображение: 

    44.gif

    Изображение: 

    22.7.2 Кластеризованная величина ошибки

    22.7.2 Кластеризованная величина ошибки


     Диаграммы величины ошибки можно объединять в группы при помощи дополнительных переменных.

    •  Для этого в диалоговом окне Error Bar (Величина ошибки) щёлкните на области Clustered (Кластеризованная).

    22.8 Диаграмма рассеяния

    22.8 Диаграмма рассеяния


    Диаграмма рассеяния в графическом виде отображает отношения между двумя переменными, которые как минимум относятся к интервальной шкале. Пример диаграммы рассеяния уже был представлен в главе 15.

    •  Чтобы построить диаграмму рассеяния, после открытия необходимого Вам файла SPSS выберите в меню Graphs (Графики) Scatter... (Рассеяние)

    Откроется диалоговое окно Scatterplot (Диаграмма рассеяния).


    Имеются различные возможности построения диаграмм рассеяния. Для нижеследующих примеров взят файл europa.sav (можно сравнить с гл. 20), который содержит данные некоторых признаков для 28 европейских стран.



    Рис. 22.45: Диалоговое окно Scatterplot (Диаграмма рассеяния)

    45.gif

    Изображение: 

    22.8.1 Простая диаграмма рассеяния

    22.8.1 Простая диаграмма рассеяния

    •  Откроите файл europa.sav.

    •  В диалоговом окне Scatterplot (Диаграмма рассеяния) щёлкните на области Simple (Простая).

    •  Щелчком по выключателю Define (Определить) откройте соответствующее диалоговое окно (см. рис. 22.46).

    Мы хотим отобразить ожидаемую продолжительность жизни мужчин (переменная lem) в зависимости от урбанизации (процентного показателя доли городского населения, переменная sb).

    •  Переменную lem из списка исходных переменных перенесите в поле оси Y, а переменную sb — в поле оси X.

    Если Вы поместите какую-нибудь переменную в поле Set Markers by: (Установить маркеры для:), то согласно принадлежности к этой переменной отдельные точки значений на диаграмме будут представлены окрашенными в другой цвет или помечены при помощи какого-либо отличительного маркировочного символа.

    •  Поместите переменную land в поле, предусмотренное для описания наблюдений (Label Cases by: (Метки наблюдений)). Значение этой переменной, соответствующее в приведенном примере сокращённому названию страны, будет размещено в диаграмме рассеяния вблизи соответствующей точки данных.


    Рис. 22.46: Диалоговое окно Simple Scatterplot (Простая диаграмма рассеяния)

    •  Для этой цели щёлкните по выключателю Options... (Параметры) и в появившемся диалоговом окне активируйте опцию Display chart with case labels (Показать график с метками наблюдений).

    •  Пройдя выключатель Titles... (Заголовок), введите подходящий заголовок и начните построение диаграммы щелчком на ОК.


    Рис. 22.47: Простая диаграмма рассеяния с метками случаев


    Большое количество меток наблюдений приводит к снижению наглядности графика, поэтому можно рекомендовать оставить их только для избранных точек.


    В качестве альтернативы на вооружение можно взять обозначение метками только наиболее характерных точек.

    •  Для этого постройте диаграмму заново.

    •  Через выключатель параметров уберите маркер опции Display chart with case labels (Показать график с метками наблюдений).

    Теперь метки на графике присутствовать не будут.

    •  Двойным щелчком поместите график в редактор диаграмм.

    •  Одним щелчком по символу выбора точек перейдите в режим выбора точек. Теперь при помощи курсора для выделения точек, Вы можете выбрать отдельные точки на диаграмме рассеяния и обозначить их метками.

    Если несколько точек находятся очень близко друг к другу, то будет показан список меток, из которого Вы сможете выбрать необходимую метку.



    Рис. 22.48: Простая диаграмма зассеяния с выборочными метками случаев


    Численные показатели для любой точки, находящейся на диаграмме рассеяния также можно просмотреть в редакторе данных .

    •  Для этого при помощи курсора для выделения точек выберите нужную точку и в списке команд щёлкните на кнопке перехода в редактор данных:

    Вы увидите редактор данных. Изменения данных, вносимые в редакторе данных, естественно непосредственно не влияют на уже построенную диаграмму рассеяния.


    В главе 22.17 мы покажем, как на одной диаграмме рассеяния можно отобразить четыре разных регрессионных линии (к примеру, регрессионные прямые).

    46.gif

    Изображение: 

    47.gif

    Изображение: 

    49.gif

    Изображение: 

    22.8.2 Матричные диаграммы рассеяния

    22.8.2 Матричные диаграммы рассеяния


    Этот метод применяется для отображения нескольких диаграмм рассеяния на одном графике.

    •  В диалоговом окне Scatterplot (Диаграмма рассеяния) щёлкните на области Matrix (Матрица).

    •  Щелчком на выключателе Define (Определить) откройте соответствующее диалоговое окно.

    Переменные lem (ожидаемая продолжительность жизни мужчин), so (количество часов солнечной погоды в году) и nt (количество пасмурных дней в году) мы хотим попарно связать друг с другом.

    •  Для этого переменные lem, so и nt поочерёдно перенесите в поле, предусмотренное для матричных переменных.

    •  Начните построение диаграммы щелчком на ОК.

    Число строк и столбцов в матричной диаграмме соответствует количеству переменных. Каждая ячейка является диаграммой рассеяния для одной пары переменных. Диагональные ячейки содержат метки переменных, находящихся в соответствующих ячейках матрицы (в данном примере метки являются слишком длинными).



    Рис. 22.49: Диалоговое окно Scatterplot Matrix (Матричная диаграмма рассеяния)



    Рис. 22.50: Матричная диаграмма рассеяния


    Первая диагональная ячейка содержит метку переменной km. Это означает, что для всех диаграмм первой строки эта переменная находится со стороны вертикальной оси (оси Y). Какая из переменных при этом откладывается по горизонтальной оси (ось X), следует узнавать из следующих диагональных ячеек. Такие же правила справедливы и для последующих строк.


    К примеру, в центральном поле первой строки представлена взаимосвязь средней ожидаемой продолжительности жизни (по вертикали) и количества часов солнечной погоды (по горизонтали). Явно заметна обратная зависимость.


    И в матричных диаграммах рассеяния можно задать маркировку для некоторой переменной, организовать вывод меток наблюдений, а также отображение любой другой необходимой информации; можно так же организовать построение различных линий регрессии (для сравнения см. разд. 22.17).

    51.gif

    Изображение: 

    52.gif

    Изображение: 

    22.8.3 Наложенные диаграммы рассеяния

    22.8.3 Наложенные диаграммы рассеяния


    В одном графике можно представить несколько диаграмм рассеяния.

    •  Для этого в диалоговом окне Scatterplot (Диаграмма рассеяния) щёлкните на области Overlay (Наложение) и затем на кнопке Define (Определить).

    В появившемся диалоговом окне могут быть заданы соответствующие X-Y-пары переменных, которые должны быть представлены вместе. Значения, принадлежащие соответствующей паре, на диаграмме будут отмечены одной определённой маркировкой.


    Этот метод имеет смысл применять только тогда, когда речь идёт о переменных с одними и теми же областями значений.

    22.8.4 Трёхмерные диаграммы рассеяния

    22.8.4 Трёхмерные диаграммы рассеяния


    Эти диаграммы строятся на основании значений трёх переменных и поэтому включают три оси.


    По оси у откладывается высоту положения точки


    По оси х откладывается горизонтальное положение каждой точки


    По оси z откладывается глубина положения каждой точки.


    Отобразим переменную lem (средняя ожидаемая продолжительность жизни мужчин) на оси у, переменную sb (процентный показатель городского населения) на оси х и переменную so (количество часов солнечной погоды в году) на оси г.

    •  В диалоговом окне Scatterplot (Диаграмма рассеяния) щёлкните на области 3D (3-х мерная).

    •  Щелчком по выключателю Define (Определить) откройте соответствующее диалоговое окно (см. рис. 22.51).

    •  Перенесите поочерёдно переменные lem, sb и so из списка исходных переменных в поля принадлежащие осям у, х и z-

    •  Начните построение диаграммы щелчком на ОК.


    Рис. 22.51: Диалоговое окно 3-D Scanerplot ( Трёхмерная диаграмма рассеяния)


    Очень длинные наименования осей при построении рисунка 22.52 были откорректированы.


    И здесь Вы бы могли отметить маркировкой значения одной из переменных, а также указать наименования наблюдений и при помощи выключателя Titles... (Заголовок) дать диаграмме подходящее название.



    Рис. 22.52: Трёхмерная диаграмма рассеяния

    53.gif

    Изображение: 

    54.gif

    Изображение: 

    22.9 Гистограммы

    22.9 Гистограммы


    Гистограмма уже несколько раз рассматривалась в предыдущих главах.

    •  Чтобы построить гистограмму, после открытия необходимого Вам файла SPSS (к примеру, файла hyper.sav), выберите в меню Graphs (Графики) Histogram... (Гистограмма)

    Откроется диалоговое окно Histogram (Гистограмма) (см. рис. 22.53).


    С помощью гистограммы можно наглядно отобразить распределение переменных, относящихся по меньшей мере к интервальной шкале.

    •  Откройте файл hyper.sav.

    •  Поместите переменную chol0 в поле переменных и активируйте вывод кривой нормального распределения.

    •  Начните построение гистограммы щелчком на ОК.


    Рис. 22.53: Диалоговое окно Histogram (Гистограмма)



    Рис. 22.54: Гистограмма с кривой нормального распределения


    Чтобы выяснить, значимо ли отличается получившееся распределение от нормального, Вы не должны полагаться только на внешний вид гистограммы, а проверить его при помощи специального статистического теста. Для этого в SPSS реализован тест Колмогорова-Смирнова (см. разд. 14.5), который в данном случае указывает на незначимое отклонение от нормального распределения (значение р = 0,616).

    55.gif

    Изображение: 

    56.gif

    Изображение: 

    Глава 23. Интерактивные графики

    Глава 23. Интерактивные графики

    1. Интерактивные графики

    Интерактивные графики


    Начиная с 8-ой версии, SPSS предоставляет в распоряжение пользователя так называемые интерактивные графики, которые располагают множеством новых возможностей по сравнению с прежними графиками, теперь уже получившими название стандартных.


    Диаграммы, которые можно построить с помощью интерактивного графического интерфейса, включают следующие виды:

    •  столбчатые диаграммы

    •  линейчатые диаграммы

    •  круговые диаграммы

    •  коробчатые диаграммы

    •  диаграммы величины ошибки

    •  гистограммы

    •  диаграммы рассеяния

    Эти виды диаграмм будут рассмотрены в разделах 23.1 по 23.7. В разделах 23.8 будет показан ещё один подход к работе с интерактивными графиками, а в разделе 23.9 будут даны несколько советов по корректировке уже построенных диаграмм.

    23.1 Столбчатые диаграммы

    23.1 Столбчатые диаграммы


    Возможности, которые SPSS предлагает для построения этого вида диаграмм, проиллюстрируем с использованием нескольких переменных, содержащихся в файле pcalltag.sav. В этом файле находятся ограниченный набор из многочисленных переменных, полученных в ходе исследования на тему "Компьютер в повседневной жизни", проведенного в Институте Социологии Магдебургского Университета им. Филиппса.

    23.1.1 Простая столбчатая диаграмма: отображение частот

    23.1.1 Простая столбчатая диаграмма: отображение частот


    Один из вопросов цитируемого исследования звучал так: В какое время суток Вы предпочитаете работать за компьютером? "Частотные показатели" ответов на отдельные категории этого вопроса должны быть представлены в графическом виде.

    •  Откройте файл pcalltag.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Ваг... (Столбчатые)

    Откроется диалоговое окно Create Bar Chart (Создание столбчатой диаграммы).


    Это диалоговое окно имеет строение, типичное для диалогов построения интерактивных графиков. Оно разбито на пять регистрационных карт, первая из которых Assign Variables (Присвоить переменные) открывается сразу после открытия окна. Эта карта состоит из списка переменных, пяти полей для ввода переменных, двух кнопок с символами в верхней части регистрационной карты, соответствующих двум возможностям построения диаграммы и трёх выключателей.


    В зависимости от установок, активированных на данный момент времени, переменные в списке могут быть отсортированы в алфавитном порядке или по типу переменных. Если Вы хотите изменить этот порядок, щёлкните правой кнопкой мыши на одной из переменных и в появившемся меню выберите желаемый тип сортировки.


    В этом же меню Вы можете указать, должны ли переменные в исходном списке быть представлены при помощи своих имён или при помощи меток. Так как метки переменных ввиду своей большой длины, как правило, не могут быть полностью отображены в списке переменных, мы рекомендуем, оставить представление переменных в виде их имён.


    Переменные, находящиеся в списке переменных, можно разделить на два типа: категориальные и метрические. Эти два типа переменных идентифицируются при помощи двух разных символов, устанавливаемых в начале имени. Категориальными переменными являются переменные, относящиеся к номинальной или порядковой шкале. После активирования необходимой переменной и щелчка правой кнопкой мыши может быть изменён и её тип.


    В данном примере категориальными являются переменные: arbeit (облегчение рабочих процессов), besitz (обладание компьютером), fachgr (группы специальностей), freund (трудность завязывания знакомств), gcsclil (пол), internet (использование Интернета), pczeit (время суток, когда используется компьютер) и uebstaat (пусть компьютерными технологиями занимается государство). К метрическим переменным относятся: compstd (количество часов за компьютером в неделю), interstd (количество часов в Интернете в неделю) и semester (количество семестров). К ним добавляются ещё и системные переменные Scount (частота), Spct (процент) и Scase (наблюдение), которые используются для построения столбчатых диаграмм с абсолютными частотами, процентными показателями или диаграмм для отдельных наблюдений соответственно.



    Рис. 23.1: Диалоговое окно Create Bar Chart (Создание столбчатой диаграммы)



    Рис. 23.2: Меню диалогового окна Create Bar Chart (Создание столбчатой диаграммы)


    Первые два из пяти имеющихся полей расположены в виде схематичной х-у-системы координат, причём в поле оси у сразу по умолчанию внесена системная переменная Scount (частота). Это означает, что если Вы оставите эту предварительную установку, то будет построена столбчатая диаграмма, отображающая абсолютные частоты. Обрабатываемая переменная должна быть помещена в поле оси х.


    Во всех диалоговых окнах, рассмотренных нами ранее, для перемещения переменной из поля исходных переменных в какое-либо поле тестируемых переменных необходимо было выделить её щелчком мыши и воспользоваться кнопкой со стрелкой, указывающей направление перемещения. В диалоговых окнах для построения интерактивных графиков перенос переменной осуществляется при помощи техники перетаскивания. Если вы расположите указатель мыши над одной из переменных, он примет вид руки. Теперь удерживая нажатой кнопку мыши, перенесите эту переменную в необходимое поле.

    •  Переместите таким образом в поле оси х переменную pczeit (время суток).

    •  Подтвердите нажатием ОК. В результате этих действий будет построена простая столбчатая диаграмма с абсолютными частотами переменной время суток.

    Подсказка Bars show counts (Столбцы указывают на частоты) кажется мешающей и даже лишней.

    •  Вы можете запретить вывод подсказок, если деактивируете опцию Display Key (Показать подсказку), предоставляемую в регистрационной карте Assign Variables (Присвоить переменные) в группе Bars Represent (Значения столбцов). Тогда диаграмма будет выглядеть так. как на рисунке 23.4.

    Во всех последующих примерах этой главы отображение подсказок будет деактивировано, без каких-либо дополнительных предупреждений. Построенная нами столбчатая диаграмма является диаграммой вертикального типа. Этот тип диаграмм устанавливается по умолчанию и считается традиционным.



    Рис. 23.3: Престал столбчатая диаграмма с абсолютными частотами



    Рис. 23.4: Простая столбчатая диаграмма с отключенной подсказкой

    •  Если Вы желаете построить горизонтальную столбчатую диаграмму, воспользуйтесь кнопкой с соответствующим символом; эта кнопка находится в верхней части регистрационной карты.

    Теперь вместо абсолютных частот отобразим на графике процентные показатели.


    Для этого перетащите в поле оси у системную переменную $pct (процент) и вновь активируйте вывод вертикальной столбчатой диаграммы.


    После рассмотрения представления абсолютных частот и процентных показателей при помощи простой столбчатой диаграммы, необходимо обратить внимание на то, как могут быть отображены средние значения, к примеру, медианы или другие показатели одной переменной в зависимости от другой, категориальной переменной.



    Рис. 23.5: Горизонтальная, простая столбчатая диаграмма

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    23.1.2 Простая столбчатая диаграмма: характеристики метрической переменной

    23.1.2 Простая столбчатая диаграмма: характеристики метрической переменной


    Переменная fachgr (труппы специальностей) описывает шесть разных групп специальностей, а переменная compstd (количество часов за компьютером в неделю) количество часов в неделе, которое студенты проводят за компьютером. Мы хотим на простой столбчатой диаграмме отобразить зависимость среднего количества часов, проводимых за компьютером, от профилирующей специальности.

    •  В регистрационной карте Assign Variables (Присвоить переменные) диалогового окна Create Bar Chart (Создание столбчатой диаграммы) перенесите переменную fachgr к поле оси х, а переменную compstd — в поле оси у.

    Внизу диалогового окна появится ниспадающее меню, в котором в Вашем распоряжении будут находиться тридцать различных статистических показателей для представления зависимой переменной (в данном случае compstd) .

    •  Оставьте отображение средних значений, установленное по умолчанию, и подтвердите построение диаграммы нажатием ОК.


    Рис. 23.6: Простая столбчатая диаграмма с процентными показателями



    Рис. 23.7: Простая столбчатая диаграмма средних значений


    Займёмся теперь расшифровкой отдельных элементов регистрационных карт.

    •  Щёлкните сначала на выключателе 2О-системы координат. Откроется меню для добавления ещё одной координаты (ЗD-координата) и для создания ЗО-эффек-тов.

    •  Активируйте ЗО-эффект.

    •  Щёлкните по закладке Bar Chart Options (Параметры столбчатой диаграммы); откроется соответствующая регистрационная карта (см. рис. 23.8).

    Вы можете выбрать вид изображения столбцов и в группе Bar Labels (Метки столбцов) активировать опции Count (Количество) и Value (Значение). Если в группе Bar Baseline (Базовая линия столбцов) Вы активируете опцию Custom (Пользовательский режим), то столбцы будут изображаться начиная с указанного Вами значения. При активизации ЗD-эффектов, Вы сможете выбрать квадратную и круглую форму представления основания столбцов.

    •  Выберите первый из трёх видов столбцов с квадратной формой основания, активируйте метки Count (Количество) и Value (значение) и оставьте автоматическое построение базовой линии (см. рис. 23.9).

    На регистрационной карте Error Bars (Столбцы по величинам ошибки) для столбцов можно организовать указание доверительных интервалов, стандартных отклонений и стандартных ошибок. Как величину доверительного интервала, так и множитель стандартной ошибки и стандартного отклонения здесь можно регулировать пошаговым образом.


    Существует три формы столбцов ошибок и четыре различных направления прорисовки этих столбцов.

    •  Из режима ЗD-эффектов перейдите к 2О-системе координат, откройте регистрационную карту Error Bars (Столбцы по величинам ошибки) и активируйте опцию Display Error Bars (Показать столбцы ошибок). Активируйте вывод простой стандартной ошибки и оставьте без изменения все остальные установки по умолчанию.


    Рис. 23.8: Регистрационная карта Bar Chart Options (Параметры столбчатой диаграммы)



    Рис. 23.9: Столбчатая диаграмма с 3D-эффектом и обозначением столбцов

    •  Если в регистрационной карте Bar Chart Options (Параметры столбчатой диаграммы) ещё активированы опции группы Bar Labels (Метки столбцов), деактивируйте их.

    В регистрационной карте Titles... (Заголовки) Вы можете указать заголовок, подзаголовок и комментарии. В регистрационной карте Options (Параметры) наряду со стандартным форматом, устанавливаемым по умолчанию, для столбчатых диаграмм могут быть установлены ещё шесть дополнительных форматов. Попробуйте самостоятельно все возможности, предоставляемые SPSS. Для отображения диаграмм на мониторе, конечно же, больше подходят те опции, которые позволяют изобразить график в наиболее подходящем цветовом варианте. Для повышения разнообразия оттенков при печати на принтере в распоряжение пользователя предоставляется опция Grayscale (Оттенки серого), которая применяется и при публикации интерактивных графиков в этой книге.


    Следующий пример должен помочь нам лучше разобраться в значении различных типов переменных. Переменная polgrund (политическая позиция), к примеру, так же, как и переменная uebstaat (пусть компьютерными технологиями занимается государство) является категориальной. Первая переменная при помощи кодировок 1 = скорее левый, 2 = центрист и 3 = скорее правый указывает на политическую приверженность, а вторая переменная при помощи кодировок от 1 = согласен до 5 = не согласен выражает отношение к позиции: "Пусть компьютерными технологиями занимается государство".

    •  Поместите переменную polgrund (политическая позиция) в поле оси х, а переменную uebstaat (пусть компьютерными технологиями занимается государство) в поле оси у. Внизу диалогового окна появится информация, что столбцами теперь уже может быть присвоены величины моды, то есть наиболее часто встречающегося значения (категориальной) переменной uebstaat. Мы же хотим отобразить среднее значение этой переменной.

    • Правой кнопкой мыши щёлкните на переменной uebstaat, находящейся в поле оси у и в появившемся меню присвойте ей статус метрической переменной (Scale).


    Рис. 23.10: Регистрационная карта Error Bars (Столбцы по величинам ошибки)



    Рис. 23.11: Столбчатая диаграмма с указанием стандартной ошибки

    •  В списке, появившемся внизу окна, оставите опцию по умолчанию, а именно Means (Отображение средних значений) и подтвердите построение диаграммы нажатием ОК. Вы заметите, что созданная столбчатая диаграмма демонстрирует только незначительные различия средних значений. Для более ясного отображения различий необходимо перекомпоновать шкалу значений.

    •  Дважды щёлкните на графике и затем правой кнопкой мыши на наименовании вертикальной оси. В появившемся меню активируйте Scale Axis... (Масштабировать ось); откроется диалоговое окно Scale Axis (Масштабировать ось) (см. рис. 23.12).

    •  Установите значение минимума равным 2,8, а цену деления (Tick Interval) равную 0,2.

    Точно таким же образом Вы можете масштабировать любую столбчатую диаграмму, чтобы в конечном итоге получить довольно заметные различия столбцов. Однако это имеет смысл делать только тогда, когда эти различия являются значимыми. Как показала проверка при помощи Н-теста по Крускалу и Уоллису, респонденты с левыми политическими взглядами чаще соглашались с точкой зрения: "Пусть компьютерными технологиям;: занимается государство", чем респонденты с правыми политическими взглядами, именно такие значимые различия мы и наблюдаем в данном примере построения интерактивной диаграммы.


    К сожалению, в данной диаграмме респонденты, полностью разделяющие левые политические взгляды, изображаются самым коротким столбцом, что может быть объявлено кодировкой (1 = согласен).

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    23.1.3 Группированная столбчатая диаграмма

    23.1.3 Группированная столбчатая диаграмма


    Рассмотрим теперь как частоты различных ответов на вопрос: "В какое время с; -ток Вы предпочитаете работать за компьютером?" зависят от пола респондентов. Для этого имеются четыре возможности.



    Рис. 23.12: Диалоговое окно Scale Axis (Масштабировать ось)



    Рис. 23.13: Простая столбчатая диаграмма с коррекцией оси

    •  Нажмите выключатель 2-D Coordinate (2-D координаты) и в появившемся меню активируйте опцию 3-D Coordinate (3-D координата). Откроется ещё одно поле (поле оси z) (см. рис. 23.14).

    •  Переменную pczeit (время суток) поместите в поле оси х, переменную geschl (пол) в поле оси г, а системную переменную Spct (процент) в поле оси у.

    •  Подтвердите построение нажатием ОК.

    Этот тип отображения столбцов применять не рекомендуется, т.к. столбцы относящиеся к женщинам частично скрыты.


    Следующие два варианта построения диаграммы получаются благодаря введению легенды, отражающей принадлежность столбцов при помощи цвета и узора.

    •  Активируйте вновь двумерное представление диаграммы и перенесите переменную geschl (пол) в поле Color (Цвет) группы Legend Variables (Переменные легенды). Обращайте внимание на то, чтобы соседний выключатель был установлен в положение Cluster (Группа).

    При отображении графика в цвете заметно, что женщины более склонны к работе за компьютером в утренние и послеобеденные часы, а мужчины напротив вечером и ночью.

    •  Теперь переменную geschl (пол) поместите в поле Style (Стиль) группы Legend Variables (Переменные легенды) и обратите внимание на то, чтобы соседний выключатель был установлен в положение Cluster (Группа) (см. рис. 23.17).

    Ещё одна возможность построения графика выражается указанием полевых переменных.

    • Поместите переменную geschl (пол) в поле Panel Variables (Переменные полей) (см. рис. 23.18).

    Указание переменной в качестве разделителя полей имеет смысл в том случае, если она имеет насколько категорий. Можно вносить также и несколько полевых переменных.



    Рис. 23.14: Диалоговое окно построения столбчатой диаграммы в трёхмерной системе координат



    Рис. 23.15: Группированная столбчатая диаграмма в трёхмерной системе координат



    Рис. 23.16: Группированная столбчатая диаграмма с переменной в качестве легенды (различные цвета)



    Рис. 23.17: Группированная столбчатая диаграмма с переменной в качестве легенды (различная штриховка)



    Рис. 23.18: Столбчатая диаграмма, группированная при помощи полевой переменной

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    14.gif

    Изображение: 

    15.gif

    Изображение: 

    16.gif

    Изображение: 

    17.gif

    Изображение: 

    18.gif

    Изображение: 

    23.1.4 Штабельная столбчатая диаграмма

    23.1.4 Штабельная столбчатая диаграмма


    Вместо группированной столбчатой диаграммы вы можете построить штабельную столбчатую диаграмму. Для этого переключатель, находящийся рядом с полем Color (Цвет) или Style (Стиль), установите в положение Stack (Штабельная).


    Группированная диаграмма с рисунка 23.17 при установке режима Stack (Штабельная) выглядит так, как изображено на рисунке 23.19.

    23.10 Коррекция интерактивных графиков

    23.10 Коррекция интерактивных графиков


    Для того, чтобы получить больше информации об интересующих Вас данных или приукрасить диаграммы перед презентацией, Вы можете их многогранно откорректировать.


    Некоторые виды корректировок мы Вам уже представляли. К ним относятся:

    •  отключение подсказок (разд. 23.5),

    •  изменение шкалы оси (разд. 23.1.2, 23.5),

    •  отделение сегмента круговой диаграммы (разд. 23.4.1),

    •  варианты обозначения наблюдений на диаграмме рассеяния (разд. 23.8),

    •  отключение обозначений наблюдений на диаграмме рассеяния (разд. 23.8).

    Чтобы получить возможность модифицировать построенную диаграмму, Вы должны сначала дважды щёлкнуть на области ее построения. Тогда перед Вами появятся практически необозримые возможности корректировки диаграммы.


    Мы объясним ещё нескольких принципиальных моментов на уже рассмотренных нами примерах. Данные для примеров взяты из знакомого уже нам файла pcalltag.sav.

    •  Откройте файл pcalltag.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Ваr... (Столбчатые)

    •  В диалоговом окне Create Bar Chart (Создание столбчатой диаграммы) переместите переменную fachgr (группы специальностей) в поле оси х, а системную переменную Spct (процент) — в поле оси у.

    •  В регистрационной карте Titles... (Заголовки) дайте диаграмме название: "Частотные показатели по специальностям" и в качестве поясняющей подписи введите "Институт социологии 1998".

    •  В регистрационной карте Options (Параметры) активируйте отображение столбцов в сером цвете (Grayscale).

    •  Подтвердите установки нажатием ОК.

    В окне просмотра появится соответствующая столбчатая диаграмма. Откорректируем построенную диаграмму, а именно

    •  уберём подсказку,

    •  разместим по центру заголовок и пояснение, а также изменим шрифт.

    •  Щёлкните дважды на диаграмме, чтобы получить возможность её редактировать.

    Диаграмма осталась в окне просмотра, но изменились пункты меню, находящиеся под строкой меню. Слева и сверху появились дополнительные панели инструментов; значение кнопок этих панелей Вы узнаете, если с остановками пройдётесь по ним курсором.


    Теперь при помощи правой кнопки мыши вы можете активировать для корректировки любой элемент диаграммы, после чего появляется соответствующее контекстное меню. В этом меню Вам предоставляются обширные возможности для коррекции элементов.

    •  Щёлкните правой кнопкой мыши на подсказке: "Столбцы указывают на процентные показатели" и в появившемся меню выберите опцию Hide Key (Спрятать подсказку).

    •  При помощи левой кнопки выделите мыши заголовок диаграммы и, не отпуская кнопку, передвиньте его немного вправо, таким образом, чтобы он оказался по центру диаграммы.

    •  Теперь правой кнопкой мыши щёлкните на заголовке.

    •  В контекстном меню выберите опцию Text... (Текст).


    Рис. 23.57: Простая столбчатая диаграмма с заголовком и подсказкой

    •  В диалоговом окне Text (Текст) в поле Font (Шрифт) активируйте опцию Times New Roman, в поле Font Style (Начертание) опцию Bold Italic (Жирный курсив) и в поле Size (Размер) установите значение 14. Подтвердите нажатием ОК.

    •  Переместите заголовок при помощи левой кнопки мыши немного влево.

    •  Таким же образом расположите по центру и пояснение, находящееся в нижней части диаграммы, установите курсивное начертание и размер 9.

    •  Дважды щёлкните на любой точке за пределами диаграммы. Панели инструментов исчезнут и график вернётся к нормальному виду (см. рис. 23.58) .

    На следующем примере мы покажем, как на графике построить координатную сетку и добавить необходимый текст. Вновь построим простую линейчатую диаграмму, отображающую тенденцию потребления пива, рассмотренную в разд. 23.2.1 .

    •  Откройте файл bierjahr.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Line... (Линейчатые)

    •  Перенесите переменную jahr (год) в поле оси х, а переменную bier (пиво) в поле оси у.

    •  Подтвердите нажатием ОК. В окне просмотра появится такая же диаграмма, как на рисунке 23.20.

    •  Дважды ввод щёлкните на этом графике и сначала отключите подсказку, если она ещё присутствует.

    •  Щёлкните правой кнопкой мыши на какой-либо точке графика.

    •  В появившемся контекстном меню выберите опцию Grid Lines... (Линии сетки). Откроется диалоговое окно Grid Lines (Линии сетки), в которое входят две регистрационные карты.

    •  В карте, открытой по умолчанию, Bier-verbrauch je Einwohner (Liter) активируйте опции Display Grid lines (Показать сетку) и At major ticks only (Только на главных делениях).

    •  Откройте регистрационную карту Jahr (Год) и активируйте опции Display Grid lines (Показать сетку) и At major and minor ticks (Главные и вспомогательные деления).

    •  Подтвердите построение нажатием ОК.


    Рис. 23.58: Откорректированная простая столбчатая диаграмма


    На диаграмме появится координатная сетка, которая облегчит сопоставление точек построенной кривой цифровыми значениями, откладываемыми по осям.


    Теперь добавим в диаграмму текст.

    •  Щёлкните левой кнопкой мыши на значке левой панели инструментов, обозначенном маленькой (прописной) буквой а. Затем опять же левой кнопкой мыши щёлкните в какой-нибудь точке на свободном пространстве в диаграмме, начиная с которой вы хотели бы вводить текст. Наберите в двух строках текст: "Снижение потребления пива в Германии".

    Линейчатая диаграмма, изменённая таким образом, будет отображена в окне просмотра.



    Рис. 23.59: Линейчатая диаграмма с координатной сеткой и дополнительным текстом


    Остальные возможности модифицирования графиков, испробуйте, пожалуйста, самостоятельно; отправляйтесь в путешествие на поиски открытий!

    57.gif

    Изображение: 

    58.gif

    Изображение: 

    59.gif

    Изображение: 

    23.11 Построение диаграммы поданным сводной таблицы

    23.11 Построение диаграммы по данным сводной таблицы


    Данные, находящиеся в сводной таблице результатов разнообразных статистических расчетов, могут быть непосредственно отображены в графическом виде. Порядок действий рассмотрим на простом примере.

    •  Откройте файл pcalltag.sav и посредством выбора меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты) постройте частотную таблицу переменной pczeit (время суток): Tageszeit (Время суток)




    Frequency (Частота)


    Percent (Процент)


    Valid Percent (Действи-тельный процент)


    Cumulative Percent (Совоку-пный процент)


    Valid (Действитель ные значения)


    vormittags (первая половина)


    118


    9,6,


    11,1


    11,1


    nachmittags (вторая половина)


    331


    26,9


    31,3


    42,4


    abends (вечер)


    524


    42,6


    49,5


    91,9


    nachts (ночь)


    86


    7,0


    8,1


    100,0


    Total (Сумма)


    1059


    86,2


    100,0



    Missing (Отсутству-ющие значения)


    Nichtnutzer (Неисполь-зующие)


    65


    5,3




    System (Системные значения)


    105


    8,5




    Total (Сумма)


    170


    13,8




    Total (Сумма)



    1229


    100,0




    Мы хотим представить процентные показатели действительных наблюдений в виде столбчатой диаграммы. Для этого:

    •  Щёлкните дважды на таблице и выделите действительные процентные показатели для четырёх категорий времени суток.

    •  Щёлкните правой кнопкой мыши на выделенной области и в контекстном меню выберите опцию Create Graph (Построить график). Затем выберите вид диаграммы, в нашем случае это Ваг (Столбчатая).

    •  С другими возможностями техники "Из таблицы в график" поэкспериментируйте, пожалуйста, самостоятельно.


    Рис. 23.60: Столбчатая диаграмма, построенная на основании данных сводной таблицы

    60.gif

    Изображение: 

    23.2 Линейчатые диаграммы

    23.2 Линейчатые диаграммы


    Отображение информации в виде линейчатой диаграммы, как правило, выбирается в том случае, если необходимо отобразить изменение показателей с течением времени. При этом делается различие между отображением одной переменной (простая линейчатая диаграмма) и разбиением одной переменной при помощи некоторой категориальной переменной (сложная линейчатая диаграмма).

    23.2.1 Простые линейчатые диаграммы

    23.2.1 Простые линейчатые диаграммы

    Немецкие пивовары в последнее время стали жаловаться на снижение уровня потребления пива. Представим развитие потребления пива в графическом виде.

    •  Откройте файл bierjahr.sav. Файл содержит две переменные jahr (год) и bier (пиво). В первой переменной хранится информация о годовых показателях потребления пива с 1970 по 1997 год, во второй переменной среднее потребление пива на одного человека в литрах.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Line... (Линейчатые)

    Откроется диалоговое окно Create Line (Создание линейчатой диаграммы), содержащее пять регистрационных карт. В первую очередь, как обычно, открывается регистрационная карта Assign Variables (Присвоить переменные).

    •  Перенесите переменную jahr (год) в поле оси х, а переменную bier (пиво) в поле оси у.


    Рис. 23.19: Штабельная столбчатая диаграмма (различная штриховка)


    Имейте в виду, что в данном примере каждому году соответствует только одно значение зависимой переменной (bier (пиво)); в общем случае же каждому значению независимых переменных Вы можете поставить в соответствие сколько угодно значений зависимых переменных, которые затем обрабатываются, например, вычисляется среднее значение. Это значение и отображается на диаграмме. Подобный пример будет рассматриваться дальше.

    •  В данном примере всё же оставьте установку по умолчанию Means (Среднее значение) и подтвердите построение нажатием ОК.


    Рис. 23.20: Диалоговое окно Create Line (Создание линейчатой диаграммы)


    Обратите внимание на то, что шкала потребления пива начинается не с нулевой отметки, из-за чего снижение потребления очень сильно бросается в глаза. Для большей наглядности Вы можете дополнительно отметить маркерами значения, соответствующие отдельно взятым годам.

    •  Для этого перейдите на регистрационную карту Dots and Lines (Точки и линии) и в группе Display (Показать) активируйте опцию Dots (Точки).

    Вы можете также произвести эти установки, если с самого начала выберите меню Graphs (Графики) Interactive (Интерактивно) Dot... (Точки) и в регистрационной карте Dots and Lines (Точки и линии) активируете опцию Lines (Линии) (см. рис. 23.22).



    Рис. 23.21: Простая линейчатаядиаграмма


    Кривую на диаграмме вы можете представить и в виде ленты.

    •  На регистрационной карте Assign Variables (Присвоить переменные) поставьте переключатель в положение 3-D Effect (3-D эффект); опцию Dots (Точки) необходимо в данном случае деактивировать.

    Отображение линии в виде ленты Вы также можете организовать при помощи меню Graphs (Графики) Interactive (Интерактивно) Ribbon... (Лента) (см. рис. 23.23).



    Рис. 23.22: Простая линейчатая диаграмма с отображением отдельных точек



    Рис. 23.23: Простая линейчатая диаграмма с 3-D эффектом (лента)


    В заключении обзора линейчатых диаграмм мы приведём пример, в котором для диаграммы будут рассчитаны средние значения нескольких показателей. Некоторая фирма, занимающаяся производством минеральной воды, утверждает, что регулярное употребление воды производства этой фирмы ведёт к снижению уровня холестерина в крови. Для того, чтобы это доказать на протяжении 12 недель проводилось наблюдение за 18 добровольцами.

    •  Откройте файл mineral.sav.

    •  В файле находятся переменные woche (неделя) и chol (холестерин). Переменная woche (неделя) имеет значения от 0 до 12, которые указывают на номер на соответствующей недели, а в переменной chol (холестерин) хранится уровень холестерина. Значение уровня холестерина при переменной woche (неделя) равной 0 соответствует исходному уровню перед началом лечения. Каждую неделю у добровольцев измеряются 18 показателей уровня холестерина в крови.

    Следует отметить, что такой вид представления данных для SPSS не считается традиционным. Для каждого последовательного измерения, как правило, должна образовываться новая переменная, для нашего примера, допустим, это были бы переменные chol0 до chol12, на основании которых можно было бы провести тест значимости для зависимых выборок. Этот факт указывает на значительное отличие рассматриваемого примера от структуры данных, обычно применяемой в SPSS.

    •  В регистрационной карте Assign Variables (Присвоить переменные) поместите переменную woche (неделя) в поле оси х, а переменную chol (холестерин) — в поле оси у.

    •  Активируйте регистрационную карту Error Bars (Столбцы по величинам ошибки) и организуйте вывод 95 %-го доверительного интервала.

    Первые три недели действительно можно наблюдать значительное понижение уровня холестерина, но затем этот уровень вновь начинает расти.



    Рис. 23.24: Простая линейчатая диаграмма с доверительным интервалом

    19.gif

    Изображение: 

    20.gif

    Изображение: 

    21.gif

    Изображение: 

    22.gif

    Изображение: 

    23.gif

    Изображение: 

    24.gif

    Изображение: 

    23.2.2 Сложные линейчатые диаграммы

    23.2.2 Сложные линейчатые диаграммы


    Сложная диаграмма получается при разбиении одной переменной на категории.

    •  Откройте файл gaetraenk.sav.

    В этом файле находятся данные с 1991 по 1997 годы о потреблении трёх видов напитков на одного человека. Переменная jahr указывает на год, перемен ная verb на потребление в литрах на одного человека, а переменная getraenk на вид напитка (1 = алкогольные; 2 = вода, соки; 3 = кофе, чай, молоко).

    •  Перенесите переменную jahr в поле оси х, переменную verb в поле оси у, а переменную getraenk в поле Style (Стиль) группы переменных легенды.

    •  При помощи соответствующего переключателя выберите отображение с 3D эффектом.

    На диаграмме наблюдается снижение потребления алкогольных напитков, кофе, чая и молока и одновременно сильное повышение потребления воды и соков.


    В регистрационной карте Dots and Lines (Точки и линии) Вы можете активировать отображение связывающих линий; тогда на сложной линейчатой диаграмме будут соединены между собой точки с одинаковой координатой х. Построение связывающих линий вы также можете организовать путём выбора меню Graphs (Графики) Interactive (Интерактивно) Drop-Line... (Связывающие линии) Теперь обратимся к диаграммам с областями.



    Рис. 23.25: Сложная линейчатая диаграмма с 3D эффектом

    25.gif

    Изображение: 

    23.3 Площадные диаграммы

    23.3 Площадные диаграммы


    Если области, находящееся под линиями, закрашены, то в таком случае говорят о диаграммах с областями. Как правило, диаграммы такого рода выглядят, показательней.


    Для объяснения площадных диаграмм должно быть достаточно одного простого примера. Вернёмся для этого к файлу bierjahr.sav, рассмотренному в разделе 23.2.1, который содержит данные о потреблении пива с 1970 по 1997 годы.

    •  Откройте файл bierjahr.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Area... (Области)

    Откроется диалоговое окно Create Area Chart (Создание диаграммы с областями).

    •  В исходной регистрационной карте поместите переменную jahr (год) в поле оси х, а переменную bier (пиво) в поле оси у.

    •  Если Вы посмотрите в окне просмотра на получившуюся диаграмму, то заметите, что было бы целесообразней начинать отсчёт оси у не со значения 0, а со значения 130, к примеру.

    •  Чтобы внести такую корректировку поступите так, как было описано в разделе 23.1.2. Щёлкните дважды на графике и затем правой кнопкой мыши на наименовании оси у. В появившемся меню активируйте Scale Axis... (Масштабировать ось). В диалоговом окне Scale Axis (Масштабировать ось) в группе Scale (Шкала) в поле Minimum (Минимум) введите значение 130, а в поле Maximum (Максимум) — значение 160, значение Tick Interval (Цена деления) установите равным 5.


    Рис. 23.26: диалоговое окно Create Area Chart (Создание диаграммы с областями)



    Рис. 23.27: Простая площадная диаграмма

    •  Испытайте другие возможности самостоятельно, к примеру, постройте штабельную или группированную диаграмму с областями. Используйте для этого файл get-raenk.sav рассмотренный в разделе 23.2.2 .

    26.gif

    Изображение: 

    27.gif

    Изображение: 

    23.4 Круговые диаграммы

    23.4 Круговые диаграммы


    Круговая диаграмма, как самый излюбленный способ представления категориальных переменных, выбирается тогда, кода количество категорий не велико. При помощи диаграмм этого вида можно отобразить абсолютные или процентные показатели частот категориальных переменных или слагаемые некоторой метрической переменной, если их можно с учётом категорий представить в виде некоторой общей суммы, имеющей определенный смысл, которая будет соответствовать ста процентам. В рамках интерактивных графиков SPSS предлагает простые, штабельные и разложенные круговые диаграммы.

    23.4.1 Простые круговые диаграммы

    23.4.1 Простые круговые диаграммы


    В главе 23.1.1 был представлен файл pcalltag.sav. содержащий некоторые переменные из исследования на тему Компьютер в повседневной жизни. Представим переменную pczeit (В какое время суток Вы предпочитаете работать за компьютером?) в виде круговой диаграммы.

    •  Откройте файл pcalltag.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Pie... (Круговые) Simple... (Простая)

    Откроется диалоговое окно Create Simple Pie Chart (Создание простой круговой диаграммы) с четырьмя регистрационными картами: Assign Variables (Присвоить переменные), Pies (Круги), Titles... (Заголовки) и Options (Параметры).

    •  Перенесите переменную pczeit в поле Slice By (Сектора), а переменную Spct — в поле Slice Summary (Сумма частей).


    Рис. 23.28: Диалоговое окно Create Simple Pie Chart (Создание простой круговой диаграммы)


    Если вы будете использовать диаграмму для экранной презентации или печатать на цветном принтере, присвойте каждому сегменту свой цвет; если же Вы будете печатать диаграмму в чёрно-белых тонах, то лучше применить различные виды штриховок.

    •  Откройте регистрационную карту Pies (Круги) и в группе Slice Labels (Метки секторов) активируйте опции Category (Категория) и Value (Значение). Оставьте установку по умолчанию All Outside (Все снаружи).

    Благодаря активированию этих опций вокруг диаграммы будут приведены описания категорий, которые представляют собой метки переменных с соответствующими им процентными показателями.


    Вы можете построить одновременно несколько диаграмм, находящихся рядом друг с другом или друг над другом, если зададите несколько полевых переменных. Мы хотим отобразить зависимость переменной polgrund (Политическая позиция) от переменных geschl (пол) и internet (Использование Интернета: да или нет).



    Рис. 23.29: Простая круговая диаграмма

    •  Перенесите переменную polgrund в поле Slice By (Сектора) и оставьте переменную Spct в поле Slice Summary (Сумма секторов).

    •  Переменным geschl и internet присвойте статус полевых переменных и деактивируйте вывод наименований сегментов, который возможно ещё остался после построения предыдущего графика.

    Между использующими Интернет (верхние круговые диаграммы) и не использующими (нижние круговые диаграммы) нет ни каких различий в отношении политических убеждений, но между полами различия существуют: учащихся с правыми убеждениями среди мужчин больше, чем среди женщин.


    Для круговых диаграмм тоже можно применить трёхмерный эффект.

    •  При помощи выключателя Reset (Сброс) деактивируйте все предыдущие установки.

    •  Переменную fachgr (специальности) поместите в поле Slice By (Сектора). Переменной $pct присвойте статус обобщающей переменной и включите выключатель Style (Стиль).

    •  Установите ЗО-режим при помощи соответствующего выключателя.


    Рис. 23.30: Простые круговые диаграммы с влиянием полевых переменных


    В результате этих действий Вы получите круговую диаграмму с трёхмерным эффектом. В качестве примера ещё одного способа обработки круговой диаграммы рассмотрим отделение сегмента, а именно, сегмента, соответствующего доле учащихся, которые специализируются в естественных науках.

    •  Щёлкните дважды на 3D графике и затем правой кнопкой мыши — на интересующем нас сегменте.

    •  В появившемся меню активируйте опцию Explode from Pie (Отделить от круга).


    Рис. 23.31: Круговая диаграмма в трёхмерном исполнении с отделённым сектором


    Последним примером простой круговой диаграммы будет отображение сумм некоторой метрической переменной в зависимости от категорий зависимой переменной.

    •  Переменную pczeit (время суток) поместите в поле Slice By (Сектора) и активируйте выключатель Style (Стиль).

    •  Переменной compst присвойте статус обобщающей. Она указывает на то, сколько часов в неделю студенты проводят за компьютером.

    •  В поле Slice Represents Computer-Stunden pro Woche (Сектора соответствуют количеству часов в неделю, проведенных за компьютером) оставьте установленную по умолчанию опцию суммы.

    •  В регистрационной карте Titles (Заголовки) укажите название диаграммы: "Время, проведённое за компьютером"


    Рис. 23.32: Простая круговая диаграмма с представлением суммы


    Из диаграммы можно сделать вывод о том, что студенты работают на компьютере в основном по вечерам и намного реже в первой половине дня и ночью.

    28.gif

    Изображение: 

    29.gif

    Изображение: 

    30.gif

    Изображение: 

    31.gif

    Изображение: 

    32.gif

    Изображение: 

    23.4.2 Штабельные круговые диаграммы

    23.4.2 Штабельные круговые диаграммы


    При помощи штабельной диаграммы отображение некоторой категориальной переменной может производиться по группам, обусловленным некоторой дополнительной переменной.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Pie... (Круговые) Clustered... (Группированная)

    Откроется диалоговое окно Create Clustered Pie Chart (Создание группированной круговой диаграммы).

    •  Переменную pczeit (время суток) поместите в поле Slice By (Сектора), а переменную geschl (пол) в поле Clustered by (Группировать при помощи), переменной $pct присвойте статус обобщающей переменной (Slice Summary) и включите выключатель Style (Стиль).


    Рис. 23.33: Группированная круговая диаграмма


    Эта диаграмма представляется не очень наглядной, поэтому для её изучения мы ограничимся приведенным примером.

    33.gif

    Изображение: 

    23.4.3 Рассыпанная круговая диаграмма (рассыпанные круги)

    23.4.3 Рассыпанная круговая диаграмма (рассыпанные круги)


    Круговые диаграммы могут быть разложены в двумерной х-у системе координат, по осям которой будут отображаться две дополнительные категориальные переменные. При активировании соответствующего символа можно добавить и третью переменную (r), что приведёт к построению трёхмерной диаграммы.


    Мы хотим при помощи такой диаграммы представить реакцию на положение: "Я тяжело вхожу в дружеские отношения" (переменная freund) в зависимости от пола и использования сети Интернет (да — нет).

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Pie... (Круговые) Plotted... (Рассыпанная)

    Откроется диалоговое окно Create Plotted Pie Chart (Создание рассыпанной круговой диаграммы).



    Рис. 23.34: Разделённая круговая диаграмма

    •  Переменную internet (использование сети Интернет) поместите в поле оси у, переменную geschl (пол) в поле оси х, переменную freund (трудность завязывания знакомств) в поле Slice By (Сектора) и переменной Spct присвойте статус обобщающей переменной (Slice Summary). Активируйте опцию Style (Стиль).

    Из построенной зависимости видно отсутствие разницы между пользователями сети Интернет и теми, кто ею не пользуется, а также незначительные отличия по половому признаку. Доля студентов, которые дали отрицательный ответ на поставленный вопрос, среди женщин выше, чем среди мужчин.


    Трёхмерный вариант диаграммы с использованием ЗD-эффектов, который строится путём установки соответствующего выключателя в положение 3D Coordinate (Трехмерные координаты), будет не столь показательным и поэтому не рекомендуется для применения.

    34.gif

    Изображение: 

    23.5 Коробчатые диаграммы

    23.5 Коробчатые диаграммы


    Так называемые коробчатые диаграммы являются самыми удобными для отображения медианы, первого и третьего квартилей, минимального и максимального значений, а также аномальных и экстремальных значений.


    В файле klin.sav хранятся некоторые медицинские показатели, описывающие состояние 981 пациента некоторой клиники. Постоим сначала две отдельные диаграммы уровня сахара в крови, разделённые по половому признаку.

    •  Откройте файл klin.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Boxplot... (Коробчатые) Откроется диалоговое окно Create Boxplot (Создание коробчатой диаграммы).

    •  Переменную gluk поместите в поле оси у, а переменную geschl — в поле оси х.


     Рис. 23.35: Диалоговое окно Create Boxplot (Создание коробчатой диаграммы)



    Рис. 23.36: Коробчатая диаграмма с аномальными и экстремальными значениями


    В коробчатых диаграммах аномальные значения обозначаются кружками, а экстремальные звёздочками. Аномальными считаются те значения, которые находятся за пределами коробки между отметками полуторной и тройной высоты этой коробки. Если маркировки аномальных и экстремальных значений Вам мешают и Вы захотите от них избавиться, то поступите следующим образом:

    •  Откройте регистрационную карту Boxes (Коробки) и деактивируйте опцию маркировки аномальных и экстремальных значений. Вы заметите, что хотя метки аномальных и экстремальных значений теперь и отсутствуют, но шкала всё равно остаётся излишне растянутой до значения 600. Поэтому график необходимо ещё дополнительно доработать.

    •  Щёлкните дважды на графике и затем правой кнопкой мыши — на вертикальной оси.

    •  В появившемся меню активируйте опцию Scale Axis... (Масштабировать ось).

    Откроется диалоговое окно Scale Axis — Blutzucker (Маштабировать ось — Уровень сахара).

    •  Минимуму присвойте значение 0, максимуму 200 и возьмите цену деления 50.

    •  Излишним представляется ещё и напоминания: Outliers are hidden (Показ аномальных значений отключён), а также Extreme are hidden (Показ экстремальных значений отключён). Щёлкните на этом тексте правой кнопкой мыши и в контекстном меню активируйте опцию Hide Key (Спрятать подсказку).

    Коробчатые диаграммы могут быть сгруппированы при помощи некоторой дополнительной переменной, которая называется переменной легенды.

    •  В поле оси х вместо переменной geschl поместите переменную altek, которая отображает шесть возрастных категорий, а переменную geschl поместите в поле Style (Стиль) группы переменных легенды Legend Variables (Переменные легенды).

    •  Произведите описанные выше действия над шкалой получившегося графика.


    Рис. 23.37: Коробчатая диаграмма с отключённым режимом демонстрации аномальных и экстремальных значений



    Рис. 23.38: Коробчатая диаграмма с одной переменной легенды


    Ещё одной разновидностью группировки при помощи дополнительной переменной, является группировка при помощи полевой переменной.

    •  Теперь переменной geschl вместо статуса переменной легенды присвойте статус полевой переменной. И здесь также дополнительно откорректируйте маштаб оси.


    Рис. 23.39: Коробчатая диаграмма с одной полевой переменной


    Ещё одну возможность добавления дополнительной переменной в диаграмму открывает активирование режима 3D Coordinate (Третья координата). Но этот вариант представления данных является очень непоказательным.


    В заключение продемонстрируем ещё коробчатую диаграмму с ЗD-эффектом.

    •  При помощи выключателя Reset (Сброс) дёак-тивируйте все установки.

    •  Переменную chol (холестерин) поместите в поле оси у, а переменную alterk (возрастные группы) — в поле оси х.

    •  Активируйте опцию 3D-Effect (Трехмерный эффект), деактивируйте отображение аномальных и экстремальных значений и в регистрационной карте Boxes (Коробки) активируйте опцию Display count labels (Показать метки частот).

    •  В построенном графике подкорректируйте шкалу путём установки минимального значения равным 0 и максимального значения равным 400. Мешающую подсказку Вы можете убрать щелчком правой кнопки мыши с последующим выбором опции Hide Key (Спрятать подсказку).


    Рис. 23.40: Коробчатая диаграмма с применением трехмерного эффекта и указанием частот

    35.gif

    Изображение: 

    36.gif

    Изображение: 

    37.gif

    Изображение: 

    38.gif

    Изображение: 

    39.gif

    Изображение: 

    40.gif

    Изображение: 

    23.6 Столбчатые диаграммы величины ошибки

    23.6 Столбчатые диаграммы величины ошибки


    Если коробчатые диаграммы служат для графического представления показателей переменных, которые не подчиняются нормальному распределению (медиана, квартили), то диаграммы величины ошибки служат для отображения значений нормально распределённых переменных (среднее значение, стандартное отклонение, стандартная ошибка). Похожие столбцы, применяемые для отображения ошибок уже были рассмотрены в разделе 23.1 (см. рис. 23.10). Там они рассматривались при объяснении построения столбчатых диаграмм.


    Для объяснения примера построения интерактивной диаграммы величины ошибки возьмём файл klin.sav, упоминавшийся в разделе 23.5. В этом файле среди множества переменных, описывающих состояние довольно большого коллектива пациентов, хранятся переменные gr (рост) и alterk (шесть возрастных групп). Мы хотим построить график среднего значения и стандартного отклонения роста в зависимости от этих возрастных групп.

    •  Откройте файл klin.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Error Bar... (Величина ошибки)

    Откроется диалоговое окно Create Error Bar Chart (Создание столбчатой диаграммы величины ошибки).

    •  Переменную alterk (шесть возрастных групп) поместите в поле оси х, а переменную gr (рост) в поле оси у.

    По собственному усмотрению, дополнительно к выводу среднему значения, Вы можете организовать отображение доверительного интервала, стандартного отклонения или стандартной ошибки среднего значения, причём процентный показатель для доверительного интервала или множитель для стандартного отклонения и стандартной ошибки можно устанавливать плавно, в бесступенчатом режиме (см. рис. 23.41).



    Рис.23.41: Диалоговое окно Create Error Bar Chart (Создание столбчатой диаграммы величины ошибки)

    •  Активируйте отображение стандартного отклонения (множитель 1,0).

    •  Откройте регистрационную карту Error Bars (Столбды по величинам ошибки) и в области Bar Labels (Метки столбцов) активируйте режимы обозначения столбцов Mean (Среднее значение) и Count (Количество).

    И для столбчатой диаграммы величины ошибки можно применять трехмерный эффект.

    •  Для этого активируйте ЗD-эффект с помощью кнопки на верху открытого диалогового окна и в регистрационной карте Error Bars (Столбцы по величинам ошибки) деактивируйте режимы обозначения столбцов Mean (Среднее значение) и Count (Количество)

    Группирующие переменные можно задавать различным образом.

    •  Деактивируйте 3D-Effect (3D эффект).

    •  Переменную geschl (пол) поместите в поле Style (Стиль) группы переменных легенды.


    Рис. 23.42: Диаграмма величины ошибки



    Рис. 23.43: Диаграмма величины ошибки с ЗD-эффектом



    Рис. 23.44: Группированная диаграмма величины ошибки


    Чтобы столбцы не пересекались, они отображаются с некоторым смещением.

    41.gif

    Изображение: 

    42.gif

    Изображение: 

    43.gif

    Изображение: 

    44.gif

    Изображение: 

    23.7 Гистограммы

    23.7 Гистограммы


    Гистограммы отображают распределение переменных, принадлежащих к интервальной шкале. При таком отображении значения переменной разделяются на интервалы, производится подсчёт частот попадания отдельных значений переменных в эти интервалы и после этого полученные показатели представляются в форме столбцов, расположенных в непосредственной близости друг к другу. В соответствии с установками по умолчанию, количество и ширина интервалов выбирается программой автоматически; при желании эти величины могут быть установлены пользователем.


    Отобразим при помощи гистограммы распределение показателей роста (переменная gr) группы пациентов из файла klin.sav.

    •  Откройте файл klin.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Histogram... (Гистограмма) Откроется диалоговое окно Create Histogram (Создание гистограммы).

    •  Поместите переменную gr (рост) в поле оси х. В поле оси у оставьте системную переменную Scount (количество), устанавливаемую по умолчанию.

    •  Откройте регистрационную карту Histogram (Гистограмма). Активируйте опцию Normal curve (Кривая нормального распределения). Оставьте автоматическую генерацию количества интервалов и ширины интервала.

    Группирующую переменную Вы можете ввести в диаграмму посредством активирования оси г.

    •  При помощи соответствующего выключателя активируйте ЗD-систему координат и в поле оси z перенесите переменную geschl (пол).


    Рис. 23.45: Диалоговое окно Create Histogram (Создание гистограммы)


    В трёхмерной системе координат мы уже видим две гистограммы. Отображение кривой нормального распределения в этом случае невозможно.


    Вы можете организовать вывод так называемой кумулятивной гистограммы; интервальные частотные показатели при этом будут суммироваться.

    •  Деактивируйте поле оси z и активируйте опцию Cumulative histogram (Кумулятивная гистограмма) (см. рис. 23.48).


    Рис. 23.46: Гистограмма с кривой нормального распределения



    Рис.23.47: Группированная гистограмма



    Рис. 23.48: Сводная гистограмма


    Для того, чтобы решить, подчиняется ли рассматриваемая переменная нормальному распределению, недостаточно полагаться только на внешний вид гистограммы, а лучше провести более точный статистический тест. SPSS для этого предлагает тест Колмогорова-Смирнова (см. разд. 14.5); для нашего примера этот тест дает результат/> = 0,02, что говорит о значимом отклонении рассматриваемого распределения от нормального.

    45.gif

    Изображение: 

    46.gif

    Изображение: 

    47.gif

    Изображение: 

    48.gif

    Изображение: 

    23.8 Диаграммы рассеяния

    23.8 Диаграммы рассеяния


    При помощи диаграмм рассеяния описываются отношения между двумя интервальными переменными, которые представляются в форме скопления точек. Возможны также и трёхмерные диаграммы рассеяния, но их, как правило, довольно тяжело интерпретировать.


    В файле welt.sav сохранены несколько переменных, характеризующие 109 стран, к ним относятся: название страны, код региона, средняя ожидаемая продолжительность жизни мужчин и женщин, а также ежедневное потребление калорий.


    Отобразим зависимость ожидаемой продолжительности жизни мужчин от ежедневного количества потребления калорий.

    •  Откройте файл welt.sav.

    •  Выберите в меню Graphs (Графики) Interactive (Интерактивно) Scatterplot... (Диаграмма рассеяния)

    Откроется диалоговое окно Create Scatterplot (Создание диаграммы рассеяния).

    •  Переменную kalorien (калории) поместите в поле оси х, а переменную lem (продолжительность жизни мужчин) в поле оси у.

    •  Переменную land (страна) поместите в поле Label Cases By (Метки наблюдений) (см. рис. 23.50).

    Отображение меток наблюдений на графике, правда, следует рекомендовать только при наличии относительно небольшого количества наблюдений, иначе многие метки будут накладываться друг на друга и, следовательно, станут нечитаемы. В качестве альтернативы отображения всех меток Вы можете выбрать тактику отображения меток выборочных наблюдений.



    Рис. 23.49: Диалоговое окно Create Scatterploi (Создание диаграммы рассеяния)



    Рис. 23.50: Диаграмма рассеяния

    •  Чтобы сначала запретить отображение меток, дважды щёлкните на диаграмме и выберите в меню Formal (Формат) Graph Elements (Графические элементы) Cloud (Облако)

    В диалоговом окне Cloud (Облако) перейдите на регистрационную карту Labels (Метки) и деактивируйте опцию Symbol Labels (Метки точек).


    Чтобы теперь обозначить отдельные точки, щёлкайте на них правой кнопкой мыши и в появляющемся контекстном меню выбирайте опцию Symbol Label (Метка точки) (см. рис. 23.51). Пользуясь клавишей Shift, Вы можете также сразу выбрать интересующие Вас точки и за один шаг обозначить их меткой.


    Страны, представленные в этом файле, разделены на шесть регионов. Теперь при помощи диаграммы рассеяния мы хотим отобразить зависимость продолжительности жизни от потребляемого количества калорий для всех стран, обозначив при этом страны, относящиеся к разным регионам при помощи отличительных маркеров.

    •  Поместите дополнительно переменную region (регион) в поле Style (Стиль) области Legend Variables (Переменные легенды), но в этот раз не задавайте никакой переменной для обозначения наблюдений.

    Вы можете легко распознать страны бедного региона Африка (внизу слева) и богатого региона OECD (вверху справа).


    Теперь нанесём на диаграмму регрессионную прямую и соответвующий доверительный интервал.

    •  Для этого откройте регистрационную карту Fit (Приближение).

    •  В поле Method (Метод) активируйте опцию Regression (Регрессия) и в группе Prediction Lines (Линии прогноза) опцию Mean (Среднее значение). Оставьте 95%-й доверительный интервал, устанавливаемый по умолчанию.


    Рис. 23.51: Опция Symbol Label (Метка точки)



    Рис. 23.52: Диаграмма рассеяния с различными маркерами для обозначения точек


    На диаграмме теперь присутствуют регрессионная прямая и линии, обозначающие границы доверительного интервала. Слегка мешает описание приведенной на диаграмме линейной регрессии и соответствующей меры определенности.

    •  Щёлкните дважды на диаграмме и затем правой кнопкой мыши на этой вспомогательной информации. В контекстном меню выберите Hide Key (Спрятать подсказку).


    Рис. 23.53: Диаграмма рассеяния с регрессионной прямой и доверительным интервалом


    И в заключение, мы приведём пример построения диаграммы рассеяния в трёхмерном пространстве. В файле wasser.sav в виде переменных х, у и grw приведены данные измерения линии фунтовых вод города Штадталлендорф, находящегося на земле Гессен. Переменные х и у соответствуют координатам области размером 4x4 километра, в пределах которой проводились измерения уровня грунтовых вод (в метрах).

    •  Откройте файл wasser.sav.

    •  Посредством установки соответствующего выключателя в положение 3-D Coordinate (3-D координата) активируйте отображение поля оси г.

    •  Переменную х поместите в поле оси х, перемененную grw — в поле оси z, а у переменную — в поле оси у.

    •  Откройте регистрационную карту Fit (Приближение) и в поле Method (Метод) активируйте опцию Smoother (Сглаживание).

    •  В регистрационной карте Titles... (Заголовки) укажите название диаграммы.

    В окне просмотра будет показана диаграмма изображённая на рисунке 23.54.


    Для трёхмерного режима существует возможность плавного вращения диаграммы. Благодаря такому вращению сглаженную поверхность можно оценить из разных точек просмотра.

    •  Дважды щёлкните на диаграмме. Рядом с редактором диаграмм появится панель с двумя вращающимися колёсами, при помощи которых диаграмму можно вращать в двух направлениях.

    Пример возможного вида диаграммы, полученной с помощью такого изменения точки просмотра, представлен на рисунке 23.55.



    Рис. 23.54: Трёхмерная диаграмма рассеяния со сглаживанием



    Рис. 23.55: Повёрнутая трёхмерная диаграмма рассеяния


    С этой позиции диаграмма просматривается лучше, чем в предыдущем варианте.

    49.gif

    Изображение: 

    50.gif

    Изображение: 

    51.gif

    Изображение: 

    52.gif

    Изображение: 

    53.gif

    Изображение: 

    54.gif

    Изображение: 

    55.gif

    Изображение: 

    23.9 Интерактивные режимы работы с графиками

    23.9 Интерактивные режимы работы с графиками


    К построению интерактивных графиков можно подойти и с принципиально другой стороны. Мы покажем Вам этот отличительно другой принцип действий на примере и предоставим Вам возможность самостоятельно решать, нравится он вам или нет.


    Построим простую столбчатую диаграмму для переменной pczeit (время суток) из файла pcalltag.sav (см. рис. 23.6).

    •  Откройте файл pcalltag.sav.

    •  Перейдите в окно просмотра и выберите в меню Insert (Вставить) Interactive 2-D Graph (Интерактивный 2-D график)

    Точно также Вы можете выбрать и вставку 3-D графика. Будет активировано пустое поле для графика, окружённое слева и сверху панелями инструментов. Значение кнопок, имеющихся в этом окне, Вы сможете узнать, если пройдётесь по ним курсором.

    •  Выберите в меню Insert (Вставить) Summary (Результат) Ваr (Столбцы) и затем Edit (Правка) Assign Variables (Присвоить переменные)

    Откроется диалоговое окно Assign Graph Variables (Присвоение переменных для графика).



    Рис. 23.56: Диалоговое окно Assign Graph Variables (Присвоение переменных для графика)


    Переместите переменную pczeit (время суток) в поле оси х, а системную переменную Spct (процент) в поле оси у. В окне просмотра появится столбчатая диаграмма с соответствующими переменными. Таким же образом Вы можете построить, а затем откорректировать все диаграммы, рассмотренные в разделах с 23.1 по 23.8.

    56.gif

    Изображение: 

    Глава 24. Модуль Tables

    Глава 24. Модуль Tables

    1. Модуль Tables


    Модуль Tables


    Модуль Tables служит для создания таблиц, готовых к презентации. По сравнению с режимом построения частотных таблиц и таблиц сопряженности, а также таблиц средних значений, в этом модуле пользователю предоставляются более широкие возможности. После вызова меню Analyze (Анализ) Custom Tables (Настраиваемые таблицы) На выбор Вам будут предложены четыре вспомогательных меню:

    •  основные таблицы,

    •  общие таблицы,

    •  таблицы множественных ответов,

    •  частотные таблицы.

    При помощи вспомогательного меню Basic Tables (Основные таблицы) можно создавать таблицы с простой компоновкой. Вспомогательное меню General Tables (Таблицы общего назначения) служит для организации вывода сложных таблиц; вспомогательное меню таблиц множественных ответов предназначено для обработки множественных ответов. Вспомогательное меню Tables of Frequencies (Таблицы частот) следует выбирать тогда, когда существуют одинаковые варианты ответов для большого количества вопросов, находящихся в анкете. В следующих разделах мы вкратце рассмотрим возможности, предлагаемые в этих четырёх вспомогательных меню для организации вывода информации в удобном для презентации виде.

    24.1 Обрабатываемая анкета


    24.1 Обрабатываемая анкета


    Особенности модуля Tables изучим на примере исследования мнения членов профсоюзов в отношении организации мероприятий, проводимых 1-го Мая. Исследование проводилось в округе Марбург-Биденкопф. Из общей совокупности членов (примерно 27.000) всех профсоюзов, действующих в округе Марбург-Биденкопф, для исследования была произведена случайная выборка из членских карточек отдельных профсоюзных организаций (был взят каждый 56-й адрес членов различных профсоюзов). Таким образом, в общей сложности было отобрано 474 человека. Вернулась 271 заполненная анкета, что соответствует 57.2 % от общего количества.


    Рассмотрим выбранную нами часть довольно обширной анкеты:


    Институт политологии


    Университет Марбург


    Проект 1-е Мая


    Анкета


    v1 Как Вы проводите выходные дни?


    Просмотр телепередач


    []


    Общение с друзьями


    []


    Приглашаю к себе гостей


    []


    Хобби


    []


    Общество по увлечениям


    []


    Семейные заботы


    []


    Слушаю радио/читаю


    []


    Кино/концерты/театр


    []


    То же, что и всегда/то одно то другое


    []


    Выбираюсь на природу/путешествую


    []


    Необходимые дела (дом, квартира, сад)


    []


    Помощь соседям


    []


    Спорт


    []


    Другое <то, чего нет в списке> 


    v2 Пол


    Мужской


    []


    Женский


    []


    v3 Являетесь ли Вы активным членом какого-либо общества?


    Спортивное общество (если да: 1)


    []


    Общество любителей животных


    (голуби/дрессировка собак/верховая езда) (если да: 1)


    []


    Свободное время (культурная направленность) (и т.д.) Другое <указать> 


    []


    v4 Если бы Вы могли выбирать, какое из следуюших предложений по проведению 1*го Мая понравилось бы Вам больше всего? <максимально две позиции>


    Политические выступления


    []


    Шествия


    []


    Финал розыгрыша кубка


    []


    Музыкальные мероприятия/ярмарки


    []


    Просмотр игр высшей лиги по телевизору


    []


    Демонстрации


    []


    Исполнение рабочих обязанностей


    []


    Путешествие/пикник


    []


    Семейный праздник


    []


    Другое: 


    v5 Сохраняется ли еще актуальность 1-го Мая, как АНЯ трудяшихся?


    Да (1)


    []


    нет (2)


    []


    не знаю (9)


    []


    v6 Можете ли вы припомнить, как в последние голы здесь, на месте, профсоюзами было организовано празднование 7-го Мая?


     


     


    Да (1)


    []


    нет (2)


    []


    не знаю (9)


    []


    v7 Если ля, какое мероприятие Вы можете припомнить?


    Собрание


    []


    Шествие


    []


    Демонстрация


    []


    Выступления


    []


    Митинг


    []


    Праздник пива


    []


    Праздничные гуляния


    []


    Музыкальные концерты


    []


    Информационные стенды


    []


    Детский праздник


    []


    Другое: <указать>


    v8 Принимали ли Вы когда-нибудь участие в первомайских мероприятиях?


    Да (1)


    [][]


    нет (2)


    []


    данные отсутствуют/не знаю (9)


    []


    v9 Если да, то в каком голу?


    <Год>


    19..


    []


    v10 Как часто в течение последних 70 лег? <пожалуйста, укажите количество>


    <всегда = 9>


    []


    v11 Что Вам понравилось? <максимально две позиции>


    Речи (1)


    []


    Встретил много коллег (2)


    []


    Интересная программа (3)


    []


    Не помню (4)


    []


    Другое: <указать> (5)


    []


    v12 Если Вы не принимали участие в первомайских мероприятиях, то почему?


    <максимально две позиции>


    Скучные политические выступления (1)


    []


    Слишком много агитации (2)


    []


    Слишком мало общения (3)


    []


    Слишком много речей (4)


    []


    Слишком много общения (5)


    []


    Чувствуется принудительность праздника (6)


    []


    Слишком много традиционных профсоюзных мероприятий (7)


    []


    Не могу вспомнить (8)


    []


    Не знаю/данные отсутствуют (9)


    []


    v13 Считаете ли Вы, что политически важно, чтобы мероприятия 1-го Мая, как дня трудящихся, организовывали именно профсоюзы и этот подход следует сохранить?


     


    Да (1)


    []


    нет (2)


    []


    не знаю (9)


    []


    v14 Согласны ли Вы с утверждением, что 1-е Мая главным образом является праздником / высокопоставленных чиновников?


    []


    Да (1)


    []


    нет (2)


    []


    не знаю (9)


    []


    v15 Чем, по Вашему мнению, преимущественно занимаются профсоюзы в наши дни?


    <максимально две позиции>


    Ведут переговоры о тарифах (1)


    []


    35-часовая рабочая неделя/сокращение рабочего времени (2)


    []


    Защищают права наёмных рабочих (3)


    []


    Скандалами (4)


    []


    Образовательной работой (5)


    []


    Производственной работой/представляют интересы производства (6)


    []


    Не знаю/данные отсутствуют (7)


    []


    Другое: 


    v16 Чем, по Вашему мнению, в первую очередь должны заниматься профсоюзы в наши дни> <максимально две позиции>


    []


    Вести переговоры о тарифах (1)


    []


    Переходом на 35-часовую рабочую неделю/сокращением рабочего времени (2)


    []


    Защищать права наёмных рабочих (3)


    []


    Скандалами (4)


    []


    Образовательной работой (5)


    []


    Производственной работой (6)


    []


    Обеспечением сохранности рабочих мест (7)


    []


    Сокращением безработицы (8)


    []


    Образованием и защитой рабочих мест в восточной Германии (9)


    []


    Противостоять нарушениям социальной политики (10)


    []


    Заниматься организацией экологически безвредного производства (11)


    []


    Не знаю/данные отсутствуют (99)


    []


    v17 Членом какой профсоюзной организации Вы являетесь?


    Профсоюз строителей (BSE) (1)


    []


    Профсоюзная организация Deutsche Post (Немецкая почта) (2)


    []


    Профсоюз полицейской службы (GdP) (3)


    []


    Профсоюз сферы образования (GEW) (4)


    []


    Профсоюз железнодорожников Германии (GdED) (5)


    []


    Торговля Банки Страхование (HBV) (6)


    []


    Профсоюз горнодобывающей промышленности (IG Bergbau) (7)


    []


    Профсоюз химической промышленности (IG Chemie Papier Keramik) (8)


    []


    Профсоюз деревообрабатывающей промышленности (IG Holz) (9)


    []


    Профсоюз кожевенной промышленности (IG Leder) (10) 

    []

    Профсоюз средств массовой информации (IG Medien) (11) 

    []

    Профсоюз металлургической промышленности (IG Metall) (12)


    []


    Профсоюз пищевой промышленности (NGG) (13)


    []


    Профсоюз сферы услуг (OTV) (14)


    []


    Профсоюз лёгкой промышленности (ТВ) (15)


    []


    Другой:


    v18 С какого гола Вы являетесь членом профсоюза?


    <19..>


    []


    v19 Ваш гол рождения


    <19..>


    []


    v20 Какую должность Вы занимаете в данный момент?


    Студент(ка)/Ученик(ца) (1)


    []


    Рабочий(ая) (2)


    []


    Помощник/ученик на производстве (3)


    []


    Мастер (4)


    []


    Служащий(ая) (5)


    []


    Ведущий специалист (6)


    []


    Высокая государственная должность (7)


    []


    Пенсионер(ка) (8)


    []


    Другое (9)


    []


    Безработный(ая) (10)


    []


    v21 Примерно, в каких пределах находится Ваш ежемесячный доход?


    до 1.000 DM (1)


    []


    до 2.000 DM (2)


    []


    до 3.000 DM (3)


    []


    до 4.000 DM (4)


    []


    до 5.000 DM (5)


    []


    до 6.000 DM (6)


    []


    до 7.000 DM (7)


    []


    свыше 7.000 DM (8)


    []


    нет данных (9)


    []


    v22 Какая из партий в настояшее время наилучшим образом отражает Вашу позицию?


    CDU/CSU (1)


    []


    SPD (2)


    []


    FDP (3)


    []


    Buendnis 90/Die Gruenen (Союз 90/Зепёные) (4)


    []


    Republikaner (Республиканцы) (5)


    []


    PDS/Linke Liste (Левые) (6)


    []


    Другая (7)


    []


    Ни одна из партий (8)


    []


    v23 Известно ли Вам когда и при каких обстоятельствах 1-е Мая стал законным выходным днем


     


    Примерно в 1900 (1)


    []


    Введён благодаря социалистическому интернационалу (2)


    []


    После 1-ой Мировой войны (3)


    []


    Примерно в 1919 (4)


    []


    Введён благодаря рабочим (5)


    []


    Учреждён нацистами/Гитлером (6)


    []


    В результате распоряжения нацистов/Гитлера (7)


    []


    Самый трагичный день для профсоюзов (8)


    []


    До 1900 (9)


    []


    Около 1933 (10)


    []


    После 2-ой Мировой войны (11)


    []


    Данные отсутствуют (99)


    []


    Для тех, кто не желает давать ответ на тот или иной вопрос, в некоторых вопросах анкеты, как правило, присутствует один из специальных вариантов ответов данные отсутствуют, не знаю или не знаю/данные отсутствуют. Этим ответам соответствует кодировка 9 или последовательность цифр 99. Несмотря на это, было очень много анкет, на которых и этот вариант ответа не был отмечен, поэтому остаётся неясно, отказался ли респондент отвечать или просто забыл. Во всех таких неясных случаях при вводе данных в файл для соответствующего вопроса проставлялась цифра 0. Следовательно, кодировка 0 означает отсутствующее значение; ему присваивалась метка "Данные отсутствуют". Количество отсутствующих данных уже учтено в таблицах, рассматриваемых в этой главе; в качестве альтернативы кодировку 0 Вы можете трактовать как отсутствующее значение.


    Результаты опроса находятся в файле mai.sav.

    •  Откройте сначала в редакторе данных файл mai.sav.

    24.2 Основные таблицы


    24.2 Основные таблицы


    Один из вопросов анкеты относительно праздника 1-го Мая звучал следующим образом: Сохраняется ли ещё актуальность 1-го Мая, как дня трудящихся? (v5). Сравним для начала вид стандартных частотных таблиц, которые рассматривались ранее, с видом таблиц, которые строятся при помощи модуля Tables.

    •  Выберите в меню Analyze (Анализ) Descriptive Statistics (Дескриптивные статистики) Frequencies... (Частоты)

    •  Переместите переменную v5 в поле целевых переменных и подтвердите свой выбор нажатием ОК.

    Вы получите следующую таблицу:


    Ist der 1.Mai als TdA noch zeitgemaess?


     (Сохраняется ли ещё актуальность 1-го Мая, как дня трудящихся)


    Frequericy (Частота)


    Percent (Процент)


    Valid Percent (Действи-тельный процент)


    Cumu-lative Percent (Сово-купный процент)


    Valid (Действи-тельные значения)


    fehlende Angabe (Данные отсут-ствуют)


    39


    14,4


    14,4


    14,4


    Ja (Да)


    152


    56,8


    56,8


    71,2


    Nein (Нет)


    59


    21,8


    21,8


    93,0


    Weiss nicht (He знаю)


    19


    7,0


    7,0


    100,0


    Total (Сумма)


    271


    100,0


    100,0


    Теперь выведите распределение частот переменной v5 при помощи модуля Tables.

    •  Выберите в меню следующие опции Analyze (Анализ) Custom Tables (Настраиваемые таблицы) Basic Tables... (Основные таблицы) Откроется диалоговое окно изображённое на рисунке 24.1.

    •  Перенесите переменную v5 из списка исходных переменных в список строчных переменных (Subgroups/Down) и подтвердите установки нажатием ОК.

    Вы получите следующие результаты:


    1st der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    fehlende Anqabe (Данные отсутствуют)


    39


    Ja (Да)


    154


    Nein (Нет)


    59


    Weiss nicht (He знаю)


    19


    Модуль Tables отображает распределение частот в табличной форме. В соответствии с установками программы выводятся только абсолютные значения. О том, как можно дополнительно организовать отображение процентных показателей, мы ещё расскажем. Таблица начинается заголовком 1st der I.Mai als TdA (Tag der Arbeit) noch zeitgemaess? (Сохраняется ли ещё актуальность 1-го Мая, как дня трудящихся?). Этот заголовок является меткой переменной v5. Если метки переменной не существует, то в этом месте указывается её имя. Значения переменной v5 отображаются в виде соответствующих названий: fehlende Angabe (Данные отсутству ют), Ja (Да), Nein (Нет) и Weiss nicht (He знаю). Результаты опроса показывают, что ещё довольно большое количество членов профсоюзов (154) находят День трудящихся актуальным, хотя, как известно, активность участия в мероприятиях 1-го Мая с каждым годом снижается.



    Рис. 24.1: Диалоговое окно Basic Tables (Основные таблицы)

    1.gif

    Изображение: 

    24.2.1 Применение нескольких строчных переменных


    24.2.1 Применение нескольких строчных переменных


    В Первомайском исследовании ставился так же вопрос о том, членом какого профсоюза является опрашиваемый (v17). Выведем дополнительно в окно просмотра результаты для переменной v!7.


     Выберите в меню следующие опции Analyze (Анализ) Custom Tables (Пользовательские таблицы) Basic Tables... (Основные таблицы)


     В диалоговом окне Basic Tables (Основные таблицы) поместите переменные v5 и v17 в список строчных переменных (Subgroups/Down).


     Активируйте щелчком опцию Each separately (stacked) (Каждая отдельно (с наложением)).


     Подтвердите свой выбор нажатием ОК. Вы получите следующие данные:


     


    I1st der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?


    fehlende Anqabe (Данные отсутствуют)


    39


    Ja (Да)


    154


    Nein (Нет)


    59


    Weiss nicht (He знаю)


    19


    Gewerkschaftsmitglied in (Член профсоюза):


    fehlende Angabe (Данные отсутствуют)


    6


    Профсоюз строителей (BSE)


    32


    Профсоюз Deutsche Post (Немецкая почта)


    13


    Профсоюз полицейской службы (GdP)


    6


    Профсоюз сферы образования (GEW)


    20


    Профсоюз железнодорожников Германии (GdED)


    11


    Торговля Банки Страхование (HBV)


    19


    Профсоюз химической промышленности (IG Chemie Papier Keramik)


    22


    Профсоюз деревообрабатывающей промышленности (IG Holz)


    1


    Профсоюз работников средств массовой информации (IG Medien)


    11


    Профсоюз металлургической промышленности (IG Metall)


    73


    Профсоюз пищевой промышленности (NGG)


    1


    Профсоюз сферы услуг (? TV)


    52


    Профсоюз лёгкой промышленности


    1


    Профсоюз Сад Земля Лес (GGLF)


    3


    По виду таблицы Вы можете заметить, что обе переменные внутри неё представлены отдельно друг от друга. В таких случаях говорят также и о штабельном представлении. По очереди выводятся стеки v5 и v!7. Если данные двух переменных выводятся в штабельной форме (с наложением), то две отдельные таблицы будут как бы склеены. При этом первая таблица (соответствующая v5) содержит уже знакомые нам данные.

    24.2.2 Добавление второго измерения (столбцовые переменные)


    24.2.2 Добавление второго измерения (столбцовые переменные)


    До этого мы создавали только одномерные таблицы. Одномерная таблица отражает только основную информацию, и не даёт никакой информации, к примеру о том. ответили ли члены Профсоюза сферы образования (GEW) на вопрос, сохраняет ли ещё 1-е Мая актуальность, иначе, нежели члены Профсоюза металлургов (IG Metall). Для получения такой информации мы должны добавить к таблице ещё одно измерение. Для этого поступите следующим образом:

    •  В диалоговом окне Basic Tables (Основные таблицы) поместите переменную v17 в список строчных переменных (Subgroups/Down), а переменную v5 — в список столбцовых переменных (Across).

    Таблица, в состав которой входит как строчная, так и столбцовая переменные, называется также перекрёстной таблицей. Перекрёстная таблица является двумерной. Рассмотрим вкратце физические измерения одной таблицы: первое физическое измерение определяется строками. Число строк соответствует длине таблицы. Второе физическое измерение определяется столбцами. Число столбцов соответствует ширине таблицы. Существует также и ещё одна размерность таблицы: слои. Слои таблицы определяют её глубину. Трёхмерную таблицу можно получить путём использования слойных переменных, называемых также табличными переменными. В диалоговом окне Basic Tables (Основные таблицы) они должны быть помещены в подгруппу Separate Tables (Отдельные таблицы). К рассмотрению этой возможности мы ещё вернёмся в следующем разделе.

    •  Для получения перекрёстной таблицы между переменными v17 и v5, подтвердите установки нажатием ОК. В окне просмотра появятся следующая информация:

     

    Ist der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    fehlende Angabe (Данные отсут-ствуют)


    Ja (Да)


    Nein (Нет)


    Weiss nicht (He знаю)


    Gewerkscha-ftsmitglied in (Член профсоюза):


    fehlende Angabe (Данные отсутствуют)


    5


    1


    Профсоюз строителей (BSE)


    2


    25


    3


    2


    Профсоюз Deutsche Post (Немецкая почта)


    1


    8


    2


    2


    Профсоюз полицейской службы (GdP)


    2


    4


    Профсоюз сферы образования (GEW)


    11


    5


    4


    Профсоюз железно-дорожников Германии (GdED)


    1


    7


    3


    Торговля Банки Страхование (HBV)


    1


    13


    5


    Профсоюз химической промышленности (IG Chemie Papier Keramik)


    14


    6


    2


    Профсоюз дерево-обрабатывающей промышленности (IG Holz)


    1


    Профсоюз работников средств массовой информации (IG Medien)


    2


    5


    4


    Профсоюз метелургической промыш-ленности (IG Metall)


    4


    44


    17


    8


    Профсоюз пищевой промышленности (NGG)


    1


    Профсоюз сферы услуг (? TV)


    10


    28


    9


    5


    Профсоюз лёгкой промышле-нности


    1


    Профсоюз Сад Земля Лес (GGLF)


    3


    Заголовком столбцов служит метка переменной v5 (Ist der 1.Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)). Возможные значения переменных образовывают соответствующие колонки (fehlende Angabe (Данные отсутствуют), Ja (Да), Nein (Нет) и Weiss nicht (He знаю)). Заголовком строк служит метка переменной v17 (Gewerkschaftsmitglied in (Член профсоюза)). Метки значений этой переменной образовывают соответствующие строки (Профсоюз строителей (BSE), Профсоюз Deutsche Post (Немецкая почта), Профсоюз полицейской службы (GdP) и т.д.). Из перекрёстной таблицы видно, что члены профсоюзов более интеллектуальных отраслей (GEW (Профсоюз сферы образования), IG-Medien (Профсоюз работников масс-медиа)) на вопрос, является ли ещё актуальным 1-е Мая, дают отрицательный ответ чаще, нежели члены профсоюзов классической индустрии, таких как Профсоюз металлургической промышленности (IG Metall) или Профсоюз сферы услуг (OTV). Бросается также в глаза тот факт, что ни один из членов молодого профсоюза работников полиции не считает 1-е Мая актуальным праздником. Конечно же, профсоюз полицейской службы играет во многих отношениях, особая роль.


    Рассмотрим ещё один пример двумерной таблицы. В исследовании отношения к празднованию 1-го Мая были также заданы вопросы относительно занимаемой должности (v20) и ежемесячного дохода (v20). Мы хотим при помощи двумерной (перекрёстной) таблицы получить информацию о том, существует ли взаимосвязь между занимаемой должностью и доходом. Для этого поступите следующим образом:

    •  В диалоговом окне Basic Tables (Основные таблицы) поместите переменную v20 в поле строчных переменных, а переменную v21 — в поле столбцовых переменных.

    •  Подтвердите установки нажатием ОК.

    Результаты опроса будут представлены в следующем виде:

     


    Nettoeinkommen (monatlich) (Чистыйдоход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    bis 2.000 DM (до 2.000 DM)


    bis 3.000 DM (до 3.000 DM)


    bis 4.000 DM (до 4.000 DM)


    bis 5.000 DMfao 5.000 DM)


    bis 6.000 DM (до 6.000 DM)


    mehr als 7.000 DM (свыше 7.000 DM)


    keine-Angaben (Данные отсут-ствуют)


    Berufs-position (Зани-маемая долж-ность)


    Auszubil-dende(r)/ Lerting (Студент (ка)/ Ученик (ца))


    5


    3








    Arbei-terln (Рабо-чий(ая))


    3


    18


    23






    3


    Fachar-beiterln/ Geselle (Помощ-ник/ ученик на произ-водстве)



    7


    34


    4


    1




    1


    Meister (Мастер)




    3


    1






    Anges-tellte(r) (Служа- щий(ая))


    1


    19


    27


    10


    3


    1



    5


    Leitende(r) Anges-tellte(r) (Ведущий специ-алист)



    2


    1


    3




    1


    1


    Beamte(r) (Государс-венная руково-дящая должность)


    1


    3


    6


    11


    5


    3


    1


    1


    Rentn-erln/ Pensio- naerln (Пенсио-нер(ка))


    5


    20


    6


    3


    1




    7


    Hausfrau/ Hausmann (Домо-хозяйка(ин))


    4


    1



    1


    1




    2


    Eiwerb-sunfeehg (Нетрудо-способен (а))



    1








    Arteitslos (Безра-ботный(ая))


    1


    4


    1






    2


    Заголовком столбцов служит метка переменной v21 (Nettoeinkommen (monatlich) (Чистый доход (в месяц)). Значения переменной v21 образовывают соответствующие столбцы (bis1000 DM (до 1.000 DM), bis 2.000 DM (до 2.000 DM), ...). Заголовком строк является метка переменной v20 (Berufsposition (Занимаемая должность)). Метки значений этой переменной образовывают соответствующие строки (Auszubildende(r)/ Lerling (Студент(ка)/Ученик(ца)), Arbeiter(ln (Рабочий(ая)), ...). В перекрёстной таблице связь между занимаемой должностью и ежемесячным доходом заметна с первого взгляда. Так, например, ни один из учеников не зарабатывает больше 2.000 DM в месяц, рабочий не зарабатывает более 3.000 DM в месяц, а среди высокопоставленных государственных чиновников девять человек имеют месячный доход более 4.000 DM. Исходя из перекрёстной таблицы можно сделать вывод, что ежемесячный доход тем выше, чем выше занимаемая должность опрашиваемого. Конечно же, такая взаимосвязь, не является неожиданностью.

    24.2.3 Добавление третьего измерения (табличные переменные)


    24.2.3 Добавление третьего измерения (табличные переменные)


    В исследовании отношения к празднованию 1-го Мая был также задан вопрос, как часто за последние десять лет опрашиваемый присутствовал на мероприятиях, посвящённых 1-му Мая, (v10). Эту переменную мы хотим скрестить с переменной v5, содержащей ответы на вопрос Ist der 1.Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?). В качестве третьего измерения добавим переменную v2 (Geschlecht (Пол)).

    •  В диалоговом окне Basic Tables (Основные таблицы) перенесите переменную v10 в поле строчных переменных, переменную v5 в поле столбцовых переменных, а переменную v2 в поле табличных переменных (Separate Tables).

    Диалоговое окно Basic Tables (Основные таблицы) должно теперь выглядеть так, как изображено на рисунке 24.2.



    Рис. 24.2: Добавление третьего измерения

    •  Подтвердите установки нажатием ОК. В окне просмотра сначала будет показана только таблица для первого слоя (Geschlecht weiblich (Женщины)). После двойного щелчка на этой таблице при помощи техники сводных таблиц Вы получите возможность сделать видимыми таблицы и для других слоев. Для этого откройте соответствующее ниспадающее меню. Вы получите две следующие таблицы.

     

    Geschlecht weiblich (Женщины)


    Ist der 1.Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    fehlende Angabe (Данные отсутствуют)


    Ja (Да)


    Nein (Нет)


    Weiss nicht (He знаю)


    Wie oft in letzten 10 Jahren? (Как часто за последние десять лет?) (v8)


    0


    1


    19


    13


    6


    1


    5


    1


    2


    1


    3


    1


    2


    4


    3


    5


    1


    6


    1


    7


    2


    1


    8


    1


    всегда


    5

     

     

    Geschlecht maenlich (Мужчины)


    Ist der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    fehlende Angabe (Данные отсутствуют)


    Ja (Да)


    Nein (Нет)


    Weiss nicht (He знаю)


    Wie oft in letzten 10 Jahren? (Как часто за последние десять лет?) (v8)


    0


    83


    . 32


    12


    1


    4


    3


    1


    2


    6


    3


    6


    1


    4


    3


    5


    1


    6


    4


    3


    7


    1


    8


    3


    всегда


    5


    2


    Обе таблицы выглядят как самостоятельные таблицы; метка Geschlecht (Пол) и признаки слойной переменной v2 (женщины, мужчины) расположены с левой стороны. Трёхмерная таблица показывает, что как среди мужчин, так и среди женщин, частота высказывания мнения, что 1-е Мая уже является не актуальным, растёт со снижением посещаемости первомайских мероприятий. Люди, не желающие идти на первомайские мероприятия, как правило, полагают, что 1-е Мая не является более актуальным. Значительных отличий между полами не наблюдается.

    2.gif

    Изображение: 

    24.2.4 Вложенные данные


    24.2.4 Вложенные данные


    Если в табличных измерениях (строки, столбцы, слои) применяется более одной переменной, то переменные могут выводиться с наложением или с вложением. Сравним сначала оба метода при помощи одномерной таблицы. Нам необходимо получить частотные распределения переменных v2 (Пол) и v8 (Принимали ли Вы когда-нибудь участие в первомайских мероприятиях?). Рассмотрим сначала уже знакомую нам штабельную форму вывода информации.

    •  Для этого в диалоговом окне Basic Tables (Основные таблицы) переменные v2 и v8 поместите в список строчных переменных. Активируйте установку Each separately (stacked) (Каждая отдельно (с наложением)). Вы получите следующий вывод.


     


    Geschlecht (Пол)


    weiblich (женский)


    77


    maennlich (мужской)


    194


    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в Первомайских мероприятиях, организованных профсоюзами)


    fehlende Angabe (Данные отсутствуют)


    3


    Ja (Да)


    110


    Nein (Нет)


    156


    keine Angabe/weiss nicht (Данные отсутствуют/не знаю)


    2


    В качестве результата мы получили две таблицы, следующие по очереди: таблицу для переменной v2 и таблицу для переменной v8.

    •  Повторите вывод информации с активированием переключателя All combinations (nested) (Все комбинации (с вложением)).

    •  Подтвердите установки нажатием ОК. Результаты Вы получите в следующем виде:


    Geschlecht (Пол)


    weiblich (женский)


    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в Первомайских мероприятиях, организованных профсоюзами)


    fehlende Angabe (Данные отсутствуют)


    1


    Ja (Да)


    36


    Nein (Нет)


    40


    keine Angabe/weiss nicht (Данные отсутствуют/не знаю)


    2


    maennlich (мужской)


    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в Первомайских мероприятиях, организованных профсоюзами)


    fehlende Anqabe (Данные отсутствуют)


    Ja (Да)


    74


    Nein (Нет)


    116


    keine Angabe/weiss nicht (Данные отсутствуют/не знаю)


    2


    Если переменные вложены друг в друга, как в рассматриваемом примере, то между ними существуют отношения главенства и подчинённости. Перечисление состава меток значений подчинённых переменных (в нашем примере переменной v8), входят во все описания главенствующей переменной (в нашем примере переменной v2).


    Рассмотрим теперь оба метода: вложение и наложение для двумерной таблицы. Речь сначала пойдёт о двумерной таблице с двумя строчными переменными.

    •  Перенесите в список строчных переменных переменные v20 (Какую должность Вы занимаете в данный момент?) и v21 (Приблизительно в каких пределах находится Ваш ежемесячный доход?), а переменную v2 (Пол) в список столбцовых переменных. Рассмотрим сначала штабельный вариант.

    •  Активируйте для этого опцию Each separately (stacked) (Каждая отдельно (с наложением)). Вы получите результаты опроса в следующем виде:

     


    Geschlecht (Пол)


    weiblich (женский)


    maennlich (мужской)


    Berufs-position (Занимаемая должность)


    Auszubildende(r)/Lerlinq (Студент(кa)/ученик(цa))


    4


    4


    Arbeiterln (Рабочий(ая))


    12


    35


    Facharbeiterln/Geselle (Помощник/ученик на производстве)


    2


    45


    Meister (Мастер)



    4


    Angestellte(r) (Служащий(ая))


    35


    31


    Leitende(r) Anaestellte(r) (Ведущий специалист)


    1


    7


    Beamte(r) (Государственная руководящая должность)


    10


    21


    Rentnerln/Pensionaerln (Пенсионер(ка))


    6


    36


    Hausfrau/Hausmann Щомохозяйка(ин))


    3


    6


    Erwerbsunfaehig (Нетрудоспособен^))


    1



    Arbeitslos (Безработный(ая))


    3


    5


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DMJflo 1.000 DM)


    11


    9


    bis 2.000 DM (до 2.000 DM)


    33


    45


    bis 3.000 DM (до 3.000 DM)


    18


    83


    bis 4.000 DM (до 4.000 DM)


    7


    26


    bis 5.000 DM (до 5.000 DM)


    1


    10


    bis 6.000 DM (до 6.000 DM)


    1


    3


    mehr als 7.000 DM (свыше 7.000 DM)



    2


    keine Angaben (Данные отсутствуют)


    6


    16


    В качестве результата мы получили две вертикально совмещённых перекрёстных таблицы, первая таблица для переменных v20 и v2, а вторая для переменных v21 и v2.

     
     

    Geschlecht (Пол)


    weiblich (женский)


    maennlich (мужской)


    Berufs position (Зани-маемая должность)


    Auszubi ldende(r)/ Lerling (Студент(ка)/ Ученик(ца))


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    2


    3


    bis 2.000 DM (до 2.000 DM)


    2


    1


    Arbeiterln (Рабо-чий(ая))


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    3



    bis 2.000 DM (до 2.000 DM)


    7


    11


    bis 3.000 DM (до 3.000 DM)


    2


    21


    keine Angaben (Данные отсутствуют)



    3


    Facharbe iterln/G eselle (Помощник/ учен ик на произво-дстве)


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 2.000 DM (до 2.000 DM)


    11


    6


    bis 3.000 DM (до 3.000 DM)



    33


    bis 4.000 DM (до 4.000 DM)



    4


    bis 5.000 DM (до 5.000 DM)



    1


    keine Angaben (Данные отсутствуют)



    1


    Meister (Мастер)


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 3.000 DM (до 3.000 DM)



    3


    bis 4.000 DM (до 4.000 DM)



    1


    Angestellte(r) (Служа-щий(ая))


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    1



    bis 2.000 DM (до 2.000 DM)


    15


    4


    bis 3.000 DM (до 3.000 DM)


    12


    15


    bis 4.000 DM (до 4.000 DM)


    4


    6


    bis 5.000 DM (до 5.000 DM)



    3


    bis 6.000 DM (до 6.000 DM)



    1


    keine Angaben (Данные отсутствуют)


    3


    2


    Leitende(r) Angestellte(r) (Ведущий специалист)


    Nettoein kommen (monatlich) (Чистый доход (в месяц))


    bis 2.000 DM (до 2.000 DM)


    1


    1


    bis 3.000 DM (до 3.000 DM)



    1


    bis 4.000 DM (до 4.000 DM)



    3


    mehr als 7.000 DM (свыше 7.000 DM)



    1


    keine Anqaben (Данные отсутствуют)



    1

    •  Теперь выберите опцию All combinations (nested) (Все комбинации (с вложением)). Вариант с вложением будет выглядеть следующим образом:

     

    Beamte(r) (Государственная руководящая должность)


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 1 .000 DM (до 1 .000 DM)


    1


    bis 2.000 DM (до 2.000 DMJ


    2


    1


    bis 3.000 DM (до 3.000 DM)


    2


    4


    bis 4.000 DM (до 4.000 DMJ


    3


    8


    bis 5.000 DM (до 5.000 DM)


    1


    4


    bis 6.000 DM (до 6.000 DM)


    1


    2


    mehr als 7.000 DM (свыше 7.000 DM)


    1


    keine Angaben (Данные отсутствуют)


    1


    Rentnerln/ Pensionaerln (Пенсионер(ка))


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    3


    2


    bis 2.000 DM (до 2.000 DM)


    3


    17


    bis 3.000 DM (до 3.000 DM)


    6


    bis 4.000 DM (до 4.000 DM)


    3


    bis 5.000 DM (до 5.000 DM)


    1


    keine Angaben (Данные отсутствуют)


    7


    Hausfrau/ Hausmann (Домохозяй-ка(ин))


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DMJ


    1


    3


    bis 2.000 DM (до 2.000 DM)


    1


    bis 4.000 DM (до 4.000 DM)


    1


    bis 5.000 DM (до 5.000 DM)


    1


    keine Anqaben (Данные отсутствуют)


    2


    Erwerbsunfaehig (Нетрудо-способен(а))


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 2.000 DM (до 2.000 DM)


    1


    Arbeitslos (Безработный(ая))


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    1


    bis 2.000 DM (до 2.000 DM)


    1


    3


    bis 3.000 DM (до 3.000 DM)


    1


    keine Angaben (Данные отсутствуют)


    1


    1


    Если переменные двумерной таблицы вложены одна в другую, то между ними существуют отношения главенства и подчинённости. Метки значений подчинённых переменных (в нашем примере: v21 — Nettoeinkommen (monatlich) (Чистый доход (в месяц))), выводятся для каждой комбинации меток значений переменных v20 и v2 (высокая государственная должность — женщины; высокая государственная должность — мужчины; пенсионер — женщины; пенсионер — мужчины и т.д.).


    Рассмотрим теперь ещё несколько вариантов представления данных нашего примера. Теперь речь пойдёт о двумерной таблице с двумя столбцовыми переменными. Сначала изучим штабельный вариант.

    •  Для этого переменную v20 поместите в поле строчных переменных, а переменные v21 и v2 в поле столбцовых переменных, и активируйте опцию Each separately (stacked) (Каждая отдельно (с наложением)). Результаты опроса будут выглядеть следующим образом (см. стр. 515):

     


    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    Geschlecht (Пол)


    bis 1.000 DM (до 1.000 DM)


    bis 2.000 DM (до 2.000 DM)


    bis 3.000 DM (до 3.000 DM)


    bis 4.000 DM (до 4.000 DM)


    bis 5.000 DM (до 5.000 DM)


    bis 6.000 DM (до 6.000 DM)


    mehr als 7.000 DM (свыше 7.000 DM)


    keine Angaben (Данные отсут ствуют)


    weib-lich (жен-ский)


    maen-nlich (муж-ской)


    Benjfs-position (Зани-маемая долж ность)


    Auszubi-ldende(r)/ Lerling (Студент (ка)/ Учени-к(ца))


    5


    3








    4


    4


    Arbe-iterln (Рабочий (ая))


    3


    18


    23






    3


    12


    35


    Fachar-beiterln/ Geselle (Помо-щник/ ученик на произ-водстве)



    7


    34


    4


    1




    1


    2


    45


    Meister (Мастер)




    3


    1







    4


    Anges-tellte(r) (Служа-щий (ая))


    1


    19


    27


    10


    3


    1



    5


    35


    31


    Leite-nde(r) Anges-tellte(r) (Ведущий специа-лист)



    2


    1


    3




    1


    1


    1


    7


    Beamte(r) (Государ-ственная руково-дящая долж-ность)


    1


    3


    6


    11


    5


    3


    1


    1


    10


    21


    Rentnerln/ Pensi-onaerln (Пенсио-нер(ка))


    5


    20


    6


    3


    1




    7


    6


    36


    Hau-sfrau/ Haus-mann (Домо-хозяйка(ин))


    4


    1



    1


    1




    2


    3


    6


    Erwerb-sunfaehig (Нетрудо-спосо-бен(а))



    1








    1



    Arbeitslos (Без-работный (ая))


    1


    4


    1






    2


    3


    5

     

     

    Nettoeinkommen (monatlich) (Чистый доход (в месяц))


    bis 1.000 DM (до 1.000 DM)


    bis 2.000 DM (до 2.000 DM)


    bis 3.000 DM (до 3.000 DM)


    bis 4.000 DM (до 4.000 DM)


    bis 5.000 DM (до 5.000 DM)


    bis 6.000 DM (до 6.000 DM)


    mehr als 7.000 DM (свыше 7.000 DM)


    keine Angaben (Данные отсут-ствуют)


    (Поп)


    (Пол)


    (Пол)


    (Пол)


    (Пол)


    (Пол)


    (Пол)


    (Пол)


    ж


    м


    ж


    м


    ж


    м


    ж


    м


    ж


    м


    ж


    м


    ж


    м


    м


    Beruf-sposi-tion (Зани-маемая долж-ность)


    Auszu-bildende (r)/ Lerling (Студент (ка)/ Ученик (ца))


    2


    3


    2


    1













    Arbeiterln (Рабочий (ая)


    3



    7


    11


    2


    21










    3


    Fachar-beiterln /Geselle (Помо-щник /ученик на произ-водстве)




    1


    6


    1


    33



    4



    1






    1


    Meister (Мастер)







    3



    1









    Anges-tellte(r) (Служащий (ая))


    1



    15


    4


    12


    15


    4


    6



    3



    1



    3


    2


    Leite-nde(r) Ange-stellte(r) (Ведущий специ-алист)




    1


    1



    1



    3






    1



    1


    Beamte(r) (Государ-ственная руково-дящая должность)


    1



    2


    1


    2


    4


    3


    8


    1


    4


    1


    2


    1



    1


    Rent-nerln/ Pensio -naerln (Пенси онер (ка))


    3


    2


    3


    17



    6



    3



    1






    7


    Haus-frau/ Haus-mann (Дом-охозяйка (ин))


    1


    3



    1





    1



    1





    2



    Erwe-rbsunfa-ehig (Нетрудо-спос-обен)




    1














    Arbe-itslos (Безра-ботный))



    1


    1


    3


    1










    1


    1

    •  Если теперь Вы измените соответствующую установку на All combinations (nested) (Все комбинации (с вложением)), то данные будут представлены как показано на стр. 516.

    В данном случае выводится перекрёстная таблица переменных v20 и v21. Переменная v2 является подчинённой. Метки значений переменной v2 (weiblich (женский), maennlich (мужской)) указываются для каждой комбинации переменных v20 и v21.


    В целях экономии места мы откажемся от рассмотрения примеров трёхмерных таблиц. Если у Вас есть желание, то используя файл mai.sav, Вы можете поупражняться самостоятельно.


    Зависимые и независимые переменные


    Какие переменные использовать в качестве строчных, а какие в качестве столбцовых. Вы должны решать самостоятельно. Жёстких правил для этого не существует. Обычно независимую переменную используют в качестве столбцовой, а зависимую в качестве строчной переменной. Если же вы используете вложение при отображении данных, то зависимую переменную, как правило, следует располагать под независимыми.

    24.2.5 Процентные показатели


    24.2.5 Процентные показатели


    Как вы наверняка заметили, в простых таблицах обычно приводятся только абсолютные показатели. Но в связи с тем, что зачастую бывает проще сравнивать данные, представленные в процентной форме, рассмотрим теперь возможность отображения процентных показателей.


    Процентные показатели по столбцам


    Представим сначала в процентной форме ответы на вопрос, является ли ещё 1-е Мая, как день трудящихся, актуальным праздником.

    •  В диалоговом окне Basic Tables (Основные таблицы) переменную v5 перенесите в список строчных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики). Откроется диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики), изображённое на рисунке 24.3.

    •  При помощи переключателя Add (Добавить) перенесите опции Count (Количество) и Col % (Столбцовый %) из списка Statistics (Статистики) в список Cell Statistics (Статистики в ячейках).

    •  Подтвердите установки нажатием Continue (Далее) и затем на ОК. Вы получите результаты опроса в следующем виде:


    Рис. 24.3: Диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики)


    Count (Количество)


    Col % (Столбцовый %)


    1st der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    fehlende Angabe (Данные отсутствуют)


    39


    14,4%


    Ja (Да)


    154


    56,8%


    Nein (Нет)


    59


    21,8%


    Weiss nicht (He знаю)


    19


    7,0%


    В данной таблице приведены как абсолютные значения (Count (Количество)), так и процентные показатели, соответствующие числу допустимых значений (Col % (Столбцовый %)). Из результатов ясно видно, что, что 58 % опрошенных членов профсоюзов находят 1-е Мая актуальным, 21,8 % полагают, что День трудящихся уже отжил своё, а для 7 % вопрос оказался неразрешимым.


    Приведём ещё один пример: мы хотим проверить, связан ли ответ на вопрос о том что, организация первомайских мероприятий профсоюзами является политически важным аспектом, который следует сохранить (v!3), с партийной ориентацией опрошенных (v22).

    •  В диалоговом окне Basic Tables (Основные таблицы) переменную v!3 перенесите в список строчных переменных, а переменную v22 в список столбцовых переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках). Данные будут представлены в следующем виде (см. след, стр.):

    Среди членов профсоюзов, отдающих свое предпочтение партиям CDU/CSU, 22,2 % полагают, что организация празднования 1-го Мая профсоюзами не важна с политической точки зрения, среди SPD-ориентированных членов профсоюзов эту позицию поддерживают только 4,4 %, среди приверженцев Союза 90/Зелёных (Buendbis 90/Die Gruenen) — 4,5 %, а среди сторонников республиканцев (Republikaner), данную точку зрения разделяют 22,2 %.


    Приведём ещё один пример: в данном случае должны быть отображены показатели членства в профсоюзных организациях (v!7), причём в порядке снижения частот.


     Перенесите переменную v17 в список строчных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках).

    •  В группе Sorting by Cell Count (Сортировка частотных показателей в ячейках) поставьте маркер возле опции Descending (По убыванию). Диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики) должно теперь выглядеть так, как на рисунке 24.4.


    Рис. 24.4: Диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики)


    Результаты опроса будут выглядеть следующим образом:


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Gewerkschaftsm itglied in (Член профсоюза):


    Профсоюз металлургической промышленности (IG Metall)


    73


    26,9%


    Профсоюз сферы услуг (? TV)


    52


    19,2%


    Профсоюз строителей (BSE)


    32


    11,8%


    Профсоюз химической промышленности (IG Chemie Papier Keramik)


    22


    8,1%


    Профсоюз сферы образования (GEW)


    20


    7,4%


    Торговля Банки Страхование (HBV)


    19


    7,0%


    Профсоюз Deutsche Post (Немецкая почта)


    13


    4,8%


    Профсоюз железнодорожников Германии (GdED)


    11


    4,1%


    Профсоюз работников средств массовой информации (IG Medien)


    11


    4,1%


    fehlende Anqabe (Данные отсутствуют)


    6


    2,2%


    Профсоюз полицейской службы (GdP)


    6


    2,2%


    Профсоюз Сад Земля Лес (GGLF)


    3


    1,1%


    Профсоюз деревообрабатывающей промышленности (IG Holz)


    1


    ,4%


    Профсоюз пищевой промышленности (NGG)


    1


    ,4%


    Профсоюз лёгкой промышленности


    1


    .4%


    29 % опрошенных являются членами профсоюза металлургической промышленности (IG Metall), 19,2 % членами профсоюза сферы услуг (OTV), 11,8 % членами профсоюза профсоюз строителей (BSE), 8,1 % членами профсоюза химической промышленности (IG Chemie Papier Keramik), 7,4 % входят в GEW, и 7,0 % в профсоюз Торговля—Банки—Страхование (HBV). От 4 до 5 % являются членами профсоюза почтовой службы (DPG) (4,8 %), профсоюза железнодорожников Германии (GdED) (4,1 %) и профсоюза работников средств массовой информации (IG Medien) (4,1 %). И завершают список более мелкие профсоюзы, такие как профсоюз полицейской службы (GdP) (2,2 %), профсоюз Сад—Земля—Лес (GGLF) (1,1 %), профсоюз деревообрабатывающей промышленности (IG Holz) (0,4 %), профсоюз пищевой промышленности (NGG) (0,4 %) и профсоюз лёгкой промышленности (0,4 %).


    Теперь, чтобы получить информацию о зависимости социального положения опрашиваемых от их пола, представим в перекрёстной таблице переменные v2 (Пол) v20 (Социальное положение).

    •  Перенесите переменную v20 в список строчных переменных, а переменную v2 в список табличных переменных.

    •  Затем щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках).

    •  В группе Sorting by Cell Count (Сортировка частотных показателей) поставьте маркер возле опции Descending (По убыванию).

    •  Подтвердите нажатием Continue (Далее) и затем ОК. В окне просмотра Вы увидите следующий вывод, причём вторая таблица станет видимой только после двойного щелчка по первой таблице и активирования в ниспадающем меню.


    Geschlecht maenlich (Мужчины)


    Count (Коли-чество)


    Col % (Столб-цовый % !


    Berufsposition (Занимаемая должность)


    Auszubildende(r)/Lerlinq (Студент(ка)/Ученик(ца))


    31


    16,0%


    Arbeiterln (Рабочий(ая))


    35


    18,0%


    Facharbeiterln/Geselle (Помощник/ученик на производстве)


    45


    23,2%


    Meister (Мастер)


    36


    18,6%


    Angestellte(r) (Служащий(ая))


    21


    10,8%


    Leitende(r) Angestellte(r) (Ведущий специалист)


    6


    3,1%


    Beamte(r) (Государственная руководящая должность)


    4


    2,1%


    Rentnerln/Pensionaerln (Пенсионер(ка))


    7


    3,6%


    Hausfrau/Hausmann (Домохозяйка(ин))


    5


    2,6%


    Erwerbsunfaehig (Нетрудоспособен(а))


    4


    2,1%


    Arbeitslos (Безработный(ая))

     


    Geschlecht weiblich (Женщины)


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Berufsposition (Занимаемая должность)


    Auszubildende(r)/Lerlinq (Студент(ка)/Ученик(ца))


    35


    45,5%


    Arbeiterln (Рабочий(ая))


    12


    15,6%


    Facharbeiterln/Geselle (Помощник/ученик на производстве)


    2


    2,6%


    Meister (Мастер)


    6


    7,8%


    Angestellte(r) (Служащий(ая))


    10


    13,0%


    Leitende(r) Angestellte(r) (Ведущий специалист)


    3


    3,9%


    Beamte(r) (Государственная руководящая должность)


    4


    5,2%


    Rentnerln/Pensionaerln (Пенсионер(ка))


    1


    1,3%


    Hausfrau/Hausmann (Домохозяйка(ин))


    3


    3,9%


    Erwerbsunfaehig (Нетрудоспособен(а))


    Arbeitslos (Безработный(ая))


    1


    1,3%


    Метка переменной v2 (Geschlecht (Пол)) и её признаки (maenlich (мужской), weiblich (женский)) расположены в левом верхнем углу. Поскольку переменная v2 была применена в качестве переменной слоев, то мы получили столько отдельных таблиц, сколько значений у этой переменной, т.е. две. По результатам, отображаемым в таблицах, видно, что 45,5 % опрошенных женщин занимают должности служащих, в то время как служащими работают только 16 % мужчин. Такой высокий показатель должностей служащих среди женщин можно объяснить тем, что, во-первых, на этих должностях выполняется в основном офисная работа, а во-вторых, Марбург как университетский город (в городе расположен университет им. Филипса) является самым крупным работодателем в округе. Женщины оказались немного впереди и в отношении государственных руководящих должностей. В промышленном секторе в предложении и спросе на профессиональные должности явно заметно другое соотношение полов. В то время, как только одна женщина (1,3 %) занята на должности ведущего специалиста, среди мужчин такую должность занимают 7 человек (3,6 %). Ни одна женщина не занимает должности мастера, и только 25,6 % женщин работают как помощники, в то время как среди мужчин это уже 23,2 %. Из 80 мужчин, занятых на рабочих должностях (Arbeiter (Рабочий) и Facharbeiter/Geselle (Помощник/ученик на производстве)), 45 человек, т.е. больше половины, заняты на должности профессионального помощника, а из 14 женщин, занятых на рабочих должностях (Arbeiterln


    (Рабочая) и Facharbeiterln/Geselle (Помощница/ученик на производстве)) это только 2 человека.


    Строчные проценты


    Создадим перекрёстную таблицу для переменных v!7 (Gewerkschaftsmitglied in (Член профсоюза)) и v2 (Geschlecht (Пол)), чтобы посмотреть какие из профсоюзных организаций привлекают женщин, а какие мужчин.

    •  Перенесите переменную v!7 в список строчных переменных, а переменную v2 — в список табличных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество), Row % (Строчный %) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках).

    •  В группе Sorting by Cell Count (Сортировка частотных показателей) поставьте маркер возле опции Descending (По убыванию). Вы получите следующую таблицу:

     


    Geschlecht (Пол)


    maennlich (мужской)


    weiblich (женский)


    Count (Коли-чество)


    Col % (Стол-цовый %)


    Row % (Стро-чный %)


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Row % (Стро-чный %)


    Gewerksch aftsmitglied in (Член профсоюза):


    Профсоюз металлургической промышленности (IG Metall)


    63


    32,5%


    86,3%


    10


    13,0%


    13,7%


    Профсоюз сферы услуг (OTV)


    26


    18,6%


    69,2%


    16


    20,8%


    30,8%


    Профсоюз строителей (BSE)


    29


    14,9%


    90,6%


    3


    3,9%


    9,4%


    Профсоюз химической промышленности (IG Chemie Papier Keramik)


    13


    6,7%


    59,1%


    9


    11,7%


    40,9%


    Профсоюз сферы образования (GEW)


    13


    6,7%


    65,0%


    7


    9,1%


    35,0%


    Торговля Банки Страхование (HBV)


    5


    2,6%


    26,3%


    14


    18,2%


    73,7%


    Профсоюз Deutsche Post (Немецкая почта)


    7


    3,6%


    53,8%


    6


    7,8%


    46,2%


    Профсоюз железнодорожников Германии (GdED)


    9


    4,6%


    81,8%


    2


    2,6%


    18,2%


    Профсоюз работников средств массовой информации (IG Medien)


    7


    3,6%


    63,6%


    4


    5,2%


    36,4%


    fehlende Angabe (Данные отсутствуют)


    3


    1 ,5%


    50,0%


    3


    3,9%


    50,0%


    Профсоюз полицейской службы (GdP)


    4


    2,1%


    66,7%


    2


    2,6%


    33,0%


    Профсоюз Сад Земля Лес


    (GGLF)


    3


    1 ,5%


    100,0%





    Профсоюз деревообрабатывающей промышленности (IG Holz)


    1


    ,5%


    100,0%


    1


    1,3%


    100,0%


    Профсоюз пищевой промышленности (NGG)








    Профсоюз лёгкой промышленности


    1


    ,5%


    100,0%





    Обратим сначала внимание на столбцовые проценты: среди членов профсоюзов мужского пола 32,5 % являются членами профсоюза металлургической промышленности (1G Metall), 18,6 % — профсоюза сферы услуг (OTV) и т.д. Среди всех членов профсоюзов женского пола, 13,7 % состоят в профсоюзе металлургической промышленности (IG Metall), 30,8 % — в профсоюзе сферы услуг (OTV) и т.д. Рассмотрим теперь строчные проценты: 86,3 % членов профсоюза металлургической промышленности (IG Metall) составляют мужчины и только 13,7 % женщины; 73,3 % профсоюза "Торговля—Банки—Страхование" (HBV) составляют женщины и только 26,3 % мужчины и т.д. Таким образом, профсоюз металлургической промышленности (IG Metall) привлекает в свои ряды в основном мужчин, а профсоюз "Торговля—Банки—Страхование" (HBV) — женщин.


    Послойные проценты


    Мы хотим проверить, существуют ли различия между полами (v2) в отношении ответа на вопрос Принимали ли Вы когда-нибудь участие в Первомайских мероприятиях? (v8).

    •  Перенесите переменную v8 в список строчных переменных, а переменную v2 в список табличных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики).

    •  Перенесите в список Cell Statistics (Статистики в ячейках) опции Count (Количество) и Layer % (Послойный %). В группе Sorting by Cell Count (Сортировка частотных показателей) активируйте опцию None (Отсутствует). Подтвердите установки нажатием Continue (Далее).

    •  Затем щёлкните на переключателе Layout... (Компоновка). Откроется диалоговое окно Basic Tables: Layout (Основные таблицы: Компоновка), изображённое на рисунке 24.5.

    •  В группе Statistics Labels (Метки статистик) активируйте опцию Down the lef side (С левой стороны). Такой порядок организации приведёт к тому, что будет выведена только одна таблица, в которой оба слоя будут примыкать друг к другу с боковых сторон.

    •  Подтвердите свой выбор нажатием Continue (Далее) и затем ОК. В окне просмотра Вы увидите следующую таблицу:


    Рис. 24.5: Диалоговое окно Basic Tables: Layout (Основные таблицы: Компоновка)

     


    Geschlecht (Пол)


    weiblich (женский)


    maennlich (мужской)


    Count (Коли-чество)


    Layer % (Посло-йный %)


    Count (Коли-чество)


    Layer % (Посло-йный %)


    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в Первомайских мероприятиях, организованных профсоюзами)


    fehlende Angabe (Данные отсутствуют)


    1


    1,3%


    2


    1,0%


    Ja (Да)


    36


    46,8%


    74


    38,1%


    Nein (Нет)


    40


    51,9%


    116


    59,8%


    Keine Angabe/weiss nicht (Данные отсутствуют/не знаю)




    2


    1,0%


    Сумма послойных процентных показателей одного слоя (weiblich (женский), maennlich (мужской)) равна 100 %. Рассмотрим результаты опроса: так, например, 46,8 % женщин уже хоть раз принимали участие в первомайских мероприятиях, а среди мужчин это делали только 38,1 %.


    Табличные проценты


    Проверим, существуют ли различия между полами (v2) в отношении ответа на вопрос v14 (Согласны ли Вы с утверждением, что 1-е Мая является праздником главным образом для высокопоставленных чиновников?).

    •  Перенесите переменную v!4 в список строчных переменных, а переменную v2 в список табличных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите в список Cell Statistics (Статистики в ячейках) опции Count (Количество), Layer % (Послойный %) и Table % (Табличный %).

    Вы получите следующие таблицы, причём вторая таблица появится только после двойного щелчка по первой таблице и активирования соответствующей позиции в ниспадающем меню.


    Geschlecht weiblich (Женщины)


    Count (Коли-чество)


    Layer % (Посло-йный %)


    Table % (Табли-чный %)


    1 . Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    fehlende Angabe (Данные отсутствуют)


    15


    19,5%


    5,5%


    Ja (Да)


    17


    22,1%


    6,3%


    Nein (Нет)


    37


    48,1%


    13,7%


    Weiss nicht (He знаю)


    8


    10,4%


    3,0%

     


    Geschlecht maenlich (Мужчины)


    Count (Коли-чество)


    Layer % (Посло-йный %)


    Table % (Табли-чный %)


    1 . Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    fehlende Angabe (Данные отсутствуют)


    25


    12,9%


    9,2%


    Ja (Да)


    42


    21 ,6%


    15,5%


    Nein (Нет)


    110


    56,7%


    40,6%


    Weiss nicht (He знаю)


    17


    8,8%


    6,3%


    Сумма всех показателей табличных процентов равна 100 %. Так, 56,7 % мужчин ответили на поставленный вопрос "нет" (Layer % (Послойный %)), а среди женщин такой же ответ дали 48,1 %. Мужчины, ответившие на вопрос отрицательно (нет), составляют 40,6 % всех опрошенных (см. колонку Table % (Табличный %)).

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    24.2.6 Суммарные значения


    24.2.6 Суммарные значения


    При помощи опции подсчета суммарных значений можно составить объединённые показатели некоторого количества ячеек. Разберем сначала следующий пример: партийные предпочтения опрашиваемых (v22) необходимо представить в табличной форме с сортировкой по убыванию и учётом общего количества опрашиваемых.

    •  Перенесите переменную v22 в список строчных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках).

    •  Активируйте опцию Descending (По убыванию) и подтвердите нажатием Continue (Далее).

    •  Щёлкните на выключателе Totals... (Суммы). Вы увидите диалоговое окно Basic Tables: Totals (Основные таблицы: Суммы), изображённое на рисунке 24.6.


    Рис. 24.6: Диалоговое окно Basic Tables: Totals (Основные таблицы: Суммы)


    Если активирована опция Totals over each group variable (Суммы для каждой групповой переменной), для каждой групповой переменной будут выводиться суммарные значения всех статистик активированных через выключатель Statistics... (Статистики); если активирована опция Table-margin totals (Суммарные показатели таблицы), то суммарные значения активированных статистик будут рассчитываться и для всей таблицы.

    •  Для нашего примера активируйте опцию Table-margin totals (Суммарные показатели таблицы). В окне просмотра появится таблица с результатами опроса.


     


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Parteipraeferenz (Предпочитаемая партия)


    SPD


    91


    33,6%


    keine (Ни одна из партий)


    77


    28,4%


    fehlende Angabe (Данные отсутствуют)


    46


    17,0%


    Buendbis 90/Die Gruenen (Союз 90/Зелёные)


    22


    8,1%


    CDU/CSU


    18


    6,6%


    Republikaner (Республиканцы)


    9


    3,3%


    Andere (Другая)


    4


    1,5%


    FDP


    2


    ,7%


    PDS/Linke Liste (Левые)


    2


    ,7%


    Table-margin total (Суммарный показатель таблицы)


    271


    100,0%


    Результаты опроса показывают сильную поддержку профсоюзами немецкой социал-демократии. 33,6 % опрошенных полагают, что их интересы лучше всего выражает SPD и только 6,6 % такого мнения о CDU/CSU. Результирующие показатели приведены в строке Table-margin total (Суммарный табличный показатель). Всего был опрошен 271 человек (= 100 %}.


    На втором этапе представим партийные предпочтения (v22) отдельно для каждого пола (v2). Вывод данных должен происходить с сортировкой частот по убыванию. И организуем так же вывод суммарных показателей для групповых переменных.

    •  Перенесите переменную v22 в список строчных переменных, а переменную v2 — в список табличных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках). Активируйте опцию Descending (По убыванию). Подтвердите нажатием Continue (Далее).

    •  Щёлкните на выключателе Totals... (Суммы) и активируйте на этот раз опцию Totals over each group variable (Суммы для каждой групповой переменной). Опция Table-margin ratals (Суммарные показатели таблицы) должна быть деактивированна. Вы получите следующие таблицы, причём вторая и третья таблицы станут видимыми только после двойного щелчка на первой таблице и активирования соответствующей позиции в ниспадающем меню.


    Geschlecnt maenlich (Мужчины)


    Count (Коли-чество)


    Со! % (Столб-цовый %)


    Parteipraeferenz (Предпочитаемая партия)


    SPD


    73


    37,6%


    keine (Ни одна из партий)


    51


    26,3%


    fenlende Angabe (Данные отсутствуют)


    30


    15,5%


    Buendbis 90/Die Gruenen (Союз 90/Зепёные)


    13


    6,7%


    CDU/CSU


    16


    8,2%


    Republikaner (Республиканцы)


    7


    3,6%


    andere (Другая)


    2


    1,0%


    FDP


    2


    1,0%


    PDS/Linke Liste (Левые)


    Group Total (Суммарный показатель группы)


    194


    100,0%

     


    Geschlecht weiblich (Женщины)


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Parteipraeferenz (Предпочитаемая партия)


    SPD


    18


    23,4%


    keine (Ни одна из партий)


    26


    33,8%


    fenlende Angabe (Данные отсутствуют)


    16


    20,8%


    Buendbis 90/Die Gruenen (Союз 90/Зелёные)


    9


    1 1 ,7%


    CDU/CSU


    2


    2,6%


    Republikaner (Республиканцы)


    2


    2,6%


    andere (Другая)


    2,6%


    FDP


    PDS/Linke Liste (Левые)


    2


    2,6%


    Group Total (Суммарный показатель группы)


    77


    100,0%

     


    Group total (Суммарный показатель группы)


    Count (Коли-чество)


    Col % (Столб-цовый %)


    Parteipraeferenz (Предпочитаемая партия)


    SPD


    91


    33,6%


    keine (Ни одна из партий)


    77


    28,4%


    fehlende Angabe (Данные отсутствуют)


    46


    17,0%


    Buendbis 90/Die Gruenen (Союз 90/Зелёные)


    22


    8,1%


    CDU/CSU


    18


    6,6%


    Republikaner (Республиканцы)


    9


    3,3%


    andere (Другая)


    4


    1,5%


    FDP


    2


    ,7%


    PDS/Linke Liste (Левые)


    2


    ,7%


    Group Total (Суммарный показатель группы)


    271


    100,0%


    В окне просмотра приводятся три самостоятельные таблицы. Для групповой переменной в соответствующей строке с меткой Group Total (Суммарный показатель группы) указываются соответствующие суммарные значения.


    Из 194 мужчин 73 полагают, что их интересы лучше всего выражает SPD, это 37,6 %; среди 77 женщин сторонниками SPD чувствуют себя только 18 человек, что соответствует 23,4 %. Явно видно, что в процентном выражении значительно большее количество мужчин, чем женщин, ощущает, что их интересы представляет именно Социал-демократическая партия. Среди женщин же доля тех, кто в настоящее время не чувствует, что их интересы представляет хотя бы одна из партий, значительно выше, нежели среди мужчин (33,8 % против 26,3 %). Следует также отметить, что вообще довольно значительная доля опрошенных не ощущает, что их интересы представляет какая-либо из партий, это свидетельствует о неудовлетворённости работой партий.


    Суммарные показатели пакетированных переменных


    Рассмотрим на примере, как ведут себя суммарные показатели пакетированных или штабельных переменных.

    •  В диалоговом окне Basic Tables (Основные таблицы) перенесите переменные v2 (Geschlecht (Пол)) и v6 (Erinnerung an 1. Mai (Воспоминания о празднике 1-е Мая)) в список строчных переменных.

    •  Активируйте опцию Each separately (stacked) (Каждая отдельно (с наложением)).

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках). Подтвердите установки нажатием Continue (Далее).

    •  Щёлкните на выключателе Totals... (Суммы) и активируйте опцию Totals over each group variable (Суммы для каждой групповой переменной). Вы получите следующую таблицу:


    Count (Коли-чество)


    Col % (Стол-бцовый %)


    Geschlecht (Пол)


    weiblich (женский)


    77


    28,4%


    maennlich (мужской)


    194


    71 ,6%


    Group Total (Суммарный показатель группы)


    271


    100,0%


    Erinnerung an 1 . Mai -feier im Ort (Воспоминания о местных мероприятиях, посвящённых 1-му Мая)


    fehlende Angabe (Данные отсутствуют)


    48


    17,7%


    Ja (Да)


    67


    24,7%


    Nein (Нет)


    143


    52,8%


    Weiss nicht (He знаю)


    13


    4,8%


    Group Total (Суммарный показатель группы)


    271


    100,0%


    По таблице видно, что при наложении переменных каждая переменная рассматривается как группа. Сумма процентных показателей каждой из групп (v2 и v6) равна 100 % (Group Total (Суммарный показатель группы)).


    Суммарные показатели вложенных переменных


    Рассмотрим вышеприведенный пример с учётом вложения переменных.

    •  В диалоговом окне Basic Tables (Основные таблицы) активируйте опцию АН combinations (nested) (Все комбинации (с вложением)).

    •  В диалоговом окне Basic Tables: Totals (Основные таблицы: Суммы) активируйте дополнительно опцию Table-margin totals (Суммарные показатели таблицы). Вы получите следующую таблицу:


    Count (Коли-чество)


    Col % (Стол-бцовый %)


    Gesc-hlecht (Пол)


    Weib-lich (жен-ский)


    Erinnerung an 1 . Mai -feier im Ort (Воспоми-нания о местных меро-приятиях, посвящённых 1-му Мая)


    fehlende Angabe (Данные отсут-ствуют)


    18


    6,6


    Ja (Да)


    19


    7,0%


    Nein (Нет)


    33


    12,2%


    Weiss nicht (He знаю)


    7


    2,6%


    Group Total (Сум-марный показатель группы)


    77


    18,4%


    maen-nlich (муж-ской)


    Erinnerung an 1 . Mai -feier im Ort (Воспоми-нания о местных меро-приятиях, посвящённых 1-му Мая)


    fehlende Angabe (Данные отсут-ствуют)


    30


    11,1%


    Ja (Да)


    48


    17,7%


    Nein (Нет)


    110


    40,6%


    Weiss nicht (He знаю)


    6


    2,2%


    Group Total (Суммарный показатель группы)


    194


    71 ,6%


    Table-margin total (Сум-марный показатель таблицы)


    271


    100,0%


    Таблица показывает, что для вложенных переменных сумма процентных показателей значений подчинённых переменных — в нашем примере подчиненной является переменная v6 - равна 100 % (28,4 % + 71,6 % = 100 %).

    6.gif

    Изображение: 

    24.2.7 Средние значения и другие итоговые статистики


    24.2.7 Средние значения и другие итоговые статистики


    Организуем вывод итоговых статистик, таких как среднее значение и стандартное отклонение для переменных v)8 (С какого года Вы являетесь членом профсоюза? <19..>) и v!9 (Ваш год рождения? <19..>). Поскольку в опросе 1993 года относительно организации празднования 1-го Мая не были заданы вопросы: "Сколько лет вы уже являетесь членом профсоюза?" и "Сколько Вам лет?", мы сначала вычислим эти значения исходя их значений переменных v18 и v19. Для этого поступим следующим образом:

    •  Выберите в меню Transform (Трансформировать) Compute... (Вычислить)

    •  В качестве целевой переменной введите имя mitglied (членство).

    •  В поле редактирования Numeric Expression (Числовое выражение) наберите 93-vl8. Диалоговое окно Compute Variable (Вычисление переменной) должно выглядеть теперь так, как на рисунке 24.7.


    Рис. 24.7: Диалоговое окно Compute Variable (Вычисление переменной)

    •  Подтвердите установки нажатием ОК.

    Переменной mitglied (членство) теперь будет присвоено числовое значение, соответствующее продолжительности членства в профсоюзе. Вычислите теперь переменную alter (возраст).

    •  Повторно выберите в меню опцию Transform (Трансформировать) Compute... (Вычислить)

    •  В поле целевой переменной наберите имя alter (возраст). В поле редактирования Numeric Expression (Числовое выражение) введите 93-v19. Подтвердите установки нажатием ОК.

    Переменной alter (возраст) теперь будет присвоено числовое значение, соответствующее возрасту опрашиваемого. Организуем сначала вывод статистик для переменной alter (возраст).

    •  Выберите в меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) Basic Tables... (Основные таблицы)

    •  Переменную alter поместите в список Summaries (Итоги). Подтвердите нажатием ОК. В качестве простейшей итоговой таблицы вы получите следующую таблицу:


    alter (возраст)


    44,17


    Если Вы больше не будете требовать никаких дополнительных статистик, то по умолчанию будет выдаваться среднее значение обрабатываемой переменной. Средний возраст опрошенных составил 44,17 года. Теперь организуем вывод среднего значения переменной mitglied (членство).

    •  Выберите в меню опции Analyze (Анализ) Custom Tables (Пользовательские таблицы) Basic Tables... (Основные таблицы) Переменная age должна ещё находиться в поле Summaries (Итоги).

    •  В это же поле перенесите дополнительно переменную и подтвердите установки нажатием ОК. Вы получите следующую таблицу:


    alter (возраст)


    44,17


    mitglied (членство)


    18,42


    Если в списке Summaries (Итоги) находится несколько переменных, то они будут отображаться друг под другом, так как в вышеприведенной таблице. Среднее арифметическое переменной mitglied (членство) равно 18,42 годам. Организуем теперь дополнительно и другие итоговые статистики, такие как минимальное значение, максимальное значение и стандартное отклонение.

    •  Выберите в меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) Basic Tables... (Основные таблицы)

    В списке Summaries (Итоги) теперь должны стоять переменные alter (возраст) и mitglied (членство).

    •  Щёлкните на переключателе Statistics... (Статистики).

    •  Перенесите в поле Cell Statistics (Статистики в ячейках) статистики Mean (Среднее значение), Minimum (Минимум), Maximum (Максимум) и Std Deviation (Стандартное отклонение). Диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики) должно теперь выглядеть так, как на рисунке 24.8.

    •  Подтвердите нажатием Continue (Далее) и затем ОК. Вы получите следующую таблицу:


    Рис. 24.8: Диалоговое окно Basic Tables: Statistics (Основные таблицы: Статистики)


    Mean (Среднее значение)


    Minimum (Минимум)


    Maximum (Максимум)


    Std Deviation (Стандартное отклонение)


    alter (возраст)


    44,17


    18,00


    90,00


    14,42


    mitglied (членство)


    18,42


    1,00


    63,00


    13,00


    Если Вы организовываете вывод нескольких итоговых статистик, то выбранные статистики приводятся в соседствующих колонках.


    Подгруппы и итоговые статистики


    Организуем вывод итоговых показателей переменных alter (возраст) и mitglied (членство) отдельно для каждого пола. В поле Summaries (Итоги) диалогового окна Basic Tables (Основные таблицы) должны теперь стоять переменные alter (возраст) и mitglied (членство).

    •  Перенесите переменную v2 в список строчных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики).

    •  Из списка Cell Statistics (Статистики в ячейках) удалите все статистики кроме Mean (Среднее значение). Подтвердите свой выбор нажатием Continue (Далее) и затем ОК. В окне просмотра Вы увидите следующую таблицу:


    Geschlecht (Пол)


    weiblich (женский)


    alter (возраст)


    mitglied (членство)


    maennlich (мужской)


    alter (возраст)


    mitglied (членство)


    Средний возраст опрошенных женщин составляет 41,23 года, а средняя продолжительность членства в профсоюзных организациях 14,38 лет. Средний возраст мужчин равен 45,34 годам и мужчины являются членами профсоюзов в среднем 20,01 года. Стало быть, мужчины в среднем старше женщин и более длительный период являются членами профсоюзных организаций.

    7.gif

    Изображение: 

    8.gif

    Изображение: 

    24.2.8 Возможности форматирования


      24.2.8 Возможности форматирования


    Отдельно для мужчин и женщин проанализируем членство в отдельно взятых профсоюзных организациях и продемонстрируем возможности переключателей Format... (Формат) и Titles... (Заголовки).

    •  Для начала в диалоговом окне Basic Tables (Основные таблицы) щёлкните на кнопке Reset (Сброс).

    •  Переменную v17 (Членом какой профсоюзной организации Вы являетесь?) поместите в поле строчных переменных, а переменную v2 (Пол) в список столбцовых переменных.

    •  Щёлкните на переключателе Statistics... (Статистики) и перенесите опции Count (Количество) и Col % (Столбцовый %) в список Cell Statistics (Статистики в ячейках). Подтвердите свой выбор нажатием Continue Шалее).

    •  Щёлкните на переключателе Format... (Формат). Откроется диалоговое окно Basic Tables: Format (Основные таблицы: Формат), как на рисунке 24.9.


    Рис. 24.9: Диалоговое окно Basic Tables: Format (Основные таблицы: Формат)


    Те, кто работал с более ранними версиями программы, заметят, что диалоговое окно сильно уменьшилось в размерах. В нём остались только опции отображения пустых ячеек и отсутствующих данных. В прежних версиях можно было повлиять на вид рамок, ширину столбцов и поля.

    •  Оставьте предварительные установки, и покиньте диалоговое окно нажатием Continue (Далее).

    •  Щёлкните на выключателе Titles... (Заголовки). Откроется диалоговое окно Basic Tables: Titles (Основные таблицы: Заголовки).


    Рис. 24.10: Диалоговое окно Basic Tables: Titles (Основные таблицы: Заголовки)


    Здесь в полях Title (Заголовок), Caption (Примечание) и Corner (Угол) Вы можете набрать любой текст. Заголовок будет центрирован по таблице, а примечание с выравниванием по левому краю будет приведено под таблицей. Текст, указанный в поле Corner (Угол), появится в верхнем левом углу таблицы; однако авторы этого нововведения вряд ли смогут похвастаться его успешностью.

    •  В поле Title (Заголовок) наберите текст: "Членство в профсоюзе и пол", а в поле Caption (Примечание) Округ Марбург-Биденкопф.

    •  Подтвердите установки нажатием Continue (Далее) и затем ОК. В окне просмотра будет показана следующая таблица:

     


    Geschlecht (Пол)


    maennlich (мужской)


    weiblich (женский)


    Count (Коли-чество)


    Col % (Стол-бцовый %)


    Count (Коли-чество)


    Col % (Стол-бцовый %)


    Gewe-rkschaf tsmitglied in (Член проф-союза):


    fehlende Angabe (Данные отсутствуют)


    3


    3,9


    3


    1,5


    Профсоюз строителей (BSE)


    3


    3,9


    29


    14,9


    Профсоюз Deutsche Post (Немецкая почта)


    6


    7,8


    7


    3,6


    Профсоюз полицейской службы (GdP)


    2


    2,6


    4


    2,1


    Профсоюз сферы образования (GEW)


    7


    9,1


    13


    6,7


    Профсоюз железно-дорожников Германии (GdED)


    2


    2,6


    9


    4,6


    Торговля Банки Страхование (HBV)


    14


    18,2


    5


    2,6


    Профсоюз химической промышленности (IG Chemie Papier Keramik)


    9


    11,7


    13


    6,7


    Профсоюз дерево-обрабатывающей промышленности (IG Holz)


    4


    5,2


    1


    ,5


    Профсоюз работников средств массовой информации (IG Medien)


    10


    13,0


    7


    3,6


    Профсоюз металлургической промышленности (IG Metall)


    1


    1,3


    63


    32,5


    Профсоюз пищевой промышленности (NGG)


    16


    20,8


    36



    Профсоюз сферы услуг (? TV)




    1


    18,6


    Профсоюз лёгкой промышленности




    3


    ,5


    Профсоюз Сад Земля Лес


    (GGLF)





    1,5


    Kreis Marburg-Biedenkopf (Округ Марбург-Биденкопф)


    Меньше стало и диалоговое окно заголовков; в ранних версиях можно было указывать также и желаемое выравнивание текста (по левому краю, по центру, по правому краю).


    Судя по результатам опроса можно сказать, что почти треть опрошенных мужчин являются членами профсоюза металлургической промышленности (IG Metall). Большая часть опрошенных женщин входят в профсоюз сферы услуг (OTV) (20,8 %).

    9.gif

    Изображение: 

    10.gif

    Изображение: 

    24.3 Общие таблицы


    24.3 Общие таблицы


    Вспомогательное меню General Tables... (Общие таблицы) предоставляет разнообразные возможности для компоновки таблиц. Если, например, в одной таблице необходимо отобразить различные статистики для нескольких переменных, то для этого имеется специальная опция. Изучим сначала построение общей таблицы на простом примере.

    •  Выберите в меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) General Tables... (Общие таблицы)

    Откроется диалоговое окно General Tables (Общие таблицы), изображённое на рисунке 24.11.



    Рис. 24.11: Диалоговое окно General Tables (Общие таблицы)

    • Перенесите переменную v2 в список строчных переменных и подтвердите свой выбор нажатием ОК.


    Geschlechl (Пол)


    weiblich (женский)


    77


    maennlich (мужской)


    194


    Здесь, так же как и в случае с простыми таблицами, добавлением переменной столбцов можно получить двумерную таблицу, а добавлением третьей переменной для слоев можно организовать трёхмерную таблицу.


    Отличие этого вида таблиц от простых таблиц заключается в том, что здесь Вы можете задать различные ступени вложения. В то время как в простых таблицах для переменных таблицы Вы выбирали опцию stacked (с наложением) или nested (с вложением), в общих таблицах Вы можете выбрать необходимый режим отдельно для каждой переменной.

    11.gif

    Изображение: 

    24.3.1 Пакетированные и вложенные переменные


    24.3.1 Пакетированные и вложенные переменные


    Мы хотим проверить, зависит ли в отношение к актуальности 1-го Мая, как дня трудящихся, от участия в профсоюзных первомайских мероприятиях и от мнения, что 1-е Мая является праздником только для высокопоставленных функционеров. Проверка будет происходить с разделением по половому признаку. Поступите следующим образом:

    •  Перенесите переменные v2 и v5 в поле строчных переменных.

    •  Выделите переменную v5 и щёлкните на выключателе >Nest (Вложить).

    •  Перенесите переменные v8 и v!4 в поле столбцовых переменных. Диалоговое окно должно теперь выглядеть так, как на рисунке 24.12.


    Рис. 24.12: Диалоговое окно General Tables (Общие таблицы)


    Переменные v2 и v5 теперь будут вложены по строкам, а переменные v8 и v!4 будут пакетированы по столбцам.

    •  Подтвердите сделанные установки нажатием ОК. Вы получите следующую таблицу:

     
     

    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в первомайских мероприятиях, организованных профсоюзами)


    1 . Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    fehle-nde Angabe (Дан-ные отсут-ству-ют)


    Ja (Да)


    Nein (Нет)


    Weiss nicht (Не знаю)


    fehle-nde Angabe (Дан-ные отсу-тству-ют)


    Ja (Да)


    Nein (Нет)


    Weiss nicht (Не знаю)


    Geschl echt (Пол)


    we-iblich (жен-ский)


    Istder LMaials TdA noch zeitg-emaess? (Сох-раняет ли еще акту-альность 1-е Мая, как день трудя-щихся?)


    fehlende Angabe (Данные отсут-ствуют)



    10


    5



    14



    1



    Jaffla)



    20


    18



    1


    7


    26


    4


    Nein (Нет)


    1


    6


    11




    9


    7


    2


    Weiss nicht (Не знаю)




    6




    1


    3


    2


    maen-nlich (муж-ской)


    Istder LMaials TdA noch zeit-gemaess? (Сох-раняет ли еще акту-альность 1-е Мая, как день трудя-щихся?)


    fehlende Angabe (Данные отсут-ствуют)



    17


    7



    24





    Ja (Да)


    2


    42


    71


    1


    1


    20


    87


    8


    Nein (Нет)



    14


    27




    19


    19


    3


    Weiss nicht (Не знаю)



    1


    11


    1



    3


    4


    6


    Если Вы хотите отменить вложение переменной v5, выделите эту переменную и щёлкните на переключателе UnNest> (Без вложения).

    12.gif

    Изображение: 

    24.3.2 Статистики в ячейках


    24.3.2 Статистики в ячейках


    В отличие от простых таблиц, в общих таблицах вывод статистик в ячейках можно организовывать отдельно для каждой переменной.


    Для демонстрации этой возможности приведём следующий пример:

    •  Перенесите переменные v2 и v22 в поле строчных переменных.

    •  Выделите переменную v2 и щёлкните на выключателе Edit Statistics... (Редактировать статистики).

    Откроется диалоговое окно General Tables: Cell Statistics (Общие таблицы: Статистики в ячейках).



    Рис. 24.13: Диалоговое окно General Tables: Cell Statistics (Общие таблицы: Статистики в ячейках)

    •  Подтвердите предустановку (вывод статистики Count (Количество)) нажатием Continue (Далее).

    •  Теперь выделите переменную v22 и ешё раз щёлкните на переключателе Edit Statistics... (Редактировать статистики). В диалоговом окне General Tables: Cell Statistics (Общие таблицы: Статистики в ячейках) выделите только Col % (Столбцовый %) и активируйте сортировку по убыванию.

    •  Подтвердите установки нажатием Continue (Далее) и в главном диалоговом окне щёлкните на ОК. Вы получите следующую таблицу:


    Geschlecht (Пол)


    weiblich (женский)


    Count (Количество)


    77


    maennlich (мужской)


    Count (Количество)


    194


    Parteipraeferenz (Предпочитаемая партия)


    SPD


    Col % (Столбцовый %)


    33,6%


    keine (Ни одна из партий)


    Col % (Столбцовый %)


    28,4%


    fehlende Angabe (Данные отсутствуют)


    Col % (Столбцовый %)


    17,0%


    Buendbis 90/Die Gruenen (Союз 90/Зелёные)


    Col % (Столбцовый %)


    8,1%


    CDU/CSU


    Col % (Столбцовый %)


    6,6%


    Republikaner (Республиканцы)


    Col % (Столбцовый %)


    3,3%


    andere (Другая)


    Col % (Столбцовый %)


    1,5%


    FDP


    Col % (Столбцовый %)


    ,7%


    PDS/Linke Liste (Левые)


    Col % (Столбцовый %)


    ,7%


    Как уже упоминалось, возможность организовывать вывод статистик в отдельности для каждой из переменных, как это было сделано в вышеприведенной таблице, в простых таблицах отсутствует.

    13.gif

    Изображение: 

    24.3.3 Суммарные показатели


    24.3.3 Суммарные показатели


    В общих таблицах, также как и в простых таблицах, Вы можете организовывать вывод суммарных статистик для переменных. Для этого необходимо выделить интересующую переменную и активировать опцию Is summarized (Подвести итог).


    Организуем вывод итоговых статистик для переменных alter (возраст) и mitglied (членство) (см. гл. 24.2.7). Для этого поступите следующим образом:

    •  Перенесите переменные alter (возраст) и mitglied (членство) в поле строчных переменных.

    •  Выделите переменную mitglied (членство) и активируйте опцию Is summarized (Подвести итог). Повторите эти же действия и для переменной age (возраст).

    •  Подтвердите установки нажатием ОК. Вы получите следующую таблицу:


    mitqlied (членство)


    18,42


    alter (возраст)


    44,17


    Используя переключатель Edit Statistics... (Редактировать статистики), Вы можете добавить и другие статистики, такие как Minimum (Минимум), Maximum (Максимум) и Variance (Дисперсия).

    24.4 Обработка множественных ответов


    24.4 Обработка множественных ответов


    В анкете относительно организации празднования 1-го Мая имеются вопросы с множественными ответами. К примеру возможно несколько вариантов ответов на вопрос: "Как Вы проводите выходные дни?" Здесь опрашиваемый может отметить более одного ответа, например, "Просмотр телепередач" и "Хобби". Для обработки множественных ответов в модуле Tables так же, как и в базовом модуле (см. гл. 12), существует два метода: метод множественных дихотомий и метод множественных категорий.

    24.4.1 Дихотомический метод


    24.4.1 Дихотомический метод


    Для изучения этого метода возьмём вопрос: "Как Вы проводите выходные дни?" Переменные via no vlq представляют ответы на вопрос v1 (via соответствует ответу Просмотр телепередач, vlb Общение с друзьями и т.д.). Переменные при этом являются дихотомическими, то есть они могут иметь только два возможных значения: 1 соответствует ответу "Да", а 0 ответу "Нет/нет данных". Чтобы переменную vl обработать в табличной форме, необходимо сначала определить набор множественных ответов.

    •  Для этого выберите в меню опцию Analyze (Анализ) Custom Tables (Пользовательские таблицы) Multiple Response Tables... (Таблицы множественных ответов)

    Откроется диалоговое окно Multiple Response Tables (Таблицы множественных ответов) (см. рис. 24.14).

    •  Щёлкните на выключателе Define Sets... (Определить наборы) для организации соответствующего набора ответов.

    Откроется диалоговое окно Multiple Response Tables: Define Multiple Response Sets (Таблицы множественных ответов: Определение набора множественных ответов), как изображено на рисунке 24.15. Дихотомический метод установлен по умолчанию.

    •  Перенесите переменные vla-vlq в список Variables in Set (Переменные набора).


    Рис. 24.14: Диалоговое окно Multiple Response Tables (Таблицы множественных ответов)

    •  В качестве счётной величины укажите 1 (Ответы — да).

    •  Образовываемому набору переменных присвойте имя frei (свободный) и метку Freizeit (свободное время). Диалоговое окно должно теперь выглядеть так, как на рисунке 24.16.

    •  Щёлкните на переключателе Add (Добавить), чтобы добавить переменную набора в поле наборов множественных ответов.

    •  Подтвердите нажатием Save (Сохранить). Вы опять попадёте в главное диалоговое окно Multiple Response Tables (Таблицы множественных ответов).

    В списке Multiple Response Sets (Наборы множественных ответов) теперь находится переменная Sfrei. SPSS автоматически помечает переменные наборов знаком $. Отобразим распределение частот переменной Sfrei в табличной форме.



    Рис. 24. 15: Диалоговое окно Multiple Response Tables: Define Multiple Response Sets (Таблицы множественных ответов: Определение наборов множественных ответов)



    Рис. 24.16: Заполненное диалоговое окно Multiple Response Tables: Define Multiple Response Sets (Таблицы множественных ответов: Определение наборов множественных ответов)

    •  Для этого перенесите переменную Sfrei в поле строчных переменных и подтвердите нажатием ОК. Вы получите результаты опроса в следующем виде:


    Free time (Свободное время)


    Fernsehen (Просмотр телепередач)


    9


    Geselligkeit (Общение с друзьями)


    52


    Stammtisch (Приглашаю к себе гостей)


    2


    Hobbies (Хобби)


    26


    Verein (Общество по увлечениям)


    18


    Familienleben (Семейные заботы)


    4


    Radio hoeren/Lesen (Слушаю радио/читаю)


    3


    Kino/Konzerte/Theater (Кино/концерты/театр)


    14


    das uebtiche/dies und das (To же, что и всегда/то одно то другое)


    163


    Ausflueg/Wanderung machen (Выбираюсь на природу/путешествую)


    wichtige Arbeiten verrichten (Необходимые дела (дом, квартира, сад)


    52


    Nachbarschaftshilfe (Помощь соседям)


    2


    Sport (Спорт)


    35


    Anderes 1 . Antwort (Другое 1 -и ответ)


    14


    Anderes 2. Antwort (Другое 2-й ответ)


    2

    14.gif

    Изображение: 

    15.gif

    Изображение: 

    16.gif

    Изображение: 

    24.4.2 Категориальный метод


    24.4.2 Категориальный метод


    В категориальном методе при кодировке сначала определяется максимальное количество ответов. Затем образовывается такое же количество переменных.


    С целью изучения особенностей этого метода, мы рассмотрим следующий пример: закодируем вопрос vl: "Как Вы проводите выходные дни?" не дихотомически, а категориально. В этом случае мы сначала подсчитываем максимальное количество отмеченных ответов. Мы исходим, например, из того, что каждый из респондентов отметил не более шести предлагаемых вариантов ответа. Тогда мы образовываем шесть переменных. Эти переменные имеют следующие метки значений: 1 — Просмотр телепередач, 2 — Общение с друзьями, 3 — Приглашаю к себе гостей, 4 — Хобби и т.д. В отличие от дихотомического метода мы обойдёмся меньшим количеством переменных, хотя они и не дихотомические, а имеют более двух категорий. Категориальный метод кодировки применяется прежде всего тогда, когда заранее задано максимальное число возможных ответов, как это было сделано при формулировке вопросов v4, vll, v!2 v!5 и vl6. При кодировке анкеты эти переменные были закодированы категориально. И в категориальном методе необходимо сначала определить набор множественных ответов. Для объяснения категориального метода на примере возьмём переменную v11: "Что Вам понравилось?"

    •  В диалоговом окне Multiple Response Tables (Таблицы множественных ответов) щёлкните на переключателе Define Sets... (Определить наборы).

    •  Перенесите переменные v11a и v11b в список Variables in Set (Переменные в наборе) и активизируйте вид кодировки Categories (Категории).

    •  Присвойте переменной набора имя zusagen (согласие) и метку Gefallen (Одобрение).

    •  Затем щёлкните на переключателе Add (Добавить) и подтвердите нажатием Save (Сохранить).

    •  В главном диалоговом окне перенесите переменную Szusagen в поле строчных переменных.

    Вы получите следующую таблицу:

     

    Gefallen (Одобрение)


    es wurde eine ansprecende Rede qehalten (была произнесена интересная речь)


    20


    ich konnte viele Kolleqinnen und Kolleqen treffen (я встретил много коллег)


    26


    lebendiqe Proqrammqestaltunq (интересная программа)


    19


    weiss nicht mehr (уже не помню)


    14


    anderes (другое)


    3


    Geselligkeit, Gemeinschaftsqefuehl (общение, чувство сплочённости)


    7


    Solidaritaetskundgebunq (манифестация солидарности)


    4


    Darstellung von und Engagement fuer Arbeiterrechte (изложение прав трудящихся и помощь по защите этих прав)


    5


    Diskussionen, Gespraeche, Meinungsaustausch (дискуссии, беседы, обмен мнениями)


    6


    Kultur, Musik (культурные мероприятия, музыка)


    2


    Feiem, Essen, Trinken (праздничное застолье)


    3


    nichts besonderes (ничего особенного)


    6


    Familie dabei (прогулка с семьёй)


    2


    lokaler Bezugsrahmen/aktuelle Themen (обсуждение местных проблем/актуальные темы)


    3


    Работа с переменными наборов


    Переменные наборов могут обрабатываться как обычные переменные. Выведем, к примеру, отдельно для каждого пола данные по переменной, которая характеризует варианты проведения свободного времени (переменная набора $frei).

    •  Переменной $frei присвойте статус строчной переменной, а переменной v2 — статус столбцовой переменной. Вы получите следующую двумерную таблицу:

     

    Geschlecht (Пол)


    weiblich (женский)


    maennlich (мужской)


    Free time (Свободное время)


    Femsehen (Просмотр телепередач)


    1


    8


    Geselliqkeit (Общение с друзьями)


    21


    31


    Stammtisch (Приглашаю к себе гостей)


    2


    Hobbies (Хобби)


    4


    22


    Verein (Общество по увлечениям)


    4


    14


    Familienleben (Семейные заботы)


    2


    2


    Radio hoeren/Lesen (Слушаю радио/читаю)


    3


    Kino/Konzerte/Th eater (Кино/концерты/театр)


    6


    8


    das uebliche/dies und das (To же, что и всегда/то одно то другое)


    51


    112


    Ausflueg/Wanderung machen (Выбираюсь на природу/путешествую)


    16


    36


    wichtige Arbeiten verrichten (Необходимые дела (дом, квартира, сад)


    2


    Nachbarschaftshilfe (Помощь соседям)


    Sport (Спорт)


    10


    25


    Anderes 1 . Antwort (Другое 1 . ответ)


    3


    11


    Процентные показатели для переменных наборов


    На один вопрос с множественными ответами каждый опрашиваемый может дать несколько ответов. Как правило, общее количество ответов больше, нежели количество наблюдений (количество опрашиваемых). Вы можете выбрать, какой из этих показателей — количество наблюдений или количество ответов — будет далее использоваться в качестве основы расчётов. Поясним это на примере переменной $frei (Как Вы проводите выходные дни?).

    •  В диалоговом окне Multiple Response Tables (Таблицы множественных ответов) переменную набора Sfrei поместите в список строчных переменных.

    •  Щёлкните на переключателе Statistics... (Статистики). Откроется диалоговое окно Multiple Response Tables: Statistics (Таблицы множественных ответов: Статистики).

    •  Активируйте дополнительно опции Column Percentages (Проценты по столбцам) и Totals (Суммы).

    •  Подтвердите нажатием Continue (Далее) и затем на ОК. Вы получите следующую частотную таблицу:

    Количество наблюдений, пригодных для проведения расчетов, и, следовательно, базис процентного соотношения равняется 256. Сумма процентных показателей превосходит значение 100 %, так что цифра 100,0 в строке Col % (Столбцовый %) кажется абсолютно бессмысленной.

     

    Free time (Свободное время)


    Femsehen (Просмотр телепередач)


    Count (Количество)


    9


    Col % (Столбцовый %)


    3,5


    Geselligkeit (Общение с друзьями)


    Count (Количество)


    52


    Col % (Столбцовый %)


    20,3


    Stammtisch (Приглашаю к себе гостей)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,8


    Hobbies (Хобби)


    Count (Количество)


    26


    Col % (Столбцовый %)


    10,2


    Verein (Общество по увлечениям)


    Count (Количество)


    18


    Col % (Столбцовый %)


    7,0


    Familienleben (Семейные заботы)


    Count (Количество)


    105


    Col % (Столбцовый %)


    41,0


    Radio hoeren/Lesen (Слушаю радио/читаю)


    Count (Количество)


    4


    Col % (Столбцовый %)


    1,6


    Kino/Konzerte/Th eater (Кино/концерты/театр)


    Count (Количество)


    3


    Col % (Столбцовый %)


    1,2


    das uebliche/dies und das (To же, что и всегда/то одно то другое)


    Count (Количество)


    14


    Col % (Столбцовый %)


    5,5


    Ausflueg/Wanderung machen (Выбираюсь на природу/путешествую)


    Count (Количество)


    163


    Col % (Столбцовый %)


    63,7


    wichtige Arbeiten verrichten (Необходимые дела (дом, квартира, сад)


    Count (Количество)


    52


    Col % (Столбцовый %)


    20,3


    Nachbarschaftshilfe (Помощь соседям)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,8


    Sport (Спорт)


    Count (Количество)


    35


    Col % (Столбцовый %)


    13,7


    Anderes 1. Antwort (Другое 1-й ответ)


    Count (Количество)


    14


    Col % (Столбцовый %)


    5,5


    Anderes 2. Antwort (Другое 2-й ответ)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,8


    Total (Сумма)


    Count (Количество)


    256


    Col % (Столбцовый %)


    100,0



    Рис. 24.17: Диалоговое окно Multiple Response Tables: Statistics (Таблицы множественных ответов: Статистики)


    Если Вы хотите сравнивать показатели не относительно количества наблюдений, а относительно количества ответов, то поступите следующим образом.

    •  В диалоговом окне Multiple Response Tables (Таблицы множественных ответов) воспользуйтесь переключателем Define Sets... (Определить наборы).

    •  В диалоговом окне Multiple Response Tables: Define Multiple Response Sets (Таблицы множественных ответов: Организация наборов множественных ответов) в группе Denominator for Multiple-Response Percentages (Знаменатель для процентных показателей множественных ответов) вместо опции Number of Cases (Количество наблюдений), устанавливаемой по умолчанию, активируйте опцию Number of responses (Количество ответов).

    •  Щёлкните на переключателе Save (Сохранить) и затем на ОК. Теперь частотная таблица будет отображена с изменёнными процентными показателями.

     

     

    Free time (Свободное время)


    Fernsehen (Просмотр телепередач)


    Count (Количество)


    9


    Col % (Столбцовый %)


    1,8


    Geselligkeit (Общение с друзьями)


    Count (Количество)


    52


    Col % (Столбцовый %)


    10,4


    Stammtisch (Приглашаю к себе гостей)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,4


    Hobbies (Хобби)


    Count (Количество)


    26


    Col % (Столбцовый %)


    5,2


    Verein (Общество по увлечениям)


    Count (Количество)


    18


    Col % (Столбцовый %)


    3,6


    Familienleben (Семейные заботы)


    Count (Количество)


    105


    Col % (Столбцовый %)


    21,0


    Radio hoeren/Lesen (Слушаю радио/читаю)


    Count (Количество)


    4


    Col % (Столбцовый %)


    ,8


    Kino/Konzerte/Theater (Кино/концерты/театр)


    Count (Количество)


    3


    Col % (Столбцовый %)


    ,6


    das uebliche/dies und das (To же, что и всегда/то одно то другое)


    Count (Количество)


    14


    Col % (Столбцовый %)


    2,8


    Ausflueg/Wanderung machen (Выбираюсь на природу/путешествую)


    Count (Количество)


    163


    Col % (Столбцовый %)


    32,5


    wichtige Arbeiten verrichten (Необходимые дела (дом, квартира, сад)


    Count (Количество)


    52


    Col % (Столбцовый %)


    10,4


    Nachbarschaftshilfe (Помощь соседям)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,4


    Sport (Спорт)


    Count (Количество)


    35


    Col % (Столбцовый %)


    7,0


    Anderes 1. Antwort (Другое 1-й ответ)


    Count (Количество)


    14


    Col % (Столбцовый %)


    2,8


    Anderes 2. Antwort (Другое 2-й ответ)


    Count (Количество)


    2


    Col % (Столбцовый %)


    ,4


    Total (Сумма)


    Count (Количество)


    256


    Col % (Столбцовый %)


    51,1


    В графе Total (Сумма) и здесь указывается количество действительных наблюдений; на этом месте хотелось бы видеть текущий опорный показатель вычисления процентных долей, то есть суммарное количество ответов. Если их сложить, то мы получим цифру 501. Сумма процентных показателей на этот раз равна 100 %.


    Результирующий процентный показатель в строке Col % (Столбцовый %) равный 51,1, отражает в процентах долю суммарного количества наблюдений (256) в суммарном количестве ответов (501).

    17.gif

    Изображение: 

    24.5 Таблицы частотных показателей


    24.5 Таблицы частотных показателей


    Таблицы частотных показателей имеет смысл применять в том случае, когда для большого количества вопросов одного исследования допускается использование одинаковых вариантов ответов. В опросе относительно организации празднования 1-го Мая таким свойством обладают переменные v5, v6, v8, v!3 и v!4. На вопросы, обуславливающие значения данных переменных, можно ответить да, нет и не знаю.

    24.5.1 Примеры таблиц частотных показателей


    24.5.1 Примеры таблиц частотных показателей


    Рассмотрим для начала простейший случай частотной таблицы. Для этого Отразим частоты категорий переменной v5 (1st der l.Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)).

    •  Выберите в меню опции Analyze (Анализ) Custom Tables (Пользовательские таблицы) Tables of Frequencies... (Таблицы частот)

    Откроется диалоговое окно Tables of Frequencies (Таблицы частот), изображённое на рисунке 24.18.



    Рис. 24. 18: Диалоговое окно Tables of Frequencies (Таблицы частот)

    •  Перенесите переменную v5 в список Frequencies for (Частоты для) и подтвердите свой выбор нажатием на ОК. Вы получите следующую таблицу:

     

    1st der 1 .Mai als TdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    Count (Количество)


    fehlende Anqabe (Данные отсутствуют)


    39


    Ja (Да)


    154


    Nein (Нет)


    59


    Weiss nicht (He знаю)


    19


    Содержание данной частотной таблицы соответствует содержанию таблицы, которую Вы могли бы получить выбором меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) Basic Tables... (Основные таблицы) с присвоением переменной v5 статуса строчной переменной.


    Уникальные возможности вспомогательного меню Tables of Frequencies... (Таблицы частот) заключаются в одновременном представлении нескольких переменных с одинаковыми возможностями ответов. Отобразим одновременно показатели переменных v5, v6 и v8.

    •  Выберите в меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) Tables of Frequencies... (Таблицы частот)

    •  Перенесите переменные v5, v6 и v8 в список Frequencies for (Частоты для) и подтвердите свой выбор нажатием на ОК. В окне просмотра результатов появится следующая таблица:

     

    Istder t.MaialsTdA noch zeitgemaess? (Сохраняет ли ещё актуальность 1-е Мая, как день трудящихся?)


    Erinnerung an 1 . Mai Feier im Ort (Воспоминания о праздновании 1-го Мая по месту жительства)


    Count (Количество)


    Count (Количество)


    fehlende Angabe (Данные тсутствуют)


    - 39


    48


    Ja (Да)


    154


    67


    Nein (Нет)


    59


    143


    Weiss nicht (He знаю)


    19


    13


    Если слова, входящие в заголовки столбцов, не помещаются в одной строке при заданной ширине столбцов, то они распределяются в нескольких строках.

    18.gif

    Изображение: 

    24.5.2 Процентные показатели суммарных значений


    24.5.2 Процентные показатели суммарных значений


    Процентные показатели суммарных значений могут выводиться и в частотных таблицах. Рассмотрим следующий пример: нам необходимо получить абсолютные значения, процентные показатели и суммарные значения переменных v8, v13 и v14.

    •  Для этого выберите в меню Analyze (Анализ) Custom Tables (Пользовательские таблицы) Tables of Frequencies... (Таблицы частот)

    •  Перенесите переменные v8, v!3 и v!4 в список Frequencies for (Частоты для).

    •  Затем щёлкните на выключателе Statistics... (Статистики).

    Откроется диалоговое окно Tables of Frequencies: Statistics (Таблицы частот: Статистики), изображённое на рисунке 24.19. В этом диалоговом окне по умолчанию установлена опция Count Display (Показывать количество).

    •  Активируйте дополнительно выключатели Display (Показать) в группах Percent! (Проценты) и Totals (Суммы). Таблица результатов опроса будет выглядеть следующим образом:


    Рис. 24.19: Диалоговое окно Tables of Frequencies: Statistics (Таблицы частот: Статистики)

     


    Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в первомайских мероприятиях, организованных профсоюзами)


    Gestalt. 1 . Mai durch Gew. pol. wichtig? (Важно ли политически, чтобы мероприятия 1 -то Мая организовывали именно профсоюзы?)


    1 . Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    Count (Коли-чество)


    %


    Count (Коли-чество)


    %


    Count (Коли-чество)


    %


    fehlende Angabe (Данные отсутствуют)


    3


    1,1%


    2


    ,7%


    40


    14,8%


    Ja (Да)


    110


    40,6%


    221


    81,5%


    59


    21,8%


    Nein (Нет)


    156


    57,6%


    29


    10,7%


    147


    54,2%


    keine Angaben/weiss nicht (Данные отсутствуют/не знаю)


    2


    ,7%


    19


    7,0%


    25


    9,2%


    Total (Сумма)


    271


    100,0%


    271


    100,0%


    271


    100,0%


    В диалоговом окне Tables of Frequencies: Statistics (Таблицы частот: Статистики) Вы можете активировать и другие форматы отображения количества и процентов.

    19.gif

    Изображение: 

    24.5.3 Работа с подгруппами


    24.5.3 Работа с подгруппами


    Применение подгрупп возможно и в частотных таблицах. Для изучения этой возможности рассмотрим следующий пример: для каждого пола нам необходимо вывести данные по переменным v8 (Teilnahme an gewerkschaftlichen Mai-Veranstaltung (Участие в первомайских мероприятиях, организованных профсоюзами)) и v6 (Erinnerung an 1. Mai Feier im Ort (Воспоминания о праздновании 1-го Мая по месту жительства)).

    •  Перенесите переменные v8 и v6 в список Frequencies for (Частоты для), а переменную v2 в список In Each Table (В каждой таблице). Диалоговое окно должно теперь выглядеть так, как показано на рисунке 24.20.


    Рис. 24.20: Диалоговое окно Tables of Frequencies (Таблицы частот)

    •  Подтвердите свой выбор нажатием на ОК. В окне просмотра будет показана следующая таблица:



    Geschlecht (Пол)


    weiblich (женский)


    maennlich (м\


    ркской)


    Teilnahme an gewer-kscha-ftlichen Mai-Verans-taltung (Участие в первомайских мероприятиях, органи-зованных профсоюзами)


    Erinnerung an 1 . Mai Feier im Ort (Воспо-минания о праздно-вании 1-го Мая по месту жительства


    Teilnahme an gewerks-chaftlichen Mai-Veranstaltung (Участие в первомайских мероприятиях, органи-зованных профсоюзами)


    Erinnerung an 1 . Mai Feier im Ort (Воспо-минания о праздно-вании 1-го Мая по месту жительства


    Count (Коли-чество)


    Count (Коли-чество)


    Count (Коли-чество)


    Count (Коли-чество)


    fehlende Angabe (Данные отсу-тствуют)


    1


    18


    2


    30


    Ja(fla)


    36


    19


    74


    48


    Nein (Нет)


    40


    33


    116


    110


    keine Angaben/weiss nicht (Данные отсу-тствуют /не знаю)



    7


    2


    6


    В диалоговом окне Tables of Frequencies (Таблицы частот) Вы можете сгруппировать подгруппы в одну таблицу (см. вышеприведенный пример) или разместить их в разных таблицах. Если вы хотите произвести группировку в разных таблицах, то группирующую переменную необходимо поместить в список Separate Tables (Отдельные таблицы). В первом и во втором вариантах группировки может быть организован вывод процентных показателей и суммарных значений.


    Выведем отдельно для каждого пола значения переменных v13 и v14, но в этом случае, в отличие от первого примера, данные будут находиться в разных таблицах. В таблице также должны быть рассчитаны процентные показатели и суммарные значения. Для выполнения этого задания поступите следующим образом:

    •  Перенесите переменные v13 и v14 в список Frequencies for (Частоты для), а переменную v2 — в список Separate Tables (Отдельные таблицы).

    •  Затем сделайте щелчок на переключателе Statistics... (Статистики) и активируйте Percents Display (Показать проценты).

    •  Подтвердите свой выбор нажатием Continue (Далее) и затем на ОК. В окне просмотра будут показаны следующие таблицы, причём вторая таблица появится только после двойного щелчка на первой таблице и активирования соответствующей позиции в ниспадающем меню.


    Geschlecht maenlich (Женщины)


    Gestalt. 1 . Mai durch Gew. pol. wichtig? (Важно ли политически, чтобы мероприятия 1-го Мая организовывали именно профсоюзы?)


    1. Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    Count (Количество)


    %


    Count (Количество)


    %


    fehlende Angabe (Данные отсутствуют)


    15


    5,5%


    Ja (Да)


    63


    23,2%


    17


    6,3%


    Nein (Нет)


    6


    2,2%


    37


    13,7%


    Weiss nicht (He знаю)


    8


    3,0%


    8


    3,0%

     


    Geschlecht maenlich (Мужчины)


    Gestalt. 1 . Mai durch Gew. pol. wichtig? (Важно ли политически, чтобы мероприятия 1-го Мая организовывали именно профсоюзы?)


    1 . Mai = Fest fuer hauptamt. Funktionaere? (1-е Мая = праздник для высокопоставленных чиновников?)


    Count (Количество)


    %


    Count (Количество)


    %


    fehlende Angabe (Данные отсутствуют)


    2


    ,7%


    25


    9,2%


    Ja (Да)


    158


    58,3%


    42


    15,5%


    Nein (Нет)


    23


    8,5%


    110


    40,6%


    Weiss nicht (He знаю)


    11


    4,1%


    17


    6,3%


    Возможно также и отображение большего количества подгрупп. Организуем вывод показателей переменных v5 и v8 отдельно для каждого пола (v2) и партийной ориентации (v22).

    •  Перенесите переменные v5 и v8 в список Frequencies for (Частоты для), а переменные v2 и v22 — в список In Each Table (В каждой таблице).

    Теперь Вы можете выбрать необходимый вариант представления: All combinations (nested) (Все комбинации (с вложением)) или Each separately (stacked) (Каждая отдельно (с наложением)). Если вы оставите установку по умолчанию All combinations (nested) (Все комбинации (с вложением)), то будет образована иерархия подгрупп; если вы активируете опцию Each separately (stacked) (Каждая отдельно (с наложением)), то переменные v5 и v8 сначала будут представлены отдельно для каждого пола, а затем отдельно для каждой партийной ориентации.

    •  Активируйте опцию Each separately (stacked) (Каждая отдельно (с наложением)) и подтвердите нажатием ОК. Вы получите частотную таблицу с пакетированными подгруппами, которую в книге, к сожалению, полностью отобразить не получилось (см. след, стр.)

    В соответствии с размещением в списке Subgroups (Подгруппы), сначала выводится распределение частот переменных v5 и v8 для подгруппы v2, а затем распределение частот переменных v5 и v8 для подгруппы v22.


    Модуль Tables предоставляет большое количество различных возможностей для построения презентационных таблиц. После непродолжительных занятий для Вас не должно составить никакого труда, чтобы подобрать и построить необходимую таблицу.

    20.gif

    Изображение: 

    Глава 25. Экспортирование выходных данных

    Глава 25. Экспортирование выходных данных

    1. Экспортирование выходных данных

    Экспортирование выходных данных


    В этой главе мы бы хотели представить Вам важнейшие возможности экспорта основных таблиц и диаграмм в формате SPSS в другие приложения Windows, такие, как например Word.


    Мы рассмотрим следующие темы:

    •  Перенос статистических результатов в Word,

    •  Перенос диаграмм в Word,

    •  Экспортирование сводных таблиц и диаграмм как HTML-Документов.

    25.1 Перенос статистических результатов в Word

    25.1 Перенос статистических результатов в Word


    В дальнейшем мы основываемся на том, что в Вашем распоряжении есть Word 97 или сравнимая с ним версия.


    Рассмотрим следующий пример: Вы хотите перенести результаты расчета частотного распределения переменной partei из нашего импровизированного опроса За кого бы Вы проголосовали, если бы в воскресенье были выборы в Бундестаг? в текстовый документ Word. Там результаты должны документироваться и оцениваться. Действуйте следующим образом:

    •  Запустите текстовый редактор Word.

    •  Запустите SPSS, и загрузите файл wahl.sav в редактор данных.

    •  В пунктах меню выберите: Analyze (Анализ,) Descriptive statistics (Описательные статистики) Frequencies... (Частоты)

    Открывается диалоговое окно Frequencies... (Частоты).

    •  Перенесите переменную partei в список целевых переменных.

    •  Нажмите ОК. Результаты для частотного распределения появятся в окне просмотра.

    •  Щёлкните правой кнопкой мыши на таблице частоты. Окно просмотра выглядит теперь таким образом, как показано на рисунке 25.1.

    •  Выберите в вызванном меню опцию Copy Objects (Копировать объекты). В качестве альтернативного варианта, Вы можете выбрать пункты меню Edit (Редактировать) Copy Objects (Копировать объекты)


    Рис. 25.1.Окно просмотра с вызванном меню копирования результатов


    Статистические результаты, касающиеся частотного распределения будут скопированы в буфер обмена Windows. Буфер обмена является ячейкой памяти, где хранятся любые сведения, которые по желанию снова могут быть вызваны. Эти данные теряются при выходе из Windows, а также при записи новых сведений в буфер обмена. С помощью буфера обмена вышеназванные объекты могут быть перенесены из одной программы в другую. Таким образом, можно копировать статистические результаты из SPSS и переносить их после этого в документ Word. Попробуем это сделать.

    •  С помощью панели задач переместитесь в Word.

    Панель задач Windows 98 управляет работающими программами. Панель задач может быть вызвана нажатием кнопок <Alt> и <Таb.>. Каждая программа, которую Вы запускаете, имеет собственный символ на панели задач. Чтобы перейти к уже открытой программе, просто щёлкните на соответствующем символе в панели задач.

    •  Выберите в строке меню Word опции Правка Вставить

    Команда Вставить вставляет данные из буфера обмена в документ, начиная с текущей позиции курсора. Экран выглядит теперь как на рисунке 25.2.

    •  Если Вы хотели бы увеличить или уменьшить таблицу, то щёлкните здесь левой кнопкой мыши. Таблица получает теперь так называемую управляющую рамку, как на рисунке 25.3.


    Рис. 25.2. Таблица частотного распределения в документе Word



    Рис. 25.3. Таблица частотного распределения с управляющей рамкой


    Если Вы, например, щёлкните мышью внизу справа рамки, то Вы сможете увеличивать или уменьшать таблицу по диагонали. Для этого удерживайте нажатой левую кнопку мыши, и перемешайте мышь по полю. Отпустите кнопку мыши, когда достигните желаемого размера.


    Вы также можете дальше работать с основными таблицами в Word, чтобы, например, изменять или добавлять заголовки.

    •  Для этого щёлкните правой кнопкой мыши на таблице частоты. Раскрывается меню (см рисунок 25.4).

    •  Выберите опцию Изменить рисунок

    Таблица частоты откроется для редактирования (см рисунок 25.5). В Вашем распоряжении теперь находится дополнительная строка меню на нижней кромке экрана.

    •  Испробуйте различные возможности. Например, измените заголовок таблицы Прогноз выборов 98.

    •  Произведя желаемые изменения, просто щёлкните на переключатель Закрыть графику.

    Задание для тренировки

    •  Для тренировки перенесите частотное распределение переменных alter (возраст) и sex (пол) в Word.


    Рис. 25.4. Вызванное меню в Word



    Рис. 25.5. Таблица частотного распределения, открытая для редактирования в Word


     

    1.gif

    Изображение: 

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    25.2 Перенос диаграмм в Word

    25.2 Перенос диаграмм в Word

    •  Запустите текстовый редактор Word.

    •  Запустите SPSS, и загрузите файл btw98.spo в окно просмотра результатов (см. рисунок 25.6).

    Мы хотим экспортировать эту диаграмму в Word.

    •  Щёлкните левой кнопкой мыши на диаграмме.

    •  Выберите опцию меню: Edit (Редактировать) Copy Objects (Копировать объекты)

    Диаграмма будет скопирована в буфер обмена.

    •  Нажмите кнопки <Alt> и <Таb>. Удерживать нажатой кнопку <Alt>, пока Вы но переместитесь в текстовый редактор.

    •  Выберите из пунктов меню Word: Правка Вставить

    Диаграмма будет перенесена в окно текстового документа (см рисунок 25.7). Здесь Вы можете дальше работать над диаграммой (см главу 25.1).



    Рис. 25.6. Диаграмма в окне просмотра результатов



    Рис. 25.7. Диаграмма в Word

    6.gif

    Изображение: 

    7.gif

    Изображение: 

    25.3 Экспорт сводных таблиц и диаграмм как HTML-документов

    25.3 Экспорт сводных таблиц и диаграмм как HTML-документов

    •  Запустите SPSS и загрузите файл studium.sav в редактор данных.

    •  Постройте частотное распределение переменной semester.

    Просмотрите полученные результаты в окне просмотра. Мы хотим экспортировать таблицы в HTML-формат, разместить их на Web-странице. Для этого нужно сделать следующее.

    •  Щёлкните правой кнопкой мыши на частотной таблице "Количество семестров" (Anzahl der Semester).

    Окно просмотра выглядит теперь, как изображено на рисунке 25.8.

    •  Выберите опцию Export... (Экспортировать)

    •  Открывается диалоговое окно Export Output (Экспортировать выходные данные) (см рисунок 25.9).

    •  В поле File Name (Имя файла) введите, например, C:\SPSSBUCH\test.htm и подтвердите его выбор нажатием ОК.

    •  Запустите программу-браузер, например, Microsoft Internet Explorer.

    •  Введите в строке Path (Путь): file:///C:/SPSSBUCH/test.htm. Обратите внимание на то, что после слова file (файл) должны стоять три черты, наклоненных вправо.


    Рис. 25.8. Таблица в окне просмотра с раскрытым общим меню



    Рис. 25.9. Диалоговое окно Экспорт данных


    Результаты построения частотного распределения переменной semester будут отныне показываться, как HTML-Документ (см. рис. 25.10).


     Теперь мы хотим экспортировать еще и диаграмму.

    •  Постройте для этого гистограмму переменной semester с нанесенной кривой нормального распределения.

    •  В окне просмотра щёлкните правой кнопкой мыши на диаграмме, и выберите опцию Export... (Экспортировать). Откроется диалоговое окно Export Output (Экспортировать выходные данные).

    •  Выберите в списке Export (Экспорт) опцию Output Document (Выходной документ).

    •  И, наконец, щёлкните на переключателе Options... (Опции). Откроется диалоговое окно HTML Options (Опции HTML) (см. рисунок 25.11).


    Рис. 25.10. Частотное распределение переменной semester в виде HTML-документа

    •  В этом диалоговом окне щёлкните на переключателе Chart Options... (Опции для диаграммы)

    Откроется диалоговое окно JPG Output Filter Setup (Установка выходного фильтра JPG) (см. рисунок 25.12).

    •  Активируйте в области Resolution (Разрешение) опцию Screen (Экран) и подтвердите ввод ОК.

    •  Возвратившись в диалоговое окно Export Output (Экспортировать выходные данные), введите имя файла C:\SPSSBUCH\histogramm.htm.

    •  Запустите программу-браузер, например, Microsoft Internet Explorer.

    •  Введите в строчку Path (Путь): file://C:/ SPSSBUCH/histogramm.htm. Обратите внимание на то, что после слова file (файл) должны стоять три черты, наклоненных вправо.


    Рис. 25.11. Диалоговое окно HTML Options (HTML Опции)



    Рис. 25.12. Диалоговое окно JPG Выход Фильтр Установка


    Гистограмма с нанесенной кривой нормального распределения является отныне HTM L-Документом (см. рис. 25.13).

    •  У Вас не должно возникнуть трудностей в дальнейшей самостоятельной работе с оставшимися опциями.


    Рис. 25.13. Гистограмма в окне программы-браузера

    8.gif

    Изображение: 

    9.gif

    Изображение: 

    10.gif

    Изображение: 

    11.gif

    Изображение: 

    12.gif

    Изображение: 

    13.gif

    Изображение: 

    Глава 26. Программирование

    Глава 26. Программирование

    1. Программирование

    Программирование


    Пользователи, давно работающие с программой SPSS, в особенности, если им приходилось использовать ее на больших ЭВМ, уже привыкли давать описание данных и формулировать желаемый метод их обработки по строгим синтаксическим правилам в виде некоторой программы на языке SPSS.


    Выгода такого подхода заключается в том, что пользователю не приходится постоянно пребывать в диалоговом режиме, а можно просто наблюдать, как компьютер выполняет единожды заданные команды. В связи с необходимостью написания команд и контроля командного синтаксиса, пользователь будет вынужден лучше продумывать свои шаги и, быть может, у него появится более чёткое понимание статистических методов используемых в программе.


    Наверняка найдётся немало пользователей, охотно решающих свои проблемы в работе с SPSS именно таким методом. Но даже новички в SPSS, которые используют SPSS for Windows именно потому, что здесь есть возможность работы через диалоговые окна и не желают изучать синтаксис программы, также смогут почерпнуть для себя немало полезного, познакомившись с синтаксисом. Так, в области отбора и модификации данных, а также при выполнении некоторых статистических методов, имеются команды и опции, которые доступны только через синтаксис. Или, к примеру, имеется процедура MATRIX (Матрица), предназначенная для проведения операций с матрицами, которая может быть задействована исключительно при помощи соответствующего программного синтаксиса.


    Конечно же, в рамках данной книги, которая как раз и направлена на изучение техники работы в Windows без привлечения синтаксиса программы, не получится дать подробное и полное описание синтаксиса SPSS.


    Следующие разделы предназначены с одной стороны для тех пользователей, которые уже знакомы с синтаксисом программы, но с другой, возможно, послужат мотивацией к более подробному изучению данной темы для начинающих пользователей SPSS. В первом разделе будут представлены некоторые основные синтаксические правила. Второй раздел посвящён изучению работы с готовыми SPSS-программами для Windows, третий раздел — тому, как отдельные команды при помощи синтаксиса могут быть включены в диалоговый расчётный процесс, и наконец в четвёртом разделе будут рассмотрены два примера использования процедуры MATRIX (Матрица).


    В пятом разделе речь пойдёт о том, как при помощи так называемых сценариев можно автоматизировать выполнение некоторых задач.

    26.1 Основные синтаксические правила

    26.1 Основные синтаксические правила


    Элементы программного языка SPSS можно разделить на следующие категории:

    •  Команда (инструкция): инструкция, управляющая процессом работы SPSS.

    •  Вспомогательная команда: дополнительная инструкция к команде SPSS. В одну команду может входить несколько вспомогательных команд.

    •  Спецификации: некоторые данные, дополняющие команду или вспомогательную команду. Спецификации могут содержать ключевые слова, цифры, арифметические операции, имена переменных и специальные разделительные знаки.

    •  Ключевые слова: слова, применяемые в спецификациях, которым в SPSS предопределено некоторое значение.

    Рассмотрим синтаксис теста Стьюдента для зависимых переменных:

     T-TEST 
      PAIRS= chol0  
       WITH choll (PAIRED) 
       /CRITERIA=CIN(.95)  
      /MISSING=ANALYSIS. 

    Здесь T-TEST - команда. PAIRS, CRITERIA и MISSING - вспомогательные команды, после знака равенства в этих командах идут соответствующие спецификации. WITH, CIN и ANALYSIS являются ключевыми словами.


    При написании и редактировании командного синтаксиса следует учесть следующие простые правила:

    • Каждая команда должна начинаться с новой строки и заканчиваться тачкой (.).

    • Вспомогательные команды отделяются друг от друга при помощи косой черты (/). Перед первой вспомогательной командой косая черта может не ставится.

    •  Текст, взятый в одинарные кавычки (используемый для идентификации меток), должен находиться в одной строке.

    •  Строка с программным синтаксисом не должна превышать 80 знаков.

     В качестве десятичного разделительного знака в спецификациях должна применяться точка (.), независимо от установок операционной системы Windows.


    При интерпретации команд синтаксиса компьютер на различает верхний и нижний регистры (кроме меток, заключённых в одинарные кавычки). Команда может занимать любое количество строк; ввод пробела или переход на новую строку разрешается в той точке, где разрешено применение одиночного пробела, то есть перед и после косой черты, скобок, арифметических операторов или между именами переменных.


    В программных файлах, которые должны работать в операционном модуле, каждая команда должна начинаться с новой строки. Каждая последующая строка одной и той же команды должна начинаться как минимум с одинарного пробела; поэтому в конце команды точка может не ставиться. Синтаксис отдельных команд Вы можете просмотреть при помощи справочной системы (см. разд. 4.9).

    26.2 Выполнение готовой программы для SPSS

    26.2 Выполнение готовой программы для SPSS


    В рамках эксперимента в области психологии пятнадцать мужчин были подвергнуты тестированию на предмет концентрации внимания (далее ТКВ — тест концентрации внимания). При этом вся совокупность респондентов была разбита на две группы: восемь человек вошли в экспериментальную группу и семь в контрольную. Группы компоновались таким образом, чтобы в начале эксперимента усреднённые показатели обеих


    групп были примерно равны. Затем респондентам из экспериментальной группы было предложено выпить по три кружки пива, а респондентам контрольной группы пришлось довольствоваться минеральной водой. Через час в обеих группах был повторно проведен ТКВ.


    Конечно же, предметом этого теста является изучение влияния алкоголя на функциональные способности человека. Предположим, что данные этого эксперимента мы обрабатывали на большой ЭВМ. Тогда существовало бы, как правило, два файла, один из которых в столбцах форме содержал данные (файл alko.dat), а второй программу 8Р85(файл alko.sps). Файлы выглядят следующим образом:


    Файл данных


    1


    1


    15


    19


    2


    2


    20


    16


    3


    2


    14


    13


    4


    1


    17


    21


    5


    1


    22


    24


    6


    2


    18


    14


    7


    2


    22


    19


    8


    1


    19


    18


    9


    2


    17


    16


    10


    1


    14


    18


    11


    2


    17


    17


    12


    1


    15


    17


    13


    1


    18


    18


    14


    2


    17


    14


    15


    1


    20


    21


    Программный файл SPSS

     DATA  LIST  FILE='\spssbuch\alko.dat' 
      /g 4 kltl 6-7 klt2 9-10. 
       COMPUTE kltdiff=klt2-klt1.  
       VARIABLE LABELS g "Группа" / 
     klt1 "Тест на концентрацию внимания Проба 1" / 
      klt2 "Тест на концентрацию внимания Проба 2" / 
      kltdiff "Тест на концентрацию внимания Повышение" . 
      VARIABLE LABELS  
       g 1 "Экспериментальная группа"  
       2 "Контрольная группа".  
       NPAR TESTS K-S(NORMAL)=klt1,klt2,kltdiff. 
       TEMPORARY. SELECT IF g=1. 
      T-TEST PAIRS=klt1 WITH klt2.  
     TEMPORARY. SELECT IF g=2. 
      T-TEST PAIRS=klt1 WITH klt2. 
       T-TEST GROUPS=g(1,2) 
      /VARIABLES=klt1,klt2,kltdiff. 

    После проверки значений ТКВ на предмет наличия нормального распределения, в данной программе будут исследоваться следующие вопросы:

    •  Являются ли различными показатели ТКВ обеих групп в первой и во второй пробах?

    •  Различаются ли показатели ТКВ и их изменения между обеими группами?

    Для выполнения этой программы в SPSS for Windows у Вас существует две возможности:

    •  Можно запустить SPSS for Windows, загрузить программу в редактор синтаксиса и после маркировки соответствующего текста, выполнить ее, нажав кнопку со значком Run Current (Выполнить текущее задание).

    •  Можно запустить программу в операционном модуле SPSS.

    26.2.1 Запуск из редактора синтаксиса

    26.2.1 Запуск из редактора синтаксиса


    Рассматриваемая программа для SPSS находиться в файле alko.sps, имеющемся на приложенном компакт-диске; данные для этой программы можно найти в этой же директории в файле alko.dat.


    Не будем вдаваться в подробности того, как были созданы эти ASCII-файлы. Возможно, они были скопированы с какой-нибудь большой ЭВМ или созданы с помощью одного из многочисленных текстовых редакторов, например, редактора, поставляемого с MS-DOS.

    •  После запуска SPSS for Windows выберите в меню File (Файл) Open (Открыть) Syntax... (Синтаксис) Откроется диалоговое окно Open File (Открыть файл).

    •  Выберите директорию прилагаемого диска и выделите файл alko.sps (см. рис. 26.1).

    •  Подтвердите выбор нажатием кнопки Open (Открыть). Инструкции программного файла появятся в окне редактора синтаксиса. При необходимости здесь же их можно и отредактировать.

    •  Выберите в меню Edit (Правка) Select All (Выделить всё)

    •  Щелчком на выключателе Run Current (Выполнить текущее задание) запустите программу на исполнение. Результаты расчёта будут выведены в окно просмотра.

    •  После выбора меню File (Файл) Save as... (Сохранить как) появится диалоговое окно, в котором Вы можете указать имя файла (с рекомендуемым расширением: .spo) для сохранения содержимого окна просмотра.


    Рис. 26.1: диалоговое окно Open file (Открыть файл)

    •  При выборе опции File (Файл) Print (Печать) Вы можете вывести содержимое окна просмотра на подключенный принтер.

    •  При выходе из SPSS, после использования команды меню file (Файл) Close (Закрыть) на экране появится вопрос, не хотите ли вы сохранить рассчитанные данные в файле данных SPSS (рекомендуемое расширение: .sav).

    1.gif

    Изображение: 

    26.2.2 Операционный модуль

    26.2.2 Операционный модуль


    Ещё одну возможность запуска готовой SPSS-программы представляет операционный модуль. Выполнение программы происходит при этом не с помощью диалога с SPSS, a как бы на заднем плане (в фоновом режиме), причём во время расчёта Вы можете выполнять на компьютере и другие задачи.


    Это очень удобно при выполнении ёмких процедур SPSS. Одной из таких процедур является, к примеру, кластерный анализ, в котором применяется иерархический метод (см. разд. 20.1) и необходимо обработать большое количество наблюдений.


    Такое большое для кластерного анализа количество наблюдений (n=300) включает файл psych.sav, который наряду с номерами наблюдений содержит переменные а, Ь, и с, описывающие значения оценки состояния пациентов психиатрического отделения по соответствующим шкалам: на шкале А отображается уровень невротичности, на шкале В — адаптация к обществу и на шкале С — целенаправленность действий. Патологическими отклонениями считаются высокие значения по шкале А и В и низкие по шкале С. Попытаемся на основании этих трёх шкал разделить пациентов на группы.

    •  Откройте файл psych.sav.

    •  Выберите в меню Analyze (Анализ) Classify (Систематизировать) Hierarchical Cluster... (Иерархический кластер)

    •  Перенесите переменные а, Ь, и с в поле тестируемых переменных.

    •  Минуя выключатель Statistics (Статистики) установите область решений от 2 до 6 кластеров.

    •  Через выключатель Method (Метод) активируйте стандартизацию значений (z-преобразование).

    •  Деактивируйте вывод диаграмм.

    Если Вы сейчас начнёте расчёт нажатием кнопки ОК, то программе для расчёта понадобится несколько минут. Мы произведём расчёт в операционном модуле, для чего нам сначала необходимо создать файл с соответствующим программным синтаксисом.

    •  Для этого в диалоговом окне Hierarchical Cluster Analysis (Иерархический кластерный анализ) щёлкните на переключателе Paste (Вставить), после чего в редактор синтаксиса будут внесены следующие команды SPSS:

     PROXIMITIES а Ьb с 
     /MATRIX OUT ("C:\TEMP\spssclus.tmp") 
     /VIEW= CASE 
     /MEASURE= SEUCLID 
     /PRINT NONE 
     /STANDARDIZE= VARIABLE Z  
     . CLUSTER 
     /MATRIX IN ("C:\TEMP\spssclus.tmp") ' 
     /METHOD BAVERAGE 
     /PRINT SCHEDULE CLUSTER(2,6) 
     /PLOTS NONE.  
     ERASE FILE= "C:\TEMP\spssclus.tmp". 
    •  Выбрав в меню File (Файл) Save as... (Сохранить как) Сохраните содержимое редактора синтаксиса, к примеру, в файле claSter.sps.

    •  Завершите работу в редакторе синтаксиса выбором команды меню File (Файл) Close (Закрыть)

    •  Из стартового меню рабочего стола запустите операционный модуль SPSS (SPSS 10.0 Production Facility) (см. рис. 26.2).


    Рис. 26.2: Меню Start (Пуск) рабочего стола операционной системы Windows 2000


    Откроется диалоговое окно операционного модуля SPSS (см. рис. 26.3).



    Рис. 26.3: Диалоговое окно SPSS Production Facility (Операционный модуль SPSS)

    •  Щёлкните на переключателе Add... (Добавить). Откроется диалоговое окно Attach SPSS Syntax File (Вложить файл синтаксиса SPSS).

    •  Выделите, сохранённый Вами, файл cluster.sps.

    •  Нажатием выключателя Open (Открыть) вернитесь в исходное диалоговое окно. Синтаксические файлы, открытые по ошибке, Вы можете удалить из диалогового окна при помощи выключателя Remove (Удалить). В поле Folder for output (Папка результатов) Вы можете указать место, куда должен быть помещён файл с результатами, рассчитанными операционным модулем.

    •  Укажите, например, в качестве папки для результатов C:\SPSSBOOK.

    •  Нажмите выключатель Edit (Править).


    Рис. 26.4: Диалоговое окно Attach SPSS Syntax File (Вложить файл синтаксиса SPSS)


    Откроется тестовый редактор, в котором Вы можете дополнительно отредактировать открытую SPSS-программу. В нашем примере при помощи команды GET следует указать ссылку на истинное расположение соответствующего файла данных. После ввода этой команды программа SPSS будет выглядеть следующим образом:

     GET FILE='С:\SPSSBUCH\psych.sav'. 
      PROXIMITIES а b с 
     /MATRIX OUT ("С:\WIN95\TEMP\spssclus.tmp")  
     /VIEW= CASE /MEASURE= SEOCLID 
      /PRINT NONE /STANDARDIZE:?  
     VARIABLE Z . 
     CLUSTER 
     /MATRIX IN ("C:\WIN95\TEMP\spssclus.tmp") 
     /METHOD BAVERAGE 
     /PRINT SCHEDULE CLUSTER(2,6) 
     /PLOTS NONE. 
      ERASE FILE= "C:\WIN95\TEMP\spssclus.tmp". 
    •  Посредством выбора меню сохраните программу, изменённую в текстовом редакторе File (Файл) Save (Сохранить) и закройте окно редактора.

    •  Теперь сохраните программу в форме операционной задачи. Для этого выберите в меню File (Файл) Save as... (Сохранить как)

      Откроется диалоговое окно Save as Production Job (Сохранить как операционную задачу). Для файла операционной задачи предлагается расширение .spp (см. рис. 26.5).

    •  Наберите имя файла C:\SPSSBOOK\clasjob.spp и покиньте диалоговое окно нажатием кнопки Save (Сохранить).

    •  Вновь вернувшись в диалоговое окно SPSS Production Facility (Операционный модуль SPSS) выберите в меню Run (Выполнить) Production Job (Операционная задача)

    Пока выполняется операционная задача, вы можете заняться другой работой. После окончания решения задачи Вы увидите, что результаты сохранены в формате файла окноа просмотра с расширением .spo под именем, соответствующим имени файла рассчитанной задачи.



    Рис. 26.5: Диалоговое окно Save as Production Job (Сохранить как операционную задачу)

    2.gif

    Изображение: 

    3.gif

    Изображение: 

    4.gif

    Изображение: 

    5.gif

    Изображение: 

    26.3 Объединение синтаксиса и диалогового режима

    26.3 Объединение синтаксиса и диалогового режима


    На нескольких примерах мы покажем то, как программный синтаксис можно с пользой внедрить в диалоговый режим SPSS. Во всех статистических процедурах, установки, произведенные в соответствующих диалоговых окнах, могут быть перенесены в редактор синтаксиса при помощи специального переключателя. При необходимости, Вы можете дополнительно отредактировать этот синтаксис для того, чтобы добиться выполнения некоторых задач, недоступных в режиме работы через диалоговые окна. Конечно же, для этого необходимо знать особенности подобных синтаксических возможностей.


    В качестве первого примера рассмотрим тест Стьюдента для зависимых выборок. Тест Стьюдента для зависимых выборок был использован в разделе 13.2 при сравнения двух


    переменных chol0 и chol1 из файла hyper.sav. Синтаксис, генерируемый программой после нажатия переключателя Paste (Вставить), выглядит следующим образом:

     T-TEST 
      PAIRS= chol0 WITH 
      chol1 (PAIRED) 
     /CRITERIA=CIN(.95)  
     /MISSING=ANALYSIS. 

    Если Вы хотите сравнить между собой не только переменные chol0 и chol 1, а и попарно сравнить все четыре переменные chol0, chol1, cho!6 и chol 12, то в итоге при помощи данного диалогового окна Вам придётся произвести шесть операций парного сравнения. Это довольно утомительный процесс и, если было бы необходимо попарно сравнить еще большее количество переменных, то он отнял бы у Вас довольно много времени.

    •  Программный синтаксис, отображаемый в редакторе синтаксиса, приведите к следующему виду

     T-TEST 
      PAIRS= chol0, chol1, chol6, chol12 
       /CRITERIA=CIN(.95) /MISSING=ANALYSIS  .
    •  Начните расчёт

    Попарно будут протестированы все переменные, перечисленные во вспомогательной команде PAIRS.


    Похожий пример возьмём из раздела 15.2, где для этих четырёх переменных производится расчёт корреляционной матрицы Пирсона. Вы увидите следующий исходный синтаксис

     CORRELATIONS 
     /VARIABLES=chol0 choll chol6 chol12  
      /PRINT=TWOTAIL SIG 
       /MISSING=PAIRWISE . 

    Если же Вы, допустим, желали бы рассчитать не совокупную корреляционную матрицу, а, например, проверить корреляции одной только переменной chol0 с переменными chol1, chol6 и chol 12, то Вам пришлось бы произвести три довольно объёмных расчёта. И в этом случае Вы можете очень эффективным способом отредактировать программный синтаксис, применив ключевое слово WITH:

     CORRELATIONS 
     /VARIABLES=chol0 WITH chol1 chol6 chol12  
      /PRINT=TWOTAIL SIG  
      /MISSING=PAIRWISE .

    Следующий пример касается трансформации данных, а именно, образования новых переменных при помощи некоторой формулы. С этой целью вновь вернёмся к файлу hyper.sav, точнее говоря — к переменным rrs0, rrs1, rrs6, rrs12, rrd0, rrd1, rrd6 и rrd12, отражающим состояние систолического и диастолического давлений в четыре различных момента времени. Образуем шесть новых переменных, которые будут отображать показатели трёх последующих моментов времени, выраженные в процентах от исходной величины (переменные rrs0 и rrd0). Для этого после выбора меню Transform (Трансформировать) Count (Подсчитать) необходимо задать в общей сложности шесть формул вида


    prrs1=(rrs1/rrs0)*100


    где prrs1 — в нашем примере, процентный показатель, соответствующий переменной rrs1, соотнесённой к исходной величине rrs0. Но если Вы будете в этом случае применять синтаксис, то, пожалуй, все можно сделать гораздо быстрее.

    •  Выберите в меню File (Файл) New (Новый) Syntax... (Синтаксический)

    •  В редакторе синтаксиса введите шесть следующих команд:

     COMPOTE prrsl=rrs1/rrs0*100. 
       COMPOTE prrs6=rrs6/rrs0*100. 
       COMPOTE prrsl2=rrs12/rrs0*100 
      . COMPOTE prrdl=rrdl/rrd0*100.  
       COMPOTE prrd6=rrd6/rrd0*100. 
       COMPOTE prrdl2=rrd12/rrd0*100. 
       EXECOTE. 
    •  Затем щёлкните на Edit (Правка) Select All (Выделить всё)

    •  Нажатием кнопки Run Current (Выполнить текущее задание) начните выполнение вышеуказанной последовательности команд.

    Для использования в дальнейших расчётах у Вас появятся шесть новых переменных, которые будут отображать искомые процентные показатели. Если Вы посмотрите на шесть приведенных команд COMPUTE, то наверняка заметите, что все они построены по одному и тому же принципу. Меняются только числители и знаменатели, на месте которых необходимо подставлять соответствующие переменные. Абсолютно такую же последовательность команд COMPUTE можно создать при помощи команд DO REPEAT — END REPEAT. Введите в редакторе синтаксиса следующую структуру команд:

    DO REPEAT p=prrs1,prrs6,prrs12,prrd1,prrd6,prrd12/ 
      z=rrs1,rrs6,rrs12,rrd1,rrd6,rrd12/ 
      a=rrs0,rrs0,rrs0,rrd0,rrd0,rrd0.  
       COMPOTE p=z/a*100.  
       END REPEAT . 

    Здесь р, z и а являются, так называемыми, переменными-заменителями для реальных переменных, используемых при вычислениях. Они обрабатываются слева направо согласно заданной команды COMPUTE. В рассмотренном примере затраты времени на ввод данных вряд ли стали меньше, но при наличии большего количества переменных в списках экономия времени будет уже ощутимой.

    26.4 Программы операций над матрицами

    26.4 Программы операций над матрицами


    Между двумя командами SPSS: MATRIX и END MATRIX можно поместить программу, позволяющую выполнять операции над матрицами. Для изучения этой возможности рассмотрим два примера.


    Пётр пошёл за покупками в магазин и принёс домой 2 литра молока, 10 яиц, 3 плитки шоколада и 5 стаканчиков йогурта, за что он заплатил в сумме 11,80 грн. На следующий день Юля купила 1 литер молока, 15 яиц, 2 плитки шоколада и 4 стаканчика йогурта за 10,01 грн. После этого Николай заплатил 15,07 грн за 3 литра молока, 12 яиц, 5 плиток шоколада и 3 стаканчика йогурта, и, в конце концов, Лене 2 литра молока, 20 яиц, 5 плиток шоколада и 5 стаканчиков йогурта обошлись в 15,74 грн. И никто из них не принёс при этом расчётный чек из магазина. Мама хочет узнать, сколько же стоит каждый продукт в отдельности. Пётр, который учится в пятом классе, предложил решение при помощи системы линейных уравнений:



    +


    10В


    +


    зс


    +


    5D


    1180


    А


    +


    15В


    +



    +


    4D


    1001


    ЗА


    +


    12В


    +



    +


    3D


    1507



    +


    20В


    +



    +


    5D


    1574


    Юля, ученица восьмого класса, привила эти уравнения к матричному виду:


    Николай записал эту матрицу в символьной форме:


    АХ=С


    и соответственно


    X = А-1 С


    Юля решает эту задачу в SPSS, для чего и пишет следующую программу:

    MATRIX. 
     COMPUTE a={2 ,10 ,3,5;1,15,2,4;3,12,5,3;2,20,4,5}.  
     COMPUTE с={1180,-1001,-1507;1574} . 
      COMPUTE x=INV(a)*c. 
      PRINT x.  
     END MATRIX. 
    •  Чтобы выполнить эту программу выберите в меню File (Файл) Open (Открыть) Syntax... (Синтаксический)

    •  Выберите тип файлов Syntax (*.sps) (Синтаксис). На прилагаемом учебном диске найдите файл sabine.sps. В окне редактора синтаксиса появится необходимая нам программа.

    •  Выберите теперь Edit (Правка) Select All (Выделить всё)

    •  Начните выполнение программы нажатием кнопки Run Current (Выполнить текущее задание).

    В окне просмотра появятся результаты расчёта: х


    119,0000000


    26,0000000


    134,0000000


    56,0000000


    Теперь видно, что один литр молока стоит 1,19 грн, одно яйцо 0,26 грн, одна плитка шоколада 1,34 грн и один стаканчик йогурта 0,56 грн. Для написания программ, использующих операции с матрицами, существует множество различных инструкций и функций. Для выяснения их смысла, обращайтесь, пожалуйста, к первоисточнику по SPSS.


    В следующем примере мы хотим запрограммировать начальный этап факторного анализа, а именно, рассчитать собственные значения корреляционной матрицы.

    •  Для этого примера используйте данные из файла ausland.sav, рассмотренного в гл. 19, и наберите в редакторе синтаксиса следующую SPSS-программу:

     CORRELATIONS VARIABLES=A1 
      TO A15/MATRIX=OUT (*) . 
     MATRIX. 
     MGET FILE=*/TYPE=CORR. 
     CALL eigen(cr,evec,ewerte) . 
     PRINT ewerte. 
     END MATRIX. 
    •  Выберите в меню Edit (Правка) Select All (Выделить всё)

    •  Начните выполнение программы нажатием кнопки со значком Run Current (Выполнить текущее задание).

    После этого в окне просмотра будут показаны собственные значения; первые пять из них выглядят следующим образом:


    EWERTE


    5,146239283


    1,945444977


    1,414941459


    ,990117365


    ,935705222


    Вычисленные собственные значения полностью соответствуют результатам, полученным в гл. 19.

    6.gif

    Изображение: 

    26.5 Сценарии

    26.5 Сценарии


    В SPSS интегрирован язык сценариев (Visual Basic), предоставляющий некоторые возможности для автоматизации вычислительных процессов. Степень использования сценариев зависит от уровня Ваших познаний и может быть разбита на три уровня:


    1. Использование стандартных сценариев, имеющихся в SPSS: это может сделать каждый пользователь, так как в этом случае не требуется ни каких навыков программирования.


    2. Модифицирование имеющихся сценариев: для этого необходимо располагать некоторыми базовыми знаниями.


    3. Написание собственных сценариев: для этого необходимы навыки программирования на Visual Basic.


    В этой книге мы ограничимся только те, что при помощи примера покажем применение сценариев, поставляемых вместе с SPSS. Изложение материала по написанию собственных сценариев и в особенности изучение языка Visual Basic, очень сильно увеличило бы объём данной вводной книги.


    Кроме того, использование сценариев при работе с SPSS только начинает набирать обороты и сценарии поставляемые вместе с SPSS кажутся ещё не слишком продвинутыми. Однако, следить за сообщениями фирмы SPSS всё же полезно; время от времени в журнале для пользователей "SPSS direct" представляются новые сценарии, которые можно интегрировать в программу.

    26.5.1 Применение сценария

    26.5.1 Применение сценария


    Для изучения принципа работы со сценариями должно быть достаточно рассмотрения только одного сценария, который в сводных таблицах меняет идентификатор Sig на р.

    •  Откройте файл hyper, sav.

    •  Выберите в меню Analyze (Анализ) Compare Means (Сравнить средние значения) Paired-Samples T Test... (Т-тест для спаренных выборок)

    •  Переменным chol0 и chol1 присвойте статус спаренных переменных. Основные результаты теста отображены в следующей таблице:

    Paired Samples Test


     (Тест спаренных выборок)



    Paired Differences


    t


    Df


    Sig. (2-sided) Значи-мость (двухсто ронняя))


    Mean (Сред-


    значе-ние)


    Std. Deviation (Станда- ртное откло- нение)


    Std. Error Mean (Стандар-тная ошибка среднего значения)


    95% Confidence Interval of the Difference (95 %-й доверительный интервал разности)


    Lower (Ниж-ний предел)


    Upper (Верх-ний предел)


    Pair1 (Пар а1)


    Chole-sterin, Ausga- ngswert -Cholesterin, nach 1 Monat (Холе- стирин, исходный показатель -холе- стерин, спустя 1 месяц)


    -1,93


    26,09


    1,98


    -5,83


    1,98


    -,974


    173


    ,332

    •  В окне просмотра один раз щёлкните на сводной таблице.

    •  Выберите в меню. Utilities (Утилиты) Run Script... (Выполнить сценарий) Откроется диалоговое окно Run Script (Выполнение сценария).


    Рис. 26.6: Диалоговое окно Run Script (Выполнение сценария)

    •  В директории PROGRAM F1LES\SPSS\SCRIPTS просмотрите список сценариев, предлагаемых в SPSS.

    •  Выделите сценарий с именем Change sig to p.

    •  И нажатием кнопки Run (Выполнить), пошлите его на исполнение. В окне просмотра появится изменённая сводная таблица.

    Paired Samples Test


     (Тест спаренных выборок)



    Paired Differences







    Std. Error


    95% Confidence Interval of the



    Mean (Среднее значение)


    Std. Deviation (Станда- ртное откло- нение)


    Mean (Стандар-тная ошибка среднего значения)


    Difference (95 %-й доверительный интервал разности)


    t


    Df


    Р =


    Lower (Ниж- ний предел)


    Upper (Верх- ний предел)


    Pair 1


    Cholesterin,










    (Пар а1)


    Ausga- ngswert -Choles- terin, nach 1 Monat











    (Холе- стирин,


    -1,93


    26,09


    1,98


    -5,83


    1,98


    -,974


    173


    ,332



    исходный











    показатель -











    холе- стерин, спустя 1 месяц)










    Действие остальных сценариев рассмотрите, пожалуйста, самостоятельно.

    7.gif

    Изображение: 

    26.5.2 Автоматические сценарии

    26.5.2 Автоматические сценарии


    Специальной формой сценариев являются, так называемые, автоматические сценарии. Если они активированы, то автоматически воздействуют на компоновку выводимых результатов некоторых процедур. Для изучения работы автоматических сценариев рассмотрим пример, в котором мы будем управлять компоновкой корреляционной матрицы.

    •  Откройте файл hyper.sav.

    •  Выберите в меню Edit (Правка) Options... (Параметры)

    •  В диалоговом окне Options (Параметры) перейдите на регистрационную карту Scripts (Сценарии). Вам будет показан список автоматических сценариев, хранящихся в директории PROGRAM FILES\SPSS\SCRIPTS.


    Рис. 26.7: Доступные автоматические сценарии

    •  Выберите подходящий вид расчёта и просмотрите результаты действия этого авто-сценария.

    8.gif

    Изображение: 

    26.5.3 Редактор сценариев

    26.5.3 Редактор сценариев


    Если у вас появилось желание модифицировать имеющиеся сценарии или написать новые, воспользуйтесь редактором сценариев. Мы ограничимся только открытием и просмотром одного существующего сценария в редакторе сценариев.

    •  Выберите в меню File (Файл) Open (Открыть) Script... (Сценарий)

    Выберите тип файлов *.sbs (SPSS-сценарий) и выберите в директории PROGRAM FILES\SPSS\SCRIPTS сценарий, очищающий окно просмотра результатов или навигатор (то есть устраняющий примечания) (Clean navigator.sbs).

    •  Выделите этот сценарий и подтвердите выбор нажатием Open (Открыть). Редактор сценариев будет выглядеть так, как изображено на рисунке 26.8.


    Рис. 26.8: Редактор сценариев Просмотрите этот сценарий, чтобы иметь представление о языке сценариев.

    9.gif

    Изображение: 

    Глава 27. Нововведения в 11-ой версии SPSS

    Глава 27. Нововведения в 11-ой версии SPSS

    1. Использование программы SPSS в качестве ядра для современных маркетинговых исследований

    Использование программы SPSS в качестве ядра для современных маркетинговых исследований


    Новая, 11-ая версия SPSS появилась в мае этого года, разумеется в английской локализации. Разработчики пакета сочли, что пользовательский интерфейс в последней версии уже является достаточно совершенным, поэтому подавляющее большинство изменений в новой версии связаны с усовершенствованием или добавлением статистических процедур, которые более полно обеспечивают потребности пользователей в современных методах обработки информации, возникающей в результате маркетинговых исследований, а также исследований в области социологии и психологии.


    Основное внимание уделено расширению функциональных возможностей специальных модулей SPSS, таких как SPSS Categories, SPSS Advanced Models и другие. Собственно расширение программного наполнения специальных модулей и делает новую версию программы, которая уже успела стать стандартом в области обработки данных, еще более привлекательной для пользователей с весьма широким диапазоном деловых и научных интересов.


    Если раньше данная программа широко использовалась в таких «классических» областях науки и бизнеса, как биология, социология, психология, управление качеством производства, общие маркетинговые исследования и экономическое прогнозирование, то сейчас новую версию можно с успехом применять в таких актуальных специализированных областях, как маркетинг, основанный на использовании баз данных, Data Mining, Data Warehousing и другие. Особенного внимания заслуживает тот факт, что изменения, внесенные в модуль SPSS Regression Models, позволяют использовать SPSS при решении задач управления лояльностью клиентов (CRM). Отметим, что данная тема представляет собой один из наиболее популярных разделов современного практического маркетинга.


    Отдельного упоминания заслуживает то факт, что большинство наиболее популярных статистических методов прогнозирования, включенных в модуль SPSS Regression Models, позволяют работать с большим объемом недоступной информации. В математике в таком случае говорят о повышении робастности метода, то есть его устойчивости по отношению к неопределенностям и существенным отклонениям от диапазона параметров, для которого разрабатывался метод. Такое повышение робастности весьма желательно в маркетинговых исследованиях и в социологии, где всегда присутствует большой объем отсутствующих или недостоверных данных. Небесполезно данное улучшение и в области управления качеством, где всегда существует компромисс между подробностью информации о производственном процессе и его усложнением.


    Изменения коснулись и техники вычислений. Подобные изменения не сказываются на интерфейсе и прочих видимых функциональных особенностях программы, но однако они затрагивают вычислительное ядро, которое используется в ходе проведения конкретных расчетов. Здесь основное внимание было сосредоточено на повышении эффективности статистических алгоритмов, в некоторых случаях эффективность повысилась до 50 раз.


    Эффективность одной из наиболее часто используемых статистических процедур, общей линейной модели (GLM), возросла в 10 раз, что несомненно скажется на обшей производительности при выполнении статистических исследований, особенно в области обработки больших массивов экспериментальных данных, которые возникают, например, в решении задач управления качеством, социологии и медицины.


    В два раза выросла скорость выполнения самых массовых статистических процедур, таких как расчет дисперсии и вычисление средних. Можно смело сказать, что пользователь, который нуждается только в самых простых статистических методах, заметит именно двукратное повышение эффективности работы программы.


    Особенно повышение быстродействия чувствительно в случае, когда речь идет о методах кластерного анализа, широко используемого в маркетинге, социологии, психологии и медицине, которые иногда требовали многочасовых расчетов даже на мощных компьютерах, для чего в предыдущих версиях SPSS был предусмотрен пакетный режим выполнения задач.


    Следует отметить, что только одно столь существенное повышение производительности уже может быть основанием для выпуска новой версии программы. Снижение затрат времени, которое обеспечивает новая версия SPSS, позволяет более интенсивно использовать эту программу в практических маркетинговых исследованиях, анализировать большее количество вариантов, обрабатывать более широкие и представительные выборки. В результате издержки, связанные с исследованиями падают, а степень достоверности информации повышается.


    Изменения, которые были внесены в изобразительную и презентационную части программы в основном затрагивают гибкость отображения результатов статистической обработки данных и включают несколько более показательных видов графиков. Например, при выводе информации о приближении данных с помощью выбранного метода аппроксимации, на графике приводится информация о том насколько хорошо полученное приближение. Такая дополнительная возможность может оказаться весьма полезной для не слишком опытных пользователей или пользователей не имеющих и не нуждающихся в глубокой математической подготовке. В целом изменения, которым подверглась графическая и презентационная часть программы направлены на упрощение работы и облегчение интерпретации результатов вычислений неподготовленными пользователями.


    Рассматривая изменения, внесенные в техническую часть программы, необходимо упомянуть, что новая версия SPSS способна конвертировать базовые и переносимые файлы программы SAS (www.sas.com), своего наиболее мощного конкурента в области статистической обработки данных. Очень многие массивы общедоступной информации, имеющие отношения к маркетинговым исследованиям и социальной статистике, например данные по исследованию уровня жизни США и других стран (в том числе и России — знаменитый RLMS, www.unc.edu), проводимые американскими исследователями имеют формат переносимых файлов SAS.


    Кроме того, следуя тенденции к превращению SPSS в мощное средство для проведения маркетинговых исследований и анализа разнородной информации, в 11-ой версии существенно расширено удобства доступа к различным форматам баз данных. В список поддерживаемых форматов теперь входят Sybase 11 и 12; Infomix 7.3+, 9.14: Infomix 2000 (9.20); UDB (DB2 6.1 и 7.1); SQL Server 2000; Oracle 8.06; Oracle! Releases 2 and 3 (8.1.6, 8.1.7). Улучшена связь с Microsoft Data Access pack. Более мощным стал язык запросов, появилась возможность на уровне запроса формировать и имена переменных и метки, что облегчает интерпретацию результатов и повышает их наглядность. Повысилась гибкость и функциональные возможности мобильных таблиц — это изменение затрагивает модуль SPSS Tables.


    Если подытожить все вышесказанное, то можно сделать вывод, что переход конкретного пользователя на новую версию SPSS оправдан в том случае, когда этот пользователь нуждается в расширении своего арсенала методов статистической обработки данных, реализации наиболее современных тенденций в маркетинговых исследованиях, испытывает проблемы с полнотой информации, на основании которой необходимо сделать надежные и достоверные выводы, а также сталкивается с жесткими временными ограничениями, накладываемыми на процесс проведения исследований. Кроме того, работа с 11-ой версией SPSS снимает часть проблем, с которыми сталкиваются пользователи на начальных этапах освоения сложных методов статистического анализа, применяемого в широком спектре областей деятельности.


    Переход к новой версии желателен, если пользователь собирается более широко применять современные методы анализа данных в ходе своей деятельность и уже имеет опыт использования аппарата математической статистики.


    И, наконец, переход к новой версии не столь необходим, если в ходе деятельности пользователя возникает потребность в применении только самых простых статистических методах, а интерпретация результатов не вызывает особенных проблем. Кроме того, необходимо отметить, что предыдущая версия SPSS 10.1 имеет русскую локализацию, а выход локализованной 11-ой версии может стать весьма отдаленной перспективой.

    2. Конкретные нововведения в SPSS 11

    Конкретные нововведения в SPSS 11


    Приведем краткий список конкретных изменений, внесенных в вычислительную часть программы.


    Следуя намеченному выше плану, начнем с нововведений в специализированные модули программы.

    •  В модуле Advanced Models добавлена новая статистическая процедура Linear mixed models (смешанные линейные модели), также известная как Heirarchical Linear Models (иерархические линейные модели), которая используется для получения наиболее точной прогнозирующей модели при работе с вложенной структурой данных. Гибкость этой модели позволяет существенно расширить применимость методов прогноза в решении задач экономического анализа и маркетинга: ANOVA фиксированными эффектами Model, Randomized Complete Blocks Design, Split-Plot Design, Purely Random Effects Model, Random Coefficient Model, Multilevel Analysis, модель безусловного линейного роста, модель линейного роста с a person-level covariate, Repeated Measures Analysis and Repeated Measures Analysis with time-dependent covariate. Кроме того, данная модель позволяет анализировать данные с повторными измерениями, включая неполные повторные измерения, когда объем информации изменяется от объекта к объекту.

    •  Внедрена новая процедура Descriptive ratio statistics (Дескриптивные статистики отношений)

    •  Использование медианы в качестве статистики при агрегировании данных, отсутствие данной возможности вызывало удивление у опытных пользователей SPSS.

    •  Метод многомерной логистической регрессии теперь можно использовать для построения психологического профиля клиента при проведении маркетинговых исследований.

    •  Улучшена масштабируемость и повышена производительность методов многомерной логистической регрессии (Multinomial Logistic Regression), иерархического Кластерного анализа (Hierarchical Cluster Analysis ). Скорость выполнения иерархического кластерного анализа возросла от 5 до 50 раз в зависимости от типа вычислений. А скорость выполнения мультиноминальной логистической регрессии и Общих Линейных Моделей (General Linear Models ) увеличилась в 10 раз

    •  Процедуры MLR, PLUM, GLM и MIXED позволяют сохранять предсказываемые значения даже при наличии пропущенных значений. Данные процедуры также можно использовать для определения целевых групп клиентов в маркетинговых исследованиях.

    •  Усовершенствована процедура категориальной регрессии (CATREG): возможность преобразования переменных, возможность обработки пропущенных значений, улучшение вывода таблиц и другие

    •  Усовершенствована процедура преобразования данных с использованием монотонных и немонотонных сплайнов с назначаемой пользователем степенью и числом узлов

    В технической и презентационной части программы произошли следующие изменения:

    •  Для визуализации качества построенного приближения данных используется новый вид графиков

    •  Для получения большего объема данных о корреляционных связях введена новая форма выходных таблиц

    •  В выводимой информации появилась возможность использования длинных строк

    •  Расширились возможности задания вариантов обработки пропущенных значений

    •  Появились дополнительные возможности сохранения файлов данных

    •  В OLAP-кубах появилась статистика процентного изменения.

    •  Повышена защита данных путем шифрования при обмене между клиентом SPSS для Windows и сервером SPSS Server.

    •  Усовершенствован конструктор чтения баз данных (Database Wizard).

    •  Возможность делать выборку при импорте данных через ODBC.

    •  Возможность доступа к данным только для чтения.

    •  Не требуется login при доступе к данным MS Access.

    •  Улучшена графика и возможности работы с таблицами в SPSS Viewer

    Приложение. Обзор процедур SPSS

    Приложение 


    Обзор процедур SPSS


    В нижеследующей таблице приводятся команды SPSS, при помощи которых через синтаксис могут быть вызваны различные статистические процедуры, а также соответствующие им опции меню, необходимые при пользовании диалоговыми окнами SPSS for Windows. Кроме того, в таблице указывается, к какому модулю относится та или иная процедура:


    В = Basemodule (Базовый модуль)


    R = Regression Models (Регрессионные модели)


    А = Advanced Models (Дополнительные модели)


    В последней колонке указывается вариант представления результатов процедуры в окне просмотра: новый — с применением новой техники сводных таблиц или же старый соответствующий ещё традиционной форме листинга больших ЭВМ (SPSS classic).


    Команда SPSS


    Опция меню


    Модуль


    Вариант представ- ления


    AGGREGATE


    Data (Данные)


    В


    новый


    Aggregate... (Группировать, Агрегировать данные)


    ALSCAL


    Analyze (Анализ)


    В


    старый *)


    Scale (Масштабирование, Анализ шкал)


    Multidimensional Scaling... (Многомерное масштабирование, Многомерное шкалирование)


    CLUSTER


    Analyze (Анализ)


    В


    новый


    Classify (Систематизировать, Классификация)


    Hierarchical Cluster... (Иерархический кластерный анализ, Иерархическая кластеризация)


    CNLR


    Analyze (Анализ)


    R


    старый


    Regression (Регрессия)


    Nonlinear. . .(Нелинейная)


    CORRELATIONS


    Analyze (Анализ)


    В


    новый


    Correlate (Корреляция, Корреляции)


    Bivariate... (Двумерная, Парные)


    COXREG


    Analyze (Анализ)


    А


    старый *)


    Survival (Выживание, Выживаемость)


    Сох Regression... (Регрессия Кокса)


    Analyze (Анализ)


    Survival (Выживание, Выживаемость)


    Cox w/Time-Dep Cov... (Кокс с ковариациями, зависящими от времени, Кокс с ковариатами, зависящими от времени)


    CROSSTABS


    Analyze (Анализ)


    В


    новый


    Descriptive Statistics (Дескриптивные статистики)


    Crosstabs... (Таблицы сопряженности)


    CURVEFIT


    Analyze (Анализ)


    В


    старый


    Regression (Регрессия)


    Curve Estimation... (Оценка с помощью кривой. Подгонка кривых)


    DESCRIPTIVES


    Analyze (Анализ)


    В


    новый


    Descriptive Statistics (Дескриптивные статистики)


    Descriptives... (Дескриптивные статистики)


    DISCRIMINANT


    Analyze (Анализ)


    в


    новый


    Classify (Систематизировать, Классификация)


    Discriminant (Дискриминационный анализ, Дискриминантный анализ)


    EXAMINE


    Analyze (Анализ)


    в


    новый


    Descriptive Statistics (Дескриптивные статистики)


    Explore... (Исследование данных. Исследовать)


    FACTOR


    Analyze (Анализ)


    в


    новый


    Data Reduction (Упрощение данных, Снижение размерности)


    Factor... (Факторный анализ)


    FREQUENCIES


    Analyze (Анализ)


    в


    новый


    Descriptive Statistics (Дескриптивные статистики)


    Frequencies... (Частоты)


    GENLOG


    Analyze (Анализ)


    А


    старый *)


    Loglinear (Логлинейная, Логлинейныей анализ)


    General... (Общий)


    Analyze (Анализ)


    Loglinear (Логлинейная, Логлинейный анализ)


    Logit (Логит)


    GLM


    Analyze (Анализ)


    А


    новый


    General Linear Model (Общая линейная модель)


    Multivariate... (Многомерная, ОЛМ-Многомерная)


    Analyze (Анализ)


    А


    General Linear Model (Общая линейная модель)


    Repeated Measures... (ОЛМ-Повторные измерения)


    GRAPH


    Graphs (Графики)


    В


    HILOGUNEAR


    Analyze (Анализ)


    А


    старый


    Loglinear (Логлинейная, Логлинейный анализ)


    Model Selection... (Выбор модели, Подбор модели)


    IGRAPH


    Graphs (Графики)


    В


    Interactive (Интерактивные)


    KM


    Analyze (Анализ)


    А


    старый *)


    Survival (Выживание, Выживаемость)


    Kaplan-Meier... (Каплан-Майер, Каплан-Мейер)


    LOGISTIC


    Analyze (Анализ)


    R


    старый


    REGRESSION


    Regression (Регрессия)


    Binary Logistic... (Бинарная логистическая, Логистическая)


    MATRIX


    Только через синтаксис программы


    В


    старый


    MEANS


    Analyze (Анализ)


    В


    новый


    Compare Means (Сравнить средние значения, Сравнение средних)


    Means... (Средние значения, Среднее)


    MULT RESPONSE


    : Analyze (Анализ)


    В


    старый


    Multiple Response (Множественные ответы)


    NLR


    Analyze (Анализ)


    R


    старый


    Regression (Регрессия)


    Nonlinear. . .(Нелинейная)


    NOMREG


    Analyze (Анализ)


    R


    новый


    Regression (Регрессия)


    Multinomial Logistic... (Многозначная логистическая, Мультиноминальнач регресссия)


    NONPAR CORR


    Analyze (Анализ)


    В


    новый


    Correlate (Корреляция)


    Bivariate... (Двумерная, Парные)


    NPAR TESTS


    Analyze (Анализ)


    В


    новый


    Nonparametric Tests (Непараметрические тесты, Нерараметрические критерии)


    OLAP CUBES


    Analyze (Анализ)


    В


    новый


    Reports (Отчёты)


    OLAP Cubes... (OLAP кубы)


    ONEWAY


    Analyze (Анализ)


    В


    новый


    Compare Means (Сравнить средние значения, Сравнение средних)


    One-Way ANOVA... (Однофакторный ANOVA, Однофакторный дисперсионный анализ)


    PARTIAL CORR


    Analyze (Анализ)


    В


    старый


    Correlate (Корреляция, Корреляции)


    Partial (Частичная, Частные)


    PLUM


    Analyze (Анализ)


    А


    новый


    Regression (Регрессия)


    Ordinal... (Порядковая)


    PROBIT


    Analyze (Анализ)


    R


    старый


    Regression (Регрессия)


    Probit... (Пробит)


    PROXIMITIES


    Analyze (Анализ)


    В


    новый


    Correlate (Корреляция, Корреляции)


    Distances... (Дистанции, Расстояния)


    QUICK CLUSTER


    Analyze (Анализ)


    В


    новый


    Classify (Систематизировать, Классификация)


    K-Means Cluster... (Анализ кластерных центров, Кластеризация К-средним)


    RANK


    Transform (Трансформация, Преобразовать)


    В


    новый


    Rank Cases... (Создать иерархию, Ранжирование наблюдений)


    REGRESSION


    Analyze (Анализ)


    В


    новый


    Regression (Регрессия)


    Linear. . . (Линейная)


    RELIABILITY


    Analyze (Анализ)


    В


    старый


    Scale... (Масштабирование, Анализ шкал)


    Reliability Analysis... (Анализ пригодности, Анализ надежности)


    REPORT


    Analyze (Анализ)


    В


    старый *)


    Reports (Отчёты)


    Report Summaries in Rows... (Итоговый отчёт по строкам, Итоги по строкам)


    Analyze (Анализ)


    Reports (Отчёты)


    Report Summaries in Columns... (Итоговый отчёт по столбцам, Итоги по столбцам)


    SUMMARISE


    Analyze (Анализ)


    В


    новый


    Reports (Отчёты)


    Case Summaries... (Итоговые показатели случаев, Итоги по наблюдениям)


    SURVIVAL


    Analyze (Анализ)


    А


    старый *)


    Survival (Выживание, Выживаемость)


    Life Tables... (Таблицы жизни, Таблицы дожития)


    TABLES


    Analyze (Анализ)


    Tables


    новый


    Custom Tables (Индивидуальные таблицы, Настраиваемые таблицы)


    T-TEST


    Analyze (Анализ) Compare Means (Сравнить средние значения, Сравнение средних) Independent-Samples T Test... (Т-тест независимых выборок, Т-критерий для независимы Analyze (Анализ)

    Compare Means (Сравнить средние значения, Сравнение средних) Paired-Samples T Test... (Т-тест спаренных выборок, Т-критерий для парных выборок)


    В


    новый


    UNIANOVA


    Analyze (Анализ)

    General Linear Model (Общая линейная модель)

    Univariate... (ОЛМ-Одномерная)


    В


    новый


    VARCOMP


    Analyze (Анализ)

    General Linear Model (Общая линейная модель)

    Variance Components... (Компоненты дисперсии)


    А


    новый


    WLS


    Analyze (Анализ) Regression (Регрессия) Weight Estimation... (Весовая оценка. Взвешенная)


    R


    старый


    2SLS


    Analyze (Анализ) Regression (Регрессия)

    2-Stage Least Squares... (2-х ступенчатые наименьшие квадраты, Двух этапный МНК )


    R


    старый


    Процедуры, отмеченные знаком *), описываются в книге: "SPSS. Методы исследования рынка и мнений" .