Verfasst am: 01.11.2018, 17:34
Titel: Not enough input arguments
Hallo zusammen,
ich bin noch komplett neu bei Matlab und kenne mich daher nicht gut aus. Ich habe ein Problem, dass mir die Software sagt, ich hätte zu wenig Input Arguments. Meiner Meinung nach, habe ich aber alle Parameter, die notwendig sind, definiert.
Meine erste Funktion nimmt Bezug auf diese zweite Funktion:
[code]function MMI = Michaelis_Menten_Substratinhibierung_2(Vmax3, S2, Km3, k1)
MMI = (Vmax3*S2)./(Km3+S2+(S2.^2/k1))
end[/code]#
Bis zu dem Schritt v2=Michaelis....funktioniert noch alles. Erst ab der letzten Zeile wenn ich die Daten fitten möchte, meckert das Programm. Was mache ich falsch? Vmax3, S2, Km3 und K1 habe ich doch alle definiert?
lsqcurvefit
benötigt ein Function Handle, zu erstellen mit @. Mehr Details liefert die Dokumentation.
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 ;)
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 ;)
Mmh, ich glaube du hast Recht und es war etwas sinnlos, zu plotten und im Nachhinein Etwas fitten zu wollen. Es müsste wenn dann anders rum sein. Ich muss ein wenig länger ausholen, um mein Problem richtig zu beschreiben.
Wir haben eine Aufgabe bekommen. Es gab eine enzymatische Reaktion und wir sollen herausfinden, ob sie einer Michaelis-Menten-Kinetik mit Substratinhibierung folgt oder einer Sigmoidalen Kinetik. Für mich wäre es jetzt erst mal wichtig, die Michaelis-Menten-Kinetik zu überprüfen, die andere bekomme ich dann schon hin, wenn ich das grundsätzliche Prinzip verstanden habe.
Wir haben folgende Startwerte für die Michaelis-Menten-Kinetik mit Substratinhibierung bekommen:
Vmax = 4 mmol/(L*min)
Km = 3 mmol/L
K1 = 30 mmol/L
Außerdem haben wir einen Datensatz bekommen mit 2 Vektoren (jeweils 1x41):
P (Produkt) = 40, 39, 38, 37.....0
v = 0, 0.518, 0.895, 1.189, 1.357, 1.458...und andere krumme Zahlen
Die Gleichung für eine Michaelis-Menten-Kinetik mit Substratinhibierung geht so:
v = (Vmax*S) / (Km + S + (S²/K1))
Aufgabe: Nutzen Sie den Parametersatz (data1) zum Start einer nichtlinearen Regression. Verwenden Sie den Begriff lsqcurvefit. Stellen Sie die beiden Kurven (v über S) in einem Diagramm zusammen mit den Messwerten als Punkte dar.
Ich bin mir ziemlich sicher, dass zuerst Variable S (Substrat) bestimmt werden muss, da diese Variable noch für die Gleichung fehlt.
S = 40-P (wenn ein Produkt entsteht, geht ein Substrat verloren)
Für die Kinetik habe ich eine extra Funktion erstellt:
Wenn ich das Programm ausführe, wird mir am Ende ein 41x1 Vektor für MMI2 ausgegeben. Diese Werte unterscheiden sich von meiner Variablen v, die ich ursprünglich aus dem Parametersatz (data1) erhalten habe. Aber habe ich wirklich einen Fit durchgeführt? Es ergibt auch eine schöne Kurve, wenn ich die Werte Plotte (MMI2 über s) Ich habe also nicht wirklich ein fit durchgeführt, sondern einfach nur meine Variablen in die Gleichung eingesetzt.
Dann steht unter den Startwerten noch eine weitere Aufgabe:
Ausgabe der optimierten Parameterwerte im Command-Window und Diagramm mit den Messwerten der beiden Kurven.
Ich habe nicht wirklich eine Optimierung durchgeführt, sondern nur stumpf die Zahlen in die Formel eingefügt oder? Ich habe auch zu keinem Zeitpunkt die Variable v benutzt, die ich im Parametersatz (data1) erhalten habe. Unter einem Fit verstehe ich, dass in einer Kurve eine Ausgleichsgerade (z.B. nach der Methode der kleinsten Fehlerquadrate) gelegt wird.
Wahrscheinlich ist es schon etwas zu speziell und zu kompliziert, dass sich da jemand mit mir reinfuchsen kann? Das Problem besteht auch nicht nur mit Matlab, sondern ein wenig auch inhaltlich.
ich kann mit der Anwendung nichts anfangen. Ich kann nicht mal sagen, aus welchem Fachgebiet das kommt. Vielleicht Chemie?
Die Funktion Michaelis_Menten_Substratinhibierung_2 ist so nicht sinnvoll, denn du überschreibst die sämtliche Eingabeargumente. Die orangen Markierungen im Editor weisen darauf vermutlich hin.
Ich kann nur nochmal auf meinen vorherigen Beitrag bzw. die Doku verweisen. Insbesondere musst du die Schnittstelle deiner Funktion so anpassen, dass sie zu lsqcurvefit passt.
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 ;)
Ok, ich habe versucht, das Skript so umzuschreiben, dass die Eingabeparameter nicht überschrieben werden.
Ich habe jetzt statt 2 m.Files alles in ein Skript gemacht. Aber ich bekomme eine Fehlermeldung:
load data1 P v;
Vmax3 = 4;
S2 = 40-P;
Km3 = 3;
k1 = 30;
P0 = [Vmax3, Km3, k1];
lsqcurvefit(@Michaelis_Menten_Substratinhibierung_2, P0, S2, v)
figure(2)
plot(S2,v,'r*')
hold on
plot(S2,vMMI2,'r')
hold on
legend('v über S', 'MMI2 über S')
end
function MMI2 = Michaelis_Menten_Substratinhibierung_2(Vmax3, S2, Km3, k1)
MMI2 = (Vmax3.*S2)./(Km3+S2+(S2.^2./k1));
end
Matrix dimensions must agree.
Error in Langner_Ue1>Michaelis_Menten_Substratinhibierung_2 (line 40)
MMI2 = (Vmax3.*S2)./(Km3+S2+(S2.^2./k1));
Error in lsqcurvefit (line 213)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in Langner_Ue1 (line 30)
lsqcurvefit(@Michaelis_Menten_Substratinhibierung_2, P0, S2, v)
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
Wenn ich die Funktion seperat im Command Window ausführe, funktioniert alles und ich bekomme keine Fehlermeldung. Da passt es dann scheinbar mit den Matrix Dimensions. Woran liegt das?
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 ;)
Ah, ok. Jetzt mit deiner Hilfe habe ich es auch endlich verstanden. Dankeschön Irgendwie wollte es nicht in meinen Kopf, warum nur 2 Eingabeparameter verlangt sind. Ich dachte lsqcurvefit braucht 4.
die Funktion lsqcurvefit braucht auch 4 Inputs (wird ja auch jetzt so aufgerufen). Die Modellfunktion braucht aber nun mal 2 Inputs.
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.