Hur / när används kalkyl i datavetenskap?

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Kommentarer

  • Vi har inte ' t har en strikt policy för listfrågor, men det finns en allmänt ogillar . Observera även detta och denna diskussion; du kanske vill förbättra din fråga för att undvika de problem som förklaras där. Om du inte är säker på hur du kan förbättra din fråga kanske vi kan hjälpa dig i Datavetenskapschatt ?
  • Du verkar göra det vanliga misstaget antar att innehållet i varje kurs måste vara relevant (för varje karriärväg). Ibland handlar det bara om att träna dig hur du tänker på vissa sätt.
  • Kommentarer är inte för längre diskussion; den här konversationen har flyttats till chatt .

Svar

Jag kan komma på några kurser som skulle behöva Calculus, direkt . Jag har använt djärvt ansikte för de vanligtvis obligatoriska disciplinerna för en datavetenskaplig examen och kursiv för de vanligtvis valfria.

  • Datorgrafik / Bildbehandling, och här behöver du också analytisk geometri och linjär algebra, kraftigt ! Om du går på den här vägen kanske du också vill studera någon differentiell geometri (som har en flervariat kalkyl som en minsta förutsättning). Men du behöver kalkyl här även för mycket grundläggande saker: försök att söka efter ”Fourier Transform” eller ”Wavelets”, till exempel – det här är två mycket grundläggande verktyg för människor som arbetar med bilder.
  • Optimering , oftast icke-linjär, där multivariat kalkyl är det grundläggande språket som används för att utveckla allt. derivat av objektivfunktionen är absolut viktigt)
  • Sannolikhet / Statistik . Dessa kan inte studeras på allvar utan multivariate Calculus.
  • Machine Learning , som använder tung statistik (och följaktligen multivariat Calculus)
  • Datavetenskap och relaterade ämnen, som också använder mycket statistik;
  • Robotics , där du kommer att behöva modellera fysiska rörelser hos en robot, så du måste känna till partiella derivat och gradienter.
  • Diskret matematik och kombinatorik ( ja! , du kan behöva Calculus för diskret räkning!) – om du blir seriös nog med att generera funktioner, måste du veta hur man kan integrera och härleda vissa formler. Och det är användbart för analys av algoritmer (se boken av Sedgewick och Flajolet, ”Analys av algoritmer”). På samma sätt kan Taylor Series och calculus vara användbara för att lösa vissa typer av återfallsrelationer, som används i algoritmanalys.
  • Analys av algoritmer , där du använder begreppet gräns redan från början (se Landau-notation, ”liten $ o $ ” – det är definieras med en gräns)

Det kan finnas andra – det här ligger precis ovanför mitt huvud.

Och förutom det gynnar man indirekt från en Calculus-kurs genom att lära sig att resonera och förklara argument med teknisk noggrannhet. Detta är mer värdefullt än studenter tänker vanligtvis.

Slutligen – du kommer att behöva Calculus för att, ja, interagera med människor från andra exakta vetenskaper och teknik. Och det är inte ovanligt att en datavetare behöver inte bara prata utan också arbeta tillsammans med en fysiker eller en ingenjör.

Kommentarer

  • Du kanske hade en annan upplevelse, men jag tyckte att kalkylen var ganska värdelös för att lära mig att resonera och förklara argument noggrant. Det undervisades av rote och mönstermatchning ungefär som gymnasialgebra och geometri.Å andra sidan var det förutsättningen för flera högre matematikklasser att lärde ut dessa färdigheter, så jag antar att det inte var ' t helt värdelöst.
  • Jag kan helt relatera till den allra sista punkten (indirekta fördelar). När jag arbetade med programmeringsspråksteori använde jag sällan kalkyl direkt. Den kanske mest direkta applikationen var i probabilistiska beräkningsmodeller (t.ex. Plotkin & Jones probabilistiska kraftdomäner). Ändå handlade min beräkningskurs mest om att bevisa saker, och det här var mycket, mycket värdefullt. En eller två kalkylkurser krävs IMHO i alla seriösa CS-program, längs lite mer matematik (diskret matematik, logik, linjär algebra, numerisk analys, … och möjligen kategorier, topologi, algebra, …).
  • Här är ' ett exempel på hur jag behövde kalkyl i datorgrafik: Smidiga interpoleringsfunktioner kommer i princip alla att ha formen f(0) = 0 , f(1) = 1, f'(0) = f'(1) = 0, och du kan lägga till andra begränsningar du bryr dig om, till exempel f'(0.5) = 1. För en liten stund sedan använde jag detta för att härleda några olika interpolationspolynom för att jämna ut bilder.
  • Robotik kan antagligen utökas till alla typer av fysikmodellering (vilket jag antar också täcker CG, när det gäller belysning, så låt ' kallar det kinetisk fysikmodellering). Detta inkluderar acceleration / hastighet, studsar / fjädrar / deformation, PID-styrenheter, akustik, gravitation …
  • I ' Jag kommer att kämpa indirekt på detta sätt: bättre än någon klass de läser tidigare, lär Calculus eleverna att de kan ' t helt enkelt räkna antalet problem och uppskatta hur mycket arbete som kommer att involveras.

Svar

Detta är något oklart, men kalkylen dyker upp i algebraiska datatyper. För vilken typ som helst är typen av enhålssammanhang härledd av den typen. Se detta utmärkta samtal för en översikt över hela ämnet. Det här är väldigt teknisk terminologi, så låt oss förklara.

Algebraiska datatyper

Du kanske har stött på tuplar som kallas produkttyper inte, det beror på att de är den kartesiska produkten av två typer). Vi ska ta det här bokstavligt och använda notationen:

$$ a * b $$

Att representera en tuple, där $ a $ och $ b $ är båda typerna. Därefter kan du ha stött på sumtyper det här är typer som kan vara antingen en eller annan typ (känd som fackföreningar , varianter eller som antingen typ (kinda) i Haskell). Vi kommer också att ta den här bokstavligen och använda notationen:

$$ a + b $$

Dessa namnges som de är eftersom om en typ $ a $ har $ N_a $ -värden och en typ $ b $ har $ N_b $ -värden, sedan typen $ a + b $ har $ N_a + N_b $ värden.

Dessa typer ser ut som normala algebraiska uttryck och vi kan faktiskt manipulera dem som sådana (till en punkt).

Ett exempel

På funktionella språk är en vanlig definition av en lista (ges i Haskell här) den här:

data List a = Empty | Cons a List 

Detta säger att en lista är antingen tom eller en tupel av ett värde och en annan lista. Omvandla det till algebraisk notation får vi:

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

Där $ 1 $ representerar en typ med ett värde (även kallad enhetstyp). Genom att infoga flera gånger kan vi utvärdera detta för att få en definition för $ 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 … $$

(Where $ x ^ n $ menas i betydelsen upprepad multiplikation.)

Denna definition säger då att en lista antingen är enhet eller en tuple av ett objekt, eller en tuple av två objekt, eller av tre etc, vilket är definitionen av en lista!

Enhåls-sammanhang

Nu på till ett håls sammanhang: ett håls sammanhang är vad du får när du ”tar ett värde ur” en produkttyp. Låt oss ge ett exempel:

För en enkel 2-tupel som är homogen, $ a ^ 2 $ , om vi tar ut ett värde , vi får bara en 1-tupel $ a $ .Men det finns två olika enhålssammanhang av denna typ: nämligen tupelns första och andra värden. Så eftersom det är någon av dessa kan vi skriva att det är $ a + a $ , vilket naturligtvis är $ 2 en $ . Det är här differentieringen kommer in för att spela. Låt oss bekräfta detta med ett annat exempel:

Att ta ett värde ur en 3-tupel ger en 2-tupel, men det finns tre olika varianter:

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

Beroende på var vi placerar hålet. Detta ger oss $ 3a ^ 2 $ vilket verkligen är derivatet av $ a ^ 3 $ . Det finns ett bevis på detta i allmänhet här .

För vårt sista exempel, låt oss använda en lista:

Om vi tar vårt ursprungliga uttryck för en lista:

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

Vi kan ordna om för att få:

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

(På ytan detta kan verka som nonsens, men om du tar taylor-serien av detta resultat får du den definition som vi härledde tidigare.)

Nu om vi skiljer detta, g och ett intressant resultat:

$$ \ frac {\ partial L (a)} {\ partial a} = (L (a)) ^ 2 $$

Således har en lista blivit ett par listor. Detta är faktiskt vettigt: de två listorna som produceras motsvarar elementen ovanför och under hålet i originallistan!

Kommentarer

  • Detta var underbart insiktsfull. Tack.

Svar

Numeriska metoder. Det finns besvärliga kalkylproblem som är unika för specifika applikationer, och de behöver lösningar snabbare än en människa praktiskt taget kan lösa utan ett program. Någon måste utforma en algoritm som beräknar lösningen. Är det inte det enda som skiljer programmerare från forskare?

Kommentarer

  • Med tanke på " lista " den här frågan, varje svar ska försöka ge hela bilden. Är du säker på att du vill hävda att numeriska metoder är enda instansen?
  • Kommentarer är inte för längre diskussion; den här konversationen har flyttats till chatt .

Svar

Automation – Liknar robotik, automatisering kan kräva kvantifiering av mycket mänskligt beteende.

Beräkningar – Att hitta lösningar på bevis kräver ofta beräkning.

Visualiseringar – Att använda avancerade algoritmer kräver beräkning som cos, sinus, pi och e. Speciellt när du beräknar tingvektorer, kollisionsfält och ingrepp.

Logistik och riskanalys – Bestämma om en uppgift är möjlig, risken och möjlig framgångsgrad.

Säkerhet – Mest säkerhet kan utföras utan kalkyl; men många som vill ha förklaringar föredrar det i matematiska uttryck.

AI – Grunderna i AI kan användas utan kalkyl; dock beräkning av avancerat beteende, svärmintelligens / bikupesinn och komplexa värderingsbaserade beslutsfattande.

Medicinska beräkningar – För att visualisera de flesta hälsodata krävs beräkning som en EKG-avläsning.

Science & Engineering – När man arbetar med nästan vilken annan vetenskaplig disciplin som helst krävs kalkyl: flyg, astrologi, biologi, kemi eller teknik.

Många människor inom programmering kan gå hela sin karriär utan med hjälp av kalkyl; Det kan dock vara ovärderligt om du är villig att göra jobbet. För mig har det varit mest effektivt inom automatisering, logistik och visualisering. Genom att identifiera specifika mönster kan du helt enkelt ignorera mönstret, imitera mönstret eller utveckla ett överlägsen metod tillsammans.

Kommentarer

  • Hur är cos, sinus, $ \ pi $ och $ \ mathrm {e} $ calculus?
  • Jo, $ \ exp (x) $ kan definieras som den unika lösningen på $ f (x) = f ' (x) $ med $ f ( 0) = 1 $, och på samma sätt kan sin, cos definieras som det unika paret av funktioner som uppfyller $ f ' (x) = g (x) $, $ g ' (x) = -f (x) $ med lämpliga gränsvillkor (jag tycker att $ f (0) = 0 $ och $ g (0) = 1 $ borde fungera).
  • @ DavidRicherby: Exempel: hur implementerar du dessa funktioner på, säg, en mikrokontroller utan FPU? Om du känner till någon kalkyl vet du omedelbart ett bra svar: power series.

Svar

Faktum är att det är mycket liten chans att du någonsin kommer att använda kalkyl. Men praktiskt taget alla andra vetenskapliga ämnen ANVÄNDER kalkyl och du arbetar med en naturvetenskaplig examen. Det finns vissa förväntningar på vad en universitetsvetenskapsexamen ska betyda och en av dessa saker är att du känner till kalkyl. Även om du aldrig kommer att använda den.

Det är okej om du gör dåligt i kalkylen, men se till att du lägger lite ansträngning på diskret matematik. Det finns många verkliga programmeringsproblem där diskret matematik spelar in och okunnighet om dess principer kan genera dig inför andra kodare.

Kommentarer

  • Ditt första stycke är helt fel och gränsar till konspirationsteori. Det finns gott om områden inom datavetenskap där kalkyl är användbar (se de andra svaren för oändliga listor över dem). Visst, det är ' möjligt att undvika alla dessa områden men det ' är mycket vilseledande att hävda att tappning av kalkyl kommer att ha noll effekt utöver betyg.
  • Beroende på ditt utbildningsprogram kan du slutföra en examen utan att någonsin använda kalkyl, och jag tror definitivt att CS-huvudämnen inte behöver ' t behöver så mycket av det som vi får. Men att göra dåligt i det kommer att låsa dig bort från några av de mest intressanta områdena inom datavetenskap. Det finns ' gott om tid att vara webbutvecklare när du har tagit examen; medan du är i skolan, varför inte försöka trycka dig lite?
  • @tsleyson Om du vill vara webbutvecklare, spara pengarna och den tid som behövs för att få en CS-examen.
  • @ScottB Du verkar förväxla datalogi med programmering.
  • @ScottB Vem ' säger CS = matematik + programmering? Jag har själv förespråkat denna begränsade uppfattning i åldrar. Men du har det också bakåt: matematik är en integrerad del av CS, precis som fysik. Vi behöver det, även om vi inte ' t vill öva det. (Med detta sagt är det här inte platsen för denna diskussion. Gå med oss till Datavetenskapschatt om du vill fortsätta.)

Svar

Många har redan tillhandahållit applikationer i CS. Men ibland hittar du Calculus när du minst förväntar dig:

Derivat med reguljära uttryck granskas om igen

Om du vet automatisera denna pdf kan vara värt att läsa.

Kommentarer

  • Jag ser inte ' där; jag ser ordet " derivat ", men jag ser inte ' liknar traditionell differentialräkning.
  • Det ' kallas " formellt derivat ", och det är relaterat till Calculus, på ett sätt. Du kommer också att se detta gjort med att generera funktioner, några formler relaterade till diskreta strukturer och andra områden där du inte ' t har faktiskt en " smidig funktion ".
  • @Jay: Det viktiga är inte ' t namnet. Hur förstår man ng calculus help with it?
  • Det förklaras i denna Wikipedia-sida . Det formella derivatet är en operation på element av analgebraisk struktur som innehåller polynomier, och det är formellt " som " den vanliga regeln för differentiering polynomier, emellertid – annorlunda än vad en student ser i Calculus – polynomierna är inte över verkligheter; de kan vara polynomer över en godtycklig " ring " (en annan algebraisk struktur). Och det finns praktiska tillämpningar av det formella derivatet – jag har sett minst en (algebraisk kryptanalys – kan ' inte komma ihåg detaljerna).

Svar

Några mer specifika exempel:

  • Calculus används för att härleda delta-regel , vilket gör det möjligt för vissa typer av neurala nätverk att ”lära sig”.
  • Calculus kan användas för att beräkna Fourier-transformationen av en oscillerande funktion, mycket viktigt i signalanalys.
  • Kalkyl används hela tiden i datorgrafik, vilket är ett mycket aktivt fält när människor ständigt upptäcker nya tekniker. För ett grundläggande exempel, kolla in Kajiyas återgivningsekvation
  • Kalkyl är viktig inom beräkningsgeometri, undersök kurv- och ytmodellering.

Svar

Till dessa andra utmärkta svar lägger jag till denna punkt: noggrannhet vid testning .

När jag skapade testfall för vissa applikationer har jag varit tvungen att använda kalkyl för att förutsäga förväntade körtider, minnesstorlekar, och välj optimala parametrar vid inställning av datastrukturer. Detta inkluderar att förstå förväntat avrundningsfel etc.

Även om statistik nämns i andra svar vill jag specifikt nämna Monte-carlo-algoritmer , såsom optimeringsalgoritmer och några sparsamma strömningsalgoritmer som bygger på matematiska principer som inkluderar calculus.

Specifika branscher där jag har arbetat där calculus krävdes inkluderar:

  • Finance (skapa en handelsplattform)

  • Försäkring (numerisk integrering av försäkringar i vad-om-scenarier för att beräkna förväntade försäkringsförluster)

  • Logistik (optimering av konsolideringen av transportvägar)

  • Signalbehandling

Svar

Calculus – den integrerade delen – används direkt i CS som en grund för att tänka på summering. Om du arbetar igenom någon del av Knuths betongmatematikavsnitt om summering kommer du snabbt att känna igen konventioner som är gemensamma för kalkylen: att förstå en del av det kontinuerliga fallet ger dig verktyg för att beakta det diskreta.

Många av användningsområdena i din CS-studie involverar programmeringssystem som övervakar förändring, eller i vissa fall försöker förutsäga framtiden. Matematiken kring dessa system är rotad i differentiella ekvationer och linjär algebra, och differentiella ekvationer är … calculus. Det finns lärare som Gibert Strang som förespråkar att man går snabbare in i differentialekvationerna, men det är fortfarande en delmängd av kalkyl. När förändring beror på förändring i något system, börjar det vara instabilt (och stabilt) på sätt som både är icke-intuitiva och mycket För att förstå varför ditt förnuftiga linjära system beter sig på ett olinjärt sätt behöver du antingen verktyg för kalkyl eller så måste du uppfinna dem igen för ditt problemutrymme.

Och slutligen, CS ofta kräver läsning och förståelse för andras arbete, och kalkyl är den första exponeringen för mycket gemensamt ordförråd, konvention och historia.

Kommentarer

  • " Många av användningarna av din CS-studie innefattar programmeringssystem som övervakar förändring, eller i vissa fall, försök att förutsäga framtiden " – Jag tycker inte ' att detta är representativt för kraftiga CS-studier.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *