Voor het berekenen van de vierde machtswortel in MATLAB gebruik je doorgaans nthroot(X,4) voor de reële vierde machtswortel. Voor positieve waarden is ook X.^(1/4) bruikbaar, maar bij negatieve waarden geeft deze machtsbewerking een complexe uitkomst.
De functie nthroot berekent de reële n-de machtswortel van een getal. De syntaxis is Y = nthroot(X,N), waarbij X het getal of de array is waarvan de wortel wordt berekend en N de gewenste wortelorde is.
Vierde machtswortel berekenen
Gebruik voor de vierde machtswortel van bijvoorbeeld 16 de volgende instructie:
y = nthroot(16,4)
De uitkomst is:
y = 2
Dit komt doordat 24 gelijk is aan 16. Voor een vector worden de elementen afzonderlijk verwerkt:
X = [1 16 81 256];
Y = nthroot(X,4)
De uitkomst is:
Y = [1 2 3 4]
Verschil tussen nthroot en machtsverheffing
Voor positieve getallen leveren nthroot(X,4) en X.^(1/4) dezelfde reële waarden op:
X = [1 16 81 256];
Y1 = nthroot(X,4);
Y2 = X.^(1/4);
Hoewel power een efficiëntere functie is voor het berekenen van wortels van getallen, geeft power in gevallen waarin zowel reële als complexe wortels bestaan alleen de complexe wortels.
Bij negatieve of complexe waarden retourneert sqrt(X) complexe resultaten. Het domein van de functie sqrt omvat negatieve en complexe getallen, wat tot onverwachte resultaten kan leiden wanneer dit onbedoeld gebeurt.
Vierde machtswortel van negatieve getallen
Een negatief reëel getal heeft geen reële vierde machtswortel, omdat de vierde macht van elk reëel getal niet-negatief is. Daarom levert de vierde machtswortel van -16 geen reëel resultaat op.
Met de machtsbewerking MATLAB wordt dit als een complexe waarde berekend:
y = (-16)^(1/4)
Voor elementgewijze bewerkingen op arrays gebruik je de puntnotatie:
X = [-16 -81 16 81];
Y = X.^(1/4)
Het resultaat bevat voor de negatieve elementen complexe waarden. Als alleen reële wortels zijn toegestaan, moet de invoer voor een vierde machtswortel niet-negatief zijn.
Vierde machtswortel van meerdere waarden
De functie nthroot accepteert een scalaire waarde, vector, matrix, multidimensionale array, tabel of timetable als invoer. De elementen van X moeten reëel zijn.
Voor een matrix wordt de vierde machtswortel element voor element berekend:
X = [1 16; 81 256];
Y = nthroot(X,4)
De uitkomst is:
Y = [1 2; 3 4]
De gegeven matrices X en N kunnen dezelfde grootte hebben of compatibele afmetingen bezitten. nthroot ondersteunt impliciete uitbreiding van de invoerargumenten X en N.
Algemene syntaxis
De algemene vorm voor een n-de machtswortel is:
Y = nthroot(X,N)
- X is de invoerarray waarvan de wortel wordt berekend.
- N is de orde van de wortel.
- Y bevat de berekende reële n-de machtswortels.
Voor een vierde machtswortel stel je N gelijk aan 4:
Y = nthroot(X,4)
Verschillende wortelordes met dezelfde invoer
Met een vector voor N kun je verschillende wortelordes berekenen. De elementen van X en N moeten daarbij dezelfde grootte hebben of compatibele afmetingen:
X = [16 16 16];
N = [2 4 8];
Y = nthroot(X,N)
Hiermee worden respectievelijk de vierkantswortel, vierde machtswortel en achtste machtswortel berekend.
Reële en complexe wortels
De functie nthroot is bedoeld voor de reële n-de machtswortel. Als een element in X negatief is, moet het overeenkomstige element in N een oneven geheel getal zijn.
Bereken bijvoorbeeld verschillende reële wortels van -8:
N = [5 3 -1];
Y = nthroot(-8,N)
De uitkomst is:
Y = [-1.5157 -2.0000 -0.1250]
Een negatieve basis kan dus een reële wortel hebben wanneer de wortelorde oneven is. Voor een vierde machtswortel, waarbij de orde even is, bestaat voor een negatieve basis geen reële uitkomst.
Daarentegen kun je complexe wortels berekenen met X.^(1./N).
Vierde machtswortel met een functie
Wanneer je de vierde machtswortel vaker nodig hebt, kun je een anonieme functie definiëren:
vierdeWortel = @(X) nthroot(X,4);
y = vierdeWortel(625)
De uitkomst is:
y = 5
Voor elementgewijze berekeningen met de machtsoperator kan ook de volgende anonieme functie worden gebruikt:
vierdeWortelComplex = @(X) X.^(1/4);
Wortel van een polynoom van de vierde graad
Een vierde machtswortel van een getal is iets anders dan de wortels van een polynoom van de vierde graad. Voor een polynoom gebruik je in MATLAB de functie roots.
r = roots(p) retourneert de wortels van het polynoom dat wordt weergegeven door de coëfficiënten in p als een kolomvector r.
De invoer p is een vector met n+1 polynoomcoëfficiënten, beginnend met de coëfficiënt van xn. Zo stelt p = [3 2 -2] het polynoom 3x2 + 2x − 2 voor.
Een coëfficiënt 0 geeft een tussenliggende macht aan die niet in de vergelijking voorkomt. De functie roots lost polynoomvergelijkingen op van de vorm p1xn + … + pnx + pn+1 = 0.
Voorbeeld: vergelijking van de vierde graad
Los de vergelijking x4 − 1 = 0 op door de coëfficiënten in een vector te plaatsen:
p = [1 0 0 0 -1];
r = roots(p)
De uitkomst bevat vier complexe waarden:
r =
- -1.0000 + 0.0000i
- 0.0000 + 1.0000i
- 0.0000 - 1.0000i
- 1.0000 + 0.0000i
Deze vier waarden zijn de oplossingen van x4 − 1 = 0. De functie roots berekent dus de nulpunten van een polynoom, terwijl nthroot(X,4) één reële vierde machtswortel van een getal berekent.
Matrix van wortelvergelijkingen
De functie roots interpreteert p als een vector met n+1 elementen die het karakteristieke polynoom van een n×n-matrix voorstellen. De wortels van het polynoom worden berekend door de eigenwaarden van de begeleidende matrix te bepalen.
De resultaten zijn de exacte eigenwaarden van een matrix binnen de afrondingsfout van de begeleidende matrix. Dit betekent echter niet dat ze de exacte wortels zijn van een polynoom waarvan de coëfficiënten binnen afrondingsfout van die in p liggen.
Als je een polynoom uit bekende wortels wilt opbouwen, gebruik je poly:
p = poly(r)
De functie poly is de inverse van de functie roots.
Numerieke nauwkeurigheid
Sorry, but this is basic numerical methods 101. You have precision issues working in double precision arithmetic.
You can always overwhelm floating point computations when working in any finite precision.
Bij wortelberekeningen en polynoomwortels kunnen kleine afrondingsfouten invloed hebben op de weergegeven cijfers en op de volgorde waarin oplossingen worden teruggegeven. Dit geldt vooral voor complexe wortels en voor polynomen met dicht bij elkaar liggende oplossingen.
Je kunt symbolische wortelberekeningen met de Symbolic Math Toolbox proberen om meer precisie te verkrijgen. Als je echter begint met coëfficiënten van het type double, blijf je beperkt omdat deze coëfficiënten niet exact worden voorgesteld in dubbele precisie.
Volgorde van polynoomwortels
Bij een derdegraadspolynoom kan de functie roots bij verschillende waarden van een parameter de wortels in een andere volgorde retourneren. Wanneer bijvoorbeeld een parameter m wordt gewijzigd, kunnen dezelfde drie wortels in een andere volgorde in de uitvoervector verschijnen.
Dit betekent niet noodzakelijk dat de wortels inhoudelijk zijn veranderd. De volgorde van de elementen in de uitvoervector is bij numerieke wortelberekeningen niet geschikt als vaste identificatie van een specifieke wortel.
In gegenereerde code kan de volgorde van de wortels in uitvoervector r verschillen van de volgorde in MATLAB. De door gegenereerde code teruggegeven wortels zijn mogelijk niet exact gelijk aan de wortels die MATLAB teruggeeft.
Verschil tussen roots en fzero
Gebruik roots wanneer de vergelijking een polynoom is. Gebruik fzero om de wortels van niet-lineaire vergelijkingen te vinden.
De functie roots werkt alleen met polynomen, terwijl fzero breder toepasbaar is op verschillende soorten vergelijkingen.
Vierde machtswortel met sqrt
De functie sqrt berekent uitsluitend de vierkantswortel:
B = sqrt(X)
Voor de vierde machtswortel kun je sqrt(sqrt(X)) gebruiken wanneer X niet-negatief is:
y = sqrt(sqrt(16))
De uitkomst is:
y = 2
Voor negatieve of complexe elementen produceert sqrt(X) complexe resultaten. Als negatieve en complexe getallen foutmeldingen moeten opleveren in plaats van complexe resultaten, gebruik je realsqrt.
Ondersteunde gegevenstypen
Voor de invoerargumenten van nthroot worden de gegevenstypen single, double, table en timetable ondersteund. De elementen van X en N moeten reëel zijn.
De functie roots ondersteunt de gegevenstypen single en double en ondersteunt complexe getallen.
De functie nthroot ondersteunt volledig tall arrays. De functie ondersteunt ook GPU-arrays wanneer de invoergegevens met gpuArray worden opgegeven.
Codegeneratie en GPU-gebruik
In gegenereerde code is de uitvoer van de functie roots altijd complex. Voor de invoervector p moet je tijdens codegeneratie een vector met vaste grootte of variabele lengte specificeren.
Een van de eerste twee dimensies van deze vector mag variabele grootte hebben. Alle andere dimensies moeten een vaste grootte 1 hebben.
De functie roots ondersteunt GPU-array-invoer. Bij GPU-codegeneratie gelden dezelfde gebruiksopmerkingen en beperkingen.
Bij sqrt moet je voor gegenereerde code expliciet een complexe invoer gebruiken wanneer een complexe uitvoer mogelijk is. Gebruik daarvoor bijvoorbeeld sqrt(complex(x)).
Als het resultaat op een GPU complex kan zijn, moet je de invoerargumenten expliciet als complex opgeven.
Belangrijkste MATLAB-instructies
| Doel | MATLAB-instructie |
|---|---|
| Reële vierde machtswortel | nthroot(X,4) |
| Vierde machtswortel met machtsoperator | X.^(1/4) |
| Vierde machtswortel via tweemaal de vierkantswortel | sqrt(sqrt(X)) |
| Wortels van een polynoom | roots(p) |
| Polynoom uit wortels | poly(r) |
| Wortel van een algemene niet-lineaire vergelijking | fzero |
Voor een gewone reële vierde machtswortel van een niet-negatief getal is nthroot(X,4) de duidelijkste keuze. Voor complexe wortels gebruik je X.^(1/4), en voor de vier oplossingen van een polynoom van de vierde graad gebruik je roots(p).
