Решение уравнений в виде процедуры-подпрограммы
Реализация решения нелинейного уравнения с заданными параметрами в виде процедуры-подпрограммы. Графический метод отделения корней уравнения. Основные методы уточнения корней уравнения. Описание процедур и функций, общий алгоритм и текст программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.03.2011 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Анализ предметной области (теория). Постановка задачи
- Метод простых итераций
- Метод Ньютона (метод касательных)
- Метод хорд
- Спецификация
- Метод решения
- Организация данных
- Описание процедур и функций
- Общий алгоритм
- Графический способ нахождения интервала изоляции корня
- Контрольный пример
- Текст программы
- Список используемой литературы
Анализ предметной области (теория). Постановка задачи
Дано нелинейное уравнение 1 - 5X + X3 на заданном отрезке [0,1] c заданной точностью =0.0001, нужно реализовать его решение в виде процедуры-подпрограммы следующими методами:
1. методом хорд;
2. методом касательных (Ньютона);
3. методом простой итерации;
4. методом половинного деления.
Заданное уравнение: 1 - 5X + X3 можно решить двумя методами решения уравнения:
1. Графический метод отделения корней уравнения;
2. Основные методы уточнения корней уравнения.
Основные методы уточнения корней уравнения
Метод половинного деления.
Дано нелинейное уравнение: f (x) = 0
Найти корень уравнения, принадлежащий интервалу [a,b], с заданной точностью .
Для уточнения корня методом половинного деления необходимо выполнить следующие операции:
1. Делим интервал пополам:
- координаты середины отрезка
2. В качестве нового интервала изоляции принимаем ту половину интервала, на концах которого функция имеет разные знаки (рис.1) .
Рис.1. Графический метод отделения корней уравнения методом половинного деления
Для этого:
a) Вычисляем значение функции f (x) в точках a и t.
b) Проверяем: если f (a) f (t) < 0, то корень находится в левой половине интервала [a,b] (рис.1. а) . Тогда отбрасываем правую половину интервала и делаем переприсвоение b=t.
c) Если f (a) f (t) < 0 не выполняется, то корень находится в правой половине интервала [a,b] (рис.1. б) . Тогда отбрасываем левую половину и делаем переприсвоение a=t. В обоих случаях мы получим новый интервал [a,b] в 2 раза меньший предыдущего.
3. Процесс, начиная с пункта 1, циклически повторяем до тех пор, пока длина интервала [a,b] не станет равной либо меньшей заданной точности, т.е.
Рис.2. Схема алгоритма уточнения корней по методу половинного деления
Метод простых итераций
В ряде случаев весьма удобным приемом уточнения корня уравнения является метод последовательных приближений (метод итераций).
Пусть с точностью необходимо найти корень уравнения f (x) =0, принадлежащий интервалу изоляции [a,b]. Функция f (x) и ее первая производная непрерывны на этом отрезке.
Для применения этого метода исходное уравнение f (x) =0 должно быть приведено к виду
X= ц (x)
В качестве начального приближения 0 выбираем любую точку интервала [a,b].
Далее итерационный процесс поиска корня строится по схеме:
x1= ц (x0)
x2= ц (x1)
xn= ц (xn-1)
В результате итерационный процесс поиска реализуется рекуррентной формулой (4.3). Процесс поиска прекращается, как только выполняется условие
или число итераций превысит заданное число N.
Для того, чтобы последовательность х1, х2,…, хn приближалась к искомому корню, необходимо, чтобы выполнялось условие сходимости:
Рис.3. Геометрический смысл метода
Переходим к построению схемы алгоритма (рис.4) . Вычисление функции оформим в виде подпрограммы.
Рис.4. Схема алгоритма уточнения корня методом итераций
Метод Ньютона (метод касательных)
Рассмотренные ранее методы решения нелинейных уравнений являются методами прямого поиска. В них для нахождения корня используется нахождение значения функции в различных точках интервала [a,b].
Метод Ньютона относится к градиентным методам, в которых для нахождения корня используется значение производной.
Дано нелинейное уравнение: f (x) =0
Найти корень на интервале [a,b] с точностью .
Метод Ньютона основан на замене исходной функции f (x), на каждом шаге поиска касательной, проведенной к этой функции. Пересечение касательной с осью Х дает приближение корня (Рис.5) .
Выберем начальную точку x0=b (конец интервала изоляции). Находим значение функции в этой точке и проводим к ней касательную, пересечение которой с осью Х дает нам первое приближение корня x1.
Рис.5. Графический способ отделения корней методом касательных
x1 = x0 - h0,где,
Поэтому
В результате итерационный процесс схождения к корню реализуется рекуррентной формулой
Процесс поиска продолжаем до тех пор, пока не выполнится условие:
Упростим условие (4.7), исходя из (4.6). Получим:
Метод обеспечивает быструю сходимость, если выполняется условие:
т.е. первую касательную рекомендуется проводить в той точке интервала [a,b], где знаки функции f (x0) и ее кривизны f" (x0) совпадают.
Рис.6. Схема алгоритма уточнения корня методом Ньютона
Метод хорд
Метод основан на замене функции f (x) на каждом шаге поиска хордой, пересечение которой с осью Х дает приближение корня.
При этом в процессе поиска семейство хорд может строиться:
а) при фиксированном левом конце хорд, т.е. z=a, тогда начальная точка х0=b (рис.7а) ;
б) при фиксированном правом конце хорд, т.е. z=b, тогда начальная точка х0=a (рис.7б) ;
Рис.7. (а, б) Графический способ отделения корней методом хорд
В результате итерационный процесс схождения к корню реализуется рекуррентной формулой:
для случая а)
для случая б)
Процесс поиска продолжается до тех пор, пока не выполнится условие
Метод обеспечивает быструю сходимость, если f (z) f" (z) > 0, т.е. хорды фиксируются в том конце интервала [a,b], где знаки функции f (z) и ее кривизны f" (z) совпадают.
Рис.8. Схема алгоритма уточнения корня методом хорд
Спецификация
Входные данные:
· E (точность, с которой должен быть вычислен результат)
· a (левая граница промежутка)
· b (правая граница промежутка)
Выходные данные:
· Меню с предлагаемыми методами решения уравнения.
Программа должна:
· Запросить входные данные
· Вывести меню с предлагаемыми методами решения.
· Вывести численное значение результата и количество итераций.
Метод решения
Задачу о нелинейном уравнении можно разбить на три блока:
блок ввода
блок выбора метода решения
блок вывода результата
И реализовать его решение следующими методами:
1. методом двойного деления;
2. методом хорд;
3. методом касательных (Ньютона);
4. методом простой итерации.
уравнение алгоритм программа корень
Организация данных
A, - Левая граница отрезка
B, - Правая граница отрезка
EPS, - Точность нахождения корня =10 - N
X: real; - Для записи конечного результата вычисления
k: byte; - Число итераций
с: real-Середина отрезка
x0: real-Задаваемый корень
Описание процедур и функций
function f (X: real): real; - функция вычисления уравнения 1 - 5X + X3
на заданном отрезке [0,1].
function df (X: real): real; - функция вычисления производной.
function fi (x: real): real; - функция вычисления уравнения вида х= (х). (1).
function d2f (x: real): real; - функция вычисления двойной производной.
procedure del_2 (a,b,eps: real; var x: real; var k: integer); - процедура вычисления корня и количества итераций нелинейного уравнения 1 - 5X + X3 на заданном отрезке [0,1] методом двойного деления.
procedure simp_iter (a,b,eps: real; var x: real; var k: integer); - процедура вычисления корня и количества итераций нелинейного уравнения 1 - 5X + X3 на заданном отрезке [0,1] методом простых итераций.
procedure kasat (x0,eps: real; var x: real; var k: integer); - процедура вычисления корня и количества итераций нелинейного уравнения 1 - 5X + X3 на заданном отрезке [0,1] методом касательных.
procedure xord (a,b,eps: real; var x: real; var k: integer); - процедура вычисления корня и количества итераций нелинейного уравнения 1 - 5X + X3 на заданном отрезке [0,1] методом хорд.
Общий алгоритм
Рис.9. Блок-схема работы программы.
Графический способ нахождения интервала изоляции корня
Уравнение 1 - 5X + X3 на заданном отрезке [0,1] представим в виде уравнения X3 = 5X-1 и уравнения Y = 5X-1
Точка пересечения и есть решение уравнения 1 - 5X + X3 на заданном отрезке [0,1]
Контрольный пример
Рисунок 1
Рисунок 2
Рисунок 3
Рисунок 4
Рисунок 5
Рисунок 6
Программа выводит меню. Пользователь должен выбрать 1 пункт меню, чтобы ввести точность (Рис.1), после того как пользователь вводит точность (Рис.2) и после нажатия клавиши Enter, программа выводит меню заново. Теперь пользователь может выбрать в меню любой из методов (Рис.3, Рис.4, Рис.5,Рис.6, Рис.7):
Методом двойного деления;
Методом простых итераций;
Методом касательных;
Методом хорд.
В ходе работы программы получены следующие результаты:
X c точностью 0.0001 |
Количество итераций |
||
1 Метод половинного деления |
0.20162964 |
14 |
|
2 Метод хорд |
0.20162914 |
8 |
|
3 Метод касательных |
0.20163968 |
2 |
|
4 Метод простых итераций |
0.20163871 |
2 |
Вывод: Наиболее быстрыми и эффективными методами решения нелинейного уравнения 1 - 5X + X3 на заданном отрезке [0,1] c заданной точностью , являются: метод простых итераций и метод касательных.
Текст программы
program Projectmy;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
x,a,b,eps: real;
n, i: integer;
function f (x: real): real;
begin
f: =1-5*x+x*x*x; end;
function fi (x: real): real;
begin
fi: = (x*x*x+1) /5;
end;
function df (x: real): real;
begin
df: =3*x*x-5;
end;
function d2f (x: real): real;
begin
d2f: =6*x*x;
end;
Procedure del_2 (a,b,eps: real; var x: real; var k: integer);
var
c,ya,yc: real;
begin
k: =0;
ya: =f (a);
while b-a>eps do
begin
k: =k+1;
c: =0.5* (a+b);
yc: =f (c);
if ya*yc>0 then
begin
a: =c;
ya: =yc;
end
else b: =c;
end;
x: =0.5* (a+b);
end;
Procedure simp_iter (x0,eps: real; var x: real; var k: integer);
begin
k: =0;
x: =fi (x0);
while abs (x-x0) >=eps do
begin
k: =k+1;
x0: =x;
x: =fi (x0);
end;
end;
Procedure kasat (x0,eps: real; var x: real; var k: integer);
begin
k: =0;
x: =x0-f (x0) /df (x0);
while abs (x-x0) >=eps do
begin
k: =k+1;
x0: =x;
x: =x0-f (x0) /df (x0);
end;
end;
Procedure xord (a,b,eps: real; var x: real; var k: integer);
var
xk,fx,fk,h: real;
begin
k: =0;
if f (a) *d2f (a) >0
then begin xk: =a; x: =b end
else begin xk: =b; x: =a end;
fk: =f (xk);
repeat
k: =k+1;
fx: =f (x);
h: =fx* (x-xk) / (fx-fk);
x: =x-h;
until abs (h) <eps;
end;
procedure menu (var i: integer);
begin
writeln ('1 - Vvedite eps');
writeln ('2 - Metod polovinogo deleniay');
writeln ('3 - Metod iter');
writeln ('4 - Metod kasatelnix');
writeln ('5 - Metod xord');
writeln ('6 - exit');
repeat
writeln (' ENTER: ');
readln (i);
until (i>0) and (i<7);
end;
begin
a: =0;
b: =1;
while true do
begin
menu (i);
case i of
1: begin
writeln ('vvedute eps');
readln (eps);
end;
2: begin
del_2 (a,b,eps,x,n);
writeln ('x0=',x: 10: 8,' f (x0) =',f (x): 10: 8,' n=',n); end;
3: begin
simp_iter (a,eps,x,n);
writeln ('x0=',x: 10: 8,' f (x0) =',f (x): 10: 8,' n=',n);
end;
4: begin
kasat (a,eps,x,n);
writeln ('x0=',x: 10: 8,' f (x0) =',f (x): 10: 8,' n=',n);
end;
5: begin
xord (a,b,eps,x,n);
writeln ('x0=',x: 10: 8,' f (x0) =',f (x): 10: 8,' n=',n);
end;
6: begin
exit;
end;
end;
end;
readln;
readln;
end.
Список используемой литературы
1. Методические указания по подготовке отчета по учебной практике.
2. Трауб Дж. Итерационные методы решения уравнений. - М.: Мир, 1985.258 с.
3. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. М.: Изд-во МГТУ, 1990. - 446 с.
4.А.М. Епанешников, В.А. Епанешников. Программирование в среде Turbo Pascal 7.0. Издательство. Диалог-МИФИ, 2004.368 с.
5. http://bestpupils.com/index. php?option=com_wrapper&view=
wrapper&Itemid=111
Размещено на Allbest.ru
Подобные документы
Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.
курсовая работа [4,0 M], добавлен 27.03.2011Описание алгоритма создания программы для решения алгебраических или трансцендентных уравнений с помощью численного метода Бернулли. Нахождение значений корней алгебраического уравнения с заданными параметрами точности. Листинг программы на языке java.
контрольная работа [206,0 K], добавлен 19.06.2015Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Математическое описание, алгоритм и программа вычисления нелинейного уравнения методом дихотомии. Метод половинного деления. Метод поиска корней функции. Написание текста программы с комментариями. Проведение тестовых расчетов. Вывод ответа на экран.
курсовая работа [67,2 K], добавлен 15.02.2016Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Отделение действительных корней нелинейного уравнения. Метод хорд и касательных (Ньютона), геометрическая интерпретация. Графическая схема алгоритма. Описание реализации базовой модели в MathCAD. График сравнения числа итераций в зависимости от точности.
курсовая работа [2,0 M], добавлен 16.05.2013Графический и аналитический методы отделения корней при решении уравнения. Уточнение отдельных корней уравнения: метод половинного деления, последовательных приближений, метод Ньютона. Расчет в программах Excel, MathCAD, на языке программирования Pascal.
курсовая работа [3,2 M], добавлен 29.05.2010Этапы численного решения нелинейных уравнений заданного вида: отделение (изоляция, локализация) корней уравнения аналитическим или графическим способами, уточнение конкретного выделенного корня методом касательных (Ньютона). Решение в системе MathCad.
курсовая работа [271,6 K], добавлен 22.08.2012Определение корней заданного уравнения графическим методом с применением прикладного программного средства MathCAD. Построение графика при помощи программы MS Excel. Геометрическая интерпретация метода для данного уравнения, определение интервалов.
контрольная работа [93,0 K], добавлен 20.08.2013