Nowości w IDL 8.3

Nowy argument Equation w funkcjach PLOT, CONTOUR i SURFACE
Pozwala on w sposób dynamiczny podglądać dane. Możliwe jest ustawienie argumentu Equation w ciągu zawierającym równanie (jako funkcji zmiennych X i Y) lub też w nazwie funkcji. IDL automatycznie sięgnie po określony zakres danych i wykona obliczenia, aby wygenerować wykres. Następnie IDL automatycznie będzie aktualizować dane wynikowe i wykres pozwalając na interaktywne zmiany równania.


Domyślne generowanie wyniku (Implied Print)
Jeżeli w linii poleceń zostanie wpisana składnia lub nazwa zmiennej, IDL automatycznie wydrukuje wynik bez zwracania błędu składni. Na przykład:

IDL> 2+2

IDL> a = [0:10:2]
IDL> a
0 2 4 6 8 10
IDL> a[2:4]
4 6 8v IDL> sin(a)
0.00000000 0.90929741 -0.75680250 -0.27941549 0.98935825 -0.54402113
IDL> IDLUnit('1 kg * c^2')
8.98755E+016 joule

Dodatkowo, zmiennoprzecinkowych typach danych cecha drukowania spowoduje automatyczne użycie maksymalnej cyfr po przecinku (maksymalnej precyzji). Na przykład:

IDL> print, 1.2345678 ; wydrukuje 6 cyfr
1.23457
IDL> 1.2345678
1.2345678  wydrukuje wszystkie cyfry po przecinku
IDL> print, !dpi ; wydrukuje 8 cyfr
3.1415927
IDL> !dpi
3.1415926535897931  wydrukuje wszystkie cyfry


Dla struktur wydrukowane zostaną zarówno nazwy pól jak i wartości zmiennych:

IDL> {field1: "hello, world", field2: {sub1:[1,2,3],sub2:2}}
{
FIELD1: "hello, world",
FIELD2:
{
SUB1: [1, 2, 3],
SUB2: 2
}
}
IDL> HASH("field1", "hello, world", "field2", HASH("sub1", [1,2,3], "sub2", 2))
{
"field1": "hello, world",
"field2":
{
"sub1": [ 1, 2, 3],
"sub2": 2
}
}

Cecha ta działa zarówno w linii komend IDL, jak i w Workbenchu IDL. Działa też dla funkcji EXECUTE (musi być ustawiona specjalna flaga). Funkcja ta jednak nie działa w procedurach. Aby drukować wyniki wyrażeń i zmiennych wewnątrz programu należy nadal używać polecenia PRINT lub EXECUTE. Można też użyć nowego polecenia IMPLIED_PRINT aby format wyświetlanego wyniku był taki jak linii komend bez używania polecenia PRINT.

Asynchroniczne liczniki czasu
Nowe asynchroniczne, nieblokowalne liczniki czasu oferują szereg nowych cech nieobecnych w dotychczasowych licznikach:
  • Prosta składnia i interfejs
  • Niezależność od widgetów
  • Lepsza teoretyczna rozdzielczość
  • Unix – nanosekundy
  • Windows – milisekundy

Dostęp do schowka systemowego
Nowa metoda Clipboard.Get( ) pozwala na pobieranie tekstu ze schowka systemowego, a Clipboard.Set( ) na zapisywanie do niego określonego tekstu.

Operator dwukropka przy tworzeniu tabel
Od teraz możliwe jest użycie dwukropka „:” przy konstruowaniu tabel zawierających zwiększające się lub zmniejszające wartości. Dwukropek wprowadza bardziej czytelną i krótszą postać składni. Operator ma składnię: Wynik = [start: koniec] lub Wynik = [start: koniec: inkrementacja]. Na przykład:

arr = [0:1:0.1]
PRINT, arr

IDL zwróci:

:0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

Funkcja IDLUNIT
Funkcja IDLUNIT pozwala na wykonywanie prostych analiz wielowymiarowych, konwersji oraz operacji matematycznych, a wszystkie w określonych jednostkach. Wynik może być użyty w funkcjach lub programach. Na przykład:

PRINT, IDLUnit('20 m/s -> mph')
44.7387 mph
PRINT, IDLUnit('1 kg * c^2')
8.98755E+016 joule

Dodatkowo, IDL posiada aplikację (widget) która pozwala na proste konwersje pomiędzy jednostkami (aplikacja jest dostępna w Menu: Macros -> IDL Converter").


Funkcja W Lamberta
Procedura LAMBERTW pozwala na obliczenie wartości funkcji W Lamberta:
z = W(z) eW(z)

Funkcja W Lamberta posiada wiele zastosowań w matematyce, obliczeniach komputerowych i fizycznych. Na przykład jest używana przy obliczeniach równań potęgowych (takich jak maksima rozkładów Bose-Einsteina lub Fermiego-Diraca) lub równań liniowych ze stałym współczynnikiem opóźnienia.


Nowe procedury HDF5
IDL zawiera trzy nowe procedury obsługi zaawansowanego formatu wymiany danych HDF5 aby uprościć proces odczytu i zapisu bardzo dużych zbiorów danych. Nowymi funkcjami są:
H5_GETDATA
H5_LIST
H5_PUTDATA


Typ danych DICTIONARY
IDL zawiera nowy typ danych DICTIONARY, bazujący na klasie HASH. Domyślnie klasa HASH pozwala na przechowywanie zarówno stringów z rozróżnieniem małych i wielkich liter (łącznie ze spacjami i znakami specjalnymi) oraz liczb. Klasa DICTIONARY pozwala na użycie jako kluczy stringów bez rozróżniania wielkich i małych liter. To czyni zmienne słownikowe niejako dynamicznymi strukturami gdzie możliwy jest dostęp do wartości poprzez użycie kropki, ale równocześnie można dodać lub usunąć klucz lub zmienić typ danej w istniejącej parze klucz/wartość. Na przykład:

dict = DICTIONARY("one", 1.0, "blue", [255,0,0], "Pi", !DPI)
PRINT, dict["one"]
PRINT, dict.one
PRINT, dict.ONE

We wszystkich trzech przypadkach IDL da odpowiedź:

1.00000

Można też zmienić typ danej i dynamicznie dodać nowy klucz:

dict.one = 'my value'
dict.newkey = [0,1,2]
PRINT, dict.newkey

IDL wydrukuje:

0 1 2

Uporządkowany typ danych HASH (ORDEREDHASH)
Nowy typ danych ORDEREDHASH, bazuje na klasie HASH. Domyślnie klasa HASH przechowuje dane w nieuporządkowanej, wpisanej arbitralnie kolejności. ORDEREDHASH zawsze porządkuje pary klucz/wartość. Na przykład:

keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
values = LIST('one', 2.0, 3, 4l, PTR_NEW(5), {n:6}, COMPLEX(7,0))
ohash = ORDEREDHASH(keys, values)
PRINT, ohash.Keys()
hash = HASH(keys, values)
PRINT, hash.Keys()

IDL wydrukuje:

A B C D E F G
A F C D G B E

Funkcja SIGNUM
Funkcja SIGNUM zwraca znak każdego element tabeli jako:
  • 1 jeżeli X > 0
  • 0 jeżeli X = 0
  • -1 jeżeli X < 0
  • Jeżeli X jest wartością zespoloną, wynikiem będzie wartość X/abs(X).

Script logo