Please help me understand whether I have set up a loop and performed an RMSE (Root Mean Square Error) calculation correctly
Show older comments
I am returning to Matlab after such a long break that I'm essentially a newbie. I'd be very grateful if someone would please help me figure out if I have done what I intend to do!
- I have a column of data (avgW) from measuring something over time.
- I have an equation (second line of my code below) to calculate the same thing I measured (wCalc). In the equation, the parameters, a, b, c, d, e, and f are all constants. The parameter "columnOfData" is a column of distinct values.
- My goal is to find the value of "x" in the equation. What I am trying to do below is first plug in a test value for x (1 - 10000). Then figure out which value (between 1 and 10000) gives me the smallest difference between wCalc and avgW.
I think my method so far would work if "columnOfData" were a constant, but it isn't and I am lost. I'm not even sure what I'm going to end up with when my current calculation finishes. Would anyone happen to know how to find and plot and record the lowest value of RMSE for each value of the column/vector, columnOfData?
Please feel free to comment if there are more appropriate tags for this question. Thank you.
for x = [1:1:10000]
wCalc = ( ( a ./ ( ( columnOfData ./ x ) - b ) ) - c - d - e ) .* f;
RMSE(x) = sqrt( sum( ( wCalc - avgW).^2) ./ g );
end
2 Comments
hosein Javan
on 10 Aug 2020
if RMSE is calculated for each "x", then plot(x,RMSE) would work. and the lowest value is found by "[i,m]=min(RMSE)".
if columnOfData changes, then add another for loop to calculate for each Data set.
if the goal is to find the error of RMS value calculation, why not using integral and calculate the convergence error?
Ann St
on 10 Aug 2020
Accepted Answer
More Answers (1)
hosein Javan
on 11 Aug 2020
is this way more efficient?
freq = 1;
T = 1/freq;
w = 2*pi*freq;
a = [1 1/2]; % harmonic amplitudes
y = @(t) a(1)*sin(w*t) + a(2)*sin(2*w*t); % define a periodic function with 2 harmonics
format long
RT = 1e-5; % relative tolerance of integral
RMS_cal = sqrt(freq*integral(@(t)y(t).^2,0,T, 'RelTol', RT )) % calculated RMS value using integral
RMS_exact = sqrt(sum(a.^2))/sqrt(2) % exact value of RMS
RMS_cal =
0.790569415042095
RMS_exact =
0.790569415042095
if your signal's frequency is known, you can find the exact rms value and compare it to your integral.
4 Comments
Jon
on 11 Aug 2020
I did not see anything in the original post about harmonic analysis. It just looked liked the OP was fitting a vector valued function. Was there some other information that I missed? If not are you trying to say that something similar to what you show in your example could be applied to the function fitting problem the OP has presented? Thanks for clarifying.
hosein Javan
on 11 Aug 2020
No, it was just a propose, I thought if this way is better. harmonics could be useful when trying to calculate RMS value of a signal. however I was trying to calculate RMS value by using integral rather than discrete method which is inaccurate, because discrete signals cannot contain all data.
Ann St
on 11 Aug 2020
hosein Javan
on 11 Aug 2020
you're welcome. the harmonics are used only to compute the exact RMS value only for comparison. the integral part is what we must use. if you have your signal function you don't need harmonics at all however it could be easily derived.
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!