mkpp
区分的多項式の作成
説明
例
多次多項式をもつ区分的多項式の作成
区間 [0,4] で 3 次多項式、区間 [4,10] で 2 次多項式、区間 [10,15] で 4 次多項式をもつ区分的多項式を作成します。
breaks = [0 4 10 15]; coefs = [0 1 -1 1 1; 0 0 1 -2 53; -1 6 1 4 77]; pp = mkpp(breaks,coefs)
pp = struct with fields:
form: 'pp'
breaks: [0 4 10 15]
coefs: [3x5 double]
pieces: 3
order: 5
dim: 1
区間 [0,15] にある多数の点でこの区分的多項式を評価し、結果をプロットします。縦の破線を、多項式同士が接しているブレーク ポイントにプロットします。
xq = 0:0.01:15; plot(xq,ppval(pp,xq)) line([4 4],ylim,'LineStyle','--','Color','k') line([10 10],ylim,'LineStyle','--','Color','k')
繰り返される区分をもつ区分的多項式の作成
2 つの 2 次多項式の間で切り替わる 4 つの区間をもつ区分的多項式を作成し、プロットします。
最初の 2 つのサブプロットは、2 次多項式とその正負を逆転したものを、区間 [-8,-4] および [-4,0] にシフトして示しています。この多項式は以下のようになります。
3 番目のサブプロットは、これら 2 つの 2 次式を 4 つの区間で交互に切り替えて作成した区分的多項式を示しています。多項式が接する点を示すために縦線が追加されます。
subplot(2,2,1) cc = [-1/4 1 0]; pp1 = mkpp([-8 -4],cc); xx1 = -8:0.1:-4; plot(xx1,ppval(pp1,xx1),'k-') subplot(2,2,2) pp2 = mkpp([-4 0],-cc); xx2 = -4:0.1:0; plot(xx2,ppval(pp2,xx2),'k-') subplot(2,1,2) pp = mkpp([-8 -4 0 4 8],[cc;-cc;cc;-cc]); xx = -8:0.1:8; plot(xx,ppval(pp,xx),'k-') hold on line([-4 -4],ylim,'LineStyle','--') line([0 0],ylim,'LineStyle','--') line([4 4],ylim,'LineStyle','--') hold off
入力引数
breaks
— ブレーク ポイント
ベクトル
ブレーク ポイント。長さ L+1
のベクトルとして指定します。このベクトルには厳密に増加する要素があり、L
個の間隔のそれぞれについて開始と終了を表しています。
データ型: single
| double
coefs
— 多項式係数
行列
多項式係数。L
行 k
列の行列として指定します。i 番目の行 coefs(i,:)
には、i 番目の区間 [breaks(i), breaks(i+1)]
についての k
次多項式が格納されます。言い換えれば、この多項式は coefs(i,1)*(X-breaks(i))^(k-1) + coefs(i,2)*(X-breaks(i))^(k-2) + ... + coefs(i,k-1)*(X-breaks(i)) + coefs(i,k)
です。
データ型: single
| double
d
— 次元
スカラー | ベクトル
次元。スカラーまたは整数のベクトルとして指定します。d
を指定すると、区分的多項式がサイズ d
の係数値をもつよう指定されます。
データ型: single
| double
出力引数
pp
— 区分的多項式
構造体
区分的多項式。構造体として返されます。この構造体は関数 ppval
とあわせて使用し、区分的多項式を 1 つ以上のクエリ点で評価します。これらの構造体には次のフィールドがあります。
フィールド | 説明 |
---|---|
form | "区分的多項式" の場合 |
breaks | 長さ |
coefs |
|
pieces | 区分の数 ( |
order | 多項式の次数 |
dim | ターゲットの次元 |
coefs
の多項式係数は各区間の局所的な係数であるため、従来の多項方程式で係数を使用するには対応する節点区間の下限端点を減算しなければなりません。言い換えれば、区間 [x1,x2]
の係数 [a,b,c,d]
について、対応する多項式は次のようになります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
出力構造体
pp
は、MATLAB® のpp
構造体と異なります。MATLAB では、ppval
はコード ジェネレーターのpp
構造体を使用できません。コード生成については、ppval
は MATLAB で作成されたpp
構造体を使用できません。unmkpp
は MATLAB のpp
構造体をコード生成に使用できます。コード ジェネレーターで作成された
pp
構造体から MATLAB のpp
構造体を作成するには、以下のように実行します。コード生成では、
unmkpp
を使用して区分的多項式の詳細を MATLAB に返します。MATLAB では、
mkpp
を使用してpp
構造体を作成します。
d
を指定しない場合、coefs
は 2 次元で、固定数の列をもたなければなりません。この場合、列数は次数です。区分的定数多項式を定義するには、
coefs
が列ベクトルであるか、d
が 2 つ以上の要素を含んでいなければなりません。d
を指定し、d
が1
である場合、d
は定数でなければなりません。それ以外の場合、ppval
への入力が非スカラーである場合、ppval
の出力の形状が MATLAB のppval
と異なる場合があります。d
を指定する場合は、固定長でなければなりません。以下のステートメントのセットのいずれかでなければなりません。m = length(d)
およびnpieces = length(breaks) - 1
と仮定します。size(coefs,j) = d(j) size(coefs,m+1) = npieces size(coefs,m+2) = order
j
= 1,2,...,m。次元m+2
は固定長でなければなりません。m = length(d)
およびnpieces = length(breaks) - 1
と仮定します。2 番目の次元は固定長でなければなりません。size(coefs,1) = prod(d)*npieces size(coefs,2) = order
d
を指定しない場合、以下のステートメントに該当しなければなりません。m = length(d)
およびnpieces = length(breaks) - 1
と仮定します。2 番目の次元は固定長でなければなりません。size(coefs,1) = prod(d)*npieces size(coefs,2) = order
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)