Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






APL время пришло.






Пусть функция PVALUE, показанная ниже, вычисляет кол-во денег, которое вы должны положить в банк для того, чтобы получить некоторую сумму денег за опред пер времени при заданной годовой процентной ставке дохода:
12000 PVALUE 5 10 (т.е мы хотим чтобы на кармане у нас через 5 лет при 10% ставке было 1200…Вопрос сколько надо положить)

⎕ vr 'PVALUE'

∇ Z← AMT PVALUE NI; RATE

[1] RATE← NI[2]× 0.01

[2] Z← AMT÷ 1+NI[1]× RATE

1.Считаем наши инвестиции, где AMP-сколько мы хотим получить, Z-размер суммы вложения.

2. Преобразование в процентов в дробь, где NI[2]-процентная ставка.

3. Получение размеров вклада, NI[1]-годы.

 


 

Лекция от 2015.11.27

Вероятность выпадения 7 гербов из 10 бросков

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

7! 10

(7! 10)× (.5*7)× (1-.5)*3 это тоже самое что это и не делайте умные выражения лица

0.1171875

)ed bern данная функция выглядит так

[0] q← p bern mn

[1] mn[1]! mn[2] или! /mn

↑ по-простому ↑ по-умному

[2]q← (! /mn)× (p*(↑ mn))× (1-p)*|-/mn

в конце функции всегда надо присваивать ответ, в данном случаи это q

.5 bern 7 10 вероятность 0.5 благоприятных 7 всего 10

0.1171875

2×.5 bern 7 10

0.1171875

VALUE ERROR: No result was provided when the context expec ted one

Тут АПЛ немножко закапризничал и попросил написать .5 как 0.5

2× 0.5 bern 7 10

∧ 2× 0.5 bern 7 10 вот мы молодцы все исправили и получаем ответ

0.234375

0.5 bern 7 10

0.1171875

переходим к более серьезному

) ed IamSorry новая функция

[0] z ← p IamSorry n; i i ← переменный индекс

[1] i ← 0

[2] z ← ⍳ 0

[3] z ← z, i, p bern i, n

[4] i ← i+1

[5] → (i≤ n)/3

 

z←.5 IamSorry 10

⍴ z размерность этой функции, т.к. i, p

z- получаем результат, где вероятности выпадения герба от 1 до 10

0 0.0009765625 1 0.009765625 2 0.0439453125 3 0.1171875 4 0.205078125 5 0.24609375 6 0.205078125 7 0.1171875 8 0.0439453125 9 0.009765625 10 0.0009765625

11 2⍴ z К Р А С И В О составляем матрицу размера [11; 2]

0 0.0009765625

1 0.009765625

2 0.0439453125

3 0.1171875

4 0.205078125

5 0.24609375

6 0.205078125

7 0.1171875

8 0.0439453125

9 0.009765625

10 0.0009765625

.5 IamSorry 10 теперь в эту функцию добавляем [6] z← ((n+1), 2)⍴ z

0 0.0009765625

1 0.009765625

2 0.0439453125

3 0.1171875

4 0.205078125

5 0.24609375

6 0.205078125

7 0.1171875

8 0.0439453125

9 0.009765625

10 0.0009765625

.5 IamSorry1 10 функция состоит

[0] z ← p Iamsorry1 n; i

[1] z← ⍳ i← 0

[2] REPEAT: z← z, i, p bern i; n

[3] i← i+1

[4] → (i≤ n)/ REPEAT REPEAT- это метка, за место этого слова может стоять что угода, например CHEPET

[5] z← ((n+1), 2)⍴ z

 

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

0 0.0009765625

.5 IamSorry1 10

REPEAT

0 0.0009765625

1 0.009765625

2 0.0439453125

3 0.1171875

4 0.205078125

5 0.24609375

6 0.205078125

7 0.1171875

8 0.0439453125

9 0.009765625

10 0.0009765625

.5 IamSorry1 10

.5 IamSorry2 10

[0] z ← p Iamsorry1 n; i

[1] z← ⍳ i← 0

[2] REP: z← z, i, p bern i; n

[3] → (n≥ i← i+1)/REP

 

REPEAT

0 0.0009765625

1 0.009765625

2 0.0439453125

3 0.1171875

4 0.205078125

5 0.24609375

6 0.205078125

7 0.1171875

8 0.0439453125

9 0.009765625

10 0.0009765625

REPEAT

VALUE ERROR

REPEAT

.5 IamSorry3 10

0 0.0009765625 1 0.009765625 2 0.0439453125 3 0.1171875 4 0.205078125 5 0.24609375 6 0.205078125 7 0.1171875 8 0. 0439453125 9 0.009765625 10 0.0009765625

⊃.5 IamSorry3 10

[0] z← p IamSorry3 n; i

[1]z← ⍳ o

[2]: For i: In 0, ⍳ n

[3] z← z, ⊂ i, p bern i; n

[4]: EndFor

0 0.0009765625

1 0.009765625

2 0.0439453125

3 0.1171875

4 0.205078125

5 0.24609375

6 0.205078125

7 0.1171875

8 0.0439453125

9 0.009765625

10 0.0009765625

 

.5 bern (7 10)(3 10)

0 0.0078125 0 0.0009765625

.5 bern¨ (7 10)(3 10)

0.1171875 0.1171875.5 bern¨ (0, ⍳ 10), ¨ 10

0.0009765625 0.009765625 0.0439453125 0.1171875 0.205078125 0.24609375 0.205078125 0.1171875 0.0439453125 0.009765625 0.0009765625

⊃.5 bern¨ (0, ⍳ 10), ¨ 10

0.0009765625 0.009765625 0.0439453125 0.1171875 0.205078125 0.24609375 0.205078125 0.1171875 0.0439453125 0.009765625 0.0009765625

.5 bern¨ (0, ⍳ 10), ¨ 10

0.0009765625 0.009765625 0.0439453125 0.1171875 0.205078125 0.24609375 0.205078125 0.1171875 0.0439453125 0.009765625 0.0009765625

)fns

IamSorry IamSorry1 IamSorry2 IamSorry3 ave bern sigm

вместо этой функции можно записать так.5 bern ¨ (o, ⍳ 10), ¨ 10

q←.3.5.7 bern¨ ¨ ⊂ (o, ⍳ 10), ¨ 10

 

.3.5.7 bern¨ (0, ⍳ 10), ¨ 10

LENGTH ERROR он тут опять капризничает, также добавляем 0 перед точкой

0.3 0.5 0.7 bern¨ (0, ⍳ 10), ¨ 10

q←.3.5.7 bern¨ ⊂ (0, ⍳ 10), ¨ 10

DOMAIN ERROR bern[1] q← (! /mn)× (p*(↑ mn))× (1-p)*|-/mn

mn

0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10 10 10

)reset

q←.3.5.7 bern¨ ¨ ⊂ (0, ⍳ 10), ¨ 10

q←.3.5.7 bern¨ ⊂ (0, ⍳ 10), ¨ 10

DOMAIN ERROR

bern[1] q← (! /mn)× (p*(↑ mn))× (1-p)*|-/mn

p

0.3

mn

0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 10 10 10

)reset

q←.3.5.7 bern¨ ¨ ⊂ (0, ⍳ 10), ¨ 10

⍴ q

⍴ ¨ q

11 11 11

xxx← (0, ⍳ 10), ⍉ ⊃ q

]load plt

#.plt

2 plt.plot xxx

+/¨ q сумма вероятностей

1 1 1

)ed gauss

[0] f ← ms gauss x; m; s

[1] (m s) ← ms

[2]f← *-× ((x-m)*2) ÷ 2× s*2

[3]f← f÷ s× (02)*.5

(a b c)← ⍳ 3

a

b

c

0 1 gauss 0

0.3989422804

÷ (○ 2)*.5

0.3989422804

0 1 gauss ¯ 1

0.2419707245

0 1 gauss 1

0.2419707245

0 1 gauss ¯ 3 ¯ 2 ¯ 1 0 1 2 3

0.004431848412 0.05399096651 0.2419707245 0.3989422804 0.2419707245 0.05399096651 0.004431848412

0 1 gauss ¯ 3 ¯ 2 ¯ 1 0 1 2 3

2 plt.plot 0 1 gauss ¯ 3 ¯ 2 ¯ 1 0 1 2 3

x←.1× ⍳ 40

x← (-⌽ x), 0, x

2 plt.plot 0 1 gauss x

)fns

IamSorry IamSorry1 IamSorry2 IamSorry3 IamSorry4 ave bern gauss

sigm

⎕ vr'ave'

∇ y← ave data

[1] y← +/data÷ ⍴ data

∇ ⎕ vr'sigm'

∇ y← sigm x

[1] y← +/(x-ave x)*2

[2] y← y÷ ⍴ x

⎕ vr'bern'

∇ q← p bern mn

[1] q← (! /mn)× (p*(↑ mn))× (1-p)*|-/mn

⎕ vr'IamSorry'

∇ z← p IamSorry n; i

[1] i← 0

[2] z← ⍳ 0

[3] z← z, i, p bern i, n

[4] i← i+1

[5] → (i≤ n)/3

[6] z← ((n+1), 2)⍴ z

⎕ vr'IamSorry1'

∇ z← p IamSorry1 n; i

[1] ⍝ this is the

[2] ⍝ great function

[3] z← ⍳ i← 0

[4] REPEAT: z← z, i, p bern i, n

[5] i← i+1

[6] → (i≤ n)/REPEAT

[7] z← ((n+1), 2)⍴ z

⎕ vr'IamSorry2'

∇ z← p IamSorry2 n; i

[1] z← ⍳ i← 0

[2] REPEAT: z← z, i, p bern i, n

[3] i← i+1

[4] → (i≤ n)/REPEAT

[5] z← ((n+1), 2)⍴ z

⎕ vr'IamSorry3'

∇ z← p IamSorry3 n; i

[1] z← ⍳ i← 0

[2] REP: z← z, ⊂ i, p bern i, n

[3] i← i+1

[4] → (i≤ n)/REP

⎕ vr'IamSorry4'

∇ z← p IamSorry4 n; i

[1] z← ⍳ 0

[2]: For i: In 0, ⍳ n

[3] z← z, ⊂ i, p bern i, n

[4]: EndFor


Лекция от 2015.12.04

 

1. Workspace


Dyalog APL/S-64 Version 14.1.25525
Unicode Edition
Fri Dec 4 15: 29: 32 2015
CONTINUE saved Fri Nov 20 14: 48: 08 2015
v← (30⍴ 1), (20⍴ 2), 50⍴ 3 - создаем вектор состоящий из 30 единиц, 20 двоек и 50 троек и присваиваем его значения в v
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 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
30 20 50 ⍴ ¨ 1 2 3 – аналогично можно получить такой вектор, применив функцию ¨ (each), которая применит ⍴ к каждому из значений
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 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
⍴ 30 20 50 ⍴ ¨ 1 2 3 – размерность этого вектора 3, т.е. это вектор векторов
3
⍴ ∊ 30 20 50 ⍴ ¨ 1 2 3 – упростив этот вектор функцией ∊ (type) мы получили один вектор с размерностью:
100
v← ∊ 30 20 50 ⍴ ¨ 1 2 3 – присвоим значения получившегося таким образом вектора в v
30 20 30 / 1 2 3 – так же можно создать такой вектор еще одним способом, повторить каждый элемент n-количество раз слева
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 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
⍴ 30 20 50 / 1 2 3 - его размерность
100
v[? 100] – выполнив эту операцию мы будем каждый раз получать одно случайное число из n-количества чисел (в нашем случае от 1 до 3) с заданной нами вероятностью (в нашем случае 1=30%, 2=20%, 3=50%).
v[? ⍴ v] – такая форма записи позволяет корректно отображать число со случайном индексом в векторе любой другой длины
? 0 – генератор случайных чисел в пределе от 0 до 1, например:
0.1121694431
g←.3.5 – присвоим в g 0.3 и 0.5
r←? 0 – присвоим в r случайное число от 0 до 1
(1+⍴ g)-+/r< g – находим в какой из промежутков: 1 (от 0 до 0.3) 2 (от 0.3 до 0.5) 3 (от 0.5 до 1) попало наше случайное число r
3
r
0.9560555899
1++/r> g - если записывать через знак больше, то запись упрощается
3
+\.3.2.5 – ищем границы отрезков, что бы сопоставить их с заданными вероятностями, просто сложив каждое предыдущие число с последующим
0.3 0.5 1
¯ 1↓ +\.3.2.5 – отбросим последнее число
0.3 0.5
)ed rnd_IamSorry – создадим определенную пользователем функцию
[0] ∇ r← n rnd_IamSorry p
[1] p← ¯ 1↓ +\p – находим границы
[2] r← ⍳ 0
[3] L: r← r, 1++/p<? 0
[4] → (0< n← n-1)/L – выполняем цикл 3 и 4 в результате которого получиться вектор из n-количества элементов с заданною нами вероятностью p
r← 100 rnd_IamSorry.3.2.5 – выполним эту функцию для заданных нами значений
⍴ r – размерностью вектора r равна:
100
r
3 3 1 3 2 1 3 3 1 2 1 1 3 3 1 2 3 3 3 3 2 2 1 3 2 3 2 3 3 3 1 2 2 1 1 1 2 1 3 3 3 2 2 3 1 3 1 1 1 3 3 3 3 1 2 2 3 1 3 3 2 2 3 3 3 3 3 3 1 3 3 3 3 1 3 1 3 3 3 2 3 1 3 1 3 1 3 3 1 2 3 1 3 3 1 2 1 3 2
x← 2 1 1 2 3 4 3 3 – присвоим в x следующие значения
((x⍳ x)=⍳ ⍴ x)/x – выполнив такую операцию мы получим все уникальные значения в векторе
)ed uniq – добавим эту операцию в функцию uniq
[0] ∇ u← uniq x
[1] u← ((x⍳ x)=⍳ ⍴ x)/x – данная операция описана выше
[2] u← u[⍋ u] – расположение уникальных значений в порядке возрастания
uniq r – выполним операцию для вектора r
1 2 3
r – выполняет операцию, как в строке uniq [1]
3 1 2
∪ r[⍋ r] -добавляет возможность строки uniq [2] и становиться полностью аналогична uniq
1 2 3
r
3 3 1 3 2 1 3 3 1 2 1 1 3 3 1 2 3 3 3 3 2 2 1 3 2 3 2 3 3 3 1 2 2 1 1 1 2 1 3 3 3 2 2 3 1 3 1 1 1 3 3 3 3 1 2 2 3 1 3 3 2 2 3 3 3 3 3 3 1 3 3 3 3 1 3 1 3 3 3 2 3 1 3 1 3 1 3 3 1 2 3 1 3 3 1 2 1 3 2 1
r=1 – сравнивает значения вектора с 1 и выводит результат ввиде 0 если не равно и 1 если равно
0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1
+/r=1 – получаем общее количество единиц в векторе, а далее двоек и троек
29
+/r=2
20
+/r=3
51
r1← 100 rnd_IamSorry.1.2.2.5 – создаем вектор r1 длины 100 из значений, полученных случайным образом с заданными вероятностями
∪ r1 – уникальные значения этого вектора
4 2 3 1
r1← 100 rnd_IamSorry.1.2.2.3.1.1 – аналогично создаем вектор r1, но интервалов вероятностей больше
+/r1=1 – общее количество единиц (числа в данном случае означают номер интервала, в которое попало случайное число, в данном случае от 0 до 0.1 это интервал 1) в векторе r1
6
+/r1=2 – аналогично общее количество двоек
25
)ed howmany_IamSorry – добавим новую функцию в ходе циклов (3 и 4) которой мы получим вектор, содержащий количество значений, попавших в каждый отдельный отрезок n со своей вероятностью p
[0] ∇ n← y howmany_IamSorry x; i
[1] i← 1
[2] n← ⍳ 0
[3] L: n← n, +/y[i]=x
[4] → ((⍴ y)≥ i← i+1)/L
n← (uniq r1)howmany_IamSorry r1 – воспользуемся этой функцией, задав в ней значения
u← uniq r1 – количество уникальных значений в векторе r1
u, n – склеим два вектора в один
1 2 3 4 5 6 6 25 14 32 5 18
u, [.5]n – отобразим два отдельных вектора u и n в строку с помощью измерения 0.5
1 2 3 4 5 6

6 25 14 32 5 18
u, [1.5]n – аналогично по 1.5 можно отобразить левые и правыые вектора столбцами
1 6
2 25
3 14
4 32
5 5
6 18
(u, [1.5]n), ⊃ n⍴ ¨ ']' – с помощью это операции, мы добавили с права к столбикам со значениями некий индикатор, с помощью которого наглядно видно количество значений в правом столбике
1 6 ]]]]]]
2 25 ]]]]]]]]]]]]]]]]]]]]]]]]]
3 14 ]]]]]]]]]]]]]]
4 32 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
5 5 ]]]]]
6 18 ]]]]]]]]]]]]]]]]]]
)ed howmany_IamSorry1 – добавим аналогичную функцию, как howmany_IamSorry, но записанная по другому
[0] ∇ n← y howmany_IamSorry1 x; z
[1] n← ⍳ 0
[2]: For z: In y
[3] n← n, +/z=x
[4]: EndFor
n≡ (uniq r1)howmany_IamSorry1 r1 – с помощью функции ≡ убеждемся, что они полностью идентичны:
1
x← 1 2 3 3 4 1 2 2 1 1 4 2 2 – задаем вектору x некие значения
(∪ x) ∘.= x – эта операция показывает (в виде 1) где встречается каждое уникальное число из этого самого вектора, таким образом для всех уникальных чисел получилась своя строка
1 0 0 0 0 1 0 0 1 1 0 0 0
0 1 0 0 0 0 1 1 0 0 0 1 1
0 0 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 1 0 0
+/(∪ x) ∘.= x – сложив построчно получим сколько раз попадалось каждое уникальное значение
4 5 2 2
)ed howmany – запишем это в функцию, в которую сможем задавать любые другие значения
[0] ∇ n← y howmany x
[1] n← +/y∘.=x

 

2. APL Language references

 

Равно R← X=Y

Y может быть любым массивом. X может быть любым массивом. R логическое число. ⎕ CT это неявный аргумент Равно.

Если X и Y переменные, тогда R это 1, если они одинаковые переменные. Если X это переменная и Y это число, или наоборот, тогда R это 0.

Если X и Y числа, тогда R это 1, если X и Y в пределах сравнения друг друга.

Для действительных чисел X и Y, X считается равным Y если (|X-Y) не больше чем ⎕ CT× (|X)⌈ |Y.

Для комплексных чисел X=Y это 1 если величина X-Y не превышает в ⎕ CT раз большей величины X и Y; геометрически, X=Y если число меньшее, чем величина лежащая на или вне окружности по центру на окружности с большей величиной, имеющей радиус в ⎕ CT раз большей величины.

Примеры

3=3.1 3 ¯ 2 ¯ 3

0 1 0 0

a← 2+0j1× ⎕ CT

a

2J1E¯ 14

a=2j.00000000000001 2j.0000000000001

1 0

'CAT'='FAT'

0 1 1

'CAT'=1 2 3

0 0 0

'CAT'='C' 2 3

1 0 0

⎕ CT← 1E¯ 10

1=1.000000000001

1=1.0000001

 

Больше R← X> Y

Y должен быть числом. X должен быть числом. R логическое число. R это 1 если X больше чем Y, и X=Y это 0. В противном случае R это 0.

⎕ CT это неявный аргумент Больше.

Примеры

1 2 3 4 5 > 2

0 0 1 1 1

⎕ CT← 1E¯ 10

1 1.00000000001 1.000000001 > 1

0 0 1

 

Меньше R← X< Y

Y может быть числовым массивом. X может быть числовым массивом. R логическое число. R это 1, если X меньше чем Y, и X=Y это 0. В противном случае R это 0.

⎕ это неявный аргумент Меньше.

Примеры

(2 4) (6 8 10) < 6

1 1 0 0 0

⎕ CT← 1E¯ 10

1 0.99999999999 0.9999999999< 1

0 0 1

 

Повторение R← X/[K]Y

Y может быть любым массивом. X простой целый вектор или скаляр. Определение оси является необязательным. Если дано, K должно быть простым целым скаляром или одноэлементным вектором. Величина K должно быть осью Y. Если отсутствует, последней осью подразумевается Y. Форма R← X⌿ Y означает первую ось Y.

Если Y имеет длину 1 вдоль Kой (или подразумеваемой) оси, он проходит вдоль оси, чтобы соответствовать длине X. В противном случае, длина X должна быть длиной Kой (или подразумеваемой) оси Y. Однако, если X это скаляр или одноэлементный вектор, он будет продлен до длины Kой оси.

R состоит из суб-массивов вдоль Kой оси Y. Если X[I] (элемент X) положительный, тогда соответствующий суб-массив повторяется X[I] раз. Если X[I] это 0, тогда соответствующий суб-массив Y исключается. Если X[I] отрицательный, тогда содержимое элемента Y повторяется |X[I] раз. Каждый из (повторенных) суб-массивов и заполняется пунктами вдоль Kой оси в порядке расположения. Форма R это форма Y за исключением того, что длина (подразумеваемой) Kой оси это +/|X (после возможного расширения).

Эта функция иногда называется Сжатие, когда X логический.

Примеры

1 0 1 0 1/⍳ 5

1 3 5

1 ¯ 2 3 ¯ 4 5/⍳ 5

1 0 0 3 3 3 0 0 0 0 5 5 5 5 5

M

1 2 3

4 5 6

2 0 1/M

1 1 3

4 4 6

0 1⌿ M

4 5 6

0 1/[1]M

4 5 6

Если Y не имеет пары (1=× /⍴, Y) его величина условно продлевается до длины X

Вдоль указанной оси.

1 0 1/4

4 4

1 0 1/, 3

3 3

0 1/1 1⍴ 5

 

Вычитание R← X-Y
Y может быть любым численным массивом. X может быть любым численным массивом. R это число. Величина R это разность между X и Y. Эта функция также известна как Минус.
Примеры
3 ¯ 2 4 0 - 2 1 ¯ 2 4
1 ¯ 3 6 ¯ 4
2j3-.3j5 ⍝ (a+bi)-(c+di) = (a-c)+(b-d)i
1.7J¯ 2

 

Произведение R← X× Y

Y может быть любой числовой массив. Х может быть любой числовой массив. R арифметическое

Продукт X и Y.

Эта функция также известна как умножение.

Пример:

3 2 1 0 × 2 4 9 6

6 8 9 0

2j3×.3j.5 1j2 3j4.5

¯ 0.9J1.9 ¯ 4J7 ¯ 6J17 1J1.5

 

Индекс вхождения R← X⍳ Y

Y может быть любым массивом. Х любой массив 1 ранга или более.

Вектор левого аргумента

Если X является вектором, результат R представляет собой простой целочисленный массив с той же формой, как массив Y, где элементы Y сначала находятся в X. Если элемент Y не может быть найден в Х, то соответствующий элемент R будет ⎕ IO+⊃ ⍴ X.

Элементы X и Y считаются одинаковыми, если X≡ Y возвращает 1 для этих элементов.

⎕ IO и ⎕ CT/⎕ DCT неявные аргументы Индекса вхождения.

Пример

⎕ IO← 1

2 4 3 1 4⍳ 1 2 3 4 5

4 1 3 2 6

'CAT' 'DOG' 'MOUSE'⍳ 'DOG' 'BIRD'

2 4

Левый аргумент с высшем рангом

Если X является высшим рангом массива, функция находит первое возникновение подмножеств в Y, которые соответствуют основным ячейкам X, где основной ячейкой является подмножество на ведущей размерности Х с формой 1↓ ⍴ X. В этом случае форма результирующего R представляет собой (1-⍴ ⍴ X)↓ ⍴ Y.

Если подмножество Y не может быть найдено в X, то соответствующий элемент R будет ⎕ IO+⊃ ⍴ X.

Примеры

X← 3 4⍴ ⍳ 12

X

1 2 3 4

5 6 7 8

9 10 11 12

X⍳ 1 2 3 4

Y← 2 4⍴ 1 2 3 4 9 10 11 12

Y

1 2 3 4

9 10 11 12

X⍳ Y

1 3

X⍳ 2 3 4 1

X1← 10 100 1000∘.+X

X1

11 12 13 14

15 16 17 18

19 20 21 22

101 102 103 104

105 106 107 108

109 110 111 112

1001 1002 1003 1004

1005 1006 1007 1008

1009 1010 1011 1012

X1⍳ 100 1000∘.+X

2 3

Сумма R ← X + Y
У должен быть числовым. Х должен быть числовым. R является арифметической суммой X и Y. R является числовым. Также известен как плюс.
Примеры 1 2 3 4 + 4 6
1 2 + 3, 5 ⊂ 4
4 6 7
1J1 2J2 + 3J3 4J4 5J5
5 + 4J4 5J5 1J4 0J5

Формирование R ← X⍴ Y

У может быть любым массивом. Х должен быть простым скаляром или вектором неотрицательных целых чисел. р

представляет собой массив из формы X, элементы которого взяты из Y в последовательности от малого к большому и

циклически повторяются, если требуется. Если Y пуст, R состоит из заполнения элементов Y

(⊂ ε ⊃ Y с ⎕ ml ← 0). Если X содержит по меньшей мере один нуль, то R пуст. Если X является

пустым вектором, то R является скаляром.

Примеры

2 3⍴ ⍳ 8

1 2 3

4 5 6

2 3⍴ ⍳ 4

1 2 3

4 1 2

2 3⍴ ⍳ 0

0 0 0

0 0 0

Каждый {R}← f¨ Y

f может быть любfz монадическая функция. У может быть любым массивом.

Полученная функция применяется для функции F отдельно для каждого пункта У. Функция не обязательно возвращает результат. Если результат возвращается, R имеет ту же форму, Y, и его элементы. Элементы, полученные в результате применения функции F в соответствующее

предметы Y.

Если Y пуст, R определяется путем применения функции операнда раз

К Y.

Примеры
G← ('TOM' (⍳ 3))('DICK' (⍳ 4))('HARRY' (⍳ 5))

⍴ G

⍴ ¨ G

2 2 2

⍴ ¨ ¨ G

3 3 4 4 5 5

+⎕ FX¨ ('FOO1' 'A← 1')('FOO2' 'A← 2')

FOO1 FOO2

Принадлежность (⎕ ML≥ 1) R← ε Y
ML должна быть такой ≥ 1. У могут быть любой массив, R является простой вектор, создается из всех элементов Y в усложнённом порядке.
Примеры
⎕ ML← 1 ⍝ Migration level 1

MAT← 2 2⍴ 'MISS' 'IS' 'SIP' 'PI' ⋄ MAT

MISS IS

SIP PI

ε MAT

MISSISSIPPI

M← 1 (2 2⍴ 2 3 4 5) (6(7 8))

M

1 2 3 6 7 8

4 5

ε M

1 2 3 4 5 6 7 8

Генератор случайных чисел R← X? Y
Х должен быть простым скаляром или 1-элементным вектором, содержащий неотрицательное целое число. Х должен быть простым скаляром или 1-элементным вектором, содержащий неотрицательное целое число, а X≤ Y.

R представляет собой целочисленный вектор, полученный путем X случайно выбранного из ⍳ Y без повторения.
Примеры
13? 52

7 40 24 28 12 3 36 49 20 44 2 35 1

13? 52

20 4 22 36 31 49 45 28 5 35 37 48 40

 

Расширение R← X\[K]Y
У может быть любым массивом. Х представляет собой простые целые числа или вектор. Спецификация осей необязательна. Если присутствует, К должен быть простым целыми числамом или 1-элементным вектора. Значение К должны быть равно значению оси Y. Если отсутствует, то предыдущая ось Y подразумевается. Форма R ← X⍀ Y означает первую ось. Если Y является скаляром, то он рассматривается как вектор одноэлементный. Если Y имеет длину по оси, то он будет вытянут вдоль этой оси на соответствующие количеству положительных элементов в X. В противном случае, количество положительных элементов в X должно совпадать по длине с осью Y. R состоит из массивов вдоль оси Y. X [I] раз. Если X [я] является отрицательным, X раз [I] и вставляется в относительном порядке вдоль оси-ю в результате.


Примеры
0\⍳ 0

1 ¯ 2 3 ¯ 4 5\'A'

A AAA AAAAA

M

1 2 3

4 5 6

1 ¯ 2 2 0 1\M

1 0 0 2 2 0 3

4 0 0 5 5 0 6

1 0 1⍀ M

1 2 3

0 0 0

4 5 6

1 0 1\[1]M

1 2 3

0 0 0

4 5 6

1 ¯ 2 1\(1 2)(3 4 5)

1 2 0 0 0 0 3 4 5

Отбросить R← X↓ Y

Y может быть любым массивом. Х должен быть простым скаляром или вектором целых чисел. Если X является скаляром, то он рассматривается как одноэлементный вектор. Если Y является скаляром, то он обрабатывается как массив, форма которого

есть (⍴ X) ⍴ 1. После любых скалярных расширений, X должен быть меньше или равен Y. Любые недостающие элементы в X по умолчанию будут равны 0. R представляет собой массив того же ранга, Y, но с элементами удаленных из векторов вдоль каждой из осей Y.

Примеры
4↓ 'OVERBOARD'

BOARD

¯ 5↓ 'OVERBOARD'

OVER

⍴ 10↓ 'OVERBOARD'

M

ONE

FAT

FLY

0 ¯ 2↓ M

OFF

¯ 2 ¯ 1↓ M

ON

1↓ M

FAT

FLY

M3← 2 3 4⍴ ⎕ A

1 1↓ M3

QRST

UVWX

¯ 1 ¯ 1↓ M3

ABCD

EFGH

 

Индексирование по возрастанию R← ⍋ Y

Y должен быть простой или просто числовым массивом ранга, большего 0. R является

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

Если Y является числовым массивом, большего 1, элементы в каждом из массивов

вдоль первой оси сравниваются с порядком первого элемента и последнего элемента.

Примеры

⍋ 22.5 1 15 3 ¯ 4

5 2 4 3 1

M

2 3 5

1 4 7

2 3 5

1 2 6

2 3 4

5 2 4

⍋ M

3 2

Раскрытие R← X⊃ Y
У может быть любым массивом. Х скаляр или вектор индексов Y, а именно. ⍳ ⍴ Y.

R представляет собой элемент, выбранный из структуры Y в соответствии с X.

Элементы X выбраются из более глубоких уровней последовательно в структуре Y. Элементы

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

могут быть определены с помощью пустых векторных элементов в X в произвольной глубине.

Примеры
G← ('ABC' 1)('DEF' 2)('GHI' 3)('JKL' 4)

G← 2 3⍴ G, ('MNO' 5)('PQR' 6)

G

ABC 1 DEF 2 GHI 3

JKL 4 MNO 5 PQR 6

((⊂ 2 1), 1)⊃ G

JKL

(⊂ 2 1)⊃ G

JKL 4

 

Совпадение R← X≡ Y
Y может быть любым массивом. Х может быть любым массивом. R является простым логическим скаляром. Если X является идентичным Y, то R=1. В противном случае R=0.

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

Примеры
⍬ ≡ ⍳ 0

''≡ ⍳ 0

A

THIS

WORD

A≡ 2 4⍴ 'THISWORD'

A≡ ⍳ 10

+B← A A

THIS THIS

WORD WORD

A≡ ⊃ B

(0⍴ A)≡ 0⍴ B

' '=⊃ 0⍴ B

1 1 1 1

1 1 1 1

' '=⊃ 0⍴ A

 

Векторизация R←, Y
Y может быть любым массивом. R является вектор из элементов Y.

Примеры
4 5 6

, M

1 2 3 4 5 6

A

ABC

DEF

GHI

JKL

, A

ABCDEFGHIJKL

⍴, 10

 

Уникальность R← ∪ Y
Y должен быть вектором. R является вектор из элементов Y, минуя неуникальных элементы после первого.
Примеры
∪ 'CAT' 'DOG' 'CAT' 'MOUSE' 'DOG' 'FOX'

CAT DOG MOUSE FOX

∪ 22 10 22 22 21 10 5 10

22 10 21 5

 

 


 

Лекция от 2015.12.11

r← 1++/(? 100000⍴ 0)∘.> ¯ 1↓ +\p

⍴ (⍳ 4)∘.=r размерность массива

4 100000

+/(⍳ 4)∘.=r считает кол-во выпавших 1.2.3.4

19741 29896 40358 10005

+/(⍳ 4)∘.=r)÷ ⍴ r Вероятность выпадения 1, 2, 3 и 4

0.19741 0.29896 0.40358 0.10005

p

0.2 0.3 0.4 0.1 Границы вероятностей

2⍕ (+/(⍳ 4)∘.=r)÷ ⍴ r Округление до 2х знаков после запятой

0.20 0.30 0.40 0.10

1⍕ (+/(⍳ 4)∘.=r)÷ ⍴ r Округление до 1 знака после запятой

0.2 0.3 0.4 0.1

10⊤ ⍳ 4 ⊤ - Кодирование

1 2 3 4

10⊥ ⍳ 4 ⊥ - Декодирование

⍳ 4

1 2 3 4

1 2 3 4× 10*⌽ 0, ⍳ 3

1000 200 30 4

+/1 2 3 4× 10*⌽ 0, ⍳ 3

⍴ ⍳ ¨ ⍳ 9 Размерность вектора векторов

 

⍴ ¨ ⍳ ¨ ⍳ 9 размерность для каждого вектора

1 2 3 4 5 6 7 8 9

10⊥ ¨ ⍳ ¨ ⍳ 9 декодирование для каждого вектора

1 12 123 1234 12345 123456 1234567 12345678 123456789

(⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 разворачиваем декодированный вектор относительно 9

9 98 987 9876 98765 987654 9876543 98765432 987654321

, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9 Строим «ёлочку» по полученным данным

(, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9), ⊂ '× 8+' Слепляем с вектором

1 × 8+

12 × 8+

123 × 8+

1234 × 8+

12345 × 8+

123456 × 8+

1234567 × 8+

12345678 × 8+

123456789 × 8+

 

⍴ (, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9) размерность ёлочки

9 1

(, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9), (⊂ '× 8 +'), [1.5]⍳ 9

Прилепляем вектор столбиком 1-9

1 × 8 + 1

12 × 8 + 2

123 × 8 + 3

1234 × 8 + 4

12345 × 8 + 5

123456 × 8 + 6

1234567 × 8 + 7

12345678 × 8 + 8

123456789 × 8 + 9

 

 

(, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9), (⊂ '× 8 +'), (, [1.5]⍳ 9), ⊂ ' = ' Прикрепляем «=»

1 × 8 + 1 =

12 × 8 + 2 =

123 × 8 + 3 =

1234 × 8 + 4 =

12345 × 8 + 5 =

123456 × 8 + 6 =

1234567 × 8 + 7 =

12345678 × 8 + 8 =

123456789 × 8 + 9 =

 

(⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 формируем ответ

9 98 987 9876 98765 987654 9876543 98765432 987654321

(, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9), (⊂ '× 8 +'), (, [1.5]⍳ 9), (⊂ ' = '),, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 Добавляем ответ

1 × 8 + 1 = 9

12 × 8 + 2 = 98

123 × 8 + 3 = 987

1234 × 8 + 4 = 9876

12345 × 8 + 5 = 98765

123456 × 8 + 6 = 987654

1234567 × 8 + 7 = 9876543

12345678 × 8 + 8 = 98765432

123456789 × 8 + 9 = 987654321

 

 

⍴, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 размерность векторизованного ответа ёлки

9 1

⍕, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 дополняем пробелами до 9

 

⍴ ⍕, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 размерность полученной матрицы

9 9

⍴ (⌽ ¯ 1+⍳ 9)⌽ ⍕, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 размерность вращения относительно 9 столбца

9 9

(⌽ ¯ 1+⍳ 9)⌽ ⍕, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 отображение вращения

(, [1.5]10⊥ ¨ ⍳ ¨ ⍳ 9), (⊂ '× 8 +'), (, [1.5]⍳ 9), (⊂ ' = '), (⌽ ¯ 1+⍳ 9)⌽ ⍕, [1.5](⍳ 9)+8× 10⊥ ¨ ⍳ ¨ ⍳ 9 готовый результат

1 × 8 + 1 = 9

12 × 8 + 2 = 98

123 × 8 + 3 = 987

1234 × 8 + 4 = 9876

12345 × 8 + 5 = 98765

123456 × 8 + 6 = 987654

1234567 × 8 + 7 = 9876543

12345678 × 8 + 8 = 98765432

123456789 × 8 + 9 = 987654321

Получается красивая симметричная ёлочка

 

 

)ed magic

Magic делаем красивую ёлочку через функцию

1 × 8 + 1 = 9

12 × 8 + 2 = 98

123 × 8 + 3 = 987

1234 × 8 + 4 = 9876

12345 × 8 + 5 = 98765

123456 × 8 + 6 = 987654

1234567 × 8 + 7 = 9876543

12345678 × 8 + 8 = 98765432

123456789 × 8 + 9 = 987654321

)ed magic

magic1

1 × 8 + 1 = 9

12 × 8 + 2 = 98

123 × 8 + 3 = 987

1234 × 8 + 4 = 9876

12345 × 8 + 5 = 98765

123456 × 8 + 6 = 987654

1234567 × 8 + 7 = 9876543

12345678 × 8 + 8 = 98765432

123456789 × 8 + 9 = 987654321

 

)ed magic1 А вот так можно получить её другим способом

(⍳ 9)↑ ¨ '123456789'

1 2 3 4 5 6 7 8 9

 

 

(⍳ 9)↑ ¨ ⊂ '123456789'

1 12 123 1234 12345 123456 1234567 12345678 123456789

⍎ ¨ (⍳ 9)↑ ¨ ⊂ '123456789'

1 12 123 1234 12345 123456 1234567 12345678 123456789

⎕ d вектор от 0 до 9

⍎ ¨ (⍳ 9)↑ ¨ ⊂ 1↓ ⎕ d Еще один способ получить ёлочку

1 12 123 1234 12345 123456 1234567 12345678 123456789

⎕ vr'magic'

∇ magic; d Функция magic с локальной переменной d

[1] d← 10⊥ ¨ ⍳ ¨ ⍳ 9

[2] r← (⌽ ¯ 1+⍳ 9)⌽ ⍕, [1.5](⍳ 9)+8× d

[3] (, [1.5]d), (⊂ '× 8 +'), (, [1.5]⍳ 9), (⊂ ' = '), r

⎕ vr'magic1'

∇ magic1; d; r; n

[1] n← ⍳ 9

[2] d← 10⊥ ¨ ⍳ ¨ n

[3] r← (⌽ ¯ 1+n)⌽ ⍕, [1.5]n+8× d

[4] (, [1.5]d), (⊂ '× 8 +'), (, [1.5]n), (⊂ ' = '), r

 

 


 

Лабораторная работа №1

 

(1) b← 4+? 4⍴ 5

a← 1+? 4⍴ 4

(2) ⌈ /a ⌊ /a ⌈ /b ⌊ /b

(3) c← a× b× 0.5 2 5 (3÷ 7) ⌈ /c ⌊ /c

(4) maxc← ⌈ /c

minc← ⌊ /c

maxa← ⌈ /a

mina← ⌊ /a

maxb← ⌈ /b

minb← ⌊ /b

 

w← maxc*2

e← minb*2

r← (2× mina)÷ e

t← mina

y← minc

w+t-y-r

8096.111111

[5] aa← (? 7⍴ 10)+? 7⍴ 0

bb← (? 7⍴ 10)+? 7⍴ 0

aa

8.884485219 6.138106574 2.049734963 2.887637055 1.153631475 1.390293947 2.66267269

bb

2.158804476 4.638330789 10.81731833 5.424387704 5.938488889 8.324149972 8.388696439

.1× ⌊ 10× bb+.5

2.6 5.1 11.3 5.9 6.4 8.8 8.8

.1× ⌊ 10× aa +.5

9.3 6.6 2.5 3.3 1.6 1.8 3.1

.1× ⌈ 10× aa +.5

9.4 6.7 2.6 3.4 1.7 1.9 3.2

.1× ⌈ 10× bb+.5

2.7 5.2 11.4 6 6.5 8.9 8.9


 

Лабораторная работа №2

T← 30 24⍴ 10+? 35⍴ 20

⍴ T

30 24

⌈ /T

30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30

⍴ ⌈ /T

⌈ /⌈ /T

+/T

513 475 511 491 501 499 494 515 480 497 520 479 502 495 495 505 508 478 510 495 486 513 494 499 495 495 512 475 510 505

⍴ +/T

(+/T)÷ 24

21.375 19.79166667 21.29166667 20.45833333 20.875 20.79166667 20.58333333 21.45833333 20 20.70833333 21.66666667

19.95833333 20.91666667 20.625 20.625 21.04166667 21.16666667 19.91666667 21.25 20.625 20.25 21.375 20.58333333

20.79166667 20.625 20.625 21.33333333 19.79166667 21.25 21.04166667

(⍴ T)[2]

(+/T)÷ (⍴ T)[2]

21.375 19.79166667 21.29166667 20.45833333 20.875 20.79166667 20.58333333 21.45833333 20 20.70833333 21.66666667

19.95833333 20.91666667 20.625 20.625 21.04166667 21.16666667 19.91666667 21.25 20.625 20.25 21.375 20.58333333

20.79166667 20.625 20.625 21.33333333 19.79166667 21.25 21.04166667

(+/+/T)÷ × /⍴ T

20.75972222

 

(+/[1]T)÷ (⍴ T)[1]

20.83333333 20.83333333 20.6 21.1 20.4 20.9 20.23333333 20.83333333 20.9 20.76666667 20.7 20.63333333 20.7 20.6

21.56666667 20.26666667 21.33333333 20.06666667 21.2 20.6 20.63333333 21.13333333 20.6 20.8

⍴ (+/[1]T)÷ (⍴ T)[1]

t← (+/[1]T)÷ (⍴ T)[1]

t[10]

20.76666667

T←? 12 30 24 ⍴ 100

⍴ T

12 30 24

T[3; 23; 17]

⍴ +/T

12 30

TT← +/T

TT[8; 6]

⍴ T

12 30 24

⍴ +/+/T

⍴ (+/+/T)÷ × /(⍴ T)[3 2]

 


 

 

Лабораторная работа №3

 

TBC← 'A375' 'A475' 'A390' 'A420' 'A515' 'A490' 'A365' 'A545' 'A505' 'A390' 'A410' 'A315'

⍴ TBC

I←? 12⍴ 50

⍴ I

CO←? 12⍴ 50

⍴ CO

3↑ TBC

A375 A475 A390

⌈ /I

I⍳ ⌈ /I

TBC[I⍳ ⌈ /I]

A475

3↑ ⍒ I

2 1 8

TBC[3↑ ⍒ I]

A475 A375 A545

TBC[5↑ ⍒ I+CO]

A375 A475 A545 A365 A420

TBC⍳ ⊂ 'A420'

CO[TBC⍳ ⊂ 'A420']

x← I[5↓ ⍒ I]

x

29 24 23 18 17 16 7

+/x÷ ⍴ x

19.14285714

M← +/x÷ ⍴ x

(I< M)/TBC

A515 A505 A390 A410

⍴ (I< M)/TBC

⍴ (I> M)/TBC


 

Лабораторная работа №4

Функция генерации заданного количества точек в заданном диапазоне

c← 'prav. gran'

b← 'lev. gran'

a← 'kol. toch'

h← 'interval'

d← 'diapozon'

d← c-b

h← d÷ a-1

k← 'koord. toch. krome pervoy'

k← b++/((a-1)1⍴ ⍳ a)× h

z← 'result.'

z← b, k

 

)ed points

[0] z← a points bc; b; c; h

[1] (b c)← bc

[2] h← (c-b)÷ a-1

[3] z← b, b++/((a-1)1⍴ ⍳ a)× h

 

5 points 1 4

1 1.75 2.5 3.25 4

3 points 1 4

1 2.5 4

6 points 1 2

1 1.2 1.4 1.6 1.8 2


 

Лабораторная работа №5

1) Вычислить корни квадратного уравнения с заданными коэффициентами

[0] k← a koren bc; b; c; d; x; y; k

[2] d← (b*2)-4× a× c

[3] x← ((-b)+d*0.5)÷ 2× a

[4] y← ((-b)-d*0.5)÷ 2× a

[5] k← x, y

1 koren 3 ¯ 4

1 ¯ 4

2) Функция вычисления расстояния между точками в пространстве

[0] s← A rast B

[1] s← (+/(A-B)*2)*0.5

A← 2 5 8

B← 1 3 2

A rast B

6.403124237

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.