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 beim weiterarbeiten mit Funktionen

 

Situ
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 11.08.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2016, 19:46     Titel: Probleme beim weiterarbeiten mit Funktionen
  Antworten mit Zitat      
Hi ich bin noch ein Neuling was Matlab/Programmieren angeht.

Ich habe folgendes vor:

Gegeben ist eine (1 oder 2 Dimensionale)-Funktion die ich in das Programm eintippe
- es soll die erste Ableitung der Funktion berechnen (hab ich)
- diese Ableitung soll in eine weitere, schon definierte Funktion eingegeben werden (hab ich)
- mit dieser funktion soll das euler-verfahren angewendet werden (problem)

Gebe ich die funktion und die ableitung selber ein läuft das programm ohne probleme, jedoch wollte ich den letzten schritt jetzt auch noch zum laufen bringen.

Mein code sieht folgendermaßen aus

Code:
% golfball
function [p,v] = golfball3(x0,y0,Vx0,Vy0,h)


%-----Initialisierung----------------------------------------
x=ones;                     %Initialisierung x-vektor
v_x=ones;                   %Initialisierung Geschwindigkeitsvektor(x-Richtung)
y=ones;                     %Initialisierung y-vektor
v_y=ones;                   %Initialisierung Geschwindigkeitsvektor(y-Richtung)
t=ones;                     %Initialisierung Zeitvektor

D_x=0.03*v_x;                %Dämpfungsterm(x-Richtung)
D_y=0.03*v_y;                %Dämpfungsterm(y-Richtung)

%------Anfangsbedingungen------------------------------------
t(1)=0;                     %Startzeit
x(1)=x0;                    %x-Koordinate Startzeitpunkt
v_x(1)=Vx0;                 %Startwert von Vx
y(1)=y0;                    %y-Koordinate Startzeitpunkt
v_y(1)=Vy0;                 %Startwert von Vy
z(1)=x0+y0;                 %z-Koordinate Startzeitpunkt
%v_z(1)=Vx0+Vy0;

%--------konstanten--------------------------------------
m=0.045;                    %Golfballmasse 45 Gramm
g=9.81;                     %Gravitationskonstante 9,81 m/s^2
n=10^3;                     %Anzahl Schritte
tau=0.1;                  %Schrittweite

%-------Funktion------------------------------------------

syms a b integer
h_ab(a,b)= a^2+b^2 ;                                            % Das ist die gegebene Funktion
deltahx=diff(h_ab,a)                            %Das soll die ableitung der funktion mit der Variable a sein
deltahy=diff(h_ab,b)                             % hier die erste ableitung auf die b variable

%-----DGL-------------------------------------------------

%hier werden die deltahx und deltahy in die feste Funktionen eingesetzt eingesetzt
 
fx(a)=((g*(- deltahx)/(1+(deltahx^2)+(deltahy^2))) -(D_x)/m)              %DGL x-Richtung
fy(b)=((g*(- deltahy)/(1+(deltahx^2)+(deltahy^2))) -(D_y)/m)              %DGL y-Richtung

%--Euler-Verfahren x,y-Richtung-----------------------------
Hier das eulerverfahren das manuell funktioniert


for i=1:n
    v_x(i+1)=v_x(i)+fx(x(i))*tau;
    x(i+1)=x(i)+v_x(i)*tau;
   
    v_y(i+1)=v_y(i)+fy(y(i))*tau;
    y(i+1)=y(i)+v_y(i)*tau;
   
    t(i+1)=t(i)+tau;
end

%-----PLOTTEN---------------------------------------------
%plot(t,v_x,'r'); hold on;
%plot(t,x,'b');
%figure;
%plot(t,v_y,'g'); hold on;
%plot(t,y,'k');

end



Ich habe schon versucht das ein bisschen anders zu machen

Code:
%
syms a b integer
h_ab=@(a,b) a^2+b^2 ;                                            
deltahx=diff(h_ab,a)                            
deltahy=diff(h_ab,b)                            

%-----DGL-------------------------------------------------
 
fx=matlabFunction((g*(- deltahx)/(1+(deltahx^2)+(deltahy^2))) -(D_x)/m)  
         
fy=matlabFunction((g*(- deltahy)/(1+(deltahx^2)+(deltahy^2))) -(D_y)/m)    

% wobei das Eulerverfahren dann so aussehen musste

for i=1:n
    v_x(i+1)=v_x(i)+fx(x(i),1)*tau;
    x(i+1)=x(i)+v_x(i)*tau;
   
    v_y(i+1)=v_y(i)+fy(y(i),1)*tau;
    y(i+1)=y(i)+v_y(i)*tau;
   
    t(i+1)=t(i)+tau;
end  
 


Nun zu den Problemen.

1) Der zweite Code-Teil funktioniert nur für funktionen mit 2 Variablen, wenn man im Eulerverfahren fx(x(i),1) anstatt fx(x(i)) schreibt, da die fester Funktion fx automatisch 2 Variablen zugewiesen werden (a und b) obwohl fx nur von a abhängen soll und b eine konstante ist. Dafür wird das Programm aber extrem schnell ausgeführt im vergleich zum ersten Code-Teil.

2) Beim ersten Code-Teil hab ich es also geschafft die feste Funktion fx in abhängigkeit von a auszudrücken (fx(a)) [analog mit fy(b)] .
Jedoch wird mir beim Eulerverfahren direkt ein Fehler angezeigt und bin grad am verzweifeln.
Code:
% The following error occurred converting from sym to double:
DOUBLE cannot convert the input expression into a double array.

Error in golfball3 (line 49)
    v_x(i+1)=v_x(i)+fx(x(i))*tau;
 

Außerdem braucht das Programm mit dem ersten code-teil extrem lange für das compilieren.

Ich hoffe mir kann hier einer weiterhelfen
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.