Variable Precision Arithmetic without the Symbolic Math Toolbox?
Brett's Pick this week provides a subset of the functionality of our Symbolic Math Toolbox, but doesn't require any tools besides core MATLAB!
In his introduction to his submission on variable precision integer arithmetic, John D'Errico wrote:
"Every once in a while, I've wanted to do arithmetic with large integers with magnitude exceeding that which can fit into MATLAB's standard data types. Since I don't have the symbolic toolbox, the simple solution was to write it in MATLAB." I don't know how "simple" his solution was to implement, but John created a new variable class (vpi) that is quite easy to use.
Actually, John's code is pretty impressive. Using his object class, one can easily manipulate very large integers--often larger than MATLAB is comfortable with. Consider:
a = 17^17
a = 8.2724e+020
class(a)
ans = double
try factor(a) catch ME disp(ME.message); disp('Not gonna do it...wouldn''t be prudent!') end
The maximum value of n allowed is 2^32. Not gonna do it...wouldn't be prudent!
b = vpi(17)
b = 17
class(b)
ans = vpi
b^17
ans = 827240261886336764177
factor(b^17)
ans = 1 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
The Symbolic Math Toolbox
If you need more, or faster, there's always the Symbolic Math Toolbox. John's VPI class deals only with scalar integers, whereas VPA (from our Toolbox) also supports floating point numbers; it can work with Pi, for instance. Also, it supports matrices and n-dim arrays of numbers, and allows you to combine symbolic and numeric variables in expressions like "1.2*x+3.4*y". Nonetheless, John has given us a nice tool for manipulating integers. I'm interested in hearing your comments on this. Let us know how this might play a role in your workflows.
- カテゴリ:
- Picks
コメント
コメントを残すには、ここ をクリックして MathWorks アカウントにサインインするか新しい MathWorks アカウントを作成します。