Автор работы: Пользователь скрыл имя, 20 Ноября 2012 в 23:07, курсовая работа
Цель работы:
1. Дальнейшее развитие и закрепление знаний основ информатики.
2. Умение решать с помощью персонального компьютера задач программными методами с возможным использованием одного из алгоритмических языков программирования.
Введение. 3
Задача 1. Расчет трансформатора питания 4
Задача2.Расчет и построение амплитудно-частотной характеристики колебательного контура 8
Задача 3. Численное интегрирование аналитически заданной функции 12
Задача 4. Численное решение нелинейных уравнений с заданной точностью. 16
Задача 5. Численное решение дифференциальных уравнений первого порядка 21
Заключение. 25
Используемая литература: 26
у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.
dy/dx=x2
y=1+x3/3,
yk=y(1)=1+1/3=4/3=1,333
Алгоритм:
Код:
# *- coding: utf-8 -*-
# подключение библиотеки Tkinter
from Tkinter import *
# импорт математической библиотеки
from math import *
# описание функции
def du(x,y):
return (y*log(y))/(sin(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='wheat', text="Численное
решение дифференциальных
t1_label.grid(row=0, column=0, columnspan=4, padx=5,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='red', text="Выйти", width=10,
command=root.destroy)
exit_button.grid(row=4, column=4,padx=5,pady=5)
# непосредственное создание окна
root.mainloop()
Результаты решения
Проверка аналитическим методом
y’=(y*log(y))/(sin(x))
dy/ylny=ylny/sinx
∫dy/ylny=∫dx/sinx
ln|lny|=ln(sin(x/2))-ln(cos(x/
y=ec*tg(x/2)
x0=1 y0=2
2= ec*tg(x/2)
2= ec *0.55
ec =2/0.55=3.636
c=ln3.636
c=1.290
x1=2 y= e1.29*1.557
y=3.632*1.557
y=5.65
Подставляя данные значение получаем точный результат
Например для x0=1, x1=2, y0=2, отсюда y=5.65
Вывод:
Для решения дифференциального уравнения первого порядка были использованы выше описанные методы Рунге-Кутта и метод Эйлера. Было установлено, что метод Эйлера точнее, чем метод Рунге-Кутта в сравнении с аналитическим методом вычисления, и требует меньшего числа разбиений участка функции, для выявления результата. Искомое уравнение есть функция y=ec*tg(x/2). Значение функции рассчитывается при каждом шаге.
В процессе решения данных задач с помощью языка программирования Python, были запрограммированы и реализованы алгоритмы численных методов решения нелинейных уравнений, дифференциальных уравнений первого порядка, интегрирования аналитически заданных функций, автоматизированы процессы расчетов и вычислений некоторых инженерно-технических задач.
Для упрощения работы с программами созданы диалоговые окна с необходимыми командами. Во всех программах использовались компоненты типов: label, button, text, entry), frame. Так же использовался тип canvas для создания графических объектов, и scrollbar для создания элементов с текстовыми значениями. Для сокращения программы использовались циклы: for, while. Так же использовался менеджер grid. Для математических вычислений был задействован математический модуль math, а для визуального программирования модуль tkinter.
Разработанные программы на Python решают нелинейные, дифференциальные уравнения и аналитически заданные функции с достаточно высокой степенью точности.
Сделав вывод, можно сказать, что
вычисление таких задач с помощью
визуального объектно-
Курсовая работа по информатике выполнена с полным использованием возможностей персонального компьютера при решении задач.
1. Марк Лутц.«Изучаем Python», 2010.
2. А. Н.Чаплыгин.«Учимся программировать вместе с Питоном», 2009.
3. Г. Россум, Д. С. Откидач и «Язык программирования Python». Невский Диалект, 2001.
4. Саммерфилд М. «Программирование на Python»: С.-Петербург, 2009.
5. М. Доусон. «Программируем на Python».—СПб.: С.-Петербург, 2012.
6. Сузи Р. А. «Python». Наиболее полное руководство. Петербург, 2002.
7. И. А. Хахаев практикум по алгоритмизации и программированию на Python, 2009.