<jupyter_start><jupyter_text>연습문제 4.2.5<jupyter_code>x= sympy.symbols('x')
f= x**3-1
sympy.diff(f,x)
x,k=sympy.symbols('x k')
f=sympy.log(x**2-3*k)
sympy.diff(f,x)
x,a,b=sympy.symbols('x a b')
f=sympy.exp(a*x**b)
sympy.diff(f,x),sympy.simplify(sympy.diff(f,x))<jupyter_output><empty_output><jupyter_text>연습문제 4.2.6<jupyter_code>x,y=sympy.symbols('x y')
f=sympy.exp(x**2+2*y**2)
sympy.diff(f,x)
sympy.diff(f,y)
sympy.diff(f,x,x)
sympy.diff(f,x,y)
sympy.diff(f,y,x)
sympy.diff(f,y,y)<jupyter_output><empty_output><jupyter_text>심파이를 이용한 부정적분<jupyter_code>sympy.init_printing(use_latex='mathjax')

x = sympy.symbols('x')
f = x * sympy.exp(x) + sympy.exp(x)
f
sympy.integrate(f)
x, y = sympy.symbols('x y')
f = 2 * x + y
f
sympy.integrate(f, x)<jupyter_output><empty_output><jupyter_text>연습문제 4.3.4<jupyter_code>x=sympy.symbols('x')
f=3*x**2
sympy.integrate(f,x)
x=sympy.symbols('x')
f=3*x**2-6*x+1
sympy.integrate(f,x)
x=sympy.symbols('x')
f=2+6*x+4*sympy.exp(x)+5/x
sympy.integrate(f,x)
x=sympy.symbols('x')
f=2*x/(x**2-1)
sympy.integrate(f,x)<jupyter_output><empty_output><jupyter_text>정적분<jupyter_code>x, y = sympy.symbols('x y')
f = x ** 3 - 3 * x ** 2 + x + 6
f
# 부정 적분
F=sympy.integrate(f)
F
# subs : 대입
# evalf : 수치 표현식을 부동소수점 숫자로 평가 
F.subs(x,2)-F.subs(x,0).evalf()<jupyter_output><empty_output><jupyter_text>수치적분<jupyter_code>import scipy as sp
from scipy import integrate
def f(x):
    return x ** 3 - 3 * x ** 2 + x + 6


scipy.integrate.quad(f, 0, 2)  
# 정적분 (수치적분)
# 적분값, 오차 형태로 결과 나옴<jupyter_output><empty_output><jupyter_text>scipy를 이용한 최적화<jupyter_code>def f1(x):
    return (x-2)**2+2
x0=0 # 초깃값
result=  sp.optimize.minimize(f1,x0)
print(result)
#success :T -> 최저값 찾는데 성공 -> 그값이 x
# fuc x의 위치에서 함수값
# hess_inv: 헤시안 값 -> 양수면 아래로 볼록이라 최저점이 맞음
# jac: 자코비안 행렬값 =0이면 최저값 맞음
# nit: 두번의 이동만에 끝냄 x0(초깃값)->x1->x2
# njev: 기울기 계산은 세번 -> 초깃값이 최저일수도 있으니 그때도 한번 계산
# nfev: 앞뒤 함수값 구해서 그 두값의 기울기를 구함 
# 앞의값 뒤의값 자기자신의 값 이렇게 한포인트마다 세번씩 계산함
# 그래서 nfev는 (초깃값 포함한 이동한 점개수)*3
def f1p(x):
#     f1의 도함수
    return 2*(x-2)
result=  sp.optimize.minimize(f1,x0,jac=f1p)
result
# nfev 가 9 ->3 으로 변화
# 기울기를 구할때 한포인트당 세번씩 계산을 했어야함
# 하지만 자코비안을넣어주면(도함수) 대입으로 기울기를 구할 수 있음
# 따라서 포인트당 한번씩의 계산만 함<jupyter_output><empty_output><jupyter_text>다변수 함수의 최적화(목적함수가 벡터를 인수로)<jupyter_code># 2차원 목적함수 
def f2(x):
    return (1-x[0])**2 + 100.0*(x[1]-x[0]**2)**2

x0=(-2,-2)
result= sp.optimize.minimize(f2,x0)
print(result)
# 초깃값 아무렇게나 줌
# 최저값 찾는데 성공 못함
# 횟수 이상으로는 안돌아감 진동(oscillation) 현상이 있는 함수<jupyter_output>fun: 5.2112890141803265e-12
 hess_inv: array([[0.49938636, 0.99860874],
       [0.99860874, 2.00187364]])
      jac: array([ 7.32138760e-05, -3.35902622e-05])
  message: 'Desired error not necessarily achieved due to precision loss.'
     nfev: 536
      nit: 55
     njev: 131
   status: 2
  success: False
        x: array([0.99999854, 0.9999969 ])<jupyter_text>연습 문제 5.1.1- 1) 최적해에 수렴할 수 있도록 초기점을 변경하여 본다.<jupyter_code>x0=(0,0)
result=sp.optimize.minimize(f2,x0)
print(result)<jupyter_output>fun: 2.8440316101421118e-11
 hess_inv: array([[0.49482454, 0.98957634],
       [0.98957634, 1.98394215]])
      jac: array([ 3.98673709e-06, -2.84416559e-06])
  message: 'Optimization terminated successfully.'
     nfev: 96
      nit: 19
     njev: 24
   status: 0
  success: True
        x: array([0.99999467, 0.99998932])<jupyter_text>- 2)그레디언트 벡터 함수를 구현하여 jac인수로 주는 방법으로 계산 속도를 향상시킨다<jupyter_code>def f2p(x):
    return np.array((2.0*(x[0]-1)- 400.0*x[0]*(x[1]-x[0]**2),
                    200.0*(x[1]-x[0]**2)))
# 들어가는것도 벡터 나오는것도 벡터 때문에 ( , )꼴
x0=(0,0)
result = sp.optimize.minimize(f2,x0,jac=f2p)
print(result)<jupyter_output>fun: 7.717288359756836e-13
 hess_inv: array([[0.49480256, 0.98953879],
       [0.98953879, 1.98387918]])
      jac: array([ 3.92841205e-06, -2.83120876e-06])
  message: 'Optimization terminated successfully.'
     nfev: 24
      nit: 19
     njev: 24
   status: 0
  success: True
        x: array([0.99999913, 0.99999825])
{'fraction_non_alphanumeric': 0.17684478371501272, 'fraction_numerical': 0.1078880407124682, 'mean_word_length': 4.255347593582887, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 45, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '164604', 'license': 'MIT', 'n_tokens_mistral': 2565, 'n_tokens_neox': 2668, 'n_words': 368, 'path': 'math/Day_5.ipynb', 'repo_name': 'Seoheesu1/TIL', 'size': '3930'}