Diese soll mit Hilfe der lsqnonlin Funktion gelöst werden.
Code:
t = [0.60001.20001.80002.40003.00003.60004.20004.80005.40006.00006.60007.20007.80008.40009.00009.6000]% t-Werte
y=[0.8810.6190.069-0.312-0.550-0.463-0.317-0.1230.0720.2270.1960.1700.079-0.004-0.079-0.113]; % y-Werte
p0=[0.2,1,1]; % Startwerte Parameter
n = length(t);
for i=1:n % Aufbau des Vektors in y
yn(1,i)=y(1,i);
end for i=1:n % Aufbau des Vektors in t
tn(1,i)=t(1,i);
end
f = @(p)(exp(-p(1)*tn)* sin(p(2)*tn+p(3)))-yn;
Deine ersten options überschreibst du übrigens mit den zweiten. Allerdings gibt deine Zielfunktion ohnehin nicht den Gradienten zurück...
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
clc% Leeren des Command Window clearall% Leeren des Workspace closeall% Schließung aller Fenster
t = [0.60001.20001.80002.40003.00003.60004.20004.80005.40006.00006.60007.20007.80008.40009.00009.6000]% t-Werte
y=[0.8810.6190.069-0.312-0.550-0.463-0.317-0.1230.0720.2270.1960.1700.079-0.004-0.079-0.113]; % y-Werte
p0=[0.2,1,1]; % Startwerte Parameter
n = length(t);
for i=1:n % Aufbau des Vektors in y
yn(1,i)=y(1,i);
end for i=1:n % Aufbau des Vektors in t
tn(1,i)=t(1,i);
end
f = @(p)(exp(-p(1).*tn).*sin(p(2).*tn+p(3)))-yn;
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt');
[p] = lsqnonlin(f,p0,[],[],options);
a = p(1);
b = p(2);
c = p(3);
str1 = ['Parameter a = ' num2str(p(1))];
str2 = ['Parameter b = ' num2str(p(2))];
str3 = ['Parameter c = ' num2str(p(3))];
disp(str1) disp(str2) disp(str3)
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo,
ich möchte nun den Iterationsvorschritt grafisch darstellen, daher habe ich meinen Code bearbeitet.
Code:
clc% Leeren des Command Window clearall% Leeren des Workspace closeall% Schließung aller Fenster
t = [0.60001.20001.80002.40003.00003.60004.20004.80005.40006.00006.60007.20007.80008.40009.00009.6000]% t-Werte
y=[0.8810.6190.069-0.312-0.550-0.463-0.317-0.1230.0720.2270.1960.1700.079-0.004-0.079-0.113]; % y-Werte
p0=[0.5,1,1]; % Startwerte Parameter
n = length(t);
for i=1:n % Aufbau des Vektors in y
yn(1,i)=y(1,i);
end for i=1:n % Aufbau des Vektors in t
tn(1,i)=t(1,i);
end
f = @(p)(exp(-p(1).*tn).*sin(p(2).*tn+p(3)))-yn;
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt','Display','iter-detailed','PlotFcns','optimplotfval');
[p] = lsqnonlin(f,p0,[],[],options);
a = p(1);
b = p(2);
c = p(3);
str1 = ['Parameter a = ' num2str(p(1))];
str2 = ['Parameter b = ' num2str(p(2))];
str3 = ['Parameter c = ' num2str(p(3))];
Ich habe eigentlich ertwartet, dass Matlab mir die Kurven für die 1. Iteration bis zu der letzten Iteration gibt.
Kann jemand mir sagen, was ich tun soll?
Bitte darauf achten, den Status des Threads aktuell zu halten. Bei "beantwortet" besteht die Gefahr, dass keiner mehr rein schaut, um weitere Fragen dazu zu beantworten.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo, vielen Dank für die Antwort.
Leider komme ich mit der Funktion nicht voran. Ich möchte nun erstmal die p-Werte von der 1. bis zur letzten Iteration haben, bevor ich sie in der Diagramm plotte.
Code:
clc% Leeren des Command Window clearall% Leeren des Workspace closeall% Schließung aller Fenster
t = [0.60001.20001.80002.40003.00003.60004.20004.80005.40006.00006.60007.20007.80008.40009.00009.6000]; % t-Werte
y=[0.8810.6190.069-0.312-0.550-0.463-0.317-0.1230.0720.2270.1960.1700.079-0.004-0.079-0.113]; % y-Werte
p0=[0.5,1,1]; % Startwerte Parameter
n = length(t);
f = @(p)(exp(-p(1).*t).*sin(p(2).*t+p(3)))-y;
options = optimoptions(@lsqnonlin,'Display','iter','OutputFcn',@outfun);
[p] = lsqnonlin(f,p0,[],[],options);
a = p(1);
b = p(2);
c = p(3);
str1 = ['Parameter a = ' num2str(p(1))];
str2 = ['Parameter b = ' num2str(p(2))];
str3 = ['Parameter c = ' num2str(p(3))];
Zudem muss outfun eine nested function sein. Du musst in dem Link halt noch ein bisschen nach unten scrollen, da steht das dann auch.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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.