В Закладки

Главная
Официальная
Новости
Курсовые работы
Дипломные проекты
Лекции и конспекты
Рефераты
Софт
Ссылки
Справочник Студента
Гостевая

Почта


Поиск по сайту:

          


















Курсовая по информатике. Метод Ньютона (касательных) для поиска корня функции.

Курсовая по информатике. Метод Ньютона (касательных) для поиска корня функции.

Московский Государственный Строительный Университет

Кафедра информатики и прикладной математики

Курсовая работа

Метод Ньютона (касательных)

для поиска корня функции

Выполнила: Петрухина О. В.

ЭОУС-1-17

Проверил: Зоткин С. П.

Москва 2005 г

Численные методы решения нелинейных уравнений

Численное решение состоит из двух этапов:

I Выбор интервала

Чтобы это сделать, необходимо учесть, что функция f(x) на некотором отрезке [a,b] должна быть:

* Непрерывна

* Монотонна

* Менять знак

Если эти условия соблюдаются, то на интервале [a,b] имеется ровно один корень.

II Определение корня на выбранном интервале с заданной точностью ?.

Если f(x)=0, то найденное значение х - корень.

Метод Ньютона (метод касательных)

Для этого метода требуется дополнительное условие: f?>0 или f?<0 на всём отрезке [ a ,b ](т.е. график либо выпуклый, либо вогнутый, и нет точек перегиба). Касательную следует проводить в той точке(a или b), где выполняется условие сходимости: f(x)·f?(x)>0.

Новое значение х находится из формулы уравнения касательной:

y-f(x0)=f?(x0)·(x1-x0)

x1=x0-f(x0)/f?(x0)

Блок-схема метода Ньютона

Программа для метода Ньютона

Для уравнения f(x)=3*x3-x/3-4

# include

# include

# include

# include

main()

{

float a,b,x,eps;

float f(float);

float f1(float);

float f2(float);

float dix(float, float, float(*) (float), float(*) (float), float(*) (float), float);

printf("a=");

scanf ("%f",&a);

printf("b=");

scanf ("%f",&b);

printf("eps=");

scanf ("%f",&eps);

x=dix(a,b,f,f1,f2,eps);

printf("\n x=%f f(x)=%f",x,f(x));

printf("\n Press ANY key to exit.\n");

getch();

}

float f(float x)

{return 3*x*x*x-x/3-4;

}

float f1(float x)

{return 9*x*x-1/3;

}

float f2(float x)

{return 18*x;

}

float dix(float a, float b, float(*f) (float), float(*f1)(float), float(*f2) (float),

float eps)

{

float x,t;

if (f(a)*f2(a)>0) t=a;

else t=b;

do {x=t;

t=x-f(t)/f1(t);

} while (fabs(x-t)>eps);

return t;

}

В этой программе проводиться касательная. Чтобы найти корень нужно задать a, b, ?.

Для этого нужно проверить несколько условий:

1. найдем f?(x)=9x2-1/3>0 при xc(-?; -1/3?3) (1/3?3;+?)-возрастает

f?(x)=9x2-1/3<0 при xc(-1/3?3; 1/3?3)-убывает;

2. найдем значения a и b: f (0.5)= -3.8<0; f(3)=76>0, так как функция меняет знак, то эти значения подходят;

3. найдем f?(x)=18x: на отрезке (0.5;3) функция выпукла вниз;

4. определим значение ?: пусть ?=0.0001, тогда результаты будут:

0.5

3

0.0001

x= 1.134283 f(x)= 0.000002

Таблица обозначений

Объект Тип Назначение a float Правый коней отрезка b Float Левый конец отрезка ? Float Заданная точность t Float «новый» конец (правый или левый) для касательной f float (float) функция f1 float (float) Функция первой производной f2 float (float) Функция второй производной

Ручной счет

k t f(t) f?(t) x1=t-f(t)/f?(t) |x1-t| 1 3 76 80.6 2.05707 0.94292 2 2.05707 21.42801 37.75049 1.48944 0.56762 3 1.48944 5.41618 19.63255 1.21356 0.27587 4 1.21356 0.95721 12.92121 1.13947 0.07408 5 1.13947 0.05861 11.35219 1.13431 0.00516 6 1.13431 0.00031 11.24659 1.13428 0.00002 7 1.13428 0.00002 11.24598 1.13427 0.000002