Efficient way to solve an equation in MATLAB
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ali Almakhmari
le 25 Sep 2022
Commenté : Dyuman Joshi
le 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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1135950/image.png)
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 commentaires
Réponse acceptée
Steven Lord
le 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 commentaires
Steven Lord
le 25 Sep 2022
That works if x has been defined before you create the function handle, but note that changing the value of x after the function handle has been created does not change the function handle.
x = 1;
f = @(y) x+y;
f(2) % 3
x = 999;
f(2) % still 3 not 1002
Dyuman Joshi
le 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)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!