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

Расчет трансформатора питания. Численное решение нелинейных уравнений с заданной точностью и дифференциальных уравнений первого порядка. Разработка программы с использованием средств визуального программирования на алгоритмическом языке программирования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.08.2013
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

Оглавление

  • Введение
  • 1. Расчет трансформатора питания
  • 2. Расчет и построение амплитудно-частотной характеристики колебательного контура
  • 3. Численное интегрирование аналитически заданной функции
  • 4. Численное решение нелинейных уравнений с заданной точностью
  • 5. Численное решение дифференциальных уравнений первого порядка
  • Заключение
  • Список используемой литературы

Введение

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

Цель работы:

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

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

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

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

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

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

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

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

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

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

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

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. Ввод исходные данные

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

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

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

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

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

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

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

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

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

# импорт библиотек

from math import*

from Tkinter import*

# ввод исходных данных (из табл.1)

S=4

n=0.82

Ui= []

Ii= []

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

def calc ():

P=0

x=int (x_entry. get ())

x=x-1

U=int (U_entry. get ())

Ui. append (int (U1_entry. get ()))

Ui. append (int (U2_entry. get ()))

Ii. append (int (I1_entry. get ()))

Ii. append (int (I2_entry. get ()))

for i in range (2):

P+=Ui [i] *Ii [i]

P=P/n

Ko= (1.83) * (10**6) * (0.95) / (U*S)

Ko='%.3f' % Ko

Ko_label. configure (text= ('Ko=',Ko))

Do=sqrt (P/ (U*2))

Do='%.3f' % Do

Do_label. configure (text= ('Do=',Do))

Pk=38*Ui [x] *1.05/S

Pk='%.3f' % Pk

Ki_label. configure (text= ('Ki=',Pk))

Pd=sqrt (Ii [x] /2.0)

Pd='%.3f' % Pd

Di_label. configure (text= ('Di=',Pd))

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

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

root = Tk ()

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

frame = Frame (root)

frame. pack ()

t1_label = Label (frame, bg='green', text="Вычисление количества витков и диаметра провода i-ой вторичной обмотки трансформатора", font='arial 10')

t1_label. grid (row=0, column=1, columnspan=4, padx=25,pady=15)

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

t3_label = Label (frame, text="P - габаритная мощность трансформатора; ")

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

t5_label = Label (frame, text="n - коэффициент полезного действия; ")

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

t6_label = Label (frame, text="U (i) - напряжение на i-ой вторичной обмотке; ")

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

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

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

t10_label = Label (frame, text="S - площадь сечения сердечника; ")

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

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

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

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

x_label = Label (frame, text="Введите i (от 1 до 2)")

x_label. grid (row=7, column=0, padx=5)

x_entry = Entry (frame, width=10)

x_entry. grid (row=7, column=1,sticky=W, pady=5, padx=5)

#

U_label = Label (frame, text="Введите U")

U_label. grid (row=7, column=2)

U_entry = Entry (frame, width=10)

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

#

U1_label = Label (frame, text="Введите U1")

U1_label. grid (row=8, column=0, padx=5)

U1_entry = Entry (frame, width=10)

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

#

U2_label = Label (frame, text="Введите U2")

U2_label. grid (row=9, column=0, padx=5)

U2_entry = Entry (frame, width=10)

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

#

I1_label = Label (frame, text="Введите I1")

I1_label. grid (row=8, column=2, padx=5)

I1_entry = Entry (frame, width=10)

I1_entry. grid (row=8, column=3,sticky=W, pady=5, padx=5)

#

I2_label = Label (frame, text="Введите I2")

I2_label. grid (row=9, column=2, padx=5)

I2_entry = Entry (frame, width=10)

I2_entry. grid (row=9, column=3,sticky=W, pady=5, padx=5)

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

Ko_label = Label (frame, bg='white', text= ("Ko=?"))

Ko_label. grid (row=7, column=4, sticky=W, padx=2)

Ki_label = Label (frame, width=10, bg='white', text="Ki=?")

Ki_label. grid (row=7, column=5,pady=5)

Do_label = Label (frame, bg='white', text= ("Do=?"))

Do_label. grid (row=8, column=4, sticky=W, padx=2)

Di_label = Label (frame, bg='white', text="Di=?")

Di_label. grid (row=8, column=5,pady=5)

# выведение в окне кнопок "Вычислить" и "Выйти"

eval_button = Button (frame, bg='green', text="Вычислить", command=calc)

eval_button. grid (row=9, column=4, sticky=W, pady=10)

exit_button = Button (frame, bg='grey', text="Выйти", command=root. destroy)

exit_button. grid (row=9, column=5, padx=10,pady=10)

#

root. 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

0,30

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

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

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

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

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

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

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

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

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

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

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

# * - coding: utf-8 - *-

from Tkinter import *

from math import*

k=7.5

wp=8.5

wk=17

wo=0

dw=1.7

zn=0.2

zk=0.8

dz=0.3

z=zn

m= []

w0=0

s= []

while zn <= 0.8:

s= []

for i in range (0, 17.01):

a1= (k* (wp**2)) / (sqrt ( ( ( (wp**2) - (w0**2)) **2) + 4* (zn**2) * (wp**2) * (w0**2)))

s. append (a1)

w0=w0+dw

zn=zn+dz

m. append (s)

root = Tk () # создание окна

root. title ("2 задание ")

#

canvas2=Canvas (root,bg='white', width =200, height=220)

canvas2. grid (row=5, column=1,padx=10,pady=10)

point1=m [0]

points1= []

dx=1.7

for i in range (0,17):

y=point1 [i]

pp= (12*i*dx, 200-11*y)

points1. append (pp)

def line1 ():

canvas2. create_line (points1,fill="blue",smooth=1)

canvas2. create_text (40,75,text="при z=0.2")

point2=m [1]

points2= []

dx=1.7

for i in range (0,17):

y=point2 [i]

pp= (12*i*dx, 200-100*y)

points2. append (pp)

def line2 ():

canvas2. create_line (points2,fill="red",smooth=1)

canvas2. create_text (40,175,text="при z=0.5")

point3=m [2]

points3= []

dx=1.7

for i in range (0,17):

y=point3 [i]

pp= (12*i*dx, 200-200*y)

points3. append (pp)

def line3 ():

canvas2. create_line (points3,fill="black",smooth=1)

canvas2. create_text (105, 209,text="при z=0.8")

#

y_axe= []

yy= (10,0)

y_axe. append (yy)

yy= (10,220)

y_axe. append (yy)

canvas2. create_line (y_axe,fill="black",width=1)

canvas2. create_line (8,8,10,3,fill="black",width=1)

canvas2. create_line (10,3,12,8,fill="black",width=1)

canvas2. create_text (25,15,text="A (W)")

#

x_axe= []

xx= (0, 200)

x_axe. append (xx)

xx= (299, 200)

x_axe. append (xx)

canvas2. create_line (x_axe,fill="black",width=1)

canvas2. create_line (192, 198, 197, 200,fill="black",width=1)

canvas2. create_line (192, 202, 197, 200,fill="black",width=1)

canvas2. create_text (190,213,text="W")

#

t1_label = Label (root, bg='green', fg='black', text="Расчет и построение амплитудно-частотной характеристики \nс колебательного контура", font='arial 12')

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

t2_label = Label (root, text="A (W) - амплитуда колебаний; ")

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

t4_label = Label (root, text="Z - относительный коэффициент затухания; ")

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

#

eval_button = Button (root, bg='green', fg='black',text="График при Z =0.2", width=19,command=line1)

eval_button. grid (row=1, column=0, padx=10,pady=10)

eval1_button = Button (root, bg='green', fg='black',text="График при Z =0.5", width=19,command=line2)

eval1_button. grid (row=2, column=0, padx=10,pady=10)

eval1_button = Button (root, bg='green', fg='black',text="График при Z =0.8", width=19,command=line3)

eval1_button. grid (row=3, column=0, padx=10,pady=10)

#

exit_button = Button (root, bg='grey', fg='black',text="Exit", width=10,command=root. destroy)

exit_button. grid (row=4, column=0, padx=10,pady=10)

#

text1=Text (root,width=30, height=15, font = "areal 10")

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

text1. insert (END, "%.2f \t %.2f \t %.2f \t %.2f\n" % (i*dw,point1 [i],point2 [i], point3 [i]))

#

root. mainloop ()

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

Вывод:

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

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

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

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

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

,

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

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

2. трапеций;

3. парабол.

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

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

f (x)

a

b

№ формулы

n1

n2

3

4

2

8

16

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

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

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

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

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

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

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

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

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

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

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

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

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

# * - coding: utf-8 - *-

from math import*

from Tkinter import*

def f (x):

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

return F

def I ():

k=0.0

a = float (a_entry. get ())

b = float (b_entry. get ())

n = int (n_entry. get ())

h= (b-a) /n

for i in range (0,n-1):

p=2*f (a+ (i+1) *h)

k=k+p

I=h/2* (f (a) +k+f (b))

I= '%.6f' % I

z2_label. configure (text=I)

#

root = Tk () # создание окна

root. title ("Задание № 3")

frame = Frame (root)

frame. pack ()

# создание виджетов

t1_label = Label (frame, bg='green', text="Вычисление определенного интеграла \nс использованием численного метода трапеций", font='arial 10')

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

t3_label = Label (frame, text="b - верхний предел интегрирования")

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

t5_label = Label (frame, text="z - результат интегрирования")

t5_label. grid (row=5, column=0, columnspan=3, sticky=W,padx=10)

t6_label = Label (frame, text="Введите данные для расчёта:", font='arial 8')

t6_label. grid (row=6, column=0, columnspan=3, sticky=W, pady=5,padx=10)

#

a_label = Label (frame, text="a=")

a_label. grid (row=7, column=0,pady=5)

a_entry = Entry (frame, width=10)

a_entry. grid (row=7, column=1,pady=5)

#

b_label = Label (frame, text="b=")

b_label. grid (row=8, column=0,pady=5)

b_entry = Entry (frame, width=10)

b_entry. grid (row=8, column=1,pady=5)

#

n_lebel = Label (frame, text="n=")

n_lebel. grid (row=9, column=0,pady=5)

n_entry = Entry (frame, width=10)

n_entry. grid (row=9, column=1,pady=5)

#

z1_label = Label (frame, text="z=")

z1_label. grid (row=10, column=0,pady=5)

z2_label = Label (frame, bg='white', text="?",width=10)

z2_label. grid (row=10, column=1,pady=5)

#

eval_button = Button (frame,bg='green', text="Вычислить", width=10, command=I)

eval_button. grid (row=11, column=0,sticky=W, pady=10,padx=15)

exit_button = Button (frame, bg='grey', text="Выйти", width=10, command=root. destroy)

exit_button. grid (row=11, column=1, padx=10,pady=10)

#

canvas1 = Canvas (frame, width =160, height=60)

img = PhotoImage (file='. /3. gif')

canvas1. create_image (90, 35, image=img, anchor=CENTER)

canvas1. grid (row=1, column=0,columnspan=3, sticky=N+S, pady=5,padx=2)

root. mainloop ()

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

Вывод:

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

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

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

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

1. итераций;

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

3. Ньютона.

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

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

F (x)

a

b

Метод

Точность

1.2

6

3

0.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. Создание виджетов

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

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

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

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

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

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

# * - coding: utf-8 - *-

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

from math import *

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

from Tkinter import *

# описание функций

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

P. append (F (a+h*i))

T= []

for i in range (1,len (P)):

if (P [i-1] >0 and P [i] <0) or (P [i-1] <0 and P [i] >0):

if (abs (P [i-1]) - 0) <= (abs (P [i]) - 0):

T. append (P [i-1])

else:

T. append (P [i])

if len (T) ==0:

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

t1_lebel. grid (row=7, column=1)

else:

for i in range (len (T)):

x=T [i]

x_next=x-F (x) /F1 (x)

while abs (x_next-x) >=e:

x=x_next

x_next=x-F (x) /F1 (x)

return x_next

def calculate ():

a1 = float (a1_entry. get ())

#

b1 = float (b1_entry. get ())

#

e1 = float (e1_entry. get ())

#

n1 = float (n1_entry. get ())

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

try:

f_x = "%11.10f" %R (a1,b1,e1,n1)

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

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

except:

f_x = "?"

a_label. configure (text=f_x)

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

root = Tk ()

# определение заголовка окна

root. title ("Задание 4")

frame = Frame (root)

frame. 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, width=10)

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

a1_lebel = Label (frame, text="Начало интервала")

a1_lebel. grid (row=3, column=0,padx=5,pady=5)

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

b1_entry = Entry (frame, width=10)

b1_entry. grid (row=4, column=1)

b1_lebel = Label (frame, text="Конец интервала")

b1_lebel. grid (row=4, column=0)

# точность

e1_entry = Entry (frame, width=10)

e1_entry. grid (row=5, column=1)

e1_lebel = Label (frame, text="Точность: ")

e1_lebel. grid (row=5, column=0)

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

n1_entry = Entry (frame, width=10)

n1_entry. grid (row=6, column=1)

n1_lebel = Label (frame, text="Количество разбиений: ")

n1_lebel. grid (row=6, column=0)

a_lebel = Label (frame, text="Корень: ")

a_lebel. grid (row=7, column=0)

a_label = Label (frame, text="?")

a_label. grid (row=7, column=1)

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

eval_button = Button (frame, bg='green',text="Вычислить", width=10,command=calculate)

eval_button. grid (row=9, column=0)

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

exit_button = Button (frame, bg='grey',text="Выход", width=10,command=root. destroy)

exit_button. grid (row=9, column=1, padx=25,pady=15)

#

canvas1 = Canvas (frame, width =160, height=50)

img = PhotoImage (file='. /4. gif')

canvas1. create_image (90, 35, image=img, anchor=CENTER)

canvas1. grid (row=1, column=0, sticky=N+S, pady=5,padx=2)

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

root. mainloop ()

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

Вывод:

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

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

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

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

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

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

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

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

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

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

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

Уравнение

Метод

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

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

xi+1=xi+h.

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

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

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

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

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

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

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

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

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

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

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

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

# * - coding: utf-8 - *-

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

from Tkinter import *

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

from math import *

# описание функции

def du (x,y):

return exp (-x) - 2*x

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

# шаг интегрирования

h= (x_k-x_0) /n_1

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

for i in range (0,n_1):

y1=y_0+h*du (x_0,y_0)

x1=x_0+h

x_0=x1

y_0=y1

return y1

def rk (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)

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

k3=h*du (x_0+h,y_0+2*k2-k1)

y1=y_0+ (k1+4*k2+k3) /6

x_0=x_0+h

y_0=y1

return y1

def calculate_y1 ():

# начальные условия

x0 = float (x0_entry. get ())

y0 = float (y0_entry. get ())

# конечная точка

xk = float (xk_entry. get ())

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

n = int (n_entry. get ())

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

try:

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

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

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

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

except:

y1 = "?"

y2 = "?"

y1_label. configure (text=y1)

y2_label. configure (text=y2)

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

root=Tk ()

# определение заголовка окна

root. title ("Задание 5")

frame = Frame (root)

frame. 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, width=10)

x0_entry. grid (row=1, column=2,pady=5)

x0_lebel = Label (frame, text="Начальное значение X: ")

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

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

y0_entry = Entry (frame, width=10)

y0_entry. grid (row=2, column=2,pady=5)

y0_lebel = Label (frame, text="Начальное значение Y: ")

y0_lebel. grid (row=2, column=1,pady=5)

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

xk_entry = Entry (frame, width=10)

xk_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, width=10)

n_entry. grid (row=2, column=4,pady=5)

n_lebel = Label (frame, text="Число разбиений: ")

n_lebel. grid (row=2, column=3,pady=5)

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

y1_label = Label (frame, text="?")

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

y1_lebel = Label (frame, text="Метод Эйлера: ")

y1_lebel. grid (row=3, column=0,padx=5,pady=5)

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

y2_label = Label (frame, text="?")

y2_label. grid (row=4, column=1,padx=5,pady=5)

y2_lebel = Label (frame, text="Метод Рунге-Кутта 3го порядка: ")

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

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

eval_button = Button (frame,bg='green', text="Вычислить", width=10,command=calculate_y1)

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

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

exit_button = Button (frame, bg='grey', text="Выход", width=10,command=root. destroy)

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

canvas1 = Canvas (frame, width =140, height=60)

img = PhotoImage (file='. /5. gif')

canvas1. create_image (60, 40, image=img, anchor=CENTER)

canvas1. 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

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

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

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

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Расчет трансформатора питания по приближенным зависимостям. Численное решение нелинейных уравнений с заданной точностью. Расчет числовых значений и построение графиков амплитудно-частотной характеристики колебательного контура по координатам точек.

    курсовая работа [120,2 K], добавлен 08.01.2016

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

    курсовая работа [366,3 K], добавлен 04.06.2013

  • Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.

    курсовая работа [375,4 K], добавлен 06.01.2011

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

    курсовая работа [226,6 K], добавлен 05.04.2013

  • Традиционные языки высокоуровневого программирования. Обзор методов интегрирования. Оценка апостериорной погрешности. Численное решение систем линейных уравнений. Аппроксимация функций методом наименьших квадратов. Решение дифференциальных уравнений.

    методичка [6,4 M], добавлен 23.09.2010

  • Решение нелинейных уравнений методом простых итераций и аналитическим, простым и модифицированным методом Ньютона. Программы на языке программирования Паскаль и С для вычислений по вариантам в порядке указанных методов. Изменение параметров задачи.

    лабораторная работа [191,0 K], добавлен 24.06.2008

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

    дипломная работа [2,3 M], добавлен 11.04.2012

  • Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.

    курсовая работа [1,1 M], добавлен 02.06.2014

  • Восстановление математической модели задачи нелинейного программирования. Решение уравнений прямых. Метод линеаризации: понятие, особенности применения при решении задач. Нахождение точки максимума заданной функции. Решение задачи графическим методом.

    задача [472,9 K], добавлен 01.06.2013

  • Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.

    контрольная работа [1,9 M], добавлен 10.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.