Traduire petit programme de [IDL] en [matlab]

Fermé
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 - 1 déc. 2008 à 00:52
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 1 déc. 2008 à 10:26
Bonjour,

Voilà j'ai un problème sous matlab qui nécessite cette résolution. J'aimerais donc une aide pour transformer 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[i] seism_direct/i :

********************************************************************
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
********************************************************************
A voir également:

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 déc. 2008 à 10:26
Salut.
Je ne connais pas IDL, mais je peux te donner quelques solutions sur les fonctions suffisamment parlantes.
la transposée d'une matrice A en MATLAB, c'est A', il suffit de rajouter une apostrophe derrière la variable.
L'appel à un élément d'une matrice se fait par S(l,c) et non S[l,c]
la boucle for :
for variable = debut:incrément:fin
...
end

la puissance s'exprime avec l'opérateur ^ qu'elle soit entière ou non.
Sinon, explique ce que tu veux faire d'autre.
Pour créer une matrice, il y a les fonctions ones et zeros qui créées des matrices respectivement pleines de uns et de zéros.
0