Struct contents reference from a non-struct array object

9 Ansichten (letzte 30 Tage)
K Kassimatis
K Kassimatis am 12 Okt. 2020
Kommentiert: K Kassimatis am 13 Okt. 2020
hello
I am new to Matlab and I am trying to minimize the following function with fmincon:
function [ CRRA ] = CRRA(x)
tur = load('tur.mat');
wei = load('wei.mat');
ret = tur.tur *x';
first = 1 + ret;
util = ((first.^(-85))/(-85));
wut = wei. * util;
CRRA = -mean(wut);
end
tur is a 140x500 matrix, x is what I am looking for, i.e. a 1x500 matrix, and wei is a 140x1 matrix. The problem is the line
wut = wei. * util
where I want to multiply wei with util element by element. I get the message:
Struct contents reference from a non-struct array object
with reference to this line. I also tried wut = times (wei, util) but obviously didn't work.
When I copy wut = wei. * util; and paste it in the command editor it calculates wut correctly. I would really appreciate any help.
Thank you

Akzeptierte Antwort

Steven Lord
Steven Lord am 12 Okt. 2020
Bearbeitet: Steven Lord am 12 Okt. 2020
function [ CRRA ] = CRRA(x)
tur = load('tur.mat');
wei = load('wei.mat');
The preceding two lines load the MAT-file each and every time this function is called. Instead load the data once before calling fmincon and pass them into your objective function as additional parameters.
When you do this you can pass in tur.tur and wei.wei as the parameters, eliminating the need to extract those fields from each struct array each time the function is executed. You successfully extracted the field from tur on this line:
ret = tur.tur *x';
first = 1 + ret;
util = ((first.^(-85))/(-85));
but you forgot to extract the field on this line (in which I've replaced ". *" with ".*" to correct the original error) which led to the new error.
wut = wei.* util;
CRRA = -mean(wut);
end

Weitere Antworten (1)

Matt J
Matt J am 12 Okt. 2020
I think you just have to get rid of the extra whitespace between . and *
  3 Kommentare
Matt J
Matt J am 12 Okt. 2020
Bearbeitet: Matt J am 12 Okt. 2020
Use
>> dbstop if error
to pause execution where the error occurs and see what types of variables are being multiplied.
K Kassimatis
K Kassimatis am 12 Okt. 2020
I get the following message:
Error: File: CRRA.m Line: 8 Column: 24
Unexpected MATLAB operator.
Error in fmincon (line 536)
initVals.f = feval(funfcn{3},X,varargin{:});
Error in globalsearchnlp
Error in GlobalSearch/run (line 340)
globalsearchnlp(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,options,localOptions);
Caused by:
Failure in initial objective function evaluation. FMINCON cannot continue.
Failure in initial call to fmincon with user-supplied problem structure.
Line 8 is: wut = wei. *util;
If i delete this line and in the code I posted originally change wut to util in the final line, everything works fine.

Melden Sie sich an, um zu kommentieren.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by