WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zusatzbedingung bei Ausgleichungsrechnung

 

reburg
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 29.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2014, 11:17     Titel: Zusatzbedingung bei Ausgleichungsrechnung
  Antworten mit Zitat      
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:
\int_a^b \! f(x) \, dx = 1 mit den Grenzen a = -\pi/2 und b = \pi/2

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/72 pi/72 3*pi/72 5*pi/72 7*pi/72 5*pi/36 7*pi/36 9*pi/36 11*pi/36 13*pi/36 15*pi/36 17*pi/36]';
y_exp = [0.003183099 0.012732395 0.009549297 0.006366198 0.022281692 0.02864789 0.073211274 0.133690152 0.2801127 0.78304232 1.808000154 2.094479051 1.992619888 1.553352245 1.139549393 0.493380324 0.149605647 0.025464791 0.006366198 0.003183099 0.003183099 0]';
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/2 pi/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


Code:
function [ dY ] = fun_int( x,Y,C1 )
%Integration des DGL-Systems
dY = zeros(2,1);
dY(1) = Y(2);
dY(2) = -1./C1.*((sin(x)).^2 .* Y(2) + 2.* cos(x).*sin(x) .* Y(1));
end


Code:
function [ Res ] = fun_fit(C1,x_exp,y_exp )
%calculation of ...
y0 = [y_exp(1) 0];
[x,Y] = ode45(@(x,Y)fun_int(x,Y,C1),x_exp,y0);
Res = (y_exp - Y(:,1));
end
Private Nachricht senden Benutzer-Profile anzeigen


reburg
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 29.07.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2014, 13:48     Titel:
  Antworten mit Zitat      
Hat niemand eine Idee? Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.