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

Integrator und derivative in Matlab Embedded Implementieren

 

ulrich
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 03.05.2013, 18:35     Titel: Integrator und derivative in Matlab Embedded Implementieren
  Antworten mit Zitat      
Hallo ich brauche dringen Hilfe.

ich habe mein Matlab Embedded Code und als Input habe ich ein Signal und als Output das integierte Signal . und ich habe so geschrieben.

Code:

syms('s');

f = sym(In); In input Signal
Out = int(f); Out Output Signal

 


und klappt aber nicht , genauso für derivative

Code:


syms('s');

f = sym(In); In input Signal
Out = diff(f); Out Output Signal

 


hat jemand das schon gemacht oder hat eine ahnung.
Danke
Ulrich
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Harald
Forum-Meister

Forum-Meister


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

was hält dich denn davon ab, die normalen Blöcke dazu zu verwenden?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 08:20     Titel:
  Antworten mit Zitat      
Für die Aufgabe, die ich habe muss ich das in Matlab Embedded erledigen.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 11:07     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

was hält dich denn davon ab, die normalen Blöcke dazu zu verwenden?

Grüße,
Harald


ich habe einige Simulink Blöcke, die ich in Matlab Embedded schreiben will.
deswegen.

Ulrich
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


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

dass du das möchtest - ja. Die Frage ist nur: warum?
(Embedded) MATLAB Functions unterstützen eben nur bestimmte Funktionalitäten (siehe Doku des Blocks). Selbst wenn man den Aufwand betreibt, eine Integration oder Differentiation (die man nach Möglichkeit ohnehin nicht verwenden sollte) nachzubilden, würde das die Schrittweitensteuerung der Solver aushebeln.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 20:35     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

dass du das möchtest - ja. Die Frage ist nur: warum?
(Embedded) MATLAB Functions unterstützen eben nur bestimmte Funktionalitäten (siehe Doku des Blocks). Selbst wenn man den Aufwand betreibt, eine Integration oder Differentiation (die man nach Möglichkeit ohnehin nicht verwenden sollte) nachzubilden, würde das die Schrittweitensteuerung der Solver aushebeln.

Grüße,
Harald


Also ich habe vor meinem Modell zu optimieren. und ich habe festgestellt, dass wenn ich ein TeilModell in Matlab Embedded implementiert ist die laufzeit kurzer als mit dem Block. deswegen habe ich vor einige Teilmodelle statt Block in Matlab Embedded zu implementieren.

Und ich habe fast alle TeilModell implementiert und hat super gut geklappt.
Ausser die mit Integration und Differentiation Blöcke. Weil ich noch nicht weisst wie ich dass implementiert werde.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


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

für diesen Zweck sehe ich andere, in der Umsetzung deutlich einfachere Möglichkeiten:
- Subsystem erstellen und daraus Code generieren
- Modellreferenzen im Accelerator Mode

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 21:50     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

für diesen Zweck sehe ich andere, in der Umsetzung deutlich einfachere Möglichkeiten:
- Subsystem erstellen und daraus Code generieren
- Modellreferenzen im Accelerator Mode

Grüße,
Harald


die erste Möglichkeit macht ich doch mit Matlab Embedded Code.

noch eine frage.
implementierung von integration un differential in Matlab Embedded ist definitiv nicht möglich?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.05.2013, 21:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
die erste Möglichkeit macht ich doch mit Matlab Embedded Code.

Ja, aber in dem du manuell mit je nach Modell beträchtlichem Aufwand Code dafür schreibst. Mein Vorschlag ginge auf Knopfdruck automatisch.

Zitat:
implementierung von integration un differential in Matlab Embedded ist definitiv nicht möglich?

Möglich sicher, du kannst dir ja z.B. eine Euler-Methode (um das einfachste zu nehmen) selbst schreiben. Sinnvoll ist das aber meines Erachtens nicht.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 22:05     Titel:
  Antworten mit Zitat      
[quote="Harald"]Hallo,

Zitat:
die erste Möglichkeit macht ich doch mit Matlab Embedded Code.

Ja, aber in dem du manuell mit je nach Modell beträchtlichem Aufwand Code dafür schreibst. Mein Vorschlag ginge auf Knopfdruck automatisch.

[quote]
Okay . Und wie kann ich von subsystem code generieren?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


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

auf das Subsystem rechtsklicken, und du findest recht weit unten die Codegenerierungsmöglichkeiten. Falls nicht, überprüfen ob Simulink Coder installiert ist.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 04.05.2013, 22:58     Titel:
  Antworten mit Zitat      
[/quote]
Möglich sicher, du kannst dir ja z.B. eine Euler-Methode (um das einfachste zu nehmen) selbst schreiben. Sinnvoll ist das aber meines Erachtens nicht.

Grüße,
Harald[/quote]

Alles klar mit Code generierung

jetzt was Matlab Embedded angeht.
z.B für mein Block als Input habe ich ein Signal und dann ein Block Integrator dann Output. Output ist einfach das integral von Input. In Matlab Embedded wie kann ich das implementieren.

Code:


Function Out = test( In )

% code ????????

 


Danke
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


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

du müsstest dann wie gesagt tatsächlich den Solver, den du normal einstellen würdest, in dem Block implementieren.

"Einfach" ist das eben nicht, da der Solver und der Integrator-Block im Hintergrund einiges tun, um mit variabler Schrittweite die erforderliche Simulationsgenauigkeit zu halten, ohne unnötig kurze (und damit viele, d.h. zeitaufwändige) Schritte zu machen. Mit fester Schrittweite wirst du in der Regel eine recht kurze Schrittweite wählen müssen, um die Simulation genau genug zu machen, und somit wohl jegliche gewonnene Zeit wieder verlieren.

Ich kann von diesem Vorhaben also nur dringend abraten.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 05.05.2013, 18:00     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

du müsstest dann wie gesagt tatsächlich den Solver, den du normal einstellen würdest, in dem Block implementieren.

"Einfach" ist das eben nicht, da der Solver und der Integrator-Block im Hintergrund einiges tun, um mit variabler Schrittweite die erforderliche Simulationsgenauigkeit zu halten, ohne unnötig kurze (und damit viele, d.h. zeitaufwändige) Schritte zu machen. Mit fester Schrittweite wirst du in der Regel eine recht kurze Schrittweite wählen müssen, um die Simulation genau genug zu machen, und somit wohl jegliche gewonnene Zeit wieder verlieren.

Ich kann von diesem Vorhaben also nur dringend abraten.

Grüße,
Harald


ich habe eine mögliche lösung gefunden im Internet.

Code:

function y = fcn(u)
persistent   uold yold
T=0.01;
if isempty(uold)
 uold=0;yold=0;
end
y = u*T+yold-(u-uold)*T/2
yold=y;uold=u;
 

oder

Code:

function y = fcn(u)
%#codegen
T=0.01;

persistent yOld;
persistent uOld;

if (isempty(yOld))
    yOld = 0;
end

if (isempty(uOld))
    uOld = 0;
end

y = yOld + (T/2)* (u + uOld);

%y=yOld + u*T;
yOld = y;
uOld = u;

 


http://www.mathworks.com/matlabcentral/answers/55705#answer_67551

http://www.mathworks.com/matlabcent.....b-function#comment_115977

aber habe noch nicht verifiziert ob es klappt.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


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

ernstgemeinte Frage: ist dir klar, welche Einschränkungen und potentielle Probleme du dir damit einhandelst?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.