Szybki kalkulator obsługujący jednostki

6

Chcę móc naciskać kombinację klawiszy, zacząć wpisywać wyrażenie matematyczne zawierające jednostki i nieco zaawansowaną matematykę (nie tylko kalkulator czterofunkcyjny), i natychmiast uzyskać wynik, w jednostkach, które określam, które mogę skopiować i pasta.

  • Obecnie otwieram Firefox i wciskam Ctrl + K, wpisz w polu wyszukiwania, a zwykle daje mi to wynik z rozwijanego menu Kalkulatora Google . Nie zawsze jednak tak, więc naciskam „=” na końcu, czekam na wynik, usuwam równe, czekam na wynik, zdaję sobie sprawę, że nie rozumiem sposobu, w jaki wpisałem jednostkę, otwieram wynik w nowa karta itp. jest do bani.
  • Wolfram Alpha jest mądrzejszy, ale o wiele wolniejszy, a wynik to wszystkie obrazy, a nie tekst, i nie mam dla niego szybkiego widgetu, jeśli coś takiego mogłoby nawet istnieć.
  • Jednostki GNU mają mnóstwo jednostek, co jest świetne, i mogę zdefiniować własne jednostki , co jest świetne, ale muszą być napisane w specyficzny, nieintuicyjny sposób, nie obsługuje zbyt zaawansowanej matematyki i potrzebowałbym aby otworzyć terminal, uruchomić jednostki itp. Nienawidzę wiersza poleceń.
  • Zmarnowałem dużo czasu na tworzenie front-endów unitsw Deskbar i Launchy , ale nie jestem prawdziwym programistą i nie używam już żadnego z nich.

Jakieś inne rozwiązania lub ulepszenia?

(Najlepsza jest platforma wieloplatformowa)

Idealny kalkulator uwzględniający jednostki byłby w stanie obsłużyć wszystkie te:

  • 7 nV/sqrt(Hz) ⋅ sqrt(20000 Hz - 20 Hz) → μV = 0,99 μV
  • sqrt(4*k*25 °C * 1 kΩ * (20 kHz - 20 Hz)) = 0,57357 μV
  • 3.5 billion kilowatt-hours per year = 399,5 MW
  • 60 billion kWh per year = 6,849 GW
  • 1/sqrt(2 mH * 2 nF) = 500 kHz
  • 1/(2*pi*10 kΩ * 22 µF) = 0,7234 Hz
  • 1/(2·π·100 Hz·30pF) → ohm = 53,05 MΩ
  • −10 dBV + 4 dB + 10 dB − 12 dB → dBu = -5,782 dBu
  • 94 dBSPL → Pa = 1,00237 Pa
  • 54 inches + 2 feet → cm = 198,1 cm
  • 12 V ÷ 141.5 µA = 84,8 kΩ
  • 16 bit * 44.1 kHz * 2 → kbit/s = 1411 kbit / s
  • 1 hundred V / 5 ohms = 20 A.
  • furlong per fortnight → cm/minute = 0,9979
  • attoparsec/microfortnight → in/second = 1,004
  • 1 ft / speed of sound = 0,89576 ms
endolit
źródło
1
Jaki jest poziom złożoności problemów, które próbujesz rozwiązać?
spowers
Co próby skryptu, że połączenie bc -li unitsnie może zrobić?
Benjamin Bannier
1
Można dać przykład stosowania bc -li unitsrazem? Nie wiedziałem, że to możliwe.
endolith
@honk: brzmi jak coś, co powinieneś opublikować w odpowiedzi (wiesz, z przykładem). @endolith: użyj @ do powiadomień o komentarzach, aby użytkownik był powiadamiany, gdy odpowiadasz na nie.
szarlatan
@endolith: Właściwie mój komentarz był zbyt szybki, bcnic ci nie da, jeśli nie planujesz definiować własnych funkcji. Funkcje trygonometryczne, wykładnicze i logarytmiczne są już zdefiniowane w units(brakuje tylko funkcji Bessela).
Benjamin Bannier

Odpowiedzi:

8

Jestem pod wrażeniem Qalculate! .

Oblicz!  zrzut ekranu

Dennis Williamson
źródło
+1 Ja też, chociaż mój interfejs użytkownika (plazmoid Qalculate dla KDE) nie oferuje sposobu wyrażenia wyniku w określonych jednostkach. Pracuję nad tym, dzieląc mój wynik przez jednostki, które chcę. Zapominam, czy pełny interfejs, jeśli w ogóle istnieje, może to zrobić. (Po prostu jasne: nawet z ograniczeniami interfejsu użytkownika, nadal jest moim ulubionym kalkulatorem do wszystkiego, do czego nie potrzebuję Mathematica)
David Z
Nie widzę standardowej temperatury, prędkości dźwięku i nie rozumiem, jak radzi sobie z dB, ale jestem też pod dużym wrażeniem. Chciałbym, aby odpowiedzi pojawiły się po krótkim czasie bez naciskania Enter. Ale na te wszystkie rzeczy mogę narzekać. :)
endolith
1
@endolith: Możesz przejść do Edycja> Zarządzaj zmiennymi> Stałe fizyczne i Edycja> Zarządzaj jednostkami i dodawaj własne lub edytuj istniejące wpisy. Nigdy nie widziałem, aby kalkulator zakończył obliczenia po upływie limitu czasu. Jedną rzeczą, którą chciałbym zobaczyć w tym programie, jest nawigacja po historii za pomocą klawiszy strzałek lub przewijania i klikania myszą, zamiast konieczności kopiowania i wklejania z historii.
Dennis Williamson
Kalkulator Google w pasku wyszukiwania Firefoksa kończy się podczas pisania, chociaż czasami muszę go naciskać, wpisując znak równości. To, co napisałem dla Launchy, wyświetla również wynik podczas pisania, chociaż było powolne z powodu sposobu, w jaki uzyskuje dostęp do jednostek.
endolith
@DavidZ: (tymczasem) Qualculate oferuje polecenie „do” do konwersji jednostek: „2m na cm” wyrazi wynik w cm. Zauważ, że (lib) qalculate jest wyposażony w qalc, wersję wiersza poleceń, która używa readline i może przywoływać historię za pomocą klawiszy strzałek lub Ctrl-R (i innych schludnych sztuczek CLI udostępnianych przez readline, takich jak uzupełnianie tabulacji, kopiowanie / wklejanie, cofanie, itp., także znalezione np. w Bash).
AstroFloyd
5

insekt ma zarówno wersję internetową, jak i terminalową. Obsługuje parsowanie, obsługę i konwersję jednostek fizycznych, na przykład:

>>> 2min + 30s

   = 2.5min

>>> 40000km / speedOfLight -> ms

   = 133.426ms

>>> 6Mbit/s * 1.5h -> GB

   = 4.05GB

>>> 2J·s + 3W

  Unification error:

    Cannot unify unit W (base units: kg·m²·s⁻³)
            with unit J·s (base units: kg·m²·s⁻¹)
shark.dp
źródło
To dBoznacza „decybajt”. : /
endolith
1
@endolith: Dzięki! Śledzone tutaj: github.com/sharkdp/insect/issues/67
shark.dp
2

Aby uzyskać łatwe do skryptu rozwiązanie, możesz zajrzeć do sympymodułu python.

$ cat conv.py

#!/usr/bin/env python
import sys
from sympy.physics.units import *
from sympy.printing.pretty.pretty import pprint
from sympy.abc import x, y, z
from sympy import *

# adding extra units is easy
parsec = 3.26163626*ly

if __name__ == '__main__':
  s_input = sys.argv[1]
  s_unit  = sys.argv[2]
  input = eval(s_input)  # input string
  unit  = eval(s_unit)   # output unit

  print 'Converting:'
  pprint(input)
  print
  print str((input/unit).evalf()) +' '+ s_unit

co daje np. niektóre umiarkowanie brzydkie wyrażenia przekonwertowane na mm:

$./conv.py 'tanh(3*m/(2*m))*sinh(60*deg)*1*parsec' 'mm'


Converting:
                           /π\
3.08574615554565e+16*m*sinh|--|*tanh(3/2)
                           \3 /

3.48955431541888e+19 mm

Oczywiście jest to naprawdę studpid kod, który nie sprawdza zgodności jednostek wejściowych i wyjściowych, więc możesz w rezultacie uzyskać dodatkowe jednostki.

$./conv.py 'c' 'parsec'

Converting:
299792458*m
-----------
     s

9.71539598165644e-9/s parsec
Benjamin Bannier
źródło
Zobacz także launchpad.net/python-quantities
endolith
@endolith: Wszystko naprawdę zależy tylko od tego, jakiego rodzaju matematyki chcesz. Podstawy są units, ale oczywiście nie ma symbolicznej algebry ani wyższej matematyki.
Benjamin Bannier
2

Przeważnie dzielę się Twoimi pomysłami na temat idealnego kalkulatora i wadami korzystania z GNU Units i Wolfram i stworzyłem własny kalkulator online, który umieściłem online na PhyCalc.com . Wykonuje własną algebrę jednostek dla jednostek SI i używa jednostek GNU do konwersji na inne jednostki lub jako rezerwę, gdy samo wyrażenie zawiera jednostki inne niż SI.

Jego celem jest interpretacja danych wejściowych Unicode tam, gdzie ma to sens. I stara się mądrze zgadywać dokładną ilość i odpowiednią jednostkę. Automatycznie wstawia prefiksy SI. (podobnie jak mój sprawdzony stary kalkulator kieszonkowy Casio w trybie „ENG”)

Kilka komentarzy na temat danych wejściowych i odpowiedzi dotyczących „idealnego kalkulatora”:

sqrt (4 * k * 25 ° C * 1 kΩ * (20 kHz - 20 Hz)) = 0,57357 μV

Nie jest dokładnie dokładne automatyczne zakładanie, że ° C jest temperaturą absolutną. Również k nie jest dokładnie jednoznacznym symbolem stałej Boltzmanna. Powinno to jednak dać wymaganą odpowiedź:

sqrt(4*1.38064852e-23J/K*(273.15K+25 °C) * 1 kΩ * (20 kHz - 20 Hz)) in μV

Te zawodzą w jednostkach GNU:

3,5 miliarda kilowatogodzin rocznie

1 stopa / prędkość dźwięku

Alternatywami dla jednostek GNU mogą być:

3.5 billion kWh per year
1 ft / mach in ms

1 / (2 · π · 100 Hz · 30pF) → om

Możesz pominąć część „→ om”. Właśnie to miałem na myśli mówiąc „sprytnie zgadując ilość” :-).

−10 dBV + 4 dB + 10 dB - 12 dB → dBu

Jednostki GNU mają pewną konwersję dB, ale definiuje się je jako 10 ^ (x / 10), który jest skalarem, którego nie doda do napięcia, przy założeniu, że kalkulator powinien rozpoznać, że powinien skalować napięcie zamiast mocy i zamiast tego należy zastosować skalowanie 10 ^ (x / 20). To byłoby bardzo fajne, ale obawiam się, że jest to most zbyt daleko dla jednostek GNU. To da przynajmniej poprawną odpowiedź przy użyciu jednostek GNU:

 1V*dB(-10)^0.5*dB(4)^0.5*dB(10)^0.5*dB(-12)^0.5 → dBu

Ale rozumiem, dlaczego możesz uznać to za nieintuicyjne.

W przeciwnym razie myślę, że PhyCalc.com może zbliżyć się do twojego idealnego kalkulatora.

Aby mieć do niego szybki dostęp, mapuję do niego mój dedykowany klawisz klawiatury kalkulatora, dodając do następującej pary ciąg nazwa / wartość (REG_SZ) w rejestrze systemu Windows:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18]
"ShellExecute"="http://phycalc.com"
Ronald
źródło
-1

Wolfram Alpha jest w stanie zepsuć matematykę i nie wymaga pobierania ani instalowania czegokolwiek.

Sprawdź tutaj, jak korzystać z jego funkcji matematycznych.

Majik
źródło