solving equations initially written as strings using fsolve
Show older comments
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 Comments
John D'Errico
on 29 Apr 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
on 29 Apr 2019
dpb
on 29 Apr 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
on 29 Apr 2019
Matt J
on 29 Apr 2019
But why not just use solve()?
S H
on 29 Apr 2019
Matt J
on 29 Apr 2019
Maybe when a closed form solution does not exist, but your equations are linear...
S H
on 29 Apr 2019
Matt J
on 29 Apr 2019
So solve() should work fine.
Answers (0)
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!