
- •25 Октября 2005 г., протокол № 2
- •Предисловие
- •1. Система компьютерной математики
- •1.1. Основные принципы работы системы
- •1.2. Операторы
- •1.3. Функции и переменные
- •1.4. Программирование
- •For[start, test, incr, body];
- •While [ test, expr ];
- •1.5. Графические возможности скм
- •Plot [Sin[X], {X, 0, 2*Pi}]
- •ListPlot3d[ phi ];
- •2. Задания для самостоятельной работы
- •2.1. Расчет двумерного распределения температуры
- •2.2. Расчет сопротивления интегрального резистора
- •2.3. Расчет емкости металлизации интегральных схем
- •2.4. Расчет двумерного нестационарного распределения температуры
- •3. Примеры решения задач
- •3.1. Расчет стационарного распределения температуры методом пвр
- •3.2. Расчет нестационарного распределения температуры
- •Литература
- •Содержание
- •2.2. Расчет сопротивления интегрального резистора . . . . . . . 21
- •2.3. Расчет емкости металлизации интегральных схем . . . . . . 23
- •220050, Минск, проспект Независимости, 4.
- •220064, Минск, ул. Курчатова, 7.
1.4. Программирование
Основным режимом работы в системе Mathematica является диалоговый режим, т. е. общение пользователя с программой происходит по принципу "вопрос – ответ". Однако, система имеет встроенные программные средства, позволяющие разрабатывать достаточно сложные программы.
Для организации в программе ветвления используется функция If. Она имеет три основные формы:
- If [условие, выражение_1];
- If [условие, выражение_1, выражение_2];
- If [условие, выражение_1, выражение_2, выражение_3].
При выполнении условия (TRUE – ИСТИНА) осуществляется переход к выражению 1, при невыполнении (FALSE – ЛОЖЬ) – к выражению 2. Если же при проверке условия не было получено ни TRUE, ни FALSE, осуществляется переход к выражению 3. Выражения могут быть достаточно сложными, т. е. содержать несколько строк текста программы, разделенные символом точка с запятой (;). Допускаются вложения условных операторов друг в друга, т. е. структуры вида If[…, If[…], If[…]].
Циклы выполняются операторами Do, For, While. Циклы Do:
Do [expr, {imax}] – выполняет imax раз вычисление expr;
Do [expr, {i, imax}] – вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);
Do [expr, {i, imin, imax}] – вычисляет expr с переменной i, последовательно принимающей значения от imin до imax с шагом 1;
Do [expr, {i, imin, imax, di}] – вычисляет expr с переменной i, последовательно принимающей значения от imin до imax с шагом di;
Do [expr, {i, imin, imax}, {j, jmin, jmax}, …] – вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j ,i и т. д. Например, цикл Do [ Print[“hello”], { 5 }]; печатает текст “hello” 5 раз.
Другой вид цикла, цикл For, реализуется одноименной функцией:
For[start, test, incr, body];
В ней сначала один раз вычисляется выражение start, а затем поочередно вычисляются выражения body и incr до тех пор, пока условие test не перестанет давать логическое значение True. Когда это случится, т. е. когда test даст False, цикл заканчивается.
Пример обнуления 10 элементов массива:
For [ i = 1, i 10, i + +, a[[ i ]] = 0];
Цикл While имеет достаточно простую конструкцию:
While [ test, expr ];
8
Такой цикл выполняет expr до тех пор, пока test не перестанет давать логическое значение True.
В некоторых случаях удобно использовать условные и безусловные переходы. Безусловный переход выполняется функцией Goto[metka], а метка, на которую выполняется переход, определяется функцией Label[metka]. Условный переход обеспечивает функция Goto вместе с функцией If.
Функция пользователя создается следующим образом:
name[x_, y_, …] = expr;
где x_, y_, … – локальные в теле функции переменные. Например, функция расчета суммы квадратов двух чисел создается в начале программы, а используется везде, где следует получить возвращаемый ею результат:
fun[x_, y_ ] = x^2 + y^2;
.
.
.
z1 = fun[xb, yb];
Если функция содержит несколько выражений, их следует разделить символом точка с запятой (;) и заключить в круглые скобки:
f[x_ ] = ( t = (1+x)^2; t = Expand[ t ]);
Здесь x – локальная переменная, t – глобальная переменная, определенная вне функции.