Verfasst am: 22.12.2013, 22:58
Titel: If Bedingungsabfrage
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!
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
MatlabPete
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.12.2013, 23:50
Titel:
Die Winkel d1, d2 und d3 werden über trogometrische Bezieihungen berechnet.
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."
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
MatlabPete
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 23.12.2013, 00:52
Titel:
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:
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;
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!
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
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.