Технічна довідка та формули

Повна математична реалізація

Посібник із впровадження

Ця сторінка містить формули копіювання та вставлення та покрокові методи розрахунку для всіх Run Аналітичні показники. Використовуйте їх для індивідуальних реалізацій, перевірки або глибшого розуміння.

⚠️ Примітки щодо впровадження

  • Для розрахунків усі часи слід конвертувати в секунди
  • У розрахунку rTSS використовується коефіцієнт інтенсивності в квадраті (IF²)
  • Завжди перевіряйте вхідні дані для прийнятних діапазонів
  • Обробка граничних випадків (ділення на нуль, від’ємні значення)

Основні показники ефективності

Критична швидкість бігу (CRS)

формула:

CRS (м/с) = (D₂ - D₁) / (T₂ - T₁)
Темп CRS (хв/км) = 16,667 / CRS (м/с)

🧪 Інтерактивний калькулятор - перевірте формулу

CRS Темп (хв/км):
4:17
Етапи розрахунку:
CRS (м/с) = (3600 - 1200) / (900 - 270) = 3,81 м/с
Темп (хв/км) = 1000 / 3,81 = 262 секунди = 4:22

Реалізація JavaScript:

function calculateCRS(distance1, time1, distance2, time2) {
  // Convert times to seconds
  const t1 = typeof time1 === 'string' ? timeToSeconds(time1) : time1;
  const t2 = typeof time2 === 'string' ? timeToSeconds(time2) : time2;

  // Calculate CRS velocity in m/s
  const crs_ms = (distance2 - distance1) / (t2 - t1);

  // Calculate pace per km in seconds
  const pace_per_km = 1000 / crs_ms;

  // Convert to mm:ss format
  const minutes = Math.floor(pace_per_km / 60);
  const seconds = Math.round(pace_per_km % 60);

  return {
    velocity_ms: crs_ms,
    pace_seconds: pace_per_km,
    pace_formatted: `${minutes}:${seconds.toString().padStart(2, '0')}`
  };
}

Оцінка бігового стресу (rTSS)

Повна формула:

rTSS = (IF²) × Тривалість (годин) × 100
IF = NSS / Порогова швидкість
NSS = Загальна відстань / Загальний час (м/хв)

🧪 Інтерактивний калькулятор - перевірте формулу

Розрахований rTSS:
31
Етапи розрахунку:
NSS = 5000 м / 25 хв = 200 м / хв
FTP = 1000 / (255/60) = 235,3 м/хв
IF = 200 / 235,3 = 0,850
rTSS = 0,850² × (25/60) × 100 = 31

Реалізація JavaScript:

function calculateRTSS(distance, timeMinutes, ftpMetersPerMin) {
  // Calculate Normalized Run Speed
  const nss = distance / timeMinutes;

  // Calculate Intensity Factor
  const intensityFactor = nss / ftpMetersPerMin;

  // Calculate hours
  const hours = timeMinutes / 60;

  // Calculate rTSS using quadratic intensity factor
  const rtss = Math.pow(intensityFactor, 2) * hours * 100;

  return Math.round(rtss);
}

// Example usage:
const rtss = calculateRTSS(3000, 55, 64.5);
// Returns: 65

// Helper: Convert CRS Pace to Running Speed (m/min)
function crsPaceToSpeed(crsPacePerKmSeconds) {
  // Speed in m/min = 1000m / (pace in minutes)
  return 1000 / (crsPacePerKmSeconds / 60);
}

// Example: CRS of 4:15 (255 seconds)
const speed = crsPaceToSpeed(255); // Returns: 235.3 m/min

Біомеханічна ефективність: вертикальне співвідношення

формула:

Вертикальне співвідношення (%) = (Вертикальні коливання ÷ Довжина кроку) × 100

🧪 Інтерактивний калькулятор - перевірте формулу

Вертикальне співвідношення:
7,4%
Розрахунок:
Вертикальне співвідношення = (8,5 / 115) × 100 = 7,4%

Реалізація JavaScript:

function calculateVerticalRatio(oscillationCm, strideLengthCm) {
  return (oscillationCm / strideLengthCm) * 100;
}

function calculateEfficiencyFactor(paceMetersPerMin, avgHeartRate) {
  return paceMetersPerMin / avgHeartRate;
}

Механіка бігу

Швидкість кроку (SR)

формула:

SR = 60 / Час циклу (секунди)
SR = (кількість кроків / час у секундах) × 60

🧪 Інтерактивний калькулятор - перевірте формулу

Каденція (SPM):
180
Розрахунок:
Каденція = (180 / 60) × 60 = 180 SPM

Реалізація JavaScript:

function calculateCadence(stepCount, timeSeconds) {
  return (stepCount / timeSeconds) * 60;
}

// Example:
const spm = calculateCadence(180, 60);
// Returns: 180 SPM

Довжина кроку

формула:

Довжина кроку = відстань / (кількість кроків / 2)
Довжина кроку = швидкість / (каденція / 120)

Реалізація JavaScript:

function calculateStrideLength(distanceMeters, stepCount) {
  // Stride length is distance / number of stride pairs (left+right)
  return distanceMeters / (stepCount / 2);
}

// Example (1000m, 800 steps):
const strideLength = calculateStrideLength(1000, 800);
// Returns: 2.50 meters per stride

Швидкість від SR і DPS

формула:

Швидкість (м/с) = (SR / 60) × DPS

Реалізація JavaScript:

function calculateVelocity(strideRate, dps) {
  return (strideRate / 60) * dps;
}

// Example:
const velocity = calculateVelocity(70, 1.6);
// Returns: 1.87 m/s

Індекс кроку (SI)

формула:

SI = Швидкість (м/с) × DPS (м/крок)

Реалізація JavaScript:

function calculateStrideIndex(velocity, dps) {
  return velocity * dps;
}

// Example:
const si = calculateStrideIndex(1.5, 1.7);
// Returns: 2.55

Діаграма управління продуктивністю (PMC) для бігу

Обчислення CTL, ATL, TSB

Формули:

CTL сьогодні = CTL вчора + (TSS сьогодні - CTL вчора) × (1/42)
ATL сьогодні = ATL вчора + (TSS сьогодні - ATL вчора) × (1/7)
TSB = CTL вчора - ATL вчора

Реалізація JavaScript:

function updateCTL(previousCTL, todayTSS) {
  return previousCTL + (todayTSS - previousCTL) * (1/42);
}

function updateATL(previousATL, todayTSS) {
  return previousATL + (todayTSS - previousATL) * (1/7);
}

function calculateTSB(yesterdayCTL, yesterdayATL) {
  return yesterdayCTL - yesterdayATL;
}

// Calculate PMC for series of workouts
function calculatePMC(workouts) {
  let ctl = 0, atl = 0;
  const results = [];

  workouts.forEach(workout => {
    ctl = updateCTL(ctl, workout.tss);
    atl = updateATL(atl, workout.tss);
    const tsb = calculateTSB(ctl, atl);

    results.push({
      date: workout.date,
      tss: workout.tss,
      ctl: Math.round(ctl * 10) / 10,
      atl: Math.round(atl * 10) / 10,
      tsb: Math.round(tsb * 10) / 10
    });
  });

  return results;
}

// Example usage:
const workouts = [
  { date: '2025-01-01', tss: 50 },
  { date: '2025-01-02', tss: 60 },
  { date: '2025-01-03', tss: 45 },
  // ... more workouts
];

const pmc = calculatePMC(workouts);
// Returns array with CTL, ATL, TSB for each day

Розширені розрахунки

CRS від кількох відстаней (метод регресії)

Реалізація JavaScript:

function calculateCRSRegression(distances, times) {
  // Linear regression: distance = a + b*time
  const n = distances.length;
  const sumX = times.reduce((a, b) => a + b, 0);
  const sumY = distances.reduce((a, b) => a + b, 0);
  const sumXY = times.reduce((sum, x, i) => sum + x * distances[i], 0);
  const sumXX = times.reduce((sum, x) => sum + x * x, 0);

  const slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);
  const intercept = (sumY - slope * sumX) / n;

  return {
    crs: slope, // Critical running velocity (m/s)
    anaerobic_capacity: intercept // Anaerobic distance capacity (m)
  };
}

// Example with multiple test distances:
const distances = [100, 200, 400, 800];
const times = [65, 150, 340, 720]; // in seconds
const result = calculateCRSRegression(distances, times);
// Returns: { crs: 1.18, anaerobic_capacity: 15.3 }

Фактор інтенсивності від Pace

Реалізація JavaScript:

function calculateIntensityFactor(actualPaceMinKm, thresholdPaceMinKm) {
  // Convert pace strings "mm:ss" to seconds if necessary
  const actualSecs = typeof actualPaceMinKm === 'string' ? timeToSeconds(actualPaceMinKm) : actualPaceMinKm;
  const thresholdSecs = typeof thresholdPaceMinKm === 'string' ? timeToSeconds(thresholdPaceMinKm) : thresholdPaceMinKm;

  // IF is Threshold Pace / Actual Pace (faster pace = smaller seconds value)
  return thresholdSecs / actualSecs;
}

// Example:
const if_value = calculateIntensityFactor("4:45", "4:15");
// Returns: 0.895 (running at 89.5% of threshold)

Аналіз узгодженості темпу

Реалізація JavaScript:

function analyzePaceConsistency(segments) {
  const paces = segments.map(kilometer => kilometer.distance / kilometer.time);
  const avgPace = paces.reduce((a, b) => a + b) / paces.length;

  const variance = paces.reduce((sum, pace) =>
    sum + Math.pow(pace - avgPace, 2), 0) / paces.length;
  const stdDev = Math.sqrt(variance);
  const coefficientOfVariation = (stdDev / avgPace) * 100;

  return {
    avgPace,
    stdDev,
    coefficientOfVariation,
    consistency: coefficientOfVariation < 5 ? "Excellent" :
                 coefficientOfVariation < 10 ? "Good" :
                 coefficientOfVariation < 15 ? "Moderate" : "Variable"
  };
}

// Example:
const segments = [
  { distance: 100, time: 70 },
  { distance: 100, time: 72 },
  { distance: 100, time: 71 },
  // ...
];
const analysis = analyzePaceConsistency(segments);
// Returns: { avgPace: 1.41, stdDev: 0.02, coefficientOfVariation: 1.4, consistency: "Excellent" }

Виявлення втоми за допомогою Stride Efficiency

Реалізація JavaScript:

function detectFatigue(segments) {
  // Compare Vertical Ratio of first and last segments
  const firstSegment = segments[0];
  const lastSegment = segments[segments.length - 1];

  const ratioIncrease = lastSegment.verticalRatio - firstSegment.verticalRatio;

  return {
    startRatio: firstSegment.verticalRatio,
    endRatio: lastSegment.verticalRatio,
    increase: Math.round(ratioIncrease * 10) / 10,
    fatigueLevel: ratioIncrease < 0.2 ? "Minimal" :
                  ratioIncrease < 0.5 ? "Moderate" :
                  ratioIncrease < 1.0 ? "Significant" : "Severe"
  };
}

// Example:
const segments = [
  { verticalRatio: 7.2 }, { verticalRatio: 7.3 }, { verticalRatio: 8.1 }
];
const fatigue = detectFatigue(segments);
// Returns: { startRatio: 7.2, endRatio: 8.1, increase: 0.9, fatigueLevel: "Significant" }

Перевірка даних

Перевірка якості даних тренування

Реалізація JavaScript:

function validateWorkoutData(workout) {
  const issues = [];

  // Check for reasonable pace ranges (3:00-8:00 per km)
  const avgPaceSecs = workout.totalTime / (workout.totalDistance / 1000);
  if (avgPaceSecs < 180 || avgPaceSecs > 480) {
    issues.push(`Unusual average pace: ${Math.round(avgPaceSecs)}s per km`);
  }

  // Check for reasonable Vertical Ratio (4% - 15%)
  if (workout.avgVerticalRatio < 4 || workout.avgVerticalRatio > 15) {
    issues.push(`Unusual Vertical Ratio: ${workout.avgVerticalRatio}%`);
  }

  // Check for reasonable cadence (120-220 SPM)
  const avgCadence = calculateCadence(workout.totalSteps, workout.totalTime);
  if (avgCadence < 120 || avgCadence > 220) {
    issues.push(`Unusual cadence: ${Math.round(avgCadence)} SPM`);
  }

  // Check for missing segments (gaps in time)
  if (workout.segments && workout.segments.length > 1) {
    for (let i = 1; i < workout.segments.length; i++) {
      const gap = workout.segments[i].startTime -
                  (workout.segments[i-1].startTime + workout.segments[i-1].duration);
      if (gap > 300) { // 5 minute gap
        issues.push(`Large gap detected between segments ${i} and ${i+1}`);
      }
    }
  }

  return {
    isValid: issues.length === 0,
    issues
  };
}

// Example:
const workout = {
  totalDistance: 2000,
  totalTime: 1800, // 30 minutes
  totalStrides: 800,
  segments: [/* kilometer data */]
};
const validation = validateWorkoutData(workout);
// Returns: { isValid: true, issues: [] }

Допоміжні функції

Утиліти для перетворення часу

Реалізація JavaScript:

// Convert mm:ss to seconds
function timeToSeconds(timeString) {
  const parts = timeString.split(':');
  return parseInt(parts[0]) * 60 + parseInt(parts[1]);
}

// Convert seconds to mm:ss
function secondsToTime(seconds) {
  const minutes = Math.floor(seconds / 60);
  const secs = Math.round(seconds % 60);
  return `${minutes}:${secs.toString().padStart(2, '0')}`;
}

// Convert seconds to hh:mm:ss
function secondsToTimeDetailed(seconds) {
  const hours = Math.floor(seconds / 3600);
  const minutes = Math.floor((seconds % 3600) / 60);
  const secs = Math.round(seconds % 60);
  return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}

// Examples:
timeToSeconds("1:33"); // Returns: 93
secondsToTime(93); // Returns: "1:33"
secondsToTimeDetailed(3665); // Returns: "1:01:05"

Ресурси впровадження

Усі формули на цій сторінці готові до виробництва та перевірені відповідно до наукової літератури. використання їх для користувальницьких інструментів аналітики, перевірки або глибшого розуміння виконання обчислень продуктивності.

💡 Найкращі практики

  • Перевірити введені дані:Перед обчисленням перевірте розумні діапазони
  • Обробка крайових випадків:Ділення на нуль, від’ємні значення, нульові дані
  • Округліть відповідно:CTL/ATL/TSB до 1 десяткового дробу, rTSS до цілого числа
  • Точність зберігання:Зберігайте повну точність у базі даних, круглі для відображення
  • Ретельно протестуйте:Використовуйте завідомо справні дані для перевірки розрахунків

Expertly Reviewed by

This content has been written and reviewed by a sports data metrics expert to ensure technical accuracy and adherence to the latest sports science methodologies.

Формулы Производительности в Плавании: Расчёты CRS, TSS,

Полные математические формулы для аналитики плавания. Узнайте, как вручную рассчитать CRS, rTSS, CTL, ATL, TSB. Включает решённые примеры, выводы и.

  • 2026-03-24
  • формулы плавания · расчёт CRS · формула TSS · математика тренировок · расчёты производительности
  • Бібліографія