안녕하세요 python 질문있습니다.
조회수 954회
두번째 사진에 ds=[] 부분 전까지는 공식 이용해서 s라는 리스트에 n-1개의 함수를 넣어놓는 과정입니다 이 과정까지는 전혀 문제 없음을 확인했어요..
참고로 s 리스트에 들어있는 함수는 sympy에 Symbol 이용했구요.
ds라는 리스트에 s 리스트 에있는 함수 미분한것을 저장하고 ho1에 s에있는 함수와 ds에 있는 도함수를 이용해서 함수의 겉넓이 공식에 대입해서 저장한 후 ho2에 ho1의 식을 전개한 값을 저장한 후 x라는 문자에 대해 x[i]부터 x[i+1]까지 적분한 값을 joy에 저장하는 코드입니다
x라는 리스트에는 실수가 저장되어있구요
정상적으로 작동한다면 joy 리스트에 숫자가 저장되어야 하는데
x에 관한 식이 저장됩니다. 식 중간중간에 Integral이라는 명령어도 들어있고요
왜 적분이 안되고 요상한 식이 저장되는건지 모르겠습니다 알려주세요..
import numpy as np
import sympy as sm
import numpy.linalg as lin
import matplotlib.pyplot as plt
from math import pi
n=int(input('입력할 점 갯수: '))
z1=float(input('z1 값을 설정하세요: '))
zn=float(input('zn 값을 설정하세요: '))
x0=[]; y0=[]; s=[]; h=[]; c=[]; u=[0]; v=[0]; yy=[]
for i in range(n):
p,q=map(float, input().split())
x0.append(p); y0.append(q) # n개의 점의 x,y값을 x0,y0에 저장
for i in range(n-1):
h.append(x0[i+1]-x0[i]) # h 생성
for i in range(n-1):
c.append((y0[i+1]-y0[i])/h[i]) # c 생성
for i in range(n-2):
u.append((h[i]+h[i+1])*2) # u 생성
for i in range(n-2):
v.append((c[i+1]-c[i])*6) # v 생성
ar=[[0.0]*(n-2) for i in range(n-2)] # (n-2)(n-2)인 행렬 생성
ar=np.array(ar)
v.pop(0)
br=np.array(v) # v를 행렬로 만들기
for i in range(n-2):
ar[i][i]=u[i+1]
for i in range(n-3):
ar[i][i+1]=h[i+1]
ar[i+1][i]=h[i+1] #행렬에 값 집어넣기
z=lin.solve(ar,br)
z=list(z)
z.insert(0,z1); z.insert(n-1,zn) #행렬 풀고 z1,zn 집어넣기
for i in range(n-1):
xx=sm.Symbol('x')
y=((z[i+1]*(xx-x0[i])**3)+(z[i]*(x0[i+1]-xx)**3))/(6*h[i]) + ((y0[i+1]/h[i])-((h[i]*z[i+1])/6))*(xx-x0[i]) + ((y0[i]/h[i])-((h[i]*z[i])/6))*(x0[i+1]-xx)
s.append(y) # 구간별 함수를 s에 추가
for i in range(n-1):
xs=np.arange(x0[i],x0[i+1]+0.001,0.001)
yy.append(((z[i+1]*(xs-x0[i])**3)+(z[i]*(x0[i+1]-xs)**3))/(6*h[i]) + ((y0[i+1]/h[i])-((h[i]*z[i+1])/6))*(xs-x0[i]) + ((y0[i]/h[i])-((h[i]*z[i])/6))*(x0[i+1]-xs))
plt.plot(xs,yy[i]) # 함수 그리기
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력