二重积分的C语言实现
生活随笔
收集整理的這篇文章主要介紹了
二重积分的C语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
想到求二重積分,我們可能第一下想到的是先對其中的一個變量進行積分,同時將另外一個變量看成常數,之后再對第二個變量進行積分,筆者高中的教材上就這這么寫的。
但是對于計算機來說,實現不定積分是一件很困難的事情,于是這條“人類的方法”在計算機上面就行不通了,但是別急,我們可別忘了積分最原始的定義——分割 、 求和 、 取極限
我們先來復習一下二重積分的定義:
對于一重積分的情況,請參見https://blog.csdn.net/weixin_42612337/article/details/82829351
當然,這里面影響定積分的精度的主要因素就是N的大小,N越大,計算結果越接近真實值, 但同時,N越大,計算時間也就越長。
下面是C代碼:
// // main.c // double_integral // // Created by Wayne on 2018/9/29. // Copyright ? 2018 Wayne. All rights reserved. //#include <stdio.h> #include <math.h>long double function(long double x , long double y); //這里聲明被積函數int main(void) {unsigned long long N = 1000000000; //強烈建議把N取小一點 , 十億實在算的太慢了unsigned long long i , j;long double V;long double a , b , c , d;scanf("%Lf %Lf %Lf %Lf" , &a , &b , &c , &d);for (j = 0 ; j <= N ; j++){for (i = 0 ; i <= N ; i++){V += ((b - a) * (d - c) / (N * N)) * function((a + ((b - a) / N) * i) , (c + ((d - c) / N) * j));}}printf("%Lf\n" , V);return 0; }long double function(long double x , long double y) //這里定義被積函數 {long double z = x + y; //我們取 f(x,y) = x + y 這個簡單的情形為例return z; }下面是終端運行的情況,注意在這里筆者取了兩個積分區間,其中
?,
對于至于為什么不取上面代碼里面的十億,看第四段。
對于D1:(真實值應該是20.625)
對于D2:(真實值應該是1)
由于筆記本電腦運算能力導致的運算時間的限制,我不得不降低了精讀,如果使用更加專業的工具,或許就能在提高精度的同時提高速度了。
總結
以上是生活随笔為你收集整理的二重积分的C语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈音视频自动化测试
- 下一篇: ecshop系统下载