И другие программы этой серии
Для этого следует в вычислительном блоке вместо функции Find использовать функцию Minerr, имеющую тот же самый набор параметров. Она также должна находиться в пределах вычислительного блока:
1. x1:=d ... хm: =сm - начальные значения для неизвестных.
2. Given - ключевое слово.
3. Система алгебраических уравнений и неравенств, записанная логическими операторами.
4. Minerr (x1,... ,хm) - приближенное решение системы относительно переменных x1,... ,хm, минимизирующее невязку системы уравнений.
Листинг демонстрирует приближенное решение уравнения k-x2+y2=0, которое при любом значении коэффициента k имеет единственный точный корень (х=0,у=0). Тем не менее при попытке решить его функцией Find для больших k, порядка принятых в листинге, происходит генерация ошибки\"No solution was found\" (Решение не найдено). Это связано с иным поведением функции f (x,y)=k-x2+y2 вблизи ее корня, по сравнению с функциями, приводимыми в качестве примеров выше в этой главе.В отличие от них f (х,у) не пересекает плоскость f (х,у)=0, а лишь касается ее в точке (х=0,у=0). Поэтому и найти корень изложенными в предыдущем разделе градиентными методами сложнее, поскольку вблизи корня производные f (х,у) близки к нулю, и итерации могут уводить предполагаемое решение далеко от корня.
Ситуация еще более ухудшается, если наряду с корнем типа касания имеются (возможно, весьма удаленные) корни типа пересечения.
Тогда попытка решить уравнение или систему уравнений с помощью функции Find может приводить к нахождению корня второго типа, даже если начальное приближение было взято очень близко к первому. Поэтому если вы предполагаете, что система уравнений имеет корень типа касания, намного предпочтительнее использовать функцию Minerr, тем более, что всегда есть возможность проверить правильность решения уравнений простой подстановкой в них полученного решения.
Как видно из листинга, в качестве результата выдаются значения переменных, наилучшим образом удовлетворяющие уравнению и неравенствам внутри вычислительного блока.