1

私はMATLABの学習を始めたばかりで、bumpによって与えられた関数を正規化しようとしています

function b = bump(x)
region1 = abs(x) < 1
b(region1) = (exp(-1./(1 - x(region1).^2)))
region2 = abs(x) >= 1
b(region2) = 0
end

これを行うには、-1 から 1 までの定積分で割る必要があります。

syms x;
int(bump(x), -1, 1)

という長いエラー メッセージが表示されます。

symengine の使用エラー (58 行目)
'abs(x) < 1' を文字どおりに証明できません。ステートメントを数学的にテストするには、isAlways を使用します。

sym/subsindex のエラー (1554 行目)
X = find(mupadmex('symobj::logical',As,9)) - 1;

sym>privformat のエラー (2357 行目)
x = subsindex(x)+1;

sym/subsref のエラー (1578 行目)
[inds{k},refs{k}] = privformat(inds{k});

バンプのエラー (3 行目)
b(region1) = (exp(-1./(1 - x(region1).^2)))

abs(x)<1提案されていると思われるものに置き換えてみましisAlways(abs(x)<1)たが、それはエラーを取り除きますが、間違った答えが得られます(積分はゼロであると言われています)。

エラーメッセージの意味がわかりません。

4

1 に答える 1

2

syms xはシンボリック変数として定義xされ、 のシンボリック計算を呼び出しxます。これはおそらくあなたが望むものではありません。

代わりに、xある種の入力行列として定義しますx = zeros(3);。または、数値積分を行うには、次のintegral関数を使用します。

integral(@bump, -1, 1)
于 2013-09-23T19:03:09.760 に答える