问题
I want to make a plot force vs position (for coulomb's law) and estimate the constant e0. I have the values of charges , q1=1,q2=1. I have for example the
position=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1];
force=[0.08,0.015,0.013,0.0062,0.0016,0.00519,-0.00159,0.00118,...
0.0061,0.00155,0.00143];
Coulomb is F= (1/4*pi*e0) * q1*q2/r^2. So, it is in the form:
y=ax^-m , where a= (q1*q2/4*pi*e0)
I am doing:
p=polyfit(-log10(position),log10(force),1); % I am not sure about '1' and minus
m=p(1);
a=10^(p(2)); % I am not sure about a
xp=0.1:0.1:1.1;
yp=a*xp.^(-m);
plot(position,force,'o',xp,yp)
e0=q1*q2/4*pi*a
I am not finding a right value for e0.Am I doing something wrong? The m value should be -2 but I am taking :
m =
1.6287 - 0.2008i
回答1:
There are a couple of reasons this is wrong. Firstly, you've missed some parentheses out of your definition of Coulomb's law. It should be
F = 1/(4*pi*e0) * q1 * q2 * r^-2
This means that your final calculation of e0
should go like
a = 10^p(2);
e0 = ((q1 * q2) / (4 * pi)) / a;
The other reason this is wrong is that, in fact, the definition of the law is still wrong for your context. You have only positive charges (q1
, q2
) there, but clearly the force goes negative at some point. Since you're working in log-space to estimate the parameters, this is not going to work as you will get a complex number out. Your definition of Coulomb's law for your data should be
|F| = 1/(4*pi*e0) * |q1 * q2| * r^-2
That is, you only have the absolute values. Therefore you should do the fitting using abs(force)
instead of just force
.
回答2:
Since a= (q1*q2/4*pi*e0), e0 should be
e0=a/(q1*q2/4*pi)
Check it.
来源:https://stackoverflow.com/questions/16250137/curve-fitting-estimate-parameter-inverse-square-law