Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx53 / 1_laba

.docx
Скачиваний:
23
Добавлен:
01.08.2013
Размер:
257.15 Кб
Скачать

Санкт-Петербургский Государственный Университет Низкотемпературных и Пищевых Технологий

Лабораторная работа №1

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

Проверил: Малышева Т.А.

Выполнил: Ковалёв А.Г.

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

2011 г

Цель работы: Освоить методы решения нелинейных уравнений: метод бисекций, касательной и библиотечной процедуры Zreal.

Метод половинного деления

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

program polovin

real a,b,x,eps,y

integer n

print *, 'Please, fill in a,b,eps'

read *, a,b,eps

n=0

do while (abs(a-b)>=eps)

x=(a+b)/2 ; n=n+1

if (f(a)*f(x)>0) then

a=x

else

b=x

end if

end do

x=(a+b)/2

y=f(x)

print *, 'x=', x

print *, 'f(x)=', y

print *, ‘ chislo interacii=', n

end

function f(x)

real f,x

f=((x**3)-(1.5*(x**2))+(0.58*x)-(0.057))

end

Подбор одного корня вручную:

Метод Ньютона

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

program hbk

real xn,x,e

integer n

print*, 'e='

read*, e

print*, 'x='

read*, x

n=0

n=n+1

do

xn=x-f(x)/f1(x)

if ((abs(x-xn)<=e).and.((f(x))<=e))then

exit

else

x=xn

n=n+1

end if

end do

print*, 'x=', x

print*, 'n=', n

print*,'f=',f(x)

end

function f1(x)

real f1, x

f1=3*x**2-3*x+0.58

end

function f(x)

real f, x

f= x**3-1.5*x**2+0.58*x-0.057

end

Библиотечная процедура Z Real

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

program lab1

use msimslms

parameter (n=3)

external fx

real fx,x(n),errabs,errel,eps,eta,xguess(n)

integer itmax ,info(n)

errabs=0.00001

errel=0.00001

eta=0.00001

eps=0.00001

itmax=100

xguess(1)=1.5

xguess(2)=0

xguess(3)=6

call zreal(fx,errabs,errel,eps,eta,n,itmax,xguess,x,info)

do i=1,n

print*, i,x(i),fx(x(i)), info(i)

end do

end

function fx(x)

fx= x**3-1.5*x**2+0.58*x-0.057

end

Вывод: Метод деления отрезка пополам медленный, но он всегда сходится, то есть решение получается всегда. Он требует большее число итераций по сравнению с другими методами.

Одним из лучших методов решения нелинейных уравнений является метод Ньютона. Скорость сходимости метода гораздо выше, чем в других методах. Метод хорош и тем, что быстро сходится, потому что имеет квадратичную скорость сходимости. Однако трудность в применении данного метода состоит в выборе начального приближения.

Трудность в методе секущих заключается в том, что он тоже может не сходиться.

program asd

real a,b,E1,E2,x1,y,k,n,x

E1=1E-5; E2=1E-5

print*,'vvedite kol korney'

read*,k

do i=1,k

do

print*,'vvedite a,b',i

read*,a,b

print*,'f(a)=',f(a),'f(b)=',f(b)

if(f(a)*f(b)>0)then

cycle

else

exit

end if

end do

n=0

do

x=(a+b)/2

n=n+1

if (f(a)*f(x)>0)then

a=x

else

b=x

end if

if(abs(f(x))<=E1 .and. abs(a-b)<=E2)exit

end do

x1=(a+b)/2

y=f(x1)

print*,'kolvo iteracii',n

print*,'y=',y,'x1=' ,x1

end do

end

function f(x)

f=x**3-1.5*x**2+0.58*x-0.057

end

Соседние файлы в папке docx53