solving equations initially written as strings using fsolve
古いコメントを表示
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 件のコメント
John D'Errico
2019 年 4 月 29 日
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
2019 年 4 月 29 日
dpb
2019 年 4 月 29 日
"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
2019 年 4 月 29 日
Matt J
2019 年 4 月 29 日
But why not just use solve()?
S H
2019 年 4 月 29 日
Matt J
2019 年 4 月 29 日
Maybe when a closed form solution does not exist, but your equations are linear...
S H
2019 年 4 月 29 日
Matt J
2019 年 4 月 29 日
So solve() should work fine.
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Function Creation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!