matlab - setting variables with vpa in loops -


i trying set variable vpa (variable-precision arithmetic). if try

a=vpa(tanh(1)) 

then a=0.76159415595576485102924380043987 desired. try in loop:

a=[]; i=1:3     a(i)=vpa(tanh(1)); end 

however, when output a(1), value 0.761594155955765. why don't last digits did in first case?

there 2 problems code.

first, if run class(a) after for loop you'll see a 'double' rather 'sym'. reason because allocated a empty double precision array: a = [];. each time insert symbolic variable precision values this, cast same class a.

to build symbolic array, need allocate such:

a = sym([]); = 1:3     a(i) = vpa(tanh(1)); end class(a) 

even better, specify final size:

n = 3; = sym(zeros(n,1)); % or = zeros(n,1,'sym'); = 1:n     a(i) = vpa(tanh(1)); end class(a) 

in case, both of above options equivalent following because you're applying vpa last operation on each element:

n = 3; = zeros(n,1); = 1:n     a(i) = tanh(1); end = vpa(a); 


leads second issue, calculations not taking advantage of variable precision. need make sure values converted symbolic or variable precious before performing operations on them. example:

a = vpa(tanh(1)) % calculate tanh(1) double convert vpa b = tanh(vpa(1)) % calculate tanh(1) using actual variable precision a-b 

returns 0.000000000000000037090214482164921742783153748416. in other words, vpa(tanh(1)) calculates hyperbolic tangent in double precision , tanh(vpa(1)) using variable precision.


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -