0

私はMatlabを初めて使用します。関数を初期化するための適切な方法または最良の方法(=対= @またはその他のオプション)についてアドバイスを探しています。これにより、関数を区別し、特定の引数で値を見つけることができます特定の点での接線と同様にそれをプロットします。

私が発見したこと:

f = my function(x) % but needs x initalized; returns values
diff(f, x)
plot(x, f)

f = @(x) my function
diff(f, x) % doesn't work
fplot(f, x)

そして象徴的に

syms x
f = my function

しかし、最後の2つのケースでは、まだ値を取得したり、微分したり、fをプロットしたりできません。

4

1 に答える 1

1

あなたの特定のケースを考えると、関数を提供し、その分析的導関数を見つけたいとします。これを見つけたら、この点での導関数を決定し、元の関数に一致する接線をプロットします。

それを行う最善の方法は、確かsymsにシンボリック変数を定義するために使用し、それからdiffあなたがしたように微分することです。さて、残っているのは、これを実際の値に代入するために使用したいということです。非常に巧妙に作成されたmatlabFunction関数を使用して、それを行うことができます。これは、シンボリックな数学的に定義された方程式を受け取り、数値入力を受け入れることができる関数ハンドルを返します。このハンドルから返されるすべての演算子はelement-wiseであることを追加したいと思います。

分析導関数を取得したら、ポイントを新しく作成された関数に置き換えることにより、接線の傾きを非常に簡単に見つけることができます。matlabFunction次にmatlabFunction、元の関数を関数ハンドルに変換するために再度使用する必要があります。この接線上の点を見つけます。次に、点と勾配があり、次の方法で接線の方程式を簡単に見つけることができます。

y -y0 = m*(x - x0)

x0は目的のポイント、y0は元の関数で見られる出力、mは導関数を使用して検出された勾配です。

あなたが望むものを達成するために私が実行する手順は次のとおりです。

  1. シンボリック変数xt、何でも定義する
  2. 元の関数を定義する
  3. 導関数を計算しますdiff
  4. 2 と 3 の両方を関数ハンドルに変換します。matlabFunction
  5. 関数を代表する適切なドメインを定義する
  6. 元の関数をプロットする
  7. 傾きを求めたい点を選択してください
  8. 接線の方程式を計算し、この線の適切なドメインを決定します
  9. この線をプロットし、関心のあるポイントを強調します

各ステップでのコードは次のようになります... を使用して、例としてy = x^3傾きを分析しましょう。x = 2

%// Step #1
syms t;

%// Step #2
y = t^3;

%// Step #3
dy = diff(y, t);

%// Step #4
yh = matlabFunction(y);
dyh = matlabFunction(dy);

%// Step #5
x = -4:0.01:4;

%// Step #6
figure;
hold on;
plot(x, yh(x));

%// Step #7
x0 = 2;
slope = dyh(x0);

%// Step #8
%// y - y0 = m*(x-x0)
%// y = m*(x - x0) + y0
tol = 1;
x2 = x0-tol:0.01:x0+tol;
y0 = yh(x0);
out = slope*(x2 - x0) + y0;

%// Step #9
plot(x0, y0, 'r.');
plot(x2, out, 'g');

ひとつひとつの工程をゆっくりと進めていきましょう。

ステップ1

非常に簡単です。tここで関心のある変数として使用しています。

ステップ2

y = t^3前に定義したシンボリック変数を使用する関数を定義します。繰り返しますが、非常に簡単です。

ステップ#3

yステップ 2 で定義した関数の解析的導関数をt.... easy に関して計算します。

ステップ#4

元の関数と導関数の両方の数値関数ハンドルを作成して、ポイントを置換できるようにします...それらが配列または行列に格納されているかどうかに関係なく...この配列の各値が、それらが表す機能。

基本的に、matlabFunctionこれらを使用して、必要な数値を置き換えることができるようにする必要があります。

ステップ#5

ドメインを定義しました-4 <= x <= 4が、これはプロットしている関数によって異なります。適切なドメインが何であるかに応じて、これを変更する必要があります。0.01また、MATLAB で物事をプロットするとき、点の配列をプロットするため、ステップ サイズも選択しました。これにより、0.01 刻みで -4 から 4 までの値のリストを生成できます。

ステップ #6

新しい Figure を生成し、複数回hold on呼び出したときに新しい Figure に追加されるように使用します。plot次に、元の曲線をプロットします。に保存されている元の曲線に対して MATLAB によって作成された関数ハンドルを使用していることに注意してくださいyh

ステップ#7

目的のポイント ( ) を選択し、x0 = 2この時点での出力値を決定します... に格納されy0ます。

ステップ#8

目的のポイントを計算したら、微分関数を使用してこのポイントで見られる勾配を計算し、接線の方程式を再配置して、作成した元のドメインと(x0,y0)以前に作成したドメインから出力値を生成します。この出力は、接線ポイントの出力になります。関心のあるポイントがある場所を中心にして線を中心に置いていることに注意してください。を中心に線をプロット(x0,y0)する変数を定義しています。具体的には、との間の線をプロットします。ここに設定していますが、自分に合うものに合わせて変更してください。tol+/- tol(x0,y0)x0 - tolx0 + toltol = 1

ステップ#9

注目点を赤でプロットし、接線の方程式を緑でプロットします。接線の点の数は元のドメインの点の数と一致しないことに注意してください。そのため、正しい点に正しい配列を使用するようにしてください。


ここに私が得るものがあります:

ここに画像の説明を入力

于 2015-09-30T20:47:09.610 に答える