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

Werte Suchen

 

maukile
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 22:37     Titel: Werte Suchen
  Antworten mit Zitat      
Kann mir biiiiiitte jemand helfen!

Ich habe folgendes Programm und soll da jetzt berechnen, wann die Schwingung xv unter 1% gefallen ist und ich komm einfach nicht dahinter wie ich die Zeit raus bekomme.
mit allen was ich versuche kommt entweder 1 oder 645 raus, was ja beides nicht stimmt!

Code:

function projekt1

% Variablen definieren - global um Werteänderung zu erleichtern
 
global mk mr ck cr k a v0 b i
 
mk = 1000; % 1000 kg
mr = 25; % 25 kg
ck = 30000; % 300 N/cm
cr = 90000; % 900 N/cm
k = 750; % 750 kg/s
a = 0.2; % 20 cm
v0 = 13.888888; % 50 km/h
b = 0.4; % 40 cm
 
%Anfangswert:
x0 = [0;0;0;0];
 
%Zeitspanne
zeitspanne = [0 5];
 
%Anfangswertproblem:
%schritte = 1000;
%[t x] = ode45 (@Rechteseite, zeitspanne, x0, options);
schrittweite = 0.1; %Schrittweite festlegen
options = odeset ('MaxStep', schrittweite); %Funktion MaxStep um die Schrittweite zu variieren
[t x] = ode45 (@Rechteseite, zeitspanne, x0, options);
 
%Ergebnisse sortieren:
xk = x(:,1);
xr = x(:,2);
vk = x(:,3);
vr = x(:,4);
 
zeitdauer = length(t); %sucht größtes Objekt der Matrix
xkEnde = xk(zeitdauer)
xrEnde = xr(zeitdauer)
 
% Bedingung für u - Wann das Rad auf der oberen Ebene a angekommen ist
for i = 1:zeitdauer
    if (t(i) < b/v0)
        u(i) = a/b*v0*t(i); % U(t) = Impuls
    else u(i) = a;
    end
end
 
%Auswertung der höchsten Amplituden:
maximumk=max(xk)
maximumv=max(vk);

%Wann ist Amplitude unter 1%:

AmpErgebnis = maximumv*0.01;

for s=1:length(vk)
    if vk(s)== AmpErgebnis
        index s merken;
    end
end

disp('Auslenkung unter 1% bei (in sec):');
disp(s);

%Graphische Ausgabe:
hold on

subplot(2,1,1) ; plot (t , xk , 'm' , t , maximumk , 'b' )  , grid on , title  ('Auslenkung Karosserie (in mm):')
subplot(2,1,2) ; plot (t , vk , 'm' , t , maximumv , 'b', t , AmpErgebnis , 'r')  , grid on , title  ('Schwingungsverhalten Karosserie:')

hold off

%Funktion definieren:
 
function r = Rechteseite (t , x)

global mk mr ck cr k a v0 b
 
xk = x(1);
xr = x(2);
vk = x(3);
vr = x(4);
 
%Impuls u(t)
if (t < b/v0)
    u = a/b*v0*t;
else u = a;
end
 
xkp = vk;
xrp = vr;
vkp = (-ck*(xk-xr)-k*(vk-vr))/(mk/4);
vrp = (ck*(xk-xr)-cr*(xr-u)+k*(ck-vr))/mr;
 
r = [xkp; xrp; vkp; vrp];
 
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.11.2011, 22:59     Titel:
  Antworten mit Zitat      
Hallo,

du postest hier einen ellenlangen Code, in dem jedoch nirgends xv vorkommt. Vielleicht kannst du das Problem auch an einer etwas einfacheren Problemstellung erläutern.
1%... von?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
maukile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 23:08     Titel:
  Antworten mit Zitat      
siehst so verwirrt bin ich schon vor lauter Variablen Rolling Eyes

ich habe von der Funktion vk den Maximalen Wert gesucht und den in maximumv abgespeichert. ich soll nun die Zeit, also den X-Achsen Wert suchen, bei dem die Funktion unter 1% von der höchsten Amplitude sinkt.

und den finde ich nicht mit:

[AmpErgebnis = maximumv*0.01;
x=AmpErgebnis
for s=1:vk
if vk(s)== x
index s merken;
end
end]
Weißt aber leider auch keine bessere Lösung Sad [/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.11.2011, 23:23     Titel:
  Antworten mit Zitat      
Hallo,

wenn du bei deinem Code nicht mehr durchblickst, wird es für jemanden, der den Code nicht kennt, erst recht schwierig.

Vorschlag:
Code:
index = find(vk < x, 1, 'first')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
maukile
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 23:34     Titel:
  Antworten mit Zitat      
danke Smile aber ich bin totaler neuling u sitze seit Tagen an dem Programm.

für was steht denn 1 und 'first' in der Klammer?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.11.2011, 23:59     Titel:
  Antworten mit Zitat      
Hallo,

bitte die Dokumentation lesen.
Code:


Grüße,
Harald
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: 23.11.2011, 00:56     Titel: Re: Werte Suchen
  Antworten mit Zitat      
Hallo maukile,

Die Funktion in "Rechteseite" ist unstetig:
Code:
function r = Rechteseite (t , x)

global mk mr ck cr k a v0 b
xk = x(1);
xr = x(2);
vk = x(3);
vr = x(4);
 
%Impuls u(t)
if (t < b/v0)
    u = a/b*v0*t;
else u = a;
end
 
xkp = vk;
xrp = vr;
vkp = (-ck*(xk-xr)-k*(vk-vr))/(mk/4);
vrp = (ck*(xk-xr)-cr*(xr-u)+k*(ck-vr))/mr;
r = [xkp; xrp; vkp; vrp];

Ein ODE-Integrator wie ODE45 hat mit unstetigen Funktionen große Schwierigkeiten und die Schrittweitensteuerung bricht zusammen. Die Ergebnisse werden dadurch im besten Fall ungenau, im schlimmsten Fall aber instabil.

Für eine Unstetigkeit nutzt man besser die Event-Funktionen, siehe "help ode45".

Gruß, Jan
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.