Elektriske felter
Info til lærer:
Dette opplegget er tenkt som et utforskningsprogram for elever og at lærer kan vise hvordan ulike ladninger danner ulike elektriske felter. Opplegget kan brukes som:
- en demonstrasjon
- en utforsking for elevene
- et programmeringsopplegg gitt at elevene kan noe programmering
Tilslutt er et par eksamensoppgaver som kan løses/utforskes med dette programet.
Mål for opplæringen er at eleven skal kunne:
<div class="alert alert-block alert-info">-
bruke numeriske metoder og programmering til å utforske og modellere fysiske fenomener
-
utforske, beskrive og modellere bevegelse i to dimensjoner
-
gjøre rede for hvordan krefter kan forårsake krumlinjet bevegelse, og bruke dette i beregninger
-
beskrive elektriske og magnetiske felt og gjøre rede for krefter på objekter med masse og ladning i slike felt
Vi skal se på hvordan det elektriske feltet endrer seg når vi har flere partikler. Vi starter med å gå gjennom formlene vi trenger for å visualisere feltet. Et elektrisk felt oppstår fra en ladning, eller mellom ladninger, og følger formelen:
I tillegg trenger vi kraften som virker mellom to elektriske ladninger, Coulombs lov:
Vi skal nå sette disse sammen og bruke dem til å visualisere elektriske felter fra én partikkel, to partikler, og til slutt flere partikler.
Lage formlene vi trenger
Vi har et plan med en negativ ladning og en positiv ladning . Ladningen til disse to partiklene vil påvirke det elektriske feltet . Vi lager et punkt et tilfeldig sted unna og , og tegner opp det elektriske feltet som og lager i , se figur under. Partikkelen vil bidra med en elektrisk feltstyrke gitt ved , og tilsvarende vil partikkelen bidra med . Summen av disse to vektorene gir feltstyrkes som oppleves i punktet .
Vi ønsker nå å lage det vi kaller et vektorfelt, som viser hvor stor den elektriske feltstyrken er i hele området rundt partikkel og . Vi må da starte med å regne ut størrelsen til i en tilfeldig koordinat .
La oss starte med å la koordinatene til være , og koordinatene til være . Hvor stort er det elektriske feltet ved ? Vi legger sammen det elektriske feltet de to partiklene danner.
Utregningen av det elektriske feltet og lager er identisk, men vi må passe på fortegnet. Mer om det litt lengre ned.
Siden elektrisk feltstyrke er det feltet en positiv ladning opplever, så lar vi ha en positiv ladning lik . Det elektriske feltet punktet opplever fra den positive partikkelen blir dermed:
For å finne må vi vite avstanden mellom partikkelen og punktet . Bruker Pytagoras' setning.
Det siste vi trenger å vite er retningen på feltstyrken i punktet . Når vi gjør dette for hånd kan vi se på ladningen til partikkelen ( eller ) og så bestemme retningen på som opplever. Utfordringen er at når vi programmerer må vi gjøre dette automatisk. Dette er litt vrient, for hvis vi bruker formelen for som vi har vist over vil vi alltid få et positivt svar. Hvis vi bruker ladningen som utgangspunkt vil vi alltid få samme retning på feltet uavhengig hvor vi er i planet. Første figur viser hvis vi retningen på feltet i -retning hvis vi er tilhøyre for den positive partikkelen.
Andre figur viser hvis vi retningen på feltet i -retning hvis vi er til høyre for den positive partikkelen.
Ser at begge feltene har samme retning. Vi kan ordne dette ved å regne ut enhetsvektoren (). Denne har lengde 1 og retningen til feltet. Siden den har lengde 1 vil den ikke bidra til feltstyrken, og kun bidra til å gi retningen.
Siden vi har både over og under brøkstreken vil svaret alltid bli enten eller og dermed gi retningen. Det totalt uttrykket som en positiv partikkel vil opplever fra en annen partikkel med blir da:
Viser gjennom to eksempler
Eksempel 1
Hvis vi starter med å bruke koordinatsystemet i eksemplet over får vi følgende uttrykk hvis vi kun ser på -retningen:
Vi ser her at er positivt og ladningen , og kan dermed forkorte til
Dette stemmer siden den elektriske feltstyrken skal peke vekk fra partikkel som her er i positiv -retning.
Eksempel 2
Vi lar nå ligge til venstre for , se figur.
Vi ser her at er negativt og ladningen , og kan dermed forkorte til
Dette stemmer for nå må det elektriske feltet gå vekk fra partikkel , som er negativ -retning. Samme utregning vil gjelde for -retningen. Vi har dermed gjennom å legge til uttrykket , sørget for at vi ikke får et problem uansett hvor punktet ligger.
Programkode - monopol
[25]:
import numpy as np # Bibliotek for blant annet listefunksjonalitet og rutenett
import matplotlib.pyplot as plt # Bibliotek for plotting
from matplotlib.patches import Circle # Bibliotek for å lage en liten sirkel o.O
'''Funksjon for det elektriske feltet i et punkt (x, y)'''
def E(q, x_pos, y_pos, x, y):
r = ((x-x_pos)**2 + (y-y_pos)**2)**0.5 # Lengden på vektoren, bruker pytagoras
E_x = q * (x - x_pos) / r**3 # Det elektriske feltet i x-retning
E_y = q * (y - y_pos) / r**3 # Det elektriske feltet i y-retning
return E_x, E_y # Returnerer det elektriske feltet i x- og y-retning
''' Lager et rutenett med et gitt antall punkter'''
nx, ny = 100, 100 # Antall punkter i x- og y-retning
x = np.linspace(-10, 10, nx) # Intervall i x-retning
y = np.linspace(-10, 10, ny) # Intervall i y-retning
X, Y = np.meshgrid(x, y) # Lager rutenettet
'''Setter antallet partikler og lager tomme lister for ladning, og posisjonene i x- og y-retning'''
q = -1 # Ladningen (1 for positiv, -1 for negativ)
x_pos = 0 # x-koordinaten
y_pos = 0 # y-koordinaten
'''Lager en liste for det elektriske feltet i alle punktene'''
Ex = np.zeros((ny, nx))
Ey = np.zeros((ny, nx))
'''Den elektriske feltstyrken som alle punkter i planet opplever'''
Ex, Ey = E(q, x_pos, y_pos, X, Y) # Kaller på funksjonen på linje 6
'''Setter opp figurstørrelsen'''
fig = plt.figure(figsize = (10, 10)) # Størrelsen på plottet
ax = fig.add_subplot(111) # Mulighet for å legge plott over hverandre
'''Plotter det elektriske feltet med farger og piler'''
farge = np.log((Ex**2 + Ey**2)) # Setter fargen avhengig av feltet
ax.streamplot(x, y, Ex, Ey, color=farge, linewidth=1, cmap=plt.cm.inferno, # Setter parametere for plottet ...
density=3, arrowstyle='->', arrowsize=1.5) # ... og tegner plottet
'''Fargelegger ladningene røde/blå'''
charge_colors = {True: '#aa0000', False: '#0000aa'} # Fargekoden er i hexkode
ax.add_artist(Circle((x_pos, y_pos), 0.1, color=charge_colors[q>0])) # Fargelegger ladningene
'''Tegner rutenett'''
plt.grid() # Lager rutenett
plt.show() # Viser grafen
Programkode - dipol
[30]:
import numpy as np # Bibliotek for blant annet listefunksjonalitet og rutenett
import matplotlib.pyplot as plt # Bibliotek for plotting
from matplotlib.patches import Circle # Bibliotek for å lage en liten sirkel o.O
'''Funksjon for det elektriske feltet i et punkt (x, y)'''
def E(q, x_pos, y_pos, x, y):
r = ((x-x_pos)**2 + (y-y_pos)**2)**0.5 # Lengden på vektoren, bruker pytagoras
E_x = q * (x - x_pos) / r**3 # Det elektriske feltet i x-retning
E_y = q * (y - y_pos) / r**3 # Det elektriske feltet i y-retning
return E_x, E_y # Returnerer det elektriske feltet i x- og y-retning
''' Lager et rutenett med et gitt antall punkter'''
nx, ny = 100, 100 # Antall punkter i x- og y-retning
x = np.linspace(-10, 10, nx) # Intervall i x-retning
y = np.linspace(-10, 10, ny) # Intervall i y-retning
X, Y = np.meshgrid(x, y) # Lager rutenettet
'''Setter antallet partikler og lager tomme lister for ladning, og posisjonene i x- og y-retning'''
q = [1, -1] # Ladningene (1 for positiv, -1 for negativ)
x_pos = [-4, 4] # x-koordinatene
y_pos = [0, 0] # y-koordinatene
'''Lager en liste for det elektriske feltet i alle punktene'''
Ex = np.zeros((ny, nx))
Ey = np.zeros((ny, nx))
'''Den elektriske feltstyrken som alle punkter i planet opplever'''
Ex1, Ey1 = E(q[0], x_pos[0], y_pos[0], X, Y) # Kaller på funksjonen på linje 6
Ex2, Ey2 = E(q[1], x_pos[1], y_pos[1], X, Y) # Kaller på funksjonen på linje 6
Ex = Ex1 + Ex2
Ey = Ey1 + Ey2
'''Setter opp figurstørrelsen'''
fig = plt.figure(figsize = (10, 10)) # Størrelsen på plottet
ax = fig.add_subplot(111) # Mulighet for å legge plott over hverandre
'''Plotter det elektriske feltet med farger og piler'''
farge = np.log((Ex**2 + Ey**2)) # Setter fargen avhengig av feltet
ax.streamplot(x, y, Ex, Ey, color=farge, linewidth=1, cmap=plt.cm.inferno, # Setter parametere for plottet ...
density=3, arrowstyle='->', arrowsize=1.5) # ... og tegner plottet
'''Fargelegger ladningene røde/blå'''
charge_colors = {True: '#aa0000', False: '#0000aa'} # Fargekoden er i hexkode
ax.add_artist(Circle((x_pos[0], y_pos[0]), 0.1, color=charge_colors[q[0]>0])) # Fargelegger ladningene
ax.add_artist(Circle((x_pos[1], y_pos[1]), 0.1, color=charge_colors[q[1]>0])) # Fargelegger ladningene
'''Tegner rutenett'''
plt.grid() # Lager rutenett
plt.show() # Viser grafen