Как задать кусочную функцию в mathcad
БлогNot. Кусочно-линейная интерполяция в MathCAD
Кусочно-линейная интерполяция в MathCAD
Для восстановления зависимости по известным точкам на плоскости иногда решения со степенными функциями (вроде полинома Ньютона) не нужны или трудоёмки, а удобнее всего простая кусочно-линейная интерполяция, то есть, построение ломаной, последовательно проходящей через все точки.
Реализуем данный расчёт в MathCAD, задав абсциссы и ординаты известных точек векторами X и Y соответственно. Предположим при этом, что одинаковых значений среди Xi нет, и они уже упорядочены по возрастанию. Если это не так, добавьте решение из этой записи блога.
Подпрограмма PieceLinear по заданным векторам значений X и Y вычисляет значение кусочно-линейной функции в точке x малое. Учитывается, что x может совпасть с одним из узлов или оказаться меньше (больше) диапазона известных значений X .
Вторая подпрограмма, используя первую, строит таблицу значений кусочно-линейной функции в заданных пределах изменения x с заданным шагом. На выходе подпрограммы — матрица, в первом столбце которой записаны значения x , а во втором y .
По этим данным можно, например, построить график, добавить на него исходные точки и убедиться, что всё «линеаризовано» верно.
Программирование в MathCAD.
Для написания программ служит панель математических инструментов Programming, которая может быть вызвана щелчком на соответствующей кнопке панели инструментов Math. После щелчка на любой кнопке панели инструментов Programming в программу вставляется тот или иной оператор.
Все операторы вставляются только щелчком на соответствующей кнопке и ни в коем случае не набираются с клавиатуры.
1. Создание программы.
Для того, чтобы превратить обычное однострочное выражение в многострочное (программу), достаточно щелкнуть на кнопке с надписью Add Line. Это приведет к тому, что в рабочей области документа появится вертикальная черта, а справа от нее 2 поля ввода, в которые можно ввести 2 строки программы. Если далее нужно будет добавить еще строки, то достаточно снова щелкнуть на кнопке Add Line.
Внутри программы можно использовать глобальные переменные, но лучше использовать локальные (доступ к которым можно осуществить только из самой программы). Для присваивания значения локальной переменной используется символ ←.
Любая программа должна возвращать некоторое значение, как результат вычислений: это может быть как число так и функция. Возвращаемое значение записывается в последней строке программы, либо с помощью оператора return.
2. Условный оператор.
Для проверки условий в MathCAD служит оператор if. Этот оператор имеет 2 поля ввода (справа и слева от слова if). В правое поле ввода вводится условие, а в левое поле ввода вводится команда или последовательность команд, которые следует выполнить в случае истинности условия. Если невыполнение условия должно привести к выполнению какого-либо другого программного кода, можно в строке, следующей за оператором if, вставить оператор otherwise. В поле ввода слева от этого оператора необходимо ввести строку программы, которая будет выполняться только в том случае, если не выполнилось условие, заданное в операторе if.
Если в программе введено подряд несколько строк с оператором if, то выражение слева от otherwise ,будет выполнено только в том случае, если не выполняются условия, заданные во всех операторах if.
Рассмотрим, например, описание кусочно-заданной функции:
Оператор while имеет 2 поля ввода (справа и снизу).
· В поле ввода справа от слова while следует ввести условие, при истинности которого выполняется цикл..
· В поле ввода ниже слова while следует ввести тело цикла – одна или несколько строк программы (для введения нескольких строк используется оператор Add Line), выполнение которых нужно повторить несколько раз.
Рассмотрим использование цикла while для вычисления приближенного значения квадратного корня (методом касательных):
Оператор for имеет три поля ввода :
· В поле ввода между словом for и знаком , следует указать имя переменной-счетчика.
· В поле ввода после знака следует указать диапазон значений, которые будет принимать переменная-счетчик (вместо диапазона можно указать имя массива, из которого должны браться значения переменной-счетчика).
· В поле ввода под словом for следует ввести тело цикла.
Рассмотрим функцию, вычисляющую факториал.
Для того, чтобы сделать программу рекурсивной, нужно организовать вызов ею самой себя внутри программы. Например, рассмотрим рекурсивную функцию, вычисляющую факториал:
Эта функция, в отличие от предыдущей не может работать для нецелых и отрицательных чисел.
6. Обработка ошибок.
Система MathCAD предоставляет пользователю возможность перенаправлять программу в случае возникновения ошибки (деление на 0, выход за пределы массива). Для этого существует оператор on error, который содержит 2 поля ввода (справа и слева):
— Справа вводится выражение, которое следует вычислить
— Слева вводится выражение, которое следует вычислить, если в правом выражении окажется ошибка.
Например, рекурсивная программа вычисления факториала выдает ошибку для вычисления факториала нецелых и отрицательных чисел. Изменим программу так, чтобы в таких случаях факториал был равен 0:
Иногда возникает обратная ситуация: система MathCAD не видит никакой стандартной ошибки, но необходимо, чтобы появлялась надпись об ошибке. Например, в нерекурсивной программе вычисления факториала выдается ответ для отрицательных значений, а хотелось бы, чтобы возникала ошибка. В таких случаях используется конструкция следующего вида:
error (“[текст ошибки]”) if [условие]

7. Программы, составленные из нескольких операторов.
MathCAD имеет возможность написания различных программ, содержащих несколько операторов, при этом операторы могут быть вложены друг в друга, если в какой-то оператор вложено несколько операторов, то их нужно объединять вертикальной линией (Add Line).
Рассмотрим программу, вычисляющую среднее арифметическое элементов произвольной матрицы.
Контрольные задания.
1. Построить график кусочно-заданной функции
2. Решить задачу, используя цикл while.
Варианты:
1. 8. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p % от имеющейся суммы. Написать функцию, вычисляющую, какая сумма будет лежать у этого человека в банке через год.
2. 9. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p% от имеющейся суммы. Написать функцию, определяющую, за какой месяц величина ежемесячного увеличения вклада превысит k руб.
3. 10. Человек открыл счет в банке, вложив n руб. Через каждый месяц размер вклада увеличивается на p % от имеющейся суммы. Написать функцию, вычисляющую, через, сколько месяцев размер вклада превысит k руб.
4. 11. Начав тренировки, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал длину пробега на p% от пробега предыдущего дня. Написать функцию, вычисляющую, в какой день он пробежит больше k км.
5. 12. Начав тренировки, лыжник в первый день пробежал n км. Каждый следующий день он увеличивал длину пробега на p% от пробега предыдущего дня. Написать функцию, вычисляющую, в какой день суммарный пробег за все дни превысит k км.
6. 13. Один человек имеет n тыс.руб., он хочет купить машину за m тыс.руб., для этого кладет все свои деньги в банк под k% годовых, но в результате инфляции машина дорожает каждый год на p%. Написать функцию, вычисляющую, через сколько лет этот человек сможет купить машину?
7. 14. В некотором году (назовем его условно первым) на участке в n га средняя урожайность ячменя составила m центнеров с га. После этого каждый год площадь участка увеличивалась на p%, а средняя урожайность – на k%. Определить, в каком году общий урожай, собранный за все время, начиная с первого года, превысит s центнеров.
22. Построение графиков кусочно-непрерывных функций
Последовательность действий для построения графика кусочно-непрерывной функции такова:
Q с помощью программного фрагмента задать кусочно-непрерывную функцию (см. тему 4), например,
;
Q определить аргумент в виде дискретной переменной таким образом, чтобы функция вычислялась по каждой из формул (см. краткие теоретические сведения темы 2), например ;
Q построить график заданной функции (см. краткие теоретические сведения темы 5);
Q двойным щелчком мыши по области графика открыть окно форматирования;
Q для нанесения вспомогательных линий щелчком мыши установить флажок переключателя Crid Lines для каждой оси;
Q для ввода названий осей и самого графика в окне форматирования выбрать закладку Labels, ввести заголовок графика в поле Title и установить флажок переключателя Show Title;
Q ввести названия осей в полях ввода панели Axis Labels;
Q для изменения толщины линии выбрать закладку Traces И задать толщину линии графика, используя список поля Weight :
;
Q закрыть окно форматирования графика нажатием кнопки ОК.
Пример 5.2 Построить график кусочно-непрерывной функции .
Пределы изменения аргумента подобрать так, чтобы перекрывались все три диапазона. При задании вида функции использовать программный фрагмент.