Array indices must be positive integers or logical values.
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Good day, I am trying to run this code but I cant seem to know what the issue is as to why I am constanting getting this error. I have cleared my workspace so its free but to no avail. Any help would be appreciated please.
**Error in Command Window**
>> nonlinear_equation
Array indices must be positive integers or logical values.
Error in nonlinear_equation (line 32)
xr = xr - f1(xr)/f2(xr);
................................................................................................................................................................................................................................................................................
**CODE IN Matlab**
>>
% An M-file to implement the Newton-Raphson method.
function [root, ea iter]=nonlinear_equation(f1, f2,xr,j)
% newtraph: Newton-Raphson root location zeroes
% [root, ea, iter] = nwetraph (func, dfunc, xr, es, maxit):
% Uses Newton-Raphson Method to find the root of a function
% Input:
% func = name of function
% dfunc = name of derivative of function
% xr = initial guess of the root
% es = desired relative error (default = 0.0001%)
% maxit = maximum allowable iterations (default = 50)
% Output:
% root = real root
% ea = approximate relative error (%)
% iter = number of iterations
% Setting coefficients of Equation
x=0;
% Making equations to be solved
f1 = @(x) x.^4 - 225*x.^2 + 15625; %dfunc = str2sym('x.^4 - a*x.^2 + 1562'); f2 = diff(dfunc)
f2 = 4*x.^3 - 2*225*x;
es = 0.0001;
maxit = 50;
iter = 100;
xr=x;
while (1)
xrold=xr;
xr = xr - f1(xr)/f2(xr);
iter = iter+1;
if x ~=0, ea = abs ((x - xold)/x)*100; end
if ea<=es || iter >= maxit, break, end
end
root = x;
8 commentaires
Walter Roberson
le 22 Avr 2020
Consider any function, f(x) that returns a real result for real input, x. With f(x) always being real-valued, the difference between f(x) and f(x+delta) will alway be real-valued, so the derivative will always be real-valued.
Now consider any strategy that involves taking f(x) at different locations, and (with or without the aid of the derivative) uses real-valued expressions to project/decide a new location to test as being the root of f(x). With real-valued functions and real-valued operations, the result of the location projection would be real-valued. In such a configuration, if you start with a real-valued location, you end up with a real-valued location. It follows from this that such a scheme can never create a complex-valued location to probe at, and therefore such schemes can never find complex roots of a function. If the function has no real-valued roots, the scheme will not be able to proceed.
Bisection methods rely on having starting points of opposite sign, but in the case of a real-valued function that has no real roots, no such points exist in the reals, so bisection methods cannot improve the situation.
Hypothetically there could be projection schemes that can move into complex locations -- for example if the projection scheme involves taking the square root of a difference of values where the difference is not certain to be a non-negative real, then such a system could potentially discover complex roots.
However, if you have complex inputs then you risk complex values of the function, and figuring out which direction to head for a zero crossing is tricky if you are working from complex function values. There are even functions in which the real and imaginary components each cross zero but the function as a whole has no zero (I think...). Thus bisection approaches are at the very least difficult under complex conditions. The Newton type projections do not rely on detecting zero crossings and so do not have that concern.
Réponses (1)
Image Analyst
le 22 Avr 2020
A thorough discussion is in the FAQ: https://matlab.fandom.com/wiki/FAQ#.22Subscript_indices_must_either_be_real_positive_integers_or_logicals..22
0 commentaires
Voir également
Catégories
En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!