您实际上是在尝试求解一个由两个方程组成的系统,至少在一般情况下是这样。对于其中一个方程是常数的简单情况,因此 y = 1,我们可以使用 fzero 求解它。当然,使用图形方式找到一个好的起点总是一个好主意。
f=@(t) (9*(sin(t))./t) + cos(t);
y0 = 1;
这个想法是,如果你想找到两条曲线相交的地方,就是将它们相减,然后寻找结果差的根。
(顺便注意一下,我使用了./进行除法,这样MATLAB在f中输入向量或数组就不会出现问题了。这是养成的好习惯。)
请注意,f(t) 在 MATLAB 中并未严格定义为零,因为它导致 0/0。 (该功能当然存在限制,可以使用我的limest 工具进行评估。)
limest(f,0)
ans =
10
因为我知道解不是 0,所以我将使用 fzero 边界从那里寻找根。
format long g
fzero(@(t) f(t) - y0,[eps,6*pi])
ans =
2.58268206208857
但这是唯一的根吗?如果我们有两个或多个解决方案怎么办?找到一个完全一般函数的所有根可能是一个令人讨厌的问题,因为一些根可能无限接近,或者可能有无限多个根。
一个想法是使用一个知道如何为一个问题寻找多种解决方案的工具。同样,在文件交换上找到,我们可以使用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