Автор работы: Пользователь скрыл имя, 01 Декабря 2013 в 20:09, контрольная работа
На практике часто встречаются задачи связанные с решением уравнения вида f(х)=0.Точное решение не всегда возможно найти, поэтому разработаны численные методы: метод дихотомии, Ньютона и др. При этом решаются две задачи:
1. Вычисление корней с заданной заранее точностью.
2. Отыскание областей, где имеется один корень.
1. Введение…………………………………………………….……………3
2. Постановка задачи……………………………………………………...4
3. Методы решения..…………………………………………………….…6
4. Листинги программ…………………………………………………….11
5. Результаты………………………………………………………………19
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН
УНИВЕРСИТЕТ МЕЖДУНАРОДНОГО БИЗНЕСА
Кафедра Информационные системы
ОТЧЁТ
По вычислительной практике
«Элементы численного анализа»
Выполнил:
ст. гр. ВТиПО-225
Степанов В.А.
Проверила:
Доц. каф. ИС
Молдагулова А.Н.
Алматы 2008
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
На практике часто встречаются задачи связанные с решением уравнения вида f(х)=0.Точное решение не всегда возможно найти, поэтому разработаны численные методы: метод дихотомии, Ньютона и др. При этом решаются две задачи:
В научно-технической практике часто требуется найти значение определённого интеграла. Применяются методы: трапеций и Симпсона.
С помощью численных методов: метод Гаусса, возможно решение сложных систем уравнений.
Данная работа основана на конкретном применении шести методов: дихотомии, хорд, Ньютона, метода трапеций, Симпсона, Гаусса.
Целью данной вычислительной практики является освоение вышеперечисленных методов, создание программ для их реализации.
ПОСТАНОВКА ЗАДАЧИ
2x1+0.3x2+0.5x3=4.1;
0.1x1+3x2+0.4x3=7.3;
0.1x1+0.1x2+4.8x3=14.7.
МЕТОДЫ РЕШЕНИЯ
1. Метод Ньютона
Отличие этого итерационного метода от метода хорд состоит в том, что вместо хорды на каждом шаге проводится касательная к кривой y = f(x) при x = хi и ищется точка пересечения касательной с осью абсцисс (Рисунок 4). При этом не обязательно задавать отрезок [а, b], содержащий корень уравнения (1), достаточно найти лишь некоторое начальное приближение корня x = х0.
Применяя метод Ньютона, следует руководствоваться следующим правилом: в качестве исходной точки х0 выбирается тот конец интервала [а, b], которому отвечает ордината того же знака, что и знак f'' (х).
Рисунок 4.
Уравнение касательной, проведенной к кривой y = f(x) через точку В0 с координатами х0 и f(х0), имеет вид:
Отсюда найдем следующее приближение корня х1 как абсциссу точки пересечения касательной с осью Ох (y = 0):
Аналогично могут быть найдены и следующие приближения как точки пресечения с осью абсцисс касательных, проведенных в точках В1, В2 и так далее. Формула для i +1 приближения имеет вид:
Для окончания итерационного процесса может быть использовано или условие | f(xi)| < e , или условие близости 2х последовательных приближений | xi - xi - 1 | < e .
Итерационный процесс сходится если
f(х0) * f'' (х0) > 0.
Метод дихотомии несколько схож с методом двоичного поиска, однако отличается от него критерием отбрасывания концов.
Пускай задана функция .
Разобьём мысленно заданный отрезок пополам и возьмём две симметричные относительно центра точки и так, что:
,
где — некоторое число в интервале
Отбросим тот из концов изначального интервала, к которому ближе оказалась одна из двух вновь поставленных точек с максимальным значением (напомним, мы ищем минимум), то есть:
Процедура повторяется пока не будет достигнута заданная точность, к примеру, пока длина отрезка не достигнет удвоенного значения заданной погрешности.
Точный корень уравнения находится на отрезке . Производная на этом промежутке непрерывна и сохраняет постоянный знак. Приближенный корень , при котором , можно найти используя метод хорд. Для этого нужно взять
начальное приближение
корня
и применить к нему итерационную формулу
,
, если
,
, если
Погрешность вычислений:
,
,
Если функцию на каждом из частичных отрезков аппроксимировать прямой, проходящей через конечные значения, то получим метод трапеций.
Площадь трапеции
на каждом отрезке:
Погрешность аппроксимации на каждом
отрезке:
, где
Полная формула трапеций в случае деления
всего промежутка интегрирования на отрезки
одинаковой длины h:
, где
Погрешность формулы трапеций:
, где
Использовать
три точки отрезка
.
Если разбить интервал интегрирования на 2N равных частей, то имеем
, где .
6. Метод Гаусса
ЛИСТИНГИ ПРОГРАММ
1.
#include <math.h>
#include <iostream.h>
#include <conio.h>
double Func(double x) //Функция
{
return 2*sqrt((5*(pow(x+1,0.25))+4))-
}
double Fp(double x) //производная от Функции
{
return (5/4)*((pow(x+1,-0.75))/sqrt(
}
void main()
{
double a=-0.75,b=1,X=a;// интервал и X
double Xt,E=1E-4;//предыдущий X и E-точность вычислений
int count=0;// счетчик итераций
do
{
count++;
Xt=X;
X=-Func(X)/Fp(X)+X; // метод касательных
cout<<"["<<count<<"]="<<X<<
if(Func(X)*Func(a)>0)a=X;
else b=X;
}while(fabs(X-Xt)>=E);
cout<<"X="<<X;
getch();
}
2.
#include <math.h>
#include <iostream.h>
#include <conio.h>
double Func(double x) //Функция
{
return 2*sqrt((5*(pow(x+1,0.25))+4))-
}
void main()
{
double a=-.75,b=1,X=a;// интервал и X
double Xt,E=1E-4;//предыдущий X и E-точность вычислений
int count=0;// счетчик итераций
do
{
count++;
Xt=X;
X=(b+a)/2; // деление пополам
cout<<"["<<count<<"]="<<X<<
if(Func(X)*Func(a)>0)a=X;
else b=X;
}while(fabs(X-Xt)>=E);
cout<<"X="<<X;
getch();
}
3.
#include <math.h>
#include <iostream.h>
#include <conio.h>
double Func(double x) //Функция
{
return 2*sqrt((5*(pow(x+1,0.25))+4))-
}
void main()
{
double a=-.75,b=1,X=a;// интервал и X
double Xt,E=1E-4;//предыдущий X и E-точность вычислений
int count=0;// счетчик итераций
do
{
count++;
Xt=X;
X=-((b-a)/(Func(b)-Func(a)))*
cout<<"["<<count<<"]="<<X<<
if(Func(X)*Func(a)>0)a=X;
else b=X;
}while(fabs(X-Xt)>=E);
cout<<"X="<<X;
getch();
}
4.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
int b=1,a=0;
float s=0;
int n;
cout<<"Programma integrirovania metodom trapecii:\n"<<"Vvedite chislo otrezkov razbienia\n";
cin>>n;
float h=(b-a)/n;
float x;
x=a;
int i;
for (i=1; i<=n-1; i++)
{
x=x+h;
s=s+(cos(x)/(1+cos(x)));
}
s=s+0.25+(cos(1)/2*(cos(1)+1))
cout<<"rezultat:\n"<<s;
getch();
}
5.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
int b=1,a=0;
float sm=0,s1=0,s2=0;
int n;
cout<<"Programma integrirovania metodom trapecii:\n"<<"Vvedite chislo otrezkov razbienia\n";
cin>>n;
float n2=n/2-1;
float h=(b-a)/n;
float x;
x=a;
int i;
for (i=1; i<=n2; i++)
{
x=x+h;
s1=s1+(cos(x)/(1+cos(x)));
x=x-h;
s2=s2+(cos(x)/(1+cos(x)));
}
sm=4*cos(x+h)/(cos(x+h)+1)+4*
sm=sm/3;
sm=sm*h;
cout<<"rezultat"<<endl<<sm;
getch();
}
6.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50
void glavelem( int k, double mas[] [N + 1], int n, int otv[] );
int main( void )
{
double mas[N] [N + 1];
double x[N]; //Корни системы
int otv[N]; //Отвечает за порядок корней
int i, j, k, n;
//Ввод данных
clrscr();
do
{
printf( "Vvedite chislo uravneni sistemi: " );
scanf( "%d", & n );
if ( N < n )
printf( "Slishkom bolshoe chislo uravneni\n" );
}
while ( N < n );
printf( "vvedite sistemu\n" );
for ( i = 0; i < n; i++ )
for ( j = 0; j < n + 1; j++ )
scanf( "%lf", & mas[i] [j] );