Использование численных методов при решении инженерных задач
Аппроксимация линейной, степенной и квадратичной функции. Определение корней уравнения вида f(x)=0 методом половинного деления. Вычисление определенного интеграла методом прямоугольников, трапеций, парабол и Эйлера. Интерполяция формулой Лагранжа.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 21.09.2011 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
Пермский государственный технический университет
Кафедра "Металлорежущие станки и инструменты"
КУРСОВАЯ РАБОТА
по дисциплине "Информатика"
на тему: "Использование численных методов при решении инженерных задач"
Выполнила:
студентка гр. УК-10
Гандинова А.О.
Проверил: преподаватель
г. Пермь 2011
СОДЕРЖАНИЕ
Введение
1. Аппроксимация
1.1 Линейной функции
1.2 Степенной функции
1.3 Квадратичной функции
2. Определение корней уравнения вида f(x)=0 методом половинного деления
3. Вычисление определенного интеграла
3.1 Метод прямоугольников
3.2 Метод трапеций
3.3 Метод парабол
3.4 Метод Эйлера
4 Решение систем линейных алгебраических уравнений
4.1 Метод Гаусса
4.2 Метод Якоби
5 Интерполяция формулой Лагранжа
6 Оптимизация функций одной переменной
6.1 Метод равномерного поиска
6.2 Метод дихотомии
6.3 Метод "Золотого сечения"
7. Блок-схема основной программы
8. Листинг основной программы
9. Результаты
Заключение
Список литературы
Введение
Основным инструментом для решения сложных математических задач в настоящее время являются численные методы, позволяющие свести решение задачи к выполнению конечного числа арифметических действий над числами; при этом результаты получаются в виде числовых значений. Численные методы позволяют получить лишь решение задачи с конкретными значениями параметров и исходных данных.
Многие численные методы разработаны давно, однако при вычислениях вручную они могли использоваться лишь для решения не слишком трудоемких задач. С появлением компьютеров начался период бурного развития численных методов и их внедрения в практику. Только вычислительной машине под силу выполнить за короткое время объем вычислений в миллиарды, триллионы и более операций, необходимых для решения многих современных задач.
Численный метод наряду с возможностью получения результата за приемлемое время должен обладать и ещё одним важным качеством - не вносить в вычислительный процесс значительных погрешностей.
1. Аппроксимация
При эмпирическом (экспериментальном) изучении функциональной зависимости одной величины от другой производят ряд измерений функции у от каждого конкретного значения аргумента х. Результаты измерений могут быть представлены графически либо в виде таблицы.
Задача заключается в аналитическом представлении функциональной зависимости y от x, описывающей результат этих экспериментов. Особенность задачи - погрешность, ошибки. В ходе эксперимента измеренные значения уi содержат случайные ошибки и ошибки измерений. Задача сводится к тому, что бы получить такую функциональную зависимость, которая складывала все ошибки - сглаживала.
Аппроксимирующую функцию y(x) выбирают из ряда стандартных и простых. Обозначим функциональную зависимость f (xi; a1; …an). (1)
Здесь параметры a и n невозможно определить точно, они содержат в себе ошибки. Чтобы получить несмещённые и состоятельные оценки параметров a1; …an - можно воспользоваться методом наименьших квадратов.
Метод наименьших квадратов позволяет получить несмещенные несостоятельные оценки параметра a1; …an. При этом предполагается, что измерения смещения функции произведены независимо друг от друга и ошибки подчиняются закону нормального распределения вероятности.
Суть метода. Если все измерения уi ... yn произведены с одинаковой точностью, то оценки параметров a1; …an определяются из условия, чтобы сумма квадратов отклонения уi была наименьшей.
уi= уi - f (xi; a1; …an)
S = уi2
S=( уi- f (xi; a1; …an))2
Если параметры a1; …an входят в аппроксимирующую функцию (1) линейно, то система уравнений будет тоже линейной; в тех случаях, когда они не линейны, необходимо преобразовать функциональную зависимость.
1.1 Аппроксимация линейной функции
Задача сводится к следующему. Получен ряд значений функции y1, y2, …,yn при соответствующих значениях аргумента x1, x2, …,xn. Необходимо найти значения a и b выражения y=ax+b.
Выражение минимизируемой функции для этого случая примет вид:
S=? (yi-f (a*xi+b)) ^2
Отыскание a и b сводится к решению системы уравнений:
dS/da
dS/db
dS/da=2*?(yi-a*xi-b)*xi
dS/db=2*?(yi-a*xi-bi)
Раскроем знак суммы:
?yi*xi-a*?xi^2-b*?xi=0
?yi-a*?xi-b*N=0
Переобозначим суммы,
C - aD - bA = 0
B - aA - bN = 0
где значения A, B, C, D известны из таблицы.
aD + bA = C
aA + bN = B
Решаем систему методом Крамера и находим параметры a и b
; ;
; .
Определив значения a и b, мы решим поставленную задачу определения параметров выражения y=ax+b.
Данные: х: 2,4,6,8,10,12,14,16,18,20
y: -10.29, -6.64, -6.70, -4.31, -3.26, -2.20, -0.08, 1.50, 3.81, 3.62
График полученной функции:
1.2 Аппроксимация степенной функции
Задача: Задача сводится к следующему. Получен ряд значений функции y1, y2, …,yn при соответствующих значениях аргумента x1, x2, …,xn. Необходимо найти значения a и b выражения y=axb. Для этого прологарифмируем это выражение:
ln y = b ln x + ln a
и произведем замены:
ln x = x*
ln y = y*
ln a = a*
Тогда получим знакомое выражение для прямой линии:
y* = bx* + a
Выражение минимизируемой функции для этого случая примет вид:
S=? (yi-f(a*xi+b))^2
C - aD - bA = 0
B - aA - bN = 0
aD + bA = C
aA + bN = B
Решаем систему методом Крамера и находим параметры a и b
; ;
; ; ;
a=exp (da/dD)
b=exp (db/dD)
Данные: х: 2,4,6,8,10,12,14,16,18,20
у: 0.41, 0.19, 0.10, 0.07, 0.05, 0.04, 0.03, 0.02, 0.02, 0.02
График полученной функции:
1.3 Аппроксимация параболической функции
Задача: Задача сводится к следующему. Получен ряд значений функции y1, y2, …,yn при соответствующих значениях аргумента x1, x2, …,xn. Необходимо найти значения a и b и с выражения y=ax2+bx+c.
Выражение минимизируемой функции для этого случая примет вид:
S=? (yi-f(a*xi^2+b*xi+c))^2
Отыскание a и b сводится к решению системы уравнений:
dS/da=0
dS/db=0
dS/dc=0
Дифференцируем, чтобы найти минимумы:
dS/da=?(yi-a*xi^2-b*xi+c)*xi^2=0
dS/db=?(yi-a*xi^2-b*xi+c)*xi=0
dS/dc=?(yi-a*xi^2-b*xi+c)=0
Раскроем знак суммы:
?yi*xi^2-a*?xi^4-b*?xi^3-c*?xi^2=0
?yi*xi^2-a*?xi^4-b*?xi^3-c*?xi^2=0
?yi-a*?xi^2-b*?xi*yi-c*N=0
Переобозначим суммы:
G - aE - bD - cC = 0
F - aD - bC - cA = 0
B - aC - bA - cN = 0
где A, B, C, D, E, F, G известны из таблицы.
Решаем систему методом Крамера и находим параметры a и b
Определив значения a и b и c, мы решим поставленную задачу определения параметров выражения y=ax2+bx+c.
Данные: х: 1,2,3,4,5,6,7,8,9,10
у: 6.4, 6.8, 4.1, 1.7, 0.4, 0.0, 0.1, 1.0, 2.1, 3.4
График полученной функции:
2. Определение корней уравнения вида f(x)=0 методом половинного деления
Для отделения корней используется известная теорема из математического анализа о свойстве функции непрерывной на замкнутом промежутке: если непрерывная функция f(x) принимает значения разных знаков на концах отрезка [а, b], т.е. f(a)·f(b)<0, то внутри этого отрезка содержится, как минимум один корень уравнения. В общем случае корней уравнения может быть несколько. Корень с заведомо будет единственным, если производная функции f(x) существует и сохраняет постоянный знак внутри интервала (а, b) (f '(x)>0 или f '(x)<0, a<x<b).
Процесс отделения корней начинается с установления знака функции в ограниченных точках a, b. Затем определяются знаки функции в этих промежутках точек, выбор которых учитывает особенности функции f(x). Если существует непрерывная производная и корни легко вычисляются, то процесс отделения корней можно упорядочить. Для этого необходимо посчитать знаки функции в точках корней ее производной и в граничных точках интервала, т.е. в точках а и b.
Уточнение приближенных коней методом дихотомии (половинного деления).
Пусть уравнение f(x) = 0, где f(x) - функция непрерывная на отрезке [а, b] и при этом выполняется условие f(a)·f(b)<0. рассмотрим отрезок [x0, x1], который принадлежит области определения функции, т.е. [а, b].
Допустим, выполняется условие f(x0) · f(x1) ? 0, т.е. обозначает, что на интервале (x0, x1) есть один корень. Находим середину отрезка: . Вычисляем значение функции в этой точке f(x2). Из двух половин выбираем ту, в которой выполняется условие: f(x2)· f(xгр)<0. В этом интервале (x0, x2) ищем середину - точку x3. Вычислим значение функции f(x3). И так до тех пор, пока середина получающихся отрезков не попадет в область нахождение корня.
Если требуется найти корень с точностью Е, то вычисления происходят до тех пор, пока длинна рассматриваемого отрезка не будет ? 2Е. Только в этом случае мы получим корень уравнения с заданной точностью.
Метод Дихотомии прост и надежен. К простому корню происходит схождение для любых непрерывных функций, в том числе и не дифференцируемых. При этом он устойчив к ошибкам округления. Скорость сходимости не большая. За одну итерацию, т.е. за один цикл вычисления, точность увеличивается в 2 раза.
Данные:
у = - х ^ 4 +72 * x ^ 3 - 33 * x ^ 2 -64* x +24
e =0.001
на интервале [-100,100]
График полученной функции:
аппроксимция функция интеграл интерполяция
3. Вычисление определенного интеграла
Ставится задача вычислить интеграл вида: - площадь фигуры, где a и b - нижний и верхний пределы интегрирования; f(x) - непрерывная функция на отрезке [а, b].
Обыкновенный определённый интеграл у которого известна первообразная F(x) вычисляется по формуле: I=F(b)-F(a).
К численному интегрированию обращаются, когда нельзя через элементарные функции аналитически записать первообразную интеграла или когда подобная запись имеет сложный вид. Само численное интегрирование заключается в интерполяции функции f(x) на отрезке [а, b], подходящим полиномом, для которого определенный интеграл вычисляется по известным формулам. Обычно [а, b] разбивается на n частей, а в каждой части применяется соответствующая простая формула. Затем получают составные формулы численного интегрирования.
3.1 Метод прямоугольников
Метод прямоугольников - простейший прием численного интегрирования, при котором функция f(x) заменяется интерполяционным полиномом нулевого порядка, т.е. константой. Подобная замена является неоднозначной, так как константу можно выбрать равной значению подынтегральной функции в любой точке в интервале интегрирования. Приближенное значение интеграла определяется как площадь прямоугольника, одна из сторон которого есть длина отрезка интегрирования, а другая - аппроксимирующая константа.
Отсюда и происходит название методов.
Рис. 2 Метод левых прямоугольников
Для повышения точности интегрирования, отрезок [a,b] разбивается на n-частей, и формула прямоугольника применятся к каждому из них.
Таким образом, площадь криволинейной трапеции заменяется суммой площадей n-прямоугольника, где стороны прямоугольников соответственно равны (b-a)/n. Существует 2 способа отыскания определённого интеграла методом прямоугольника: по левой (Рис.2) и по правой стороне (Рис.3).
Рис. 3 Метод правых прямоугольников
3.2 Метод трапеций
Метод трапеции простой и более точный, чем метод прямоугольника. Данный метод заключается в том, что промежуток интегрирования разбивается на n-частей, при этом интеграл приблизительно считается равным произведению длины промежутка на среднее арифметическое значение подынтегральной функции в начале и в конце этого отрезка.
Метод трапеции называется так потому, что на каждом малом промежутке происходит замена дуги функции f(x) на её хорду.
Соответственно, площадь криволинейной трапеции заменяется на площадь обычной трапеции с вертикальными основаниями.
3.3 Метод парабол или метод Симпсона
Более точные результаты вычисления определённого интеграла можно получить, если кривую y=f(x) заменить на малом интервале параболой.
Отрезок интегрирования [a,b] разбивается на чётное число равных промежутков, соответственно границы промежутка будут следующими:
x0=a
x1=x0+h
x2=x1+h=x0+2h
……………,
x2m=x2m-2+2h=x0+2mh=b
Рассмотрим =
Кривую y=f(x) на промежутке от х0 до х2 заменяем на параболу, проходящую через эти точки.
Необходимо найти уравнение параболы y=ax2+bx+c =>
1) y0(x0)=y0(-h)=ah2-bh+c
2) y1(x1)=y1(0)=c
3) y2(x2)=y2(+h)=ah2+bh+c
Из равенств 1, 2, 3 находим коэффициенты a, b, c:
c=y1, , b - уничтожился
Теперь подставляем в уравнение S и получаем:
Конечное выражение для интеграла примет вид:
3.4 Метод Эйлера
Это простейший метод решения задачи Коши, позволяющий решить дифференциальное уравнение первого порядка. Его точность невелика, поэтому на практике им пользуются редко. Однако, на основе этого метода легче понять алгоритм других, более эффективных методов. Метод Эйлера основан на разложении функции y в ряд Тейлора в окрестности x0:
Если h мало, то члены, содержащие производные второго и более высоких порядков, можно отбросить. Тогда
y(x0+h)=y(x0)+h*y`(x0)
y'(x0) находим из дифференциального уравнения, подставив в него начальное условие. Таким образом, можно получить приближённое значение y при малом смещении h от начальной точки x(x0). Этот процесс можно продолжить, используя следующую рекуррентную формулу
yi+1=yi + h*f(xi,yi), i=1,2,…
Графически метод Эйлера показан на рисунке. Ошибка метода имеет порядок h2.
Данные для всех 4-х методов:
у = -17+8*x+6*x^2+19*x^3
n =10
левая граница интегрирования (а) = 1.0
правая граница интегрирования (в) = 1.9
4. Решение систем линейных алгебраических уравнений
Система m линейных уравнений с n неизвестными в линейной алгебре называется системой линейных алгебраических уравнений (СЛАУ).
Рис. 5 СЛАУ
Эта система - квадратная, если число уравнений m равно числу неизвестных n, совместная - если она имеет хотя бы одно решение.
Необходимо решить СЛАУ, где xk - неизвестные величины; aij - заданные элементы расширенной матрицы системы уравнений. Решением системы называется совокупность n - чисел, таких, что подстановка каждого числа в систему уравнений обращает все её уравнения в тождества. Мы рассмотрим решение СЛАУ двумя методами: метод Гаусса и метод Якоби.
4.1 Метод Гаусса
Этот метод решения СЛАУ осуществляется в два прохода:
1. приведение основной матрицы к верхнетреугольному виду (прямой ход)
2. выражение неизвестных переменных через известные путём подстановки (обратный ход)
a11x1+a12x2+…+a1nxn=b1
a21x1+a22x2+…+a2nxn=b2
……………………………………..
am1x1+am2x2+…+amnxn=bm
Предположим, что элемент a11?0. Последовательно умножая уравнения на коэффициент вида и складывая с i-м уравнением исключаем неизвестный элемент xi из всех уравнений кроме первого, то есть получаем систему вида:
a11x1+a12x2+…+a1nxn=f1
a22x2+…+a2nxn=f2
……………………………………..
am2x2+…+amnxn=fn
Соответственно
= -
, где i,j = 2,…,n
Аналогично исключаются остальные неизвестные, начиная от х2 и заканчивая хn-1.
В итоге мы получим:
a11x1+a12x2+…+a1nxn=f1
a22x2+…+a2nxn=f2
……………………………………..
amnxn=fn
Замечание: выполнение прямого хода возможно только в том случае, когда все элементы после преобразования не равны нулю.
Выполняя последовательно подстановку в последней системе, начиная с последнего уравнения, можно получить все значения неизвестных.
4.2 Метод Якоби
Метод Якоби -- метод простой итерации для решения системы линейных алгебраических уравнений.
, где
Или
Для того, чтобы построить итеративную процедуру метода Якоби, необходимо провести предварительное преобразование системы уравнений к итерационному виду . Оно может быть осуществлено по одному из следующих правил:
где в принятых обозначениях D означает матрицу, у которой на главной диагонали стоят соответствующие элементы матрицы A, а все остальные нули; тогда как матрицы U и L содержат верхнюю и нижнюю треугольные части A, на главной диагонали которых нули, E -- единичная матрица.
Тогда процедура нахождения решения имеет вид:
где k счётчик итерации.
В отличие от метода Гаусса-Зейделя мы не можем заменять на в процессе итерационной процедуры, т.к. эти значения понадобятся для остальных вычислений. Это наиболее значимое различие между методом Якоби и методом Гаусса-Зейделя решения СЛАУ. Таким образом на каждой итерации придётся хранить оба вектора приближений: старый и новый.
1) Условие сходимости
Пусть . Тогда при любом выборе начального приближения :
метод сходится;
скорость сходимости метода равна скорости сходимости геометрической прогрессии со знаменателем ;
верна оценка погрешности: .
2) Условие остановки
Условие окончания итерационного процесса при достижении точности в упрощённой форме имеет вид:
Данные для 2-х методов:
3*x1 + 8*x2 - 7*x3 - 4*x4 = 78
5*x1 - 4*x2 + 2*x3 + 5*x4 = 170
8*x1 - 6*x2 - 1*x3 - 1*x4 = 236
-3*x1 + 9*x2 - 8*x3 + 8*x4 = -360
5. Интерполяция формулой Лагранжа
Лагранж предположил следующую формулу интерполяционного полинома:
Старшая степень аргумента х в полиноме Лагранжа равна n, так как каждое произведение в формуле содержит n множителей х - хi. В узлах х = хi выполняются условия Лагранжа, потому что в сумме остается по одному слагаемому fi, остальные обращаются в нуль за счет нулевых сомножителей в произведениях.
Полином Лагранжа не требует предварительного определения коэффициентов полином путем решения системы уравнений. Однако для каждого значения аргумента х полином приходится пересчитывать вновь. Практическое применение полинома Лагранжа оправдано только в том случае, когда интерполяционная функция вычисляется в сравнительно небольшом количестве точек х. важное место занимает полином Лагранжа в теории численных методов.
На отрезке [a ,b] задана n+1 точка. Требуется найти полином
Ln(x)=l0(x)+l1(x)+…+ln(x),
где li(x) - полином в степени n. Причём,
yi, i=k
li(x)=0
i?k
Так как искомый полином li(x) обращается в ноль в n точках (x0,…,xn), то он имеет вид в углах интерполяции:
li(x)=ci(x-x0)*(x-x1)*…*(x-xi-1)*(x-xi+1)*…*(x-xn), где ci
постоянный коэффициент.
Полагая х=х1 вычисляем этот полином.
Формула Лагранжа:
Данные:
Узлы интерполяции: (-3, 9), (-1, 5), (2, 6), (3, -6)
Абсциссы точек, отличных от узлов интерполяции x(k): -2, 0, 1
6. Оптимизация функций одной переменной
Термином оптимизации в литературе называется процесс или последовательность действий, позволяющие получить уточнённое решение. Хотя конечной целью оптимизации является отыскание наилучшего или оптимального решения, обычно приходится довольствоваться улучшением известных решений. Обычно процесс оптимизации связан со стремлением к оптимальному решению.
В общем виде задачу оптимизации можно сформулировать следующим образом: минимизировать (максимизировать) целевую функцию с учётом ограничений на управляемые переменные. Под минимизацией (максимизацией) функции n-переменных на заданном множестве f(x1,…,xn) m-мерного векторного пространства Еn понимается определение хотя бы одной из точек минимума (максимума) этой функции на заданном множестве U, а также, если это необходимо, и минимального (максимального) значения функции на этом множестве. Задача одномерной оптимизации представляет собой простейшую математическую модель, в которой целевая функция зависит от одной переменной, а допустимым множеством U является отрезок вещественной оси.
f(x)>min, x Є [a, b]
Максимизация целевой функции f(x) эквивалентна минимизации противоположной величин, то есть f(x)>max f(x)>min.
Для решения задачи оптимизации функции f(x) на отрезке [a, b] на практике применяются приближенные методы. Они позволяют найти решение задачи необходимо точно в результате определения конечного числа функции f(x) и, как вариант, её производной. Эти методы называются прямыми.
6.1 Метод равномерного поиска
Суть метода заключается в том, что отрезок [a, b] разбивается на n равных частей точками деления xi=a1+i*(b-a)/n. Вычисляем значение функции f(x) в точках xi, путём сравнения находим xn причём такую, что выполняется равенство f(xn)=min f(xi), для всех I от 0 до n. Погрешность определения точки min xn методом перебора не превосходит величины E=(b-a)/n.
"+" Метода:
Метод позволяет на отрезке [a,b] находить глобальные минимизмы.
"-" Метода:
Скорость поиска очень низкая, а также скорость сходимости.
6.2 Метод дихотомии
Рассмотрим функцию f(x), которую требуется минимизировать на отрезке [a,b]. Делим интервал поиска [a, b] пополам и вычисляем 2 абсциссы, расположенные симметрично относительно середины отрезка.
x1=(a+b)/2-E
x2=(a+b)/2+E
Вычисляем значения функции в точках х1 и х2. Проверяем условие f(x1)<f(x2). Если выполняется, то b=x2. Проверяем условие f(x1)>f(x2). Если выполняется, то a=x1. Затем вводится значение функции f(x), x =(a+b)/2.
1 шаг: проверяем условие /b-a/<2*e, если оно выполняется, переходим к 6 шагу, иначе переходим ко второму;
2 шаг: делим отрезок (a,b) пополам и находим абсциссы, расположенные симметрично относительно точки x=(a+b)/2, соответственно
x1=(a+b)/2-E
x2=(a+b)/2+E
3 шаг: проверяем условие f(x1)<f(x2), если оно выполняется, то b1=x2 и переходим к 1 шагу, иначе переходим к 4 шагу;
4 шаг: проверяем условие f(x1)>f(x2), если оно выполняется, то а1=х1 и переходим к 1 шагу, иначе переходим к 5 шагу;
5шаг: а=х1,b=х2 и переходим к 1 шагу; 6 шаг: выводим значение функции f(x), x=(a+b)/2.
6.3 Метод золотого сечения
Рассмотрим такое симметричное расположение точек х1 и х2 на отрезке [а,b] , при котором одна из них становится пробной точкой и на новом отрезке, полученном после исключения части исходного отрезка. Использование таких точек позволяет ограничиться определением только одного значения функции f(х), т.к. другое значение уже было найдено на одной из предыдущих интеграций.
Для определения точек х1 и х2 рассмотрим отрезок [0,1]. Для определенности положим, что при уменьшении исключается правая часть отрезка. Пусть х2 = Q соответственно х1 = 1 - Q. Пробная точка х1 отрезка [0,1] перейдет в пробную точку х'1 нового отрезка [0,Q] чтобы найти точки х2=Q и х'1= 1-Q делим отрезки [0,1] и [0,Q] в одном и том же отношении должно выполнятся равенство : 1/Q=Q/(1-Q) Решением этой пропорции получается положительный корень = 0,618 Таким образом для произвольного отрезка [а,b] выражение для пробных точек примет вид:
Х1 = Q + (1-Q)(b-а)
Х2 = Q + Q(b-а)
Алгоритм метод:
1 - находим х1=a+(1-q)*(b-a) и вычисляем f(x1);
2 - находим x2=a+q*(b-a) и вычисляем f(x2);
3 - проверяем условие /х2-х1/<e, если да, то х=(х1+х2)/2., f(x) и выводим на экран, иначе переходим к 4;
4 - проверяем условие f(x1)f(x2), если да, то a=x1, x1=x2, иначе переходим ко 2 и 3, иначе переходим к 5;
5 - f(x1)<f(x2), если оно выполняется, то b=x2, x2=x1, при этом переходим к 1 и 3
Данные для всех 3-х методов:
Функция: -30 - 494* х + 9 * х ^ 2
Отрезок: (A,B) = [-100, 100]
E= 0.001
7. Блок-схема основной программы
8. Листинг основной программы
DECLARE SUB lab1 ()
DECLARE SUB lab2 ()
DECLARE SUB lab3 ()
DECLARE SUB lab4 ()
DECLARE SUB lab5 ()
DECLARE SUB lab6 ()
DECLARE SUB lab7 ()
DECLARE SUB lab8 ()
DEF fnx4 (x) = -x ^ 4 + 68 * x ^ 3 - 58 * x ^ 2 - 35 * x + 43
DEF fnx5 (x) = 7 + 15 * x - 12 * x ^ 2 - 16 * x ^ 3
DEF fnx8 (x) = -30 - 494 * x + 9 * x ^ 2
CLS
LOCATE 2, 22
PRINT "Federalnoe agentstvo po obrazovaniyu"
LOCATE 3, 16
PRINT "Permskii gosudarstvennii tehnicheskii universitet"
LOCATE 4, 18
PRINT "Kafedra Metallorejuschie stanki i instrumenti"
LOCATE 10, 31
PRINT "KURSOVAYA RABOTA"
LOCATE 11, 27
PRINT "po discipline informatika"
LOCATE 12, 33
PRINT "Variant N 29"
LOCATE 17, 46
PRINT "Vipolnila: Khudenkykh I.O."
LOCATE 18, 46
PRINT "gr. Uk-09"
LOCATE 19, 46
PRINT "Proveril: Gilev A.V."
LOCATE 23, 34
PRINT "Perm 2010"
SLEEP n
CLS
DO
LOCATE 2, 34
PRINT "Soderjanie:"
LOCATE 10, 15
PRINT "1. Approksimaciya lineinoi funkcii"
LOCATE 11, 15
PRINT "2. Approksimaciya stepennoi funkcii"
LOCATE 12, 15
PRINT "3. Approksimaciya parabolicheskoi funkcii"
LOCATE 13, 15
PRINT "4. Opredelenie kornei uravneniya"
LOCATE 14, 15
PRINT "5. Nahojdenie opredelennogo integrala"
LOCATE 15, 15
PRINT "6. Reschenie SLAU"
LOCATE 16, 15
PRINT "7. Interpolyaciya"
LOCATE 17, 15
PRINT "8. Optimizaciya"
COLOR 7
LOCATE 18, 15: PRINT "press ESC to exit"
k$ = INKEY$
SELECT CASE k$
CASE "1"
CALL lab1: CLS
CASE "2"
CALL lab2: CLS
CASE "3"
CALL lab3: CLS
CASE "4"
CALL lab4: CLS
CASE "5"
CALL lab5: CLS
CASE "6"
CALL lab6: CLS
CASE "7"
CALL lab7: CLS
CASE "8"
CALL lab8: CLS
END SELECT
LOOP UNTIL k$ = CHR$(27)
END
100 DATA 2,4,6,8,10,12,14,16,18,20
101 DATA 0.12,0.29,0.41,0.89,0.84,1.07,1.58,1.72,2.21,2.10
102 DATA 3.26,6.21,8.84,12.55,17.44,20.54,20.16,27.13,27.36,31.68
103 DATA 1,2,3,4,5,6,7,8,9,10
104 DATA 9.7, 6.3, 1.9, 1.0, 0.0, 0.2, 1.1, 3.8, 7.0, 11.2
400 DATA 3,8,-7,-4,78
DATA 5,-4,2,5,170
DATA 8,-6,-1,-1,236
DATA -3,9,-8,8,-360
700 DATA -3,-1,2,3
DATA 2,-10,9,8
SUB lab1
CLS
SCREEN 12
PRINT "Approksimasya1"
PRINT "Variant 29"
VIEW (429, 0)-(0, 429)
WINDOW (-21, -21)-(21, 21)
LINE (-22, 0)-(22, 0), 8
LINE (0, 10)-(0, -10), 8
n = 10
DIM x(n), y(n)
RESTORE 100
FOR I = 1 TO n
READ x(I)
NEXT I
RESTORE 101
FOR I = 1 TO n
READ y(I)
NEXT I
FOR I = 1 TO n
A = A + x(I)
B = B + y(I)
C = C + x(I) * y(I)
d = d + x(I) ^ 2
NEXT I
DD = d * n - A ^ 2
DA = C * n - B * A
DB = d * B - C * A
A = DA / DD
B = DB / DD
FOR I = 1 TO 10
xsr = xsr + x(I)
ysr = ysr + y(I)
NEXT I
xsr = xsr / 10
ysr = ysr / 10
FOR I = 1 TO 10
T = T + (x(I) - xsr) ^ 2
V = V + (y(I) - ysr) ^ 2
O = O + ((x(I) - xsr) * (y(I) - ysr))
NEXT I
R = O / (SQR(T) * SQR(V))
PRINT "R="; R
PRINT "A="; A
PRINT "B="; B
FOR I = 1 TO n
PSET (x(I), y(I)), 4
CIRCLE (x(I), y(I)), .3, 4
NEXT I
FOR x = 0 TO 21 STEP .01
y = A * x + B
PSET (x, y)
NEXT x
SLEEP
END SUB
SUB lab2
CLS
SCREEN 12
PRINT "Approksimasya2"
PRINT "Variant 29"
VIEW (429, 0)-(0, 429)
WINDOW (-35, -35)-(35, 35)
LINE (-35, 0)-(35, 0), 8
LINE (0, 35)-(0, -35), 8
n = 10
DIM x(n), y(n)
RESTORE 100
FOR I = 1 TO n
READ x(I)
NEXT I
RESTORE 102
FOR I = 1 TO n
READ y(I)
NEXT I
FOR I = 1 TO n
A = A + LOG(x(I))
B = B + LOG(y(I))
C = C + LOG(x(I)) * LOG(y(I))
d = d + LOG(x(I)) ^ 2
NEXT I
DD = d * n - A ^ 2
DA = C * n - B * A
DB = d * B - C * A
A = DA / DD
B = EXP(DB / DD)
PRINT "A="; A
PRINT "B="; B
FOR I = 1 TO n
PSET (x(I), y(I)), 4
CIRCLE (x(I), y(I)), .3, 4
NEXT I
FOR x = 0 TO 21 STEP .01
y = B * x ^ A
PSET (x, y)
NEXT x
SLEEP
END SUB
SUB lab3
CLS
SCREEN 12
PRINT "Approksimasya3"
PRINT "Variant 29"
VIEW (429, 0)-(0, 429)
WINDOW (-21, -21)-(21, 21)
LINE (-30, 0)-(30, 0), 8
LINE (0, 30)-(0, -30), 8
n = 10
DIM x(n), y(n)
RESTORE 103
FOR I = 1 TO n
READ x(I)
NEXT I
RESTORE 104
FOR I = 1 TO n
READ y(I)
NEXT I
FOR I = 1 TO n
A = A + x(I)
B = B + y(I)
f = f + x(I) * y(I)
C = C + x(I) ^ 2
g = g + x(I) ^ 2 * y(I)
E = E + x(I) ^ 4
d = d + x(I) ^ 3
NEXT I
DD = (E * C * n + 2 * A * d * C) - (C ^ 3 + d ^ 2 * n + A ^ 2 * E)
DA = (g * C * n + d * A * B + f * A * C) - (B * C ^ 2 + f * d * n + A ^ 2 * g)
DB = (E * f * n + g * A * C + d * B * C) - (C ^ 2 * f + d * g * n + B * A * E)
DC = (E * C * B + d * A * g + d * f * C) - (C ^ 2 * g + d ^ 2 * B + A * f * E)
A = DA / DD
B = DB / DD
C = DC / DD
PRINT "A="; A
PRINT "B="; B
PRINT "C="; C
FOR I = 1 TO n
PSET (x(I), y(I)), 4
CIRCLE (x(I), y(I)), .3, 4
NEXT I
FOR x = 0 TO 21 STEP .01
y = A * x ^ 2 + B * x + C
PSET (x, y)
NEXT x
SLEEP
END SUB
SUB lab4
CLS
y = -x ^ 4 + 68 * x ^ 3 - 58 * x ^ 2 - 35 * x + 43
SCREEN 12
LOCATE 1, 1
VIEW (0, 0)-(479, 479)
WINDOW (-100, -10000000)-(100, 10000000)
LINE (-1000000, 0)-(1000000, 0)
LINE (0, -10000000)-(0, 10000000)
FOR x = -100 TO 100 STEP .01
PSET (x, fnx4(x))
NEXT x
E = .001
INPUT "kolichestvo korney"; k
FOR I = 1 TO k
INPUT "A="; A
INPUT "B="; B
WHILE ABS(A - B) > 2 * E
C = (A + B) / 2
IF fnx4(A) * fnx4(C) > 0 THEN A = C ELSE B = C
WEND
PRINT "x("; I; ")="; (A + B) / 2
NEXT I
SLEEP
END SUB
SUB lab5
CLS
SCREEN 12
LOCATE 1, 1
VIEW (0, 0)-(479, 479)
A = 2
B = 3.1
y = 7 + 15 * x - 12 * x ^ 2 - 16 * x ^ 3
WINDOW (A - 2, fnx5(A - 2))-(B + 2, fnx5(B) - 20)
LINE (A - 2, 0)-(B + 2, 0)
LINE (0, -100)-(0, 20)
FOR x = A TO B STEP .001
PSET (x, fnx5(x))
NEXT x
LINE (A, 0)-(A, fnx5(A))
LINE (B, 0)-(B, fnx5(B))
PAINT (A + .5, -1), 4, 15
n = 10
H = (B - A) / n
PRINT "Metod pryamougolnika"
SPL = 0
FOR I = 0 TO n - 1
x = A + I * H
SPL = SPL + fnx5(x)
NEXT I
SPL = SPL * H
PRINT "SPL="; SPL
SPR = 0
x = 0
FOR I = 1 TO n
x = A + I * H
SPR = SPR + fnx5(x)
NEXT I
SPR = SPR * H
PRINT "SPR="; SPR
PRINT "Metod trapesii"
ST = 0
FOR I = 1 TO n - 1
x = A + I * H
ST = ST + fnx5(x)
NEXT I
ST = (ST + (fnx5(A) + fnx5(B)) / 2) * H
PRINT "ST="; ST
PRINT "Metod paraboly"
n = 5
H = (B - A) / (2 * n)
SP = 0
FOR I = 1 TO 2 * n - 1 STEP 2
x = A + I * H
SP = SP + fnx5(x) * 4
NEXT I
FOR I = 2 TO 2 * n - 2 STEP 2
x = A + I * H
SP = SP + fnx5(x) * 2
NEXT I
SP = (SP + fnx5(A) + fnx5(B)) * H / 3
PRINT "SP="; SP
PRINT "Metod Elera"
Se = 0
H = (B - A) / n
FOR I = 1 TO n - 1
x = A + I * H
Se = Se + fnx5(x)
NEXT I
Se = H * (Se + (fnx5(A) + fnx5(B)) / 2) - H / 12 * (fnx5(B + H / 2) - fnx5(B - H / 2) - fnx5(A + H / 2) + fnx5(A - H / 2))
PRINT "Se="; Se
SLEEP
SCREEN 0
END SUB
SUB lab6
CLS
PRINT "metod gaussa"
DIM A(4, 5), x(4), xt(4)
RESTORE 400
FOR I = 1 TO 4
FOR J = 1 TO 5
READ A(I, J)
PRINT A(I, J);
NEXT J
NEXT I
FOR k = 1 TO 3
FOR I = k + 1 TO 4
q = -A(I, k) / A(k, k)
FOR J = k TO 5
A(I, J) = A(I, J) + q * A(k, J)
NEXT J
NEXT I
NEXT k
FOR I = 1 TO 4
FOR J = 1 TO 5
PRINT A(I, J);
NEXT J
NEXT I
FOR I = 4 TO 1 STEP -1
q = A(I, 5)
FOR J = 4 TO I + 1 STEP -1
q = q - A(I, J) * x(J)
NEXT J
x(I) = q / A(I, I)
NEXT I
FOR I = 1 TO 4
PRINT "X("; I; ")="; x(I)
NEXT I
PRINT "Metod Yakobi"
E = .5
FOR I = 1 TO 4 STEP 1
x(I) = 0
NEXT I
z = 0
FOR I = 1 TO 4 STEP 1
s = 0
FOR J = 1 TO 4 STEP 1
IF I <> J THEN s = s + A(I, J)
NEXT J
PRINT "S="; s, A(I, I)
IF ABS(A(I, I)) <= ABS(s) THEN PRINT "Uslovie ne vypolnyaetsya": GOTO 333
NEXT I
k = 0
n = 100
DO
FOR I = 1 TO 4 STEP 1
xt(I) = A(I, 5)
FOR J = 1 TO 4 STEP 1
IF I <> J THEN xt(I) = xt(I) - A(I, J) * x(J)
NEXT J
xt(I) = xt(I) / A(I, I)
NEXT I
FOR I = 1 TO 4 STEP 1
IF ABS(x(I) - xt(I)) > E THEN z = ABS(x(I) - xt(I))
x(I) = xt(I)
NEXT I
k = k + 1
LOOP WHILE z > E AND k < n
PRINT z
FOR I = 1 TO 4 STEP 1
PRINT "x("; I; ")="; x(I)
NEXT I
333
SLEEP
END SUB
SUB lab7
CLS
SCREEN 12
VIEW (0, 0)-(479, 479)
WINDOW (-15, -15)-(15, 15)
LINE (-15, 0)-(15, 0)
LINE (0, -15)-(0, 15)
RESTORE 700
DIM x(4), y(4)
FOR I = 1 TO 4
READ x(I)
NEXT I
FOR I = 1 TO 4
READ y(I)
CIRCLE (x(I), y(I)), .3, 3
NEXT I
L = 0
PV = 0
PN = 0
FOR XK = -5 TO 5 STEP .125 / 8
L = 0
FOR I = 1 TO 4
PV = 1
PN = 1
FOR J = 1 TO 4
IF I <> J THEN PV = PV * (XK - x(J)): PN = PN * (x(I) - x(J))
NEXT J
L = L + y(I) * PV / PN
NEXT I
PSET (XK, L)
IF XK = -2 OR XK = 0 OR XK = 1 THEN PRINT "XK="; XK, "L ("; XK; ") ="; L
NEXT XK
SLEEP
END SUB
SUB lab8
CLS
y = -30 - 494 * x + 9 * x ^ 2
PRINT "metod ravnomernogo poiska"
INPUT "A="; A
INPUT "B="; B
E = .01
MIN = A
FOR x = A + E TO B STEP E
IF fnx8(x) < fnx8(MIN) THEN MIN = x
NEXT x
PRINT "MIN="; MIN, "fnx8(MIN)="; fnx8(MIN)
PRINT "metod dihotomii"
WHILE ABS(A - B) > 2 * E
X1 = (A + B) / 2 - E
X2 = (A + B) / 2 + E
IF fnx8(X1) > fnx8(X2) THEN A = X1
IF fnx8(X1) < fnx8(X2) THEN B = X2
IF fnx8(X1) = fnx8(X2) THEN A = X1: B = X2
WEND
PRINT "MIN="; (A + B) / 2, "fnx8 (MIN)="; fnx8((A + B) / 2)
PRINT "metod zolotogo sechenia"
q = (SQR(5) - 1) / 2
X1 = A + (1 - q) * (B - A)
X2 = A + q * (B - A)
WHILE ABS(X2 - X1) > 2 * E
IF fnx8(X1) >= fnx8(X2) THEN
A = X1
X1 = X2
X2 = A + q * (B - A)
ELSE B = X2: X2 = X1: X1 = A + (1 - q) * (B - A)
END IF
WEND
PRINT "MIN="; (X1 + X2) / 2, "fnx8 (MIN)="; fnx8((X1 + X2) / 2)
SLEEP
END SUB
9. Результаты
Лабораторная работа №1
A = 0.1215455
B = -0.2140002
R= 0.98285
Лабораторная работа №2
A = 1.000922
B = 1.585807
Лабораторная работа №3
A = 0.5272728
B = -5.627879
C = 14.87333
Лабораторная работа №4
X1 = -0.7919922
X2 = 67.12822
Лабораторная работа №5
SPL = -321.1243 - метод прямоугольника слева
SPR = -365.0667 - метод прямоугольника справа
ST = -343.0955 - метод трапеции
SP = -342/7974 - метод параболы
Se = -342.7974 - метод Эйлера
Лабораторная работа №6
X (1) = 46
X (2) = 18
X (3) = 36
X (4) = -12
S(-3)=-3
Лабораторная работа №7
X (-2) = -9.3333333
X (0) = -4.3
X (1) = 3.466666
Лабораторная работа №8
MIN = 27.44349
F (MIN) = -6808.778 - метод равномерного поиска
F (MIN) = -6808.778 - метод дихотомии
F (MIN) = -6808.777 - метод "золотого сечения"
Заключение
Главной целью моей работы было овладеть конкретными численными методами решения различных задач на ЭВМ, используя программу Qbasic.
Работа связана с применением численных методов, складывается из теоретических исследований, анализа работы алгоритмов при решении, вычислительного момента и рядя других моментов.
Порядок выполнения лабораторных работ:
- изучение теоретической части
- внимательное изучение поставленной задачи
- самостоятельное выполнение заданий
- отчет по работе
Выполнив курсовую работу, я научилась выполнять разные задачи в Qbasic, использовать различные численные методы при решении инженерных задач.
Сделав все лабораторные работы, я сформировала и систематизировала понятия о приближенных, численных методах оценки точности результатов. Также я научилась решать задачи методом математического анализа, решения уравнений, приближенных функций и численного интегрирования, и ряд других задач.
Список литературы
1. Лекции по информатике
2. С. Русаков "Базовый курс"
3. Г. Зельднер "Программирование на языке Quick Basic 4.5"
4. И. Сафронов "Бейсик в задачах и примерах"
5. Г. Гутман "Изучаем Basic "
Размещено на Allbest.ru
Подобные документы
Построение графика функции. Поиск корней уравнения методом половинного деления. Определение минимума функции методом перебора и значения аргумента. Вычисление определенного интеграла на заданном отрезке с использованием метода правых прямоугольников.
контрольная работа [316,1 K], добавлен 13.11.2014Методика и основные этапы процесса поиска уравнения по методу половинного деления, его сущность и содержание, анализ результатов. Порядок вычисления экстремумов функции методом перебора. Расчет определенного интеграла по методу правых прямоугольников.
контрольная работа [200,9 K], добавлен 20.01.2014Метод численного интегрирования. Использование метода половинного деления для решения нелинейного уравнения. Определение отрезка неопределенности для метода половинного деления. Получение формулы Симпсона. Уменьшение шага интегрирования и погрешности.
курсовая работа [3,0 M], добавлен 21.05.2013Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.
курсовая работа [21,0 K], добавлен 03.01.2010Решение уравнения методом половинного деления. Программа в Matlab для уравнения (x-2)cos(x)=1. Решение нелинейных уравнений методом Ньютона. Интерполяция заданной функции. Решение системы линейных алгебраических и обыкновенных дифференциальных уравнений.
курсовая работа [1,4 M], добавлен 15.08.2012Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.
курсовая работа [398,1 K], добавлен 26.02.2015Тестирование модуля отыскания корня уравнения методом половинного деления. Схема алгоритма тестирующей программы. Численное интегрирование по методу Симпсона с оценкой погрешности по правилу Рунге. Проверка условий сходимости методов с помощью MathCAD.
курсовая работа [1,1 M], добавлен 04.02.2011Решение нелинейного уравнения: отделение корней и уточнение корня по методу хорда. Численное интегрирование: метод входящих прямоугольников. Вычисление площади криволинейной трапеции с разбивками. Решение примера методом интегрирования по частям.
курсовая работа [197,9 K], добавлен 20.01.2009Обзор элементов языка программирования Паскаль, решение задач путем использования численных методов на компьютере. Алгоритм нахождения интеграла функции с помощью метода прямоугольников. Комплекс технических средств, необходимых для решения задачи.
контрольная работа [36,6 K], добавлен 07.06.2010