diff --git a/src/main/java/org/example/chaosgame/linalg/Complex.java b/src/main/java/org/example/chaosgame/linalg/Complex.java
index afe55243d048fa0c00ce4b3377bf9ff82a8c5f1d..fd20f0d623d7c913fdaadbb913dba862de36fc2c 100644
--- a/src/main/java/org/example/chaosgame/linalg/Complex.java
+++ b/src/main/java/org/example/chaosgame/linalg/Complex.java
@@ -1,4 +1,16 @@
 package org.example.chaosgame.linalg;
 
-public class Complex {
+public class Complex extends Vector2D {
+  public Complex(double x, double y) {
+    super(x, y);
+  }
+
+  public Complex sqrt(double cRe, double cIm) {
+    double a = Math.pow(cRe, 2) + Math.pow(cIm, 2);
+
+    double r = Math.sqrt(0.5 * (Math.sqrt(a) + cRe));
+    double i = Math.signum(cIm) * Math.sqrt(0.5 * (Math.sqrt(a) - cRe));
+
+    return new Complex(r, i);
+  }
 }
diff --git a/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java b/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java
index a456bc89acf51ecb3737694362464e3d6be8f102..45da65cf8fab01275ec9cb69128f5562b3796c13 100644
--- a/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java
+++ b/src/main/java/org/example/chaosgame/linalg/Matrix2x2.java
@@ -1,4 +1,36 @@
 package org.example.chaosgame.linalg;
 
 public class Matrix2x2 {
+  private final double a, b, c, d;
+
+  public Matrix2x2(double a, double b, double c, double d) {
+    this.a = a;
+    this.b = b;
+    this.c = c;
+    this.d = d;
+  }
+
+  public double getA() {
+    return a;
+  }
+
+  public double getB() {
+    return b;
+  }
+
+  public double getC() {
+    return c;
+  }
+
+  public double getD() {
+    return d;
+  }
+
+
+  public Vector2D multiply(Vector2D vector) {
+    return new Vector2D(
+      a * vector.getX() + b * vector.getY(),
+      c * vector.getX() + d * vector.getY()
+    );
+  }
 }
diff --git a/src/main/java/org/example/chaosgame/linalg/Vector2D.java b/src/main/java/org/example/chaosgame/linalg/Vector2D.java
index d1d2dabc24bf04b0799b8febe0732d621e9ce42e..8a0c03db238a9241b6f55ebe34c794e3d041c9be 100644
--- a/src/main/java/org/example/chaosgame/linalg/Vector2D.java
+++ b/src/main/java/org/example/chaosgame/linalg/Vector2D.java
@@ -1,4 +1,29 @@
 package org.example.chaosgame.linalg;
 
 public class Vector2D {
+  private final double x;
+  private final double y;
+
+  public Vector2D(double x, double y) {
+    this.x = x;
+    this.y = y;
+  }
+
+  public double getX() {
+    return x;
+  }
+
+  public double getY() {
+    return y;
+  }
+
+  public Vector2D add(Vector2D other) {
+    return new Vector2D(x + other.x, y + other.y);
+  }
+
+  public Vector2D subtract(Vector2D other) {
+    return new Vector2D(x - other.x, y - other.y);
+  }
+
+
 }
diff --git a/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java b/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java
index 362e91100d471c80541539b5bcf26b1ed6073fc1..19a91cad6260d0124763afa0c154f7e4c8d29fa8 100644
--- a/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java
+++ b/src/main/java/org/example/chaosgame/transformations/AffineTransform2D.java
@@ -1,4 +1,4 @@
 package org.example.chaosgame.transformations;
 
-public class AffineTransform2D {
+public class AffineTransform2D implements Transform2D{
 }
diff --git a/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java b/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java
index 035ea113d8f404ce56748c04c655bcec542a036b..3a2be6006bb8460a15782f30319c7a4ab8838667 100644
--- a/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java
+++ b/src/main/java/org/example/chaosgame/transformations/JuliaTransform.java
@@ -1,4 +1,4 @@
 package org.example.chaosgame.transformations;
 
-public class JuliaTransform {
+public class JuliaTransform implements Transform2D{
 }
diff --git a/src/main/java/org/example/chaosgame/transformations/Transform2D.java b/src/main/java/org/example/chaosgame/transformations/Transform2D.java
index a94afeed1eba42f9448384e1688f3e5bbb18c998..ba92e3e6983170ebda89b1d91b60a36d554f9da0 100644
--- a/src/main/java/org/example/chaosgame/transformations/Transform2D.java
+++ b/src/main/java/org/example/chaosgame/transformations/Transform2D.java
@@ -1,4 +1,4 @@
 package org.example.chaosgame.transformations;
 
-public class Transform2D {
+public interface Transform2D{
 }
diff --git a/src/test/java/org/example/chaosgame/linalg/ComplexTest.java b/src/test/java/org/example/chaosgame/linalg/ComplexTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..afd84af05899117f04b10d757ea1baa3bb0e71bd
--- /dev/null
+++ b/src/test/java/org/example/chaosgame/linalg/ComplexTest.java
@@ -0,0 +1,23 @@
+package org.example.chaosgame.linalg;
+
+import org.junit.jupiter.api.Test;
+
+import java.text.DecimalFormat;
+
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ComplexTest {
+  private final double x = 0.1;
+  private final double y = -0.4;
+
+  Complex complex = new Complex(x, y);
+
+  @Test
+  void sqrt() {
+    Complex z = complex.sqrt(x, y);
+    assertEquals(0.5061178531536732, z.getX());
+    assertEquals(-0.3951648786024424, z.getY());
+
+  }
+}
\ No newline at end of file
diff --git a/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java b/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a14ed6aaa387d2cd4ea095c07ae827b2d829381
--- /dev/null
+++ b/src/test/java/org/example/chaosgame/linalg/Matrix2x2Test.java
@@ -0,0 +1,37 @@
+package org.example.chaosgame.linalg;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class Matrix2x2Test {
+  private final double a = 1.0;
+  private final double b = 2.0;
+  private final double c = 3.0;
+  private final double d = 4.0;
+  Matrix2x2 matrix = new Matrix2x2(a, b, c, d);
+  Vector2D vector = new Vector2D(1.0, 2.0);
+
+  @Test
+  void getA() {
+  }
+
+  @Test
+  void getB() {
+  }
+
+  @Test
+  void getC() {
+  }
+
+  @Test
+  void getD() {
+  }
+
+  @Test
+  void multiply() {
+    Vector2D w = matrix.multiply(vector);
+    assertEquals(5.0, w.getX());
+    assertEquals(11.0, w.getY());
+  }
+}
\ No newline at end of file
diff --git a/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java b/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9dba323589201c0567cf547e68f7ec50f4ab2c0c
--- /dev/null
+++ b/src/test/java/org/example/chaosgame/linalg/Vector2DTest.java
@@ -0,0 +1,38 @@
+package org.example.chaosgame.linalg;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class Vector2DTest {
+  private final double x = 1.0;
+  private final double y = 2.0;
+  Vector2D vector = new Vector2D(x, y);
+
+
+  @Test
+  void getX() {
+    assertEquals(1.0, vector.getX());
+  }
+
+  @Test
+  void getY() {
+    assertEquals(2.0, vector.getY());
+  }
+
+  @Test
+  void add() {
+    Vector2D w = vector.add(new Vector2D(1.0, 1.0));
+    assertEquals(2.0, w.getX());
+    assertEquals(3.0, w.getY());
+  }
+
+  @Test
+  void subtract() {
+    Vector2D w = vector.subtract(new Vector2D(1.0, 1.0));
+    assertEquals(0.0, w.getX());
+    assertEquals(1.0, w.getY());
+  }
+}
\ No newline at end of file