logo search
Подбельский Фомин_Программирование на языке СИ_

10.6. Функции и массивы

Обобщенная формулировка задания. Написать функцию для вычисления массива значений первой производной функции f(x) в заданных точках xi оси аргумента на интервале [а,b]. Указатель на дифференцируемую функцию передается как значение параметра. Оценить и выбрать внутри функции величину шагов i, необходимых для оценки значений производной в точке xi (см. ниже приближенные формулы).

Прототип исследуемой функции (от которой берется производная):

double function(double x);

Возможны два варианта решения поставленной задачи.

1. Прототип функции для вычисления массива производных с произвольным (неравномерным) разбиением интервала [а, b]:

2. Прототип функции для вычисления массива производных с равномерным разбиением интервала [а, b]:

Приближенные формулы вычисления f(x0) - первой производной функции y=f(x) в точке х0 (рис. 10.1.):

Рис. 10.1. Иллюстрация к формулам оценки значений производной

Массив-результат со значениями первой производной следует формировать как динамический массив внутри функции derivatives( ). Функция должна возвращать его адрес, т.е. указатель на него типа double * (его адрес).

Массив-результат double d[ ] для значений шагов А, нужно определить в вызывающей функции.

Используя функцию derivatives( ), вычислить значение первой производной для функции f(x) из задания §10.2 в точках из интервала [а, b], заданного там же. Заполнить табл. 10.4.

Таблица 10.4

Аргумент хi

Значение функции f(x)

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

Шаг i

"аналитическое" значение

fa(x)

приближенное значение

fn(x)

х0

xm-1 = b

"Аналитическое" значение производной fa'(xi) для табл. 10.4 вычислить, предварительно выполнив дифференцирование по аргументу х функции f(x). Полученное аналитическое выражение для производной fa'(x) оформить в виде дополнительной функции с прототипом

Выбрать или разработать самостоятельно метод подбора шага i вдоль оси аргумента при вычислении производной fn'(x). Например, используйте последовательное уменьшение величины i, до достижения "машинной точности". Учтите, что это достижение (сходимость) не гарантируется, поэтому необходимо, по крайней мере, ограничить количество итераций либо ввести ограничение на величину i.