funktionen er blå og startværdierne lila.
xlist=[0.366,0.477,0.563,0.606,0.679]
ylist=[0.494,1.188,1.859,2.199,2.853,]
from scipy.optimize import curve_fit
def func(x, a, b):
return a * x + b
x_vaerdier = np.array(xlist)
y_vaerdier = np.array(ylist)
popt, pcov = curve_fit(func, x_vaerdier, y_vaerdier, p0=[0, 0.13, 0])
a=popt[0].round(2)# popt indeholder a b og c i en liste med mange decimaler
b=popt[1].round(6)# round runder til 6 decimaler
#c=popt[2].round(2)
print('y(x) =',a,'x + ',b)
import numpy as np
import matplotlib.pyplot as plt
xlist=[1,2,3,4,5]
ylist=[300,148,76,37,18]
from scipy.optimize import curve_fit
def func(x, a, b,c):
return a *np.exp(-b * x) + c
x_vaerdier = np.array(xlist)
y_vaerdier = np.array(ylist)
popt, pcov = curve_fit(func, x_vaerdier, y_vaerdier, p0=[300, 0.13,0])
a=popt[0].round(2)# popt indeholder a b og c i en liste med mange decimaler
b=popt[1].round(6)# round runder til 6 decimaler
c=popt[2].round(2)
print('y(x) =',a,'* exp -',b,'* x + ',c)
x_plot=np.linspace(xlist[0],xlist[-1],100)
plt.plot(x_plot,func(x_plot,a,b,c),'r-')
plt.scatter(x_vaerdier,y_vaerdier)
import matplotlib.pyplot as plt
import numpy as np
xlist=[0.366,0.477,0.563,0.606,0.679]
ylist=[0.494,1.188,1.859,2.199,2.853]
from scipy.optimize import curve_fit
def func(x, a, b):
return a * x + b
x_vaerdier = np.array(xlist)
y_vaerdier = np.array(ylist)
popt, pcov = curve_fit(func, x_vaerdier, y_vaerdier, p0=[0, 0.13])
a=popt[0].round(2)# popt indeholder a b og c i en liste med mange decimaler
b=popt[1].round(6)# round runder til 6 decimaler
print('y(x) =',a,'x + ',b)
prognose = 0.1
x_plot=np.linspace(xlist[0]-prognose,xlist[-1]+prognose,100)
plt.plot(x_plot,func(x_plot,a,b),'r-')
plt.scatter(x_vaerdier,y_vaerdier)
plt.axhline(y=0,color='k',linestyle='-',lw=1)
plt.axvline(x=0,color='k',linestyle='-',lw=1)
import matplotlib.pyplot as plt
import numpy as np
To plots under hinanden kan man gøre med følgende
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,6,200)
y1=np.sin(x)
y2=np.cos(x)
plt.subplot(211)
plt.plot(x,y1)
plt.title("Sinus og cosinus")
plt.subplot(212)
plt.plot(x,y2)
plt.savefig("subplot-sin-cos.png")
plt.show()
Plot af en lineær funktion
import matplotlib.pyplot as plt
import numpy as np
a=2
b=10
x = np.linspace(-5,5,10)
y = a*x+b
minlegende=("y = {0} x + {1}".format(a,b))
plt.plot(x,y, '-r', label=minlegende)
plt.title('Lineær graf y = ax + b')
plt.xlabel('x', color='k')
plt.ylabel('y', color='k')
plt.legend(loc='upper left')
plt.grid()
plt.show()
Plot af en "barchart"
import numpy as np
import matplotlib.pyplot as plt
aargang = [2000,2005,2010,2015,2020]
vaerdi = [100,50,400,600,230]
plt.bar(aargang,vaerdi)
Python arbejder godt sammen med latex og bruger latex funktioner til at gøre funktionsudtryk flotte. Det er det lille "r" foran udtrykket som gør arbejdet.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,6,100)
y = np.sin(x)*4
plt.plot(x,-y, 'g', label='1. plot')
plt.legend(loc='lower right')
plt.text(0.7,3, r'$\mu=100,\ \int_{-100}=\frac{x-4}{sin(x)}$')
plt.show()
Nedenstående snippet forbinder dit python script med en google sheets.
from googleapiclient.discovery import build
from google.oauth2 import service_account
SERVICE_ACCOUNT_FILE = '../crpython-key/crpython-key.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
creds = None
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
SAMPLE_SPREADSHEET_ID = '12ckLUThFLjY2gIhb490VDOe5tr1EsOuNoACpmhpo720'
service = build('sheets', 'v4', credentials=creds)
# Call the Sheets API
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
range="Ark1!A2:B97").execute()
values = result.get('values', [])
xsheetsvaerdier =[]
ysheetsvaerdier =[]
for i in values:
xsheetsvaerdier.append(float(i[0].replace(',','.')))
ysheetsvaerdier.append(float(i[1].replace(',','.')))
#print(xsheetsvaerdier)
#print(ysheetsvaerdier)
import matplotlib.pyplot as plt
import numpy as np
x = np.array(xsheetsvaerdier)
y = np.array(ysheetsvaerdier)
Har du brugt det her før og har du en .json fil gør følgende:
kopier dit .json fil et sted hvor python kan finde det (rød tekst til venstre) (du kan genbruge den samme .json fil mange gange).
gå ind på din google fil og klip den lange string fra URL'en ud og sæt den ind (blå tekst til venstre)
Angiv hvilken del af dit regneark python skal læse (grøn tekst til venstre)
Det fungerer IKKE out of the box. Du skal give phthon adgang til at læse dine google filer. Hertil skal du generere en .json fil!
Har du IKKE en .json fil skal du oprette en. Se denne side om hvordan du gør det.
Det smarte med det her er jo at man snildt kan genbruge det samme GoogleSheet og bare bruge forskellige "Ark". Det er jo denne her kommandt
range="Ark1!A2:B97").execute()
som læser data fra regnearket.
from sympy import *
init_printing()
%matplotlib inline
#Definition af variabler og symboler
x,y,z,t,s,v = symbols('x,y,z,t,s,v')
func1 = -10.34*x**2 + 15.049*x - 3.7586
func2 = 2*x**3-14*x**2+x+30
func = func1
dydx = diff(func,x)
print('Rødderne er x = :')
print(solveset(func.evalf()))
print('')
print('Maksima og minima er ved x = :')
print(solveset(dydx.evalf()))
print('')
print('y-værdien til maximum y = ',func.subs(x,0.727707930367505))
plot(func)#,(x,0,1.2))
plot(dydx)#,(x,0,1.2))
Klip koden til venstre ind i Jupyter
Er stat func1 eller func2 med din funktion
har du flere funktioner du vil lege med så skift func = func1 Programmet regner kun på func
programmet spytter værdier ud som IKKE er direkte tilgængelig som variabler derfor har jeg sat 0.727707930367505 manuelt i funktionen for at få y-værdien (find gerne en bedre løsning :-) )
sympy vælger selv plot grænser som ofte er meget store slet # (#,(x,0,1.2))) de nederste linjer for at ændre på grænserne.
Ved hjælpe af denne kodestump kan du beregne vinklen ud fra de to kateder
import numpy as np
modstaaende = 1
hosliggende = 1
vinkelrad=np.arctan(modstaaende/hosliggende)
vinkelgrad= vinkelrad/np.pi*180
print('vinkel i radianer er ',vinkelrad)
print('vinkel i grader er ',vinkelgrad,'grader')
from sympy import *
x = symbols('x')
ysym1 = x**2+3*x-8
ysym2 = -x**2+4*x+5
ysym3 = Eq(ysym1,ysym2)
lsym0=(solve(ysym3,x)[0].evalf())
lsym1=(solve(ysym3,x)[1].evalf())
print('skæringspunkterne af de to grafer',lsym0,'og',lsym1)
Isym0 = integrate((ysym1),(x,lsym0,lsym1))
Isym1 = integrate((ysym2),(x,lsym0,lsym1))
Isym2 = Isym1-Isym0
print('Integralet af y1 mellem skæringspunkterne = ',Isym0.evalf())
print('Integralet af y2 mellem skæringspunkterne = ',Isym1.evalf())
print('Arealet mellem skæringspunkterne = ',Isym2.evalf())
plot(ysym1,ysym2,(x,-2.5,3))