Numerik-Bibliothek für Lazarus

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.

Re: Numerik-Bibliothek für Lazarus

Beitragvon wp_xyz » 15. Jan 2019, 18:46 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.
wp_xyz
 
Beiträge: 2800
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 16. Jan 2019, 07:38 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.
ErnstVolker
 
Beiträge: 185
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon fliegermichl » 16. Jan 2019, 09:52 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.
 
fliegermichl
 
Beiträge: 252
Registriert: 9. Jun 2011, 08:42

Beitragvon Warf » 16. Jan 2019, 19:28 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.
Warf
 
Beiträge: 1067
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon ErnstVolker » 18. Jan 2019, 07:24 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
ErnstVolker
 
Beiträge: 185
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon ErnstVolker » 25. Jan 2019, 19:25 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:
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.


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
ErnstVolker
 
Beiträge: 185
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

• Themenende •
Vorherige

Zurück zu Allgemeines



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron
porpoises-institution
accuracy-worried