Программное обеспечение и методы решения
Разработка программы для нахождения с заданной точностью корней уравнения. Оценка погрешности и процесс смещения отрезка поиска корней для метода хорд. Использование метода простых итераций, метода секущих и метода касательных для решения уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 15.11.2016 |
Размер файла | 423,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
Государственное образовательное учреждение высшего профессионального образования
«Нижегородский государственный университет им Н.И. Лобачевского»
Отчет о выполнении лабораторной работы
Нижний Новгород 2016
Содержание
ПОСТАНОВКА ЗАДАЧИ
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И МЕТОДЫ РЕШЕНИЯ
КОНТРОЛЬНЫЙ ПРИМЕР
ПОСТАНОВКА ЗАДАЧИ
Написать программу для нахождения с заданной точностью одной из корней следующего уравнения:
x2-0.4*x-2*sin(x*Pi)/x=0
программное обеспечение И МЕТОДЫ РЕШЕНИЯ
Методы решения
• Метод деления пополам
Общий алгоритм
Задать начальный интервал ;
• Убедиться, что на концах функция имеет разный знак;
• Повторять
• выбрать внутри интервала точку ;
• сравнить знак функции в точке со знаком функции в одном из концов;
• если совпадает, то переместить этот конец интервала в точку ,
• иначе переместить в точку другой конец интервала;
пока не будет достигнута нужная точность.
Оценка погрешности
|x*-xn+1|<=|x*-xn|/2
Алгоритм
a=0.5,b=1
x=(a+b)/2;
если F(x)*F(a) то a=x
иначе b=x
пока |a-b|>e
• Метод касательных
Общая формула
Оценка погрешности
|xn+1-x*|<=M1/m1*|xn-xn-1|
Алгоритм
x1, x2=1
x1=x2
x2=x2-(F(x1)/(F'(x1)
пока |x2-x1|>e
• Метод секущих
Общая формула
Оценка погрешности
|xn+1-x*|<=M2/2m1*|xn-xn-1|2
Алгоритм
x1=1, x2=0.5, xN=0
y = xN;
xN=x2-((x2-x1)/(F(x2)-F(x1))*F(x2);
x1 = x2;
x2 = xN;
пока |xN-y|>e
• Метод хорд
Общая формула программный корень уравнение касательный
Оценка погрешности
| xn+1-x*|<=f(x)/m1
Алгоритм
a=1, b=0
пока |a-b|>e
b = a - (a - b) * F(a) / (F(a) - F(b));
a = b - (b - a) * F(b) / (F(b) -- F(a));
• Метод простых итераций
Общая формула
Оценка погрешности
|x*-xn+1|<=|x*-xn|
Алгоритм
x2=1, x1=0
x1=x2;
x2=fi(x1);
пока |x2-x1|>e
СПЕЦИФИКАЦИИ ФУНКЦИЙ
• bisection() - метод деления пополам
• tangent() - метод касательных
• all() - нахождение всех корней уравнения(модификация метода касательных)
• secant() - метод секущих
• chord() - метод хорд
• iteration() - метод простых итераций
• f(double x) - производная функции от х
• functionX(double x) - функция от х
• fi(double x) - функция нахождения эквивалентного уравнения
3.3. ИСХОДНЫЕ КОДЫ ФУНКЦИЙ
private static void bisection()
{
double a = 0.5, b = 1, x, tmp = 0;
double delta = b - a;
int n = 0;
do
{
x = (a + b) / 2;
if (Utils.functionX(x) * Utils.functionX(a) > 0) { a = x; }
else { b = x; }
n++;
if (n == 32) { tmp = x; }
}
while (Math.Abs(b - a) > e);
delta = (x - tmp) / 2;
Console.WriteLine("Метод деления пополам:");
Console.WriteLine("Корень уравнения = " + x);
Console.WriteLine("Количество итераций = " + n);
Console.WriteLine("Погрешность = " + delta);
} //деление пополам
private static void tangent()
{
double x1, x2 = 1, n = 0, delta = 0, tmp = 0;
do
{
x1 = x2;
x2 = x2 - (Utils.functionX(x1) / Utils.f(x1));
n++;
if (n == 2) { tmp = x2; }
} while (Math.Abs(x2 - x1) > e);
delta = 7.88 / -7.44 * Math.Abs(x2 - tmp);
Console.WriteLine("Метод касательной:");
Console.WriteLine("Корень уравнения = " + x2);
Console.WriteLine("Количество итераций = " + n);
Console.WriteLine("Погрешность = " + delta);
}//касательная
private static void secant()
{
double xN = 0, y, n = 0;
double x1 = 1, x2 = 0.5, tmp = 0, delta = 0;
n = 0;
do
{
y = xN;
xN = x2 - ((x2 - x1) / (Utils.functionX(x2) - Utils.functionX(x1))) * Utils.functionX(x2);
x1 = x2;
x2 = xN;
n++;
if (n == 5) { tmp = x2; }
} while (Math.Abs(y - xN) > e);
delta = 9.4784 / 2 * (-7.44) * Math.Pow(Math.Abs(x2 - tmp), 2);
Console.WriteLine("Метод cекущих:");
Console.WriteLine("Корень уравнения = " + x2);
Console.WriteLine("Количество итераций = " + n);
Console.WriteLine("Погрешность = " + delta);
}//секущая
private static void chord()
{
double b = 1;
double a = 0.5;
double n = 0;
double delta = 0;
n = 0;
while (Math.Abs(a - b) > e)
{
b = a - (a - b) * Utils.functionX(a) / (Utils.functionX(a) - Utils.functionX(b));
a = b - (b - a) * Utils.functionX(b) / (Utils.functionX(b) - Utils.functionX(a));
n++;
}
delta = Utils.functionX(a) / (-7.44);
Console.WriteLine("Метод хорд:");
Console.WriteLine("Корень уравнения = " + a);
Console.WriteLine("Количество итераций = " + n);
Console.WriteLine("Погрешность = " + delta);
}//хорды
private static void iteration()
{
double x2 = 1;
double x1 = 0;
double n = 0;
double tmp = 0, delta = 0;
do
{
x1 = x2;
x2 = Utils.fi(x1);
n++;
if (n == 11) { tmp = x2; }
} while (Math.Abs(x1 - x2) > e);
delta = Math.Abs(tmp - x2);
Console.WriteLine("Метод простой итерации:");
Console.WriteLine("Корень уравнения = " + x2);
Console.WriteLine("Количество итераций = " + n);
Console.WriteLine("Погрешность = " + delta);
}
private static void all()
{
double x1, x2 = 0, k = 1, n = 0, xPrev = 0;
while (k >=-1)
{
x2 = k;
do
{
x1 = x2;
x2 = x2 - (Utils.functionX(x1) / (Utils.f(x1)));
n++;
} while (Math.Abs(x2 - x1) > e);
if (Math.Abs(x2 - xPrev) > 0.1) { Console.WriteLine(x2); }
xPrev = x2;
k=k-0.1;
}
}
public static double functionX(double x)
{
return Math.Pow(x, 2) - 0.4 * x - (2 * Math.Sin((Math.PI) * x)) / x;
}
public static double fder(double x)
{
return 2 * x + 2 * Math.Pow(x, -2) * (Math.Sin(Math.PI * x) - Math.PI * x * Math.Cos(Math.PI * x)) - 0.4;
}
public static double fi(double x)
{
return x - 0.1163 * (Math.Pow(x, 2) - 0.4 * x - (2 * Math.Sin(Math.PI * x)) / x);
КОНТРОЛЬНЫЙ ПРИМЕР
E-модуль разницы двух последних приближений.
Корни уравнения получены при помощи смещения отрезка поиска корней для метода хорд. Из графика функции видно, что все корни уравнения лежат на отрезке от -1 до 1.
Корни уравнения, полученные программой:
0,92722574463187
-0,850574665887271
Размещено на Allbest.ru
...Подобные документы
Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Использование метода Зейделя для нахождения корней системы линейных алгебраических уравнений. Суть метода простых итераций. Оценка погрешности нормальной системы. Составление алгоритма, блок-схемы и кода программы. Тестовый пример и проверка в MathCad.
лабораторная работа [174,8 K], добавлен 02.10.2013Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.
курсовая работа [1,3 M], добавлен 11.02.2013Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Отделение действительных корней нелинейного уравнения. Метод хорд и касательных (Ньютона), геометрическая интерпретация. Графическая схема алгоритма. Описание реализации базовой модели в MathCAD. График сравнения числа итераций в зависимости от точности.
курсовая работа [2,0 M], добавлен 16.05.2013Использование повторяющегося процесса. Нахождение решения за определенное количество шагов. Применение метода хорд и метода простой итерации. Методы нахождения приближенного корня уравнения и их применение. Построение последовательного приближения.
курсовая работа [849,1 K], добавлен 15.06.2013Сравнение методов деления отрезка пополам, хорд, касательных и итераций, поочередно используя их для решения одного и того же уравнения. Построение диаграммы и графика изменения числа. Исследование алгоритма работы программы, перечня идентификаторов.
курсовая работа [1,3 M], добавлен 06.08.2013Анализ метода касательных (метода секущих Ньютона), аналитическое решение нелинейного уравнения. Описание алгоритма решения задачи, пользовательских идентификаторов, блок-схем, программного обеспечения. Тестирование программы на контрольном примере.
курсовая работа [97,1 K], добавлен 10.01.2014Нахождение с заданной погрешностью корней уравнения. Оценка скорости сходимости. Нахождение промежутка, в котором содержится какой-либо корень уравнения для методов итераций и Ньютона. Разработка текста компьютерных программ для решения данных уравнений.
лабораторная работа [253,9 K], добавлен 19.12.2012Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.
контрольная работа [1,9 M], добавлен 10.12.2010Структура языка Паскаль, встроенные процедуры и функции. Составление алгоритма решения уравнения, описывающего работу кривошипно-шатунного механизма, с помошью метода итерации, метода Гаусса и метода Зейделя. Блок-схемы алгоритмов и текст программы.
курсовая работа [64,6 K], добавлен 07.05.2011Суть основных идей и методов, особенностей и областей применения программирования для численных методов и решения нелинейных уравнений. Методы итераций, дихотомии и хорд и их использование. Алгоритм метода Ньютона, создание программы и ее тестирование.
курсовая работа [423,0 K], добавлен 17.02.2010Описание алгоритма создания программы для решения алгебраических или трансцендентных уравнений с помощью численного метода Бернулли. Нахождение значений корней алгебраического уравнения с заданными параметрами точности. Листинг программы на языке java.
контрольная работа [206,0 K], добавлен 19.06.2015Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.
курсовая работа [4,0 M], добавлен 27.03.2011Метод численного интегрирования. Использование метода половинного деления для решения нелинейного уравнения. Определение отрезка неопределенности для метода половинного деления. Получение формулы Симпсона. Уменьшение шага интегрирования и погрешности.
курсовая работа [3,0 M], добавлен 21.05.2013Способы отделения корней. Решение задачи методами Ньютона уточнения корней и простых итераций. Формула нахождения погрешностей. Геометрическая интерпретация методов. Составление блок-схем и текстов программ. Результаты их работы на тестовом примере.
курсовая работа [3,1 M], добавлен 15.06.2013Разработка программы нахождения значения определенного интеграла с помощью метода трапеций. Оценка абсолютной погрешности метода. Использование среды программирования Visual Studio Community 2015 для написания программы. Работа с графическим интерфейсом.
курсовая работа [573,8 K], добавлен 17.03.2016Автоматизация решения системы уравнения методом Гаусса (классического метода решения системы линейных алгебраических уравнений, остоящего в постепенном понижении порядка системы и исключении неизвестных) и решения уравнения методами хорд и Ньютона.
курсовая работа [578,2 K], добавлен 10.02.2011