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

Symbolische Ausdrücke aus m-File in Embedded Matlab Functio

 

Tekrum
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2012, 22:54     Titel: Symbolische Ausdrücke aus m-File in Embedded Matlab Functio
  Antworten mit Zitat      
Hallo,

stundenlange Forensuche konnte mein aktuelles Problem leider nicht lösen. Ich möchte gerne symbolische Ausdrücke aus einem m-File oder dem Workspace oder wie auch immer möglich in die Embedded Matlab Function laden. Innerhalb der EML werden den symbolischen Ausdrücken Werte zugewiesen.

Ich habe mit einem Matlab Code eine bestimmt Anzahl ('n') an Gleichungen generiert. Diese liegen in der Form

u'=f(zahl,eingang,u);
u'(x,y,z) = eingang1*zahl1(x,y,z)*(u(x,y-1,z)-u(x,y,z))+eingang2*zahl2(x,y,z)*(u(x,y-1,z)-u(x,y,z))+...+eingang15*zahl15(x,y,z)*(u(x,y-1,z)-u(x,y,z));

vor. u'(x,y,z) sind die Ausgänge der Embedded Matlab function und als Eingänge dienen 'eingang*' und u(x,y,z) bzw u(x,y-1,z). Das Ganze ist soweit fehlerfrei in Matlab bzw in Simulink modelliert.
Die Eingänge 'eingang*' liegen als (10000x15) double vor, wobei die erste Spalte die Zeit und Spalte 2-15 gemessene Werte sind.
'zahl*' sind schlicht Brüche als Vorfaktoren der Eingänge.
Im m-File zur Generierung der Gleichungen:
eingang = 10000x15 double
u'(x,y,z) = x*y*z sym
Ich habe 'n' Gleichungen u'1 bis u'n in ein m-File via fopen fprintf geschieben und versucht sie in der Embedded Matlab Function zu laden.
Generiert wird ein m-File
Code:

%#eml
function y  = fcn_up()
up_111= ...
....

up_211 =(77906684101689*(eingang1)^2)/288230376151711744 +(eingang2*(u_201 - u_211)*((5954844614638067*u_211^2)/590295810358705651712 + (8831234659567345*u_211)/2305843009213693952 + 4648246702005597/35184372088832))/4 + (eingang3*(u_201 - u_211)*((8697943165599*u_211^2)/295147905179352825856 + (5605868536281211*u_211)/9223372036854775808 + 2727324580968873/281474976710656))/4 +... + (eingang15*(u_201 - u_211)*((3178725031127047*u_211^2)/18889465931478580854784 + (5411328719400293*u_211)/2305843009213693952 + 2356966903473069/2251799813685248))/4;
....

y=[up_111
up_112
up_121
up_122
up_211
up_212
up_221
up_222
];

end
 

In der EML würde ich jetzt gerne den Ausgang der Funktion 'fcn_up' laden. Versucht habe ich es mit
Code:

function y = fcn(eingang, u)
%#eml
eingang1 = eingang(1);
eingang2 = eingang(2);
...
u_211 =  u(5);
...
y=zeros(length(u),1);
y=fcn_up();
 

Hier erfolgt allerdings ein Fehler, das der Funktion 'eingang1' nicht bekannt ist.
Zitat:
Undefined function or variable 'eingang1'.

Definiere ich 'eingang1' und weitere in der 'fcn_up' als symbolisch kommt der Fehler:
Zitat:
Command-duality is not supported.


Wenn ich die Ausgabe per Hand übergebe, gibt es keine Probleme. Bei der Anzahl an durchläufen, wäre das allerdings keine Option.

Und noch ein kleines Problem am Rande. Das generierte m-File bedarf vor der Zuweisung 'function y = fcn_up()' ein '%#eml'. Hab ich jetzt per Hand reingeschummelt. Wenn ich das aber nun versuche via fprintf(fid,'%#eml '); in die geöffnete Datei zu schreibe, wird es schlichtweg nicht übernommen. (Auskommentiert?)

Vielen Dank
Tekrum
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.