- •4.1 Метод пошаговой детализации
- •4.2. Представление о структурном программировании
- •4.3. Сведения о модульном программировании
- •4.4. Краткая информация об объектно-ориентированном программировании
- •4.5. Что еще почитать
- •4.6. Задания
- •4.7. Справочная информация
- •4.8. Программное обеспечение
- •@Fname , где fname - имя m-функции.
4.8. Программное обеспечение
Ниже приведены тексты программ на алгоритмическом языке 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 - имена внешних подпрограмм-функций, в которых вычисляются значения функций (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 , являющийся фактическим параметром, указывающим функцию для вычисления левой части уравнения , задается в виде:
