• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Standardabweichung mittels calc berechnen

A

Anonymous

Gast
Systemcrasher schrieb:
in calc heißt "SQRL" "root (n,2)" für die 2. Wurzel aus n

Nur was das
Code:
| bc -l
bedeutet, habe ich noch nicht rausgefunden, also wie ich das in calc umsetze.

Also für was das "Pipe"-Zeichen in der Gleichung steht

das Programm "/usr/bin/bc" ist ein präzisions- Rechentool speziell für die Konsole. Die zusätzliche Option "-l" sagt das es die "große" Gleitkommalibrary benutzen soll. Das Ding ist also weiter nichts wie ein Taschenrechner für die Konsole, aber mit einer schier unbegrenzter Stellenanzeige, und damit sehr viel genauer als alles Normale. calc nutzt intern mit 100%iger Sicherheit die selbe Rechenlibrary aber bc ist ein einfaches Konsol Frontend für Berechnungen und diese Library, das als universelles Filterkomando benutzt werden kann und so einfach in Scripte alle Art verbaut werden kann.

Damit man den Taschenrechner mit Zahlen und Operanten füttern kann, wo er doch keine Tastatur hat, muss man ihm die Rechenaufgabe übergeben. Dafür gibt es mehrere Möglichkeiten, hier wurde die folgende benutzt

Die Rechenaufgabe wird per Pipe einfach an die Standardeingabe von bc übergeben, damit man sie auf die Standardausgabe erstmal erzeugt bekommt, gibt man die Rechenaufgabe einfach per echo aus.


also es soll einfach mal gerechnet werden "2 x 4 +3 "
Code:
echo "2 * 4 + 3" | bc
Option "-l" brauchen wir hier nicht, da es eine Ganzzahlenoperation ist. Ergebnis 11 sollte richtig sein.

oder Aufgabe "( 22 / 7 ) zum Quadrat"
Code:
echo "( 22 / 7 )^2" | bc -l
hier nehmen wir jetzt natürlich "-l " mit rein. 22/7 ist ungefähr PI also sollte das Ergebnis etwas größer als 3x3 sein.

Wurzelziehen dann einfach (hier Wurzel aus 2)
Code:
echo "sqrt(2)" | bc -l

und die Genauigkeit hinter dem Komma kann man einfach mit zusätzlichen "scale= " getrennt mit einem ";" angeben hier mal als Beispiel 100 Stellen hinter dem Komma bei der Wurzel aus 2
Code:
echo "scale=100;sqrt(2)" | bc -l

Wenn du hier im Form ein bisschen suchst, solltest du auch das errechnen von PI bis auf ein paar 10000 Stellen oder das errechnen von "e" finden. Das hatten wir hier schon mal als Rechen-Geschwindigkeitstest für CPUs in einem oder mehreren früheren Beiträgen.

Als Einstieg könnte eventuell das hier helfen, dort wird interaktiv mit bc gerechnet, gibt aber bestimmt noch bessere Seiten.

Oben die Berechnung der Fakultät definiert eine eigene Funktion aber ansonsten genau wie das Bashscript wird dort nichts weiter als das gemacht, das ich hier beschrieben habe, ist eigentlich schon die ganze Kunst. Nur irgendwie musst du deine theoretischen Formeln in Rechenbare Formeln umwandeln. ;)

robi
 
Systemcrasher schrieb:
abgdf schrieb:
Weil Dein "man sqrt" wahrscheinlich "SQRT(3)" zeigt, die Dokumentation der C-Funktion "sqrt();". ;)

Wie es aussieht, kennt bash diesen Befehl bzw. die Funktion bei mir gar nicht.
Zwar gibt "SQRT()" eine Eingabeerwartung, aber egal was ich eingebe, es kann damit dann nichts anfangen.
Es geht ja auch um die Funktion für die Sprache C (und nicht einen fertigen bash-Befehl). Nenn' dies mal "wurzel.c":
Code:
#include <stdio.h>
#include <math.h>

/* wurzel.c */

int main()
{
    printf("%f ist die Wurzel von 99.\n", sqrt(99));
    return 0;
}
kompilier das mit
Code:
gcc wurzel.c -lm -o wurzel
und führe dann
Code:
./wurzel
aus. Dann sollte das klarer werden.
 
robi schrieb:
Hab mir mal den Spaß gemacht eines der Pseudorechenbeispiele von RME in die Bash umzusetzen.
robi

Mal eine ganz dumme Frage:

Kann es sein, daß bestimmte Funktionen nicht automatisch in der Bash implementiert sind?

Weil:

Zunächst habe ich Dein Script auf meinem (neu aufgestzten und aktualisierten) Arch-Rechner getestet - und bekam Fehlermeldungen wie oben beschrieben.

Heute habe ich das Gleiche auf meinem Puppy-Rechner versucht - und siehe da: Er rechnet es und liefert ein plausibles Ergebnis ohne Fehlermeldungen!

Code:
/root/bash.versuch
Erwartungswertwert = 1600.00000000000000000000 +/- 15.49193338482966754071

Natürlich habe ich das Script in allen Fällen ausführbar gemacht (allerdings mit mc, das geht bequemer). ;)


Allerdings: Die Perl-Scripte laufen auch hier nicht.

Bei Puppy ist aktuell diese Versioon drauf:

Code:
sh-3.00# perl --version

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi

Copyright 1987-2009, Larry Wall

bash:

Code:
sh-3.00# sh --version
GNU bash, version 3.00.16(1)-release (i486-t2-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

Anscheinend verlinkt hier sh nach bash.

Auf dem Arch-Rechner kann ich erst Montag wieder nachschauen.

Edit:

abgdf schrieb:
#
kompilier das mit
Code:
gcc wurzel.c -lm -o wurzel

:schockiert: :schockiert: :schockiert: :schockiert: :schockiert:

Puppy hat anscheinend kein gcc! :irre: :irre:
 
A

Anonymous

Gast
Wenn du richtig mit Linux arbeiten willst, dann musst du dir schon ausgewachsene Systeme installieren und keine MinimalSysteme bei denen die Hälfte der Befehle nicht implementiert oder auf das aller notwendigste kastriert sind. ;)

Mal im Ernst, die einzelnen Distributionen gehen hier ein bisschen getrennte Wege, was hier im Forum an Beispielen eingestellt wird, sollte immer auf Suse und in aller Regel auch auf vielen anderen großen Distributionen funktionieren, Minimale Systeme und einige spezielle Distributionen machen hier und einige Ausnahmen. GCC ist bei vielen Distributionen nicht per default dabei, aus Sicherheitsgründen hat sowas auf Servern und ähnlichen Rechner die mehr oder weniger offen im Netz stehen meist auch nichts zu suchen.

robi
 
Systemcrasher schrieb:
Puppy hat anscheinend kein gcc! :irre: :irre:
Bei Lucid Puppy benötigt man zum Entwickeln die "Development Extensions", die Datei ...devx... hier:

http://distro.ibiblio.org/pub/linux/distributions/puppylinux/puppy-5.2.8/

139 MB, größer als Puppy selbst.

'Ne "große" Distribution zu verwenden, ist meist schon ganz empfehlenswert. Obwohl ich gerade Puppy sonst sehr gut gelungen finde.
 
abgdf schrieb:
Systemcrasher schrieb:
Puppy hat anscheinend kein gcc! :irre: :irre:
Bei Lucid Puppy benötigt man zum Entwickeln die "Development Extensions", die Datei ...devx... hier:

http://distro.ibiblio.org/pub/linux/distributions/puppylinux/puppy-5.2.8/

139 MB, größer als Puppy selbst.


:D Auf dem aktuellen Rechner habe ich gerade noch 204 MB frei. :D

Aber im Ernst: Arch ist doch eingentlich eine "große" Distri (zumindest groß-artig), also sollte es dort auch existieren. Schaue mir das morgen mal an.

Was Suse betrifft: Der Großteil meiner Hardware ist bei Suse & Co. zu sehr mit dem BS beschäftigt, als daß ich da noch sinnvoll mit arbeiten kann.

Edit:

Habe gerade mal nachgeschaut: Die Arch-Repo enthält gcc. Muß halt nur nachinstalliert werden.

Ich habe zwar auch Rechner, auf denen Suse stabil läuft, aber die nutze ich nur selten, weil eben andere Dinge nicht so stabil laufen - wobei: inzwischen gabs ja ein paar Updates ....
 
Oben