Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.03 c
1-1078575731
Yuri Btr
2004-03-06 15:22
2004.03.28
определить нажатие на checkbox в ListView


14-1078085685
Zacho
2004-02-29 23:14
2004.03.28
FIDO-gate


14-1077488476
Германн
2004-02-23 01:21
2004.03.28
Украинское ТВ


1-1078731479
Hunter
2004-03-08 10:37
2004.03.28
Explorer


7-1065522980
npAKTuk
2003-10-07 14:36
2004.03.28
Компьютер и гирлянда?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский