Cleaned up ChrisTest, added some Matrix functionality in C++, waiting for templates
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
/*********************
|
||||
* Matrix Transpose
|
||||
*
|
||||
* No real concept of vector transpose
|
||||
* in this kraken implementation
|
||||
* *******************/
|
||||
void transpose(int m, int n, double** A)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
/******************************
|
||||
* Allocate memory for tmp array
|
||||
* ***************************/
|
||||
|
||||
double** A_trans;
|
||||
A_trans = malloc(sizeof(double*) * m);
|
||||
|
||||
for(i = 0; i < m; i++)
|
||||
{
|
||||
A_trans[i] = malloc(sizeof(double) * n);
|
||||
}
|
||||
|
||||
/*********************
|
||||
* Copy A into tmp
|
||||
********************/
|
||||
for(i = 0; i < m; i++)
|
||||
{
|
||||
for(j = 0; j < n; j++)
|
||||
{
|
||||
A_trans[i][j] = A[i][j];
|
||||
}//end j loop
|
||||
}//end i loop
|
||||
|
||||
/***************
|
||||
* Transpose operation
|
||||
***************/
|
||||
for(i = 0; i < m; i++)
|
||||
{
|
||||
for(j = 0; j < n; j++)
|
||||
{
|
||||
A[i][j] = A_trans[j][i];
|
||||
}//end j loop
|
||||
}//end i loop
|
||||
|
||||
/**********
|
||||
* Free Memory
|
||||
* *******/
|
||||
for(i = 0; i < m; i++)
|
||||
free(A_trans[i]);
|
||||
free(A_trans);
|
||||
|
||||
}//end transpose function
|
||||
|
||||
void multiply(int m, int n, int q, double** A, double** B, double**C)
|
||||
{
|
||||
//Kraken: check if C is empty, then allocate memory
|
||||
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void printMatrix(int m, int n, double** A)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for(i = 0; i < m; i++)
|
||||
{
|
||||
for(j = 0; j < n; j++)
|
||||
{
|
||||
printf("%f ",A[i][j]);
|
||||
}//end j loop
|
||||
printf("\n");
|
||||
}//end i loop
|
||||
printf("\n");
|
||||
}//end print function
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include "ChrisMatrix.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
double** A;
|
||||
int m = 3;
|
||||
int n = 3;
|
||||
int i, j;
|
||||
|
||||
A = malloc(sizeof(double*) * m);
|
||||
for(i = 0; i < m; i++)
|
||||
A[i] = malloc(sizeof(double) * n);
|
||||
|
||||
int k = 0;
|
||||
for(i = 0; i < m; i++)
|
||||
{
|
||||
for(j = 0; j < n; j++)
|
||||
{
|
||||
A[i][j] = k;
|
||||
k++;
|
||||
}//end j loop
|
||||
}//end i loop
|
||||
|
||||
printMatrix(m, n, A);
|
||||
transpose(m,n,A);
|
||||
printMatrix(m,n,A);
|
||||
printf("Hello World\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
230
ChrisTest/ChrisMatrix/ChrisMatrix.cpp
Normal file
230
ChrisTest/ChrisMatrix/ChrisMatrix.cpp
Normal file
@@ -0,0 +1,230 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
class Matrix {
|
||||
public:
|
||||
// default constructor
|
||||
Matrix() {
|
||||
rows = 0;
|
||||
cols = 0;
|
||||
}
|
||||
|
||||
// standard sizes
|
||||
Matrix(const int m, const int n) {
|
||||
rows = m;
|
||||
cols = n;
|
||||
data.resize(rows * cols);
|
||||
for (int i = 0; i < rows * cols; i++) {
|
||||
data[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
double at(const int i, const int j) {
|
||||
int index = i * rows + j;
|
||||
|
||||
if (index > rows * cols) {
|
||||
std::cout << "index (" << i << ", " << j << ") out of bounds"
|
||||
<< std::endl;
|
||||
std::cout << "Max index = (" << rows - 1 << ", " << cols - 1 << ")"
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
return data[index];
|
||||
}
|
||||
|
||||
void getSize(int &m, int &n) {
|
||||
m = rows;
|
||||
n = cols;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void resize(const int m, const int n) {
|
||||
rows = m;
|
||||
cols = n;
|
||||
|
||||
data.resize(rows * cols);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void set(const int i, const int j, const double val) {
|
||||
int index = i * rows + j;
|
||||
|
||||
if (index > rows * cols) {
|
||||
std::cout << "index (" << i << ", " << j << ") out of bounds"
|
||||
<< std::endl;
|
||||
std::cout << "Max index = (" << rows - 1 << ", " << cols - 1 << ")"
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
data[index] = val;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void transpose() {
|
||||
double val1, val2;
|
||||
|
||||
for (int n = 0; n <= rows - 2; n++)
|
||||
for (int m = n + 1; m <= rows - 1; m++) {
|
||||
val1 = at(n, m);
|
||||
val2 = at(m, n);
|
||||
|
||||
set(n, m, val2);
|
||||
set(m, n, val1);
|
||||
}
|
||||
|
||||
return;
|
||||
} // end transpose
|
||||
|
||||
void copy(Matrix &C) {
|
||||
C.resize(rows, cols);
|
||||
double val;
|
||||
|
||||
for (int i = 0; i < rows; i++)
|
||||
for (int j = 0; j < cols; j++) {
|
||||
val = at(i, j);
|
||||
C.set(i, j, val);
|
||||
}
|
||||
} // end copy
|
||||
|
||||
void inverse() {
|
||||
std::vector<std::vector<double> > a(2 * rows + 1,
|
||||
std::vector<double>(2 * rows + 1, 0));
|
||||
|
||||
int n = rows;
|
||||
|
||||
double d, val;
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = 1; j <= n; j++) a[i][j] = at(i - 1, j - 1);
|
||||
|
||||
for (int i = 1; i <= n; i++)
|
||||
for (int j = 1; j <= 2 * n; j++)
|
||||
if (j == (i + n)) a[i][j] = 1;
|
||||
|
||||
/****************
|
||||
* Partial Pivot
|
||||
***************/
|
||||
|
||||
for (int i = n; i > 1; i--) {
|
||||
if (a[i - 1][1] < a[i][i])
|
||||
for (int j = 1; j <= n * 2; j++) {
|
||||
d = a[i][j];
|
||||
a[i][j] = a[i - 1][j];
|
||||
a[i - 1][j] = d;
|
||||
} // end j loop
|
||||
} // end i loop
|
||||
|
||||
/**********
|
||||
* Reduce to diagonal matrix
|
||||
*********/
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
for (int j = 1; j <= n * 2; j++)
|
||||
if (j != i) {
|
||||
d = a[j][i] / a[i][i];
|
||||
for (int k = 1; k <= n * 2; k++) a[j][k] -= a[i][k] * d;
|
||||
}
|
||||
}
|
||||
|
||||
/***********
|
||||
* reduce to unit matrix
|
||||
**********/
|
||||
for (int i = 1; i <= n; i++) {
|
||||
d = a[i][i];
|
||||
for (int j = 1; j <= n * 2; j++) a[i][j] = a[i][j] / d;
|
||||
}
|
||||
|
||||
std::cout << "your solutions: " << std::endl;
|
||||
for (int i = 1; i <= n; i++) {
|
||||
for (int j = n + 1; j <= n * 2; j++) std::cout << a[i][j] << " ";
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void printMatrix() {
|
||||
for (int i = 0; i < rows; i++) {
|
||||
for (int j = 0; j < cols; j++) {
|
||||
std::cout << data[i * rows + j] << " ";
|
||||
} // j loop
|
||||
std::cout << std::endl;
|
||||
} // i loop
|
||||
} // end printMatrix func
|
||||
|
||||
private:
|
||||
std::vector<double> data;
|
||||
int rows;
|
||||
int cols;
|
||||
};
|
||||
|
||||
void mult(Matrix A, Matrix B, Matrix &C) {
|
||||
int m, n, q;
|
||||
|
||||
A.getSize(m, n);
|
||||
B.getSize(n, q);
|
||||
|
||||
C.resize(m, q);
|
||||
|
||||
double val = 0;
|
||||
|
||||
for (int i = 0; i < m; i++)
|
||||
for (int j = 0; j < q; j++) {
|
||||
for (int k = 0; k < n; k++) {
|
||||
val = A.at(i, k) + B.at(k, i) + val;
|
||||
} // k loop
|
||||
|
||||
C.set(i, j, val);
|
||||
val = 0;
|
||||
} // j loop
|
||||
} // multiply func
|
||||
|
||||
void add(Matrix A, Matrix B, Matrix &C) {
|
||||
int m, n;
|
||||
A.getSize(m, n);
|
||||
|
||||
C.resize(m, n);
|
||||
|
||||
double val;
|
||||
|
||||
for (int i = 0; i < m; i++)
|
||||
for (int j = 0; j < n; j++) {
|
||||
val = A.at(i, j) + B.at(i, j);
|
||||
C.set(i, j, val);
|
||||
}
|
||||
} // end add func
|
||||
|
||||
void sub(Matrix A, Matrix B, Matrix &C) {
|
||||
int m, n;
|
||||
A.getSize(m, n);
|
||||
|
||||
C.resize(m, n);
|
||||
|
||||
double val;
|
||||
|
||||
for (int i = 0; i < m; i++)
|
||||
for (int j = 0; j < n; j++) {
|
||||
val = A.at(i, j) - B.at(i, j);
|
||||
C.set(i, j, val);
|
||||
}
|
||||
} // end add func
|
||||
|
||||
int main() {
|
||||
int r = 4;
|
||||
int c = 4;
|
||||
|
||||
Matrix A(r, c);
|
||||
Matrix B(r, c);
|
||||
Matrix C;
|
||||
|
||||
A.inverse();
|
||||
|
||||
// mult(A,B,C);
|
||||
|
||||
// C.printMatrix();
|
||||
|
||||
return 0;
|
||||
}
|
||||
54
ChrisTest/ChrisMatrix/InvertMatrix.cpp
Normal file
54
ChrisTest/ChrisMatrix/InvertMatrix.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include<iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
int i, j, k, n;
|
||||
float a[10][10] = {0}, d;
|
||||
cout << "No of equations ? ";
|
||||
cin >> n;
|
||||
cout << "Read all coefficients of matrix with b matrix too " << endl;
|
||||
for (i = 1; i <= n; i++)
|
||||
for (j = 1; j <= n; j++) cin >> a[i][j];
|
||||
|
||||
for (i = 1; i <= n; i++)
|
||||
for (j = 1; j <= 2 * n; j++)
|
||||
if (j == (i + n)) a[i][j] = 1;
|
||||
|
||||
/************** partial pivoting **************/
|
||||
for (i = n; i > 1; i--) {
|
||||
if (a[i - 1][1] < a[i][1])
|
||||
for (j = 1; j <= n * 2; j++) {
|
||||
d = a[i][j];
|
||||
a[i][j] = a[i - 1][j];
|
||||
a[i - 1][j] = d;
|
||||
}
|
||||
}
|
||||
cout << "pivoted output: " << endl;
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (j = 1; j <= n * 2; j++) cout << a[i][j] << " ";
|
||||
cout << endl;
|
||||
}
|
||||
/********** reducing to diagonal matrix ***********/
|
||||
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (j = 1; j <= n * 2; j++)
|
||||
if (j != i) {
|
||||
d = a[j][i] / a[i][i];
|
||||
for (k = 1; k <= n * 2; k++) a[j][k] -= a[i][k] * d;
|
||||
}
|
||||
}
|
||||
/************** reducing to unit matrix *************/
|
||||
for (i = 1; i <= n; i++) {
|
||||
d = a[i][i];
|
||||
for (j = 1; j <= n * 2; j++) a[i][j] = a[i][j] / d;
|
||||
}
|
||||
|
||||
cout << "your solutions: " << endl;
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (j = n + 1; j <= n * 2; j++) cout << a[i][j] << " ";
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
/*
|
||||
../build/kraken InputFile.krak ../krakGrammer(tab complete) OutputFile
|
||||
|
||||
*/
|
||||
|
||||
import io;
|
||||
|
||||
|int| main()
|
||||
{
|
||||
|double| var = 3;
|
||||
io::println(var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
BIN
tests/.test_trigTest.krak.un~
Normal file
BIN
tests/.test_trigTest.krak.un~
Normal file
Binary file not shown.
Reference in New Issue
Block a user