Hello, I want to solve system of non linear equations using fsolve. There are thre equations and two unknowns K and L. looking at my code, please advice how to best do this. Also please advice if this is the best way or there is an alternate option.
2 ビュー (過去 30 日間)
古いコメントを表示
Ld= 0.8194 %constant
% cos^2(K*L)+ Ld*K*sin(K*L)cos(K*L)=2.2 two non linear equations
% cos^2(K*L)=0.299
% Ld*cos^2(K*L)+sin(K*L)cos(K*L)/K=0.262
cos^2(K*L)+ Ld*K*sin(K*L)cos(K*L)-2.2=0
cos^2(K*L)-0.299=0
Ld*cos^2(K*L)+(sin(K*L)cos(K*L))/K-0.262=0
function F=calib(K,L)
F(1)=cos(K*L)^2+ Ld*K*sin(K*L)*cos(K*L)-2.2;
F(2)=cos(K*L)^2-0.299;
F(3)=Ld*cos^2(K*L)+(sin(K*L)cos(K*L))/K-0.262;
fun = @calib (K,L);
initial_val=[2.73,0.6] % initial value of K and L respectively
x = fsolve(fun,initial_val);
2 件のコメント
Star Strider
2018 年 5 月 25 日
In the future, please highlight the code in your questions or comments, then click on the {}Code button to format it.
採用された回答
Star Strider
2018 年 5 月 25 日
You have the correct approach and are close to the correct solution. There are some errors in your code for ‘calib’ that I corrected. (Check to be certain that they do what you want.) I also created it as an anonymous function, for convenience.
The optimization functions all expect a vector of parameters, not separate parameters. I changed ‘fun’ to provide the correct calling convention, without having to change ‘calib’.
This runs:
Ld= 0.8194 %constant
calib = @(K,L) [cos(K*L).^2 + Ld*K*sin(K*L).*cos(K*L)-2.2; cos(K*L).^2-0.299; Ld*cos(K*L).^2 + (sin(K*L).*cos(K*L))/K-0.262];
fun = @(b) calib(b(1),b(2));
initial_val=[2.73, 0.6] % initial value of K and L respectively
[x,fval] = fsolve(fun,initial_val);
You may need to experiment with it to actually solve your equations, since the end values are not near zero.
14 件のコメント
Star Strider
2018 年 6 月 1 日
Not stupid at all. The ga (link) function is the genetic algorithm implementation in the Global Optimization Toolbox.
Walter Roberson
2018 年 6 月 1 日
You appear to be trying to match experimental data to theoretical equations as if each entry were exact and the model was perfect. You should instead be looking for parameters that minimize the overall error. For that task, I recommend the Curve Fitting Toolbox.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Fuzzy Logic Toolbox についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!