Как определить f(x) = x/x в MATLAB (символические вычисления)

Я пытаюсь с этими командами

x = sym('x');
f(x) = sym('f(x)');
f(x) = x/x;

и

f(x) = sym('x/x');

, но оба они производят

f(x) = 1

(да... для каждого реального x, включая 0)

Вопрос в том, как я могу избежать предварительной оценки в команде «sym», или существует другой способ решить эту проблему.

Большое спасибо!

обновление 21.05.2014:

Немного опишу проблему.

Рассмотреть возможность

f(x) = x/x

и

g(x) = 1

Очевидно, что домены f и g — это R-{0} и R соответственно.

Автоматическое упрощение в sym/syms может привести к потере некоторой информации.


person epsilonxe    schedule 20.05.2014    source источник
comment
Взгляните на «mupad», который является частью вашей лицензии Matlab. f:=x->x/x.   -  person Daniel    schedule 20.05.2014
comment
Почему за это проголосовали? Это совершенно правильный вопрос. Такое поведение явно сбивает с толку и потенциально неочевидно в контексте symfuns.   -  person horchler    schedule 20.05.2014


Ответы (2)


Ответ от @pabaldonedo хорош. Похоже, что разработчики MuPad и Symbolic Toolbox сделали выбор, поскольку x/x не определено.

Если вы действительно хотите, чтобы 0, Inf, -Inf или NaN приводили к NaN, а не 1, вы можете использовать символические переменные в сочетании с анонимная функция:

f = @(x)sym(x)./sym(x);
f([-Inf -1 0 1 Inf NaN])

который возвращает

ans =

[ NaN, 1, NaN, 1, NaN, NaN]

Или, если ввод уже символический, вы можете просто использовать это:

f = @(x)x./x;
f(sym([-Inf -1 0 1 Inf NaN]))
person horchler    schedule 20.05.2014
comment
Немного опишу проблему. Рассмотрим f(x) = x/x и g(x) = 1. Очевидно, что областью определения f и g являются R-{0} и R соответственно. Если sym автоматически упрощает ввод, то часть информации может быть потеряна. Более того, f(0) математически не определена, а не является неопределенной формой (здесь мы не рассматриваем ее предел). - person epsilonxe; 21.05.2014

В вашем коде нет предварительной оценки. F(x) = x/x всегда равно 1, даже для x = 0, Matlab просто упрощает выражение функции, но нет повторной оценки.

Я думаю, вам следует взглянуть на неопределенные формы, чтобы понять, почему для x = 0 x/x = 1. Посмотрите на википедию: http://en.wikipedia.org/wiki/Indeterminate_form

person pabaldonedo    schedule 20.05.2014
comment
Спасибо, pabaldonedo, за ваш комментарий. Проблема в том, что MATLAB упрощает ввод перед сохранением в f(x) (что я называю предварительной оценкой). Я не хочу упрощения. Просто сохраните значение как есть - person epsilonxe; 20.05.2014
comment
@epsilonxe Это недоступно для symfun. Они подчиняются тем же правилам упрощения, что и syms. - person Christopher Creutzig; 25.08.2014