Maximum in Simulink abrufen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hallo,
ich habe folgendes Problem. Ich will in Simulink 2 Ausgänge 2er subsysteme addieren. Allerdings darf der eine Ausgang nur solange addiert werden, wie die ableitung der Eingangssignale positiv ist. wird die Ableitung negativ, muss von dem in diesem moment herschendem ausgangswert der Wert des 2. subsystems abgezogen werden. Ändert sich das vorzeichen der der Ableitung wieder, muss wieder zu diesem Wert addiert werde, und so weiter und so weiter...
ich hab in simulink folgende embeded matlabfunction eingebaut und hinter den Ausgang des 1. subsystems gehängt:
u ist die Ableitung, f der Ausgang des Subsystems
function y = fcn(u,f)
% This block supports the Embedded MATLAB subset.
% See the help menu for details.
[mm] f_1 [/mm] = max (f)
if u >=0;
y = f;
else
y = [mm] f_1;
[/mm]
end
jetzt sucht er mir aber immer wieder ein neues Maximum. Wie kann ich das quasi absolute Maximum festhalten?
oder gibt es für sowas fertige blöcke?
vielen dank schonmal für die Hilfe.
mfg
Hendrik
|
|
|
|
Hallo
> Hallo,
>
> ich habe folgendes Problem. Ich will in Simulink 2
> Ausgänge 2er subsysteme addieren. Allerdings darf der eine
> Ausgang nur solange addiert werden, wie die ableitung der
> Eingangssignale positiv ist. wird die Ableitung negativ,
> muss von dem in diesem moment herschendem ausgangswert der
> Wert des 2. subsystems abgezogen werden. Ändert sich das
> vorzeichen der der Ableitung wieder, muss wieder zu diesem
> Wert addiert werde, und so weiter und so weiter...
> ich hab in simulink folgende embeded matlabfunction
> eingebaut und hinter den Ausgang des 1. subsystems
> gehängt:
>
> u ist die Ableitung, f der Ausgang des Subsystems
>
> function y = fcn(u,f)
> % This block supports the Embedded MATLAB subset.
> % See the help menu for details.
> [mm]f_1[/mm] = max (f)
> if u >=0;
> y = f;
> else
> y = [mm]f_1;[/mm]
> end
Also erstens Mal, wird in diesem Abschnitt gar nichts dazuaddiert... wenn du möchtest, dass dein [mm] f_{1} [/mm] bzw. f addiert werden bei u > 0 bzw. u < 0, dann musst du
if u >= 0
y = y + f
else
y = y - [mm] f_{1}
[/mm]
end
(Bin mir jetzt da allerdings nicht sicher, wie oft dies durchgeführt wird.. Ich würde evtl. mit while-Schleifen arbeiten...)
Jetzt, was aus diesem Programmcode nicht ersichtlich wird ist, ob sich dein f woanders ändert. Wenn ja, dann ist es klar, warum dein Programm immer ein neues Maximum sucht..
Sonst sollte dein [mm] f_{1} [/mm] als Variable angesehen werden.. und die hast du definiert.
Grüsse, Amaro
|
|
|
|
|
Hi Amaro,
du hast recht, hier wird nichts addiert. das sollte danach in simulink passieren. ich glaube die ganze beschreibung des problems war nicht sonderlich gut. sorry
aber ich habe das problem gelöst bekommen ohne embedded matlabfunction.
Falls dich das problem interessiert, schicke ich dir gerne das blockschatlbild.
mfg
Hendrik
|
|
|
|