Bisektionsmetodens algoritme med eksempler

Smart resume

Bisektionsmetoden er en pรฅlidelig numerisk teknik, der finder roden af โ€‹โ€‹en kontinuert funktion ved gentagne gange at halvere et interval, hvor funktionen skifter fortegn. Den er enkel, garanteret konvergerende og bruges i vid udstrรฆkning inden for ingeniรธrvidenskab, videnskabelig datalogi og numerisk analyse for begyndere.

  • โž— Kerneidรฉ: Halvรฉr gentagne gange en parentes [a, b], hvor f(a) og f(b) har modsatrettede fortegn, indtil intervallet krymper til under en tolerance.
  • ๐Ÿ“ Teoretisk grundlag: Bygget direkte pรฅ mellemvรฆrdisรฆtningen, som garanterer, at der findes en rod, nรฅr funktionen skifter fortegn i et kontinuert interval.
  • ๐Ÿ” Konvergensadfรฆrd: Lineรฆr konvergens med en halvering af fejlen pr. iteration, hvilket giver forudsigelige, men relativt langsomme forbedringer af nรธjagtigheden.
  • โœ… Styrker: Konvergerer altid for gyldige parenteser, krรฆver kun funktionsvรฆrdier og er nem at implementere i ethvert programmeringssprog.
  • ๐Ÿงช Praktisk brug: Nyttig til lรธsning af ikke-lineรฆre ligninger inden for fysik, finans, maskinlรฆringssรธgning med hyperparametere og AI-drevne numeriske ligningslรธsere.

Hvad er bisektionsmetoden?

Bisektionsmetoden er en af โ€‹โ€‹de mest grundlรฆggende numeriske teknikker til at finde roden af โ€‹โ€‹et polynomium eller en transcendental ligning. Den fungerer ved at indsรฆtte det interval, der indeholder roden, i parentes og derefter opdele dette interval i halvdele ved hver iteration, indtil roden er placeret inden for en acceptabel tolerance. Pรฅ grund af denne parentesadfรฆrd kaldes bisektionsmetoden ogsรฅ for bracketingmetoden.

Da dens funktionsmekanisme minder om binรฆr sรธgning, er bisektionsmetoden ogsรฅ kendt som den binรฆre sรธgemetode, halveringsmetoden eller dikotomimetoden. Den hviler pรฅ et stรฆrkt teoretisk fundament: mellemvรฆrdisรฆtningen, som garanterer, at en kontinuerlig funktion, der รฆndrer fortegn over et interval, skal krydse nul et sted inden for dette interval.

Med den grundlรฆggende definition pรฅ plads, lad os undersรธge, hvorfor det er vigtigt at finde rรธdderne i ligninger, og hvordan bisektionsmetoden passer ind i det bredere billede.

Finde ligningers rรธdder

I denne diskussion fokuserer vi kun pรฅ ligninger med รฉn uafhรฆngig variabel. Sรฅdanne ligninger kan vรฆre lineรฆre eller ikke-lineรฆre. Lineรฆre ligninger beskriver grafen for en ret linje, mens ikke-lineรฆre ligninger beskriver kurver og mere komplekse former.

Roden af โ€‹โ€‹en ligning er vรฆrdien af โ€‹โ€‹den uafhรฆngige variabel, der opfylder ligningen. For eksempel er roden af โ€‹โ€‹ligningen f(x) = 4 โ€“ x2 = 0 er 2, fordi f(2) = 4 โ€“ 22 = 0.

Lad os betragte f(x) som en reel kontinuert funktion. Ifรธlge mellemvรฆrdisรฆtningen har ligningen f(x) = 0 mindst รฉn rod mellem a og b, nรฅr f(a)f(b) < 0. Med andre ord har funktionen f(x) en rod, "c", et sted mellem a og b.

Finde ligningers rรธdder

Denne fortegnsรฆndringsegenskab er prรฆcis, hvad Bisection-metoden udnytter. Det nรฆste afsnit viser, hvordan denne idรฉ ser grafisk ud.

Grafisk reprรฆsentation af bisektionsmetoden

Fรธlgende graf reprรฆsenterer bisektionsmetodens virkemรฅde. Ud fra grafen kan vi se, at den faktiske rod af ligningen er markeret med rรธdt.

Proceduren kan opsummeres som fรธlger:

  • Vi vรฆlger fรธrst to indledende gรฆt, en1 og b1, for hvilken f(a1)f(b1) < 0. Ifรธlge mellemvรฆrdisรฆtningen skal roden ligge i [a1, b1].
  • Vi beregner derefter midtpunktet af en1 og b1, hvilket er b2Det indledende interval er nu reduceret til [a1, b2] fordi f(a1)f(b2) < 0.
  • Pรฅ samme mรฅde halveres intervallet igen og igen, indtil en omtrentlig lรธsning findes inden for den รธnskede tolerance.

Grafisk fremstilling af bisektionsmetode

Med den geometriske intuition klar, kan vi nu formalisere proceduren som en trin-for-trin algoritme.

Bisektionsmetodealgoritme

Trinene til at anvende bisektionsmetoden til at finde roden af โ€‹โ€‹ligningen f(x) = 0 er som fรธlger.

Trin 1) Vรฆlg de indledende gรฆt a, b og en tolerancerate e.

Trin 2) Hvis f(a)f(b) >= 0, sรฅ ligger roden ikke i dette interval. I sรฅ fald er der ingen lรธsning inden for [a, b].

Trin 3) Find midtpunktet, c = (a + b)/2.

(i) Hvis funktionsvรฆrdien ved midtpunktet f(c) = 0, sรฅ er c roden. Gรฅ til trin 5.
(ii) Hvis f(a)f(c) < 0, ligger roden mellem a og c. Sรฆt da a = a, b = c.
(iii) Ellers sรฆttes a = c, b = b.

Trin 4) Hvis den absolutte fejl er hรธjere end toleranceraten, dvs. (b โ€“ a) > e, skal du gรฅ tilbage til trin 3.

Trin 5) Vis c som den omtrentlige rod.

Lad os se et eksempel pรฅ bisektionsmetodens algoritme i aktion. Vi finder roden af โ€‹โ€‹fรธlgende kontinuerte funktion ved hjรฆlp af bisektionsmetodens formel.

f (x) = x3 - x2 + 2

Eksempel pรฅ halvsektionsmetode

Trin 1) Lad os antage,

         a = -10,
         b = 10, og
         e = 1% eller 0.01.

Trin 2) Nu vil vi kontrollere, om f(a)f(b) >= 0 eller ej.

         f(a) = f(-10) = (-10)3 โ€“ (-10)2 + 2 = -1098
         f(b) = f(10) = (10)3 - (10)2 + 2 = 902
         f(a)f(b) = f(-10)f(10) = (-1098)(902) < 0

Derfor ligger roden af โ€‹โ€‹ovenstรฅende funktion i intervallet [-10, 10].

Trin 3) Dernรฆst beregnes midtpunktet c.

Eksempel pรฅ halvsektionsmetode

Nu skal fรธlgende forhold kontrolleres:

(i) Om f(c) = 0:
         f(c) = f(0) = (0)3 - (0)2 + 2 = 2, hvilket ikke er lig med 0.

(ii) Om f(a)f(c) < 0:
         f(c)f(a) = 2 * (-1098) < 0

Betingelsen er opfyldt. For den nรฆste iteration vil vรฆrdierne vรฆre:

         a = a = -10
         b = c = 0

Trin 4) Nรฅr (b โ€“ a) = (0 โ€“ (-10)) = 10 > 0.01, gentages processen. De nรฆste iterationer er vist i tabellen nedenfor.

iteration a b c ba f(c)
1 -10 0 0 10 2
2 -5 0 -5 5 -148
3 -2.5 0 -2.5 2.5 -19.875
4 -1.25 0 -1.25 1.25 -1.52562
5 -1.25 -0.625 -0.625 0.625 1.36523
6 -1.25 -0.9375 -0.9375 0.3125 0.297119
7 -1.09375 -0.9375 -1.09375 0.15625 -0.50473
8 -1.01562 -0.9375 -1.01562 0.078125 -0.0791054
9 -1.01562 -0.976562 -0.976562 0.0390625 0.115003
10 -1.01562 -0.996094 -0.996094 0.0195312 0.0194703
11 -1.00586 -0.996094 -1.00586 0.00976562 -0.0294344

Trin 5) I den 11. iteration bliver betingelsen i trin 4 falsk. Den omtrentlige rod af denne ligning er sรฅledes -1.00586.

Med et fรฆrdigt numerisk eksempel prรฆsenterer nรฆste afsnit det logiske diagram, der indfanger det fulde kontrolflow.

Bisektionsmetode logisk diagram

Flowchartet nedenfor opsummerer beslutningslogikken bag bisektionsmetoden, herunder bracketkontrol, midtpunktsopdatering og tolerancetest.

Bisektionsmetode logisk diagram

pseudoCode

Pseudokoden nedenfor afspejler algoritmen og fungerer som en skabelon til implementering af bisektionsmetoden i ethvert programmeringssprog.

Start
Set a, b, e
if f(a)*f(b) >= 0
    Output("Root does not exist in this interval")
    Stop
while (b-a) > e do
    c โ† (a + b)/2
    if f(c) = 0
        break
    end if
    if f(c)*f(a) < 0 then
        b โ† c
    else
        a โ† c
end while
Output(c)
Stop

Eksempel pรฅ halveringsmetode i C/C++

Fรธlgende C/C++ Programmet implementerer bisektionsmetoden til at finde roden af โ€‹โ€‹f(x) = x3 - x2 + 2 inden for intervallet [-10, 10].

Input:

#include <bits/stdc++.h>
using namespace std;
#define Error 0.01
double value(double x)
{
    return x*x*x - x*x + 2;
}
void bisection_method(double a, double b)
{
    if (value(a) * value(b) >= 0)
    {
        cout << "The root does not lie in this interval\n";
        return;
    }
    double c = a;
    while ((b-a) >= Error)
    {
        c = (a+b)/2;
        if (value(c) == 0.0)
            break;
        else if (value(c)*value(a) < 0)
            b = c;
        else
            a = c;
    }
    cout << "The root is :" << c;
}
int main()
{
    double a = -10, b = 10;
    bisection_method(a, b);
    return 0;
}

Output:

The root is :-1.00586

Eksempel pรฅ halveringsmetode i Python

Python Versionen nedenfor producerer den samme omtrentlige rod ved hjรฆlp af identisk logik, hvilket gรธr den ideel til hurtig eksperimentering og undervisning.

Input:

def value(x):
    return x*x*x - x*x + 2

def bisection_method(a, b):
    if (value(a) * value(b) >= 0):
        return
    c = a
    while ((b-a) >= 0.01):
        c = (a+b)/2
        if (value(c) == 0.0):
            break
        if (value(c)*value(a) < 0):
            b = c
        else:
            a = c
    print("The root is : ", "%.4f" % c)

a = -10
b = 10
bisection_method(a, b)

Output:

The root is :  -1.0059

Fordele og begrรฆnsninger ved bisektionsmetoden

Som enhver numerisk teknik har bisektionsmetoden klare styrker og et par praktiske ulemper. Tabellen nedenfor opsummerer de vigtigste fordele og ulemper.

FORDELE ULEMPER
Nem og enkel rodfindingsmetode at implementere i ethvert sprog. Konvergens er langsom, fordi metoden blot halverer intervallet ved hvert trin.
Den konvergerer altid, nรฅr en gyldig parentes angives, da den sรฆtter roden i parentes gennem hele processen. Hvis et af de indledende gรฆt allerede er tรฆt pรฅ roden, vil det stadig tage mange iterationer at nรฅ roden.
Fejlraten kan styres direkte ved at รธge eller mindske antallet af iterationer eller ved at stramme tolerancen. Den kan ikke finde komplekse rรธdder eller flere rรธdder med lige multiplicitet, da funktionen ikke รฆndrer fortegn ved sรฅdanne rรธdder.

Anvendelser af bisektionsmetoden

Bisektionsmetoden bruges i mange praktiske og moderne databehandlingsscenarier, hvor et robust rodfindingstrin er pรฅkrรฆvet.

  • Ingeniรธrsimuleringer: Lรธsning af ikke-lineรฆre ligninger, der optrรฆder i varmeoverfรธring, fluiddynamik og strukturanalyse.
  • Finansiel modellering: Beregning af udbytter, interne afkastsatser og break-even-punkter, hvor lukkede lรธsninger ikke findes.
  • Maskinlรฆring og AI: Lokalisering af tรฆrskler, kalibrering af modeller og finjustering af hyperparametre i AI-drevne numeriske lรธsere.
  • Computergrafik: Bestemmelse af strรฅle-overfladeskรฆringer og parametervรฆrdier langs kurver.
  • Indlejrede systemer: Tilnรฆrmelse af rรธdder i controllere med lavt ressourceforbrug, hvor enkelhed og forudsigelighed er mere vรฆrdifuldt end hastighed.

Ofte Stillede Spรธrgsmรฅl

Bisektionsmetoden er en numerisk teknik, der finder roden af โ€‹โ€‹en kontinuert funktion ved gentagne gange at halvere et interval, hvor funktionen skifter fortegn, og derefter vรฆlge den halvdel, der stadig indeholder roden.

Den konvergerer altid, nรฅr funktionen er kontinuert pรฅ [a, b] og f(a)f(b) er mindre end nul, fordi mellemvรฆrdisรฆtningen garanterer, at der findes en rod i intervallet, og halvering fortsรฆtter med at krympe parentesen omkring den.

Bisektionsmetoden konvergerer lineรฆrt. Fejlen halveres omtrent ved hver iteration, sรฅ det krรฆver omkring logยฒ(L/e) iterationer at nรฅ en tolerance e fra et interval med lรฆngden L, hvilket er langsommere end Newton- eller sekantmetoder.

Metoden fejler, nรฅr f(a) og f(b) har samme fortegn, nรฅr funktionen er diskontinuerlig i intervallet, eller nรฅr roden har lige multiplicitet, fordi funktionen ikke skifter fortegn pรฅ tvรฆrs af en sรฅdan rod.

AI-drevne modeller kombinerer ofte bisektionsmetoden med lรฆrte modeller. Et neuralt netvรฆrk foreslรฅr en snรฆver parentes omkring en sandsynlig rod, og bisektionsmetoden garanterer derefter en pรฅlidelig, certificeret lรธsning inden for denne parentes.

AI-modeller udmรฆrker sig ved mรธnstergenkendelse, men kan ikke altid bekrรฆfte nรธjagtige svar. Klassiske numeriske metoder som Bisection giver beviselig konvergens og begrรฆnset fejl, hvilket gรธr dem ideelle som betroede backends i AI-pipelines til sikkerhedskritiske beregninger.

Opsummer dette indlรฆg med: