Is taking average the right method to find individual answers?

1 view (last 30 days)
Ankitha Pai
Ankitha Pai on 16 Mar 2021
Commented: Ankitha Pai on 16 Mar 2021
So over here I need to find out the dp values which are like d2, d3, d4, and so on will dN (N being the number of data points). So to solve this I open the brakets and take the terms to LHS and then divide that by the (u(k-i)^p) term which gives me dp value. But as there are multiple loops going on i get multiple values for each P th term. So what i did was to take the average after those loops get over to get only 1 term per each p loop.
%to get only one values
load('prbs165samples.mat') %dataset loaded
y = a(:,2); % output dataset (provided)
u = a(:,1); %input datast (provided)
na = 2;
nb = 2;
N = 161;
A = [0.2867 -0.2428];
B = [0.6607 -0.2732];
dp = [];
d = [];
tot = 0;
for p = 2:N+1
for i = 1:na
for j = 1:nb
for k = 3:N
LHS = y(k) + A(i)*y(k-i) - B(j)*u(k-j);
deno = (u(k-j).^p);
dp = [dp, LHS/deno];
tot = tot +(LHS/deno);
d = [d, tot/(na*nb*(N+1-3))];
tot = 0;
Ankitha Pai
Ankitha Pai on 16 Mar 2021
I'm asking to obtain a single value is it right to take the average of multiple values.
As there are summations and lopps going on for the pth term i get na*nb*(N+1-3) times values. Required is only one term

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 16 Mar 2021
Edited: Image Analyst on 16 Mar 2021
No that's not right. You need two for loops. One to compute the "a" sum, then a separate loop (not nested) to compute the "b" sum. Then add the two sums together. yk = asumk + bsumk. Try something like this:
% Initialize variables to random numbers or zero
% or else use whatever values you have gotten in some other way.
N = 20;
u = rand(1, N);
d = rand(1, N);
na = 5
nb = 7
a = rand(1, na);
b = rand(1, nb);
k = 18;
y(k) = 0; % Initialize y
% Compute the first term, which is only one sum.
asum = 0;
for i = 1 : na
asum = asum + a(i) * y(k-1);
fprintf('The first sum = %f.\n', asum);
% Now compute the second term, which has two sums.
bsum = 0;
for i = 1 : nb
% First compute the third summation over p
udsum = 0;
for p = 2 : N
if (k-i) <= 0 || (k-i) > length(u)
% Cannot do this index value so exit the loop.
udsum = udsum + d(p) * u(k-i) ^ p;
% Now add that third sum to u(k-i) and multiply by b(i):
%fprintf('(k-i) = %d.\n', (k-i));
if (k-i) >= 1 && (k-i) < length(u)
% If the indexes are ok, so the sum.
bsum = bsum + b(i) * (u(k-i) + udsum);
fprintf('The second sum = %f.\n', bsum);
% Now compute y(k) as the sum of the two summations:
y(k) = -asum + bsum
fprintf('Done running %s.m\n', mfilename);
  1 Comment
Ankitha Pai
Ankitha Pai on 16 Mar 2021
OH MY GOD! thank you so much. It makes sense. I understand the mistake now.
Definetly the real mvp!
Thank you so much.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by