このグラフの描画に関するコードの誤ってる点をおしえてください
2 views (last 30 days)
Show older comments
このコードの誤っている点を教えてください
以下のグラフを書きたいのです。
また、グラフの囲む部分に色を塗りたいのですがどうすれば良いでしょうか。
<コード>
fplot(@(x) 0.5*cos(2*pi*x)+7/2,[-2,2],"green")
hold on
fplot(@(x) x^4-x^2+6,[-1,1],"green")
hold on
fplot(@(x) 12/(x+1),[1,7],"blue")
hold on
fplot(@(x) 12/(-x+1),[-7,-1],"blue")
hold on
grid on

4 Comments
Accepted Answer
Atsushi Ueno
on 23 Feb 2022
% y = f(x) の形式の関数を指定します。関数は、ベクトルの入力引数を受け入れ、
% 同じサイズのベクトルの出力引数を返さなければなりません。
% 最高のパフォーマンスを得るには、行列演算子ではなく、配列演算子を使用します。
% たとえば、* (mtimes) ではなく .* (times) を使用します。
>このコードの誤っている点を教えてください
このコードは「正しい」とも「誤っている」ともいえます。事実、fplot関数はwarningを出しながらも動作しています。
数式の入力変数xがスカラ値の場合は問題なく演算出来ますが、xが複数の要素を持つ場合は一部の演算を行う事が出来ません。MATLAB(fplot関数)は賢いので、xに複数の要素を入力して高速に演算しようとしますが、複数の要素を一度に演算出来ない場合はスカラ値の入力を繰り返して対応し、それによりパフォーマンスが下がる可能性がある為warningを表示します。
for x = 1:3
x % xの値(スカラ値)を表示
x^4-x^2+6 % 問題なく演算出来る
end
x = [1 2 3] % xに複数の要素を格納する事も出来る。これを数式に入力すれば一度に演算出来る
x.^4-x.^2+6 % 演算子にドットを付けると問題なく演算出来る
x^4-x^2+6 % 演算子にドットが付いていないとエラーが出る
MATLABにおける「ドット付き演算子」の意味は「要素毎の演算」です。詳細は上記リンクを参照ください。
MATLABにおいてより良い形にするには、各種数式の演算子にドットを付けて行列演算に対応した数式にすべきです。
スカラ倍(0.5倍、2倍、π倍)する乗算演算子(*)に対しては、ドットを付けても付けなくても同じです。複数要素×複数要素の場合は乗算にもドットを付ける必要があります。
wave1 = @(x) 0.5*cos(2*pi*x)+7/2;
wave2 = @(x) x.^4-x.^2+6;
Ridg1 = @(x) 12./(x+1);
Ridg2 = @(x) 12./(-x+1);
0 Comments
More Answers (0)
See Also
Categories
Find more on PX4 Autopilots 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!