Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик1 / VMKUR_6.DOC
Скачиваний:
7
Добавлен:
01.05.2014
Размер:
39.42 Кб
Скачать

Cанкт-Петербургский Государственный Электротехнический Университет.

КАФЕДРА МОЭВМ

Отчет по курсовой работе

Преподаватель : Титов М.С.

Студент : Виноградо К.Ю.

Санкт-Петербург

Задание на курсовую работу :

Используя программы - функции BISECT , NEWTON , HORDA , ITER, Round из файла metods.cpp найти корень уравнения f(x)=0 с заданной точностью методом бисекции , Ньютона , хорд и итераций соответственно .

Исследуйте обусловленность методов и зависимость числа итераций от точности результата Eps при изменении Eps от 0.1 до 0.000001 .

Порядок выполнения работы :

  1. Графически или аналитически отделить корень уравнения (т.е. найти отрезки [Left, Right], на которых функция удовлетворяет условиям применимости методов).

  2. Составить подпрограмму- функцию вычисления функции и ее производной (при необходимости), предусмотрев округление их значений с заданной точностью Delta с использованием библиотечной функции Round.

  3. Составить головную программу, содержащую ввод исходных данных, обращение к подпрограммам BISECT, NEWTON, HORDA, ITER вывод результатов.

  4. Выполнить вычисления по программе. Построить графики зависимости числа итераций, необходимых для достижения заданной точности Eps, от величины Eps, а также достижимой точности результатов от точности Delta задания функции .

  5. Теоретически и экспериментально сравнить методы бисекции, Ньютона, хорд и итераций по скорости сходимости и степени обусловленности.

  6. Результаты оформить в виде отчета, содержащего постановку задачи, тексты разработанных программ, результаты теоретического и экспериментального анализа в виде таблиц и графиков, выводы.

F(x)=tg(x)-1/x

Теоретическое введение :

В данной работе исследуются четыре метода нахождения корня нелинейного уравнения.

  1. Метод Бисекции основан на половинном делении отрезка, на концах которого функция принимает значения разных знаков. Это самый медленный метод из данных, однако он самый точный.

  2. Метод Ньютона геометрически эквивалентен замене небольшой дуги кривой y=f(x) касательной, проведенной в некоторой точке кривой. Это один из самых быстрых методов т.к. обладает квадратичной скоростью сходимости. По точности уступает методу Бисекции.

  3. Метод Хорд основан на пропорциональном делении отрезка.Это почти самый быстрый метод, однако по точности он уступает методу Бисекции.

  4. Метод Простых Итераций основан на замене данной функции другой функцией. Это один из быстрых методов, причем чем меньше параметр q, тем быстрее получается результат.

Содержание работы :

  1. Локализуем корни уравнения. В данном уравнении кореней много. Выбераем отрезок, на котором функция, первая и вторая производные монотонны ( см. графики ) , это необходимые условия методов нахождения корня. В данном случае выберем отрезок [0.5;1.2] при корне уравнения » 0.8.

  2. Для метода простых итераций вводим новую функцию j(x)=x-a*f(x) Проверяем выполнимость условия монотонности j‘(x) = (cм. график) . По графику видно, что f’(x)>0 на исследуемом отрезке. f’(x): 0<m=f1’(0.5)£f’(x)£f2’(1.2)=M; m=5.29844, M=8.310040, q»0.362432, a=0.120331. Выбираем начальное приближение равное левой границе (0.5).

  3. Для метода Ньютона выбираем начальное приближение, отвечающее условию f(x0)*f”( x0)>0, по графикам видно, что правая граница удовлетворяет этому условию, поэтому в качестве начального приближения берем левую границу, равную 0.5 .

  4. Исследуем данные методы по скорости сходимости , изменяя Eps от 0.1 до 0.000001 при Delta =0. Данные и результаты приведены в таблице и отображены на графиках.

  5. Исследуем данные методы по степени обусловленности , изменяя Delta от 0.1 до 0.000001 при значениях Eps=0.000001 и Eps=0.01. Данные и результаты приведены в таблице и отображены на графиках.

  6. Вычисляем обусловленности f(x) == 0,276040 è j(x)==2,29400

Òекст программы :

#include <conio.h>

#include <iostreams.h>

#include "methods.h"

double delta[18]={0,0,0,0,0,0,0,

0.1,0.01,0.001,0.0001,0.00001,0.000001,

0.1,0.01,0.001,0.0001,0.00001,0.000001};

double a=0.120331

int c2;

//----------------------------------

void main()

{

int i,c1;

double left=0.5,

right=1.2,

x;

double eps[18]={0.1,0.01,0.001,0.0001,0.00001,0.000001,

0.000001,0.000001,0.000001,0.000001,0.000001,0.000001,

0.01,0.01,0.01,0.01,0.01,0.01};

cout<<endl;

for (c1=1;c1<5;c1++)

{

for (c2=0;c2<18;c2++)

{

switch (c1)

{

case 1:

cout<<"Метод бисекции.........";

x=BISECT(left,right,eps[c2],i);

cout<<endl<<"Delta="<<delta[c2]<<"\t Eps="<<eps[c2]<<endl;

cout<<"X="<<x<<" число интерации="<<i<<endl;

break;

case 2:

cout<<"Метод Ньютона..........";

x=NEWTON(3.6,eps[c2],i);

cout<<endl<<"Delta="<<delta[c2]<<"\t Eps="<<eps[c2]<<endl;

cout<<"X="<<x<<" число интерации="<<i<<endl;

break;

case 3:

cout<<"Метод Хорд.............";

x=HORDA(left,right,eps[c2],i);

cout<<endl<<"Delta="<<delta[c2]<<"\t Eps="<<eps[c2]<<endl;

cout<<"X="<<x<<" число интерации="<<i<<endl;

break;

case 4:

cout<<"Метод простых итераций.";

x=ITER(3.6,eps[c2],i);

cout<<endl<<"Delta="<<delta[c2]<<"\t Eps="<<eps[c2]<<endl;

cout<<"X="<<x<<" число интерации="<<i<<endl;

break;

}

getch();

}

cout<<endl;

}

getch();

}//main

double F(double x)

{

double f;

f=tan(x)-1/x;

f=Round(f,delta[c2]);

return f;

}

double F1 (double x)

{

double f;

f=tan(x)*tan(x)+1/(x*x)+1;

f=Round(f,delta[c2]);

return f;

}

double func (double x)

{

double f;

f=x-a*(tan(x)+1/x);

f=Round(f,delta[c2]);

return f;

}

Соседние файлы в папке Курсовик1