How to feed additional variables into fsolve function
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Matthew Campbell
am 2 Apr. 2021
Kommentiert: Matthew Campbell
am 3 Apr. 2021
Hello,
I have a function F = quad(x,REF)
function F = quad(x,REF)
F(1) = x(3)/((T(1)/x(1))-1) + log(x(2)) - log(dv(1))
F(2) = x(3)/((T(2)/x(1))-1) + log(x(2)) - log(dv(2))
F(3) = x(3)/((T(3)/x(1))-1) + log(x(2)) - log(dv(3))
F(4) = x(3)/((T(4)/x(1))-1) + log(x(2)) - log(dv(4))
F(5) = x(3)/((T(5)/x(1))-1) + log(x(2)) - log(dv(5))
F(6) = x(3)/((T(6)/x(1))-1) + log(x(2)) - log(dv(6))
F(7) = x(3)/((T(7)/x(1))-1) + log(x(2)) - log(dv(7))
F(8) = x(3)/((T(8)/x(1))-1) + log(x(2)) - log(dv(8))
end
I'd like to feed different dv and T values from the main program and solve. I've tried the below code from another post (modified and played around a bit to no avail). How can I feed dv and T values into the function quad and then use fsolve?
REF = [x,dv,T];
f =@(x) quad(x,REF);
options = optimoptions('fsolve','Display','iter');
% fun(dv,T) = @quad;
x0 = [150,0.045,7.5];
[out,fval] = fsolve(f,x0,options)
This works fine when the T and dv are already in the function quad, but I don't want to manually copy and paste new values of dv and T in.
function F = quad(x)
dv = [3610.30 2040.80 1203.70 483.04 106.03 15.54 3.39 1.97]
T = [-40 -35 -30 -20 0 40 100 135] + 273.15
F(1) = x(3)/((T(1)/x(1))-1) + log(x(2)) - log(dv(1))
F(2) = x(3)/((T(2)/x(1))-1) + log(x(2)) - log(dv(2))
F(3) = x(3)/((T(3)/x(1))-1) + log(x(2)) - log(dv(3))
F(4) = x(3)/((T(4)/x(1))-1) + log(x(2)) - log(dv(4))
F(5) = x(3)/((T(5)/x(1))-1) + log(x(2)) - log(dv(5))
F(6) = x(3)/((T(6)/x(1))-1) + log(x(2)) - log(dv(6))
F(7) = x(3)/((T(7)/x(1))-1) + log(x(2)) - log(dv(7))
F(8) = x(3)/((T(8)/x(1))-1) + log(x(2)) - log(dv(8))
end
(CALLED FROM THE MAIN AS:)
fun = @quad;
x0 = [150,0.045,7.5];
[out,fval] = fsolve(fun,x0,options)
0 Kommentare
Akzeptierte Antwort
Stephen23
am 3 Apr. 2021
dv = [3610.30,2040.80,1203.70,483.04,106.03,15.54,3.39,1.97];
T = [-40,-35,-30,-20,0,40,100,135] + 273.1;
f = @(x) myquad(x,dv,T);
x0 = [150,0.045,7.5];
[out,fval] = fsolve(f,x0)
function F = myquad(x,dv,T)
F(1) = x(3)/((T(1)/x(1))-1) + log(x(2)) - log(dv(1));
F(2) = x(3)/((T(2)/x(1))-1) + log(x(2)) - log(dv(2));
F(3) = x(3)/((T(3)/x(1))-1) + log(x(2)) - log(dv(3));
F(4) = x(3)/((T(4)/x(1))-1) + log(x(2)) - log(dv(4));
F(5) = x(3)/((T(5)/x(1))-1) + log(x(2)) - log(dv(5));
F(6) = x(3)/((T(6)/x(1))-1) + log(x(2)) - log(dv(6));
F(7) = x(3)/((T(7)/x(1))-1) + log(x(2)) - log(dv(7));
F(8) = x(3)/((T(8)/x(1))-1) + log(x(2)) - log(dv(8));
end
Weitere Antworten (1)
Sulaymon Eshkabilov
am 2 Apr. 2021
Bearbeitet: Sulaymon Eshkabilov
am 2 Apr. 2021
Here is a combined and a bit simplified solution:
options = optimoptions('fsolve','Display','iter');
x0 = [150,0.045,7.5];
dv = [3610.30 2040.80 1203.70 483.04 106.03 15.54 3.39 1.97];
T = [-40 -35 -30 -20 0 40 100 135] + 273.15;
[out,fval] = fsolve(@(x)([ x(3)/((T(1)/x(1))-1) + log(x(2)) - log(dv(1));
x(3)/((T(2)/x(1))-1) + log(x(2)) - log(dv(2));
x(3)/((T(3)/x(1))-1) + log(x(2)) - log(dv(3));
x(3)/((T(4)/x(1))-1) + log(x(2)) - log(dv(4));
x(3)/((T(5)/x(1))-1) + log(x(2)) - log(dv(5));
x(3)/((T(6)/x(1))-1) + log(x(2)) - log(dv(6));
x(3)/((T(7)/x(1))-1) + log(x(2)) - log(dv(7));
x(3)/((T(8)/x(1))-1) + log(x(2)) - log(dv(8));]), x0,options)
Siehe auch
Kategorien
Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!