Corpos celestes

Neste arquivo iremos colocar os problemas já resolvidos (não são problemas "mortos" porque a discussão pode continuar a qualquer altura!)

Mensagempor vbmaster em Segunda Nov 27, 2006 9:43 pm

Bah, ainda não tenho uma fórmula palpável em que me possa apoiar para fazer o programa.

Estou a considerar um corpo com a massa da terra somada à do sol que viaja com aceleração igual à soma das duas dos dois planetas, a percorrer uma distância L igual a 1,5 * 10 ^11 metros.

But, se vou fazer segmentos de 1 metro até L chegar a zero, nunca mais saio dali (daí o meu comentário). O próprio programa do gama demora bastante para altitudes elevadas.

Deve haver aqui outra fórmula qualquer que não estamos a ver...
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor pmp em Terça Nov 28, 2006 9:04 am

Bom dia!

Ontem, à noite, cheguei a nova solução:

t= \sqrt{\frac{\pi ^2 L^3}{8G(m_1+m_2)}}}

E, de facto, dá a resposta correcta ao desafio do professor. Agora não cheguei lá pelo método mais ortodoxo, fiz algumas aproximações que ainda estou a tentar perceber a sua validade. Depois, se tiver certo, explico melhor. :D
Avatar do utilizador
pmp
down-Quark!
down-Quark!
 
Mensagens: 232
Registado: Segunda Nov 13, 2006 3:35 pm
Localização: Ponta Delgada/ Porto

Mensagempor jap em Terça Nov 28, 2006 2:10 pm

pmp Escreveu:Bom dia!

Ontem, à noite, cheguei a nova solução:

t= \sqrt{\frac{\pi ^2 L^3}{8G(m_1+m_2)}}}

E, de facto, dá a resposta correcta ao desafio do professor. Agora não cheguei lá pelo método mais ortodoxo, fiz algumas aproximações que ainda estou a tentar perceber a sua validade. Depois, se tiver certo, explico melhor. :D


A expressão está quase certa, mas só quase... :roll:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor vbmaster em Terça Nov 28, 2006 2:33 pm

jap Escreveu:
pmp Escreveu:Bom dia!

Ontem, à noite, cheguei a nova solução:

t= \sqrt{\frac{\pi ^2 L^3}{8G(m_1+m_2)}}}

E, de facto, dá a resposta correcta ao desafio do professor. Agora não cheguei lá pelo método mais ortodoxo, fiz algumas aproximações que ainda estou a tentar perceber a sua validade. Depois, se tiver certo, explico melhor. :D


A expressão está quase certa, mas só quase... :roll:


Essa a maneira era a tal ideia de ontem de o tempo poder ser dado por MHS, right?
E considera os segmentos de um metro?
Epah, devo estar com a cabeça toda atrofiada para ainda não ter feito um algoritmo disto... mas é que desocntar segmentos de um metro a 1,5 * 10 ^11 é puxado e demora eternidades a calcular... ou é suposto apenas resolvermos a fórmula no algoritmo?
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor jap em Terça Nov 28, 2006 2:38 pm

vbmaster Escreveu:
jap Escreveu:
pmp Escreveu:Bom dia!

(...)
E considera os segmentos de um metro?
Epah, devo estar com a cabeça toda atrofiada para ainda não ter feito um algoritmo disto... mas é que desocntar segmentos de um metro a 1,5 * 10 ^11 é puxado e demora eternidades a calcular... ou é suposto apenas resolvermos a fórmula no algoritmo?

Cá por mim, discretizava o tempo em vez do espaço, e escolhia um intervalo de tempo razoável, à escala "cósmica"...
Aliás, talvez fosse bom resolver este problema em unidades astronómicas, ou algo do género...muito fácil...e o programazito corre num instante.
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor vbmaster em Quarta Nov 29, 2006 12:03 am

Arghhhh, só me apetece é dizer asneiras!

Depois de um dia atribulado a pensar nesta porcaria, fazer um código a dar valores estúpidos (o pmp que o diga), desistir para ir fazer uma apresentação em PowerPoint para física, voltei ao meu código, imaginei melhor a coisa... e pronto! ALELUIA, código a funcionar.

Não fiz em scheme porque para a altura de desenvolvimento mental do algoritmo em que estava entendo melhor o código em c++, mas em breve faço a versão em scheme.

Código: Seleccionar Todos
#include <iostream>
#include <math.h>
using namespace std;

const double mt = 5.98e+24;
const double ms = 1.99e+30;
const double g = 6.67e-11;

double aceleraçao (double x)
{
   return ((g * (ms + mt)) / pow(x,2));
}

double abc (double a, double b, double c)
{
   // Resolve a equação quadrática
   double delta = sqrt(pow(b,2) - 4 * a * c);
   return ((-b - delta) / (2 * a));
}

int main ()
{

   double L = 1.5e+11; // L = distância terra-sol
   double tempo = 0;
   double v0 = 0; //velocidadezero
   double soma = 0;

   for (L; L > 0; L -= 10000)
   {
      tempo = abc((-aceleraçao(L) / 2), -v0 , 10000);
      v0 += (aceleraçao(L) * tempo);
      soma += tempo;
   }

   cout << soma;

   return 0;
}


Resultado obtido, com esta precisão de segmentos de 10 000 metros: 5,60082*10^6 = 64 dias, 19 horas e 47 minutos.

Pronto!


P.S.:: Professor, não se arranja aí um módulo para phpbb que faça syntax highlight aos códigos?... fica sempre muito leet... :P
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor jap em Quarta Nov 29, 2006 1:47 am

Miguel,
Obrigado pelo teu código com a simulação! :D

Tenho alguns comentários:

1) Podes explicar porque é que somaste a massa da Terra à do Sol na expressão da aceleração gravítica? Não é que isto faça grande diferença, pois a massa da Terra é insignificante comparada com a do Sol..,

2) Usar unidades SI num programa deste género é como tentar descascar ervilhas com luvas, pouco prático. :wink: Além de que números muito grandes ou muito pequenos podem trazer problemas em programas de simulação, devido à deficuldade que os computadores têm em lidar com estes números, com precisão, embora neste programa isso não seja assim tão importante.

2) O algoritmo que usaste é desnecessariamente complicado (mas funciona, que é o mais importante :lol: ). Num intervalo de tempo suficientemente pequeno, podes fazer, sem grande erro, dv = adt, dr = vdt, e assumir que, no pequeno intervalo dt, a e v são constantes...

Repara na minha versão em Python, estupidamente simples:

http://algol.fis.uc.pt/forum/sun.py

Mais uma vez, obrigado pelo tempo que gastaste a programar a simulação! :D
última vez editado por jap s Quinta Jun 14, 2007 11:35 pm, editado 2 vezes no total
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor vbmaster em Quarta Nov 29, 2006 6:24 pm

jap Escreveu:
1) Podes explicar porque é que somaste a massa da Terra à do Sol na expressão da aceleração gravítica? Não é que isto faça grande diferença, pois a massa da Terra é insignificante comparada com a do Sol..,



Bem, a linha de pensamento não foi propriamente minha, mas é mais ou menos assim:

Temos a terra na extremida de uma estrada, de comprimento L (distância terra ao sol), e na outra extremidade o sol. Começamos a contar o tempo e a terra começa-se a aproximar do sol, mas o sol ligeiramente também se aproxima da terra, o que poderia levar a resultados errados se só considerasse a terra a aproximar-se do sol. Como tal,

Pensei no seguinte, uma particula material na extremidade da estrada, que se mova com a aceleraçao da terra mais a do sol, contando o tempo até acabar de percorrer a estrada. Assim evita-se o problema de o sol proventura mover-se na direcção da terra.

Entretano esqueci-me no meu código que não é ate essa particula completar a estrada, mas sim até a particular percorrer a estrada menos o valor do raio do sol.... porque assim só estou a parar os tempos quando atingimos efectivamente o centro do sol, e isso não seria necessário para já termos evaporados todos.

Se bem que se falamos em danos para a natureza, bastava irmos para o pé de venus e já estaríamos bem mal... :P
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor jap em Quarta Nov 29, 2006 9:38 pm

vbmaster Escreveu:
jap Escreveu:

Bem, a linha de pensamento não foi propriamente minha, mas é mais ou menos assim:

Temos a terra na extremida de uma estrada, de comprimento L (distância terra ao sol), e na outra extremidade o sol. Começamos a contar o tempo e a terra começa-se a aproximar do sol, mas o sol ligeiramente também se aproxima da terra, o que poderia levar a resultados errados se só considerasse a terra a aproximar-se do sol. Como tal,

Pensei no seguinte, uma particula material na extremidade da estrada, que se mova com a aceleraçao da terra mais a do sol, contando o tempo até acabar de percorrer a estrada. Assim evita-se o problema de o sol proventura mover-se na direcção da terra.

(...) :P


Deixa-me esclarecer este ponto. É muito simples.

Sejam \vec r_t e \vec  r_s os vectores posição da terra e do sol, num dado sistema de referência.
A segunda lei de Newton diz-nos que

\frac{d^2 \vec r_t}{dt^2}= \frac{1}{m_t}\vec{F_t}
e

\frac{d^2 \vec r_s}{dt^2}= \frac{1}{m_s}\vec{F_s}

Subtraindo membro a membro estas duas equações, vem que

\frac{d^2 (\vec r_s-\vec r_t)}{dt^2}= \left(\frac{\vec F_t}{m_t}-\frac{\vec F_s}{m_s}\right)

Ora, da terceira lei de Newton, \vec{F_t} = - \vec{F_s}. pelo que, se definirmos a posição da terra em relação ao sol pelo vector \vec r = \vec r_t-\vec r_s, vem

\frac{d^2 \vec r}{dt^2}= \frac{1}{\mu}\vec{F_t},

onde \mu = \frac{m_sm_t}{m_s+m_t}. Chama-se a esta massa \mu, a massa reduzida :shock: do sistema sol-terra.

Ora então, em termos da posição xda terra em relação ao sol,

\frac{d^2 x}{dt^2}=  -\left(\frac{m_s+m_t}{m_sm_t}\right)G\frac{m_tm_s}{x^2},
ou ainda, e finalmente,


\frac{d^2 x}{dt^2}=  -G\frac{m_s+m_t}{x^2},


QED. :D

Repara que se os primeiros passos são gerais, e não dependem da forma da lei da força, este último só é válido para a força gravítica...
Mas neste caso, fazer m_s+m_t \sim m_s introduz apenas um erro insignificante... 8)

O conceito de massa reduzida de um sistema de duas partículas é muito útil em todos os contextos em que temos duas partículas em interacção mútua...
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor vbmaster em Quinta Nov 30, 2006 12:40 am

Estes dias não têm dado para mais, como tal fica aqui a versão scheme ainda com o mesmo algoritmo... amanhã já devo ter tempo para analisar a proposta do professor.

Esta niva versão basicamente é bastante mais lenta, mas permite obter um resultado mais preciso (dentro das fórmulas física utilizadas, é claro).

(não tentem compreender isto)

Código: Seleccionar Todos
(define (aceleraçao distancia)
  (/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt distancia 2)))
(define (abc a b c)
  (define (delta a b c)
    (sqrt (+ (* b b) (* (- 4) a c))))
    (/ (+ (- b) (- (delta a b c))) (* 2 a)))
(define (main L soma v0)
  (define (auxiliar1 L soma v0 aceleraçaosistema)
    (auxiliar2 L soma v0 (abc (/ (- aceleraçaosistema) 2) (- v0) 1e+4) aceleraçaosistema))
  (define (auxiliar2 L soma v0 intervalo_tempo aceleraçaosistema)
    (main L (+ soma intervalo_tempo) (+ v0 (* aceleraçaosistema intervalo_tempo))))
  (if (< L (+ 6.96e+8 6.37e+6))
      soma
      (auxiliar1 (- L 1e+4) soma v0 (aceleraçao L))))
(define (problema)
  (main 1.5e+11 0 0))
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor jap em Quinta Nov 30, 2006 1:43 am

vbmaster Escreveu:(...)
Esta nova versão basicamente é bastante mais lenta, mas permite obter um resultado mais preciso (dentro das fórmulas física utilizadas, é claro).

(não tentem compreender isto)



Kids, you have been warned! :twisted:

Apesar de, tecnicamente, este programa não ter side-effects, o miguel tem razão: os vossos neurónios podem ficar gravemente afectados :shock: ao tentarem decifrar este programa, a menos que gostem de brincar às funções puras (masoquistas!) ou que façam cálculo mental em RPN! :lol:

Bravo Miguel!! :D

Por mim, já estás dispensado à disciplina de C&P!!
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Mensagempor Andre França em Quinta Nov 30, 2006 10:24 am

vbmaster Escreveu:Estes dias não têm dado para mais, como tal fica aqui a versão scheme ainda com o mesmo algoritmo... amanhã já devo ter tempo para analisar a proposta do professor.

Esta niva versão basicamente é bastante mais lenta, mas permite obter um resultado mais preciso (dentro das fórmulas física utilizadas, é claro).

(não tentem compreender isto)

Código: Seleccionar Todos
(define (aceleraçao distancia)
  (/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt distancia 2)))
(define (abc a b c)
  (define (delta a b c)
    (sqrt (+ (* b b) (* (- 4) a c))))
    (/ (+ (- b) (- (delta a b c))) (* 2 a)))
(define (main L soma v0)
  (define (auxiliar1 L soma v0 aceleraçaosistema)
    (auxiliar2 L soma v0 (abc (/ (- aceleraçaosistema) 2) (- v0) 1e+4) aceleraçaosistema))
  (define (auxiliar2 L soma v0 intervalo_tempo aceleraçaosistema)
    (main L (+ soma intervalo_tempo) (+ v0 (* aceleraçaosistema intervalo_tempo))))
  (if (< L (+ 6.96e+8 6.37e+6))
      soma
      (auxiliar1 (- L 1e+4) soma v0 (aceleraçao L))))
(define (problema)
  (main 1.5e+11 0 0))



Ah :D Ja' agora, nao sei se te interessa ou se ja ouviste falar, mas existem umas olimpiadas de informatica (Pascal, C, C++): http://ctp.di.fct.unl.pt/ONI/
No ano passado um dos nossos olimpicos de fisica (Rui Barbosa) ficou em 2º nas nacionais, foi ao mexico nas internacionais e ainda ganhou uma prata (foi uma prata, gama?) nas ibero-americanas.
IPhO 2006 - Singapura.
Avatar do utilizador
Andre França
down-Quark!
down-Quark!
 
Mensagens: 100
Registado: Domingo Nov 12, 2006 11:10 am
Localização: Lisboa (IST)

Mensagempor vbmaster em Quinta Nov 30, 2006 1:45 pm

Andre França Escreveu:
Ah :D Ja' agora, nao sei se te interessa ou se ja ouviste falar, mas existem umas olimpiadas de informatica (Pascal, C, C++): http://ctp.di.fct.unl.pt/ONI/
No ano passado um dos nossos olimpicos de fisica (Rui Barbosa) ficou em 2º nas nacionais, foi ao mexico nas internacionais e ainda ganhou uma prata (foi uma prata, gama?) nas ibero-americanas.


O Gama já me falou nisso e, por acaso, gostava de participar... tenho de ver se há alguma hipotese... já me disseram que não há problema de estar num curso científico.
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor vbmaster em Quinta Nov 30, 2006 5:27 pm

Após este contacto inicial com um algoritmo "chato" e ainda por cima lento, decidi, agora que tenho mais tempo livre, seguir a sugestão do professor, e criei um algoritmo que calcula o mesmo valor em segmentos de tempo, e não de espaço, adicionando as restantes sugestões do professor (menos as UA).

O resultado é de menor precisão, e o tempo que demora a calcular ainda pode ser melhorado lá com as modificações para UA que ainda não percebi bem no código do professor. Por exemplo, porquê a massa do sol com valor 1, e a constante de gravitaçao universal com o valor 1 também?

De qualquer maneira, e mais uma vez, aqui fica o código com precisão de segmentos de 10 segundos, para ser mais rápido... :?

Código: Seleccionar Todos
(define (main L v dt ttotal)
  (define (velocidade L v dt ttotal)
    (define (aceleraçao L)
      (/ (* 6.67e-11 (+ 1.99e30 5.98e24)) (expt L 2)))
    (posiçao L (- v (* (- (aceleraçao L)) dt)) dt ttotal))
  (define (posiçao L v dt ttotal)
    (main (- L (* v dt)) v dt (+ ttotal dt))) 
  (if (< L 6.96e+8)
      ttotal
      (velocidade L v dt ttotal)))
(define (problema)
  (main 1.5e+11 0 10 0))


Para quem quiser testar tem de sacar o Dr Scheme, para correr a função é só pôr no interpretador (problema), o tempo que demora é de aproximadamente:

> (time (problema))
cpu time: 4160 real time: 4417 gc time: 1770
(portanto, 4 segundos e pouco)
Avatar do utilizador
vbmaster
up-Quark!
up-Quark!
 
Mensagens: 464
Registado: Quarta Nov 15, 2006 11:49 pm
Localização: Peniche

Mensagempor jap em Quinta Nov 30, 2006 5:52 pm

Caro Miguel,

Vou explicar porque é que se pode fazer G=1, e Msun=1 na expressão da aceleração gravitacional provocada pelo Sol, ou seja, porque podemos fazer

a = -\frac{1}{r^2}.

Repara:

se fixarmos uma dada unidade para a massa (por exemplo 1 kg), para o comprimento (por exemplo 1 m) e para o tempo (por exemplo 1 s), a constante gravitacional tem um valor bem definido, que, nestas unidades é

G = 6,67\rm \times 10^{-11}

Porém, podemos escolher, arbitrariamente, unidades diferentes para estas grandezas, e o valor de G virá, naturalmente, outro. Dito de outra forma: as unidades de tempo, espaço, massa e a constante de gravitação não são independentes: escolhendo valores para três deles, o quarto vem definido pela experiência!

Assim, podemos escolher, à nossa vontade :shock: , um sistema de unidades em que:

G =1
Msun=1
Distância Terra-Sol = 1 (esta é a chamada unidade astronómica)

mas, neste caso, a unidade de tempo já não a posso escolher - vem definida pela experiência.

Ora que unidade é essa? O período da Terra em volta do Sol, usando este sistema de unidades, tem o valor de 2\pi (verifica!). Então a unidade de tempo é tal que
365 dias = 2pi unidades de tempo. Daí, eu converto o tempo para dias, no meu programa, multiplicando por 365/(2\pi)!

Deu para perceber? :roll:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6801
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

AnteriorPróximo

Voltar para Problemas resolvidos

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 0 visitantes

cron