Ошибка утверждения при решении пары линейных уравнений - PullRequest
0 голосов
/ 06 апреля 2020
def lin_eqn(a,b):
  '''
  Solve the system of linear equations
  of the form ax = b
  Eg. 
  x + 2*y = 8
  3*x + 4*y = 18

  Given inputs a and b represent coefficients and constant of linear equation respectively

  coefficients: 
  a = np.array([[1, 2], [3, 4]]) 

  constants: 
  b = np.array([8, 18])

  Desired Output: [2,3]
  '''
  # YOUR CODE HERE
  **inv=np.linalg.inv(a)
  return np.matmul(inv,b)**


print(lin_eqn(np.array([[1, 2], [3, 4]]),np.array([8, 18])))
#It prints [2. 3.]

assert lin_eqn(np.array([[1, 2], [3, 4]]),np.array([8, 18])).tolist() == [2.0000000000000004, 2.9999999999999996]

Это утверждение утверждения, данное в моем назначении, из-за которого ответ не совпадает. Выдает ошибку, потому что [2. 3.] не равно [2.0000000000000004, 2.9999999999999996] Я не могу решить эту проблему. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 06 апреля 2020
  1. Не инвертировать матрицы для решения систем линейных уравнений, вместо этого используйте np.linalg.solve.
  2. Будут ошибки округления, вместо проверки на равенство, вы бы предпочли проверьте, что норма вашего решения и эталона меньше заданного (небольшого) допуска. Т.е.:

    assert np.linalg.norm (lin_eqn (a, b) - reference_sol) <1e-12 </p>

reference_sol также будет массивом.

...