Difference between revisions of "Matlab/Octave finty"
From RoboWiki
(New page: Niektoré zaujímavé konštrukcie a postupy '''How to find square root of 2 in 15 significant figures''' octave:1> format long octave:2> sqrt(2) ans = 1.41421356237310 Alebo iný...) |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 15: | Line 15: | ||
x = (x + 2/x) / 2; | x = (x + 2/x) / 2; | ||
fprintf('%18.15f\n', x) | fprintf('%18.15f\n', x) | ||
+ | |||
+ | Este iny postup | ||
+ | |||
+ | printf ("%.15f\n", sqrt(2)); | ||
+ | produces | ||
+ | 1.414213562373095 | ||
+ | |||
+ | With | ||
+ | |||
+ | function x = approxroot2(n) | ||
+ | x = 2; | ||
+ | while n | ||
+ | printf ("%.15f\n", x - 1); | ||
+ | x = 2 + 1/x; | ||
+ | n--; | ||
+ | endwhile | ||
+ | x -= 1; | ||
+ | printf ("%.15f\n", x); | ||
+ | endfunction | ||
+ | |||
+ | approxroot2(25); | ||
+ | produces | ||
+ | 1.000000000000000 | ||
+ | 1.500000000000000 | ||
+ | 1.400000000000000 | ||
+ | 1.416666666666667 | ||
+ | 1.413793103448276 | ||
+ | 1.414285714285714 | ||
+ | 1.414201183431953 | ||
+ | 1.414215686274510 | ||
+ | 1.414213197969543 | ||
+ | 1.414213624894870 | ||
+ | 1.414213551646055 | ||
+ | 1.414213564213564 | ||
+ | 1.414213562057320 | ||
+ | 1.414213562427273 | ||
+ | 1.414213562363800 | ||
+ | 1.414213562374690 | ||
+ | 1.414213562372821 | ||
+ | 1.414213562373142 | ||
+ | 1.414213562373087 | ||
+ | 1.414213562373096 | ||
+ | 1.414213562373095 | ||
+ | 1.414213562373095 | ||
+ | 1.414213562373095 | ||
+ | 1.414213562373095 | ||
+ | 1.414213562373095 | ||
+ | 1.414213562373095 | ||
+ | |||
+ | |||
+ | |||
+ | '''How do I evaluate <math> 1^2 + 2^2 +3^2 + \dots +100^2</math>''' | ||
+ | |||
+ | sumsq(1:100) | ||
+ | |||
+ | a=1:100; | ||
+ | b=a.^2; | ||
+ | c=sum(b) | ||
+ | |||
+ | s = 0; | ||
+ | for i = 1:100, | ||
+ | s = s + i^2; | ||
+ | endfor | ||
+ | |||
+ | or you could vectorize the loop and get: | ||
+ | |||
+ | s = sum((1:100).^2); | ||
+ | |||
+ | Or | ||
+ | |||
+ | (1:100)*(1:100)' | ||
+ | |||
+ | Or | ||
+ | 100*101*201/6 | ||
+ | |||
+ | because | ||
+ | |||
+ | <math>\sum n^2 = \frac{n(n+1)(2*n+1)}{6}</math> | ||
+ | |||
+ | Or | ||
+ | |||
+ | norm(1:100)^2 | ||
+ | |||
+ | This will also work | ||
+ | |||
+ | 100*var(-100:100) |
Latest revision as of 15:24, 25 February 2012
Niektoré zaujímavé konštrukcie a postupy
How to find square root of 2 in 15 significant figures
octave:1> format long octave:2> sqrt(2) ans = 1.41421356237310
Alebo iný postup
x = 1.5; x = (x + 2/x) / 2; x = (x + 2/x) / 2; x = (x + 2/x) / 2; x = (x + 2/x) / 2; fprintf('%18.15f\n', x)
Este iny postup
printf ("%.15f\n", sqrt(2)); produces 1.414213562373095
With
function x = approxroot2(n) x = 2; while n printf ("%.15f\n", x - 1); x = 2 + 1/x; n--; endwhile x -= 1; printf ("%.15f\n", x); endfunction
approxroot2(25); produces 1.000000000000000 1.500000000000000 1.400000000000000 1.416666666666667 1.413793103448276 1.414285714285714 1.414201183431953 1.414215686274510 1.414213197969543 1.414213624894870 1.414213551646055 1.414213564213564 1.414213562057320 1.414213562427273 1.414213562363800 1.414213562374690 1.414213562372821 1.414213562373142 1.414213562373087 1.414213562373096 1.414213562373095 1.414213562373095 1.414213562373095 1.414213562373095 1.414213562373095 1.414213562373095
How do I evaluate <math> 1^2 + 2^2 +3^2 + \dots +100^2</math>
sumsq(1:100)
a=1:100; b=a.^2; c=sum(b)
s = 0; for i = 1:100, s = s + i^2; endfor
or you could vectorize the loop and get:
s = sum((1:100).^2);
Or
(1:100)*(1:100)'
Or
100*101*201/6
because
<math>\sum n^2 = \frac{n(n+1)(2*n+1)}{6}</math>
Or
norm(1:100)^2
This will also work
100*var(-100:100)