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

Not enough input arguments

 

Cellschock
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2018, 17:34     Titel: Not enough input arguments
  Antworten mit Zitat      
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 sieht so aus:

[code]load data1
Vmax3 = 4
Km3 = 3
K1 = 30
P0 = [Vmax3, Km3, K1]
S2 = 40 - P
v2 = Michaelis_Menten_Substratinhibierung_2(Vmax3, S2, Km3, K1)
lsqcurvefit(Michaelis_Menten_Substratinhibierung_2,P0, S2, v2)[code]


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?

Danke und beste Grüße
Marcel

Michaelis_Menten_Substratinhibierung.m
 Beschreibung:

Download
 Dateiname:  Michaelis_Menten_Substratinhibierung.m
 Dateigröße:  111 Bytes
 Heruntergeladen:  458 mal
Michaelis_Menten_Substratinhibierung_2.m
 Beschreibung:

Download
 Dateiname:  Michaelis_Menten_Substratinhibierung_2.m
 Dateigröße:  117 Bytes
 Heruntergeladen:  435 mal
data1.mat
 Beschreibung:

Download
 Dateiname:  data1.mat
 Dateigröße:  603 Bytes
 Heruntergeladen:  440 mal
Langner_TestUe1.m
 Beschreibung:

Download
 Dateiname:  Langner_TestUe1.m
 Dateigröße:  600 Bytes
 Heruntergeladen:  464 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2018, 18:03     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cellschock
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2018, 18:35     Titel:
  Antworten mit Zitat      
Vielen Dank schon mal für die schnelle Antwort. Ich habe versucht die Dokumentation umzusetzen, aber ich stoße schon wieder an meine Grenzen.

Was habe ich falsch gemacht? Mir wird immer noch "Not enough input arguments" angezeigt

load data1
Vmax3 = 4
Km3 = 3
K1 = 30
P0 = [Vmax3, Km3, K1]
S2 = 40 - P
v2 = Michaelis_Menten_Substratinhibierung_2(Vmax3, S2, Km3, K1)
f = @Michaelis_Menten_Substratinhibierung_2
lsqcurvefit(f(),P0, S2, v2)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2018, 09:05     Titel:
  Antworten mit Zitat      
Hallo,

die Modellfunktion muss (laut Doku) zwei Eingabeargumente annehmen.
1. den Vektor der anzupassenden Parameter
2. die Prädiktoren (x-Werte)

Mir ist bei deiner Funktion nicht klar, was nun was sein soll.
Es ist doch auch wenig sinnvoll, die Funktion aufzurufen und dann nochmal zu fitten?

Ggf. kann noch folgender Link aus der Doku helfen:
https://www.mathworks.com/help/opti.....ing-extra-parameters.html

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cellschock
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2018, 18:34     Titel:
  Antworten mit Zitat      
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:

function MMI2 = Michaelis_Menten_Substratinhibierung_2(Vmax3, S2, Km3, k1)
load data1
Vmax3 = 4
S2 = 40-P
Km3 = 3
k1 = 30
P0 = [Vmax3, Km3, k1] % Startwerte
MMI2 = (Vmax3.*S2)./(Km3+S2+(S2.^2./k1)) % Gleichung Michaelis-Menten-Kinetik mit Substratinhibierung, v = MMI2

end


In meinem Hauptprogramm habe ich folgendes geschrieben:

load data1
Vmax3 = 4
S2 = 40-P
Km3 = 3
k1 = 30
P0 = [Vmax3, Km3, k1]
lsqcurvefit(@Michaelis_Menten_Substratinhibierung_2,P0, S2, v)

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.

Trotzdem danke für die Mühe bis hier hin.

Grüße
Marcel

untitled.fig
 Beschreibung:

Download
 Dateiname:  untitled.fig
 Dateigröße:  19.3 KB
 Heruntergeladen:  474 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2018, 22:20     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cellschock
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2018, 12:34     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2018, 17:19     Titel:
  Antworten mit Zitat      
Hallo,

deine Funktion hat immer noch 4 Eingabeargumente, sie soll aber 2 haben. Ich habe das mal passend umgeschrieben:

Code:
load data1 P v;
Vmax3 = 4;
S2 = 40-P;
Km3 = 3;
k1 = 30;
P0 = [Vmax3, Km3, k1];
Popt = lsqcurvefit(@Michaelis_Menten_Substratinhibierung_2, P0, S2, v);
figure(2)
plot(S2,v,'r*')
hold on
vMMI2 = Michaelis_Menten_Substratinhibierung_2(Popt, S2);
plot(S2,vMMI2,'r')
hold off
legend('v über S', 'MMI2 über S')

function MMI2 = Michaelis_Menten_Substratinhibierung_2(p, S2)
Vmax3 = p(1);
Km3 = p(2);
k1 = p(3);
MMI2 = (Vmax3.*S2)./(Km3+S2+(S2.^2./k1));
end


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cellschock
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 01.11.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2018, 17:29     Titel:
  Antworten mit Zitat      
Ah, ok. Jetzt mit deiner Hilfe habe ich es auch endlich verstanden. Dankeschön Smile Irgendwie wollte es nicht in meinen Kopf, warum nur 2 Eingabeparameter verlangt sind. Ich dachte lsqcurvefit braucht 4.

Besten Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.11.2018, 17:32     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
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.