Hoe een richtingsveld te plotten met Python (2024)

met behulp van matplotlib.pyplot.quiver() en vergelijkingsmethoden met rechte lijnen.

Oluwatosin Odubanjo

·

Volgen

8 min gelezen

·

27 december 2021

--

Hoe een richtingsveld te plotten met Python (2)

trefwoorden:• Python • oneAPI • Richtingsveld • Differentiaalvergelijking • Gegevensparallelle Python • Heterogeen computergebruik • High Performance Computing
• Intel®-distributie voor Python*

Een Direction Field (DF) is ook bekend als een Slope-veld, het is een grafische weergave van de oplossingen van differentiaalvergelijkingen (DE's) van de vorm:

Hoe een richtingsveld te plotten met Python (3)

WaarFis een functie van twee variabelen:XEnj.

1.1. Waarom moeten we een richtingsveld plotten

Het gedrag van een DE en zijn oplossingen begrijpen.

1.2. Gedrag van een differentiaalvergelijking

Gewoonlijk willen we een differentiaalvergelijking onderzoeken om de interacties van de variabelen te begrijpen, dat wil zeggen de relaties die tussen de variabelen bestaan. Het begrijpen van deze relaties / interacties is wat helpt bij het vaststellen van conclusies uit het verleden, het heden en de toekomst. Ook de oplossingen van een DE zijn een gevolg van deze relaties/interacties.

De constructie van een richtingsveld (DF) is meestal de eerste stap bij het onderzoeken van een differentiaalvergelijking (DE).

De constructie van een DF van een DE vereist niet dat we eerst de DE oplossen. We hoeven de gegeven functie alleen maar herhaaldelijk te evalueren over een raster van punten, die numerieke intervallen zijn. Bovendien kunnen DF's worden gebouwd voor zelfs de meest uitdagende DE's.

Ten slotte hebt u een computer en geschikte toepassingssoftware nodig om een ​​bepaalde functie herhaaldelijk over een numeriek interval te evalueren.

2.1. Hoe een richtingsveld (DF) te construeren

1. Teken een rechthoekig raster van een paar honderd punten;

2. Evalueer de gegeven functie, (DE), op elk punt: Teken op elk punt een kort lijnstuk waarvan de helling gelijk is aan de waarde van de functie op dat punt. Elk getekend lijnstuk is de raaklijn aan de grafiek van de oplossing die door dat punt gaat.

De functie numpy.arange() wordt gebruikt om een ​​array van een reeks getallen van het type integer, float, te genereren.

Hoe een richtingsveld te plotten met Python (4)

Bekijk hier de syntaxis voor de functie numpy.arange():

De functie numpy.meshgrid() wordt gebruikt om een ​​rechthoekig raster te maken uit twee gedeclareerde eendimensionale arrays.

Hoe een richtingsveld te plotten met Python (5)

Bekijk hier de syntaxis voor de functie numpy.meshgrid():

Een quiverplot is een soort 2D-plot die is opgebouwd uit vectorlijnen. Deze vectorlijnen hebben de vorm van pijlen om de richting van de vectoren aan te geven (de lijnen kunnen echter zonder pijlen worden getekend). Deze plots worden voornamelijk gebruikt om hellingen / hellingen te visualiseren.

De functie matplotlibrary quiver() wordt gebruikt om een ​​vectorveld te visualiseren over een raster van punten die numerieke intervallen zijn; de vector op een punt vertegenwoordigt de grootte van de veldvector op dat punt.

Bekijk hier de syntaxis voor de functie matplotlib.pyplot.quiver():

A. Met pijlen:

Hoe een richtingsveld te plotten met Python (6)

B. Zonder pijlen:

Hoe een richtingsveld te plotten met Python (7)

6.1. Normalisatie

Bij het plotten van het richtingsveld van een differentiaalvergelijking kunnen we, als we alleen maar specifiek zijn over de richting, de lijnen tekenen met en zonder pijlen van lengte-eenheid - dit wordt normalisatie genoemd.

6.2 Genormaliseerd richtingsveld voor y’ (x) = x + sin(y)

A. Met pijlen:

Hoe een richtingsveld te plotten met Python (8)

B. Zonder pijlen:

Hoe een richtingsveld te plotten met Python (9)
Hoe een richtingsveld te plotten met Python (10)

8.1. Differentiaalvergelijking (DE) van een vallend object

De DE die de beweging beschrijft van een vallend object in de atmosfeer nabij zeeniveau wordt gegeven als:

Hoe een richtingsveld te plotten met Python (11)

waar:

m = massa van het object in kilogram (kg)

dv/dt = versnelling van het object in meter/(seconde^2)

g = versnelling door zwaartekracht ongeveer gelijk aan 9,8 meter /(seconde^2)

Cd = weerstandscoëfficiënt (constante waarde die varieert van object tot object)

v = snelheid van het object in meter/seconde

Om de vergelijking (8.1) op te lossen moeten we een functie v = v(t) vinden die aan de vergelijking voldoet. Onze zorg is echter om te laten zien hoe het richtingsveld moet worden uitgezet; om dit te doen, kunnen we waarden toekennen aan ‘M'En'CD'.Bijvoorbeeld, met respectievelijk 10kg en 2. Deze waarden zouden de vergelijking vereenvoudigen tot:

Hoe een richtingsveld te plotten met Python (12)

We kunnen nu het richtingsveld plotten voor vergelijking (8.2):

Hoe een richtingsveld te plotten met Python (13)

8.2 Evenwichtsoplossing van een differentiaalvergelijking (DE)

De evenwichtsoplossing van een DE wordt ook wel de balansoplossing van de DE genoemd. Het wordt verkregen wanneer we de linkerkant van de DE gelijk maken aan nul en vervolgens de afhankelijke variabele oplossen. Bij de evenwichtsoplossing is de DE constant in de tijd. Voor vergelijking (8.2) is v(t) = 49 de evenwichtsoplossing. In de bovenstaande grafiek zien we dat bij waarde v(t) = 49, de DE niet met de tijd verandert.

Nu plotten we de evenwichtsoplossing bovenop het richtingsveld:

Hoe een richtingsveld te plotten met Python (14)

8.3 Python-code: vallend object

De onderstaande afbeelding toont de python-code die is gebruikt bij het genereren van de grafieken voor de richtingsveld- en evenwichtsoplossing van de differentiaalvergelijking van een vallend object als massa = 10 kg en weerstandscoëfficiënt = 2 kg/seconde.

Hoe een richtingsveld te plotten met Python (15)

De Python-scripts die worden gebruikt bij het genereren van de richtingsvelden die in dit bericht worden gebruikt, kunnen worden gedownload vangithubmet behulp van de volgende stappen:

1. Kloonrepository:

$ git-kloonhttps://github.com/olutosinbanjo/plots.git

$ wijzig de directory in de map direction_field

OF

2. Download het zip-bestand

$ Ga naarhttps://github.com/olutosinbanjo/plots.git

$Zip downloaden

$ bestand uitpakken

$ wijzig de directory in de map direction_field

Ook kan een pdf-formaat van dit bericht worden gedownload van dezelfde github-repository:

$ Kloon of download zip-bestand

$ wijzig de directory in de map direction_field

$ verander de map naar de doc-map

Intel® DevMesh-project —Richting Veldvisualisatie met Python

Het project is een Intel oneAPI-project en het is een uitbreiding van dit mediumartikel.

10.1 Doelstellingen

De reikwijdte van dit project is wiskunde, numerieke/wetenschappelijke informatica en high performance computing en de case study differentiaalvergelijking is de differentiaalvergelijking van een vallend object.

Het algemene doel van dit project is om de visualisatie van een richtingsveld met Python te demonstreren. Concreet beoogt het project de volgende doelstellingen aan te pakken:

O1.De differentiaalvergelijking van een vallend voorwerp als casus gebruiken.

O2.Open source applicatiesoftware gebruiken bij het ontwikkelen van programma's voor de richtingsveldplot.

O3.Het numerieke pakket van de python-software (numpy) verkennen bij het ontwikkelen van programma's voor de richtingsveldplot.

O4.Om de functionaliteit van de in O3 ontwikkelde programma's uit te breiden. met pakketten die worden geleverd in de Intel's Distribution for Python* (IDP*) om heterogeen computergebruik te demonstreren.

O5.Om de mogelijkheden te onderzoeken om de prestaties van de python-programma's die in 03 zijn ontwikkeld, te verbeteren met het gegevensparallelle pakket dat door Intel wordt aangeboden.

10.2 Aanpak

De implementatie van een richtingsveldplot met python is gebaseerd op twee methoden:

• De matplotlib.pyplot.quiver() (MPQ)-methode

• De lineaire vergelijkingsmethode (SLE).

Ik beschouw deze twee methoden voor het vergelijken van prestaties op basis van het tijdstip van uitvoering en voor het verkennen van de volgende pakketten in de Intel® Distribution of Python* (IDP*):

  1. Numpy - een geoptimaliseerd numeriek Python-pakket.
  2. De numba.prange-expressie geleverd door Numba* — een open-source, NumPy-bewuste optimaliserende compiler voor Python, ontwikkeld door Anaconda, Inc in samenwerking met een open-source gemeenschap.
  3. SYCL-gebaseerde XPU-programmering geleverd door Data Parallel Python (DPPY). De volgende pakketten in DPPY worden onderzocht:

• Data Parallel Control (dpctl) — Een pakket voor het besturen van de uitvoering op SYCL-apparaten en voor SYCL USM-gegevensbeheer.

  • Numba_dppy — Een zelfstandige uitbreiding van Numba die SYCL-kernelprogrammering toevoegt aan Numba*.

10.3 Gebruikte technologieën

Ontwikkelomgeving:Intel devcloud — voor het ontwikkelen, testen en uitvoeren van het project.

Intel®Hardware:Intel® Xeon® E-2176G.

oneAPI-toolkit(s):oneAPI AI-analysetoolkit.

Programmeerondersteuning:Intel® Distributie voor Python*.

10.4 Prestatieresultaten

De verkregen prestatieresultaten laten zien dat het best presterende programma is gebaseerd op de methode matplotlib.pyplot.quiver() en de extra functionaliteit heeft van het data parallel control (dpctl)-pakket aangeboden door IDP*, waardoor het kan worden uitgevoerd op de Integrated Graphics, Intel ® UHD Graphics P630 [0x3e96] van de Intel® E-2176G-processor.

10.5 Documenten en Codes

Een volledige documentatie voor het project kan worden verkregen opIntel DevMeshen verdergithub.

De python-programma's die in het project worden gebruikt, worden hierin op github gehostopslagplaats.

  1. W. E. Boyce en R. C. DiPrima, Elementaire differentiaalvergelijkingen en randwaardeproblemen, achtste editie. VS: John Wiley & Sons, Inc., 2005.
  2. S. Holzner, Differentiaalvergelijkingen voor Dummies. Indiana: Wiley Publishing, Inc., 2008.
  3. BD Bunday en H. Mulholland, Pure Mathematics for Advanced Level, tweede editie. Heinemann Educatieve boeken (Nigeria) Plc, 2004.
  4. P. Howard, "Gewone differentiaalvergelijkingen in matlab", 2003.
  5. P. Dawkins, "Paul's online aantekeningen." [Online]. Beschikbaar:hier.
  6. Mic, "Genereer hellingsvelden in r en python", R-bloggers, 2015. [Online]. Beschikbaar:hier.

Bedankt voor het lezen!

Hoe een richtingsveld te plotten met Python (2024)
Top Articles
Latest Posts
Article information

Author: Msgr. Benton Quitzon

Last Updated:

Views: 6068

Rating: 4.2 / 5 (43 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Msgr. Benton Quitzon

Birthday: 2001-08-13

Address: 96487 Kris Cliff, Teresiafurt, WI 95201

Phone: +9418513585781

Job: Senior Designer

Hobby: Calligraphy, Rowing, Vacation, Geocaching, Web surfing, Electronics, Electronics

Introduction: My name is Msgr. Benton Quitzon, I am a comfortable, charming, thankful, happy, adventurous, handsome, precious person who loves writing and wants to share my knowledge and understanding with you.