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]