Main Content

rat

有理分数近似 (連分数)

R2020a 以降

説明

R = rat(X) は既定の許容誤差 1.e-6*norm(X(:),1) の範囲内で X の有理分数近似を返します。近似は、有限の項をもつ単純連分数を含む文字列配列です。

R = rat(X,tol) は許容誤差 tol の範囲内で X に近づきます。

[N,D] = rat(___)N./DX に近づくような 2 つの配列 ND を返します。この出力構文を前の入力構文とともに使用できます。

___ = rat(___,Name,Value) は、1 つ以上の Name,Value 引数のペアによって指定された追加オプションを使用して X を近似します。

すべて折りたたむ

無理数 3 をシンボリック数として宣言します。

X = sqrt(sym(3))
X = 3

この数の有理分数近似 (打ち切られた連分数) を求めます。結果は文字ベクトルの式で返されます。

R = rat(X)
R = 
'2 + 1/(-4 + 1/(4 + 1/(-4 + 1/(4 + 1/(-4)))))'

文字ベクトル R からシンボリック式を表示します。

displayFormula(["'A rational approximation of X is'"; R])
A rational approximation of X is

2+1-4+14+1-4+14+1-4

数学的な量 π をシンボリック定数として表します。定数 π は無理数です。

X = sym(pi)
X = π

vpa を使用して有効桁数 12 桁の小数表現で π を表現します。

Xdec = vpa(X,12)
Xdec = 3.14159265359

関数 rat を使用して、既定の許容誤差で π の有理分数近似を求めます。結果は文字ベクトルの式で返されます。

R = rat(sym(pi))
R = 
'3 + 1/(7 + 1/(16))'

str2sym を使用して文字ベクトルを単分数に変換します。

Q = str2sym(R)
Q = 

355113

分数 355/113 の小数表現を示します。この近似は小数点以下 6 桁まで π と一致します。

Qdec = vpa(Q,12)
Qdec = 3.14159292035

近似の精度を高めるために許容誤差を指定できます。

R = rat(sym(pi),1e-8)
R = 
'3 + 1/(7 + 1/(16 + 1/(-294)))'
Q = str2sym(R)
Q = 

10434833215

結果として返された近似 104348/33215 は小数点以下 9 桁まで π と一致します。

Qdec = vpa(Q,12)
Qdec = 3.14159265392

vpasolve を使用して方程式 cos(x)+x2+x=42 を解きます。解は小数表現として返されます。

syms x
sol = vpasolve(cos(x) + x^2 + x == 42)
sol = 5.9274875551262136192212919837749

連分数として解を近似します。

R = rat(sol)
R = 
'6 + 1/(-14 + 1/(5 + 1/(-5)))'

連分数の分母の係数を取り出すには、関数 regexp を使用して文字列配列に変換します。

S = char(regexp(R,'(-*\d+','match'))
S = 3x4 char array
    '(-14'
    '(5  '
    '(-5 '

シンボリック配列として結果が返されます。

coeffs = sym(S(:,2:end))
coeffs = 

(-145-5)

str2sym を使用して連分数 R を単分数に変換します。

Q = str2sym(R)
Q = 

1962331

関数 rat で 2 つの出力引数を指定して、有理近似の分子と分母を返すこともできます。

[N,D] = rat(sol)
N = 1962
D = 331

黄金比 X=(1+5)/2 をシンボリック数として定義します。

X = (sym(1) + sqrt(5))/ 2
X = 

52+12

許容誤差 X の範囲内で 1e-4 の有理近似を求めます。

R = rat(X,1e-4)
R = 
'2 + 1/(-3 + 1/(3 + 1/(-3 + 1/(3 + 1/(-3)))))'

10 個の係数で有理近似を返すには、'Length' オプションを 10 に設定します。このオプションは近似で指定された許容誤差を無視します。

R10 = rat(X,1e-4,'Length',10)
R10 = 
'2 + 1/(-3 + 1/(3 + 1/(-3 + 1/(3 + 1/(-3 + 1/(3 + 1/(-3 + 1/(3 + 1/(-3)))))))))'

すべて正の係数で有理近似を返すには、'Positive' オプションを true に設定します。

Rpos = rat(X,1e-4,'Positive',true)
Rpos = 
'1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1 + 1/(1))))))))))'

入力引数

すべて折りたたむ

入力。数値、ベクトル、行列、配列、シンボリック数またはシンボリック配列として指定します。

データ型: single | double | sym
複素数のサポート: あり

許容誤差。スカラーとして指定します。NDN./D - X < tol となるように X を近似します。既定の許容誤差は 1e-6*norm(X(:),1) です。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は関係ありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: 'Length',5,'Positive',true

係数または連分数の項の数。正の整数として指定します。このオプションを指定すると、許容誤差引数 tol がオーバーライドされます。

例: 5

正の係数を返すオプション。logical 値 (boolean) として指定します。true を指定した場合、rat は分母がすべて正の整数の正則連分数展開を返します。

例: true

出力引数

すべて折りたたむ

連分数。文字配列として返されます。

  • Xm 要素の配列で、すべての要素が実数である場合、Rm 行の文字配列として返されます。

  • X が複素数を含む m 要素の配列である場合、R2m+1 行の文字配列として返されます。R の最初の m 行は X の実数部の連分数展開を表し、その後 (m+1) 番目の行の ' +i* ... ' が続き、最後の m 行は X の虚数部の連分数展開を表します。

数値。数値、ベクトル、行列、配列、シンボリック数またはシンボリック配列として返されます。N./DX に近づきます。

除数。数値、ベクトル、行列、配列、シンボリック数またはシンボリック配列として返されます。N./DX に近づきます。

制限

  • 'Length',5,'Positive',true といった Name,Value 引数は、配列 X がシンボリック数を含む場合、または X のデータ型が sym である場合にのみ指定できます。

詳細

すべて折りたたむ

単純連分数

関数 rat は次の形式の単純連分数によって、X の各要素を近似します。

R=ND=a1+1a2+1+1ak 

ここで、整数項 a1,a2,,ak の数は有限です。項の数が増えれば有理近似の精度が向上します。

バージョン履歴

R2020a で導入

参考

| |