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

Parameterübergabe an Funktion funktioniert nicht

 

FlitziFlitzi
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 09:31     Titel: Parameterübergabe an Funktion funktioniert nicht
  Antworten mit Zitat      
Servus allerseits,
ich komme gerade einfach mit meinem Code nicht weiter, folgendes Problem:

Ich habe derzeit ein Skript und eine Funktion:
Skript:
Code:
%
clear all; close all; clc;
tmin        = 0; % Simulationsstart [s]
tschritt    = 0.001; % Ta [s]
tmax        = 0.2; % Simulationsende [s]
;
tspan = [tmin:tschritt:tmax];
y0    = [0.01; 0; 0; 0; 0; 0; 0; 0; 0; 0]; %Anfangsbedingung
[t,y]=ode45(@f, tspan, y0 );

figure(1);
h1=plot(t,y(:,1),'k');
set(h1,'linewidth',3);
hold on;
h2=plot(t,y(:,2),'k');
set(h2,'linewidth',2.5);
% hold;
h3=plot(t,y(:,3),'k');
set(h3,'linewidth',2);
% hold off;
h4=plot(t,y(:,4),'k');
set(h4,'linewidth',1.5);
%hold;
h5=plot(t,y(:,5),'k');
set(h5,'linewidth',1);
hold off;


grid;
title('Auslenkungen Mehrmassenschwinger');
xlabel('Zeit in s');
ylabel('Auslenkungen in m');
legend('Auslenkung Masse 1','Auslenkung Masse 2','Auslenkung Masse 3','Auslenkung Masse 4','Auslenkung Masse 5');

%% Umrechnung in absolutes Koordinatensystem
a = 0.02; %Abstand der relativen KOS

for i = 1:length(y(:,1))
    yabs(i,1) = y(i, 1) + a;   %Berechnung der Absolutwerte mit 5 Massen
    yabs(i,2) = y(i, 2) + 2*a;
    yabs(i,3) = y(i, 3) + 3*a;
    yabs(i,4) = y(i, 4) + 4*a;
    yabs(i,5) = y(i, 5) + 5*a;
end
clear i;

%% Animation
figure(2);

for j = 1 : length(yabs(:,1))      %Berechnung der einzelnen Frames
    plot(yabs(j,1), t(1),'*');
    hold on;
    plot(yabs(j,2), t(1),'*');
    plot(yabs(j,3), t(1),'*');
    plot(yabs(j,4), t(1),'*');
    plot(yabs(j,5), t(1),'*');
    hold off;
    axis([0 0.12 -0.1 0.1]);
   % set(gca,'nextplot','replacechildren')
    M(j) = getframe;          %Speichern jedes einzelnen Frames
end
clear j;
movie(M,20);


Funktion:

Code:
%
function xp = f (t,y)
n = 5; % Anzahl der Massen [-]
m = 1e3; % Masse [kg]
c = 1e7; % Steigfigkeit [N/m]
d = 1e4; % Daempfung [Ns/m]

%Erzeugen einer Einheits- und Nullmatrix
for i = 1:n
    E(i,i) = 1; % Einheitsmatrix
    N(i,i) = 0; % Nullmatrix
end
clear i;

% Erzeugen der Steifikeits-, Daempfungs- und Massenmatrix
%Hauptdiagonalen
for i = 1:n
    v(i) = -2*c; %Steifikeitsdiagonalen  
    f(i) = -2 *d; %Daempfungsdiagonalen
    r(i) = -m; %Massendiagonale
   
end
clear i;
%Nebendiagonalen
for i = 1:n-1
    b(i) = c; %Steifigkeitsnebendiagonale
    g(i) = d; %Daempfungsnebendiagonale
end
clear i;

C = diag(v)+ diag(b,1) + diag(b,-1);
D = diag(f)+ diag(g,1) + diag(g,-1);
M = diag(r);
% M = [m, 0; 0, m];
% C = [2*c, -c; 2*c, -c];
% D = [2*d, -d; 2*d, -d];

%% Systemmatrix
A =[N E;(-1)*inv(M)*C (-1)*inv(M)*D]; % Systemmatrix

% %% Anregungsvektor
% for i = 1 :n
%     A = 0;
% end
% F = transpose(A);
% clear i;
F = [0; 0; 0; 0; 0; 0; 0; 0; 0; 0];
%% Zustandsraumdarstellung

xp = A* y + F; % Zustandsraumdarstellung


end

 


Soweit so gut, funktioniert auch gut. Allerdings möchte ich nun z.B. den Parameter n im skript und nicht der Funktion definieren, damit ich dann über den input befehl user eingaben ermögliche.. so sieht der versuch aus:

Im skript:
Code:

clear all; close all; clc;
tmin        = 0; % Simulationsstart [s]
tschritt    = 0.001; % Ta [s]
tmax        = 0.2; % Simulationsende [s]
n = 5;
tspan = [tmin:tschritt:tmax];
y0    = [0.01; 0; 0; 0; 0; 0; 0; 0; 0; 0]; %Anfangsbedingung
[t,y]=ode45(@f, tspan, y0, n);


und die oberste Zeile im function-file habe ich wie folgt geändert:

Code:
function xp = f (t,y,n)
%n = 5; % Anzahl der Massen [-]
sieht wer den Fehler? so funktionierts nicht
erhalte u.a. folgende Fehlermeldungen:
Error using f (line 8 )
Not enough input arguments.

:/ Ideen? Wär grossartig
Private Nachricht senden Benutzer-Profile anzeigen


FlitziFlitzi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 21.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2015, 09:49     Titel:
  Antworten mit Zitat      
Fehler gefunden.. beim Solveraufruf:

Code:
[t,y]=ode45(@(t,y) f(t,y,n), tspan, y0);


Bei der falschen Version habe ich 'n' bei den Solveroptionen eingefügt, sodass matlab es nicht als Funktionsparameter interpretieren konnte, richtig?!
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.