Olen työskennellyt tämän parissa hieman enemmän, joten taidan kokeilla omaa kysymystäni. Tässä on taas limaconimme.

limacon $\gamma(t)$

Huomaa, mistä lähdemme liikkeelle: aikaparametrista $t$, joka kulkee yhtäläisin askelin intervalli $$:lla, kumulatiivisesta matkasta $s$, joka on kuljettu kaaren pituutta pitkin ajanhetkellä $t$, ja limaconin kartesiankoordinaatistosta $ \gamma$ ajanhetkellä $t$. Asetimme tämän paljon kysymyksessä. Haluamme sen sijaan kaaren pituusparametrin $s$, joka kulkee yhtäläisin askelin intervallilla $$, jossa $L$ on kaaren kokonaispituus, sekä ajan $t(s)$ ajankohtana $s$ ja kartesiokoordinaatit $\gamma (t(s))$.

Todella nopeasti, tehdään kumulatiivinen etäisyys $s$, joka on kuljettu kaaren pituutta pitkin, uudestaan numerolla derivative (Tiedostojenvaihtolinkki), ettemme menetä näytteitä.

x_t = derivative(x);y_t = derivative(y);s = cumtrapz( sqrt(x_t.^2 + y_t.^2 ) );

Käytämme Matlab-funktiota interp1 interpoloidaksemme aikapisteet $t(s_i)$ ja koordinaatit $\gamma (t(s_i))$, jotka vastaavat kaaren pituutta pitkin tasaisin väliajoin kulkevia askelia $s_i$. Näin ollen ilmoitamme interp1:n argumentit sen dokumentaatiossa annetuilla muuttujien nimillä. Vektori X on alkuperäinen $s_i$ eli kaaren pituutta pitkin kuljettu matka ajankohtana $t_i$. Matriisissa V on sarakevektoreita, joiden rivit ovat $t_i$ (alkuperäinen aikaparametrimme tasaisin askelin) ja koordinaatit $\gamma (t_i)$.

X = s.';V = ;

Meidän on interpoloitava löytääksemme aikapisteet $t(s_i)$, jotka vastaavat tasaisin väliajoin kulkevia kaaren pituuden askeleita pitkin kaarta. Nämä tasaisin välein olevat askeleet kulkevat arvosta $s_0=0$ arvoon $s_N=L$, missä $L$ on kaaren kokonaispituus.

L = s(end);s0 = s(1);N = length(s);Xq = linspace(s0,L,N); % equally spaced indices

Voidaan todentaa, että s(N) == sum(diff(Xq)), kuten pitääkin. Käytämme Matlabin interpolointifunktion interp1 moniulotteista kappalemittaista lineaarista interpolointimahdollisuutta löytääksemme interpoloidut arvot ajalle $t(s_i)$ ja koordinaateille $\gamma (t(s_i))$, jotka vastaavat kohdassa Xq annettuja $s_i$:n tasasuuruisia askelia.

Vq = interp1(X,V,Xq); 

Kutsu osoitteeseen diff(Xq) osoittaa, että liikumme vakiokaaren pituisin askelin pitkin $\gamma $, kun taas kutsu osoitteeseen diff(Vq) osoittaa, että aika-askeleet eivät enää ole yhtä suuria (ensimmäinen sarake). Näin ollen interpolointimme tulos on:

  • kaaren pituus $s_i$ vakioaskelein (Xq)
  • vastavat aikapisteet $t_i$, ei enää vakioaskeleina (Vq:n ensimmäinen sarake)
  • koordinaatit $\gamma(t(s))$ kaaren pituuden funktiona (Vq:n toinen ja kolmas sarake)

Siten kaaren pituuden parametrisointi limacon $\gamma(t(s))$ ilmaistaan kartesiankoordinaateissa xs ja ys.

xs = Vq(:,2);ys = Vq(:,3);

Nämä vektorit antavat pitkin $\gamma$ liikkuvan hiukkasen sijainnin $s$ funktiona, missä $s$ kasvaa 0.1058 askelin. Tässä on käyrän $\gamma $ kaksi parametrisointia, nimittäin $\gamma (t)$ sinisellä ja $\gamma (t(s))$ punaisella.

kaksi parametrisointia

Joudun tekemään hieman lisätyötä, jos haluan sallia jaksolliset ratkaisut, sillä nykyinen Matlab-skripti ei sitä yleensä tee. Nähdäksesi tämän voit katsoa viimeisen ja ensimmäisen näytteen välistä etäisyyttä $\gamma (t(s))$ punaisella yllä. Jos etenisimme vielä yhden askeleen 0.1058 yksikköä limakonia pitkin, emme laskeutuisi pisteeseen, jossa olemme jo käyneet, vaikka tiedämme, että limakoni on $2\pi$-periodinen. Mielestäni tämä tarkoittaa periaatteessa sitä, että valitsemme $s$:lle eri askelkoon kuin 0.1058.

.

Vastaa

Sähköpostiosoitettasi ei julkaista.