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

logische indizierung, y-wert Berechnung einer Funktion

 

Steckerlfisch

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 18:47     Titel: logische indizierung, y-wert Berechnung einer Funktion
  Antworten mit Zitat      
hallo Smile

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 Wink


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.11.2012, 20:56     Titel:
  Antworten mit Zitat      
Hallo,

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:

Code:
x30 = x(diff(sign(y-30)) ~= 0)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 23.11.2012, 14:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

gute Idee. Mich würde interessieren wie "genau" der Wert ~=0 sein muss, damit die Bedigung noch erfüllt ist. Kann man das beeinflussen?

Grüße,

Mad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.11.2012, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

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.
Code:
x30 = x(abs(y-30) < tol)

Darin ist tol eine Toleranz, die die zulässige Abweichung zu 30 darstellt.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2012, 17:19     Titel: Lösung des problems
  Antworten mit Zitat      
ok, hab jetzt meinen Dozenten gefragt, der macht das mit der find funktion.

also
Code:

x-wert=find(y>=30,1,'first')
 


war einfacher als gedacht, wie ichs mir von anfang an schon gemeint hab^^ aber trotzdem danke für die hilfe Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2012, 19:02     Titel:
  Antworten mit Zitat      
Hallo,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Steckerlfisch

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2012, 22:38     Titel: Antwort
  Antworten mit Zitat      
Hallo Harald,

deine Aspekte die du an dieser Lösung als störend empfindest tragen zu der geforderten Lösung bei Wink
hier mal das komplette programm das ich geschrieben hab, vllt erkennst du dann den zusammenhang besser Smile
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']);

y=a*x.^2+b*x+c;
plot(x,y);
grid on
hold on
xlabel('x-Achse');
ylabel('y-Achse');
title(['Analyse der Funktion y=',num2str(a),'*x^2','+',num2str(b),'x','+',num2str(c)]);



%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)),')']);
   
else if 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);
else if 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);
else if 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');
else if a>0
        legend('graph der Funktion','location','southeast'...
            ,'Minimum'...
            ,'erster x-Wert bei y=30'...
            ,'letzter x-Wert bei y=35');
    end
end

       
hold off;
 
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
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
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.