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

3D Plot aus Symbolic Math Toolbox

 

fcosta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.02.2014, 11:53     Titel: 3D Plot aus Symbolic Math Toolbox
  Antworten mit Zitat      
Hallo, in dem unteren Programm habe ich t als die Nenner einer Übertragungsfunktion und ich versuche ein 3d Grafik aus den Variablen c12 und c23 zu machen, aber die beiden Variablen hängen voneinander und von der Frequenz f ab, für die Frequenzen gilt für c12: 1 Hz<f<2,5 Hz und für c23 gilt 1,5 Hz<f<3 Hz, in der Grafik sollten in der x-Achse c12, in der y-Achse c23 und z-Achse die beiden Frequenzen stehen. Ich habe die Frequenzen in den Funktionen eingesetzt und in zwei Matrizen gespeichert, und jetzt hängt c12 von c23 ab und umgekehrt, ist es möglich eine Grafik daraus zu plotten? Ich bekomme eine Fehlermeldung wenn ich z.B. surf(X,Y,t1) ausführe.

Code:
%--------------------------------------------------------------------------
% Parametern
%--------------------------------------------------------------------------
s=tf('s');
nnenn=17/60;      % Umdrehungen pro minute
n=72;             % Übertragungsrate
Vnenn=11.5;       % Normierte Windgeschwindigkeit
p=1.229;          % Luftdichte
R=60;             % Radius der Rotorblatt
cp_nenn=0.469;    % rated power coefficient
Mnenn=p*R^2*Vnenn^3*cp_nenn/(4*nnenn);  % Normierte Drehmoment
Mgnenn=Mnenn/n;   % normierte Drehmoment der Generator
ngnenn=n*nnenn;   % Normierte Drehzahl der Generator
Tstr=0.005;       % Zeitkonstante des Stromregelkreis
Jges=3.1*10^7;    % Gesamte Trägheitsmoment: Jges=Jm+Jnr/(n^2)+Jrb/(n^2)
J1=Jges*0.07;     % Trägheitsmoment der Generator
J2=Jges*0.48;     % Trägheitsmoment zwischen Nabe und der oberen Teil des Blatts
J3=Jges*0.45;     % Trägheitsmoment der oberen Teil des Blatts

% Parameter des elektrisch-mechanischen Triebstrangssystems
v1=J1/J2;
v2=J2/J3;

%--------------------------------------------------------------------------
% Symbolic Math Toolbox
%--------------------------------------------------------------------------
syms c12 c23 f
T12=Mnenn/(c12*2*pi*nnenn*n^2);                     % Zeitkonstante T1,2
T23=Mnenn/(c23*2*pi*nnenn*n^2);                     % Zeitkonstante T2,3
Tm=(2*pi*nnenn*n^2*J1)/Mnenn;                       % Hochlaufzeit des Motors Tm

agn4=(Tm^2*T12*T23)/(v1*(v1*v2+v2+1));              % Koeffizient von omega^4
agn2=Tm/(v1*v2+v2+1)*(T12*(v2+1) + T23*(v1+1)/v1);  % Koeffizient von omega^2
t=agn4*(1i*2*pi*f)^4+agn2*(1i*2*pi*f)^2+1;          % Nenner der Übertragungsfunktion. omega=j*2*pi*f

% c12(c23,f) und C23(c12,f)
c12_f=solve(t,c12);
c23_f=solve(t,c23);
% Wertebereiche der Frequenzen
t1=linspace(1,2.5);
t2=linspace(1.5,3);
% Achsen. Frequenzen in den Funktionen c12 und c23 einsetzen
X=subs(c12_f,f,t1);
Y=subs(c23_f,f,t2);


Harald
Forum-Meister

Forum-Meister


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

X und Y enthalten ja noch c12 und c23. Wie soll das denn geplottet werden?

Zudem brauchst du für surf als drittes Argument eine Matrix.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2014, 21:40     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe!
Ich habe was anderes gedacht, z.B. die Funktion c12 hängt von der Frequenz und c23 ab, so: c12=c12(c23,f) und c23 hängt von c12 und der Frequenz ab, c23=c23(c12,f) dann wollte ich um c12 zu berechnen, die Frequenz von c12 "festhalten", z.B. bei 1Hz (Anfangswert) und die Funktion c23 in c12 einsetzen und die Frequenz von c23 variieren lassen, von 1,5Hz bis 3Hz, und alle berechneten Werte in einer Matrix speichern. Muss man dafür ein for-Schleife benutzen, oder gibt es ein andere Befehl dafür?
Ich glaube für jede berechnete Wert kommt zwei Werte für c12 heraus.
Wie könnte man die Werte in einer Matrix speichern? Ich habe die Code geschrieben:

Code:
for j=1:0.1:1.5
    for k=1.5:0.1:3
        hilf=subs(c12_f,f,j);       % von c23 abhängig
        hilf2=subs(c23_f,f,k);      % von c12 abhängig
        a=subs(hilf,c23,hilf2);     % c12(c12)
        [SteifigkeitC12]=solve(c12==a);  % die Lösung von c12(c12) in einer Matrix speichern
    end
end
 
Harald
Forum-Meister

Forum-Meister


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

man kann zwar for-Schleifen über Nicht-Integer-Werte laufen lassen, aber da macht man sich teilweise selbst das Leben schwer. Einfacher hier etwa so:
Code:
allj = 1:0.1:1.5;
allk = 1.5:0.1:3;
SteifigkeitC12 = zeros(numel(j), numel(k));
for idx1 = 1:numel(allj)
    for idx2 =1:numel(allk)
        hilf=subs(c12_f,f,allj(idx1));       % von c23 abhängig
        hilf2=subs(c23_f,f,allk(idx2));      % von c12 abhängig
        a=subs(hilf,c23,hilf2);     % c12(c12)
        SteifigkeitC12(idx1, idx2) =solve(c12==a);  % die Lösung von c12(c12) in einer Matrix speichern
    end
end


Das setzt natürlich voraus, dass es immer eine eindeutige Lösung gibt.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2014, 13:20     Titel:
  Antworten mit Zitat      
Hallo, ich habe eine kleine Änderung gemacht, ich speichere die Steifigkeiten C12 und C23 in Abhängigkeit von C12 in zwei Matrizen, später in einer anderen Schleife fange ich mit C23 und dann berechne ich die Steifigkeit C12 in Abhängigkeit von C23, aber in dieser unteren Code sehen alle Zeilen gleich wie die erste aus, ich habe den Fehler nicht gefunden, die Schleifen sind aber richtig, oder?
Code:
allj = 1:0.1:1.5;
allk = 1.5:0.1:3;
SteifigkeitC12 = zeros(numel(allj), numel(allk));
SteifigkeitenC23_C12=zeros(numel(allk),numel(allj));

for idx1 = 1:numel(allj)
    for idx2 =1:numel(allk)
        a=subs(c12_f,f,idx1);
        b=subs(c23_f,f,idx2);
        [SteifigkeitenC12(idx1,idx2),SteifigkeitenC23_C12(idx2,idx1)]=solve(a,b,c12,c23);
    end
end
 
fcosta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2014, 15:30     Titel:
  Antworten mit Zitat      
ich glaube die Variabel idx1 der äußere Schleife läuft nicht, er bleibt bei idx1=1 stehen.

Kleine Änderung:
Code:
for idx1 = 1:numel(allj)
    for idx2 =1:numel(allk)
        a=subs(c12_f,f,allj(idx1));
        b=subs(c23_f,f,allk(idx2));
        [SteifigkeitenC12(idx1,idx2),SteifigkeitenC23_C12(idx2,idx1)]=solve(b,a,c12,c23);
    end
end
 
Harald
Forum-Meister

Forum-Meister


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

gegenwärtig wird a=0, b=0 gelöst. Willst du das?

Zudem ist mir nicht klar, warum du einmal idx1 und idx2 vertauscht.

Was genau soll folgendes heißen?
Zitat:
aber in dieser unteren Code sehen alle Zeilen gleich wie die erste aus


Zitat:
ich habe den Fehler nicht gefunden

Woraus schließt du, dass es einen Fehler gibt?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2014, 19:32     Titel:
  Antworten mit Zitat      
Hi, ich hatte die Reihenfolge vertauscht weil die Matrix SteifigkeitenC23_C12 die innere Schleife benutzt, und danach die äußere Schleife.
Kann man bei Matlab ein 3d Grafik plotten aus zwei Funktionen, in der Fall, C12(C23,f) und C23(C12,f), wo f in C12 zwischen 1Hz und 1,5Hz liegt und f für C23 zwischen 1,5Hz und 3Hz? Die Funktion C23 kann man in C12 einsetzen, wenn man vorher die f's durch f1 und f2 tauscht, dann wird es ein bisschen einfacher vieleicht.
Die Aufgabe ist zu kompliziert geworden, weil wenn man solve(c12==a) benutzt, kommt zwei Ergebnisse heraus, das kann man nicht mehr danach plotten, glaube ich.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.03.2014, 20:04     Titel:
  Antworten mit Zitat      
Hallo,

bitte alle Rückfragen beantworten.

Zitat:

ich hatte die Reihenfolge vertauscht weil die Matrix SteifigkeitenC23_C12 die innere Schleife benutzt, und danach die äußere Schleife

Der Logik kann ich nicht folgen.

Zitat:
Kann man bei Matlab ein 3d Grafik plotten aus zwei Funktionen, in der Fall, C12(C23,f) und C23(C12,f), wo f in C12 zwischen 1Hz und 1,5Hz liegt und f für C23 zwischen 1,5Hz und 3Hz? Die Funktion C23 kann man in C12 einsetzen, wenn man vorher die f's durch f1 und f2 tauscht, dann wird es ein bisschen einfacher vieleicht.

Auch dem kann ich leider nicht folgen. Insofern sage ich einfach mal, was du machen kannst: eine (abhängige) Größe plotten, die von zwei (unabhängigen) Größen abhängig ist - also z = f(x, y).

Zitat:
Die Aufgabe ist zu kompliziert geworden, weil wenn man solve(c12==a) benutzt, kommt zwei Ergebnisse heraus, das kann man nicht mehr danach plotten, glaube ich.

Das könnte man so interpretieren, dass es zwei Lösungszweige gibt. Auch das ließe sich dann plotten.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.03.2014, 21:09     Titel:
  Antworten mit Zitat      
Zitat:
ich hatte die Reihenfolge vertauscht weil die Matrix SteifigkeitenC23_C12 die innere Schleife benutzt, und danach die äußere Schleife

Bei der Matrix SteifigkeitenC12(idx1,idx2) werden die Werte von c12 in der Matrix SteifigkeitC12 gespeichert, z.B. in der ersten Zeile werden die Werte von c12 für die Frequenz der ersten Funktion a gleich 1Hz und die Frequenz der Funktion b wird von 1,5Hz bis 3Hz variiert, für SteifigkeitenC23_C12 habe ich die Reihenfolge vertausch damit in jeder Zeile die Frequenz der zweiten Funktion b festgehalten wird, und die Frequenz der Funktion a von 1Hz bis 1,5 Hz variiert, hier kann man die Matrix SteifigkeitenC23_C12 besser sehen:
\begin{pmatrix} C23(f1=1.5Hz,f2=1Hz) & C23(f1=1.5Hz,f2=1.2Hz) & C23(f1=1.5Hz,f2=1.3Hz) & C23(f1=1.5Hz,f2=1.4Hz) & C23(f1=1.5Hz,f2=1.5Hz) \\ C23(f1=1.6Hz,f2=1Hz) & C23(f1=1.6Hz,f2=1.2Hz) & C23(f1=1.6Hz,f2=1.3Hz) & C23(f1=1.6Hz,f2=1.4Hz) & C23(f1=1.6Hz,f2=1.5Hz) \\ C23(f1=1.7Hz,f2=1Hz) & C23(f1=1.7Hz,f2=1.2Hz) & C23(f1=1.7Hz,f2=1.3Hz) & C23(f1=1.7Hz,f2=1.4Hz) & C23(f1=1.7Hz,f2=1.5Hz) \\ C23(f1=1.8Hz,f2=1Hz) & C23(f1=1.8Hz,f2=1.2Hz) & C23(f1=1.8Hz,f2=1.3Hz) & C23(f1=1.8Hz,f2=1.4Hz) & C23(f1=1.8Hz,f2=1.5Hz) \\ \left(...\right) \\ C23(f1=3Hz,f2=1Hz) & C23(f1=3Hz,f2=1.2Hz) & C23(f1=3Hz,f2=1.3Hz) & C23(f1=3Hz,f2=1.4Hz) & C23(f1=3Hz,f2=1.5Hz) \end{pmatrix}

Zitat:
Kann man bei Matlab ein 3d Grafik plotten aus zwei Funktionen, in der Fall, C12(C23,f) und C23(C12,f), wo f in C12 zwischen 1Hz und 1,5Hz liegt und f für C23 zwischen 1,5Hz und 3Hz? Die Funktion C23 kann man in C12 einsetzen, wenn man vorher die f's durch f1 und f2 tauscht, dann wird es ein bisschen einfacher vieleicht.

Ich wollte bei der Funktion C12(C23,f), in Matlab sie ist die Funktion "a", die Variabel f durch f1 vertauschen und bei der Funktion C23(C12,f), in Matlab das ist die Funktion b, die Frequenz f durch f2 vertauschen, weil die Intervalle der Frequenz nicht gleich sind. Danach wollte ich die "neue" Funktion C23(C12,f2) in C12(C23,f1) einsetzen, dann bekommt man eine neue Funktion C12(C12,f1,f2), danach könnte man die bekannten Frequenzen f1 und f2 in dieser Funktion einsezen.

Code:
Die Aufgabe ist zu kompliziert geworden, weil wenn man solve(c12==a) benutzt, kommt zwei Ergebnisse heraus, das kann man nicht mehr danach plotten, glaube ich.

Ich dachte das Plotten von zwei Ergebnisse wäre nicht möglich.
 
fcosta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2014, 11:50     Titel:
  Antworten mit Zitat      
Beitrag löschen Beitrag melden Antworten mit Zitat Beitrag bearbeiten oder löschen
Ich hatte ein Teil des Programms geändert, ist vieleicht so besser, ich habe die Funktionen C12 und C23 geändert, so dass sie nur von der Frequenzen f1 und f2 abhängig sind:

Code:
%--------------------------------------------------------------------------
% Symbolic Math Toolbox
%--------------------------------------------------------------------------
syms c12 c23 f f1 f2
T12=Mnenn/(c12*2*pi*nnenn*n^2);                     % Zeitkonstante T1,2
T23=Mnenn/(c23*2*pi*nnenn*n^2);                     % Zeitkonstante T2,3
Tm=(2*pi*nnenn*n^2*J1)/Mnenn;                       % Hochlaufzeit des Motors Tm

agn4=(Tm^2*T12*T23)/(v1*(v1*v2+v2+1));              % Koeffizient von omega^4
agn2=Tm/(v1*v2+v2+1)*(T12*(v2+1) + T23*(v1+1)/v1);  % Koeffizient von omega^2
t=agn4*(1i*2*pi*f)^4+agn2*(1i*2*pi*f)^2+1;          % Nenner der Übertragungsfunktion. omega=j*2*pi*f

% c12(c23,f) und c23(c12,f)
c12_f=subs(solve(t,c12),f,f1);                      % solve(t,c12): t nach c12 lösen, dann Frequenz f durch f1 ersetzen
c23_f=subs(solve(t,c23),f,f2);                      % solve(t,c23): t nach c23 lösen, dann Frequenz f durch f2 ersetzen

c12_new=solve(subs(c12_f,c23,c23_f)==c12,c12);      
% c12_new ist c12(f1,f2), Steifigkeit c12 in Abhängigkeit von f1 und f2
% subs(c12_f,c23,c23_f): c23_f bei c12_f einsetzen und durch die Variabel
% c23 ersetzen
% solve(subs(c12_f,c23,c23_f)==c12,c12): die Gleichung nach c12 lösen
c23_new=solve(subs(c23_f,c12,c12_f)==c23,c23);
% c23_new ist c23(f1,f2), Steifigkeit c23 in Abhängigkeit von f1 und f2
% subs(c23_f,c12,c12_f): c23_f bei c12_f einsetzen und durch die Variabel
% c23 ersetzen
% solve(subs(c12_f,c23,c23_f)==c12,c12): die Gleichung nach c12 lösen
 



So könnte man f1 und f2 z.B. in der Funktion c12_new einsetzen, dann c23 durch die Funktion c23_new berechnen, danach könnte man die Werte in ein Grafik plotten, ich wollte in der X und Y-Achse die Variabeln f1 und f2 plotten, und in der Z-Achse die Steifigkeit c12 plotten, mit welche Befehl wäre das möglich?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.03.2014, 12:36     Titel:
  Antworten mit Zitat      
Hallo,

versuchs mal mit ezplot.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2014, 23:44     Titel:
  Antworten mit Zitat      
Hallo,

Ich hatte versucht mit dem Befehl ezplot(double(c12_new)), und
Code:
>> ezplot(double(c12_new),[1 1.5 1.5 3])
aber dann kommt die Fehlermeldung:
Zitat:
Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a double array.

If the input expression contains a symbolic variable, use the VPA function instead.

Error in sym/double (line 514)
Xstr = mupadmex('symobj::double', S.s, 0);

Mit und ohne die Intervall kommt die Fehlermeldung, wo ist der Fehler?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.03.2014, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

bitte mach dir die Mühe, bei Problemen zu einem Befehl zunächst in die Dokumentation zu schauen.

ezplot ist ein Befehl, der direkt mit symbolischen Ausdrücken arbeitet. Das 'double' musst du also weglassen.

Grüße,
Harald
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 - 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.