---
title: "Galaxy rotation curves and mass models"
description: "Learn spherical and disk gravity, fit saved observations, and read a fixed comparison of feedback haloes and modified dynamics."
canonical_url: "https://sandboxphysics.com/stories/galaxy-rotation-curves/"
language: "en"
page_type: "story"
alternate_languages:
  zh-CN: "https://sandboxphysics.com/zh/stories/galaxy-rotation-curves/"
last_modified: "2026-11-05"
---

Galaxy rotation curves

# Galaxy rotation curves and mass models

Sandbox Physics · 2026-11-05

A circular orbit measures the inward force it needs. Start from that motion, distinguish a sphere from a disk, then calculate component forces and the geometry-dependent fit to saved observations.

1. L1

   ## [What a flat rotation curve measures](https://sandboxphysics.com/stories/galaxy-rotation-curves/what-a-flat-curve-measures/)

   A flat galaxy rotation curve measures the inward force needed for circular motion. Learn why a stellar disk and an extended halo can share that force.

2. L1

   ## [Why a disk and a sphere pull differently](https://sandboxphysics.com/stories/galaxy-rotation-curves/why-a-disk-is-not-a-sphere/)

   Derive spherical enclosed mass from circular motion, calculate a flat-speed example with units, and test the same mass-in-radius shortcut on a thin disk.

3. L2

   ## [Adding stellar, gas and halo gravity](https://sandboxphysics.com/stories/galaxy-rotation-curves/adding-starlight-gas-and-a-halo/)

   Add signed radial forces before taking a circular speed, derive NFW and cored halo masses, and distinguish the ideal thin disk from native thick-disk inputs.

4. L3

   ## [When distance and inclination move a whole curve](https://sandboxphysics.com/stories/galaxy-rotation-curves/moving-a-whole-rotation-curve/)

   Derive shared geometry changes, a fixed-coordinate Gaussian likelihood and conditional profiles, then calculate why common errors do not average away.

5. L3

   ## [Recompute a named SPARC galaxy from saved observations](https://sandboxphysics.com/stories/galaxy-rotation-curves/recomputing-a-named-sparc-galaxy/)

   Run saved-data fits, six starts, stellar-mass profiles and shared distance/inclination scenarios for own synthetic data and local NGC 2403 files.

6. L4

   ## [Reading feedback, halo and MOND comparisons](https://sandboxphysics.com/stories/galaxy-rotation-curves/reading-feedback-and-gravity-comparisons/)

   Read a fixed2026 paper through cusp–core profiles, geometry priors and stacked weak lensing, then calculate a simple orbit after a change of potential.

## Standalone scientific materials

[Download the scientific ZIP](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/galaxy-rotation-science-v1.zip) · [Read setup and calculation scope](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/README.md)

The offline calculation needs Python, NumPy and SciPy. Default synthetic data are fully generated and fitted. Optional named SPARC files are fetched only on your computer; the ZIP has no original rows or browser Engine.

Individual scripts, sizes and SHA-256

- [README.md](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/README.md) (6785 B)
  `5fbf0d29e006fc06f35d2290fd8fee7d5abc2301b601814165495331f9c37a84`
- [LICENSE.txt](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/LICENSE.txt) (1325 B)
  `4f15facc82fd0218a74907ae83f1716569277d9c40f55b249451dd8d89191b2f`
- [requirements.txt](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/requirements.txt) (185 B)
  `359f4c650ca6dd5a2705535e32377aa86db27d8d6ebd9b47333070850b9c5980`
- [source-identities.json](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/source-identities.json) (724 B)
  `409cf4931c19dc97049f943eb005165a59f88d1842a3dd2596eaa1dabcfbd458`
- [own-observation.json](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/own-observation.json) (9009 B)
  `48cd32150a8eff02b4c3e870cb82f8df008d90c2b5aed3f9bca743506852a5e1`
- [analyze.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/analyze.py) (2750 B)
  `5baed281117d3980af0f0e19e428c4163f79a97a84d1db71955ecbee7993ac3a`
- [conditional\_fit.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/conditional_fit.py) (3618 B)
  `37700d28edc852a10d09f949a7270a652b61f1c9d30cc2d8d0e99d4347e92d70`
- [fetch\_named\_source.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/fetch_named_source.py) (5014 B)
  `240b29a1c6e929895b5ead31269b495b1223be0615da62c703e2962028e6de5a`
- [generate\_observation.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/generate_observation.py) (849 B)
  `c5442424f9cecdcd81022ec31cae0b81bdc21400f06eea6dde4108c7062de743`
- [observation\_record.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/observation_record.py) (2693 B)
  `2d791013b5c8b289e6bfdc5ba9ed408e18b9fc4334d44ba32091546ed297e752`
- [physical\_units.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/physical_units.py) (255 B)
  `2db6448e5f4e657ef48ffd9d2a58c7487c6f7655a8033dc001327fe43192507c`
- [plot.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/plot.py) (5734 B)
  `c30e8e160f1f73f6451ebb903402a316ecba858814e6b1d5059ad31926abb4e1`
- [rotation\_model.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/rotation_model.py) (2003 B)
  `97c2c5ca56373f20996b26ef179267549ad3a341817b29666ce368029cfa96a1`
- [save\_native.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/save_native.py) (655 B)
  `bbf0881e28cf1dd4d13105af656cc4072e3a42a62a5f7013b9f48075b764c082`
- [spherical\_halos.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/spherical_halos.py) (1459 B)
  `4678e06bf172167f3a8a3a5d199447658eb51860507405b80110807165c5ef83`
- [synthetic\_record.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/synthetic_record.py) (1538 B)
  `6285cda07f2b9324806d25ecc89712eb6b94479e3caaa1f24a88c004d449a063`
- [thin\_disk\_reference.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/thin_disk_reference.py) (1298 B)
  `67ba0512e47c10d10c5b8d17f435d808812eec25f0edce296b6c80eaf72e0bc0`
- [validate.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/validate.py) (5709 B)
  `7cfbf116c5e51e9a3e1aa0ecd113a24f7a069706336ae01221de67dbf331cb6d`
- [verify\_analytic\_limits.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/verify_analytic_limits.py) (3073 B)
  `68bca45f2d3d8a1f8cda804bb45c3e165025effa0221c2f45d7c1416009bae6a`
- [verify\_nuisance\_mapping.py](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/verify_nuisance_mapping.py) (4184 B)
  `04b8587eb21a257b809fe930c33d43ddb2e008e4ebf2026134ee0a1d35b4015e`
- [SHA256SUMS.json](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/SHA256SUMS.json) (3306 B)
  `2fb52c937f2026d872f053e17343e55595fb3568862c20573d59123f3d897b49`
- [galaxy-rotation-science-v1.zip](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/galaxy-rotation-science-v1.zip) (29081 B)
  `f389268ed651be3a66ad7d87ee6760ebe39d87f6bd2498b2fb8904c9f10893a3`

## Sources and calculation scope

1. [Lelli, McGaugh & Schombert (2016), SPARC, AJ152,157](https://astroweb.cwru.edu/SPARC/)

   Official fixed Table1 and Rotmod\_LTG.zip; named NGC2403 member only. The master paper sections3.1–3.3/5.1–5.3 and original Table2 notes establish signed gas, unit stellar mass-to-light, finite thickness and error meaning. Fresh source acquisition is separate from cached replay. Original rows and measured-derived plots stay local.

2. [Navarro, Frenk & White (1997), fixed astro-ph/9611107v1](https://arxiv.org/abs/astro-ph/9611107v1)

   Fixed original density law and numerical-resolution context; sections3.2–3.3 and original equations2–3 inspected. This course integrates a stated spherical density mathematically; it does not rerun a cosmological simulation or certify arbitrary physical extrapolation.

3. [Li et al., Fitting the radial acceleration relation, arXiv:1803.00022v1](https://arxiv.org/abs/1803.00022v1)

   Previously inspected fixed artifact, relevant nuisance-parameter discussion/equations4–5/Figure1. Its2018 arXiv watermark and2022 internal typesetting date are recorded separately. Our coordinate-Jacobian derivation and numerical checks are own work; no175-galaxy MCMC reproduction is claimed.

4. [Spherical shell theorem foundation Lab](https://sandboxphysics.com/labs/gravity-shell-theorem/)

   Foundation reuse: spherical-shell cancellation and exterior central force. The new rotation-curve route adds saved component data, geometry and conditional fitting.

5. [Smith et al., Dark Matter and MOND successes and degeneracies, arXiv:2610.33157v1](https://arxiv.org/abs/2610.33157v1)

   Full fixed26-page preprint read; Figures1/5/6/10/14 and Table3 visually inspected. Watermark23October2026; abstract says MNRAS Accepted, while the PDF retains placeholder acceptance and2025 style year. Guide follows sections2–6, fixed/varying geometry, internal BIC references and stacked-lensing conditions. No147-object MCMC or privately supplied covariance is reproduced. Original PDF/figures are excluded.

6. [Independent saved-observation rotation-curve calculation](https://sandboxphysics.com/stories/galaxy-rotation-curves/materials/galaxy-rotation-science-v1.zip)

   Own MIT Python produces synthetic observations, actual six-start fits, profiles, commonD/i scenarios, positive-density/ring-potential/Jacobian references and SVGs. Optional exact named-source acquisition and73-row conversion/fits were actually run. Default is offline; ZIP contains no App Engine, original SPARC rows, paper or measured-derived graph.
