2011-02-04 5 views
0

J'essaye de créer une fonction qui retourne une matrice contenant une variable "l" qui est une variable indépendante à balayer pour un tracé plus tard. Je voudrais calculer "phi" basé sur les entrées de l'utilisateur qui comprennent "n" et "d", alors j'utiliserais "n", "d", et "phi" pour trouver "a", "b", "c", et "d" pour créer une matrice "m" avec. Cette matrice "m" sera une fonction de "l".MATLAB - fonction matricielle avec une variable indépendante?

phi = 2*pi*n*d/l; 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

Je ne suis vraiment pas profiter du style de codage de Matlab par rapport à C++ et Python ... Comment qualifieriez-vous les gars implémenter cette fonctionnalité?

Résumé: Je veux une fonction qui retourne une matrice qui contient une variable indépendante à balayer pour un tracé plus tard.

Répondre

2

Voulez-vous dire utiliser le symbolic toolbox?

Si oui, je suppose que vous voulez:

phi = 2*pi*n*d/sym('l'); 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

Et comme un peu de côté, vous êtes au courant de votre aliasing de d? Est-ce intentionnel?

+0

Que voulez-vous dire par « aliasing de d "? – user603479

+0

vous utilisez 'd' dans votre définition de' d', mais réaffectez 'd' pour construire votre matrice' m'. Il serait préférable de ne pas utiliser le même nom de variable pour des valeurs sémantiquement différentes dans la même portée. – wich

+0

Gotcha. Je n'ai pas remarqué ça. – user603479

3

Vous pouvez deux options.

1) Créer une fonction qui renvoie la matrice à base de n, d, l

BuildM = @(n,d,l)[cos((2*pi*d*n)/l),(sin((2*pi*d*n)/l)*i)/n;n*sin((2*pi*d*n)/l)*i,cos((2*pi*d*n)/l)]; 

BuildM(4,2,100) %ans=[0.8763,0.1204i;1.9270i,0.8763] 

2) Utilisez la boîte à outils symbolique (si possible)

syms n,d,l 
phi = 2*pi*n*d/l; 
a = cos(phi); 
b = 1i*sin(phi)/n; 
c = 1i*n*sin(phi); 
d = cos(phi); 
m = [a b;c d]; 

subs(m,{'n','d','l'},{4,2,100}) %ans=[0.8763,0.1204i;1.9270i,0.8763] 
+0

Est-ce que la solution pour 1) permet que l soit un symbole? – user603479

+0

Je vais multiplier une tonne de ces matrices "m" l'une par l'autre, chacune contiendra la variable "l". Ensuite, plus tard, je vais tracer le résultat et "l" va être varié. – user603479

+0

Oui, vous pouvez combiner des poignées de fonction (la syntaxe '@') avec des variables symboliques. – ja72

Questions connexes