'''
Kode som demonstrerer hvordan forskjellige bibliotekfunksoner kan brukes
'''

import scipy as sc
import numpy as np
import matplotlib.pyplot as plt

def f(x): #En matematisk funksjon
    return np.cos(x) - x

def modell(x_list):  # Et likningssett
    x1, x2 = x_list

    eq1 = x1 ** 2 + x2 ** 2 - 1
    eq2 = x2 - np.sin(x1)

    return [eq1, eq2]

def g(x, a, b): #En matematisk funksjon med parametre
    return a * np.sin(b * x)

data_x = [0, 1, 2, 3, 4] #Et datasett
data_y = [2, 3, 7, 10, 18] #Et annet datasett
data_z = [0, 1.1, 1.5, 0.9, 0] #et tredje dataset

x0 = sc.optimize.fsolve(f, 1) #Løser likningen f(x) = 0

I = sc.integrate.quad(f, 0, 1) #Integrerer f(x) fra 0 til 1

losning = sc.optimize.root(modell, [1, 2]) #loser likningssettet "modell"

coeff = np.polyfit(data_x, data_y, 2) #lineærregresjon med et andregradspolynom

coeff2 = sc.optimize.curve_fit(g, data_x, data_z, [1.5, 6]) #Regresjonstilpasning av g til data_x og data_z

x = np.linspace(0, 10, 100) #100 punkter mellom 0 og 10
y = f(x) #regner ut f(x) for alle 100 punktene
plt.plot(x, y) #plotter y = f(x)
plt.show()