Автор работы: Пользователь скрыл имя, 09 Декабря 2012 в 21:50, курсовая работа
Целью данной работы является наглядно показать решение инженерно-технических задач с помощью одного языка программирования Python. Автоматизации процесса вычислений, компьютерная обработка данных позволяет сократить сроки выполнения инженерно-технических построений увеличить точность получаемых результатов.
Wk=8
Zn=0.1
Zk=0.7
Zsh=0.3
DW=0.1*Wk
M1=[]
M2=[]
M3=[]
M=[M1, M2, M3]
i=0
n=0
#
points=[]
while Zn<=Zk:
while W0<=Wk:
A=amplituda(K, WP, W0, Zn)
M[i].append (A)
Label(frame, fg="#FF00FF", text="%20.1f" % W0).grid(row=6+n, column=0, padx=5, pady=5)
pp=(20+W0*20)
points.append(pp)
pp=(370-((M[i][n])*20))
points.append(pp)
W0+=DW
Label(frame, text="%20.2f" % M[i][n]).grid(row=6+n, column=1+i, pady=5, padx=5)
n+=1
canvas1.create_line(points,
points=[]
W0=0
n=0
i+=1
Zn+=Zsh
#
exit_button = Button(frame, text="Выход", width=10, bg='#CD7F32', fg='#C0D9D9', font='arial 14', command=root.destroy)
exit_button.grid(row=17, column=4, pady=5)
#
y_axe=[]
yy=(20,0)
y_axe.append(yy)
yy=(20,400)
y_axe.append(yy)
canvas1.create_line(y_axe,
canvas1.create_line(18,8,20,3,
canvas1.create_line(20,3,22,8,
canvas1.create_text(14,5,text=
x_axe=[]
xx=(20,370)
x_axe.append(xx)
xx=(500,370)
x_axe.append(xx)
canvas1.create_line(x_axe,
canvas1.create_line(492,368,
canvas1.create_line(492,372,
canvas1.create_text(495,378,
#
canvas1.create_text(15,370,
canvas1.create_text(200,200,
canvas1.create_text(200,285,
canvas1.create_text(200,320,
canvas1.create_line(115,220,
canvas1.create_line(120,310,
canvas1.create_line(100,325,
#
root.mainloop()
Результат выполнения программы:
Вывод:
Была рассчитана таблицу значений A(W) при изменении частоты W от 0 до Wкон, при различных значениях относительного коэффициента затухания Z, изменяющегося от Zнач до Zкон . По данным таблицы были построены на осях координат A(W), W графики изменения амплитуды A(W) от частоты W для различных значений Z.
Из графика видно, что
при увеличении относительного коэффициента
затухания амплитуда
Задача №3. Численное интегрирование аналитически заданной функции
Постановка задачи:
По заданному выражению аналитической функции f(x) вычислить приближенно определенный интеграл от этой функции на заданном интервале [a,b]:
используя одну из трех квадратурных формул:
Сравнить результаты вычислений для различных чисел разбиений интервала n.
Данные для интегрирования аналитически заданных функций
Функция:
Исходные данные приведены в таблицу 3:
Таблица 3
Вариант |
Функция |
Интервал |
Формула |
Числа разбиений | ||
№ |
f(x) |
а |
b |
№ |
n1 |
n2 |
04 |
0 |
3 |
2 |
10 |
20 |
Основные расчетные формулы:
Метод трапеции
Код программы:
# -*- coding: utf-8 -*-
#
from Tkinter import *
from math import *
#
def f2(x):
F=(sin(x)*cos(x))
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(1,n/2+1):
p=4*f2(a+(i-1)*2*h+h)+2*f2(a+(
k=k+p
I=(h*(-f2(a)+k+f2(b)))/3
I= '%.11f' % I
z2_label.configure(text=I)
#
root = Tk()
root.title("Задание № 3")
frame = Frame(root)
frame.pack()
#
t1_label = Label(frame, bg='yellow', text="Вычисление определенного интеграла \nс использованием численного метода трапеций", font='arial 10')
#
t1_label.grid(row=0, column=0, columnspan=4,pady=15,padx=15)
t2_label = Label(frame, text="a - нижний предел интегрирования")
t2_label.grid(row=1, column=0, columnspan=4, sticky=W,padx=2)
t3_label = Label(frame, text="b - верхний предел интегрирования")
t3_label.grid(row=2, column=0, columnspan=4, sticky=W,padx=2)
t4_label = Label(frame, text="n - число разбиений отрезка интегрирования")
t4_label.grid(row=3, column=0, columnspan=4, sticky=W,padx=2)
t5_label = Label(frame, text="z - результат интегрирования")
t5_label.grid(row=4, column=0, columnspan=4, sticky=W,padx=2)
t6_label = Label(frame, text="Введите данные для расчёта:", font='arial 8')
t6_label.grid(row=5, column=0, columnspan=4, sticky=W, pady=5,padx=2)
#
a_label = Label(frame, text="a=")
a_label.grid(row=6, column=0)
a_entry = Entry(frame, width=10)
a_entry.grid(row=6, column=1,sticky=W, pady=5)
b_label = Label(frame, text="b=")
b_label.grid(row=7, column=0)
b_entry = Entry(frame, width=10)
b_entry.grid(row=7, column=1,sticky=W, pady=5)
n_lebel = Label(frame, text="n=")
n_lebel.grid(row=8, column=0)
n_entry = Entry(frame, width=10)
n_entry.grid(row=8, column=1,sticky=W, pady=5)
z1_label = Label(frame, text="z=")
z1_label.grid(row=9, column=0)
z2_label = Label(frame, bg='white', text="?",width=10)
z2_label.grid(row=9, column=1,pady=5)
#
eval_button = Button(frame, text="Вычислить", width=10, command=I)
eval_button.grid(row=10, column=0,sticky=W, pady=10,padx=15)
#
exit_button = Button(frame, bg='red' , text="Выйти", width=10, command=root.destroy)
exit_button.grid(row=10, column=1, padx=10,pady=10)
#
root.mainloop()
Результат выполнения программы:
Число разбиений 10:
Число разбиений 20:
Вывод:
По заданному выражению аналитической функции, был вычислен приближенно определенный интеграл от этой функции на заданном интервале [a,b]. Было выяснено, что от количества разбиений “n” зависит точность решения. Чем число разбиений больше, тем выше точность измерений.
Задача №4. Численное решение нелинейных уравнений с заданной точностью
Постановка задачи:
По заданному нелинейному уравнению F(x)=0,
где F(x) – некоторое нелинейное аналитическое выражение, определенное на интервале [a, b],
вычислить корни этого
уравнения с требуемой
1. итераций;
2. половинного деления;
3. Ньютона;
а также представить графическое изображение.
Исходные данные для решения нелинейных уравнений приведены в таблице 4:
Таблица 4
Вариант |
Выражение |
Метод |
Точность |
№ |
F(x) |
N |
E |
04 |
3 |
10-5 |
Метод Ньютона (касательных) основан также на последовательном задании значений 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).
Как и в методе итераций, начальное значение x задается как ближайшее табличное к месту перехода функции F(x) через нуль.
Выражение для производной
F’(x) получают аналитически в результате
дифференцирования функции F(x). Значение
производной может быть получено
приближенно и численным
F’(x)=(F(x+E)-F(x))/E.
Итерационный процесс приближения к корню (последовательное вычисление x(n+1)) продолжается до тех пор, пока будет выполняться условие |x(n+1)-x(n)|>=E.
Код программы:
Задача №5. Численное решение дифференциальных уравнений с заданной точностью
Постановка задачи:
Дифференциальным уравнением первого порядка называется уравнение вида F(x,y,у')=0 или у'=f(x,y). Функция y(x), при подстановке которой уравнение обращается в тождество, называется решением дифференциального уравнения.
С помощью численных методов решить дифференциальное уравнение первого порядка у'=f(x,y).
Исходные данные для решения дифференциальных уравнений
Уравнение: у'=(y2-y)/x
Метод: 1, 5
a,b – параметры
y,x0 – начальные условия
Основные расчетные формулы:
уi+1=уi+(k1+2k2+2k3+k4)/6,
k1=hf(xi,yi),
k2=hf(xi+h/2, yi+k1/2),
k3=hf(xi+h/2, yi+k2/2),
k4=hf(xi+h, yi+k3),
xi+1=xi+h,
где уi+1,уi - значения искомой функции в точках xi+1, xi соответственно, индекс i показывает номер шага интегрирования, h - шаг интегрирования. Начальные условия при численном интегрировании учитываются на нулевом шаге: i=0, x=x0, y=y0.
Код программы:
# *- coding: utf-8 -*-
# подключение библиотеки Tkinter
from Tkinter import *
# импорт математической библиотеки
from math import *
# описание функции
def f(x,y):
return (y**2-y)/x
#Метод Эйлера
def vichislit():
x2=float(a_entry.get())
y2=float(b_entry.get())
b=float(c_entry.get())
h=float((b-x2)/6)
M1=[]
M2=[]
M=[M1, M2]
n=0
while n<7:
y1=y2
x1=x2