clc; clearvars; clear all;
syms T; syms E; syms v1; syms v2; syms v3;
assume(v1>0 & v1<50000);
assume(v2>0 & v2<50000);
assume(v3>0 & v3<60000);
b = 10/60;
fun = int(exp(-E/(8.314*T)),T,300,T);
s1 = 175.6 * 10^3;
fun11 = (1/(v1*sqrt(2*pi)))* exp(- ((E-s1)^2)/(2*v1^2));
a1 = 10^14.52;
fun12 = int(exp((-a1/b)*fun)*fun11,E,s1-3*v1,s1+3*v1);
alpha1 = 1 - fun12;
s2 = 185.4 * 10^3;
fun21 = (1/(v2*sqrt(2*pi)))* exp(- ((E-s2)^2)/(2*v2^2));
a2 = 10^13.64;
fun22 = int(exp((-a2/b)*fun)*fun21,E,s2-3*v2,s2+3*v2);
alpha2 = 1 - fun22;
s3 = 195.4 * 10^3;
fun31 = (1/(v3*sqrt(2*pi)))* exp(- ((E-s3)^2)/(2*v3^2));
a3 = 10^13.98;
fun32 = int(exp((-a3/b)*fun)*fun31,E,s3-3*v3,s3+3*v3);
alpha3 = 1 - fun32;
alpha = (alpha1 + alpha2 + alpha3)/3
alphaexp=[0.01134 0.04317];% 0.06494 0.08783 0.17053 0.32533 0.49142 0.55575 0.59242 0.6367 0.678 0.71621 0.75124 0.78442 0.81727];
T = [350 400]; %T = [350:50:1050];
minfunc = (subs(alpha)-alphaexp).^2
error1 = sum(minfunc)
error = matlabFunction(error1)
[xfinal,fval] = fminsearch(@(x)error(x(1),x(2),x(3)),[4300 3500 32000])
Der obige Code erzeugt einen Fehler, dass "E" eine undefinierte Funktion oder Variable ist. Jedoch habe ich während aller Integrationen (fun12, fun22 und fun32) klar angedeutet, dass die Integration über der Variablen E liegt, mit Grenzen, die v1, v2 bzw. v3 enthalten. (Also sollte E nicht einmal in der finalen Fehlerfunktion existieren).MATLAB: Fehler bei der Verwendung von fminsearch()
Mache ich einen Fehler bei der Implementierung der Funktion fminsearch? Jede Hilfe wird sehr geschätzt.
Ich verstehe, dass die Verwendung der vpa-Funktion mir den Wert des Fehlers bei einem bestimmten Wert [v1, v2, v3] gibt. Da mein Ziel jedoch darin besteht, die error1-Funktion für diese Variablen selbst zu optimieren, und fminsearch eine Funktion benötigt, um die Optimierung durchzuführen, verstehe ich nicht, wie ich das mache? Ich kann nicht einfach weiter zufällige Werte von [v1, v2, v3] eingeben, um zu sehen, was den minimalen Fehler ergibt. –
'fminsearch (@ (X) vpa (Subs (Fehler1, [v1, v2, v3], X)), [4300 3500 32000]))' Führen Sie es ein paar Mal mit verschiedenen Samen, um sicherzustellen, dass Sie nicht sind auf einem lokalen Minimum. – xvan
Ich bin mir nicht sicher, ob mein System langsam ist, aber es braucht sehr viel Zeit, um Ergebnisse zu erzielen (Der Code läuft seit dem letzten Kommentar und hat noch keine Lösung gefunden). Bin ich ungeduldig oder soll es passieren? –