Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:


Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktion Value function

 

faronkis
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.11.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2021, 12:22     Titel: Funktion Value function
  Antworten mit Zitat      
Code:

function [val] = valfunc(k)
% The value function file takes account of the expectations
global v0 beta alpha kmat k0 P a0 j

g = interp1(kmat,v0,k,'linear'); %interpolated value function
%smooths out previous value function
c = a0*k0.^alpha-k;

% consumption
if c<=0
    val =-9999999999999999-900*abs(c); % keeps it from going negative
   
else
    val = log(a0*k0.^alpha-k)+beta*(g*P(j,:)');
end
val =-val; % make it negative since we're maximizing and code is to minimize.
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

was ist denn deine Frage zu dem Code?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
faronkis
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.11.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2021, 13:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

oh, sorry. frage vergessen. Und zwar bekomme ich immer die gleiche Fehlermeldeung und weiß nicht wie ich diese beheben kann.

Code:
>> valfunc(k)
Unrecognized function or variable 'k'.
>>

Danke im Voraus

Viele Grüße

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

Forum-Meister


Beiträge: 22.905
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2021, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

du musst einen konkreten Wert für k angeben, z.B.
Code:
valfunc(5)

oder
Code:
k = 5;
valfunc(k)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
faronkis
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 28.11.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2021, 15:21     Titel:
  Antworten mit Zitat      
Danke für den Tipp. Das habe ich jetzt gemacht und leider geht es immer noch nicht. Die function file
Code:
function [val] = valfunc(k)
% The value function file takes account of the expectations
global v0 beta alpha kmat k0 P a0 j

g = interp1(kmat,v0,k,'linear'); %interpolated value function
%smooths out previous value function
c = a0*k0.^alpha-k;

% consumption
if c<=0
    val =-9999999999999999-900*abs(c); % keeps it from going negative
else
    val = log(c)+beta*(g*P(j,:)');
end
val =-val; % make it negative since we're maximizing and code is to minimize.
end
benötige ich für folgende Simulation

Code:
%MARKOV PROCESSES &
%Dynamic Programming

%Problem 2 part 2

%numerical solution

clear all;
close all;
tic
%We use value function Iteration to solve a neoclassical growth model with
%no uncertainty

global v0 beta alpha kmat k0
plott=0; % set to 1 to see plots

% set parameters
alpha = 0.33; % capital's share
beta = 0.95;
k=5;

tol = 0.01;
maxits = 1000;
dif = tol+1000;
its = 0;
kgrid = 99; % grid points + 1
kstar = (alpha/(1/beta)).^(1/(1-alpha)); % steady state k
cstar = kstar.^(alpha)-kstar;
istar =kstar;
ystar = kstar.^(alpha);
kmin = 0.25*kstar;
kmax = 1.75*kstar;
grid = (kmax-kmin)/kgrid;
kmat = kmin:grid:kmax;
kmat = kmat';
[N,n] = size(kmat);
polfun = zeros(kgrid+1,3);
v0 = zeros(N,1);
dif = 10;
its = 0;

At = [0.9 1 1.1]';
P =[0.6 0.1 0.3 ;0.05 0.9 0.05;0.05 0.35 0.6];

while dif>tol & its<maxits
    for j = 1:3
        for i = 1:N
            k0 = kmat(i,1);
            a0 = At(j,1);
            k1 = fminbnd(@valfunc,kmin,kmax); %policy function
            v1(i,j) =-valfunc(k1); %collects optimized value into the new
            %value function
            k11(i,j) = k1;
        end
    end
    %g = abs(v1−v0);
    dif = norm(v1-v0)
    v0 = v1;
    its = its+1
end

for i = 1:N
    con(i,1) = kmat(i,1).^(alpha)-k11(i,1);
    polfun(i,1) = kmat(i,1).^(alpha)-k11(i,1);
end

figure
plot(kmat,v1,'-k','linewidth',1)
xlabel('k')
ylabel('V(k)')
figure
plot(kmat,polfun,'-k','linewidth',1)
xlabel('k')
ylabel('c')

toc


Nun bekomme ich diese fehlermeldung:
Code:
Error in valfunc (line 5)
g = interp1(kmat,v0,k,'linear'); %interpolated value function


Viele Grüße

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

Forum-Meister


Beiträge: 22.905
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.01.2021, 18:48     Titel:
  Antworten mit Zitat      
Hallo,

hier fehlt die eigentliche Fehlermeldung. Das ist ja nur die Zeile, in der die Fehlermeldung auftritt.

Im übrigen bekomme ich bei deinem Code eine andere Fehlermeldung:

Zitat:
Error using fminbnd (line 237)
User supplied objective function must return a scalar value.

Error in Untitled (line 50)
k1 = fminbnd(@valfunc,kmin,kmax); %policy function


Das ist darauf zurückzuführen, dass in Zeile 13 von valfunc ein Vektor erzeugt wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.