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 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Sumera Yamin
el 25 de Mayo de 2018
Comentada: Walter Roberson
el 1 de Jun. de 2018
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 comentarios
Star Strider
el 25 de Mayo de 2018
In the future, please highlight the code in your questions or comments, then click on the {}Code button to format it.
Respuesta aceptada
Star Strider
el 25 de Mayo de 2018
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 comentarios
Star Strider
el 1 de Jun. de 2018
Not stupid at all. The ga (link) function is the genetic algorithm implementation in the Global Optimization Toolbox.
Walter Roberson
el 1 de Jun. de 2018
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.
Más respuestas (0)
Ver también
Categorías
Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!