Материал: FTTLabRab

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

2.2 Элементы Maple V

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

Задания вводятся после символа ">", который автоматически появляется при открытии нового документа, и являются комбинацией стандартных операторов Maple таких как операторы присвоения, цикла, определения типа, условные операторы (принципиально не отличающиеся от соответствующих операторов других алгоритмических языков) и специфических команд Maple типа: expand, simplify, normal, evalf, int, diff и т.д. Каждое задание должно заканчиваться символом ";" (либо ":", если мы не хотим чтобы результат выполнения данного задания печатался на экране дисплея, например, это могут быть какие-то промежуточные выражения). Сформулировав задание и закончив его символом ";", мы нажимаем клавишу "Enter". Maple приступает к выполнения данного задания и распечатывает его результат на дисплее. После этого автоматически появляется символ новой командной строки ">" и Maple готов к принятию очередного задания.

Maple содержит богатую систему Help с многочисленными примерами. Нет никакой необходимости дублировать ее в этом кратком введении. Однако рекомендуем не откладывать надолго изучение (с использованием Help) таких важных функций Maple как expand, collect, simplify, normal (используются для упрощения выражений); evalf (численная оценка); solve (решение уравнений); int и diff (интегрирование и дифференцирование); series (разложение в ряды); plot (построение графиков). Полезным будет и знакомство с функциями: array, coeff, convert, degree, denom, evalc, ifactor, limit, map, normal numer, op, product, subs, sum, table и type. Это не полный список функций Maple, но он наиболее употребительный. Maple содержит много встроенных математических функций, таких как: sin, cos, tan, exp, ln, GAMMA, Zeta и binomial.

Кроме вышеперечисленных функций общего назначения Maple содержит богатую библиотеку специализированных пакетов. Приведем их список: Detools - differential equations tools, Domains - create domains of computation, GF -Galois Fields, GaussInt - Gaussian Integers, LREtools - manipulate linear recurrence relations, combinat - combinatorial functions, combstruct - combinatorial structures, difforms - differential forms, finance - financial mathematics, genfunc - rational generating functions, geometry - Euclidean geometry, grobner - Grobner bases, group - permutation and finitely-presented groups, inttrans - integral transforms, liesymm - Lie symmetries, linalg - Linear algebra, logic - Boolean logic, networks - graph networks, numapprox - numerical approximation, numtheory - number theory, orthopoly - orthogonal polynomials, padic - p-adic numbers, plots - graphics package, plottools - basic graphical objects, powseries - formal power series, process - (Unix)-multi-processing, simplex - linear optimization, stats - statistics, student - student calculus, sumtools - indefinite and definite sums, tensor - tensor computations and General Relativity, totorder - total orders on names. Жирным шрифтом выделены имена пакетов. Каждый из них содержит большое количество собственных функций. С содержанием пакетов linalg, plots и plottools мы познакомимся в следующем разделе.

В заключение некоторые рекомендации по использованию меню Help. Выбрав на панели инструментов окно Help и щелкнув на нем кнопкой мыши, вы открываете меню. Если вы это сделали впервые, то советуем выбрать из меню строку Contents (опять же щелчком мыши) и познакомиться с разделами содержания. В следующий раз вы уже будете знать где какую информацию можно найти. Если же вы входите в Help с конкретным вопросом, то из меню следует выбрать строку Topic Search. При этом открывается диалоговое окно, где вы набираете первые буквы интересующей вас темы. Maple в этом же диалоговом окне распечатает названия всех тем, начинающихся с набранных букв. Двойным щелчком на нужной теме вы открываете информацию о ней. Другие возможности вы обнаружите и освоите в процессе работы.

Наиболее прямой способ овладеть основами программирования в системе Maple - это подробно разобрать конкретную программу. К этому мы и приступим в следующем разделе.

3 Выполнение работы

Работа выполняется на компьютерах класса не ниже IBM P166, RAM 16 MB с установленной программой Maple V и файлом построения зоны Бриллюэна "Brill1.mws". Самостоятельно студенты определяют базисные векторы заданных решеток, подставляют их значения в программу, анализируют и переносят в отчет результаты вычисления.

3.1 Задание

Освоить элементы программы Maple V, изучить конструкцию файла "Brill1.mws"; Начертить в отчете элементарные ячейки и указать базисные векторы решеток:

1) Примитивная кубическая;

2) ОЦК;

3) ГЦК;

4) Гексагональная примитивная;

5) Гексагональная плотноупакованная.

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

3.2 Построение зоны Бриллюэна

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

> restart: with(linalg); это первое задание, которое состоит из оператора restart, очищающего память от предыдущих запусков программы и оператора with(linalg);, с помощью которого подключается библиотека "Линейная алгебра". Поскольку оператор кончается символом ";", его выполнение сопровождается печатью двух предупреждающих сообщений (новое определение нормы и следа) и списка функций доступных после подключения пакета. Нам понадобятся такие функции пакета: crossprod - векторное произведение векторов, innerprod - скалярное произведение векторов, scalarmul - умножение векторного объекта на скаляр, matadd - матричное сложение, vector - задание вектора, norm - вычисление нормы. Конкретную информацию по каждой из этих тем вы можете получить уже сейчас, выбрав в меню Help строку Topic Search и осуществив поиск.

Warning, new definition for norm

Warning, new definition for trace

[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, ffgausselim, fibonacci,

forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix,

grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite,

indexfunc, innerprod, intbasis, inverse, ismith, issimilar,

iszero, jacobian, jordan, kernel, laplacian, leastsqrs, linsolve,

matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm,

normalize, nullspace, orthog, permanent, pivot, potential,

randmatrix, randvector, rank, ratform, row, rowdim, rowspace,

rowspan, rref, scalarmul, singularvals, smith, stack, submatrix,

subvector, sumbasis, swapcol, swaprow, sylvester, toeplitz, trace,

transpose, vandermonde, vecpotent, vectdim, vector, wronskian]

>with(plots);with(plottools); - здесь подключены библиотеки plots и plottools, с помощью которых осуществляется построение полиэдра.

[animate, animate3d, changecoords, complexplot, complexplot3d,

conformal, contourplot, contourplot3d, coordplot, coordplot3d,

cylinderplot, densityplot, display, display3d, fieldplot,

fieldplot3d, gradplot, gradplot3d, implicitplot, implicitplot3d,

inequal, listcontplot, listcontplot3d, listdensityplot, listplot,

listplot3d, loglogplot, logplot, matrixplot, odeplot, pareto,

pointplot, pointplot3d, polarplot, polygonplot, polygonplot3d,

polyhedraplot, replot, rootlocus, semilogplot, setoptions,

setoptions3d, spacecurve, sparsematrixplot, sphereplot, surfdata,

textplot, textplot3d, tubeplot]

[arc, arrow, circle, cone, cuboid, curve, cutin, cutout, cylinder,

disk, dodecahedron, ellipse, ellipticArc, hemisphere, hexahedron,

hyperbola, icosahedron, line, octahedron, pieslice, point,

polygon, rectangle, rotate, scale, semitorus, sphere, stellate,

tetrahedron, torus, transform, translate]

> node:=proc(G1,G2,G3) local v,A1,A2,A3,r1,r2,r3,pr,p,k; v:=innerprod(G1,crossprod(G2,G3)); A1:=crossprod(G2,G3);A2:=crossprod(G3,G1);A3:=crossprod(G1,G2);r1:=G1[1]^2+G1[2]^2+G1[3]^2;r2:=G2[1]^2+G2[2]^2+G2[3]^2;r3:=G3[1]^2+G3[2]^2+G3[3]^2;pr:=matadd(A1,A2,r1,r2);p:=matadd(pr,A3,1,r3);k:=scalarmul(p,-1/v/2);RETURN(eval(k)) end; - эта процедура по трем векторам обратной решетки (G1,G2,G3) определяет точку пересечения плоскостей, задаваемых этими векторами (см. Раздел 2.1).

node := proc(G1, G2, G3)

local v, A1, A2, A3, r1, r2, r3, pr, p, k;

v := innerprod(G1, crossprod(G2, G3));

A1 := crossprod(G2, G3);

A2 := crossprod(G3, G1);

A3 := crossprod(G1, G2);

r1 := G1[1]^2 + G1[2]^2 + G1[3]^2;

r2 := G2[1]^2 + G2[2]^2 + G2[3]^2;

r3 := G3[1]^2 + G3[2]^2 + G3[3]^2;

pr := matadd(A1, A2, r1, r2);

p := matadd(pr, A3, 1, r3);

k := scalarmul(p, - 1/2*1/v);

RETURN(eval(k))

end

Далее задаются базисные векторы элементарной ячейки и вычисляется ее объем. Например, для ГЦК решетки (рисунок 1):

Рисунок 1 - Определение базисных векторов в ГЦК решетке.

>a1:=vector(3,[0,1/2,1/2]);a2:=vector(3,[1/2,0,1/2]);a3:=vector(3,[1/2,1/2,0]);

va:=innerprod(a1,crossprod(a2,a3));

a1 := [0, 1/2, 1/2]

a2 := [1/2, 0, 1/2]

a3 := [1/2, 1/2, 0]

va := 1/4

>b1:=scalarmul(crossprod(a2,a3),2*Pi/va);b2:=scalarmul(crossprod(a3,a1),2*Pi/va);

b3:=scalarmul(crossprod(a1,a2),2*Pi/va); - вычисляются три базисных вектора обратной решетки.

b1 := [-2 Pi, 2 Pi, 2 Pi]

b2 := [2 Pi, -2 Pi, 2 Pi]

b3 := [2 Pi, 2 Pi, -2 Pi]

Задается последовательность цветов, которыми мы будем закрашивать грани нашего полиэдра с целью получения более наглядного объемного изображения:

>col:=[green,red,pink,purple,yellow,brown,blue,orange,gold,coral,cyan,magenta,navy,maroon,aquamarine,plum,sienna,turquose,violet,gray,grey,khaki,wheat,green,red,pink,tan].

col := [green, red, pink, purple, yellow, brown, blue, orange, gold,

coral, cyan, magenta, navy, maroon, aquamarine, plum, sienna,