Looking for an iterative Solver to use in a loop with changing constants?

1 回表示 (過去 30 日間)
Adam
Adam 2014 年 7 月 23 日
回答済み: Star Strider 2014 年 7 月 23 日
I have not used any kind of iterative solver but I am facing a challenge when trying to resolve the following equation:
sigma = theta+acos((A+B+(2*A*B/(2*A*B/(A+B-(B-A)*cos(2*theta))-(A+B))))/(B-A))/2;
A & B are variables input by the user but do not vary during the loop. Sigma is changing during the loop though and I need to determine theta at each loop. Can anyone advise an iterative solver to resolve this and demonstrate briefly how it would be used in this application since I have not used it before.
Thanks, Adam

回答 (1 件)

Star Strider
Star Strider 2014 年 7 月 23 日
This would be my approach:
thta = @(theta,sigma,A,B) sigma - (theta+acos((A+B+(2*A*B/(2*A*B/(A+B-(B-A)*cos(2*theta))-(A+B))))/(B-A))/2);
A = 3;
B = 5;
sgma = 0:7;
for k1 = 1:length(sgma)
sigma = sgma(k1);
theta(k1) = fzero(@(theta) thta(theta,sigma,A,B),0);
end
The anonymous function thta is essentially your equation but subtracting it from sigma so it will have a root (zero) at theta. It will pick up A and B from the workspace and through the argument list, sigma will vary in the loop, and theta will be a vector containing one root (close to zero) for each set of arguments. If there are more than one root, you will need to provide initial estimates close to those roots.

カテゴリ

Help Center および File ExchangeSolver Outputs and Iterative Display についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by