---
title: "knitr engine test page"
output: html_document
---

```{r}
maxima.options(engine.format = "latex", 
	       engine.label = TRUE,
	       inline.format = "inline", 
	       inline.label = FALSE)
```

```{maxima}
L: sqrt(1 - 1/R^2);
assume(R > 0);
'integrate(x, x, 0, L) = integrate(x, x, 0, L);
```

```{maxima}
'L = L;
'integrate(x, x, 0, 'L) = integrate(x, x, 0, L);
```

This is an inline test: `r maxima.inline("'L = L;")`.


```{maxima}
sqrt(3/4);
```

```{maxima, output.var = "moo"}
f(x) := e^(x^2)$
diff(f(x), x);
```

```{maxima}
%;
```

```{maxima, output.var = "moo"}
log(%o1);
```

```{r}
moo
eval(moo[[1]], list(R = 12))
```

# Plots

```{maxima, fig.cap = "plot2d()", fig.align="center", fig.show='hide'}
r: (exp(cos(t))-2*cos(4*t)-sin(t/12)^5)$
plot2d([parametric, r*sin(t), r*cos(t), [t,-8*%pi,8*%pi]]);
```

```{maxima, fig.cap = "plot3d()", fig.align="center", fig.show='hide'}
plot3d(log (x^2*y^2), [x, -2, 2], [y, -2, 2],[grid, 29, 29],
       [palette, [gradient, red, orange, yellow, green]],
       color_bar, [xtics, 1], [ytics, 1], [ztics, 4],
       [color_bar_tics, 4]);
```

```{maxima, fig.cap = "draw()", fig.align="center", fig.show='hide'}
example1:
  gr3d (title          = "Controlling color range",
        enhanced3d     = true,
        color          = green,
        cbrange        = [-3,10],
        explicit(x^2+y^2, x,-2,2,y,-2,2)) $

example2:
  gr3d (title          = "Playing with tics in colorbox",
        enhanced3d     = true,
        color          = green,
        cbtics         = {["High",10],["Medium",05],["Low",0]},
        cbrange = [0, 10],
        explicit(x^2+y^2, x,-2,2,y,-2,2))$

example3:
  gr3d (title      = "Logarithmic scale to colors",
        enhanced3d = true,
        color      = green,
        logcb      = true,
        logz       = true,
        palette    = [-15,24,-9],
        explicit(exp(x^2-y^2), x,-2,2,y,-2,2))$

draw(
  dimensions = [500,1500],
  example1, example2, example3)$
```

```{maxima, fig.cap = "draw2d()", fig.align="center", fig.show='hide'}
draw2d(
  dimensions = [1000, 1000],
  proportional_axes = xy,
  fill_color        = sea_green,
  color             = aquamarine,
  line_width        = 6,
  ellipse(7,6,2,3,0,360))$
``` 

```{maxima, fig.cap = "draw3d()", fig.align="center", fig.show='hide'}
draw3d(
   dimensions = [1000, 1000],
   surface_hide      = true,
   axis_3d           = false,
   proportional_axes = xyz,
 
   color             = blue,
   cylindrical(z,z,-2,2,a,0,2*%pi), 
 
   color            = brown,
   cylindrical(3,z,-2,2,az,0,%pi),
 
   color            = green,
   cylindrical(sqrt(25-z^2),z,-5,5,a,0,%pi))$
```


```{r, warning=FALSE, results="markup"}
pft <- list.files(pattern = "(?:plot|draw)(2d|3d)?-[[:print:]]{6}\\.png", full.names = TRUE)

if(length(pft) == 5L)  {
  paste0("OK")
} else {
  paste0("Error: Unexpected number of Maxima plots: ", 
         paste0(pft, collapse = ", "))
}

if(length(pft)) {
  if(all(as.logical(file.size(pft)))) {
    paste0("OK")
  }
  else {
    errfiles <- pft[file.size(pft) == 0]
    paste0("Error: Maxima plot file(s) ", paste0(errfiles, collapse = ", "),
           "are empty.")
  }
}
```

# Normal Distribution

```{maxima}
area(dist) := integrate(dist, x, minf, inf)$
mean(dist) := area(dist*x)$
EX2(dist) := area(dist*x^2)$
variance(dist) := EX2(dist) - mean(dist)^2$
mgf(dist) := area(dist*%e^(x*t))$
```

```{maxima}
normal(x) := 
      (2*%pi*sigma^2)^(-1/2) * 
      exp(-(x-mu)^2/(2*sigma^2));

assume(sigma > 0)$

area(normal(x));
mean(normal(x));
variance(normal(x));
mgf(normal(x));
```

# Laplace Distribution

```{maxima}
laplace(x) := (2*b)^-1 * exp(-abs(x - mu)/b);

load("abs_integrate")$

assume(b > 0)$

area(laplace(x))$
mean(laplace(x))$
variance(laplace(x))$
```

# Exponential Distribution

```{maxima}
expo(x) := unit_step(x) * lambda * exp(-lambda * x);

assume(lambda > 0)$

area(expo(x));
mean(expo(x));
variance(expo(x));
```

# Matrices

```{maxima}
m: matrix([0, 1, a], [1, 0, 1], [1, 1, 0]);
transpose(m);
determinant(m);
f: invert(m), detout;
m . f;
expand(%);
factor(%);
```

# If-then-else

```{maxima}
x: 1234;
y: 2345;
```

```{maxima}
if x > y
  then x
  else y;
```
