我正在尝试在MATLAB中创建一个函数,它将括号扩展为n的幂,其中n是一个自然数。这就是我到目前为止所做的:
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;
运行时出现此错误:
??? 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个变量?
答案 0 :(得分:1)
问题在于,即使您首先使用SYMS将v
定义为符号对象,您重新定义它是一个双值的数组下一行。然后,在循环的第一次迭代中,索引v
的第一个元素,并尝试在该元素中放置一个符号表达式。当MATLAB尝试将符号表达式转换为double类型以匹配数组v
的其他元素的类型时,会出现错误(由于存在未指定的符号对象,如x
,因此无法执行此操作表达式中的y
。
下面的解决方案应该达到你想要的效果:
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