// Step the motor toward the target void myStepper::updateMotor() { // Are we allowed to move? if ( ! m_canMove ) return; // How many steps do we need to move? int steps = m_tgtPos - m_curPos; // None? Done! if ( steps == 0 ) { m_canMove = false; coilsOff(); return; } // Figure out which way we need to go... int dir; if ( steps < 1 ) dir = m_reverse?MC_DIR_FWD:MC_DIR_REV; else dir = m_reverse?MC_DIR_REV:MC_DIR_FWD; // Go!!! stepOnce(dir); }
double Rom::integrate_dumb(double a, double b, double eps){ // Trapezregel mit Romberg extrapol[0] = stepInit(); // = T[0,0] extrapol[1] = 1.0/0.0; // = infinity print(); // Ausgabe while( fabs(extrapol[0] - extrapol[1]) > 3 * eps ){ // Vergleich von T[index,0] und T[index-1,0] index ++; extrapol[1] = extrapol[0]; // Speichern von T[index-1,0] extrapol[0] = stepOnce(); // Berechnen und Speichern von T[index,0] print(); // Ausgabe } return extrapol[0]; }
double Rom::extrapolate(){ index ++; double tdiag[2]; // array aus 2 Stellen tdiag[0] = extrapol[0]; // Speichern von T[index-1,0] extrapol[0] = stepOnce(); // = T[index,0] for(int j = 1; j<=index; j++){ tdiag[j % 2] = extrapol[j]; // Speichern von T[index-1,j] an der im j-ten Schritt nicht zu // benutzenden Stelle fuer den (j+1)-ten Schritt double hpart = double(numparts(index))/numparts(index-j); // = h[i-k]/h[i] nach evtl. Abkuerzung extrapol[j] = extrapol[j-1] + (extrapol[j-1]-tdiag[(j-1)%2])/(hpart*hpart -1); } // Extrapolationsformel benutzen print(); //Ausgabe(index, extrapol) return fabs(extrapol[index]-extrapol[index-1]); // Differenz von T[i,i] und T[i,i-1] nehmen (Error abschaetzen) }