Решение задач по математике | Задача расчета неопределенного интеграла | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Задача расчета неопределенного интеграла


Содержание

Введение

 

1.Задача расчета неопределенного интеграла

1.1 Содержательное описание задачи

1.2 Математическая формулировка задачи

1.3 Обсуждение задачи

2. Выбор и обоснование численного метода решения задачи

2.1 Методы нахождения интеграла

2.2 Математическая формулировка задачи

3. Разработка алгоритма

3.1 Разработка структур данных

3.2 Разработка структуры алгоритма

3.3 Схема алгоритма

4. Текст программы

4.1 Описание переменных и структур данных

4.2 Описание функций

4.3 Текст программы на языке программирования Object Pascal

5. Тестовый ввод

5.1 Аналитическое решение и умозрительные результаты

5.2 Решение, полученное с использованием разработанного ПО

5.3 Выводы

6. Инструкция пользователю

Заключение

Список использованных источников

http://vk.com/pomoshtulgu — создатели этой работы. Отчеты и курсовые на заказ, недорого.

 

Введение

Информатика — это обширнейшая область человеческой деятельности, связанная с процессами преобразования информации с помощью компьютеров и их взаимодействием со средой применения. Термин информатика возник в 60-х гг. во Франции для названия области, занимающейся авторизированной обработкой информации с помощью электронных вычислительных машин. Главная функция информатики заключается в разработке методов и средств преобразования информации и их использовании в организации технологического процесса переработки информации. Информатика появилась благодаря развитию компьютерной техники, базируется на ней и совершенно немыслима без неё.

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

Самым основным методом интегрирования является подстановка под знак дифференциала. Языком программирования был выбран язык Object Pascal. Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI.

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

1.Задача расчета неопределенного интеграла – раздел описывает постановку задачи решения неопределенного интеграла методом подведения под знак дифференциала;

1.1. Содержательное описание задачи – в этом подразделе проводится полное и емкостное описание задачи, примеры использования ее на практике

1.2.Математическая формулировка задачи – в этом подразделе вводятся математические описания метода подведения под знак дифференциала;

1.3 Обсуждение задачи – в этом подразделе происходит краткий анализ вышестоящего подпункта.

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

2.2.Математическая формулировка задачи – подраздел содержит полное описание метода подведения под знак дифференциала, возможность реализации в программе

3.1.Разработка структур данных – в подразделе описывается разработка структур данных, используемых в программе;

3.2. Разработка структур алгоритма – в этом подпункте описывается разработка структуры алгоритма

3.3.Схема алгоритма – в подразделе представлены схемы алгоритма решения интеграла методом подстановки под знак дифференциала

4.1.Описание переменных и структур данных – в подразделе проводится описание переменных и данных, используемых в тексте программы;

4.2.Описание функций – в подразделе проводится описание функций, используемых для реализации программы;

4.3 Текст программы на языке программирования object pascal – в этом подпункте представлен текст программы, производящий вычисление неопределенного интеграла методом подведения под знак дифференциала

5. Тестовая задача – в разделе описывается конкретная содержательная задача, список исходных данных, описывается порядок решения задачи, описываются полученные результаты, и проводится их анализ;

5.1. Аналитическое решение и умозрительные результаты – в подразделе производится аналитическое решение нескольких интегралов

5.2. Решение задачи с использованием разработанного ПО – в подразделе представлено решение тех же интегралов но с использованием программы

5.3.Выводы – в подразделе подведены итоги полученных результатов, их совместимость.

6.Инструкция пользователю – пункт содержит инструкцию пользователю.

1.  Задача расчета неопределенного интеграла

1.1 Содержательное описание задачи

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

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

— Моменты и центры масс плоских кривых. Если дуга кривой задана уравнением y=f(x), a≤x≤b, и имеет плотность 1)Приложения определенного интеграла к решению некоторых задач механики и физики=Приложения определенного интеграла к решению некоторых задач механики и физики(x), то статические моменты этой дуги Mx и My относительно коорди­натных осей Ox и Oy равны

Приложения определенного интеграла к решению некоторых задач механики и физики

-Моменты инерции IХ и Iу относительно тех же осей Ох и Оу вычис­ляются по формулам

Приложения определенного интеграла к решению некоторых задач механики и физики

-Координаты центра масс Приложения определенного интеграла к решению некоторых задач механики и физики и Приложения определенного интеграла к решению некоторых задач механики и физики — по формулам

Приложения определенного интеграла к решению некоторых задач механики и физикиПриложения определенного интеграла к решению некоторых задач механики и физики

-Путь, пройденный точкой при неравномерном движении по прямой с переменной скоростью http://festival.1september.ru/articles/511391/Image316.gif за промежуток времени от http://festival.1september.ru/articles/511391/Image317.gif до http://festival.1september.ru/articles/511391/Image318.gif вычисляется по формуле http://festival.1september.ru/articles/511391/Image319.gif.

-Работа, произведенная переменной силой f(х) при перемещении по осиОх материальной точки от х = а до х=b, находится по формуле http://festival.1september.ru/articles/511391/Image325.gif При решении задач на вычисление работы силы часто используется закон Гука: F=kx, (3) где F — сила Н; х—абсолютное удлинение пружины, м, вызванное силой F, а k —коэффициент пропорциональности, Н/м.

-Длина дуги. Пусть плоская кривая АВ задана уравнением у =f(x) (a http://festival.1september.ru/articles/511391/Image332.gif x http://festival.1september.ru/articles/511391/Image333.gif b),причем f(x) и f?(x) — непрерывные функции в промежутке [а, b]. Тогда дифференциал dl длины дуги АВ выражается формулойhttp://festival.1september.ru/articles/511391/Image334.gif или http://festival.1september.ru/articles/511391/Image335.gif, а длина дуги АВвычисляется по формуле http://festival.1september.ru/articles/511391/Image336.gif(4)

где а и b—значения независимой переменной х в точках А и В. Если кривая задана уравнением х = http://festival.1september.ru/articles/511391/Image337.gif (у)(с у http://festival.1september.ru/articles/511391/Image333.gif d), то длина дуги АВ вычисляется по формуле http://festival.1september.ru/articles/511391/img8.gif  где с и d — значения независимой переменной у в точках А и В.

— При нахождении центра масс также используются интегралы:

1) Координата центра масс системы материальных точек А1, А2 ,…, Аnс массами m1, m2, …, mn, расположенных на прямой в точках с координатами х1, х2, …, хn, находятся по формуле

http://festival.1september.ru/articles/511391/Image339.gif 

2) При вычислении координаты центра масс можно любую часть фигуры заменить на материальную точку, поместив ее в центр масс этой части, и приписать ей массу, равную массе рассматриваемой части фигуры. Пример. Пусть вдоль стержня-отрезка [а;b] оси Ох — распределена масса плотностью http://festival.1september.ru/articles/511391/Image340.gif (х), где http://festival.1september.ru/articles/511391/Image340.gif (х) — непрерывная функция. Покажем, что а) суммарная масса М стержня равна http://festival.1september.ru/articles/511391/Image341.gif; б) координата центра масс х’ равна http://festival.1september.ru/articles/511391/img9.gif.

Разобьем отрезок [а; b] на n равных частей точками а= х0 < х1 < х2 < … <хn= b (рис. ). На каждом из n этих отрезков плотность можно считать при больших n постоянно и примерно равной http://festival.1september.ru/articles/511391/Image340.gif (хk — 1) на k-м отрезке (в силу непрерывности http://festival.1september.ru/articles/511391/Image340.gif(х). Тогда масса k-ого отрезка примерно равна http://festival.1september.ru/articles/511391/Image343.gif а масса всего стержня равна http://festival.1september.ru/articles/511391/Image344.gif

Считая каждый из n маленьких отрезков материальной точкой массы mk , помещенной в точке http://festival.1september.ru/articles/511391/Image345.gif , получим по формуле (*), что координата центра масс приближенно находится так

http://festival.1september.ru/articles/511391/img10.gif

Кроме физики интегралы достаточно важны в экономике. Далее приведены 4 доказывающих это примера:

1. Пусть для некоторого технологического процесса известно, какая электрическая мощность необходима для работы оборудования как функция времени. Обычно мощность измеряют в ваттах (Вт) или производных от нее единицах, например, киловаттах (кВт). Требуется оценить затраты на электроэнергию, связанные с производством. Если потребляемая мощность постоянна, например, включен один станок, который работает без перерыва от начала до конца цикла продолжительностью T (часов), то затраты на электроэнергию вычисляются по простой формуле cWT, где c — это стоимость одного киловатт-часа, W — мощность оборудования (в киловаттах).Если же потребляемая мощность в связи с технологическими особенностями процесса является функцией времени W(t), то написанная формула не применима. Для расчета мощности разобьем промежуток времени T на малые промежутки  t, настолько малые, что функцию W(t) на них можно считать постоянной. На каждом из таких промежутков стоимость потребленной электроэнергии будет рассчитываться по рассмотренной формуле cW(t) t, причем функция W(t) считается постоянной в пределах промежутка  t, но для различных промежутков она имеет различные значения. Общая за все времяT стоимость электроэнергии составит сумму http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-001.gif по всем промежуткам  t. В пределе малых  t сумма перейдет, согласно определению определенного интегралаhttp://free.megacampus.ru/xbookM0017/book/files/predmetnyi.gif в http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-002.gif, то есть стоимость электроэнергии есть интеграл от произведения цены за один киловатт-час на потребляемую мощность, измеренную в киловаттах. Зная мощность и цену, можем вычислить производственные затраты. Аналогично вычисляются расходы воды, горючего и т. п.

2. Пусть издержки хранения на складе единицы продукции в единицу времени равны h, при этом количество хранимой продукции не постоянно, а меняется со временем (поступления и отгрузка) по закону f(t). Определить затраты на обслуживание склада. пределе для стоимости хранения получаем интеграл http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-003.gif.

3. Для характеристики некоторой меняющейся со временем величины часто используют понятие среднего значения. Например, если известна динамика стоимости c(t) и количества N(t) проданных акций на бирже в течение дня, то среднее значение стоимости акции определяется как затраты на покупку всех проданных акций деленные на количество проданных акций. Как и в предыдущих примерах, здесь возникает суммирование по малым промежуткам времени, которое в пределе и переходит в интегрирование. Таким образом, средняя цена акции будет даваться выражением

:http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-004.gif.

4.Пусть функция f(t) описывает производительность труда на некотором производстве с течением времени в пределах рабочей смены. Найдем объем продукции, произведенной за смену продолжительностью T( часов).Мы уже рассматривали экономический смысл производной и установили, что производительность труда есть производная от функции F(t), описывающей количество произведенной продукции от начала смены (http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-005.gif). Соответственно http://free.megacampus.ru/xbookM0017/files/matan-f-tema57-006.gif, то есть объем произведенной продукции есть интеграл от производительности труда.

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

1.3 Обсуждение задачи

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

2.  Выбор и обоснование численного метода решения задачи

2.1  Методы нахождения интеграла

Итак, изначально алгоритм принимает формулу интеграла, который требуется вычислить на промежутке от [-∞;+∞]. Это могут быть как обычные величины, например, x, так и тригонометрические: sin(x), cos(x). Такие интегралы вполне можно решить методом сведения интеграла к табличному, так называемой, подстановки под знак дифференциала. Например, если у нас есть интеграл , то решить его с помощью табличных интегралов нельзя. Но, если мы подставим выражение под знак дифференциала и приравняем новое выражение старому, мы получим: . В результате полученное выражение можно расценить как табличный интеграл №3, и получить ответ:, C — произвольная константа.

2.2 Математическая формулировка задачи

Требуется решить неопределенный интеграл, используя метод подведения под знак дифференциала.

Пусть требуется вычислить интеграл вида

∫ U(x) · v(x) dx ,

где  v(x)  имеет очевидную первообразную  V(x).

Тогда

∫ U(x) · v(x) dx  =  ∫ U(x) · V'(x) dx  =  ∫ U(x)  dV(x) .

Такого рода преобразование называется подведением под знак дифференциала, поскольку функция v(x) исчезает в интегрируемом выражении и появляется под знаком дифференциала в виде своей первообразной V(x).

Если функция U(x) выражается через функцию V(x) по некоторой формуле U(x) = w(V(x)), то

∫ U(x)  dV(x)   =  ∫ w(V(x)) dV(x)   =  ∫ w(t) dt,

где t = V(x). Таким образом отыскание исходного интеграла сводится к отысканию интеграла

∫ w(t) dt

В нем функция t = V(x) выступает как независимая переменная V, т. е. произошла замена переменной. Если интеграл

является табличным или известным образом сводится к табличному, т. е. можно найти некоторую первообразную Wфункции w, то

∫ w(t) dt  =  W(t) + C,

и искомый интеграл определяется формулой

∫ U(x) · v(x) dx  =  W(V(x)) + C.

3.  Разработка алгоритма

3.1  Разработка структур данных

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

3.2  Разработка структуры алгоритма

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

3.3  Схема алгоритма

 

Ниже приведена схема алгоритма вычисления значения неопределенного интеграла методом подведения под знак дифференциала. (рис. 1-12).

 

 

 

да

 

 

Рисунок 1 – Схема алгоритма решения интеграла типа ‘xdx’

x2:=AnsiPos(‘/(‘,arr);

 

 

 

 

 

 

 

 

нет

 

нет

 

 

Рисунок 2 – Схема алгоритма решения степенного интеграла

 

Блок-схема:

 

 

 

Рисунок 3 – Схема алгоритма решения интеграла типа “x/((x^(2)+C’)

 

Рисунок 4 – Схема алгоритма решения экспоненциального интеграла

 

 

Рисунок 5 – Схема алгоритма решения интеграла “a^(x)”

 

 

Рисунок 6 – Схема алгоритма решения интеграла типа “sin(x)^(n)*cos(x)”

 

Рисунок 7 – Схема алгоритма решения интеграла типа cos(x) и cos(x)^(2)

 

Рисунок 7 – Схема чтения алгоритма интеграла типа sin(x)^(x)*cos(x)

 

Рисунок 8 – Схема алгоритма анализа интеграла табличного интеграла типа типа sin(x)^(x)*cos(x)

Блок-схема: ссылка на другую страницу:

 

Рисунок 9 – Схема алгоритма решения интеграла типа sin(x)^(x)*cos(x)

 

Рисунок 10 – Схема алгоритма чтения табличных интеграла типа 1/(x^(2)+a^(2))

 

Рисунок 11 – Схема алгоритма анализа табличных интегралов 1/(x^(2)+a^(2))

 

Блок-схема:

Рисунок 12 – Схема алгоритма решения табличных интегралов 1/(x^(2)+a^(2))

4.  Текст программы

4.1  Описание переменных и структур данных

Для выполнения расчёта неопределенного интеграла были созданы структуры arra=array of string[MaxSize] и ShString=string[MaxSize] и, соответственно, константы MaxSize=50 и maxcoordinates=255.

4.2  Описание функций

Программа делится на 5 подпрограмм:

procedure tabular_integrals (var arr: ShString;var flag:boolean); – анализ и решение интегралов методом подведения под знак дифференциала табличного интеграла. Структуры данных, используемых в подпрограмме tabular_integrals, приведены в таблицах 1-2.

Таблица 1 — Структуры данных, используемые в tabular_integrals

Имя

Тип

Предназначение

формальные параметры

arr

ShString

Строка, содержащая вводимое пользователем выражение

flag

boolean

номер вводимого элемента

локальные переменные

x1

byte

Переменная для анализа типа интеграла

x0

byte

Переменная для анализа типа интеграла

x2

byte

Переменная для анализа типа интеграла

x3

byte

Переменная для анализа типа интеграла

x4

byte

Переменная для анализа типа интеграла

x5

byte

Переменная для анализа типа интеграла

x6

byte

Переменная для анализа типа интеграла

x7

byte

Переменная для анализа типа интеграла

f

integer

Переменная-счетчик позиций в строке

pr

integer

Переменная для проверки ввода коэффициента

z

integer

Переменная-счетчик позиций в строке

j

integer

Переменная-счетчик позиций в строке

start

integer

Координата начала считывания строки

theend

integer

Координата конца считывания строки

flag_of_ distribution Einz

boolean

Логическая переменная, для распределения считывания и анализа подстроки, содержащей коэффициенты.

substr

ShString

Вспомогательная подстрока

Таблица 2 — Структуры данных, используемые в tabular_integrals (продолжение)

flag_of_ distribution

Zwei

boolean

Логическая переменная, для распределения считывания и анализа подстроки, содержащей коэффициенты.

substr2

ShString

Вспомогательная подстрока

substr3

ShString

Вспомогательная подстрока

substr4

ShString

Вспомогательная подстрока

substrSymb

ShString

Вспомогательная подстрока

numb

real

Вспомогательная переменная для хранения коэффициента элемента строки

numbX

real

Вспомогательная переменная для хранения коэффициента перед X

firstnumb

real

Вспомогательная переменная для хранения коэффициента перед выражением

subnumb

real

Дополнительная переменная для расчета коэффициента перед выражением в интеграле типа sin(x)^(2)*cos(x)

mark

char

переменная-символ, несущая знак исходного выражения

procedure check_substr (substr:ShString;var number:real); –Считываение коэффициента из подстроки substr в переменную number. Структуры данных, используемых в подпрограмме check_substr, приведены в таблице 3.

Таблица 3 — Структуры данных, используемые в check_substr

Имя

Тип

Предназначение

формальные параметры

substr

ShString

Подстрока, содержащая некоторый коэффициент

number

real

Считываемый коэффициент

локальные переменные

pr

integer

Переменная для проверки считывания коэффициента

procedure find_numb(arr:string;start:integer;ended:string;var number:real); –Считываение коэффициента из строки arr, ограниченной переменными start и ended, в переменную number. Структуры данных, используемых в подпрограмме find_numb, приведены в таблице 4.

Таблица 4 — Структуры данных, используемые в find_numb

Имя

Тип

Предназначение

формальные параметры

arr

ShString

Cтрока, содержащая некоторый коэффициент

number

real

Считываемый коэффициент

start

string

Начальная позиция считывания

ended

string

Конечная позиция считывания

локальные переменные

substr

ShString

Вспомогательная подстрока для считывания коэффициента

procedure find_express(arr:string;start:integer;ended:string;var substr:Shstring);-

Считывание элементов строки arr, ограниченной переменными start и ended, в подстроку substr. Структуры данных, используемых в подпрограмме find_express, приведены в таблице 5.

Таблица 5 — Структуры данных, используемые в find_express

Имя

Тип

Предназначение

формальные параметры

arr

ShString

Cтрока, содержащая некоторый коэффициент

substr

ShString

Вспомогательная подстрока для считывания коэффициента

start

string

Начальная позиция считывания

ended

string

Конечная позиция считывания

4.3  Текст программы на языке программирования Borland Pascal 7.0

Ниже представлен текст программы, позволяющей решить интеграл методом подведения под знак дифференциала.

unit kurswork;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls;

Const maxcoordinates=255;

Const maxSize=50;

type

arra=array of string[maxSize];

ShString=string[maxSize];

TMainProgram = class(TForm)

ElementsTOInput: TRadioGroup;// объект для ввода дополнительных элементов в строку

infM: TLabel;//Объект с информацией о вводе М

infY: TLabel;// Объект с информацией о вводе Y

InputM: TEdit; // Объект ввода М

InputY: TEdit; //Объект ввода Y

InfInput: TLabel; // Объект с информацией о вводе строки

InputString: TEdit;

dx: TLabel; // dx

InfOutput: TLabel; //Обхект с информацией о строке вывода

OutputString: TEdit;

plusC: TLabel; // +C

StartInputElement: TButton;// объект, позволяющий вставить в строку дополнительный элемент

Start: TButton;//объект для запуска программы

Inf_Input: TMemo; //объект, содержащий правила ввода данных.

procedure StartInputElementClick(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainProgram: TMainProgram;

implementation

{$R *.dfm}

procedure check_substr(substr:Shstring;var number:real);

var pr:integer;

begin

if (substr=’+’)or(substr=’-‘) or(substr=») then

number:=1

else

val(substr, number, pr);

if pr<>0 then

begin

ShowMessage(‘Обнаружено некорректное значение!’);

number:=1;

end;

end;

procedure find_numb(arr:string;start:integer;ended:string;var number:real);

var substr:string[maxSize];

begin

substr:=»;

while (arr[start]<>ended) do

begin

substr:=substr+arr[start];

inc(start);

end;

check_substr(substr, number);

end;

procedure find_express(arr:string;start:integer;ended:string;var substr:Shstring);

begin

while (arr[start]<>ended) do

begin

substr:=substr+arr[start];

inc(start);

end;

substr:=substr+arr[start];

end;

procedure tabular_integrals(var arr:ShString;var flag:boolean);

var x1,x0,x, x2,x3,x4,x5,x6,x7:byte;

f, pr, z,j, start, theend:integer;

flag_of_dustributionEinz, flag_of_dustributionZwei:boolean;

substr, substr2,substr3,substr4,substrSymb:ShString;

numb, numbX, firstnumb, subnumb:real;

mark:char;

begin

flag:=false;

end_of_action:=false;

f:=0;

z:=0;

j:=0;

x0:=AnsiPos(‘x’,arr);

mark:=arr[1];

if (x0=0) then

begin

arr:=arr+’x’;

flag:=true;

end;

//———————————————————

if ((x0<>0)and(AnsiPos(‘^’,arr)=0)and(AnsiPos(‘/’,arr)=0)and(AnsiPos(‘sin’,arr)=0)and(AnsiPos(‘cos’,arr)=0)) then

begin

find_numb(arr,2,’x’,numbX);

str((numbX/2):3:3,substr);

arr:=mark+substr+’x^(2)’;

flag:=true;

end;

x1:=AnsiPos(‘x^(‘,arr); //

if ((x1>0)and(AnsiPos(‘/’,arr)=0)and(flag=false)) then

begin

find_numb(arr,1,’x’,numbX);

find_numb(arr, x1+3,’)’,numb);

str((numbX/(numb+1)):3:3,substr);

str((numb+1):3:3,substr2);

arr:=mark+substr+’x^(‘+substr2+’)’;

flag:=true;

end;

//———————————————————

x2:=AnsiPos(‘/(‘,arr);

if ((x2>0)and(AnsiPos(‘^’,arr)=0)and(arr[x2-1]<>’x’)and(flag=false)) then

begin

if ((AnsiPos(‘x’,arr)>0)) then

begin

flag:=true;

j:=1;

z:=AnsiPos(‘(‘,arr);

find_express(arr, z,’)’,substr);

z:=AnsiPos(‘x’,arr);

arr[1]:=’1′;

if (((arr[z+1])=’+’)or((arr[z+1])=’-‘)) then

begin

start:=AnsiPos(‘(‘,arr)+1;

theend:=AnsiPos(‘+’,arr)+AnsiPos(‘-‘,arr);;

end;

if (arr[z+1])=’)’ then

begin

start:=AnsiPos(‘+’,arr)+AnsiPos(‘-‘,arr)+1;

theend:=AnsiPos(‘)’,arr);

end;

find_express(arr, start, arr[theend-2],substr2);

check_substr(substr2,numbX);

str((1/numbX):3:6,substr2);

arr:=mark+substr2+’Ln(‘+substr+’)’;

end;

end

else

begin

if ((Pos(‘x/(‘,arr)>0)and(flag=false)) then

begin

if ((Pos(‘x’,arr)>0)and(arr[x2+1]<>’^’)) then

begin

arr[1]:=’0′;

flag:=true;

z:=Pos(‘x^’,arr);

f:=Pos(‘)’,arr);

j:=1;

if (((arr[f+1])=’+’)or((arr[f+1])=’-‘)) then

begin

start:=Pos(‘(‘,arr)+1;

theend:=z;

end;

if (arr[f+1]=’)’)or(arr[f+1]=’^’) then

begin

start:=Pos(‘+’,arr)+Pos(‘-‘,arr)+1;

theend:=z;

end;

find_express(arr, start, arr[theend-1],substr3);

j:=1;

for z:=AnsiPos(‘(‘,arr) to length(arr) do

begin

substr4:=substr4+arr[z];

inc(j);

end;

find_numb(arr,2,’x’,firstnumb);

find_numb(arr, AnsiPos(‘^’,arr)+2,’x’,numb);

check_substr(substr3,numbX);

str(firstnumb/(numbX*numb):5:5,substr);

arr:=mark+substr+’Ln(‘+substr4+’)’;

end;

end;

end;

//—————————————————

x3:=AnsiPos(‘e^(‘,arr);

if ((x3>0)and(AnsiPos(‘x’,arr)>0)and(flag=false)) then

begin

if arr[2]<>’e’ then

for j:=2 to AnsiPos(‘e’,arr)-1 do

substr2:=substr2+arr[j];

j:=2;

substr[j-1]:=’1′;

substr[1]:=mark;

find_numb(arr, x3+3,’x’,numbX);

check_substr(substr2,firstnumb);

str(firstnumb/(numbX):5:5,substr);

for z:=AnsiPos(‘e’,arr) to Length(arr) do

substr:=substr+arr[z];

arr:=mark+substr;

flag:=true;

end;

//____________——————————————

x4:=Pos(‘^’,arr)-1;

if((Pos(‘^(‘,arr)>0)and(flag=false)and(Pos(‘x’,arr)>0)and((ord(arr[x4])>=48)or(ord(arr[x4])<=57))and(AnsiPos(‘/’,arr)=0)and(x1=0)and((AnsiPos(‘sin’,arr)+AnsiPos(‘cos’,arr))=0)) then

begin

find_numb(arr, AnsiPos(‘(‘,arr)+1,’x’,firstnumb);

find_numb(arr,2,’^’,numb);

numb:=((Power(numb, firstnumb)):5:5,substr2;

arr:=mark+arr+’/(Ln(‘+substr2+’)»)’;

flag:=true;

end;

//—————————————————————————

if ((AnsiPos(‘sin’,arr)<>0)and(AnsiPos(‘x’,arr)<>0)and(flag=false)and(AnsiPos(‘cos’,arr)=0)) then

if (AnsiPos(‘^’,arr)<>0) then

begin

find_numb(arr, AnsiPos(‘n’,arr)+2,’x’,numbX);

find_numb(arr,2,’s’,firstnumb);

str((firstnumb/(numbX*4)):5:5,substr);

str((numbX*2):5:5,substr2);

if mark=’+’ then

arr:=’-‘+substr+'(‘+substr2+’x)-sin(‘+substr2+’x)’

else

arr:=’+’+substr+'(‘+substr2+’x)-sin(‘+substr2+’x)’;

flag:=true;

end

else

begin

find_numb(arr, AnsiPos(‘n’,arr)+2,’x’,numbX);

find_numb(arr,2,’s’,firstnumb);

str(firstnumb/(numbX):5:5,substr);

str(numbX:5:5,substr2);

if mark=’+’ then

substr:=’-‘+substr+’*cos(‘+substr2+’x)’

else

substr:=substr+’*cos(‘+substr2+’x)’;

arr:=substr;

flag:=true;

end;

//———————————————————————————————

x6:=AnsiPos(‘cos’,arr);

if ((x6<>0)and(AnsiPos(‘x’,arr)<>0)and(flag=false)and(AnsiPos(‘sin’,arr)=0)) then

if (AnsiPos(‘^’,arr)<>0) then

begin

find_numb(arr, AnsiPos(‘s’,arr)+2,’x’,numbX);

find_numb(arr,2,’c’,firstnumb);

str((firstnumb/(numbX*4)):5:5,substr);

str((numbX*2):5:5,substr2);

arr:=mark+substr+'(‘+substr2+’x)+sin(‘+substr2+’x)’;

flag:=true;

end

else

begin

find_numb(arr, AnsiPos(‘s’,arr)+2,’x’,numbX);

find_numb(arr,2,’c’,firstnumb);

str(firstnumb/(numbX):5:5,substr);

str(numbX:5:5,substr2);

arr:=mark+substr+’*sin(‘+substr2+’x)’;

flag:=true;

end;

//——————————————————————————————————————————————

if ((AnsiPos(‘sin’,arr)<>0)and(AnsiPos(‘cos’,arr)<>0)and(AnsiPos(‘x’,arr)<>0)and(AnsiPos(‘^’,arr)<>0)and(flag=false)) then

begin

for z:=1 to length(arr) do

if arr[z]=’x’ then

inc(f);

if f=2 then

begin

x:=AnsiPos(‘^’,arr);

z:=AnsiPos(‘o’,arr)+3;

f:=AnsiPos(‘n’,arr)+2;

while arr[x]<>'(‘ do

dec(x);

if ((arr[x-1]=’n’)and(arr[z]=arr[f])) then

begin

find_numb(arr, AnsiPos(‘n’,arr)+2,’x’,numbX);

find_numb(arr, AnsiPos(‘^’,arr)+2,’)’,numb);

if AnsiPos(‘s’,arr)<AnsiPos(‘c’,arr) then

find_numb(arr,2,’s’,firstnumb)

else

find_numb(arr,2,’c’,firstnumb);

subnumb:=firstnumb;

if AnsiPos(‘s’,arr)<AnsiPos(‘c’,arr) then

find_numb(arr, AnsiPos(‘*’,arr)+1,’c’,firstnumb)

else

find_numb(arr, AnsiPos(‘*’,arr)+1,’s’,firstnumb);

firstnumb:=firstnumb*subnumb;

numb:=numb+1;

str(firstnumb/(numbX*numb):5:5,substr3);

str(numb:5:5,substr);

str(numbX:5:5,substr2);

arr:=mark+substr3+’sin(‘+substr2+’x)^(‘+substr+’)’;

flag:=true;

end

else

begin

find_numb(arr, AnsiPos(‘o’,arr)+3,’x’,numbX);

find_numb(arr, AnsiPos(‘^’,arr)+2,’)’,numb);

if AnsiPos(‘s’,arr)<AnsiPos(‘c’,arr) then

find_numb(arr,2,’s’,firstnumb)

else

find_numb(arr,2,’c’,firstnumb);

subnumb:=firstnumb;

flag:=true;

if AnsiPos(‘s’,arr)<AnsiPos(‘c’,arr) then

find_numb(arr, AnsiPos(‘*’,arr)+1,’c’,firstnumb)

else

find_numb(arr, AnsiPos(‘*’,arr)+1,’s’,firstnumb);

firstnumb:=firstnumb*subnumb;

numb:=numb+1;

str(firstnumb/(numbX*numb):5:5,substr3);

str(numb:5:5,substr);

str(numbX:5:5,substr2);

if mark=’+’ then

arr:=’-‘+substr3+’cos(‘+substr2+’x)^(‘+substr+’)’

else

arr:=’+’+substr3+’cos(‘+substr2+’x)^(‘+substr+’)’;

end;

end;

end;

//———————————————————————————————

x7:=AnsiPos(‘/’,arr);

z:=AnsiPos(‘^’,arr)+2;

if ((x7<>0)and(AnsiPos(‘x^’,arr)<>0)and(arr[z]=’2′)and(flag=false)) then

begin

arr[1]:=’0′;

find_numb(arr,2,’/’,subnumb);

z:=AnsiPos(‘(‘,arr)+1;

flag_of_dustributionEinz:=false;

flag_of_dustributionZwei:=false;

while (z<=length(arr)) do

begin

if ((z<AnsiPos(‘+’,arr))or(z<AnsiPos(‘-‘,arr))) then

begin

if flag_of_dustributionEinz<>true then

if arr[z]=’x’ then

begin

flag:=true;

flag_of_dustributionEinz:=true;

end

else

substr:=substr+arr[z];

end

else

begin

if flag_of_dustributionZwei<> true then

if ((arr[z]=’x’)or(arr[z]=’)’)) then

begin

flag:=false;

flag_of_dustributionZwei:=true;

end

else

substr2:=substr2+arr[z];

end;

inc(z);

end;

z:=0;

if flag=true then

begin

check_substr(substr2,numb);

check_substr(substr3,numbX);

val(substr3,numbX, pr);

val(substr2,numb, pr);

firstnumb:=subnumb;

if firstnumb=0 then

firstnumb:=1;

numbX:=abs(numbX);

numb:=abs(numb);

numbX:=sqrt(numbX);

numb:=sqrt(numb);

str(firstnumb/(numbX*numb):3:3,substr);

str(numbX:3:3,substr3);

str(numb:3:3,substr2);

if (AnsiPos(‘+’,arr)<>0) then

arr:=mark+'(‘+substr+’)arctg(‘+substr3+’x/’+substr2+’)’

else

arr:=mark+'(2*’+substr+’)ln|(‘+substr3+’x+’+substr2+’)/(‘+substr3+’x-‘+substr2+’)|’;

end

else

begin

check_substr(substr2,numbX);

check_substr(substr, numb);

val(substr2,numbX, pr);

val(substr, numb, pr);

firstnumb:=subnumb;

numbX:=abs(numbX);

numb:=abs(numb);

numbX:=sqrt(numbX);

numb:=sqrt(numb);

if firstnumb=0 then

firstnumb:=1;

str(firstnumb/(numbX*numb):5:5,substr3);

str(numbX:5:5,substr2);

str(numb:5:5,substr);

if (AnsiPos(‘+’,arr)<>0) then

arr:=mark+'(‘+substr3+’)arctg(‘+substr2+’x/’+substr+’)’

else

arr:=mark+'(2*’+substr3+’)ln|(‘+substr2+’x+’+substr+’)/(‘+substr2+’x-‘+substr+’)|’;

end;

end;

end;

//——————————————————————————————

procedure TMainProgram. StartInputElementClick(Sender: TObject);

var pr:integer;

begin

// if ((InputString. MaxLength>0)and(ord(InputString. Ce InputString. Text:=InputString. Text+ ‘cos(‘+InputM. Text+’x)’;

try

pr:=strtoint(InputM. Text);

if (ElementsTOInput. ItemIndex=6) or (ElementsTOInput. ItemIndex=7) then

pr:=strtoint(InputY. Text);

except

on EconvertError do

ShowMessage(‘Ошибка считывания численного значения!!!’);

end;

case ElementsTOInput. ItemIndex of

0 : InputString. Text:=InputString. Text+ ‘e^(‘+InputM. Text+’x)’;

1 : InputString. Text:=InputString. Text+ ‘sqrt(‘+InputM. Text+’x)’;

2 : InputString. Text:=InputString. Text+ ‘x^(‘+InputM. Text+’)’;

3 : InputString. Text:=InputString. Text+ ‘a^(‘+InputM. Text+’x)’;

4 : InputString. Text:=InputString. Text+ ‘sin(‘+InputM. Text+’x)’;

5 : InputString. Text:=InputString. Text+ ‘cos(‘+InputM. Text+’x)’;

6 : InputString. Text:=InputString. Text+ ‘sin(‘+InputM. Text+’x)^(‘+InputY. Text+’)’;

7 : InputString. Text:=InputString. Text+ ‘cos(‘+InputM. Text+’x)^(‘+InputY. Text+’)’;

else

ShowMessage(‘Ошибка ввода.’);

end;

end;

procedure checkinputstring(input:string;var flag_of_input:boolean);

var z:integer;

begin

z:=1;

flag_of_input:=true;

while ((z<=length(input))and(flag_of_input=true)) do

if ((ord(input[z])<40)or(ord(input[z])>57)) then

begin

if ((ord(input[z])<>37)and(ord(input[z])<>120)and(ord(input[z])<>94)and(ord(input[z])<>99)and(ord(input[z])<>105)and(ord(input[z])<>115)and(ord(input[z])<>110)and(ord(input[z])<>101)and(ord(input[z])<>111)) then

begin

flag_of_input:=false;

MessageDLG(‘Ошибка! Вы ввели недопустимый символ в строку ввода.’,mtError, mbOKCancel,0);

end

else

inc(z);

end

else

inc(z);

if ((AnsiPos(‘*’,input)>0)and((AnsiPos(‘sin’,input)=0)or(AnsiPos(‘cos’,input)=0))) then

begin

flag_of_input:=false;

MessageDLG(‘Ошибка! Знак умножения можно употреблять только совместно между sin и cos’,mtError, mbOKCancel,0);

end;

z:=AnsiPos(‘^’,input);

if ((z>0)and(input[z+1]<>'(‘)) then

begin

flag_of_input:=false;

MessageDLG(‘Ошибка! Степень можно записывать только в скобках’,mtError, mbOKCancel,0);

end;

z:=(AnsiPos(‘sin’,input)+AnsiPos(‘cos’,input));

if (not((AnsiPos(‘sin’,input)>0)and(AnsiPos(‘cos’,input)>0))and(z<>0)and(input[z+3]<>'(‘)) then

begin

flag_of_input:=false;

MessageDLG(‘Ошибка! Подсинусоидоное или подкосинусоидное выражение можно записывать только в скобках’,mtError, mbOKCancel,0);

end;

end;

procedure TMainProgram. StartClick(Sender: TObject);

var i, j,k, sizeofarr:integer;

input:string[255];

arr:arra;

switch:byte;

mark:char;

flag, flag_of_input, switch_of_string:boolean;

begin

switch:=0;

switch_of_string:=true;

sizeofarr:=0;

input:=InputString. Text;

i:=1;

checkinputstring(input, flag_of_input);

if ((input[1]=’+’) or (input[1]=’-‘)) then

begin

mark:=input[1];

input[1]:=’0′;

end;

if flag_of_input<>false then

begin

while i<>Length(input) do

begin

if (input[i]='(‘) then

inc(switch);

if (input[i]=’)’) then

dec(switch);

if (((input[i]=’+’) or (input[i]=’-‘))and(switch=0)) then

begin

inc(sizeofarr);

end;

inc(i);

end;

SetLength(arr, sizeofarr+1);

inc(sizeofarr);

j:=0;

k:=0;

i:=-1;

//———————————————————

if ((input[1]<>’0′) and (input[1]<>’0′)) then

arr[0]:=arr[0]+’+’

else

arr[0]:=mark;

//for i:=0 to sizeofarr do

j:=0;

switch:=0;

OutputString. Text:=»;

repeat

inc(i);

While ((((input[j+1]<>’+’)and(input[j+1]<>’-‘))or(switch>0))and(j<Length(input))) do

begin

inc(j);

if (input[j+1]='(‘) then

inc(switch);

if (input[j+1]=’)’) then

dec(switch);

arr[i]:=arr[i]+input[j];

end;

inc(j);

if i<(sizeofarr-1) then

arr[i+1]:=arr[i+1]+input[j];

until((j>=Length(Input))or(switch>0));

for i:=0 to sizeofarr-1 do

begin

tabular_integrals(arr[i],flag);

if flag then

OutputString. Text:=OutputString. Text+arr[i]

else

OutputString. Text:=’К сожалению, интеграл решить не удалось…’;

end;

end;

end;

procedure TMainProgram. FormCreate(Sender: TObject);

begin

InputString. Text:=»;

OutputString. Text:=»;

MainProgram. BorderStyle:=bsSingle;

end;

end.

5.  Тестовый ввод

5.1  Аналитическое решение и умозрительные результаты

Рассчитаем вручную несколько интегралов: “3x^(2)”, “3sin(2x)^(2)*3cos(2x)”, “3e^(2x)”. Для этого воспользуемся программой Wolfram Alpha (рис. 13).

Рисунок 13. Результаты аналитического решения.

5.2  Решение, полученное с использованием разработанного ПО.

Теперь, получив результаты аналитического решения, мы можем сравнить их с результатами, полученными в процессе выполнения программы (рис.13).

Рисунок 13 – Результаты тестового ввода данных в программу.

5.3 Выводы

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

5. Инструкция пользователю

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

Заключение

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

Наташа

Автор

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

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020

А ты боишься COVID-19?

 Пройди опрос и получи промокод