---
title: "hw5"
author: "Mark Pearl"
date: "7/25/2021"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(R.matlab)
library(rmatio)
library(flexclust)
# library(matlib)
```

## HW5 Q4 RHKS

1a)  Create a 2D Gaussian kernel basis (Gram matrix) by finding the Kronecker product of two 1D 
Gaussian kernels with bandwidth 1. 

```{r read data file and construct Guassian 1D Kernels }

#Read in data representing image
image <- read.mat('Peaks.mat')

#Create 1D Guassian Kernel
x <- (1:100)
bwd <- 1
#Gaussian1D =exp(-(dist(x)^2)/bwd)
E <- as.matrix(dist(x, diag=T, upper=T))
Gaussian1D <- exp(-E^2 / bwd)

#Create K Gram matrix from the konecker product of the Guassian1D kernel
K = kronecker(Gaussian1D,Gaussian1D)
y = as.vector(image$Y)

#Calculate the alpha parameter by an arbitrary lambda value
lambda <- 0.04
alpha <- solve(K + lambda * diag(dim(K)[1])) %*% y

#Calculate prediction to show image 
y_hat = K %*% alpha
```

```{r show outputs}
library(matlab)
par(mfrow=c(1,2))
imagesc(image$Y, main ="Original y")
imagesc(matrix(y_hat,nrow=100,ncol=100), main ="Predicted y_hat")
```