ВУЗ:
Составители:
который сообщает нам, что 1) участки, которые маркированы в ul как принадлежащие к
группе 1, фактически принадлежат группе 1; 2) участки, маркированные в ul как
принадлежащие к группе 2, фактически принадлежат группе 1; 3) участки, маркированные
в ul как принадлежащие к группе 3, фактически принадлежат группе 2; 4) участки,
маркированные в ul как принадлежащие к группе 4, фактически принадлежат группе 4.
Мы можем выразить замены, необходимые на участке ul, как правила преобразования.
Thread[Range[Length[ulp]]−>ulp]
{1→1,2→1,3→2,4→4}
Если мы просто применим эти правила преобразования к ul, изменяя 2 на1 и 3 на 2,
результирующая матрица будет все еще неправильно маркирована, так как участок на ul,
предварительно маркированный как принадлежащий к группе 3, будет повторно маркирован
как принадлежащий к группе 2, а не к группе 1. Чтобы сделать перемаркировку правильно,
правила преобразования применяются к ul несколько раз.
MatrixForm[ul//. Thread[Range[Length[ulp]]ulp]]
0 0 0 0 0
0 1 0 0 1
0 1 0 1 1
0 1 1 1 0
0 0 0 0 4
Теперь ячейки, принадлежащие к различным группам, в нашем примере правильно
идентифицированы.
▪ Построение программы
Проработав этот простой пример, мы можем написать программу, чтобы выполнить
заданный алгоритм. Будем использовать матрицу r размерностью m на m.
Шаг 1
AddZeros[w_] := Prepend[w, Table[0, {Length[w[[1]]]}]
и
u=Transpose[AddZeros[Transpose[AddZeros[r]]]]
Шаги 2 и 3 реализуются так:
ul=u/. 1->0
и
ulp={}
Перед выполнением шага 4 выполним шаг 4a. Шаг 4a состоит в использовании команды
Wich, которая проверяет условия заполнения соседних ячеек
Which[u[[q, k]] == 1 && uup == 1 &&
uback == 1 && ulup =!= ulback,
ul[[q, k]] = Min[ulp[[ulback]], ulp[[ulup]] ];
ulp[[Max[ulp[[ulback]],
ulp[[ulup]]] ]] = Min[ulp[[ulback]], ulp[[ulup]]],
u[[q, k]] == 1 && uup == 1,
ul[[q, k]] = ulup,
u[[q, k]] == 1 && uback == 1,
ul[[q, k]] = ulback,
94
Страницы
- « первая
- ‹ предыдущая
- …
- 92
- 93
- 94
- 95
- 96
- …
- следующая ›
- последняя »