Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Вычислeниe бeсконeчных сумм



Пример 3. Для x=-0.8, -0.6, -0.4, …, 0.8 найти и вывести на экран значения двух бесконечных сумм, вычисленных с заданной точностью, например, 0.000001:

В виде первой бесконечной суммы (y) вычисляется cos(x), а вторая сумма (z)— это значение функции sin(x). Поэтому результат целесообразно оформить в виде следующих пяти столбцов: x, y, cos(x), z, sin(x), в которых покажем значения указанных тригонометрических функций, вычисленные как сумма бесконечного ряда с заданной точностью, так и с помощью встроенных стандартных функций.

С точки зрения разбиения на функции возможны несколько вариантов. Например, можно составить две функции, каждая из которых вычисляет и возвращает по одному результату, y и z соответственно. Но функцию с одним результатом эффективнее оформить не как функцию типа void. Такие функции будут рассмотрены в следующем параграфе. Можно в виде одной или двух функций оформить вычисление очередного слагаемого . Но такой алгоритм неэффективен, так как мы “заставляем” компьютер вычислять и степень, и факториал с самого начала. То есть, например, мы вычислили 5!, а для вычисления 6! будем повторять те же операции умножения 1*2*3*4*5. Поэтому эффективнее 5! использовать для получения 6!. Это относится и к вычислению степени.

Составим функцию SINCOS, которая одновременно вычисляет обе бесконечные суммы. Поэтому она имеет два входных параметра: аргумент функций (x) и одинаковую точность вычисления бесконечных сумм (eps) и два выходных (y и z), которые в заголовке функции объявляются с помощью ссылочного типа.

void SINCOS(float x, float eps, float &y, float &z);

int main() { float x, sn, cs;

cout<<" x MySin Sin(Standart)";

cout <<" MyCos Cos(Standart)" <<endl <<endl;

for (x=-0.8; x<0.805; x+=0.1)

{ SINCOS(x,1E-6, cs, sn);

printf("%5.1f %10.6f %12.6f %10.6f %12.6f\n",

x, sn, sin(x), cs, cos(x));

} // End of for

getch(); return 0;

} // End of main

void SINCOS(float x, float eps, float &y, float &z)

{ float k=1, v1=1; y=1;

do { v1=v1*(-1)*x*x/(k*(k+1));

y+=v1; k+=2; }

while (fabs(v1)>eps);

k=2; v1=x; z=x;

do { v1=v1*(-1)*x*x/(k*(k+1));

z+=v1; k+=2; }

while (fabs(v1)>eps);

} // End of function SinCos

Прототип функции перед main можно записать без имён формальных параметров: void SINCOS(float, float, float &, float &);

Для параметров ссылочного типа символ & записываем, так как он относится не к имени параметра, а к его типу.

Объединив вычисление y и z в одну функцию, мы имеем возможность оба ряда вычислять в одном цикле.

Упражнение. Усовершенствовать эту функцию следующим образом. Умножая очередное слагаемое на x/k, добавляем его попеременно то к y, то к z со своими знаками. Но по-прежнему функция будет иметь два результата.





Дата публикования: 2015-02-18; Прочитано: 288 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...