2010-11-30 9 views
3

Je veux restreindre mes variables à certaines plages pour l'ensemble de mon cahier, est-il possible de le faire en une seule fois sans entrer une ligne différente de $ pour chaque variable?

Edit: Je veux définir le domaine des variables pour tous les calculs dans mon carnet (googler m'a aidé à formuler mes besoins mieux!)

+0

Juste pour comprendre un peu mieux. Supposons que vous limitiez [a, {0,1,2,3}] avec une certaine fonction Restreindre []. Quel est votre comportement attendu si vous faites plus tard a = 5? –

+0

Que diriez-vous de '$ Assumptions = Element [#, Reals] &/@ {a, b, c, d}' –

+0

@Yaroslav C'est en fait équivalent à '$ Assumptions = Element [{a, b, c, d}, Reals] ', mais pour des restrictions plus générales, vous avez raison. Un simple 'Map' devrait fonctionner. – Simon

Répondre

2

Si toutes vos variables vont être (par exemple) Real, puis vous pouvez intercept the creation of new symbols et ajouter cette hypothèse à $Assumptions. Par exemple.

$Assumptions = True; 
$NewSymbol = If[#2 === "Global`", 
    Print["Created new Global` variable named ", #1, ". It is assumed to be real."]; 
    $Assumptions = $Assumptions && Element[Symbol[#2 <> #1], Reals], 
    Null (* other, probably a system symbol is created *)] &; 

Ensuite, si vous créez un nouveau symbole que vous ne voulez pas être vrai, alors vous pourriez suivre avec quelque chose comme $Assumptions = Most[$Assumptions].


Note: Je ne prétends pas nécessairement que cette approche est une bonne idée ... Il est probablement préférable de définir simplement la $Assumptions pour les variables que vous allez utiliser. Cela peut être fait en utilisant Map programme, Table, etc.

+0

Je me souviens avoir travaillé dans une version de BASIC où le premier caractère d'un nom de variable définissait son type ... –

+0

@belisarius Ouais ... ça me rappelle quelques souvenirs. Il serait assez facile de modifier ma réponse pour se comporter comme ça. – Simon

+0

@simon & belisarius Si vous étiez obligé de travailler avec du C-code de style M $, vous verriez la pratique du nommage par type pris à son extrême horreur. Google/Wikipedia me dit qu'il a même un nom: [Notation hongroise] (http://en.wikipedia.org/wiki/Hungarian_notation). – Janus

3

définir globalement comme suit

$Assumptions = b >= 0 && c >= 0 && {u11, u13, u14} \[Element] Reals 

alors utiliser des variables définies globalement comme suit

Simplify[expression with global variables] 
Questions connexes