Решение нелинейного уравнения методом хорд
Автор: alex-p14 • Декабрь 28, 2021 • Контрольная работа • 849 Слов (4 Страниц) • 372 Просмотры
- Задание (математическая постановка задачи):
Решите уравнение методом хорд. Для отделения корней используйте аналитический метод.[pic 1]
- Постановка программной задачи:
Необходимо разработать алгоритм и программную реализацию функции, вычисляющей значение функции 8t^3 + 4t^2 + 4t – 0,6 = 0 методом хорд с заданной точностью.
На вход разрабатываемой функции подаётся имя функции, вычисляющей уравнение, интервал [a,b], на котором ищется корень, а также погрешность. Уравнение вводят через интерфейс пользователя. Выходное значение - функции найденное значение корня.
Также необходимо провести сравнение разработанной функции с функцией, где вычисления проводятся с помощью встроенных функций MATLAB.
В программе выполнена проверка на ввод некорректных данных. Проводятся проверки на допустимые значения, верно введенную погрешность (должна быть больше нуля), является ли интервал правильным (на нем присутствует корень). Если данные не удовлетворяют условию, то выводится ошибка с конкретным сообщением.
Среда функционирования программного продукта: программа была разработана на компьютере с операционной системой Windows10 в программной среде MATLAB версии R2021b.
- Описание метода численной реализации задания:
Решение уравнения методом хорд, производят по формуле: [pic 2]
[pic 3]
[a; b] интервал на котором находится корень уравнения f(t) = 0.
- неподвижный конец отрезка на интервале [a; b].[pic 4]
- конец отрезка со стороны которого мы приближаемся к корню f(x) = 0.[pic 5]
Расчёт производится до тех пор, пока не будет выполняться условие:
[pic 6]
– заданная точность[pic 7]
- Ручной счёт примера предложенным методом:
Вычислим значение нелинейного уравнения методом хорд. Заданная точность: (четыре знака после запятой).[pic 8][pic 9]
Решение:
- Локализация корня:
Теорема 1. Если функция y = f(x) непрерывна на отрезке [a, b] и принимает на его концах значение разных знаков, т.е. f(a)*f(b) < 0, то внутри отрезка [a, b] существует, по крайней мере, один корень уравнения f(x) = 0.
– область определения функции f(t) = [pic 10][pic 11]
- первая производная функции f(t); [pic 12][pic 13]
– вторая производная функции f(t)[pic 14]
f(t) – возрастающая функция на R
- это первая точка[pic 15]
- это вторая точка[pic 16]
[pic 17]
На отрезке [a; b] выбирается такое число , при котором выполняется условие: [pic 18][pic 19]
, так как – неподвижный конец отрезка;[pic 20][pic 21]
; – конец отрезка со стороны которого мы приближаемся [pic 22][pic 23]
к корню f(x) = 0;
- Уточнение корня:
[pic 24]
[pic 25]
[pic 26]
[pic 27]
[pic 28]
[pic 29]
[pic 30]
[pic 31]
[pic 32]
[pic 33]
[pic 34]
[pic 35]
[pic 36]
[pic 37]
[pic 38]
[pic 39]
[pic 40]
[pic 41]
[pic 42]
[pic 43]
[pic 44]
[pic 45]
[pic 46]
[pic 47]
[pic 48]
[pic 49]
[pic 50]
[pic 51]
[pic 52]
[pic 53]
[pic 54]
[pic 55]
[pic 56]
[pic 57]
[pic 58]
[pic 59]
[pic 60]
[pic 61]
[pic 62]
[pic 63]
[pic 64]
[pic 65]
[pic 66]
[pic 67]
[pic 68]
[pic 69]
[pic 70]
[pic 71]
[pic 72]
[pic 73]
[pic 74]
[pic 75]
[pic 76]
[pic 77]
- Разработка алгоритма решения задачи:
[pic 78]
Рисунок 1. Блок-схема основной программы
[pic 79]
Рисунок 2. Блок-схема разработанной функции
[pic 80]
Рисунок 3. Блок-схема встроенной функции среды MatLab
- Листинг программы
Листинг основной программы:
func1 = input('Введите функцию: ','s');
func = inline(func1); %Перевод строки в функцию;
a = input('Введите первый конец отрезка: ', 's');
a = str2double(a);
b = input('Введите второй конец отрезка: ', 's');
b = str2double(b);
if func(a)*func(b)>0 %Произведение функции на концах отрезка должно быть отрицательным;
error('На этом промежутке корня нет');
end
e = input('Введите необходимую точность поиска корня: ', 's');
...