Python Forum
Trigonometric functions using new Pi
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trigonometric functions using new Pi
#1
Hi all,

Interesting "little" math project here. While creating a circle in Microsoft Excel 2019 I have discovered that the trigonometric functions are still formulated in relation to Pi as an approximation (3.1416), instead of an expression of a function (a harmonic of Phi,(4/SQRT((SQRT(5)+1)/2) = 3.1446)

https://en.wikipedia.org/wiki/CORDIC
http://code.activestate.com/recipes/576792/

Anyone know how to correct this?

I don't understand how CORDIC computes the tables for sine, say.

https://en.wikipedia.org/wiki/Bitwise_op...Bit_shifts
https://www.allaboutcircuits.com/technic...algorithm/

Does it basically play a game of higher/lower?

0.1% inaccuracy with numbers is huge in my line of work

I tried downloading Matlab to have a look at the coding in action, but my laptop is not high spec.

Anyone know what the python equivalent would work out as? (this is Matlab coding taken from wiki, (the insert inline function didn't work))

function v = cordic(beta,n)
% This function computes v = [cos(beta), sin(beta)] (beta in radians)
% using n iterations. Increasing n will increase the precision.

if beta < -pi/2 || beta > pi/2
    if beta < 0
        v = cordic(beta + pi, n);
    else
        v = cordic(beta - pi, n);
    end
    v = -v; % flip the sign for second or third quadrant
    return
end

% Initialization of tables of constants used by CORDIC
% need a table of arctangents of negative powers of two, in radians:
% angles = atan(2.^-(0:27));
angles =  [  ...
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
% and a table of products of reciprocal lengths of vectors [1, 2^-2j]:
% Kvalues = cumprod(1./abs(1 + 1j*2.^(-(0:23))))
Kvalues = [ ...
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
Kn = Kvalues(min(n, length(Kvalues)));

% Initialize loop variables:
v = [1;0]; % start with 2-vector cosine and sine of zero
poweroftwo = 1;
angle = angles(1);

% Iterations
for j = 0:n-1;
    if beta < 0
        sigma = -1;
    else
        sigma = 1;
    end
    factor = sigma * poweroftwo;
    % Note the matrix multiplication can be done using scaling by powers of two and addition subtraction
    R = [1, -factor; factor, 1];
    v = R * v; % 2-by-2 matrix multiply
    beta = beta - sigma * angle; % update the remaining angle
    poweroftwo = poweroftwo / 2;
    % update the angle from table, or eventually by just dividing by two
    if j+2 > length(angles)
        angle = angle / 2;
    else
        angle = angles(j+2);
    end
end

% Adjust length of output vector to be [cos(beta), sin(beta)]:
v = v * Kn;
return

endfunction
When running this code, the compiler has an issue with function v

SyntaxError: invalid syntax

Thanks,
Kev
Reply
#2
I am still having trouble getting the math I need to add in, but I am getting there.[Image: photo?fbid=10158250072368197&set=a.10151775047488197]
Reply
#3
Pi in the math library in Python is accurate (according to my T-shirt that displays a few thousand digits) to at least 15 digits. The documentation says it is accurate "within available precision". Might need something stronger for astrophysics, but your estimate of 3.144x is really off!
Reply
#4
jefsummers, [Image: ff0e41e8ca186144bd3637cde18f9f74.jpg]
Reply
#5
Same to you bud.
Your image goes to a facebook page that is a broken link.
The pi approximation in Python is more accurate than your quoted function.
If you are asking someone to translate your matlab function just say that. You will get the standard response asking you to show your code so far, that we don't do your work for you.
So show your work, with proper python tags if you would like help.
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020