2017-04-15 17 views
2

私はMatlabで任意の長さの多項式関数を作成することに問題があります。これは、ベクトルを引数として使用するとうまくいくでしょう。ベクトルを受け入れる多項式の作成方法は?

多項式の値を含み、それを含むアルゴリズムを実行する必要があります。かんなこれが行く

n = 4 % For simplicity, could be arbitrary positive integer 
f = @(x) x.^[0:n] %Coefficients are 1 (for this example), if not, would be multiplied with vector of them 
p = @(x) sum(f(x)) %My polynomial 

>> p(5) 
ans = 
781 

: ベローは私のコードです。しかし、私はプロットが必要なので、値のベクトルを受け取って返すことができるように多項式を必要とします。しかし、私がこれをすると、エラーがポップアップします。 例:

>>p([1 2 3 4]) 
Error using .^ 
Matrix dimensions must agree. 

Error in @(x)x.^[0:n] 

Error in @(x)sum(f(x)) 

私はそれを返すようにしたいことは、それを私がforループで値ベクトルを作成することによってこの問題を回避ましたが、ちょうど疑問に思って[p(1) p(2) p(3) p(4)] 多項式である私の値が長さ4のベクトルです私のコードを変更することができるので、これはうまくいくでしょうか?

答えて

2

問題は簡単代わりに、2つの行ベクトルから、行と列のベクトルを使用して固定することができます。

p = @(x) sum(f(x), 2) 
:あなたは、加算をしたい、それに沿って次元を定義する

p([1 2 3 4]') 

と明示的に

.^要素ワイズ操作であることを説明

注意。 p([1 2 3 4 5])は両方の行ベクトルが同じサイズを持ちますが、希望の結果を返しません。つまり、1^0 + 2^1 + 3^2 + 4^3 + 5^4 = 701を計算します。

MATLABは、自動的に(擬似MATLABコードで)膨張

[1 .^ [0 1 2 3 4] 
2 
3 
4] 

[1 1 1 1 .^ [0 1 2 3 4 
2 2 2 2  0 1 2 3 4 
3 3 3 3  0 1 2 3 4 
4 4 4 4]  0 1 2 3 4] 

fの定義が変更されるべきである(2006-2016a)

下位互換性matlabはをサポートしていないためまだ。 1はrepmatに頼る必要がありますので、

f = @(x) bsxfun(@power, x, 0:n); 

下位互換性(1996年から2005年)

bsxfunは、まだ存在していませんでした。

+0

私はあなたが示唆したことを試してみて、前と同じエラーが発生しました。 – Ravonrip

+0

使用しているMATLABのバージョンは? – m7913d

+0

MatlabバージョンR2015bを使用しています – Ravonrip

関連する問題