MatLab kürzen/vereinfachen von Transferfunktionen

  • Ersteller KruemmelGonzale
  • Erstellt am
K

KruemmelGonzale

Mitglied
Thread Starter
Dabei seit
06.09.2005
Beiträge
48
Reaktionspunkte
0
Hat jemand eine idee, wie ich in MatLab eine Transferfunktion vereinfachen, bzw. kürzen kann? MatLab macht das ja leider nicht von alleine.
Meine TF sieht so aus:

6 s^4 + 21 s^3 + 21 s^2 + 6 s
-------------------------------------
4 s^5 + 8 s^4 + 11 s^3 + 16 s^2 + 6 s

und das diese Funktion noch vereinfacht werden kann, ist ja nun nicht wirklich schwehr zu sehen.
das kommando simplify geht ja leider nur für die class symbol, also nicht für eine tf.

Ich bin für jede Idee dankbar
KruemmelGonzales
 
du willst die funktion in matlab vereinfachen? ich bin mir nicht ganz sicher, ob du das darfst, verlierst Du doch Unstetigkeitsstellen. auch bin ich mir nicht ganz sicher, wie die system control toolbox parst.

allerdings gäbe es die möglichkeit, ein koefizienten array abzuarbeiten und somit, eine klare vereinfachung zu schaffen. die funktion bekommt also ersteinmal die form:
a(1)s^(n-1)+...+a(n)s^0 / (b(1)s^(n-1)+...+b(n)s^0). Die a(i), b(i) dürfen dabei auch 0 sein. Ausserdem könnte es eine m-Funktion geben, welche aus dem Resultat Deine Transferfunktionen erzeugt (damit stellst Du sicher, dass die ganzen 0-en keine Rechenzeit verbrauchen.
 
Die Transferfunktion stellt in diesem Fall nur ein einfaches Beispiel eines geschlossenen (hier eines instabilen) Regelkreises dar. Wenn man dabei kuerzen kann, dann verliert man keine Informationen, dass System verhaelt sich danach noch immer genau so wie zuvor. Soviel zur Theorie.

Wenn aber nun mal das System etwas komplexer ist, wird es eben etwas schwierig das kuerzen per hand zu machen. Kleinere Exponenten von s vor allem im Nenner verkuerzen dabei aber sehr den analtischen Rechenaufwand fuer das System.
Ein weg das ganze zu kuerzen waere die Funktion als Symbol in Matlab ein zu geben und den befehl simplify zu verwenden. Anschliessend copy and past um aus dem Ergebnis wieder eine Transferfunktion zu machen. Ich finde selber aber copy and past nicht gerade eine befriedigende Loesung. Ist es moeglich die class sym in double oder tf um zu wandeln? Damit waere auch das Problem copy and past geloesst.

Der weg, den du vorgeschlagen hast pocketcrocodile fuehrt glaube ich in die gleiche Richtung oder auf das gleiche Problem. Ohne meine Variable (hier also s) weiter zu definieren, muesste ich sie auch um deinen Vorschlag zu verwenden als sym deklarieren, womit ich dann wieder das Problem haette das ich nicht ohne weiteres eine tf daraus machen kann da die class ja nicht stimmt.
 
Langsam finde ich gefallen an diesem, wir fordern ein wiss. Software Protestthread. Wir müssen nur unsere Antwortfrequenzen steigern (oder bots schreiben).

Nein, mein Weg könnte zu Problemen mit der Control Toolbox führen, Du kannst aber es aber probieren, ob sie mit Nullen arbeiten kann, dann müsste es funktionieren. Deine TF sähe dann so aus:

a(1) x^5 + a(2) x^4 + ... + a(6) / b(1) x^5 + ...
mit a =(0,6,21,21,6,0) und b=(4,8,11,16,6,0)
Du kürzt nun nicht direkt, sondern indem Du die sog. Polynomendivision auf die Vektoren a und b anwendest und zusätzliche Vektoren c,d, ... für evtl. Erweiterungen einführst. Die Frage ist nur, kommt die SCT damit zurecht, dass die koeffizienten nicht fest sind.
 
Ich glaube nur, das wird auf dauer schwierig sein, die Frequenz noch weiter zu erhoehen. zumal ich auch jetzt dann erst mal eine Woche weg bin.
Ich werde deinen Vorschlag naechste Woche mal ausprobieren, aber ich glaube da werde ich eben das Problem haben,
...Die Frage ist nur, kommt die SCT damit zurecht, dass die koeffizienten nicht fest sind.
da das Skript eben (vermutlich) damit nicht klar kommen wird. Damit es da nicht muckt muesste ich das wohl als sym deklarieren, womit ich dann auch nicht weiter waere, als mit dem Weg, den ich auch schon mal beschrieben habe.
Aber ich werde das in jedem Fall naechste Woche mal testen.
 
dem script kannst Du eine menge vorgaukeln. du könntest beispielsweise matlab function handles nutze.
 
sorry, die letzte Woche hatte ich zu viel zu tun und Sachen nach zu holen, als das ich es vorher ausprobieren konnte.
Also, ich hab es ausprobiert und es klappt. Ich hab da nur noch ein paar Probleme im Detail, aber die werde ich dann auch noch lösen.
Dank dir für den Tipp, so klappt es wirklich
Aber noch eine Frage. Wo, oder wie übergebe ich eine selbst geschriebene Matlab Funktion an die Bibliothek in Matlab, so das ich sie, in egal welchen Verzeichniss ich mich befinde, aufrufen kann?
 
Du kannst in Matlab den Pfad festlegen. Es geht nicht so einfach, wie in der Shell, aber fast. Im "File"Menü findest Du eine Funktion "Set Path", dort sind sämtliche Pfade aufgelistet, welche Matlab zum Ausführen absucht. Ausserdem kannst Du dort eigene Pfade hinzufügen.
 
:clap:
super
Dank dir
 
Zurück
Oben Unten