Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Топ:
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
2022-10-28 | 18 |
5.00
из
|
Заказать работу |
|
|
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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!