Verfasst am: 07.01.2010, 16:57
Titel: Probleme bei Erstellung einer Funktion - Error 9
Hallo,
ich bin ein Neuling, was Scilab angeht und komme im Moment nicht weiter.
Ich habe versucht eine Funktion zu definieren und diese dann zu plotten.
Ich erhalte jedoch immer die selbe Fehlermeldung.
Meine Programmierung sieht bisher so aus:
atline3 of function Spannungr called by :
plot2d(g,[Spannungr(g,er)])
at line16 of exec file called by :
ILAB-e8444a1b-0960-4fed-ace0-e1db1ffd499b.sce'
while executing a callback
eine Idee wäre, daß es sich bei g um einen Vektor handelt und bei er um einen Skalar somit ist bei diesem Code nicht klar welches Element(Wert) bei der Funktionsauswertung zum Einsatz kommen soll.
Ri und Ro sind ebenfalls scalare Konstanten.
Wie kann ich denn einer Funktion sagen, dass sie immer nur einen Eintrag verwenden soll? Muss ich dafür extra eine Schleife programmeren oder gibt es in Scilab noch eine andere Möglichkeit?
Danke noch mal für die schnelle Antwort, aber ich glaube ich verstehe dann nicht was du genau meinst.
Den Dot Operator kann man doch nicht auf die Subtraktion anwenden, oder???
Hier noch einmal meine bisherige Programmierung:
Code:
%
//Berechnung der Spannungsverteilung einer rotierenden Scheibe mit zentralem Loch
//Innerer Radius [m]
Ri=0.05;
//Äußerer Radius [m]
Ro=0.6;
//Rotationsfrequenz [Hz]
f=4000/60;
//Poisson-Verhältnis
nu=0.3;
//Dichte [kg/m³]
rho=7850;
//Berechnung der Winkelgeschwindigkeit [rad/s]
omega=f*2*%pi;
//Definition der Spannungsfunktionen
function[x] = Spannungr(Ri1,Ro1,r1,nu1,rho1,omega1)
//Berechnung der Radialspannung [N/m²]
x=((3+nu1)/8*rho1*omega1^2)*(Ri1^2+Ro1^2-(Ri1^2*Ro1^2./r1.^2)-r1.^2)
endfunction
function[y] = Spannungt(Ri1,Ro1,r1,nu1,rho1,omega1)
//Berechnung der Tangentialspannung
y=((3+nu1)/8*rho1*omega1^2)*(Ri1^2+Ro1^2+(Ri1^2*Ro1^2/r1.^2)-((1+3*nu1)*r1.^2/(3+nu1)))
endfunction
Wenn ich das jetzt richtig verstanden habe, entsteht das Probelmn an zwei Stellen, und zwar an dieser (Ri1^2+Ro1^2-(Ri1^2*Ro1^2./r1.^2)-r1.^2)
und dieser (Ri1^2+Ro1^2+(Ri1^2*Ro1^2/r1.^2)-((1+3*nu1)*r1.^2/(3+nu1))) Stelle dadurch, dass ich einen Vektor von einem Skalar abziehe.
Hier sollte jedoch nur der entsprechende Eintrag aus dem Vektor r1 verwendet werden. Dies lässt sich jedoch nicht mit dem Dot Operator erreichen, oder?
Habe es mit dem Dot Operator nicht hin bekommen. Habe mir jetzt eine For Schleife gebastelt, die jeden Eintrag des Vektors separat in die Funktionen einsetzt und das Ergebnis in einen zweiten Vektor schreibt. Das funktioniert dann auch einwandfrei.
Es kommt das gleiche heraus, wie mit meiner Schleife.
Die Zeile sieht bis auf einen Dot genauso aus wie die, die ich vorher eingegeben habe.
Du hast dort 2.0./r1^.2 eingegeben. Wofür steht das .0 ?????
Das habe ich bisher auch noch nicht in der Anleitung gefunden. Was bewirkt dies genau? Ich dachte dies wäre dann nur ein einfaches Dezimalzeichen?
Eine Zeitmessung habe ich bisher noch nicht gemacht. Da muss ich erst mal in der Anleitung suchen, wie das funktioniert.
habe jetzt eine Zeitmessung durchgeführt. Für eine geringe Anzahl an Auswertungen gibt es praktisch keinen Unterschied zwischen den beiden Methoden.
Wenn jedoch eine große Anzahl an Auswertungen gemacht werden soll, ist deine Variante deutlich schneller.
Von daher würde es mich doch sehr interessieren, was dieses .0 bewirkt.
Wenn ich nun das .0 entferne, funktioniert es bei mir nicht mehr und ich erhalte wieder die Fehlermeldung inkonsistente Subtraktion.
Das verstehe ich nicht.
Könntest du den Code vielleicht einmal bei dir laufen lassen? Und dann einmal mit .0 und einmal ohne und mir mitteilen, ob dies bei dir einen Effekt hat?
Wenn ich dich richtig verstanden habe, sollte dies ja eigentlich nichts ändern.
Ich hätte eine Idee, warum in dieser Funktion das .0 wichtig ist für die Berechnung.
Könnte es sein, dass das .0 dafür sorgt, dass der Dot dem / zugeordnet wird?
Ich könnte mir vorstellen, dass der Dot ansonsten als Dezimalpunkt für die 2 interpretiert wird. Wenn jedoch 2.0./ dort steht ist klar, dass der zweite Dot kein Dezimaltrennungszeichen sein kann.
Verfasst am: 10.01.2010, 21:19
Titel: und es geht noch anders, aber es muß halt eindeutig sein
Hallo narf80,
narf80 hat Folgendes geschrieben:
... ist klar, dass der zweite Dot kein Dezimaltrennungszeichen sein kann. ....perfekte Erkenntnis, man erkennt den Nutzen der Hilfe zur Selbsthilfe...weiter so
PS: dann wäre da noch 2../ und 2. ./ und 2 ./ auszuprobieren
viel Spaß und weitere Erfolge mit dem .
Einstellungen und Berechtigungen
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.