Inserting a function in a matrix.

18 views (last 30 days)
I am trying to solve the system above.I think I got right the first part of the quation with a for loop(code bellow)
L = 51;
ws1 = 0.4*pi;
wp1 = 0.5*pi;
Ks1 = 1;
Kp = 2;
wo = (ws1+wp1)/2;
G = 1000;
w = [0:(G)]*pi/G;
W = Ks1*(w<=ws1) + Kp*(w>=wp1)
D = (wo>=w);
N=(L-1)/2
m=0:N
k=1:1001
for i = 0:N
F(i+1,:)=sum(arrayfun(@(k) (W(k).^2).*D(k).*cos(w(k).*i), 1:1000))
end
I am struggling though in the second part.My code looks like this but it does not seem to work.
for i = 0:N
for p = 0:N
F2=@(k)(W(k).^2).*D(k).*(cos(w(k).*i).*(cos(w(k).*p))')
end M[i+1,p+1]=sum[arrayfun(@(k) F2(k), 1:1000)]
end
Does anyone know how I could possibly fix that.I also download the symbolic math toolbox but I was not able to find something to help me with that.
  2 Comments
Théophane Dimier
Théophane Dimier on 8 Dec 2020
Edited: Théophane Dimier on 8 Dec 2020
Hi,
that line looks a bit weird:
end M[i+1,p+1]=sum[arrayfun(@(k) F2(k), 1:1000)]
What do you want to do there? you should not have a statement after the end. Also, functions are called with parenthese () and not brackets []. To index arrays one should also use parentheses () and not brackets [] (unlike python or C)
Considering that it was a typo, would the following work?
M(i+1,p+1)=sum(arrayfun(@(k) F2(k), 1:1000))
end
Jason Psimopoulos
Jason Psimopoulos on 9 Dec 2020
Hi,
Thanks for taking the time with my question.Frankly my whole code looked weird.I had many scripts with different tests.I finally found the solution though.I will put it here in case someone needs something simillar in the future.
for i=1:length(OM) %OM is the wk samples vector(grid size 5000 in my case)
COS=cos( [0:N]' * OM(i) );
Q=Q+(W(i)^2)*COS*(COS');
P=P+(W(i)^2)*D(i)*COS;
end
A=Q\P;
A(2:end)=A(2:end)/2;

Sign in to comment.

Accepted Answer

Jason Psimopoulos
Jason Psimopoulos on 9 Dec 2020
Edited: Jason Psimopoulos on 9 Dec 2020
for i=1:length(OM) %OM is the wk samples vector(grid size 5000 in my case)
COS=cos( [0:N]' * OM(i) );
Q=Q+(W(i)^2)*COS*(COS');
P=P+(W(i)^2)*D(i)*COS;
end
A=Q\P;
A(2:end)=A(2:end)/2;
That is the code I ended up with in case someone needs something similar.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!