2010-12-11 4 views
1

J'essaye de créer une fonction dans MATLAB qui étendra une parenthèse à la puissance de n, où n est un nombre naturel. Voilà ce que j'ai jusqu'à présent:2 variables dans un tableau

function expandb = expandb(x,y,n) 
z = my_bincoeff1(n);; 
syms v x y 
v=1:n+1 
for i=1:n+1 
    v(i)=z(i)*x.^(n-i+1)*y.^(i-1); 
end 
a=0 
for i=1+n+1 
    a=a+v(i) 
end 

expandb = a; 

Je reçois cette erreur quand je le lance:

??? The following error occurred converting from sym to double: 
Error using ==> mupadmex 
Error in MuPAD command: DOUBLE cannot convert the input expression into a double 
array. 
If the input expression contains a symbolic variable, use the VPA function instead. 

Error in ==> expandb at 6 
    v(i)=z(i)*x.^(n-i+1)*y.^(i-1); 

Alors, comment puis-je stocker 2 variables dans un tableau?

+0

Si 'expandb' une fonction de variables symboliques ou plusieurs? – Jacob

+0

Il devrait être une fonction de 2 variables. Disons que je dois développer (2x + 3y)^4 J'écrirais expandb (2x, 3y, 4) et les réponses seraient de la forme (2x)^4 + ... – Mobix

+0

Y at-il une raison pour laquelle vous n'avez pas voulez utiliser la fonction [EXPAND] (http://www.mathworks.com/help/toolbox/symbolic/expand.html), c'est-à-dire développer ((2 * x + 3 * y)^4) ;? – gnovice

Répondre

1

Le problème est le fait que, même si vous définissez d'abord v comme un objet symbolique en utilisant SYMS, vous redéfinissez à être un tableau de valeurs doubles sur la ligne suivante. Ensuite, dans la première itération de votre boucle, vous indexez le premier élément de v et essayez de placer une expression symbolique dans cet élément. L'erreur se produit lorsque MATLAB essaie de convertir l'expression symbolique en type double pour correspondre au type des autres éléments du tableau v (ce qu'il ne peut pas faire car il existe des objets symboliques non spécifiés comme x et y dans l'expression).

La solution ci-dessous doit accomplir ce que vous voulez:

function v = expandb(x,y,n) 
    z = my_bincoeff1(n); 
    syms v x y 
    v = z(1)*x.^n; %# Initialize v 
    for i = 2:n+1 
    v = v+z(i)*x.^(n-i+1)*y.^(i-1); %# Add terms to v 
    end 
end 
+0

l'a compris hier, mais merci pour vos efforts – Mobix