C:无限环的黎曼积分问题
我必须写一个程序来计算正弦循环。第一个任务是创建数组,将正弦循环放入几个间隔,如[0.0到0.1],[0.1到0.2]。。。并且应该有一个来自算子的最大输入 之后,我应该计算每个间隔的面积 一切都很顺利,但在第14次间隔之后,我的节目中断了,我不知道为什么。。 也许你能帮我,这是我的代码:C:无限环的黎曼积分问题,c,integral,C,Integral,我必须写一个程序来计算正弦循环。第一个任务是创建数组,将正弦循环放入几个间隔,如[0.0到0.1],[0.1到0.2]。。。并且应该有一个来自算子的最大输入 之后,我应该计算每个间隔的面积 一切都很顺利,但在第14次间隔之后,我的节目中断了,我不知道为什么。。 也许你能帮我,这是我的代码: #include <stdio.h> #include <stdlib.h> #include <math.h> #define ARR_MAX 1000 float f
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ARR_MAX 1000
float f(float x) {
float sinus = (float)sin((float)x);
return(sinus);
}
float max(float a, float b) {
if (a < b)
return(b);
else
return(a);
}
float min(float a, float b) {
if (a < b)
return(a);
else
return(b);
}
int main(void) {
printf("Dieses Programm berechnet Ober und Untersummen einer Sinuskurve\n");
float x; int xmax; float result;
int arr[ARR_MAX];
printf("Geben Sie die Zahl xmax ein: "); // put in the max amount of numbers
scanf("%d\n", & xmax);
if (ARR_MAX > xmax) {
xmax = xmax*10;
for (int i = 0; i <= xmax; i += 1) { // here i create arrays for my intervals
x = i;
arr[i] = i;
x = x/10;
float a = x - 0.1;
//left interval is always 0.1 lower than variable for example you get x = 0.3 --> 0.3 - 0.1 = 0.2; so interval is a = 0.2, b = 0.3
float b = x;
float T = 0.1; //accuracy
float uppersum;
float lowersum;
long numberintervals = 10;
do {
// i use this do while operation to get the result for each interval
float lengthintervals = b/numberintervals;
uppersum = 0.0;
lowersum = 0.0;
int i;
for (i = 0; i < numberintervals;i++) {
float x = a + i*lengthintervals;
float y1 = f(x);
float y2 = f(x + lengthintervals);
float upperamount = max(y1, y2);
float loweramount = min(y1, y2);
uppersum += upperamount*lengthintervals;
lowersum += loweramount*lengthintervals;
}
} while (uppersum - lowersum > T);
result = result + lowersum;
printf("arr[%d] = %f - ", arr[i], x);
printf("Flächensumme = %f - ", lowersum);
printf("neues Ergebnis = %f\n", result);
}
} else {
return EXIT_SUCCESS;
}
}
#包括
#包括
#包括
#定义ARR_MAX 1000
浮点数f(浮点数x){
浮点数=(浮点数)sin((浮点数)x);
回流(窦);
}
浮动最大值(浮动a,浮动b){
if(axmax){
xmax=xmax*10;
对于(inti=0;i0.3-0.1=0.2;所以区间是a=0.2,b=0.3
浮动b=x;
浮点T=0.1;//精度
浮动上限;
漂浮下层;
长数神经=10;
做{
//我使用这个do-while操作来获得每个间隔的结果
浮动长度间隔=b/数字间隔;
上限和=0.0;
lowersum=0.0;
int i;
对于(i=0;iT);
结果=结果+下限;
printf(“arr[%d]=%f-”,arr[i],x);
printf(“Flächensumme=%f-”,下限);
printf(“neues Ergebnis=%f\n”,结果);
}
}否则{
返回退出成功;
}
}
在arr[i]
中使用的i
可能超出数组边界,因为i
可能大于arr\u MAX
int arr[ARR_MAX];
...
if (ARR_MAX > xmax) {
xmax = xmax*10;
for (int i = 0; i <= xmax; i += 1) {
...
arr[i] = i;
int-arr[arr_MAX];
...
如果(ARR_MAX>xmax){
xmax=xmax*10;
对于(int i=0;i我的程序如何中断?是什么输入导致“中断”?在第14个间隔后,我没有得到任何输出,但它仍然运行。我看到的一个问题是,您检查如果(ARR_MAX>xmax)
但是在for
循环中使用xmax
之前,您将xmax=xmax*10
。您的最内层do
循环将只运行一次或无限频繁,因为您在“全局状态”中不会更改任何内容也许你应该在每个周期增加numberintervals
,从而提高精确度?