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

Alternative für if-Anweisung um array auswerten zu können

 

Sarah_1234
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 03.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2019, 10:33     Titel: Alternative für if-Anweisung um array auswerten zu können
  Antworten mit Zitat      
Halli hallo, Smile

kurz zum Hintergrund und dem Ziel meines Codes:
Ich habe mittels einer Wertetabelle Splines erzeugt, die eine Wirkungsgradkurve einer Turbine darstellen.

Damit ich nun auch die Werte zwischen den Stützpunkten (z.B. 0.08 und 0.1) in 0. 01 Schrittlänge ermitteln kann, habe ich eine if-Anweisung wie folgt in einer for-Schleife integriert.


Code:
a_Tu = 0:0.01:0.15; %Theoretisch soll a_Tu bis 1 gehen, aber um den Code um ca. 15 weiteren elseifs zu verkürzen, habe ich hier 0.15 gewähllt  
vec_n_Pelton = zeros(1,length(a_Tu));      

 
for ii_Tu=1:length(a_Tu)
        if (0<=a_Tu) && (a_Tu<0.075)
            n_Turbine=0;
        elseif (0.075<=a_Tu) &&(a_Tu<0.08)    
            n_Turbine =-168866.333*a_Tu(ii_Tu)^3 + 37994.925*a_Tu(ii_Tu)^2 - 2795.398*a_Tu(ii_Tu) + 67.174;
        elseif(0.08<a_Tu) &&(a_Tu<=0.1)
            n_Turbine = 47758.041*a_Tu(ii_Tu)^3 - 13994.925*a_Tu(ii_Tu)^2 + 1363.79*a_Tu(ii_Tu) - 43.738; %Spline mitd den Stützpunkten 0.08 und 0.1
        elseif(0.1<a_Tu) &&(a_Tu<=0.15);
            n_Turbine = -3268.363*a_Tu(ii_Tu)^3 + 1312.996*a_Tu(ii_Tu)^2 - 167.002*a_Tu(ii_Tu) + 7.289;
        end    
 vec_n_Pelton(ii_Tu)= n_Turbine;
end
  figure;plot(vec_n_Pelton)  


Darauf erhalte ich diese Fehlermeldung:
Operands to the || and && operators must be convertible to logical scalar values.

Error in Turbine_Pelton_ifAnweisung_kiA_v1 (line 13)
if (0<=a_Tu) && (a_Tu<0.075)


Soweit ich das verstanden habe, ploppt diese Fehlermedlung auf, da a_Tu kein Scalar, sondern ein array ist. Kennt jemand eine Möglichkeit die n_Turbine(n)-Werte für aTu=0:0.01:0.15 (bzw. 1) dennoch berechnen zu lassen? Evtl. mit einer anderen Anweisung (die ich noch nicht kenne, da ich noch Matlab-Neuling bin Wink )?
Würde mich rießig über einen Input freuen.

Grüße Sarah
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.04.2019, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

um den Code zum laufen zu bringen, müsstest du die einzelnen Elemente abfragen, also:
Code:
if (0<=a_Tu(ii_Tu)) && (a_Tu(ii_Tu)<0.075)

etc.

Da die Polynome gleich strukturiert sind, wäre mein Vorschlag, Koeffizientenvektoren a0 bis a3 mit repelem aufzubauen, z.B.
Code:
a3 = [repelem(0, 8), -168866.333, repelem(47758.041, 2), repelem(-3268.363, 5)];

Dann kannst du komponentenweise Operationen nutzen und dir die Verzweigungen ersparen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sarah_1234
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 03.04.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.04.2019, 13:58     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Rückmeldung. Very Happy

Der Hinweis mit den "einzelnen Elementen (a_Tu(ii_Tu))" hat mir sehr geholfen. Besten Dank dafür!

Die Idee die Polynome mittels den Koeffizientenvektoren a0 bis a3 mit repelem zu erzeugen, klingt für mich als Neuling vielversprechend. Leider verstehe ich den Code noch nicht, da ich bis dato nur folgende Schreibweise für Polynome kenne:

Code:

 p =[-168866.333 37994.925 -2795.398  67.174];
 


Der Aufbau scheint mir mittels Repelem anders zu sein. Könntest du mir diesen näher erläutern? Wenn ich das richitg sehen, handelt es sich bei deinem Beispiel immer um den Koeffizienten der 3 Potenz. Weshalb wird der Koeffizienten -168866.333 nicht in einem repelem verarbeitet?

Beste Grüße Sarah
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Wenn ich das richitg sehen, handelt es sich bei deinem Beispiel immer um den Koeffizienten der 3 Potenz.

Genau. Die Idee wäre, dass du zu jedem a_Tu einen Satz von Koeffizienten erstellst. Übrigens ist die Abfrage momentan so, dass es keinen Zweig für a_Tu=0.08 gibt (nur für größer oder kleiner).

Zitat:
Weshalb wird der Koeffizienten -168866.333 nicht in einem repelem verarbeitet?

Weil er momentan nur für (maximal) ein a_Tu angenommen wird, nämlich 0.08.

Wahrscheinlich musst du aber a_Tu ohnehin mit einer feineren Schrittweite abtasten, damit du ein vernünftiges Ergebnis bekommst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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 - 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.