Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados - Cressman (1959)

Dr. Carlos Frederico Bastarz
Dr. Dirceu Luis Herdies

Programa de Pós-Graduação em Meteorologia (PGMET) do INPE

01 de Outubro de 2025

Histórico da Assimilação de Dados


Retomando...


  • Década de 1950: primeiras previsões numéricas do tempo
  • Limitações computacionais inviabilizavam métodos mais precisos
  • Bergthórsson e Döös (1955)
    • Primeira formulação prática de análise objetiva
  • Cressman (1959)
    • Propõe correções sucessivas com raio de influência decrescente
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados

An Operational Objective Analysis System (Cressman, 1959)

  • É o Método de Correções Sucessivas
  1. Inicia-se com um campo de background
  2. Utiliza-se as observações distribuídas de forma irregular no espaço
  3. Ajusta-se iterativamente o background em direção às observações:
    • Inicia-se com raio de influência grande
    • Reduz-se o raio de influência até que o campo de background convirja para as observações

Histórico da Assimilação de Dados

An Operational Objective Analysis System (Cressman, 1959)

Detalhes da formulação (seguindo Kalnay, 2003)

  • Onde,
    • é a enésima estimativa no ponto de grade
    • é a k-ésima observação ao redor do ponto de grade
    • é o valor do enésimo campo de background no ponto de observação
    • é o número de observações dentro da distância do ponto de grade
    • é a estimativa da razão entre a variância do erro da observação e o da variância do erro do background

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


  • No Método de Correções Sucessivas de Cressman, os pesos são definidos como:


  • Onde,
    • é o quadrado da distância entre um ponto de observação e um ponto de grade
    • é o quadrado do enésimo raio de influência
  • Observações mais próximas têm maior peso


Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)



Exemplo 1D


  • Considere um modelo matemático simples:

  • A função seno com a adição de um ruído normalmente distribuído

Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)


Exemplo 1D


x = np.arange(-np.pi, np.pi, 0.01)
xb_seno = np.sin(x)
  • Outra forma de acrescentar o ruído:
sigma = 0.5  
#ruido = np.random.randn(len(x)) * sigma 
ruido = np.random.randn(*x.shape) * sigma 👈

xb = xb_seno + ruido
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)


Exemplo 1D


# Posições

obs_pos = np.array([-2.2, -2.1, -2.0, -1.8, 0.9, 1, 2, 3])

# Valores medidos

obs_vals = np.array([-2.2, -1.8, 0.9, 0, 1, 2, 3, 4])
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)


Exemplo 1D


# Função peso de Cressman

def weight(r, R):
    w = (R**2 - r**2) / (R**2 + r**2 + 1e-12) 👈
    w[r >= R] = 0.0
    return w
  • Note que estamos utilizando um ruído extra (), o qual pode ser omitido - o que acontece nesse caso?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)


Exemplo 1D


# Raios das passagens sucessivas

radii = [3.0, 2.0, 1.0, 0.5, 0.25, 0.175]
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados



An Operational Objective Analysis System (Cressman, 1959)


Exemplo 1D

xa = xb.copy()

for R in radii:
    increments = np.zeros_like(xa)
    denom = np.zeros_like(xa)
    for xo, yo in zip(obs_pos, obs_vals):
        r = np.abs(x - xo)
        w = weight(r, R)
        increments += w * (yo - xa)
        denom += w
    # evita a divisão por zero
    mask = denom > 0
    xa[mask] += increments[mask] / denom[mask]
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 1 raio?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos apenas 2 raios?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos 3 raios?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos 4 raios?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos 5 raios?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 1D

  • O que acontece quando escolhemos 6 raios?
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Considere um modelo matemático simples:

  • A função seno com a adição de um ruído normalmente distribuído
  • Definimos um plano Cartesiano de 100 pontos onde esta função será aplicada
  • 👉 Utilizando ruido = np.random.randn(len(LON)) * sigma
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Considere um modelo matemático simples:

  • A função seno com a adição de um ruído normalmente distribuído
  • Definimos um plano Cartesiano de 100 pontos onde esta função será aplicada
  • 👉 Utilizando ruido = np.random.randn(*LON.shape) * sigma
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Definimos dois vetores com o domínio para e
  • Definimos uma malha a partir dos valores do domínio
lon = np.linspace(-np.pi, np.pi, 10)
lat = np.linspace(-np.pi, np.pi, 10)

LON, LAT = np.meshgrid(lon, lat)
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Aplicamos a função para os valores do domínio
  • Definimos um ruído
  • Somamos o ruído à função
xb_seno = np.sin(LON)

sigma = 0.5  
ruido = np.random.randn(*LON.shape) * sigma

xb = xb_seno + ruido
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • Definição das posições e valores das observações
# Posições

obs_locs = np.array([[-2.2, -1],
                     [-2.1,  0.5],
                     [-2.0, -0.5],
                     [-1.8,  2],
                     [ 0.9, -2.8],
                     [ 1.0,  1.0],
                     [ 2.0,  0.0],
                     [ 3.0,  0.5]])      

# Valores medidos

obs_vals = np.array([-1.0, -1.5, -2.0, -1.0, 1.0, 0.0, 0.5, 0.0]) 
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Definição dos pesos dados em função da distância entre o ponto a ser analisado e as observações
  • O peso será zero quando a observação estiver fora do raio de influência
def weight(dx, dy, R):
    r2 = dx**2 + dy**2
    R2 = R**2
    w = (R2 - r2) / (R2 + r2 + 1e-12) 👈
    w[r2 >= R2] = 0.0 👈 zero fora do raio 
    return w
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Definimos um vetor com os valores dos raios de influência
  • Observe que, neste exemplo, os valores são adimensionais
radii = [3.0, 2.5, 2.0, 1.5, 1.0, 0.5] # passos sucessivos
Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


Exemplo 2D

  • Iniciamos a análise como sendo o background
  • Para cada raio de influência, para cada observação, calculamos os pesos de acordo com o valor do raio de influência
xa = xb.copy()

for R in radii:
    inc = np.zeros_like(xa)
    denom = np.zeros_like(xa)
    for (xo, yo), obs in zip(obs_locs, obs_vals):
        dx = LON - xo
        dy = LAT - yo
        w = weight(dx, dy, R)
        inc += w * (obs - xa)
        denom += w
    mask = denom > 0
    xa[mask] += inc[mask] / denom[mask]

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 1 raio?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos apenas 2 raios?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos 3 raios?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos 4 raios?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos 5 raios?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)

Exemplo 2D

  • O que acontece quando escolhemos 6 raios?

Introdução à Assimilação de Dados (MET 563-3)

Histórico da Assimilação de Dados


An Operational Objective Analysis System (Cressman, 1959)


🎲 Notebook com Atividade Prática 4


  • Insights e questões interessantes que surgiram durante a aula 💡:
    • 💭 Como generalizar a determinação do raio de influência nos pontos de grade a serem analisados?
    • 💭 Como fazer com que os raios de influência possam ser distintos entre os pontos de grade?
      • A densidade de observações ao redor de cada ponto de grade seria um meio para isto?
    • 💭 Como fica a assimilação das observações na vertical? Os métodos empíricos que vimos até agora, contabilizam a estrutura vertical do modelo ou apenas a estrutura horizontal?
    • 💭 Como devem ser definidos os valores dos raios de influência?
      • A resolução do modelo seria um critério a ser utilizado?
Introdução à Assimilação de Dados (MET 563-3)

🤔 Dúvidas








🔗 https://cfbastarz.github.io/met563-3/
🐙 https://github.com/cfbastarz/MET563-3
📧 carlos.bastarz@inpe.br

Introdução à Assimilação de Dados (MET 563-3)

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style

Scoped style