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

Problem mit eval

 

crushkid
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.08.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 23.08.2013, 08:42     Titel: Problem mit eval
  Antworten mit Zitat      
Hallo, ich habe das Problem, dass ich einen längeren String gerne ausgeführt haben möchte. Theoretisch geht das ja mit eval. Allerdings kommt dann die Fehlermeldung:"Error: This statement is incomplete."
Wenn ich allerdings in den Debug-Mode gehe, den String kopiere und in die Kommandozeile einfüge funktioniert das Problemlos. Der String sieht in etwa so aus:
Code:
fittype (@(a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4, a5, b5, c5, a6, b6, c6, x) +a1*exp(-((x-b1)/c1).^2)+a2*exp(-((x-b2)/c2).^2)+a3*exp(-((x-b3)/c3).^2)+a4*exp(-((x-b4)/c4).^2)+a5*exp(-((x-b5)/c5).^2)+a6*exp(-((x-b6)/c6).^2))

Hat jemand eine Idee, wo der Fehler liegt, oder wie ich das anders lösen könnte?
Gruß, Daniel
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: 23.08.2013, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

was genau versuchst du da nun mit eval und vor allem: warum?
eval verursacht meiner Meinung nach mehr Probleme als es behebt ;)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
crushkid
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.08.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 23.08.2013, 09:30     Titel:
  Antworten mit Zitat      
Ich muss eine variable Anzahl von Parametern in einen fittype übergeben. Leider steht mir keine symbolic-Toolbox zur Verfügung.
Vielleicht kann man das Problem auch generell anders Lösen, allerdings hab ich da bisher auch keine Idee. Ich häng mal die Datei an.

maxima.m
 Beschreibung:
Kann bisher mit beliebigen Excel Dateien benutzt werden

Download
 Dateiname:  maxima.m
 Dateigröße:  1.62 KB
 Heruntergeladen:  684 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: 23.08.2013, 09:50     Titel:
  Antworten mit Zitat      
Hallo,

mich wundert nicht, dass du da mit eval irgendwann nicht mehr klarkommst.

Ich würde mit nlinfit bzw. NonLinearModel.fit arbeiten. Da hast du dann einen Koeffizientenvektor variabler Länge. Das sollte deutlich handlicher sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
crushkid
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.08.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 23.08.2013, 09:56     Titel:
  Antworten mit Zitat      
Hallo,
Danke für die Antwort.
Beim ersten drüberschauen ist mir aufgefallen, dass ich da ein function_handle brauche. Steh ich da dann nicht vor genau dem gleichen Problem?
Gruß, Daniel

edit: Die Funktion hat natürlich auch eine variable Länge (Anzahl an Gauss-Funktionen)
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: 23.08.2013, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Steh ich da dann nicht vor genau dem gleichen Problem?

Nein, da das Function Handle immer zwei Eingabeargumente hat.

Die Funktion würde in etwa so aussehen:

Code:
function y = myfun(p,x)

anz_terme = numel(p)/3;
y = 0;
for I=1:anz_terme
a = p(I);
b = p(anz_terme+I);
c = p(2*anz_terme+I);
y = y + a*exp(-((x-b)/c).^2);
end


Die Anzahl der Terme wird dann über den Anfangsvektor gesteuert. Ein guter Anfangsvektor wird wichtig sein, um vernünftige Ergebnisse zu bekommen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
crushkid
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.08.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 23.08.2013, 10:09     Titel:
  Antworten mit Zitat      
Hallo, ich hab jetzt eine Lösung zu meinem Problem gefunden. Es reicht schon wenn man fittype(function) eingibt (als String). Man muss nicht unbedingt fittype (@(variablen) function) benutzen.
Vielen Dank für die Mühen,
Gruß, Daniel

edit: aber vielleicht benutze ich den Vorschlag trotzdem. ist eleganter als meins Very Happy

edit: ich hab gerade gemerkt, dass ich auch keine Statistics Toolbox zur Verfügung habe :-/
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.