안녕하세요 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]) # 함수 그리기

  • 이해 안되시는부분 있으시면 말씀해주세요 감사합니다 ㅎㅎ 알 수 없는 사용자 2019.10.16 19:33
  • 이해가 안 되는 것: 왜 텍스트를 굳이 이미지로 사진찍어 올려주시는지? 엽토군 2019.10.17 11:04
  • 죄송해요 코딩부분은 아예 저랑 관련이 없고 물리 연구중에 만든 코딩이라 한번도 질문을 해본적이 없어서요 ㅋㅋ 알 수 없는 사용자 2019.10.17 19:16
  • 어떻게 질문해야 하나요? 알 수 없는 사용자 2019.10.17 19:16
  • 음.. 일단은 소스를 복사해서 이 질문글 맨밑에 붙여주시면 고수분들이 그걸 실행을 해보고 원인이 파악되면 알려주시고 뭐 그럴것 같네요. 엽토군 2019.10.17 19:42
  • 감사합니다. 알 수 없는 사용자 2019.10.17 21:56

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)