【问题标题】:2 variables in an array数组中的 2 个变量
【发布时间】:2011-05-24 02:37:13
【问题描述】:

我正在尝试在 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 个变量呢?

【问题讨论】:

  • expandb 应该是符号变量还是数字的函数?
  • 应该是2个变量的函数。假设我必须扩展 (2x+3y)^4 我会写 expandb(2x,3y,4) 并且答案的形式是 (2x)^4+...
  • 有什么理由不想使用函数EXPAND,即expand((2*x+3*y)^4);?

标签: arrays function variables matlab binomial-coefficients


【解决方案1】:

问题在于,即使您首先使用SYMSv 定义为符号对象,您重新定义它是下一行的双精度值数组。然后,在循环的第一次迭代中,您索引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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多