一段VB代码如下:
Public Function funPolynomial(Num As Long, x() As Single, y() As Single, Degree As Integer, AA() As Single) As Long
Dim a() As Double, b() As Double, z() As Double
Dim i As Integer, j As Integer
Dim K As Integer, M As Integer
Dim lngError As Long
On Error GoTo errHandlerIf Num < Degree + 1 Then
    '原始数据个数不够,不能拟合
    funPolynomial = -1
    Exit Function
End IfM = Degree + 1
ReDim a(M, M) As Double, b(M) As Double, z(M) As Double
'形成方程组的各元素
a(1, 1) = Num
For i = 1 To Num
   b(1) = b(1) + y(i)
Next i
For j = 2 To M
   For i = 1 To Num
      a(1, j) = a(1, j) + x(i) ^ (j - 1)
   Next i
Next j
For i = 2 To M
   For j = 1 To M
      For K = 1 To Num
         a(i, j) = a(i, j) + x(K) ^ (i + j - 2)
         If j = 1 Then
            b(i) = b(i) + x(K) ^ (i - 1) * y(K)
         End If
      Next K
   Next j
Next ilngError = SolveEquation(M, a, b, z)
If lngError = 0 Then
    For i = 1 To M
        AA(i - 1) = z(i)
    Next i
    funPolynomial = 0
Else
    funPolynomial = lngError
End If
Exit FunctionerrHandler:
    '计算出错
    funPolynomial = -2
    Exit Function
End Function
Private Function SolveEquation(N As Integer, a() As Double, b() As Double, z() As Double) As Long
Dim TempA As Double, ChuShu As Double, Sum As Double
Dim i As Integer, j As Integer
Dim II As Integer, L As Integer, K As Integer, KK As Integer
On Error GoTo errHandlerFor i = 1 To N
    L = 0: KK = 0
    For j = i To N
      If a(j, i) = 0 Then L = L + 1
    Next j
    For j = i To N - L
      If a(j, i) = 0 Then
        KK = KK + 1
        For K = i To N
           TempA = a(j, K)
           a(j, K) = a(N - KK + 1, K)
           a(N - KK + 1, K) = TempA
        Next K
        TempA = b(j): b(j) = b(N - KK + 1): b(N - KK + 1) = TempA
      End If
    Next j
              
    For II = i To N - L
      ChuShu = a(II, i)
      For j = i To N
         a(II, j) = a(II, j) / ChuShu
      Next j
      b(II) = b(II) / ChuShu
    Next II
    For II = i + 1 To N - L
      For j = i To N
         a(II, j) = a(II, j) - a(i, j)
      Next j
      b(II) = b(II) - b(i)
    Next II
Next i
For i = 1 To N
    For j = 1 To i - 1
      a(i, j) = 0
    Next j
Next i
z(N) = b(N) / a(N, N)
For i = N - 1 To 1 Step -1
   Sum = 0
   For j = i + 1 To N
      Sum = Sum + a(i, j) * z(j)
   Next j
   z(i) = (b(i) - Sum) / a(i, i)
Next iExit FunctionerrHandler:
    '计算出错
    SolveEquation = -3
    Exit Function
End Function转为java代码如下:
public class Suanfa {
public void DuoXiangshi(int n,double[] x,double[] y,int degree)
{
int m = degree+1;
double[][] a = new double[m][m];
double [] b = new double[m];
double[] aa = new double[degree+2];
if(n<degree+1)
{
System.out.println("原始数据个数不够,不能拟合");
}
else 
{
a[0][0] = n;
for(int i=1;i<=n;i++)
{
b[0]=b[0]+y[i-1];
}
for(int j=2;j<=m;j++)
{
for(int k=1;k<=n;k++)
{
a[0][j-1]=a[0][j-1]+Math.pow(x[k-1], (j-2));
}
}
for(int q=2;q<=m;q++)
{
for(int p=1;p<=m;p++)
{
for(int w=1;w<=n;w++)
{
a[q-1][p-1]=a[q-1][p-1]+Math.pow(x[w-1], (q+p-4));
System.out.println("a[][]="+a[q-1][p-1]);
if(p==1)
{
b[q-1]=b[q-1]+Math.pow(x[w-1], (q-2))*y[w-1];
}
System.out.println("b[][]="+b[q-1]);
}
}
}
Suanfa sf= new Suanfa();
double[] z = sf.SolveEquation(m,a,b);
for(int o=1;o<=m;o++)
{
aa[o-1]=z[o-1];
System.out.println("输出系数为:"+aa[o-1]);
}
}
}

public double[] SolveEquation(int n,double[][] a,double[] b)
{
double[] z = new double[n];
double tempa,chushu,sum;
int j,i,ii,l,k,kk;
for(i=1;i<=n;i++)
{
l=0;
kk=0;
for(j=i;j<=n;j++)
{
if(a[j-1][i-1]==0)
{
l=l+1;
}
}
for(j=i;j<=(n-l);j++)
{
if(a[j-1][i-1]==0)
{
kk=kk+1;
for(k=i;k<=n;k++)
{
tempa=a[j-1][k-1];
a[j-1][k-1]=a[n-kk+1][k-1];
a[n-kk+1][k-1]=tempa;
}
tempa=b[j-1];
b[j-1]=b[n-kk+1];
b[n-kk+1]=tempa;
}
}
for(ii=i;ii<=n-l;ii++)
{
chushu=a[ii-1][i-1];
for(j=i;j<=n;j++)
{
a[ii-1][j-1]=a[ii-1][j-1]/chushu;
}
b[ii-1]=b[ii-1]/chushu;
}
for(ii=i+1;ii<=n-l;ii++)
{
for(j=i;j<=n;j++)
{
a[ii-1][j-1]=a[ii-1][j-1]-a[i-1][j-1];
}
b[ii-1]=b[ii-1]-b[i-1];
}
}

for(i=1;i<=n;i++)
{
for(j=1;j<=i-1;j++)
{
a[i-1][j-1]=0;
}
}
z[n-1]=b[n-1]/a[n-1][n-1];//如果有错,改为n-1
for(i=n-1;i>=1;i--)
{
sum=0;
for(j=i+1;j<=n;j++)
{
sum=sum+a[i-1][j-1]*z[j-1];
}
z[i-1]=(b[i-1]-sum)/a[i-1][i-1];
}
return z;
}
public static void main(String abs[]){
Suanfa sf= new Suanfa();
double[] x={10,15,20,25,30,35,40,45,50};
double[] y={100,400,710,1135,1700,2285,3010,4000,4760};
sf.DuoXiangshi(9, x, y,2);
}
}结果代码算出的值有偏差,跪求达人赐教