Verfasst am: 16.09.2013, 14:23
Titel: Non Linear LSQ Fit - Optimierung
Hallo Zusammen,
ich habe hier einen Code geschrieben, der mir den Fit berechnet zu meinem Modell. Allerdings ist der Code sehr rechenintensiv. Ich wollte Fragen, ob es möglichkeiten oder Algorithmen gibt die Performanter sind.
Ich habe die Ableitungen selber bestimmt. Dann die Wichtungen berechnet und das Ganze in einer Loop berechnet (Koeffizientenmatrix einsetzen, etc.). Der Code liefert auch das was gewünscht ist, er müsste nur schneller sein.
Code:
%function d_mono_exp_lsq_fit_perform_test(TE, TR, y, M0A, M0B, T2A, T2B, T1A, T1B, SD) % function [M0, T2] = d_mono_exp_lsq_fit_test(t,y)
%
% Fits following function to your data: y = M0A .* f_T1A .* exp(-TE./T2A) + M0B .* f_T1B .* exp(-TE./T2B) % Input: % TE: echo time % TR: repetation time % y: signal intensity % M0A, M0B: start value for M0 % T2A, T2B: start value for T2 % T1A, T1B: start value for T1 % SD: standard deviation of signal at respective TE (length of TE = length of SD)
%
% Output: % M0A, M0B, T2A, T2B
%
%
% 2013 DK --> non linear LSQ
%% simuliere Messwerte
TE = [3560100140280500800];
y = [252.07178.13106.2965.58520.65710.9986.3375];
%y = M0_start*exp(-t/T2_start);
SD = [11111510];
mit dem Profiler kannst du dir ansehen, wo die Zeit verbraucht wird.
Ein Großteil der Zeit wird für das Plotten verwendet, die Frage ist also: muss der Plot wirklich in jeder Iteration aktualisiert werden?
Zudem verwendest du die antike inline-Syntax. Ich würde stattdessen anonymous function handles verwenden.
ok merci, habe die inline functions ersetzt. ja plotet. nein der Plot selber muss nicht sein. Der ist nur hier ,um das Ergebnis zu sehen. Der verschwindet wieder.
Zuletzt bearbeitet von DeeKayMuc am 16.09.2013, 14:59, insgesamt einmal bearbeitet
ok merci, änder ich ab. Was wäre sonst noch möglich?
der code läuft mit den vorgeschlagenen änderungen bei mir ca 130 mal schneller. also in 0.1 sec. welche performens hättest du denn gerne. ? sehr viel mehr einfache dinge fallen mir erstmal nicht ein.
_________________
Verfasst am: 16.09.2013, 15:17
Titel: Re: Non Linear LSQ Fit - Optimierung
Hallo DeeKayMuc,
Wenn das PLOT-Kommando nennenswert Zeit benötigt, wäre es effizienter, nur einmal zu plotten und danach die Handles aus dem Output des Plot-Befehls zu verwenden, um die XData und YData mit den neuen Werten zu belegen.
Wir hätten das OptimizationTool sogar da. Würde das Sinn machen, um Perfomance zu generieren?
Es gibt keine Vorgabe wie schnell es sein soll. Nur so schnell wie möglich. Da das Tool letztendlich "512x512" aufgerufen werden muss um ein ganzes Bild durch zu arbeiten. Die Iteration von 1000 ist jetzt kein Muss. Da kommt noch eine Abbruchbedingung hin. Aber selbst bei 100 Iteration benötigt er noch 0.02 sek. was sich dann aufsummiert.
wenn die ergebnisse unabhängig voneinander sind würde sich mutliprozessing anbieten falls die toolbox vorhanden ist.
ob die optimization toolbox schneller ist kannst du ja mal test.
zu
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.