我正試圖完成與直角矩形規則整合的任務,但我在一個時刻卡住了。前兩個值被輸出了,但更多的值只是0......。 這個任務是從迭代數3開始,一直到512,每次迭代數乘以2。 我覺得這里有問題,但我看不出是什么問題。就像任務中的測驗值一樣:下限:-3,上限:6,起始迭代數。3
#include <iostream>
使用 命名空間 std.com.cn>。
double Function(double x)
{
if (x < 0)
return (1 / sqrt(25 (3 * x)) 。)
else
return pow(x, 2) 0.2;
}
double Integrate(int upper, int lower, int iteration_count)
{
double pre_sum = (double)((double)(upper - lower) / iteration_count) 。
double sum = 0;
for (int i = 1, step ; i < iteration_count; i )
{
sum = Function(lower pre_sum i)。
}
return sum * pre_sum;
}
int main()
{
int upper, lower, iteration_count;
cout << "輸入下限。"。
cin >> lower。
cout << "輸入上限。"。
cingt;> upper。
cout << "輸入迭代計數。"。
cingt;> iteration_count;
for (int i = iteration_count; i < iteration_count * 512; i=i* 2)
{
cout << "整合結果。" << Integrate(upper, lower, i) < < endl;
}
return 0。
}
但數值一直在大幅增加:
輸入下限值。-3。
輸入上限值。6輸入上界:6
輸入迭代次數。3 輸入迭代次數:3
整合結果。16.2 積分結果:16.2
整合結果。33.0094 整合結果:16.2
融合結果。198.962 融合結果: 198.962
融合結果。1138.16 整合結果:198.962
融合結果。5578.55 整合結果:5578.55
整合結果。24809.2 整合結果:24809.2
整合結果。104733 整合結果:104733
整合結果。430463 整合結果:104733
整合結果。1.74547e 06
uj5u.com熱心網友回復:
- 將
sum = Function(lower pre_sum i);/code>改為sum = Function(lower pre_sum * i);/code>。也就是說,你應該乘以i,而不是加。i代表迭代的索引(右直角積分的索引為1;左直角積分的索引為0)。- 將
for (int i = 1, step ; i < iteration_count; i )改為for (int i = 1; i <= iteration_count; i )。也就是說,檢查小于或等于,而不是小于不等式。否則,執行的迭代次數實際上比iteration_count少一個,這可能是非預期的行為。step也被洗掉,因為它是死代碼。 - 將
輸出:
輸入下限值。-3。
輸入上限值。6輸入上界:6
輸入迭代次數。3 輸入迭代次數:3
整合結果。136.8 積分結果:136.8
整合結果。103.081 整合結果:136.8
融合結果。87.911 整合結果:87.911
融合結果。80.7481 整合結果:87.911
融合結果。77.2722 整合結果: 80.7481
融合結果。75.5606 積分結果:77.2722
融合結果。74.7114 整合結果: 74.7114
融合結果。74.2885 整合結果: 74.7114
融合結果。74.0774[/span
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/331087.html
標籤:
