maximaで定積分の解き方を学びたい
- maximaを使用して指定の関数を4つの方法で定積分し、誤差を比較する課題が出されました。しかし、漸化式を使った解き方や台形則を用いた解法について理解が不足しており、正しい答えを見つけることができません。
- 漸化式を用いた解法に関しては、ヒントとして与えられた漸化式や計算式を用いて計算を進めることができますが、具体的な手順や原理については理解ができていません。
- 台形則に関しては、分割数を増やすことで近似的な値を求めることができますが、現在の方法では正確な解を得ることができません。maximaの機能を最大限活用する方法や、より正確な解を求めるアプローチについて知りたいです。
- ベストアンサー
maximaで定積分を漸化式と台形から解きたい
maxima初心者です。 f(x):=%e^a*x^n*%e^(-x); a:0.5; n:20; を4つの方法で0からaまで定積分し、その誤差を比較し正しい答え(誤差が少ない?)を出す計算式をみつけるという課題が出ました。 integrate(f(x), x, 0, a); romberg(f(x), x, 0, a); で出してはみたのですが、漸化式を使った解き方と、台形から解く方法、そして何が正しいのかの見極め方がわかりません。 漸化式は資料に I[0]:%e^a-1; for n:1 thru 20 do( I[n]:n*I[n-1]-a^n); print(i[20]); というヒントがあったのですが、正直これに関しては何が何なのかさっぱりわかっていません。 そして台形に関しては (f(0)+f(0.5))*(0.5)/2;で大きなひとつの台形として計算できると思ったので、 (f(0)+f(0.5)+2*(f(0.1)+f(0.2)+f(0.3)+f(0.4))) *(0.5/5)/2; や (f(0)+f(0.5)+2*(f(0.05)+f(0.1)+f(0.15)+f(0.2)+f(0.25)+f(0.3)+f(0.35)+f(0.4)+f(0.45))) *(0.5/10)/2; と分割数を大きくしてみましたが、これだと埒があかないですよね.. どうにもこうにもいかなくなり、質問させていただきました。 せっかくの高性能を全く使いこなせていなくて情けないです。 どなたか超初心者の私にわかりやすく解説していただけないでしょうか。 よろしくお願いします。
- ooooouaaaaa
- お礼率100% (1/1)
- 数学・算数
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
a=1/2,n=20 のとき、式を ex:x^20*exp(1/2-x) とする。そのとき ans:integrate(ex,x,0,1/2); の厳密解は 2432902008176640000*sqrt(%e)-4206024238468833958514521/1048576 となる。 しかし得られた答えを一般的方法で小数点表示で表すと、 %,numer; 521.0 となるがこの答えは間違っている。なぜなら積分のx=0のときの値と x=1/2のときの値は精度が16の範囲内では同じであって、17以上では誤差が あるからである。 そのため精度を200,表示数を30とする。 fpprec:200; fpprintprec:30; ans,bfloat; 2.32340460032264176094970523337b-8 さて、exをromberg関数で数値積分してみると。 romberg(ex,x,0,1/2); 2.3234046136998887*10^-8 を得る。 romberg関数の精度を15にして数値積分する。 rombergtol:1e-15; romberg(ex,x,0,1/2),bfloat; 2.32340460032264175507294877084b-8 を得て精度が向上する。 しかし、精度を16以上にするとromberg関数は収束せず 精度15が限界である。 台形公式を使う方法はmaximaのヘルプには記載されていないが maximaには存在する。 台形公式を使うためにはsimpsn fileを呼び出す必要がある。 load(simpsn); 台形関数はtraprule(f,a,b,n) fは関数名、a,bは数値積分の範囲、nは分割数 関数名が必要なので関数を定義する。 define(f(x),ex) あるいは f(x):=''ex; で定義する。 分割数n=100で計算すると traprule(f,0,0.5,100); 2.3311490443355299*10^-8 精度はかなり悪い。 分割数n=10000で計算すると traprule(f,0,0.5,10000); 2.3234053751829867*10^-8 精度は向上したがromberg関数に劣る。 分割数をn=100000で計算すると精度は向上するが 私のパソコンで約10秒かかる。 traprule(f,0,0.5,100000); 2.3234046080712618*10^-8 以上から、分割数を増大すれば精度が向上するが、計算時間が 飛躍的に増大すると考えられる。 漸化式の資料にはaを含むがaを1/2とおく。 漸化式は部分積分を使って得られる。 つまり、 integrate(exp(1/2-x),x)=-exp(1/2-x)に注意すると 'integrate(x^n*exp(1/2-x),x,0,1/2)= -(1/2)^n+n*'integrate(x^(n-1)*exp(1/2-x),x,0,1/2); の等式が成り立つ。 そこで、 I[n]='integrate(x^n*exp(1/2-x),x,0,1/2) とすると、次の漸化式が成り立つ。 I[n]=n*I[n-1]-(1/2)^n I[0]=integrate(x^0*exp(1/2-x),x,0,1/2); I[0]=exp(1/2)-1 漸化式を繰り返し使ってn=20まで計算する。 つまりdo関数を使う。 I[0]:exp(1/2)-1; for i thru 20 do I[i]:i*I[i-1]-(1/2)^i; 答えは複雑なので小数点表示する。 I[20],bfloat; 2.32340460032264176094970523337b-8 小数点表示の範囲で厳密解での小数点表示と同じである. 問題はすべて漸化式で表されるとは限らないことである。
関連するQ&A
- log(x-1)の漸化式
log(x-1)の漸化式 テーラー展開して漸化式を作る式がありますよね? 例えば、e^xだとテーラー展開して・・・ y=1+x/+1!+x^2/2!・・・x^n/n! これを利用して a(n)=x/k*a(n-1) となって漸化式が出ます。同様にsinxも考えると y=x - x^3/3! + x^5/5! - x^7/7! + ・・・(-1)^n-1*x^2n-1/2n-1 これを利用して a(n)=x^2/2k-1*a(n-1) となります。(ここまで間違っている部分もあったら、教えてください。) ですが…log(x-1)はどうやってテーラー展開を考えればいいのか分かりません。 この3つはこの後プログラムでテーラー展開の近似の計算に使うのですが・・・ log(x-1)どうやればできるのかをお願いします。
- ベストアンサー
- 数学・算数
- I_(n)=∫x^n/√(x^2+a^2)dxの漸化式の求め方
I_(n)=∫x^n/√(x^2+a^2)dxの漸化式の求め方 この積分の漸化式は I_(n)=x^(n-1)√(x^2+a^2)/n - a^2(n-1)I_(n-2)/n となります この式の求め方がわかりません 誰か教えてください お願いします
- ベストアンサー
- 数学・算数
- 漸化式の問題
先日苦手な漸化式の問題が出され解いてみたのですがどうしてもうまくいきませんでした。どうしても解いてみたいので、回答と解き方を教えてください。 (問)漸化式(*) x_n+2=2x_n+1-2x_n=0 (n=1,2,…)をみたす数列 (x_n)_n=1,2,…全体のなすベクトル空間をVとする。 (1)Vの一組の基底及び次元を求めよ。 (2)α=1+i,β=1-i (i^2=-1)と置くとき、漸化式 (ⅰ) x_n+1=αx_n, (ⅱ) x_n+1=βx_n (n=1,2,…) をみたす数列(x_n)_n=1,2,…全体のなす集合をそれぞれW_1,W_2とする と、これらは共にVの部分空間であることを示せ。 (3)漸化式(ⅰ),(ⅱ)をみたす例でない数列をそれぞれw_1,w_2とするとき、 Λ={w_1,w_2}はVの基底になることを示せ。 (4)Λに関する数列(1,1,…)∈Vの座標を求めよ。 以上です。 こんな簡単な問題も分からないのと思わず優しく教えてください。 お願いします。
- ベストアンサー
- 数学・算数
- 完全順列の漸化式
完全順列をウィキペディアで調べると以下のように漸化式について解説していました。 モンモール数Anを与える漸化式を考える。 n番目に置く数の選び方は1からn-1までの(n-1)通りである。ここで選んだ数をiとする。 次にi番目がnかどうかで場合分けをする。 i番目がnであれば、i番目に置かれたnとn番目に置かれたiを除く(n-2)個の数の並べ方の 総数は、(n-2)個の数による完全順列の数、すなわちA(n-2)に等しい。 i番目がnでない場合は、n番目に置かれたiを除く(n-1)個の数の並べ方の総数は、(n-1)個 の数による完全順列の数、すなわちA(n-1)となる。 以上をまとめると下の漸化式が得られる。 An=(n-1)・{A(n-1)+A(n-2)} n>=3 これでは訳が解らないのでn=4の場合を考えます。 4番目に置く数の選び方は1から(4-1)までの3通りである。ここで選んだ数iは3である。 次に3番目(i番目)が4(n)かどうかで場合分けをする。 3番目(i番目)が4(n)であれば3(i)番目に置かれた4(n)と4(n)番目に置かれた3(i)を除く(4-2)個 の数の並べ方の総数は、(4-2)個の数による完全順列の数、すなわちA(4-2)に等しい。 3(i)番目が4(n)でない場合は4(n)番目に置かれた3(i)を除く(4-1)個の数の並べ方の総数は (4-1)個の数による完全順列の数、すなわちA(4-1)となる。 A4=(4-1)・{A(4-1)+A(4-2)}=3×(A3+A2) 両辺をそれぞれ自力で強引に調べると確かに両辺とも9になっていて この漸化式は正しいようですが、n=4の場合に簡単化してもいまひとつ ピンときません。 平たく云って、この漸化式はどのような考え方に基づいて成り立って いるのでしょうか。
- ベストアンサー
- 数学・算数
- ちょっと難解な漸化式の問題です!
ある関数の第n次導関数を求める際の計算過程で次の複雑な漸化式が出てきました。 a_(n+1)=-(n+1)×a_n+(-1)^n×n! この漸化式は一体どのようにすれば解けるのでしょうか? ただし、a_(n+1)、a_nはそれぞれ第n+1項、第n項を表しています。
- ベストアンサー
- 数学・算数
- 高校数学 連立漸化式です。
連立漸化式 x_(n+1)=3x_n+2y_n…(1) y_(n+1)=5x_n+2y_n…(2) について、y_n-x_nをnを用いて表せ。 という問題です。 この問題を解いてください。 (本当は、これはある問題の一部分で、漸化式は一次変換等の条件から求めたものです。漸化式立式までは計算し直したのであっているはずです。) 自分では、(2)-(1)をしたり、 (1)をy_n=~と変形し(2)に代入したり いろいろ式をいじったのですがなかなか上手くいきません。 よろしくお願いします。
- 締切済み
- 数学・算数
お礼
お礼が遅れてしまい申し訳ありません。 丁寧な回答、ありがとうございました。