Verfasst am: 26.01.2010, 17:57
Titel: Problem mit Matrizenlänge
hallo
in dem Skript unten gibt lsode y(:,1) und y(.,2) beide mit der Länge 1000 aus.
Wenn ich jetzt aber bei %Reichweite
R=(((l1.*y(:,2)).^2) .*sin(2.*y(:,1))./ g);
setzte, hat R nur noch die Länge 1 obwol trotzdem 1000 Zeilen drinnstehen
weiß jemand woran das liegt?
Gruß,
Paul
Code:
%Skript zur Berechnung eines Schaukel-Trebuchets
%
%es wird das emd-package benötigt, welches die funktion extr.m enthält
%http://perso.ens-lyon.fr/patrick.flandrin/emd.html
%Bestimmung des Maximumms von R:
[indmin, indmax, indzer] = extr(R);
%Text Ausgaben:
printf("\nMaximale Reichweite: %gm\n", (R(:,1)(indmax(1))))
printf("bei einem Abschusswinkel von %g Grad\n", ((y(:,1)(indmax(1)))/pi *180))
printf("mit einer Abschussgeschwindigkeit von %gm/s\n", l1*(y(:,2)(indmax(1))))
printf("mit einem Reichweiten-Wirkungsgrad von %g%%\n\n\n", (Reff(:,1)(indmax(1)))*100)
subplot(2,2,2);
global l1
plot(t,l1*y(:,2),"r-");
title("Ausloesegeschwindigkeit va gegen Ausloesezeitpunkt") xlabel("t in s");
ylabel("va in m/s");
grid on
Es scheint irgendwie an der extr.m zu liegen, denn wenn ich diese zeile lösche, funktioniert es.
Irgendwie erwartet extr.m einen Vektor mit 3 Spalten, warum auch immer.
wenn ich zum Beispiel anstatt
schreibe, funktioniert es auch, bloß wird dann eben nur das Minimum bestimmt.
Es wäre echt nett wenn mir noch jemand helfen würde.
Gruß,
Paul
das ist die extr.m, die kommt mit dem emd-package.
Code:
%EXTR finds extrema and zero-crossings
%
% [indmin, indmax, indzer] = EXTR(x,t)
%
% inputs : - x : analyzed signal % - t (optional) : sampling times, default 1:length(x)
%
% outputs : - indmin = indices of minima % - indmax = indices of maxima % - indzer = indices of zero-crossings
%
% See also % boundary_conditions_emd
%
% G. Rilling, last modification: July 2002 % gabriel.rilling@ens-lyon.fr function[indmin, indmax, indzer] = extr(x,t);
bad = (d==0);
dd = diff([0 bad 0]);
debs = find(dd == 1);
fins = find(dd == -1);
if debs(1) == 1 iflength(debs) > 1
debs = debs(2:end);
fins = fins(2:end);
else
debs = [];
fins = [];
end end iflength(debs) > 0 if fins(end) == m
iflength(debs) > 1
debs = debs(1:(end-1));
fins = fins(1:(end-1));
else
debs = [];
fins = [];
end end end
lc = length(debs);
if lc > 0 for k = 1:lc
if d(debs(k)-1) > 0 if d(fins(k)) < 0
imax = [imax round((fins(k)+debs(k))/2)];
end else if d(fins(k)) > 0
imin = [imin round((fins(k)+debs(k))/2)];
end end end end
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
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.