Fsolve Intemidiate equations result

7 ビュー (過去 30 日間)
Rofl One
Rofl One 2021 年 10 月 21 日
回答済み: Matt J 2021 年 12 月 1 日
have a problem with MatLAB fsolve. How can I get the intermediate calculations for a given function? not only for the desired variable, but also for the equations included in the system for fsolve
fsolve code
function solve_syst ()
a_init = -2;
b = 5;
c = 6;
d = 8;
syst_eq = @(a) syst_3 (a, b, c, d);
%options = optimoptions('fsolve','Display','none', 'outputFcn')
[a_vih, fval] = fsolve (syst_eq, a_init);
first eq
function x1 = syst_1 (a, b) %first eq
x1 = a * 6 + 2 * b;
second eq
function x2 = syst_2 (c, d)%second eq
x2 = c * 4 - d * 2;
system for fsolve
function [prov, x1, x2] = syst_3 (a, b, c, d) %system for fsolve
x1 = syst_1 (a, b)
x2 = syst_2 (c, d)
prov = x1 - x2;
fsolve calculates intermediate values ​​x1 and x2 (visible in the command window), but I cannot get these values ​​separately to use in further calculations

回答 (2 件)

Alan Weiss
Alan Weiss 2021 年 10 月 22 日
You could use persistent variables along with assignin to write the variaible value to a workspace variable. Something like this:
function [prov, x1, x2] = syst_3 (a, b, c, d) %system for fsolve
persistent x1x2hist
x1 = syst_1 (a, b)
x2 = syst_2 (c, d)
x1x2hist = [x1x2hist;x1,x2];
prov = x1 - x2;
That said, I think that it is a mistake to use fsolve to solve a linear system of equations. Instead, you should use the backslash command. You might also benefit from using the problem-based approach.
Good luck,
Alan Weiss
MATLAB mathematical toolbox documentation
  1 件のコメント
Rofl One
Rofl One 2021 年 12 月 1 日
Thank you!


Matt J
Matt J 2021 年 12 月 1 日
After solving, you can simply use the objective function that you have already written to obtain these values:
[a_vih, fval] = fsolve (syst_eq, a_init);
[~, x1, x2] = syst_eq(a_vih)





Community Treasure Hunt

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

Start Hunting!

Translated by