Calculer les centiles et valeurs NaN
Bonjour,
il me semble que le VI centiles calcul mal dès qu'il y a une valeur "NaN" dans le tableau d'entrée. En effet il faudrait que les valeurs "NaN" soient totalement ignorées dans le calcul d'un centile (celà n'a pas de sens de situer NaN vis à vis des autres nombres, ni dire que 10% des valeurs du tableau sont supérieures à NaN).
Actuellement on peut avoir NaN en sortie car le VI ne fait que trier le tableau et chercher dedans.
Cela semble cohérent que -Inf et +Inf soient considérés comme étant des valeurs et donc fassent partie du calcul du centile, mais NaN c'est totalement absurde.
Que pensez vous du fonctionnement de ce VI ?
Cordialement,
Résolu !
Accéder à la solution.
salut la valeur symbolique « NAN » pour signifier « Pas un nombre », de l’anglais « Not A Number », représente la valeur à virgule flottante produite par des opérations non valides ou des calculs erronés. Par définition les opérations à virgule flottante propagent NaN, toutes les opérations qui utilisent cette donnée donneront un résultat égal à NAN. Donc pour moi logique.
Si tu veux pas, tu supprimes les NAN avant la fonction
A+
Luc Desruelle | Voir mon profil | LabVIEW Code & blog
Co-auteur livre LabVIEW : Programmation et applications
CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW
Similar Messages
-
Calculating intersection of circles giving NaN first 'round'.
See attachment.
When I give the correct parameters as input, the output is always NaN.
However, when I run the VI again, the correct x,y coordinates are returned.
Obviously this is not correct behaviour I want in my VI. What did I do wrong here?
Thanks,
Marvin
Solved!
Go to Solution.
Attachments:
Calculate Intersection Circles.vi 32 KBmarvin117 wrote:
What's the point of local variables if they don't work that way?
Although local variables are often demonized, there are proper uses for them. Coming from a text-programming background, you're used to using variables and, presumably, not accustomed to things happening in parallel. The first thing I noticed, which is certainly not obvious to anyone, is that your local variables are read in every frame of the Sequence structure immediately, but the indicators aren't written until the calculations happen in the first frame. In this way, the Sequence structure is highly non-intuitive. National Instruments owes you an apology for that.
The second thing I noticed was, in your second frame, that you were using the results of calculations with a local variable in the same frame. You'll never be able to know that the calculations will happen before the locals are read. There's your classic race condition.
I (almost) only use local variables to update front panel control values. If I find myself using them to read control values, I hang my head and wish I had designed my code better. Try to think in terms of "The wire is the variable." It's almost always the right way to think about data, and data flow.
Jim
You're entirely bonkers. But I'll tell you a secret. All the best people are. ~ Alice -
Comment obtenir des calculs exacts avec la précision affichée (les arrondis engendrent des résultats faux)
Apprenez à vous servir d'un ordinateur.
Écrire "les arrondis engendrent des résultats faux" prouve simplement que vous n'avez rien compris à ce que vous faites.
Quand vous demandez à Numbers d'afficher les nombres avec deux décimales, cela s'applique à l'affichage, pas au contenu des cellules.
1234,567 sera affiché 1234,57 mais la valeur stockée restera égale à 1234,567.
De ce fait un gamin de cinq ans peut comprendre que la somme des arrondis affichés peut être différente de l'arrondi de la somme des valeurs stockées.
La solution est simple et a été décrite ici à de multiples reprises : travailler de façàn cohérente.
Si vous devez calculer la somme de valeurs arrondies, faites en sorte que les valeurs stockées soient égales aux valeur affichées.
Calculer un montant de TVA avec la formule
= brut * 0,196 est ridicule puisqu'on a de fortes chances d'avoir trois chiffres après la virgule.
Le véritable montant de la TVA se calcule avec
=ARRONDI(brut * 0,196;2)
Prenez-soin d'utiliser des formules correctes et vous aurez des résultats corrects ou plutot des résultats correspondant à votre attente.
Yvan KOENIG (VALLAURIS, France) jeudi 11 août 2011 12:40:45
iMac 21”5, i7, 2.8 GHz, 4 Gbytes, 1 Tbytes, mac OS X 10.6.8 and 10.7.0
My iDisk is : <http://public.me.com/koenigyvan>
Please : Search for questions similar to your own before submitting them to the community
To be the AW6 successor, iWork MUST integrate a TRUE DB, not a list organizer ! -
Stockage de données numériques dans un tableau pour pouvoir les traiter
Bonjour,
Je suis actuellement en stage, et mon sujet est : "Automatisation d'un banc de mesure du bruit émis". Je travaille essentiellement avec LabVIEW, et j'ai une question au niveau des tableaux. Alors en faite, j'utilise un analyseur de spectre et je souhaite récuperer le bruit. La fonction pour récuperer le bruit se trouve dans une boucle while et ressort seulement une donnée numérique par boucle, ce que je souhaite c'est donc de pouvoir la stocker à chaque boucle dans un tableau, puis de faire la moyenne de tableau, cependant je n'arrive pas à effectuer cela, j'ai essayé de créer un tableau mais je ne peux pas lui mettre en entrée une valeur à chaque fois, donc si vous savez comment je pourrais procéder je suis preneur !
Je vous remercie d'avance,
Cdt,
Florian
Solved!
Go to Solution.Bonjour Flod29,
Une solution serait de créer un registre à décalage sur un tunnel de sortie de votre boucle afin de récupérer les valeurs des boucles précédentes et de calculer à partir de ces valeurs une moyenne (cf Capture1).
Une deuxième option serait de changer le mode du tunnel de sortie de votre boucle en Indexation afin de récupérer toute les valeurs dans un tableau en sortie de boucle (cf Capture 2).
Je vous souhaite une bonne journée,
Cordialement,
Sabri JATLAOUI - Certified LabVIEW Developer
Attachments:
Capture 1.PNG 5 KB
Capture 2.PNG 9 KB -
Constante numérique "absence de valeur"
Bonjour,
J'ai une application d'acquisition de données qui me renvoie parfois une valeur fausse, facile à identifier.
Je souhaiterais la remplacer par une valeur "sans valeur", une sorte de case vide qui n'affecterait pas la suite des calculs.
J'ai essayé NaN, mais ça ne convient pas (la moyenne d'un tableau contenant un NaN donne NaN).
Résolu !
Accéder à la solution.Bonjour, Si tu arrives à identifier la valeur fausse il te suffit te la supprimer de ton tableau de valeur (si tu as un tableau pour tes acquisitions) sinon tu peux mettre une structure condition si tu as la valeur fausse tu ne fais pas ton calcul sinon tu le fais.
Bon courage.
Philippe B.
Certified Associate Developer / Dépt Moyens d'essais
www.ingenia-system.com -
Récupération des valeurs de position Y d'un curseur en mode multi-tracé
Bonjour, J’utilise Labview 8.5, je voudrai savoir comment récupérer les valeurs des positions Y d'un curseur lorsqu'il est en mode multi-tracé. Lorsque l'on fait apparaître la légende des curseurs, nous pouvons voir ces différentes valeurs des y selon les tracés (voir photo jointe). Dans mon cas, j'aimerai pouvoir les récupérer pour les utiliser.Est-ce possible ? Si oui, comment? Merci d'avance
Attachments:
valeur position.JPG 147 KBOui j'ai bien trouvé le paramètre "liste de curseurs ". Mais mon problème est que celui-ci renvoie un tableau de curseur. Chaque curseur est composé par un cluster: celui-ci permet entre autres de récupérer la position en x et y du curseur. Malheureusement en passant par ce système il ne nous est pas possible de récupérer les valeurs Y de chaque tracé pour un même point X lorsque ce curseur est configuré en multi-tracé. En effet en regardant le cluster, les positions X et Y ne sont pas des tableaux !!! Il prend alors à chaque fois la valeur du tracé actif. C'est étonnant que l'on ne puisse pas récupérer facilement ces valeurs. Néanmoins, j'ai du trouvé une façon de récupérer les différentes valeurs, mais elle me paraît bien lourde.Je n'utilise pas le curseur en mode multi-tracé mais seulement en mode tracé unique. Et dans une boucle, je viens récupérer la donnée Y en activant sur le curseur mes différents tracés un part un (grâce à "plot" de "liste de curseurs ").Cela me permet de récupérer les valeurs Y en fonction de X. Mais par contre d'un point de vue graphisme je perds l'atout de l'affichage en multi tracé où je pouvais avoir sur chaque tracé un point correspondant à l'endroit de la mesure. Y aurait-il une façon plus simple de faire me permettant de rester en mode multi-tracé?
Merci d'avance -
Afficher moyenne toute les secondes
Bonjour,
j'acquéri 4 signaux analogiques provenant d'afficheurs numériques via une carte ni usb 6008.
les signaux ètant brruités et et les variations de valeur moyenne étant lente, j'éssaie d'afficher toutes les 250ms la moyenne sur 4 secondes du signal.
Est-ce que cela est possible car je n'arrive pas a trouver de solution avec LV.
Cordialement
Justin
Résolu !
Accéder à la solution.Il y a un VI qui fait la moyenne Pt par Pt. Tu indiques ta nouvelle valeur, le nombre de points pour la moyenne glissante et voilà...
Cordialement,
Micaël DA SILVA -
Balayage et conversion d'une chaine "scientifique" en valeurs "décimales"
Bonjour à tous,
Je souhaite votre aide pour un petit pb que je n'arrive pas à résoudre.
Z 7.2295E+05,Y 1.3832E-06,PHASE -89.09,CS 2.2018E-10,CP 2.2012E-10...
Je souhaiterais balayer la chaine ci-dessus pour en retirer les valeurs"scientifiques" et les convertir en valeur "décimales" pour les mettre dans une par une dans un tableau.
J'ai essayé quelques vi de convertion mais mes résultats sont très moyens ! Il me manque toujours un morceau dans le tableau ...
En fait, la chaine fait une 20 ène de mesures avec 20 valeurs au format scientifique.
Merci.
CordialementBonjour,
Petite proposition. Je reste dispo si tu as des questions
Maxime
Certified LabVIEW Associate Developper
Pièces jointes :
ConversionSciDec.vi 12 KB -
Graphique double échelle et calcul dynamique de l'échelle
Merci de votre aide
Bonjour,
J’ai un graphique double échelle
Echelle A Minimum 0 Maximum (Variable Longueur)
Echelle B Minimum 0 x Coeff Maximum (Variable Longueur) x Coeff
Au départ, pour l’échelle B, je calcule les deux bornes ensuite j’utilise ‘Echelle Active des X’ avec le propriété 1 pour sélectionner l’échelle B, puis ‘Xscale.RngStart’ de région’ et ‘Xscale.Maximum’
Par contre, si en cours de route, je modfie la visu de l’échelle graphique 0, ça ne modifie pas l’échelle graphique 1. Normal, je ne fais pas le calcul
Pour synthétiser ma demande, ce que je souhaite c’est que si je modifie l’échelle graphique 0 ou 1, ça modifie la 2ème échelle en conséquence. Je cherche une méthode simple, et ne pas à chaque mesure, aller regarder l’échelle 0, regarder s’il y a eu modif, et vice versa avec l’échelle 1.
J’espère que ma demande est assez explicite.Je pense que tu aura tes réponses ici :
http://forums.ni.com/t5/Discussions-de-produit-de-NI/Modifier-dynamiquement-les-%C3%A9chelle-d-un-gr...
à +
Dcharala, Ingénieur en instrumentation, pratiquant de LabVIEW 2010 sur Windows XP. -
Use of applescript in numbers to automatically analyze data?
Hi all,
I am trying to figure out if it is possible to use applescript and numbers to achieve the following:
(1) Import a CSV file
(2) Work out an average and standard deviation for particular columns of data in that CSV file
(3) Copy and paste out those averages and standard deviations to a separate numbers file, along with the name of the original data file, so in the end I have a file that contains a number of rows, each one containing the results for each data file and the file name.
The files (from an analytical instrument) are all the same, so ideally I could use automator and/or applescript to automatically run through a directory of csv files to achieve this.
I know only a small amount of very basic programming. I don't want someone to write this for me, but if someone could offer some pointers or examples that would be very helpful. Or tell me that what I am trying to do is foolish, and use something else instead.
ThanksAs I got a sample file, I was able to build a script matching the full requirements.
Here is a revised version which may be useful for other users.
--[SCRIPT average&stdev_CSV]
Enregistrer le script en tant que Script : average&stdev_CSV.scpt
déplacer le fichier ainsi créé dans le dossier
<VolumeDeDémarrage>:Users:<votreCompte>:Library:Scripts:Applications:Numbers:
Il vous faudra peut-être créer le dossier Numbers et peut-être même le dossier Applications.
aller au menu Scripts , choisir Numbers puis choisir average&stdev_CSV
Sélectionner un dossier contenant des fichiers CSV.
Le script ouvre ces fichiers dans Numbers,
calcule les valeurs MOYENNE() et ECARTYPE()
écrit celles-ci avec le nom du document dans un fichier texte.
Après traitement de tous les fichiers le fichier texte et ouvert dans Numbers.
On peut également enregistrer le script en tant que progicile (application sou 10.6.x).
Il suffira alors de glisser/déposer l'icone du dossier à traiter sur celle du script_application.
--=====
L'aide du Finder explique:
L'Utilitaire AppleScript permet d'activer le Menu des scripts :
Ouvrez l'Utilitaire AppleScript situé dans le dossier Applications/AppleScript.
Cochez la case "Afficher le menu des scripts dans la barre de menus".
--=====
Save the script as a Script: average&stdev_CSV.scpt
Move the newly created file into the folder:
<startup Volume>:Users:<yourAccount>:Library:Scripts:Applications:Numbers:
Maybe you would have to create the folder Numbers and even the folder Applications by yourself.
go to the Scripts Menu, choose Numbers, then choose "average&stdev_CSV"
Select a folder containing CSV files.
The script open them in Numbers,
calculate the AVERAGE() and STDEV() values
write them with the file name in a text file.
When all files are treated, the text file is opened in Numbers.
You may also save the script as an application package (application under 10.6.x).
Then drag & drop the icon of the folder to treat on the scipt_application icon.
--=====
The Finder's Help explains:
To make the Script menu appear:
Open the AppleScript utility located in Applications/AppleScript.
Select the "Show Script Menu in menu bar" checkbox.
--=====
Yvan KOENIG (VALLAURIS, France)
2010/06/10
2010/06/11 -- now read the csv file only once
--=====
property permis : {"public.comma-separated-values-text", "public.csv"}
property AVERAGE_loc : missing value
property STDEV_loc : missing value
property delim : missing value
property deci : missing value
property altDelim : missing value
property altDeci : missing value
property dossier_temporaire : missing value
property mon_Rapport : missing value
--=====
Entry point used when we double click the script's icon
or when we call it from the Scripts menu .
on run
if my parleAnglais() then
set le_prompt to "Choose a folder containing CSV file …"
else
set le_prompt to "Choisir un dossier contenant des fichiers CSV …"
end if -- parleAnglais
my main(choose folder with prompt le_prompt without invisibles)
end run
--=====
Entry point used when we drag & drop a folder icon on the application_script's icon
on open sel
my main(sel)
end open
--=====
on main(selected_item) -- it's an alias
local isFolder, nomdurapport, les_fichiers, type_ID, un_fichier, nombrededocuments, nomdutableur
the selected folder's pathname
set selected_item to selected_item as text
tell application "System Events"
set isFolder to class of disk item selected_item is folder
end tell -- System Events
if not isFolder then
if my parleAnglais() then
error "You must select a folder containing CSV file …"
else
error "Vous devez choisir un dossier contenant des fichiers CSV …"
end if -- parleAnglais
end if -- not isFolder
Init once variables which will be used later.
set dossier_temporaire to (path to temporary items) as text (* property *)
set AVERAGE_loc to my getLocalizedFunctionName("Numbers", "AVERAGE") & "(" (* property *)
set STDEV_loc to my getLocalizedFunctionName("Numbers", "STDEV") & "(" (* property *)
set {delim, deci, altDelim, altDeci} to my getLocalized_Delimiters() (* properties *)
set nomdurapport to "resume" & my dateTimeStamp() & ".txt" (* locale *)
set mon_Rapport to dossier_temporaire & nomdurapport (* property *)
Extract the list of items stored in the selected folder.
Create the resumeyyyymmddhhmmss.txt temporary file.
tell application "System Events"
set les_fichiers to every disk item of folder selected_item
make new file at end of folder dossier_temporaire with properties {name:nomdurapport}
end tell
Scan the items stored in the folder.
Skip the folders and documents which aren't csv ones.
repeat with un_fichier in les_fichiers
tell application "System Events"
if class of un_fichier is folder then
set type_ID to "Oops, I‘m a folder" (* so it will not be deciphered *)
else
set type_ID to type identifier of un_fichier
set un_fichier to path of un_fichier
end if
end tell -- System Events
if type_ID is in my permis then my traiteun_fichier(unfichier)
end repeat -- with un_fichier
The scan is done, open the resumeyyyymmddhhmmss.txt temporary file in Numbers.
tell application "Numbers"
set nombrededocuments to count of documents
open mon_Rapport
repeat while (count of documents) = nombrededocuments
delay 0.2
end repeat
set nomdutableur to name of document 1
Set cells format to the Scientific one but I can't define the number of decimals !
tell document 1 to tell sheet 1 to tell table 1
set format of range ("B1 : " & name of last cell) to scientific
end tell
save document 1 in (selected_item & nomdutableur)
end tell -- Numbers
Delete the temporary text file
tell application "System Events" to delete disk item mon_Rapport
Reset properties so there content will not be stored in the script
set AVERAGE_loc to missing value
set STDEV_loc to missing value
set delim to missing value
set altDelim to missing value
set deci to missing value
set altDeci to missing value
set dossier_temporaire to missing value
set mon_Rapport to missing value
end main
--=====
on traiteunfichier(unFichier) (* text item *)
local dossierdetravail, nomdu_csvtemporaire, csv_temporaire, utile, cnt, part2
local |dernière|, nombreDeDocuments, nomdutableur, laPlage
tell application "System Events"
tell disk item unFichier
set dossierdetravail to path of container -- of disk item unFichier
set nomdu_csvtemporaire to name -- of disk item unFichier
end tell -- unFichier
if nomdu_csvtemporaire does not end with ".csv" then set nomdu_csvtemporaire to nomdu_csvtemporaire & ".csv"
set csv_temporaire to (dossier_temporaire & nomdu_csvtemporaire)
if exists disk item csv_temporaire then delete disk item csv_temporaire
make new file at end of folder dossier_temporaire with properties {name:nomdu_csvtemporaire}
end tell -- System Events
Read the entire file
set utile to (read file unFichier)
Check that it's matching our requirements. I'm not sure that the second test is always valid.
if (utile contains "#=-=-=-=-=-=-=-=-=") and utile contains "#=-=-=-=-=-=-=-=-=End ./conf/ccia" then
set cnt to offset of "#=-=-=-=-=-=-=-=-=" in utile
Extract the second part which isn't formatted as the first one.
set part2 to text cnt thru -1 of utile
Extract the first part to decipher it.
set utile to (text 1 thru (cnt - 1) of utile) as text
Grabs the index of lower row
set |dernière| to count of (paragraphs of utile)
An ultimate test to be sure that the file is for us.
if (|dernière| > 0) and text -13 thru -2 of (paragraph 6 of utile) is "NFitsAvg'd" then
Normalize the datas according to the local settings
if not ((utile contains delim) and utile contains deci) then
if utile contains altDelim then set utile to my remplace(utile, altDelim, delim)
if utile contains altDeci then set utile to my remplace(utile, altDeci, deci)
end if
Write the normalized beginning and the untouched part2 in a temporary csv file.
write utile to file csv_temporaire
write part2 to file csv_temporaire starting at eof
Open the temporary csv in Numbers
tell application "Numbers"
set nombreDeDocuments to count of documents
open csv_temporaire
repeat while (count of documents) = nombreDeDocuments
delay 0.2
end repeat
set nomdutableur to name of document 1
tell document 1 to tell sheet 1 to tell table 1
Insert a row at top to insert the required formulas.
add row above first row
Insert the formulas calculating the AVERAGEs and the STDEVs .
repeat with c from 2 to 16 by 2
set laPlage to (name of cell 8 of column c) & " : " & name of cell |dernière| of column c
set value of cell 1 of column c to "=" & AVERAGE_loc & laPlage & ")"
set value of cell 1 of column (c + 1) to "=" & STDEV_loc & laPlage & ")"
end repeat -- with c
Extract the calculated values to build a new row in the resume.
set une_ligne to {nomdu_csvtemporaire}
tell row 1
repeat with c from 2 to 17
copy (value of cell c) as text to end of une_ligne
--copy (value of cell c) to end of une_ligne
end repeat
end tell -- row 1
end tell -- document
Save the new Numbers document.
I don't know if it is useful but it's easy to remove or disable the instruction.
save document 1 in (dossierdetravail & nomdutableur)
close document 1 saving no (* So, if you disable the Save instruction, it will close quietly *)
end tell -- Numbers
Write the new row in the resume text file.
write (my recolle(une_ligne, tab) & return) to file mon_Rapport starting at eof
end if -- (|dernière| > 0) or
end if -- read file unFichier…
Delete the temporary csv file
tell application "System Events" to delete file csv_temporaire
end traiteunfichier
--=====
Creates a new iWork document from the Blank template and returns its name.
example:
set myNewDoc to my makeAnIworkDoc(theApp)
on makeAnIworkDoc(theApp)
local t, n
if theApp is "Pages" then
set commun to "iWork '" & my get_iWorkNum("Pages") & ":Pages.app:Contents:Resources:Templates:Blank.template:"
try
set t to ((path to applications folder as text) & commun) as alias
on error
set t to ("Western 2:Applications communes:iWork '" & commun) as alias
end try
else if theApp is "Numbers" then
set commun to "iWork '" & my get_iWorkNum("Numbers") & ":Numbers.app:Contents:Resources:Templates:Blank.nmbtemplate:"
try
set t to ((path to applications folder as text) & commun) as alias
on error
set t to ("Western 2:Applications communes:" & commun) as alias
end try
else
if my parleAnglais(theApp) then
error "The application “" & a & "“ is not accepted !"
else
error "l’application « " & a & " » n’est pas gérée !"
end if
end if
tell application theApp
set n to count of documents
open t
repeat until (count of documents) > n
delay 0.1
end repeat
set n to name of document 1
end tell -- theApp
return n
end makeAnIworkDoc
--=====
on dateTimeStamp()
return (do shell script "date +_%Y%m%d-%H%M%S")
end dateTimeStamp
--=====
Set the parameter delimiters which must be used in Numbers formulas
on getLocalized_Delimiters()
if character 2 of (0.5 as text) is "." then
return {",", ".", ";", ","}
else
return {";", ",", ",", "."}
end if
end getLocalized_Delimiters
--=====
on get_iWorkNum(a)
local verNum
tell application a to set verNum to item 1 of my decoupe(get version, ".")
if (a is "Numbers" and verNum is "2") or (a is "Pages" and verNum is "4") then
return "09"
else
return "11"
end if
end get_iWorkNum
--=====
Useful to get function's localized name if we need to build formulas
examples:
set OFFSET_loc to my getLocalizedFunctionName("Numbers", "OFFSET")
set ADDRESS_loc to my getLocalizedFunctionName(theApp, "ADDRESS")
set INDIRECT_loc to my getLocalizedFunctionName(theApp, "INDIRECT")
on getLocalizedFunctionName(theApp, x)
return my getLocalizedName(theApp, x, (path to application support as text) & "iWork '" & ¬
my get_iWorkNum(theApp) & ":Frameworks:SFTabular.framework:Versions:A:Resources:")
end getLocalizedFunctionName
--=====
on getLocalizedName(a, x, f)
tell application a to return localized string x from table "Localizable" in bundle file f
end getLocalizedName
--=====
on parleAnglais()
local z
try
tell application "Numbers" to set z to localized string "Cancel"
on error
set z to "Cancel"
end try
return (z is not "Annuler")
end parleAnglais
--=====
on decoupe(t, d)
local TIDs, l
set TIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to d
set l to text items of t
set AppleScript's text item delimiters to TIDs
return l
end decoupe
--=====
on recolle(l, d)
local TIDs, t
set TIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to d
set t to l as text
set AppleScript's text item delimiters to TIDs
return t
end recolle
--=====
replaces every occurences of d1 by d2 in the text t
on remplace(t, d1, d2)
local TIDs, l
set TIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to d1
set l to text items of t
set AppleScript's text item delimiters to d2
set t to l as text
set AppleScript's text item delimiters to TIDs
return t
end remplace
--=====
--[/SCRIPT]
Yvan KOENIG (VALLAURIS, France) vendredi 11 juin 2010 19:01:46 -
SUDOKU (résolutio​n avec LV)
Résolution des Sudoku avec LV.
Ce VI utilise un algorithme de réflexion associé à un algorithme de backtraking. (100% home made)
Il agit comme nous le ferions nous mêmes, par déductions, éliminations, recoupements
et ... retour arrière en cas de "cul de sac".
Les Sudoku "faciles" utilisent peu le backtraking. (pas du tout pour certains)
Plus un Sudoku est difficile, plus il possède de solutions différentes.
Celui que j'ai placé en "valeur par défaut d'entrée" est un exemple de Sudoku très difficile.
Une horreur à résoudre, pour reprendre les termes de certains (je l'ai trouvé sur le Net)
Ce Sudoku possèdent 2756 solutions différentes.
Ce VI trouve la 1ere solution en 23 ms ... et les 2756 en un peu plus de 9 sec (Q6600 - 2.6Ghz)
Possibilités:
input - votre sudoku à résoudre.
trouver une solution (la 1ere)
trouver toutes les solutions.
Faire pause (une fois que vous avez appuyé sur Pause, le petit bouton blanc permet de visualiser les solutions une par une)
Le VI principal est : SUDOKU.vi
Pour le tester rapidement ... lancer le vi et run
1) start : il vous trouve la 1ere solution
2) basculer l'interrupteur sur "all solutions" ... start ... il trouvera les 2756 solutions.
voilou.
Sur ce coup là ... me suis encore bien amusé
Résolu !
Accéder à la solution.
Pièces jointes :
main = SUDOKU.vi.zip 194 KBIl y a une règle pour interdire les groupes non anglophone?
1) mon dieu ... que cela est bien difficle d'exprimer quelque chose ... de simple et de simplement dit.
Je comprends que ceux qui travaillent sous LabVIEW tout ou partie de la journée aient envie de faire autre chose une fois chez eux.
2) Je comprends parfaitement également, Il s'agissait d'un simple constat. (voir point 1)
https://decibel.ni.com/content/docs/DOC-6108
J'ai trouvé ceci sur le Net ... joli morceau de code ! très jolie cette solution récursive ...
Mais ... mon algo va 5 fois plus vite. Résolution de la 1ere solution : 138ms contre 27ms.
Cet algo récursif utilise également le backtraking, mais devant une impasse, il essaye "simplement" le nombre suivant.
De mon côté, je calcule les possibilités pour chaque cases et à chaque instant,
et quand je reviens en arrière, je ne passe pas "simplement" au nombre suivant ... mais au nombre suivant "possible" ! -
Bonjour,
D’après ce que je sais, la sous-VI de LabVIEW qui nous génère un motif de rampe peut le faire à la base, soit avec un nombre d’échantillon, soit avec un delta.
Donc, toujours, nous aurons une rampe qui tient ses éléments également espacés.
Mon problème ce que je dois générer une rampe qui possède les deltas dedans l’écart, variables. Pour cela, j’ai le premier élément, le dernier ainsi que le nombre d’échantillons, et l’information du delta pour les premières valeurs et pour les dernières valeurs (le delta pour les valeurs au milieu de cet écart doit être plus au moins une moyenne des deltas de l’extrémité).
Par exemple : Je sais que le première élément doit être 5, et le dernière 355. Les premiers éléments avec un delta de 5 et les dernières avec un delta de 10, au milieu, un delta moyen à peu près, (tout en sachant le nombre d’échantillon total).
Donc, on aura :
5, 10, 15, … 200, 207.5, 215, …. 335, 345, 355.
Ce qui serait superbe, ce d’avoir une transition entre les des deltas continus (avec un incrément tout petit), comme cela :
5, 10.4, 16, … 200, 207.5, 215.6, …. 333,8, 344,5, 355.
N’hésitez pas à me faire des corrections, je suis tout débutant.. =)
Je vous remercie pour toute l’attention.
CabralBonjour Cabral,
Hélas créer un delta modulable pour une rampe n'est pas du tout quelque chose d'immédiat. La meilleure solution serait de découper la rampe initiale et d'en faire des rampes continues par morceau dont le Delta est fixe sur chaque "segment".
J'ai quand même été plus loin et propose ici une version polynomiale de la rampe. Le polynôme est d'ordre 2 ici mais on peut facilement reprendre le principe pour avoir un ordre plus élevé.
On a les même paramètres de rampe (init, final, et step), plus la force du polynôme entre 0 et 1. Une valeur de 0.5 donne une rampe linéaire. Plus on s'éloigne de cette valeur, plus la différence à mi-chemin entre la rampe linéaire et le polynôme est élevée. Attention à ne pas dépasser les 0.2 et 0.8 car on n'a plus une monotonie du motif.
Derrière, le calcul est marticielle/polynomiale donc ce n'est pas chose aisée, comme dit en début de poste.
Cdt,
Eric
Eric M. - Application Engineering Specialist
Certified LabVIEW Architect
Certified LabWindows™/CVI Developer
Pièces jointes :
Progressive_Ramp.vi 21 KB -
PB option d'enregistrement Signal Express
Bonjour,
j'essaye de faire avec Signal Express le type de travail suivant :
+ Enregistrer une tension pendant 5s, Calculer la moyenne des valeurs acquises, enregistrer ces valeurs dans un fichier.
+ Je souhaite faire cet enregistrement toutes les heures pendant 24h.
Pour réaliser ces opérations je configure dans Signal Express les conditions de démarrage et d'arrêt de l'onglet "Option d'enregistrement". Mais quoi que je fasse l'enregistrement ne se fait qu'une seule fois...!!!!!!!
Dans l'exemple de la pièce jointe, j'essaye de démarrer immédiatement l'enregistrement pendant 5s de ma tension, toutes les 30s et cela 3 fois. Mon paramétrage ne fonctionne pas, l'enregistrement ne se fait qu'une seule fois !!!
Est-ce que ces fonctions de Signal Express fonctionnent réellement ?
Si oui comment faire pour les utiliser correctement ?
Merci d'avance pour vos réponses.
Pièces jointes :
Image_Signal_Express.JPG 205 KBBonjour,
J’ai fait le
test sur mon ordinateur. L’acquisition et l’enregistrement fonctionnent très
bien pendant 5 seconde toutes les 30seconde
3 fois.
Avez-vous bien
spécifié la condition d’arrêt (durée 5s) ?
Avez-vous bien
coché les signaux que vous voulez enregistrer dans l’onglet Sélection des
signaux ?
Sur votre
imprime écran, il est possible de voir un warning à coté de la tache de DAQmx,
pouvez vous connaitre la raison de celui-ci ?
Cordialement
Samuel G.
Samuel G. | Application Engineer Team Leader
Certified LabVIEW Developer
National Instruments France
#adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet -
Comment créer une discontinuité dans un graphe XY
Bonjour,
Est il possible de créer dans un graphe XY une trace discontinue ?
Merci d'avance pour toute proposition.
Résolu !
Accéder à la solution.suite
ci joint un exemple , il suffit d'utiliser les valeurs "Nan"
Cdt
Tinnitus
CLAD / Labview 2011, Win Xp
Mission d'une semaine- à plusieurs mois laissez moi un MP...
RP et Midi-pyrénées .Km+++ si possibilité de télétravail
Kudos always accepted / Les petits clicks jaunes sont toujours appréciés
Don't forget to valid a good answer / pensez à valider une réponse correcte
Pièces jointes :
xy disc.vi 67 KB -
Incrustation texte ou data sur une vidéo
Bonjour à tous,
Mon projet avance, mais je coince sur un petit problème !
En partant d'une vidéo, je la décompose en image, puis pour chaque image, je trouve le centre d 'un objet. Suite à un calcul je trouve une valeur qui m'interesse par rapport à ma problèmatique.
J'aimerais incruster cette valeur (qui peut, je pense, etre dans n'importe quel format !) sur toute la longueur de la vidéo, (et faire lire cette vidéo ensuite au ralenti...).
Auriez vous une solution, j'ai beau chercher je ne vois pas trop comment faire ?
merci pour votre aide
PS : j'ai le module visionAvec quelles version de labview travailles-tu ?
J'a créé une application pour mon laboratoire sur une machine de traction qui filme (*) des essais de compression et incruste sur les images (image par image) les valeurs de force et déformation ainsi que le graphique associé.
(*) : Il ne s'agit pas d'un "film" à proprement parler. Je fais de l'acquisition image par image. Chaque image est sauvegardée sur un disque et le programme crée un tableau de clusters contenant les informations pour chaque image :
- nom/chemin du fichier
- horodatage
- Valeur de force
- Valeur de déformation
1ère photo : image sans infos
2ème image : image avec infos.
Si cela peut t'interesser.
Pièces jointes :
20.jpg 143 KB
20.jpg 179 KB
Maybe you are looking for
-
When uploading photos from PC to iPhoto,
hi, i am a new mac user, so am slowly finding my way. i am currently transferring photos from my PC over to iphoto. what I want to know is do i need to save the photo folder on hard drive if they are already uploaded into iPhoto? also, where does iph
-
PDF convert to doc or docx, does not!
I thought I was on a winner, surely adobe could do it! Results are unusable, tested five files nothing to serious, a few pages, ANY adobe program CAN read them, the converter can't and does get "some" of the simplest text, layout is completely blown
-
How to import my plugins from Adobe Photoshop CC into Adobe Photoshop CC (2014)
I thought the whole point of signing up to CC was that I would always have the tools I used and the upgrades would be incremental. Now I have a whole new programme - and my third-party plugins and filters are not available! Am I missing something, or
-
Issue in FM 'NUMBER_GET_NEXT'
Hello, I am gettin a problem with the FM 'NUMBER_GET_NEXT'. In this bit of code; CALL 'ThNoGet' ID 'BNRIV' FIELD BNRIV ID 'NO' FIELD G_NOIVBUFFER ID 'QUAN' FIELD P_QUANTITY ID 'PERCENT
-
Ibooks 3 update doesn't work on iOS 5
Hello, the Ibooks 3 update on my 1st gen Ipad doesn't work ! It always crashes. I'm on ios 5. Please help !!! Frédéric