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

schnittpunkt eines graphen und einer waagrechten zur x-achse

 

petra24
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2011, 18:21     Titel: schnittpunkt eines graphen und einer waagrechten zur x-achse
  Antworten mit Zitat      
Hallo zusammen,
ich versuche mich seit kurzen erst mit matlab und benötige eine hilfe und zwar will ich die typische kennlinie eines Photovoltaikmodules nachbilden. Das funktioniert auch- es entsteht ein parabelähnlicher Graph. Nun will ich eine waagrechte zur x-Achse eintragen und mir die Schnittpunkte anzeigen und ausgeben lassen, habs schon mit solve probiert, aber das will einfach nicht hinhauen....

wär sehr schön wenn ihr mir helfen könntet!
grüße
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.08.2011, 18:38     Titel:
  Antworten mit Zitat      
Poste doch bitte mal deinen Code, damit man sieht wo der Fehler liegt.

Hier noch ein kleines Bsp, dass die x Werte bei y=2 berechnet.

Code:
solve('y=3*x^2','y=2')
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2011, 20:34     Titel:
  Antworten mit Zitat      
so jetzt mal der betreffende abschnitt meines quellcodes:


Va stellt die x-Koordinate und Pa die y-koordinate.

Code:

Ia=0:0.001:Isc;
Va=Vt*(log((Iph-Ia+Io)/Io))-(Ia*Rpv);

%MPP-Punkt zeichnen:
Pa=Ia.*Va; %Leistung ausgeben lassen

%Anzeigen der Punkte zur Leistungsbegrenzung
[Vmpp,Pmpp] =solve('Ia.*Va=Pa','Pa=145')
Vmpp1=Vmpp(1)
Vmpp2=Vmpp(2)
Pmpp1=Pmpp(1)
Pmpp2=Pmpp(2)


schonmal danke für die hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.08.2011, 06:50     Titel:
  Antworten mit Zitat      
Wie in deinem Fall die Lösung über solve() geht, weiß ich auch nicht. Du darfst hier auf jeden Fall kein .* verwenden. Es werden ja keine Daten eingesetzt, sondern du musst die Gleichung angeben.

Hier noch zwei andere Möglichkeiten

Code:

x=-10:0.1:10;
y=x.^2+2; % Normalparabel um 2 verschoben
% Lösung über solver
[x_solve y_solve] = solve('y=x^2+2','y=10');
% x Werte an der Stelle y = 10 interpolieren
idx=find(x==0);
% positiver x-Bereich
x_interp(1) = interp1(y(idx:end),x(idx:end),10);
% negativer x-Bereich
x_interp(2) = interp1(y(1:idx),x(1:idx),10);
% x aus Datensatz finden
idx(1)=find(y<=10,1,'first');
x_find(1) = x(idx(1));
idx(2)=find(y<=10,1,'last');
x_find(2) = x(idx(2));
plot(x,y);
hold on;
plot(x_interp(2),10,'r*');
plot(x_interp(1),10,'r*');
plot(double(x_solve(2)),10,'g.');
plot(double(x_solve(1)),10,'g.');
plot(x_find(2),y(idx(2)),'k.');
plot(x_find(1),y(idx(1)),'k.');
grid on;
 


Interpolieren ist für dieses Bsp. auf 3 Stellen hinter dem Komma genau. Bei find hängt die Genauigkeit von deiner Schrittweite (Anzahl Messwerte) ab.
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 12:51     Titel:
  Antworten mit Zitat      
habe alle 3 methoden versucht, aber kein will so recht funktionieren:

mit dem befehl find werden mir die nullstellen der gleichung angezeigt....

und wenn ich das ganze durch interpolation mache, bekommen ich folgende fehlermeldung:
Code:
Error using ==> interp1 at 185
There should be at least two data points.

Error in ==> modulnewp at 49
Va_interp(1) = interp1(Pa(idx:end),Va(idx:end),150)
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.08.2011, 13:00     Titel:
  Antworten mit Zitat      
Bitte auch den Code posten...

Welchen Bereich sprichst du mit idx:end an?

Ich kenne das Aussehen der Parabel nicht, da ja einige Größen der Gleichung fehlen. Aber was spricht denn sonst gegen...

Code:
x_interp = interp1(Pa,Va,150)


Ich habe die Unterteilung in positiven und negativen Bereich nur gemacht, da die Werte in Va für interp1() aufsteigend sein müssen. Evtl. ist das bei dir nicht nötig, wenn die Kurve nur im I.Quadranten liegt. Sonst poste doch mal bitte die fehlenden Größen aus der Gleichung oder ein Screen des Graphen.
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 13:54     Titel:
  Antworten mit Zitat      
ja stmmt die einteilung ist bei mir nicht nötig... hab jetzt auch mal ein bild angehängt.

habs jetzt mit der einfachen von dir vorgeschlagenen eingabe probiert, aber leider wird mir da dann nur ein punkt angezeigt. wie kann ich mir den 2. noch anzeigen lassen?

Va_Pa.png
 Beschreibung:

Download
 Dateiname:  Va_Pa.png
 Dateigröße:  110.35 KB
 Heruntergeladen:  1155 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.08.2011, 14:09     Titel:
  Antworten mit Zitat      
Mit find sollten doch aber beide Punkte in etwa gefunden werden:

Code:

% x aus Datensatz finden
 idx(1) = find(y>=150,1,'first');
 x_find(1) = x(idx(1));
 Pa_x(1) = Pa(idx(1));
 idx(2) = find(y(idx(1):end)<=150,1,'first');
 x_find(2) = x(idx(1)+idx(2)-1);
 Pa_x(2) = Pa(idx(1)+idx(2)-1);
 


Bei interp1 würde ich sonst mal probieren:

Code:

[value,idx]=max(Pa);
% x-Bereich: max(Pa)...end
x_interp(1) = interp1(Pa(idx:end),Va(idx:end),150);
% x-Bereich: 0...max(Pa)
x_interp(2) = interp1(Pa(1:idx),Va(1:idx),150);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 20:23     Titel:
  Antworten mit Zitat      
find hat jetzt gut funktionier...

vielen dank
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.08.2011, 20:26     Titel:
  Antworten mit Zitat      
Und was ist mit interp? Habe es ja nicht getestet, da ich die Daten nicht habe Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
petra24
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 20:56     Titel:
  Antworten mit Zitat      
funktioniert auch... cool! Very Happy
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 - 2024 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.