Решение инженерно-технических задач с использованием средств визуального программирования

 












КУРСОВАЯ РАБОТА

по дисциплине "Информатика"

РЕШЕНИЕ ИНЖЕНЕРНО-ТЕХНИЧЕСКИХ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ

Оглавление


Введение

1. Расчет трансформатора питания

2. Расчет и построение амплитудно-частотной характеристики колебательного контура

3. Численное интегрирование аналитически заданной функции

4. Численное решение нелинейных уравнений с заданной точностью

5. Численное решение дифференциальных уравнений первого порядка

Заключение

Список используемой литературы

Введение


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

Цель работы:

1.Дальнейшее развитие и закрепление знаний основ информатики.

2.Умение решать с помощью персонального компьютера задач программными методами с возможным использованием одного из алгоритмических языков программирования.

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

С использованием средств визуального программирования необходимо написать программы для решения пяти задач:

.Расчет трансформатора питания.

2.Расчет и построение амплитудно-частотное характеристики колебательного контура.

.Численное интегрирование аналитически заданной функции.

.Численное решение нелинейных уравнений с заданное точностью.

.Численное решение дифференциальных уравнений первого порядка.

Программы должны позволять вводить исходные данные, выводить необходимые расчетные параметры.

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

1. Расчет трансформатора питания


Постановка задачи:

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


Исходные данные:

U, ВS, Кв. смnmU1, ВI1, АU2, ВI2, АU3, ВI3, А11040,82295,065,0--

Для расчетов используются следующие приближенные зависимости:

Габаритная мощность (P) трансформатора вычисляется по формуле


(ватт),


где m - количество вторичных обмоток, n - коэффициент полезного действия; U (i) - напряжение на i-ой вторичной обмотке (вольт); I (i) - величина тока в i-ой вторичной обмотке (ампер).

Количество витков первичной обмотки трансформатора определяется зависимостью:



где U - напряжение сети (вольт); S - площадь сечения сердечника (кв. см).

Диаметр провода первичной обмотки определяется по формуле:


(мм).


Количество витков i-ой вторичной обмотки - по выражению:


.


Диаметр провода i - ой вторичной обмотки - по формуле:


(мм).


Структура программы:

1.Подключение библиотек

2.Ввод исходные данные

.Написание функции calc для вычисления K (i), D (i), Ko и Do в зависимости от введенного пользователем U, Ui, Ii, i

.Описание в окне буквенных обозначений

.Создание виджетов

5.1.Создание полей для введения пользователем U, Ui, Ii, i

5.2.Создание в окне ячеек для выведения конечного результата

.3.Создание в окне кнопок

.4.Отображение главного окна

Код программы:


# - * - coding: utf-8 - *-

# импорт библиотекmath import*Tkinter import*

# ввод исходных данных (из табл.1)=4=0.82= []= []

# написание функции для вычисления K (i), D (i), Ko и Do в зависимости от введенного пользователем U, Ui, Ii, i

def calc ():=0=int (x_entry. get ())=x-1=int (U_entry. get ()). append (int (U1_entry. get ())). append (int (U2_entry. get ())). append (int (I1_entry. get ())). append (int (I2_entry. get ()))i in range (2):+=Ui [i] *Ii [i]

P=P/n= (1.83) * (10**6) * (0.95) / (U*S)='%.3f' % Ko

Ko_label. configure (text= ('Ko=',Ko))=sqrt (P/ (U*2))='%.3f' % Do_label. configure (text= ('Do=',Do))

Pk=38*Ui [x] *1.05/S='%.3f' % Pk

Ki_label. configure (text= ('Ki=',Pk))=sqrt (Ii [x] /2.0)='%.3f' % Pd_label. configure (text= ('Di=',Pd))

программирование трансформатор питание алгоритмический

# осуществление вывода на экран окна программы и последующим выводом результатов вычисления

root = Tk (). title ("Задание № 1")

frame = Frame (root). pack ()_label = Label (frame, bg='green', text="Вычисление количества витков и диаметра провода i-ой вторичной обмотки трансформатора", font='arial 10')_label. grid (row=0, column=1, columnspan=4, padx=25,pady=15)

# написание в окне буквенных обозначений_label = Label (frame, text="P - габаритная мощность трансформатора; ")_label. grid (row=1, column=0, columnspan=4, sticky=W, padx=5)

t4_label = Label (frame, text="m - количество вторичных обмоток; ")

t4_label. grid (row=2, column=0, columnspan=4, sticky=W, padx=5)_label = Label (frame, text="n - коэффициент полезного действия; ")_label. grid (row=3, column=0, columnspan=4, sticky=W, padx=5)_label = Label (frame, text="U (i) - напряжение на i-ой вторичной обмотке; ")_label. grid (row=4, column=0, columnspan=4, sticky=W, padx=5)_label = Label (frame, text="I (i) - величина тока в i-ой вторичной обмотке; ")_label. grid (row=5, column=0, columnspan=4, sticky=W, padx=5)

t8_label = Label (frame, text="Ko - количество витков первичной обмотки трансформатора. ")

t8_label. grid (row=6, column=0, columnspan=4, sticky=W, padx=5)

t9_label = Label (frame, text="U - напряжение сети; ")

t9_label. grid (row=1, column=3, columnspan=4, sticky=W, padx=5)_label = Label (frame, text="S - площадь сечения сердечника; ")_label. grid (row=2, column=3, columnspan=4, sticky=W, padx=5)

t11_label = Label (frame, text="Do - диаметр провода первичной обмотки трансформатора; ")

t11_label. grid (row=3, column=3, columnspan=4, sticky=W, padx=5)

t12_label = Label (frame, text="K (i) - количество витков i-ой вторичной обмотки трансформатора; ")

t12_label. grid (row=4, column=3, columnspan=4, sticky=W, padx=5)_label = Label (frame, text="D (i) - диаметр провода i-ой вторичной обмотки трансформатора; ")_label. grid (row=5, column=3, columnspan=4, sticky=W, padx=5)

# поле для введения пользователем U, Ui, Ii, i

x_label = Label (frame, text="Введите i (от 1 до 2)")_label. grid (row=7, column=0, padx=5)_entry = Entry (frame,)_entry. grid (row=7, column=1,sticky=W, pady=5, padx=5)

#_label = Label (frame, text="Введите U")_label. grid (row=7, column=2)

U_entry = Entry (frame,)_entry. grid (row=7, column=3,sticky=W, pady=5, padx=5)

#_label = Label (frame, text="Введите U1")_label. grid (row=8, column=0, padx=5)

U1_entry = Entry (frame,)_entry. grid (row=8, column=1,sticky=W, pady=5, padx=5)

#_label = Label (frame, text="Введите U2")_label. grid (row=9, column=0, padx=5)

U2_entry = Entry (frame,)_entry. grid (row=9, column=1,sticky=W, pady=5, padx=5)

#_label = Label (frame, text="Введите I1")_label. grid (row=8, column=2, padx=5)_entry = Entry (frame,)_entry. grid (row=8, column=3,sticky=W, pady=5, padx=5)

#_label = Label (frame, text="Введите I2")_label. grid (row=9, column=2, padx=5)_entry = Entry (frame,)_entry. grid (row=9, column=3,sticky=W, pady=5, padx=5)

# размещение в окне ячеек для выведения конечного результата

Ko_label = Label (frame, bg='white', text= ("Ko=?"))_label. grid (row=7, column=4, sticky=W, padx=2)_label = Label (frame,, bg='white', text="Ki=?")_label. grid (row=7, column=5,pady=5)_label = Label (frame, bg='white', text= ("Do=?"))_label. grid (row=8, column=4, sticky=W, padx=2)_label = Label (frame, bg='white', text="Di=?")_label. grid (row=8, column=5,pady=5)

# выведение в окне кнопок "Вычислить" и "Выйти"_button = Button (frame, bg='green', text="Вычислить", command=calc)_button. grid (row=9, column=4, sticky=W, pady=10)_button = Button (frame, bg='grey', text="Выйти", command=root. destroy)_button. grid (row=9, column=5, padx=10,pady=10)

#. mainloop ()

Результат решения:




Вывод:

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


2. Расчет и построение амплитудно-частотной характеристики колебательного контура


Постановка задачи:

По заданному выражению для амплитудно-частотной характеристики резонансного контура


,


Где K - коэффициент усиления, WP - резонансная частота, W - текущая частота,

Z - относительный коэффициент затухания, рассчитать таблицу значений A (W) при изменении частоты W от 0 до Wкон с шагом DW=0,1*Wкон при различных значениях относительного коэффициента затухания Z, изменяющегося от Zнач до Zкон с шагом Zшаг.

По данным таблицы построить на осях координат A (W), W графики изменения амплитуды A (W) от частоты W для различных значений Z.


Исходные данные:

KWPWконZначZконZшаг7,58,5170,20,80,30

Структура программы:

1.Подключение библиотек

2.Введение исходных данных

.Расчет значений Z

.Создание виджетов

4.1.Создание главного окна

4.2.Создание графика относительно исходных данных

.3.Описание в окне буквенных обозначений

.4.Создание таблицы значений

.5.Отображение главного окна

Код программы:\


# * - coding: utf-8 - *-Tkinter import *math import*=7.5=8.5=17=0=1.7=0.2=0.8=0.3=zn= []=0= []zn <= 0.8:= []i in range (0, 17.01):= (k* (wp**2)) / (sqrt ( ( ( (wp**2) - (w0**2)) **2) + 4* (zn**2) * (wp**2) * (w0**2))). append (a1)=w0+dw

zn=zn+dz. append (s)

root = Tk () # создание окна. title ("2 задание ")

#=Canvas (root,bg='white', width =200, height=220). grid (row=5, column=1,padx=10,pady=10)=m [0]= []=1.7i in range (0,17):=point1 [i]= (12*i*dx, 200-11*y). append (pp)line1 ():. create_line (points1,fill="blue",smooth=1). create_text (40,75,text="при z=0.2")=m [1]= []=1.7i in range (0,17):=point2 [i]= (12*i*dx, 200-100*y). append (pp)line2 ():. create_line (points2,fill="red",smooth=1). create_text (40,175,text="при z=0.5")=m [2]= []=1.7i in range (0,17):=point3 [i]= (12*i*dx, 200-200*y). append (pp)line3 ():. create_line (points3,fill="black",smooth=1). create_text (105, 209,text="при z=0.8")

#_axe= []= (10,0)_axe. append (yy)

yy= (10,220)_axe. append (yy). create_line (y_axe,fill="black",width=1). create_line (8,8,10,3,fill="black",width=1). create_line (10,3,12,8,fill="black",width=1). create_text (25,15,text="A (W)")

#_axe= []= (0, 200)_axe. append (xx)= (299, 200)_axe. append (xx). create_line (x_axe,fill="black",width=1). create_line (192, 198, 197, 200,fill="black",width=1). create_line (192, 202, 197, 200,fill="black",width=1). create_text (190,213,text="W")

#_label = Label (root, bg='green', fg='black', text="Расчет и построение амплитудно-частотной характеристики \nс колебательного контура", font='arial 12')_label. grid (row=0, column=0, columnspan=2, padx=25,pady=15)_label = Label (root, text="A (W) - амплитуда колебаний; ")_label. grid (row=1, column=1, columnspan=4, sticky=W, padx=5)

t3_label = Label (root, text="W - частота; ")

t3_label. grid (row=2, column=1, columnspan=4, sticky=W, padx=5)_label = Label (root, text="Z - относительный коэффициент затухания; ")_label. grid (row=3, column=1, columnspan=4, sticky=W, padx=5)

#_button = Button (root, bg='green', fg='black',text="График при Z =0.2",,command=line1)_button. grid (row=1, column=0, padx=10,pady=10)_button = Button (root, bg='green', fg='black',text="График при Z =0.5",,command=line2)_button. grid (row=2, column=0, padx=10,pady=10)_button = Button (root, bg='green', fg='black',text="График при Z =0.8",,command=line3)_button. grid (row=3, column=0, padx=10,pady=10)

#_button = Button (root, bg='grey', fg='black',text="Exit",,command=root. destroy)_button. grid (row=4, column=0, padx=10,pady=10)

#=Text (root,width=30, height=15, font = "areal 10"). grid (row=5, column=0,padx=10,pady=10)

text1. insert (END, "W\t A (Z1) \t A (Z2) \t A (Z3) \n")

for i in range (11):. insert (END, "%.2f \t %.2f \t %.2f \t %.2f\n" % (i*dw,point1 [i],point2 [i], point3 [i]))

#. mainloop ()


Результат решения:


Вывод:

Была рассчитана таблицу значений A (W) при изменении частоты W от 0 до Wкон, при различных значениях относительного коэффициента затухания Z, изменяющегося от Zнач до Zкон. По данным таблицы были построены на осях координат A (W), W графики изменения амплитуды A (W) от частоты W для различных значений Z.

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

3. Численное интегрирование аналитически заданной функции


Постановка задачи:

По заданному выражению аналитической функции f (x) вычислить приближенно определенный интеграл от этой функции на заданном интервале [a,b]:


,


используя одну из трех квадратурных формул:

1.прямоугольников;

2.трапеций;

.парабол.

Сравнить результаты вычислений для различных чисел разбиений интервала n


Исходные данные:

f (x) ab№ формулыn1n2342816

Метод трапеций:



Структура программы:

1.Подключение библиотек

2.Описывание данной функции

.Описание функции I для вычисления интеграла

.Создание виджетов

1.1.Создание окна

1.2.Описание в окне буквенных обозначений

.3.Создание полей для введения пользователем a, b, n

.4.Создание полей для введения пользователем a, b, n

.5.Создание кнопок

.6.Отображение главного окна

Код программы:


# * - coding: utf-8 - *-math import*Tkinter import*f (x):

= (1+x**2) / (1+x**3)

FI ():=0.0= float (a_entry. get ())= float (b_entry. get ())= int (n_entry. get ())= (b-a) /ni in range (0,n-1):=2*f (a+ (i+1) *h)=k+p=h/2* (f (a) +k+f (b))= '%.6f' % I_label. configure (text=I)

#= Tk () # создание окна. title ("Задание № 3")= Frame (root). pack ()

# создание виджетов_label = Label (frame, bg='green', text="Вычисление определенного интеграла \nс использованием численного метода трапеций", font='arial 10')_label. grid (row=0, column=0, columnspan=3,pady=15,padx=15) # размещение виждета в окне

t2_label = Label (frame, text="a - нижний предел интегрирования")

t2_label. grid (row=2, column=0, columnspan=3, sticky=W,padx=10)_label = Label (frame, text="b - верхний предел интегрирования")_label. grid (row=3, column=0, columnspan=3, sticky=W,padx=10)

t4_label = Label (frame, text="n - число разбиений отрезка интегрирования")

t4_label. grid (row=4, column=0, columnspan=3, sticky=W,padx=10)_label = Label (frame, text="z - результат интегрирования")_label. grid (row=5, column=0, columnspan=3, sticky=W,padx=10)_label = Label (frame, text="Введите данные для расчёта:", font='arial 8')_label. grid (row=6, column=0, columnspan=3, sticky=W, pady=5,padx=10)

#_label = Label (frame, text="a=")_label. grid (row=7, column=0,pady=5)_entry = Entry (frame,)_entry. grid (row=7, column=1,pady=5)

#_label = Label (frame, text="b=")_label. grid (row=8, column=0,pady=5)_entry = Entry (frame,)_entry. grid (row=8, column=1,pady=5)

#_lebel = Label (frame, text="n=")

n_lebel. grid (row=9, column=0,pady=5)_entry = Entry (frame,)_entry. grid (row=9, column=1,pady=5)

#_label = Label (frame, text="z=")_label. grid (row=10, column=0,pady=5)_label = Label (frame, bg='white', text="?",width=10)_label. grid (row=10, column=1,pady=5)

#_button = Button (frame,bg='green', text="Вычислить",, command=I)_button. grid (row=11, column=0,sticky=W, pady=10,padx=15)_button = Button (frame, bg='grey', text="Выйти",, command=root. destroy)_button. grid (row=11, column=1, padx=10,pady=10)

#= Canvas (frame, width =160, height=60)= PhotoImage (file='. /3. gif'). create_image (90, 35, image=img, anchor=CENTER). grid (row=1, column=0,columnspan=3, sticky=N+S, pady=5,padx=2). mainloop ()


Результат решения:




Вывод:

По заданному выражению аналитической функции f (x) = был вычислен приближенно определенный интеграл от этой функции на заданном интервале [a,b]. Было выяснено, что от количества разбиений "n" зависит точность решения. Чем число разбиений больше, тем выше точность измерений.


4. Численное решение нелинейных уравнений с заданной точностью


Постановка задачи:

По заданному нелинейному уравнению F (x) =0,где F (x) - некоторое нелинейное аналитическое выражение, определенное на интервале [a, b], вычислить корни этого уравнения с требуемой точностью E одним из трех методов:

.итераций;

2.половинного деления;

.Ньютона.

Проверяется, имеет ли место перемена ее знака (переход через нуль) на интервале [a, b].


Исходные данные:

F (x) abМетодТочность1.2630.000001

Метод Ньютона (касательных) основан также на последовательном задании значений x и вычислении функции F (x), причем очередное значение x определяется формулой:


x (n+1) =x (n) - F (x (n)) /F (x (n)),


где F (x (n)) - производная от функции F (x) в точке x (n).

Геометрически производная от F (x), как известно, по величине равна тангенсу угла наклона касательной к кривой F (x) в точке x. Тогда точка x (n+1) есть точка пересечения с осью абсцисс касательной к кривой F (x), проведенной в точке x=x (n). См. рис.5.


Рис. 5. Геометрическое представление метода Ньютона


Как и в методе итераций, начальное значение x задается как ближайшее табличное к месту перехода функции F (x) через нуль.

Выражение для производной F (x) получают аналитически в результате дифференцирования функции F (x). Значение производной может быть получено приближенно и численным методом:


F (x) = (F (x+E) - F (x)) /E.


Итерационный процесс приближения к корню (последовательное вычисление x (n+1)) продолжается до тех пор, пока будет выполняться условие


|x (n+1) - x (n) |>=E.


Структура программы:

1.Подключение библиотек

2.Описание данной функции

3.Описание функции R и calculate для вычисления корня уравнения

.Создание виджетов

4.1.Создание окна

4.2.Создание кнопок и полей для введения пользователем значений

.3.Вставка рисунка

.4.Создание графика исходной функции

.5.Отображение главного окна

Код программы:


# * - coding: utf-8 - *-

# импорт математической библиотекиmath import *

# подключение библиотеки Tkinter

from Tkinter import *

# описание функцийF (x):

return x**3-5*x**2+3*x-2

def F1 (x):

return 3*x**2-10*x+3

def R (a,b,e,n):

h= (b-a) /float (n)

P= []

for i in range (n+1):. append (F (a+h*i))= []i in range (1,len (P)):(P [i-1] >0 and P [i] <0) or (P [i-1] <0 and P [i] >0):(abs (P [i-1]) - 0) <= (abs (P [i]) - 0):. append (P [i-1]):. append (P [i])len (T) ==0:

t1_lebel = Label (frame, text="Решений нет")

t1_lebel. grid (row=7, column=1):i in range (len (T)):=T [i]_next=x-F (x) /F1 (x)abs (x_next-x) >=e:=x_next_next=x-F (x) /F1 (x)x_nextcalculate ():= float (a1_entry. get ())

#= float (b1_entry. get ())

#= float (e1_entry. get ())

#= float (n1_entry. get ())

# использование обработки исключений. Сначала выполняется ветвь try

try:_x = "%11.10f" %R (a1,b1,e1,n1)

# если во время выполнения try возникает исключение,

# то дальнейшее выполнение try прекращается и выполняется ветвь except

except:_x = "?"_label. configure (text=f_x)

# создание экземпляра класса Tk, отвечающего за создание окон= Tk ()

# определение заголовка окна. title ("Задание 4")

frame = Frame (root). pack ()

t1_label = Label (frame, bg='green', text="Численное решение нелинейного уравнения \n с заданной точностью", font='arial 12')

t1_label. grid (row=0, column=0, columnspan=4, padx=5,pady=5)

# создание кнопки нижнего значения интервала

a1_entry = Entry (frame,)_entry. grid (row=3, column=1, padx=5,pady=5)_lebel = Label (frame, text="Начало интервала")1_lebel. grid (row=3, column=0,padx=5,pady=5)

# создание кнопки верхнего значения интервала

b1_entry = Entry (frame,)_entry. grid (row=4, column=1)_lebel = Label (frame, text="Конец интервала")_lebel. grid (row=4, column=0)

# точность_entry = Entry (frame,)_entry. grid (row=5, column=1)

e1_lebel = Label (frame, text="Точность: ")_lebel. grid (row=5, column=0)

# Количество разбиений

n1_entry = Entry (frame,)_entry. grid (row=6, column=1)_lebel = Label (frame, text="Количество разбиений: ")_lebel. grid (row=6, column=0)_lebel = Label (frame, text="Корень: ")_lebel. grid (row=7, column=0)_label = Label (frame, text="?")_label. grid (row=7, column=1)

# создание кнопки вычисления значения интеграла

eval_button = Button (frame, bg='green',text="Вычислить",,command=calculate)_button. grid (row=9, column=0)

# создание кнопки закрытия приложения_button = Button (frame, bg='grey',text="Выход",,command=root. destroy)_button. grid (row=9, column=1, padx=25,pady=15)

#= Canvas (frame, width =160, height=50)= PhotoImage (file='. /4. gif'). create_image (90, 35, image=img, anchor=CENTER). grid (row=1, column=0, sticky=N+S, pady=5,padx=2)

# непосредственное создание окна

root. mainloop ()


Результат решения:



Вывод:

По заданному нелинейному уравнению =0, определенном на интервале [a, b], были вычислены корни этого уравнения с требуемой точностью E методом Ньютона.

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


5. Численное решение дифференциальных уравнений первого порядка


Постановка задачи:

С помощью численных методов решить дифференциальное уравнение первого порядка у'=f (x,y).

. Метод Эйлера.

. Модифицированный метод Эйлера (вариант 1).

. Модифицированный метод Эйлера (вариант 2).

. Метод Рунге-Кутта третьего порядка.

. Метод Рунге-Кутта четвертого порядка


Исходные данные:

УравнениеМетодa b x0 y0у'=exp (-x) - 2x1,41211

1.Метод Эйлера



y1=y0+h*f (x0,y0) x1=x0+hРасчетные формулы для 1-го шагаyi+1=yi+h*f (xi,yi) xi+1=xi*hРасчетные формулы для i-го шага

2.Метод Рунге-Кутта третьего порядка


уi+1=уi+ (k1+4k2+k3) /6,k1=hf (xi, yi),

k2=hf (xi+h/2, yi+k1/2),

k3=hf (xi+h, yi+2k2-k1),i+1=xi+h.


Структура программы:

1.Подключение библиотек

2.Описание данной функции

3.Описание функции fx метода Эйлера

.Описание функции rk метода Рунге-Кутта

.Описание функции calculate для нахождения значения

.Создание виджетов

6.1.Создание окна

6.2.Создание кнопок и полей для введения пользователем значений

.3.Вставка рисунка

.4.Отображение главного окна

Код программы:


# * - coding: utf-8 - *-

# подключение библиотеки Tkinter

from Tkinter import *

# импорт математической библиотекиmath import *

# описание функцииdu (x,y):

return exp (-x) - 2*x

def fx (x_0,y_0,x_k,n_1):

# шаг интегрирования= (x_k-x_0) /n_1

#Метод Эйлера

for i in range (0,n_1):

y1=y_0+h*du (x_0,y_0)=x_0+h_0=x1_0=y1y1rk (x_0,y_0,x_k,n_1):

h= (x_k-x_0) /n_1

# метод рунге-кутта

for i in range (0,n_1):

k1=h*du (x_0,y_0)=h*du (x_0+h/2,y_0+k1/2)

k3=h*du (x_0+h,y_0+2*k2-k1)=y_0+ (k1+4*k2+k3) /6_0=x_0+h_0=y1y1

def calculate_y1 ():

# начальные условия= float (x0_entry. get ())= float (y0_entry. get ())

# конечная точка= float (xk_entry. get ())

# число разбиений= int (n_entry. get ())

# использование обработки исключений. Сначала выполняется ветвь try

try:= "%11.3f" % fx (x0,y0,xk,n)

y2 = "%11.3f" % rk (x0,y0,xk,n)

# если во время выполнения try возникает исключение,

# то дальнейшее выполнение try прекращается и выполняется ветвь except

except:= "?"= "?"_label. configure (text=y1)_label. configure (text=y2)

# создание экземпляра класса Tk, отвечающего за создание окон=Tk ()

# определение заголовка окна. title ("Задание 5")

frame = Frame (root). pack ()

t1_label = Label (frame, bg='green', text="Численное решение дифференциального уравнения первого порядка", font='arial 12')

t1_label. grid (row=0, column=0, columnspan=5, padx=25,pady=5)

# создание окна ввода величины начального значения числа X

x0_entry = Entry (frame,)_entry. grid (row=1, column=2,pady=5)0_lebel = Label (frame, text="Начальное значение X: ")

x0_lebel. grid (row=1, column=1,pady=5)

# создание окна ввода величины начального значения числа Y

y0_entry = Entry (frame,)

y0_entry. grid (row=2, column=2,pady=5)_lebel = Label (frame, text="Начальное значение Y: ")_lebel. grid (row=2, column=1,pady=5)

# оздание окна ввода величины конечной точки

xk_entry = Entry (frame,)_entry. grid (row=1, column=4,pady=5)

xk_lebel = Label (frame, text="Конечное значение Х: ")

xk_lebel. grid (row=1, column=3,pady=5)

# создание окна ввода величины точности интегрирования)

n_entry = Entry (frame,)_entry. grid (row=2, column=4,pady=5)_lebel = Label (frame, text="Число разбиений: ")_lebel. grid (row=2, column=3,pady=5)

# создание поля вывода ответа (метод эйлера)

y1_label = Label (frame, text="?")_label. grid (row=3, column=1,padx=5,pady=5)_lebel = Label (frame, text="Метод Эйлера: ")_lebel. grid (row=3, column=0,padx=5,pady=5)

# создание поля вывода ответа (метод рунге-кутта)

y2_label = Label (frame, text="?")_label. grid (row=4, column=1,padx=5,pady=5)_lebel = Label (frame, text="Метод Рунге-Кутта 3го порядка: ")_lebel. grid (row=4, column=0,padx=5,pady=5)

# создание кнопки вычисления значения интеграла_button = Button (frame,bg='green', text="Вычислить",,command=calculate_y1)

eval_button. grid (row=4, column=3,padx=5,pady=5)

# создание кнопки закрытия приложения_button = Button (frame, bg='grey', text="Выход",,command=root. destroy)_button. grid (row=4, column=4,padx=5,pady=5)= Canvas (frame, width =140, height=60)= PhotoImage (file='. /5. gif'). create_image (60, 40, image=img, anchor=CENTER). grid (row=1, column=0, sticky=N+S)

# непосредственное создание окна

root. mainloop ()

Результат решения:



Проверка аналитическим методом:



Вывод

Для решения дифференциального уравнения первого порядка были использованы выше описанные методы Рунге-Кутта и метод Эйлера. Было установлено, что метод Рунге-Кутта точнее, чем метод Эйлера в сравнении с аналитическим методом вычисления, и требует меньшего числа разбиений участка функции, для выявления результата.

Заключение


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

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

Для упрощения работы с программами созданы диалоговые окна с необходимыми командами. Во всех программах использовались компоненты типов: label, button, text, entry, frame. В некоторых из них так же использовались canvas для создания графических объектов. Для сокращения программы использовались циклы, типа for, while. Для расположения виджетов в окне использовался менеджер grid. Для математических вычислений был задействован математический модуль math, а для визуального программирования модуль tkinter.

Список используемой литературы


1.Бизли Д. Python. Подробный справочник: Символ плюс, 2010

2.Валишев М.Г., Повзнер А.А. Курс общей физики: Лань, 2010

.Лутц М. Изучаем Python: Символ плюс, 2011

.Россум Г., Дрейк Ф.Л. Дж., Откидач Д.С. Язык программирования Python

.Саммерфилд М. Программирование на Python: Санкт-Петербург, 2009

.Соболев А.Б., Рыбалко А.Ф. Математика: Академия, 2009

.Сузи Р.А. Язык программирования Python: ИНТУИТ, 2005

.Чаплыгин А.Н. Учимся программировать вместе с Питоном; 2004


КУРСОВАЯ РАБОТА по дисциплине "Информатика" РЕШЕНИЕ ИНЖЕНЕРНО-ТЕХНИЧЕСКИХ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ СРЕ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ