Как использовать дополнительную переменную в функции quadl в Matlab?

Я пытаюсь передать функцию из другого файла .m в вызов quadl, который также принимает дополнительную переменную при оценке функции.

Мой текущий вызов выглядит так:

fun=@fun1
min = 0;
max = 2;
y=quadl(fun, min, max, 0.00001);

Я хочу получить удовольствие1, чтобы его оценивали от мин до макс.

Моя функция в файле fun1.m:

function func=fun1(x)
    func = x^2+x+y

Как мне передать переменную 'y'?

Я попытался изменить четырехъядерный вызов на:

y=quadl(fun1(y), min, max, 0.00001);

и:

y=quadl(fun1(y), min, max, 0.00001);

и функция для:

function func=fun1(x,y)
    func = x^2+x+y

но это не работает.

Я также пытался объявить глобальную переменную, но это дает мне ошибку необъявленной переменной.

Помощь приветствуется!


person obizues    schedule 01.03.2018    source источник


Ответы (1)


Прежде всего, quadl будет удалено в будущих версиях, поэтому лучше использовать integral.

Вы должны использовать:

function func=fun1(x,y)
    func = x.^2+x+y;         % with .^

Затем в другом сценарии вы объявляете fun как функцию x:

y = 5;
fun=@(x)fun1(x,y);
min = 0;
max = 2;
y=integral(fun, min, max);

Если вы настаиваете на использовании quadl, вы можете сделать то же самое:

y = 5;
fun=@(x)fun1(x,y);
min = 0;
max = 2;
y=quadl(fun, min, max, 0.00001);

РЕДАКТИРОВАТЬ: Чтобы сохранить выражение в функции y после интеграции x, вам нужно работать с syms и int:

syms x y z
fun = fun1(x,y,z);
min = 0;
max = 2;
expr = int(fun,  x, min, max);
person ViG    schedule 01.03.2018
comment
Как бы я определил fun1, если бы я хотел выполнить итерацию от 0 до x, а затем использовать y и z? fun@(x) = fun1(x,y,z) и функция fun=fun1(x,y,z), похоже, не работает с ошибкой: подынтегральная функция должна возвращать выходной вектор той же длины, что и входной вектор. - person obizues; 02.03.2018
comment
@obizues Я не понимаю, что ты имеешь в виду. Вы имеете в виду, что хотите иметь выражение для y и z после интеграла? - person ViG; 02.03.2018