Усилитель мощности и принцип его действия

Усилителем мощности (УМ) называют усилитель, который обеспечи-вает заданную мощность в нагрузке, сопротивление которой, как правило, мало. Обычно в таких усилителях амплитуды выходного тока и напряжения близки к предельно допустимым значениям для используемого транзистора, а выходная мощность соизмерима с предельно допустимой мощностью, рас-сеиваемой прибором, и сравнима с мощностью, потребляемой от источника питания.
Важнейшими показателями, характеризующими УМ, являются: КПД, мощность, отдаваемая в нагрузку, коэффициент нелинейных искажений вы-ходного сигнала.
В УМ для согласования большого выходного сопротивления с низко-омным сопротивлением нагрузки необходимо применение трансформатора с малыми потерями. Однако с появлением мощных транзисторов с низкоом-ным выходным сопротивлением стало возможным построение схем, рабо-тающих на нагрузку величиной нескольких Ом без использования трансфор-маторов. В настоящее время бестрансформаторные усилители мощности по-лучили широкое распространение.
Усилитель мощности обычно состоит из нескольких каскадов: входно-го, предоконечного и оконечного. Технические параметры усилителя во мно-гом определяются оконечным каскадом, так как он является основным по-требителем энергии источника питания. Оконечный каскад обычно реализу-ют по двухтактной схеме, при этом для сильных управляющих сигналов име-ет место режим В, а для слабых– режим А, что позволяет уменьшить нели-нейные искажения слабых сигналов. Выходной каскад служит для усиления мощности и его коэффициент усиления по напряжению близок к 1. входной и предоконечный каскады работают в режиме большого усиления по току или напряжению.
Существует множество различных схем бестрансформаторных усили-телей мощности, но все они имеют вышеперечисленные составные части. Конструкция схемы входного каскада зависит от требуемого усиления и ко-эффициента нелинейных искажений. При большой требуемой выходной мощности транзисторы оконечного каскада заменяются на составные. Пре-доконечный каскад обычно остаётся неизменным.








Принцип действия усилителя мощности.

В качестве предоконечных каскадов широко используются операцон-ные усилители в интегральном исполнении. Возбуждающий сигнал на вы-ходной каскад поступает с выхода операционного усилителя D. Весь усили-тель с помощью делителя R2R3 охвачен отрицательной обратной связью, бла-годаря которой схема настолько линейна, что не требует дополнительных цепей смещения для транзисторов оконечного каскада. Так как коэффициент усиления по напряжению оконечного каскада по схеме ОК составляет при-мерно единицу, то усиление всего устройства KU=1+R3/R2.
Когда на входе выходного каскада появляется переменный сигнал, при положительной полуволне открывается транзистор типа n-p-n, пропуская в нагрузку ток, а состояние транзистора типа p-n-p не изменяется. При поступ-лении на вход отрицательной полуволны сигнала, наоборот, работает транзи-стор типа p-n-p. Таким образом, в нагрузке проходит переменный ток в тече-ние одного периода. Постоянный ток в случае, если транзисторы имеют идентичные параметры и сигналы одинаковы по амплитуде, через нагрузку Rн не проходит. Поскольку оба транзистора в схеме включены по отношению к нагрузке как эмиттерные повторители, согласование выходного сопротив-ления усилителя с сопротивлением нагрузки (обычно низкоомной) обычно упрощается и КПД схемы может оказаться достаточно высоким.
Транзисторы включены по схеме ОК. Это обеспечивает небольшое вы-ходное сопротивление Rвых , что облегчает согласование усилителя с низко-омным нагрузочным резистором, характерным для УМ. Входное сопротив-ление усилителя повышенно, что упрощает согласование с маломощным вы-сокоомным источником входного сигнала. Поскольку выходное напряжение каскада ОК почти равно входному, усиление мощности в таком усилителе достигается за счёт усиления тока.
Для симметрии плеч усилительного каскада разнотипные транзисторы должны иметь строго одинаковые параметры. Поэтому следует пользоваться одной парой транзисторов, имеющих одинаковые параметры и называемых комплементарными.
Блок питания (БП) предназначен для преобразования переменного на-пряжения сети Uс=36 %, В в двухполярное стабилизированное напряже-ние Eк=20 В.
БП состоит из мостового выпрямителя со средней точкой, двух LC–фильтров и двух компенсационных стабилизаторов напряжения (КСН) непрерывного действия.
Средняя точка вторичной обмотки трансформатора (Т) выведена и со-единена с общей точкой схемы.
Однофазные двухполупериодные выпрямители дают напряжение Ud с коэффициентом пульсации q=0.67.
Питать таким напряжением многие потребители, особенно содержащие электронные блоки, нельзя.
Поэтому источники вторичного электропитания (ИВЭ) снабжаются сглаживающими фильтрами (СФ).
Требования, предъявляемые к фильтру:
1) Максимальное ослабление переменной составляющей напряжения.
2) Минимальное ослабление постоянной составляющей напряжения.
3) Броски токов и напряжений, обусловленные СФ в переходных ре-жимах при включении и выключении сети или нагрузки не должны превышать допустимых значений.
Работа LC–фильтра
LC–фильтры применяются в ИВЭ средней мощности, когда сопротивление нагрузки Rн существенно, а требуемый коэффициент сглаживания S>20. При 1LФ>>RН II 1/1CФ переменная составляющая тока Id будет вызывать падение напряжения в основном на индуктивности LФ, а не на нагрузке Rн.

Об обработке текстовой информации

Сформулируем следующую проблему. Как изучать принципы обработки текстовой информации? Обычно изучается конкретный текстовый процессор, например MS Word, на уровне пользовательских навыков. Возможен другой взгляд на проблему, а именно, в курсе программирования за счет специально подобранных задач изучаются фундаментальные основы обработки текстовой информации. Статья посвящена разработке подборки (части) задач для реализации второй точки зрения.
1. Выравнивание текста.
Задача:
Дан текст в файле в виде строки. Требуется отформатировать текст:
1. выравнивание по ширине;
2. выравнивание по центру;
3. выравнивание по левому краю;
4. выравнивание по правому краю;
и вывести текст в файл в виде нескольких строк (ширина строк после форматирования не должна превышать W символов). Выравнивание текста производится путем вставки пробелов. Слова переносятся на следующую строку только целиком. Слово – последовательность символов, не содержащая пробелов.
Исходный текст содержится в файле в виде строки, его требуется отформатировать и вывести в несколько строк.
Рассмотрим процедуру Solve:
procedure SOLVE;
begin
while READS do
begin
FORMATING(W);
PRINT;
end;
PRINT;
end;
Данная процедура обращается к функции READS, которая записывает в строку S (глобальная переменная) текст из файла блоками длиной по W (глобальная переменная) символов. Далее процедура FORMATING производит форматирование строки, которая затем выводится процедурой PRINT. Этот процесс повторяется до тех пор, пока функция READS возвращает значения ИСТИНА – не конец файла. В завершении выводится остаток исходного текста без форматирования.
function READS: boolean;
var c: char;
begin
delete(s,1,w);
while (length(s)>0)and(s[1]=' ') do
delete(s,1,1);
while (not eoln) and (length(s)<=w) do
begin
read(c);
s:=s+c;
end;
if eoln then reads:=false
else reads:=true;
end;
Функция READS удаляет первые W символов из строки, если данная функция вызывается не первый раз, и удаляет все пробелы, находящиеся в начале строки. Затем, как уже было сказано, строка S дополняется до W символов. В случае, если достигнут конец строки файла, функция принимает значение ЛОЖЬ, чтобы вывести остаток исходного текста без форматирования.
Следует отметить, так как мы работаем с текстовым режимом отображения информации, то весь анализ проводится на основе анализа символьного содержания текста без использования дополнительной (мета) информации.
1.1 Выравнивание текста по ширине.
procedure FORMATING;
var i,j,k:integer;
begin
j:=length(s);
while (j>0) and (s[j]<>' ') do
dec(j);
dec(j);
k:=0;
while j<>k do
begin
i:=1;
k:=j;
while (i begin
if s[i]=' ' then
begin
insert(' ',s,i);
while (i inc(j);
end;
inc(i);
end;
end;
end;
Логика данной процедуры довольно проста:
1. Необходимо найти позицию, с которой начинается слово, не умещающееся в строке.
2. Находим в интервале от 1 до найденного выше значения промежуток между словами и добавляем один пробел.
3. Шаг (2) повторяется до тех пор, пока последнее слово в строке не выйдет за границу W. Это слово будет перенесено в следующую строку.
1.2 Выравнивание текста по центру.
procedure FORMATING (t:integer);
var i,j:integer;
begin
if (t=w) then inc(t);
j:=t;
while (j>0) and (s[j]<>' ') do
dec(j);
dec(j);
if (j<=0) then j:=t;
for i:=1 to (w-j)div 2 do
insert(' ',s,1);
inc(j,i);
for i:=j+1 to w do
insert(' ',s,j+1);
end;
Процедура ищет начало слова, которое не вмещается в строку. Вся предыдущая часть строки дополняется одинаковым количеством пробелов с начала и с конца, таким образом, получается текст, выровненный по центру.
1.3 Выравнивание текста по левому краю.
procedure FORMATING (t:integer);
var i,j:integer;
begin
if (t=w) then inc(t);
j:=t;
while (j>0) and (s[j]<>' ') do
dec(j);
dec(j) ;
if (j<=0) then j:=t;
for i:=1 to (w-j) do
insert(' ',s,j+1);
end;
Процедура ищет начало слова, которое не вмещается в строку. Перед этим словом добавляются пробелы так, что получается текст, выровненный по левому краю. Последнее слово будет перенесено в следующую строку.
1.4 Выравнивание текста по правому краю.
procedure FORMATING (t:integer);
var i,j:integer;
begin
if (t=w) then inc(t);
j:=t;
while (j>0) and (s[j]<>' ') do
dec(j);
dec(j);
if (j<=0) then j:=t;
for i:=1 to (w-j) do
insert(' ',s,1);
end;
Процедура ищет начало слова, которое не вмещается в строку. В начало строки добавляются пробелы так, что получается текст, выровненный по правому краю. Последнее слово будет перенесено в следующую строку.
2. Формирование содержания
Задача:
Дан текст в файле в виде строк. Текст содержит заголовки разделов, глав, параграфов. Требуется составить содержание по этим заголовкам, имеющим следующий вид:
• «$X Заголовок» - заголовок первого уровня;
• «$X.X Заголовок» - заголовок второго уровня;
• и т.д.
Перед символом “$” не должно быть никаких символов, кроме пробелов.
Рассмотрим процесс создания содержания. Предполагается, что содержание формируется из заголовков, имеющих вид:
Для хранения элементов содержания используется комбинированный тип – RECORD, содержащий заголовок, номер страницы и ссылку на следующий пункт содержания. Также используется ссылочный тип на выше указанный.
type tpnt = ^trec;
trec = record
header:string;
page:integer;
next:tpnt;
end;

Процедура SOLVE выглядит следующим образом
procedure SOLVE;
var i,num,num_line:integer;
s:string;
begin
num_line:=0;
while not eof do
begin
readln(s);
inc(num_line);
num:=pos('$',s);
i:=1;
while (i inc(i);
if i=num then ADD (s,num_line);
end;
item.next:=nil;
end;
Поясним работу процедуры SOLVE: из файла читается строка; проверяется наличие в строке символа “$” – признак заголовка; проверяется начало строки на наличие “посторонних” символов; если строка является заголовком, то процедурой ADD формируется очередной элемент содержания.
procedure ADD (s:string;lin:integer);
var page:integer;
begin
new(item.next^.next);
item.next:=item.next^.next;
page:=lin div lpp; {lpp – определяет количество строк на странице - константа}
if lin mod lpp>0 then inc(page);
item.next^.header:=s;
item.next^.page:=page;
end;
Теперь осталось реализовать вывод содержания в отформатированном виде – все элементы содержания, соответствующие заголовкам одного уровня, имеют одинаковый отступ слева. Это выполняет процедура PRINT.
procedure PRINT;
var s,p:string;
len,i:integer;
begin
writeln('Содержание:');
item.next:=first^.next;
while item.next<>nil do
begin
item:=item.next^;
s:=item.header;
str(item.page,p);
while s[1]=' ' do delete(s,1,1);
i:=3;
while s[i]<>' ' do
begin
if s[i]='.' then
begin
insert(' ',s,1);
inc(i,2);
end;
inc(i);
end;
len:=length(s)+1;
s:=s+p;
while length(s) writeln(s);
end;
end;
3. Взаимное преобразование нумерованных и маркированных списков.
Задача:
Дан текст в файле в виде строк. Текст содержит нумерованные/маркированные списки. Требуется преобразовать все нумерованные (маркированные) списки в маркированные (нумерованные) и записать новый текст в файл. Элемент маркированного списка имеет вид “* ТЕКСТ “, элемент нумерованного списка имеет вид “X) ТЕКСТ “. Элемент списка может занимать более одной строки. Все элементы одного нумерованного/маркированного списка начинаются с новой строки и имеют одинаковый отступ слева.
Разберем процедуру преобразования нумерованного списка в маркированный.
procedure SOLVE;
var p:integer;
begin
uk:=1;
while not eof do
begin
readln(s);
if (uk>1) then SRCHNEXT (p);
SRCHFRST (p);
writeln(s);
end;
end;
Каждая строка проверяется на наличие признака нумерованного списка. Процедура SRCHFRST ищет первый элемент списка и возвращает параметр форматирования этой строки. Процедура SRCHNEXT ищет следующие элементы нумерованного списка с данным параметром форматирования. Обе эти процедуры при положительном результате заменяют номер элемента списка на маркер.


procedure SRCHFRST (var p:integer);
var mkr:string;
pp,i:integer;
begin
str(1,mkr);
mkr:=mkr+')';
pp:=pos(mkr,s);
if pp>1 then
begin
i:=pp-1;
while s[i]=' ' do dec(i);
if i>0 then pp:=0;
end;
if pp <> 0 then
begin
p:=pp;
delete(s,p,Length(mkr));
insert('*',s,p);
uk:=2;
end;
end;
procedure SRCHNEXT (p:integer);
var mkr:string;
pp,i:integer;
begin
str(uk,mkr);
mkr:=mkr+')';
pp:=pos(mkr,s);
if pp>1 then
begin
i:=pp-1;
while s[i]=' ' do dec(i);
if i>0 then pp:=0;
end;
if pp=p then
begin
delete(s,p,Length(mkr));
insert('*',s,p);
inc(uk);
end;
end;

Процедуры обратного преобразования списков подобны выше описанным. Разница лишь в том, что эти процедуры ищут признаки маркированного списка и производят вставку нумерации элементов списка.
4. Перенос слов по слогам.
Задача:
Дан текст в файле в виде строки. Требуется выполнить разбиение всего текста на строки с расстановкой переносов в словах так, чтобы длина каждой строки не превышала W символов. Расстановку переносов в словах следует выполнять по следующему правилу: перенос ставится между сочетаниями букв “гг”, “гс”, “сс” и “зс”, где “г” – гласная буква, “с” – согласная буква, “з” – все остальные символы. Слово должно содержать не менее одной гласной буквы до и после переноса. Слово – последовательность символов, не содержащая пробелов.
procedure SOLVE;
var s,wd:string;
p,pp:integer;
begin
readln(s);
while length(s)>w do
begin
GETWORD (s,wd,p);
if (wd='') then pp:=0
else INSRMV (wd,w-p,pp);
wd:=copy(s,1,p+pp);
if (pp>0) then wd:=wd+'-';
writeln(wd);
delete(s,1,p+pp);
end;
writeln(s);
end;
Задача состоит в том, чтобы вывести строку S в файл в несколько строк по указанной ширине с переносом слов. Процедура GETWORD возвращает слово, которое находится в конце и должно быть перенесено, и позицию, с которой начинается слово. Процедура INSRMV вставляет в слово перенос не далее, чем в указанной позиции. Затем в файл выводится очередная строка.
procedure GETWORD (s:string;var wd:string;var p:integer);
var j:integer;
begin
wd:='';
p:=w;
while s[p]<>' ' do dec(p);
j:=w;
while s[j]<>' ' do inc(j);
if j=w+1 then p:=j
else wd:=copy(s,p+1,j-p-1);
end;
function TIP (c:char):byte;
begin
if c in gl then tip:=0
else if c in sgl then tip:=1
else tip:=2;
end;
procedure INSRMV (wd:string;p:integer;var pp:integer);
var len,af,bf,t,i,pair:integer;
begin
len:=length(wd);
if tip(wd[len])=2 then dec(len);
pp:=0;
while len-p<1 do dec(p);
if (len>=4)and(p>=2) then
begin
bf:=0;
for i:=p downto 1 do
if (wd[i] in gl) then inc(bf);
af:=0;
for i:=p+1 to len do
if (wd[i] in gl) then inc(af);
if (af+bf>1)and(bf>0) then
begin
i:=p-1;
pair:=tip(wd[p]);
repeat
pair:=(pair * 10)mod 100;
t:=tip(wd[i]);
if (pair div 10=0)then
begin
inc(af);
dec(bf);
end;
pair:=pair + t;
if (pair in [0,10,11,12])and(af*bf>0)then pp:=i;
dec(i);
until (i<2)or(pp<>0);
end;
end
else pp:=-p+1;
end;
Для определения типа символа (гласная/согласная буква или прочие символы) используется функция TIP путем проверки принадлежности символа множествам (множество гласных букв / множество согласных букв), которые инициализируются перед вызовом процедуры SOLVE.
5. Замена текста.
Задача:
Дан текст в файле в виде строк, выровненный по ширине/по центру/по левому краю/по правому краю. Требуется выполнить поиск и замену всех вхождений строки S1 строкой S2 в тексте без нарушения выравнивания текста.
При замене текста возможно нарушение форматирования текста. Для сохранения вида выравнивания текста, рассмотрим процедуру определения параметров форматирования текста при условии, что весь текст имеет одинаковые параметры форматирования.
procedure REPLACE;
var i,j:integer;
begin
llen:=length(s1);
i:=1;
while i<=len-llen do
begin
j:=0;
while (j if j=llen then
begin
delete(s,i,llen);
insert(s2,s,i);
len:=len-llen+length(s2);
inc(i,length(s2));
end;
inc(i);
end;
end;
Процедура REPLACE заменяет текст в глобальной переменной S. S1 – текст, который будет заменен; S2 – текст, на который заменяется искомый текст.


procedure SOLVE;
var j,i,n,m:integer;
begin
len:=0;
while reads do begin
replace;
case typ of
0:format_c(w);
1:format_l(w);
2:format_r(w);
3:format_j(w);
end;
out;
end;




replace;
case typ of
0:format_c(len);
1:format_l(len);
2:format_r(len);
3:format_l(len);
end;
out;
end;

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


lc:=0;
rc:=0;
wc:=0;
fillchar(wp,sizeof(wp),0);
fillchar(lp,sizeof(lp),0);
fillchar(rp,sizeof(rp),0);

while (not eof) do
begin

readln(s);
len:=length(s);

fld:=len;
i:=1;
while (i<=wc)and(fld<>wp[i].val) do inc(i);
if i>wc then wc:=i;
wp[i].val:=fld;
inc(wp[i].num);

i:=1;
while (i<=len) and (s[i]=' ') do inc(i);
if i<=len then
begin

fld:=i;
i:=1;
while (i<=lc)and(fld<>lp[i].val) do inc(i);
if i>lc then lc:=i;
lp[i].val:=fld;
inc(lp[i].num);

i:=len;
while (i>0) and (s[i]=' ') do dec(i);
fld:=i;
i:=1;
while (i<=rc)and(fld<>rp[i].val) do inc(i);
if i>rc then rc:=i;
rp[i].val:=fld;
inc(rp[i].num);

end;

end;

Данный фрагмент программы реализует “сбор сведений” о форматировании текста. Переменные lp, rp, wp имеют тип record содержат поля val и num, где val – значение параметра, num – количество объектов с данным значением, lp содержит информацию об отступах слева, rp содержит информацию об отступах справа, wp содержит информацию о ширине строк. Переменные lc, rc и wc определяют количество различных значений для соответствующих параметров. Теперь необходимо провести анализ данных и определить тип форматирования текста после замены.


typ:=0;
max:=0;
imax:=0;
cnt:=0;

if lc<=2 then
begin
typ:=typ+1;
if lc=1 then sh:=0;
else sh:=lp[1].val;
end;
for i:=1 to rc do
begin
inc(cnt,r[i].num);
if max begin
max:=rp[i].val;
imax:=i;
end;
w:=max;
if (rp[ind].num*2>=fld) then typ:=typ+2;


Переменная w содержит значение ширины текста, sh задает отступ красной строки. Значение переменной typ определяет выравнивание текста:

Значение typ 0 1 2 3
Выравнивание По центру По левому краю По правому краю По ширине
6. Статистика документа.
Задача:
Дан текст в файле в виде строк. Требуется подсчитать количество страниц, строк, слов, знаков (без пробелов), знаков (с пробелами) в тексте. Слово – последовательность символов, не содержащая пробелов.
procedure SOLVE;
begin
pge:=0;
wrd:=0;
sim:=0;
sps:=0;
lin:=-1;
while not eof do
begin
readln(s);
sp:=pos(' ',s);
inc(lin);
s:=s+' ';
while (length(s)>0) do
begin
sp:=pos(' ',s);
inc(sps);
if sp>1 then inc(wrd);
inc(sim,sp-1);
delete(s,1,sp);
end;
dec(sps);
end;
pge:=lin div lpp + 1;
inc(lin);
end;
7. Преобразование кодировки текста.
Задача:
Дан текст в файле. Требуется выполнить преобразование текста из кодировки ASCII (DOS) в кодировку ANSI (WINDOWS) и обратно.
Преобразование кодировки текста из DOS в WINDOWS и обратно происходит путем замены кодов символов одной кодировки кодами соответствующих символов другой кодировки.


Преобразование текста из DOS в WINDOWS:

procedure SOLVE;
var i:integer;
s:string;
begin
while not eof do
begin
readln(s);
for i:=1 to length(s) do
if s[i] in [#128..#175] then
s[i]:=chr(ord(s[i])+64)
else
if s[i] in [#224..#239] then
s[i]:=chr(ord(s[i])+16);
writeln(s);
end;
end;

Преобразование текста из WINDOWS в DOS:

procedure SOLVE;
var i:integer;
s:string;
begin
while not eof do
begin
readln(s);
for i:=1 to length(s) do
if s[i] in [#192..#239] then
s[i]:=chr(ord(s[i])-64)
else
if s[i] in [#240..#255] then
s[i]:=chr(ord(s[i])-16);
writeln(s);
end;
end;


СИНЕСТЕТИЧЕСКИЕ СЛОВОСОЧЕТАНИЯ С КОМПОНЕНТАМИ, ОПИСЫВАЮЩИМИ ТЕМПЕРАТУРНЫЕ ОЩУЩЕНИЯ

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

Одной из актуальных проблем современного лингвистического исследования является синестезия, играющая важную, но малоизученную роль в когнитивных процессах индивида [2, 7]. Несмотря на разнообразие подходов и точек зрения, представляется возможным выделить общее в рассуждениях лингвистов: синестезия - явление, основанное на переносе, то есть представляет собой разновидность метафоры [1, 2, 8, 10, 14, 16, 17, 21], особенностью которой является то, что сдвиг в значении слова происходит в сфере чувственного восприятия. Лингвистический анализ синестезии направлен на выявление ее особенностей как языкового феномена, структуры и значения синестетических переносов, роли в системе языка и его функционировании, и в этом направлении проделана немалая работа [1, 10, 17, 21]. Однако можно утверждать, что исследование синестезии до сих пор не вышло за пределы первоначальной стадии, и множество вопросов, связанных с этим сложным явлением, остаются без ответа [2].
Проблема синестетического переноса, решение которой невозможно без рассмотрения таких вопросов, как лексическое значение в структуре многозначного слова и его изменение, представляет для нас наибольший интерес. В современной лингвистической парадигме на первое место выходит отношение «значение - внутренний мир индивида» [18], и потому необходим поиск методик, позволяющих исследовать значение как достояние индивида, переходить от исследования значения как абстрактной сущности к изучению концепта как сущности ментальной прежде всего. По мысли А.А. Залевской, «значение слова должно рассматриваться в совокупности с процессами его функционирования и с проблемой организации не только внутренней структуры значения, но и всего того, что связано с отдельным словом и с лексиконом в целом, с местом последнего в языковом/речевом механизме человека и в системе познания» [11:50].
По мнению М.Я. Сабанадзе [17], далее других в объяснении синестетического переноса как явления, с одной стороны, психофизиологического, а с другой - лингвистического продвинулись представители звукосимволизма, в связи с чем одним из аспектов нашего исследования мы предполагаем сделать фоносемантический анализ.
Явления окружающего мира обладают множеством аспектов, тем не менее, взаимодействие перцептивных систем обеспечивает их целостное восприятие, восприятие мира в единстве [3]. По мнению В.П. Зинченко, язык синестезий - один из образных языков, с помощью которых строится образно-концептуальная модель мира человека. [12]. Таким образом, можно предположить, что человек постоянно сравнивает, оценивает свои ощущения, благодаря чему строится его концептуальная картина мира. Являясь сложным, субъективным, эмоциональным явлением, синестезия, несомненно, связана с рядом важных психических процессов, и потому нам представляется интересным рассмотреть данный феномен, связав его с анализом ментальных репрезентаций.
По мысли П. Гэрденфорса [20], чья теория обладает большой объяснительной силой относительно образования метафор и, в частности, синестетических метафор, основой репрезентаций являются концептуальные пространства. Концепты взаимосвязаны, зависимы друг от друга и структурируются в домены. В теории концепта данного исследователя ключевым понятием становится качественное измерение, главная роль которого - образование домена, необходимого для репрезентации концептов. К числу простейших качественных измерений П. Гэрденфорс относит температуру, вес, яркость, высоту звука и 3 простых пространственных измерения - высоту, ширину и глубину, тесно связанные с нашими рецепторами, воспринимаемые разными органами чувств. Между тем в работе отмечается, что существует ряд качественных измерений абстрактного, нечувственного характера. Измерения образуют систему, оценивающую качества предметов и определяющую отношения сходства и различия между ними. Концептуальные структуры «телесны» (т. е. значения связаны с восприятием и телесным опытом), и должны существовать уровни ментальной репрезентации, где информация, выражаемая языком, совмещается с информацией, получаемой периферийными системами: зрением, слухом, обонянием, кинестезией и т. д. Если бы этих уровней не существовало, было бы невозможно использовать язык для передачи чувственных ощущений.
При отборе экспериментального материала, то есть лексики, описывающей различные ощущения и восприятия (качественные измерения, в терминологии П. Гэрденфорса), а, следовательно, потенциально участвующей в синестетических словосочетаниях, мы руководствовались положениями П. Гэрденфорса относительно качественных измерений, а также классификацией, предложенной Е.А. Елиной в [8]. Данный автор выделяет следующие виды ощущений и восприятий: слуховые (звуковые, музыкальные и языковые), обонятельные, вкусовые, тактильные, температурные, двигательные, гравитационные, пространственные, временные, вибрационные, болевые, степени интенсивности, психических состояний (эмоции и характер). Нами были использованы толковые словари русского языка [6, 9, 15], а также материалы исследований О.И. Кундик [13]. Методом сплошной выборки были отобраны более 400 синестетических словосочетаний русского языка, ярко демонстрирующих различные интермодальные ощущения (например, совмещение вкусовых и обонятельных ощущений, тактильных и вкусовых, болевых и слуховых и т. д.).
Анализ литературы показывает, что в исследованиях синестезии значительное место отводится изучению синестетических словосочетаний, а именно синестетических словосочетаний синтаксической конструкции прилагательное + существительное, что делает возможным утверждать, что именно прилагательное обладает наибольшим потенциалом к образованию синестетических значений [1, 13, 17, 19, 21]. Однако лексико-семантическое поле восприятия в системе языка не ограничивается прилагательными [10], и мы стремились включить в предполагаемый экспериментальный материал синестетические словосочетания с различными типами грамматической связи, к примеру, синтаксические конструкции глагол + существительное.
Как одно из изобразительных средств языка синестезия классифицируется по степени выразительности. Так, ряд изученных нами работ по проблеме синестезии посвящен так называемой узуальной, традиционной синестезии [1, 13, 21], объектом интереса других исследователей является синестезия специальных подъязыков (музыковедения, искусствоведения) [5, 8, 17], третьи изучают авторскую синестезию, присущую индивидуальному стилю писателей [4, 10]. По нашему мнению, в данном случае можно говорить о противопоставлении так называемых «мертвых» и «живых» метафор, представляющем еще один аспект изучения специфики значения. Как отмечает Е.Ю. Мягкова в [14], «живые», новые метафоры отражают изменение в отношении людей к тому, о чем они думают и говорят, в то время как «мертвые», старые метафоры бессознательно встроены в язык давно установившимися привычками, и потому являются самыми важными с когнитивной точки зрения. Одной из целей нашего исследования является проверка того, каким образом отобранные, по нашему предположению, узуальные синестезийные словосочетания функционируют в индивидуальном сознании и в какой степени они могут быть отнесены к узуальным. Для исследования этого аспекта явления мы предполагаем использовать метод субъективных дефиниций.
Как отмечает А.В. Житков в [10], специалисты значительно большее внимание отводят лексике зрительного и слухового восприятия, чем лексике со значением осязания, вкуса, запаха. Нам представилось интересным рассмотреть синестетические словосочетания с компонентами, описывающими температурные ощущения, представляющие, согласно теории П. Гэрденфорса, одно из простейших качественных измерений. Температура – физическое свойство всех предметов окружающего нас мира, но что есть температурные качества, когда их оценивает, сравнивает переживающий, чувствующий человек?
По мысли П. Гэрденфорса, универсального способа репрезентации измерений не существует: каждая культура и отдельно взятый индивид обладает собственной системой измерений. Анализ пятидесяти отобранных нами словосочетаний русского языка позволяет представить концептуальное измерение температуры в виде восьмиугольника, гранями которого будут являться зной, жар, «горячесть», теплота, прохлада, холод, лед и мороз.
На данном этапе исследования нам представляется возможным сгруппировать экспериментальный материал по принципу совмещения ощущений и восприятий семи различных модальностей с температурными ощущениями.

слух вкус зрение время эмоции и психические состояния интенсивность боль
3 6 12 4 21 3 1

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

зрение эмоции и психические состояния интенсивность
Знойный взгляд Знойная страсть Палящий зной
1 1 1

Жар

зрение эмоции и психические состояния
Жаркий цвет Жарко спорить
3 2

«Горячесть»

вкус время эмоции и психические состояния
Горячие напитки Горячая пора Горячо любить
3 4 7

Теплота

зрение эмоции и психические состояния слух
Теплые тона Теплота чувств Теплый голос
2 4 1

Прохлада

эмоции и психические состояния
С прохладцей
2

Холод

вкус зрение интенсивность эмоции и психические состояния боль
Мята холодит Холод в глазах Резкий холод Холодный нрав Колючий холод
2 5 1 3 1

Лед

слух вкус эмоции и психические состояния зрение
Лед в голосе Ледяная вода Леденить сердце Ледяной взгляд
2 1 2 1

Мороз

интенсивность
Крепкий мороз
1

Остается нерешенным вопрос о том, каким образом происходит совмещение температурных измерений с другими, благодаря чему становятся возможными «теплые оттенки», «горячие чувства», «ледяной тон» и т. п. В [19] Р. Браун говорит о том, что связь между температурой, манерами, выражением лица и голосом может устанавливаться благодаря некой общей ассоциации. Проверить существование подобных ассоциаций мы планируем, используя ассоциативный эксперимент.
Исследователями признается, что один из компонентов синестетического словосочетания – синестезирующее, а второй – синестезируемое [17]. С целью анализа того, что в отобранных нами словосочетаниях будет являться в индивидуальном сознании носителя языка синестезирующим, а что синестезируемым, мы планируем использовать метод мысленных образов.
Метафора упоминается во всех работах, связанных с изучением эмотивности лексики [14]. Возможно, одним из факторов, позволяющих говорить о «ледяной воде» и «ледяном спокойствии», будет общность эмоциональной оценки, эмоциональная оценка будет являться медиатором синестетического переноса. Для проверки этой гипотезы мы планируем использовать метод субъективного шкалирования.
Многие аспекты синестезии, касающиеся как самого объекта исследования, так и его признаков, механизмов и закономерностей функционирования, еще не нашли своего окончательного разрешения. Выбор целого комплекса методик исследования обусловлен сложностью интересующего нас феномена. Но именно его сложность и неоднозначность позволяют говорить о перспективности более углубленного исследования явления в свете междисциплинарного подхода к изучению языка как достояния индивида.

ОФИСНОЕ ПРОГРАММИРОВАНИЕ И ВОЗМОЖНОСТИ ЕГО ИСПОЛЬЗОВАНИЯ ДЛЯ ЭКОНОМИЧЕСКИХ СПЕЦИАЛЬНОСТЕЙ

Офисное программирование — это достаточно новое и перспективное направление в современном программировании и спектр его применения очень широк — от настройки отдельных документов до создания серьезных решений масштаба предприятия. Офисное программирование – дисциплина очень молодая, а значит как в любом новом направлении, пока еще не существует единого понимания предмета. Часто его отождествляют с программированием на VBA (Visual Basic for Application), теряя при этом основную цель технологии: создание системы документов. Конечно, пользователи, работающие в среде Office, могут создавать документы и работать с ними без всякого программирования благодаря тем стандартным возможностям, которые обеспечивает эта среда. Но рано или поздно наступает момент, когда стандартных возможностей среды не хватает для удовлетворения растущих потребностей пользователя и решения специфических задач, возникающих в той проблемной области, в которой он работает. С этого момента и начинается Офисное программирование.

Особенностью Офисного программирования является то, что документы создаются в некоторой достаточно мощной среде, классическим примером которой является среда Office, а язык программирования встроен в среду. И, опять-таки, примером может служить встраивание языка Visual Basic в среду Office, после чего он и становится языком VBA (Visual Basic for Application).

Следует отметить, что среда, помимо широкого спектра возможностей, привлекающих пользователя для работы в ней, должна обладать следующими качествами:
• быть построена на принципах объектного программирования и, по существу, представлять совокупность объектов, определяющих тот мир, в котором работает пользователь;
• иметь встроенный язык программирования, позволяющий работать с объектами среды, а значит с ее документами, без каких-либо чрезвычайных усилий. Принципиально важно, чтобы встроенный язык был обычным языком программирования, применяемым программистами и вне среды. Корпорация Microsoft сделала революционный шаг — она не стала создавать в среде Office 2000 собственный язык программирования, как это делалось ранее в большинстве известных сред (Oracle, FoxPro, AutoCad), а встроила в среду язык, уже известный программистам. Важно и то, что VBA является отчуждаемым от среды и может быть встроен в различные среды. Так что язык VBA в этом отношении становится схож с естественным языком, встраиваемым во все профессиональные области знания.

Офисное программирование имеет свою специфику и отличается от программирования в программной среде таких языков, как Visual Basic, Visual С ++ или Delphi, ориентированных на создание программных проектов различного типа: так, мощная и разнообразная среда приложений Office ориентирована в первую очередь на пользователей, а не на программистов. И программист обычно начинает работать с документами не на пустом месте, а с их заготовками, созданными пользователями. Кроме того, меняются цели, приоритеты, сам взгляд на деятельность программиста, работающего в среде Office. Ранее программист создавал приложение, понимаемое как программа, программный проект. Теперь программист является одним из участников создания системы документов. Документ, а не программа, становится целью разработки. Программный проект — это лишь часть документа. В Office программный проект неразрывно связан с документом, хранится как часть документа и не может существовать независимо от него.

Необходимо отметить, что возможность настроить стандартный документ Office, сделать его «по заказу», снабдить новыми функциями, учитывающими специфику решаемой задачи — это одна из важнейших особенностей Офисного программирования. Настройка может быть очень простой и состоять в том, что стандартный документ получает дополнительные полезные свойства, расширяющие его возможности или изменяющие внешний вид. Обычно так начинают свой путь в Офисное программирование продвинутые пользователи Office. Но настройка документа может быть и очень сложной, а документ, сделанный по заказу, может ничем не напоминать обычный стандартный документ Office.
Изучение Офисного программирования может быть успешно применено при изучении курса «Разработка и применение пакетов прикладных программ», входящих в программу высшего образования студентов некоторых экономических специальностей. Специфика данных специальностей такова, что, обладая базовыми знаниями по курсам «Информатика» и «Программное обеспечение ЭВМ» и неплохо владея программным пакетом Microsoft Office, студентам не хватает элементарных знаний основ программирования. Поэтому одним из вариантов решения данной проблемы может быть знакомство с основными принципами и приемами Офисного программирования, которое позволяет соблюсти баланс интересов между “хорошо знакомой” средой создания документов и “незнакомым” программированием.

Естественно, что современный рынок программных средств и продуктов предлагает широкий выбор специализированных финансовых пакетов, таких как 1С Бухгалтерия - для проведения бухгалтерского учета, Microsoft Project - для организации календарного планирования и управления и т.д. Однако наиболее приемлемым и эффективным для использования в учебном процессе является интегрированный пакет Microsoft Office. К преимуществам данного программного продукта можно отнести его доступность: на любой персональный компьютер в первую очередь устанавливается пакет Microsoft Office. Второе преимущество заключается в том, что при использовании Microsoft Office для решения финансовых, организационных, управленческих задач пользователю самому приходится вводить расчетные формулы, что делает «прозрачными» алгоритмы обработки данных. И это, несомненно, очень важно в процессе обучения, в то время как перечисленные выше специализированные программные продукты обеспечивают ввод данных и вывод результата, скрывая от пользователя сам процесс обработки информации.
Особенностью Офисного программирования является возможность создать программный проект или, по крайней мере, его отдельные компоненты без программирования. Эта возможность основана на использовании такого характерного для Офисного программирования инструмента, как MacroRecorder. MacroRecorder — это транслятор действий, записывающий действия пользователя при работе вручную и транслирующий их в программу на языке VBA. В итоге, пользователь получает документы, обладающие новыми функциями и способные решать задачи, характерные для проблемной области пользователя. Далее пользователь сам, не будучи программистом, способен создавать простые программируемые документы Office, постепенно совершенствуясь в этой деятельности. Кроме того, идеи визуального и событийно-управляемого программирования получают в Офисном программировании свое дальнейшее развитие, а значит, пользователь в полной мере берет на себя управление своим документом.

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

Метод волны: от простого к сложному

В статье рассматривается один из базовых алгоритмов решения задач, связанных с нахождением пути, содержащем минимальное количество ходов. Суть этого алгоритма заключается в следующем. Имеется двумерный массив, в нем задана начальная и конечная клетки, а также в нем есть некоторые препятствия – клетки, ходить по которым нельзя. Из начальной точки запускаем волну: все клетки, в которые можно попасть из начальной за 1 шаг, получают значение равное 1. Затем перебираем все точки, в которые можно попасть за 1 шаг, и соседним с ними клетками присваиваем значение 2. Процесс продолжается до тех пор пока не дойдем до конечной клетки (нашли путь) или пока можем совершить очередной ход, если сходить не удается, то пути из начальной в конечную клетку не существует. Такой алгоритм получил название метода волны или поиска в ширину.

Пример метода волны приведен на Рис.1. Черными клетками обозначены препятствия. Волну запускаем из верхней левой клетки, конечная – нижняя правая. Ходить можно либо по горизонтали, либо по вертикали, по диагонали ходы запрещены. Получаем, что в конечную клетку можно попасть за 8 ходов.

Существуют различные задачи, для решения которых подходит данный алгоритм.
Задача о лабиринте. Дано: двумерный массив с препятствиями, начальная и конечная клетки. Найти путь с минимальным количеством ходов. Идея решения уже рассмотрена выше. Данный метод часто применяется в компьютерных играх, как правило, в стратегиях, т.к. на каждом шаге необходимо заново запускать волну, т.е. находить снова лучший путь после изменения положения некоторых объектов на поле, а это требует значительных временных затрат.

Для увеличения быстродействия метода волны можно применить некоторое его улучшение – двойной поиск в ширину. Его отличие в том, что запускается сразу 2 волны, одна из начальной клетки, другая из конечной. Серыми клетками обозначены начальная и конечная клетки. Слева (Рис.2а) пример с запусканием одной волны, справа (Рис.2б) – запускаются сразу две волны. Теоретически вторая волна может дать улучшение в 3-4 раза, но практике, как всегда все оказывается «немного» не так.

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

С помощью метода волны эту задачу можно решить следующим образом. Ищем в массиве «пустую» клетку, запускаем из нее волну, и считаем сколько всего ходов сделали, т.е. сколько клеток заполнили числами, это и будет площадью комнаты. Повторяем процесс, пока есть свободные клетки. Количество комнат равно количеству запусков волны.

Еще одна модификация задачи о лабиринте – задача о пути с минимальным количеством поворотов. Дано: двумерный массив с препятствиями, начальная и конечная клетки. Из начальной клетки можно двигаться в любом направлении по горизонтали или вертикали, но затем направление можно поменять только «столкнувшись» с препятствием или границей лабиринта. Необходимо найти путь с минимальным количеством поворотов.

Эту задачу удобно решать методом волны. Единственной модификацией алгоритма здесь будет «необычный» ход. «Необычный» ход представляет собой следующее: из текущей клетки во всех направлениях ищем препятствие или границу лабиринта, как только нашли, определяем стоим на непосещенной клетке или на ней мы уже были, если клетка свободна, то заносим туда соответствующее значение – номер шага. Рис.4 демонстрирует прохождение лабиринта с применением такого «необычного» хода.

Задача о «блохах». На шахматной доске размером NxM имеется Q блох и имеется кормушка в клетке с координатами (x,y) – Рис.5а (Х-кормушка, Б-блоха). По полю блохи передвигаются ходом шахматного коня. Необходимо определить для каждой блохи, за какое минимальное количество прыжков она сможет добраться до кормушки, или определить, что этого сделать невозможно. (1
Можно брать координаты каждой блохи как начальную клетку, а координаты кормушки - как конечную, и запускать волну Q раз. Но при Q=10000, данный алгоритм не будет проходить по времени. Здесь целесообразно запустить волну из кормушки, если на очередном ходе попадаем в клетку с блохой, то мы нашли длину ее пути до кормушки. Результат виден на Рис.5б: черные клетки – первоначальные места расположения блох, клетка, в которой записан 0, представляет собой кормушку.

Можно также модифицировать метод волны на трехмерное пространство (Рис.6), для этого потребуется трехмерный массив с лабиринтом, и на каждом шаге просматривать не 4 или 8, 6 и 26, соответственно, соседних клеток. Можно модифицировать данный алгоритм для тел произвольной формы. Для этого естественно надо будет изменить логику установления факта встречи с препятствием, и при необходимости предусмотреть возможность поворота объекта для прохождения в узких местах лабиринта.

Метод волны используется также и в алгоритмах на графах – поиск в ширину, для нахождения кратчайших путей между исходной вершиной и конечной (или всеми остальными). Дано: граф (Рис.7а). Необходимо найти путь от первой вершины до девятой, содержащий минимальное количество ребер. На Рис.7б показана очередность просмотра вершин графа.

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

Данный метод также применяется для векторизации изображений. Допустим, у нас имеется растровое изображение (для каждой точки задан определенный цвет), мы хотим преобразовать его в векторную форму (изображение состоит из векторов, т.е. известно положение двух точек, между которыми строится прямая). Для простоты будем полагать, что фон изображения белый, а сам рисунок изображен только черным цветом.
Рис.9.Слева (Рис.9) пример растрового изображения (черным цветом) и построенного векторного (серым цветом). Векторизация заключается в построении графа, т.е. нам необходимо найти в растровом изображении «контрольные точки» (вершины в графе) и соединить их отрезками (ребра в графе). Данный метод основан на том, что мы предполагаем определенную ширину линий, и основываясь на этом пытаемся выделить ее в растровом изображении. Необходимо также учитывать, «линии» в растровом изображении могут пересекаться и соединяться (как показано на рис.9). Для определения этих линий и мест их пересечения и используется метод волны. Запускаем волну из какого-либо места растрового изображения, через 2*N шагов (N – ширина «линии» в пикселях) волна принимает устойчивых характер, на каждом шаге нам необходимо отслеживать «ширину» волны, т.е. количество точек образующих текущую генерацию волны. В местах пересечения «линий» растрового изображения, наша волна будет разделяться на две дочерние волны. Следовательно, перед разделением волны, ее «ширина будет увеличиваться», а затем произойдет разделение волны. Т.о. можно определить точку соединения или пересечения «линий» в растровом изображении. После построения такого каркаса, возможна дальнейшая оптимизация, например, уточнение места положения точек пересечения, удаление лишних точек и т.д., но это не входит в рассмотрение данной статьи. Данный метод может применяться для создания программ распознавания текста, конструкторской документации, САПР.

Применение метода волны для решения задач на графах или задач о лабиринте и близких к ним подробно описаны в работах [1, 2]. Применение волнового алгоритма и его модификации для компьютерных игр рассмотрены в статьях [3].

КОМПЬЮТЕРНАЯ МАТЕМАТИКА

Понятие «компьютерная математика» было введено Д.Куком и Г.Бейзом [1]. Конечно, как и всякий новый термин, вводимый в структуру науки, требуется уточнение этого понятия путем очерчивания сферы, которую он охватывает. Авторы наполняют его различными разделами математики: множества, отношения, функции, основные понятия арифметики, алгебраические структуры, матрицы, автоматы, компьютерная геометрия.
В 2001 году в журнале «Информатика и образование» N 2 была опубликована статья [2], некоторые из предложений которой могут послужить темой для обсуждения. Авторы статьи также используют термин «компьютерная математика». Они даже предлагают ввести вузовскую дисциплину с таким названием, и она по их мнению должна состоять из разделов:
1) основания конструктивной математики, состоящие из элементов семиотики, а также математической логики и теории алгоритмов;
2) конструктивная дискретная математика;
3) численные методы (включая компьютерную алгебру?)
4) компьютерная геометрия.
Первое, что вызывает несогласие – это попытка обособить «компьютерную математику» от общего и единого материнского дерева математики. Второе – вольное обращение с термином «конструктивная математика», который в системе математических наук имеет устоявшийся и определенный смысл, отличный от смысла, придаваемого ему авторами. Третье – в состав предлагаемого курса так или иначе в качестве разделов предлагается ввести большинство предметов существующего учебного цикла. Мы считаем, что принятый сейчас учебный план более полон и содержателен, и кроме того, структурирован по семестрам и по количеству отводящихся на предметы часов.
Осознание глубинной связи информатики и математики привело к тому, что в систему учебных дисциплин, входящих в учебный план подготовки учителя информатики, в 2000 году были включены предметы теоретической информатики и математические предметы, тесно с ними связанные. Принятый в 2000 году государственный образовательный стандарт предусматривает следующие предметы профессиональной подготовки учителя информатики (в порядке изучения по семестрам):
– математическая логика (4-й семестр);
– дискретная математика (4-й семестр);
– элементы абстрактной и компьютерной алгебры (5-й семестр);
– уравнения математической физики (5-й семестр);
– теория алгоритмов 6-й семестр);
– численные методы (6-й, 7-й семестры);
– теоретические основы информатики (6-й семестр);
– исследование операций (8-й семестр);
– компьютерное моделирование;
– основы искусственного интеллекта (10-й семестр).
Перечень теоретических дисциплин говорит о необходимости основательной предварительной и текущей подготовки и корреляции этих дисциплин между собой и теоретической и прикладной математикой. Ранее предпринимаемые попытки готовить специалистов по информатике без серьезных математических и теоретических (по информатике) знаний не принес успеха. Названный подход возможен лишь в отношении информационных технологий (с известными оговорками), к которым, конечно, не сводится информатика. Здесь уместно упомянуть, что в 2002 году при утверждении организационных структур Академии Наук России было выделено отделение математики в составе двух секций: 1) теоретическая математика; 2) прикладная математика и информатика. Это еще раз подтверждает единство математики и теоретической информатики – два ствола одного дерева.
С большим внутренним сопротивлением автор настоящей статьи согласился на условное использование термина «компьютерная математика» только для обозначения совокупности перечисленных предметов учебного плана, с включением в нее основ теоретической математики.
С одной стороны этимологически ясна связь этой группы наук с принятыми в информатике разделами «компьютерная геометрия» и «компьютерная алгебра». С другой – дословный перевод термина «computer science» означает вычислительная наука, что можно, не переводя слово «computer», трактовать, как компьютерная наука. Тогда «компьютерная математика» – это математические разделы вычислительной науки («computer science»), а вместе с этим – информатики (информатика – синоним англоязычного «computer science»). Не вдаваясь в дальнейшее обсуждение удачности или неудачности термина «компьютерная математика», воспользуемся им, и будем этим условным термином называть разделы информатики, которые тесно связаны с математическими науками (теоретическая информатика) и собственно математическими науками, идеи которых постоянно питают и теоретически обосновывают собственно информатику.
Рассматривая любой из перечисленных предметов, в каждом конкретном случае можно указать сферу использования соответствующих знаний либо для решения конкретных задач, либо в качестве обоснования некоторых теоретических положений информатики. Встает вопрос о том, что является самым важным, объединяющим все предметы моментом (кроме всеобщности отношения к информатике). На наш взгляд составители государственного стандарта по информатике впервые последовательно проводят идею универсальности основного методологического принципа информатики: математическое, информационное и компьютерное моделирование изучаемых систем и явлений. Таким образом, выделен инвариант информатики как науки.
Информатика является одной из основополагающих наук естественнонаучного цикла, наряду с философией, математикой и физикой. В этом качестве ее способы исследования различных явлений (систем и т.п.), методы решения задач, возникающих в самых разных сферах интеллектуальной деятельности современного человека, обладают единством подхода – методологией.
Воспроизведем в виде тезисов (в нашем изложении) некоторые мысли академика А.П.Ершова, высказанные им на 6-м Международном конгрессе по математическому образованию в Будапеште в 1988 году, которые полностью могут быть отнесены к предмету обсуждения этой статьи.
1. Резкое расширение математической практики. Повсеместное применение компьютеров, строительство информационной модели мира раздвинули объем и многообразие математической практики в грандиозных масштабах. Построение знаковых систем, схематизация конкретных объектов путем выделения их свойств, атрибутов и отношений, построение моделей, дедукция, редукция и рекурсивное мышление, выделение и поддержание уровней абстракции, прогнозирование поведения, анализ законов, установлений и правил, наконец, конструирование огромного количества алгоритмов и их оценка – все это оружие современного интеллекта, каркас информационной культуры.
2. Изменение номенклатуры математических знаний. Компьютер воспроизводит человеческое поведение. Через программирование и построение информационных моделей в содержательную часть математики входят абстракции человеческой деятельности, свойства искусственных и живых систем. Это же усиливает роль и место дискретной математики. Выявляется роль разделов дискретного анализа параллельных классическому анализу. На первый план выходит изучение связи между дискретным и непрерывным, например, в синергетике и теории катастроф. Появляются новые приемы математической деятельности – доказательные вычисления. Еще один пример неортодоксальных математических доказательств – решение задачи о четырех красках.
3. Системная роль математической теории. Понятие теории родилось в недрах математики. С другой стороны, в информатике имеется важнейшее понятие обстановки. Обстановка – это воплощенная в компьютере замкнутая модель мира, в котором предстоит действовать программируемому исполнителю. Поскольку все исходы должны быть предусмотрены, необходимо иметь полное знание обстановки и сознавать пределы этого знания в реальном мире. Все это знание должно предшествовать конкретному моделированию. Выработка этого знания составляет сущность системного анализа. Системный анализ – новый массовый вид человеческой практики.
4. Вычислительный эксперимент с математической и компьютерной моделью. Его роль в инженерной практике общеизвестна. Следует подчеркнуть, что вычислительный эксперимент все в большей степени становится источником чисто теоретических открытий. Можно отметить практичность этого подхода как нового метода в познавательной деятельности в учебной педагогической практике.
От себя отметим, что построение когнитивных методов дидактики следует начинать с построения той или иной модели обучения.
5. Визуализация абстракций. Визуальное восприятие человека является поистине магическим кристаллом, позволяющим делать открытия. Поиски того, как сделать мысль наглядной, всегда мучили ученых и педагогов. Интеллектуальная графика имеет многовековую историю. За последнее время появилась масса публикаций – образы, порожденные абстрактным знанием, оживленным союзом ученого программиста и компьютера.
Отметим, что академик А.Н. Колмогоров подчеркивал различие между формальной символической системой и содержательным (математическим) знанием. Это отлично чувствует любой математик или информатик, решая творческую задачу. Компьютер, действительно, по строго формализованным правилам выполняет действия над конструктивной информацией (словами некоторого алфавита, или наборами символов). Законы мышления человека не таковы.
6. Динамизация математических объектов. Математика – наука об инвариантах. Познать природу инварианта можно, только осознав диалектику постоянства и изменчивости параметров этого инварианта. Увидеть в логической константе все проявления реальной жизни, описанной законом, – это значит понять закон и научиться его применять. Компьютер со своими средствами визуализации и вычислений позволяет исследователю извлечь из статической упаковки математических отношений всевозможные траектории развития динамического процесса во времени и пространстве, обогащая тем самым его опыт, интуицию и способность к предсказыванию.
7. Становление структуры из хаоса. Среди возможностей, предоставляемых вычислительным экспериментом и средствами визуализации, заслуживают особого упоминания эксперименты по наблюдению становления регулярных структур из исходного беспорядка. В их простейшем проявлении – это разнообразные конструкции, возникающие при итеративном применении некоторых нелинейных операторов к случайным исходным данным или попутным параметрам. Здесь формируется совершенно новый и исключительно мощный канал для распространения знаний на огромный класс природных явлений: движение материков, формирование береговой линии, горные ландшафты, рисунки полярных сияний, формообразование у растений, расцветка животных, развитие конфликтов и возникновение кризисов. Материал, поставляемый синергетикой и математикой нелинейного, позволяет сделать важный общенаучный вывод о принципиальной важности вычислительного эксперимента как познавательного инструмента: если источником всего нового в природе является нелинейность, то умозрительные представления экстраполяционного типа линейны по своей природе и поэтому ограничены в своей познавательной силе, как, например, любой вывод в существующей аксиоматике. Поэтому для добычи поистине нового знания необходим нелинейный синергетический процесс либо в мозгу человека, либо в памяти компьютера.
Отметим, процесс получения новых знаний при обучении также нелинеен. Осознание этого обстоятельства наконец-то начинает проникать в современные теории когнитивной психологии и дидактики.
8. Союз информатики, математики и лингвистики. Можно дать одно ограниченное определение информатики: информатика – это наука о правилах целеустремленной деятельности. Это определение становится просто справедливым, если мы признаем компьютер в соответствии с тезисом Черча и тьюринговым понятием универсальной машины (с оракулом) всеобъемлющей моделью целеустремленной деятельности. Если мы согласимся с этим, то информатика по праву входит в союз с математикой и лингвистикой, закладывая уже в школьное образование опорный треугольник развития главных проявлений человеческого интеллекта: способность к обучению, способность к рассуждению и способность к действию. Дисциплина действия так же нужна, как и дисциплина речи. Понимая, как компьютер решает задачу, он сохраняет это понимание в себе. Наблюдая катастрофы в искусственных мирах, он многократнее и безопаснее для себя вырабатывает опыт сопоставления решений и их последствий.
Направления развития информатики обозначены А.П. Ершовым очень четко и впечатляюще. Каким образом воплотить это в сфере образования, в конкретном вузе?
На наш взгляд «компьютерной математике», как она понимается нами, не хватает детальной проработки логических и функциональных связей между составляющими ее предметами и разделами. Следуя принятой парадигме обучения предметам цикла «компьютерная математика», с неизбежностью приходится (или придется) решать отмеченные проблемы. В связи с этим кафедра прикладной математики и ИМОИ факультета информатики выступила с инициативой по созданию экспериментальной методической площадки «компьютерная математика». Предполагается, что в процессе работы площадки будут выделены ключевые понятия и основные положения каждого из входящих в комплекс предметов, установление логических связей между ними и последовательность освоения соответствующих понятий.
Очень важным представляется выделение понятий, теорем и методов их доказательств в курсе основ теоретической математики. В настоящее время заметно некоторое несогласование разделов и тем основ теоретической математики потребностям предметов теоретической математики. В качестве одного из первых шагов автор предлагает введение на 1-м курсе пропедевтического предмета – введение в математику, в котором бы рассматривались важные понятия математики, нужные в самом начале обучения в университете и не изучаемые в средней школе. К ним стоит отнести: элементы теории множеств, отношения, отображения, элементы математической логики, элементарные логические средства рассуждений и доказательств в математике, необходимые и достаточные условия, метод полной математической индукции, метод доказательства от противного, дедукция, конструктивные доказательства.
Очень важным представляется создание некоего мостика, способного помочь студентам преодолеть известные эмоциональные трудности в освоении абстрактных разделов теоретической математики. В этом плане представляется интересной публикация перевода с английского языка монографии Р.Грэхема, Д.Кнута и О.Паташника «Конкретная математика». В предисловии к монографии Владимир Игоревич Арнольд написал. Созданная Ньютоном и Эйлером, Бернулли и Гауссом, Лейбницем и Дирихле математика оказывается вечно юной и вновь возрождается следующими поколениями математиков. Польза этого труда в том, что в ней рассматриваются конкретные примеры как дискретных, так и непрерывных систем. Противопоставление «конкретной математики» и «абстрактной математики», погоня за обобщениями оказалась столь захватывающей, что целое поколение математиков потеряло способность находить прелести в частностях, в том числе получать удовольствие от решения численных задач или оценить по достоинству роль математических методов. Абстрактная математика стала вырождаться и терять связь с действительностью. Конкретная математика – смесь континуальной и дискретной математики. Исчисление сумм, рекуррентные соотношения, элементарная теория чисел, дискретная теория вероятностей представляют большой интерес с технической стороны.
Вопросы, задачи и упражнения, рассматриваемые в «Конкретной математике», не относятся, строго говоря, к «компьютерной математике». Это разделы классической математики того периода, когда не было четкого разделения теоретической и прикладной математики. Несмотря на то, что и сами задачи, и приемы их решения достаточно серьезны, доведение решения до числа или формулы снимают у читателя чувство недоступности рассматриваемого материала. Можно организовать проведение специального курса на базе материала этой монографии.
В заключение отметим, что ведущие преподаватели факультета информатики достаточно отчетливо представляют себе направление и содержание работы, которую необходимо осуществить в рамках экспериментальной площадки университета «Компьютерная математика». Имеется определенный задел в виде разработанных учебных программ по всем дисциплинам цикла, а также большое количество публикаций, связанных с намеченными работами.

Увеличение скорости сходимости

Большинство задач, решаемых вычислительной математикой, имеют одну из двух форм:
Ax = b (b Î Y) (1)
y = Ab (b Î X) , (2)
где A – некоторый абстрактный оператор, действующий из полного нормированного пространства X в пространство Y ( A: X ® Y).
Задачам первого типа соответствуют (в зависимости от оператора A) уравнения различного рода.
Примеры: 1) Если A – вещественная функция вещественной переменной (A: R ® R), то речь идет о решении обычного уравнения (линейного, квадратичного, нелинейного); 2) если A – дифференциальный оператор, то решается дифференциальное уравнение (обыкновенное или с частными производными); 3) если A – матрица, то решается система линейных алгебраических уравнений.
Задачи второго типа соответствуют задачам, аналогичным вычислению значения функции (значение оператора на элементе из пространства X). Например, если A – определенный интеграл, то речь идет о нахождении значения определенного интеграла от некоторой интегрируемой функции (пространство X– множество интегрируемых на заданном интервале функций).
Основным методом решения задач (1), (2) является дискретизация, то есть замена (аппроксимация) элементов исходных пространств X и Y конечными векторами из эвклидовых пространств En и Em, а оператор A заменяется (аппроксимируется) матрицей Am,n размерности m*n. Таким образом, задачи (1), (2) аппроксимируются задачами (1/) и (2/):
Am,n xn = bm (xn Î En, bm Î Em) (1/)
ym = Am,n bn (ym Î Em, bn Î En) (2/)
Как правило, при аппроксимации задач (1), (2) задачами (1/), (2/) качество аппроксимации (ее точность) характеризуется некоторым числовым параметром h, связанным с n и m. Поэтому можно обозначить Am,n = A(h). Для корректно поставленных задач (и исходных и аппроксимирующих) всегда справедливо утверждение о том, что если при h ® 0 оператор A(h) в некотором смысле сходится к оператору A (по некоторой норме), то и приближенные решения xn и ym сходятся к точным решениям (h ® 0 – эквивалентно n ® ¥ и m ® ¥). Иными словами, при приближенном решении задач (1), (2) мы всегда имеем дело с процессом предельного перехода (точное решение – это предел последовательности решений аппроксимационных задач). Тогда можно говорить о скорости сходимости этого процесса и об его ускорении.
Говорят, что процесс предельного перехода имеет скорость сходимости a, если можно установить справедливость неравенства
ôx* – xnô = C∙ha + O(ha+1) или ôy* – ymô = C∙ha + O(ha+1) ,
где x*, y* – решения соответствующих точных задач, xn, ym – решения аппроксимационных задач, C – константа (не зависит от h), ô∙ô – норма в соответствующем пространстве, a > 0, h < 1.
В нашем контексте под ускорением сходимости будем понимать нахождение линейных комбинаций
(h) = a1x(h1) + a2x(h2) + … + apx(hp),
(h) = a1y(h1) + a2y(h2) + … + apy (hp),
причем hi £ h < 1 при i = 1, …p. Пусть каждое приближенное решение x(hi) и y(hi) имеют скорость сходимости a, то есть
ôx* – x(hi)ô= C∙hia + O(hia+1), ôy* – y(hi)ô= C∙hia + O(hia+1).
Если построенные решения будет удовлетворять равенствам
ôx* – (h)ô = C1∙hb + O(hb+1), ôy* – (h)ô= C∙hb + O(hb+1) при b > a,
то это решение дает лучшую скорость сходимости по сравнению с решениями x(hi), из которых оно составлено (произошло улучшение сходимости).
Рассмотрим три примера ускорения сходимости в различных методах приближенных вычислений.
1. Метод Эйлера численного решения задачи Коши для обыкновенного дифференциального уравнения первого порядка.
Пусть требуется найти решение задачи Коши
x/ (t) = f(t, x), t Î [0; T], при x(0) = g. (3)
Метод Эйлера заключается в следующем. Отрезок [0; T] разбивается равноотстоящими точками (узлами) tk = k∙h, k = 0, 1, …, n, h = T/n. Это –дискретизация промежутка [0; T], на котором ищется решение, – этот отрезок заменили дискретным множеством точек {tk}. Затем в каждой узловой точке производная x/(tk) заменяется (аппроксимируется) разностным отношением
x/(tk) » .
Тогда исходная задача (3) аппроксимируется дискретной задачей
xk+1 = xk + h∙f(tk, xk), x0 = g, при k = 0, 1, …, n–1. (3/)
Алгоритмически получилась очень простая схема: по известному значению x0 = g вычисляется x1 и т.д. Схема нахождения приближенного решения задачи Коши в узловых точках относится к рекуррентным формулам. В (3/) мы воспользовались обозначением xk » x*(tk) (xk – приближенное решение, x*(tk) – точное решение в узловой точке).
В качестве пространства X в задаче (3) можно взять пространство непрерывно дифференцируемых на [0; T] функций, Y – множество непрерывных на [0; T] функций, A – дифференциальный оператор (Ax ≡ x/(t)). В качестве нормы и в пространстве X, и в пространстве Y возьмем
ôxô = maxïx(t)ï, при t Î [0; T].
Пространство Xn – множество векторов x = (x0, x1, …, xn), а пространство Ym – множество векторов y = (y0, y1, …, yn–1). В качестве нормы в этих пространствах возьмем первую норму вектора, согласованную с нормами в пространствах X и Y: ôxôI = maxïxkï, по всем k = 1, …, n. Вид дискретного оператора Am,n определяется тождеством Am,n x ≡ , при k = 0, 1, …, n–1.
Выясним, какова погрешность метода Эйлера на одном шаге. Будем считать, что на k-м шаге известно точное решение, то есть xk = x*(tk). Тогда абсолютная погрешность e(tk+1) на k + 1 шаге определяется разностью
e(tk+1) = x*(tk+1) – xk+1.
В предположении существования у точного решения x*(t) непрерывной производной третьего порядка можно x*(tk+1) представить в виде отрезка ряда Тейлора с остаточным членом
x*(tk+1) = xk + h∙x*/(tk) + ∙ + ∙ , q Î [tk; tk+1].
Отсюда x*(tk+1) = xk + h∙f(tk, xk) + ∙ + ∙ =
= xk+1 + ∙ + ∙ .
Обозначим ï ï = C. Тогда имеем
ïe(tk+1)ï = ïx*(tk+1) – xk+1ï = С∙h2 + O(h3).
Показали, что скорость сходимости метода Эйлера на одном шаге имеет порядок 2 (a = 2).
Выберем h1=h/2, h2 = h. Опираясь на значение в точке tk = k∙h, найдем три приближенных решения:
xk+1 = xk + h∙f(tk, xk),
= xk + ∙f(tk, xk), = + ∙f(tk + , ).
Таким образом, в точке tk+1 имеем два приближенных решения: первое – вычислено при шаге разбиения h, второе – . По доказанному ранее свойству имеем
x*(tk+1) = xk+1 + C∙h2 + O(h3). (4)
Для имеем
x*(tk + ) = + x//(h1) = + x//(tk) + O(h3),
В точке tk+1 имеем
x*(tk + h) = + x//(h1) + f(tk + , ) + x//(h2) =
= + x//(h1)+ x//(h2) – × x//(h1)=
= + x//(h)– × x//(h1)= + x//(tk) + O(h3),
то есть
x*(tk + h) = + x//(tk) + O(h3), или
x*(tk+1) = + 2C∙( )2 + O(h3). (5)
Умножим равенство (4) на a1, а (5) – на a2 и сложим получающиеся равенства
a1×x*(tk+1) + a2 ×x*(tk+1) = a1×xk+1 + a2× + (a1×h2 + a2× )×С + O(h3).
Пренебрегая слагаемыми порядка h3, выбирая a1 и a2 так, чтобы выполнялись два равенства
a1 + a2 = 1,
a1 + = 0 ,
получаем a1 = –1, a2 =2. С помощью линейной комбинации –xk+1 + 2∙ , получаем новое решение, скорость сходимости которого на единицу лучше, чем у решений полученных при значениях шага h и . Конкретнее, имеем
x*(tk+1) – [–xk+1 + 2∙ ] = O(h3).
Итак, вдвое увеличивая количество вычислений, улучшаем точность (повышаем скорость сходимости) на порядок. Увеличение точности на порядок без приема ускорения скорости сходимости потребовало бы увеличение количества вычислений приблизительно в 1/h раз.
В предположении большей гладкости решения x*(t) (а, значит, и функции f(t, x)) аналогичным образом можно повысить скорость сходимости еще на единицу и т.д.
Пример. Рассмотрим задачу Коши для обыкновенного дифференциального уравнения
x/ (t)= –x2 + t× x + ; x(0) = 1. (6)

T
0.1
0.05
x**
0.025
0.0125
x**
x*(t)
0.1
0.95491
0.95710
0.95931
0.95836
0.95877
0.95918
0.95917
0.2
0.92704
0.93059
0.93414
0.93263
0.93329
0.93395
0.93395
0.3
0.91265
0.91704
0.92144
0.91958
0.92041
0.92124
0.92123
0.4
0.90924
0.91417
0.91911
0.91703
0.91797
0.91891
0.91890
0.5
0.91508
0.92036
0.92566
0.92345
0.92446
0.92547
0.92546
0.6
0.92900
0.93452
0.94004
0.93775
0.93881
0.93987
0.93986
0.7
0.95017
0.95585
0.96154
0.95918
0.96028
0.96138
0.96137
0.8
0.97801
0.98381
0.98962
0.98722
0.98835
0.98947
0.98946
0.9
1.01213
1.01803
1.02392
1.02149
1.02264
1.02378
1.02377
1.0
1.05225
1.05822
1.06419
1.06173
1.06289
1.06405
1.06405
В таблице приведены результаты решения задачи (6) методом Эйлера при различных значениях шага интегрирования h = 0.1; 0.05; 0.025; 0.0125, причем решения распечатаны не все, а только в узлах кратных 0.1. Через x** обозначено решение, полученное методом ускорения сходимости. В четвертом столбце это решение было получено линейной комбинацией решений в методе Эйлера для h = 0.1 и h = 0.05, а в седьмом – h = 0.025 и h = 0.0125. В последнем столбце приведены точные решения. Выводы может сделать сам читатель.
2. Приближенное вычисление определенного интеграла.
Пусть стоит задача вычисления определенного интеграла
y = .
В качестве метода выберем квадратурную формулу трапеций (составную).
y(h) = yn = , (7)
где xk = k×h, k = 0, 1, …, n, h = .
Найдем представление остаточного члена квадратурной формулы трапеций на отрезке [xk; xk+1], то есть
R1(f; xk) = – ×[f(xk) + f(xk+1)].
В предположении существования третьей производной у подинтегральной функции f(x), разлагая ее в ряд Тейлора с остаточным членом в точке xk, используя обобщенную теорему о среднем значении интеграла, можно получить следующее представление:
R1(f; xk) = – ∙f //(xk) + ∙[f ///(hk) – f ///(xk)],
где hk, xk Î [xk; xk+1]. Отсюда ясно, что скорость сходимости формулы трапеций на отрезке [xk; xk+1] имеет порядок О(h3).
Составная формула трапеций (7) получается, как сумма простых формул трапеций при интегрировании на частичных отрезках [xk; xk+1], поэтому остаточный член интегрирования по составной формуле трапеций является суммой остаточных членов на [xk; xk+1], то есть
Rтр(f, h) = –yn = = – f //(xk) + [f ///(hk) – 2 f ///(xk)].
Уменьшая шаг в два раза, то есть h1 = , получим новую составную формулу трапеций с остаточным членом
Rтр(f, h1) = –y(h1) = – f( ) – f( ) +
+ [f ///( ) – 2 f ///( )].
В последнем представлении = k∙ , при k = 0, 1, …, N, N = 2n. Таким образом, первые суммы (без коэффициентов) в представлениях Rтр(f, h) и Rтр(f, h1) совпадают. Обозначим эту сумму через М. Вторую сумму заменим на следующую
f( ) = f(xk) + f /(γk) = M + f /(γk),
где γk Î [xk; xk+1].
Легко заметить, что
n∙ min f(x) ≤ f(xk) ≤ n∙ max f(x),
поэтому существует такая точка η Î [0; 1] , что f(xk)= n∙f (η)= ∙ f (η). Рассуждая аналогично, можно получить
[f ///(hk) – 2 f ///(xk)] = [f ///(α) – 2f ///(β)],
[f ///( ) – 2 f ///( )] = [f ///(α1) – 2f ///(β1)],
f /(γk) = f /(γ),
где α, β, α1, β1, γ – некоторые числа из [ 0; 1 ]. Тогда можно записать
Rтр(f, h) = – ∙ f (η ) + O(h3), Rтр(f, h1) = – ∙ f (η ) + O(h3).
Итак, имеем = y(h) – ∙ f (η ) + O(h3),
= y( ) – ∙ f (η ) + O(h3).
Умножая первое равенство на C1, а второе – на С2 и складывая полученные равенства, приходим к соотношению
(С1 + С2)∙ = С1 ∙y(h) + C2 ∙y( ) – ∙[C1 + C2]∙ f (η ) + O(h3).
Полагая C1 = – , а C2 = , приходим к равенству
= – ∙ y(h) + ∙ y( ) + O( h3).
Получили новую формулу численного интегрирования, которая на порядок точнее двух исходных
» – ∙ y(h) + ∙ y( ). (8)
Таким образом, рассмотренный прием улучшения сходимости квадратурной формулы трапеций можно рассматривать как один из способов получения новых неинтерполяционных квадратурных формул большей точности.
Пример. Вычислить интеграл
I = .
Решения сведены в таблицу
n=20
n=40
n=80
20 – 40
40 – 80
I (точное)
0.6353102
0.6362925
0.6365380
0.6366199
0.6366198
0.6366198
В трех первых столбцах приведены приближенные значения интеграла I, полученные по составной формуле трапеций при различных значениях n, в четвертом и пятом – по формуле (8), в последнем – точное значение интеграла I.
3. Предельный переход и машинная арифметика.
В качестве модельной задачи рассмотрим задачу нахождения точных знаков числа e, опираясь непосредственно на определение числа e как предела
(1 + )n e.
Построим последовательность чисел {en} таких, что
en = (1 + )n . (9)
Алгоритмически процесс построения этой последовательности прост. Если бы вычисления по формуле (9) осуществлялись точно (без округлений), то в соответствии с определением предела, построив достаточно длинную последовательность {en}, можно было бы получить сколь угодно точное представление числа e (с любым, заданным, количеством верных знаков). Однако, рассматривая фактически построенную (вычисленную на компьютере) последовательность {en}, замечаем, что характер изменения членов последовательности не совпадает с теоретически ожидаемым изменением. При увеличении n до некоторого достаточно большого N действительно происходит стабилизация верных знаков, то есть последовательность ведет себя в соответствии с теорией. Дальнейшее увеличение n не добавляет верных знаков. Наконец, наступает момент, когда верные знаки начинают замещаться сомнительными знаками, вплоть до полного искажения результата (ни одного верного знака). Эта ситуация характерна при осуществлении предельного перехода при реализации его на вычислительных устройствах.
Рассмотрим структуру абсолютной погрешности a = e – en. Она состоит из двух слагаемых, первое из которых определяется заменой предела последовательности e некоторым ее членом en, а второе – погрешностью округления и количеством цифр в представлении чисел данного вычислительного устройства (разрядностью чисел).
Рассмотрим функцию f(n) = (1 + )n. Вводя новую переменную x = и доопределяя ее по непрерывности в точке x = 0, получаем хорошо изученную функцию y = f(x), которая непрерывна в точке x = 0 вместе со всеми производными. Легко вычислить, что f /(0) = . Таким образом, первое слагаемое в представлении абсолютной погрешности может быть записано в виде ×x ( × ). Учитывая, что мантиссы числа типа real в Pascal записываются в пяти байтах, причем приближенно (с округлением), погрешность числа равна 2–39, погрешность числа (1 + )n равна 2–38. Тогда вычислительная погрешность степени (1+ )n будет равна n×(1 + )n–1×2–38 » n×e×2–38. При больших значениях n эта погрешность будет влиять не только на знаки, в которых осуществляется округление, но и на информативные знаки. Так, например, при n » 238 величина погрешности будет около e (2,7…), так что у соответствующего значения en все знаки сомнительные. В связи с этим возникает проблема, каким выбирать значение n и как видоизменить вычислительный процесс, чтобы получить максимальное количество верных знаков, (например, 11– стандартная выдача числа типа real на Pascal). Ясно, что при очень большом n вычислительная погрешность не позволит найти даже меньше, чем одиннадцать верных знаков. С другой стороны, при небольших значениях n в принципе невозможно получить много верных знаков.
В создавшейся ситуации выходом из положения является применение приема ускорения сходимости. Вычислим при сравнительно небольших значениях n несколько (n = n1, n2,, …, np) чисел en. Затем с помощью линейной комбинации этих значений найдем более точное приближение. При этом, если коэффициенты линейной комбинации выбраны так, что точность ее выше точности каждого из составляющих, то получим большее количество верных знаков. Выбор небольших значений чисел n сделают вычислительную погрешность сравнительно малой.
Найдем коэффициенты упомянутых линейных комбинаций, установим точность, с которой линейная комбинация приближает число e, и проведем численный эксперимент.
Ранее введенная функция f(x) может быть разложена в ряд Тейлора в точке x = 0 с остаточным членом
f(x) = f(0) + f /(0)×x + + …+ + .
Возвращаясь к переменной n, учитывая, что f(0) = e, а f( )= en, перепишем это равенство в следующем виде
e =en – f /(0)× – … – ∙ – ∙ .
Составим линейную комбинацию E = C1×E1 + C2×E2 + … + Cp×Ep , выбрав в качестве Ci решения системы уравнений
C1 + C2 + … + Cp = 1,
C1× h1 + C2×h2 + … + Cp×hp = 0,
........................................................,
C1× h1p + C2×h2p + … + Cp×hp p = 0,
где через Ei обозначены en при соответствующих значениях ni, а hi = , при
i = 1, …, p. Написанная система линейных уравнений разрешима единственным образом, так как ее определитель – это транспонированный определитель Вандермонда. Удобнее всего величины hi выбрать равными при некотором фиксированном h. Приведем системы линейных алгебраических уравнений для определения коэффициентов Ci и их решения при различных значениях параметра p.
1. p = 1: C1 = 1. Точность – порядка O(h) = O( ).
2. p = 2: C1 + C2 = 1, C1 = –1 , C2 = 2.
C1 + C2 = 0.
3. p=3: C1 + C2 + C3 = 1, C1 = , C2 = –2, C3 = .
C1 + C2 + C3 =0,
C1 + C2 + C3 = 0.
4. p = 4: C1 + C2 + C3 + C4 = 1, C1 = – 0,0476190476,
C1 + C2 + C3 + C4 = 0, C2 = 0,6666666667,
C1 + C2 + C3 + C4 = 0, C3 = – 0,2666666667
C1 + C2 + C3 + C4 = 0. C4 = 3,0476190476.
5. p = 5: C1 + C2 + C3 + C4 + C5 = 1,
C1 + C2 + C3 + C4 + C5 = 0,
C1 + C2 + C3 + C4 + C5 = 0,
C1 + C2 + C3 + C4 + C5 = 0,
C1 + C2 + C3 + C4 + C5 = 0,
С1 = 0,00317460316, С2 = – 0,09523809522,
С3 = 0,88888888889, С4 = – 3,0476190476.
Находить линейные комбинации для p>5 нет смысла, потому что при решении систем линейных алгебраических уравнений высокого порядка с коэффициентами отмеченного характера, например, методом Гаусса вычислительная погрешность чисел Ci становится больше чем 10–10 и улучшения результата не происходит.
Ниже приведена таблица с результатами численного эксперимента.
n
P = 1
p = 2
p = 3
p = 4
p = 5
16
2,6379284974
2,7160517614
2,7182491138
2,7182815824
2,712818276
32
2,6769901294
2,7176997757
2,7182775238
2,7182818123
2,7182818283
64
2,6973449526
2,7181330868
2,7182812763
2,7182818273
2,7182818284
128
2,7077390197
2,7182442289
2,7182817584
2,7182818283
2,7182818284
256
2,7129916243
2,7182723761
2,7182818196
2,7182818284

512
2,7156320002
2,7182794587
2,7182818273


1024
2,7169557294
2,7182812351
2,7182818285

2048
2,7176184823
2,7182816801

4096
2,7179500813
2,7182817911

8192
2,7181159362

Автор не может не удержаться от комментариев по поводу поведения чисел, приведенных в этой таблице. Во-первых, числа en в первом столбце, начиная с n=32 и оканчивая n=512, уже содержат всю информацию, которая необходима для решения поставленной задачи (нахождение числа e с точностью одиннадцать верных знаков). При этом каждое из них дает приближение к числу e лишь с точностью два верных знака. Во-вторых, используя прием ускорения сходимости с помощью линейной комбинации пяти en при n = 32, 64, 128, 256, 512, мы производим лишь 992 операции возведения в степень, тогда как нахождение приближенного значения числа e без ускорения сходимости дает максимально возможную точность девять верных знаков только на предельных значениях целых чисел типа longint (количество операций возведения в степень – 231).

Аспектно-ориентированное программирование

В статье рассматривается новая парадигма программирования – аспектно-ориентированное программирование. Данная парадигма возникла сравнительно недавно и пока только определены её основные рамки. Читатель может ознакомиться с основными понятиями и получить представление об АОП, как о технике программирования. Выяснить в чём заключается различие между объектно-ориентированным программированием и аспектно-ориентированным программированием, какая из техник является более эффективной.

В процессе эволюции человечество постоянно пытается решить проблему «Как организовать максимальный выход продукта при минимальных затратах?». Причём эту проблему человек пытается решить во всех областях своей деятельности, будь то производство хлебобулочных изделий или же разработка очередного спутника NASA. То же самое можно сказать и о программировании.
Всю эволюцию программирования можно представить, как процесс, направленный на снижение программного кода и увеличение эффективности его использования. В эпоху зарождения программирования программы представляли собой набор машинных команд. Основное занятие программистов заключалось в составлении машинных инструкций. Но компьютерная индустрия развивается динамично, растут задачи и требования. Как результат появились языки программирования более высокого уровня, позволяющие отойти от машинного кода, абстрагироваться и более визуально решать поставленные проблемы. Появились структурированные языки, здесь уже пришлось думать о том, как разбить большое задание, разработку общего поведения и интерфейса для взаимосвязанных концепций и изменение обычного поведения более специализированных компонентов без обращения к реализации базовой концепции. Таким образом, на данном этапе появилась возможность избежать множества ошибок, сопутствующих структурному и модульному программированию, внести большую ясность при разработке программного обеспечения. Как вполне естественный результат развития и совершенствования техники ООП возникло компонентное программирование, позволившее более эффективную организацию данных.
Так наблюдая за развитием программирования можно сделать следующие выводы: чем дальше идет эволюция программирования, тем большему обобщению подвергаются его составляющие. Сначала организовали набор машинных инструкций в единые блоки, далее эти блоки совместили в одном модуле. Всё, очевидно, чем дальше идет развитие, тем больше уровень комплексности и абстракции, тем все более становится скрытным базовая реализация тех компонентов программирования, с которыми мы работаем.
Как мы уже говорили, сложность программного обеспечения и методологий программирования постоянно возрастает, также постоянно предпринимаются попытки разорвать этот замкнутый круг. Xerox PARC, IBM и Microsoft готовят для индустрии ПО новую парадигму программирования. Она называется аспектно-ориентированное программирование (АОП, aspect-oriented programming) и призвана прийти на смену объектно-ориентированному (ООП, object-oriented programming) и компонентному (component-based programming) программированию. Основными идеологами нового программирования являются Грегор Кишалес (Xerox PARC) и Чарльз Саймони, бывший ведущий архитектор Microsoft.
Аспектно-ориентированное программирование (АОП) (aspect-oriented programming, AOP) — парадигма, изобретенная в Xerox PARC в 90-х гг. и позволяющая разработчику четко разделять задачи, которые не следует запутывать в клубок, например математические операции и обработку исключений. АОП имеет ряд преимуществ. Во-первых, он повышает производительность, так как операции выполняются быстрее. Во-вторых, программисты тратят меньше времени на переписывание одного и того же кода. В целом, АОП обеспечивает более качественную инкапсуляцию различных процедур и облегчает взаимодействие с кодом, написанным на других языках программирования.
Состояние развития АОП похоже на состояние ООП 20 лет назад, данная методика находится на стадии исследований, ещё только определены её рамки и основные понятия. Парадигма аспектно-ориентированного программирования (АОП, aspect-oriented programming) призвана прийти на смену объектно-ориентированному (ООП, object-oriented programming) и компонентному (component-based programming) программированию. По оценкам специалистов, около 70% времени в проектах тратится на сопровождение и внесение изменений в готовый программный код. Вот почему столь важной в ближайшей перспективе становится роль АОП и подобных трансформационных подходов.
Направление развития программирования очевидно. Никому не хочется тратить время и усилия на изменение готовых разработок. Также остро стоят проблемы «повторного использования кода» и «пересекающегося кода» (code crosscutting). Проблема пересекающегося кода состоит в том, что при реализации решения задачи встречается программный код, по сути выполняющий одну и туже функцию в разных частях программы. Что выражается в: плохой трассировке, низкой продуктивности, плохом качестве программного кода, более трудной модификации и низкой эффективности повторного использования кода Проблема повторного использования кода начала решаться с появления программирования, но нашла своё решение при появлении ООП. До этого этапа можно отметить значительный вклад в решение этой задачи модульного программирования, но здесь можно было использовать модули, если между разработчиками программ были оговорены правила их использования и применения. С появлением объектно-ориентированного программирования стало возможным организовать относительно слабосвязанную систему, компоненты которой менее зависят друг от друга, как это было ранее, кроме того, разработанные объекты стало возможным применять в программе, не задумываясь о том, кто их написал. Такое положение сейчас уже вполне естественно, каждый человек, хоть немного знакомый с программированием, сейчас без проблем может написать объектно-ориентированную программу (используя, например, язык программирования Delphi), не задумываясь о том, что за компонентом, который он выбрал, стоит не одна сотня строк программного кода. Как мы уже говорили, всё очевидно. Никто не желает выполнять лишнюю работу, под словами «лень-двигатель прогресса» проходит вся эволюция человека, это касается всех сфер его деятельности, в том числе и программирования.

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

Такие языки программирования как, например, C++, VB, Delphi и т.п. ориентированы, прежде всего, на решение первой задачи. Код компонента представляется в виде класса, то есть он хорошо локализован и, следовательно, его легко просматривать, изучать, модифицировать, повторно использовать. С другой стороны, при программировании процессов, в которые вовлечены различные объекты, мы получаем код, в котором элементы, связанные с поддержкой такого процесса, распределены по коду всей системы. Эти элементы встречаются в коде множества классов, их совокупность в целом не локализована в обозримом сегменте кода. В результате мы сталкиваемся с проблемой «запутанного» и «пересекающегося» кода (code tangling и code crosscutting).
АОП создает систему, используя слабосвязанные модульные разработки пересекающихся моделей. Модульная часть в аспектно-ориентированном программировании называется аспектом, тогда как общая модель в ООП носит название - класс.
Аспект (ключевое понятие новой парадигмы) представляет собой языковую концепцию, схожую с классом, но только более высокого уровня абстракции. Аспекты могут затрагивать многие классы и используют так называемые точки вставки (insertion points) для реализации регулярных действий (например, связанных с безопасностью, обработкой ошибок и т. п.), которые обычно «размазаны» по всему тексту программы. АОП отличается от ООП, тем, как адресуются пересекающиеся модели. В АОП реализация каждой модели не подозревает о существовании другой, пересекающей ее структуру. Вспомним, что при использовании техники ООП создаётся система из объектов, связь между которыми осуществляется через действия.
Технология АОП позволяет выделить многократно повторяющийся код в простые блоки, называющиеся аспектами. Аспекты инкапсулируют множество классов в один модуль, к которому можно осуществлять обращение из любого места программного кода. Требования аспектного программирования заключаются в том, что при разработке аспект рассматривают как модель, пересекающую структуру другой модели.
В АОП каждый аспект может быть выражен в единичной форме, и далее они автоматически комбинируются в исполняемый код с помощью так называемого сборщика (aspect weaver). В результате каждый аспект представляет реализацию некоторого числа модулей или объектов, увеличивая возможности повторного использования кода. По сравнению с традиционным подходом после этапа кодирования компонентов и аспектов на соответствующих языках выполняется автоматическое построение оптимизированного для выполнения (но не для просмотра и модификации) кода. Сборщик аспектов может автоматически вставить точку входа для любого набора операций, что позволяет разделить пересекающийся код на уровне исходного кода.

Таким образом, АОП позволяет снизить объём кода программы и увеличить эффективность повторного использования кода.
В рамках АОП утверждается, что никакая технология проектирования не поможет решить данную проблему, если оставаться в рамках языка, ориентированного только на разработку компонентов. Для программирования сервисов, обеспечивающих взаимодействие объектов, нужны специальные средства, возможно специальные языки.
Понятие аспект можно определить так: «некоторая модель является аспектом другой модели, если она пересекает (crosscuts) ее структуру». Иными словами понятие аспекта относительно. Если, например, в качестве модели некоторой системы мы рассматриваем совокупность компонентов, представляющих такие сущности как вкладчик, счет, банк, то аспектами являются сервисы, обеспечивающие синхронизацию доступа к счету, распределенные транзакции, безопасность. То есть автоматически выполняемые сервисы, обеспечивающие слаженную, надежную, безопасную работу компонентов.

Преимущества АОП

Как мы уже говорили АОП помогает решить проблемы, касающиеся запутанного кода (code tangling) и разбросанного кода (code scattering). Специфичные преимущества АОП таковы:
Модульная реализация пересекающихся моделей: АОП адресует каждую модель отдельно, с минимальной связностью, что отражается в модульной реализации, даже если присутствует перекрещивание моделей. Такая реализация снижает дублирование кода. Так как каждая проблема реализуется отдельно, это позволяет снизить размер кода. В дальнейшем модульная реализация приводит к более легкому пониманию и сопровождению системы.
Системы легки для развития: Так как аспектные модули могут не знать о пересечении проблем, то легко можно добавить функциональность путем создания нового аспекта. В дальнейшем, при добавлении нового аспекта в систему, существующие аспекты пересекают его структуру, помогая создавать гармоничную эволюцию.
Более поздняя связь с проектным решением: Вспомним проблему разработчиков решить проблему, придерживаясь ее рамок, или расширить ее границы. С АОП разработчики могут задержаться с разработкой проекта для будущих требований, так как они могут быть реализованы в будущем как отдельные классы.
Более широкие возможности повторного использования: Так как АОП решение - это аспекты, как отдельные модули, каждый отдельный модуль слабо связан с остальными. Например, вы можете использовать модуль взаимодействия с базой данных в отдельном аспекте регистрационного механизма с различными требованиями регистрации. В общем, слабосвязанные реализации являются ключом к широкому повторному использования кода. АОП представляет более слабосвязанные решения, чем ООП.

Нужно ли нам АОП? Устраняет ли АОП проектировочные недостатки? В АОП каждая реализация модели означает тот факт, что она пересекает структуру другой модели, которая может не подозревать о ее существовании. Такая «забывчивость» и отличает АОП от технологий ООП. В АОП поток формируется из пересекающихся моделей в главную модель, в то время, как в ООП поток работает в противоположном направлении. Заметим, тем не менее, что АОП и ООП неплохо уживаются рядом. Например, можно представить смешанный класс, как модель, используя как АОП, так и ООП, только на уровне АОП это будет более удобно. В любом случае, реализация пересекающейся модели смешанного класса не нуждается в том, чтобы знать, каким образом она была реализована. Например, в одном случае вы можете использовать интерфейс регистратора событий, как смешанный класс, в другом как аспект. Мы только можем говорить об эволюции ООП в АОП.
Пока АОП в качестве АОП еще только новая идея, элементы которой используются в уже существующих технологиях.
АОП можно поддерживать в рамках уже существующих языков. Так, в частности, исследовательский центр Xerox PARC разработал систему AspectJ (www.aspectj.org), поддерживающую АОП в рамках языка Java. В ноябре 2002 г. вышел новый релиз AspectJ 1.1. Этот пакет встраивается в такие системы разработки, как Eclipse, Sun ONE Studio (http://forte.sun.com/ffj/articles/aspectJ.html) и Borland JBuilder. Другой исследовательский центр — IBM Research — выпустил альфа-версию HyperJ (http://www.alphaworks.ibm.com/tech/hyperj) и готовит к марту 2003 г. выпуск системы Cosmos (http://www.research.ibm.com/AEM/mdsoc.html) с гипертекстовой поддержкой требований и диаграмм. Cosmos является развитием MDSOC, которая, в свою очередь, опирается на идеи субъектно-ориентированного программирования (http://www.research.ibm.com/sop/). Помимо Java новая идеология поддерживается и в других языках, таких как Си, Си++, Squeak/Smalltalk, Perl, Python, Ruby (http://aosd.net/tools.html). Пока интерес к новой парадигме проявляют несколько сот экспертов из General Electric, Hewlett-Packard, Siemens, Motorola, Oracle и Sony. Очевидно, что их число будет расти.
 
1-1 можно быстро Скачать WoW аддоны бесплатно для всех классов очень классно! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40