목차

인구 감소의 물리학 — 한국 출산율은 감쇠 조화 진동자다

Insight Lab Special #5 | 사회학 × 물리학

저자

Nakcho Choi × Claude Opus 4.6

공개

2026년 4월 24일

코드 보기
library(ggplot2)
library(dplyr)
library(tidyr)
library(patchwork)
library(scales)
library(showtext)
library(ggtext)
library(forcats)

font_add_google("Noto Sans KR", "notosanskr")
showtext_auto()

theme_insight <- function(base_size = 13) {
  theme_minimal(base_size = base_size, base_family = "notosanskr") +
    theme(
      plot.title = element_text(face = "bold", size = rel(1.3), margin = margin(b = 8)),
      plot.subtitle = element_markdown(color = "grey40", size = rel(0.9), margin = margin(b = 12)),
      panel.grid.minor = element_blank(),
      panel.grid.major = element_line(color = "grey92"),
      legend.position = "bottom",
      axis.title = element_text(size = rel(0.9), color = "grey30"),
      plot.caption = element_text(color = "grey50", size = rel(0.7), hjust = 0),
      plot.margin = margin(15, 15, 15, 15)
    )
}

pal <- list(
  red = "#E63946", blue = "#457B9D", green = "#2A9D8F",
  orange = "#E9C46A", dark = "#1D3557", purple = "#6C5B7B"
)

프롤로그: “번식을 거부하는 종”이라는 물리학적 이상 현상

“어떤 시스템이든 평형에서 벗어나면, 복원력이 작용한다. 문제는 그 복원력이 충분한가이다.” — 자유 해석

다윈의 진화론에서 가장 설명하기 어려운 현상이 하나 있다. 번식을 자발적으로 거부하는 종의 출현이다. 자연선택의 논리에 의하면, 번식을 거부하는 유전자는 다음 세대에 전달되지 못하므로 즉시 도태되어야 한다. 그런데 한국에서는 이 “도태되어야 할 행동”이 사회 전체로 확산되고 있다.

2023년, 한국의 합계출산율은 0.72명을 기록했다. 세계 꼴찌. 인류 역사상 전쟁이나 기근 없이 이 수준까지 떨어진 나라는 없다.

그런데 2024년 0.75명, 2025년 0.80명으로 반등했다. 9년 만의 전환.

이 에세이는 묻는다: 이 반등은 “복원력”인가, “잡음”인가?

물리학의 감쇠 조화 진동자(Damped Harmonic Oscillator) 모델을 사회 현상에 적용하여, 한국 출산율의 과거·현재·미래를 해석한다.


I. 모델: 출산율 = 감쇠 진동자

물리학에서 빌려온 프레임

질량이 스프링에 달려 있고, 마찰이 있는 시스템. 진동하면서 점점 평형으로 수렴한다. 한국 출산율을 56년치 데이터(1970-2025)에 피팅하면, 놀랍게도 이 모델이 잘 맞는다.

\[ \text{TFR}(t) = \underbrace{\text{TFR}_{eq}}_{\text{평형}} + \underbrace{A_1 e^{-\gamma_1 t}}_{\text{산업화 감쇠}} + \underbrace{A_2 e^{-\gamma_2 t} \cos(\omega t + \phi)}_{\text{세대 진동}} \]

코드 보기
df <- tibble(
  year = 1970:2025,
  tfr = c(
    4.53, 4.54, 4.12, 4.07, 3.77, 3.43, 3.00, 2.99, 2.64, 2.90,
    2.82, 2.57, 2.39, 2.06, 1.74, 1.66, 1.58, 1.53, 1.55, 1.56,
    1.57, 1.71, 1.76, 1.65, 1.66, 1.63, 1.57, 1.52, 1.45, 1.41,
    1.48, 1.31, 1.18, 1.19, 1.16, 1.09, 1.13, 1.26, 1.19, 1.15,
    1.23, 1.24, 1.30, 1.19, 1.21, 1.24, 1.17, 1.05, 0.98, 0.92,
    0.84, 0.81, 0.78, 0.72, 0.75, 0.80
  )
) |> mutate(t = year - 1970)

fit <- nls(
  tfr ~ eq + A1 * exp(-g1 * t) + A2 * exp(-g2 * t) * cos(w * t + phi),
  data = df,
  start = list(eq = 1.028, A1 = 3.702, g1 = 0.0909, A2 = -0.184, g2 = 0.001, w = 0.346, phi = 0.748),
  control = nls.control(maxiter = 5000, tol = 1e-5, warnOnly = TRUE),
  algorithm = "port",
  lower = c(0.0, 0.5, 0.01, -3, 0.0, 0.05, -pi),
  upper = c(1.8, 7.0, 0.30, 3, 0.20, 1.5, pi)
)

p <- coef(fit)
period_yr <- 2 * pi / p["w"]
half_life <- log(2) / p["g1"]

피팅 결과: 56년을 7개 파라미터로

코드 보기
tibble(
  `물리량` = c("TFR_eq (장기 평형)", "A1 (산업화 진폭)", "gamma1 (산업화 감쇠율)",
              "거시 반감기", "A2 (진동 진폭)", "omega (각진동수)",
              "T (진동 주기)", "RMSE"),
  `` = c(sprintf("%.2f명", p["eq"]), sprintf("%.2f", p["A1"]),
          sprintf("%.4f /yr", p["g1"]), sprintf("%.1f년", half_life),
          sprintf("%.3f", p["A2"]), sprintf("%.4f rad/yr", p["w"]),
          sprintf("%.1f년", period_yr), sprintf("%.3f", sqrt(mean(residuals(fit)^2)))),
  `사회학적 의미` = c(
    "한국 사회가 수렴하는 자연 출산율",
    "1970년에서 평형까지의 거리 (산업화 이전 잔여)",
    "산업화/도시화가 출산율을 끌어내리는 속도",
    "산업화 충격의 절반이 해소되는 데 걸리는 시간",
    "세대 교체에 의한 미세 진동의 크기",
    "정책-경기-세대교체 사이클의 빈도",
    "하나의 사회적 진동이 완성되는 기간",
    "모델의 56년 데이터 적합도"
  )
) |> knitr::kable(align = "lrl")
물리량 사회학적 의미
TFR_eq (장기 평형) 1.03명 한국 사회가 수렴하는 자연 출산율
A1 (산업화 진폭) 3.70 1970년에서 평형까지의 거리 (산업화 이전 잔여)
gamma1 (산업화 감쇠율) 0.0910 /yr 산업화/도시화가 출산율을 끌어내리는 속도
거시 반감기 7.6년 산업화 충격의 절반이 해소되는 데 걸리는 시간
A2 (진동 진폭) -0.179 세대 교체에 의한 미세 진동의 크기
omega (각진동수) 0.3465 rad/yr 정책-경기-세대교체 사이클의 빈도
T (진동 주기) 18.1년 하나의 사회적 진동이 완성되는 기간
RMSE 0.129 모델의 56년 데이터 적합도

II. 시각화: 한국 출산율의 동역학

코드 보기
t_seq <- seq(0, 80, 0.3)
df_model <- tibble(t = t_seq) |>
  mutate(
    year = t + 1970,
    fitted = predict(fit, newdata = list(t = t)),
    macro = p["eq"] + p["A1"] * exp(-p["g1"] * t),
    osc = p["A2"] * exp(-p["g2"] * t) * cos(p["w"] * t + p["phi"])
  )

ggplot() +
  annotate("rect", xmin = 2026, xmax = 2050, ymin = -Inf, ymax = Inf,
           fill = "steelblue", alpha = 0.04) +
  annotate("text", x = 2038, y = 4.3, label = "외삽 (Extrapolation)",
           family = "notosanskr", size = 3.5, color = pal$blue, alpha = 0.4, fontface = "italic") +
  geom_hline(yintercept = p["eq"], linetype = "dashed", color = pal$green, linewidth = 0.7) +
  annotate("text", x = 2048, y = p["eq"] + 0.1,
           label = sprintf("TFR_eq = %.2f", p["eq"]),
           family = "notosanskr", size = 4, color = pal$green, fontface = "bold") +
  geom_line(data = df_model, aes(x = year, y = macro),
            color = pal$orange, linewidth = 0.8, linetype = "dashed", alpha = 0.6) +
  geom_line(data = df_model, aes(x = year, y = fitted),
            color = pal$red, linewidth = 1.3) +
  geom_point(data = df, aes(x = year, y = tfr), color = pal$dark, size = 2, alpha = 0.7) +
  geom_point(data = df |> filter(year >= 2024), aes(x = year, y = tfr),
             color = pal$green, size = 4, shape = 18) +
  scale_x_continuous(breaks = seq(1970, 2050, 10)) +
  coord_cartesian(ylim = c(0.3, 4.8)) +
  labs(
    title = "한국 출산율 = 감쇠 조화 진동자",
    subtitle = sprintf("빨간 실선: 이중감쇠+진동 모델 (RMSE=%.3f) | 노란 점선: 거시 감쇠만 | 초록: 반등 구간",
                       sqrt(mean(residuals(fit)^2))),
    x = NULL, y = "합계출산율 (TFR)",
    caption = "데이터: 통계청 인구동향조사 1970-2025 | 모델: NLS 비선형 최소자승 피팅"
  ) +
  theme_insight()

III. 사회학적 해석: 댐핑의 인간적 의미

1. 거시 감쇠 (\(\gamma_1\)): 비가역적 산업화

A1 * exp(-gamma1 * t) 항은 돌이킬 수 없는 사회 변환을 나타낸다.

코드 보기
p_macro <- ggplot(df_model, aes(x = year)) +
  geom_line(aes(y = macro), color = pal$red, linewidth = 1.2) +
  geom_point(data = df, aes(x = year, y = tfr), color = "grey50", size = 1.5, alpha = 0.4) +
  geom_hline(yintercept = p["eq"], linetype = "dashed", color = pal$green, linewidth = 0.5) +
  annotate("label", x = 1983, y = 3.2,
           label = "1. 산업화 (1970s)\n2. 도시화 + 교육 확대 (1980s)\n3. 여성 경제 참여 (1990s)\n4. 주거비/사교육 (2000s)\n5. 비혼/만혼 (2010s~)",
           family = "notosanskr", size = 3.3, fill = "#FFF5F5", label.size = 0.3, hjust = 0) +
  scale_x_continuous(breaks = seq(1970, 2050, 10)) +
  coord_cartesian(ylim = c(0.5, 5)) +
  labs(title = "거시 감쇠: 비가역적 사회 변환의 누적",
       subtitle = sprintf("반감기 = %.1f년 | 1970년의 충격이 절반으로 줄어드는 데 걸린 시간", half_life),
       x = NULL, y = "TFR") + theme_insight()

p_osc <- ggplot(df_model, aes(x = year)) +
  geom_hline(yintercept = 0, color = "grey70") +
  geom_line(aes(y = osc), color = pal$blue, linewidth = 1.2) +
  geom_point(data = df |> mutate(resid = tfr - p["eq"] - p["A1"] * exp(-p["g1"] * t)),
             aes(x = year, y = resid), color = "grey50", size = 1.5, alpha = 0.4) +
  annotate("label", x = 2010, y = 0.14,
           label = sprintf("주기 T = %.1f년\n= 세대 교체 사이클\n(~18년: 출생 -> 성인)", period_yr),
           family = "notosanskr", size = 3.3, fill = "#F0F8FF", label.size = 0.3) +
  scale_x_continuous(breaks = seq(1970, 2050, 10)) +
  labs(title = sprintf("세대 진동: %.1f년 주기의 사회적 오실레이션", period_yr),
       subtitle = "정책 사이클, 경기 사이클, 세대 교체가 만드는 미세한 파동",
       x = NULL, y = "TFR 잔차") + theme_insight()

p_macro / p_osc + plot_annotation(
  title = "신호 분해: 인구 감소의 두 시간 스케일",
  theme = theme(plot.title = element_text(family = "notosanskr", face = "bold", size = 16))
)

물리학에서 이중 시간 스케일(two-timescale)은 빠른 변수느린 변수가 결합된 시스템에서 나타난다. 한국 출산율에서:

  • 빠른 변수 (\(\gamma_1 \approx 0.09\)): 산업화·도시화에 의한 구조적 하락 → 이미 거의 소진
  • 느린 변수 (\(\gamma_2 \approx 0\)): 세대 교체에 의한 진동 → 거의 감쇠하지 않음

이것이 의미하는 바: 산업화는 끝났지만, 세대 ���체의 파동은 계속된다.

2. 세대 진동 (\(\omega\)): 18년의 리듬

진동 주기가 약 18년이라는 것은 매우 의미심장하다:

  • 1세대 사이클: 출생 → 성인(~18세) → 출산 결정
  • 정책 사이클: 저출산 대책 발표 → 효과 나타남 → 피로감 → 새 정책
  • 부동산 사이클: ~18년 주기의 장기 부동산 경기

이 세 사이클이 공명(resonance)을 일으킬 때 출산율이 극단으로 치솟거나 급락한다.

3. 평형점 (\(\text{TFR}_{eq} \approx 1.03\)): 한국 사회의 “자연 출산율”

이것이 가장 중요한 발견이다. 외부 충격 없이, 한국 사회가 자연히 수렴하는 출산율은 약 1.0명이다.

이 숫자의 의미:

  • 인구 대체 수준(2.1)의 절반 이하
  • 매 세대마다 인구가 반감한다
  • 100년 후 한국 인구: 현재의 1/4~1/8

물리학적으로 말하면, 한국 사회의 “에너지 최소 상태”��� TFR = 1.0이라는 것이다. 정책적 에너지를 투입하면 일시적으로 올라가지만, 에너지 투입을 멈추면 반드시 1.0으로 돌아온다.

IV. 위상 공간: 나선이 보여주는 역사

코드 보기
df_phase <- df |>
  mutate(
    dtfr = (lead(tfr) - lag(tfr)) / 2,
    decade = case_when(
      year < 1980 ~ "1970s: 산업화 시작",
      year < 1990 ~ "1980s: 인구정책 성공",
      year < 2000 ~ "1990s: IMF + 의식변화",
      year < 2010 ~ "2000s: 초저출산 진입",
      year < 2020 ~ "2010s: 급락기",
      TRUE ~ "2020s: 바닥+반등"
    )
  ) |> filter(!is.na(dtfr))

df_pm <- tibble(t = seq(0, 55, 0.05)) |>
  mutate(
    tfr_m = p["eq"] + p["A1"] * exp(-p["g1"] * t) +
      p["A2"] * exp(-p["g2"] * t) * cos(p["w"] * t + p["phi"]),
    dtfr_m = -p["A1"] * p["g1"] * exp(-p["g1"] * t) +
      p["A2"] * exp(-p["g2"] * t) *
      (-p["g2"] * cos(p["w"] * t + p["phi"]) - p["w"] * sin(p["w"] * t + p["phi"]))
  )

ggplot() +
  geom_path(data = df_pm, aes(x = tfr_m, y = dtfr_m), color = pal$red, linewidth = 0.4, alpha = 0.3) +
  annotate("point", x = p["eq"], y = 0, size = 6, shape = 4, color = pal$green, stroke = 2.5) +
  annotate("text", x = p["eq"] + 0.18, y = 0.02,
           label = sprintf("평형점 (%.2f, 0)", p["eq"]),
           family = "notosanskr", size = 4, color = pal$green, fontface = "bold") +
  geom_path(data = df_phase, aes(x = tfr, y = dtfr), color = pal$dark, linewidth = 0.7, alpha = 0.4,
            arrow = arrow(length = unit(0.12, "cm"), type = "closed")) +
  geom_point(data = df_phase, aes(x = tfr, y = dtfr, fill = decade),
             shape = 21, size = 3.5, color = "white", stroke = 0.5) +
  geom_text(data = df_phase |> filter(year %in% c(1971, 1980, 1990, 2000, 2012, 2018, 2023, 2024)),
            aes(x = tfr, y = dtfr, label = year),
            family = "notosanskr", size = 2.8, nudge_y = 0.02, color = pal$dark, fontface = "bold") +
  geom_hline(yintercept = 0, color = "grey70", linewidth = 0.3) +
  geom_vline(xintercept = p["eq"], color = pal$green, linewidth = 0.3, linetype = "dashed") +
  scale_fill_manual(values = c(
    "1970s: 산업화 시작" = "#E63946", "1980s: 인구정책 성공" = "#F4A261",
    "1990s: IMF + 의식변화" = "#E9C46A", "2000s: 초저출산 진입" = "#2A9D8F",
    "2010s: 급락기" = "#457B9D", "2020s: 바닥+반등" = "#6C5B7B"
  )) +
  labs(
    title = "위상 공간: 한국 출산율 50년의 궤적",
    subtitle = "밖에서 안으로 나선형 수렴 — 2020s(보라)가 평형점에 가장 가까워졌다",
    x = "TFR (합계출산율)", y = "dTFR/dt (변화속���)",
    fill = "시대", caption = "궤적이 X표(평형점)으로 감겨 들어가는 나선 = 감쇠 진동의 위상 공간 서명"
  ) + theme_insight()

위상 공간에서 한국 출산율의 역사를 읽는다:

  • 1970s (빨강): 바깥 궤도에서 빠르게 안으로 진입. 산업화의 거대한 힘.
  • 1980-90s (주황/노랑): 1.5 근처에서 한 바퀴 돌며 안정 시도. 하지만 IMF가 ���도를 깨뜨림.
  • 2000-10s (초록/파랑): 1.0 아래로 오버슈트. 변화 속도는 줄어들지만 방향은 여전히 하강.
  • 2020s (보라): 마침내 dTFR/dt > 0 (속도 반전). 평형점을 향한 첫 되돌림.

V. 미래 예측: 세 시나리오

코드 보기
set.seed(42)
resid_sd <- sd(residuals(fit))
t_all <- seq(0, 80, 0.3)
n_boot <- 1000

boot_mat <- matrix(NA, nrow = length(t_all), ncol = n_boot)
for (i in 1:n_boot) {
  noise <- rnorm(length(t_all), 0, resid_sd * sqrt(1 + pmax(0, t_all - 55) / 25))
  boot_mat[, i] <- predict(fit, newdata = list(t = t_all)) + noise
}

df_proj <- tibble(t = t_all) |>
  mutate(
    year = t + 1970,
    pred = predict(fit, newdata = list(t = t)),
    ci10 = apply(boot_mat, 1, quantile, 0.1),
    ci90 = apply(boot_mat, 1, quantile, 0.9),
    ci25 = apply(boot_mat, 1, quantile, 0.25),
    ci75 = apply(boot_mat, 1, quantile, 0.75),
    is_future = year > 2025
  )

key_years <- c(2030, 2035, 2040, 2050)
df_key <- df_proj |> filter(round(year) %in% key_years) |>
  group_by(round(year)) |> slice(1) |> ungroup()

ggplot() +
  annotate("rect", xmin = 2026, xmax = 2050, ymin = -Inf, ymax = Inf,
           fill = "steelblue", alpha = 0.04) +
  geom_ribbon(data = df_proj |> filter(is_future),
              aes(x = year, ymin = ci10, ymax = ci90), fill = pal$red, alpha = 0.1) +
  geom_ribbon(data = df_proj |> filter(is_future),
              aes(x = year, ymin = ci25, ymax = ci75), fill = pal$red, alpha = 0.15) +
  geom_line(data = df_proj |> filter(!is_future), aes(x = year, y = pred),
            color = pal$red, linewidth = 1.3) +
  geom_line(data = df_proj |> filter(is_future), aes(x = year, y = pred),
            color = pal$red, linewidth = 1.3, linetype = "longdash") +
  geom_point(data = df, aes(x = year, y = tfr), size = 2, color = pal$dark, alpha = 0.7) +
  geom_hline(yintercept = p["eq"], color = pal$green, linewidth = 0.8, linetype = "dashed") +
  annotate("label", x = 2048, y = p["eq"] + 0.1,
           label = sprintf("TFR_eq = %.2f", p["eq"]),
           family = "notosanskr", size = 4, fill = "#E8F5E9", color = pal$green, fontface = "bold", label.size = 0) +
  geom_text(data = df_key, aes(x = round(year), y = pred + 0.1, label = sprintf("%.2f", pred)),
            family = "notosanskr", size = 3.8, color = pal$dark, fontface = "bold") +
  geom_point(data = df_key, aes(x = round(year), y = pred), color = pal$red, size = 3, shape = 18) +
  scale_x_continuous(breaks = seq(1970, 2050, 10)) +
  coord_cartesian(ylim = c(0.3, 5)) +
  labs(
    title = "댐핑 모델 기반 2050년 예측",
    subtitle = "진동하면서 평형(1.03)으로 수렴 | 80%/50% 신뢰구간 포함",
    x = NULL, y = "합계출산율 (TFR)",
    caption = "점선 = 외삽 | 밴드 = 잔차 기반 부트스트랩 (이분산 조정)"
  ) + theme_insight()

VI. 사회학 × 물리학: 다섯 가지 크로스오버 인사이트

Insight 1: “반등은 복원력이지 반전이 아니다”

감쇠 진동자에서 오버슈트(0.72) 후 반등은 물리적 필연이다. 스프링을 평형 이하로 잡아당기면, 놓을 때 반드시 되돌아온다. 이것을 “정책 성공”이라 부르는 것은 물리학적으로 스프링의 탄성을 인간의 의지라 부르는 것과 같다.

Insight 2: “감쇠 계수(gamma)가 사회의 회복력이다”

\(\gamma\)가 큰 사회 = 충격을 빠르게 흡수하고 새 평형을 찾는 사회.

  • 북유럽 복지국가: 높은 \(\gamma\) → 출산율 충격에서 빠르게 회복
  • 한국·일본: 낮은 \(\gamma\) → 오래 흔들리고 깊게 오버슈트

\(\gamma\)를 높이는 정책: 단발성 현금 지원이 아니라 구조적 안정화 (주거, 고용, 돌봄).

Insight 3: “18년 주기는 세대의 메아리다”

출산율에 ~18년 주기의 진동이 있다는 것은, 현재의 출산 결정이 18년 전의 사회적 조건에 영향받는다는 뜻이다. 2024년의 반등은 2006-2007년(황금돼지해) 전후에 형성된 사회적 조건의 메아리일 수 있다. 이것을 사회학에서는 코호트 효과(cohort effect)라 부른다.

Insight 4: “에너지 최소 상태 = 한국의 자연 출산율”

TFR_eq ≈ 1.03은 한국 사회의 “바닥 에너지 상태(ground state)”다. 외부 에너지(정책, 보조금) 없이 시스템이 안주하는 곳. 이것을 바꾸려면 바닥 에너지 자체를 재설계해야 한다:

  • 주거비 구조 변경 (바닥 에너지 낮추기)
  • 양육 인프라 구조 변경 (해밀토니안 수정)
  • 노동시장 유연화 (위치에너지 지형 변경)

이 세 가지가 해밀토니안(H) 자체를 바꾸는 정책이다. 반면 출산장려금은 외력(external force)에 불과해서, 힘을 빼면 원래 에너지로 돌아간다.

Insight 5: “위상 공간에��� 한국은 ‘거의 도착했다’”

위상 공간 그래프를 보면, 2020년대의 점들이 평형점(X)에 가장 가까이 모여 있다. 이것은 한국 출산율의 “역동적 시대”가 끝나고 있다는 뜻이다.

역설적으로, 이것은 좋은 뉴스이기도 하다: 더 이상 급락할 에너지가 ���아있지 않다. 한국은 새로운 정상 상태(new normal)에 진입하고 있다.

VII. 에필로그: 물리학자의 처방전

“시스템을 바꾸려면 외력을 가하지 마라. 해밀토니안을 바꿔라.”

한국의 저출산은 외력(현금)으로 해결할 문제가 아니다. 시스템의 에너지 지형 자체를 재설계해야 한다.

구체적으로:

  1. 바닥 에너지(TFR_eq) 자체를 올려라: 주거비, 양육비, 노동시간의 구조적 변환
  2. 감쇠 계수(gamma)를 높여라: 충격 흡수 능력 강화 (보편적 복지, 고용 안전망)
  3. 공명 주파수를 조심해라: 18년 주기를 이해하고, 정책 타이밍을 맞춰라
  4. 외력에 기대지 마라: 출산장려금은 작용-반작용일 뿐. 시스템을 바꾸지 않는다

한 마디로: “인구 정책은 역학(mechanics)이 아니라 열역학(thermodynamics)이다.”

힘으로 밀어서 움직이는 게 아니라, 자발적으로 흐르도록 에너지 지형을 바꿔야 한다.


Insight Lab 정보
  • 시리즈: Insight Lab Special #5
  • 크로스오버: 사회학 × 물리학 (감쇠 조화 진동자 × 인구학)
  • 매트릭스 위치: 경제-물리학 → 확장: 사회학-물리학
  • 연관 에세이: SP2 (비선형 동역학 × 트럼프), Week 5 (카오스 × 금융)
  • 데이터: 통계청 인구동향조사 1970-2025
  • 모델: NLS 비선형 최소자승법, R 4.3.3

Nakcho Choi × Claude Opus 4.6 | 2026-04-24 | Insight Lab