und möchte jetzt für x1-x6 Werte einsetzen. Ein Aufruf mit g(1,1,1,1,1,1) funktioniert, aber führt leider zu symbolischen Ergebnissen und -was noch wichtiger ist - ist unglaublich langsam, weswegen double(g(1,1,1,1,1,1)) auch nicht helfen würde.
ich habe jetzt also nach numerisch arbeitenden Befehlen gesucht und "subs()" gefunden/benutzt. Aber er ersetzt mir nur 5 Variablen fehlerfrei und beschwert sich, wenn ich alle 6 einfüge:
es funktioniert, aber leider ist es auch nicht schneller.
Ich hab diese Zeile auch über eine ausgelagerte Funktion programmiert:
[code ]
function [ Funktionswert ] = fwertr6( x )
Funktionswert = [x(1)^2+x(3)^2; 0.4*x(2)^3+1; x(3)-0.5*x(5)^2; 1.5*x(4)^4-0.5*x(3)^2; 3*x(5)-x(1)+x(6); 3*x(6)^3];
[/code]
und diese ist bis zu 1000x schneller als subs()
[code]
%Funktion
Elapsed time is 0.000022 seconds.
Elapsed time is 0.000022 seconds.
Elapsed time is 0.000021 seconds.
%subs()
Elapsed time is 0.020067 seconds.
Elapsed time is 0.018501 seconds.
Elapsed time is 0.019304 seconds.
[code]
Leider ist das unglaublich undynamisch. Gäbe es noch einen relativ schnellen dynamischen Ansatz um das Problem zu lösen?
mit undynamisch meine ich, dass der Benutzer die fwertr6 Datei umschreiben muss um eine andere Funktion durchzurechnen. Ich fände es schön, wenn man die Funktion mit einem Parameter g, der eine symbolische Funktion ist, aufrufen könnte.
Wenn ich ein funktionshandle benutze, kann ich leider nicht mehr den jacobian(g) Befehl benutzen, den ich an einer andere Stelle im Programm benötige.
wenn der Nutzer eine andere Funktion verwenden möchte, wird es ihm doch nicht erspart bleiben, an irgendeiner Stelle diese Funktion anzugeben?
Wenn du dir die zusätzliche Datei sparen möchtest, hier noch ein Vorschlag: zunächst wie bisher mit der symbolischen Funktion arbeiten und, statt wiederholt einzusetzen, daraus ein Function Handle erzeugen:
Das dauert zwar einmalig 0,1 Sekunden, aber man kann eben nicht alles haben (schnelles Einsetzen einerseits und symbolische Berechnungen über jacobian o.ä. andererseits).
Also deine neue Lösung funktioniert wirklich gut. Sie ist relativ schnell, hat aber von dir erwähnte längere Anlaufphase, was aber O.K. ist. Also vielen Dank nochmal, du warst eine große Hilfe!
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.