2 переменные в массиве - PullRequest
       7

2 переменные в массиве

1 голос
/ 12 декабря 2010

Я пытаюсь создать в 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 переменные в массиве?

1 Ответ

1 голос
/ 12 декабря 2010

Проблема в том, что, хотя вы сначала определяете v как символический объект, используя SYMS , вы переопределяете , чтобы он был массивом двойных значений для следующего линия. Затем на первой итерации цикла вы индексируете первый элемент 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
...