-4

これをPythonに変換しようとしています。私は本当に1行で助けが必要です。私はMATLABを学んだことはありません

function   [xc,yc,R,a] = circfit(x,y)
%
%   [xc yx R] = circfit(x,y)
%
%   fits a circle  in x,y plane in a more accurate
%   (less prone to ill condition )
%  procedure than circfit2 but using more memory
%  x,y are column vector where (x(i),y(i)) is a measured point
%
%  result is center point (yc,xc) and radius R
%  an optional output is the vector of coeficient a
% describing the circle's equation
%
%   x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%
%  By:  Izhak bucher 25/oct /1991, 
    x=x(:); y=y(:);
   a=[x y ones(size(x))]\[-(x.^2+y.^2)]; # i just need help with this line
   xc = -.5*a(1);
   yc = -.5*a(2);
   R  =  sqrt((a(1)^2+a(2)^2)/4-a(3));
4

1 に答える 1

3

このリファレンスが役立つ場合があります。

  • Matlab配列は、1から始まるインデックスが付けられます。Python配列は0から始まります

  • Pythonにはleft-matrix-div演算子はありませんが、numpy.linalg.solveは同じ操作を実行します

from numpy import matrix
from numpy.linalg import solve

def circfit(xs, ys):
    a = matrix([[x,y,1.] for x,y in zip(xs, ys)])
    b = matrix([[-(x*x + y*y)] for x,y in zip(xs, ys)])
    res = solve(a,b)
    xc = -0.5 * res.item(0)
    yc = -0.5 * res.item(1)
    r = (xc*xc + yc*yc - res.item(2))**0.5
    return xc,yc,r

それから

circfit([0,1,2],[2,1,2])   # ->  (1.0, 2.0, 1.0) as expected
于 2012-06-24T14:39:33.107 に答える