This commit was generated by cvs2svn to compensate for changes in r4,
which included commits to RCS files with non-trunk default branches. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@5 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
64
CHR/chr/examples/math-fourier.pl
Normal file
64
CHR/chr/examples/math-fourier.pl
Normal file
@@ -0,0 +1,64 @@
|
||||
% Slim Abdennadher, Thom fruehwirth, LMU, July 1998
|
||||
% Straightforward Fourier Solver for linear inequations
|
||||
% may loop because of producing more and mor eredundant equations
|
||||
% compare to gauss.pl and fougau.pl
|
||||
|
||||
:- use_module(library(chr)).
|
||||
:- ['math-utilities.pl']. % load auxiliary file
|
||||
:- use_module( library(lists), [member/2, memberchk/2,select/3]).
|
||||
|
||||
handler gauss.
|
||||
|
||||
option(check_guard_bindings, on). % for delete(X...)
|
||||
option(already_in_store, off).
|
||||
option(already_in_heads, off).
|
||||
|
||||
operator(100,xfx,leq).
|
||||
|
||||
constraints (leq)/2.
|
||||
|
||||
redundant @
|
||||
[X*Coeff1|P1] leq C1 \ P leq C2 <=>
|
||||
delete(X*Coeff2,P,P2),
|
||||
is_div(Coeff2,Coeff1,C),
|
||||
C < 0,
|
||||
mult_const(eq0(C1,P1),C,eq0(C1C,P1C)),
|
||||
add_eq0(eq0(C2,P2),eq0(C1C,P1C),eq0(C3,P3)),
|
||||
P3=[], 0 >= C3
|
||||
|
|
||||
true.
|
||||
|
||||
propagate(X) @
|
||||
[X*Coeff1|P1] leq C1, P leq C2 ==>
|
||||
delete(X*Coeff2,P,P2),
|
||||
is_div(Coeff2,Coeff1,C),
|
||||
C > 0
|
||||
|
|
||||
mult_const(eq0(C1,P1),C,eq0(C1C,P1C)),
|
||||
add_eq0(eq0(C2,P2),eq0(C1C,P1C),eq0(C3,P3)),
|
||||
P3 leq C3.
|
||||
|
||||
zero @ [] leq C1 <=> 0 =< C1.
|
||||
|
||||
|
||||
constraints {}/1.
|
||||
% curly brackets as wrapper to avoid name clash with built-in =:= etc.
|
||||
|
||||
split @ { C, Cs } <=> { C }, { Cs }.
|
||||
|
||||
normalize @ {A >= B} <=> {B =< A}.
|
||||
normalize @ {A =:= B} <=> {A >= B}, {B =< A}.
|
||||
normalize @ {A =< B} <=>
|
||||
normalize(A,B,Poly,Const),
|
||||
Poly leq Const.
|
||||
|
||||
|
||||
/*
|
||||
|
||||
3 * X + 2 * Y - 4 * (3 + Z) =:= 2 * (X - 3) + (Y + Z) * 7 ,
|
||||
2 * (X + Y + Z) =:= 3 * (X - Y - Z) ,
|
||||
5 * (X + Y) - 7 * X - Z =:= (2 + 1 + X) * 6.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user