91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python求解阿基米德分牛問題

發布時間:2023-03-09 09:45:25 來源:億速云 閱讀:110 作者:iii 欄目:開發技術

今天小編給大家分享一下怎么用Python求解阿基米德分牛問題的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

題目大意

 太陽神有一牛群,由白、黑、花、棕四種顏色的公、母牛組成,其間關系如下,求每種牛的個數。

公牛中,白牛多于棕牛,二者之差為黑牛的1/2+1/3;黑牛多于棕牛,二者之差為花牛的1/4+1/5;花牛多于棕牛,二者之差為白牛數的1/6+1/7

母牛中,白牛是全體黑牛的1/3+1/4;黑牛是全體花牛的1/4+1/5;花牛是全體棕牛的1/5+1/6;棕牛是全體白牛的1/6+1/7

如果用字母x0,x1, x2 , x3分別表示白、黑、花、棕各色的公牛數;用y0,y1,y2,y3分別表示白、黑、花、棕各色母牛數,則得8 個未知數的如下7 個方程

怎么用Python求解阿基米德分牛問題

這個題其實是毫無難度的,但非要用Python,那么難點主要如何優雅地表達這個過程,這里選用的是sympy符號計算。

所以第一步,先給定一些符號

import sympy
x0,x1,x2,x3 = sympy.symbols("x0,x1,x2,x3")
y0,y1,y2,y3 = sympy.symbols("y0,y1,y2,y3")
x = [x0,x1,x2,x3]
y = [y0,y1,y2,y3]

sympy求解

然后將阿基米德分牛問題轉化為Python代碼,其優雅之處在于,這些分數的構建遵循自然數遞增的規律,故可通過循環來生成,非常便捷。

frac = lambda x : sympy.Rational(1,x)
fs = []
for i in range(3):
    fs.append(x[i]-x[3]-(frac(2*i+2)+frac(2*i+3))*x[i+1])

for i in range(4):
    ind = (i + 1) % 4
    fs.append(y[i]-(frac(i+3)+frac(i+4))*(x[ind]+y[ind]))

這樣就得到了待求方程組

>>> for f in fs: print(f)
...
x0 - 5*x1/6 - x3
x1 - 9*x2/20 - x3
x2 - 55*x3/42
-7*x1/12 + y0 - 7*y1/12
-9*x2/20 + y1 - 9*y2/20
-11*x3/30 + y2 - 11*y3/30
-13*x0/42 - 13*y0/42 + y3

但是,8個未知數7個方程,顯然沒有唯一解,考慮到x3貌似是最小的值,所以最后希望用x3來表示其他數。

res = sympy.solve(fs, x[:3]+y)

結果

查看一下結果

for key in res:
    print(sympy.latex(key), "&=", sympy.latex(res[key]), r"\\")

怎么用Python求解阿基米德分牛問題

這道題到這里基本上就算解完了,但是牛至少得是個整數,所以接下來要做的是求解分母的最小公倍數。

在sympy中,對于一個分數r,r.p為分子,r.q為分母;lcm可求解其最小公倍數。

denominators = [(v/x3).q for v in res.values()]
x3Res = sympy.lcm(denominators)
# 32859792

然后讓將x3的值加入fs,

fs.append(x3-x3Res)
res2 = sympy.solve(fs, x+y)
for key in res2:
    print(sympy.latex(key), "=", res2[key], r"\\")

結果如下

x0=76379457
x1=52223598
x2=43030680
x3=32859792
y0=48646815
y1=31170942
y2=26238080
y3=38698608

這些牛加一起有349247972頭,全世界大概有10萬億頭,看來太陽神的牛還是比較多的。

以上就是“怎么用Python求解阿基米德分牛問題”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偏关县| 哈尔滨市| 内丘县| 商河县| 太和县| 搜索| 江门市| 海兴县| 临夏市| 汝城县| 太保市| 宿松县| 荔浦县| 元氏县| 兰溪市| 菏泽市| 雷山县| 股票| 宜兴市| 佛山市| 东方市| 大港区| 侯马市| 阿克陶县| 平罗县| 黄陵县| 安国市| 湄潭县| 西充县| 枣阳市| 沛县| 彭州市| 金溪县| 辉南县| 房山区| 柳江县| 胶州市| 扎囊县| 镇江市| 百色市| 德阳市|