少なくとも一般的には、基本的に 2 つの連立方程式を解こうとしています。方程式の 1 つが定数であり、したがって y = 1 である単純なケースでは、fzero を使用して解くことができます。もちろん、適切な出発点を見つけるためにグラフィカルな手段を使用することは常に良い考えです。
f=@(t) (9*(sin(t))./t) + cos(t);
y0 = 1;
2 つの曲線が交差する場所を見つけたい場合は、それらを減算し、結果の差の根を探します。
(ちなみに、除算に ./ を使用したことに注意してください。これにより、MATLAB で f のベクトルまたは配列の入力に問題が発生しなくなります。これは開発するのに適した習慣です。)
f(t) は、0/0 になるため、MATLAB ではゼロで厳密に定義されていないことに注意してください。(関数にはもちろん制限があり、limestツールを使用して評価できます。)
limest(f,0)
ans =
10
解が 0 ではないことはわかっているので、そこから根を探して fzero 境界を使用します。
format long g
fzero(@(t) f(t) - y0,[eps,6*pi])
ans =
2.58268206208857
しかし、これは唯一のルートですか?解が 2 つ以上ある場合はどうなるでしょうか。完全に一般的な関数のすべての根を見つけることは厄介な問題になる可能性があります。いくつかの根が無限に接近している場合や、無限に多くの根が存在する場合があるためです。
1 つのアイデアは、問題に対する複数の解決策を探す方法を知っているツールを使用することです。繰り返しますが、ファイル交換で見つかったので、researchを使用できます。
y0 = 1;
rmsearch(@(t) f(t) - y0,'fzero',1,eps,6*pi)
ans =
2.58268206208857
6.28318530717959
7.97464518075547
12.5663706143592
13.7270312712311
y0 = -1;
rmsearch(@(t) f(t) - y0,'fzero',1,eps,6*pi)
ans =
3.14159265358979
5.23030501095915
9.42477796076938
10.8130654321854
15.707963267949
16.6967239156574