Код работает но в методе Симпсона есть какой то баг который мне так и не получилось выявить, перебирал его не единожды но тщетно, результат вычислений "-1.#IND". Функции в которых выявлен баг в виде коментариев. Суть кода следующая, на плоскости, фигуры- эллипс, окружность и ещё прямая их пересечением образуются сектора, площадь которых и нужно расчитать. Для наглядности задание в приложении. Просьба укажите в чём недоразумение.
(sqrt(18*18-(m+8.141)*(m+8.141)))*40/18-5 - эллипс sqrt(24*24-(j-11.083)*(j-11.083))+2 -окружность
| Код | #include <math.h> #include <iostream.h> #include <stdio.h>
void main(void) { double a1,a2,a3,b1,b2,b3; double h1,h2,h3,e,e1; double j,j1,m,m1; long n,i; int i1; double S[28];
a1=0; a2=-12.8335; a3=-26; b1=9.68382; b2=0; b3=0;
n: cout<<"Vvedite chislo razbieniy n = "; cin >> n; h1=(b1-a1)/n;//вычисление шага интегрирования h2=(b2-a2)/n; h3=(b3-a3)/n; S[4]=0; S[5]=0; S[7]=0; S[6]=0; S[14]=0; S[15]=0; S[17]=0; S[16]=0;
for(i=0;i<n;i++) {
//значени точки интегрирования
e=a1+h1*i+h1+0.5; j=a2+h2*i+h2*.5; m=a3+h3*i+h3*.5;
//<<<<<<<< Метод прямоугоника >>>>>>
S[1]=fabs(sqrt(24*24-(e-11.083)*(e-11.083))+2)*h1; S[5]=S[5]+S[1]; S[2]=fabs(sqrt(24*24-(j-11.083)*(j-11.083))+2)*h2; S[6]=S[6]+S[2]; S[3]=fabs((sqrt(18*18-(m+8.141)*(m+8.141)))*40/18-5)*h3; S[7]=S[7]+S[3];
//<<<<<<<< Метод трапеции >>>>>>>>
S[11]=(fabs(sqrt(24*24-((e+h1*.5)-11.083)*((e+h1*.5)-11.083))+2)+fabs(sqrt(24*24-((e-h1*.5)-11.083)*((e-h1*.5)-11.083))+2))*h1/2; S[15]=S[15]+S[11]; S[12]=(fabs(sqrt(24*24-((j+h2*.5)-11.083)*((j+h2*.5)-11.083))+2)+fabs(sqrt(24*24-((j-h2*.5)-11.083)*(((j-h2*.5))-11.083))+2))*h2/2; S[16]=S[16]+S[12]; S[13]=(fabs((sqrt(18*18-((m+h3*.5)+8.141)*((m+h3*.5)+8.141)))*40/18-5)+fabs((sqrt(18*18-((m-h3*.5)+8.141)*((m-h3*.5)+8.141)))*40/18-5))*h3/2; S[17]=S[17]+S[13];
}
S[4]=S[7]-S[6]; S[5]=S[5]-42.421; S[4]=S[4]+S[5];
S[14]=S[17]-S[16]; S[15]=S[15]-42.421;//из общей площади сектора вычитается площадь треугольника "42.421" S[14]=S[14]+S[15];
//<<<<<<< Метод Симпсона >>>>>><
{ S[25]=fabs(sqrt(24*24-(a1-11.083)*(a1-11.083))+2)+fabs(sqrt(24*24-(b1-11.083)*(b1-11.083))+2); S[26]=fabs(sqrt(24*24-(a2-11.083)*(a2-11.083))+2)+fabs(sqrt(24*24-(b2-11.083)*(b2-11.083))+2); S[27]=fabs((sqrt(18*18-(a3+8.141)*(a3+8.141)))*40/18-5)+fabs((sqrt(18*18-(b3+8.141)*(b3+8.141)))*40/18-5); for(i=0;i<n;i+=2) {
//значени точки интегрирования
e1=a1+h1*i; j1=a2+h2*i; m1=a3+h3*i;
S[21]=(fabs(sqrt(24*24-((e1+h1)-11.083)*((e1+h1)-11.083))+2))*2+fabs((sqrt(24*24-((e1-h1)-11.083)*((e1-h1)-11.083))+2))*4 ;
S[25]=S[25]+S[21];
//S[22]=(fabs(sqrt(24*24-((j1+h2)-11.083)*((j1+h2)-11.083))+2))*2+fabs((sqrt(24*24-((j1-h2)-11.083)*((j1-h2)-11.083))+2))*4 ;
S[26]=S[26]+S[22];
//S[23]=(fabs((sqrt(18*18-((m1+h3)+8.141)*((m1+h3)+8.141)))*40/18-5))*2+fabs(((sqrt(18*18-((m1-h3)+8.141)*((m1-h3)+8.141)))*40/18-5))*4 ;
S[27]=S[27]+S[23]; S[24]=S[27]*h3/3-S[26]*h2/3;
}
S[25]=S[25]-42.421; S[24]=S[24]+S[25]; }
cout<<S[4]<<'\t'<<S[14]<<'\t'<<S[24]<<endl;
cout<<"Dly prodoljeniy najmite 1 "<<endl; cin >> i1; if(i1==1) { goto n;} else {goto end ;} end:; }
|
|