Programação
A programação é o uso da física para se fazer matemática, e assim, recriar condições que expressam a realidade!
Acredito que é a área completa das exatas. Envolvem saberes matemáticos e físicos para desenvolver uma nova linguagem. Os pulsos elétricos condicionados formam um conjunto complexo que impressionam até mesmo seus criadores. Se isso não remete a Deus vendo a sua obra máxima... não sei o que poderia. Me lembro da história sobre Michelangelo ao terminar de esculpir Davi, a obra ficou tanto impressionante que faltou falar... Imagine ele vendo a máquina atual. Hoje, a obra "Parla"!
Porém, essa obra não é exclusiva de apenas um ser humano. Mas de muitos, para não dizer todos. A quantidade absurda de dados para desenvolver aplicativos que "conversam", "exprimem" ideias é o que faz esse "milagre" acontecer. Em breve farei um curso básico de programação e matemática. Abordarei assuntos como soma, subtração, divisão e multiplicação entre números e matrizes na linguagem c++. Isso é a base para implementar ideias, quem sabe com muito esforço e dedicação não cria a tua própria IA!
#pragma once
/*
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include <cmath>
class SistemaEDO{
public:
SistemaEDO(unsigned int, unsigned int, double);
~SistemaEDO();
virtual void setK(unsigned int, double[],double[]); //virtual
void Calculate(double initialpos[], double cste[]);
unsigned int ordem;
unsigned int n;
double **x;
private:
double h;
double *k;
};
#include "SistemaEDO.h"
//Constrói a classe
SistemaEDO::SistemaEDO(unsigned int ordem, unsigned int n, double h):ordem{ordem},n{n},h{h}{
ordem= ordem; n = n; h = h;
k = new double[ordem*4];
x = new double* [ordem+1];
for(unsigned int i=0; i< ordem+1; i++){
x[i] = new double [n+1];
}
}
//Destrói a classe
SistemaEDO::~SistemaEDO(){
k=nullptr; delete [] k;
for(unsigned int i=0; i< ordem+1; i++){
x[i]=nullptr; delete [] x[i];
}
x=nullptr; delete [] x;
}
/*
* O método de Runge-Kutta
* As equações estão representadas nas linhas no método setK(a,b,c).
* O parâmetro a representa a ordem é a dimensão-1, que é dado pela
* classe que contém essa classe(SistemaEDO), ou seja só contem as
* variáveis dependentes.
* O parâmetro b representa as coordenadas t,x,dx/dt,y,dx/dt,z,...
* (deveria ter escrito t,x,y,...x',y',...,x'',y''...)
* O parâmetro c representa as constantes do sistema.
* O set é virtual para aproveitar o código. Com ele será definido
* os parâmentros n, h. O n indica o número de interações e h o
* medida que deve encaminhar a cada interação, ou seja o tamanho
* do passo que deve ser dado.
*
*/
void SistemaEDO::Calculate(double initialpos[], double cste[]){
double v[ordem+1]={0.0f};
for(unsigned int i=0; i< ordem+1; i++){
x[i][0] = initialpos[i];
}
for(unsigned int i=0; i<n; i++){
v[0] = x[0][i];
for(unsigned int j=1; j<ordem+1; j++){v[j] = x[j][i];}
setK(0,v,cste);
v[0] = x[0][i] + h/2.0f;
for(unsigned int j=1; j<ordem+1; j++){v[j] = x[j][i] + k[j-1]*h/2.0f;}
setK(ordem,v,cste);
v[0] = x[0][i] + h/2.0f;
for(unsigned int j=1; j<ordem+1; j++){v[j] = x[j][i] + k[j-1+ordem]*h/2.0f;}
setK(2*ordem,v,cste);
v[0] = x[0][i] + h;
for(unsigned int j=1; j<ordem+1; j++){v[j] = x[j][i] + k[j-1+2*ordem]*h;}
setK(3*ordem,v,cste);
x[0][i+1] = x[0][i]+h;
for(unsigned int j=1; j<ordem+1; j++){
x[j][i+1] = x[j][i] + (k[j-1] + 2*k[j-1+ordem] + 2*k[j-1+2*ordem] + k[j-1+3*ordem])*h/6.0f;
}
}
}
Implementação do Método de Runge-Kutta para Sistema de Equações Diferenciais