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

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    711,87 Кб
  • Опубликовано:
    2014-03-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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












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

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

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

Оглавление

 

Введение

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

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

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

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

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

Заключение

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

Введение

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

Цель работы:

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

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

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

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

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

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

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

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

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

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

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

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


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

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

 

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

U, В

S, Кв. см

n

m

U1, В

I1, А

U2, В

I2, А

U3, В

I3, А

110

4

0,82

2

9

5,0

6

5,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.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.

 

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

K

WP

Wкон

Zнач

Zкон

Zшаг

7,5

8,5

17

0,2

0,8


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

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)

a

b

№ формулы

n1

n2

342816







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


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

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)

# создание виджетов_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)

a

b

Метод

Точность

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):

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) - 2x

1,4

1

2

1

1


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),

 

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

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

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

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!