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

Автор работы: Пользователь скрыл имя, 09 Декабря 2012 в 21:50, курсовая работа

Краткое описание

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

Вложенные файлы: 1 файл

Министерство образования и науки Российской Федерации.docx

— 328.50 Кб (Скачать файл)

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,fill="blue",smooth=1)

    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,fill="black",width=1)

canvas1.create_line(18,8,20,3,fill="black",width=1)

canvas1.create_line(20,3,22,8,fill="black",width=1)

canvas1.create_text(14,5,text="y")

 

x_axe=[]

xx=(20,370)

x_axe.append(xx)

xx=(500,370)

x_axe.append(xx)

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

canvas1.create_line(492,368,497,370,fill="black",width=1)

canvas1.create_line(492,372,497,370,fill="black",width=1)

canvas1.create_text(495,378,text="x")

canvas1.create_text(15,370,text="0")

canvas1.create_text(200,200,text="y1=A(W), Z=0.2")

canvas1.create_text(200,285,text="y2=A(W), Z=0.4")

canvas1.create_text(200,320,text="y3=A(W), Z=0.7")

canvas1.create_line(115,220,155,200,fill="black",width=1)

canvas1.create_line(120,310,155,285,fill="black",width=1)

canvas1.create_line(100,325,155,320,fill="black",width=1)

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.

 

 

Данные  для интегрирования аналитически заданных функций

Функция:  

  Исходные данные приведены в таблицу 3:

Таблица 3

Вариант

Функция

Интервал

Формула

Числа разбиений

f(x)

а

b

n1

n2

04

0

3

2

10

20


 

Основные расчетные  формулы:

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

 

 

    1. Подключение библиотек
    2. Описание функции
    3. Интегрирование  методом трапеции
    4. Создание виджетов
    1.    Создание главного окна
    1.    Создание заголовка
    2.    Описание в окне буквенных обозначений
    3.    Введение исходных данных
    4.    Создание кнопки закрытия приложения
    5.    Создание кнопки вычисления значения
    6. Отображение главного окна

 

 

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

 

# -*- 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+(i-1)*2*h)

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

вычислить корни этого  уравнения с требуемой точностью E одним из трех методов:

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

    1. Метод Эйлера.
    2. Модифицированный метод Эйлера (вариант 1).
    3. Модифицированный метод Эйлера (вариант 2).
    4. Метод Рунге-Кутта третьего порядка.
    5. Метод Рунге-Кутта четвертого порядка.

 

Исходные данные для решения дифференциальных уравнений

 

Уравнение: у'=(y2-y)/x

Метод: 1,  5

a,b – параметры

y,x0 – начальные условия

 

Основные расчетные  формулы:

 

    1. Метод Эйлера (вариант 1).

 

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

у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

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