2010-12-11 28 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