Azzera filtri
Azzera filtri

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.

1 visualizzazione (ultimi 30 giorni)
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);

Risposta accettata

Star Strider
Star Strider il 25 Mag 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 Commenti
Star Strider
Star Strider il 1 Giu 2018
Not stupid at all. The ga (link) function is the genetic algorithm implementation in the Global Optimization Toolbox.
Walter Roberson
Walter Roberson il 1 Giu 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.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by