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

Verhindern, dass atan ins Unendliche geht

 

alex21110
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 11:40     Titel: Verhindern, dass atan ins Unendliche geht
  Antworten mit Zitat      
Hallo

ich bin ein Neuling in der Programmierung mit Matlab und bräuchte mal Hilfe von den Profis...

Ich habe folgende Formel:

y= atan(1/(x+1))-atan(1/(x-1))

X-Werte lasse ich von Matlab entlang der x-Achse sich selbst aussuchen. Ich muss irgendwie verhindern, dass die Summe unter dem Bruchstrich 0 wird, da in diesem Fall atan Definitionslücken aufweist.

Kann mir mal einer von euch sagen. wie ich dem Programm mitteile, dass es alle reelen Zahlen von 0 bis 50 verwenden soll, ohne x=1 und x=-1?

Vielen Dank im Voraus
mfg Alex
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.02.2013, 12:03     Titel: Re: Verhindern, dass atan ins Unendliche geht
  Antworten mit Zitat      
Hallo Alex,

Zitat:
X-Werte lasse ich von Matlab entlang der x-Achse sich selbst aussuchen.

Wie genau machst Du das? Matlab trift üblicherweise Entscheidungen nicht selbst. Bevor wir wissen können, wie Du dem Programm die X-Werte mitteilen kannst, müssten wir noch erfahren, um welches programm es überhaupt geht.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
alex21110
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 12:07     Titel:
  Antworten mit Zitat      
Hallo Jan

erstmal vielen Dank für die schnelle Antwort...Unten siehst du den Programmcode für das beschriebene Problem.
Das Problem dabei ist, dass beim Plotten der atan mathematisch nicht korrekt ausgeführt wird. Dies liegt daran, dass der atan ins unendliche geht, sobald unter dem Bruchstrich die Summe gleich 0 ist


Code:
% Eingabe der Randbedingungen für Quelle Senke mit eq=es=e
e=1;            % Abstand der Quelle/Senke zum Ursprung
n=20;            % Anzahl der Punkte auf der x-Koordinate
sp=-sqrt(3)*e   % Staupunkt
s= -sp/(n-1);   % Schrittweite der x Punkte von Sp zum Ursprung
% s2=-sp/(n-1)/10
Uoo=1;
poo=1;
rho=1;
m=5;            % Anzahl der Stromlinien und Potenziallinien
psi=0.3;
psi_s=0.5;


% Aufgabe 2a

% Berechnung der y-koordinaten der Körperkontur mit n Punkten
Ky_o=zeros(1,2*n);
i=1;
x=sp;
y0=1;
 

for i=1:n
   
    g=@(y) y+atan(y/(x+1))-atan(y/(x-1));
     
    y_n=fzero(g,y0);  
   
    Ky_o(1,i)= y_n;          % Werte in die Matrix schreiben
   
    Ky_o(1,2*n+1-i)=y_n;     % Spiegeln der Werte an der Y-Achse
   
    x=x+s;
       
     
   end
 

danke

[EDITED, Jan, bitte Code-Umgebung benutzen - Danke]
Private Nachricht senden Benutzer-Profile anzeigen
 
Mandel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 30.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 12:08     Titel:
  Antworten mit Zitat      
Ich kenn mich auch recht wenig mit Matlab aus, aber ich würde das einfach über ne if-Bedingung machen.
Code:
if abs(x) =~ 1
y= atan(1/(x+1))-atan(1/(x-1))
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
alex21110
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.02.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 12:16     Titel:
  Antworten mit Zitat      
Danke dir vielmals, aber es funktioniert leider nicht.

Kann ich einfach dem Programm "sagen", dass es den den Wert x=1 und x=-1 überspringen soll?

mfG Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Raketenmaid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 15:03     Titel:
  Antworten mit Zitat      
warte mal, eigentlich ist der atan von Unendlich doch ein Vielfaches von pi/2 als Grenzwert, von daher sollte das eigentlich kein Problem machen, sofern matlab nicht schon bei der Bestimmung vom Bruch motzt.

Warum das nicht mit der if Abfrage gehen sollte, erschließt sich mir nicht.

Ich selbst würde es so schreiben:

Code:

if abs(x) ~=1
y= atan(1/(x+1))-atan(1/(x-1));
else
y=pi/2;
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 07.02.2013, 21:45     Titel:
  Antworten mit Zitat      
ich steh irgendwie auf dem Schlauch. Du selbst legst doch x fest:

x = ps = -sqrt(3)*e

Der einfachste Weg, zu verhindern das x nicht -1/1 wird, ist
x nicht auf -1/1 zu setzen.


Davon abgesehen: matlab hat kein Problem mit atan( unendlich )

Code:
>> atan( inf )

ans =

    1.5708



weitere Anmerkungen:

i = 1 vorher festzulegen ist überflüssig for i = 1 : 5 z.B. reich völlig


Solltest du doch mal verhindern wollen, dass Matlab einen bestimmten Wert verwendet, filter ihn einfach raus:

Code:
x = [ 1 2 3 ]
xgefiltert = x( x ~= 1 )

= [ 2 3 ]


Gruß

Blues
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 - 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.