Как сделать значение скалярным в маткаде

Добавил пользователь Дмитрий К.
Обновлено: 21.08.2024

Здесь f1(x1, . ,хм) , . fn(x1, . ,хм) — некоторые скалярные функции от скалярных переменных хцх2/ . /хм и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (1) можно формально переписать в виде

где х — вектор, составленный из переменных x1,х2, . ,хм, a f (х) — соответствующая векторная функция.

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

  • Given — ключевое слово;
  • система, записанная логическими операторами в виде равенств и, возможно, неравенств;
  • Find(x1. ,хм) — встроенная функция для решения системы относительно переменных хх. хм.

Вставлять логические операторы следует, пользуясь панелью инструментов Boolean (Булевы операторы). Если Вы предпочитаете ввод с клавиатуры, помните, что логический знак равенства вводится сочетанием клавиш + . Блок Given/Find использует для поиска решения итерационные методы, поэтому, как и для функции root, требуется задать начальные значения для всех х1, . ,xм. Сделать это необходимо до ключевого слова Given. Значение функции Find есть вектор, составленный из решения пс каждой переменной. Таким образом, число элементов вектора равно число аргументов Find.

В листинге 8.6. приведен пример решения системы двух уравнений.

Листинг 8.6. Решение системы уравнений

В первых двух строках листинга вводятся функции, которые определяют систему уравнений. Затем переменным х и у, относительно которых она будет решаться, присваиваются начальные значения. После этого следует ключевое слово Given и два логических оператора, выражающих рассматриваемую систему уравнений. Завершает вычислительный блок функция Find, значение которой присваивается вектору v. Следующая строка показывает содержание вектора v, т. е. решение системы. Первый элемент вектора есть первый аргумент функции Find, второй элемент — ее второй аргумент. В последних двух строках осуществлена проверка правильности решения уравнений.

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

Отметим, что уравнения можно определить непосредственно внутри вычислительного блока. Таким образом, можно не определять заранее функции f (x,y) и д(х,у), как это сделано в первых двух строках листинга 8.6, а сразу написать:

Такая форма представляет уравнения в более привычной и наглядной форме, особенно подходящей для документирования работы.

Графическая интерпретация рассмотренной системы представлена на рис. 8.3. Каждое из уравнений показано на плоскости XY графиком. Первое — сплошной кривой, второе — пунктиром. Поскольку второе уравнение линейное, то оно определяет на плоскости XY прямую. Две точки пересечения кривых соответствуют одновременному выполнению обоих уравнений, т. е. искомым действительным корням системы. Как нетрудно убедиться, в листинге найдено только одно из двух решений — находящееся в правой нижней части графика Чтобы отыскать и второе решение, следует повторить вычисления, изменив начальные значения так, чтобы они лежали ближе к другой точке пересечения графиков, например x=-1, y=-1.

Рис. 8.3. Графическое решение системы двух уравнений

Пока мы рассмотрели пример системы из двух уравнений и таким же числом неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х в рассмотренный выше листинг 8.6 приведет к нахождению другого решения, как это показано в листинге 8.7.

Листинг 8.7. Решение системы уравнений и неравенств

Обратите внимание, что, несмотря на те же начальные значения, что и в листинге 8.6, мы получили в листинге 8.7 другой корень. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке листинга 8.7.

Вычислительный блок использует константу CTOL в качестве погрешности выполнения уравнений, введенных после ключевого слова Given. Например, если CTOL=0.001, то уравнение х=10 будет считаться выполненным и при х=10.001, и при х=9.999. Другая константа TOL определяет условие прекращения итераций численным алгоритмом (см. разд. 8.4). Значение стоъ может быть задано пользователем так же как и TOL, например, CTOL:=0.01. По умолчанию принято, что CTOL=TOL=0.001, но Вы по желанию можете переопределить их.

Особенную осторожность следует соблюдать при решении систем с числом неизвестных большим, чем число уравнений. Например, можно удалить одно из двух уравнений из рассмотренного нами листинга 8.6, попытавшись решить единственное уравнение g(х,у)=о с двумя неизвестными х и у. В такой постановке задача имеет бесконечное множество корней: для любого х и, соответственно, у=-х/2 условие, определяющее единственное уравнение, выполнено. Однако, даже если корней бесконечно много, численный метод будет производить расчеты только до тех пор, пока логические выражения в вычислительном блоке не будут выполнены (в пределах погрешности). После этого итерации будут остановлены и выдано решение. В результате будет найдена всего одна пара значений (х,у), обнаруженная первой.

О том, как найти все решения рассматриваемой задачи, рассказывается в разд. 8.7.

Вычислительным блоком с функцией Find можно найти и корень уравнения с одним неизвестным. Действие Find в этом случае совершенно аналогично уже рассмотренным в данном разделе примерам. Задача поиска корня рассматривается как решение системы, состоящей из одного уравнения. Единственным отличием будет скалярный, а не векторный тип числа, возвращаемого функцией Find. Пример решения уравнения из предыдущего раздела приведен в листинге 8.8.

Листинг 8.8. Поиск корня уравнения с одним неизвестным с помощью функции Find

В чем же отличие приведенного решения от листинга 8.1 с функцией root? Оно состоит в том, что одна и та же задача решена различными численными методами. В данном случае выбор метода не влияет на окончательный результат, но бывают ситуации, когда применение того или иного метода имеет решающее значение.

MathCad | ANSYS CFX | MS Office

Поиск по сайту

Выбор языка

Решение уравнений в MathCad

Часто в курсовом проекте, либо в лабораторной работе встает вопрос о решении какого-либо сложного большого уравнения с одним неизвестным. Не всегда хочется тратить 10 — 20 минут на рутинные преобразования в процессе которых, велика вероятность допущения ошибки. Целесообразно воспользоваться математической программой (в данном случае MathCad), которая быстро и правильно сможет дать ответ. Мы рассмотрим пример использования 2-ух способов решения уравнений, причем как в числах так и в символьном виде.

Способ №1: использование вычислительного блока Given — Find:

Given в маткаде это

Это наиболее распространенный способ решения обычных алгебраических уравнений. Он достаточно прост. В рабочем поле записываем первое слово Given. Это служебное слово. Оно "подключает" определенные программные модули mathcad, необходимые для решения уравнения. Эти модули в своем составе содержат основные численные методы решения: метод бисекции, простой итерации и пр. Далее пишется наше уравнение в любом — явном или неявном виде. Само уравнение набирается с клавиатуры с использованием логического символа "равно". На панельке Boolean (Булева алгебра) он выделен жирным шрифтом (см. рис. 1).
Рис. 1. Панель "Булевая алгебра"
Далее пишется слово Find(x) (где х — переменная). Это функция, которая и получает ответ. Функцию Find(x) можно присвоить какой-либо переменной и использовать далее в расчетах. Для получения результата, после Find(x) следует поставить символ "->" либо " Given в маткаде это" style="margin: 0 10px 5px 0;" src="http://student-engineer.pro/images/mathcad/equa_equa.PNG" />
Рис. 2. Панель "Вычисления"
В зависимости от сложности уравнения через некоторое время MathCad выведет результат.

Возможности MathCad позволяют определить корень как в численном виде (т. е. результат решения уравнения представляет собой число) так и в символьном (результат — выражение). Для численного определения корня необходимо задать (определить) ВСЕ переменные входящие в уравнение и даже искомую переменную. MathCad воспринимает задание искомой переменной как начальное приближение корня. Крайне важно задаться начальным приближением, поскольку без него корень уравнения невозможно определить в силу особенностей используемых численных методов. Нужно отметить, что некорректное задание начального приближения часто становится причиной получения неверного результата либо его отсутствия вообще. Но не стоит забывать также и о том, что корня может не быть, потому что само уравнение его не имеет.
В том случае, если необходимо решить уравнение относительно какой-либо переменной в символьном виде, то нет необходимости задаваться значениями всех входящих в уравнение параметров и начальным приближением переменной. В этом случае достаточно ввести уравнение (также через "жирное равно") и после оператора Find(x) поставить "->". При этом будут работать уже другие функции MathCad, которые заточены под символьное преобразование и упрощение выражений. Результатом решения будет выражение. Стоит отметить, что MathCad сможет записать решение далеко не всякого уравнения. В этом смысле его возможности ограничены.

Для подтверждения и закрепления выше сказанного, Вам предлагается скачать и познакомиться с примерами решения уравнений как в численном так и в символьном виде.

Способ №2: Применение метода solve:

Given в маткаде это

Этот метод по существу не отличается от выше рассмотренного, поскольку процедура нахождения корня аналогична. Разница лишь в оформлении. В этом случае наше уравнение записывается без операторов Given и Find. После ввода уравнения на панели Symbolic нажимаем кнопку solve (см. рис. 3), определяем через запятую искомую переменную, жмем "->" и получаем ответ.
Рис. 3. Панель "Символьные"
Иногда, то что не получается найти с помощью Given Find получается в solve.

Mathcad дает возможность решать также и системы уравнений. Максимальное число уравнений и переменных равно пятидесяти. В первой части этого раздела описаны процедуры решения систем уравнений. В заключительной части приведены примеры и проведено обсуждение некоторых часто встречающихся ошибок. Результатом решения системы будет численное значение искомого корня. Для символьного решения уравнений необходимо использовать блоки символьного решения уравнений. При символьном решении уравнений искомый корень выражается через другие переменные и константы.

Для решения системы уравнений выполните следующее:

  • Задайте начальные приближения для всех неизвестных, входящих в систему уравнений. Mathcad решает уравнения при помощи итерационных методов. На основе начального приближения строится последовательность, сходящаяся к искомому решению.
  • Напечатайте ключевое слово Given. Оно указывает Mathcad, что далее следует система уравнений. При печати слова Given можно использовать любой шрифт, прописные и строчные буквы. Убедитесь, что при этом Вы не находитесь в текстовой области или параграфе.
  • Введите уравнения и неравенства в любом порядке ниже ключевого слова Given. Удостоверьтесь, что между левыми и правыми частями уравнений стоит символ =. Используйте [Ctrl]= для печати символа =. Между левыми и правыми частями неравенств может стоять любой из символов , , и .
  • Введите любое выражение, которое включает функцию Find. При печати слова Find можно использовать шрифт любого размера, произвольный стиль, прописные и строчные буквы.

Функция Find возвращает найденное решение следующим образом:

  • Если функция Find имеет только один аргумент, то она возвращает решение уравнения, расположенного между ключевым словом Given и функцией Find.
  • Если функция Find имеет более одного аргумента, то она возвращает ответ в виде вектора. Например, Find(z1, z2) возвращает вектор, содержащий значения z1 и z2 , являющиеся решением системы уравнений.

Ключевое слово Given, уравнения и неравенства, которые следуют за ним, и какое-либо выражение, содержащее функцию Find, называются блоком решения уравнений.

На Рисунке 5 показан рабочий документ, который использует блок решения уравнений для решения одного уравнения с одним неизвестным. Так как имеется только одно уравнение, то только одно уравнение появляется между ключевым словом Given и формулой, включающей функцию Find. Так как уравнение имеет одно неизвестное, то функция Find имеет только один аргумент. Для решения одного уравнения с одним неизвестным можно также использовать функцию root, как показано ниже:

Рисунок 5: Блок решения уравнений для одного уравнения с одним неизвестным.

Между ключевым словом Given и функцией Find в блоке решения уравнений могут появляться выражения строго определенного типа. Ниже приведен список всех выражений, которые могут быть использованы в блоке решения уравнений. Использование других выражений не допускается. Эти выражения часто называются ограничениями. В таблице, приведенной ниже, через x и y обозначены вещественнозначные скалярные выражения, а через z и w обозначены любые скалярные выражения.

УсловиеКак ввестиОписание
w = z[Ctrl] =Булево равенство возвращает 1, если операнды равны; иначе 0
x > y>Больше чем.
x

Следующие выражения недопустимы внутри блока решения уравнений:

  • Ограничения со знаком .
  • Дискретный аргумент или выражения, содержащие дискретный аргумент в любой форме.
  • Неравенства вида a -15 .
  • Поставленная задача может не иметь решения.
  • Для уравнения, которое не имеет вещественных решений, в качестве начального приближения взято вещественное число. Если решение задачи комплексное, то оно не будет найдено, если только в качестве начального приближения не взято также комплексное число. На Рисунке 11 приведен соответствующий пример.
  • В процессе поиска решения последовательность приближений попала в точку локального минимума невязки. Метод поиска решения, который используется в Mathcad, не позволяет в этом случае построить следующее приближение, которое бы уменьшало невязку. Для поиска искомого решения пробуйте использовать различные начальные приближения или добавьте ограничения на переменные в виде неравенств, чтобы обойти точку локального минимума.
  • В процессе поиска решения получена точка, которая не является точкой локального минимума, но из которой метод минимизации не может определить дальнейшее направление движения. Метод преодоления этой проблемы — такой же, как для точки локального минимума: измените начальное приближение или добавьте ограничения в виде неравенств, чтобы миновать нежелательную точку остановки.
  • Возможно, поставленная задача не может быть решена с заданной точностью. Если значение встроенной переменной TOL слишком мало, то Mathcad может достигнуть точки, находящейся достаточно близко к решению задачи, но уравнения и ограничения при этом не будут выполнены с точностью, задаваемой переменной TOL. Попробуйте увеличить значение TOL где-нибудь выше блока решения уравнений.

Что делать, когда имеется слишком мало ограничений

Задача, аналогичная той, которая приведена на Рисунке 12, называется недоопределенной. Ограничений в ней меньше, чем переменных. Поэтому ограничения не содержат достаточной информации для поиска решения. Поскольку функция Find имеет пять аргументов, Mathcad определяет, что требуется решить два уравнения с пятью неизвестными. Вообще говоря, такая задача обычно имеет бесконечное число решений.

При использовании блока решения уравнений в Mathcad необходимо задать количество уравнений по крайней мере не меньшее, чем число искомых неизвестных. Если зафиксировать значения некоторых переменных, удастся решить уравнения относительно оставшихся переменных. На Рисунке 13 показано, как, зафиксировав часть переменных, решить недоопределенную задачу из Рисунка 12. Поскольку функция Find содержит только два аргумента, z и w, Mathcad определяет переменные x, y и v как имеющие фиксированные значения 10, 50 и 0 соответственно. Блок решения уравнений становится в этом случае корректно определенным, потому что теперь имеются только две неизвестных, z и w, и два уравнения.

Рисунок 12: Функция Find имеет пять аргументов, поэтому Mathcad определяет, что требуется решить два уравнения с пятью неизвестными.

Рисунок 13: Проблема может быть решена, если уменьшить количество аргументов функции Find.

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter

1 "текстовые стили"
В файле можно настроить текстовые стили, но если создать новый файл, то текстовые стили приходиться настраивать заново. Можно ли как нибудь ожин раз настроить "по умолчанию" и потом всю жизнь использовать?

2 "нижний индекс"
Очень часто необходимо использовать "нижний индекс", но MathCAD понимает такой оператор с "нижним индексом" как элемент матрицы, можно ли как то с этим бороться?

3 "еденицы измерения"
Слышал краем уха, что MathCAD может учитывать единицы измерения, как это работает?

ps. Вопросы буду пополнять по мере их накопления

хахахаха,видимо не поняли.
я делаю сивольное вычисление(обратное преобр лапласса),как я в результате вычисления после стрелки что то поменяю?в ответе?и зачем вручную вводить ответ?с таким успехом можно на бумажке все считать.
И что значит "так как это сделано с экспонентой"?

дальше когда я буду испльзовать это выражение в расчетах - да,я могу вручную посчитать 310/21.но здесь то нет.

Прошу прощения, ответил наспех, не обратив внимание на существо формулы. Ответ: я не знаю, думаю вряд-ли получится. Если получится - самому оч. интересно узнать.

Прошу подсказать!
Задана формула, переменные определны. Вычисление не происходит и в формуле одна из переменных подсвечивается красным и пишется сноска - "Это значение должно быть скаляром".
Файлик приложен.

-> Serg666xxx
В MathCAD-е разделителем целой и дробной части десятичного числа по умолчанию является ТОЧКА. У Вас же стоит ЗАПЯТАЯ

помогите разобратся с вводом данных. никак не догоню.
есть готовые формулы, данные, но никак не хочет работать



Вопрос м.б. не по существу. Поставил MathCAD 14М035. Настраиваю панели инструментов - располагаю их в одну строку. Закрываю MathCAD, затем снова открываю - панели в 2 строки. И так каждый раз! Где эта Д. переменная или еще что отвечает за настройку и расположение панелей.

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

У меня вопрос: мне нужно настроить Пи регулятор для ОУ первого порядка, может кто нибудь подскажет хотя бы каким способом это сделать?

Добрый день, подскажите плиз, как в MathCad функцию p = f(x,i) заданную табличными данными преобразовать в функцию x = f(p,i). Очень срочно надо.

Добрый день, подскажите плиз, как в MathCad функцию p = f(x,i) заданную табличными данными преобразовать в функцию x = f(p,i). Очень срочно надо.

Дык она у Вас УЖЕ задана! -> "заданную табличными данными". Просто в качестве аргументов функции используете столбцы "Р" и "i", а в качестве значений - столбец "Х". Если не совсем понятно объяснил, то покажите формулу(ы) как Вы используете p = f(x,i), а я покажу как использовать x = f(p,i).

Просто в качестве аргументов функции используете столбцы "Р" и "i", а в качестве значений - столбец "Х"

. Вообщем у меня есть матрица "P" размером 29x29, и две матрицы "i" и "X" размером 1x29, матрица "p" является функцией двух переменных "i" "X". Необходимо получить матрицу "X" размером 29x29, и две матрицы "p" и "i" размером 1x29, где матрица "X" будет функцией переменных "p" "i".

С этими понятиями Вы могли сталкиваться, работая в Excel – столбец чисел называется вектор-столбцом, строка – вектор-строкой. Блок объектов является матрицей. Вычисления в Excel, по сути, являются операциями с векторами и матрицами. В этом уроке мы познакомимся с аналогичными вычислениями в Mathcad, и мы поймем, почему в Mathcad их проводить проще.

Введение

mathcad_21_01

Это значение можно вывести прямо в документ, чтобы не забыть его и не запутаться:

Теперь рассмотрим несколько матриц:

mathcad_21_03

Как видно, они могут включать в себя числа, символы и даже функции. Они также могут содержать текстовые элементы (строки).

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

mathcad_21_04

Матрицы выше являются квадратными 2х2, но у них может быть любой размер по строкам и столбцам:

mathcad_21_05

Запомните: первое число – номер строки (или их количество), второе – столбца.

Элементы, выделенные с помощью подстрочных индексов:

mathcad_21_06

Для вектор-столбца второй индекс можно опустить, но не для вектор-строки:

mathcad_21_07

Во вкладке Математика –> Операторы и символы –> Операторы –> Векторы и матрицы Вы найдете команды для выделения столбцов и строк:

mathcad_21_08

mathcad_21_09

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

Мы рассмотрим эту операцию подробнее позже. Однако стоит заметить, что она требует девять операций умножения и девять – сложения. Расписывать их утомительно и чревато ошибками – для больших матриц сделать это очень трудно.

Применение векторов очень широко. Вспомните пиксели на экране монитора – их могут быть миллионы. Они обрабатываются с помощью операций с матрицами.

В Mathcad

mathcad_21_11

Перемести указатель на сетку, выберите желаемый размер матрицы, затем щелкните левой кнопкой мыши. Появится пустая матрица:

Матрице можно присвоить имя, щелкнув на левую скобку, нажав [:] для оператора присваивания и введя имя:

mathcad_21_14

Операции с матрицами

Эффект от различных операций с матрицами и векторами будет проще понять, используя символы. Будем использовать две матрицы и два вектора:

mathcad_21_15

Оператор транспонирования находится на вкладке Математика –> Операторы –> Векторы и матрицы:

mathcad_21_16

Щелкните по правой границе матрицы и примените оператор. Он работает как для символьных, так и для числовых матриц:

mathcad_21_17

Часто операции в векторами приходится совершать поэлементно. Для этого служит оператор векторизации. Операции в Excel зачастую являются поэлементными, они также важны и в Mathcad. Чтобы перемножить два вектора поэлементно, сначала введите простое умножение:

Затем выберите все выражение и примените векторизацию:

Вычислите, чтобы посмотреть результат: первый элемент умножается на первый, второй – на второй, и т.д.:

Другие поэлементные операции:

mathcad_21_21

Поэлементные операции применимы только к массивам одного размера.

Сложение и вычитание

Сложение и вычитание выполняется поэлементно:

mathcad_21_22

Эта операция также применима лишь к массивам одного размера.

С помощью оператора суммирования можно найти сумму всех элементов вектора (не матрицы):

Умножение на константу работает так:

mathcad_21_24

При скалярном умножении матриц происходит умножение строк на столбцы. При этом используется тот же символ, что и при обычном умножении. Эта операция допустима только для тех матриц, в которых число строк в первой матрице равно числе столбцов во второй. Для наших матриц 2х2:

mathcad_21_25

Заметьте, что последовательность множителей играет роль:

mathcad_21_26

Скалярное произведение не коммутативно, за исключением особых случаев:

Скалярное произведение двух векторов дает результат с комплексно-сопряженными числами (с чертой сверху). Для действительных чисел на это можно не обращать внимания:

mathcad_21_28

Этот оператор применим только для двух вектор-столбцов, состоящих из трех элементов:

mathcad_21_29

Векторное произведение имеет широкое применение в механике, гидродинамике, электромагнетизме и в других областях.

Обратная матрица определяется только для квадратных матриц:

mathcad_21_30

Произведение матрицы и ее обратной матрицы является единичной матрицей:

mathcad_21_31

Произведение матрицы и единичной матрицы дает изначальную матрицу:

mathcad_21_32

mathcad_21_33

Определитель можно найти только для квадратной матрицы. Его значение может быть равно нулю, даже если все элементы матрицы не равны нулю. Обратная матрица содержит дроби, в знаменателе которых находится определитель:

mathcad_21_34

Если определитель равен нулю, обратной матрицы не существует, а матрица является сингулярной. Вспомните деление на ноль в обычной алгебре. Mathcad сообщит, если матрица является сингулярной:

В этой статье мы подробно разберем, как в MathCAD задать интервал с определенным шагом.

MathCAD интервал значений

Для начала вспомним: чтобы задать диапазон значений с шагом 1 по умолчанию вводим переменную, которой мы задаем значение (у меня это будет х), затем ставим знак присвоение




Однако, использовать эти значения в выражениях не получится, т.к. MathCAD определяет их как не скалярную величину


В то же время, простое вычисление вполне можно произвести




Конечно, это несколько, не удобно, особенно, если брать большие интервалы, или интервалы далеко от нуля. Можно вызывать значение отдельного значения интервала, задав необходимый индекс (на клавиатуре наберем z[2= ).

MathCAD интервал с заданным шагом

По умолчанию шаг интервала в MathCAD принят за единицу, чтобы его сделать другим необходимо задать интервал следующим образом: а:=0.2,0.4..2 (этим выражением мы задаем интервал от 0,2 до 2 с шагом 0,2)

Для иллюстрации применения в MathCAD так называемого цикла типа арифметической прогрессии (обычного цикла for ) напишем функцию, определяющую, является ли простым заданное натуральное число n :

Функция проверки на простое число в MathCAD


Функция проверки на простое число в MathCAD

Она предполагает, что переданное ей число n – простое (присваивает переменной r значение 1), а затем последовательно проверяет остатки от деления n на значения 2, 3, …, корень(n) – остатки от деления на 1 и n проверять нет смысла, а если число не простое, ни один из его двух целочисленных сомножителей не может быть больше квадратного корня из числа ( 5*5=25 и 5 равно корню из 25, а числа, на которое 25 бы делилось нацело, большего 5, не существует).

Остаток от деления нацело значения n на значение i можно найти с помощью стандартной функции mod(n,i) . Если найден хотя бы один остаток, равный нулю, функция Simple записывает возвращаемое значение r=0 и прерывает цикл проверок, в противном случае значение r остаётся равным 1, как оно и было назначено до цикла.

Протестировать нашу функцию можно, если написать ещё одну функцию, формирующую вектор из всех простых чисел, не превышающих заданного значения N :

Все простые числа, не превышающие заданного N - реализация в MathCAD


Все простые числа, не превышающие заданного N - реализация в MathCAD

Как видим, наша функция Simple неверна – например, она не считает простыми числа 2 и 3. Проблема состоит в том, что цикл for будет выполняться, даже если начальное значение параметра цикла больше конечного и шаг цикла равен 1 (по умолчанию). Например, для n=2 граница цикла floor(корень(2))=1 и цикл, проверив остатки от деления n=2 на 2 и 1, равные нулю, решит, что число 2 – не простое.

Правильно будет реализовать внутренний цикл через оператор while :

Все простые числа, не превышающие заданного N - реализация через while


Все простые числа, не превышающие заданного N - реализация через while

или задать для цикла for явный шаг, равный +1 :

Все простые числа, не превышающие заданного N - реализация в MathCAD


Все простые числа, не превышающие заданного N - реализация в MathCAD

Второй интересный момент - в классическом цикле for в MathCAD, как известно, справа от знака ? обычно ставят дискретный аргумент:

Однако Маткад позволяет поставить вместо дискретной переменной справа от знака ? вектор или матрицу. Более того, можно туда поставить список векторов или матриц, перечисленных через запятую. Скалярная переменная слева от знака ? по очереди примет значение каждого элемента каждой не-скалярной величины в порядке перечисления. На показанном ниже скриншоте видно, как с помощью переменной i (и счётчика элементов k ) программно формируется вектор x из всех положительных элементов векторов-параметров A и B .

Список векторов в программном цикле for MathCAD


Список векторов в программном цикле for MathCAD

Читайте также: