Читайте также:
|
|
Рассмотрим вопросы составления программ. Простейшая программа может представлять собой заключенную в скобки последовательность операторов, разделенных знаком “;”. Подобная программа дана в примере 8.3. Рассмотрим еще один пример.
Пример 8.8.
Составим программу для вычисления значения экспоненты с заданной точностью. Будем последовательно вычислять сумму членов Маклорена до тех пор, пока очередное слагаемое не станет меньше допустимой погрешности. Для этого напишем следующую программу:
In[ ]: = ex[x_, eps_]:= (For[ u=1.; e=1.; k=1, Abs[u]>eps, u=u*x/k; e=e+u; k++ ]; e)
Если мы теперь напишем вопрос: In[ ]: = ex[1., 10^-5], то получим ответ: Out[ ] = 0.367882. Можем убедиться, что погрешность действительно не превышает , вычислив разность:
In[ ]: = ex[1, 10^-5] - E Out[ ] =
В программах подобного типа все переменные являются глобальными. Их значения доступны из любого места рабочего документа. Например, на вопрос In[ ]: = k получим ответ“10” – количество членов ряда, обеспечивающее в данном случае требуемую точность.
Наличие глобальных переменных таит в себе возможность ошибки из-за конфликтов между значениями переменных. Поэтому более надежный путь – создание программ с локальными переменными. Синтаксис такой программы:
Module[{x, y, …}, expr].
В этом выражении {x, y, …} – список локальных переменных, expr – тело программы. Список может включать инициализацию переменных: {x=x0, y=y0,…}. Названия локальных переменных могут совпадать с именами глобальных, так как при каждом обращении к программе вместо объявленных локальных имен создаются новые имена. Тело программы может включать несколько команд. Каждая команда за исключением последней, включающей результат работы программы, отделяется от последующей точкой с запятой. (Вспомним, что точка с запятой является знаком запрета вывода результата.)
Использование локальных и глобальных переменных проиллюстрируем следующим примером рабочего сеанса. Введем вначале глобальную, а затем локальную переменную с тем же именем. In[1]: = t=5;
In[2]: = Module[ {t=10}, t ] Out[2] = 10
Глобальная переменная сохраняет свое значение:
In[3]: = t Out[3] =5
Введем локальную функцию с тем же именем t:
In[4]: = f[x_]:= Module[ {t}, t[x] = x^2 ]
In[5]: = f[x] Out[5] = x2
Можно убедиться, что глобальная переменная t по-прежнему сохраняет свое значение
Пример 8.9.
Преобразуем программу вычисления экспоненты. Поскольку инициирование значений локальных переменных проведем при их объявлении, то вместо цикла For будем использовать цикл While.
In[]: = ex1[x_, eps_]:= Module[ {w=1., s=1., i=1}, While[ Abs[w]>eps, w=w*x/i; s=s+w; i++ ]; s ]
В этой программе все переменные являются локальными.
Пример 8.10.
Вычисление квадратного корня числа “x” с помощью процесса Герона. Алгоритм представляет собой итерационный процесс. Сначала задается некоторое начальное приближенное значение, например, y0 = x +1. Затем это значение уточняется в ходе последовательных итераций по формуле: yn+1 = (yn + x/yn)/2. Процесс вычислений заканчивается, если два последующих значения отличаются не более чем на величину допустимой погрешности. Поскольку при данном выборе начального значения процесс итераций описывает монотонно убывающую последовательность: y0 > y1 > y2 > …, – то нет необходимости в использовании функции Abs[ ]. Программа имеет вид:
In[ ]: = root2[x_, eps_]:= Module[ {u, v},
For[ u = x + 1.; v = (u + x / u) / 2, u –v > eps, u = v; v = (v + x / v) / 2 ]; v ]
Примеры более сложных программ приведены в приложении
Дата добавления: 2015-07-08; просмотров: 191 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Немедленное и задержанное присваивание | | | Прерывание вычислений |