Error message the class x has no Constant property or Static method named y

I am trying to run the following code:
function [wind_directions,wind_speeds, de, relative_wind, ascending, wind_effectiveness] = we(absolute_yaw,wind_file,wind_row,pitch_angle)
%% James Kempton 11/06/2019
%% A function for calculating wind effectiveness
% load wind data
load(wind_file)
wind_directions=[wind.location_1(:,1),wind.location_2(:,1),...
wind.location_3(:,1),wind.location_4(:,1),...
wind.location_5(:,1),wind.location_6(:,1)];
wind_speeds=[wind.location_1(:,2),wind.location_2(:,2),...
wind.location_3(:,2),wind.location_4(:,2),...
wind.location_5(:,2),wind.location_6(:,2)];
% find difference in wind vector direction and heading vector direction
theta_diff=[absolute_yaw-wind.location_1(wind_row,1),...
absolute_yaw-wind.location_2(wind_row,1),...
absolute_yaw-wind.location_3(wind_row,1),...
absolute_yaw-wind.location_4(wind_row,1),...
absolute_yaw-wind.location_5(wind_row,1),...
absolute_yaw-wind.location_6(wind_row,1)];
% calculate directional effectiveness
de=abs(cosd(theta_diff));
% assign headwind value 1
relative_wind=abs(theta_diff)>=90&abs(theta_diff)<=270;
relative_wind=double(relative_wind);
% assign tailwind value -1
relative_wind(relative_wind==0)=-1;
% assign ascent value 1
ascending=pitch_angle>0;
ascending=double(ascending);
% assign descent value -1
ascending(ascending==0)=-1;
% you know have 3 vectors, two a series of positive or negative ones and
% which together capture the phasing of the flight, and a third cpaturing
% the directional effectiveness. Together they are the wind effectiveness.
wind_effectiveness=ascending.*relative_wind.*de;
I receive this error message:
The class wind has no Constant property or Static method named 'location_1'.
Error in we (line 21)
theta_diff=[absolute_yaw-wind.location_1(wind_row,1),...
This is surprising given I can use wind.location_x up to line 21. Playing around I find that the function only allows wind.location_x if the index is (:,col). As soon as I try to specify specific rows the above error message arises.
I have attached the wind.mat table which is my wind_file above. Why does the above issue occur? How do I resolve it?
Thank you, James

 Accepted Answer

load(wind_file)
In all current versions of MATLAB, when you load() inside a function without specifying an output for the load() call, and you load a variable whose name is the same as a function or class, then MATLAB is permitted to treat the name as referring to the function or class instead of to the variable.
You are loading a variable named wind but there is a class named wind and MATLAB will resolve to that class instead.
You should be using something like
loaded_vars = load(wind_file);
wind = loaded_vars.wind;

1 Comment

Thank you for this succinct and clear answer Walter, the problem is solved

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2018b

Tags

Community Treasure Hunt

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

Start Hunting!