whats wrong in the code may someone help me to get same answer as the example

2 vues (au cours des 30 derniers jours)
Write the function find_zero that is defined like this function
x = find_zero(f,x1,x2)
The first input argument is special. It is a “function handle”. A function handle is gotten by typing @ and the name of any function. For example,
x = find_zero(@sin,-1,1)
will give f the function handle for MATLAB’s built-in sin function. Then, inside find_zero, the statement
y = f(-1)
would set
y = sin(-1)
Note that the @ sign is not used inside the function. Only the caller uses it. All other arguments to find_zero are scalar numbers, and x1 is less than x2. The goal of the function is to find an x that lies in the range from x1 to x2 such that after the command, y = f(x), is executed inside the function find_zero, y is approximately zero as defined by abs(y) < 1e-10. All you know about the function f is that it has one scalar input and one scalar output, and a plot of its values crosses the x-axis exactly once between x1 and x2, as, for example, in the figure 3. It is the responsibility of the caller to call the function with arguments that obey these rules.
Figure 3 Output plot for x1 and x2 (Hint: Remember to label your axis’s) Here are two sample runs:
>> find_zero(@sin,-2.5,2.3) % as shown in the figure
ans =
-6.4000e-11//
>> format long
//>> find_zero(@cos,-2,1.3)
ans =
-1.570796326871000
in the function:
>> function x = find_zero(f,x1,x2) % Function definition
>> y = f(x2); % Computing the function value at x = x2
>> while abs(y) > 1e-10 % exit loop if y approximatly equal to zero
>> x=x2-y*(x2-x1)/(y-f(x1)); % finding new x using secant method
>> x1=x2;%copy the value of x2 to x1
>> x2=x;% copy the value of x to x2
>> y = f(x2); % Computing the function value at new x
>> end % End of loop
>> end % End of program
  2 commentaires
Steven Lord
Steven Lord le 8 Mai 2017
If you post what you've done to try to solve this problem and ask a specific question you may receive some suggestions about how to move forward.

Connectez-vous pour commenter.

Réponses (3)

Harsh
Harsh le 11 Mai 2017
If you still need help with this, please contact MathWorks Technical Support here: https://www.mathworks.com/support/contact_us/
Please be sure to provide a detailed description of the exact issue and attach any relevant files / code / examples required to investigate the issue.
  2 commentaires
Walter Roberson
Walter Roberson le 11 Mai 2017
Ummm, no, this is a homework matter, not a technical support matter.

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 11 Mai 2017
It is not permitted to define functions at the command prompt. You need to store the code for your function inside a file named find_zero.m
  2 commentaires
Mohamad Yousif Al Ayoubi
Mohamad Yousif Al Ayoubi le 15 Mai 2017
this one is function btw but i write it as command so they how i wrote it and easy to read
Steven Lord
Steven Lord le 15 Mai 2017
MATLAB does not allow you to define functions like that at the prompt in the Command Window. [This work is too complicated to write as an anonymous function, at least not without some rather creating and advanced techniques.]
If you want to define a function (like your assignment requires you to do) you must define it in a function file like Walter said.

Connectez-vous pour commenter.


Ganesh Prasad B K
Ganesh Prasad B K le 29 Juin 2017
Here is the code. Have a look at it
function x = find_zero(f,x1,x2)
tolerance = 1e-10;
if(f(x1)==0)
x=x1;
return
elseif(f(x2)==0)
x=x2;
return
else
while tolerance < abs((x2-x1)/2)
x3= mean([x1,x2]);
if(f(x3)==0)
x=x3;
return
elseif(f(x1)*f(x3)>0)
x1=x3;
elseif(f(x1)*f(x3)<0)
x2=x3;
end
x = x3;
end
end
end
  1 commentaire
Walter Roberson
Walter Roberson le 29 Juin 2017
I notice this code does not check that f(x1) and f(x2) are opposite sign. Using bisection like this is only valid if you know two points where the sign differs.

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by