Originariamente inviato da MItaly
Non capisco dove sta il problema, perché non ti limiti semplicemente a sommare -bv/m all'accelerazione al momento di integrare con Eulero? La v già ce la dovresti avere, se, come dovresti fare, stai riducendo il sistema di equazioni differenziali del second'ordine ad uno vettoriale al prim'ordine come spiegato
qui...
Perché ridurlo a uno di primo ordine? Rimane piuttosto facile risolvere quello di secondo ordine. Solo che non conosco le relazioni per \theta'' e \phi''. Ho infatti aggiunto la forza di attrito con la velocità espressa in coordinate sferiche e chiaramente, tendo conto del fatto che R=cste., si ottiene che l'attrito agisce solamente nelle componenti theta e phi (ovvio). Poi però non so come comportarmi con la somma delle forze esterne... Se le proietto in coordinate sferiche sono a posto?
Posto il codice C++ del pendolo piano e dell'integratore per fare chiarezza, anche se siamo in OT: il discorso non riguarda il codice ma la situazione fisica in generale! ; ).
codice:
#ifndef PENDOLOPIANO_H
#define PENDOLOPIANO_H
#include "Pendolo.h"
class PendoloPiano : public Pendolo
{
public:
// --- COSTRUTTORI ---
PendoloPiano(const Vettore&, const Vettore&, double, double, const Vettore&, const Vettore&, const Vettore&, double, double, double = 1, double = 1);
PendoloPiano(const vector&, const vector&, double, double, const vector&, const vector&, const vector&, double, double, double = 1, double = 1);
PendoloPiano(const list&, const list&, double, double, const list&, const list&, const list&, double, double, double = 1, double = 1);
// --- METODI ---
Vettore evoluzione() const;
Vettore get_posizione() const;
Vettore get_velocita() const;
};
#endif
codice:
#include "PendoloPiano.h"
#include <cmath>
// *** PUBLIC ***
// --- COSTRUTTORI ---
PendoloPiano::PendoloPiano(const Vettore& p, const Vettore& v, double r, double m, const Vettore& f, const Vettore& O, const Vettore& d, double L, double b, double a, double mu)
: Pendolo(p,v,r,m,f,O,d,L,b,a,mu)
{}
PendoloPiano::PendoloPiano(const vector& p, const vector& v, double r, double m, const vector& f, const vector& O, const vector& d, double L, double b, double a, double mu)
: Pendolo(p,v,r,m,f,O,d,L,b,a,mu)
{}
PendoloPiano::PendoloPiano(const list& p, const list& v, double r, double m, const list& f, const list& O, const list& d, double L, double b, double a, double mu)
: Pendolo(p,v,r,m,f,O,d,L,b,a,mu)
{}
// --- METODI ---
Vettore PendoloPiano::evoluzione() const
{
Vettore g({0,0,-1});
Vettore r({ (1 / (massa * lunghezza)) *
( std::cos(omega[0]) * forza * direzione
- std::sin(omega[0]) * forza * g
- (b / lunghezza) * omega_[0]) });
return r;
}
Vettore PendoloPiano::get_posizione() const
{
Vettore g({0,0,-1});
return origine + lunghezza * std::cos(omega[0]) * g + lunghezza * std::sin(omega[0]) * direzione;
}
Vettore PendoloPiano::get_velocita() const
{
Vettore g({0,0,-1});
return lunghezza * omega_[0] * ( std::cos(omega[0]) * direzione - std::sin(omega[0]) * g );
}
codice:
#include "IntegratoreEulero.h"
// *** PUBLIC ***
// --- COSTRUTTORI ---
IntegratoreEulero::IntegratoreEulero(double t)
: Integratore(t)
{}
// --- METODI ---
void IntegratoreEulero::integra(OggettoMobile& OM) const
{
OM.set_omega_( OM.get_omega_() + dt * OM.evoluzione() );
OM.set_omega( OM.get_omega() + dt * OM.get_omega_() );
}
Il metodo evoluzione() ritorna un Vettore ad un unica componente contenente l'accelerazione angolare dell'angolo del pendolo piano (suo unico grado di libertà), e l'integratore utilizza questa funzione per calcolare poi la velocità angolare e l'angolo. EDIT: Il pendolo piano eredita da Pendolo che eredita da OggettoMobile. omega é il Vettore contenente i gradi di libertà dell'OggettoMobile, mentre il vettore omega_ é contiene la derivata prima di questi gradi di libertà.
Quello che mi serve é capire, fisicamente, come é esattamente il metodo evoluzione(), in pratica quali sono le espressioni delle accelerazioni angolare dei due angoli del pendolo sferico (suoi gradi di libertà). Su internet li ho trovati ma spesso non c'é l'attrito (che voglio far apparire esplicitamente in modo da dover specificare solo b) e spesso l'unica forza applicata é quella di gravità, quindi nelle equazioni appare la costante g e non il vettore (o la sua proiezione) della somma di forze applicate al pendolo...