Numerik-Bibliothek für Lazarus
Re: Numerik-Bibliothek für Lazarus
Einen Vektor mit einer Zahl zu multiplizieren, oder eine Matrixmultiplikation - das sind schlechte Beispiele. Wenn es nur um sowas geht, würde ich lieber die Schleifen schreiben oder die entsprechenden Routinen lokal implementieren als mich in eine umfangreiche Mathematik-Bibliothek einzuarbeiten, Bequemlichkeit hin oder her. Erst ab Matrix-Inversion, Eigenwerten etc. wird eine Mathe-Bibliothek interessant.
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Numerik-Bibliothek für Lazarus
Ich habe in Python ein Weg-Zeit-Diagramm gebastelt. Eine der dort dargestellten Kurven setzt sich aus drei Teilbereichen zusammen. Das funktioniert mit "numpy" hervorragend mit nur 15 Zeilen Code. Also sowas wie numpy und scipy für Lazarus wäre schon nicht schlecht.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Numerik-Bibliothek für Lazarus
Du kannst dafür aber auch einen Operator überschreiben. Das Beispiel hat ein Formular mit einem Edit und einem Button. In das Edit muss eine Zahl eingetragen werden.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
public
end;
TVector = record
x, y, z, w : Single;
end;
operator + (V : TVector; Wert : Single) : TVector;
var
Form1: TForm1;
implementation
operator+(V: TVector; Wert: Single): TVector;
begin
Result.x := v.x + Wert;
Result.y := v.y + Wert;
Result.z := v.z + Wert;
Result.w := v.z + Wert;
end;
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var v : TVector;
begin
with v do
begin
x := 1;
y := 2;
z := 3;
w := 1;
end;
v += StrToFloat(Edit1.Text);
MessageDlg(Format('Ergebnis: x=%.3f y=%.3f z=%.3f w=%.3f', [v.x, v.y, v.z, v.w]), mtInformation, [mbOk], 0);
end;
end.
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Numerik-Bibliothek für Lazarus
Soweit ich weiß wird es sehr oft so gemacht das man einfach nur wrapper auf bereits bestehende Bibliotheken wie BLAS verwendet. Numpy für Python z.B. macht nichts anderes als aus dem Python Code Fortran un C Bibliotheken aufzurufen. Diese bibliotheken sind natürlich zum einen schneller als alles was man in Python schreiben könnte (ist ja immernoch nur eine Scriptsprache) und gleichzeitig sind die von Profis geschrieben die die auch bis zum gehtnichtmehr optimiert haben. Ich würde an deiner Stelle danach mal ausschau halten.
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Numerik-Bibliothek für Lazarus
Guten Morgen,
hallo fliegermichel, hallo warf,
vielen Dank für Eure Tips.
Armadillo macht vermutlich auch nix anderes als einen Wrapper auf DLL's.
Das mit "operator +" ist nicht schlecht. Damit kann man sich das Addieren und Multiplizieren schon mal etwas erleichtern.
DANKE!
Schönes WE
Volker
hallo fliegermichel, hallo warf,
vielen Dank für Eure Tips.
Armadillo macht vermutlich auch nix anderes als einen Wrapper auf DLL's.
Das mit "operator +" ist nicht schlecht. Damit kann man sich das Addieren und Multiplizieren schon mal etwas erleichtern.
DANKE!
Schönes WE
Volker
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Numerik-Bibliothek für Lazarus
Guten Abend im Forum,
ich packe mein Anliegen mal hier hin, da es entfernt mit Gebastel an Vektoren zu tun hat.
Ich bin hier : http://lists.freepascal.org/pipermail/f ... 53891.html darauf gestoßen, dass man "Concat" auch auf Arrays anwenden kann. Und als Schreibweise sollen eckige Klammern funktionieren. Wenn ich aber das hier:
ausprobiere, dann kommen folgende Fehlermeldungen:
Beispiel.pas(6,9) Error: Incompatible types: got "Set Of Byte" expected "{Dynamic} Array Of LongInt"
Beispiel.pas(7,11) Error: Ordinal expression expected
Beispiel.pas(9) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode
Kompilierung fehlgeschlagen.
Müssen hier Compilerschalter gesetzt werden? Wenn ja, welche?
Vielen Dank und viele Grüße
Volker
ich packe mein Anliegen mal hier hin, da es entfernt mit Gebastel an Vektoren zu tun hat.
Ich bin hier : http://lists.freepascal.org/pipermail/f ... 53891.html darauf gestoßen, dass man "Concat" auch auf Arrays anwenden kann. Und als Schreibweise sollen eckige Klammern funktionieren. Wenn ich aber das hier:
Code: Alles auswählen
Program Beispiel;
var
t: array of LongInt;
t2: array of array of LongInt;
begin
t := [1, 2, 3, 4];
t2 := [[1, 2, 3], [4, 5]];
end.
Beispiel.pas(6,9) Error: Incompatible types: got "Set Of Byte" expected "{Dynamic} Array Of LongInt"
Beispiel.pas(7,11) Error: Ordinal expression expected
Beispiel.pas(9) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode
Kompilierung fehlgeschlagen.
Müssen hier Compilerschalter gesetzt werden? Wenn ja, welche?
Vielen Dank und viele Grüße
Volker