Traduction de [IDL] en [Matlab] d'un petit programme - Algo - Programmation
Marsh Posté le 01-12-2008 à 17:30:18
- la boucle (genre le -1 DO BEGIN)
- le : S[c,l]+= (dans la boucle)
- le S=FLTARR (100,100) , ça je pense que c'est pour faire une matrice identité de 100 par 100 mais pourquoi la crée alors que normalement une boucle de 0 à 100 comme cela semble indiqué, marcherais aussi toute seule..
Voilà, merci
Marsh Posté le 01-12-2008 à 00:47:05
Bonjour,
Voilà j'ai un problème sous matlab qui nécessite cette résolution. J'aimerais donc une aide pour tranformer le programme suivant (qui est en IDL) en code matlab. Ces deux langages sont surement très proches mais je bloque, c'est bête.
Merci d'avance,
********************************************************************
d_obs = TRANSPOSE([3.12, 3.26, 2.98, 3.12, 2.84, 2.98])
data_cov = DIAG_MATRIX(REPLICATE(.1^2, 6))
m_prior = TRANSPOSE([4, 15.5])
prior_cov = DIAG_MATRIX(REPLICATE(10.^2, 2))
S = FLTARR(100, 100)
FOR l = 0, 100 - 1 DO BEGIN
y = l / 5.
FOR c = 0, 100 - 1 DO BEGIN
x = c / 5.
S[c, l] = 1./2. * (TRANSPOSE(seismic_direct([x, y]) - d_obs) ## $
INVERT(data_cov) ## (seismic_direct([x, y]) - d_obs))
S[c, l]+= 1./2. * (TRANSPOSE([[x], [y]] - m_prior) ## $
INVERT(prior_cov) ## ([[x], [y]] - m_prior))
ENDFOR
ENDFOR
distribution = EXP(- S)
END
********************************************************************
avec la fonction seism_direct :
********************************************************************
FUNCTION seismic_direct, m
x = [3., 3., 4., 4., 5., 5.]
y = [15., 16., 15., 16., 15., 16.]
v = 5
RETURN, TRANSPOSE(SQRT((m[0] - x)^2 + (m[1] - y)^2) / v)
END
********************************************************************