Verfasst am: 29.07.2014, 11:17
Titel: Zusatzbedingung bei Ausgleichungsrechnung
Hallo,
ich habe folgendes Problem: Ich habe eine Dgl 2. Ordnung, die ich an meine Messwerte fitten möchte, um den Parameter C1 zu bestimmen. Zusätzlich soll die Normalisierungsbedingung erfüllt werden:
mit den Grenzen und
Ich habe es geschafft, die Dgl zu lösen und zu fitten. Dabei habe ich die Dgl 2.Ordnung in ein Dgl-System umgeformt und verwende lsqnonlin zum Fitten und ode45 zum Dgl lösen.
Nun ist die Dgl sehr von den Startwerten x_exp(1) abhängig. Schon eine kleine Änderung bei meinen experimentellen Messungen an dieser Stelle bewirkt eine große Änderung für C1, wodurch mein Ergebnis meiner Meinung nach etwas beliebig wird. Ich habe festgestellt, dass sich der Kurvenverlauf mehr den Messwerten nähern würde, wenn sie über dem Startwert beginnen würde. Allerdings startet bei meiner aktuellen Programmierung die Kurve immer genau mit dem angebenen experimentellen Startwert und fittet nicht an dieser Stelle. Kann man das Problem irgendwie lösen, indem man z.B. noch die Normalisierungsbedingung einbaut und der Startwert dadurch nicht mehr relevant ist? Ist mit lsqnonlin eine solche Zusatzbedingung möglich?
Ich bin über jede Hilfe sehr dankbar!
Hier mein Matlabcode mit dem Hauptprogramm und den zwei Unterprogrammen:
Code:
%main function
C1_0 = 0.0001;
x_exp = [-17*pi/36-15*pi/36-13*pi/36-11*pi/36-9*pi/36-7*pi/36-5*pi/36-7*pi/72-5*pi/72-3*pi/72 -pi/72pi/723*pi/725*pi/727*pi/725*pi/367*pi/369*pi/3611*pi/3613*pi/3615*pi/3617*pi/36]';
y_exp = [0.0031830990.0127323950.0095492970.0063661980.0222816920.028647890.0732112740.1336901520.28011270.783042321.8080001542.0944790511.9926198881.5533522451.1395493930.4933803240.1496056470.0254647910.0063661980.0031830990.0031830990]';
C1 = lsqnonlin(@(c)fun_fit(c,x_exp,y_exp),C1_0);
x = x_exp(1):0.001:x_exp(end); % Orientierungsintervall
y0 = [y_exp(1)1]; % Startwerte bei -pi/2 für Y1 und Y2 [x,Y] = ode45(@(x,Y)fun_int(x,Y,C1),x,y0);
plot(x, Y(:,1), x_exp, y_exp, 'square'); % Plotten von Y1 = Verteilungsdichtefunktion und den exp. Werten xlabel('Orientierung \Phi'); ylabel('Verteilungsdichtefunktion \Psi'); % Achsenbeschriftungen xlim([-pi/2pi/2]); % x-Achse genau von -pi/2 bis pi/2 set(gca,'XTick',[-pi/2, 0, pi/2])% Änderung x-Achsen-Skalenbeschriftung grid on % Gitternetzlinien
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.