Разложение в ряд некоторых функций — КиберПедия 

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Разложение в ряд некоторых функций

2022-10-28 18
Разложение в ряд некоторых функций 0.00 из 5.00 0 оценок
Заказать работу

 

1. , x > 0

2. , x < 1

3.

4.

5.

6.

7.

 

Пример выполнения лабораторной работы по заданиям среднего уровня сложности

 

Функция y=f(x) имеет вид:

Если x < 3, то

Если , то

Если x > 6, то

 

Реализация на Си:

#include <stdio.h>

#include <math.h>

 

// Точность вычисления

#define EPS 0.001

 

/*

Пользовательская реализация функции синус.

Функция вычисляется в соответствии с разложением в ряд, приведенным

в данной методичке  

*/

double sin1(double x)

{

double y = 0;

int n = 1;

int sign = +1;

double f = 1;

double xx = x;

double dy;

 

do

{

dy = sign * (xx / f);

y += dy;

sign = -sign;

xx *= x * x;

f = f * (n + 1) * (n + 2);

n += 2;

} while (fabs(dy) > EPS); // Вычисление прекращается,

                       // когда достигнута заданная точность

return y;

}

 

/*

Пользовательская реализация функции корень квадратный.

Функция вычисляется в соответствии с рекуррентным

соотношением Ньютона, приведенным в этой методичке

*/

double sqrt1(double x)

{

double y = x;

double y_prev;

double dy;

do

{

y_prev = y;

y = 0.5 * (y_prev + x / y_prev);

} while (fabs(y - y_prev) > EPS); // Вычисление

            // прекращается, когда достигнута заданная точность

return y;

}

 

/*

Функция, заданная в варианте.

Вычисляется с использованием стандартной библиотеки Си

*/

double f(double x)

{

if (x < 3) return sin(3 * x) + 6;

if (x <= 6) return (x * x) / (1 + x * x);

return 1 + sqrt(x + 10);

}

 

/*

Функция, заданная в варианте.

Вычисляется с использованием пользовательской

реализации функций синус и корень

*/

double f1(double x)

{

if (x < 3) return sin1(3 * x) + 6;

if (x <= 6) return (x * x) / (1 + x * x);

return 1 + sqrt1(x + 10);

}

 

int main()

{

double a, b, h;

double x, y;

 

// Ввод значений границ диапазона и шага изменения X

while (1) // бесконечный цикл ввода

{

printf("Введите значения A, B, H:");

scanf("%lf%lf%lf", &a, &b, &h);

if (a > b)

{

printf("Вы ввели неверные значения: a > b!!\n");

continue; // продолжаем выполнение цикла ввода

}

if (h <= 0)

{

printf("Вы ввели неверные значения: h <= 0!!\n");

continue; // продолжаем выполнение цикла ввода

}   

break; // Ввод корректен - выходим из цикла

}

 

// Формируем шапку таблицы

printf("+------------+---------------+---------------+\n"

  );

printf("+ X +  Y  +  Y1 +\n"

  );

printf("+------------+---------------+---------------+\n"

  );

// формируем таблицу

for (x = a; x <= b; x += h)

{

printf("| %10lf | %12lf | %12lf |\n",

      x, f(x), f1(x));

}

// Завершаем формирование таблицы

printf("+------------+---------------+---------------+\n"

  );

return 0;

}

 

 

Сложные задания

 

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

Пример выполнения лабораторной работы по сложным заданиям

 

Заданы две функции:

1.

2.

 

Реализация на Си:

#include <stdio.h>

#include <conio.h>

#include <math.h>

 

/*

Пользовательская реализация функции синус.

Функция вычисляется в соответствии с разложением в ряд, приведенным

в данной методичке  

  x – аргумент, eps – точность, cnt – за сколько итераций вычислено

значение функции

*/

double sin1(double x, double eps, int * cnt)

{

double y = 0;

int n = 1;

int sign = +1;

double f = 1;

double xx = x;

double dy;

*cnt = 0;

do

{

dy = sign * (xx / f);

y += dy;

sign = -sign;

xx *= x * x;

f = f * (n + 1) * (n + 2);

n += 2;

(*cnt)++;

} while (fabs(dy) > eps);

return y;

}

 

/*

Пользовательская реализация функции корень квадратный.

Функция вычисляется в соответствии с рекуррентным

соотношением Ньютона, приведенным в этой методичке

x – аргумент, eps – точность, cnt – за сколько итераций вычислено

значение функции

*/

double sqrt1(double x, double eps, int * cnt)

{

double y = x;

double y_prev;

double dy;

*cnt = 0;

do

{

y_prev = y;

y = 0.5 * (y_prev + x / y_prev);

(*cnt)++;

} while (fabs(y - y_prev) > eps);

return y;

}

 

int main()

{

int n; // номер вычисляемой функции

double a, b, h, eps;

double x, y;

 

// Ввод номера анализируемой функции

while (1) // бесконечный цикл ввода

{

printf("Введите номер функции:");

printf("1. sin\n");

printf("2. sqrt\n");

printf("Введите номер функции:");

scanf("%d", &n);

if (n!= 1 && n!= 2)

{

  printf("Вы ввели неверный номер функции!\n");

continue; // продолжаем выполнение цикла ввода

}

break; // Ввод корректен - выходим из цикла

}

 

// Ввод значений границ диапазона [a..b], шага изменения h

// и точности eps

while (1) // Бесконечный цикл ввода

{

printf("Введите начало интервала A = ");

scanf("%lf", &a);

printf("Введите конец интервала B (B>=A) = ");

scanf("%lf", &b);

printf("Введите шаг изменения H (H>0) = ");

scanf("%lf", &h);

printf("Введите точность вычисления Eps (0<Eps<=0.1)”

      ” = ");

scanf("%lf", &eps);

if (a > b)

{

printf("Вы ввели неверные значения: a > b!!\n");

continue; // продолжаем выполнение цикла ввода

}

if (h <= 0)

{

printf("Вы ввели неверные значения: h <= 0!!\n");

continue; // продолжаем выполнение цикла ввода

}

if (eps < 0 || eps > 0.1)

{

printf("Вы ввели неверные значения: должно быть 0 <”

        ” eps <= 0.1!!\n");

continue; // продолжаем выполнение цикла ввода

}

break; // Ввод корректен - выходим из цикла

}

 

// Выводим введенные параметры

printf("\n\n Формируется таблица функции ");

if (n == 1) printf("y=sin(x)");

if (n == 2) printf("y=sqrt(x)");

printf("\nA = %lf, B = %lf, H = %lf, EPS = %lf\n",

    a, b, h, eps);

 

// Формируем шапку таблицы

printf("+---------+---------------+---------------+"

    "---------------+-------+\n");

printf("+ X +  Y  +  Y1 +"

    " DY (Y - Y1) + NUM +\n");

printf("+---------+---------------+---------------+"

    "---------------+-------+\n");

 

// формируем таблицу

for (x = a; x <= b; x += h)

{

int k;

double y;

double y1;

double dy;

if (n == 1)

{

y = sin(x);

y1 = sin1(x, eps, &k);

}

else if (n == 2)

{

y = sqrt(x);

y1 = sqrt1(x, eps, &k);

}

dy = y - y1;

printf("| %7.3lf | %12.6lf | %12.6lf | %12.8lf |”

      ” %5d |\n", x, y, y1, dy,k);

}

 

// Завершаем формирование таблицы

printf("+---------+---------------+---------------+"

    "---------------+-------+\n");

return 0;

}


 

Варианты для сложных заданий

 


Вариант C1:

Функции:

1.  

2.

3.

 

Вариант C2:

Функции:

1.  

2.

3.

 

Вариант C3:

Функции:

1.  

2.

3.

 

Вариант C4:

Функции:

1.  

2.

3.

 


Вариант C5:

Функции:

1.  

2.

3.

 

Вариант C6:

Функции:

1.  

2.

3.

 

Вариант C7:

Функции:

1.  

2.

3.

 

Вариант C8:

Функции:

1.  

2.

3.

 


Вариант C9:

Функции:

1.  

2.

3.

 

Вариант C10:

Функции:

1.  

2.

3.

 

Вариант C11:

Функции:

1.  

2.

3.

 

Вариант C12:

Функции:

1.  

2.

3.

 


Вариант C13:

Функции:

1.  

2.

3.

 

Вариант C14:

Функции:

1.  

2.

3.

 

Вариант C15:

Функции:

1.  

2.

3.

 


 

 


Поделиться с друзьями:

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.103 с.