1

多項式に小さな問題があります:

z²+alpha1*z + alpha2 = 0

|z| の根で alpha1 と alpha2 の値を見つける必要があります。< 1. R または Matlab で実行できるプログラムはありますか? 問題は、アルファ値が不明であることです。多項式の根が <= |1| である許容領域を見つける必要があります。

4

3 に答える 3

2

R の matlab ソリューションと同様に、

  polyroot(c(1,alpha1,alpha2))

ここで、グラフィカルに値を取得する方法を編集alphaします。妥当な値についての直感を得るために使用できます。ここでのアイデアは次のとおりです。

  • aplha1 の範囲を選択
  • alpha2 の範囲を選択する
  • alpha1 と alpha2 の組み合わせごとに、根を計算します。モジュール (||) を計算します。1 より大きい場合は削除します。
  • 4 列の値のグリッドを取得します: alpha1、alpha2、norm1、norm2 ここで、すべてのノルムは <1 です
  • alpha1 と alpha2 をプロットして領域を取得します...

だからコード

## I choose alpha1 in interavl [-1,1]
alpha1 <- seq(-1, 1, length=200)
## I choose alpha2 in interavl [-2,2]
alpha2 <- seq(-2, 2, length=200)
dat <- expand.grid(data.frame(alpha1,alpha2))
## for each combination of (alpha1,alpha2)
## i compute the module of the roots 
## I replace |roots|> 1 by NA
ll <- apply(dat,1,function(x) {
  rr =Mod(polyroot(c(1,x['alpha1'],x['alpha2'])))
  res <- ifelse(rr>1,NA,rr)
  if (length(res)==1) res <- rep(res,2)
  if (length(res)==0) res <- rep(NA,2)
  else res
  })
dat <- na.omit(cbind(dat,t(ll)))
## finally i plot the result
library(lattice)
xyplot(alpha2~alpha1,data=dat)

ここに画像の説明を入力

于 2013-03-15T12:39:21.543 に答える
2

@ Jonel_R、あなたの問題は分析的に解決できます。

まず、入力しやすいように変数の名前を変更します。また、いくつかの表記乱用を使用します...

(a, b)の根がz^2 + a z + b == 0プロパティ を満たすような値を見つけたいとします|z|<=1

根は で与えられます(-a +- sqrt(d))/2。ここでd = a^2 - 4b

3 つの可能性があります。2 つの別個の実根、1 つの実根、または 2 つの複素共役根。

d = 0中間のケースは、 、つまりの場合に発生しb = a^2 / 4ます。これはa vs. b平面の放物線です。ただし、この放物線のすべての点が、根が を満たす多項式を生成するわけではありません|z|<=1。この場合、ルートは単にであるため、条件、つまり を-a/2追加する必要があります。-1 <= a/2 <=1-2 <= a <= 2

では、最初のケースを考えてみましょう。a vs. b2 つの異なる実根を持つ多項式を生成する平面内の点は、放物線のにあります。つまり、それらは を満たす必要がありb < a^2/4ます。追加の条件は、ということ|z| = |(-a +- sqrt(d))/2| <= 1です。

条件は次のように記述できます-1 <= (-a +- sqrt(d))/2 <= 1。ここで、+-両方の根が条件を満たさなければならないことを意味します。これを解決すると、次のようになります
a-2 <= sqrt(d) <= a+2a-2 <= -sqrt(d) <= a+2

sqrt(d)との両方-sqrt(d)が区間[a-2, a+2]、 およびにあるd > 0必要があるため、この区間はその内部にゼロを含まなければなりません。これは-2 < a < 2.

条件は次のように結合できます。 a-2 <= -sqrt(d) < 0 < sqrt(d) <= a+2

二乗すると次のようになります: (a-2)^2 >= d&d <= (a+2)^2

d <= a^2 - 4a + 4&d <= a^2 + 4a + 4

-4b <= -4a + 4&-4b <= +4a + 4

b >= a-1&b >= -a-1

これは、 が と の線の上にある必要があることを意味しbます。また、 にある必要があります。そしてもちろん、 が必要です。わお...b = a-1b=-a-1a[-2,2]b < a^2/4

最後のケース: 複合根。これは簡単です。であるためd < 0、根は-a/2 +- i * sqrt(-d)/2です。これの絶対値は ですa^2/4 - d/4bこれは単純に に等しい。したがって、条件はb <= 1であり、いつものbように放物線の上にあります。

それだけです... 非常に興味深い問題です。:-)

次のテスト関数を試すことができます: 実根を青で、複素根を赤でプロットします。

test <- function(x=2, n=10000)
{
    plot(c(-x,x), c(-x,x), type="n")

    plot(function(a) (a^2)/4, from=-x, to=x, add=T)

    plot(function(a) a-1, from=-x, to=x, add=T)

    plot(function(a) -a-1, from=-x, to=x, add=T)

    a <- runif(n, -x, x)

    b <- runif(n, -x, x)

    for( i in 1:n )
    {
        if( all(abs(polyroot(c(b[i],a[i],1))) <= 1) )
        {
            col <- ifelse(b[i] < 0.25*a[i]^2, "blue", "red")

            points(a[i], b[i], pch=".", col=col)
        }
    }
}

ところで: is の構文polyrootpolyroot(c(C, B, A))の根を与えますAx^2 + Bx + C。@agstudy の応答が間違っていたと思います。

于 2013-03-15T20:45:02.043 に答える