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

If Bedingungsabfrage

 

MatlabPete

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2013, 22:58     Titel: If Bedingungsabfrage
  Antworten mit Zitat      
Hey Leute,

ich habe eine if-Bedingungsabfrage wie folgt programmiert

if (d1<0 || d1>=0 || d2<0 || d2>=0 || d3<0 || d3>=0)
x= (a2*cos(d2/180*pi)+a3*cos((d2+d3)/180*pi))*cos(d1/180*pi);
y=(a2*cos(d2/180*pi)+a3*cos((d2+d3)180*pi))*sin(d1180*pi);
z= a2*sin(d2/180*pi)+a3*sin((d2+d3)/180*pi)+d;
end

Die Variablen d1, d2 und d3 sind Winkel. Wenn ich das Programm debugge, kommt die Fehlermeldung:
"Error in ==> kugelplot at 25
if (d1<0 || d1>=0 || d2<0 || d2>=0 || d3<0 || d3>=0)"

Was mache ich verkehrt? Vielen Dank für eure Hilfe!


Harald
Forum-Meister

Forum-Meister


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

in aller Regel steht dabei noch eine genauere Beschreibung, und die wäre das entscheidende.
Bitte also die vollständige Fehlermeldung kopieren. Sollte sie das schon gewesen sein, bitte d1, d2, d3 zur Verfügung stellen, anhand deren man das nachvollziehen kann.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2013, 23:50     Titel:
  Antworten mit Zitat      
Die Winkel d1, d2 und d3 werden über trogometrische Bezieihungen berechnet.

Code:
hold on;
rotate3d on;
r1=31;
a2=45;
a3=35;
d=-4;

[d1,d2]=meshgrid(linspace(0,pi/2,100),linspace(-pi/6,pi/6,100));
   
x=r1*sin(d1).*cos(d2);
y=r1*sin(d1).*sin(d2);
z=r1*cos(d1);


d1=atan2(y,x)*180/pi;
D=(x*x+y*y+(z-d)*(z-d)-(a2*a2)-(a3*a3))/(2*a2*a3);
d3=acos(D)*180/pi;
%Berechnung von Psi3 in der elbow-down Position
if d3>=35
    d3 = atan2((-sqrt(1-(D*D))),D)*180/pi;
end
d2=atan2(z-d,sqrt(y*y+x*x))*180/pi-atan2(a3*sin(d3*pi/180),a2+a3*cos(d3*pi/180))*180/pi;
 

Zu diesem Quellcodeabschnitt liefert der Compiler mir die Fehlermeldungen:

"Warning: Imaginary part is currently ignored.
Future behavior of ATAN2 with complex inputs may change.
> In kugelplot at 22
??? Operands to the || and && operators must be convertible to logical scalar values."

[EDITED, Jan, Bitte Code-Umgebung benutzen - Danke]
 
Harald
Forum-Meister

Forum-Meister


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

da steht ja die Erklärung.

Die Frage ist aber nun, was du beabsichtigst. In dieser Form ist die Abfrage ja erstmal nur sinnvoll, wenn du das für skalare d1, d2, d3 machst.

Wenn die Abfrage komponentenweise gemacht werden soll, dann musst du das in einer for-Schleife oder noch besser per logischer Indizierung machen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.12.2013, 00:52     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine schnellen Antworten. Es ist mir noch ein Fehler im Algorithmus aufgefallen, anstelle von d1, d2 und d3 werden jetzt die Variablennamen theta1, theta2 und theta3 für die Winkel verwendet:

Code:
hold on;
rotate3d on;
r1=31;
a2=45;
a3=35;
d=-4;

[d1,d2]=meshgrid(linspace(0,pi/2,100),linspace(-pi/6,pi/6,100));

   
x=r1*sin(d1).*cos(d2);
y=r1*sin(d1).*sin(d2);
z=r1*cos(d1);
%fprintf('x beträgt: %f y beträgt: %f z beträgt: %f\n',x,y,z);

theta1=atan2(y,x)*180/pi;
D=(x*x+y*y+(z-d)*(z-d)-(a2*a2)-(a3*a3))/(2*a2*a3);
theta3=acos(D)*180/pi;
%Berechnung von Psi3 in der elbow-down Position
if theta3>=35
    theta3 = atan2((-sqrt(1-(D*D))),D)*180/pi;
end
%theta2=atan2(z-d,sqrt(y*y+x*x))*180/pi-atan2(a3*sin(d3*pi/180),a2+a3*cos(d3*pi/180))*180/pi;

%Überprüfung mittels Vorwärtstransformation
if (theta1<0 || theta1>=0 || theta2<0 || theta2>=0 || theta3<0 || theta3>=0)
    x= (a2*cos(d2/180*pi)+a3*cos((d2+d3)/180*pi))*cos(d1/180*pi);
    y= (a2*cos(d2/180*pi)+a3*cos((d2+d3)/180*pi))*sin(d1/180*pi);        
    z= a2*sin(d2/180*pi)+a3*sin((d2+d3)/180*pi)+d;
end

surf(x,y,z);


Mit Meshgrid möchte ich einen Kugelschnitt erzeugen und mit von allen Punkten auf dessen Oberfläche die Winkel theta1, theta2 und theta3 berechnen lassen. Werden die Bedingungen für die berechneten Winkel erfüllt, wird mittels surf(x,y,z) der Lösungsbereich dargestellt. Er liefert mir auch für diesen Fall genau den selben Fehler:
"??? Operands to the || and && operators must be convertible to logical scalar values.

Error in ==> kugelplot at 26
if (theta1<0 || theta1>=0 || theta2<0 || theta2>=0 || theta3<0 || theta3>=0)

??? Operands to the || and && operators must be convertible to logical scalar values.

Error in ==> kugelplot at 26
if (theta1<0 || theta1>=0 || theta2<0 || theta2>=0 || theta3<0 || theta3>=0)"

Logische Indizierung geht nur für Matrizen auf. Ich möchte aber die Winkel als Skalare in die Bedingungsabfrage einbauen. Wie ich die Abfrage komponentenweise in eine for-Schleife einbaue weis ich auch nicht. Kannst du mir helfen? Vielen Dank!

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke]
 
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.