# How do I perform a sin^2 or a cos^2 fit for my data?

7 views (last 30 days)
Akshay Arvind on 23 May 2024
Commented: Star Strider on 23 May 2024
I have the following x data and y data:
x = [0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180]
y = [880,1200,1900,2700,3300,3600,3000,2100,1300,860,1200,1900,2700,3150,3300,2900,2100,1300,860]
How do I perform a cos^2 (x) or a sin^2 (x) fit for the above data?

Star Strider on 23 May 2024
Perhaps this —
x = [0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180];
y = [880,1200,1900,2700,3300,3600,3000,2100,1300,860,1200,1900,2700,3150,3300,2900,2100,1300,860];
LvLocs = islocalmax(y, 'MinProminence',mean(y));
xlocs = x(LvLocs)
xlocs = 1x2
50 140
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
freq = 1/mean(diff(xlocs))
freq = 0.0111
[lb,ub] = bounds(y)
lb = 860
ub = 3600
fcn = @(b,x) b(1).*sin(2*pi*x*b(2)).^2 + b(3);
[B,fv] = fminsearch(@(b)norm(y - fcn(b,x)), rand(3,1))
B = 3x1
1.0e+03 * 2.5314 0.0006 0.9046
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
fv = 371.2053
txt = sprintf('$f(x) = %.2f \\cdot sin(2 \\pi x %.3f)^2 %+.3f$', B)
txt = '$f(x) = 2531.45 \cdot sin(2 \pi x 0.595)^2 +904.574$'
figure
plot(x, y)
hold on
plot(x, fcn(B,x), '-r')
hold off
grid
xlabel('X')
ylabel('Y')
text(50, 3750, txt, 'Interpreter','LaTeX')
.
Akshay Arvind on 23 May 2024
I see, thanks very much! I appreciate the help.
Star Strider on 23 May 2024
As always, my pleasure!