Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Laremere/alg

Algebra for Zig
https://github.com/Laremere/alg

Last synced: 29 days ago
JSON representation

Algebra for Zig

Awesome Lists containing this project

README

        

# Alg

alg.math does concise formulas for custom types. Similar to operator overloading in other languages.

I'm making this for a private project which needs to do various types of algebraic math. Unless Alg takes on a life of its own, things will mostly be implemented whent I need them. Also I'm new to Zig and things are likely to not be idiomatic. Issues, comments, and requests are welcome, but will only be acted upon as I see fit.

Example:

```zig
var a = alg.mat.Matrix(f32, 2, 1).lit(.{
1,
2,
});

var b = alg.mat.Matrix(f32, 1, 2).lit(.{
3, 4,
});

var c: f32 = 5;

var result = alg.math("a * b * c", .{
.a = a,
.b = b,
.c = c,
});

try expectEqual(alg.mat.Matrix(f32, 2, 2).lit(.{
15, 20,
30, 40,
}), result);
```

Current limitations:

- Only a limited number of operations implemented so far.
- There is no order of operations. All chained operations must be the same. Use parethesis to determine order. Eg, "(a * b) + c".
- Chained operations are always carried out left to right. This may be inefficient for some equations, and not standard for others (eg, raising to a power).

All more complex types have a single underlying type, and all operations require the same underlying type between operands. Eg you can't add a matrix backed by floats with one backed by integers.

Implemented:
- Matrices:
- Define matrix in terms of rows, and columns.
- Addition between matrices of the same size.
- Multiplication with compatible shaped matricies resulting in a third, possibly differently shapped, matrix.
- Multiplication with scaler values, which multiplies each value in the matrix by the scaler.
- Imaginary Numbers:
- Define in terms of real and imaginary parts.
- Addition and Multiplication with other imaginary numbers.

Feature Wishlist:
- Types:
- Floats
- Integers
- Comptime float and integers
- Vectory / Array
- Matrix
- Affine Matrix
- Geometic Algebra
- Maybe custom functions?
- Imaginary Numbers
- Quaternion
- Operations
- Add
- multiply
- dot
- etc.
- Built in values?
- e
- pi
- Identity matrix? Is this useful?
- Make parse errors actually useful.
- Pairwise conversion of underlying type.