Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Свод.doc
Скачиваний:
119
Добавлен:
08.03.2016
Размер:
2.1 Mб
Скачать

5.2. Вычисление множества значений данной функции для выбранного множества значений аргумента.

Структура команды (множество значений аргумента дано списком, см. 3.6) [i] - нумерация.

> x:=[1,2,3,4,5];

> for i from 1 to 5 do A[i]:=(x[i])^2 end do;

> y:=[-2,-1,0,1,2]; for k from 1 to 5 do f[k]:=exp(y[k])-1 end do;

Здесь e - число Непера - выведено символом. Для получения десятичных значений использует оператор evalf.

Вычисляемая функция может содержать внутренние операторы. Ниже пример - вычисление в десятичных числах.

> for k from 1 to 5 do f[k]:=evalf(exp(y[k])-1) end do;

Возможны и более сложные представления вычисляемого выражения. Ниже - примеры: вычисление множества решений квадратного уравнения при различных значениях аргумента. (О решениях алгебраических уравнений см. п. 9)

> y:=[-2,-1,0,1,2];

> for i from 1 to 5 do z[i]:=solve((y[i])^2-4*y[i]*x[i]+4*(x[i])^2=0) end do;

Программа выводит две последовательности, т. к. квадратное уравнение имеет 2 корня.

> x:=[-2,-1,0,1,2];

> for i from 1 to 5 do solve((y[i])^2-1=(x[i])^2,y[i]) end do;

>

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

Цикл при условии "пока" (или В то время, как… ) (в Help см. "while" - оператор повторения, вызывающий последовательность).

Структура команды.

| for <name> | | from <expr> | | by <expr> | | to <expr> | | while <expr> | do <statement sequence> end do;

или

| for <name> | | in <expr> | | while <expr> | do <statement sequence> end do;

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

Оператор повторения обеспечивает способность выполнять заданную последовательность неоднократно, или счётное число раз (используя операторы for...to ), или пока условие удовлетворено (используя оператор while).

Обе формы операторов могут присутствовать одновременно.

Пример 1. Найти сумму всех целых чисел, меньших 11.

> tot := 0: for i from 1 by 1 while i < 11 do tot := tot + i end do: tot;

tot- символ суммируемых членов. Промежуточные значения не выведены!

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

> for k from 0 by 1 while k<6 do k*(k+1) end do;

Пример 3. Найти все квадраты целых чисел, не превышающие 100.

> for n from 0 by 1 while n^2<101 do n^2 end do;

Пример 4. Получить все значения функции exp(-x) для неотрицательных значений аргумента, начиная с 0, с шагом 0.2, пока эти значения не станут меньше 0,1.

> for x from 0 by 0.2 while 0.1<exp(-x) do exp(-x) end do;

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

>

6. Суммы, суммирование последовательности, вычисление сумм.

Символ суммы - sum. Общий вид команды с оператором суммы:

> sum(a[k], k); sum(a[k], k=m..n); sum(a[k], k=0..infinity);

k - индекс суммирования - целое число, m..n - нижний и верхний номера суммируемых членов (целые; возможны и бесконечные) (многоточие здесь и далее в командах программы задаётся двумя точками - не путать с двоеточием!).

Далее задаём последовательность её общим членом (ниже - f). Операторы суммирования: sum(f, k); sum(f, k=m..n); sum(f, k=alpha); sum(f, k=expr); f - любое алгебраическое выражение, зависящее от целочисленного индекса k. Эти операторы необходимы, когда вычисляется сумма большого числа членов.

1. Конечные суммы.

> sum(k^2, k=0..4);

Отложенное вычисление обозначается одиночными кавычками (см. 3.5), напр. 'k' (' = э (en)). С этим обозначением:

> sum('k^2', 'k'=0..10);

Конечная сумма в общем виде и подстановка:

> sum('k^2', 'k'=0..n); simplify(%); S:=factor(%);

Запись предыдущего одной командой:

> S=factor(simplify(sum('k^2', 'k'=0..n)));

Отложенное вычисление:

> n:=8; S;

2. Бесконечные суммы (ряды)

> sum('1/k!', 'k'=0..infinity); evalf(%);

Получили известное число Непера - основание натурального логарифма.

> sum('1/k^2', 'k'=1..infinity); evalf(%);

Сумма бесконечной убывающей геометрической прогрессии (q<1!) и её первых членов.

> sum('q^k', 'k'=0..infinity); evalf(subs(q=1/2,%));

> sum('q^k', 'k'=0..5): evalf(subs(q=1/2,%));

Промежуточное выражение не выведено. Уже 5 первых членов суммы дают 98% суммы бесконечного числа её членов.

>