1. 程式人生 > >數值作業:龍貝格演算法計算積分C語言實現

數值作業:龍貝格演算法計算積分C語言實現

根據Romberg演算法計算定積分,和變步長的Simpson演算法的輸入都一樣.演算法基本分析:輸入a,b(積分上下限),n為積分割槽間等分數,eps為計算精度,我這裡1e-7,代表0乘以10的負7次方.本題目取的例子為數值書137面的例子2,f(x)= sin(x)/x,下面給出程式碼:

/********************************************  
    > File Name: Dragon.c  
    > Author:chendiyang  
    > School:WUST_CST_1501班  
    > Myblog:www.chendsir.com  
    > Mail:
[email protected]
> Created Time: 2017年05月6日 星期六 12時33分10秒 ************************************************************************/ #include <stdio.h> #include <math.h> #define N 20 #define MAX 10 //陣列存的最大行數 #define a 0.0000001 //積分下限 #define b 1.0 //積分上限 #define eps 1e-7 //精度 double f(double x)//所求積分公式 { return sin(x) / x; } double computeT(double aa, double bb, long int n)//復化梯形公式 { int i; double sum, h = (bb - aa) / n; for (i = 1; i < n; i++) sum += f(aa + i * h); sum += (f(aa) + f(bb)) / 2; return (h * sum); } double f2(double x) { return x*x; } int main() { int i; long int n = N,m = 0; double T[MAX + 1][2]; T[0][1]=computeT(a,b,n); n*= 2; for (m = 1; m < MAX; m++) { for (i = 0; i < m; i++) { T[i][0] = T[i][1]; } T[0][1]=computeT(a,b,n); n *= 2; for (i = 1; i <= m; i++) //T的m(h) T[i][1] = T[i - 1][1] + (T[i - 1][1] - T[i - 1][0]) / (pow(2, 2 * m) - 1); if ((T[m - 1][1] < T[m][1] + eps) && (T[m - 1][1] > T[m][1] - eps)) { printf("計算的數為:%lf\n", T[m][1]); //輸出 return 0; } } printf("此題沒有解...\n"); return 0; }

執行結果:


可見計算的結果是正確的,然而中間因為一個小小的中文空格替換問題,除錯了整整一小時,等發現錯在哪之後,才拍大腿,恍然大悟,腦子一直在想我TM到底錯在哪了.雖然煩,以前一位學長說程式設計師們基本都是吾日三省吾身的,每當Debug的時候,感觸最深..

紙上得來終覺淺,絕知此事需躬行.

相關推薦

數值作業:演算法計算積分C語言實現

根據Romberg演算法計算定積分,和變步長的Simpson演算法的輸入都一樣.演算法基本分析:輸入a,b(積分上下限),n為積分割槽間等分數,eps為計算精度,我這裡1e-7,代表0乘以10的負7次方.本題目取的例子為數值書137面的例子2,f(x)= sin(x)/x,

公式計算積分

1 #include<stdio.h> 2 #include<math.h> 3 #define maxlen 100 4 #define eps 0.5*1e-5 5 double a=0; 6 double b=1; 7 double f(double

Canny邊緣檢測演算法原理及C語言實現詳解

Canny運算元是John Canny在1986年提出的,那年老大爺才28歲,該文章發表在PAMI頂級期刊上的(1986. A computational approach to edge detection. IEEE Transactions on Pattern Analy

關於中值濾波演算法,以及C語言實現

關於中值濾波演算法,以及C語言實現 2017年04月06日 11:45:58 閱讀數:1464 1、什麼是中值濾波? 中值濾波是對一個滑動視窗內的諸畫素灰度值排序,用其中值代替視窗中心象素的原來灰度值,它是一種非線性的影象平滑法,它對脈衝干擾級椒鹽噪聲的抑制效果好,在抑制隨機噪聲的同

數值分析中的高斯消元 c語言實現附帶註釋

#include <iostream> #include <cstdio> #include <cmath> using namespace std; double

計算方法——C語言實現——全主元高斯消元法求解非線性方程

最近在上計算方法這門課,要求是用MATLAB做練習題,但是我覺得C語言也很棒棒啊~ 題目: 高斯消元法是線性方程組的直接解法,可能會造成很大的失真,尤其是高斯順序消元法,對方法進行改進,使每次都選取絕對值最大的元素為主元,使其為乘數的分母,控制舍入誤差的擴大,

遞迴求最大最小值演算法 分治策略(c語言實現)

思路:運用分治的思想,將要排序的整個陣列從中間劈開,分別求其左右兩邊的最大最小值,然後將求出的最大最小值合起來進行比較。 當左右兩邊的陣列小到一定程度時: (1)陣列中只有一個元素,maxNum=mi

[演算法]揹包問題的經典演算法和貪心演算法解答,C語言實現

聖誕前夜講點比較具有聖誕感覺的演算法,揹包問題演算法,這裡我寫了經典演算法和貪心演算法兩種解決方法,因為時間不多,所以給出的陣列是已經排序的,因為貪心演算法可能要用得到,經典演算法因為是一個一個比較,因此排序也就沒有那麼重要了,可能兩種演算法的最終執行效果一樣的,朋友們除錯的時候記得修改我給出的測試陣列,今天

有向圖的強連通分支演算法kosaraju(C語言實現)

/* Kosaraju求強連通分量鄰接矩陣 */#include "stdio.h"#include "stdlib.h"#define Vexnum 100int map1[Vexnum][Vexnum]={0};int nmap[Vexnum][Vexnum]={0};int visited[Vexnum

機器學習中K-means聚類演算法原理及C語言實現

本人以前主要focus在傳統音訊的軟體開發,接觸到的演算法主要是音訊訊號處理相關的,如各種編解碼演算法和回聲消除演算法等。最近切到語音識別上,接觸到的演算法就變成了各種機器學習演算法,如GMM等。K-means作為其中比較簡單的一種肯定是要好好掌握的。今天就講講K-means的基本原理和程式碼實現。其中基本原

【作業系統】頁面置換演算法(最佳置換演算法)(C語言實現

# 【作業系統】頁面置換演算法(最佳置換演算法)(C語言實現) #####(編碼水平較菜,寫部落格也只是為了個人知識的總結和督促自己學習,如果有錯誤,希望可以指出) ## 1.頁面置換演算法: > 在地址對映過程中,若在頁面中發現所要訪問的頁面不在記憶體中,則產生缺頁中斷。當發生缺頁中斷時,如果作業系

求解數值積分

龍貝格求積公式,是一種梯形法的遞推化,也是將求積區間逐次二分,將前一次二分的積分和Tn與下一次二分的積分和T2n有個遞推關係,通過梯形公式的餘項泰勒展開成級數形式,變數代換,進行整體的加減組合,能夠得到關於T2n和Tn的線性組合S。同理,對S的線性組合可以推出C

Romberg(求積)

#include <stdio.h> float f(float x) { return(exp(x)/(4+x*x)); } main() { float a=0,b=1;//積分上下界 float h=b-a,T1,T2,s,x;//

C語言實現householder變換(數值計算方法課程設計)

博主系某985資訊與計算科學大三,剛除錯成功,分享給正在學習數值計算的夥伴們,有問題還請大家批評指正。  #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 100 s

C語言實現變步長求積分演算法

下面求解如下問題: 1、變步長:         由於多數情況下,並不知道步長設定為多少合適,所以我們可以設定一個初始步長,求解一次,再把步長變為原來的一半,依次接下去,直到達到我們所需的精度。 2、程式碼: #include<stdio.h>

基於求導的快速exp()演算法,exp()快速計算,exp導數演算法,exp函式C語言實現

基於求導的快速exp()演算法 如果需要得到exp(x)的連續數列,那麼常規方法需要一個一個數的運算,運算量會非常大。此時可以使用以下方法,得到連續的exp(x)數列。 我們知道的導數等於本身。設                                    

作業排程之先來先服務演算法C語言實現

程式碼如下 /*    @author WellsLiu    @url liuyanzhao.com*/#include"stdio.h"#include"stdlib.h"typedef st

C語言實現括號匹配,中綴表示式轉字尾表示式並計算演算法

1.將中綴表示式轉換為字尾表示式的演算法: (1) 初始化兩個棧:運算子棧S1和儲存中間結果的棧S2; (2) 從左至右掃描中綴表示式; (3) 遇到運算元時,將其壓入S2; (4) 遇到運算子時,比較其與S1棧頂運算子的優先順序: Ø (4-1)如果S1為空,或棧頂運算子

JAVA和Python HmacSHA1 演算法計算API簽名的實現

JAVA版 // 計算簽名 private static final String ENCODING = "UTF-8"; private static final String ALGORITH