機能

2016-03-19 8 views
0

Matlabのフィット感は間違いなく便利ではありませんが、機能別に、公式ウェブサイト上で与えられた些細な統合と分化から としてそれを使用する方法は明らかではないとして、MATLABフィットオブジェクトを使用する: http://uk.mathworks.com/help/curvefit/example-differentiating-and-integrating-a-fit.html機能

例えば与えられましたオブジェクト '曲線'に格納されたフィットは、数値を得るために曲線を評価することができます。しかし、どのようにするか。積分|曲線(x)|^2(不器用に新しいフィットを作り出すことを離れて)?

Output of the function must be the same size as the input. If FUN is an array-valued integrand, set the 'ArrayValued' option to true. 

は私も(下)積分のための正常な機能と陰関数をdefininingことで周りの作業を試してみましたが、どちらも同じエラーを与える:単純

curve = fit(x_vals,y_vals,'smoothingspline'); 
integral(curve(x)*curve(x), 0, 1) 

しようとするとエラーになります。

オプションとの統合に続いて積分する関数を定義する
[email protected](x)(curve(x))...; % trial solution 1 
function func_val=func(curve, x)...; % trial solution 2 

答えて

0

は「真」に設定 "ArrayValuedの作品:

[email protected](x)(curve(x)*curve(x)); 
integral(func,0,1,'ArrayValued',true) 
0

あなたはすなわち、関数ベクトル化を持っている必要がありますcurve(x).*curve(x)のような要素単位の演算を使用しますまたはcurve(x).^2

また、出力の形状が入力と一致するようにします。つまり、行入力が行出力を与えるようにします。同様に、列は列として出力されます。適合オブジェクトを評価すると、常に列ベクトルが返されるようです(たとえば、f(1:10)は1x10ではなく10x1ベクトルを返します)。そうは言って

は、ここでの例です:今、あなたのように統合することができ

x = linspace(0,4*pi,100)'; 
y = sin(x); 
y = y + 0.5*y.*randn(size(y)); 
f = fit(x, y, 'smoothingspline'); 

integral(@(x) (f(x).^2)', 0, 1) 
:この場合には

integral(@(x) reshape(f(x).^2,size(x)), 0, 1) 

、それは、単純な転置ように簡略化することができます