Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
Drexel University or The Math Forum.



Re: how to solve tan(x)=3x/(3+x^2)
Posted:
Feb 13, 2013 4:11 AM


On 13.02.13 00:54, Jingxin wrote: > So I tried to use Solve function to solve this equation, tried root, findroot. By using FindRoot, I was able to get one solution which is closest to x0, but, what if I want all the answers from 0,10 or the first 10 term?
Just a disclaimer up front: Numerically (and without interval numerics), you can never know how many zeroes a transcendental (i.e., nonpolynomial) equation has, so there is no way to guarantee finding all of them.
Your input is sufficiently tame that finding (approximations) to all zeroes in some range is a reasonable expectation, though. I don't think there is a nice calling syntax in the symbolic toolbox yet, but you can call MuPAD commands directly using feval, so you can for example use numeric::realroots, which returns ranges such that any zero of your function is in one of those:
>> eq = tan(x)==3*x/(3+x^2)
eq =
tan(x) == (3*x)/(x^2 + 3)
>> s = feval(symengine, 'numeric::realroots', ... eq, 'x=0..10', 1e4)
s =
[ [0.0, 0.0485992431640625], [3.726348876953125, 3.7264251708984375], [6.681365966796875, 6.6814422607421875], [9.7154998779296875, 9.715576171875]]
>> vpasolve(eq, x, s(1))
ans =
0
>> vpasolve(eq, x, s(2))
ans =
3.7263846964537519995745420194228
>> vpasolve(eq, x, s(3))
ans =
6.6814348529499497169811754681414
>> vpasolve(eq, x, s(4))
ans =
9.7155660951117226365449206516755
HTH, Christopher



