Understanding how Matlab approximations work
이전 댓글 표시
Dear all,
I have what may be a naive question about how Matlab truly works. I have an ODE whose solution lies on the unit sphere. One of the equilibrium points is (1,0,0). When I look for the equilibrium points using numerical methods, Matlab tells me that the equilibrium point is
1.000000000000000
0
0.000000000000000
When I then try to solve the equation, after some time, the solution of the equation leaves the equilibrium and starts to go around the sphere. But if before solving the equation I specify to Matlab to start from the point
1
0
0
then nothing happens (which is rather normal since the point is an equilibrium one, even if unstable). My question is therefore, why does the solution leave the equilibrium when the starting point is
1.000000000000000
0
0.000000000000000
To me, this was the exact same as
1
0
0
since I thought Matlab did not use more than 16 digits. But I am obviously wrong since the solutions are not the same... Is Matlab hiding me some numerical approximations somewhere?
Thank you very much
답변 (1개)
per isakson
2013년 4월 9일
Try
format hex
댓글 수: 6
per isakson
2013년 4월 9일
편집: per isakson
2013년 4월 9일
I can only speculate:
- I assume your ODE-solver is based on numerical methods
- the ODE-solver uses a tolerance
- one should always expect rounding errors with numerical methods
- the exact solution, (1,0,0), is the exception. I guess the solver finds this solution only when it never starts doing numerical calculations
- Matlab's flint (floating point integer) might have something to do with it. 1 is flint 1.00 is not.
- to understand one has to inspect the code of the ODE-solver
per isakson
2013년 4월 9일
편집: per isakson
2013년 4월 9일
"My question is not about why this happens but why the second set of coordinates does not represent the point (1,0,0) for which the solution stays at the equilibrium point."
- the hex output indicates that the two *inputs*** are indeed identical
- however, fminsearch obviously sees a difference (whatever that is)
fminsearch is implemented in m-code. With the debugger, you could step through the function with the two different inputs. That might explain what you see.
Pl Pl
2013년 4월 9일
per isakson
2013년 4월 9일
편집: per isakson
2013년 4월 9일
Communication is tricky. I tried to say that the two sets of inputs are indentical. (I added the word "inputs" in my previous comment.)
>> format hex
>> 1,0,0
ans =
3ff0000000000000
ans =
0000000000000000
ans =
0000000000000000
>> 1.0000, 0.0000, 0.0000
ans =
3ff0000000000000
ans =
0000000000000000
ans =
0000000000000000
>>
Still the two outputs differ.
Did you try to step through the code?
카테고리
도움말 센터 및 File Exchange에서 Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!