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

exponentielle Regression mit mehreren Variablen

 

Wedge23
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2012, 14:48     Titel: exponentielle Regression mit mehreren Variablen
  Antworten mit Zitat      
hallo,

ich beschäftige mich erst seit kurzem mit matlab und hab gerade ein mittleres bis großes Problem an dem ich Verzweifele.

Ich will eine exponentielle Regression erstellen der Form:

y = B1 * (x/z)^B2

y und x sind Messwerte ( Spaltenvektoren ), z ist mehr oder weniger eine funkton die von x abhängt, und die mir auch als Spaltenvektoren vorliegen. Also im endeffekt will ich ein x-y Diagramm haben.

ich hab hier im forum diverse codes gefunden wie man exponentielle regressionen einfach erstellen kann
z.B:
Code:

h1=Spalt'; % Spaltabstand in m
h2=[ones(size(h1))];
h=[(h2);(log(h1));(d_hyd2)]'
a1=Queraustausch32000; % Durchfluss
a=log(a1)

% y=b(1)*h^b(2)
% log(y) = log(b(1))+b(2)*log(h)

b=(pinv(h)*a)'


a0=exp((b(1))+(b(2)).*log(h1)')

figure1 = figure(1);
plot(h1,a1,'*', h1,a0)
hold on


allerdings bekomm ich da meine abhängigkeit von z nicht mit rein.
Weis irgendwer wie ich das in den code, oder auch in nen total anderen code (solang er nur geht) reinbekomme?

Wedge
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.05.2012, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

du bist über die Pseudoinverse gegangen und hast das Problem zuvor linearisiert. Ich hatte deinen Code erst nicht verstanden...

Nun, wie sieht denn der Zusammenhang z=z(x) aus? z_i=z(x_i)?

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Wedge23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2012, 15:48     Titel:
  Antworten mit Zitat      
ich hab mehrer codes rumprobiert, das war nur gerade den wo ich noch zur hand hatte. Den code hab ich im forum hier gefunden und er hatte funktioniert war auch überrascht das das so geht.

Ich bin auch für jeglichen anderen code der geht froh, muss net der da oben überarbeitet werden.

Zu deiner frage:
ja z = z(x), also grob z = (x^2)*sin(pi/3)...... ( wobei x und z eben Spaltenvektoren sind )

gruß wedge
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.05.2012, 16:17     Titel:
  Antworten mit Zitat      
Im Grund musst du nur h=h(x)=(x/z(x)) anpassen. Ich würde allerdings eher p = polyfit(x_t,y_t,1) verwenden. Dazu verwendest du die Transformation log(y) = log(b(1))+b(2)*log(h) mit h=(x/z(x)). Denke an die Verwendung des Punktoperators.

x_t=log(h)=log((x/z(x)))
y_t=log(y)

dann folgt

p_1=log(b(1))
p_2=b(2)

Abschließend noch das ganze zurück transformieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wedge23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2012, 17:33     Titel:
  Antworten mit Zitat      
vielen dank erstmal für dene mühe.

irgendwie steh ich aber aufn schlauch, vielleicht weil ich mich scho den ganzen tag damit rumärgere........

Code:

  y = [0.16 ;   0.14 ;   0.104 ;   0.1 ;   0.0733 ;   0.0624 ;   0.0457 ;   0.0344 ;   0.0304 ;   0.0207 ;   0.0167];
  x = [0.006 ; 0.009 ; 0.012 ;  0.015 ;  0.019 ;  0.024 ;  0.029 ; 0.038 ; 0.050 ; 0.080 ; 0.100 ];
  z = [0.011592938 ;   0.012259495 ;    0.012928036 ;   0.013598562 ;   0.014495685 ;   0.01562205 ;   0.016753928 ;   0.018805202 ;   0.021568021 ;   0.028614005 ;    0.033421593];
 
 figure4 = figure(4);   % punktemenge für die ich eine regression habe will
 plot(x,y,'-ko','LineWidth',2) % plot der punktemenge für die ich eine regression habe will
 hold on

x_t=log((x./z));  
y_t=log(y);

p = polyfit(x_t,y_t,1);

y_neu = exp(log(p(1))+p(2)*log(x));

plot(x,y_neu)
 


so sieht mein code jetzt aus, aber die kurve die er mir ausgibt hat net wirklich was mit meiner punktemenge zu tun. Vielleicht hab ich mich vorhin aber auch ungeschickt ausgedrückt. z ist zwar von x abhängig wird aber seperat berechnet und liegt mir ebenfalls in konkrete werte vor. ich wollt damit nur andeuten, dass für jedes x ein andere z wert vorhanden ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 23.05.2012, 22:03     Titel:
  Antworten mit Zitat      
Ich denke, z(x) muss man schon explizit angeben. Außerdem hatten wir p_1 und p_2 vertauscht. Zudem stimmte deine Rücktransformation nicht.

Code:

clc
clear all

y = [0.16 ;   0.14 ;   0.104 ;   0.1 ;   0.0733 ;   0.0624 ;   0.0457 ;   0.0344 ;   0.0304 ;   0.0207 ;   0.0167];
x = [0.006 ; 0.009 ; 0.012 ;  0.015 ;  0.019 ;  0.024 ;  0.029 ; 0.038 ; 0.050 ; 0.080 ; 0.100 ];
%z = [0.011592938 ;   0.012259495 ;    0.012928036 ;   0.013598562 ;   0.014495685 ;   0.01562205 ;   0.016753928 ;   0.018805202 ;   0.021568021 ;   0.028614005 ;    0.033421593];
z=(x.^2)*sin(pi/3);
 

figure4 = figure(4);   % punktemenge für die ich eine regression habe will
plot(x,y,'o') % plot der punktemenge für die ich eine regression habe will

x_t=log(x./z);  
y_t=log(y);

p = polyfit(x_t,y_t,1);
%log(y) = log(b(1))+b(2)*log(x/z(x))
%Rücktransformation
%y = B1 * (x/z)^B2
% p_1=log(b(1))
% p_2=b(2)

x_reg=[min(x):0.001:max(x)];
y_reg = exp(p(2))*(1./((x_reg)*sin(pi/3))).^(p(1)) ;
hold on
plot(x_reg,y_reg)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Wedge23
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2012, 07:58     Titel:
  Antworten mit Zitat      
super,

jetzt läufts.
nochmals vielen dank deine mühe.
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.