Excel и матричные формулы
Sep. 19th, 2007 01:53 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Кто-нибудь знает хорошую документацию о матричных формулах Excel?
Точнее, как можно указать, какую формулу я хочу воспринимать, как матричную, а какую, как обычную, скалярную.
Пример: есть колонка, в которой я хочу посчитать элементы, находящиеся в заданных пределах (между 0 и 100, например).
Посчитать элементы меньшие 0 можно как минимум двумя способами: функция =nb.si(range, "<0") (по-английски, по-моему, она называется countif) и {=somme(si(range<0;1;0))} (английские эквиваленты sum и iif). Ни тот, ни другой метод мне не удаётся примирить со вторым критерием: в первом случае просто синтаксис не предусмотрен, во втором Excel не воспринимает et (and) как матричную функция: {=somme(si(et(range<0;range>100);1;0))} даёт выражение, равное {=si(et(range<0;range>100);1;0)}, потому как оно скалярное, потому как {=et(range<0;range>100)} скалярное. Последнее, к слову, равно true тогда и только тогда, когда все элементы матрицы попадают под заданное условие.
Откуда и изначальный вопрос.
В MatLab всё гораздо проще, там чётко разделяется синтаксис операций по математическим правилам обращения с матрицами от поэлементных. Мне в данном случае нужна именно поэлементная операция et, т.е. такая, которая принимает матрицу любого размера и выдаёт матрицу того же размера, каждый элемент которой равен результату операции, применённой к соответствующему элементу матрицы изначальной.
P.S. Варианты с созданием промежуточных колонок, подсчётом через VBA, SQL и "перейди на unix" не предлагать :-)
Точнее, как можно указать, какую формулу я хочу воспринимать, как матричную, а какую, как обычную, скалярную.
Пример: есть колонка, в которой я хочу посчитать элементы, находящиеся в заданных пределах (между 0 и 100, например).
Посчитать элементы меньшие 0 можно как минимум двумя способами: функция =nb.si(range, "<0") (по-английски, по-моему, она называется countif) и {=somme(si(range<0;1;0))} (английские эквиваленты sum и iif). Ни тот, ни другой метод мне не удаётся примирить со вторым критерием: в первом случае просто синтаксис не предусмотрен, во втором Excel не воспринимает et (and) как матричную функция: {=somme(si(et(range<0;range>100);1;0))} даёт выражение, равное {=si(et(range<0;range>100);1;0)}, потому как оно скалярное, потому как {=et(range<0;range>100)} скалярное. Последнее, к слову, равно true тогда и только тогда, когда все элементы матрицы попадают под заданное условие.
Откуда и изначальный вопрос.
В MatLab всё гораздо проще, там чётко разделяется синтаксис операций по математическим правилам обращения с матрицами от поэлементных. Мне в данном случае нужна именно поэлементная операция et, т.е. такая, которая принимает матрицу любого размера и выдаёт матрицу того же размера, каждый элемент которой равен результату операции, применённой к соответствующему элементу матрицы изначальной.
P.S. Варианты с созданием промежуточных колонок, подсчётом через VBA, SQL и "перейди на unix" не предлагать :-)