Вы по существу пытаетесь решить систему двух уравнений, по крайней мере, в общем. Для простого случая, когда одно из уравнений является константой, таким образом, y = 1, мы можем решить ее с помощью fzero. Конечно, всегда полезно использовать графические средства для поиска хорошей отправной точки.
[email protected](t) (9*(sin(t))./t) + cos(t);
y0 = 1;
Идея заключается в том, если вы хотите, чтобы найти, где две кривые пересекаются, чтобы вычесть их, а затем посмотреть на корень из полученной разницы.
(Кстати, обратите внимание, что я использовал для ./ разрыва, так что MATLAB не будет проблемой для вектора или входного массива в ф. Это хорошая привычка развиваться.)
Обратите внимание, что 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
Спасибо, что нашли время, объяснив мне решение. – camelbrush