Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 Вычислительная математика практика 01-08.pdf
Скачиваний:
16
Добавлен:
05.06.2015
Размер:
550.13 Кб
Скачать

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

12.Модуль mnewton.h. Реализация рекурсивного алгоритма для метода Ньютона аналогична реализации рекурсивного алгоритма для метода простых итераций.

Алгоритм не содержит цикла.

- если значение признака успешного завершения алгоритма достигло максимально возможного, то функция возвращает текущее или нулевое значение X (счетчик итераций при этом должен инкрементироваться);

- алгоритм вычисляет значение g так же, как и в методе 1; - алгоритм вычисляет значение g1 так же, как и в методе 1;

- алгоритм вычисляет новое приближение решения X так же, как и в методе 1;

- если достигнута заданная точность eps, функция возвращает X, иначе функция возвращает результат вызова самой себя, при этом в качестве начального значения приближения используется X.

После описания данного алгоритма его следует тщательно оттрассировать (исполнить пошагово). Следует анализировать выполнение алгоритма

вкаждой его точке с тем, чтобы понять, как он работает.

Варианты решаемых функций

В качестве решаемых функций можно использовать любую из задания №1. Чтобы правильно выбрать начальное приближение, нужно убедиться, что значение решаемой функции в точке начального приближения и вторая производная в этой же точке имеют противоположные знаки.

Практическое задание №4. Метод секущих

Краткое описание задания: задано некоторое число a. задана решаемая функция вида f(x) = 0. Методом секущих найти её решение с заданной точностью ε.

Методические указания

1.Программа ничего не принимает с клавиатуры. Все исходные данные задаются в коде программы, как правило, в основном модуле, во время вызова функции метода (внутри функции main).

2.Программа решает задачу двумя способами:

а) с помощью итераций; б) с помощью рекурсии.

3. Название модуля (файла типа .h) для функции метода msecant.

22

4.Название функции метода secant.

5.Сигнатура (прототип) функции метода имеет следующий вид:

double secantN(pef ef, double X0, double X1, double eps, int* success);

Здесь:

-N — номер способа (1 или 2);

-ef — решаемая функция;

-X0 — начальное приближение 0;

-X1 — начальное приближение 1;

-eps — заданная точность решения;

-success — возвращаемый признак успешного выполнения алгоритма.

-возвращаемое значение функции метода — результат вычисления аргумента x решаемой функции, при котором решаемая функция равна аргументу с заданной точностью eps.

6. Тип решаемой функции и функции производной решаемой функции задается следующим описанием:

typedef double (*pef)(double);

Это описание уже должно быть выполнено в модуле mhalfint.

7. Решаемая функция описывается в основном модуле следующим образом (данная функция уже определена):

// Решаемая функция для метода простых итераций double f1(double x) {

/* код функции */

}

8. Функция метода вызывается в основной функции.

После вызова выводятся три строчки результата, например:

SUCCESS=8

EPSILON=0.000001

RESULT1=1.283429

Здесь:

SUCCESS — успешность выполнения алгоритма (значение success); EPSILON — заданная точность вычисления (значение EPS); RESULT1 — результат вычислений способом 1, вывод должен соот-

ветствовать заданной точности.

Порядок выполнения задания

1. Сначала выполните действие 1, описанное выше в разделе «Общий порядок выполнения очередного (не первого) задания».

23

2.Добавьте в решение новый модуль типа .h (заголовочный) с названием msecant. Процесс добавления нового модуля описан в практическом задании №1.

3.Добавьте в новый модуль файловый комментарий, например:

/* Файл msecant.h

*/

/* ОТИ НИЯУ МИФИ

*/

/* 1ПО-XXД

*/

/* Пономарев Владимир Вадимович

*/

/* Вычислительная математика

*/

/* Программа VM1

*/

/* Метод секущих

*/

/* 27.02.2013

*/

4.Основной модуль. Описание решаемой функции f1:

//Решаемая функция для метода простых итераций double f1(double x) {

return (x);

}

Для начала будем вычислять решение уравнения

cos(x) – x + 1 = 0

с точностью 0.000001. Оно равно 1.283429. Опишите левую часть уравнения в функции f1.

5.Убедитесь, что константа EPS имеет значение 0.000001, а спецификации вывода результатов в функции printr соответствуют EPS.

6.Модуль msecant. Добавим в модуль функцию метода для решения задания способом 1, например:

//Метод секущих, способ 1

double secant1(pef ef, double X0, double X1, double eps, int* success) {

*success = 0; double X = 0.0; return X;

}

Здесь устанавливается начальное значение признака успешного завершения алгоритма success, определяется переменная для результата X и возвращается значение результата.

7. Основной модуль. В основной функции следует закомментировать вызовы и выводы результатов предыдущего задания и описать вызов функции secant1 и вывод ее результатов. Начальным приближением X0 для указанной функции является значение 4.0, а начальным приближением

X1 — 3.0.

24

8. Функция метода secant1. Опишите алгоритм для метода секущих. Структура алгоритма для метода секущих аналогична структуре алгоритма для метода простых итераций. Рекомендуется описать переменную g0 для значения решаемой функции в точке X0 и переменную g1 для зна-

чения в точке X1. Обе переменные должны иметь тип double.

Далее опишите бесконечный цикл, например, при помощи while (1). Внутри цикла:

а) подсчитайте очередную итерацию; проверьте значение счетчика итераций и при превышении его максимального значения прервите цикл;

б) вычислите значение g0 решаемой функции с аргументом X0; в) вычислите значение g1 решаемой функции с аргументом X1;

г) вычислите значение X для нового приближения, используя формулу для метода секущих:

x = x1 – (x1 x0g1 / (g1 – g0)

д) проверьте условие завершения: если абсолютное значение разности значений X и X1 меньше заданной точности, следует прервать выполнение цикла;

е) присвойте начальному значению X0 значение X1, а значению X1 — вычисленное значение X.

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

10.В модуле msecant.h опишите функцию для решения способом 2:

// Метод секущих, способ 2

double secant2(pef ef, double X0, double X1, double eps, int* success) {

double X = 0.0; return X;

}

Поскольку второй способ использует рекурсию, нельзя обнулять пара- метр-признак успешного выполнения алгоритма success.

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

12.Модуль msecant.h. Реализация рекурсивного алгоритма для метода секущих аналогична реализации рекурсивного алгоритма для метода простых итераций.

Алгоритм не содержит цикла.

25

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]