Symbolic int results in deletion of main variable (MATLAB) -


i trying this:

syms x h4 t4 c13; t = 0.6*sin(pi*x); h1x = 0.5*(1 - t); h0 = h1x; h14x = -h4 -t4*(x - 0.5); h24x = h4 + t4*(x - 0.5); symvar(h14x) 

which returns

ans =  [ h4, t4, x] 

then

u13x = (-4*int(h14x, x, 0, x) + c13)/h0 symvar(u13x) 

returns

u13x =  -(c13 + 4*x*(h4 - t4/2) + 2*t4*x^2)/((3*sin(pi*x))/10 - 1/2)  ans =  [ c13, h4, t4, x] 

and

p12x = -3*int(u13x, x, 0, x) symvar(p12x) 

which is

p12x =  -3*int(-(c13 + 4*x*(h4 - t4/2) + 2*t4*x^2)/((3*sin(pi*x))/10 - 1/2), x, 0, x)  ans =  [ c13, h4, t4 ] 

as can see u13x variables [h4, t4, c13, x], while integrating p12x got reduced [h4, t4, c13] though integral limits variable (in terms of x). bug? can't seem weird behaviour. there workaround?

here 3 possible workarounds (tested in r2015a).

1. use symbolic function
1 option make input passed sym/symvar symfun in terms of x , use optional second argument specify finite number of variable for:

syms x h4 t4 c13; t = 0.6*sin(pi*x); h1x = 0.5*(1 - t); h0 = h1x; h14x = -h4 -t4*(x - 0.5); u13x = (-4*int(h14x, x, 0, x) + c13)/h0 p12x(x) = -3*int(u13x, x, 0, x) % make symfun, function of x n = realmax;                    % 4 or greater variables in case symvar(p12x, n)                 % second argument must finite integer 

which returns expected [ x, t4, h4, c13]. setting second argument large integer value seems work.

2. convert expression string
there 2 versions of symvar. there symvar string inputs , sym/symvar, in symbolic math toolbox, symbolic expressions. 2 forms apparently behave differently in case. so, workaround convert equation int character string sym/char before passing symvar , converting output vector of symbolic variables:

syms x h4 t4 c13; t = 0.6*sin(pi*x); h1x = 0.5*(1 - t); h0 = h1x; h14x = -h4 -t4*(x - 0.5); u13x = (-4*int(h14x, x, 0, x) + c13)/h0 p12x = -3*int(u13x, x, 0, x) sym(symvar(char(p12x))).' 

which returns expected [ c13, h4, t4, x] (note order appears opposite of first workaround above).

3. call mupad function matlab
lastly, can call mupad function indets finds indeterminates in expression.

syms x h4 t4 c13; t = 0.6*sin(pi*x); h1x = 0.5*(1 - t); h0 = h1x; h14x = -h4 -t4*(x - 0.5); u13x = (-4*int(h14x, x, 0, x) + c13)/h0 p12x = -3*int(u13x, x, 0, x) feval(symengine, 'x->indets(x) minus type::constantidents', p12x) 

which returns [ x, c13, h4, t4]. work if input p12x class sym or symfun. can use:

evalin(symengine, ['indets(hold(' char(p12x) ')) minus type::constantidents']) 

the reason sym/symvar doesn't work in case because based on freeindets under hood, explicitly ignores free variables in functions int.


Comments

Popular posts from this blog

google chrome - Developer tools - How to inspect the elements which are added momentarily (by JQuery)? -

angularjs - Showing an empty as first option in select tag -

php - Cloud9 cloud IDE and CakePHP -