Я спрашиваю об этом сообществе по этому вопросу. Пожалуйста, дайте мне знать, если это неправильно и какое сообщество мне следует использовать.

Я пытаюсь оценить интеграл в Matlab, используя:

int(x^(2)*sin(n*x),x)

Который вернется:

(2*x*sin(n*x))/n^2 - cos(n*x)*(x^2/n - 2/n^3)

Затем я хочу оценить результат этого интеграла по определенным значениям (аналогично определенному интегралу, но мне не нужно пересчитывать интеграл снова и снова, если мне нужно подключить множество различных точек). Есть ли способ сохранить результат интеграла как функцию? Я пытался:

f = @(x) int(x^(2)*sin(n*x), x)

но затем, если я хочу оценить f в 0, f(0) попытается сделать: int((0)^(2)*sin(n*0), x) , где я хочу это сделать: (2*(0)*sin(n*(0)))/n^2 - cos(n*(0))*((0)^2/n - 2/n^3) . По сути, я хочу, чтобы Matlab взял интеграл, а затем вычислил с определенным значением, без необходимости копировать и вставлять результат команды int() в следующую строку? Я бы связал это с каналами в Linux, так что я бы хотел направить вывод вызова int() на следующую строку и оценить его результат по определенному значению. Есть ли способ сделать это?

2 ответа2

0

Вы можете сделать это, сохранив символическую версию решенного уравнения.

sums n x

f = sym('int(x^(2)*sin(n*x),x)')

F теперь символическое представление

(2*x*sin(n*x))/n^2 - cos(n*x)*(x^2/n - 2/n^3)

используйте команду pretty(f) для просмотра.

Чтобы использовать это уравнение для получения числового ответа, вы используете команду subs():

subs( f, [x n], [1,5])

У меня нет доступного matlab для проверки моего синтаксиса, но если это та возможность, которую вы ищете, ее должно быть достаточно для начала работы.

0

Я решил свою проблему, используя следующее:

f = symfun(int(x^(2)*sin(n*x),x),x);

Теперь я могу использовать f(0) как я хочу. Я также обнаружил следующее, если хочу перейти к числовому вычислению:

fn = matlabFunction(f)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .