Создание дескрипторов массива для функции, которая возвращает вектор полиномиальных выражений
Я пытаюсь использовать функцию численного интегрирования "интеграл"
Я создал функцию из четырех полиномиальных функций
[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);
1 ответ
Согласно документацииintegral
:
q = integral(fun, xmin, xmax)
Для скалярной функции
fun
вам нужно определить функцию так, чтобы она принимала векторный ввод и производила векторный вывод.Для скалярных задач функция
y = fun(x)
должен принять векторный аргумент,x
и вернуть векторный результат,y
, Обычно это означает, что fun должен использовать операторы массива вместо матричных операторов. Например, используйте.*
(times
) скорее, чем*
(mtimes
).Если у вас есть вектор-функция
fun
вам нужно использовать флаг ввода'ArrayValued'
:Установите этот флаг на
true
указать, чтоfun
является функцией, которая принимает скалярные входные данные и возвращает выходные данные вектора, матрицы или ND-массива.и в этом случае требование в пункте 1 выше не является необходимым:
Если вы установите
'ArrayValued'
вариант к истине, тоfun
должен принять скаляр и вернуть массив фиксированного размера.
Итак, вам нужно добавить флаг ввода'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