Автор работы: Пользователь скрыл имя, 09 Декабря 2012 в 21:50, курсовая работа
Целью данной работы является наглядно показать решение инженерно-технических задач с помощью одного языка программирования Python. Автоматизации процесса вычислений, компьютерная обработка данных позволяет сократить сроки выполнения инженерно-технических построений увеличить точность получаемых результатов.
x2+=h
y2=y1+f(x1,y1)
M1.append(x1)
M2.append(y1)
n+=1
n=0
points=[]
while n<7:
Label(frame, text="%20.1f" % M[0][n]).grid(row=6+n, column=0, sticky=W+E, padx=1, pady=0.5)
pp=(150+(M[0][n])*30)
points.append(pp)
Label(frame, text="%24.4f" % M[1][n]).grid(row=6+n, column=1, sticky=W+E, pady=0.5, padx=1)
pp=(180-(M[1][n])*60)
points.append(pp)
n+=1
canvas1.create_line(points,
# метод Рунге-Кутта четвертого
порядка, описывается, как
x1=float(a_entry.get())
y2=float(b_entry.get())
L1=[]
L2=[]
L=[L1, L2]
n=0
while n<7:
y1=y2
L1.append(x1)
x1+=h
k1=h*f(x1,y1)
k2=h*f(x1+h/2, y1+k1/2)
k3=h*f(x1+h/2, y1+k2/2)
k4=h*f(x1+h, y1+k3)
y2=y1+(k1+2*k2+2*k3+k4)/6
L2.append(y1)
n+=1
x1=float(a_entry.get())
n=0
points2=[]
while n<7:
Label(frame, text="%20.1f" % L[0][n]).grid(row=6+n, column=3, sticky=W+E, padx=1, pady=0.5)
pp=(150+(L[0][n])*30)
points2.append(pp)
Label(frame, text="%24.4f" % L[1][n]).grid(row=6+n, column=4, sticky=W+E, pady=0.5, padx=1)
pp=(180-(L[1][n])*60)
points2.append(pp)
n+=1
canvas2.create_line(points2,
#Создание экземляра класса Tk, отвечающего за создание окон
root = Tk()
root.title("Решение дифференциального уравнения")
frame = Frame(root)
frame.pack()
#Создание поля вывода ответа - "Задача 5. Решение дифференциального уравнения"
t1_label = Label(frame, text="Задача 5. Решение дифференциального уравнения", font='arial 14')
t1_label.grid(row=0, column=0, columnspan=80, sticky=W+E, padx=25, pady=5)
#Создание поля вывода ответа - "y'=(y**2-y)/x"
t3_label = Label(frame, text="у'=(у**2-у)/x", font='arial 14')
t3_label.grid(row=1, column=0, columnspan=80, sticky=W+E, padx=2, pady=5)
#Создание окна ввода значения числа - "х"
c_label = Label(frame, text="Конечное значение х = ")
c_label.grid(row=3, column=0, sticky=W, padx=5)
c_entry = Entry(frame, width=10)
c_entry.grid(row=3, column=1, sticky=W, pady=1, padx=5)
#Создание поля вывода ответа - "Метод Эйлера"
a10 = Label(frame, text="Метод Эйлера", font='arial 12')
a10.grid(row=4, column=0, columnspan=2, sticky=W, padx=2)
#Создание окна ввода величины начального значения числа - "х0"
a_label = Label(frame, text="Начальное значение х0 = ")
a_label.grid(row=2, column=0, sticky=W, padx=5)
a_entry = Entry(frame, width=10)
a_entry.grid(row=2, column=1, sticky=W, pady=1, padx=5)
#Создание окна ввода величины начального значения числа - "у0"
b_label = Label(frame, text="Начальное значение у0 = ")
b_label.grid(row=2, column=3, sticky=W, padx=5)
b_entry = Entry(frame, width=10)
b_entry.grid(row=2, column=4, sticky=W, pady=1, padx=5)
#
a11=Label(frame, fg="#FF00FF", text="%17s" % "x", font='arial 12')
a11.grid(row=5, column=0, pady=5, sticky=W+E, padx=5)
a12=Label(frame, fg="#FF00FF", text="%17s" % "f(x)", font='arial 12')
a12.grid(row=5, column=1, pady=5, sticky=W+E, padx=5)
canvas=Canvas(frame, width = 1, height = 600, bg="#000000")
canvas.grid(row=3, column=2, rowspan=12, padx=2)
#Создание поля вывода ответа - "Метод Рунге-Кутта четвертого порядка"
a20 = Label(frame, text="Метод Рунге-Кутта четвертого порядка", font='arial 12')
a20.grid(row=4, column=3, columnspan=2, sticky=W, padx=2)
a21=Label(frame, fg="#FF00FF", text="%17s" % "x", font='arial 12')
a21.grid(row=5, column=3, pady=5, sticky=W+E, padx=5)
a22=Label(frame, fg="#FF00FF", text="%17s" % "f(x)", font='arial 12')
a22.grid(row=5, column=4, pady=5, sticky=W+E, padx=5)
canvas1=Canvas(frame, width = 270, height = 200)
canvas1.grid(row=13, column=0, columnspan=2, padx=5, pady=1)
canvas2=Canvas(frame, width = 270, height = 200)
canvas2.grid(row=13, column=3, columnspan=2, padx=5, pady=1)
#Создание кнопки вычисления значения интеграла - "Вычислить"
button = Button(frame, text="Вычислить", width=10, bg='#2F2F4F', fg='#70DB93', font='arial 14', command=vichislit)
button.grid(row=14, column=1, sticky=E, padx=5, pady=1)
#Создание кнопки закрытия приложения - "Выход"
exit_button = Button(frame, text="Выход", width=10, bg='#2F2F4F', fg='#70DB93', font='arial 14', command=root.destroy)
exit_button.grid(row=14, column=3, sticky=W, pady=1)
# Создание оси координат - "y"
y_axe=[]
yy=(150,0)
y_axe.append(yy)
yy=(150,200)
y_axe.append(yy)
canvas1.create_line(y_axe,
canvas1.create_line(148,8,150,
canvas1.create_line(150,3,152,
canvas1.create_text(144,5,
canvas2.create_line(y_axe,
canvas2.create_line(148,8,150,
canvas2.create_line(150,3,152,
canvas2.create_text(144,5,
# Создание оси координат - "x"
x_axe=[]
xx=(0,180)
x_axe.append(xx)
xx=(270,180)
x_axe.append(xx)
canvas1.create_line(x_axe,
canvas1.create_line(262,178,
canvas1.create_line(262,182,
canvas1.create_text(265,168,
canvas2.create_line(x_axe,
canvas2.create_line(262,178,
canvas2.create_line(262,182,
canvas2.create_text(265,168,
canvas1.create_text(160,190,
canvas1.create_text(210,50,
canvas2.create_text(160,190,
canvas2.create_text(210,50,
# Создание окна
root.mainloop()
Вывод:
Для решения дифференциального
уравнения первого порядка были
использованы выше описанные методы
Рунге-Кутта и метод Эйлера. Было
установлено, что метод Рунге-Кутта
точнее, чем метод Эйлера в сравнении
с аналитическим методом
Заключение
В процессе решения задач
с помощью языка
Были применены полученные знания в области визуального объектно-ориентированного программирования: создание виджетов, составление вычислительных функций, применение различных электронных библиотек, добавление графических объектов, использование циклов и т.д. Данные программы включали в себя численные методы решения, построение графиков, вывод таблиц. Для решения задач были использованы функции для вычисления требуемых данных и поставленных задач.
Для упрощения работы
с программами созданы
Список используемой литературы