Отдайте же человеку – человеческое, а вычислительной машине – машинное. В этом и должна, по-видимому, заключаться разумная линия поведения при организации совместных действий людей и машин.
Актуальность и востребованность темы работы. С развитием технологий и повышения актуальности использования ядерной энергии и исследования явлений, связанных с сильным взаимодействием и эффектов бомбардировки атомного ядра различного типа элементарными частицами, появилась необходимость создания компьютерной модели (алгоритма), а также компьютерной программы, действующей на основе данной также и физико-математической модели.
Данный вопрос также стоит очень даже остро, поскольку имеется необходимость не только в самом создании данной модели, но и указания в качестве лица-автора данной программы-модели, представителя Ферганского Государственного Университета (ФерГУ).
Степень изученности проблемы. Разработаны и подготовлены все необходимые математические зависимости, на протяжении всех исследований ядерных реакций ещё с 30-х годов прошлого столетия. Также использовалась и компьютерная модель в конце прошлого столетия, но создания такой модели как таковой со стороны ФерГУ, не наблюдалось.
Цели и задача данной работы. Основной целью данной работы является создание специальной компьютерной программы по моделированию ядерных реакций, но также имеются и следующие:
· Создание программы по проведению математических расчётов по ядерным реакциям;
· Указание всех необходимых закономерностей на языке С++;
· Использование в алгоритме языка С++;
· Применение методов выражения математических операций на языке С++ при действии программы.
Задачи исследования. Представляются следующие задачи данной работы:
· Текстовое представление модели;
· Определение необходимых закономерностей;
· Создание системы вводы на необходимых этапах и стилях;
· Программирование технологии выполнения математических операций;
· Присвоение данных к переменным;
· Вывод данных в необходимом виде.
Объект осуществляемого исследования. Объектом изучения является компьютерная программа по расчёту ядерных реакций.
Предмет исследования. Предметом данного исследования является сам результат выдаваемый со стороны программы, а также его алгоритм.
Методы исследования. Использован теоретический метод (указание необходимых формул), практический метод (создание самой программы), экспериментальный метод (проверка самой программы).
Научная новизна самостоятельной работы. Новизна представляется в следующем:
· Впервые создана компьютерная программа такого типа при авторстве лица ФерГУ;
· Первое использование понятие и данных по сечению ядерной реакции при типе таких программ;
· Вывод данных по энергетическому потенциалу ядерной реакции.
Практические результаты. Данная программа вполне может быть использована в следующих целях:
· Начальное определение результатов перед проведением действительной ядерной реакции;
· Проверка энергетического потенциала реакции второй степени;
· Модель будет иметь доступ к своему совершенствованию, благодаря чему могут быть добавлены характеристики самого ускорителя, энергия выходных пучков и т. д.
Достоверность результатов. Результаты проверены практически, и сама программа прилагается к данной работе.
Научная и практическая значимость. С научной точки зрения, данная работа открывает новые возможности по самому моделированию и создаёт направление для дальнейшего изучения.
С практической точки зрения, данная программа необходима и вполне полезна при подготовке, проверке или проведении виртуального эксперимента без лишних затрат.
Внедрение результатов исследования. На основе данной работы была создана сама компьютерная программа и определены последующие направления.
Апробация результатов. Для апробации результатов данной работы, был прочитан доклад с участием студентов, а также проведены дискуссии с кандидатами физ.-мат. наук.
Структура и объём работы. Работа состоит из введения, 7 глав и заключения. В самостоятельной работе 43 страницы, 23 рисунка, 4 таблицы, список литературы содержит 28 ссылок.
В начальной части используются 2 дополнительные библиотеки:
#include
#include
Также для повторения зависимости std, добавляется следующее условие:
using namespace std;
Далее добавляется отдельная функция main (), которая как следует из названия самой функции она является основной.
При первоначальном представлении начала программы участвует текстовое объяснение, выходящее следующим образом (Код 1.1.1.)
Код 1.1.1. Отдел приветствия
int main ()
{
cout <<«»< cout <<" HELLO!»< cout <<" This is a program for doing mathematic operations»< cout <<" of nuclear reaction and show more important numbers»< cout <<" for it theme on second model of nuclear reactions»< cout <<«»< Как можно заметить из этого, изначально пропускается пустая строка для того, чтобы при повторном запуске программы, либо дальнейшем повторении (глава 5) не возникал коллапс. Изначально вставлено приветствие, при этом все текстовые значения выводятся посредством cout. Пробелы перед приветствием вставлены с целью расположения текста по центру относительно остальных значений. Далее в нижней находятся 3 строки текста. Итак, вторая из них состоит из 50 символов, при этом если вычесть 6 (число символов строки приветствия) получается 44, что даёт число пробелов от уровня начала второй строки, необходимое для расположения строки по центру, а именно 22. Первоначальные 5 пробелов во всех строках вставлены для добавления эффекта центрального расположения текста при выполнении программы. Этот момент представляется относительно (1) и (2) на Коде 1.1.2. Код 1.1.2. Центральное расположение текста в С++ cout <<«»< cout <<" HELLO!»< cout <<" This is a program for doing mathematic operations»< cout <<" of nuclear reaction and show more important numbers»< cout <<" for it theme on second model of nuclear reactions»< cout <<«»< Первая строка после приветствия, как и третья отлична от второй 2 знаками, по этой причине добавляется лишь 1 пробел перед ними. При написании первоначально, данного кода, можно наблюдать следующую картину (Рис. 1.1.1). Рис. 1.1.1. Запись в программе Dev-С++6.3 И в качестве отделяющего элемента приветствующего блока компьютерной программы и дальнейшего кода имеется пустая строка.
Для ввода понятий о самих ядерных реакциях приводится отдельный малый блок для описания стандартной модели ядерной реакции, описываемой на коде 1.2.1.
Код 1.2.1. Стандартная модель ядерной реакции
cout <<«Model of nuclear reaction: a+A=B+b»< cout <<«»< При этом, малая «а» – влетающая частица, бомбардирующая мишень, состоящая из атомов А. При прохождении данной ядерной реакции с учётом того, что «а» обладает некоторой кинетической энергией для возбуждения «А» и изменения его структуры, происходит изменение ядра с образованием побочной частицы «b» и результирующего ядра «В».
В результате указанных операций, был получен первый первоначальный код (Рис. 1.3.1.), который представляет собой общий вводящий блок.
Рис 1.3.1. Вводящий блок программы
Для создания первоначальной записи ядерной реакции в стандартном виде, как было необходимо, создаются дополнительные блоки массовых коэффициентов, позволяющие выполнять дальнейшие математические операции над вводимыми данными.
Первый блок отделяется от общей конструкции пустой строкой в самом коде и представляется в виде кода (2.1.1).
Код 2.1.1. Первый блок вводимых данных
int a1,q1;
string k1;
cout <<«Mass of a (m) =»;
cin>> a1;
При этом вводятся массовые коэффициенты первого элемента в лице переменной а1, которая в данном случае подлежит к int. В лице массовых коэффициентов выступают такие данные как массовые числа элементов.
Продолжением первого целочисленного блока по вводу данных является отдел определения зарядовых коэффициентов.
Для этого предназначен код (2.2.1.)
Код 2.2.1. Зарядовая часть первого блока вводимых данных
cout <<«Charge of a (q) =»;
cin>> q1;
Как можно увидеть из кода (2.1.1.), переменная заряда q1 уже была объявлена в том коде как целочисленная единица.
Ещёодной частью, необходимой для записи операции в виде ядерной реакции, являетсячасть наименований самих элементов. Для этого целесообразно использованиестрочной переменно или string, что и объявляется также в коде (2.1.1.), аостальная часть кода (2.3.1) предстаёт более удобно.
Код 2.3.1.Текстовая часть кода для ввода данных при традиционной записи ядерной реакции
cout <<«Name of a=»;
cin>> k1;
Такимобразом можно вводить и текстовые данные, примерами которых могут быть такиеобозначения как p, e, Cu, Al, He, H, O, N, Eu и т. д.
Итак, на основе описаний по разделению общего кода для ввода был получен следующийрезультат (Код 2.3.2.), который следующим образом предстаёт в самой программе (Рис. 2.3.1.).
Код 2.3.2. Общийвид записи вводимого блока для первого элемента
int a1,q1;
string k1;
cout <<«Mass of a (m) =»;
cin>> a1;
cout <<«Charge of a (q) =»;
cin>> q1;
cout <<«Name of a=»;
cin>> k1;
Рис. 2.3.1.Запись кода блока ввода уже в программе
Стоит обратить отдельное внимание на общее число элементов, которое состоит из 4 элементов, при этом вводимое число равно 3, поскольку параметры 4 неизвестного элемента должны быть определены автоматически. Все вводящие блоки представляют собой единый код (2.4.1).
Код 2.4.1. Вводящий блок в общем виде
int a1,q1;
string k1;
cout <<«Mass of a (m) =»;
cin>> a1;
cout <<«Charge of a (q) =»;
cin>> q1;
cout <<«Name of a=»;
cin>> k1;
int a2,q2;
string k2;
cout <<«Mass of A (m) =»;
cin>> a2;
cout <<«Charge of A (q) =»;
cin>> q2;
cout <<«Name of A=»;
cin>> k2;
int a3,q3;
string k3;
cout <<«Mass of b (m) =»;
cin>> a3;
cout <<«Charge of b (q) =»;
cin>> q3;
cout <<«Name of b=»;
cin>> k3;
cout <<«» < Данный код представляется уже в программе как (Рис. 2.4.1). Рис. 2.4.1. Запись в программе всех блоков ввода
Для описания операций над целочисленными данными удобнее применить (2.5.1).
Из этого можно сделать вывод, что для выполнения операции и обозначения недостающего элемента ядерной реакции достаточно ввести обычные арифметические действия и вызов математической библиотеки на данной стадии выполнения операции не требуется.
Важным элементом является оперирование с линейными или строковыми данными, в лице которых выступают наименования элементов реакции. Возникает важный момент с использованием его при вводе. Но поскольку изменения в общей структуре данных не производятся, их общий вывод вполне разрешён и обычен.
Результирующий вывод представляется следующим образом (Код 2.7.1.).
Код 2.7.1. Общий выводящий код
cout < cout <<«x (»< cout <<«»< При этом изначально выводится наименование первого элемента, в скобках рядом с ним, его массовое число и после запятой заряд, после «+» такой же тип для наименования ядра. А после знака «=» уже результирующее ядро, которое определяется арифметическими действиями, показанными ранее (глава 2.5). И наконец, выступает вылетающая частица со своими численными данными. При этом после первого cout отсутствует оператор перехода на новую строку endl, благодаря чему строка продолжается. В самой программе, данный код выражается в следующем виде (Рис. 2.7.1). Рис. 2.7.1. Общий оператор вывода в виде традиционной записи ядерных реакций первой степени с двумя элементами выхода (линейные или прямые ядерные реакции без дополнительных элементов)
Таким образом был получен один определяющий код для ввода всех необходимых данный и представления самой ядерной реакции.
Весь код 2.8.1. предстаёт следующим образом.
Код 2.8.1. Общий вид вводного блока
int a1,q1;
string k1;
cout <<«Mass of a (m) =»;
cin>> a1;
cout <<«Charge of a (q) =»;
cin>> q1;
cout <<«Name of a=»;
cin>> k1;
int a2,q2;
string k2;
cout <<«Mass of A (m) =»;
cin>> a2;
cout <<«Charge of A (q) =»;
cin>> q2;
cout <<«Name of A=»;
cin>> k2;
int a3,q3;
string k3;
cout <<«Mass of b (m) =»;
cin>> a3;
cout <<«Charge of b (q) =»;
cin>> q3;
cout <<«Name of b=»;
cin>> k3;
cout <<«»< cout < cout <<«x (»< cout <<«»< Рис. 2.8.1. Первая часть кода Рис. 2.8.2. Вторая часть кода
Начинается часть энергетических характеристик ядерных реакций. Для проведения такого типа операций, необходимо использование точного типа данных для масс, по этой причине массы каждого из элементов уточняются достоверно из таблиц изотопов элементов (Рис. 3.1.1—3.1.4).
Рис. 3.1.1. Примеры изотопов. Часть общей таблицы изотопов алюминия
Рис 3.1.2. Примеры изотопов. Часть общей таблицы изотопов гелия
Рис 3.1.3. Примеры изотопов. Часть общей таблицы изотопов водорода
Рис 3.1.4. Примеры изотопов. Часть общей таблицы изотопов магния
Код для данной операции имеет вид код (3.1.1.)
Код 3.1.1. Общий вид части кода для ввода точных данных
float a4,a5,a6,a7;
cout <<«ENERGY PART»< cout <<«Real mass of a (m) =»; cin>> a4; cout <<«Real mass of A (m) =»; cin>> a5; cout <<«Real mass of b (m) =»; cin>> a6; cout <<«Real mass of B (m) =»; cin>> a7; С учётом того, что при этом все данные вводятся в атомных единицах массы. После получения всех необходимых целочисленных данных, можно переходить уже к выполнению операций над полученными данными.
Одним из основных энергетических данных является выход ядерной реакции, определяемый по формуле (3.2.1).
Для выполнения данной операции, казалось бы необходимо применение математической библиотеки, поскольку присутствует степени и при этом уже для преобразования данного значения в МэВ, необходимо ещё и умножить на значение в 1.6*10—19, но существует определённое значение, которое составляет 931,5 МэВ/а. е. м., по этой причине при определении дефекта массы, коим и является выражение в скобках, то остаётся лишь умножить это значение на 931,5 МэВ.
Уже из данных операций и из указания всех истинных масс в коде (3.1.1) как действительный значений float, необходимо и выход ядерной реакции приводить в этом варианте. Этот факт также подтверждает аксиома из курса линейной алгебры, про принадлежность к одному множеству всех элементов, участвующих при выполнении некоторой алгебраической (арифметической) операции.
Кодовой записью этого случая является (Код 3.2.1).
Код 3.2.1. Запись кода выхода энергии реакции
float q4, t1, E1, E2;
q4= (a4+a5-a6-a7) *931.5;
cout <<«Q="< При этом для верного вывода также участвует и момент вывода единицы в МэВ. Единицы, которая выводится при произведении единицы в МэВ/ (а. е. м.), которым исчисляется элемент 931,5 и дефект масс исчисляемый также в единицах а. е. м.
Порог ядерной реакции определяется из равенства (3.3.1).
Из этого равенства определяем следующий код (3.3.1).
Код 3.3.1. Код по определению порога ядерной реакции
float q4, t1, E1, E2;
t1=abs (q4) * (1+a4/a5+abs (q4) / (2*a5*931.5));
cout <<«T="< При этом целочисленные данные является не только вещественными, но также эта формула является первой, в которой используется математическая операция (модуль или abs (a)), для выполнения которой необходимо использование и вызов математической библиотеки на первоначальной строке в виде кода 3.3.2. Код 3.3.2. Код по вызову библиотеки математических операций #include
Ещё одним элементом для дальнейших операций, необходим ввод понятия кинетической энергии влетающей частицы. Этот момент отделяется от предыдущего кода пустой строкой для понятия того, что это отдел ввода данных, а именно ввода кинетической энергии частицы.
Из этого уже исходят дополнительные 2 формулы, это общая энергия первой части и общая энергия выходная с кинетической (этот момент, также и объясняет, будет ли реакция вообще, если он больше нуля, то будет, если нет – нужно увеличивать кинетическую энергию). Необходимо привести эти уравнения (3.4.1—3.4.2).
Эта часть кода, до этого момента описывается в (Коде 3.4.1).
Код 3.4.1. Общий код начиная с кинетической энергии до момента выходной общей энергии продуктов реакции
cout <<«»< cout <<«Write Ek=»; cin>> E1; E2= (a4+a5) *931.5+E1; cout <<«»< cout <<«Ea+EA+Ek="< cout <<«Energy: Q+Ek="< На этом моменте завершается условие для кинетической энергии.
Итого, был получен следующий код 3.5.1.
Код 3.5.1. Общий код на основе энергетических показателей
float q4, t1, E1, E2;
q4= (a4+a5-a6-a7) *931.5;
t1=abs (q4) * (1+a4/a5+abs (q4) / (2*a5*931.5));
cout <<«Q="< cout <<«T="< cout <<«»< cout <<«Write Ek=»; cin>> E1; E2= (a4+a5) *931.5+E1; cout <<«»< cout <<«Ea+EA+Ek="< cout <<«Energy: Q+Ek="< В самой же программе этот код выглядит следующим образом (Рис. 3.5.1). Рисунок 3.5.1. Общий код в самой программе
Для использования всесторонней достоверности при выведении и производстве математических, а также физических расчётов, необходимо учитывать релятивистский эффект, то есть моменты со всеми корнями, степенями и постоянными.
Из этого можно сделать вывод, что для использования в программном моделировании самого понятия релятивизма становится необходимым вызов математической библиотеки данных со всеми дополняющими функциями типа: pow (a,b), sqrt (a), lg (a), sin (x), cos (x), tan (x) и т. д.
Для определения распределения энергии продуктов ядерной реакции возможно привести решение системы уравнений вытекающей из (4.2.1).
Но для начальной операции, как для простейшего случая возможно применение и двух уравнений (4.2.2) и (4.2.3).
Если записывать это в кодовом варианте для данной программе, получаем следующее равенство (код 4.2.1).
Код 4.2.1. Код для вывода энергии продуктов ядерной реакции
float Tb1, Tb2;
Tb1=a7/ (a6+a7) * (q4+E1);
Tb2=a6/ (a6+a7) * (q4+E1);
cout <<«E (b) ="< cout <<«E (B) ="< Также стоит обратить внимание на единицы и указание их в самой программе и коде. Также из этих двух основополагающих показателей представляются все остальные данные, которые демонстрируются в следующих главах (4.3—4.4).
Одним из таких данных, выходящих из энергии продуктов ядерной реакции, является скорость этих продуктов, которое определяется из равенства (4.3.1).
При этом учитывается скорость света равной 299 792 458 м/с, при этом также при делении (отношении энергии к нулевой энергии) имеется ввиду отношение в МэВ. А для использования этой формулы в программе используются лишь переходы в системе единиц.
Общий код для скоростей представлен в последних выводах.
Импульс выходящих частиц определяются через формулу (4.4.1).
Условия к скорости света не изменчивы, как и к другим данным. Код для этих параметров представляется в виде (Кода 4.4.1).
Код 4.4.1. Импульсное определение на кодовом языке С++
pa= (a4*1.66*pow (10, -27) *va) /sqrt (1-pow (va,2) /pow (299792458,2));
pb= (a6*1.66*pow (10, -27) *vb) /sqrt (1-pow (vb,2) /pow (299792458,2));
И результирующим моментом вывода является следующий блок 4.4.2.