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

Fehler in Schleife - aber wo?

 

Felofex
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 17.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2013, 13:14     Titel: Fehler in Schleife - aber wo?
  Antworten mit Zitat      
Hallo zusammen,
ich habe eine Schleife geschrieben, mit der ich für verschiedene Input-Werte die jeweiligen Output-Werte berechnen möchte.
Allerdings erhalte ich für alle Inputs immer die gleichen Output-Werte - und ich bin inzwischen so betriebsblind (und leider immer noch so unvertraut mit Matlab), dass ich nicht erkenne, woran es liegt bzw. es vermutlich viel zu umständlich programmiert habe.

Ich wäre Euch allen sehr dankbar, wenn ihr da mal einen Blick draufwerfen könntet.

Code:

%Grundlagen legen
syms D E H q_1 q_2 p_1 p_2

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;
a_max=100;
row_num=150


D=(gamma*c_1*(y-S)+(a^2)/4)

E=((1-gamma)*c_2*(y-S)+(a^2)/4)

Wurzel_D=D^(0.5)

Wurzel_E=E^(0.5)

H=4*c_1*c_2*Wurzel_D*Wurzel_E

q_1=(2*Wurzel_D-a)/(2*c_1)
q_2=(2*Wurzel_E-a)/(2*c_2)
p_1=(2*Wurzel_D+a)/(2)
p_2=(2*Wurzel_E+a)/(2)

%*****************************Vorbereitende Funktionen

%Nutzen des Konsumenten%

U=gamma*log(q_1)+(1-gamma)*log(q_2)

    del_U_del_a=-0.5*(sqrt(D)+sqrt(E))

    del_U_del_a_2=0.125*a*(gamma/((Wurzel_D)^3)+(1-gamma)/((Wurzel_E)^3))

%Gewinn des Produzenten%

Pi_1=p_1*q_1+p_2*q_2-c_1*((q_1)^2)/2-c_2*((q_2)^2)/2-a*(q_1+q_2)

    del_Pi_1_del_a=-a^2*(c_1*Wurzel_D+c_2*Wurzel_E)/(8*c_1*c_2*Wurzel_D*Wurzel_E)-(Wurzel_D*c_2+Wurzel_E*c_1)/(2*c_1*c_2)+a*0.5*(c_1+c_2)/(c_1*c_2)
   
    del_Pi_1_del_a_2=0.5*(c_1+c_2)/(c_1*c_2)-1.5*a*(Wurzel_E*c_2+Wurzel_D*c_1)/(H)+a^3/2*(Wurzel_E^3*c_2+Wurzel_D^3*c_1)/(4*D*E*H)

%Gewinn des Netzbetreibers%

Pi_0=(a-c_0)*(q_1+q_2)-K+S

    del_Pi_0_del_a=(c_2*Wurzel_D+c_1*Wurzel_E)/(c_1*c_2)-a*0.5*(c_1+c_2)/(c_1*c_2)+(a-c_0)*(a*(c_2*Wurzel_E+c_1*Wurzel_D)/(H)-0.5*(c_1+c_2)/(c_1*c_2))

    del_Pi_0_del_a_2= 2*a*(c_2*Wurzel_E+c_1*Wurzel_D)/(H)-(c_1+c_2)/(c_1*c_2)+(a-c_0)*((c_2*Wurzel_E+c_1*Wurzel_D)/(H)-a^2*(c_2*Wurzel_E^3+c_1*Wurzel_D^3)/(4*D*E*H))


W=U+Pi_1+Pi_0

    del_W_del_a=del_U_del_a+del_Pi_1_del_a+del_Pi_0_del_a
   
    del_W_del_a_2=del_U_del_a_2+del_Pi_1_del_a_2+del_Pi_0_del_a_2

%Joint Profit
Pi_01=Pi_0+Pi_1
   
%Optimales a aus Ableitung des gemeinschaftlichen Gewinns von Netzbetreiber und Produzent%

%del_Pi_01_del_a=(Wurzel_D*c_2+Wurzel_E*c_1)/(2*c_1*c_2)+a^2*(Wurzel_E*c_2+Wurzel_D*c_1)/(2*H)-a*c_0*(Wurzel_E*c_2+Wurzel_D*c_1)/(H)-(a-c_0)*0.5*(c_1+c_2)/(c_1*c_2)
del_Pi_01_del_a=del_Pi_0_del_a+del_Pi_1_del_a

%Zweite Ableitung des gemeinschaftlichen Gewinns Pi_01%

%del_Pi_01_del_a_2=(1.5*a-c_0)*(Wurzel_E*c_2+Wurzel_D*c_1)/(H)-a^2*(a/2-c_0)*(Wurzel_D^3*c_1+Wurzel_E^3*c_2)/(H*4*D*E)
del_Pi_01_del_a_2=del_Pi_0_del_a_2+del_Pi_1_del_a_2
%*****************************Optimierungsproblem

%Der Regulierer maximiert die Wohlfahrt über den Access Price a
a_optimal_W=double(solve(del_W_del_a,'a'))

%a=5.8171709241919807543858176827569

%Ist es auch wirklich ein Maximum?

a=a_optimal_W
Wert_bei_a_del_W_del_a_2=eval(del_W_del_a_2)
%Ja

%*****************************Grafische Abbildung

%Funktionen zeichnen
    a_werte_t=linspace(0,a_max,row_num);
    a_werte=transpose(a_werte_t);

    a=a_werte;
   
    U_Werte=eval(U)
    Pi_1_Werte=eval(Pi_1);
    Pi_0_Werte=eval(Pi_0);
    Pi_01_Werte=eval(Pi_01)

    W_Werte=eval(W)
   
    Total_Welfare_Basis=[U_Werte,Pi_1_Werte,Pi_0_Werte,W_Werte]
   
   
%****************************************************Variierte Eingabewerte

   
c_0_Variation=10*[0;0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9;1]

for i=1:11;
    c_0=c_0_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_c_0(i,1)=double(solve(del_W_del_a_Var,'a'))
end;    

c_0=0.1;

c_1_Variation=[0;0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9;1]

for i=1:11;
    c_1=c_1_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_c_1(i,1)=double(solve(del_W_del_a_Var,'a'))
end;

c_1 = .057;

c_2_Variation=[0;0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9;1]

for i=1:11;
    c_2=c_2_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_c_2(i,1)=double(solve(del_W_del_a_Var,'a'))
end;  

c_2 = .124;

gamma_Variation=[0;0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9;1]

for i=1:11;
    gamma=gamma_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_gamma(i,1)=double(solve(del_W_del_a_Var,'a'))
end;


gamma = .5;

K_Variation=[0;25;50;75;100;125;150;175;200;250;300]

for i=1:11;
    K=K_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_K(i,1)=double(solve(del_W_del_a_Var,'a'))
end;

K = 150;

S_Variation=[0;20;40;60;80;100;120;140;160;180;200]

for i=1:11;
    S=S_Variation(i,1)
    del_W_del_a_Var=eval(del_W_del_a)
    a_optimal_W_K(i,1)=double(solve(del_W_del_a_Var,'a'))
end;

S=0;

%****************************************************Variierte Ausgabewerte
   
Total_Variation=[c_0_Variation,c_1_Variation,c_2_Variation,gamma_Variation,K_Variation,S_Variation] %Matrix mit 60 Spalten und 11 Zeilen
   
    a_werte_t=linspace(0,a_max,row_num);
    a_werte=transpose(a_werte_t);

    a=a_werte;
   
 %Erstelle Leer-Matrizen

    U_Werte_c0=zeros(150,11)
    Pi_1_Werte_c0=zeros(150,11)
    Pi_0_Werte_c0=zeros(150,11)
    Pi_01_Werte_c0=zeros(150,11)
    W_Werte_c0=zeros(150,11)
   
    U_Werte_c1=zeros(150,11)
    Pi_1_Werte_c1=zeros(150,11)
    Pi_0_Werte_c1=zeros(150,11)
    Pi_01_Werte_c1=zeros(150,11)
    W_Werte_c1=zeros(150,11)
   
    U_Werte_c2=zeros(150,11)
    Pi_1_Werte_c2=zeros(150,11)
    Pi_0_Werte_c2=zeros(150,11)
    Pi_01_Werte_c2=zeros(150,11)
    W_Werte_c2=zeros(150,11)
   
    U_Werte_gamma=zeros(150,11)
    Pi_1_Werte_gamma=zeros(150,11)
    Pi_0_Werte_gamma=zeros(150,11)
    Pi_01_Werte_gamma=zeros(150,11)
    W_Werte_gamma=zeros(150,11)
   
    U_Werte_K=zeros(150,11)
    Pi_1_Werte_K=zeros(150,11)
    Pi_0_Werte_K=zeros(150,11)
    Pi_01_Werte_K=zeros(150,11)
    W_Werte_K=zeros(150,11)
   
    U_Werte_S=zeros(150,11)
    Pi_1_Werte_S=zeros(150,11)
    Pi_0_Werte_S=zeros(150,11)
    Pi_01_Werte_S=zeros(150,11)
    W_Werte_S=zeros(150,11)
   
c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;
       
for k=1:11
    c_0=c_0_Variation(k,1)
            U_Werte_c0(:,k)=double(eval(U))
            Pi_1_Werte_c0(:,k)=double(eval(Pi_1));
            Pi_0_Werte_c0(:,k)=double(eval(Pi_0));
            Pi_01_Werte_c0(:,k)=double(eval(Pi_01))

            W_Werte_c0(:,k)=double(eval(W))
 
 end;%Schließt  k-Schleife
Total_Welfare_c0=[U_Werte_c0,Pi_1_Werte_c0,Pi_0_Werte_c0,W_Werte_c0] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;

for k=1:11
    c_1=c_1_Variation(k,1)
         for i=1:150
            a=a_werte(i,1)
            U_Werte_c1(i,k)=eval(U)
            Pi_1_Werte_c1(i,k)=eval(Pi_1);
            Pi_0_Werte_c1(i,k)=eval(Pi_0);
            Pi_01_Werte_c1(i,k)=eval(Pi_01)

            W_Werte_c1(i,k)=eval(W)
  end; %Schließt die i-Schleife
 end;%Schließt  k-Schleife
Total_Welfare_c1=[U_Werte_c1,Pi_1_Werte_c1,Pi_0_Werte_c1,W_Werte_c1] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;

for k=1:11
    c_2=c_2_Variation(k,1)
         for i=1:150
            a=a_werte(i,1)
            U_Werte_c2(i,k)=eval(U)
            Pi_1_Werte_c2(i,k)=eval(Pi_1);
            Pi_0_Werte_c2(i,k)=eval(Pi_0);
            Pi_01_Werte_c2(i,k)=eval(Pi_01)

            W_Werte_c2(i,k)=eval(W)
  end; %Schließt die i-Schleife
 end;%Schließt  k-Schleife
Total_Welfare_c2=[U_Werte_c2,Pi_1_Werte_c2,Pi_0_Werte_c2,W_Werte_c2] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;

for k=1:11
    gamma=gamma_Variation(k,1)
         for i=1:150
            a=a_werte(i,1)
            U_Werte_gamma(i,k)=eval(U)
            Pi_1_Werte_gamma(i,k)=eval(Pi_1);
            Pi_0_Werte_gamma(i,k)=eval(Pi_0);
            Pi_01_Werte_gamma(i,k)=eval(Pi_01)

            W_Werte_gamma(i,k)=eval(W)
  end; %Schließt die i-Schleife
 end;%Schließt  k-Schleife
Total_Welfare_gamma=[U_Werte_gamma,Pi_1_Werte_gamma,Pi_0_Werte_gamma,W_Werte_gamma] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;

for k=1:11
    K=K_Variation(k,1)
         for i=1:150
            a=a_werte(i,1)
            U_Werte_K(i,k)=eval(U)
            Pi_1_Werte_K(i,k)=eval(Pi_1);
            Pi_0_Werte_K(i,k)=eval(Pi_0);
            Pi_01_Werte_K(i,k)=eval(Pi_01)

            W_Werte_K(i,k)=eval(W)
  end; %Schließt die i-Schleife
 end;%Schließt  k-Schleife
Total_Welfare_K=[U_Werte_K,Pi_1_Werte_K,Pi_0_Werte_K,W_Werte_K] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;

for k=1:11
    S=S_Variation(k,1)
         for i=1:150
            a=a_werte(i,1)
            U_Werte_S(i,k)=eval(U)
            Pi_1_Werte_S(i,k)=eval(Pi_1);
            Pi_0_Werte_S(i,k)=eval(Pi_0);
            Pi_01_Werte_S(i,k)=eval(Pi_01)

            W_Werte_S(i,k)=eval(W)
  end; %Schließt die i-Schleife
 end;%Schließt  k-Schleife
Total_Welfare_S=[U_Werte_S,Pi_1_Werte_S,Pi_0_Werte_S,W_Werte_S] %Matrix mit 150 Zeilen und 40 Spalten

c_1 = .057;
c_2 = .124;
c_0 = .01;
gamma = .5;
K = 150;
y = 200;
S=0;
Private Nachricht senden Benutzer-Profile anzeigen


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 10.01.2013, 18:59     Titel:
  Antworten mit Zitat      
Beachtlich was du das tust...mit dem ganzen Code der im Command Window vorbei fliegt.
Vielleicht solltest du über all ein ; hinter setzen, weil so bringt dir der Output eh absolut gar nichts! Lieber dann in ruhe im Array Editor angucken.

Aber endlich mal wer, der ungeniert seinen ganzen Code pastet Smile

Jedoch ist es mir ein Rätsel, wie der bei dir laufen soll....
a ist nämlich direkt zu beginn nicht definiert. Ich hab einfach mal a=1; angenommen.
Dann benutzt du eval durchgängig falsch, dass das Script deswegen auch nicht läuft. Richtig ist W_Werte_S(i,k)=eval('W'), nicht W_Werte_S(i,k)=eval(W)

Zu deinem eigentlich Problem kann ich nichts beitragen. Vlt wenn du noch mal eine wirklich lauffähige Version deines Scripts postest.
Zudem wirkt es so auch wie eine Endlosschleife...
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
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.