7 svar
819 visningar
enblivandeingenjör 53
Postad: 21 feb 2019

Felmeddelande

"Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = xxxxxxx"

 

Har fått detta meddelande i tio rader med olika värden för xxxxxx. Kan någon förklara mer specifikt vad detta betyder/kan bero på?

emilg 99
Postad: 21 feb 2019

Determinanten för matrisen är nära noll? Försöker du invertera den eller vad gör du?

Alan123 293
Postad: 21 feb 2019

Kan du visa din kod, så kanske det är lättare att hjälpa :)

enblivandeingenjör 53
Postad: 21 feb 2019

Är ganska krångligt men infogar bilder på allt.



Denna sektion som jag kör:



Har fått koden att fungera tidigare, men har lagt till en ekvation nu och det är då det började krångla. Förmodar att det är Newton2 som är problemet då jag även får msg printat efter de andra felmeddelandena. Förstår om det är krångligt att följa, kan förtydliga mer om det behövs.

Albiki 3470
Postad: 21 feb 2019 Redigerad: 21 feb 2019

Hej!

Om xx är en startapproximation till det det icke-linjära ekvationssystemet f(x)=0f(x) = 0 så ger Newtons metod en ytterligare approximation x+δxx+\delta x där uppdateringsvektorn δx\delta x beräknas som en matrismultiplikation med en invers matris,

    δx=-J(x)-1f(x)\delta x = -J(x)^{-1}f(x).

Om matrisen J(x)J(x) -- som innehåller samtliga första ordeningens partiella derivator till ff, beräknade i startapproximationen xx -- har två eller fler kolonner som är nästan perfekt korrelerade (linjärt beroende) så kommer dess determinant att vara nära noll och matrisens konditionstal att vara mycket högt; det medför att inversen inte kan beräknas ordentligt då den kommer att innehålla enormt stora tal (division med nästan-noll).

Albiki 3470
Postad: 21 feb 2019

Du skulle även kunna pröva att finna minsta-kvadrat-approximationer till uppdateringsvektorn genom att beräkna 

    δx=-(J(x)tJ(x))-1J(x)tf(x)\delta x = -(J(x)^{t}J(x))^{-1}J(x)^{t}f(x).

Det kan även vara så att du har valt en olämplig startapproximation, xx, och att ett annat val av xx ger dig en matris J(x)J(x) som har en determinant som inte är nära noll.

enblivandeingenjör 53
Postad: 21 feb 2019

Det känns som att detta kanske är mer av ett kemi-problem då. Provat att ändra approximationen åt olika håll och öka antalet iterationer men får ändå samma felmeddelande samt att "det krävs mer än kmax=... för att bestämma nollstället.

Laguna 3803
Postad: 21 feb 2019

Man brukar undvika att invertera matriser. Man gör hellre en LR-uppdelning eller nåt liknande. Om problenet är inherent numeriskt instabilt hjälper inte det, men jag vet inte om det borde vara så med din uppgift.

Svara Avbryt
Close