Matlab Continuously Busy When Running Code

조회 수: 3 (최근 30일)
Kody Haugli
Kody Haugli 2015년 2월 26일
편집: Kody Haugli 2015년 2월 26일
Hello again,
I have finally got my code to somewhat run. Now when I run my code with a certain function call it says it is busy, but will never end. When I manually stop the program I get this:
Operation terminated by user during test (line 57)
In newton_part_a (line 52)
fguess2 = myfunc(deltax2);
I'm just wondering what is happening here?
This is the command I am putting in:
newton_part_a(@test, [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1], 0.00001, 0.0001)
Here is my file:
if true
%Define a function that will read in:
%an m file containing n number of nonlinear functions
%an initial guess for the functions
%A value that will determine if convergence to a solution has occured
%(tolerance)
%The value for iteration for each guess
function K = newton_part_a(myfunc, guess, epsilon, step)
n = length(guess); %define the number of functions based on the test file input
deltay = zeros(1,n); % delta F for initial Newton Raphson guess yguess = myfunc(guess); %Initial values for y matrix in forward substitution initialguess = zeros(1,n); Jacob = zeros(n,n); %Set up the initial Jacobian Matrix to a matrix of zeros func = 1; %set func to 1 so that while loop has a valid argument
while func %Find new value of delta y for i = 1:n %for number of equations in myfun, set delta y deltay(i) = initialguess(i) - yguess(i); end %Exit loop if delta y has converged to an acceptable tolerance (epsilon) if abs(deltay) < epsilon func = 0; break; end
%Develop the Jacobian matrix for i=1:n %Fill in the empty matrix by moving column by column, line by line for j =1:n x1 = guess(j); %set arguments for jacobian elements xplus = x1 + step; xminus = x1 - step;
deltax1 = guess;
deltax1(j) = xplus;
deltax2 = guess;
deltax2(j) = xminus;
fguess1 = myfunc(deltax1);
fguess2 = myfunc(deltax2);
guess1 = fguess1(i);
guess2 = fguess2(i);
%Find each element of the jacobian
J = (guess1 - guess2)/ (2*step);
Jacob(i,j) = J;
end
end
%Sparse Jacobian to make function faster
JJ = sparse(Jacob);
[L,U,P] = lu(JJ); %define lower and upper matrixes for LU factorization
b = deltay;
c = zeros(n,1);
b = deltay*P;
%forward substitution
for i=1:n
c(i)= (b(i)-L(i, :)*c)/L(i,i);
end
%set a matrix of zeros for new guess
newguess = zeros(n,1);
%backward substitution
for i=n:-1:1
newguess(i) = (c(i)-U(i,:)*newguess)/U(i,i);
guess(i) = guess(i) + newguess(i);
end
yguess = myfunc(guess);
end
%Output the value of the variables after convergence has occured
K = guess;
end
end

답변 (0개)

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by