Efficient way to solve an equation in MATLAB
4 views (last 30 days)
I have a nested for loop system that will run 251658240...you heard me correctly. There isn't much in this for loop that is time-consuming, except solving this equation: where "x" is a costant that changes with each iteration. The method I am using right now is
theta = vpasolve((2*theta + sin(2*theta))==(pi*sin(x)));
Is there a way to make this solving process faster? Cause its soooo time-consuming doing it this way
Steven Lord on 25 Sep 2022
Solve numerically using fzero. Here I've written a function handle that itself makes function handles. I can pass that generated function handle into fzero to get a solution.
f = @(x) @(theta) 2*theta + sin(2*theta) - (pi*sin(x));
h = f(1) % h "remembers" that x is 1
sol = fzero(h, 1)
Check the solution
h(sol) % Should be close to 0
Or check explicitly, if the way f creates a function handle looks like "magic".
2*sol + sin(2*sol) - pi*sin(1)
If you're going to solve this repeatedly for potentially the same value of x, you may also want to memoize h.