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

Übertragungsfunktion

 

Nico

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2012, 11:22     Titel: Übertragungsfunktion
  Antworten mit Zitat      
Hallo Matlab-Freunde,

Habe hier ein Programm zur Auswertung meiner Messdaten. Jedoch tauchen immer wieder einige Probleme auf. Mit der Funktion sys=zpk() kann ich auhc nciht allzuviel anfangen. ich weis schon dass da die NST und PolSt reinmüssen. aber dann muckt matlab immer rum. Hier die Matlabcodes:

Code:
function haupt

close all                                
clear all                                
clc                                      

%
% **************************************
% * Einlesen der experimentellen Daten *
% **************************************
%

filename = '1500ui_0,10.txt';                                  
h = dlmread(filename,'',126,0);                    
data.freq = h(:,1);                                    
data.ampl = h(:,2);                                    
data.real = h(:,5);                                  
data.imag = -h(:,6);                                  
data.n = length(data.freq);                            
data.U_ss = dlmread(filename,'\t',[126 2 126 2]);

%
% ***********************
% * Konstante Parameter *
% ***********************
%

T = 293;             % Temperatur         [K]
R = 8.314;             % Gaskonstante         [J/mol/K]
Faraday = 96485;       % Faradaysche Konstante   [C/mol]
n_el = 1;             % Anzahl der bertragenen Elektronen
alpha = 0.5;          % Formfaktor der Doppelschicht
data.A = 0.071*1E-4;   % Elektrodenfl�he   [m^2]

%
% ****************************************
% * Graphische Ausgabe der Me�rgebnisse *
% ****************************************
%

figure(1);                                                % �fne ein Diagrammfenster
data.nrel = data.n - 58;                                    % Verwende nicht alle Me�unkte ==> Von Hand einstellen
plot(data.real(1:data.nrel),data.imag(1:data.nrel),'k-');               % Zeichne den zu verwendenden Kurvenabschnitt ein
xlabel('Re / \Omega');ylabel('Im / \Omega');
hold on;                                                % Funktion beibehalten
plot(data.real(data.nrel+1:data.n),data.imag(data.nrel+1:data.n),'b.');   % Zeichne die verworfenen Me�unkte ein

%
% ************************
% * Parameteroptimierung *
% ************************
%

p0 = [1.5e3 1.4 50];                  % Startwert
options = [];                        % Optimiereroptionen
format long;                        % Darstellung der Ergebnisse mit 16 Dezimalstellen
p = fminsearch('errorfun',p0,options,data)   % Ausruf zur Minimierung der Fehlerquadratsumme und Ausgabe des Ergebnisses
format short;                        % Zurcksetzen der Anzeigegenauigkeit

%
% **************************
% * Ausgabe der Ergebnisse *
% **************************
%

% Aufspaltung des Ergebnisvektors
k    = p(1);                              
c_DL = p(2);                              
R_e  = p(3);                              

% Erzeugungs des Nyquistdiagramms des angepassten Modells
sys=makesystem(p,data);                                        
[real,imag] = nyquist(sys,data.freq(1:data.nrel));                          
real = permute(real,[3 1 2]);                          
imag = permute(imag,[3 1 2]);
plot(real,imag,'r-');axis equal;                                      
plot([data.real(1:data.nrel) real]' , [data.imag(1:data.nrel) imag]' ,'b:')      % Verbinde Me� und Simulationspunkte gleicher Frequenz

% Berechne die eigentliche Reaktionsgeschwindigkeitskonstante
k0 = 'hier eintragen';

% Numerische Ausgabe
disp(['Reaktionsgeschwindigkeitskonstante k0 (mol m2 s) = ' , num2str(k0)]);
disp(['Doppelschichtkapazit�            cDL (F/m2) = ' , num2str(c_DL)]);
disp(['Ohmscher Aussenwiderstand          Re (Omega)= ' , num2str(R_e)]);
 


zweite .m-file

Code:

function sys = makesystem(p,data);

k    = p(1);                          
c_DL = p(2);                          
R_e  = p(3);                          

sys = zpk([k],[c_DL],[R_e]);     %Hier komm ich nciht wweiter!!!!!                                         % Erstelle ein LTIsystem mit den entsprechenden Nullstellen/Polen/Verstärkung
 


dritte .m-file
Code:

function F=errorfun(p,data);

% Aufspaltung des Ergebnisvektors
k    = p(1);                              
c_DL = p(2);                              
R_e  = p(3);                              

% Erzeugungs des Nyquistdiagramms des angepassten Modells
sys = makesystem(p,data);                        
[real,imag] = nyquist(sys,data.freq(1:data.nrel));  
real = permute(real,[3 1 2]);                  
imag = permute(imag,[3 1 2]);

% Berechnung der Fehlerquadratsumme
f1 = (data.real(1:data.nrel) - real).^2;        
f2 = (data.imag(1:data.nrel) - imag).^2;        
F = sum(f1) + sum(f2);                        
 


vierte .m-file
Code:

function F=errorfun2(p,data);

% Aufspaltung des Ergebnisvektors
k    = p(1);                              
c_DL = p(2);                              
R_e  = p(3);                              


sys = makesystem(p,data);                        
[real,imag] = nyquist(sys,data.freq(1:data.nrel));  
real = permute(real,[3 1 2]);                  
imag = permute(imag,[3 1 2]);

% Berechnung der Fehlerquadratsumme
s = ((real(2:data.nrel) - real(1:data.nrel-1)).^2 + (imag(2:data.nrel) - imag(1:data.nrel-1)).^2).^(0.5);
ss = sum(s);
w(2:data.nrel-1) = 0.5*(s(1:data.nrel-2) + s(2:data.nrel-1)) / ss;
w(1            ) = 0.5*(                   s(1            )) / ss;
w(  data.nrel  ) = 0.5*(s(  data.nrel-1)                   ) / ss;

f1 = (data.real(1:data.nrel) - real).^2.*w';        
f2 = (data.imag(1:data.nrel) - imag).^2.*w';        
F = sum(f1) + sum(f2);


1500ui_010.txt
 Beschreibung:
MESSWERTE!!

Download
 Dateiname:  1500ui_010.txt
 Dateigröße:  9.04 KB
 Heruntergeladen:  1186 mal


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.05.2012, 11:33     Titel:
  Antworten mit Zitat      
Gib doch mal bitte die GENAUE Fehlermeldung von matlab an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2012, 12:52     Titel:
  Antworten mit Zitat      
??? Input argument "p" is undefined.

Error in ==> errorfun at 8
k = p(1); % Modifizierte Reaktionsgeschwindigkeitskonstante

Error in ==> haupt at 61
p = fminsearch(errorfun,p0,options,data); % Ausruf zur Minimierung der Fehlerquadratsumme und Ausgabe des
Ergebnisses

mit

sys = zpk(k,c_DL,R_e);

wenn ihc p definiere dann rechnet er... bleibt dann aber sofort an nem data fehler hängen.
Aber nun stellt sihc mir die Frage, welche Werte da definiert werden müssen.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.05.2012, 16:23     Titel:
  Antworten mit Zitat      
problem gelöst!
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.05.2012, 16:45     Titel:
  Antworten mit Zitat      
Wir wären dir doch sehr dankbar, wenn du uns auch die Lösung verraten würdest. Ein anderer User steht evtl. vor dem gleichen Problem und würde sie dann hier gerne nachlesen Wink. Außerdem wäre ich dir dankbar, wenn du den Status deines Threads zukünftig aktualisierst.
Private Nachricht senden Benutzer-Profile anzeigen
 
gkaraden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2012, 08:17     Titel:
  Antworten mit Zitat      
Hi Leute,

habe ein erstes großes Einsteigerproblem.

Möchte zunächst einmal zu meinem Simulink-Einmassenmodell (1DOF) die Übertragungsfunktion plotten lassen. Nur weiß ich nicht wie ich das ganze im Befehlscode darstellen lassen kann. Der bode()-Befehl wird nicht über meine verfügbaren Toolboxen erkannt. Gibt es einen andere Weg?

Habe auch die Transferfunktion und die A,B,C,D-Matrizen aufgebaut:
Transferfunktion: G(s) = [0 1]/[1 0.5 10]
A=[0 1;-cAV/ma -kAV/ma]
B=[0;1/ma]
C=[1 0]
D = [0]
alternativ könnte man ja A,B,C;D über
%[A,B,C,D] = linmod('Simulinkmodell'); beschreiben.

Jedoch wie komm ich weiter???

Möchte lediglich die Übertragungsfunktion bzw. das Amplitudenverhältnis von Aus- zu Eingang bestimmen!

Ich hänge schon ein paar Tage daran, wäre echt super wenn mir jemand helfen könnte!

Gruß

gkaraden
 
gkaraden

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2012, 09:27     Titel:
  Antworten mit Zitat      
Hi Leute,

habe einen kleinen Fehler in meiner Transferfunktion entdeckt...

G(s) = [0 0 0.001]/[1 0.5 10]

Würde mich echt über eure Unterstützung freuen.

Gruß

gkaraden
 
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 - 2025 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.