- 締切済み
Rubyの質問です
(1)Rubyプログラムの質問です。 y = ax^3 + bx^2 + cx + d 整数a,b,c,dを読み込んで、xが0から1まで0.1刻みでyの値を求め、印字するプログラムを作っています。 そして、この中でyの値が最小・最大となるときのx,yの値を出力したいのですが、どう求めればよいのかわかりません。 どなたかご教示いただければ幸いです。 (2)もう一つありまして、これもRubyプログラムに関してです。 exp(1) = 1 + 1/1! + 1/2! + ・・・ + 1/n! + ・・・ですが、 この近似式よりexp(1)の値を求めるプログラムの作成の仕方で悩んでいます。 さらにn = 1,2,3・・・10として、近似式を求めるプログラムを作りたいのです。 この問題に関しても、ご存じの方いらっしゃいましたら、ご教示ください。
- lalala10
- お礼率0% (0/8)
- Ruby
- 回答数4
- ありがとう数2
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4848/10262)
(1) y=f(x) として a = (0..10).map{ |i| f(i*0.1) } a.max と、a.min (2) 何がわからないのかわからないです。 >Rubyの質問です というからには、ある程度Rubyは知っているんですよね?それとも名前を知っているだけ?
- koko_u_u
- ベストアンサー率18% (216/1139)
いやいや、明らかに Enumerable#max_by とかを使うべきでしょう。
- salsberry
- ベストアンサー率69% (495/711)
(1)の最大のほうだけ説明します。最小に応用するのは簡単です。 ・yの値の暫定チャンピオンを覚えておく変数maxYと、そのときのxの値を覚えておく変数maxXを用意する。 ・x=0.0のときのyの値を暫定チャンピオンとする。つまり、maxX=0.0 , maxY=(xが0.0のときのyの値) ・xの値を0.1増やしてyの値を計算する。yの値が暫定チャンピオンmaxYよりも大きかったら、maxXとmaxYの値を更新する。 ・xの値が1.0以下の間、前項の作業を繰り返す。 ・最後まで勝ち残ったmaxYがyの最大値。maxXとmaxYを出力する。 (2) 1/(m-1)!の値をmで割れば1/m!になりますから、mがnになるまでそれを順次足し合わせていくだけです。
- koko_u_u
- ベストアンサー率18% (216/1139)
途中まででいいから、作ったプログラムを補足にどうぞ。
関連するQ&A
- Rubyプログラムの質問です
y = ax^3 + bx^2 + cx + d という関数が与えられていて、 整数a,b,c,dを読み込んで、xが0から1まで0.1刻みでyの値を求め、yの値の最大値、最小値を求めるところまではできているのですが、さらに最大値・最小値となるときのxの値も求めなければならないのですが、これはどのようにしたら求められるかご存じの方がいらっしゃいましたら、ご教示いただければ幸いです。よろしくお願いいたします。
- 締切済み
- Ruby
- Rubyプログラムの質問です
Rubyプログラムの質問です。 y = ax^3 + bx^2 + cx + d という関数が与えられていて、 整数a,b,c,dを読み込んで、xが0から1まで0.1刻みでyの値を求め、印字するプログラムを作っています。 そして、この中でyの値が最小・最大となるときのx,yの値を出力したいのですが、どう求めればよいのかわかりません。 まずxを0から1まで0.1刻みで出力するのはstepを使って 0.step(10,0.1){ |x| print( x,"\n" ) まではわかりました。 その出力したxをどのように関数の式に代入するのかがわかりません。 そして最小値・最大値を求める問題ですが、最小値を記憶して、次の要素より小さければ交換という 形でいこうと思っているのですが、これもどのようにすればよいのかはっきりわかりません。 loopを使うということは何となく想像がつきます。 たとえばこのようにしても大丈夫なのでしょうか? for( i=1;i<100;i++ ){ if( a[0] < a[i] ){ work = a[0]; a[0] = a[i] a[i] = work; } } どなたかご教示いただければ幸いです。
- 締切済み
- Ruby
- 3次曲線の長さの求め方
Y=aX^3+bX^2+cX+dの3次曲線で,X1~X2間の長さ(弧長)の求め方を教えてください。また、弧長から,Xの値の求め方もお願いします(逆をやれば良いだけ?)。 生産設計のプログラムで必要になりました。30年ぶりに、数学の教科書を開きましたが、全く理解できません。宜しくお願いします。一筋縄でいかないようですが? 近似式でもかまわないのですが。
- ベストアンサー
- 数学・算数
- Excelの近似曲線
Excelでy=ax^3+bx^2+cx+dではなく、y=ax^3+bx^2のみで近似することはできますか? また、aとbが正になる近似を行うことはできますか?
- ベストアンサー
- Windows系OS
- Rubyのルンゲクッタ法がうまくいきません
Rubyでルンゲクッタ法でy=exp(x**2)と比較しようという問題で、下のようなプログラムを組むとyの値がかなり大きくなってしまいます。どこが間違っているのでしょうか。教えてください。 #! ruby -Ks #ルンゲックッタ def df(a,b) z=2*a*b return z end n=10 x=Array.new(n) y=Array.new(n) x[0]=0.0 y[0]=1.0 h=1.0/n #任意で変更 fw=File.open("output2.txt","w") for i in 0..n k1=df(x[i],y[i])*h k2=df(x[i]+h/2,y[i]+k1/2)*h k3=df(x[i]+h/2,y[i]+k2/2)*h k4=df(x[i]+h,y[i]+k3) k=(k1+2*k2+2*k3+k4)/6 x[i+1]=x[i]+h y[i+1]=y[i]+k fw.print x[i]," ",y[i]," ","\n" end fw.close()
- ベストアンサー
- Ruby
- Rubyのプログラムについて
Rubyのプログラムについて、宜しければ教えてください。 def fct(n, f=1) if n<=1 then f else fct(n-1, n*f) end end def factorial(n) (1..n).inject{|x,y| x*y} end def factorial(n) eval( [*(1..n)].join("*") ) end このプログラムが、階乗を計算するメソッドになっているみたいなのですが、なぜコレだけで階乗が計算できるのでしょうか? 宜しければ教えてください><
- ベストアンサー
- Ruby
- c プログラム
以下のプログラムは,第n項までのe^xのマクローリン展開をさせるものです. これを修正して,理論値と近似値の誤差がある値(自分で入力)になったときに,計算を終了させるにはどうしたらよいでしょうか.御教授いただければ幸甚 です. ---------------------------------------- #include <stdio.h> #include <math.h> int main(void) { int n; double x=1.0,y=1.0,e=1.0,err; int i; double f=1.0,p=1.0; printf("x="); scanf("%lf",&x); printf("n="); scanf("%d",&n); printf("Mclaurin展開によるn項までのexp(x)の\n n 理論値 近似値 誤差\n"); for(i=1;i<=n;i++){ f*=(double)i; p*=x; y+=p/f;近似値 e=exp(x);理論値 err=e-y;誤差 printf("%2d %12.8e %12.8e %12.8e\n",i,e,y,err); } return 0; }
- ベストアンサー
- C・C++・C#