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.

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.
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.
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.
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.
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.



