• 締切済み

ax-by=c

ax+by=c(x≧0,y≧0)を満たすxの最小値とyの最小値を求める方法ってありますか? しかも、C言語を使って計算したいので、出来る限り効率の良い計算方法が知りたいです。が、とりあえずC言語のことは抜きにして、どんな方法でも良いので数学に自身のある方ぜひご教授願います!! (__)

みんなの回答

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.6

(条件1)ax+by=c (条件2)x≧0かつy≧0 において、(条件1)と(条件2)を共に満たすような<x,y>の集合のうちで ・xが最小であるような<x,y>のxの値 minx ・yが最小であるような<x,y>のyの値 miny を求めたい、という問題と読みました。  言い換えれば、x,y平面にax+by=cのグラフを描いて、その第一象限の部分(つまり条件2を満たす部分)だけを見たとき、 ・xが最小であるような点においてそのときのxは幾らか。 ・yが最小であるような点においてそのときのyは幾らか。 (無論、「xが最小であるような点」と「yが最小であるような点」とは必ずしも一致しません。)という問題です。 ============================ [1] a=0, b=0の場合  (条件1)は 0=c と書き直せます。  [1-1] c=0の場合   x,yとして任意の実数を持ってくると(条件1)は満たされます。   だから(条件2)だけ考慮すればよく、minx = 0, miny = 0 です。  [1-2] c≠0の場合   x,yとしてどんな実数を持ってきても(条件1)は満たせません。従って   minx, minyは存在しません。 [2] a≠0, b=0の場合  (条件1)は ax=c と書き直せます。だから x=c/a が(条件1)を満たす唯一のxです。  そして、yは何であっても良い。  [2-1] c=0、またはaとcが同符号の場合(ac≧0と言っても同じ)   minx = c/a, miny=0です。  [2-2] c≠0かつ、aとcが異符号の場合(ac<0と言っても同じ)   minx,minyは存在しません。 [3] a=0, b≠0の場合  [3-1] c=0、またはbとcが同符号の場合(bc≧0と言っても同じ)   minx = 0, miny=c/bです。  [3-2] c≠0かつ、bとcが異符号の場合(bc<0と言っても同じ)   minx,minyは存在しません。 [4] a≠0, b≠0の場合  [4-1] c=0の場合   直線ax+by=cは必ず<0,0>を通るから、   minx=0, miny=0  [4-2] c≠0の場合   直線ax+by=cとx軸との交点は<c/a,0>、   直線ax+by=cとy軸との交点は<0,c/b>です。   [4-2-1] aとbが同符号の場合(ab>0と言っても同じ)    c/aとc/bは同符号です。    [4-2-1-1] aとcが同符号の場合(ac>0と言っても同じ)     <minx,c/b>= <0,c/b>、<c/a,miny> = <c/a,0>     です。つまり、     minx=0, miny=0    [4-2-1-2] aとcが異符号の場合(ac<0と言っても同じ)      直線ax+by=cは第一象限を通らない。だから、      minx,minyは存在しません。   [4-2-2] aとbが異符号の場合(ab<0と言っても同じ)    <c/a,0>か<0,c/b>、このどちらかが<minx,miny>と等しい。    そしてc/aとc/bはどちらかが正、どちらかが負です。従って、    [4-2-2-1] aとcが同符号なら(ac>0と言っても同じ)     c/a > 0 だから minx = c/a, miny = 0    [4-2-2-2] aとcが異符号なら(ac<0と言っても同じ)     minx = 0, miny = c/b ============================ さて、これを整理しなおしてみましょう。記号で表して (××) とは「minx,minyは存在しない」のこと (00) とは「minx=0, miny=0」のこと (0▼) とは「minx=0, miny=c/b」のこと (▲0) とは「minx=c/a, miny=0」のこと としてみると、 c>0  b>0: a>0…(00)、a=0…(0▼)、a<0…(0▼)  b=0: a>0…(▲0)、a=0…(××)、a<0…(××)  b<0: a>0…(▲0)、a=0…(××)、a<0…(××) c=0…(00)  b>0: a>0…(00)、a=0…(00)、a<0…(00)  b=0: a>0…(00)、a=0…(00)、a<0…(00)  b<0: a>0…(00)、a=0…(00)、a<0…(00) c<0  b>0: a>0…(××)、a=0…(××)、a<0…(▲0)  b=0: a>0…(××)、a=0…(××)、a<0…(▲0)  b<0: a>0…(0▼)、a=0…(0▼)、a<0…(00) となります。 「効率が良い」というのを処理速度のことだとするなら、下手な条件分岐は却って処理速度を落とします。  これをこのまま3次元配列にしておくのがひとつの方法でしょう。つまりたとえば、 a,b,cについて、負のときに0、0のときは1、正のときは2となる番号を付け、 また、(××) を0, (00)を1, (0▼) を2, (▲0)を3で表すことにする。そういう配列dをstaticとして作っておく。ですから、 d[0][1][2] は c<0, b=0, a>0 の場合を表すので、その値は3((▲0)を表す)です。  で、a,b,cが与えられたとき、それぞれの符号を符号関数で取り出して、 負のときは0 0のときは1 正のときは2 となるインデックスia, ib, icを作ります。この3つのインデックスを使って配列dを引く(つまりd[ic][ib][ia]を参照する)と、どんな処理をすべきかの番号(0~3)が取り出せますから、それに従ってswitchすれば良い。

kanousan
質問者

お礼

To:ご回答くださった皆様 4ヶ月半もの間、お礼の一つもしなかったとこを深くお詫び申し上げます。 そして、大変詳細な回答、心より感謝いたします。 ありがとうございました。 しかしながら・・・未だ問題解決には至っておりません。 ですがこのまま放っておくのも失礼なので、一旦〆させていただきます。 ポイントの方ですが、甲乙つけるのは無理なので、全員20点満点といきたいところですが、ポイントつけられる人数に限りがございますので、ここはあえてポイントをつけません。ご了承下さい。 それでは、またの機会に、よろしくお願い致します。 本当にありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

 まず、以下を具体的・明確にしてください。 1)計算処理の目的 2)与えられるデータの予想される特徴 3)求めるデータの想定可能な特徴 4)使用するC言語コンパイラの機能  以上のどれが違っても最良の計算法は違います。 繰り返し処理する部分を軽くすると速くなります。 (機械内部の情報格納の都合により、ここを単純 化できるクイックソートはそのため高速です)。  細かい事はコンパイラに任せ、精度を保つため 桁落ちに注意し、似たデータを使い回しましょう。 (時系列で見ると変化のみ再計算すれば良い等) 桁落ちについて  精度=計算する桁数を落とせば簡単に速くなる でしょうし、処理量を増やさずに精度を高く維持 できれば、それは高速化につながるわけです。  数値処理の過程で、絶対値の大きさが余りにも 違う2数を加減算すると、絶対値が小さい方の数 の有効数字の情報量が無駄に消えてしまいます。  ほとんど同じ数値同士を減算したり、絶対値が 等しく符号が反対の数を加算するなど、きわめて ゼロに近い数値が出ると計算精度が失われます。

全文を見る
すると、全ての回答が全文表示されます。
  • hinebot
  • ベストアンサー率37% (1123/2963)
回答No.4

mickel131さんの分類を利用させていただき、最小値についてアドバイスを。 ax+by=cが一次関数すなわち直線であることはいいですね。 (2)x軸に平行なとき yの値はxの値に関係なく一定です。よって、xが最小のときつまりx=0が求めるべき値になるでしょうか。 (3)y軸に平行なとき (2)の場合とxとyが入れ替わるだけです。すなわち、xの値はyの値に関係なく一定です。(後略) (1)傾きが -a/b (a≠0,b≠0のとき) 二つの場合があります。すなわち、 -a/b>0 のときと -a/b<0 のときです。 i)-a/b>0 のとき グラフは右上がりになります。よって、xが増加(減少)すれば、yも増加(現象)します。よって、x=0のときか、y=0のときが、x,yどちらも最小値をとります。x=0のときをとるか、y=0のときをとるかは、y切片 (c/b)の符号によります。 ii)-a/b<0のとき グラフは右下がりになります。よって、 xが増加(減少)すると、yは減少(増加)します。(よって、xが最小値のときyが最大値となり、yが最小値のとき今度はxが最大値になります。)従って、何をもって最小値とするかが必要になります。 ※単にxが最小値の場合と、yが最小値の場合を別々に求めればいいなら当然、x=0,y=0がそれぞれの最小値になります。

全文を見る
すると、全ての回答が全文表示されます。
  • mickel131
  • ベストアンサー率36% (36/98)
回答No.3

ここに図が書けないので、うまく表現できないのですが、 不等式を満たすxとyの値を組にした点(x,y)をとることを考えてください。 そうして取った点の集合は、平面上のある範囲になります。 これを、「領域」と言います。 領域を図示して、最小・最大を考えるタイプの問題は、 「線形計画法」と言います。 「言います」と言い切っておいて、何ですが、これは、ちょっと不正確な定義です。昔の高校の数(1)の受検参考書には出ていましたが、この頃のには載ってない気がします。今は数(2)の分野に入っています。 直接の答えにはなっていませんが、さらにちょっとだけ書きます。 ax+by=c ---(*) (1)a ≠ 0、b≠0 のとき  (*)すなわち、  y=(-a/b)x+(c/b) を満たす点(x,y)の集合は  傾き(-a/b) の直線です。 (2)a=0 ,b≠0のとき  (*)は  y=(c/b) となり、x軸に平行な直線です。 (3)b=0 ,a ≠ 0のとき、  (*)は、   X=(c/a) となり、y軸に平行な直線です。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

NO1の方に賛成します。最大最小を求める問題は、方法3つあって、 1.数値代入 2.平方完成 3.微分 です。1は一次関数のとき、超絶的に威力を発揮します。2は、すべての2次関数は「相似」であることを利用する解法です。これも破壊的な威力を発揮します。このとき数値代入をして値を求めるので、やはり数値代入は超絶的に威力を発揮します。3はグラフの傾きを考えることによって、グラフの概形をつかみ、数値代入によって値を求める方法で、神がかり的な威力を発揮します。 どの方法も数値代入をしているので、最大最小を求める基本的な方法(最重要方法)は、数値代入であることをここに明記します。

全文を見る
すると、全ての回答が全文表示されます。
  • may-may-jp
  • ベストアンサー率26% (324/1203)
回答No.1

一次関数はどんなときも直線です。 その直線がx≧0かつy≧0の範囲にある場合、描ける直線は3通りです。傾きが正の場合と負の場合、あとは0の場合です。 困ったら基本に立ち返ってみることだと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ax+by+c=0とy=ax+bについて

    質問の方、失礼致します。 ある参考書には、直線y=2x-3をax+by+c=0の形に2*x-1*y-3のように式変換をすればax+by+c=0の形でも直線y=2x-3を表すことが出来ると書いてあるのですが、2*x-1*y-3この式の -1 いわば ax+by+c=0 の b に当たる部分はどこからやってきたのでしょうか…? 今現在の自分の理解が追いついていると思われる点は、ax+by+c=0 こちらの式の aは傾き xはx座標 yはy座標 cはy切片(xが0の時のyの位置) b…? といった様な解釈になります。ご教示の程よろしくお願い致します。

  • 非負整数a,b,c,x,yで、ax+byとcが互いに素でなくなるのは?

    非負整数a,b,c,x,yで、ax+byとcが互いに素でなくなるのは? a,b,cは互いに素でa^2+b^2=c^2、またx,y,cも互いに素であるとします。 例えば、(a,b,c)=(3,4,5)、(x,y)=(-1,7)ならば、 ax+by=25となって、cと素でなくなりますが、 どういった条件が成り立てば良いのでしょうか? 任意の整数の組(x,y)が与えられた時に、 (ax+by)/c≠0が約分できるような(a,b,c)の組を知りたいのです。 よろしくお願いします。 ちなみに以前の質問↓の続きです。 http://okwave.jp/qa/q6158436.html

  • 近似式(z=ax+by+c)を取得したい

    エクセルの散布図だとx軸-y軸で散布図を書き、近似式も自動で作成できますが、これを3次(x軸-y軸-z軸)に拡張して、 z=ax+by+c のような近似式を得たいと考えています。データの特性上、線形(直線)に限定して問題ありません。(x,y,z)のデータは十分揃っています。そのようなツール、もしくは計算式がありましたら教えてください。 よろしくお願いします。

  • {ax+by|x,y∈Z}

    aとbが互いに素とは限らないときは、{ax+by|x,y∈Z}は、aとbの最大公約数の倍数全体の集合になる。この定理の証明でわからない点があるので質問します。 これらの定理は、S={ax+by|x,y∈Z}とおくと集合Sが"差に関して閉じている"という性質をもつ。 (x_1,x_2,y_1,y_2∈Zのとき、(ax_1+by_1)-(ax_2+by_2)=a(x_1-x_2)+b(y_1-y_2)ここでx_1-x_2,y_1-y_2∈Zとなること)ので、ある正の整数dを用いてS={nd|n∈Z}(Sはdの倍数全体)と表されるのであるが、 Sの最初の定義から、a∈S(x=1,y=0とする)かつb∈S(x=0,y=1とする)であるから、aとbはdの倍数(dはa,bの公約数)であり、・・・(1) ここからがわからないところです。他方、ax_0+by_0=dとなる整数x_0,y_0が存在するのだから、a,bの任意の公約数はdの約数であるから・・・(2)、dはa,bの最大公約数というわけである。で証明は終わるのですが、 証明の大まかな流れは、(1)よりd≦(a,b) (a,b)は、aとbの最大公約数、(2)よりd≧(a,b)よって、d=(a,b)だと思うのですが、ax_0+by_0=dをa'dx_0+b'dy_0=dとしてみたりしても、a,bの任意の公約数はdの約数であるから、というのがわかりません。どなたか、他方、ax_0+by_0=dとなる整数x_0,y_0が存在するのだから、a,bの任意の公約数はdの約数である。を説明してください。お願いします。

  • 最小二乗法。円の方程式x^2+y^2+Ax+By+C=0において、最小二乗法でA,B,Cを求める式をあらわすとどうなりますか。

    円の方程式x^2+y^2+Ax+Bx+C=0において、最小二乗法でA,B,Cを求める式をあらわす場合、どうなりますか。複雑な行列式であらわさないとだめなのですか。y=ax+bの場合の最小二乗法は何とかわかるのですが、未知数がA,B,Cの3つになると、わからなくなります。ご指導お願いいたします。

  • D<0とax^2+bx+c=0について

    , y=ax^2+bx+cの頂点が(-b/2a,-D/4a)よりD<0の場合ax^2+bx+c=0(a≠0)にはなりませんが x=(-b±√D)/2aがD<0となるとxが虚数となるので、ax^2+bx+c=0にならないという解釈でもよいでしょうか?後、x軸、y軸上に取るものはすべて実数で虚数ということはx軸上に存在しないということですよね?

  • Y=A(X-By)

    Y=A(X-By) この式を展開すると (1+AB)y=AX になるようですが、 Y=A(X-By) Y=AX-ABy ABy+Y=AX ここまでしか分からないので教えて下さい

  • ax+by=1の1つの整数解の見つけ方

    aとbが整数のとき xyの方程式ax+by=1 の1つの整数解をみつける代数的なテクニックがありますよね 質問1 そのテクニックを教えてください 質問2 そのテクニックの適用範囲をおしえてください      (=1 ではなく=一般の整数 でも使えるかどうか など) 参考書の回答をみると 79x-339y=1 の1つの整数解をみつけようとしている箇所で 『339=79×4+23  79=23×3+10 23=10×2+3 10=3×3+1 よってx=103 y=24 である 』 との記載がありましたが これだけでは具体的に何をやっているのかわかりません…

  • 2次関数y=ax^2-4ax+3

    aを正の定数とする。2次関数y=ax^2-4ax+3の0≦x≦3における最小値が-5であるとき、aの値を求めよ。またこの関数の0≦x≦3における最大値を求めよ。 という問題があるのですがやり方が分かりません。 平方完成をしてみたものの、そこから先ができなくて困っています。 どんたかご協力をお願いします。

  • ax+by=1(x,yは整数)の解法について質問です。

    ax+by=1(x,yは整数)の解法について質問です。 79x-339y=1(x,yは整数) という問題があったのですが、解答で、 339=4*79+23 79=3*23+10 23=2*10+3 10=3*3+1 として、 1=10-3*3 =10-3*(23-2*10) ここまでは今までやってきたことの 逆の操作のをしていっているのだと 思うのですが、この次で、 1=7*10-3*23 となっています。 この式はどこからでてきたのでしょうか? 解説をいただけるとうれしいです。