2016-04-01 11 views
-3

Fortran 90では、数学関数をある制限内の1つの変数と数値的に統合したいと考えています。例えば、f(x)= x ** 2を0から10に積分する。私の持つ関数はこれよりも複雑で、積分の限界を数回変えて実行しなければならない。私はインターネット上で 'QUADPACK'ライブラリが私にこれを助けてくれるかもしれないことを知りました。しかし、どのように私はこのコードを私のコードで呼び出すことができるようにこのライブラリをインストールすることができますか?高度な指示に従うことができないため、いくつかの詳細を記入してください。Fortran 90における数値積分

+2

https://en.wikipedia.org/wiki/Trapezoidal_ruleまたはhttps ..より複雑な式は、メッシュが十分細かいので、長く入ることができる(および関数が滑らかである)、これは動作するはずです: //en.wikipedia.org/wiki/Simpson's_rule彼らはどちらもあなたの自己を実装するのに非常に簡単です –

+0

あなたが使用しているオペレーティングシステムを統合している方程式についての詳細情報を提供してください。具体的事例。これはもっと役に立つでしょう。 – Charlie

+0

@ Charlie-一般的な方程式を知りたいです。例えば、a * x ** 2 + b * x + cを限界l1からl2に積分する。ここで、a、b、およびcはいくつかの定数である。私はl1とl2の配列を持っています。つまり、この方程式を限界の配列に何度も積分しなければなりません。 – NewToFortran

答えて

0

私は中点法を使ってx^2を統合する単純なプログラムを提供しました。

program integrate 
    implicit none 
    integer,parameter :: cp = selected_real_kind(14) 
    integer,parameter :: N = 1000 
    real(cp),dimension(N) :: f,xc 
    real(cp),dimension(N+1) :: x 
    real(cp) :: s,xmax,xmin,dx 
    integer :: i 
    xmin = 0.0_cp 
    xmax = 10.0_cp 
    dx = (xmax - xmin)/real(N,cp) 
    x = (/(xmin + dx*(i-1),i=1,N+1)/) 
    ! Define x at center 
    do i=1,N 
    xc(i) = x(i) + 0.5_cp*dx 
    enddo 
    ! Define f 
    do i=1,N 
    f(i) = xc(i)**2 
    enddo 
    ! Integrate (Midpoint method) 
    s = 0.0_cp 
    do i=1,N 
    s = s + f(i)*dx 
    enddo 
    write(*,*) 'sum = ',s 
    end program 
+0

私は、この定義でselected_real_kindが使用されていることを保証するために、x ** 2.0_cpを予防措置として使用しました。私は過去に単純に2.0、または実際の(2.0、cp)を使って問題を抱えてきました。 – Charlie

+0

@francescalusあなたの例はいくつかのかっこを必要とします。 '-1.0_cp ** 2'は' -1.0'です。整数2を使用する何かを正方形にすることを意味しています。 – agentp

+0

わかりませんそれ、ありがとう!私は答えを編集します。 – Charlie

関連する問題