⑴ 如何用python化簡方程組
用牛頓迭代法 + 多項式除法化簡。
1)針對方程組 f(x),首先用牛頓迭代法得到方程的第一個根(a),那麼 f(x) = (x-a)g(x)
2)用多項式除法,計算 g(x) = f(x)/(x-a)
重復第一步,得到 g(x) 的根,然後再重復第二步,進一步對方程降冪。
最終就可以化簡整個方程。
⑵ python怎麼實現方程組的解隨參數變化
不是很明確你需要做到什麼程度,但基本可以通過以下兩個手段得到:
手工解方程得到解析解,然後套入公式
使用一些工具包例如numpy可以自動求解
以下都給出例子
importnumpyasnp
importmatplotlib.pyplotasplt
plt.axis("equal")
a=np.linspace(1,10,100)#a的變化范圍可以自己挑,前兩個參數控制,
#使用numpy自動求解
res=[]
forxina:
A=np.mat("1,2;{},-1".format(x))
b=np.mat("{},10".format(x)).T
res.append(np.linalg.solve(A,b))
#計算完畢後取出每對x和y
x1=[float(r[0])forrinres]
y1=[float(r[1])forrinres]
plt.plot(x1,y1)
#####################################
#手工計算過程很簡單不放上來了,直接上結果
x2=[(a1+20)/(2*a1+1)fora1ina]
y2=[(a1**2-10)/(2*a1+1)fora1ina]
plt.plot(x2,y2)
⑶ 用python如何得到一個方程的多個解
方法/步驟
用Python解數學方程,需要用到Python的一個庫——SymPy庫。
SymPy是符號數學的Python庫,它的目標是成為一個全功能的計算機代數系統,同時保持代碼簡潔、易於理解和擴展。
如果你的電腦上還沒有安裝sympy庫,那就趕緊安裝吧,安裝命令:
pip3 install sympy
⑷ 用python如何求解非齊次線性方程組的一組正值特解,
其實更簡單的「取值」方法是 令 x3 = x4 = 0,得特解 (1, 1, 0, 0)^T.
4 個未知數,2 個方程,任意給出 2 個未知數的值,
算出另 2 個未知數,都可以得到 1 組特解,
只不過形式越簡單越好,例如取 特解 (1, 1, 0, 0)^T。
⑸ 求指教:Python怎樣分別輸出方程組的解
題主的問題沒有毛病:solve([f],[x]),f是方程,x是變數,這個代碼解的是關於x的方程f=0
其實很明顯了,輸出的是字典,也可以用type()確定變數類型,代碼如下:
L
=
solve([2*x+3*y-8,3*x-y-1],[x,y])
print(L[x])
print(L[y])
要運算的話就是:
a
=
L[x]
b
=
L[y]
print(a+b)
⑹ python怎麼求解一元二次方程的根
import numpy as np
def solve_quad(a,b,c):
if a == 0:
print('您輸入的不是二次方程!')
else:
delta = b*b-4*a*c
x = -b/(2*a)
if delta == 0:
print('方程有惟一解,X=%f'%(x))
return x
elif delta > 0:
x1 = x-np.sqrt(delta)/(2*a)
x2 = x+np.sqrt(delta)/(2*a)
print('方程有兩個實根:X1=%f,X2=%f'%(x1,x2))
return x1,x2
else:
x1 = (-b+complex(0,1)*np.sqrt((-1)*delta))/(2*a)
x2 = (-b-complex(0,1)*np.sqrt((-1)*delta))/(2*a)
print(x1,x2)
return x1,x2
Python
是完全面向對象的語言。函數、模塊、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
⑺ 如何用python編程求解二元一次方程組。如x+y=3;x-y=1
利用 numpy 很簡單。可以利用pip安裝
pipinstallnumpy
然後(以你的方程為例),python 下
Python2.7.10(default,Oct232015,19:19:21)
[GCC4.2.1CompatibleAppleLLVM7.0.0(clang-700.0.59.5)]ondarwin
Type"help","right","credits"or"license"formoreinformation.
>>>importnumpyasnp
>>>a=np.array([[1,1],[1,-1]])
>>>b=np.array([3,1])
>>>printnp.linalg.solve(a,b)
[2.1.]
如果你學過 線性代數,那麼這段代碼很好理解。
⑻ python解決jacob迭代法求解線性方程組
題主好. 經典的 Jacobi 迭代演算法如下:
設 A = D - E, 則 x = D^{-1}*b + D^{-1}*E*x = C + T*x
可以參考如下代碼(復制代碼後請注意縮進):
import numpy as np
def linalg_solve_jacobi(A, b, x0, max_it, tol=1.0e-7):
# 判斷 A, b 的維數是否正確
if A.shape[0]!=A.shape[1] or A.shape[0]!= b.shape[0]:
raise Exception('A must be square or A and b must be compatible!')
D = np.diag(A)
# 判斷對角元素是否含零
if np.amin(np.absolute(D)) < 1e-14:
raise Exception('Diagonal elements of A must not be zeros!')
# 設置初始迭代步數為0
n = 0
#
# Jacobi 演算法:
# 設 A = D - E, 則 x = D^{-1}*b + D^{-1}*E*x = C + T*x
#
invD = np.diag(1.0/D) # invD is inv(D)
C = np.dot(invD,b) # C is inv(D)*b
T = np.dot(invD, np.diag(D)-A) # T is inv(D)*E
while n < max_it:
x = C + np.dot(T, x0)
if np.linalg.norm(x-x0)<tol:
break
x0[:] = x
n+=1
# 如果超過最大迭代步數, 迭代失敗
if n>max_it:
raise Exception('Failed to converge within {} steps!'.format(max_it))
# 成功, 返回
return x, n
if __name__ == "__main__":
A = np.array([[10, -1, 2, 0],[-1, 11, -1, 3],
[2, -1, 10, -1], [0, 3, -1, 8]], dtype=np.float64)
b = np.array([6, 25, -11, 15], dtype=np.float64)
x0 = np.array([0,0,0,0], dtype=np.float64)
max_it = 100
tol = 1.0e-7
x,n=linalg_solve_jacobi(A, b, x0, max_it, tol)
print(x,n)