- •2 Численное интегрирование 14
- •Введение
- •1 Численное решение нелинейных уравнений
- •Рассмотрим модифицированный метод Ньютона (метод секущих).
- •Модифицированный метод Ньютона сходится медленнее, чем исходный (немодифицированный) метод, однако менее сложен при вычислениях и потому часто оказывается предпочтительным.
- •2 Численное интегрирование
- •Выведем формулу метода Симпсона (парабол). В силу пятого свойства определенного интеграла имеем
- •Для получения формулы метода парабол (Симпсона) вычислим
- •3 Обработка экспериментальных данных
Рассмотрим модифицированный метод Ньютона (метод секущих).
Пусть дано нелинейное уравнение:
f(x) = 0.
Найти корень на интервале [a,b] с точностью .
Метод модифицированного Ньютона основан на замене исходной функции f(x), на каждом шаге поиска касательной, проведенной к этой функции. Пересечение касательной с осью Х дает приближение корня (рисунок 1.1.1). В этом методе для вычисления производных на каждом шаге поиска используется численное дифференцирование по формуле:
Выберем начальную точку x0 = b (конец интервала изоляции). Находим значение функции в этой точке и проводим к ней касательную, пересечение которой с осью Х дает нам первое приближение корня x1.
Рис. 1.1.1
x1 = x0 – h0,
.
В результате итерационный процесс схождения к корню реализуется рекуррентной формулой:
.
|
|
|
|
Схема алгоритма уточнения корня методом Ньютона приведена на рисунке 1.1.2
Рис. 1.1.2 – Схема алгоритма уточнения корня методом Ньютона
1.2 Решение уравнения модифицированным методом Ньютона
Для
решения задачи нахождения корня
трансцендентного
уравнения
,
где функция
имеет вид
,
на интервале [0,1], воспользуемся встроенными
функциями и средствами программирования
MathCad.
Применим встроенную функцию root(f(x), x, a, b), где f(x) – исходная функция, x – переменная, которую надо найти, a и b – начало и конец отрезка, на котором находится единственное решение (данные параметры можно опустить, если задать начальное приближение для 2 параметра x). MathCad имеет поддержку средств программирования, которые мы применили для реализация рассматриваемого метода [3].
Представим выполненное задание в математическом редакторе MathCad.
Первый этап: Протабулируем функцию с точностью 0.0001
Введем интервал и шаг изменения
Табулируем функцию и определяем значение "х", при котором значение "у" находится ближе к "0"
Построим график функции (рисунок 1.2.1).
Рисунок 1.2.1 – График функции
Функция ближе всего находится к "0" при х=0.7
Второй этап: 1-способ. Используем функцию root для определения значения х с точностью до 0.0001 в интервале 0.6-0.8, при котором f(x)=0.
2-способ. Программируем, используя модифицированный метод Ньютона
Исключим отрицательное значение под корнем с помощью функции if
Функция f(x)=
будет равна "0" при х=0.7014
Реализацию программы на языке программирования C#, выполняющую поиск корня уравнения модифицированным методом Ньютона можно увидеть ниже:
Первый этап – отделение корней
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace проба4
{ /*В данной программе определяем корень табулированием,*/
/*при котором функция f(x)=корень.(2Х^2+1.2-ctgX)-1 ближе всего к нулю*/
class Program
{
static double Func( double x) // Определение функции
{/*Учтем, что Ctg(x)=Cos(x)/Sin(x) или Ctg(x)=1/tg(x)*/
double y = (Math.Sqrt (2*x*x + 1.2 - Math.Cos(x)/Math.Sin(x)))- 1; // Инициализируем переменную у
return y; // Возвращаем значение
}
static void Main() // Вход в программу
{
Console.WriteLine("Протабулируем функцию - f(x)= (корень.(2x*x+1.2-ctgx))-1");
double a = 0; // начальный предел
double b = 1; // конечный предел
double h = 0.1; // шаг
for (double x = a; x <= b; x += h) // Изменяем х от 0 до 1 с шагом 0.1
{
double y = Func(x); // Вызов функции Func
if (2 * x * x + 1.2 - 1 / Math.Tan(x) <= 0) // Исключим отрицательное число под корнем
Console.WriteLine("Нет решения");
else
Console.WriteLine("y ({0:f3})=({1:f3})", x, y); // Выводим результат
}
return; // Подтверждение успешного окончания
}
}
}
Результат выполнения и работы программы изображен на рисунке 1.2.2.
Рисунок 1.2.2 – Выполнение программы
Второй этап – уточнение корня
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ньютон
{
class Program
{
static double Func(double x) // Определение функции
{
double y = (Math.Sqrt(2 * x * x + 1.2 - 1 / Math.Tan(x))) - 1;
return y;
}
static void Main()
{
Console.WriteLine ("Уточнение корня методом модифицированного Ньютона");
double x = 0.7;
Console.WriteLine(" x={0}", x); // Ввод приближенного значения
double e = 0.0001;
Console.WriteLine(" e={0}", e); // Ввод значения точности
double b;
do
{
b = e * Func(x) / (Func(x + e) - Func(x)); // Вызов функции
x -= b;
}
while (Math.Abs(b) < e); // Условие
if (2 * x * x + 1.2 - 1 / Math.Tan(x) < 0) // Исключение деления на ноль
Console.WriteLine("Нет решения");
else
Console.WriteLine("y({0:f4}) = {1:f4}", x, Func(x)); // Ответ
return;
}
}
}
Результат выполнения и работы программы изображен на рисунке 1.2.3.
Рисунок 1.2.3 – Выполнение программы
Исходные данные объявлены локальные переменные. В методе void Main() вызовом Console.WriteLine(…) выводится информация о границах, заданной точности и функции, для которой ищется корень, на экран. Затем вызывается функция double Func(double x) осуществляющий поиск корня модифицированным методом Ньютона. Абсолютное значение можно получить с помощью метода стандартной математической библиотеки Math.Abs(…). В случае невозможности применения изучаемого численного метода пользователю выводится сообщение «Нет решения». В противном случае, происходит уточнение корня до заданной точности, по завершению данной операции выводятся результаты работы реализованного алгоритма. В процессе уточнения используется также функция double Func(double x) – возвращает значение функции в заданной точке. Для указания математических функций (тангенс, показатель степени) использовали уже знакомую математическую библиотеку Math.
Результаты реализованных программ с точными значениями, полученными в математическом редакторе MathCad, совпали с заданной точностью.
