Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
49
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать

Поиск корней функции методом деления отрезка пополам.

Если для требуемой математической функции можно выделить участок, на котором она имеет всего один корень, то этот корень можно найти следующим образом:

  1. Задаем значение xleft равное значению левой границы участка.

  2. Задаем значение xright равное значению правой границы участка.

  3. Вычисляем значение yleft=f(xleft) и yright=f(xright).

  4. Делим участок пополам и вычисляем x0=(xright+xleft)/2 и y0=f(x0).

  5. Если знак y0 и yleft одинаковый, то выполняем xleft=x0, иначе xrigth=x0.

  6. Повторяем пункты 4 и 5 до тех пор, пока разница xright-xleft станет достаточно малой.

Соответствующую функцию на языке С можно записать следующим образом:

// описание функции y=f(x)

double f(double x)

{

// здесь вычисляется функция y=f(x);

}

// функция sign проверяет равенство знаков

int sign(double a,double b)

{

if(a>0 && b>0)

return 1;

if (a<=0 && b<=0)

return 1;

return 0;

}

// вычисление корня делением отрезка пополам.

double root(double xleft,double xright)

{

double x0,y0,yleft,yright;

yleft=f(xleft);

yright=f(xright);

if( xleft > xright )// Левая граница > правой

{

x0=xleft;

xleft=xright;

xright=xleft;

}

if ( sign(yleft,yright) )// Одинаковый знак.

{

printf(“Eroor! Equal signs!”);

return 0;

}

while (xright-xleft>eps)

{

x0=(xright+xleft)/2;

y0=f(x0);

if (sign(yleft,y0))

{

yleft=y0;

xleft=x0;

}

else

{

yright=y0;

xright=x0;

}

}

return x0;

}

Поиск корней функции методом касательных.

Этот алгоритм начинает работать с некоторой точки x0, находящейся в окрестности корня. Функция y=f(x) должна быть монотонной. В точке ( x0,y0=f(x0) ) проводится касательная до пересечения с осью x. Полученная точка берется в качестве следующего значения для x0. Процесс повторяется до тех пор, пока разница значений x0 между двумя итерациями не станет достаточно малой.

Практическое задание №3.

При выполнении третьего задания студенты должны закрепить приемы работы с операторами цикла. Основное внимание уделяется стилю написания программы и разделению программы на отдельные функции, каждая из которых выполняет законченное действие.

Вариант 1.

Суммируя числовой ряд, вычислите функцию, зависящую от параметра:

, где

Суммирование завершайте по достижению условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Процедуру вычислений оформите в виде отдельной функции. Разработайте интерфейс, позволяющий пользователю вводить параметры и и вычислять таблицу значений при x=0..10 с шагом 0.5. Исследуйте поведение при и . Сумму сравните с точным значением .

Вариант 2.

Суммируя числовой ряд, вычислите функцию, зависящую от параметра:

, где

Суммирование завершайте по достижению условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Процедуру вычислений оформите в виде отдельной функции. Разработайте интерфейс, позволяющий пользователю вводить параметры и и вычислять таблицу значений при x=0..10 с шагом 0.5. Исследуйте поведение при и . Сумму сравните с точным значением .

Вариант 3.

Суммируя числовой ряд, вычислите функцию, зависящую от параметра:

, где

Суммирование завершайте по достижению условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Процедуру вычислений оформите в виде отдельной функции. Разработайте интерфейс, позволяющий пользователю вводить параметры и и вычислять таблицу значений при x=0..10 с шагом 0.5. Исследуйте поведение при и . Сумму сравните с точным значением .

Вариант 4.

Суммируя числовой ряд, вычислите функцию:

, где

Суммирование завершайте по достижению условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Процедуру вычислений оформите в виде отдельной функции. Вычислите таблицу значений при с шагом 0.1, а также в некоторой точке — области сходимости суммы . Разработайте интерфейс, позволяющий пользователю вводить параметры и . Полученные значения сравните с точным значением . Повторите вычисления с .

Вариант 5.

Суммируя числовой ряд, вычислите функцию:

, где

Суммирование завершайте по достижению условия . Для вычисления воспользуйтесь рекуррентными соотношениями. Процедуру вычислений оформите в виде отдельной функции. Вычислите таблицу значений при с шагом 0.1, а также в некоторой точке — области сходимости суммы . Разработайте интерфейс, позволяющий пользователю вводить параметры и . Исследуйте поведение при и . Полученные значения сравните с точным значением . Повторите вычисления с .

Вариант 6.

Продифференцируйте численно функцию , используя для дифференцирования разностную формулу второго порядка

Процедуру дифференцирования вынесите в отдельную функцию. Разработайте интерфейс, позволяющий вводить шаг дифференцирования h и вычислять таблицу для с шагом при . Сравните полученные результаты с точным значением производной .

Вариант 7.

Разработайте процедуру поиска методом половинного деления корня уравнения на интервале . Процедуру оформите в виде отдельной функции. Разработайте интерфейс, позволяющий вводить значение границ интервала a, b и требуемую точность решения . С помощью программы определите корни уравнения на интервалах и .

Контрольный пример:

x = -1, 2 (кратность 2), 5, -3.

Вариант 8.

Разработайте процедуру поиска корня уравнения методом Ньютона:

Процедуру оформите в виде отдельной функции. Полагайте, что производная задана аналитически. Разработайте интерфейс, позволяющий вводить начальное приближение и требуемую точность вычислений . С помощью программы определите корни уравнения при и начальных условиях . Поясните результат при помощи графика функции .

Контрольные примеры:

;

;

;