Les posteurs les plus actifs de la semaine


Aide pour un programme

Aller en bas

Aide pour un programme Empty Aide pour un programme

Message par LiliOp le Ven 24 Jan 2014 - 12:06

Bonjour à tous,
je viens de m'inscrire, parce que je cherche à faire un programme en vain sur R, et j'aimerais votre aide pour y aboutir. Je précise que j'ai commencé à travailler sur R hier.
Le contexte est le suivant: je pars d'un tableau excel (5000 lignes environ) dans lequel sont repérées des abscisses et ordonnées (réelles) variant de 0 à 511. Je voudrait obtenir une matrice dont chaque coefficient m(i,j) calcule le nombre de points à distance 1 ou moins du noeud (i,j) (j'ai fait un maillage d'une image et je veux affecter à un noeud une densité de population correspondante).
Ensuite, j'aimerais tracer une surface 3D (ou une carte de lignes de niveau par exemple) qui modélise celà (dont la côte est le coefficient m(i,j)).

Pour la matrice:
pos est le tableau des positions, il contient 4 colonnes et seules les deux dernières sont utilisées (abscisses et ordonnées).

Code:

## on implémente la fonction distance . Elle prend pour arguments 4 sclaires (2 couples)

distance=function(x1,x2,y1,y2)
 {return(sqrt((y1-x1)**2+(y2-x2)**2))}
 
 ## Fonction auxiliaire qui calculera le coefficient de la matrice des passages proches. Elle prend pour argument quatres positions.
 
 kernel=function(x1,x2,y1,y2)
 {c=0
    if(distance(x1,x2,y1,y2)<=1){c=1}
    else{c=0}
    return (c)}
    
##Consruction de la matrice souhaitée
matrice=function(t)
{M=matrix(rep(0,512),ncol=512, nrow=512)
      for (i in 1:512)
        {for (j in 1:512)
        {c=0
           for (p in 1: length(t[,1]))
         {c=c+kernel(i,j,t[p,3],t[p,4])
          M[i,j]=c}}}
       return (M)}

Seulement celà n'a pas l'air de marcher, peut être que le paramètre c est mal placé, ou qu'il vaut toujours 0 parce que les matrices renvoyées (je teste avec des matrices plus petites) sont toutes nulles ... (alors que la première ligne de mon tableau donne les valeurs 43,7 et 4,3; donc le coefficient m(44,4) ne devrait pas être nul !)

Pour la surface je n'ai pas d'idée, ne sachant pas utiliser "outer" avec ma fonction distance + boucle for.

Je pense également qu'il risque d'y avoir un problème de quantité d'opérations (je remplis une matrice 500x500 et chaque coefficient est calculé après avoir testé 5000 distances), qu'en pensez vous ?

J'espère que vous pourrez m'aider, je suis vraiment débutant (et pas très bon en programmation, mais vous l'aurez compris)

LiliOp

Nombre de messages : 3
Date d'inscription : 24/01/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Aide pour un programme Empty Re: Aide pour un programme

Message par LiliOp le Ven 24 Jan 2014 - 21:27

Personne pour m'aider ? Sad

LiliOp

Nombre de messages : 3
Date d'inscription : 24/01/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Aide pour un programme Empty Re: Aide pour un programme

Message par LiliOp le Sam 25 Jan 2014 - 16:05

S'il vous plait, est-ce que vous sauriez comment je peux m'en sortir ? :/

J'ai modifié quelques lignes, maintenant la fonction permet bien de compter les populations, mais il me manque encore deux choses:

- comment créer un graphique 3D ou du type "volcano" (je ne sais pas quel est le type de données que lit volcano, ce n'est peut ê^tre pas une matrice ...), en supposant que l'on ait bien la matrice voulue.

-si possible, comment réduire le temps de calcul de cette matrice. Il est pour l'instant monstrueusement long ! j'ai compté 15 secondes pour remplir une matrice 50x50 avec un tableau de 50 lignes, donc il me faudrait presque 41 heures pour calculer ma matrice entière !
Je vais commencer par choisir une résolution moindre, par exemple 32 divisions (au lieu de 512), comme ça j'ai à remplir une matrice 32x32, et j'estime mon temps à une trentaine de minutes.

J'espère que vous pourrez m'aider  Smile

LiliOp

Nombre de messages : 3
Date d'inscription : 24/01/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Aide pour un programme Empty Re: Aide pour un programme

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum