Efficient way to solve an equation in MATLAB
3 views (last 30 days)
Show older comments
Ali Almakhmari
on 25 Sep 2022
Commented: Dyuman Joshi
on 26 Sep 2022
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

syms theta
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
0 Comments
Accepted Answer
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.
3 Comments
Dyuman Joshi
on 26 Sep 2022
Yes, I am aware of that. However, what would be the difference between -
f = @(x) @(theta) 2*theta + sin(2*theta) - (pi*sin(x));
h = f(1) % h "remembers" that x is 1
sol = fzero(h, 1)
F = @(x,theta) 2*theta + sin(2*theta) - (pi*sin(x));
fzero(@(theta) F(1,theta),1)
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!