필터 지우기
필터 지우기

Determining parameters with loops

조회 수: 1 (최근 30일)
Madlab
Madlab 2018년 10월 9일
댓글: Star Strider 2018년 10월 10일
I need to fit an equation for this cosine curve. Equation in the form y = A * cos(2*pi * (time - d)/T), with 3 unknowns (A,d,T) Data for y axis is newy Data for x axis is time
Right now the error I get is "Index exceeds array bounds." Any tips? I must go by this method as I need to use mathematics to solve this. I am finding the values of the parameters for the least mean error.
% SOLVING FOR 3 PARAMETERS
plot(time,newy)
% Setting the intervals for the amplitude
amp_interval = 21;
% Setting the intervals for the delay
delay_interval = 61;
% Setting the intervals for the period
period_interval = 61;
% Creating a 3D matrix "list_variables"
list_variables = ones(amp_interval,delay_interval,period_interval);
% From plot, I can determine range of rate and constant values
% Set range of amplitude
amp = linspace(9,11,amp_interval);
% Set range of delay
delay = linspace(0,1,delay_interval);
% Set range of period
period = linspace(24,26,period_interval);
% Determining values of rate and constant with help of mean error
% For loop looping through the number of rate intervals
% Counting through for raterow
for ampX=1:amp_interval;
% Assigning the value "valuerate" corresponding to the rate for each respective
% "raterow"
valueamp = amp(ampX);
% For loop looping through the number of constant intervals
% Counting through for constcol
for delayY = 1:delay_interval;
% Assigning the value "valueconst" corresponding to the constant for each respective
% "constcol"
valuedel = delay(delayY);
% For loop looping through the number of constant intervals
% Counting through for constcol
for periodZ = 1:period_interval;
% Assigning the value "valueconst" corresponding to the constant for each respective
% "constcol"
valueper = period(periodZ);
% Setting the equation for y = mx + c
data_curve = valueamp * cos(2*pi * (time - valuedel)/ valueper );
% Finding mean error "mean_range" - taking the modulous of
% (predicted value - data value), and then averaging the value.
mean_range = mean(abs(data_curve - data_model_2));
% Replacing the "1" values of the matrix to the corresponding mean
% error for each row and column
list_variables(ampX,delayY,periodZ) = mean_range;
% end of for loop looping through the number of period intervals
end
% end of for loop looping through the number of delay intervals
end
% end of for loop looping through the number of amp intervals
end
% "lowestmeanr" is the lowest mean error in "list_variables" - and the values of corresponding rate
% and constant is wanted
lowestmeanr = min(min(min(list_variables)));
% Finding the row and column corresponding to lowest mean error
[X,Y,Z] = find(list_variables==lowestmeanr);
% Determined rate from lowest mean error "ratedeter"
ampdeter = amp(X);
% Determined constant from lowest mean error "constdeter"
deldeter = delay(Y);
% Determined constant from lowest mean error "constdeter"
perdeter = period(Z);
% Determined equation for cosine plot
data_curvedeter = ampdeter * cos(2*pi * (time - deldeter)/ perdeter );
% Plotting the determined data by mean value in red
plot(time,data_curvedeter,'r');
  댓글 수: 2
Adam
Adam 2018년 10월 9일
What line is the error on?
Star Strider
Star Strider 2018년 10월 10일

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by