Создание дескрипторов массива для функции, которая возвращает вектор полиномиальных выражений

Я пытаюсь использовать функцию численного интегрирования "интеграл"

Я создал функцию четырех полиномиальных функций

[x; x^2; x^3; x^4]

теперь я хочу интегрировать этот вектор построчно, используя интегральную функцию. Я попытался создать дескриптор функции для функции и передал ее «интегральной» функции.

function f = test(x)
    f = [x,x^2,x^3,x^4];
end

Однако при вызове командной строки я получаю следующую ошибку:

test_var=@test
integral(test_var,0,1)
Error using  ^ 
One argument must be a square matrix and the other must be a scalar. 
Use POWER (.^) for elementwise power.

Error in test (line 2)
    f = [x,x^2,x^3,x^4];

Error in integralCalc/iterateScalarValued (line 314)
            fx = FUN(t);

Error in integralCalc/vadapt (line 132)
        [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 75)
    [q,errbnd] = vadapt(@AtoBInvTransform,interval);

Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);

person Milun Moghe    schedule 13.10.2017    source источник


Ответы (1)


Согласно документации integral:

q = integral(fun, xmin, xmax)

  1. #P2# <блочная цитата> #P3#
  2. #P4#
    #P5#
    #P6#
    #P7#

Итак, вам нужно добавить входной флаг 'ArrayValued', чтобы указать, что у вас есть функция с векторным значением:

f = @(x) [x; x^2; x^3; x^4]; % or [x; x.^2; x.^3; x.^4];
integral(f, 0, 1, 'ArrayValued', true) % or integral(@f, 0, 1, 'ArrayValued', true)
                                       % if f is defined in a file

дает

ans =
   0.500000000000000
   0.333333333333333
   0.250000000000000
   0.200000000000000
person Luis Mendo    schedule 13.10.2017