For instance,
x = -3.55:0.1:3.55;
y = x.^2 - 4;
Obviously, when x=2 or -2, y=0.
But I want to know how to use matlab to find zeros of a function y = f(x) when x is a matrix defined by the user like the above case.

3 件のコメント

Wenjie
Wenjie 2018 年 12 月 17 日
編集済み: Wenjie 2018 年 12 月 17 日
I want to use fzero to do so, but I don't know how, since x is a matrix, rather than a symbolic function.
Mark Sherstan
Mark Sherstan 2018 年 12 月 17 日
As per documentaiton note:
x = fzero(fun,x0) tries to find a point x where fun(x) = 0. This solution is where fun(x) changes sign—fzero cannot find a root of a function such as x^2.
Akira Agata
Akira Agata 2018 年 12 月 17 日
If your function is always polynomial, you can use roots function to do this task. Please look at the following help page.

サインインしてコメントする。

回答 (3 件)

Alexander
Alexander 2024 年 2 月 25 日

2 投票

If it's not a function but meassured data I would go like this in a first try:
x = -3.55:0.0001:3.55; % assuming 10 kHz sample frequency
y = x.^2 - 4;
yS = sign(y);
dyS = diff(yS);
Z=find(dyS ~= 0);
x(Z)

1 件のコメント

DAVID
DAVID 2024 年 9 月 20 日
This was really elegant, thanks!

サインインしてコメントする。

Wenjie
Wenjie 2018 年 12 月 17 日

1 投票

I've found the solution. First, define the function in a separate file as
function y = fun(x)
y = x.^2-4;
end
Then use fzero to find x value that will give y=0.
x0 = fzero(@(x) fun(x), 3)

3 件のコメント

Walter Roberson
Walter Roberson 2018 年 12 月 17 日
However this is not suitable for the case where x is a matrix like you asked in your Question.
fzero() itself is also not suitable for the case where you have an array-valued (probably multivariate) function: you need fsolve() from the Optimization Toolbox for that.
Nico
Nico 2024 年 2 月 25 日
What does the @(x) and the 3 mean? Sorry I'm university student with no experience...
Dyuman Joshi
Dyuman Joshi 2024 年 2 月 25 日
編集済み: Dyuman Joshi 2024 年 2 月 25 日
@(x) is the syntax used to define a Function Handle / Anonymous Functions
The 3 is provided as an initial guess for fzero() to work with - see fzero for more information.

サインインしてコメントする。

Walter Roberson
Walter Roberson 2018 年 12 月 17 日

0 投票

x(y==0)
Note that this can miss an indefinite number of zeroes of a function if the x do not happen to sample at the right places . It also will not detect zero crossings between x values . You could make use of the results to get hints about zero crossings .

カテゴリ

ヘルプ センター および File ExchangeMathematics についてさらに検索

タグ

質問済み:

2018 年 12 月 17 日

コメント済み:

2024 年 9 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by