Hoe / wanneer wordt calculus gebruikt in de informatica?

Reacties

  • We hebben ' geen strikt beleid voor lijstvragen, maar er is een algemene afkeer . Let ook op deze en deze discussie; misschien wilt u uw vraag verbeteren om de problemen te vermijden die daar worden uitgelegd. Als u niet zeker weet hoe u uw vraag kunt verbeteren, kunnen we u misschien helpen in Computer Science Chat ?
  • Het lijkt erop dat u de veelgemaakte fout maakt aan te nemen dat de inhoud van elke cursus relevant moet zijn (voor elk carrièrepad). Soms gaat het erom je te leren hoe je op bepaalde manieren moet denken.
  • Opmerkingen zijn niet bedoeld voor uitgebreide discussie; dit gesprek is verplaatst naar chat .

Antwoord

Ik kan een paar cursussen bedenken waarvoor Calculus nodig is, rechtstreeks . Ik heb een vet lettertype gebruikt voor de gewoonlijk verplichte disciplines voor een graad in computerwetenschappen, en cursief voor de meestal optionele.

  • Computer Graphics / Beeldverwerking, en hier heb je ook analytische meetkunde en lineaire algebra nodig, zwaar ! Als je deze weg inslaat, wil je misschien ook wat differentiële meetkunde bestuderen (die multivariate calculus als minimumvereiste heeft). Maar je zult hier zelfs voor heel basale dingen Calculus nodig hebben: probeer bijvoorbeeld te zoeken naar “Fourier Transform” of “Wavelets” – dit zijn twee zeer fundamentele tools voor mensen die met afbeeldingen werken.
  • Optimalisatie , meestal niet-lineair, waarbij multivariate calculus de basistaal is die wordt gebruikt om alles te ontwikkelen. Maar zelfs lineaire optimalisatie profiteert van Calculus (de afgeleide van de objectieve functie is absoluut belangrijk)
  • Waarschijnlijkheid / Statistieken . Deze kunnen niet serieus worden bestudeerd zonder multivariate calculus.
  • Machine Learning , dat veel gebruik maakt van statistiek (en bijgevolg multivariate calculus)
  • Data Science en gerelateerde onderwerpen, die ook veel statistieken gebruiken;
  • Robotica , waarbij je fysieke bewegingen van een robot moet modelleren, dus je moet gedeeltelijke afgeleiden en gradiënten kennen. / li>
  • Discrete wiskunde en combinatoriek ( ja! , misschien heb je Calculus nodig voor discreet tellen!) – als je serieus genoeg bent over het genereren van functies, moet je weten hoe je bepaalde formules moet integreren en afleiden. En dat is handig voor Analysis of Algorithms (zie het boek van Sedgewick en Flajolet, “Analysis of Algorithms”). Evenzo kunnen Taylor Series en calculus nuttig zijn bij het oplossen van bepaalde soorten herhalingsrelaties, die worden gebruikt bij algoritme-analyse.
  • Analyse van algoritmen , waarbij u het begrip limiet vanaf het begin gebruikt (zie Landau-notatie, “little $ o $ ” – it “s gedefinieerd met behulp van een limiet)

Er kunnen andere zijn – dit is gewoon uit mijn hoofd.

En daarnaast profiteert een van indirect van een Calculus-cursus door te leren redeneren en argumenten uit te leggen met technische nauwkeurigheid. Dit is waardevoller dan studenten denk meestal.

Ten slotte – je hebt Calculus nodig om, nou ja, om te gaan met mensen van andere exacte wetenschappen en techniek. En het is niet ongebruikelijk dat een computerwetenschapper niet alleen moet praten, maar ook werk samen met een natuurkundige of een ingenieur.

Opmerkingen

  • Misschien had je een andere ervaring, maar ik vond calculus tamelijk nutteloos om te leren redeneren en argumenten rigoureus uit te leggen. Het werd onderwezen door het uit het hoofd en het matchen van patronen, ongeveer zoals de algebra en geometrie van de middelbare school.Aan de andere kant was het een vereiste voor verschillende hogere wiskundelessen die wel deze vaardigheden onderwezen, dus ik neem aan dat het niet ' t helemaal nutteloos was.
  • Ik kan me volledig verhouden tot het allerlaatste punt (indirecte voordelen). Ik werkte aan de theorie van programmeertalen en gebruikte calculus zelden rechtstreeks. Misschien was de meest directe toepassing in probabilistische computationele modellen (bijv. Plotkin & Jones probabilistic powerdomains). Toch ging mijn calculuscursus vooral over het bewijzen van dingen, en dit was heel erg waardevol. Een of twee calculuscursussen zijn IMHO nodig in elk serieus CS-programma, naast wat meer wiskunde (discrete wiskunde, logica, lineaire algebra, numerieke analyse, … en mogelijk categorieën, topologie, algebra, …).
  • Hier ' is een voorbeeld van hoe ik calculus nodig had in computergraphics: vloeiende interpolatiefuncties hebben in principe allemaal de vorm f(0) = 0 , f(1) = 1, f'(0) = f'(1) = 0, en je kunt andere beperkingen toevoegen waar je om geeft, bijvoorbeeld f'(0.5) = 1. Een tijdje geleden heb ik dit gebruikt om een aantal verschillende interpolatiepolynomen af te leiden voor het vloeiend maken van afbeeldingen.
  • Robotica kan waarschijnlijk worden uitgebreid tot elke vorm van fysica-modellering (wat volgens mij ook betrekking heeft op CG, in termen van belichting, ' s noemen het kinetische fysica-modellering). Dit omvat versnelling / snelheid, stuiteren / veren / vervorming, PID-regelaars, akoestiek, zwaartekracht …
  • Ik ' zal het indirecte punt als volgt verdedigen: beter dan welke les dan ook die ze daarvoor volgen, leert Calculus studenten dat ze ' niet simpelweg het aantal problemen kunnen tellen en kunnen inschatten hoeveel werk ermee gemoeid is.

Antwoord

Dit is enigszins obscuur, maar calculus duikt op in algebraïsche gegevenstypen. Voor elk bepaald type is het type van de één-hole-contexten de afgeleide van dat type. Zie deze uitstekende lezing voor een overzicht van het hele onderwerp. Dit is een zeer technische terminologie, dus laten we het uitleggen.

Algebraïsche gegevenstypen

Het kan zijn dat u tupels bent tegengekomen die worden aangeduid als producttypen (indien niet, het is omdat ze het cartesische product van twee soorten zijn). We nemen dit letterlijk en gebruiken de volgende notatie:

$$ a * b $$

Om een tuple, waarbij $ a $ en $ b $ beide typen zijn. Vervolgens bent u wellicht tegengekomen somtypen dit zijn typen die van het ene of het andere type kunnen zijn (bekend als vakbonden , varianten of als de Ofwel type (een beetje) in Haskell). We “nemen deze ook letterlijk en gebruiken de notatie:

$$ a + b $$

Deze worden genoemd zoals ze zijn, want als een type $ a $ $ heeft N_a $ waarden en een type $ b $ heeft $ N_b $ waarden, daarna het type $ a + b $ heeft $ N_a + N_b $ waarden.

Deze typen zien eruit als normale algebraïsche uitdrukkingen en we kunnen ze in feite als zodanig manipuleren (tot op zekere hoogte).

Een voorbeeld

In functionele talen is een algemene definitie van een lijst (hier in Haskell gegeven) deze:

data List a = Empty | Cons a List 

Dit zegt dat een lijst leeg is of een tuple van een waarde en een andere lijst. Als we dat omzetten in algebraïsche notatie, krijgen we:

$$ L (a) = 1 + a * L (a) $$

Waarbij $ 1 $ een type met één waarde vertegenwoordigt (ook bekend als het eenheidstype). Door herhaaldelijk in te voegen, kunnen we dit evalueren om een definitie te krijgen voor $ L (a) $ :

$$ L (a) = 1 + a * L (a) $$ $$ L (a) = 1 + a * (1 + a * L ( a)) $$ $$ L (a) = 1 + a + a ^ 2 * (1 + a * L (a)) $$ $$ L (a) = 1 + a + a ^ 2 + a ^ 3 * (1 + a * L (a)) $$ $$ L (a) = 1 + a + a ^ 2 + a ^ 3 + a ^ 4 + a ^ 5 … $$

(waarbij $ x ^ n $ is bedoeld in de zin van herhaalde vermenigvuldiging.)

Deze definitie zegt dan dat een lijst een eenheid of een tupel is van één item, of een tuple van twee items, of van drie etc, wat is de definitie van een lijst!

Contexten met één gat

Nu aan naar contexten met één gat: een context met één gat is wat u krijgt als u “een waarde uit een producttype haalt”. Laten we een voorbeeld geven:

Voor een eenvoudige 2-tupel die homogeen is, $ a ^ 2 $ , als we een waarde eruit halen , we krijgen slechts een 1-tuple, $ a $ .Maar er zijn twee verschillende contexten van dit type: namelijk de eerste en tweede waarde van het tupel. Dus aangezien het een van beide is, kunnen we schrijven dat het $ a + a $ is, wat natuurlijk $ 2 is een $ . Dit is waar de differentiatie om de hoek komt kijken. Laten we dit bevestigen met een ander voorbeeld:

Als je een waarde uit een 3-tupel haalt, krijg je een 2-tupel, maar er zijn drie verschillende varianten:

$$ (a, a, \ _) $$ $$ (a, \ _, a) $$ $$ (\ _, a, a) $$

Afhankelijk van waar we het gat plaatsen. Dit geeft ons $ 3a ^ 2 $ die inderdaad de afgeleide is van $ a ^ 3 $ . Er is een bewijs hiervan in het algemeen hier .

Laten we voor ons laatste voorbeeld een lijst gebruiken:

Als we onze originele uitdrukking voor een lijst gebruiken:

$$ L (a) = 1 + a * L (a) $$

We kunnen de volgorde wijzigen om:

$$ L (a) = \ frac {1} {1 – a} $$

(Op het eerste gezicht lijkt misschien onzin, maar als je de taylor-reeks van dit resultaat neemt, krijg je de definitie die we eerder hebben afgeleid.)

Als we dit nu differentiëren, g et een interessant resultaat:

$$ \ frac {\ partiële L (a)} {\ partiële a} = (L (a)) ^ 2 $$

Zo is één lijst een paar lijsten geworden. Dit is in feite logisch: de twee geproduceerde lijsten komen overeen met de elementen boven en onder het gat in de originele lijst!

Opmerkingen

  • Dit was geweldig inzichtelijk. Bedankt.

Antwoord

Numerieke methoden. Er bestaan omslachtige rekenproblemen die uniek zijn voor specifieke toepassingen, en ze hebben sneller oplossingen nodig dan een mens praktisch kan oplossen zonder een programma. Iemand moet een algoritme ontwerpen dat de oplossing berekent. Is dat niet het enige dat programmeurs onderscheidt van wetenschappers?

Opmerkingen

  • Gezien de " list " aard van deze vraag, moet elk antwoord proberen een volledig beeld te geven. Weet u zeker dat u wilt beweren dat numerieke methoden de enige instantie zijn?
  • Reacties zijn niet bedoeld voor uitgebreide discussie; dit gesprek is verplaatst naar chat .

Answer

Automatisering – Net als bij robotica, automatisering kan veel menselijk gedrag kwantificeren.

Berekeningen – Voor het vinden van oplossingen voor bewijzen is vaak calculus vereist.

Visualisaties – Het gebruik van geavanceerde algoritmen vereist calculus zoals cos, sinus, pi en e. Vooral als je aan het rekenen bent ting-vectoren, botsingsvelden en meshing.

Logistiek en risicoanalyse – Bepalen of een taak mogelijk, het risico dat ermee gepaard gaat en de mogelijke mate van succes.

Beveiliging – De meeste beveiliging kan worden uitgevoerd zonder calculus; veel mensen die uitleg willen, geven er echter de voorkeur aan in wiskundige uitdrukkingen.

AI – De basisprincipes van AI kan worden gebruikt zonder calculus; het berekenen van geavanceerd gedrag, zwermintelligentie / bijenkorfgeesten en op complexe waarden gebaseerde besluitvorming.

Medische berekeningen – Voor het visualiseren van de meeste gezondheidsgegevens is calculus vereist, zoals een ECG-meting.

Wetenschap & Engineering – Als je met bijna elke andere wetenschappelijke discipline werkt, heb je calculus nodig: lucht- en ruimtevaart, astrologie, biologie, scheikunde of techniek.

Veel mensen in programmeren kunnen hun hele carrière zonder calculus gebruiken; Het kan echter van onschatbare waarde zijn als u bereid bent om het werk te doen. Voor mij is het het meest effectief geweest op het gebied van automatisering, logistiek en visualisatie. Door specifieke patronen te identificeren, kunt u eenvoudig het patroon negeren, het patroon imiteren of een superieure methode allemaal samen.

Opmerkingen

  • Hoe gaat het met cos, sine, $ \ pi $ en $ \ mathrm {e} $ calculus?
  • Nou, $ \ exp (x) $ kan worden gedefinieerd als de unieke oplossing voor $ f (x) = f ' (x) $ met $ f ( 0) = 1 $, en op dezelfde manier kan sin, cos worden gedefinieerd als het unieke paar functies dat voldoet aan $ f ' (x) = g (x) $, $ g ' (x) = -f (x) $ met de juiste randvoorwaarden (ik denk dat $ f (0) = 0 $ en $ g (0) = 1 $ zouden moeten werken).
  • @DavidRicherby: Voorbeeld: hoe implementeer die functies bijvoorbeeld op een microcontroller zonder FPU? Als je wat calculus kent, weet je meteen een goed antwoord: machtreeksen.

Antwoord

Het is een feit dat de kans klein is dat je ooit calculus zult gebruiken. Echter, vrijwel elke andere wetenschappelijke discipline maakt gebruik van calculus en je werkt aan een bètadiploma. Er zijn bepaalde verwachtingen van wat een universitaire bètadiploma zou moeten betekenen en een van die dingen is dat je calculus kent. Zelfs als je het nooit zult gebruiken.

Het is oké als je slecht presteert in calculus, maar zorg ervoor dat je wat moeite doet in discrete wiskunde. Er zijn veel echte programmeerproblemen waarbij discrete wiskunde een rol speelt en onwetendheid over de principes ervan kan je in verlegenheid brengen in het bijzijn van andere codeerders.

Reacties

  • Je eerste paragraaf is volkomen verkeerd en grenst aan complottheorie. Er zijn genoeg gebieden in de informatica waar calculus nuttig is (zie de andere antwoorden voor eindeloze lijsten ervan). Natuurlijk, het ' is mogelijk om al deze gebieden te vermijden, maar het ' is erg misleidend om te beweren dat het laten vallen van een calculus geen impact heeft buiten cijfers.
  • Afhankelijk van je opleiding kun je een diploma behalen zonder ooit calculus te gebruiken, en ik denk zeker dat CS-majors niet ' er zo veel van nodig hebben zoals we krijgen. Maar als u er slecht in presteert, wordt u uitgesloten van enkele van de meest interessante gebieden van de informatica. Er is ' genoeg tijd om webontwikkelaar te worden als je eenmaal bent afgestudeerd; terwijl je op school zit, waarom probeer je jezelf dan niet een beetje te pushen?
  • @tsleyson Als je een webontwikkelaar wilt worden, bespaar dan het nodige geld en tijd om een CS-diploma te behalen.
  • @ScottB Je lijkt computerwetenschap te verwarren met programmeren.
  • @ScottB Wie ' zegt CS = math + programmeren? Ik pleit zelf al eeuwen tegen deze beperkte opvatting. Maar je hebt het ook omgekeerd: wiskunde is een integraal onderdeel van CS, net zoals het is voor natuurkunde. We hebben het nodig , zelfs als we het ' niet willen oefenen . (Dat gezegd hebbende, dit is niet de plaats voor deze discussie. Sluit je aan bij Computer Science Chat als je wilt doorgaan.)

Answer

Veel mensen leverden al applicaties in CS. Maar soms vind je Calculus wanneer je het het minst verwacht:

Afgeleiden van reguliere expressies opnieuw onderzocht

Als je het weet automaten is deze pdf misschien het lezen waard.

Opmerkingen

  • Ik zie ' geen differentiaalrekening daar; ik zie het woord " afgeleide ", maar ik zie ' niets lijkt op traditionele differentiaalrekening.
  • Het ' heet " formeel afgeleid ", en het is in zekere zin gerelateerd aan Calculus. Je zult dit ook zien gebeuren met Generating Functions, sommige formules gerelateerd aan discrete structuren en andere gebieden waar je ' t eigenlijk een " smooth-functie ".
  • @Jay: het belangrijkste is niet ' t de naam. Hoe begrijp ik ng calculus helpen?
  • Het wordt uitgelegd in deze Wikipedia-pagina . De formele afgeleide is een bewerking van elementen met een analgebraïsche structuur die polynomen bevat, en is formeel " vergelijkbaar met " de gebruikelijke regel voor differentiëren veeltermen echter – anders dan wat een student ziet in Calculus – zijn de veeltermen niet voorbij realen; het kunnen polynomen zijn over een willekeurige " ring " (een andere algebraïsche structuur). En er zijn praktische toepassingen van de formele afgeleide – ik heb er ten minste één gezien (algebraïsche cryptanalyse – kan ' de details niet onthouden).

Antwoord

Enkele meer specifieke voorbeelden:

  • Calculus wordt gebruikt om de deltaregel , waardoor sommige typen neurale netwerken kunnen leren.
  • Calculus kan worden gebruikt om de Fourier-transformatie van een oscillerende functie te berekenen, erg belangrijk in signaalanalyse.
  • Calculus wordt de hele tijd gebruikt in computergraphics, wat een zeer actief veld is omdat mensen voortdurend nieuwe technieken ontdekken. Voor een fundamenteel voorbeeld ga je naar Kajiya “s weergavevergelijking
  • Calculus is belangrijk op het gebied van computationele geometrie, onderzoek curve- en oppervlaktemodellering.

Antwoord

Aan deze andere uitstekende antwoorden voeg ik dit punt toe: nauwkeurigheid bij het testen .

Bij het maken van testcases voor sommige applicaties heb ik gebruik moeten maken van calculus om verwachte looptijden, geheugengroottes, en kies optimale parameters bij het afstemmen van datastructuren. Dit omvat het begrijpen van verwachte afrondingsfouten, enz.

Hoewel statistieken in andere antwoorden worden genoemd, wil ik specifiek Monte-carlo-algoritmen , zoals optimalisatie-algoritmen en enkele spaarzame streamingalgoritmen die zijn gebaseerd op wiskundige principes waaronder calculus.

Specifieke bedrijfstakken waar ik heb gewerkt waar calculus vereist was, zijn onder meer:

  • Financiën (een handelsplatform creëren)

  • Verzekering (numerieke integratie van verzekeringspolissen in what-if-scenarios om verwachte polisverliezen te berekenen)

  • Logistiek (optimaliseren van de consolidatie van transportroutes)

  • Signaalverwerking

Antwoord

Calculus – het integrale deel – wordt direct in CS gebruikt als basis voor het denken over sommatie. Als je een deel van de Concrete Mathematics-sectie van Knuth over sommatie doorloopt, zul je snel conventies herkennen die gebruikelijk zijn bij calculus: als je een deel van de doorlopende casus begrijpt, heb je hulpmiddelen om het discrete te beschouwen.

Veel van de toepassingen van je CS-onderzoek hebben betrekking op programmeersystemen die veranderingen volgen, of in sommige gevallen proberen de toekomst te voorspellen. De wiskunde rond die systemen is geworteld in differentiaalvergelijkingen en lineaire algebra, en differentiaalvergelijkingen zijn … calculus. Er zijn docenten zoals Gibert Vreemd die pleiten voor een snellere overgang naar het gedeelte differentiaalvergelijkingen, maar het is nog steeds een subset van calculus. Wanneer verandering afhangt van verandering in welk systeem dan ook, begint het onstabiel (en stabiel) te worden op manieren die zowel niet-intuïtief als erg goed begrepen. Om te begrijpen waarom je verstandige lineaire systeem zich niet-lineair gedraagt, heb je ofwel de tools van calculus nodig, ofwel moet je ze opnieuw uitvinden voor je probleemruimte.

En tot slot, CS vereist het lezen en begrijpen van het werk van anderen, en calculus is de eerste kennismaking met veel gedeelde woordenschat, conventie en geschiedenis.

Opmerkingen

  • " Veel van de toepassingen van uw CS-studie hebben betrekking op programmeersystemen die veranderingen volgen, of probeer in sommige gevallen de toekomst te voorspellen " – ik denk niet dat ' dit representatief is voor de meeste CS-studierichtingen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *