球形空間產生器 高斯消元 計算n維球心座標

2021-10-05 02:34:11 字數 1231 閱讀 7259

有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。

現在,你被困在了這個n維球體中,你只知道球面上n+1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。

注意:資料保證有唯一解。

輸入格式

第一行是乙個整數n。

接下來的n+1行,每行有n個實數,表示球面上一點的n維座標。

每乙個實數精確到小數點後6位,且其絕對值都不超過20000。

輸出格式

有且只有一行,依次給出球心的n維座標(n個實數),兩個實數之間用乙個空格隔開。

每個實數精確到小數點後3位。

資料範圍

1≤n≤10

輸入樣例:

2

0.0 0.0

-1.0 1.0

1.0 0.0

輸出樣例:

0.500 1.500
解題步驟:因為所有點到球心的距離相等,所以設球心為(x1,x2,x3,...xn),則sum[(aij^2-xj^2)]=c(j從0到n,c為常數),這就是乙個i從1到n+1的乙個n+1元2次方程組,同時消去c得sum(aij^2-a(i+1)j^2-2*xj*(aij-a(i+1)j))=0(j從1到n,i=1,2,3...,n)

將變數xj放在左邊,常數aij移到右邊:

sum(2(aij-a(i+1)j)*xj)=sum(aij^2-a(i+1)j^2)(j從1到n,i=1,2,3,...,n)

然後用高斯消元解出x即可

完整**:

#include #include #include using namespace std;

double a[21][21],b[21],c[21][21];

int n;

void init()

}}void work()

swap(b[i],b[j]);}}

for(int j=1;j<=n;j++)

b[j]-=b[i]*rate;}}

}int main()

}init();

work();

for(int i=1;i<=n;i++)

return 0;

}

球形空間產生器 高斯消元 模擬退火

球型空 間產生器 球型空間 產生器 desc ript iond escr ipti on有乙個球形空間產生器能夠在 n n 維空間中產生乙個堅硬的球體。現在,你被困在了這個 n 維球體中,你只知道球面上 n 1 n 1 個點的座標,你需要以最快的速度確定這個 n n 維球體的球心座標,以便於摧毀這...

BZOJ1013 球形空間產生器(高斯消元)

有乙個球形空間產生器能夠在n維空間中產生乙個堅硬的球體。現在,你被困在了這個n維球體中,你只知道球 面上n 1個點的座標,你需要以最快的速度確定這個n維球體的球心座標,以便於摧毀這個球形空間產生器。第一行是乙個整數n 1 n 10 接下來的n 1行,每行有n個實數,表示球面上一點的n維座標。每乙個實...

acwing 207 球形空間產生器 高斯消元

題目位址 題目指出有解。設球心為 x1,x2,xn 則我們可以得到 j 0n a i,j xj 2 sum n a x j 2 j 0n ai,j x j 2 c。將其化簡,讓第一行減去第二行,依次類推。可以得到 j 0n a i,j ai 1 j j 0 n ai j2 ai 1 j2 sum n...