how define a conditional handle function?
26 ビュー (過去 30 日間)
古いコメントを表示
As you know, for
f=@(x) sin(x)/x;
we get f(0)=NaN
if we would like get f(0)=0
again with
f=@(x) (x==0)*0+(x~=0)*sin(x)/x;
we will receive f(0)=NaN.
how can i dominate this problem?
1 件のコメント
Adam
2017 年 5 月 4 日
編集済み: Adam
2017 年 5 月 4 日
if true
end
lines should not keep appearing around every bit of code. I don't really know why the '{} Code' button is setup to do this as so many people end up with it included in their code. Also don't include the lines of your question in the middle of one large code block - it is very confusing to read and separate out what is actually code and what is part of the question information.
I did the editing for you this time.
回答 (2 件)
Torsten
2017 年 5 月 4 日
編集済み: Torsten
2017 年 5 月 4 日
function main
x = [3 7.5 0 -0.03];
y = f(x)
function y = f(x)
i = find(x==0);
x(i) = 1;
y = sin(x)./x;
y(i) = 0;
end
Best wishes
Torsten.
3 件のコメント
Jan
2017 年 5 月 4 日
編集済み: Jan
2017 年 5 月 4 日
A function (see Torsten's answer) will be nicer and more efficient than an anonymous function. But if you realy have any good reasons:
f = @(x) sin(x) / [Inf(x==0), x(x~=0)];
This works for scalar x only. This would be better, because it is immediately clear, what it does:
function y = f(x)
y = sin(x) ./ x;
y(x==0) = 0;
end
7 件のコメント
Jan
2017 年 5 月 8 日
Avoid global variables. They cause more troubles than they solve. If you do not want to provide too many arguments, store them in a struct.
参考
カテゴリ
Help Center および File Exchange で Function Creation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!