Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
22.05.2015
Размер:
661.5 Кб
Скачать

Министерство образования и науки Российской Федерации

ФГБОУ ВПО «Кубанский государственный технологический университет»

Кафедра электроснабжения промышленных предприятий

Программирование алгоритмов решения нелинейных уравнений

Р у к о в о д с т в о

к лабораторной работе № 1

по курсу «Математическое моделирование в электроэнергетике»

для студентов всех форм обучения направления

140400.68 – «Электроэнергетика и электротехника»

Краснодар 2013

Составитель: канд. техн. наук, доц. Е.А. Беседин

УДК 621.316.001

ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ: Руководство к лабораторной работе № 1 по курсу «Математическое моделирование в электроэнергетике» для студентов всех форм обучения направления 140400.68 – «Электроэнергетика и электротехника» / Кубан. гос. технол. ун-т; Сост. Е.А. Беседин. Краснодар, 2013. – 22 с.

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

Печатается по решению Редакционно-издательского совета Кубанского государственного технологического университета.

Рецензенты: канд. техн. наук, доц. А.М. Смаглиев

(кафедра ЭПП КубГТУ),

д-р техн. наук, проф. А.Н. Плахотнюк

(кафедра электротехники, КубГТУ)

  1. Основы программирования в MathCAD

Математическая средаMathCADprofessionalили + версий имеет ряд операторов, необходимых и достаточных для написания пользователем простых программ. Систему этих операторов принято называть «языком программированияMathCAD». Этот язык программирования предназначен для решения математических задач только под управлениемMathCAD, что означает невозможность создания независимых приложений.

Ввод операторов программирования осуществляется с помощью панели инструментов ProgrammingинтерфейсаMathCADили, непосредственно, с клавиатуры.

Операторы программы пишутся в специальных полях – программных строках (Programline) по строго определенным правилам.

1.1 Простое применение операторов программирования

Пример: посчитать значение выраженияв точке х=10

Порядок

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

1

Создать поля строк программы

]

Add line

2

Ввести само выражение

\2*x3¤¤¤/sin(x/2)

3

В поле верхней строки

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

x{10

4

Вывести результат

=

=

*символ¤будет применяться для обозначения пробела

Оператор ← позволяет определить локальную переменную в программе (за пределами поля программы определение не действительно (!)). Внутри программы недопустимо применение операторов присваивания := и = арифметического равенства.

Этот пример демонстрирует простейшее применение программы.

Пример: Определение пользовательской функции с помощью программы.

Определим программно функцию. Выражение под корнем можно определить равной некоторой локальной переменной.

Порядок

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

1

Ввести имя пользовательской функции, присвоить…

Trane(x):

:=

2

Добавить линии программы

]

Add line

3

Щелкнуть по полю первой (верхней) строки программы и определить локальную переменную r

r{\sin(x)^2¤-e^sin(x)

4

Щелкнуть по полю второй строки программы и ввести выражение, аргументом которого является r

sin(r)¤/r¤+r

5

Ввести напечатанное выражение (нажать «Enter» или щелкнуть в любом месте, ниже или правее активного поля). Затем вычислим значение полученной пользовательской функции в произвольной точке х

<Enter>

Trane(4)=

Приведенная выше программа могла быть заменена менее локальным и экономичным определением:.

1.2 Оператор условия ifotherwise

Оперативная конструкция ifotherwise применяется для «раздвоения» пути вычисления, в зависимости от текущего значения переменных, изменяющихся программно, либо вводимых пользователем в диалоговом режиме.

Прямая соединительная линия 16[оператор_или_директория_1]if [условие]

Форма оператора:

[оператор_или_директория_2] otherwise

Оператор_или_диретория_1 исполняется в том случае, если условие, следующее после ключевого слова if, принимает истинное значение. В противном случае, выполняется оператор_или_директория_2, следующая за ключевым словом otherwisе.

Пример: функцияf(x) задана программно с помощью оператора условия так, что f(x) принимает значение 1, если аргумент (положительное значение) или -1, если х – отрицательный.

Пример: определим кусочную функцию f(x) такую, чтобы: при значениях аргумента х от (-∞;-5) функции ,, в интервале,.

Поря-док

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

1

Определение пользовательской функции программно

f(х): ]

:=

Add Line

2

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

х/10 }x<-5

/

<

if

3

Щелкнуть по маркеру второй строки программы. Ввести второе выражение, оператор условия if, затем условие, при выполнении f(x) должно вычисляться по второму выражению. Добавить программную строку

sin(1.35*x)

}-5<Ctrl>+9

x<0]

sin

if

<

Add Line

4

Щелкнуть по маркеру третьей программной строки и набрать выражение, которое должно выполняться, в случае невыполнения двух предыдущих условий, оператор условия if, затем условие, при выполнении которого f(х) должно вычисляться по третьей программной строке. Добавить 4-ю программную строку.

e^-x/0.6¤¤-1

}0<Ctrl>+

9x<5]

if

<

Add Line

Продолжение

Поря-док

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

5

Щелкнуть по маркеру 4-ой программной строки, ввести выражение, которое выполняется в том случае, если значение всех ранних условий ложно.

cos(1.5*x+2)

<Ctrl>+}

cos

otherwise

На полученном графике явно видны узловые точки перехода линии графика от одной функции к другой (-5,0 и 5). Того же результата можно добиться, используя операторы булевской логики с панели инструментов Boolean.

1.3 Оператор цикла For

ЦПрямая соединительная линия 15иклFor – алгоритмическая конструкция, которая позволяет повторять определенное число раз некоторую последовательность операторов или директорий с изменяющимися параметрами.

Формат циклической конструкции:

for[параметр_цикла]ϵ[первое_значение_параметра],

[второе_значение]..[последнее_значение] [ТЕЛО_ЦИКЛА]

Перед оператором цикла, как правило, следует определить параметр цикла, как локальную переменную, установив в нее значение 0. Задавая цикл, можно узнать второе_значение, которое на значение шага отличается от первого_значения_параметра цикла. Изменяющийся параметр (счетчик) цикла задается в виде ряда (последовательности) натуральных чисел.

Пример. Определим программно функцию Summ(x), считающую сумму натуральных чисел от 0 до (х-1). Для этого нужно организовать суммирование в цикле с параметром цикла i, изменяющимся от 0 до х.

Поря-док

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

1

Определить программно пользовательскую функцию Summ(x), в первой строке определить локальную переменную, равной 0.

Summ(x) : ]

s{0

:=

Add Line

2

Во второй строке организовать цикл.

<Ctrl>+”

Прямая со стрелкой 14

for

3

Задать параметр цикла (щелкнув мышью в левом верхнем поле структуры for) и диапазон его изменения (в правом верхнем поле)

I

0 ; x

m…n

4

В нижнем поле конструкции for (в теле цикла) сформировать переменную s, образуемую значением предыдущего s, увеличенного на 1. Нажав <Enter>, подтвердить ввод программы.

s { s +1

Прямая со стрелкой 13

5

Проверка работы программы с циклом.

Summ(3)=

1.4 Оператор цикла While

Цикл While– алгоритмическая конструкция, которая позволяет повторять некоторую последовательность операторов или директорий с изменяющимися параметрами необходимое (но строго НЕ определенное) число раз, пока выполняется условие-параметр цикла.

Формат циклической конструкции:

while[переменная_1]<, или другой оператор Булевой логики [переменная_2] ТЕЛО_ЦИКЛА

После ключевого слова while следует условие в виде Булева соотношения между [переменной_1] и [переменной_2]. В поле, расположенном ниже и несколько правее, размещается оператор или их последовательность (если добавить программную строку), образую ТЕЛО_ЦИКЛА, которое будет выполняться пока условие-параметр цикла будет принимать значение ИСТИНА. Одним из главных условий корректной работы цикла while будет внесение изменений в переменные [переменная_1] или (и) [переменная_2] в процессе исполнения ТЕЛА_ЦИКЛА. Если этого не сделать, цикл может «зациклиться» (т.е. продолжать исполняться неограниченное число раз без перспективы самостоятельного выхода из цикла).

Пример 1. Определить программно функцию, возвращающую число итераций, необходимых для последовательного деления отрезка пополам, заданного координатами х1 и х2 точек, лежащих на оси координат 0х до заданной длины eps.

Функция (iteration of divisions – итерации делений) имеет три аргумента: а – координата точки А – начала отрезка, b – координата точки В – конца отрезка, eps – конечное значение длины отрезка, до которого производится деление. Все три аргумента будут переданы в программу. Выполнение программы начинается с описания локальной переменной iter, которая будет счетчиком итераций и установкой в нее значения начального 0. Во второй строке программы организован цикл while, тело которого будет исполняться до тех пор, пока выражение-параметр цикла будет принимать значение ИСТИНА. В качестве параметрического выражения введено сравнение половины длины отрезка с минимальной его длиной. В теле цикла производится смещение координаты а по оси х до точки А на длину половины отрезка АВ по направлению к точке В (первая строка тела цикла), а также увеличение значения переменой iter на единицу. Затем при исполнении программы, происходит проверка выполнения условия-параметра цикла уже с новым значением переменой а. При значении ИСТИНА повротяется исполнение тела цикла, в противном случае - управление передается на строку, следующую за оператором while, где переменная iter передается как значение функции .

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

Вставка оператора цикла while

<Ctrl>+”

while

Правильность работы полученной программы не трудно проверить, вызвав значение функции для аргументов а=0, b=100, eps=2. Результатом должно быть . Значит, что потребуется 5 делений отрезка (0;100) пополам, чтобы получить отрезок меньше, чем 2 (eps).

Пример 2. Создать вектор из 11 элементов, каждый из которых имеет значение номера строки, В которой он расположен.

С помощью подобной конструкции можно организовать выдачу множества результатов расчетов, например, по одной функции, размещая в первой программной строке тела цикла расчет результата (в данном случае при определенном параметре k).

1.5 Программное прерывание цикла оператором Break

Оператор Break применяется для программного прерывания выполняющегося цикла при выполнении определенного условия. Причем значение всех переменных сохраняется на момент возникновения состояния «break».

Формат: break [условие]

При значении [условия]=ЛОЖЬ, оператор break игнорируется программой.

Оператор break часто применяют для защиты программы от ошибок и зацикливания.

Пример. Вычисление факториала, используя оператор break.

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

Программное прерывание цикла

<Ctrl>+{

break

1.6 Оператор return

Оператор return применяется для вывода из любого места программы значений переменных.

Формат: return [переменная]

Пример.

Пользовательская функция F(n) вычисляет факториал числа n, в то время как функция F_ret(n), при введении в код функции F(n), оператор return n, возвращает значение n.

Описание действия

Способ вызова

Результат

Клавиатура

Кнопка панели

Вернуть значение переменной

<Ctrl>+|

return