編輯:更多細節
你好,我通過我的一位老師發現了這個問題,但我仍然不明白如何解決它,我想知道是否有人對此有任何想法:
創建一個能夠生成包含 2 到 8 個變數的方程組(隨機)的程式。程式將使用輸入函式向用戶詢問方程組中的多個變數。系數的范圍必須在 [-10,10] 之間,但是,沒有系數應該是 0。系數和解都必須是整數。
目標是列印系統并顯示變數 (x,y,z,...) 的解。NumPy 是允許的。
據我了解它應該這樣作業:
Enter the number of variables: 2
x y = 7
4x - y =3
x = 2
y = 5
我還在用 python 學習陣列,但它們的作業方式和 matlab 一樣嗎?
先感謝您 :)!
uj5u.com熱心網友回復:
對于k變數,方程的 lhs 將是k未知數和kxk系數矩陣。這兩者的點積應該給你rhs。然后這是一個簡單的列印案例,您可以隨意列印。
import numpy as np
def generate_linear_equations(k):
coeffs = [*range(-10, 0), *range(1, 11)]
rng = np.random.default_rng()
return rng.choice(coeffs, size=(k, k)), rng.integers(-10, 11, k)
k = int(input('Enter the number of variables: '))
if not 2 <= k <= 8:
raise ValueError('The number of variables must be between 2 and 8.')
coeffs, variables = generate_linear_equations(k)
solution = coeffs.dot(variables)
symbols = 'abcdefgh'[:k]
for row, sol in zip(coeffs, solution):
lhs = ' '.join(f'{r: }{s}' for r, s in zip(row, symbols)).lstrip(' ')
print(f'{lhs} = {sol}')
print()
for s, v in zip(symbols, variables):
print(f'{s} = {v}')
例如可以給
Enter the number of variables: 3
8a 6b -4c = -108
9a -9b -4c = 3
10a 10b 9c = -197
a = -9
b = -8
c = -3
如果您特別希望 lhs 的格式在符號之間有一個空格并且不顯示值為 1 的系數,那么您需要更復雜的東西。替換lhs以下內容:
def sign(n):
return ' ' if n > 0 else '-'
lhs = ' '.join(f'{sign(r)} {abs(r)}{s}' if r not in (-1, 1) else f'{sign(r)} {s}' for r, s in zip(row, symbols))
lhs = lhs[2:] if lhs.startswith(' ') else f'-{lhs[2:]}'
uj5u.com熱心網友回復:
我通過隨機生成左側和約束范圍內的解決方案來做到這一點,然后將解決方案插入方程以生成右側。隨意要求對代碼的任何部分進行澄清。
import numpy as np
num_variables = int(input('Number of variables:'))
valid_integers = np.asarray([x for x in range(-10,11) if x != 0])
lhs = np.random.choice(valid_integers, lhs_shape)
solution = np.random.randint(-10, 11, num_variables)
rhs = lhs.dot(solution)
for i in range(num_variables):
for j in range(num_variables):
symbol = '=' if j == num_variables-1 else ' '
print(f'{lhs[i, j]:3d}*x{j 1} {symbol} ', end='')
print(rhs[i])
for i in range(num_variables):
print(f'x{i 1} = {solution[i]}'
示例輸出:
Number of variables:2
2*x1 -7*x2 = -84
-4*x1 1*x2 = 38
x1 = -7
x2 = 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320771.html
