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

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

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

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

RandomWalk[n_]:=NestList[(#+(-1)
                ^Random[Integer])&,0,n]

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

ListPlot[RandomWalk[200],PlotJoined->True];

wpe65.jpg (7089 bytes)

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

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

RandomWalk[n_,d_]:=NestList[(#+(-1)
^Table[Random[Integer],{d}])&,Table[0,{d}],n]

График трехмерного случайного блуждания.

Show[Graphics3D[Line[RandomWalk[1000,3]]]];

wpe66.jpg (7672 bytes)

Богатство языка программирования системы 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]] ];

wpe67.jpg (10096 bytes)

Mathematica имеет компилятор для оптимизации программ, которые работают со списками и числами.

CAStep = Compile[{{rule, _Integer, 1}, 
                           {a, _Integer,1}},
rule[[ 8 - (RotateLeft[a] + 2 
                (a + 2 RotateRight[a])) ]]]

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

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

[Graphics:wrgr16.gif]

[Graphics:wrgr17.gif]

[Graphics:wrgr18.gif]

[Graphics:wrgr19.gif]

[Graphics:wrgr20.gif]

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

[Graphics:wrgr21.gif]

[Graphics:wrgr22.gif]

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

wpe68.jpg (2543 bytes)

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

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

[Graphics:wrgr23.gif]

[Graphics:wrgr24.gif]

[Graphics:wrgr25.gif]

{1.6180339887498948482,1.6180339887498948482,
1.6180339887498948482}

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

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

[Graphics:wrgr27.gif]

[Graphics:wrgr28.gif]

[Graphics:wrgr29.gif]

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

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

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

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

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

[Graphics:wrgr33.gif]

[Graphics:wrgr34.gif]

[Graphics:wrgr35.gif]

[Graphics:wrgr36.gif]

[Graphics:wrgr37.gif]

[Graphics:wrgr38.gif]

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

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

wpe69.jpg (15231 bytes)

-Graphics-
Предыдущая глава

Оглавление

Следующая глава