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

Function-handle mit Vektorinput statt einzelner Variablen

 

FloJoe
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.11.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2020, 15:00     Titel: Function-handle mit Vektorinput statt einzelner Variablen
  Antworten mit Zitat      
Hi Leute,

folgendes Problem. Ich lese Messwerte variabler Anzahl ein. Auf Basis der Messwerte will ich numerisch über ein größeres Gleichungssystem bestimmte Parameter der Messkurve berechnen. Dafür verwende ich die implementierte function fsolve.

Ich berechne zunächst das Gleichungssystem symbolisch, das ganze automatisch, da die Anzahl der Messwerte variiert. Daraufhin möchte ich den entstanden symbolischen Ausdruck in eine Funktion der Form @(x) x(1)^2 + x(1)*x(2) + ... und so weiter transformieren. Ich bekomme jedoch über den Befehl matlabFunction nur eine Funktion der Form @(x1,x2,x3,....) x1^2 + x1*x2 + ... . fsolve verlangt jedoch eine Funktion obiger Formulierung. Wie krieg ich das gebacken? Hier ein beispielhafter Code.

Code:
Messwerte=1:100; % Normalerweise werden hier Messwerte variabler Anzahl importiert
k=length(Messwerte); % Anzahl Messwerte auslesen
x=sym('x',[1 k]).'; % Lösungsvektor aufstellen
c=(1:100)'; % Beispielhafter Vektor für Gleichungssystem
SymFun=x*x.'*c; % Beispielhaftes Gleichungssystem
Fun=matlabFunction(SymFun);

% Die erzeugte Funktion hat nun 100 Eingabeparameter der Form @(x1,x2,...)
% x1*x2 + x1^2 + ... und ich will eine Funktion der Form @(x) x(1)*x(2) +
% x(1)^2 + ...

x0=ones(100,1); % Startwerte festlegen
S=fsolve(Fun,x0);

% fsolve meckert hier natürlich, da es eine Funktion der Form f(x) will und
% nicht f(x1,x2,...)


Vielen Dank schon mal! Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.487
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.11.2020, 15:58     Titel:
  Antworten mit Zitat      
Hallo,

es lässt sich wohl über Tricksereien schon hinbekommen. Eine separate Funktion, in der der Input mit num2cell in ein Cell c umgewandelt und die ursprüngliche Funktion mit Fun(c{:}) aufgerufen wird.

Meine Frage wäre aber, ob es wirklich notwendig ist, das Gleichungssystem symbolisch aufzustellen. In den allermeisten Fällen würde ich sagen: nein.

Für die Bestimmung von Parametern kann auch lsqcurvefit helfen.

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
 
FloJoe
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.11.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2020, 16:13     Titel:
  Antworten mit Zitat      
Harald, bist ein geiler Typ, danke. Very Happy
Ich brauchte gar keine symbolische Rechnung.
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.