Find intersections of a general vector with zeros MATLAB

Consider a general vector which represent some non-linear function

for example:

x = [1 2 3 4 5 6 7 8 9 10];
f = [-1 6 8 7 5 2 0.1 -2 -3];

Is there a method in matlab that can find the solutions of f(x)=0? with some given accuracy

1

3 Answers

If you think about it, when you have a random distribution f, finding zeros can only be done with linear interpolation between the data points:

For your example, I would define a function myFunc as:

function y = myFunc(val)
x = [1 2 3 4 5 6 7 8 9 10];
f = [-1 6 8 7 5 2 0.1 -2 -3 3];
P = griddedInterpolant (x, f, 'linear', 'linear');
y = P(val);
end

and apply a root searching algorithm via something like fzero:

val = 0;
x = [1 2 3 4 5 6 7 8 9 10];
x = [-inf x inf]; % Look outside boundary too
fun = @myFunc;
sol = zeros(1, numel(x)-1);
cnt = 0;
for i = 1:length(x)-1 % fzero stops at the 1st zero hence the loop over each interval bound = [x(i) x(i+1)]; try z = fzero(fun, bound); cnt = cnt+1; sol(cnt) = z; catch % No answer within the boundary end
end
sol(cnt+1:end) = [];

Maybe you can try interp1 in arrayfun like below (linear interpolation was adopted)

x0 = arrayfun(@(k) interp1(f(k:k+1),x(k:k+1),0),find(sign(f(1:end-1).*f(2:end))<0));

such that

x0 = 1.1429 7.0476 9.5000

DATA

x = [1 2 3 4 5 6 7 8 9 10];
f = [-1 6 8 7 5 2 0.1 -2 -3 3];

I've made a function that does it, but feel it is something quite "regular" that matlab must have built in answers...so if someone has any write it down and I will accept it as an answer.

function sol = find_zeros(x,f) f_vec = round(f*10^2)/10^2; ind=find(diff(sign(f_vec))~=0); K = length(ind); if (K>0) sol = zeros(1,K); for k=1:K if (f_vec(ind(k))<f_vec(ind(k)+1)) df = f_vec(ind(k)):0.01:f_vec(ind(k)+1); else df = flip(f_vec(ind(k)+1):0.01:f_vec(ind(k))); end dx = linspace(x(ind(k)),x(ind(k)+1),length(df)); j = find(df==0); sol(k) = dx(j); end else sol=[]; end sol=unique(sol);
end
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like