solving equations initially written as strings using fsolve
Afficher commentaires plus anciens
Is it possible to solve the following equations that are initially written as string expressions?
eqns={...
'x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)-1';...
'x(1)-a*x(2)';...
'x(2)-a*x(3)';...
'x(3)-a*x(4)';...
'x(4)-a*x(5)';...
'x(5)-a*x(6)';...
'x(6)-a*x(7)'};
for kk=1:7
myF{kk}=str2func(eqns{kk});
end
funeqns=@(x) myF{:};
a=2;
x0=0.5*ones(1,7);
opts=optimoptions('fsolve','Algorithm','trust-region','TolFun',1e-12,...
'TolX',1e-12,'Display','off');
fs=fsolve(funeqns,x0,opts)';
9 commentaires
John D'Errico
le 29 Avr 2019
Is it possible? Probably. But you need to do significantly more than just call str2func, as for example, this is not a valid function:
str2func(eqns{1})
Warning: The input to STR2FUNC "x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)-1" is not a valid function name. This will generate an error in a future release.
ans =
function_handle with value:
@x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)-1
Also, MATLAB will not be able to automatically know that x is a vector of unknowns, but a is apparently something known. You would need to do some of the thinking for MATLAB there. For example, suppose that both a and x are variables in the base workspace.
S H
le 29 Avr 2019
dpb
le 29 Avr 2019
"Any way?" Sure...write a parser for the grammar each of the different files uses for its syntax to convert those to Matlab syntax.
Then, you've got to keep in mind the points John raised regarding what is in present context in workspace, etc., etc., ...
S H
le 29 Avr 2019
Matt J
le 29 Avr 2019
But why not just use solve()?
S H
le 29 Avr 2019
Matt J
le 29 Avr 2019
Maybe when a closed form solution does not exist, but your equations are linear...
S H
le 29 Avr 2019
Matt J
le 29 Avr 2019
So solve() should work fine.
Réponses (0)
Catégories
En savoir plus sur Programming dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!