Ajuda com algoritmo, C++

1. Ajuda com algoritmo, C++

Franciele Mendes
francielemendes

(usa Outra)

Enviado em 01/11/2014 - 17:49h

Olá,

Preciso criar um algoritmo que calcule numericamente uma integral, mas estou fazendo algo muito errado, pois não estou chegando ao resultado desejado.

Quero integrar a função f(t) = v(t') dt', cujo intervalo de integração é (to, t).
Esta integral deveria resultar no deslocamento de projéteis (em metros) em água.

Os dados são os seguintes:

PROJÉTIL 1:
projétil de pistola .380 ACP, velocidade inicial v0 = 290 m/s e k = 6.12

PROJÉTIL 2:
projétil de fuzil M82, velocidade inicial v0 = 850 m/s e k = 0.66

A fórmula dada para a velocidade é:

v(t) = [k * t + (1/v0)]^-1

O problema diz o seguinte:
Encontre o tempo /\tv=0.001vo que transcorrerá entre a entrada do projétil na água e o instante em que a sua velocidade seja 0.1% da sua velocidade inicial.
Calculei isso manualmente e encontrei que:
Para v0 = 0.29, t = 0.56 s
Para v0 = 0.85, t = 1,78 s

Depois, a parte que preciso do algoritmo:
Faça um gráfico para cada projétil mostrando a distância percorrida até que sua velocidade seja 0.5% de sua velocidade inicial utilizando métodos de integração numérica. O intervalo de integração deve ser /\t = /\tv=0.001vo/200;

Então, tentei fazer o algoritmo, que me resulta em um valor absurdo:

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

double f (double t);

int main()
{
float N;
cout << "Entre com o valor de N: " << endl;
cin >> N;

float t1;
cout << "Entre com o valor de t1: " << endl;
cin >> t1;

float t2;
cout << "Entre com o valor de t2: " << endl;
cin >> t2;

float dt = (t2 - t1) / N;
float integral = 0;

int n;
for (n = 0; n < N; n++)
integral = integral + f(t1 + n * dt);
cout << "A integral é: " << integral;
}
double f(double t)
{
float k = 6.12;
float v = 290;
return 1 / ((k*t) + (1/v0));

}

O valor retornado deveria ser pequeno, no máximo 5 metros, pois os projéteis estão sendo utilizados na água e devido a pressão exercida sobre eles, em pouco tempo irão ser esmagados.

Bom pessoal, não tenho muita experiência em C++, espero a ajuda de vocês para saber o que devo fazer.
Obrigada.


  


2. Re: Ajuda com algoritmo, C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/11/2014 - 06:30h

Você quer obter um valor de posição. Assim sendo, sua integral deve ser um somatório de pequenos deslocamentos. Olhe, no entanto, o que você está fazendo: está somando valores de velocidades. Se você quer somar deslocamentos infinitesimais (na verdade, apenas muito pequenos, já que não dá para ter infinitesimal de verdade no computador) tem de multiplicar esses valores de velocidade instantânea por fatias infinitesimais de tempo, e depois somar tais produtos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts