Решение кусочных функций в Maxima

Я попытался решить кусочную функцию в Maxima, но ни одно из решений функций не было возвращено:

piecewiseExample(x) := if (x < 5) then x*2 else x/2;

solve([piecewiseExample(x) = 4], [x]);
//result: [(if x<5 then 2*x else x/2)=4]

Может ли Максима получить решения уравнения, подобного этому?


person Anderson Green    schedule 02.05.2015    source источник


Ответы (2)


В простых случаях можно решать каждую ветку везде и фильтровать решения:

solve_and_filter(eq, var, p):= block([so: solve(eq, var), prederror: true],
  sublist(so, lambda([c], p(rhs(c))))) $

pw_solve(pw, var):= map(lambda([L],
    solve_and_filter(first(L), var, second(L))), pw) $

/* represent piecewise equation as a list of equation-predicate pairs
   [ [eq1, pred1], [eq2, pred2], ... ] */
pw: [ [x*2 = 4, lambda([x], x< 5)],
      [x/2 = 4, lambda([x], x>=5)]] $

/* solve every `eq' and filter solutions using `pred' */
pw_solve(pw, x);
person slitvinov    schedule 04.05.2015

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

(%i1) f(x) := if (x < 5) then x*2 else x/2;
                                                      x
(%o1)                  f(x) := if x < 5 then x 2 else -
                                                      2
(%i9) find_root(f(x)-4,x,-1000,1000);
(%o9)                                 8.0
person soegaard    schedule 02.05.2015
comment
Это возвращает только одно из решений. Он возвращает только 8, но другое решение равно 2. - person Anderson Green; 03.05.2015
comment
Самое сложное найти решение. Когда вы нашли решение, вы можете искать как слева, так и справа. - person soegaard; 03.05.2015
comment
Сможет ли Maxima находить решения, используя аналитический подход вместо численного? - person Anderson Green; 03.05.2015
comment
Я не уверен, но поскольку уsolve были проблемы с if-выражением, у меня есть подозрение, что ответ отрицательный. - person soegaard; 03.05.2015
comment
Алгоритм, который использует solve, описан в документации. Насколько я читал, там написано, что он решает алгебраические уравнения, которые могут включать функции, имеющие обратную сторону. Это означает, что он не решает уравнения с if-выражениями. Документы: maxima.sourceforge.net/docs/manual/maxima_20.html#solve< /а> - person soegaard; 04.05.2015