curve fitting and graphing.
Here’s how i do the curve fits and resulting graphing.
I use the free program ‘gnuplot’ which is pretty powerful, can do curve-fits, and graph everything.
Steps:
1: measure your curve and get some points. I created a file called ‘measured.dat’:
0 .0044 .1 .0123 .2 .0218 .3 .0382 .4 .0636 .5 .098 .6 .157 .7 .221 .8 .300 .9 .404 1 .495
2) fit the curve. I use a cubic parabola: Ax3+Bx2+Cx+D
shell$ gnuplot ... gnuplot> f(x)=a*x*x*x+b*x*x+c*x+d gnuplot> fit f(x) './measured.dat' via a,b,c,d ... Final set of parameters Asymptotic Standard Error ======================= ==========================a = 0.142852 +/- 0.07749 (54.25%) b = 0.385536 +/- 0.1181 (30.63%) c = -0.035066 +/- 0.0493 (140.6%) d = 0.00833846 +/- 0.005414 (64.93%) So now you have your coefficients: a,b,c,d
3) plug them into a graphing file. here’s mine:
# let's call this file "fit.gnuplot" # you can keep the body of the file the same, and just # modify a,b,c,d each time you run a new curve a=0.142852 b=0.385536 c=-0.035066 d=0.00833846 #Cubic Parabola #C=ax3 + bx2 + cx + d B(x)=a*x**3+b*x**2+c*x+d # this trick limits the curve to x=0 through x=1.05 C(x)= (x>0 && x<1.05) ? B(x) : 1/0 # tangent slope, derivative of cantilever # D = B'=3ax2 + 2bx + c D(x)=3*a*x**2+2*b*x+c #focus (reflected) line slope (ts = tangent slope) # y = 1/(TAN(2*(ATAN(1/ts)))) # incidence angle (0 = directly above, # + means low in the sky # - means high in the sky # radians = degrees x PI / 180 # precalculate one, just showing the formula, not used ideg= 0; irad = ideg*pi/180 ## slope of reflected ray F(ts)=1/tan(2*atan(1/ts)-irad) # focus y-int G(tp)=C(tp)-(tp*F(D(tp))) ## where will the graph be drawn? set xrange [-.5:1.2] set yrange [-.1:1.2] ## setup graphing set multiplot # offset (first ray will be ioff+istep) ioff=-3 istep=1.5 # each ray will offset on x axis by this much xstep=.1 # arrow number ar=0 # tangent point tp=0 ideg=ioff irad = ideg*pi/180 ## how far to the left of the x-axis to extend arrows? xp = -.35 ## increment various counters ar=ar+1; tp=tp+xstep ## downward ray set arrow ar from tp,5 to tp,C(tp) lt rgb 'black' ## normal reflected ray ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'red' ## plus 1 step ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'black' ## plus another step ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'green' ## repeat this stanza as many times as you need ## next set ideg=ioff; irad = ideg*pi/180 ar=ar+1; tp=tp+xstep set arrow ar from tp,5 to tp,C(tp) lt rgb 'black' ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'red' ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'black' ideg=ideg+istep; irad = ideg*pi/180; ar=ar+1; set arrow ar from tp,C(tp) to xp,F(D(tp))*xp+G(tp) lt rgb 'green' set label " red: 1.5 degrees high\nblack: perfectly aimed\ngreen: 1.5 degrees low" at -.4,.2 set key at 1,.05 plot C(x) lt 2 title 'best fit line for measured sheet' set key at 1,0 plot 'measured.dat' with points title 'measured points' unset multiplot pause -1
Now you have a graph definition that will do all the fancy arrows and such.
4) Show the graph:
shell$ gnuplot fit.gnuplot
You’ll need to duplicate the ‘repeat this stanza’ section once more for each point without a reflection on it.
March 5, 2013 at 4:24 am
After I initially commented I seem to have clicked on the -Notify me when new comments are added-
checkbox and from now on each time a comment is added I get four emails with
the exact same comment. There has to be a means you are able
to remove me from that service? Thanks a lot!
March 7, 2013 at 11:17 am
you’re in point of fact a excellent webmaster. The site loading velocity is amazing. It sort of feels that you are doing any distinctive trick. Also, The contents are masterpiece. you have done a fantastic process on this matter!
March 9, 2013 at 9:00 pm
Hello, after reading this amazing paragraph i am also happy
to share my knowledge here with mates.
March 16, 2013 at 3:10 pm
After looking over a number of the blog posts on your web site,
I really like your technique of writing a blog.
I saved as a favorite it to my bookmark site list and will be checking back in the near
future. Take a look at my website too and let me know how you feel.
June 11, 2013 at 6:29 am
Hi, i think that i saw you visited my website thus i came to “return the favor”.
I’m trying to find things to improve my website!I suppose its ok to use a few of your ideas!!
June 17, 2013 at 9:44 pm
Hey there, I think your blog might be having browser compatibility issues.
When I look at your website in Opera, it looks fine but when opening in Internet Explorer,
it has some overlapping. I just wanted to give you a quick heads
up! Other then that, excellent blog!
June 20, 2013 at 6:08 am
We stumbled over here different web address and thought
I might check things out. I like what I see so i am just following you.
Look forward to checking out your web page again.
July 26, 2013 at 11:11 am
Because if you are many pounds heavier than you should be, it can be done.
Running, swimming, step aerobics, and walking are all great exercises for burning calories.
A lot of moments surfeit Candida is caused by a problem with your
diet, therefore if you experience a disease you’re going to make some measures to your dieting.
December 28, 2013 at 10:54 am
The first line of attack is eating a high protein breakfast.
With some more refining by the pharmaceutical companies’ research and
development departments, they should be available as part of the next wave of prescription fat melting medications.
Sunlight on un-protected skin produces a highly usable form of Vitamin D that lasts twice as long in your bloodstream as when you consume
it through food or a supplement, but you still
need caution due to the risk of skin cancer.
March 5, 2014 at 7:48 pm
Ңeya are սsing WordPress for your blog platform?
I’m neԝ to the blog ԝorld but I’m trying to get started
and create my own. Do you need any coding knowledge to make your own blog?
Any help would be greatly appreciated!