2016-04-22 22 views
0

Ich verwende Matlab, um einen Finite-Elemente-Methodencode automatisch zu parametrieren und zu starten. Ich eine Parametertextdatei schreiben, die der Code FEM wird gelesen, und dann für den FEM-Code aufrufe mit:Matlab "System" -Befehl blockiert

[status,cmdout]=system(['FEMApp ' current_folder '\MyFile']); 

Manchmal wird der FEM-App, nicht in der Lage ihre Aufgabe zu erfüllen, und in dem Befehl eine Fehlermeldung senden Fenster. Bis jetzt konnte ich die Fehlermeldung in cmdout erkennen und mit dem nächsten Parametersatz fortfahren.

Aus einem unbekannten Grund hat sich der Systembefehl anders zu verhalten: er bleibt scheinbar für immer hängen (Matlab ist immer im Modus "busy"). Habe ich etwas geändert, ohne es zu merken?

Vorerst verwende ich die folgende Lösung:

[status,cmdout]=system(['FEMApp ' current_folder '\MyFile &']); 
pause(45) 
system(['taskkill' 'FEMProcessus') 

Es funktioniert richtig, aber es verlangsamt meine Berechnung eine Menge (~ x5), da Matlab immer 45 secondes auch warten, wenn die Aufgabe abgeschlossen ist in viel weniger Zeit.

Kann jemand die Veränderung im Verhalten von Matlab erklären? Hat jemand eine klügere Arbeit als meine?

Antwort

0

Es sollte angemerkt werden, dass Matlab ein Interpreter eher als ein Compiler ist. Das bedeutet, dass es viele interne Operationen ausführt, die vom Entwickler verborgen sind, von denen einige sehr viel CPU-Ressourcen benötigen. Finite-Elemente-Anwendungen sind hinsichtlich der Verwendung von CPU- und RAM-Ressourcen sehr numerisch intensiv. Es ist möglicherweise keine gute Idee, Matlab für die FEM-Programmierung zu verwenden. Versuchen Sie, eine numerisch orientierte Sprache wie C oder Fortran zu verwenden, wo Sie die volle Kontrolle über die Speicherzuweisung und die arithmetischen Operationen haben.

Verwandte Themen