방정식을 기호식으로 풀거나 조작하려면 SymPy를 사용해야합니다. 수치 해를 원하면 NumPy를 사용해야합니다. SymPy 표현식으로 시작하여 NumPy 함수로 이동하려면 lambdify을 사용해야합니다.
코드에서 SymPy 방정식을 만들었지 만 사용하지는 않았습니다. 문제는 d
의 정의에서 p['F']
대신 F
을 사용하여 평가되지 않은 SymPy 기호 F
이있는 NumPy 배열을 만드는 것이고 처리 방법을 모르는 것입니다. 실제로 SymPy 부분을 완전히 제거하면 방정식이나 기타를 파생시키기 위해 코드를 전혀 사용하지 않아 코드가 계속 작동합니다.
그런데 방정식이 선형이므로 SymPy가 정확하게 풀 수 있습니다. 관심이 있다면 그렇게하는 방법이 있습니다. 내가 subs
그들을 대체 할 수 있도록, 기호 자체가 아닌 문자열을 사용 p
을 정의
>>> p = {M0: 4000, L1: 4, F: 1000, L: 6, L2: 2, q: 2000}
>>> solve([eq_Fx.subs(p), eq_MB.subs(p), eq_MA.subs(p)], [Ax, Ay, By])
{B_y: 2000, A_x: 1000, A_y: 10000/3}
참고.
실제로 우리가 사용할 수 있도록 당신이 여기
>>> linear_eq_to_matrix([eq_Fx, eq_MB, eq_MA], [Ax, Ay, By])
(Matrix([
[1, 0, 0],
[0, -L, 0],
[0, 0, L]]), Matrix([
[ F],
[-L_1**2*q/2 - M_0],
[ L_1**2*q/2 - M_0]]))
>>> C, D = linear_eq_to_matrix([eq_Fx, eq_MB, eq_MA], [Ax, Ay, By])
>>> p = {'L': 6, 'L_1': 4, 'L_2': 2, 'q': 2000, 'F': 1000, 'M_0': 4000}
>>> fC = lambdify([M0, F, q, L, L1, L2], C, 'numpy', dummify=False)
>>> fC(**p)
array([[ 1, 0, 0],
[ 0, -6, 0],
[ 0, 0, 6]])
>>> c = fC(**p)
>>> fD = lambdify([M0, F, q, L, L1, L2], D, 'numpy', dummify=False)
>>> d = fD(**p)
>>> import numpy
>>> np.linalg.solve(c, d)
array([[ 1000. ],
[ 3333.33333333],
[ 2000. ]])
내가 다시 문자열을 사용
p
을 정의하는 것 같은 뭔가를 사용할 수 있습니다, SymPy와 방정식을 생성하고
lambdify
와 NumPy와로 변환하려면 lambdified 함수의 키워드 인수로 사용하십시오 (그렇지 않으면
fC(4000, 1000, 2000, 6, 4, 2)
과 같은 순서로 전달해야합니다). 이 작업을 수행하려면
dummify=False
인수가 필요합니다.
linear_eq_to_matrix
함수는 기호 방정식을 SymPy 행렬로 변환합니다. lambdify
그러면 기호 요소가있는 SymPy 행렬을 숫자 NumPy 배열로 변환 할 수 있습니다.
마지막 주 : 당신은 당신이 사용 또는 예를 들어, 사용자의 기호에 밑줄 및 변수 이름의 비 사용에 일관성이 있다면 자신을 위해 많은 혼란을 방지하려면 사용합니다
M0 = symbols("M0")
또는
M_0 = symbols("M_0")
SymPy는 어느 경우에도 0을 아래 첨자로 인쇄합니다.
코드 이미지를 SO로 게시하지 마십시오 ([이 링크] (https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-html) 질문 할 때) 이유를 궁금하다면 –
오케이, 미안. 이 시스템을 해결하고 있습니다 : c = np.배열 [[[1, 0, 0], [0, p [ 'L'], 0], [0, 0, p [ 'L']]] d = np.array ([F, (p [ 'q'] * p [ 'L_1'] ** 2)/2 + p [ 'M_0'], - p [ 'M_0']]) 여기서 c는 계수 행렬이고 d는 내 의존 귀중품 배열입니다. 이들은 다음 데이터를 사용하고 있습니다 : p = { 'L': 6, 'L_1': 4, 'L_2': 2, 'q': 2000, 'F': 1000, 'M_0': 4000} 그래서 나는이 방법으로 시스템을 해결 시도 : 결과 = np.linalg.solve (C, D) 인쇄 (결과) 그러나 그것은 작동하지 않습니다. :/ –
질문을 편집하고 코드를 게시하십시오 –