2010-12-11 15 views
1

Ich versuche, eine Funktion in MATLAB zu erstellen, die eine Klammer auf die Potenz von n erweitern wird, wobei n eine natürliche Zahl ist. Das ist, was ich habe, so weit:2 Variablen in einem Array

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; 

ich diesen Fehler, wenn ich es laufen:

??? 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); 

Wie speichere ich 2 Variablen in einem Array?

+0

Sollte 'expandb' eine Funktion der symbolischen Variablen oder eine Zahl sein? – Jacob

+0

Es sollte eine Funktion von 2 Variablen sein. Nehmen wir an ich muss expandieren (2x + 3y)^4 Ich würde expandb schreiben (2x, 3y, 4) und die Antworten wären von der Form (2x)^4 + ... – Mobix

+0

Gibt es einen Grund, warum du das nicht tust möchte die Funktion [EXPAND] (http://www.mathworks.com/help/toolbox/symbolic/expand.html) verwenden, dh expandieren ((2 * x + 3 * y)^4) ;? – gnovice

Antwort

1

Das Problem ist die Tatsache, dass, obwohl man zunächst v als symbolisches Objekt definiert SYMS Verwendung Du Neudefinition es eine Anordnung von Doppelwerten auf der nächsten Zeile zu sein. Dann indexieren Sie in der ersten Iteration Ihrer Schleife das erste Element von v und versuchen, einen symbolischen Ausdruck in dieses Element einzufügen. Der Fehler tritt auf, wenn MATLAB versucht, den symbolischen Ausdruck in double umzuwandeln, damit er dem Typ der anderen Elemente des Arrays v entspricht (was nicht möglich ist, weil im Ausdruck nicht spezifizierte symbolische Objekte wie x und y enthalten sind).

Die Lösung sollte unter erreichen, was Sie wollen:

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

habe es gestern selbst herausgefunden, aber danke für deine Bemühungen – Mobix