Форум: "Потрепаться";
Текущий архив: 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.5 MB
Время: 0.031 c