2010-12-11 31 views
1

我想在MATLAB中創建一個函數,它將展開一個括號給n的冪,其中n是一個自然數。這是我到目前爲止有:數組中的2個變量

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

那麼,如何存放2個變量數組:

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; 

當我運行它,我得到這個錯誤?

+0

應該'expandb'是一個象徵性的變量或多項功能? – Jacob 2010-12-12 01:27:52

+0

它應該是2個變量的函數。假設我必須展開(2x + 3y)^ 4我會寫expandb(2x,3y,4)並且答案將是(2x)^ 4 + ... – Mobix 2010-12-12 02:17:00

+0

的答案是否有原因您不需要想要使用函數[EXPAND](http://www.mathworks.com/help/toolbox/symbolic/expand.html),即展開((2 * x + 3 * y)^ 4);? – gnovice 2010-12-12 03:04:35

回答

1

的問題是,即使先定義v如使用SYMS一個符號對象,則重新定義它是雙值的下一行的陣列的事實。然後,在循環的第一次迭代中,您索引v的第一個元素,並嘗試在該元素中放置一個符號表達式。當MATLAB嘗試將符號表達式轉換爲double類型以匹配數組v的其他元素的類型(它不能這樣做是因爲在表達式中存在未指定的符號對象,如xy)時出現錯誤。下面

該解決方案應該做到你想要什麼:

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

昨天自己弄明白了,但是謝謝你的努力 – Mobix 2010-12-13 22:15:48