![]() |
AW: Lineares Gleichungssystem lösen
Zitat:
A[0, 0] := l1*MA; A[0, 1] := l2*MB; A[0, 2] := l3*MC; A[0, 3] := 0; A[0, 4] := 0; A[0, 5] := 0; A[0, 6] := 0; A[0, 7] := 0; A[0, 8] := 0; A[0, 9] := 0; A[0, 10] := 0; A[0, 11] := b1; A[1, 0] := 0; A[1, 1] := l2*MB; A[1, 2] := l3*MC; A[1, 3] := l4*MD; A[1, 4] := 0; A[1, 5] := 0; A[1, 6] := 0; A[1, 7] := 0; A[1, 8] := 0; A[1, 9] := 0; A[1, 10] := 0; A[1, 11] := b2; usw.. Ich habe lzha[] jetzt mit l vereinfacht Mir stellt sich jetzt noch die Frage, wie ich mit dem "SetLength" umgehe und vielmehr was es bedeutet? Das n müsste ja n= 11 sein. |
AW: Lineares Gleichungssystem lösen
Zitat:
Du mußt Dir die Matrix.pas angucken. Dort mußt Du 2 Matrizen erstellen und mit SolveLinEQ lösen. Das Ding ist sehr schnell, weil einige Teile über Assembler laufen. Und eigentlich sehr einfach. (Ich finde gerade kein Beispiel dafür :shock:) |
AW: Lineares Gleichungssystem lösen
Zitat:
Zitat:
|
AW: Lineares Gleichungssystem lösen
Hier ist wenigstens ein Beispiel aus dem Testsystem:
Delphi-Quellcode:
procedure TestTThreadedMatrix.TestMatrixSolve;
const cBlkWidth = 512; cBlkSize = cBlkWidth*cBlkWidth; var a, x1, x2, b : TDoubleDynArray; i : integer; start, stop : int64; index : integer; m1, m2 : IMatrix; mb : IMatrix; begin {$IFDEF FMX} Setup; {$ENDIF}; SetLength(a, cBlkSize); SetLength(b, 3*cBlkWidth); SetLength(x1, 3*cBlkWidth); SetLength(x2, 3*cBlkWidth); RandSeed := 15; for i := 0 to cBlkSize - 1 do a[i] := Random - 0.5; for i := 0 to 3*cBlkWidth - 1 do b[i] := Random - 0.5; mb := TDoubleMatrix.Create(b, 3, cBlkWidth); m1 := TDoubleMatrix.Create(a, cBlkWidth, cBlkWidth); m2 := TThreadedMatrix.Create(a, cBlkWidth, cBlkWidth); start := MtxGetTime; m1.SolveLinEQInPlace(mb); stop := MtxGetTime; Status(Format('Blocked LU decomp: %.2fms', [(stop - start)/mtxfreq*1000])); start := MtxGetTime; m2.SolveLinEQInPlace(mb); stop := MtxGetTime; Status(Format('Threaded LU decomp: %.2fms', [(stop - start)/mtxfreq*1000])); index := 0; Check(CheckMtxIdx(m1.SubMatrix, m2.SubMatrix, index), Format('error Lin equation solve. Error at x[%d] = %.5f, y[%d] = %.5f', [index, x1[index], index, x2[index]])); {$IFDEF FMX} TearDown; {$ENDIF}; end; |
AW: Lineares Gleichungssystem lösen
Zitat:
Irgendwie ist mir der Code nicht schlüssig. Warum braucht es z.B. einen Zeitparameter? |
AW: Lineares Gleichungssystem lösen
Zitat:
|
AW: Lineares Gleichungssystem lösen
Ich habe das einfach nur in den Editor getippt. Probier mal aus. Ich habe schon lange keine Matrizen mehr lösen müssen.:wink:
Delphi-Quellcode:
var
a, b : TDoubleDynArray; m1, m2, mres : IMatrix; begin a := [1,2,3]; b := [1,2,3,4,5,6,7,8,9]; m1 := TDoubleMatrix.Create(a, 1, 3); m2 := TDoubleMatrix.Create(b, 3, 3); try mres := m2.SolveLinEQ(m1); except // hier kommt was, wenn die Matrix nicht funktioniert end; write(mres[0,0].tostring); write(mres[0,1].tostring); write(mres[0,2].tostring); end; |
AW: Lineares Gleichungssystem lösen
Unabhängig von dem eigentlichen Problem empfehle ich mal das hier.
![]() Ist auch hier in der DP bekannt. ![]() |
AW: Lineares Gleichungssystem lösen
Zitat:
schreib bitte alle Deine 10 Gleichungen mit den konkreten Koeffizienten (= Zahlenwerten) auf, damit ich für Dich das Programm erstellen kann. Gruß, Andreas |
AW: Lineares Gleichungssystem lösen
Liste der Anhänge anzeigen (Anzahl: 2)
Moin Kegasetu,
mit dem Programm kannst Du Gleichungssysteme lösen. Die Daten mußt Du selbst eingeben. Die Größe der Systeme ist vom SpinEditN abhängig. Viel Erfolg beim Testen! Gruß Fiete |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz