7 svar
917 visningar
enblivandeingenjör 53 – Fd. Medlem
Postad: 21 feb 2019 09:30

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 478
Postad: 21 feb 2019 09:34

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

Alan123 278 – Fd. Medlem
Postad: 21 feb 2019 09:35

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

enblivandeingenjör 53 – Fd. Medlem
Postad: 21 feb 2019 09:43

Ä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 5096 – Fd. Medlem
Postad: 21 feb 2019 12:14 Redigerad: 21 feb 2019 12:14

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 5096 – Fd. Medlem
Postad: 21 feb 2019 12:54

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 – Fd. Medlem
Postad: 21 feb 2019 15:00

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 28468
Postad: 21 feb 2019 20:52

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