solve nonlinear equation
古いコメントを表示
I write a method to solve any equation
function [ result ] = get( func )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
result=solve(func);
end
when I run it on command window,I get an error.
>> f=@(x) 2*x+1
f =
@(x)2*x+1
>> [ result ] = get( f )
??? Error using ==> error
Function is not defined for 'function_handle' inputs.
Error in ==> solve>getEqns at 182
error('symbolic:solve:errmsg1', ...
Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});
Error in ==> get at 4
result=solve(func);
so how can I fix the error
回答 (3 件)
Oleg Komarov
2011 年 5 月 31 日
You have to convert the anonymous function handle to a string function:
fh = @(x,y) 2*x+1-2*y;
% Convert to string
fs = func2str(fh);
% Extract only function part w/o @(.)
fs = regexprep(fs,'@\([\w,]+\)','');
% Solve
solve(fs)
4 件のコメント
Walter Roberson
2011 年 6 月 1 日
- Be careful about which variable is being solved for
- func2str() only going to do a literal string conversion. If any of the variables involved have "captured values", then the captured value will not have its value substituted by func2str()
- searching for the first ')' and deleting from the beginning to there would probably be more efficient than regexprep()
Oleg Komarov
2011 年 6 月 1 日
The snippet is just un unrefined example, thus point 1 wasn't addressed in the example explicitly.
For point 2 I agree it becomes overly complicated (functions, workspace...) for a problem that can be stated as symbolic from the beginning
For point 3 premature optimization is the... :D (just wanted to write a one liner)
Eman Ahmed Elsayed
2011 年 6 月 1 日
Matt Fig
2011 年 6 月 1 日
Read the rest of the post. FUNC2STR is working just like Oleg showed...
Walter Roberson
2011 年 6 月 1 日
0 投票
solve() only applies to symbolic expressions. If you are going to use symbolic expressions you might as well do so from the start and save the trouble about constructing function handles.
4 件のコメント
Oleg Komarov
2011 年 6 月 1 日
Totally agree
Eman Ahmed Elsayed
2011 年 6 月 1 日
Walter Roberson
2011 年 6 月 1 日
If this is for an assignment, then it would help us to read the assignment question, as then we would not suggest things you cannot use.
Walter Roberson
2011 年 6 月 1 日
If the assignment prohibits you from passing around symbolic variables, then why does it permit you to use solve(), the symbolic equation solver?
Eman Ahmed Elsayed
2011 年 6 月 1 日
0 投票
1 件のコメント
Oleg Komarov
2011 年 6 月 1 日
What do you mean you have the same problem? Post the whole code you're using and the error message.
カテゴリ
ヘルプ センター および File Exchange で Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!