2017-07-11 3 views
0

Ich habe zwei Fragen in Bezug auf Präzision in MATLABDoppeltyp in MATLAB

1) ist das Doppelte der Datentyp mit dem die meisten großen Anzahl von Stellen für eine float komplexe Zahl?

2) Wie kann die Genauigkeit von integral() erhöht werden? Es scheint mir, dass es eine Kappe auf rund E + 15 (für eine große Zahl)

+0

Für eine Genauigkeit, die größer ist als das, was Ihr Gerät hardwaremäßig unterstützt, können Sie versuchen, die 'symbolic' Toolbox mit der Funktion' vpa' (variable precision arithmetic) zu verwenden. Oder Sie können einige der 'precision' Toolkits in Matlab FileExchange ausprobieren. –

+0

In Ordnung, aber wie kann ein Integral beispielsweise nach E-20-Genauigkeit berechnet werden? (mit vpa ich denke) – Peter

+0

Ich sollte auch darauf hinweisen, dass, da Sie Java-Klassen direkt aus Matlab/Oktave verwenden können, eine andere Option ist, nur auf vorhandene beliebige Präzise Funktionen in Java vorhanden. –

Antwort

0

Hier ist ein Beispiel-Script double-symbolic/vpa Präzision Vergleich:

% Numeric approach 
f_numeric = @(z) exp(z.^2); 
Out_numeric = integral (f_numeric, 0, 1); 

% Symbolic/vpa approach 
syms x 
f_symbolic(x) = exp(x^2); 
Out_symbolic = int (f_symbolic, x, [0,1]); 

% Comparison 
fprintf('Numeric : %0.30f\n', Out_numeric) 
fprintf('Symbolic : %s\n' , char (vpa (Out_symbolic, 32))) 
fprintf('Converted: %0.30f\n', double (vpa (Out_symbolic, 32))) % back to double 

Ausgang auf meinem Rechner (eps = 2.2204e-16):

Numeric : 1.462651745907181499717353290180 
Symbolic : 1.462651745907181608804048586857 
Converted: 1.462651745907181499717353290180 

allgemeiner:

>> fprintf(' %0.32f\n %s\n', 1/3, char (vpa ('1/3', 32))) 
0.33333333333333331482961625624739 
0.33333333333333333333333333333333