Метод касательных для НАУ

Министерство образования и науки Российской Федерации
Костромской государственный технологический университет























Отчет по лабораторной работе №3
«Решение нелинейных алгебраических уравнений методом касательных»














Выполнила: Облова Д. А.
Группа: 09-СА-3б
Проверил: Панин И.Г.














Кострома
2011г.
Постановка задачи:
Реализовать решение нелинейных уравнений:
отделение корней
уточнение корней с помощью метода касательных

Краткое описание математических методов:
Отделение корней сводится к разбиению области допустимых значений функции на такие отрезки, в каждом из которых содержится только один корень. В основе отделения корней лежат две теоремы:
Если функция непрерывна на отрезке и на концах этого отрезка принимает значение разных знаков, то внутри отрезка существует по крайней мере один корень .
Если функция непрерывна и монотонна на отрезке и принимает на концах этого отрезка значение разных знаков, то внутри отрезка содержится только одно пересечение с осью х.
Отрезок [a, b] разбиваем на n интервалов. Поочередно для каждого интервала вычисляем значение функции на его концах. Если значения имеют разные знаки, то корень 1. В конечном итоге получаем совокупность интервалов, содержащих по одному корню.

Метод касательных основан на построении касательных к f(x). Но касательную можно провести на обоих концах интервала, как в точка а, так и в точке b. Нас интересует тот конец интервала, для которого выполняется условие: sign(f’(x)) = sign(f’’(x)). Рассмотрим случай, когда касательную надо искать в точке a интервала [a,b]. Уравнение касательной в точке a будет: f(x) = f’(a)(x-a)+f(a).
Точка пересечения этой прямой с осью x: x = a – f(a)/f’(a). Обозначим ее через a1. Если f(a1) = 0, следовательно, a1 – корень. Если нет – строим касательную к функции f(x) в точке a1, находим ее пересечение с осью x, получаем точку a2. Аналогично получаем точки a3, a4,,an. Все эти точки расположены с одной стороны от искомого корня. В данном случае слева, говорят, что ai – корни с недостатком. Для случаев, когда точки расположены справа – корни с избытком. Процесс продолжается до тех пор, пока не будет выполнено условие: |an-an-1|<=
·.
Найденное значение an и будет приближенное значение корня функции f(x). Погрешность метода вычисляется по формуле: |
·-an|<=|f(an)|/min|f’(x)|.

Код программы :

!-----------------------------------------------------------------
!Вычисление функции
real function f(x)
f =x**3-4*x+2
return
end
!-----------------------------------------------------------------
!1 –я производная
real function p1(x)
p1=3*x*x-4
return
end
!-----------------------------------------------------------------
!2 –я производная
real function p2(x)
p2=6*x
return
end
!----------------------------------------------------------------


Program NAU MKasatelnih
integer kol,j,iterazi(50)
real x1,x2,p, kor(50), x(50),e
logical fl
Print *,Isxodnoe yravnenie :'
write(*,*)'x**3-4*x+2'
print *,'Vvod intervala (a,b):'
write(*,*)'a = '
read(*,*) a
write(*,*)'b = '
read(*,*) b
h=0.01
kol = 0
n = abs(b-a)/h
!-----------------------------------------------------------------
!локализация корней
do i=0,n-1,1
x1 = a + h*i
x2 = x1 + h
if (f(x1)*f(x2).LT.0) then
kol = kol + 1
kor(kol) = i
endif
enddo
write(*,*)'Kol-vo kornei = ',kol
write(*,*) 'E = '
read(*,*) E
!-----------------------------------------------------------------
!уточнение корней
do i=1,kol,1
x1 = a + kor(i)*h
x2 = x1 + h
j = 1
!считаем до заданной точности
if (p1(x1)*p2(x1).LT.0) then
p=x2
else
p=x1
endif
X(i) = p-f(p)/p1(p)
if (f(X(i)).ne.0) then
100 p = x(i)
j = j + 1
xn = x(i)
x(i) = p-f(p)/p1(p)
write(*,*)xn-x(i)
if(abs(xn-x(i)).gt.e) then
go to 100
endif
endif

iterazi(i) = j
enddo
!-----------------------------------------------------------------
!Вывод результата
do i=1,kol,1
write(*,*) iterazi(i)
write(*,1) i,x(i),x(i),f(x(i))
1 format('x[',i2,']= ',F7.4,' ','f[',F7.3,']=',F7.4)
end do
pause
END
Результат выполнения :



Проверка решения в MathCad :







15

Приложенные файлы

  • doc 5108746
    Размер файла: 58 kB Загрузок: 0

Добавить комментарий