Spn:Motor de Matemáticas desde0 Eng:Math Engine from scratch

Haz aquí tus consultas relacionadas con la programación gráfica.
Responder
Mensaje
Autor
compusystems
Mensajes: 13
Registrado: 05/10/2012 9:10 am
Ubicación: Colombia

Spn:Motor de Matemáticas desde0 Eng:Math Engine from scratch

#1 Mensaje por compusystems » 10/10/2012 2:40 pm

[Proyecto] Spn:Motor de Matemáticas desde 0 Eng:Math Engine from scratch.

Blog del autor original del proyecto

Lord Pakus Blog:
http://lordpakus.blogspot.com/p/math-engine.html

Lord Pakus inicio el proyecto de Math Engine from scratch con bibliotecas de Vectores y Matrices, que me parece un buen pedestal para continuarlo, y por que no de pronto en un futuro se convierta en un motor de calculo numérico y simbólico CAS (Computer Algebra System) como el famoso xCAS http://www-fourier.ujf-grenoble.fr/~parisse/giac.html

Para expandir el proyecto, lo primero es aumentar el numero de funciones de la biblioteca de Vectores y Matrices, como se haría esto?, si conocen el paquete matematico MatLab acronimo de MatrixLaboratory verán que se opera en base a vectores, entonces hay muchas funciones que podemos emularlas en nuestro paquete, pero para esto requiero la ayuda de vosotros...

Necesito una biblioteca en C/C++ que maneje cadenas de texto, por que la entrada de datos sera lineal, como la entrada de datos de muchos paquetes matematicos

Imagen


y para este caso en formato de vector/matriz, por ejemplo para iniciar

MakeVector( Vector0, "[ 11, 6, 3, 4 ]" ); crearía un arreglo con nombre identificador o variable del primer argumento de la función MakeVector asi:

float Vector0[ 4 ] = { 11.0f, 6.0f, 3.0f, 4.0f };

análogamente para una matriz (vector de vectores o un también llamado array bidimensional)

MakeMatrix( Matrix3, "[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]]" ); Se decodifica en:

float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };

[ [ 1, 2, 3, 4.3 ], [ 5, 6, 7.9, 8 ]] puede ser vista como

[ [ 1, 2, 3, 4.3 ]
[ 5, 6, 7.9, 8 ]]

Otro tipo de entrada de matrices para no usar muchos corchetes

MakeMatrix( Matrix3, "[ 1, 2, 3, 4.3 ; 5, 6, 7.9, 8 ]" ); Se decodifica en:

float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };

EL punto y coma dentro de "[ 1, 2, 3, 4.3 ; 5, 6, 7.9, 8 ]" indica nueva fila

Redactando ... por favor espere

Por que la entrada de datos en cadena, para que el programa sea mas intuitivo o mas cercano al lenguaje matematico

EL primer intento codigo

makeVector_version00.cpp

Código: Seleccionar todo

#include <iostream>
using namespace std;

int *Vector_IdName;
int Vector, Vector_Dim;
	
int main( int argc, char *argv[ ] ){

	cout << "Ingresa el tamanio del vector: Vector_Dim=";
	cin >> Vector_Dim;
	Vector_IdName = new int[ Vector_Dim ];
	
	cout << "Ingresa cada elemento del vector: luego [ENTER] para cada uno" << endl;
	for( int i = 0; i < Vector_Dim; i++ ){
		cin >> Vector_IdName[ i ];
	}
	
	cout << "Vector0 = [ ";
	for( int i = 0; i < Vector_Dim; i++ ){
		cout << Vector_IdName[ i ] << " ";
	}
	cout << "]" << endl;
	
	//delete[] Vector_IdName;
	return 0;	
}

// Meta
//int MakeVector( *Vector_IdName, Vector ){
	// Help
//}

//MakeVector( Vector0, "[ 11, 6, 3, 4 ]" ); crearía un arreglo con nombre identificador o variable del primer argumento de la función MakeVector asi: 
//float Vector0[ 4 ] = { 11.0f, 6.0f, 3.0f, 4.0f };

}
La anterior manera de entrar dato es elemento por elemento :( y lo que se desea es en una sola sentencia

Basado en Operaciones con matrices – Clase Matriz en c++ del blog
http://ronnyml.wordpress.com/2009/07/04 ... triz-en-c/

Entonces en resumen es decodificar la cadena "[ 11, 6, 3, 4 ]" para convertirla en Array

2do avance

Código: Seleccionar todo

#include <iostream>
using namespace std;
#include <string.h>

	
int main( int argc, char *argv[ ] ){

	char vector_string[ ] = "[ [ 1, 2, 3, 4.3  ], [ 5, 6, 7.9, 8  ]]";
	char *pvector_string;
	cout << "Splitting string" << vector_string << "into tokens:\n" << endl;
	pvector_string = strtok( vector_string, " [,]" ); // Help1: Que subcadena se obtuvo?
	
	while( pvector_string != NULL ){
		cout << pvector_string << endl; // Despliega subcadenas de texto
		pvector_string = strtok( NULL, " [,]" ); // Help2: Null equivale a la ultima posicion 
	}	
	
	return 0;	
}

// Input: "[ [ 1, 2, 3, 4.3  ], [ 5, 6, 7.9, 8  ]]"
// Output:   1 2 3 4.3 5 6 7.9 8

// Meta: 
//  Input: MakeMatrix( Matrix3, "[ 1, 2, 3, 4.3  ;  5, 6, 7.9, 8  ]" );
// Output: float Matrix0[ 2 ][ 4 ] = { { 1.0f, 2.0f, 3.0f, 4.3f }, { 5.0f, 6.0f, 7.9f, 8.0f } };

Basado en: http://www.cplusplus.com/reference/clib ... ng/strtok/
http://www.cplusplus.com/reference/string/string/

Avatar de Usuario
Requiem
Mensajes: 706
Registrado: 11/04/2006 11:00 pm
Contactar:

#2 Mensaje por Requiem » 31/03/2013 2:24 pm

Buenas....
Ya se que el tema es antiguo, pero solo para informaros que el link al motor de matematicas lo he cambiado de ruta... la nueva es http://lordpakus.blogspot.com.es/2013/0 ... ngine.html

Nos vemos

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados