Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Снова математика... Помогите!!!!   Найти похожие ветки 

 
Mox Fulder ©   (2004-02-29 16:51) [0]

Люди, не ругайтесь, пожалуйста! помогите найти интеграл
cos^4(x)dx
и ещё...
6/(sin^2(x-1))-5*cos(6+5*x)+2
Заранее спасибо и ещё раз не ругайтесь!


 
TUser ©   (2004-02-29 17:06) [1]

1. По частям (один косинус задэикси - и так несколько раз)
2. Если тоже dx, тогда - первый интеград берется тоже по частям, а второй и третий тривиальны.


 
Romkin ©   (2004-02-29 17:08) [2]

Полно библиотек, возьми, например, метод трапеций. Он оченно неплохо подойдет.


 
YurikGl ©   (2004-02-29 17:11) [3]

Загрузи в Pascal

{$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}
{Методом Симпсона, с точностью t вычислить значение
произвольного интеграла }
uses Crt,GRAPH;
Const
t=0.0001; {Точность}
a=0;    {Границы интегрирования}
b=10;
OLeft=50; {Отступ слева для графика}
Var
Max,Min,{Максимум и минимум координатной сетки для ф-и в заданном промежутке}
Stepv,Steph:extended;{Сколько пикселей составляют еденицу}
Function Pow(a,b:extended):extended; {Вспомогательная ф-я для вычисления }
Begin                                    {a в степени b}
 Pow:=exp(ln(a)*b);
End;
Function f(x:extended):extended;{ф-я от которой ищется интеграл}
Begin
 f:=sin(x)+1;
End;
Procedure InitProc; {Вычисляет все необходимые параметры}
var
i:integer;
vr:extended;
Begin
 Max:=f(a);
 Min:=Max;
 for i:=0 to 500 do begin
   vr:=f(a+i*(b-a)/500);
   if vr>=Max then Max:=vr;
   if vr<=Min then Min:=vr;
                     end;
 stepv:=400/(max-min);
 Steph:=500/(b-a);
End;
Procedure GraphProc;{Рисует коорд. сетку}
Var
GraphDriver,GraphMode,ErrorCode,i:integer;
st:string;
Begin
 GraphDriver:=Detect;
 InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi");{Если вы в среде TP то впишите путь к драйверам}
 ErrorCode:=GraphResult;{напр.InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi")}
 if ErrorCode<>grOk then write("Ошибка ",ErrorCode," ");
    {Координатная сетка}
 SetTextStyle(2,0,4);
 Line(Oleft-5,440,Oleft+505,440);
 Line(OLeft,35,OLeft,445);
 for i:=1 to 4 do
   Line(i*125+Oleft,435,i*125+Oleft,445);
 for i:=1 to 11 do
   line(Oleft-5,i*40,OLeft+5,i*40);
SetColor(lightgreen);
for i:=0 to 10 do begin
 str(max-i*(Max-min)/10:5:3,st);
 OutTextXY(7,i*40+34,st);
                 end;
for i:=0 to 4 do begin
  str(a+i*(b-a)/4:3:3,st);
 OutTextXY(i*125+OLeft-15,450,st);
                end;
End;
Procedure Zastavka;
Var
GraphDriver,GraphMode,ErrorCode,i:integer;
x,y,k1,k2:integer;
Begin
 x:=-100;
 k1:=random(4)-2;
 k2:=random(4)-2;     {Если вы в среде TP то впишите путь к драйверам}
 GraphDriver:=Detect; {напр.InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi")}
 InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi");
 ErrorCode:=GraphResult;
 if ErrorCode=-3 then begin
    TextBackGround(red);
    writeln ("Поменяйте пути к графическим драйверам");
    writeln ("Если вы в среде Turbo Pascal то это будут 64-я,94-я,193-я и 253-я строки");
    writeln ("Устанивите в указанных строках в операторе InitGraph правильный путь");
    TextBackGround(black);
                     end else if ErrorCode<>grOk then writeln("Ошибка ",ErrorCode," ");
 while not KeyPressed do begin
   SetColor(black);
   OutTextXY(x,y,"Made by Babicheva Liliya");
   if (x<10) or (x>getmaxX-400) or (y<30) or (y>GetMaxY-30) then begin
      k1:=random(4);
      k2:=random(4);
      x:=getmaxX div 2-200;
      y:=GetMaxY div 2;
      SetTextStyle(0,0,1);
      SetColor(LightRed);
      OutTextXY(160,2,"Решение интеграла методом Симпсона.");
      OutTextXY(80,20,"УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ");
      OutTextXY(480,440,"Группа M-109");
      SetTextStyle(0,0,3);
      SetColor(lightgreen);
      OutTextXY(210,220,"курсовая ");
      OutTextXY(210,270," работа");
      OutTextXY(280,460,"Уфа-2000");
      SetTextStyle(random(5),0,2);
                                                                end;
   x:=x+random(5)-k1;
   y:=y+random(5)-k2;    ;
   while getcolor=black
       do SetColor(random(GetMaxColor));
   OutTextXY(x,y,"Made by Babicheva Liliya");
   delay(500);
                         end;
 CloseGraph;
End;
Function F2(x1,x2,x3,x:extended):extended;
var                          {Вычисляет значение ф-и параболы в точке x}
 d,da,db,dc  :extended;     {Сама ф-я задается 3-мя точками}
 a:array[1..3] of extended; {Вычисление коэфф-в ур-ния параболы производится}
                            {по правилу Крамера, d,da,db,dc - детерминанты}
Begin
 a[1]:=f(x1);
 a[2]:=f(x2);
 a[3]:=f(x3);
 d:=x1*x1*x2+x3*x3*x1+x2*x2*x3-x3*x3*x2-x1*x2*x2-x3*x1*x1;
da:=a[1]*x2+a[3]*x1+a[2]*x3-a[3]*x2-x1*a[2]-x3*a[1];
db:=x1*x1*a[2]+x3*x3*a[1]+x2*x2*a[3]-x3*x3*a[2]-x2*x2*a[1]-a[3]*x1*x1;
dc:=x1*x1*x2*a[3]+x2*x2*x3*a[1]+x1*x3*x3*a[2]-x3*x3*x2*a[1]-x2*x2*x1*a[3]-x1*x1*x3*a[2];
gotoxy(1,20);
F2:=(da/d)*x*x+(db/d)*x+(dc/d);
End;
Procedure MainProc;
VAR
GraphDriver,GraphMode,ErrorCode:integer;
vr1,vr2:string;
c,n,i,j,vr:word;{n-текущее число шагов}
h         {Текущий шаг}
,s,x,It,Ip:extended;
ch:char;
Label
l1;
Begin
 {Вычисление}
 n:=2;
 Ip:=-1;
 h:=(b-a)/n;
l1:
 s:=f(a)+f(b);
 c:=1;
 For i:=1 to N-1 do begin
   x:=a+i*h;
   s:=s+(c+3)*f(x);
   c:=-c;
                    end;
 It:=s*h/3;
 if abs(It-Ip)>t  then begin
   Ip:=It;
   n:=n*2;
   h:=h/2;
   goto l1;
                      end;
 {Графическая отображание}
 GraphDriver:=Detect;
 InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi");
 ErrorCode:=GraphResult;{Если вы в среде TP то впишите путь к драйверам}
 GraphProc;             {напр.InitGraph(GraphDriver,GraphMode,"C:\TP70\bgi")}
 if ErrorCode<>grOk then write("Ошибка ",ErrorCode," ");
    {Вывод полос приближенного вычисления}
 SetColor(green);
 For i:=1 to n do
   Line (OLeft+round(i*(500/n)),40,OLeft+round(i*(500/n)),440);
    {График парабол}
 SetColor(cyan);
 MoveTo(OLeft,round(440-(f(a)-min)*stepv));
  For i:=1 to 500 do begin
       vr:=(i div round(h*steph)); {vr содержит число пройденных полос}
     if (vr mod 2=1) then dec(vr);
     lineTo(i+OLeft,round(440-stepv*(-min+F2(a+(vr)*h,a+(vr+1)*h,a+(vr+2)*h,a+(i)/steph))));
                      end;
    {График функции}
     MoveTo(OLeft,round(440-(f(a)-min)*stepv));
   SetColor(lightred);
 For i:=Oleft to 500+Oleft do
    lineto(i,round(440-stepv*(f(a+(i-Oleft)/steph)-min)));
       str(It:10:10,vr1);
 str(t:10:10,vr2);
 SetTextStyle(0,0,1);
 OutTextXY(0,30,"Ответ "+vr1+" Точность="+vr2);
 ch:=ReadKey;
 ch:=ReadKey;
 ch:=ReadKey;
 if ch=#00 then begin
   ch:=ReadKey;
   ch:=ReadKey;
                end;
 CloseGraph;
End;
BEGIN
 if a>=b then begin
    write("Неверный промежуток интегрирования");
    exit;
               end;
 InitProc;
 RANDOMIZE;
 Zastavka;
 TextMode(0);
 Mainproc;
END.


 
Romkin ©   (2004-02-29 17:18) [4]

Полно библиотек, возьми, например, метод трапеций. Он оченно неплохо подойдет.


 
TUser ©   (2004-02-29 17:21) [5]

Такие простые интегралы лучше сначала на бумажке посчитать, а потом оформить в виде формулы в проге. Покороче будет.

PS. Вроде вопрос, не как это численно происнтегрировать на делфи, а как его посчитать - скорее всего задание для студента/абитуриента.


 
Mox Fulder ©   (2004-02-29 17:50) [6]

Так точно...
Со вторым справился сам... Но первый вызывает сомнения... Вышло (sin^5(x))/5,
Но не верится мне...


 
Mox Fulder ©   (2004-02-29 17:52) [7]

Ой, то есть
(cos^4(x)*sin^5(x))/5


 
Agent13 ©   (2004-02-29 18:46) [8]


> Mox Fulder ©   (29.02.04 17:52) [7]

Не, неправда. Помнится, решали мы такие на первом курсе - решение чуть не на страницу. Там надо один косинус загонять под dx, а потом понижать степень с помощью функций преобразования двойных/половинных углов. В общем что-то вроде этого.


 
Marser ©   (2004-03-01 01:06) [9]


> Romkin ©   (29.02.04 17:18) [4]
> Полно библиотек, возьми, например, метод трапеций. Он оченно
> неплохо подойдет.

Метод Симпсона точнее.


 
SergP ©   (2004-03-01 02:01) [10]

>Но первый вызывает сомнения.

Что значит "сомнения"?
Думаю что производную найти от полученого результата и сравнить с исходными данными не должно составить особого труда. И будут не сомнения, а уверенность: либо правильно, либо неправильно.


 
TUser ©   (2004-03-01 08:44) [11]

Первый косинус - под dx. По частям если преобразовать, то получится синус дэ косинус куб. dcos3 - это sin3. Т.е. 3 синус квадрат де икс. Итого у тебя всухом остатке синус куб де икс. Потом его таким же макаром придется перевести в косинус квадрат, а потом получишь тривиальный интеграл - синус де икс. Главное - аккуратно все сделать и с коэфф./знаками не облажаться. Вот такие воспоминания с 1го курса.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
8-1069692319
g-l-u-k
2003-11-24 19:45
2004.03.28
Bass.dll и M3U


3-1077137009
Денисыч
2004-02-18 23:43
2004.03.28
Как получить текущее значение в DBGrid


14-1077873616
Тимохов
2004-02-27 12:20
2004.03.28
Может кто видел людей у метро, предлагающих, пожилым


1-1079016555
1
2004-03-11 17:49
2004.03.28
Замена курсора


7-1073569477
Яша
2004-01-08 16:44
2004.03.28
чтение файла по секторам