3

を使用して関数とその導関数をプロットしようとしていますfplot

fplot('3*x*sin(x) - 2*x', [-2*pi 2*pi], 'r')

これは機能していますが、以下のコマンドはエラーを示しています。

fplot('diff(3*x*sin(x) - 2*x)', [-2*pi 2*pi], 'g')

エラー表示

??? Subscripted assignment dimension mismatch.

Error in ==> fplot at 105
x = xmin+minstep; y(2,:) = feval(fun,x,args{4:end});

いくつかの提案を教えてください。

4

2 に答える 2

4

問題はdiff関数文字列に含まれています。関数は、N 個の入力に対して N 個の出力を生成する必要がありますが、diffN-1 個の出力が必要です。ドキュメントからfplot(強調を追加):

関数は y = f(x) の形式でなければなりません。ここで、x は範囲が範囲を指定するベクトルであり、y は x と同じサイズのベクトルであり、x 内の点での関数の値を含みます (最初の例を参照)。 )。

zplesivcak の回答は、この制限を回避する 1 つの方法を示しています。関数を非シンボリックに評価することもできます。

x = linspace(-2*pi, 2*pi, 1000);
y = diff(3*x.*sin(x) - 2*x);
figure
plot(y)
于 2013-01-16T19:00:20.907 に答える
1

最初に導関数を計算し、結果を文字列に変換してから、取得した関数をプロットできます。

syms x;
di = char( diff(3*x*sin(x)-2*x) );
fplot(di, [-2*pi 2*pi], 'g');

編集: @shoelzer は、受け取ったエラーの正しい説明を提供します。

于 2013-01-16T18:43:49.890 に答える