Using fsolve with type double

4 visualizaciones (últimos 30 días)
Özgü Dönmez
Özgü Dönmez el 25 de Mayo de 2020
Editada: Özgü Dönmez el 26 de Mayo de 2020
FSOLVE requires all values returned by functions to be of data type double.
Hi, in my MATLAB code there is a function calcX2 and in the main it solves system of 2 nonlinear equations. I defined all variables as syms.
The function is the following;
sumenergy=(((tetha_1)*(Cp_1)*((z(1))-(T_1)))+ ((tetha_2)*(Cp_2)*((z(1))-(T_2)))+((tetha_3)*(Cp_3)*((z(1))-(T_3))));
sumenergy2= (delta_H_T_ref+ (delta_Cp*(z(1)-T_ref)));
F=zeros
for i=1:2
F=[ (U_A*(T_a-z(1))/FA_0)-((z(2)-X_1)*sumenergy2)-(sumenergy);
(V_2*((k_1)*exp(act_energy_per_R*((1/T_k_1)-(1/z(1)))))*CA_0*(1-z(2))^2)-(FA_0*(z(2)-X_1)) ]
end
the main:
func=@calcX2;
z0=[0 0];
conversion= fsolve(func, z0)
But, the code didn't work and it gives error: FSOLVE requires all values returned by functions to be of data type double. How can I eliminate this error? What does this mean?
  2 comentarios
Stephen23
Stephen23 el 26 de Mayo de 2020
Original question by Özgü Dönmez retrieved from Google Cache:
"FSOLVE requires all values returned by functions to be of data type double"
Hi, in my MATLAB code there is a function calcX2 and in the main it solves system of 2 nonlinear equations. I defined all variables as syms.
The function is the following;
sumenergy=(((tetha_1)*(Cp_1)*((z(1))-(T_1)))+ ((tetha_2)*(Cp_2)*((z(1))-(T_2)))+((tetha_3)*(Cp_3)*((z(1))-(T_3))));
sumenergy2= (delta_H_T_ref+ (delta_Cp*(z(1)-T_ref)));
F=zeros
for i=1:2
F=[ (U_A*(T_a-z(1))/FA_0)-((z(2)-X_1)*sumenergy2)-(sumenergy);
(V_2*((k_1)*exp(act_energy_per_R*((1/T_k_1)-(1/z(1)))))*CA_0*(1-z(2))^2)-(FA_0*(z(2)-X_1)) ]
end
the main:
func=@calcX2;
z0=[0 0];
conversion= fsolve(func, z0)
But, the code didn't work and it gives error: FSOLVE requires all values returned by functions to be of data type double. How can I eliminate this error? What does this mean?
Ameer Hamza
Ameer Hamza el 26 de Mayo de 2020
Özgü, how is deleting the question is going to help you in any way? The code in your question is already part of my answer. The only thing it accomplishes is that you are less likely to get a response on any new question.

Iniciar sesión para comentar.

Respuestas (1)

Ameer Hamza
Ameer Hamza el 25 de Mayo de 2020
To use a symbolic equation with fsolve(), first convert it to a floating-point function handle. See matlabFunction(): https://www.mathworks.com/help/releases/R2020a/symbolic/matlabfunction.html
  3 comentarios
Ameer Hamza
Ameer Hamza el 25 de Mayo de 2020
Create function like this
function F=calcX2() % z was not being used
syms T X_2
z=[T, X_2];
syms tetha_1 tetha_2 tetha_3 Cp_1 Cp_2 Cp_3 T_1 T_2 T_3 X_1 T_ref T_ad U_A T_a CA_0 v_0 FA_0 V_2 k
syms k_1 act_energy_per_R T_k_1
V_2=0.1;
X_1=0.2;
T_1=300.0;
T_2=300.0;
T_3=300.0;
T_ref=298.0;
Cp_1=10.0;
Cp_2=10.0;
Cp_3=20.0;
tetha_1=1.0;
tetha_2=1.0;
tetha_3=2.0;
delta_Cp=(2*Cp_3)-(Cp_2)-(Cp_1);
CA_0= 10^3;
v_0=0.4;
FA_0=(CA_0)*(v_0);
U_A= 5*10^3;
T_a=350.0;
T_ad=350.0;
delta_H_T_ref=-8540
V_1=1.0;
act_energy_per_R=2663.75
T_k_1=300.0;
k_1=(v_0*X_1)/(V_1*CA_0*(1-X_1)^2)
k=(k_1)*exp(act_energy_per_R*((1/T_k_1)-(1/z(1))));
sumenergy=(((tetha_1)*(Cp_1)*((z(1))-(T_1)))+ ((tetha_2)*(Cp_2)*((z(1))-(T_2)))+((tetha_3)*(Cp_3)*((z(1))-(T_3))));
sumenergy2= (delta_H_T_ref+ (delta_Cp*(z(1)-T_ref)));
F=zeros
for i=1:2
F=[ (U_A*(T_a-z(1))/FA_0)-((z(2)-X_1)*sumenergy2)-(sumenergy);
(V_2*((k_1)*exp(act_energy_per_R*((1/T_k_1)-(1/z(1)))))*CA_0*(1-z(2))^2)-(FA_0*(z(2)-X_1)) ]
end
F = matlabFunction(F, 'Vars', {[T, X_2]});
end
and in the script write
func = calcX2();
z0=[0,0];
conversion = fsolve(func, z0)
Ameer Hamza
Ameer Hamza el 25 de Mayo de 2020
Because inside the function, you have a line
z = [T, X_2];
which overwrite the value of 'z' no matter what you input, so I remove it.

Iniciar sesión para comentar.

Categorías

Más información sobre Solver Outputs and Iterative Display en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by