• ベストアンサー

エクセル・高次方程式の生の整数解

整数解はいくつもあるので、どう処理すればいいか悩んでいます。 例えばこんな式です。 1/3 a + 1/6 b + 1/20 c +1/30 d > 8.5 を満たすabcd (生の整数)の値を求めたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.1

digimr128 さん、こんにちわ 【1】用語の間違い まずは、digimr128さんが例として挙げているのは、高次式ではなく、多元式です。高次式は、べき乗(特に3乗以上)が登場する式ですね。多元式とは、未知数が複数(今回の例ならa、b、c、dの4つ)存在する数式と定義されます。 さらに、方程式ではなく、不等式です。方程式は、「未知数を含む等式」を指しますので、必ず右辺と左辺は「イコール」で結ばれています。不等式とは、右辺と左辺が不等号で結ばれている数式と定義されます。 つまり、digimr128さんが例示したのは、「多元不等式」になります。 また、「生の整数」というのは、「正の整数」の誤記でしょうか? とりあえず、「多元不等式を満たす正の整数を求めたい」という前提で考えてみます。 【2】解の個数の有限・無限 次に、digimr128さんが例として挙げた多元不等式ですが、解が無限個存在します。例えば、bとcとdが全て最小の値(すなわち全て1)のでも、aが25のとき、  1/3×a + 1/6×b + 1/20×c + 1/30×d の結果は8.58333・・・となり、 > 8.5 を満たします。つまり、aの値は、25以上であればなんであっても例示した不等式を満たすことになります。いくらExcelが優れていても、解が無限個存在する場合の処理を終えることはできません。ちなみに結論から言うと、不等号の向きが逆であれば、解の個数は有限個となります。 ここでもとりあえず、不等号の向きが逆であるとします。 さて、これをExcelで解くためには、マクロを利用します。 私が試してみたところ、なんと2,032,761通りの答えが存在すると出ました。。。。 解答の組合せを全て記載するマクロを作成したのですが、私のExcelはバージョンが古く、65536行までしか利用できないため、下のマクロは、何通り答えがあるかだけを表示するものとなっています。 (簡単な改造で結果を表示できるようにしてあります) ちなみに式の右辺が1のときは93通り、以下 右辺が2 → 3,677通り 右辺が3 → 23,731通り 右辺が4 → 84,074通り 右辺が5 → 219,083通り となります。では以下に、実際のマクロの運用方法を記載します。 新規シートを開き、Sheet1のA1セルに、8.5(不等式の右辺)を、 B1セルには 3 (aの除数)、C1セルには 6 (bの除数)、D1セルには 20 (cの除数)、E1セルには 30 (dの除数) を記入します。一応、e、f、g、・・・と要素が増えていっても、F1列、G1列、H1列・・・へ追記していけば計算ができるように作ってあります。 記入が終わったら下の、「Sheet1」タブを右クリックし、「コードの表示」をクリックします。 すると、「Microsoft Visual Basic」ウィンドウが表示されるので、ウィンドウ右側の空欄に、以下を貼り付けます。 '--------------------------------------ここからコピー-------------------------------------- Sub SumVariation()   Dim InputV() As Integer   Dim InputC() As Integer   Dim DMS As Integer   Dim TgtVAL As Single   Dim SUMVAL As Single   Dim OutRow As Long   Range(Cells(2, 1), Cells(Range("A:A").End(xlDown).Row, 256)).Delete   DMS = Range("1:1").End(xlToRight).Column - 1   ReDim InputV(DMS)   ReDim InputC(DMS)   OutRow = 2   TgtVAL = Cells(1, 1).Value   For i# = 1 To DMS     InputV(i) = 1     InputC(i) = Cells(1, i + 1)   Next i   Do While (1)     SUMVAL = 0     For i = 1 To DMS       SUMVAL = SUMVAL + InputV(i) / InputC(i)     Next i     If SUMVAL < TgtVAL Then '      Cells(OutRow, 1).Value = SUMVAL '      For i = 1 To DMS '        Cells(OutRow, i + 1).Value = InputV(i) '      Next i       OutRow = OutRow + 1       InputV(1) = InputV(1) + 1     Else       For i = 1 To DMS - 1         InputV(i) = 1         InputV(i + 1) = InputV(i + 1) + 1         SUMVAL = 0         For j# = 1 To DMS           SUMVAL = SUMVAL + InputV(j) / InputC(j)         Next j         If SUMVAL < TgtVAL Then GoTo CONTINUE       Next i       MsgBox "解の個数は" & OutRow - 2 & "個です"       Exit Sub CONTINUE:     End If '    If OutRow = 65536 Then '      MsgBox "これ以上演算できません" '      Exit Sub '    End If   Loop End Sub '--------------------------------------ここまでコピー-------------------------------------- 貼り付けが終わったら、一度貼り付けた文章の上で念のためマウスをクリックし、「F5」キーを押すと、処理が始まります。処理が終わったら、何通り解答があるかのメッセージが表示されます。 ちなみに、上で貼り付けた文章から、シングルクォーテーション(')を削除すると、解答の組み合わせがExcelのシート上に記載されます。 (処理に時間がかかる上に、解答の組み合わせが65535通りを超えたら処理を中断します) 参考になりましたでしょうか。

digimr128
質問者

お礼

参考になり過ぎて、感動です。 マクロは日頃あまり使わないのですが、 ちょっと背伸びしてみました。 丁寧な回答を、ありがとうございました。

関連するQ&A

  • 2次方程式の2つの整数解

    判別式の使い方がわからないので質問します。 x^2-2ax+4a^2-6a=0が2つの整数解を持つように定数aの値を定めよ。 という問題で解答は、 D/4=a^2-(4a^2-6a)=-3a(a-2)≧0より、0≦a≦2。となっているのですが、2つの解をもつのでD/4>0が条件ではないかとわからなくなりました。 解答はつづいて(解の和)=2aが整数でなければならないから、2a=0,1,2,3,4→a=0,1/2,1,3/2,2このうちa=1は不適。 (答え)a=0,1/2,3/2,2となっていました。 どなたかD/4≧0となる理由を教えてくださいお願いします。

  • 3次方程式の整数解について

    f(x)=x^3-3ax^2+bx-aとする。 f(x)=0がただ一つの整数解をもつとき、a,bの条件を求めよ。 ただし,a,bは実数とする。 a=1,b=3のとき、整数解x=1をもつことがわかりますが、 ほかにも整数解を取りうるのかどうかがわかりません。 (自分で考えた問題なので、正解はわかりません。) よろしくおねがいします。

  • 高次方程式

    実数係数の方程式kx^2-(k+3)x-1=0が虚数解a±biを持つとする。このとき、kの値の範囲は□であり、特に解が純虚数となる場合のkの値は□である。 また、A=a^2+b^2のとりうる値の範囲は□である。 この2次方程式の判別式をDとすると、条件よりD<0 を解いて-9<k<-1 解が純虚数となるときk+3=0を解いてk=-3 までは解いたのですがA=a^2+b^2のとりうる値の範囲が分かりません。 ちなみに慶応大学の入試問題です。

  • 高次方程式と虚数解

    3次方程式x^3+ax^2+bx+2=0が1-iを解にもつとき、 実数の係数a、bの値を求めよ。また、他に解を求めよ。 この問題はどうやってとけばいいですか?

  • 4次方程式の解

    x^4-4x-1=0 の実数解と虚数解を求めよ。 因数定理は使えない。 (x^2+ax+b)(x^2+cx+d)=0 と与式をおく。a,b,c,dは実数 展開して、係数を比較すると (1)bd=-1 (2)a+c=0 (3)ac+b+d=0 (4)ad+bc=-4 これから、a,b,c,dを求めてと思いましたが、できませんでした。 (1)から(4)の式から1つの文字だけの方程式はできるが、それが解けない。 かえって、与方程式を解くよりむずかしい。 よろしくアドバイスおねがいします。

  • 高次方程式

    3次方程式(x-a)(x^2+bx+c)=0(a,b,cは実数の定数)の3つの解のうち、実数解と1つの虚数解の和が10/(1+3i)である。 (1)10/(1+3i)をp+qiの形に表せ。(p,qは実数) (2)a=2のとき、b,cの値を求めよ。 (3)3つの解の平方の和が4となるようなaの値を求めよ。 (1)は分母のiを消して1-3i (2)はa=2を代入して複素数の相当、解と係数の関係でb=2,c=10と答えを求めました が、(3)が分からないので教えてください。

  • 2次方程式の共通の整数解

    xの2次方程式x^2+3ax+a-5=0とx^2+6x+3a^2-20a+25=0が共通の整数解をもつ。 定数aを求め、共通の整数解を求めよ。 答え a=5のときx=0 a=1のときx=-4 解き方を教えてください。 解説が詳しいとありがたいです。

  • 高次方程式

    xの3次式P(x)=x^3-3ax^2+(2a^2+a)x+bがあり、P(2a)=0を満たしている。 ただし、a、bは実数の定数とする。 (1) bをaを用いて表せ。 (2) 方程式P(x)=0のすべての解が実数であるとき、aのとり得る値の範囲を求めよ。 (3) 方程式P(x)=0が重解をもつとき、aの値を求めよ。また、そのときのP(x)=0の解をすべて求めよ。 解法が(1)からわからなくて困ってます。 回答、よろしくお願いします。

  • 高次方程式

    xの3次式P(x)=x^3-3ax^2+(2a^2+a)x+bがあり、P(2a)=0を満たしている。 ただし、a、bは実数の定数とする。 (1) bをaを用いて表せ。 (2) 方程式P(x)=0のすべての解が実数であるとき、aのとり得る値の範囲を求めよ。 (3) 方程式P(x)=0が重解をもつとき、aの値を求めよ。また、そのときのP(x)=0の解をすべて求めよ。 解法が(1)からわからないです(・_・;) 回答、よろしくお願いします_(._.)_

  • 高次方程式

    1.P(x)=x^3+ax+bを(x+1)(x-3)で割った余りが3x-2であるとき定数a、bの値を求めよ。 2.3次方程式x^3-2x^2+ax+b=0が1と-1を解にもつとき、 定数a、bの値、他の解を求めよ。 この問題はどうやって問いたらいいですか?

専門家に質問してみよう