БлогNot. Mathcad: программой или одной формулой?

Mathcad: программой или одной формулой?

Для реализации в Matchad типовых алгоритмов, связанных с расчётами числовых характеристик последовательностей и массивов, совсем не обязательно писать программы по аналогии с классическими процедурными языками. Например, значение минимального по модулю элемента массива можно в Mathcad найти следующим образом:

процедурный способ поиска минимального по модулю значения в массиве
процедурный способ поиска минимального по модулю значения в массиве

(код написан так, чтобы он работал независимо от значения системной переменной ORIGIN).

Но куда быстрее сделать это с помощью оператора векторизации:

быстрый способ с оператором векторизации
быстрый способ с оператором векторизации

Количество одинаковых минимумов в массиве можно искать, делая дополнительный проход по нему:

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

а можно просто узнать длину вектора, составленного из вхождений минимального элемента в исходный вектор:

количество минимальных элементов в массиве одним вызовом
количество минимальных элементов в массиве одним вызовом

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

Современная тенденция языков и пакетов - готовые алгоритмы вместо их программирования, например, библиотека <algorithm> в C++, функции обработки и фильтрации массивов в PHP или встроенные операторы суммирования, перемножения, векторизации и т.п. в Mathcad.

Общие правила расчётов по типовым алгоритмам можно сформулировать так:

  • для каждой искомой величины создаётся по переменной того же типа данных, что исследуемые значения;
  • до цикла обработки данных всем искомым в нём переменным присваиваются начальные значения. В простейших случаях достаточно присвоить:
    • ноль – количеству, сумму или арифметическому среднему;
    • единицу – произведению;
    • заведомо малое для анализируемых данных значение или первый элемент последовательности данных – максимуму;
    • заведомо большое для анализируемых данных значение или первый элемент последовательности данных – минимуму;
  • в цикле обработки, если очередной элемент данных t (в качестве t может выступать элемент массива, выражение и т.д.) должен быть обработан алгоритмом, применяются операторы вида:
    • k := k + 1; при поиске количества элементов k;
    • s := s + t; при поиске суммы (или арифметического среднего) s;
    • p := p * t; при поиске произведения элементов p;
    • if t<min then min := t; при поиске минимума min из элементов данных t;
    • if t>max then max := t; при поиске максимума max из элементов данных t;

где ":=" - оператор присваивания. Эти правила не зависят от языка или пакета, в которых вы работаете.

Однако если в языке, как и в Mathcad, есть встроенные циклические операторы и встроенная условная функция, все 3 шага типового алгоритма можно выполнить одним выражением.

Приведём несколько примеров, иллюстрирующих это утверждение, найдя для массива A одним оператором:

  • количество положительных элементов массива;
  • сумму элементов, по модулю больших значения 2;
  • произведение квадратов ненулевых элементов массива;
  • минимальный из положительных элементов массива.

Вот скриншоты расчётов, сделанных в том же порядке:

некоторые расчёты для типовых алгоритмов операторами суммы и произведения
некоторые расчёты для типовых алгоритмов операторами суммы и произведения

Последний пример показывает, что во всём нужно знать меру. В самом деле, нам пришлось трижды фильтровать массив прежде, чем его стало можно обработать стандартной функцией min. Трудно придумать аргументы, чем это лучше и нагляднее классического кода

минимальный из положительных элементов массива - классический способ лучше
минимальный из положительных элементов массива - классический способ лучше

Также при поиске произведений следует иметь в виду вот это замечание (2).

 Скачать документ .xmcd Mathcad 14/15 с этими расчётами в архиве .zip (33 Кб)


теги: учебное алгоритм mathcad

29.03.2017, 15:21; рейтинг: 5594