Set complicated assumptions on symbolic function

385 Views Asked by At

I am trying to find the roots of a nonlinear function that depends on several symbolic variables and a symbolic function. To guarantee the existence of a solution I need to set some assumptions on the symbolic function b(x). By using the Matlab function assume I can set simple assumptions like

syms b(x) d
assume(b(0)==0 & b(x)>=0);

Now I am looking for a way to include this assumption: (symbolic function b(x), symbolic variable d) There is a value y such that b(x) < d*x for x < y and b(x) > d*x for x > y.

To make it easier we can fix for example d=0.1 and b(10)=1 such that y=10. However I would prefer leaving d and y symbolic.

I tried to write a function that checks the assumption but unsurprisingly Matlab does not seem to accept a symbolic function as an input variable.

Do you know a solution to this problem or have an idea?

Update 2017-01-03:
While having fixed d=0.1,b(10)=1 and y=10 I am trying to check the above assumption by using

syms b(x) 
d=0.1;
assume(x, 'real');
assume(x>=0);
assume(b(0)==0 & b(x)>=0 & b(10)==1);
checkAssumption(x)= mySign(x)*(d*x-b(x)); 
assume(checkAssumption(x)>=0);

where

function sign=mySign(x)
if x<10
    sign=-1;
else if x==10
        sign=0;
    else if x>10
            sign=-1;
        end
    end
end

Then I get the error "Conversion to logical from sym is not possible." in mySign. Using double(x) as the input variable of mySign leads to the error "DOUBLE cannot convert the input expression into a double array".

Do you know a way to get mySign and checkAssumptions evaluated or have an other idea how to assume the above assumption?

0

There are 0 best solutions below