Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Программное обеспечение



 

Ниже приведены тексты программ на алгоритмическом языке FORTRAN, реализующие:

- метод половинного деления Subroutine Polov(a, b, eps, F, x);

- метод хорд Subroutine Horda(a, b, eps, F, x);

- метод простой итерации

Subroutine Iter(eps, km, Fi, x0, x, kErr);

- метод Ньютона

Subroutine Newton(eps, km, F, dF, x0, x, kErr).

 

В качестве формальных параметров в подпрограммах используются:

a и b- левая и правая границы отрезка изоляции корня;

eps - относительная погрешность вычисления корня уравнения;

km - предельное количество итераций (параметр, обеспечивающий аварийный выход из подпрограммы при расходящемся итерационном процессе);

Fi и F - имена внешних подпрограмм-функций, в которых вычисляются значения функций j (x) и f(x), соответственно;

dF - имя подпрограммы-функции, в которой вычисляется значение первой производной функции f(x) (подпрограмма оформляется так же, как и подпрограмма F);

x - вычисленное значение корня уравнения;

x0 - для метода Ньютона и метода простой итерации это начальное приближение корня;

kErr - признак успешности поиска корня: kErr = 0 , если корень вычислен с заданной точностью, и kErr = 1 , если исходное уравнение неразрешимо данной подпрограммой (заданная точность не достигнута за заданное предельное количество итераций).

Предполагается, что подпрограммы Fi, F, dF оформлены в виде

Function Fun(x)

...............

Fun =...........

End

 

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

Subroutine Polov (aa, bb, eps, F, x)

a=aa

b=bb

n=0

Do

x=(a+b)/2.

If (abs(2*(b-a)/(b+a)) .lt. eps) Exit

n=n+1

If (F(a)*F(x) .gt. 0.0) Then

a=x

Else

b=x

End if

End do

End

Метод хорд

Subroutine Horda (aa, bb, eps, F, x)

a=aa

b=bb

n=0

x1=a

f1=F(a)

f2=F(b)

Do

x=a-(b-a)*f1/(f2-f1)

If (abs(2*(x-x1)/(x+x1)) .lt. eps) Exit

n=n+1

ff=F(x)

If (ff*f1.GE.0.0) Then

a=x

f1=ff

Else

b=x

f2=ff

End if

x1=x

End do

End

Метод простой итерации

Subroutine Iter (eps, km, Fi, x0, x, kErr)

kErr = 0

n = 0

Do

x=Fi(x0)

If (abs(2*(x-x0)/(x+x0)) .lt. eps) Exit

x0=x

n=n+1

if (n .eq. km) then

kErr=1

Exit

End if

End do

End

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

Subroutine Newton (eps, km, F, dF, x0, x, kErr)

kErr = 0

n=0

Do

x=x0-F(x0)/dF(x0)

n=n+1

if (abs(2*(x-x0)/(x+x0)).lt.eps) Exit

If (n.ge.km) Then

kErr=1

Exit

End if

x0=x

End do

End

 

В системе MATLAB вычисление корня нелинейного уравнения реализуется при помощи функции fzero, которую можно использовать следующими способами:

x = fzero(fun,x0) – вычисляет корень уравнения , левая часть которая представлена параметром fun, определяющим имя m-функции, ее вычисляющей. Аргумент x0 задает начальное приближение к корню. Если x0 = [a b] – вектор, содержащий границы интервала локализации искомого корня, то вычисляется значение корня, лежащего в интервале [a, b];

[x, fval] = fzero(fun,x0) – вычисляет корень уравнения и дополнительно значение функции на вычисленном значении x;

[x, fval, flag] = fzero(fun,x0) – выдает дополнительно признак flag, характеризующий обстоятельства завершения вычислений, например:

1 – соответствует успешному завершению вычислений,

-3 – соответствует тому, что в процессе вычислений получено значение NaN или Inf функции ,

-4 – получено комплексное значение функции ,

-5 – точка перемены знака соответствует вертикальной асимптоте графика функции , а не корню.

Точность вычисления корня при описанных способах вызова функции fzero определяется по умолчанию значением встроенной константы eps системы MATLAB, равной 2.22044604925031e-016.

 

Параметр fun, являющийся фактическим параметром, указывающим функцию для вычисления левой части уравнения , задается в виде:

@fname , где fname - имя m-функции.

 

 




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

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.