Решение задач вычислительной математики с помощью электронно-вычислительных машин
Приближенное вычисление значения суммы ряда с использованием разложения функции. Расчет корней уравнения методом релаксации. Рассмотрение компьютерных значений определенных интегралов. Вычисление корней системы нелинейных уравнений методом Ньютона.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.10.2015 |
Размер файла | 1,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКОЙ ОБЛАСТИ «Международный университет природы, общества и человека «Дубна»
Факультет естественных и инженерных наук
Кафедра Прикладной математики и информатики
КУРСОВАЯ РАБОТА ПО
дисциплине «Численные методы»
Выполнил студент группы 3181 Алиса
3 курса факультета ЕиИН
Руководители: Профессор Михайлов И.Е.
- План
- 1. Приближенное вычисление значения функции (суммы ряда) с использованием разложения функции в ряд
- 2. Приближенное вычисление корней уравнения f(x) = 0 методом Ньютона и методом релаксации
- 3. Приближенное вычисление корней системы нелинейных уравнений методом Ньютона
- 4. Приближенное вычисление корней системы линейных уравнений прямым (точным) и приближенными (итерационными) методами. Сравнение методов
- 5. Приближенное вычисление определенных интегралов методом Симпсона и методом трапеций. Сравнение методов
- Выводы
- Список литературы
1. Приближенное вычисление значения функции (суммы ряда) с использованием разложения функции в ряд
корень компьютерный интеграл нелинейный
Вариант 4.
Цель работы: получение навыков решения задач вычислительной математики с помощью ЭВМ на примере нахождения суммы ряда.
Задание: Написать программу вычисления суммы ряда. Количество членов ряда выбрать таким образом, чтобы погрешность, вычисляемая как модуль разности правых и левых частей выражения, не превышала = 10-15.
Решение:
Не будем вычислять факториалы, так как при больших значениях может возникнуть переполнение при нахождении частичной суммы данного ряда. Поэтому представим частичную сумму следующим образом:
1) Запишем k-й и (k+1)-й члены ряда:
2) Введем коэффициент d:
3) (k+1)-й член ряда можно записать следующим образом:
4) Представим Sk+1 -ю частичную сумму:
Результат работы программы:
Блок-схема
Код программы:
// Вычисление суммы ряда, вариант 4.
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <math.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
double x, eps, y;
double xk = 1; // k-й член ряда
double sum = xk;// частичная сумма ряда
int k = 0;//счетчик шагов
cout << "Введите значение x:" << endl;
cin >> x;
eps = 0.000000000000001;
if (fabs(x) < 1. / 4.)
{
y = sqrt((1 + sqrt(1 + 16 * (pow(x, 2)))) / (2 * (1 + 16 * (pow(x, 2)))));
cout << "Правая часть уравнения:" << y << endl;
while (fabs(y - sum) >= eps)
{
xk *= ((-1) * 2 * (4 * k + 1)*(4 * k + 3)*(pow(x, 2))) / ((2 * k + 1)*(k + 1));
sum += xk;
k++;
cout << endl;
cout << "k-я частичная сумма = " << sum << endl;
cout << " k-й член ряда = " << xk << endl;
cout << "fabs(y-sum) = " << fabs(y - sum) << endl;
cout << endl;
}
cout << "Число шагов:" << k << endl;
}
else
{
cout << "|x|>1/4! Неверное значение" << endl;
return 0;
}}
Выводы
Вычисление значения функции на компьютере невозможно никаким иным способом, кроме разложения её в ряд. Именно так считаются встроенные библиотечные функции, например arcsin и корень. Таким образом, написанная нами программа, позволяет создавать свои библиотечные функции любого вида.
2. Приближенное вычисление корней уравнения f(x) = 0 методом Ньютона и методом релаксации
Вариант 4.
Цель работы: знакомство с возможностями приближенного вычисления корней уравнения f(x) = 0 при различных видах функции f(x). Решение проблемы отделения корней на отрезке. Подробное изучение метода Ньютона и метода релаксации. Получение навыков решения задач вычислительной математики на ЭВМ.
Задание: Написать программу приближенного вычисления двух-трех ближайших к 0 корней уравнения f(x) = 0 с точностью = 10-5 методом Ньютона и методом релаксации.
Решение:
При численном подходе задача о решении нелинейных уравнений разбивается на два этапа: локализация (отделение корней), т.е. нахождение таких отрезков на оси x, в пределах которых содержится один единственный корень, и уточнение корней, т.е. вычисление приближенных значений корней с заданной точностью.
Отделение корней можно выполнить графически, если удается построить график функции y = f(x). В ряде случаев бывает удобно заменить уравнение f(x) = 0 эквивалентным уравнением вида f(x1) = f(x2). Корни этого уравнения определяются абсциссами точек пересечения графиков функции y1 = f(x1) и y1=f(x2)
Построим график данной функции этим способом. Представим нашу функцию в другом виде:
Теперь разобьем данное выражение на две функции:
Таким образом, можем построить графики этих двух функций. (Смотри рисунок 1) На их пересечении будут искомые корни.
Получаем ,
Метод Ньютона.
Пусть нам известно начальное приближение к корню x0. Проведем в этой точке касательную к кривой y = f(x). Эта касательная пересечет ось абсцисс в точке x1, которую будем рассматривать в качестве следующего приближения. Найдем значение x1
выражая отсюда x1, получим
Аналогично могут быть найдены следующие приближения. Формула для (k+1) -го приближения имеет вид
Из данной формулы вытекает условие применимости метода: функция f(x) должна быть дифференцируемой и f'(x) в окрестности корня не должна менять знак. Для окончания итерационного процесса может быть использовано следующее условие:
Условие сходимости итерационного процесса:
Если на отрезке существования корня знаки f'(x) и f''(x) не изменяются, то начальное приближение, обеспечивающее сходимость, нужно выбрать из условия:
Таким образом, мы можем определить отрезки на которых находятся наши корни. Возьмем отрезок [0,1], на котором находится x1 и отрезок [8,9], содержащий x2. При помощи метода Ньютона уточним наши корни с точностью до е = 0,00001.
Результат работы программы(метод Ньютона):
Метод релаксации
Метод релаксации - частный случай метода простой итерации, он получается при
(x)= = const.
Метод релаксации сходится при условии
Если в некоторой окрестности корня выполняются условия
то метод релаксации сходится при (0, 2/М).
Чтобы выбрать оптимальный параметр в методе релаксации, рассмотрим уравнение для погрешности
.
Подставляя
в (9) получим уравнение
по теореме о среднем имеем
где И(0,1). Таким образом для погрешности метода релаксации выполняется уравнение
Отсюда приходим к оценке
zn+1 max{1-M,1-m} zn .
Наилучшая оценка достигается при 1-M=1-m, т.о. оптимальным значением параметра является
0=2/(M+m).
Результат работы программы(метод релаксации):
Блок-схема
Код программы:
#include "stdafx.h"
#include <cmath>
#include <iostream>
using namespace std;
float f(float x)
{
return exp(x*log(1.4)) - 2 * x - 0.5;//y
}
float f1(float x)
{
return exp(x*log(1.4))*log(1.4) - 2; //y'
}
float f2(float x)
{
return exp(x*log(1.4))*log(1.4)*log(1.4);//y''
}
float Metod_Newton(float a, float b, float eps)
{
int k;
float x, t, m = 0;
if (f(a)*f2(a)>0)
t = a;
else t = b;
do
{
x = t;
t = x - f(x) / f1(x);
m++;
} while (fabs(x - t)>eps);
k = m;
cout << " Число итераций: " << k << endl;
return x;
}
float Metod_Relax(float a, float b, float eps)
{
int k;
float x, t, tau, m = 0;
if (f1(a)>0 && f1(b)>0)
{
t = (a + b) / 2;
tau = -2 / fabs(f1(a) + f1(b));
}
else if (f1(a)<0 && f1(b)<0)
{
t = (a + b) / 2;
tau = 2 / fabs(f1(a) + f1(b));
}
do
{
x = t;
t = x + tau*f(x);
m++;
} while ((fabs(x - t)>eps) && (fabs(f(t))>eps));
k = m;
cout << " Число итераций: " << k << endl;
return t;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "RUS");
float x, y, a, b, eps;
cout << "введите а" << endl;
cin >> a;
cout << "введите b" << endl;
cin >> b;
eps = 0.00001;
x = Metod_Newton(a, b, eps);
cout << "Корень(Метод Ньютона):" << x << endl;
x = Metod_Relax(a, b, eps);
cout << "Корень (Метод релаксации):" << x << endl;
return 0;
}
Выводы:
На основании полученных результатов можно сделать вывод о достоинствах и недостатках методов:
Главное достоинство метода Ньютона - высокая скорость сходимости.
Недостатки - сложность метода ( необходимо вычислять производные, сильная зависимость сходимости от вида функции и выбора начального приближения.
К недостаткам метода релаксации можно отнести медленную сходимость, а к достоинствам - простоту алгоритма.
3. Приближенное вычисление корней системы нелинейных уравнений методом Ньютона
Вариант 4.
Цель работы: освоение методов приближенного вычисления корней системы нелинейных уравнений f(x) = 0. Распространение навыков, полученных при выполнении лабораторной работы №2 на систему уравнений. Подробное изучение метода Ньютона. Получение навыков решения задач вычислительной математики на ЭВМ.
Задание: Написать программу вычисления приближенного решения системы нелинейных уравнений f(x) = 0 с точностью = 10-5 методом Ньютона для случаев: Частные производные находятся аналитически, Частные производные находятся численно
Решение:
Введем переменные f_x, f_y, g_x, g_y, где
В данном случае производные находятся аналитически. Запишем Якобиан для системы из двух уравнений:
(4)
Отсюда находим
(5)
Искомые x, y находятся следующим образом:
(6)
(7)
Теперь найдем частные производные численно. Для этого обратимся к определению частной производной.
Пусть функция z=f(x,y) определена в области D и (x0, y0) D. Тогда при малых |?x| определено ее частное приращение по x:
.
Частной производной функции f(x,y) по переменной x в точке (x0, y0) называют предел
,
если он существует.
Воспользуемся данным определением и запишем переменные f_x, f_y, g_x, g_y следующим образом:
Таким образом x, y находятся так же, как в первом случае, то есть по формулам (6) и (7).
Построим графики функций и , пересечения которых дадут точки, являющиеся решением системы :
(0,0)
(1,1)
(-2,2)
Результат работы программы:
Блок-схема
Код программы:
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
double f(double x, double y)
{
return pow(x, 3) + 2 * pow(x, 2) - 3 * x*pow(y, 2) + 6 * x*y - x - 2 * pow(y, 2) + y + 4;
}
double g(double x, double y)
{
return -pow(y, 3) + 3 * pow(y, 2) + 3 * pow(x, 2)*y + 4 * x*y - y - 3 * pow(x, 2) - x - 2;
}
double Proizv(double x, double y, char n, int k)
{
double h = 0.0001;
if (k == 0){
if (n == 'x')
return (f(x + h, y) - f(x, y)) / h;
else
return (f(x, y + h) - f(x, y)) / h;
}
else
{
if (n == 'x')
return (g(x + h, y) - g(x, y)) / h;
else
return (g(x, y + h) - g(x, y)) / h;
}
}
void f_1(long double x, long double y)
{
cout << "Аналитическая производная" << endl;
double f_x, f_y, g_x, g_y, det, x_1, x_2;
int i;
x_1 = x_2 = 1;
const double e = 0.00001;
for (i = 0; sqrt(pow(x_1, 2) + pow(x_2, 2)) > e; i++)
{
f_x = 3 * pow(x, 2) + 4 * x - 3 * pow(y, 2) + 6 * y - 1;
f_y = -6 * x*y + 6 * x - 4 * y + 1;
g_x = 6 * x*y + 4 * y - 6 * x - 1;
g_y = -3 * pow(y, 2) + 6 * y + 3 * pow(x, 2) + 4 * x - 1;
det = f_x*g_y - g_x*f_y;
x_1 = (g_y*f(x, y) - f_y*g(x, y)) / det;
x_2 = (f_x*g(x, y) - g_x*f(x, y)) / det;
x = x - x_1;
y = y - x_2;
}
cout << "Количество итераций: " << i << endl;
cout << "x: " << x << ", " << "y: " << y << endl;
}
void f_2(double x, double y)
{
cout << "Численная производная." << endl;
double f_x, f_y, g_x, g_y, det, x_1, x_2;
int i;
x_1 = x_2 = 1;
const double e = 0.00001;
for (i = 0; sqrt(pow(x_1, 2) + pow(x_2, 2)) > e; i++)
{
f_x = Proizv(x, y, 'x', 0);
f_y = Proizv(x, y, 'y', 0);
g_x = Proizv(x, y, 'x', 1);
g_y = Proizv(x, y, 'y', 1);
det = f_x*g_y - g_x*f_y;
x_1 = (g_y*f(x, y) - f_y*g(x, y)) / det;
x_2 = (f_x*g(x, y) - g_x*f(x, y)) / det;
x = x - x_1;
y = y - x_2;
}
cout << "Количество итераций: " << i << endl;
cout << "x: " << x << ", " << "y: " << y << endl;
}
int main()
{
setlocale(LC_ALL, "RUS");
double x, y;
cout << " Введите начальное приближение: " << endl;
cout << "x=";
cin >> x;
cout << "y=";
cin >> y;
f_1(x, y);
f_2(x, y);
}
4. Приближенное вычисление корней системы линейных уравнений прямым (точным) и приближенными (итерационными) методами. Сравнение методов
Вариант 4.
Цель работы: изучение точных и приближенных методов вычисления корней системы нелинейных уравнений Ax = f. Получение навыков решения задач вычислительной математики на ЭВМ. Освоение умения анализировать результаты, полученные на компьютере и сравнивать методы.
Задание: Написать программу вычисления приближенного решения системы линейных уравнений Ax = f с точностью = 10-5 методом Гаусса. Написать программу вычисления приближенного решения той же системы линейных уравнений Ax = f с точностью = 10-5 методом наискорейшего спуска и методом сопряженных градиентов. Составить таблицу сходимости метода
Решение:
Метод Гаусса
Прямой ход метода:
1-й шаг. Предположим, что . Поделим, первое уравнение на этот элемент, который назовем ведущим элементом первого шага:
Остальные уравнения системы (1) запишем в виде:
где .
Уравнение (2) умножаем на и вычитаем из i-го уравнения системы (3). Это позволит обратить в нуль коэффициенты при во всех уравнениях кроме первого.
Получим эквивалентную систему вида:
где . Система (4) имеет матрицу вида:
Дальше работаем с укороченной системой, т.к входит только в 1-е уравнение.
2-й шаг. На этом шаге исключаем неизвестное из уравнений с номерами Если ведущий элемент второго шага , то из укороченной системы аналогично исключаем неизвестное и получаем матрицу коэффициентов такого вида:
Аналогично указываем действия для неизвестных и приходим к системе:
Эта система с верхней треугольной матрицей:
Обратный ход метода:
Из последнего уравнения системы (5) находим , из предпоследнего, …, из первого уравнения - .
Общая формула для вычислений:
Для реализации метода Гаусса требуется примерно арифметических операций, причем большинство из них приходится на прямой ход.
Ограничение метода единственного деления заключается в том, что ведущие элементы на k-ом шаге исключения не равны нулю, то есть
Результат работы программы(метод Гаусса):
Метод наискорейшего спуска:
Так как мы используем итерационный (приближенный) метод, значения неизвестных вычисляем приближенно (три, четыре знака после десятичной точки), то, подставляя значения неизвестных в исходную систему, справа получим не ноль, а некоторые значения, называемые невязкой первого, второго, … уравнений на -ом шаге.
Представим систему линейных уравнений в следующем виде:
(4.1)
Запишем выражение (4.1) в операторной форме:
. (4.2)
Здесь приняты следующие обозначения:
; ; . (4.3)
В методе скорейшего спуска решение ищут в виде
, (4.4)
где и - векторы неизвестных на и шагах итераций; вектор невязок на -ом шаге определяется выражением:
, (4.5)
(4.6)
В формуле (4.6) используется скалярное произведение двух векторов, которое определяется следующей формулой:
В формуле (4.6) _ транспонированная матрица Якоби, вычисленная на k-ом шаге. Матрица Якоби вектор - функции определяется как
Нетрудно убедиться, что для системы (2) матрица Якоби равна
В качестве нулевого приближения можно взять
.
В методе градиента итерационный процесс естественно закончить при достижении , вектор невязок входит в вычислительную формулу.
Результат работы программы(метод наискорейшего спуска):
Блок-схема
Код программы:
#include <iostream>
#include <cmath>
using namespace std;
const int N = 3;
const double epsilon = 0.00001;
double A[N][N] =
{
{ 1.65, -1.76, 0.77 },
{ -1.76, 1.04, -2.61 },
{ 0.77, -2.61, -3.18 }
};
double B[N] = { 2.15, 0.86, -0.73 };
void Gauss(double* X)
{
double Q[N - 1];
for (int k = 0; k < N - 1; k++)
{
for (int i = 0; i < N - 1; i++)
Q[i] = A[i + 1][k] / A[k][k];
for (int i = 0, j = k; j < N - 1;)
{
A[j + 1][i] = A[j + 1][i] - Q[j] * A[k][i];
if (i == N - 1)
{
B[j + 1] = B[j + 1] - Q[j] * B[k];
j++;
i = 0;
}
else i++;
}
}
X[N - 1] = B[N - 1] / A[N - 1][N - 1];
double s;
for (int i = N - 2;; i--)
{
s = 0;
for (int j = i + 1; j < N; j++)
s += A[i][j] * X[j];
X[i] = (B[i] - s) / A[i][i];
if (!i)
break;
}
cout << "Метод Гаусса." << endl;
for (int i = 0; i < N; i++)
cout << fixed << X[i] << ' ';
cout << endl;
}
void Nevyazki(double* X)
{
double D[N];
cout << "Невязки: " << endl;
double s;
for (int i = 0; i < N; i++)
{
s = 0;
for (int j = 0; j < N; j++)
s += A[i][j] * X[j];
D[i] = B[i] - s;
}
for (int i = 0; i < N; i++)
cout << D[i] << ' ';
cout << endl;
}
void naisk_spusk()
{
double Xp[N], AXp[N], rp[N], TA[N][N], A_[N][N], AA_r[N], Mu[N], A_r[N];
double temp, temp1, temp2;
bool t[N] = { 0, 0, 0 };
int i, j, k, it, q = 0;
for (i = 0; i < N; i++)
Xp[i] = B[i] / A[i][i];
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
TA[i][j] = A[j][i];
for (it = 0;; it++)
{
for (i = 0; i < N; i++)
{
AXp[i] = 0;
for (j = 0; j < N; j++)
AXp[i] += A[i][j] * Xp[j];
rp[i] = AXp[i] - B[i];
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
A_[i][j] = 0;
for (k = 0; k < N; k++)
A_[i][j] += A[i][k] * TA[k][j];
}
}
for (i = 0; i < N; i++)
{
AA_r[i] = 0;
for (j = 0; j < N; j++)
AA_r[i] += A_[i][j] * rp[j];
}
temp1 = temp2 = 0;
for (j = 0; j < N; j++)
{
temp1 += rp[j] * AA_r[j];
temp2 += AA_r[j] * AA_r[j];
}
temp = temp1 / temp2;
for (i = 0; i < N; i++)
Mu[i] = temp;
for (i = 0; i < N; i++)
{
A_r[i] = 0;
for (j = 0; j < N; j++)
A_r[i] += TA[i][j] * rp[j];
}
for (i = 0; i < N; i++)
Xp[i] = Xp[i] - Mu[i] * A_r[i];
q = 0;
for (i = 0; i < N; i++)
{
if (fabs(Mu[i] * A_r[i]) < epsilon)
t[i] = true;
q += t[i];
}
if (q == 3)
break;
}
cout << "Метод наискорейшего спуска:" << endl;
for (i = 0; i < N; i++)
cout << fixed << Xp[i] << ' ';
cout << endl;
cout << "Шаг: " << it << endl;
}
int main()
{ setlocale(LC_ALL, "RUS");
double* X = new double[N];
cout.precision(5);
Gauss(X);
Nevyazki(X);
naisk_spusk();
delete[] X;
return 0;}
Выводы:
В точных методах решение x находится за конечное число действий, но из-за погрешности округления и их накопления прямые методы можно назвать точными, только отвлекаясь от погрешностей округления.
В итерационном методе вычислительный алгоритм строится таким образом, чтобы обеспечить минимальную погрешность на шаге.
5. Приближенное вычисление определенных интегралов методом Симпсона и методом трапеций. Сравнение методов
Вариант 4.
Цель работы: освоение приближенных методов вычисления определенных интегралов детерминированными и вероятностными методами. Получение навыков решения задач вычислительной математики на ЭВМ. Освоение умения анализировать результаты, полученные на компьютере и сравнивать методы.
Задание: Написать программу вычисления приближенного значения определенного интеграла с точностью = 0.510-4 методом Симпсона и одним из методов трапеций. Сделать выводы о применимости и целесообразности использования того или иного метода к приближенному вычислению данного интеграла.
Решение:
Метод трапеций
Один из самых простых методов аппроксимации подынтегральной функции состоит в ее кусочно-линейной интерполяции на равномерной сетке с шагом
(считаем ), как показано на Рисунке1-a. При этом интеграл вычисляется по формуле
которая называется формулой трапеции.
Метод Симпсона
Метод трапеций применим для вычисления интегралов от любой непрерывной функции. При этом ее гладкость не является необходимым условием. Дополнительная гладкость интегрируемой функции приводит в методе трапеций к уменьшению погрешности аппроксимации. Спрашивается, можно ли использовать это обстоятельство для получения более точных аппроксимаций на той же сетке, без увеличения узлов? Ответ на этот вопрос положительный, и простейший предлагаемый метод состоит в использовании кусочно-квадратичной функцией для интерполяции функции f(x) интервале на равномерной сетке с четным числом интервалов разбиения 2N , количеством узлов 2N+1 и шагом сетки
Другими словами, через три соседние точки сетки проводится парабола вида
,
аппроксимирующая исходную функцию на данной паре интервалов. Интеграл от квадратичной аппроксимирующей функции вычисляется аналитически:
Суммируя по интервалам сетки, получая формулу
которая называется формулой Симпсона.
Результат работы программы:
Блок-схема
Код программы:
#include "stdafx.h"
#include <cmath>
#include <conio.h>
#include <iostream>
#include <sstream>
using namespace std;
const double Pi = 3.14;
double f1(double x)
{ return x*sin(x) / (1 + cos(x)*cos(x));
}
double trapecij(double(*Fx)(double), double x1, double x2, double step)
{
double x = x1;
double I = 0;
while (x<(x2 - step))
{
I += (Fx(x) + Fx(x + step))*step / 2;
x += step;
}
return I;
}
double Simpson(double(*Fx)(double), double x1, double x2, double step, double precision)
{
double x = x1;
double I1 = 0, I2 = 0;
double s;
do
{
I1 = I2;
s = (Fx(x1) - Fx(x2)) / 2;
x = x1 + step;
while (x<x2)
{
s += 2 * Fx(x) + Fx(x + step);
x += 2 * step;
}
I2 = 2 * step*s / 3;
step /= 2.0;
} while (fabs(I1 - I2)>precision);
return I2;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "RUS");
double I1, I2;
double eps = 0.00001;
int i = 1;
cout << "1. Метод Симпсона\n";
I1 = Simpson(&f1, 0, Pi, 10, eps*.1);
cout << " Интеграл = " << I1;
cout << "2. Метод трапеции\n";
double h = 0.01;
I1 = trapecij(&f1, 0, Pi, h);
I2 = trapecij(&f1, 0, Pi, h / 2);
while (fabs(I2 - I1)>eps)
{
I1 = I2;
h = h / 2;
I2 = trapecij(&f1, 0, Pi, h);
}
cout << " Интеграл = " << I2;
return 0;}
Выводы
Метод Симпсона обладает более высоким порядком точности - четвертым, в то время как метод трапеций - вторым.
Рассмотрев разные методы численного интегрирования, трудно сравнивать их достоинства и недостатки. Все зависит от самой функции у = f(x) и поведения ее производных.
Список литературы
1. Косарев, В.И. 12 лекций по вычислительной математике. -- М.: Издательство МФТИ, 1995.
2. Павловская, Т. А. С/С++ Программирование на языке высокого уровня. - СПб. : Питер, 2007.
Размещено на Allbest.ru
...Подобные документы
Построение графика функции. Поиск корней уравнения методом половинного деления. Определение минимума функции методом перебора и значения аргумента. Вычисление определенного интеграла на заданном отрезке с использованием метода правых прямоугольников.
контрольная работа [316,1 K], добавлен 13.11.2014Основная теорема существования корней в С+, ее доказательство с помощью нескольких лемм. Распределение корней на плоскости комплексной переменной. Распределение вещественных корней полинома с вещественными коэффициентами. Приближенное вычисление корней.
контрольная работа [469,4 K], добавлен 06.03.2013Способы отделения корней. Решение задачи методами Ньютона уточнения корней и простых итераций. Формула нахождения погрешностей. Геометрическая интерпретация методов. Составление блок-схем и текстов программ. Результаты их работы на тестовом примере.
курсовая работа [3,1 M], добавлен 15.06.2013Нахождение с заданной погрешностью корней уравнения. Оценка скорости сходимости. Нахождение промежутка, в котором содержится какой-либо корень уравнения для методов итераций и Ньютона. Разработка текста компьютерных программ для решения данных уравнений.
лабораторная работа [253,9 K], добавлен 19.12.2012Этапы численного решения нелинейных уравнений заданного вида: отделение (изоляция, локализация) корней уравнения аналитическим или графическим способами, уточнение конкретного выделенного корня методом касательных (Ньютона). Решение в системе MathCad.
курсовая работа [271,6 K], добавлен 22.08.2012Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.
курсовая работа [990,8 K], добавлен 23.10.2011Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.
курсовая работа [832,6 K], добавлен 24.07.2012Решение уравнения методом половинного деления. Программа в Matlab для уравнения (x-2)cos(x)=1. Решение нелинейных уравнений методом Ньютона. Интерполяция заданной функции. Решение системы линейных алгебраических и обыкновенных дифференциальных уравнений.
курсовая работа [1,4 M], добавлен 15.08.2012Математический алгоритм вычисления корней нелинейного уравнения и его решение методом касательных. Особенности программной реализации решения таких уравнений. Процедура подготовки и решения задачи на ЭВМ, характеристика алгоритма и структуры программы.
курсовая работа [96,6 K], добавлен 02.06.2012Разработка программы для нахождения корней нелинейных уравнений несколькими методами: методом хорд, касательных, половинного деления, итераций. Реализации программы с помощью системы программирования Delphi 7. Методика работы пользователя с программой.
курсовая работа [1,3 M], добавлен 11.02.2013Решение нелинейного уравнения: отделение корней и уточнение корня по методу хорда. Численное интегрирование: метод входящих прямоугольников. Вычисление площади криволинейной трапеции с разбивками. Решение примера методом интегрирования по частям.
курсовая работа [197,9 K], добавлен 20.01.2009Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.
контрольная работа [1,9 M], добавлен 10.12.2010Решение нелинейного уравнения. Отделение корней - исследование количества, характера и расположения корней, нахождение их приближенных значений. Уточнение корня до заданной степени точности. Численное интегрирование и квадратурные формулы прямоугольников.
курсовая работа [51,9 K], добавлен 04.02.2009Изучение численных методов решения нелинейных уравнений, используемых в прикладных задачах. Нахождение корня уравнения методом простой итерации и методом касательных (на примере уравнения). Отделение корней графически. Программная реализация, алгоритм.
курсовая работа [1,7 M], добавлен 15.06.2013Решение нелинейного уравнения шаговым методом, методом половинного деления, методом Ньютона и простой итерации с помощью программы Mathcad. Разбиение промежутка на число n интервалов. Условия сходимости корня. Составление программы для решения на С++.
лабораторная работа [207,5 K], добавлен 10.05.2012Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013Аппроксимация линейной, степенной и квадратичной функции. Определение корней уравнения вида f(x)=0 методом половинного деления. Вычисление определенного интеграла методом прямоугольников, трапеций, парабол и Эйлера. Интерполяция формулой Лагранжа.
курсовая работа [1,3 M], добавлен 21.09.2011Численные методы решения нелинейных уравнений, используемых в прикладных задачах. Составление логической схемы алгоритма, таблицы индентификаторов и программы нахождения корня уравнения методом дихотомии и методом Ньютона. Ввод программы в компьютер.
курсовая работа [220,0 K], добавлен 19.12.2009Расчет корня нелинейного уравнения методом касательных, методом простой итерации, с использованием циклических ссылок, с помощью средств подбора параметра. Формирование на экране произвольного массива (матрицы) чисел и вычисление его элементов по строкам.
контрольная работа [329,3 K], добавлен 25.02.2011Сравнительный анализ итерационных методов решения нелинейных алгебраических и трансцендентных уравнений. Простейший алгоритм отделения корней нелинейных уравнений. Метод половинного деления. Геометрический смысл метода Ньютона. Метод простой итерации.
реферат [95,0 K], добавлен 06.03.2011