Логотип Автор24реферат
Задать вопрос
Курсовая работа на тему: Вычислительный эксперимент
100%
Уникальность
Аа
9018 символов
Категория
Информатика
Курсовая работа

Вычислительный эксперимент

Вычислительный эксперимент .doc

Зарегистрируйся в два клика и получи неограниченный доступ к материалам,а также промокод Эмоджи на новый заказ в Автор24. Это бесплатно.

Вычислим интеграл abf(x)dx с точностью ε=0.001 изученными методами.
Пусть
fx=xlnx, a=1;b=4.
Далее приводим текст программы с пояснениями:
#include iostream#include math.h#include conio.h#include localeusing namespace std;
double f(double x)
{
return sqrt(x)*log(x);
}
Пояснения: подключаем стандартную библиотеку ввода-вывода iostream, библиотеку используемых математических функций math.h (квадратный корень sqrt(), модуль числа fabs()), conio.h подключаем для функции _getch в конце, которая считывает один символ из консоли без вывода символа, библиотеку locale для корректного отображения русских букв.
Записываем подынтегральную функцию fx=xlnx в виде подпрограммы. Здесь и далее для чисел с плавающей запятой будем использовать тип double.
double rectangle(double a, double b, int n)
{
double h = (b-a)/n;
double x0;
double sum = 0;
for(int i=0; i=n-1; i++)
{
x0=a+i*h+h/2;
sum += f(x0);
}
sum *= h;
return sum;
}
Пояснения: записываем функцию, вычисляющую интеграл методом средних прямоугольников при n числе разбиений отрезка интегрирования [a,b]. h – шаг интегрирования. В переменной sum накапливаем значение интегральной суммы, т.е. суммы значений в серединах отрезков разбиения. Для вычисления суммы используем цикл for. В завышении умножаем сумму на шаг интегрирования h – получаем значение интеграла. Алгоритм программы соответствует схеме на рисунке 2.1.
void rectangleE(double a, double b, double eps)
{
double s1,s2;
s1 = (b-a)*f((a+b)/2);
int n=2;
s2 = rectangle(a,b,n);
while (fabs(s2-s1)3*eps)
{
n=2*n;
s1=s2;
s2 = rectangle(a,b,n);
}
cout"По методу треугольников интеграл равен "s2endl;
cout"Число отрезков разбиения n = "nendl;
}
Пояснения: записываем процедуру, вычисляющую интеграл методом средних прямоугольников с заданной точностью eps на отрезке [a,b]. Используем правило двойного пересчёта Рунге для метода k= 2-го порядка точности. Начальное значение суммы s1 = (b-a)*f((a+b)/2) соответствует n=1. С помощью функции rectangle вычисляем значение интеграла s2 при n=2. Находим модуль разности между s1 и s2 и сравниваем с допустимой погрешностью pk-1eps=3eps. Если модуль разности меньше допустимой погрешности, то завершаем вычисление интеграла и принимаем в качестве ответа s2, иначе удваиваем n=2n и опять сравниваем значения двух интегралов, и так далее, пока не будет достигнута необходимая точность

Зарегистрируйся, чтобы продолжить изучение работы

. Для реализации данного алгоритма используем цикл с предусловием While. Алгоритм программы соответствует схеме на рисунке 2.2.
С помощью стандартного оператора cout выводим значение интеграла s2 и полученное число отрезков разбиения n.
double trapezoidal(double a, double b, int n)
{
double h = (b-a)/n;
double x0, x1;
double sum = 0;
for(int i=0; i=n-1; i++)
{
x0=a+i*h;
x1=x0+h;
sum += f(x0) + f(x1);
}
sum *= h/2.0;
return sum;
}
Пояснения: записываем функцию, вычисляющую интеграл методом трапеций при n числе разбиений отрезка интегрирования [a,b]. h – шаг интегрирования. В переменной sum накапливаем значение интегральной суммы, т.е. суммы значений в концах отрезков разбиения. Для вычисления суммы используем цикл for. В завышении умножаем сумму на шаг интегрирования h и делим на 2 (поскольку площадь трапеции равна полусумме значений в концах, умноженную на высоту h) – получаем значение интеграла. Алгоритм программы соответствует схеме на рисунке 2.3.
void trapezoidalE(double a, double b, double eps)
{
double s1,s2;
s1 = (b-a)*(f(a)+f(b))/2;
int n=2;
s2 = trapezoidal(a,b,n);
while (fabs(s2-s1)3*eps)
{
n=2*n;
s1=s2;
s2 = trapezoidal(a,b,n);
}
cout"По методу трапеций интеграл равен "s2endl;
cout"Число отрезков разбиения n = "nendl;
}
Пояснения: записываем процедуру, вычисляющую интеграл методом трапеций с заданной точностью eps на отрезке [a,b]. Используем правило двойного пересчёта Рунге для метода k= 2-го порядка точности. Начальное значение суммы s1 = (b-a)*(f(a)+f(b))/2 соответствует n=1. С помощью функции trapezoidal вычисляем значение интеграла s2 при n=2. Находим модуль разности между s1 и s2 и сравниваем с допустимой погрешностью pk-1eps=3eps. Если модуль разности меньше допустимой погрешности, то завершаем вычисление интеграла и принимаем в качестве ответа s2, иначе удваиваем n=2n и опять сравниваем значения двух интегралов, и так далее, пока не будет достигнута необходимая точность. Для реализации данного алгоритма используем цикл с предусловием While. Алгоритм программы соответствует схеме на рисунке 2.4.
С помощью стандартного оператора cout выводим значение интеграла s2 и полученное число отрезков разбиения n.
double simpson(double a, double b, int n)
{
double h = (b-a)/n;
double x0, x1, x2;
double sum = 0;
for(int i=0; i=n-2; i+=2)
{
x0=a+i*h;
x1=x0+h;
x2=x0+2*h;
sum += f(x0) + 4*f(x1) + f(x2);
}
sum *= h/3.0;
return sum;
}
Пояснения: записываем функцию, вычисляющую интеграл методом Симпсона при n числе разбиений отрезка интегрирования [a,b]

50% курсовой работы недоступно для прочтения

Закажи написание курсовой работы по выбранной теме всего за пару кликов. Персональная работа в кратчайшее время!

Промокод действует 7 дней 🔥

Магазин работ

Посмотреть все
Посмотреть все
Больше курсовых работ по информатике:

Интерактивные доски (виды, устройство, возможности)

39437 символов
Информатика
Курсовая работа
Уникальность

Развертывание зеркала пакетов DEB для внутренней сети

22470 символов
Информатика
Курсовая работа
Уникальность
Все Курсовые работы по информатике
Закажи курсовую работу

Наш проект является банком работ по всем школьным и студенческим предметам. Если вы не хотите тратить время на написание работ по ненужным предметам или ищете шаблон для своей работы — он есть у нас.