Verfasst am: 21.09.2010, 11:19
Titel: Gibt's was schnelleres als x=A\b?
Hallo zusammen,
ich bastle gerade an einem Code, in dem massiv (ca. 800.000 Mal) das Gleichungssystem
A*x = b gelöst werden muss. Das klappt auch soweit ganz gut, jedoch dauerts relativ lange (kein Wunder bei 800.000 Aufrufen).
Nun stellt sich für mich die Frage, ob es evtl. schnellere Möglichkeiten der Lösung gibt, z.B. über mex Funktionen oder so.
Das Gleichungssystem selbst ist relativ klein. Zur Zeit sinds 3 Unbekannte, wobei das in Zukunft auf 5 oder 6 anwachsen kann.
die Frage dürfte sein:
- Welche Dimensionen haben A, b?
- Sind es öfter mal ähnliche A?
- Was soll mit den Resultaten gemacht werden?
Grundsätzlich ist der \-Algorithmus schon stark optimiert.
Grüße,
Harald
Gast Ritis
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.09.2010, 13:59
Titel:
Ja stimmt. Analytisch wäre auch am Besten.
Das Gleichungssystem wird verwendet um die Diffusion verschiedener Stoffgemische zu bestimmen. Nun soll das Programm für verschieden zusammengesetzte Stoffgemische funktionieren. Daher würde ich ungern eine analytische Lösung für ein 3-Stoffsystem hard codieren, da dann alles andere nicht mehr funktioniert.
Ich hätte gedacht, dass es evtl. einen schnellen numerischen Löser für kleine Systeme gibt. Klein deshalb, weil ich davon ausgehen kann, dass die Stoffanzahl fünf oder sechs nicht überschreiten wird.
Viele Grüße
Andi
Gast Ritis
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.09.2010, 14:38
Titel:
Ich habe mir schon gedacht, dass x= A\b schon ordentlich optimiert ist. Wenn man sich die Hilfe dazu ansieht,dann ist da schon an einiges gedacht worden ...
Das System ist quadratisch und soweit ich weiß voll besetzt. Ich bin mir nicht sicher ob's auch noch symmetrisch ist. Muss ich mal schauen.
Die Größen also A=3x3; b = [3x1]; x = [3x1] oder entsprechend größer (je nach Anzahl der betrachteten Spezies). Sicherlich maximal A=6x6; b = [6x1] und x=[6x1];
Alles andere wird schwierig...
Simulationshintergrund: Beschreibung der Diffusion in porösen Medien durch ein angepassten Maxwell-Stefan Modell.
Ich habs jetzt mal ausprobiert. Zur Lösung von 8e5 Gleichungsystemen braucht mein PC etwa 11s mit der backslash Methode und 0.4s mit der symbolischen Lösung.
Gast Ritis
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.09.2010, 14:49
Titel:
Hi,
ich habe mir die Mühe gemacht, ohne Symbolic TB, das Gleichungssystem für ein 3x3 System analytisch zu lösen und ein entsprechendes Script zu schreiben. Die Symbolic TB möchte ich nicht dauerhaft im Code verankern, da dies die Nutzbarkeit einschränkt. (Bei mir in der Firma hat nicht jeder diese TB).
Das klappt auch hervorragend und schnell. Hier das Script
Code:
function x = analytical_solution(a,b)
%solves linear system ax=b
% a = Matrix size [3x3] % b = vector size [3x1] % x = vector size [1x3]
Ich dachte nun, dass ich das Ding einfach per c-mex File einbinden kann und dann NOCH mehr Speed rauszuholen.
Code:
//You can include any C libraries that you normally use
#include "math.h"
#include "mex.h" //--This one is required
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
//All code and internal function calls go in here!
//---Inside mexFunction---
//Declarations
// Pointer to Input Arrays
mxArray *xData, *yData;
// a - Matrix a[3x3]
// b - Vector b[3,1]
// x - Vector c[1,3] double *a, *b, *x;
Der Witz ist nun aber, dass das mex -File langsamer (nicht dramatisch, aber signifikant) ist... Versteh ich nicht....
Habt Ihr einen Tipp?
Andi
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.