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

Lösung nicht linearer Gleichungen mittels Gauss-Newton-Ver.

 

leo.laza
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 19.06.20
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 19.06.2020, 12:37     Titel: Lösung nicht linearer Gleichungen mittels Gauss-Newton-Ver.
  Antworten mit Zitat      
Guten Tag,

wie oben bereits erwähnt habe ich ein Problem mit der Lösung eines nicht linearen Gleichungssystem mittels dem Gauß-Newton-Verfahren (Thema Kettenlinie mit punktueller Krafteinwirkung). Die Aufgabe besteht darin, die unbekannten Parameter (7 Stck.) anhand der sieben Gleichungen mittels Gauss-Newton zu Lösen.



Normalerweise wird dieses ja für folgendes verwenden:

"Das Gauß-Newton-Verfahren ist geeignet, iterativ für eine Anzahl von Gleichungen ein Minimum zu finden. Bei der Ausgleichsrechnung wurden die Residuen minimiert. Gleiches geschieht hier mit einer anderen Anwendung. Die nichtlinearen Gleichungen werden wie beim Newton-Verfahren so umgestellt, dass auf der rechten Seite stets null steht. Sie starten mit einem Schätzwert der gesuchten Größen und erhalten für jede Gleichung eine Abweichung, die solange iterativ bearbeitet wird, bis ein (kleines) Abbruchkriterium erfüllt ist." (Zitat, Professor)

Den Code finde ich ebenfalls hier im Forum für eben das oben genannte typische Verfahren zur Approximation bei Vorgabe einer Punktwolke.
Nun habe ich diese ja eben nicht und bin leider ein wenig überfragt wie ich dieses Lösen soll.

Im folgenden lade ich die Syntax welche ich gefunden habe einmal hoch und weiterhin die Gleichungen mit den unbekannten (diese wurden bereits mit der fsolve-Funktion gelöst).

___________________________________________________________________
Lösung fsolve:
_____________________________________________________________________
%Bedinungen aktueller Stand

f =@(x)[x(5)*cosh(x(1))+x(2);
x(6)*cosh((0.7/x(6))+x(3))+x(4)-0.4;
x(5)*cosh((x(7)/x(5))+x(1))+x(2)-x(6)*cosh((x(7)/x(6))+x(3))-x(4);
x(5)+5*(1/2)-x(6);
x(5)*sinh((x(7)/x(5))+x(1))+5*0.866-x(6)*sinh((x(7)/x(6))+x(3));
x(5)*(sinh((x(7)/x(5))+x(1))-sinh(x(1)))+ x(6)*(sinh((0.7/x(6))+x(3))-sinh((x(7)/x(6))+x(3)))-1;
x(5)*(sinh((x(7)/x(5))+x(1))-sinh(x(1)))-0.15]
%-------------------------------------

%-------------------------------------
% Schätzwerte für x(1) bis x(7)

x0 =[-0.88,-0.37,-0.88,-0.37,0.26,0.26,0.15]

%-------------------------------------
% Ausführung fsolve

options = optimoptions('fsolve','Display','iter');
mitGewicht = fsolve(f,x0,options);

_____________________________________________________________________
Nun der Code aus dem Netzt:
_____________________________________________________________________
function [unknowns,steps,S] = GaussNewtonAlgorithmus()
close all
clear all
clc
format long
tol = 1e-6; % Toleranz
maxstep = 500; % Festlegung der max. Iteration
y = [1 0.881 0.619 0.069 -0.312 -0.55 -0.463 -0.317 -0.123 0.072 0.227 0.196 0.17 0.079 -0.004 -0.079 -0.113];
t = [0 0.6 1.2 1.8 2.4 3.0 3.6 4.2 4.8 5.4 6.0 6.6 7.2 7.8 8.4 9.0 9.6];
p = [1;0.5;1;1];

m = length(t); % Anzahl an Zeilen
n = length(p); % Anzahl an Spalten
pold = p; % Erreichen der Genauigkeit

for k=1:maxstep % Festlegung der Iteration

for i=1:m
for j=1:n

J(i,j) = df(t(i),p(1,1),p(2,1),p(3,1),p(4,1),j);
JT(j,i) = J(i,j);
end
end

S = 0;
for i=1:m
r(i,1) = (p(1,1)*exp(-p(2,1)*t(i))*sin(p(3,1)*t(i)+p(4,1)))-y(i);
S = r(i,1)^2;
end
p = pold-(JT*J)\(JT*r);
unknowns = p;

err(k) = p(1,1)-pold(1,1); % Fehlerberechnung
if (abs(err(k)) <= tol);
break
end
pold = p; % Par. entsprechen Genauigkeit
end
steps = k;
for i=1:m
f(i) = (p(1,1)*exp(-p(2,1)*t(i))*sin(p(3,1)*t(i)+p(4,1))); % Berechnung der Funktionswerte
end
% -------------------------------------------------------------------------
% Grafische Darstellung der Ergebnisse
% -------------------------------------------------------------------------
hold all;
grid on;
plot(t,y, '*r'); % Plotten der Punktwolke
plot(t,f,'b'); % Plotten der Funktion
% -------------------------------------------------------------------------
% Titel,Legende und Achsenbeschriftung
% -------------------------------------------------------------------------
title('Gauss-Newton-Algorithmus')
xlabel('t [s]')
ylabel('Auslenkung [m]')
legend('data','best-fit')
hold off
% -------------------------------------------------------------------------
% Ausgabe der Parameter a,b&c hinsichtlich "best fit"
% -------------------------------------------------------------------------
a = p(1);
b = p(2);
c = p(3);
d = p(4);
In = k;
str1 = ['Parameter a = ' num2str(p(1))];
str2 = ['Parameter b = ' num2str(p(2))];
str3 = ['Parameter c = ' num2str(p(3))];
str4 = ['Parameter d = ' num2str(p(4))];
str5 = ['Anzahl der Iterationen = ' num2str(k)];
disp(str1)
disp(str2)
disp(str3)
disp(str4)
disp(str5)

% -------------------------------------------------------------------------
% Switchbefehl für Parameter a,b&c / partielle Ableitungen
% -------------------------------------------------------------------------
function value = df(t,a,b,c,d,index)
switch index
case 1
value = exp(-b*t)*sin(c*t+d);% partielle Ableitung nach a
case 2
value = -t*exp(-b*t)*sin(c*t+d)*a; % partielle Ableitung nach b
case 3
value = t*cos(c*t+d)*exp(-b*t)*a; % partielle Ableitung nach c
case 4
value = cos(c*t+d)*exp(-b*t)*a; % partielle Ableitung nach d
end
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 - 2024 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.