Is this correct approach for a single summation in time domain?

조회 수: 1 (최근 30일)
Sand Man
Sand Man 2014년 1월 15일
댓글: Sand Man 2014년 1월 16일
Hey there,
I am trying to do a single summation of a function in the time domain. I got my code working, but I would feel more confident if someone would verify the correctness or point out my mistakes.
Here is also the formula for what I am trying to achieve:
Here is the code:
h = 100;
t=[1:400];
rho_w = 1025;
g = 9.81;
Ohm = [0.01:0.01:4]
Phase = rand(1,length(Ohm))*2*pi;
Amp = [1:1:400];
for i = 1:length(t)
P(i) = rho_w*g*sum(Amp.*Ohm.*cos(Ohm*t(i)+Phase))
end
Thanks a bunch!
  댓글 수: 1
Skye
Skye 2014년 1월 15일
편집: Skye 2014년 1월 15일
it looks correct for the above equation, though you could make some general improvements:
replace (Ohm*t(i)+Phase)) with (Ohm*i+Phase)), because t(i) = i at all times; replace Amp = [1:1:400] with Amp = t, since they're the same, unless you to have amp different from t at some points (e.g amp = [1:0.5:200]); replace Ohm = [0.01:0.01:4] with Ohm = t/100, unless same reason as amp

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

채택된 답변

Matt J
Matt J 2014년 1월 15일
Looks fine to me. I'll just point out that you could avoid the for-loop by doing
P = cos(bsxfun(@plus, t(:)*Ohm,Phase) )*(rho_w*g*Amp.*Ohm).';

추가 답변 (3개)

Mark
Mark 2014년 1월 15일
looks like P is going to return as a an vector of vectors. The dot operator will take the dot product of your ohm and amp vectors, and then throw in your function of t in those multiplications. When you run your for loop you are creating an indexed value for that time t, but for every amp and ohm value. I also don't see a sum() function so I doubt this code alone is accomplishing what you want done.
  댓글 수: 1
Sand Man
Sand Man 2014년 1월 15일
Thanks for the quick replies.
Maybe you missed it, but I did include the sum() function, which is inside the P equation.
To my understanding the code does the following: For each t, it calculates all the values for P from n=1 to N and then the sum function adds all those values together and the same procedure is repeated for the next t etc. Thus it is a superposition, where for each time all the waveform components are added together.

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


Sand Man
Sand Man 2014년 1월 16일
But how should I proceed if I would like to take the double summation of the following formula:
Simply doing sum(sum()) will probably not solve the case. Im pretty stuck here.
  댓글 수: 1
Matt J
Matt J 2014년 1월 16일
편집: Matt J 2014년 1월 16일
There are no variables in the above summand that depend simultaneously on n and j. You can therefore factor the double summation into the product of 2 single summations. It is basically just the square of what you calculated before.

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


Sand Man
Sand Man 2014년 1월 16일
You are right about that.
Still keeping to my more time consuming coding due to my beginners level in matlab, but my code for the double summation would be:
for i = 1:length(t)
P(i) = rho_w*g*(sum(Amp.*Ohm.*cos(Ohm*t(i)+Phase))*sum(Amp.*cos(Ohm*t(i)+Phase)))
end
right?
  댓글 수: 2
Matt J
Matt J 2014년 1월 16일
편집: Matt J 2014년 1월 16일
It would be more efficient to do
for i = 1:length(t)
P(i) = rho_w*g*sum(Amp.*cos(Ohm*t(i)+Phase))).^2;
end
so that you don't end up doing the same summation computation twice.
By the way, you should be responding to people or following up to their answers in the Comment boxes and keeping those discussions contained in Comment threads. The Answer blocks are meant as a way of initiating completely new answers to your originally posted question.
Sand Man
Sand Man 2014년 1월 16일
Alright, I'll keep that in mind. Thanks.

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

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by