C# - Uma Library para cálculos científicos


A plataforma .NET possui diversos recursos espalhados pelas milhares de classes que a compõe. Apesar disso realizar cálculos científicos usando apenas os recursos nativos disponíveis pela plataforma não é uma tarefa trivial.

Se você já tentou calcular integrais ou diferenciais usando os recurso da plataforma .NET sabe do que eu estou falando.

Eu sei que existem componentes de terceiros que suprem essa lacuna o que acaba sendo uma saída para quem realmente precisa obter resultados.

Neste sentido que apresentar a library Science.dll que você pode baixar neste link: http://www.sciencecode.com/

Esta library deve ser usada na plataforma .NET 4.5 usando o Visual C# 2012 Express : .Net 4.5 and Visual C# 2012 Express

O objetivo da Science.dll é permitir que os estudantes de ciência com uma biblioteca para cálculos científicos usando uma linguagem com recursos da orientação a objeto como a linguagem Visual C#; e no site você vai encontrar mais informações e detalhes com exemplos sobre diversos assuntos como : álgebra, cálculo, física, química, etc.

Apenas para ilustrar eu vou mostrar um pequeno exemplo de utilização da library para calcular algumas integrais definidas.

Apenas para clarear um pouco o pensamento e vejamos alguns conceitos sobre Integrais definidas:

 INTEGRAIS DEFINIDAS

Seja uma função f(x) definida e contínua num intervalo real [a, b]. A integral definida de f(x), de a até b, é um número real, e é indicada pelo símbolo:

     onde:

  • a é o limite inferior de integração;

  • b é o limite superior de integração;

  • f(x) é o integrando.

  Se  representa a área entre o eixo x e a curva f(x), para

Onde temos que a área da figura é representada por:

         

Fonte: http://www.somatematica.com.br/superior/integrais/integrais2.php (acessado em outubro de 2013)

Vamos então usar a library Science.dll para calcular algumas integrais definidas básicas:

Baixe a a library Science.dll na sua máquina local.

A seguir abra o Visual Studio 2012 Express for desktop  e crie um novo projeto do tipo Windows Application com o nome Science_Demo:

Vamos incluir no formulário form1.cs os controles :

Dispondo os controles conforme o leiaute da figura abaixo:

A seguir vamos incluir uma referência a library Science.dll clicando no menu PROJECT e a seguir em Add Reference;

A seguir clique no botão Browse e localize e library na sua máquina local selecionando-a e clicando em OK;

Agora já temos acesso às classes da library em nosso projeto.

Vamos declarar no início do formulário os namespaces:

using System;
using System.Windows.Forms;
using Science.Mathematics.VectorCalculus;
using Science.Mathematics;

1- Para calcular integrais devemos criar uma instância da classe Integration:

Integration obj = new Integration();

2- A seguir definimos a função que desejamos integrar

Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(xdx);
obj.Function = f;

3- A função xdx deve ser definida a parte conforme o código a seguir:

private double xdx(double x)
{
    return x;
}

4- Passamos os valores para o limite superior e inferior da integral :

obj.From = Convert.ToDouble(nupd1.Value);
obj.To = Convert.ToDouble(nupd2.Value);

5- Calculamos e retornos o resultado :

obj.Compute();
txtResultado.Text = obj.Result.ToString();

Veja o código completo do exemplo:

using System;
using System.Windows.Forms;
using Science.Mathematics.VectorCalculus;
using Science.Mathematics;

namespace Science_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Integration obj = new Integration();

        private void btnCalcular_Click(object sender, EventArgs e)
        {
            if (rdb1.Checked)
            {
                Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(xdx);
                obj.Function = f;
                obj.From = Convert.ToDouble(nupd1.Value);
                obj.To = Convert.ToDouble(nupd2.Value);
                obj.Compute();
                txtResultado.Text = obj.Result.ToString();
            }
            else if (rdb2.Checked)
            {
                Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(x2dx);
                obj.Function = f;
                obj.From = Convert.ToDouble(nupd3.Value);
                obj.To = Convert.ToDouble(nupd4.Value);
                obj.Compute();
                txtResultado.Text = obj.Result.ToString();
            }
            else if (rdb3.Checked)
            {
                Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(x3dx);
                obj.Function = f;
                obj.From = Convert.ToDouble(nupd5.Value);
                obj.To = Convert.ToDouble(nupd6.Value);
                obj.Compute();
                txtResultado.Text = obj.Result.ToString();
            }
            else if (rdb4.Checked)
            {
                Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(x2Mais4);
                obj.Function = f;
                obj.From = Convert.ToDouble(nupd7.Value);
                obj.To = Convert.ToDouble(nupd8.Value);
                obj.Compute();
                txtResultado.Text = obj.Result.ToString();
            }
            else if (rdb5.Checked)
            {
                Function.ToLastType<double, double> f = new Function.ToLastType<double, double>(sqrtUmMaisX);
                obj.Function = f;
                obj.From = Convert.ToDouble(nupd9.Value);
                obj.To = Convert.ToDouble(nupd10.Value);
                obj.Compute();
                txtResultado.Text = obj.Result.ToString();
            }
            else
            {
                MessageBox.Show("Selecione uma integral para cálculo.", "Selecione uma integral", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private double xdx(double x)
        {
            return x;
        }
        private double x2dx(double x)
        {
            return x*x;
        }
        private double x3dx(double x)
        {
            return x*x*x;
        }
        private double x2Mais4(double x)
        {
            return x*x + 2;
        }
        private double sqrtUmMaisX(double x)
        {
            return 2 * x * x * x  + 3 * x * x;
        }
    }
}

Executando o projeto podemos selecionar a integral definida deseja e calcular o seu valor no intervalo especificado:

Este artigo é apenas uma apresentação da library. Cabe a você, de acordo com sua necessidade explorá-la e aproveitar os seus recursos.

Veja os Destaques e novidades do SUPER CD VB 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# 2013 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Pegue o projeto completo aqui:  Science_Demo.zip

Rom 13:7 Dai a cada um o que lhe é devido: a quem tributo, tributo; a quem imposto, imposto; a quem temor, temor; a quem honra, honra.

Rom 13:8 A ninguém devais coisa alguma, senão o amor recíproco; pois quem ama ao próximo tem cumprido a lei.

        Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti