Solving a system of function handles with fsolve
31 次查看(过去 30 天)
显示 更早的评论
I have a problem using fsolve in order to solve a system of equations.
a1 to a6 are anonymous functions which are supposed to be equal to 0. T is a vector with six unknown variables T1 to T6. Each anonymous function consists of a term with at least two of those variables.
So with 6 equations and 6 unknowns the solver should be able to solve the system of equations.
I am calling the function like this:
T0 = [0 0 0 0 0 0];
Temp = fsolve(CalcTemps,T0)
function fun = CalcTemps(T)
global a1 a2 a3 a4 a5 a6
fun(1) = a1;
fun(2) = a2;
fun(3) = a3;
fun(4) = a4;
fun(5) = a5;
fun(6) = a6;
end
In my understanding the code is not working as it is not possible to store function handles in fun. I also tried to create fun as a cell array so that the function handles can be stored but then I get an error as fun has to be a function handle and not a cell array.
So my question is: Is it possible to store multiple function handles (a1 to a6) in a single function handle (fun)?
0 个评论
采纳的回答
Stephan
2018-10-24
编辑:Stephan
2018-10-24
Hi,
use:
calc_temp
function calc__tenp
T = @(T1,T2,T3,T4,T5,T6) [T1 T2 T3 T4 T5 T6]; % unknown variable vector
T_Amb = 20;
a1 = @(T)5*T(2)-T(1); % anonymous functions
a2 = @(T)2*T(3)-4*T(2);
a3 = @(T)T(4)-T(3);
a4 = @(T)2*T(5)-3*T(4);
a5 = @(T)3*T(6)-4*T(5);
a6 = @(T)5*T_Amb-4*T(6);
T0 = [20 20 20 20 20 20]; % initial guess
Temp = fsolve(@CalcTemps,T0)
function fun = CalcTemps(T)
fun(1) = a1(T); % ERROR is produced in this line
fun(2) = a2(T);
fun(3) = a3(T);
fun(4) = a4(T);
fun(5) = a5(T);
fun(6) = a6(T);
end
end
Results:
Temp =
31.2500 6.2500 12.5000 12.5000 18.7500 25.0000
Best regards
Stephan
2 个评论
Stephan
2018-10-24
Please accept useful answers in order to help other people with similar Problems finding helpful Solutions in the future.
更多回答(1 个)
Matt J
2018-10-23
You need to evaluate your function at T,
function fun = CalcTemps(T)
global a1 a2 a3 a4 a5 a6
fun(1) = a1(T);
fun(2) = a2(T);
fun(3) = a3(T);
fun(4) = a4(T);
fun(5) = a5(T);
fun(6) = a6(T);
end
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Surrogate Optimization 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!