2015-05-02 3 views
2

я пытался решить функцию кусочна в 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] 

Возможен ли Maxima, чтобы получить решение уравнения, как это один?

ответ

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); 
0

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

(%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 
+0

возвращает только одно из решений. Он возвращает только 8, но другое решение равно 2. –

+0

Трудная часть - найти решение. Когда вы найдете решение, вы можете искать как влево, так и вправо. – soegaard

+0

Может ли Maxima находить решения с использованием аналитического подхода вместо численного подхода? –

Смежные вопросы