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

Probleme bei Erstellung einer Funktion - Error 9

 

narf80
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2010, 17:57     Titel: Probleme bei Erstellung einer Funktion - Error 9
  Antworten mit Zitat      
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:

Code:
%
g=3:0.1:4;
nu=1
rho=2
omega=3

er=((3+nu)*rho*omega^2)/8

function [x]=Spannungr(r1,er1)
    x=(er1/(r1^2))-(r1^2)
endfunction

clf()
plot2d(g,[Spannungr(g,er)])
 


Wenn ich dies jetzt nach Scilab lade, bekomme ich immer folgende Fehlermeldung:

Code:
%
-->plot2d(g,[Spannungr(g,er)])
 !--error 9
Inkonsistente Subtraktion.

at line       3 of function Spannungr called by :  
plot2d(g,[Spannungr(g,er)])
at line      16 of exec file called by :    
ILAB-e8444a1b-0960-4fed-ace0-e1db1ffd499b.sce'
while executing a callback
 


Leider konnte ich keine Fehlerbeschreibung dazu finden.
Hat jemand eine Idee was ich da falsch mache???
Private Nachricht senden Benutzer-Profile anzeigen


scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 10:36     Titel:
  Antworten mit Zitat      
Hallo narf80,

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.

Verständnisabhilfe könnte eine Zeile wie:
Code:
bringen, oder sich mit Elementabarbeitung (.) beschäftigen

viel Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 14:16     Titel:
  Antworten mit Zitat      
Hallo scilaby,

danke für deine schnelle Antwort.
In diesem Beispiel funktioniert das wunderbar, mit der Multiplikation mit einem Vektor dessen Einträge alle 1 sind.

Wenn ich jetzt jedoch die Funktion etwas abändere, dann funtioniert es so nicht mehr, da ich jeweils die einzelnen Einträge benötige.

x=((3+nu)/8*rho*omega^2)*(Ri^2+Ro1^2-(Ri^2*Ro^2/r^2)-r^2)

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 15:19     Titel:
  Antworten mit Zitat      
Das war schon ernst gemeint:
scilaby hat Folgendes geschrieben:
oder sich mit Elementabarbeitung (.) beschäftigen


hier gibt es ein vergleichbares Problem mit Lösung

viel Erfolg bei der Umsetzung
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2010, 17:03     Titel:
  Antworten mit Zitat      
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
 
r=Ri:0.01:Ro;  


xset("window",0)
clf(0)  
plot2d(r,[Spannungr(Ri,Ro,r,nu,rho,omega)])

xset("window",1)
clf(1)
plot2d(r,[Spannungt(Ri,Ro,r,nu,rho,omega)])
 



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?
Private Nachricht senden Benutzer-Profile anzeigen
 
scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 13:49     Titel:
  Antworten mit Zitat      
und ......Erfolge???

Arrow nur zur Kontrolle:
Code:
x=((3+nu1)/8*rho1*omega1^2)*(Ri1^2+Ro1^2-(Ri1^2*Ro1^2.0./r1.^2)-r1.^2)


oder wolltest Du etwas anderes erreichen?
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 14:42     Titel:
  Antworten mit Zitat      
@scilaby

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.

Danke für deine Mühe
Private Nachricht senden Benutzer-Profile anzeigen
 
scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 14:58     Titel:
  Antworten mit Zitat      
dann vergleiche doch mal Deine Ergebnisse mit dem Resultat meiner angepassten Zeile

ich hoffe mal das ==

und dann mache mal eine Zeitmessung für beide Varianten
und lasse uns an den Erkenntnissen teilhaben
viel Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 16:53     Titel:
  Antworten mit Zitat      
@scilaby:

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 17:18     Titel:
  Antworten mit Zitat      
Hallo scilaby,

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 18:58     Titel:
  Antworten mit Zitat      
Hallo narf80,

es kommt hier nicht auf .0 an sondern auf ./
um Informationen hierzu zu erhalten, kannst Du z.B.
Code:
help slash
oder
Code:
am Prompt in der Konsole eingeben

viel Erfolg weiterhin
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.01.2010, 23:05     Titel:
  Antworten mit Zitat      
Hallo scilaby,

danke für deine Antworten, aber ich verstehe es trotzdem noch nicht.

Hier der komplette Code mit den von dir geänderten Zeilen.
Code:
%
//Berechnung der Spannungsverteilung in einer rotierenden Scheibe mit zentralem Loch
tic
//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;

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.0./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.0./r1.^2)-((1+3*nu1)*r1.^2/(3+nu1)))
endfunction

g=Ri:0.001:Ro;

xset("window",0)
clf(0)
plot2d(g,[Spannungr(Ri,Ro,g,nu,rho,omega)])
plot2d(g,[Spannungt(Ri,Ro,g,nu,rho,omega)])
toc
 


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
narf80
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2010, 09:28     Titel:
  Antworten mit Zitat      
@Scilaby

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
scilaby
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 07.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2010, 22:19     Titel: und es geht noch anders, aber es muß halt eindeutig sein
  Antworten mit Zitat      
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 .
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.