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

2 Ansichten (letzte 30 Tage)
I'm trying to write a function that will solve for the exact DC solution of my circuit through Newton's Method. However I get this error "Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN." Was hoping anyone could help me rectify this. My output should be a solution vector and the number of iterations needed to for convergence. Below is my function and main code.
%%My Function
function [x, iter] = bjt(x0,G)
F = zeros(5,1) ;
J = zeros(5,5) ;
VT = 25.3*exp(-3);
BF = 100;
BR = 1;
Is = 1*exp(-16);
i = 1;
x = x0;
while (norm(F,inf)>(1*exp(-9)))|(i==1)
F = G*x;
F(5) = F(5)-12 ;
J = G;
ID1 = (Is/BR)*((exp(x(1)-x(2))/VT)-1);
F(1) = F(1)+ID1;
F(2) = F(2)-ID1;
J(1,1) = J(1,1) + (Is/(BR*VT))*(exp(x(1)-x(2))/VT);
J(1,2) = J(1,2) - (Is/(BR*VT))*(exp(x(1)-x(2))/VT);
J(2,1) = J(2,1) - (Is/(BR*VT))*(exp(x(1)-x(2))/VT);
J(2,2) = J(2,2) + (Is/(BR*VT))*(exp(x(1)-x(2))/VT);
ID2 = (Is/BF)*((exp(x(1)-x(3))/VT)-1);
F(1) = F(1)+ID2;
F(3) = F(3)-ID2;
J(1,1) = J(1,1) + (Is/(BF*VT))*(exp(x(1)-x(3))/VT);
J(1,3) = J(1,3) - (Is/(BF*VT))*(exp(x(1)-x(3))/VT);
J(3,1) = J(3,1) - (Is/(BF*VT))*(exp(x(1)-x(3))/VT);
J(3,3) = J(3,2) + (Is/(BF*VT))*(exp(x(1)-x(3))/VT);
I0 = Is*(exp((x(1)-x(3))/VT) - exp((x(1)-x(2))/VT));
F(2) = F(2) + I0;
F(3) = F(3) - I0;
y = (-J)\F;
x = x+y;
i = i+1;
end
iter = i-1;
%%MAIN CODE
Vcc = 12;
r1 = 8000;
r2 = 4000;
re = 3300;
rc = 6000;
G = [((1/r1)+(1/r2)), (1/r2), 0, (-1/r1), 0;...
0, (1/rc), 0, (-1/rc), 0;...
0, 0, (1/re), 0, 0;...
0, (-1/rc), 0, (1/rc), 1;...
0, 0, 0, 1, 0];
x0 = [4; 6; 3.3; 12; -0.002]; %%initial guess
[x, iter] = bjt(x0,G);
end

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 6 Mär. 2017
The 3 x 3 J you are producing has rows that are not linearly independent.
You have a number of terms of the form
(Is/(BR*VT))*(exp(x(1)-x(2))/VT)
If your x(1) or x(2) grew to be large and positive then the exp(x(1)-x(2)) could grow to infinity, which would lead to evaluation problems. If they grew to be large and negative then exp(x(1)-x(2)) could shrink to 0, probably leading to duplicate rows or columns.

Weitere Antworten (0)

Kategorien

Mehr zu Particle & Nuclear Physics finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by