Решение инженерно-технических задач с использованием средств визуального программирования
КУРСОВАЯ РАБОТА
по дисциплине "Информатика"
РЕШЕНИЕ ИНЖЕНЕРНО-ТЕХНИЧЕСКИХ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ
Оглавление
Введение
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 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ