habe ein problem mit der logischen Indizierung. ich möchte dern zugehörigen x-wert für y=30 bestimmen.
Code:
% Das ist mein bisheriges Programm:
x=0:10; a=-1; b=12; c=5;
y=-x.^2+12.*x+5;
plot(x,y) hold on
grid on
xlabel('x-achse') ylabel('y-achse') title(['Analyse der Funktion y=',num2str(a),'x^2+',num2str(b),'x+',num2str(c)])
%b) [Wert,indWert]=max(y);
[Wert2,indWert2] %y=30?
is wahrscheinlich relativ einfach zu lösen, vllt kenn ich auch einfach nicht die richtige schreibweise, aber sitzt jetz scho relativ lang an dem Problem und komm einfach nich dahinter. Vielen Dank im Vorraus
das Problem ist, dass du diskrete Werte hast und die Möglichkeit besteht, dass die Werte 30 über- oder unterschreiten, ohne dass 30 genau angenommen wird. Ich würde das so versuchen:
ich suche da im Grunde nach einem Vorzeichenwechsel, d.h. von einer Stelle, wo von unter 30 auf über 30 gesprungen wird. Einen Vorzeichenwechsel hat man entweder oder man hat ihn nicht.
Du kannst natürlich auch nach Werten suchen, die ungefähr 30 sind.
eine Variante von vielen, aber meines Erachtens nicht die beste:
- es steckt die Annahme darin, dass die 30 von unten durchquert wird.
- es wird nur die erste Schnittstelle gefunden.
- du bekommst so den Index der Stelle, aber nicht den x-Wert an sich.
Hast du meine Vorschläge denn mal versucht? Sie lösen das geschilderte Problem nämlich mindestens genauso gut, und meines Erachtens besser.
Grüße,
Harald
Steckerlfisch
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 06.12.2012, 22:38
Titel: Antwort
Hallo Harald,
deine Aspekte die du an dieser Lösung als störend empfindest tragen zu der geforderten Lösung bei
hier mal das komplette programm das ich geschrieben hab, vllt erkennst du dann den zusammenhang besser
aber danke für deine Hilfe!
Code:
% a)
x=(-10:0.1:10);
a=input('geben sie die Variable a ein');
if a==0; disp('keine Parabel!');
end disp([
'Sie haben für a ',num2str(a),' eingegeben']);
b=input('geben sie die Variable b ein');
disp([
'Sie haben für b ',num2str(b),' eingegeben']);
c=input('geben Sie die Variable c ein');
disp([
'Sie haben für c ',num2str(c),' eingegeben']);
%b) if a<0;
[y_Wert,x_Wert]=max(y);
plot(x(x_Wert),max(y),'rx','markersize',20,'linewidth',3);
disp(['das Maximum ist bei: ','(',num2str(x(x_Wert)),';',num2str(max(y)),')']);
elseif a>0; disp('min') [y_Wert,x_Wert]=min(y);
plot(x(x_Wert),min(y),'rx','markersize',20,'linewidth',3);
disp(['das Minimum ist bei: ','(',num2str(x(x_Wert)),';',num2str(min(y)),')']) end end
%c) if a>0;
ind1=find(y<=30,1,'first');
plot(x(ind1),y(ind1),'y*','markersize',20,'linewidth',2);
elseif a<0
ind1=find(y>=30,1,'first');
plot(x(ind1),y(ind1),'y*','markersize',20,'linewidth',2);
end end disp(['erster Wert für y=30 ist: ',num2str(x(ind1))]);
%d) if a>0;
ind2=find(y<=35,1,'last');
plot(x(ind2),y(ind2),'go','markersize',10,'linewidth',3);
elseif a<0;
ind2=find(y>=35,1,'last');
plot(x(ind2),y(ind2),'go','markersize',10,'linewidth',3);
end end disp(['letzter Wert für y=35 ist: ',num2str(x(ind2))]);
if a<0 legend('graph der Funktion','location','southeast'...
,'Maximum'...
,'erster x-Wert bei y=30'...
,'letzter x-Wert bei y=35');
elseif a>0 legend('graph der Funktion','location','southeast'...
,'Minimum'...
,'erster x-Wert bei y=30'...
,'letzter x-Wert bei y=35');
end end
deine Aspekte die du an dieser Lösung als störend empfindest tragen zu der geforderten Lösung bei
Dann hattest du ein anderes Problem als das, das du geschildert hast.
So oder so: wenn ich das richtig verstehe, ist dein Problem gelöst? Ich werde nun nicht 70 Zeilen Code durchgehen nur um zu sehen, was du mir sagen willst.
Grüße,
Harald
Einstellungen und Berechtigungen
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.