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

Nullstellen finden

 

ouou
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 13:48     Titel: Nullstellen finden
  Antworten mit Zitat      
Hallo,

ich bin absoluter matlab Neuling und möchte den Umgang mit dem Programm für meine Masterarbeit in VWL lernen. Ich habe schon einfache Gleichungen programmiert und verschiedenen matlab docs gelesen, aber leider habe ich große Probleme mit dem Schema, dass mein Professor mir gegeben hat.

Es geht um das Programmieren eines ökonomischen Wachstumsmodells. Da ich davon leider noch sehr weit entfernt bin, hat er mir matlab anhand eines sehr einfachen Beispiels erklärt, dass in seiner Sprechstunde auch noch funktioniert hat - danach aber leider nicht mehr. Ich wäre sehr dankbar wenn sich jemand den Code angucken könnte und mir 1-2 Fragen dazu beantwortet.

Code:
close all; clear all; tic
clc
pathRoot = fileparts(which(mfilename));
addpath(genpath(pathRoot));
cputime = 0;

%% Step 1: Global Variables and Parameters
globalvars01;
parameters01;

%% Step 2: Rootfinding
% parameters for root-finding algorithm
options_fsolve = optimset('Display', 'iter', 'TolX', 1e-10, 'TolFun', 1e-10, 'MaxIter', 2500, 'MaxFunEvals', 2500, 'FunValCheck', 'on');

% compute steady state
x0 = [-5,5];
fss02 = @(x) steadystate02(x,[1,2]);
[xss,fv02,efss,opss,jacss] = fsolve(fss02,x0,options_fsolve);
[eqs] = fss02(xss); disp(xss);


Und das dazugehörige steadystate.m:

Code:

function [eqs] = steadystate(x,y)
eqs = ones(length(x),1);
eqs(1,1) = 3*x(1,1)^2 +2*y(1,1)-8;                    
eqs(2,1) = -12*x(1,2) + 6*y(1,2)-6;


Als Ergebnisse zeigt mir matlab an:

-1.4142 0.5000

Kann mir jemand erklären was genau ich da eigentlich berechnet habe? Wenn ich das Gleichungssystem von Hand löse kommen als Nullstellen 3 und -1 raus. Und was bedeuten die [1,2] im Abschnitt "compute steady state"?

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 22.07.2015, 15:03     Titel:
  Antworten mit Zitat      
Zitat:
Wenn ich das Gleichungssystem von Hand löse kommen als Nullstellen 3 und -1 raus.

warum?
3*3^2+2*1-8 ist doch nicht 0? wurzel 2 macht doch sinn.

Zitat:
Kann mir jemand erklären was genau ich da eigentlich berechnet habe?
die nullstelehn. sihe dazu auch die doc von fsolve.

Zitat:
Und was bedeuten die [1,2] im Abschnitt "compute steady state"

das sind die werte für y.

Zitat:
Code:
warum benutzt du das? hast du angst das du aus versehen sinnvolle hilfsmittel wie den debugger benutzen könntest? clear all ist nur hinderlich. es löscht alles. jede geladene funktion alles was zeit spaart und auch, was am schlimmsten ist, die debug marken.
Zitat:
Code:
das command fenster zu leeren halte ich auch für sinnfrei da du dann alte fehlermeldungen und werte nicht mehr einsehen kannst.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.07.2015, 15:12     Titel: Re: Nullstellen finden
  Antworten mit Zitat      
Hallo ouou,

Das ist ein Beispiel-Code von Deinem Professor?
Mh. Das ist ein schlechtes Beispiel um Matlab zu lernen.
Wenn der Code von Dir stammt: Da gibt es noch Tipps für Verbesserungen.

Du hast noch nicht erklärt, was an dem Beispiel "nicht funktioniert". Oder meinst Du, dass das Ergebnis von Deinen Erwartungen abweicht? Vielleicht sind Deine Erwartungen falsch? Was bekommst Du denn, wenn Du das Ergebnis in die Gleichung einsetzt?

Code:

Das ist Unfug. clear all löscht alles mögliche aus dem Speicher, z.B. auch die Breakpoints des Debuggers. Der Debugger ist aber eine extrem wichtige Hilfe beim Programmieren. Ihn zu behindern ist ein absolutes DON'T! für ernsthaftes Arbeiten mit Matlab.
Wozu werden hier alle Fenster geschlossen? Zieht's?
Diesen "brutalen Clear Header" findet man beängstigend oft in Code von Matlab-Anfängern. Wie bist Du auf diese Zeile gekommen?

Code:
pathRoot = fileparts(which(mfilename));
addpath(genpath(pathRoot));

Wenn dieses Script läuft, wird es auch im Pfad gefunden. Dann gibt es keinen Grund, den Ordner (noch mal) in den Pfad einzuhängen.

Code:

cputime ist ein nützlicher Matlab-Befehl. Ihn mit einer lokalen Variablen zu überschreiben ist nicht praktisch.

Zitat:
%% Step 1: Global Variables and Parameters
globalvars01;
parameters01;

Das sind keine "globalen" Variablen, also ist der Kommentar verwirrend. Es ist auch nicht klar, welche Werte aus diesen Scripts übernommen werden. Deshalb sind Funktionen mit wohl-definierten Inputs und Outputs besser.

Zitat:
Und was bedeuten die [1,2] im Abschnitt "compute steady state"?

Meinst Du das hier:
Code:
fss02 = @(x) steadystate02(x,[1,2]);

Das [1,2] hier wird in der Funktion steadystate02 als Input-Argument "y" eingesetzt.

Code:
function [eqs] = steadystate(x,y)
eqs = ones(length(x),1);
eqs(1,1) = 3*x(1,1)^2 +2*y(1,1)-8;                    
eqs(2,1) = -12*x(1,2) + 6*y(1,2)-6;


Zitat:
Als Ergebnisse zeigt mir matlab an:
-1.4142 0.5000


Dann setzen wir das doch mal in die Gleichung ein:
Code:
3*sqrt(2)^2 + 2*1 - 8 = 0
-12*0.5 + 6*2 - 6 = 0

Gut, Matlab's Ergebnis ist also eine Null-Stelle.

Zitat:
Kann mir jemand erklären was genau ich da eigentlich berechnet habe?

Eine Nullstelle dieser Gleichung?!

Zitat:
Wenn ich das Gleichungssystem von Hand löse kommen als Nullstellen 3 und -1 raus.

Code:
3*3^2 + 2*1 - 8 = 75
-12*(-1) + 6*2 - 6 = 18

Irgend etwas läuft bei Deinem Lösen von Hand schief.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ouou
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 16:02     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnellen und ausführlichen Antworten. Die Lösung war dann ja ziemlich einfach - ich habe einfach nicht gewusst, dass die 1,2 Werte für y sind. Ich dachte ich löse ein ganz anderen Gleichungssystem, tut mir Leid für die Mühen.

Das ist in der Tat ein Code von meinem Professor. Letzendlich sollen die eqs-Gleichungen durch Gleichungen aus meinem ökonomischen Modell ersetzt werden und die y-Variablen Parameter aus einem anderen m-file werden - dann macht das mit den vorgegeben y-Werten auch gleich viel mehr Sinn. Leider ist der Code den er mir gegeben hat nicht sehr intruktiv, und die docs von matlab nachzubauen ist irgendwie einfacher als so etwas vorgegebenes mit so vielen Abkürzungen zu verstehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
ouou
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2015, 18:44     Titel:
  Antworten mit Zitat      
Ich habe den Code den Jan kritisiert hat jetzt rausgenommen und versuche im Moment die verschiedenen Files zu verknüpfen. Es wäre super wenn ihr mir dabei nochmal helfen könntet! Leider muss ich weiterhin die verschiedenen Mfiles benutzen und verknüpfen und habe im Moment Probleme mit der Anzahl der Input Variablen. Aber der Reihe nach:

Mein Modell lässt sich im Steady State auf vier Gleichungen reduzieren, à la K=(alpha*beta)/r. Wenn ich dem obigen Schema folge, sollten das also meine neuen Funktionen für die eqs(1,1)..etc. sein. Also müsste ich die Gleichungen so umstellen, dass 0 rauskommt (also eqs(1,1) = K-(alpha*beta)/r) und eigentlich sollten dann die Steady State Werte rauskommen. Leider klappt das nicht einfach. Im Moment arbeite ich mit drei Files, die meinem Beispiel aus dem Anfang sehr ähnlich sind: Masterfile, Steadystatefunktion und Parameterfile.

Das Masterfile ist genau wie zuvor, allerdings ohne Werte für y. Die sollen aus dem dazugehörigen parameters01.m und der Funktion kommen kommen. In parameters01.m sind 15 verschiedenen Parametern numerische Werte zugeordnet (à la alph = 0.5). Die eigentliche Funktion, steadystate.m, soll diese Parameter aufgreifen und sie als Input Werte für die Funktion benutzen. Das genau scheint aber nicht zu funktionieren, matlab sagt mir als Fehlermeldung "Not enough input arguments".

Anbei der Code, ist leider sehr viel.

Masterfile
Code:
close all; tic
clc
%% Step 1: Parameters
parameters01;
%% Step 2: Rootfinding
% parameters for root-finding algorithm
options_fsolve = optimset('Display', 'iter', 'TolX', 1e-10, 'TolFun', 1e-10, 'MaxIter', 2500, 'MaxFunEvals', 2500, 'FunValCheck', 'on');
% compute steady state
xssin = [0.5,0.5,0.6,0.6];
fss = @(x) steadystate(x,y);
[xss,fvss,efss,opss,jacss] = fsolve(fss,xssin,options_fsolve);
[eqs] = fss(xss);


parameters01.m
Code:

alph = 0.36;                                              
bet_B = 0.8752;                                          
bet_H = 0.9485;                                          
delt = 0.0624;                                            
gamm = 0.1121;                                            
z_I = 1.0704;                                            
z_M = 1;                                                  
b = 0.955;                                                
et = 0.052;                                              
iot = 0.407;                                            
kapp = 0.474;                                            
L_barI = 0.66;                                          
L_barM = 1;                                              
s_M = 0.0081;                                            
s_I = 0.0081;                                            
 




steadystate.m
Code:
function [eqs] = steadystate(x,y)
parameters01;


%% assign variables
K_I = x(1,1);
K_M = x(2,1);
thet_I = x(3,1);
thet_M = x(4,1);

%% assign PARAMETERS
alph = y(1,1);
bet_B = y(2,1);
bet_H = y(3,1);
delt = y(4,1);
gamm = y(5,1);
z_I = y(6,1);
z_M = y(7,1);
b = y(8,1);
et = y(9,1);
iot = y(10,1);
kapp = y(11,1);
L_barI = y(12,1);
L_barM = y(13,1);
s_M = y(14,1);                                          
s_I = y(15,1);

%% assign helpful variabes
rh_H = (1/bet_B)-1;                                                      
rh_B = (1/bet_H)-1;                                        
lambd = (delt + rh_B + 1)/gamm;                            
r_M = delt + rh_H;                                        
r_I = r_M + (gamm * (rh_B-rh_H))/(1+delt+rh_B);
bet_FM = 1/(1+r_M);                                        
bet_FI = 1/(1+r_I);                                        
q_M = (1 + thet_M^iot)^(-1/iot);                          
q_I = (1 + thet_I^iot)^(-1/iot);                          
pi_M = (1 + thet_M^-iot)^(-1/iot);                        
pi_I = (1 + thet_I^-iot)^(-1/iot);                        
u_M=s_M/(s_M+pi_M);
u_I=s_I/(s_I+pi_I);                                        
L_M = u_M * L_barM;                                        
L_I = u_I * L_barI;                                        
Y_M = z_M * K_M^alph * L_M^(1-alph);                      
Y_I = z_I * K_I^alph * L_I^(1-alph);                      
w_M=(1-et)*b-et*(Y_M-r_M*(K_M/L_M)+kapp*thet_M);          
w_I=(1-et)*b-et*(Y_I-r_I*(K_I/L_I)+kapp*thet_I);          
KT = K_I + K_M;                                                            
Equi = K_I/lambd;                                          
Omeg = KT + (lambd-1)*Equi;                                

eqs = ones(length(x),1);                                    
eqs(1,1) = K_I-((alph*z_I)/r_I)^(alph-1)*L_I;
eqs(2,1) = K_M-((alph*z_M)/r_M)^(alph-1)*L_M;
eqs(3,1) = (kapp/q_I)*(1-bet_FI*(1-s_I))-bet_FI*(Y_I-r_I*(K_I/L_I)-w_I);  
eqs(4,1) = (kapp/q_M)*(1-bet_FM*(1-s_M))-bet_FM*(Y_M-r_M*(K_M/L_M)-w_M);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.08.2015, 21:50     Titel:
  Antworten mit Zitat      
Hallo,

ich bekomme ja die Fehlermeldung
Code:
Undefined function or variable 'y'.


Ist auch nicht weiter verwunderlich, weil für die Definition des Function Handles y verwendet wird. y wird aber nirgends definiert.

Wenn ich y mit Dummy-Werten belege, ist das nächste Problem, dass du als Startvektor einen Zeilenvektor angibst, in der Zielfunktion aber als Spaltenvektor verwendest. Startvektor transponieren, und es sollte klappen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2015, 19:45     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort, Harald. Im handle Tutorial sieht es so aus als würde es reichen y zu definieren indem ich es in die Funktion mit aufnehme, also:
Code:
fss = @(x,y) steadystate(x,y);

Den Vektor habe ich transponiert, also als
Code:
xssin = [0.5,0.5,0.6,0.6].'

geschrieben. Trotzdem bekomme ich als Fehlermeldung nicht genügend input arguments angezeigt...

Code:
Error using @(x,y)steadystate(x,y)
Not enough input arguments.

Error in lsqfcnchk/checkfun (line 131)
            f = userfcn(x,varargin{:});

Error in fsolve (line 219)
            fuser = feval(funfcn{3},x,varargin{:});

Error in masterfile20150720 (line 16)
[xss,fvss,efss,opss,jacss] = fsolve(fss,xssin,options_fsolve);

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
fss = @(x,y) steadystate(x,y);

Das ist nicht, wie du fss zuvor definiert hattest. Vor allem aber ist es so nicht sinnvoll: fsolve versucht die Funktion mit einem Argument aufzurufen, fss erfordert aber zwei.

Falls y auch minimiert werden soll, muss man x und y zu einem Vektor (z.B. u) zusammenfassen.
Falls y fest sein soll, muss man es (wie gesagt) vorab definieren.

Was mir gerade erst auffällt: wieso holst du die Parameter aus y heraus und führst ein Skript aus, in dem sie definiert werden? Ist so nicht wirklich sinnvoll.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2015, 20:51     Titel:
  Antworten mit Zitat      
Hi!

Also eigentlich soll y nicht minimiert werden, sondern nur die Werte aus dem parameters01.m rausgeholt werden, die bleiben auch so. Warum ich dafür zwei files verwenden muss, weiß ich nicht, aber mein Professor hat mir die Struktur mit einer extra Datei für die Parameter wärmstens ans Herz gelegt...

D.h. ich nehme y wieder raus aus dem handle - aber wie kriege ich die Werte dann in meine Funktion?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2015, 21:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Warum ich dafür zwei files verwenden muss, weiß ich nicht, aber mein Professor hat mir die Struktur mit einer extra Datei für die Parameter wärmstens ans Herz gelegt...

Meines Erachtens kein guter Rat. Aus der Hilfe von fsolve ist diese Seite verlinkt, in der verschiedene Möglichkeiten zum Umgang mit dieser Situation dargestellt werden. Die Variante mit zwei Dateien ist aus gutem Grund nicht dabei.
http://de.mathworks.com/help/optim/.....ing-extra-parameters.html

Stattdessen würde ich den Weg über anonymous functions wählen. y ist dann der Vektor mit den Parametern und muss vorab im "Masterfile" definiert werden.
Code:
y = zeros(16,1);
y(1) = ...;
y(2) = ...;


Dann kannst du den ursprünglichen Code verwenden, also
Code:
fss = @(x) steadystate(x,y);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2015, 21:39     Titel:
  Antworten mit Zitat      
Ok, dann werde ich mal versuchen Überzeugungsarbeit bei ihm zu leisten. Kann ich den y(1), y(2)..etc. Werten denn trotzdem Namen zuordnen, sodass ich die Gleichungen in der steadystate.m beibehalten kann?

Vielen Dank für die Antworten zu später Stunde!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.08.2015, 07:46     Titel:
  Antworten mit Zitat      
Hallo,

wie wäre es dann mit einer Struktur y?

Code:
y.alph = ...;
y.bet_B = ...;


und in der Funktion dann eine äquivalente Verwendung.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 09:22     Titel:
  Antworten mit Zitat      
Ich hab den Code jetzt angepasst und zum ersten Mal wird wirklich etwas berechnet, vielen, vielen Dank! Leider bekomme ich anstatt schöner Werte für K_M,K_L, thet_M und thet_L nur eine Fehlermeldung,dass fsolve das ganze nicht berechnen kann, wegen eines komplexen Wertes, aber das liegt wahrscheinlich an meinem Modell und nicht an der Programmierung, oder?

Code:

                                         Norm of      First-order   Trust-region
 Iteration  Func-count     f(x)          step         optimality    radius
     0          5         52.5559                            28               1
     1         10         5.95865              1           16.5               1
Error using lsqfcnchk/checkfun (line 135)
User function '@(x)steadystate03(x,y)' returned a complex value when evaluated;
 FSOLVE cannot continue.

Error in trustnleqn (line 199)
    F = feval(funfcn{3},reshape(xTrial,sizes.xRows,sizes.xCols),varargin{:});

Error in fsolve (line 368)
    [x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...

Error in masterfile20150730 (line 30)
[xss,fvss,efss,opss,jacss] = fsolve(fss,xssin,options_fsolve);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.08.2015, 09:24     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
das liegt wahrscheinlich an meinem Modell und nicht an der Programmierung

Vermutlich. Setze doch mal Haltepunkte um zu sehen, was da genau passiert.
Für weitere Unterstützung bitte den Code zur Verfügung stellen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 22.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2015, 09:36     Titel:
  Antworten mit Zitat      
Der Code den ich jetzt verwende ist:

masterfile.m
Code:

%% Step 1: Parameters

y.alph = 0.36;                                              %Production parameter%
y.bet_B = 0.8752;                                           %Time discount factor Bankers%;
y.bet_H = 0.9485;                                           %Time discount factor Investors%;
y.delt = 0.0624;                                            %Depreciation rate%;
y.gamm = 0.1121;                                            %Share of non-pledgable investment%;
y.z_I = 1.0704;                                             %Productivity in sector I%;
y.z_M = 1;                                                  %Productivity in sector M%;
y.b = 0.955;                                                %Unemployment benefits%;
y.et = 0.052;                                               %Worker's bargaining weight%;
y.iot = 0.407;                                              %Elasticity of the matching function%;
y.kapp = 0.474;                                             %Costs of vacancy posting%;
y.L_barI = 0.66;                                            %Potential Workforce I%
y.L_barM = 1;                                               %Potential Workforce M%
y.s_M = 0.0081;                                             %Seperation rate sector M%;
y.s_I = 0.0081;                                             %Seperation rate sector I%;


%% Step 2: Rootfinding
% parameters for root-finding algorithm
options_fsolve = optimset('Display', 'iter', 'TolX', 1e-10, 'TolFun', 1e-10, 'MaxIter', 2500, 'MaxFunEvals', 2500, 'FunValCheck', 'on');

% compute steady state
xssin = [1 1 0.6 0.6].';
fss = @(x) steadystate03(x,y);
[xss,fvss,efss,opss,jacss] = fsolve(fss,xssin,options_fsolve);
[eqs] = fss(xss);
 


steadystate03.m
Code:
function [eqs] = steadystate03(x,y)

%% assign variables

K_I = x(1,1);
K_M = x(2,1);
thet_I = x(3,1);
thet_M = x(4,1);

%% assign helpful variabes
rh_H = (1/y.bet_B)-1;                                                    
rh_B = (1/y.bet_H)-1;                                      
lambd = (y.delt + rh_B + 1)/y.gamm;                      
r_M = y.delt + rh_H;                                      
r_I = r_M + (y.gamm * (rh_B-rh_H))/(1+y.delt+rh_B);
bet_FM = 1/(1+r_M);                                        
bet_FI = 1/(1+r_I);                                        
q_M = (1 + thet_M^y.iot)^(-1/y.iot);                          
q_I = (1 + thet_I^y.iot)^(-1/y.iot);                          
pi_M = (1 + thet_M^-y.iot)^(-1/y.iot);                        
pi_I = (1 + thet_I^-y.iot)^(-1/y.iot);                        
u_M=y.s_M/(y.s_M+pi_M);                                        
u_I=y.s_I/(y.s_I+pi_I);                                        
L_M = u_M * y.L_barM;                                        
L_I = u_I * y.L_barI;                                        
Outp_M = y.z_M * K_M^y.alph * L_M^(1-y.alph);                      
Outp_I = y.z_I * K_I^y.alph * L_I^(1-y.alph);                      
w_M=(1-y.et)*y.b-y.et*(Outp_M-r_M*(K_M/L_M)+y.kapp*thet_M);          
w_I=(1-y.et)*y.b-y.et*(Outp_I-r_I*(K_I/L_I)+y.kapp*thet_I);          
KT = K_I + K_M;                                                            
Equi = K_I/lambd;                                          
Omeg = KT + (lambd-1)*Equi;                                

eqs = ones(length(x),1);                                    
eqs(1,1) = K_I-((y.alph*y.z_I)/r_I)^(y.alph-1)*L_I;
eqs(2,1) = K_M-((y.alph*y.z_M)/r_M)^(y.alph-1)*L_M;
eqs(3,1) = (y.kapp/q_I)*(1-bet_FI*(1-y.s_I))-bet_FI*(Outp_I-r_I*(K_I/L_I)-w_I);  
eqs(4,1) = (y.kapp/q_M)*(1-bet_FM*(1-y.s_M))-bet_FM*(Outp_M-r_M*(K_M/L_M)-w_M);


%z_M * (K_M/L_M)^(alph-1) - r_M = 0                                                      
%z_I * (K_I/L_I)^(alph-1) - r_I = 0                                                    
 


Haltepunkte setzte ich mit dbstop, oder? Was für if conditions machen denn da Sinn um rauszufinden wo der Fehler liegen könnte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.