Урок 4. Математическое программирование на языке Python. Алгоритмы приближенного решения уравнений

Федеральное агентство железнодорожного транспорта Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Сибирский государственный университет путей сообщения» в г.Новоалтайске

Автор: преподаватель информатики и схемотехники Чебан Олег Олегович
Дата создания: 2016, г. Новоалтайск

Урок 4. Математическое программирование на языке Python. Алгоритмы приближенного решения уравнений.
Цели урока: Научиться находить корни уравнений по алгоритму деления отрезка пополам.
Тип урока: смешанный (получение новых знаний, практическая работа).
Оборудование:
Язык программирования Python (официальный сайт python.org).
Среда разработки Geany (официальный сайт geany.org).
Проектор.

I. Сущность метода приближенного решения уравнений.

Рассмотрим задачу, для решения которой часто привлекаются компьютеры задачу нахождения корней уравнений вида F(x)=0, где F(x) некоторая непрерывная функция.
Пример: Площадь кругового сегмента с радиусом R и с заданным в радианах центральным углом А равна:
HYPER13 EMBED Equation.3 HYPER14HYPER15
Рис. 1. Круговой сегмент.
Задача. Определить величину центрального угла по данному радиусу R и площади S, т. е. найти корень уравнения X:
X – Sin(X) - HYPER13 EMBED Equation.3 HYPER14HYPER15
В данном случае невозможно воспользоваться известными формулами для нахождения значения X. Рассмотри задачу в следующей постановке:
Дано уравнение F(x)=0 и такие числа a,b (a
Требуется определить значение корня с погрешностью, не превосходящей данного положительного числа Eps. При такой постановке для решения задачи может быть применен алгоритм деления отрезка пополам.
Взяв середину отрезка [a,b], т. е. Точку абсцисс с координатой c=(a+b)/2, можно сузить диапазон поиска корня: перейти от отрезка [a,b] к отрезку [a,c] или [c,b] в зависимости от знака F(c), если F(a)*F(c)<0, то перейти к отрезку [a,c], если F(a)*F(c)>0, то перейти к отрезку [c,b]. После нескольких шагов получится отрезок, длина которого будет меньше данного положительного числа Eps. Любая точка такого отрезка, например, один из его концов, подходит в качестве решения поставленной задачи.
Вернемся к рассмотрению задачи определения центрального угла по площади сегмента и радиусу круга.
Здесь a=0, b=2*Pi (0<=x<=2*Pi)

HYPER13 EMBED Equation.3 HYPER14HYPER15, при a=0, 0-Sin(0)-(2*Pi)/R^2=0
HYPER13 EMBED Equation.3 HYPER14HYPER15, при и=2*Pi, 2*Pi-Sin(2*Pi)-(2*S)/R^2=0

В программе имеет смысл описать переменную U и присвоить ей значение (2*S)/R^2 это избавит от многократных вычислений данного значения.

Программа на Python.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math

r=input("Введите радиус: ")
s=input("Введите площадь семента: ")
eps=input("Введите точность Eps: ")

u=(2*s)/float(pow(r,2))
a=0; b=2*math.pi
fa=-u # значение функции F(0)
while (b-a)>=eps:
c=(a+b)/2
fc=c-math.sin(c)-u
if fa*fc<=0:
b=c
else:
a=c
fa=fc
print "Значение корня уравнения: ",a
print "Значение угла A подставим в уравнение F(x)=0"
print
print "Контроль: ","%.6f" % (a-math.sin(a)-u) # F(x) стремиться к 0

Разберем формат вывода действительных чисел в Питоне:

"%.6f" % (a-math.sin(a)-u)
"%.6f" 6 знаков после запятой, f стандартный формат вывода вещественных чисел
(выражение) математическое выражение в круглых скобках!


Задание на урок. Найти с точностью 0.0001 корни уравнений на указанных отрезках.

1). HYPER13 EMBED Equation.3 HYPER14HYPER15 HYPER13 EMBED Equation.3 HYPER14HYPER15

2). HYPER13 EMBED Equation.3 HYPER14HYPER15 [-2; 1]


Приложенные файлы

  • doc python04
    Чебан О. О.
    Размер файла: 49 kB Загрузок: 4