*** empty log message ***
This commit is contained in:
parent
c5ca0d1cf6
commit
37ac3fbb56
4 changed files with 0 additions and 244 deletions
1
Makefile
1
Makefile
|
@ -63,7 +63,6 @@ condense.o \
|
|||
conj.o \
|
||||
cons.o \
|
||||
contract.o \
|
||||
convolution.o \
|
||||
cos.o \
|
||||
cosh.o \
|
||||
data.o \
|
||||
|
|
234
convolution.cpp
234
convolution.cpp
|
@ -1,234 +0,0 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Author : philippe.billet@noos.fr
|
||||
//
|
||||
// convolution product
|
||||
//
|
||||
// Input: tos-2 x (can be a symbol or expr)
|
||||
//
|
||||
// tos-1 y (can be a symbol or expr)
|
||||
//
|
||||
//
|
||||
// Output: Result on stack
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "defs.h"
|
||||
int h1, h2, h3, h4;
|
||||
|
||||
static void yconvolution(void);
|
||||
|
||||
void
|
||||
eval_convolution(void)
|
||||
{
|
||||
push(cadr(p1));
|
||||
eval();
|
||||
push(caddr(p1));
|
||||
eval();
|
||||
convolution();
|
||||
}
|
||||
|
||||
void
|
||||
convolution(void)
|
||||
{
|
||||
save();
|
||||
yconvolution();
|
||||
restore();
|
||||
}
|
||||
|
||||
#define X p1
|
||||
#define Y p2
|
||||
|
||||
static void
|
||||
yconvolution(void)
|
||||
{
|
||||
Y = pop();
|
||||
X = pop();
|
||||
push(Y);
|
||||
guess();
|
||||
p4=pop();
|
||||
pop();
|
||||
push(X);
|
||||
guess();
|
||||
p3=pop();
|
||||
pop();
|
||||
|
||||
|
||||
if (iszero(X) || iszero(Y)) {
|
||||
push_integer(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(X) == symbol(DIRAC)) {
|
||||
push(Y);
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(Y) == symbol(DIRAC)) {
|
||||
push(X);
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(X) == symbol(DERIVATIVE)) {
|
||||
push_symbol(CONVOLUTION);
|
||||
push(cadr(X));
|
||||
push(Y);
|
||||
push(caddr(X));
|
||||
derivative();
|
||||
list(3);
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(Y) == symbol(DERIVATIVE)) {
|
||||
push_symbol(CONVOLUTION);
|
||||
push(cadr(Y));
|
||||
push(X);
|
||||
push(caddr(Y));
|
||||
derivative();
|
||||
list(3);
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(X) == symbol(ADD)) {
|
||||
X = cdr(X);
|
||||
push(car(X));
|
||||
push(Y);
|
||||
convolution();
|
||||
X = cdr(X);
|
||||
while (iscons(X)) {
|
||||
push(car(X));
|
||||
push(Y);
|
||||
convolution();
|
||||
add();
|
||||
X = cdr(X);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(Y) == symbol(ADD)) {
|
||||
Y = cdr(Y);
|
||||
push(X);
|
||||
push(car(Y));
|
||||
convolution();
|
||||
Y = cdr(Y);
|
||||
while (iscons(Y)) {
|
||||
push(X);
|
||||
push(car(Y));
|
||||
convolution();
|
||||
add();
|
||||
Y = cdr(Y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (car(X) == symbol(MULTIPLY) && p3 == p4) {
|
||||
|
||||
h1 = tos;
|
||||
|
||||
p5 = cdr(X);
|
||||
while (iscons(p5)) {
|
||||
if (!find(car(p5), p3))
|
||||
push(car(p5));
|
||||
p5 = cdr(p5);
|
||||
}
|
||||
|
||||
h2 = tos;
|
||||
|
||||
p5 = cdr(X);
|
||||
while (iscons(p5)) {
|
||||
if (find(car(p5), p3))
|
||||
push(car(p5));
|
||||
p5 = cdr(p5);
|
||||
}
|
||||
|
||||
if (tos - h2 == 0) {
|
||||
push(one);
|
||||
push(Y);
|
||||
convolution();}
|
||||
else {
|
||||
multiply_all(tos - h2);
|
||||
X = pop();
|
||||
push(X);
|
||||
push(Y);
|
||||
convolution();
|
||||
}
|
||||
|
||||
multiply_all(tos - h1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (car(Y) == symbol(MULTIPLY) && p3 == p4) {
|
||||
|
||||
h3 = tos;
|
||||
|
||||
p5 = cdr(Y);
|
||||
while (iscons(p5)) {
|
||||
if (!find(car(p5), p3))
|
||||
push(car(p5));
|
||||
p5 = cdr(p5);
|
||||
}
|
||||
|
||||
h4 = tos;
|
||||
|
||||
p5 = cdr(Y);
|
||||
while (iscons(p5)) {
|
||||
if (find(car(p5), p3))
|
||||
push(car(p5));
|
||||
p5 = cdr(p5);
|
||||
}
|
||||
|
||||
if (tos - h4 == 0) {
|
||||
push(X);
|
||||
push(one);
|
||||
convolution();}
|
||||
else {
|
||||
multiply_all(tos - h4);
|
||||
Y = pop();
|
||||
push(X);
|
||||
push(Y);
|
||||
convolution();
|
||||
}
|
||||
|
||||
multiply_all(tos - h3);
|
||||
return;
|
||||
}
|
||||
|
||||
// if (exp_flag) {
|
||||
// push(X);
|
||||
// fourier();
|
||||
// push(Y);
|
||||
// fourier();
|
||||
// multiply();
|
||||
// invfourier();
|
||||
// return;
|
||||
// }
|
||||
|
||||
push_symbol(CONVOLUTION);
|
||||
push(X);
|
||||
push(Y);
|
||||
list(3);
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
#if SELFTEST
|
||||
|
||||
static char *s[] = {
|
||||
"convolution(dirac(x),f(x))",
|
||||
"f(x)",
|
||||
|
||||
"eval(convolution(d(dirac(x),x),f(x)))",
|
||||
"d(f(x),x)",
|
||||
|
||||
};
|
||||
|
||||
void
|
||||
test_convolution(void)
|
||||
{
|
||||
test(__FILE__, s, sizeof s / sizeof (char *));
|
||||
}
|
||||
|
||||
#endif
|
1
defs.h
1
defs.h
|
@ -136,7 +136,6 @@ enum {
|
|||
LEGENDRE,
|
||||
LOG,
|
||||
MAG,
|
||||
MEM,
|
||||
MOD,
|
||||
MULTIPLY,
|
||||
NOT,
|
||||
|
|
8
eval.cpp
8
eval.cpp
|
@ -148,7 +148,6 @@ eval_cons(void)
|
|||
case LEGENDRE: eval_legendre(); break;
|
||||
case LOG: eval_log(); break;
|
||||
case MAG: eval_mag(); break;
|
||||
case MEM: eval_mem(); break;
|
||||
case MOD: eval_mod(); break;
|
||||
case MULTIPLY: eval_multiply(); break;
|
||||
case NOT: eval_not(); break;
|
||||
|
@ -399,13 +398,6 @@ eval_isinteger(void)
|
|||
list(2);
|
||||
}
|
||||
|
||||
void
|
||||
eval_mem(void)
|
||||
{
|
||||
print_mem_info();
|
||||
push(symbol(NIL));
|
||||
}
|
||||
|
||||
void
|
||||
eval_multiply(void)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue