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