Программа вычисления определенного интеграла методом прямоугольников с визуализацией решения
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
p;&postX1<=x2*delX )
{=S+funkcia(post)*((x1+((x2-buf)/n))-x1);} //вычисление интеграла{=S+funkcia(post)*((x1+((x2-buf)/n))-x1);}//вычисление интеграла
}S;
}PRAVPR(double &buf,double &x2,int &n,double &delX, double &delY){y,S,x1,post;postX1,postY,xx,yy;(x1=buf;x1<x2;x1=x1+((x2-buf)/n))
{yy=Convert::ToInt64(funkcia(x1)*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);=funkcia(x1); =x1+((x2-buf)/n);(abs(yy)0)||(yy<0&&postY<0))&&postX1<=x2*delX) {=S+y*((x1+((x2-buf)/n))-x1);}//вычисление интеграла
}S;
}SREDPR(double &buf,double &x2,int &n,double &delX, double &delY){
double y,S,x1,post;postX1,postY,xx,yy;(x1=buf;x1<x2;x1=x1+((x2-buf)/n))
{yy=Convert::ToInt64(funkcia(x1)*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);=funkcia(x1);=x1+((x2-buf)/n);(abs(yy)0)||(yy<0&&postY<0))&&postX1<=x2*delX) {=S+(funkcia(post)+(y-funkcia(post))/2)*((x1+((x2-buf)/n))-x1);}//вычисление интеграла
}S;
Image=System::Drawing::Bitmap(pictureBox1->Size.Width,->Size.Height);::Drawing::Graphics^g=::Drawing::Graphics::FromImage(pictureBox1->Image);::Drawing::Pen^pen=System::Drawing::Pen(colorDialog1->Color);::Drawing::Brush^brush=System::Drawing::SolidBrush(colorDialog1->Color);x1,x2;=1;=1;n;//shag,//,..X;//,(radioButton1->Checked==true)n=Convert::ToInt64(numericUpDown1->Value);maxY,minY;(radioButton2->Checked==true)n=6;(check(x1,x2)&&(x2>x1))">}y;: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {->Image = System::Drawing::Bitmap(pictureBox1->Size.Width,->Size.Height);::Drawing::Graphics^ g = ::Drawing::Graphics::FromImage(pictureBox1->Image);::Drawing::Pen^ pen = System::Drawing::Pen(colorDialog1->Color);::Drawing::Brush^ brush = System::Drawing::SolidBrush(colorDialog1->Color);x1,x2;=1;=1;n;//число прямоугольниковshag,//шаг в циклах, т.е. приращение по оси X;//разность между верхним и нижним пределами интегрирования, необходима для нахождения шага(radioButton1->Checked==true) n=Convert::ToInt64(numericUpDown1->Value);maxY,minY;(radioButton2->Checked==true) n=6;(check(x1,x2)&&(x2>x1))
{double delX;((x1=0))
{delX=(600/(abs(x1)+abs(x2)));}{delX=600/(abs(x2-x1));}
//Смещение по оси Х:sdvigX,sdvigY;(x1<0) =Convert::ToInt64(abs(x1)*delX);sdvigX=Convert::ToInt64(-x1*delX);buf;=sdvigX+80;//чтобы справа умещалась шкала X=x1;//необходим для запоминания Х1 =abs(x2-x1);=0.001*raznostX;
//Поиск наибольшего и наименьшего Y -необходимо для масштабирования=0;=0;srY;(x1=x1;x1<=(x2);x1=x1+shag)
{=funkcia(x1);///////////////////////////////////////////////////////////////////////////////////////////((srY>maxY)) maxY=srY;((srYText=="Измените") MessageBox::Show("Измените пределы интегрирования");
{=buf;delY;
//единичный отрезок по оси Y (m2):((minY=0))
{delY=(500/(abs(minY)+abs(maxY)));}{delY=500/(abs(maxY-minY)); }
//Смещение по оси Y:(minY<0) sdvigY=Convert::ToInt64(abs(minY)*delY);sdvigY=0;=Convert::ToInt64(x1*delX);=funkcia(x1);ddelY;=1000;(abs(maxY-minY)<0.001) ddelY=1000000000000;=Convert::ToInt64(y*delY);m11,m22;=-(maxY)*delY;//для изменения координаты черточки единичного отрезка на оси Y
m11=buf*delX;//для изменения координаты черточки единичного отрезка на оси XpointX;//для циферок единичных отрезковpointY;//для циферок единичных отрезковkolX, kolY;=Convert::ToInt64(numericUpDown2->Value);//количество меток по оси X=Convert::ToInt64(numericUpDown3->Value);//количество меток по оси YiY,iX;=buf; iY=-maxY; if (abs(maxY-Convert::ToInt64(maxY))<0.0000001) iY=-Convert::ToInt64(maxY);=Convert::ToString(iX) ;=Convert::ToString(iY);(x1=x1;x1<=(x2);x1=x1+shag)
{ =funkcia(x1); /=Convert::ToInt64(y*delY);=Convert::ToInt64(x1*delX);>DrawLine(pen,prexx+sdvigX,preyy+sdvigY+40,xx+sdvigX,yy+sdvigY+40);//рисую график
//рисую единичные отрезки на оси X:>DrawLine(pen,50,sdvigY+40,726,sdvigY+40);// оззь Х>DrawString(pointX,fontDialog1->Font,brush,sdvigX+m11,sdvigY+40);//метки единичных отрезков по оси X>DrawString(pointY,fontDialog1->Font,brush,3,sdvigY-m22+40);//метки единичных отрезков ось Y
//выбор меток по оси Y=m22+(abs(-minY+maxY)/kolY)*delY; iY=iY+abs(maxY-minY)/kolY; iY=iY*ddelY; iY=Convert::ToInt64(iY); iY=iY/ddelY; pointY=Convert::ToString(iY) ;
//метки по оси Х=m11+(abs(x2-buf)/kolX)*delX; iX=iX+abs(x2-buf)/kolX; iX=iX*1000000000; iX=Convert::ToInt64(iX); iX=iX/1000000000; pointX=Convert::ToString(iX);
//манипуляции с триллиардами для округления =xx;=yy;}
//выбор количества интервалов в соответствии с точностьюS;//значение интеграла=0;preX1,post;v;=0;postX1, postY ;//необходимы для рисования прямоугольниковi;tochnost;=buf;((comboBox1->Text=="Метод левых прямоугольников")||(comboBox1->Text=="Метод правых прямоугольников")||(comboBox1->Text=="Метод средних прямоугольников"))
{((radioButton2->Checked==true)&&(checktoch(tochnost)))
{=3;=0;preS;=tochnost*10;//2*S+tochnost;//чтобы выполнилось условие которое ниже(abs(S-preS)>abs(tochnost))
{preS=S;=0;(comboBox1->Text=="Метод левых прямоугольников")
{S=LEVPR(buf,x2,n,delX,delY);
}(comboBox1->Text=="Метод правых прямоугольников")
{ S=PRAVPR(buf,x2,n,delX,delY);
}(comboBox1->Text=="Метод средних прямоугольников")
{=SREDPR(buf,x2,n,delX,delY);
}=n*2;
}
}(radioButton1->Checked==true)
{ (comboBox1->Text=="Метод левых прямоугольников")
{S=LEVPR(buf,x2,n,delX,delY);
}(comboBox1->Text=="Метод правых прямоугольников")
{ S=PRAVPR(buf,x2,n,delX,delY);
}(comboBox1->Text=="Метод средних прямоугольников")
{=SREDPR(buf,x2,n,delX,delY);}}
//визуализация методов=0;(x1=buf;x1<=x2;x1=x1+((x2-buf)/n))
{ double mnx=x2-(x2-buf)/n;y2; y2=Convert::ToInt64((y2=funkcia(mnx))*delY);=funkcia(x1);=Convert::ToInt64(x1*delX);=Convert::ToInt64(y*delY);=x1+((x2-buf)/n);=Convert::ToInt64((x1+((x2-buf)/n))*delX);=Convert::ToInt64(funkcia(post)*delY);
//визуализация метода левых прямоугольников(comboBox1->Text=="Метод левых прямоугольников")
{g->DrawLine(pen,xx+sdvigX,sdvigY+40,xx+sdvigX,yy+sdvigY+40);//вертикальные линии(abs(funkcia(post)-funkcia(x2))DrawLine(pen,xx+sdvigX,postY+sdvigY+40,xx+sdvigX,y2+sdvigY+40);//чтобы дорисовал предпосл