Научная статья на тему 'ИСПОЛЬЗОВАНИЕ НЕКОТОРЫХ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ ПОДГОТОВКИ ВАРИАНТОВ КОНТРОЛЬНЫХ ЗАДАНИЙ И ВСПОМОГАТЕЛЬНЫХ МАТЕРИАЛОВ: АВТОМАТИЧЕСКОЕ ФОРМИРОВАНИЕ ВАРИАНТОВ ЗАДАЧ И ИХ ПЕРЕМЕШИВАНИЕ В БИЛЕТАХ'

ИСПОЛЬЗОВАНИЕ НЕКОТОРЫХ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ ПОДГОТОВКИ ВАРИАНТОВ КОНТРОЛЬНЫХ ЗАДАНИЙ И ВСПОМОГАТЕЛЬНЫХ МАТЕРИАЛОВ: АВТОМАТИЧЕСКОЕ ФОРМИРОВАНИЕ ВАРИАНТОВ ЗАДАЧ И ИХ ПЕРЕМЕШИВАНИЕ В БИЛЕТАХ Текст научной статьи по специальности «Математика»

CC BY
91
14
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Modern European Researches
Область наук
Ключевые слова
MAPLE / MATLAB / ЯЗЫК СИ

Аннотация научной статьи по математике, автор научной работы — Довбыш Сергей Александрович

Настоящая статья является продолжением двух предыдущих публикаций автора, где обсуждалась проблема автоматизированного формирования и обработки большого числа входных LaTeX-файлов с отдельными заданиями, а также были отмечены некоторые средства и возможности систем MATLAB и Maple, которые мало отражены в учебной литературе, но могут быть полезны для организации диалоговой работы при составлении вариантов заданий. Эта задача стала особенно актуальной при проведении контрольных мероприятий в дистанционном обучении, когда, с целью избежать возможного несамостоятельного решения задач учащимися, потребовалось формировать большое число вариантов и распечатывать их в отдельных файлах. В настоящей статье затрагиваются вопросы собственно автоматического формирования билетов заданий. Обсуждаются алгоритмы, осуществляющие перемешивание в билетах нескольких имеющихся вариантов каждой задачи, и рассматриваются примеры автоматического формирования большого числа вариантов задачи, исходя из некоторого шаблона условия задачи и/или решения/ответа к задаче. Статья предназначена в качестве практического пособия, которое может быть полезно для преподавателей средней и высшей школы.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Довбыш Сергей Александрович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

ON USING SOME SOFTWARE FOR PREPARING TICKETS FOR CONTROL TASKS AND AUXILIARY MATERIALS: AUTOMATIC GENERATION OF TASK VARIANTS AND THEIR MIXING IN TICKETS

The article is a continuation of the author's two previous publications, where the problem of automated generation and processing of a large number of input LaTeX files with individual tasks was discussed, and some tools and capabilities of MATLAB and Maple systems were noted, which are little reflected in the educational literature, but can be useful for organizing interactive work when drawing up task options. This task has become especially relevant when conducting control activities in distance learning, when, in order to avoid possible non-independent solving problems by students, it was necessary to form a large number of options and print them in separate files. This article deals with the issues of the actual automatic generation of task tickets. Algorithms for mixing several available variants of each problem in tickets are discussed, and examples of automatic formation of a large number of variants of the problem are considered, based on a certain template of the problem condition and/or solution/answer to the problem. The article is intended as a practical guide that can be useful for teachers of secondary and high schools.

Текст научной работы на тему «ИСПОЛЬЗОВАНИЕ НЕКОТОРЫХ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ ПОДГОТОВКИ ВАРИАНТОВ КОНТРОЛЬНЫХ ЗАДАНИЙ И ВСПОМОГАТЕЛЬНЫХ МАТЕРИАЛОВ: АВТОМАТИЧЕСКОЕ ФОРМИРОВАНИЕ ВАРИАНТОВ ЗАДАЧ И ИХ ПЕРЕМЕШИВАНИЕ В БИЛЕТАХ»

ИСПОЛЬЗОВАНИЕ НЕКОТОРЫХ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ ПОДГОТОВКИ ВАРИАНТОВ КОНТРОЛЬНЫХ ЗАДАНИЙ И ВСПОМОГАТЕЛЬНЫХ МАТЕРИАЛОВ: АВТОМАТИЧЕСКОЕ ФОРМИРОВАНИЕ ВАРИАНТОВ ЗАДАЧ И ИХ ПЕРЕМЕШИВАНИЕ В БИЛЕТАХ

Аннотация

Настоящая статья является продолжением двух предыдущих публикаций автора, где обсуждалась проблема автоматизированного формирования и обработки большого числа входных LaTeX-файлов с отдельными заданиями, а также были отмечены некоторые средства и возможности систем MATLAB и Maple, которые мало отражены в учебной литературе, но могут быть полезны для организации диалоговой работы при составлении вариантов заданий. Эта задача стала особенно актуальной при проведении контрольных мероприятий в дистанционном обучении, когда, с целью избежать возможного несамостоятельного решения задач учащимися, потребовалось формировать большое число вариантов и распечатывать их в отдельных файлах. В настоящей статье затрагиваются вопросы собственно автоматического формирования билетов заданий. Обсуждаются алгоритмы, осуществляющие перемешивание в билетах нескольких имеющихся вариантов каждой задачи, и рассматриваются примеры автоматического формирования большого числа вариантов задачи, исходя из некоторого шаблона условия задачи и/или решения/ответа к задаче. Статья предназначена в качестве практического пособия, которое может быть полезно для преподавателей средней и высшей школы.

Ключевые слова

Maple, Matlab, язык Си.

АВТОР

Довбыш Сергей Александрович,

кандидат физико-математических наук, доцент ФГБОУ ВО «Московский государственный технический университет им. Н. Э. Баумана», г. Москва; доцент ФГБОУ ВО «Московский государственный университет имени М.В.Ломоносова» [email protected]

Введение

В предыдущих публикациях автора [1,2], являющихся двумя первыми частями статьи, обсуждалась проблема автоматизированного формирования большого числа билетов контрольных мероприятий и в виде входных файлов системы LaTeX. Были описаны средства систем стандарта языка C и систем MATLAB и Maple, позволяющие сгенерировать такие входные файлы (и одновременно пакетный файл для автоматической обработки этих входных файлов LaTeX^ и чистки рабочей директории - при этом автор ограничился случаем использования операционной системы Windows). Также были отмечены некоторые средства и возможности систем MATLAB и Maple, которые могут быть полезны для организации диалоговой работы при составлении вариантов заданий. Рассмотрение же систем MATLAB и Maple было изначально моти-

вировано тем, что они располагают возможностью символьных вычислений, т.е. преобразований формул, которые могут потребоваться, например, при автоматизированном решении задач и выводе полученных ответов (что избавляет преподавателя от кропотливой ручной работы), а рассмотрение языка C - тем, что его стандарт ANSI имеет команды работы с файлами, которые послужили основой и почти без изменений были перенесены в системы MATLAB и Maple. Язык C может быть использован для проведения числовых (не-символьных) вычислений и вывода их результатов, в отличие от систем MATLAB и Maple, которые допускают и символьные вычисления. Однако, в отличие от систем MATLAB и Maple, которые интерпретируют вводимые формулы и допускают диалоговый режим работы, удобный, например, при составлении преподавателем вариантов заданий, программа на языке C требует предварительной компиляции, что исключает диалоговый режим. Эти обстоятельства - возможности символьных вычислений и диалоговый режим - делают системы MATLAB и Maple в ряде случаев более удобными.

При этом, однако, хотя возможность символьных вычислений в системах MATLAB и Maple и послужила аргументом в пользу их рассмотрения в двух упомянутых публикациях автора, но сами вопросы использования таких вычислений или каких-либо алгоритмов там не обсуждались - речь шла только о средствах формирования LaTeX-файлов с заданиями (и ответами) при наличии уже имеющихся вариантов заданий (и ответов); особое внимание при этом уделялось организации вывода формул. В настоящей работе мы продолжаем обсуждение вопросов автоматизированного формирования большого числа билетов контрольных мероприятий, но теперь речь пойдёт о формировании собственно заданий контрольных мероприятий и ответов к ним, где возможности проведения символьных вычислений могут оказаться как раз незаменимыми. Но при этом мы не преследуем цели обучения написанию программ в той или иной вычислительной системе (хотя и упоминаем о командах системы Maple, которые потребуются в разбираемых нами примерах, что поможет читателю быстро написать нужные ему программы) - эту информацию можно почерпнуть в обширной учебной литературе и в справочных системах этих вычислительных систем; вместо этого, нашей целью является обсуждение именно алгоритмов, позволяющих формировать билеты контрольного мероприятия.

Однако, вместе с тем, стоит упомянуть, что учебная литература по, например, такой системе как Maple, будучи посвящена вычислительным аспектам, почти не говорит об её возможностях по манипуляциям с именами переменных, что может оказаться полезным при организации вывода в LaTeX-файлы большого числа заданий и ответов. Так же и некоторые аналогичные полезные возможности системы TeX, являющейся основанием для LaTeX^, не отражены в учебной литературе, хотя и известны опытным пользователям. Кроме того, представляется, что система Maple более удобна для многих типов задач, чем MATLAB и, тем более, язык C, поскольку, прежде всего, она допускает более богатую палитру структур своих объектов, в частности, позволяет оперировать со списками произвольных объектов, а также может делать замены и преобразования структурных элементов своих объектов и анализировать структуру и тип этих объектов, в частности, математических выражений. Все эти аспекты автор планирует затронуть в продолжении настоящей статьи.

Методология и результаты исследования

Как уже говорилось, в настоящей работе речь пойдёт о формировании заданий контрольных мероприятий и ответов к ним. Будут рассмотрены два аспекта: 1) автоматическое перемешивание в билетах нескольких имеющихся вариантов каждой задачи как и изменение порядка следования задач в разных билетах, 2) автоматическое формирование большого числа вариантов задачи, исходя из некоторого шаблона

условия задачи и/или решения/ответа к задаче, что позволяет создать много вариантов одинакового уровня сложности.

Что касается первого аспекта, то автор предложит простые алгоритмы, которые при определённых условиях позволяют также добиться, чтобы в любых двух разных билетах оказалось не более одной задачи в одном и том же варианте. Эта мера призвана, опять-таки, затруднить возможность несамостоятельного решения задач учащимися (о чём говорилось в первой части настоящей работы). Здесь предполагается, что сами варианты каждой задачи так или иначе сформированы - они могут быть либо заранее записаны в файле банка задач, либо как-то формироваться вычислительной системой непосредственно перед выводом в файл. Что касается второго аспекта, то будут приведены некоторые примеры такого формирования вариантов задач. Изложения этих примеров автор постарался сделать в максимальной степени самодостаточными и доступными для совершенно неподготовленного читателя без обращения к каким-либо источникам, для чего кратко поясняются даже такие элементарные математические понятия как, например, порядок и тип перестановки и алгоритм Евклида. Будут также упомянуты некоторые команды и возможности системы Maple, которые полезны при реализации этих алгоритмов (более подробную информацию о них читатель может получить, пользуясь справочной системой, встроенной в Maple).

Автоматическое формирование билетов заданий, исходя из имеющихся вариантов задач

Целью является автоматическое перемешивание в билетах нескольких имеющихся вариантов каждой задачи. Можно предусмотреть и изменение порядка следования задач в разных билетах. Для этих целей предлагается применять алгоритмы, которые могут быть основаны на использовании псевдослучайной последовательности чисел и вычислении остатков.

1) Формируется псевдослучайная последовательность номеров билетов. Её удобно строить из псевдослучайной последовательности чисел хк с равномерным распределением на стандартном отрезке [0;1]: для этой цели числа хк (1 < к <п) упорядочиваются процедурой сортировки в порядке возрастания или убывания: если оказывается, например, что

хкг < хк2 < < хкп

то искомая последовательность номеров п билетов есть к±,к2, ...,кп. Если каким-то образом были сформированы п «изначальных» билетов, то содержимым нового билета номер т (1 <т <п) будет «изначальный» билет номер кт. Системы MATLAB и Maple располагают стандартными датчиками псевдослучайных чисел - командами для создания псевдослучайных последовательностей, Так в Maple последовательность из п чисел с равномерным распределением на стандартном отрезке [0;1] задаётся командой uniform, которая вместе с другими командами, генерирующими псевдослучайные последовательности, образует подпакет random, включённой, в свою очередь, в пакет статистики stats. Поэтому, команда может быть записана в одной из трёх следующих форм:

stats[random, uniform](n)

random[uniform](n) # работает при подключении пакета stats

uniform(n) # работает при подключении пакета stats и подпакета random

Отметим, что обычный алгоритм для датчика псевдослучайных чисел, формирующего последовательность, равномерно распределённую на стандартном отрезке [0;1], имеет следующий вид и может быть легко самостоятельно воспроизведён пользователем: задаётся некоторое очень большое по модулю число а, которое в идеале

должно быть иррациональным, и первый член последовательности х1, а каждый следующий член последовательности хк+1 вычисляется как дробная часть произведения а • хк предыдущего члена хк на число а. Аналогичным образом устроены команды, генерирующие псевдослучайные последовательности с другими распределениями: каждый следующий член хк+1 однозначно определяется предыдущим хк. Первый член х1 последовательности задаётся некоторым числом, называемым seed - «семя» или «зёрнышко», которое в системе Maple представляет собой большое натуральное число и записывается в служебную переменную _seed, причём в каждом новом сеансе работы при первом обращении эта переменная принимает одно и то же значение. Более того, команды Maple при каждом следующем обращении продолжают вычисления по прежней формуле, отталкиваясь от последнего прежде вычисленного члена, как если бы новые члены вычислялись прежней командой; соответственно, переопределяется значение переменной _seed. По этой причине каждый член псевдослучайной последовательности оказывается жёстко детерминирован и определяется только тем, каким по счёту он был вычислен после начала нового сеанса. Например, если вычислить вначале одной командой 20 членов, а затем другой такой же командой 30 членов, то результат будет таким же, как если бы мы вычислили одной командой сразу все 50 членов. Чтобы этого избежать, следует переопределять значение переменной _seed. Задать её значение равным натуральному числу n можно либо непосредственным присвоением _seed:=n, либо командой randomize(n). Команда же randomize() без аргумента устанавливает значение, которое определяется внутренними часами системы.

Далее, для упорядочивания полученной последовательности псевдослучайных чисел хк (1 < к <п) формируется набор пар, каждая из которых состоит из числа хк и его номера к, затем все эти пары чисел (хк,к) упорядочиваются в порядке возрастания чисел хк , в результате чего формируется последовательность пар (xk1,k1),(xk2,k2), ...,(xkn,kn) , наконец, создаётся искомая последовательность (к1,к2, ...,кп) соответствующих чисел к для всех этих пар. Пример реализации этого алгоритма на языке Maple, который также иллюстрирует некоторые возможности этого языка:

[stats[random, uniform](n)];

[seq([%[i],i],i=1..nops(%))];

sort(%,(x,y)->x[1]<y[1]);

List:=map(x->x[2],%);

Здесь переменной n должно быть предварительно присвоено значение, являющееся натуральным числом, искомая псевдослучайная перестановка n первых натуральных чисел записывается в виде списка в переменную List. Поскольку все вычисления проводятся последовательно, то вместо промежуточных присваиваний была использована служебная переменная %, в которую записывается результат последней произведённой вычислительной операции.

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

3) Для формирования номеров вариантов задач в билете предлагается использовать какой-либо алгоритм, основанный на вычислении остатков при делении. Введём для краткости обозначения Q,R и QR для следующих операций над парами натуральных чисел: q = Q(n,m), г = R(n,m), (q,r) = QR(n,m), где q,r - неполное частное и остаток при делении п на т.

Пример 1. Всего 4x4= 16 билетов; 3 задачи в 4-х вариантах каждая; п - номер билета.

(Ч1,Г1) = дК(п,4) Г2=КЧ1,4) г3 =Я(Г1+ Г2,4)

Варианты задач в билете: (г1,г2,г3). В разных билетах совпадает не более одной задачи

Варианты:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

Оъ г2) - номера столбцов и строк

(координаты узлов двумерной сетки)

Пример 2. Всего 3x3x3x2 = 54 билета; 4 задачи, задачи №№ 1, 2, 4 - в 3-х вариантах каждая, задача № 3 - в 2-х вариантах; п - номер билета.

(q1,r1) = QR(n,3)

(Ч2,гг) = QR(4i,3)

(q3,r3) = QR(q2,2)

r4 = R(q3, 3)

Варианты задач в билете: (r1,r2,r3,r4).

Здесь (r1,r2,r3,r4) - координаты пронумерованных узлов 4-мерной сетки.

Если для 2-х задач имеются, соответственно, п и т вариантов, то можно составить максимум nxm билетов так, что в любых двух будет совпадать не более одной задачи: номера (i,j) вариантов задач следует определять по формулам (q,i) = QR(k,n), j = R(q,m) (номера столбцов и строк в таблице, аналогично Примеру 1).

Часто этого можно добиться при том же количестве билетов и большем количестве задач. Пусть даны (L + 2) задач, первые две из них имеют п1 и п2 вариантов, остальные, соответственно, ти вариантов, где 1 <и < L , причем max[n1,п2} < min{m1, ...,mL}. Можно составить не более n1xn2 билетов таких, что в любых двух имеется не более одной одинаковой среди первых двух задач. Пусть (i,j) - номера вариантов двух первых задач (1 < i < п1,1 < j < п2) . Напомним, что запись а = Ъ (mod т) означает, что (а - Ь) делится на т, иначе говоря, а и Ъ дают одинаковые остатки при делении на т.

Предложение. Пусть а1, ...aL - целые числа такие, что

• для каждого и ( 1 <и < L) нет целого х ( 1 < х < п1) такого, что х =

0 (mod ти),

• для каждой пары u,v (1 <и <v < L) нет целых х (1 < х <п1) и у (|у| <п2, у Ф 0) таких, что х = у (mod ти) и х = у (mod mv).

Обозначим Su(i,j) = R(j + aui,mu) . Тогда среди наборов чисел (i,j,S1(i,j), ...,SL(i,j)) для разных (i,j) нет таких, у которых совпадает больше одного соответственного элемента.

Эти наборы чисел можно использовать в качестве наборов вариантов задач в билетах.

Доказательство совершенно просто. Допустим, для некоторых различных (i',j') и (i",j") совпадает более одного соответствующего элемента. Если i' = i" и

Su(i',f) = SU(V',j'') для некоторого и, то также у = 0 (modmu), где у = j' - j'', следовательно, j' = j'', поскольку lyl <п2 < ти; значит, наборы (V,f) и (V',j'') совпадают. Если j' = j'' и Su(i ',j') = SU(V ',j'') для некоторого и, то х = 0 (modmu), где х = i'' - V. По сделанному предположению должно быть х = 0, поскольку 1x1 < п1, т.е. наборы (i',j') и (i'',j'') совпадают. Если же Su(i',j') = SU(V',j'') и Sv(i',j') = Sv(V',j'') для различных u,v , то аналогично получаем, что х = у (mod ти) и х = у (mod mv), где х = i'' - V и у = j' - j''. По сделанным предположениям должно быть х = 0 и у = 0, поскольку 1x1 <п1 и lyl < п2, т.е. наборы (V,f) и (V',j'') совпадают.

Формулировка этого Предложения выглядит несколько громоздко. Гораздо проще формулируется следующее непосредственное следствие, которое является несколько ослабленной версией Предложения для случая, когда т1 = ■■■ = mL = т, а в случае, когда количества вариантов всех задач равны (п1 = п2 = т1 = ■•• =mL= m), в точности равносильно Предложению.

Следствие. Пусть т1 = ■•• = mL = т. Тогда если а1, ...aL - целые числа, которые вместе с их попарными разностями взаимно-просты с т, то справедливо утверждение Предложения.

В частности, если m - простое, то можно взять L = т — 1 и аи = и (1 < и < L). Таким образом, в случае простого m можно использовать предложенный способ для формирования билетов с L + 2 = m + 1 задачей.

Автоматическое формирование вариантов задачи, исходя из шаблона условия

Формирование вариантов задачи, исходя из заданного шаблона или решения/ответа позволяет в автоматическом режиме изготовить большое число вариантов задачи одинакового уровня сложности. Пусть, например, задан шаблон - разные варианты задачи отличаются только какими-то числами. Можно предложить алгоритм, который вычисляет эти числа и тогда вывод на печать этих чисел в условии задачи при формировании входных файлов LaTeX^ не представляет сложности. При формировании вариантов некоторых заданий автор столкнулся с тем, что в условии задачи нужно задать п целых чисел, заключённых в заданном конечном интервале, причём разные варианты задачи отличаются только этими наборами. Дополнительно могут быть наложены условия, что все числа в каждом наборе должны быть различны и расположены в порядке возрастания. Вместо чисел могут фигурировать элементы какого-то другого множества. Несложно написать процедуры (вообще говоря, рекурсивные, т.е. вызывающие сами себя, - языки C, Matlab и Maple позволяют это делать), которые формируют все такие наборы чисел - это поучительное упражнение. Однако, необходимость таких вычислений возникает очень часто и в пакете комбинаторики combinat языка Maple для этих целей уже предусмотрены команды choose, permute и numbcomb, которые работают следующим образом. В качестве своего аргумента они имеют список или множество каких-то элементов или неотрицательное целое число и также может присутствовать второй аргумент, являющийся неотрицательным целым числом. Обозначим первый аргумент через n, а второй, опционный, - через m. Если n есть список или множество, то команда choose(n) возвращает, соответственно, список или множество всех сочетаний (без повторений), т.е. выборок элементов из n, а каждая такая выборка тоже представлена как, соответственно, список или множество. Иначе говоря, команда возвращает совокупность всевозможных подмножеств n (включая пустое множество и само n), оформленную в виде множества множеств, если аргумент n являлся множеством, и в виде списка списков, если аргумент n являлся списком. Если все элементы в n различны и их количество равно к, то количество таких подмножеств равно 2к. Далее, команда permute(n) возвращает совокупность всевозможных перестановок всех элементов списка или множества n, но оформленную всегда в виде списка списков. При этом совпадающие элементы (которые могут присутствовать только, если n является списком, поскольку во множестве повторяющиеся элементы сразу стираются) считаются тождественными, что приводит к уменьшению количества различных перестановок - они называются перестановками с повторениями. Если в списке n имеются равно s различных элементов, а сам этот список состоит из k1 элементов 1-го типа, к2 элементов 2-го типа, ..., ks элементов s-го

типа, так что длина списка равна к1+к2 + ••• + ks = к, то количество таких перестановок с повторениями равно так называемому полиномиальному коэффициенту

к\

P(kvk2,...,ks) = —— где k = ki+k2 + - + ks.

Заинтересованный читатель может познакомиться с этими сведениями в любой книге по элементам комбинаторики, см., например, пособия для школьников [3]. Если же аргумент n является числом, то он всегда трактуется как список из n первых натуральных чисел. Наконец, если присутствует второй аргумент, то команда choose(n, m) возвращает только выборки из m элементов. Если все элементы в n различны и их количество равно к, то число таких выборок равно хорошо известному биномиальному коэффициенту из к по m. Аналогично, команда permute(n,m) возвращает перестановки только m элементов из n. Точнее говоря, для каждой выборки из m элементов генерируются её всевозможные перестановки. Отметим также, что если команда choose возвращает выборки в виде списков, то, по всей видимости, работает следующее правило: порядок следования элементов в каждом таком списке совпадает с порядком их следования в исходном списке n, если все элементы списка n различны, а второй аргумент m отсутствует; в противном же случае элементы упорядочиваются принятым в системе стандартным способом. Наконец, команда numbcomb просто возвращает количество элементов во множестве или списке, генерируемом командой choose с теми же самыми одним или двумя аргументами.

Могут быть наложены и другие условия, например, если подставляемые числа -коэффициенты многочлена и требуется найти корни этого многочлена, то имеет смысл предусмотреть, чтобы ни в каких двух вариантах многочлены не оказались пропорциональными. Тогда можно вначале сформировать список из всех возможных наборов чисел, а затем устроить «отбраковку» неподходящих наборов: идти вдоль списка и отбрасывать очередной набор, если он окажется пропорционален какому-то из предыдущих наборов, оставленных в списке. Рассмотрим соответствующий пример.

Пример задания 1. Дан кубический многочлен с целыми коэффициентами. Найти его корни, используя предложенный численный метод.

Следует задать кубический многочлен, не допускающий нахождения корней стандартными элементарными методами, которые известны учащимся: ни понижения порядка разложением в произведение многочленов 1 -ой и 2-ой степеней с рациональными коэффициентами (в частности, отбрасываются и возвратные многочлены), ни выделения полного куба: ах3 + Ъх2 + сх + d = а(х + и)3 + и либо ах3 + Ъх2 + сх + d = d(1 + их)3 + vx3, где и, v - некоторые коэффициенты, либо даже, более общо, представления в виде суммы двух кубов линейных выражений. (Отметим, кстати, что по теореме Гаусса о «содержании многочленов» для многочлена любой степени с целыми коэффициентами его приводимость над рациональными числами, т.е. его разложимость в произведение многочленов меньшей степени с рациональными коэффициентами, влечёт и его приводимость над целыми числами, т.е. разложимость в произведение многочленов с целыми коэффициентами [4].) Автором было разработано такое задание в рамках предметов Математический практикум в СУНЦ МГУ и Численные методы в МГТУ им. Н.Э. Баумана. В каждом варианте задания предлагалось провести стандартное элементарное исследование заданного кубического многочлена с помощью его производной и убедиться в наличии трёх различных вещественных корней, локализовав их, т.е. указав содержащие их интервалы. Далее, следовало использовать вторую производную для нахождения интервала, содержащего каждый искомый корень и такого, что на нём не изменяется направление выпуклости графика заданной функции, - это сразу позволит указать надёжную стартовую точку метода Ньютона ещё до проведения вычислений по этому методу. Слово «надёжная» означает, что при выборе этой точки в качестве стартовой метод Ньютона заведомо будет

сходиться, причём именно к интересующему нас корню. (Если функция, определённая и дважды дифференцируемая на отрезке, принимает в его концах значения разных знаков, а её вторая производная сохраняет знак на всём отрезке, то в качестве надежной стартовой точки для нахождения единственного корня функции на этом отрезке можно взять тот из двух его концов, где знаки функции и её второй производной совпадают; это простое правило легко видно из геометрической интерпретации метода Ньютона и встречалось, по крайней мере, уже в известной работе Ж.-Б.Ж. Фурье 1818 года.) Наконец, требовалось численными методами (методы Ньютона, упрощённый Ньютона, хорд и секущих) вычислить с заданной точностью один указанный (меньший, средний или больший) из трёх существующих корней. Описание этих классических методов читатель может найти в обширной учебной литературе (первоначальное обсуждение см., например, в пособиях для школьников [5]); нашей же целью является не вычисление по этим методам, а формулирование требований к многочленам, пригодным для включения в задания, и построение алгоритма их выбора.

Будем рассматривать многочлены f = ах3 + Ъх2 + сх + d , где коэффициенты a,b,c,d пробегают некоторые заданные множества целых чисел. Каждый такой многочлен должен быть подвернут серии проверок, призванных отбраковать многочлены, не удовлетворяющие тему или иному требованию. Эти требования следующие: 1) во избежание фактического дублирования вариантов, когда многочлены могут оказаться пропорциональными друг другу, потребовать, чтобы многочлен f с целыми коэффициентами не допускал сокращения на целое число, т.е. наибольший общий делитель (НОД) его коэффициентов а, Ь, с, d был равен единице, - в этом случае пропорциональные многочлены могут различаться только знаком, что также легко отследить, либо заранее избежать, потребовав, чтобы всегда выполнялось а > 0, 2) также предусмотреть, чтобы многочлены не переводились один в другой никаким линейным преобразованием переменной х или хотя бы её масштабированием без изменения начала отсчёта, 3) многочлен не должен допускать нахождения корней упомянутыми выше элементарными методами, а также корни его производной (точки экстремума, возникающие при исследовании) не должны быть рациональными числами, 4) многочлен должен иметь три различных вещественных корня. Итак, многочлен /, вернее говоря, его набор коэффициентов а, Ь, с, d, должен быть отброшен, если не удовлетворяет какому-то хотя бы одному из этих условий.

Условия 1) и 2) вместе означают, что один многочлен не переводится в другой масштабированием его значений (т.е. умножением на некоторое число) и линейным преобразованием переменной. Представляется, что условие 2) не является важным, поскольку при его нарушении учащиеся вряд ли заметят, что задание одного варианта может быть сведено к заданию другого. Также и те части условия 3), где говорится о иррациональности корней производной и о выделении полного куба или, тем более, о представлении в виде суммы кубов линейных выражений не являются существенными. Однако, часть условия 3), где говорится о неразложимости многочлена в произведение многочленов меньших степеней, кажется важной - она означает отсутствие рациональных корней. Наконец, условие 4) нужно, чтобы ограничить учащихся более сложным случаем, когда функция требует более аккуратного исследования, поскольку она немонотонна, т.е. имеет интервалы возрастания и убывания и, более того, обладает тремя различными вещественными корнями - по одному в каждом из интервалов монотонности.

О проверке этих условий.

1) В языке Maple для вычисления НОД нескольких целых чисел предусмотрена команда igcd. Можно ограничится многочленами, у которых коэффициенты а и Ъ при двух старших степенях положительны; тогда любые два различных таких многочлена,

у каждого из которых НОД коэффициентов равен единице, не могут быть пропорциональны.

2) Применим стандартный приём: сдвигом переменной х ^ г + х0, где х0 - постоянная, приведём многочлен к виду, в котором коэффициент п[ри квадрате новой переменной х равен нулю. Тогда х0 = -Ъ/(3а) и многочлен принимает вид аг3 + с'х + й', где

, _ Ъ2 , _ Ьс 2Ъ3

С С 3а' ^ ^ 3а + 27а2 (1)

Условие с' = 0 означает как раз, что в многочлене можно выделить полный куб,

так что он оказывается равен сумме куба линейной функции и постоянного слагаемого, что запрещено по условию 3). Пусть поэтому с' Ф 0. Случаи, когда а и с' имеют одинаковые или разные знаки, совершенно аналогичны, но должны рассматриваться отдельно. Однако, в случае, когда а и с' имеют одинаковый знак, многочлен будет монотонен на всей вещественной прямой и имеет единственный корень - этот случай должен быть отброшен согласно условию 4). Пусть поэтому а и с' имеют противоположные знаки. Заметим также, что согласно условию 3) должно быть выполнено й' Ф 0, поскольку в противном случае исходный многочлен имеет рациональный корень х = х0. Применяя масштабирование переменной х ^ tw, где t - коэффициент, а w -новая переменная, приводим многочлен к виду t3aw3 + гс'ж + й' и деля его на коэффициент при старшей степени, получаем: w3 + с'/(г2а)™ + й'/(г3а). Полагая теперь

t = ±^-с'/а, приходим к многочлену w3 -w + й'', где й'' = ±= ±^--^з^' •

sgn а. Наконец, выбором нужного знака ± получим окончательный, «канонический» вид многочлена, к которому он приводится масштабированием его значений и линейным преобразованием переменной: w3 -"ш + й'', где й'' = Два многочлена

могут переведён один в другой масштабированием значений и линейным преобразованием переменной, если и только если они имеют одинаковый «канонический» вид относительно этих преобразований, т.е. вычисленные для них величины й'' будут равны, иначе говоря, будут равны величины -й''2 = ай'2/с'3. Итак, последняя величина является инвариантом и даже образует полную систему инвариантов относительно линейных преобразований переменной и масштабирования значений для кубических многочленов (по крайней мере, имеющих три различных вещественных корня). После небольшого упрощения эта величина в терминах исходных коэффициентов примет вид

1 (2Ъ3 -9аЪс + 27а2й)2

----— (2)

27 (3ас-Ъ2)3 У ;

Если же нас интересуют, помимо масштабирований значений многочленов, не

произвольные линейные преобразования переменной, а только её масштабирования,

оставляющие на месте начало отсчёта, то в качестве полной системы инвариантов

выступает, как легко видеть, пара величин

с ~ й Ъ

с = —- и й = —- ' где t ^ — (3)

а12 а13 а

поскольку «канонический» вид кубического многочлена с отличным от нуля коэффициентом Ъ имеет вид ж3 + ж2 + еж + й (ср. с приведёнными выше выкладками).

3) Условие, что многочлен 3-ей степени приводим над рациональными числами, т.е. разлагается в произведение многочленов меньшей степени с рациональными коэффициентами, означает в точности, что он имеет рациональный корень. Хорошо известно, что для многочлена с целыми коэффициентами любой его рациональный корень, представленный в виде несократимой дроби х = р/ц, обладает тем свойством,

что числитель p будет делителем коэффициента при нулевой степени переменной, т.е. свободного члена, а знаменатель q - делителем коэффициента при старшей степени. Это свойство можно использовать для проверки приводимости многочлена -следует непосредственным вычислением проверить, обращается ли в нуль многочлен при подстановке в него хотя бы одного рационального числа такого вида. Удобно воспользоваться командой divisors, предусмотренной в теоретико-числовом пакете numtheory языка Maple. Эта команда имеет один аргумент, являющийся целым числом, и возвращает множество всех натуральных делителей этого числа. Кроме того, в Maple можно воспользоваться и командой factor, которая, будучи применена к многочлену, пытается его факторизовать, т.е. разложить на множители - многочлены меньшей степени, в случае же неудачи просто возвращает исходный многочлен. Отметим, что эта команда не выносит числовой множитель - общий делитель всех коэффициентов - если многочлен не удалось разложить на многочлены меньших степеней. Поэтому, если многочлен удалось факторизовать, то результат будет выражением, которое является либо степенью (кубом линейного многочлена), либо произведением (двух или трёх многочленов и, возможно, числового множителя, либо числового множителя и одного многочлена, но только если последний является кубом). Сам же исходный многочлен является выражением типа «сумма». Для определения типа выражения в Maple предусмотрены команды type и whattype. Если записать присваивание u:=factor(f), где f:=a*xA3+b*xA2+c*x+d - рассматриваемый многочлен, то составная команда (type(u/*") or type(u,"A")) выдаёт логическое значение true, если многочлен был факторизован, и значение false в противном случае.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Условие, что производная многочлена 3-ей степени (с целыми коэффициентами), которая будет квадратичным многочленом, не имеет рациональных корней, означает, что её дискриминант, равный (Ъ2 - 3ас) (с точностью до несущественного множителя 4), будучи целым числом, не является квадратом целого числа. В Maple можно использовать команду type(u,integer), где u - квадратный корень из дискриминанта, - она возвращает true, если её аргумент u - целое число, и false в противном случае. Можно также использовать ту или иную команду округления до целого числа или вычисления дробной части, что применимо в разных вычислительных системах. Далее, если кубический многочлен допускает выделение куба либо, более общо, разложение в сумму кубов линейных выражений, то он имеет единственный вещественный корень, а этот случай отбрасывается условием 4).

Из требования отсутствия рациональных корней у кубического многочлена и его производной следуют очевидные ограничения на его коэффициенты: с Ф 0 и d Ф 0.

4) Количество вещественных корней кубического уравнения с вещественными коэффициентами сразу определяется по знаку его дискриминанта D: если D > 0, то имеется три различных корня, если D < 0 - то один, в случае же D = 0 имеется кратный корень, см. [6]. Напомним, что дискриминант многочлена любой степени п со старшим коэффициентом а, равным единице, есть произведение квадратов всех попарных разностей всех его (комплексных) корней, для произвольного же а принято [7] умножать это произведение на а2п-2; замечательно, что дискриминант выражается в виде многочлена от коэффициентов исходного многочлена [8]. В Maple дискриминант любого многочлена может быть вычислен командой discrim, а именно, discrim(P,x) возвратит дискриминант многочлена P с переменной x. Для кубического многочлена ах3 + Ъх2 + сх + d дискриминант равен D = -27a2d2 + 18abcd + b2c2 -4b3d - 4ac3. (В случае, когда многочлен приведённый, т.е. старший коэффициент а = 1, этот дискриминант вычислен в [9], откуда легко получить формулу и для общего случая, деля многочлен на его старший коэффициент и вводя в выражение для дискриминанта полученного многочлена указанный выше множитель а2п-2 = а4.) Таким

образом, наборы коэффициентов, для которых это выражение оказывается неположительным, должны быть отброшены.

Отметим, что в действительности любое кубическое уравнение в вещественной области всегда допускает решение в конечном виде, причём без использования комплексных чисел. Действительно, хорошо известная формула Кардано для корней кубического уравнения позволяет в случае, когда имеется только один вещественный корень, провести вычисления в вещественных числах и даёт как раз этот единственный корень; если же имеется три вещественных корня, то эта формула неудобна, поскольку при вычислениях появляются комплексные числа, но как раз в этом случае применим менее известный метод Виета решения кубического уравнения, основанный на формуле косинуса утроенного аргумента, см. обсуждение в [10]. Приведём для удобства читателя эти формулы. Для многочлена г3 +рг + ц, получаемого делением на старший коэффициент и сдвигом переменной (так что х = х - Ь/(3а) и р = с'/а, ц = й'/а, где с' и й' заданы согласно (1)), формула Кардано имеет вид

Обратим внимание на одно обстоятельство. Дискриминант последнего многочлена z3 +pz + q будет равен D = -4р3 - 27q2. В формуле Кардано для корней такого многочлена используется величина Д = -D/108 = р3/27 + q2/4, которую часто тоже называют дискриминантом, но которая отличается от него отрицательным множителем (-1/108). Заметим также, что если исходный кубический многочлен имеет три различных корня, то имеются и две точки локального экстремума - минимума и максимума, а произведение значений многочлена в этих точках отрицательно; если же имеются два локальных экстремума, но это произведение положительно, то имеется только один вещественный корень. Итак, это произведение должно иметь знак, противоположный знаку дискриминанта D. В самом деле, оно равно -D/(27a2), что, например, сразу следует из общей формулы, выражающей дискриминант любого многочлена через результант этого многочлена и его производной, и выражения результанта двух многочленов через произведение значений одного многочлена в корнях другого многочлена, см. [11].

Резюмируя, получим, что описанные условия 1)-4) сводятся к следующему: достаточно проверить, что НОД коэффициентов кубического многочлена равен единице, этот многочлен не разлагается в произведение многочленов меньшей степени, его дискриминант положителен и квадратный корень дискриминанта его производной не является целым числом, наконец, что для многочлена с данным набором коэффициентов инвариант (2) имеет значение, отличное от вычисленных ранее значений (для предыдущих наборов коэффициентов); впрочем, как отмечалось, последняя проверка не имеет столь принципиального значения. Все другие требования будут тогда выполняться автоматически.

Автор подбирал задания вариантов, т.е. наборы коэффициентов, в диалоговом режиме (см. о подготовке заданий в диалоговом режиме в [12]), используя средства языка Maple. Для заданного набора коэффициентов выводились их НОД, результат попытки факторизации многочлена (описанная выше команда factor), график многочлена (команда plot), по которому сразу видно поведение функции и наличие у неё корней (что заменяет необходимость вычисления дискриминанта и позволяет судить визуально о качестве задания с данным набором коэффициентов), координаты точек

а формула метода Виета есть

экстремумов на графике - в алгебраическом виде (т.е. в виде точного алгебраического выражения, что заменяет необходимость проверки того, что дискриминант производной не будет полным квадратом, ибо корень полного квадрата вычисляется автоматически) и в виде, преобразованном к приближённым десятичным дробям, координаты точки перегиба на графике - в виде дробей и приближённых десятичных дробей, и, наконец, корни исходного многочлена в виде приближённых десятичных дробей (вычисленные командой fsolve языка Maple, применяющей какой-то численный метод, либо же подсчитанные по указанной выше явной формуле метода Виета, поскольку рассматривается случай наличия трёх вещественных корней). Для наборов коэффициентов, которые оказались отобраны для вариантов задания, эти вычисленные данные записывались в файл с ответами (рабочий лист Maple, который можно сохранить в формате rtf, а из него перевести в формат pdf). Наконец, можно устроить проверку того, что значение инварианта (2) для каждого данного набора отлично от значений для всех предыдущих наборов, которые успешно прошли тестирование. Таким образом удаётся «вручную» быстро подобрать несколько десятков вариантов.

Легко организовать автоматический перебор наборов коэффициентов. В качестве примера, пусть коэффициенты пробегают соответственно наборы целых чисел а Е{1; 2}, be {1..5}, с Е {-6. .6}\{0}, d Е {-6. .6}\{0}, где [п..т] означает множество всех целых чисел в отрезке [п;т]. (Здесь учтено указанное выше ограничение с Ф 0 и d Ф 0; также рассматриваются только значения Ъ Ф 0, поскольку в противном случае вычисления двух локальных экстремумов кубического многочлена совершенно аналогичны; наконец, достаточно ограничиться случаем а > 0, Ъ > 0, поскольку общий случай сводится к нему переменой знаков многочлена и/или переменной величины.) Тогда всего имеется 2х 5х 12 х 12 = 1440 наборов (a;b;c;d) коэффициентов. Будем проверять для каждого из них последовательно описанные выше свойства, указывая в скобках количество наборов, которые выдержали эту и все предыдущие проверки: равенство НОД единице (1368), неразложимость многочлена (1130), положительность дискриминанта (243) и то, что дискриминант производной не будет полным квадратом (220). Как видно, больше всего наборов отсеивается при проверке положительности дискриминанта, что кажется естественным. Если же теперь найти сколько значений принимает величина (2) для оставшихся 220 наборов, иначе говоря, сколько среди полученных кубических многочленов будет не сводящихся друг к другу масштабированиями значений и линейными заменами переменной, то это число окажется равным 140. Простейший способ организовать это вычисление в Maple - записывать все значения величины (2) в одно множество, повторяющиеся элементы будут в нём автоматически отбрасываться. Если, например, переменной U присвоено значение (2), а list_data - список всех наборов переменных, каждый из которых оформлен в виде списка [a,b,c,d], то тогда искомое множество можно сформировать всего одной составной командой {seq(subs([a=li[1],b=li[2],c=li[3],d=li[4]],U),li=list_data)}, а для нахождения количества его элементов использовать стандартную команду nops. Если же интересоваться количеством кубических многочленов, из числа 220, прошедших предыдущие проверки, которые не сводятся друг к другу масштабированиями значений и масштабированиями (а не любыми линейными заменами) переменной, то это число окажется равным 211. Для подсчёта можно применить только что описанный метод, заменив переменную U, вычисляемую по формуле (2), на упорядоченный набор из двух значений (3), оформляя его при вычислениях в Maрle как список.

Для формирования же конкретного списка наборов коэффициентов многочленов, не переводящихся друг в друга рассматриваемыми преобразованиями, нужно, двигаясь вдоль исходного списка из 220 наборов, проверять для каждого следующего набора, даёт ли он значение инварианта (2) или (3), уже встречавшееся ранее, и если это так, то отбрасывать этот набор. Иначе говоря, одновременно формируется новый

список, в который включаются наборы, которые дают новые значения инварианта. При этом имеет смысл предварительно упорядочить исходный список так, чтобы в его начале шли наборы с относительно небольшими коэффициентами, а в конце - с большими. В этом случае отбрасываться будут именно наборы с большими коэффициентами, а оставляться для включения в задания - с меньшими.

Случай, когда два нуля функции очень близки друг к другу, а значение функции в находящейся между ними точке (локального) экстремума, соответственно, близко к нулю, является близким к вырожденному. Можно предусмотреть отсев тех наборов коэффициентов многочленов, из числа 220, прошедших предыдущие проверки, для которых расстояние между какими-то двумя корнями или абсолютная величина значения в какой-то точке экстремума окажется меньше заданной положительной величины. Непосредственные вычисления дают, что среди этих 220 наборов коэффициентов наименьшее расстояние между парой корней, приблизительно равное 0,3048, достигается для набора а = 1,Ъ = 5, с = -5, й = 1, а наименьшее абсолютное значение в точке экстремума, приблизительно равное 0,1285, достигается для набора а = 1,Ъ = 3,с = -4, й = 1. Эти значения не кажутся автору слишком малыми для того, чтобы такие наборы коэффициентов были включены в задания.

Автоматическое формирование вариантов задачи, исходя из шаблона решения/ответа

Во многих случаях может быть задан шаблон того, как должно выглядеть решение задачи и подставляя в этот шаблон, например, конкретные наборы чисел, можно восстановить условие задачи. Этот подход позволяет гарантировать, что разные сформированные варианты будут иметь одинаковый уровень сложности, но при этом можно получить много существенно различных вариантов задания. То есть их решения будут совершенно аналогичны, но различны. Приведём два соответствующих примера.

Пример задания 2. Даны перестановка а = ( П ) (в табличном виде) и

— ап/

целое число т. Для перестановки ат найти её разложение на независимые циклы, тип и порядок.

Напомним, что указанная табличная запись означает, что рассматривается перестановка а (как это обычно бывает) множества п первых натуральных чисел, которая переводит каждый элемент / в элемент а{, причём все элементы а{ различны а, значит, составляют всё рассматриваемое множество. Степень ат перестановки - это перестановка, получаемая применением т раз перестановки а; при отрицательных т перестановка применяется «в обратном порядке», нулевая же степень - это тождественное преобразование, которое каждый элемент оставляет на месте. Порядок огй(а) перестановки а - это наименьшее натуральное т такое, что ат будет тождественной перестановкой. Любая перестановка элементов конечного множества распадается на независимые циклы или циклические перестановки, каждая из которых циклически переставляет какие-то элементы. Говорят, что перестановка имеет тип (к1, ...,к5), если натуральные числа к1, ...,к5 - длины всех её независимых циклов, отличных от неподвижных точек (так что эти числа будут больше единицы; каждому циклу соответствует одно число к{, поэтому числа будут повторяться, если имеются циклы одинаковой длины), а порядок перестановки вычисляется как наименьшее общее кратное (НОК) этих длин циклов. Заинтересованный читатель может познакомиться с этими сведениями во многих источниках, см., например, пожалуй наиболее известное пособие для школьников [13] (но следует иметь в виду, что порядок перемножения перестановок фо-ф, принятый в этом пособии, - вначале применяется ср,

потом - противоположен общепринятому: вначале потом впрочем, в нашем случае это не имеет значения, поскольку рассматриваются только степени одной перестановки).

Шаблоны: одна перестановка ß, записанная в виде разложения в композицию независимых циклов, список перестановок у, трансформирующих (сопрягающих) ß в а, также списки неполных частных q и остатков г при делении т на порядок s = ord(ß) перестановки ß (все числа q и г - целые, причем 0 < г < s).

Алгоритм. Вычислить порядок s = ord(a) = ord(ß) как НОК длин циклов, составляющих перестановку ß. Задать выбор конкретных значений у, q и г из списков шаблонов для каждого номера варианта, вычислять число т = q • s + г и перестановку а = y-1ßy в виде разложения на независимые циклы, наконец, выводить в La-TeX-файл с заданием эту перестановку в табличном виде и число т. Для формирования файла с ответами вычислить перестановку ат = аг в виде разложения на независимые циклы, определить длины k1,.,ks составляющих её циклов и её порядок НОК(kv...,ks). Перед выводом в файл набор чисел k1,.,ks (оформленный в виде списка, но не множества, чтобы избежать удаления повторяющихся элементов) следует упорядочить по возрастанию или убыванию, а сама перестановка выводится в табличном виде. Можно задать и список из нескольких перестановок ß примерно одинаковой сложности и предусмотреть выбор соответствующей конкретной перестановки для каждого номера варианта, однако представляется, что в рамках одного контрольного мероприятия в этом нет необходимости, поскольку другие изменяемые данные у, q и г позволяют создать много непохожих друг на друга вариантов.

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

Для осуществления описанного алгоритма нужно создать процедуры (подпрограммы), которые совершают следующие действия: 1) формирование списка длин циклов по списку циклов, представляющему разложение перестановки, 2) переписывание перестановки, представленной в виде разложения на циклы, в табличный вид, 3) для данных перестановок ß и у вычисление перестановки а = y-1ßy с представлением результата в виде разложения на циклы, 4) вычисление степени перестановки, представленной в виде разложения на циклы, с представлением результата в таком же виде. Отметим, кстати, что тип и порядок перестановки ат = аг сразу определяются по типу и порядку перестановки а (что можно использовать и для контроля при отладке программы): каждый цикл длины kj перестановки а распадается в dj = НОД(т,к]) = НОД(г,к]) циклов длины kj/dj перестановки ат = аг, а порядок последней равен ord(am) = s/d, где s = ord(a), d = НОД(ш,5) = НОД(г,5); здесь НОД означает наибольший общий делитель целых чисел. В Maple для вычисления НОД и НОК нескольких целых чисел предусмотрены команды igcd и ilcm. Далее, для вычисления перестановки а = y-1ßy, представленной в виде разложения на циклы, удобно использовать ß в таком же виде, а у - в табличном виде у =

(п ::: I)

. В самом деле,

для получения искомой перестановки а нужно просто в записи перестановки ß заменить каждый элемент i множества, на котором заданы перестановки, на элемент yt -образ элемента i под действием перестановки у. В Maple это можно осуществить одной составной командой вида alpha:=map(u->map(i->Gamma[i],u),beta), где для перестановок а и ß использованы те же обозначения, а для у - соответствующая заглавная греческая буква, поскольку gamma является одним из немногих служебных имён и

ему не может присваиваться пользователем никакое значение. Здесь переменным alpha и beta, представляющим перестановки а и ß, записанные в виде разложения на циклы, присвоены значения, являющиеся списками из списков (как это принято в Maple), а переменная Gamma, представляющая перестановку у, записанную в табличном виде, является таблицей или индексированной переменной. Разбор этого простого примера хорошо демонстрирует возможности использования команды map и вложенных списочных выражений языка Maple.

Пример задания 3. Применить алгоритм Евклида для вычисления наибольшего общего делителя (НОД) заданных целых чисел а и Ъ и найти линейное представление НОД. Или такая версия задания: Решить диофантово уравнение ах + by = с с заданными коэффициентами а,Ь и свободным членом с.

Напомним, что линейное представление для d = НОД(а, Ъ) - это его запись в виде d = ka + lb с целыми коэффициентами к, I; НОД двух чисел и его линейное представление вычисляются с помощью знаменитого алгоритма Евклида. По словам Д. Кнута, алгоритм Евклида - «дедушка всех алгоритмов, потому что это самый старый нетривиальный алгоритм, сохранившийся до наших дней». Он заключается в следующем. Можно считать, что числа а и Ъ - натуральные, поскольку случай, когда хотя бы одно из них равно нулю, очевиден, а вместо отрицательного числа можно взять положительное, отличающееся от него только знаком. Можно считать, что а - наибольшее из двух чисел. Отталкиваясь от а и Ь, составим цепочку убывающих чисел:

а> b > гг> г2> ■■■ > гп-1 > гп> 0,

где каждое следующее число ищется как остаток от деления пред-предшествующего числа на предшествующее. Эта цепочка обязательно завершится нулем, т.е. некоторое число гп-1 разделится нацело на следующее число гп. Если г - остаток при делении х на у, то любой общий делитель пары чисел (х,у) будет таковым и для пары чисел (у,г), и наоборот, общий делитель второй пары будет общим делителем первой. Следовательно, в указанной цепочке все общие делители пар соседних чисел (a,b), (b,r1), (г1,г2),..., (гп-1,гп) и числа гп будут совпадать и последний ненулевой остаток гп и будет искомым d = НОД(а,Ь). Будем писать х>у, если q - неполное частное при делении х на у так, что х = qy + г, где г - остаток (0 < г < |у|), откуда г = х - qy. Тогда, если х и у имеют линейные представления через а и Ь, т.е. х = кха + lxb, у = куа + lyb, то справедливо линейное представление г = кга + lrb для г с коэффициентами (кг,1г) = (кх,1х) - q • (ку,1у) в векторной записи. Поэтому, если указанная выше цепочка чисел с учётом значений неполных частных имеет вид

а>ь>г1>г2>->гп-1>гп>0, (4)

4J

4i 42 Чз Чп

то имеем последовательно вычисляемые линейные представления всех остатков Ъ = к{а + 11Ъ, согласно формулам (ки 1{) = (к1-1,11-1) - qi • (к1-2, Ц-2) для 1<1<п, отталкиваясь от соответствующих коэффициентов (к-1,1-1) = (1,0), (к0,10) = (0,1) для представлений исходных чисел а и Ь. Тогда искомые коэффициенты линейного представления НОД есть (к,1) = (кп,1п). Заметим, что неполные частные qi будут натуральными числами, причём последнее из них не равно единице: qn > 1.

Алгоритм Евклида может быть использован для решения линейного диофантова уравнения двух переменных, т.е. уравнения вида ах + Ъу = с, где коэффициенты а, Ь, свободный член с и неизвестные х,у - целые числа. А именно, если с делится на d = НОД(а,Ь), причём d = ка + 1Ъ - линейное представление НОД, то все решения уравнения имеют вид х = х0 + и • п, у = у0 + V • п, где х0 = кд, у0 = 1д, и = b/d, V = —a/d и д = c/d, а п пробегает все целые числа; в противном же случае решений нет. См. подробнее, например, в [14].

Шаблоны: список наибольших общих делителей d, набор неполных частных Q = {q1, ...,qs} - натуральных чисел - с учётом только кратности каждого числа qk.

Алгоритм. Задать для каждого номера варианта выбор d из списка и перестановку (с повторениями) множества Q, дающую последовательность (упорядоченный набор) неполных частных (q1,q2, .,qn) в алгоритме Евклида, учитывая при этом, что последнее частное должно быть больше единицы. Для этого заранее сформировать список всех подходящих различных перестановок множества Q с кратными элементами. Можно, например, вначале сформировать список всех перестановок (с повторениями) множества Q, а затем отбросить те из них, у которых на последнем месте оказалась единица. В Maple такой список формируется обсуждавшейся выше командой permute, а для отсева неподходящих элементов списка или множества предусмотрена удобная команда remove. После выбора для данного варианта конкретной последовательности неполных частных (q1,q2,.,qn) и значения d для НОД следует применить обратный ход алгоритма Евклида для вычисления последовательных остатков, начиная от последних и заканчивая числами а и Ь, а коэффициенты (ki,1{) линейных представлений остатков вычислить по написанным выше формулам прямого хода, поскольку они требует только знания неполных частных, но не самих остатков. Вычислительные формулы обратного хода имеют вид: rn = d, rn+1 = 0 и ri-1 = qiri + ri+1 для п>1>0иа= r-1, Ь = г0. Наконец, если числа а и Ь могут быть отрицательными, причём необязательно выполнено |а| > |Ь|, то надо задать для каждого номера варианта знаки чисел а и Ь и указать, какое из них больше по модулю. Соответственно, при необходимости надо поменять знак одного или обоих вычисленных чисел и/или переставить эти числа местами. В случае, когда решается диофантово уравнение, надо также для каждого номера варианта задать целое число g = c/d и вычислять свободный член с = gd и величины х0, у0, u, v. Можно, например, задать возможные значения g в виде списка и для каждого номера варианта определить выбор элемента из этого списка.

Рассмотрим пример. Для Q = {1,2,2,2,3,4} имеется Р(1,3,1,1) = 120 пере-

становок с повторениями, которые дают последовательности неполных частных, но из них Р(3,1,1) = --— = 20 будут оканчиваться на единицу и должны быть поэтому отброшены. (В общем случае количество таких «забракованных» последовательностей равно нулю, если множество Q не содержит 1, иначе оно равно количеству перестановок с повторениями для множества Q без одной единицы, которое обозначим через Q'. Действительно, все такие последовательности получаются, если на последнем месте поставить единицу, а все предыдущие позиции заполнить произвольной перестановкой с повторениями для множества Q'.) Следовательно, можно составить 12020 = 100 подходящих последовательностей. Далее, к примеру, для частной последовательности неполных частных (2,1,2,2,4,3) и числа d = 1 получаем следующую цепочку чисел (4):

271>100>71>29>13>3>1> 0,

Ч-* ^ ^ ^ ^ ^

2 1 2 2 4 3

где а = 271, Ь = 100 и линейные представления всех остатков

71 = 1 а - 2 Ь 29 = -1 а + 3 Ь 13 = 3а- 8Ь 3 = -7 а + 19Ь 1 = 31 а- 84Ь

Последнее из них - это искомое линейное представление НОД. Если теперь коэффициент а диофантова уравнения берётся положительным, а коэффициент Ъ - отрицательным, а также указано, что а должно быть больше по модулю, чем Ъ и задано д = 3, то свободный член с = 3, а уравнение и его общее решение примут вид

271х - 100у = 3 (93 + 100п, 252 + 271п)

Для проверки написанных учащимися решений полезно в файле с ответами иметь для всех вариантов записи цепочек чисел (4) и линейных представлений всех остатков, а также решений диофантовых уравнений, пример таких записей был только что приведён. Не представляет сложности организовать вывод этих результатов в исходный LaTeX-файл с ответами - соответствующие команды обсуждались в двух предыдущих частях настоящей работы.

Заключение

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

ССЫЛКИ НА ИСТОЧНИКИ

1. Довбыш С.А. Использование некоторых программных средств для подготовки вариантов контрольных заданий и вспомогательных материалов: автоматическое формирование входных файлов и их обработка // Modern European Researches. - Salzburg, 2020. - том 1, №2. - P. 82-95.

2. Довбыш С.А. Использование некоторых программных средств для подготовки вариантов контрольных заданий и вспомогательных материалов: работа с файлами и организация диалоговой работы // Modern European Researches, 2021. - том 1, № 2, с. 81-89.

3. Виленкин Н.Я. Комбинаторика. М.: Наука, 1969. 328 с.; Виленкин Н.Я., Виленкин А.Н., Виленкин П.А. Комбинаторика. М.: ФИМА, МЦНМО, 2006. 400 с. - Изд. 6-е, стер. - Москва: ЦНМО: ФИМА, 2017. - 399 с.; Виленкин Н.Я., Гутер Р.С., Шварцбурд С.И., Овчинский Б.В., Ашкинузе В.Г. Алгебра. Учебное пособие для 9-10 классов средних школ с математической специализацией. М.: Просвещение, 1968. 336 с.; Ежов И.И., Скороход А.В., Ядренко М.И. Элементы комбинаторики. М.: Наука, 1977. 80 с.

4. Прасолов В.В. Многочлены. - 3 изд, испр. - М.: МЦНМО, 2003. 336 с.

5. Виленкин Н.Я. Метод последовательных приближений. Изд. 2-е, перераб. и доп. М.: Наука, 1968. 108 с. -(Серия «Популярные лекции по математике», выпуск 35); Виленкин Н.Я., Шварцбурд С.И. Математический анализ. Учебное пособие для IX—X классов средних школ с математической специализацией. Изд. 2-е. М.: Просвещение, 1973. 512 с.

6. Болтянский В.Г., Виленкин Н.Я. Симметрия в алгебре. Изд. 2-е. М.: МЦНМО, 2002. 240 с.

7. Прасолов В.В. Указ. соч.

8. Болтянский В.Г., Виленкин Н.Я. Указ. соч.; Прасолов В.В. Указ. соч.

9. Болтянский В.Г., Виленкин Н.Я. Указ. соч.

10. Колосов В.А. Теоремы и задачи алгебры, теории чисел и комбинаторики. М.: Гелиос АРВ, 2001. — 256 с.

11. Прасолов В.В. Указ. соч.

12. Довбыш С.А. Указ. соч., 2021.

13. Калужнин Л.А., Сущанский В.И. Преобразования и перестановки. М.: Наука, 1979. 112 с.; изд. 2-е, перераб. и доп. М.: Наука, 1985. 160 с.

14. Курант Р., Роббинс Г. Что такое математика? Элементарный очерк идей и методов. Изд. 2^. М.: Просвещение, 1967. 559 с.; Изд. 3-^ испр. и доп. М.: МЦНМО, 2001. 568 с.; Изд. 3^. Ижевск: НИЦ «Регулярная и хаотическая динамика», 2001. 592 с.; 4-ое изд., стер. М.: МЦНМО, 2007. 568 с.; Виленкин Н.Я., Гутер Р.С., Шварцбурд С.И., Овчинский Б.В., Ашкинузе В.Г. Указ. соч.; Колосов В.А. Указ. соч.

Sergei A. Dovbysh,

Associate Professor, Moscow State Technical University named after N.E. Bauman, Moscow State University named after M. V. Lomonosov, Moscow sdovbysh@yandex. ru

On using some software for preparing tickets for control tasks and auxiliary materials: automatic generation of task variants and their mixing in tickets Abstract.

The article is a continuation of the author's two previous publications, where the problem of automated generation and processing of a large number of input LaTeX files with individual tasks was discussed, and some tools and capabilities of MATLAB and Maple systems were noted, which are little reflected in the educational literature, but can be useful for organizing interactive work when drawing up task options. This task has become especially relevant when conducting control activities in distance learning, when, in order to avoid possible non-independent solving problems by students, it was necessary to form a large number of options and print them in separate files. This article deals with the issues of the actual automatic generation of task tickets. Algorithms for mixing several available variants of each problem in tickets are discussed, and examples of automatic formation of a large number of variants of the problem are considered, based on a certain template of the problem condition and/or solution/answer to the problem. The article is intended as a practical guide that can be useful for teachers of secondary and high schools. Keywords: Maple, Matlab, C language.

i Надоели баннеры? Вы всегда можете отключить рекламу.