Скачиваний:
38
Добавлен:
01.05.2014
Размер:
711.17 Кб
Скачать

22.5. Гомогенизация

Предложение верхнего уровня solve_equationотражает преобразование исходного уравнения в новое уравнение с новым неизвестным. Преобразованное уравнение решается рекурсивно, затем находится решение исходного уравнения.

solve_equation(Equation, X, Solution) 

homogenize(Equation, X, Equation 1, X 1),

solve_equation (Equation1, X1, Solution1),

solve_equation (Solution 1, X, Solution).

Тело правила для предиката homogenize/4реализует четыре этапа гомогенизации, описанные в разд. 22.1.Множество представителей вычисляется предикатомoffenders/3,который проверяет наличие в этом множестве нескольких элементов. Если в множестве только один элемент, то гомогенизация бесполезна:

homogenize (Equation, X, Equation 1, X 1) 

offenders (Equation, X, Offenders),

reduced_term (X, Offenders, Type, XI),

rewrite (Offenders, Type, X1, Substitutions),

substitute (Substitute, Equation, Equation!).

Предикат reduced_term/4находит некоторыйприведенный терм,рассматриваемый далее в качестве нового неизвестного. Для организации поиска приведенного терма определяется тип уравнения. Этот тип используется на следующем этапе для поиска правила преобразования, выражающего каждый элемент множества предста­вителей в виде функции приведенного терма. Уравнение, рассматриваемое в качестве примера, имеет экспоненциальный тип. В комплексе PRESSиспользуется много эвристических правил поиска подходящего приведенного терма. Эти эвристи­ки зависят от типа термов, входящих в множество представителей. Для облегчения процесса поиска приведенного терма выделяются два этапа: классификация мно­жества представителей по типу и нахождение приведенного терма данного типа:

reduced_term(X, Offenders, Type, XI) 

classify (Offenders, X,Туре),

candidate (Type, Offenders, X, X1).

Как видно, множество правил соответствует рассматриваемому нами уравнению. Множество представителей относится к экспоненциальному типу, поскольку все элементы в нем имеют вид AB,гдеАне содержит, аВсодержит неизвестное. Истинность этого проверяется стандартными рекурсивными процедурами.

Эвристика, испотьзуемая в этом примере для выбора приведенного терма, формулируется так: если все термы рассматриваемого множества имеют одинако­вое основание А, а каждый показатель степени представляет собой полином от неизвестного X,то подходящим приведенным термом является терм A•.

candidate(exponential, Offenders,А, А X) 

base(Offenders, A),

polynomial_exponents(Offenders,X).

Простые программы для предикатов baseи polynomial_exponenisсодержатся в полном тексте программы решателя уравнений. В комплексе PRESSреализованы более тонкие эвристики. Например, может быть вычислен наибольший общий делитель всех старших членов полиномов и использован для выбора приведенного терма.

Следующий шаг состоит в проверке того, может ли каждый элемент множества представителей быть выражен через предлагаемый приведенный терм. Это требует поиска соответствующего правила. Набор предложений homogenize_axiomсодержит возможные правила преобразования. Другими словами, подходящие правила должны быть специфицированы заранее. В рассматриваемом примере применимыми являются следующие правила:

homogenize_axiom(exponentia1,A  (N*X), AX, (A  X)  N).

homogenize_axiom(exponential,A  (X + B),A  X,A  B*A  X).

Подстановка терма в уравнение отражает процесс разбора, использующий предикат offenders,так как проверяется каждая часть уравнения с целью определения в ней терма, подлежащего замене.

Упражнения к гл. 22

1.Добавьте в программу 22.1аксиомы изоляции для обработки отношений в левой части уравнения. Решите уравнениех/2 = 5.

2.Измените решатель алгебраических уравнений так, чтобы с его помощью можно было решать замаскированные линейные и квадратные уравнения. Решите уравнения 2x-8=xи.x4-5x2+6=0.

3.Уравнение cos(2x)-sin(х)=0может быть решено как квадратное уравнение с неизвестным sin(x).Данное уравнение приводится к квадратному с помощью подстановкиcos(2x)=1-2sin2(х).Добавьте в программу 22.1предложения для решения этого уравнения. При этом необходимо добавить правила для идентификации термов типа trigonometric. эвристики для поиска приведенных тригонометрических термов и соответствующие аксиомы гомогенизации.

4.Перепишите предикат free_of(Term, X)так, чтобы он принимал значение «ложь» при обнаружении вхожденияХв терм Term.

5.Измените программу 22.1так, чтобы она решала простые системы уравнений.

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