Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.238.159] |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
{$N+} type fofx = function(x : real) : real; { needed for function-evaluating } function derivative(x, dx : real; f : pointer) : real; var y : fofx; begin @y := f; derivative := (y(x + dx/2) - y(x - dx/2)) / dx; end; { Integrates function from a to b, by approximating function with rectangles of width h. } function integral(a, b, h : real; f : pointer) : real; var x, summation : real; y : fofx; begin @y := f; summation := 0; x := a + h/2; while x < b do begin summation:= summation + h * sqrt( sqr(y(x)) + sqr( derivative(x,h,f) ) ); {Integral Expression} x:=x+h; end; integral := summation; end; function Length(a, b, h : real; f : pointer) : real; begin Length:=integral(a,b,h,f); end; function F(x : real) : real; FAR; begin F:=1.0-sin(x); end; begin writeln('Curve length:',Length(-pi/2,-pi/6, 1e-4, @F):8:5); readln; end. |
Сообщ.
#17
,
|
|
|
Ого . Большое спасибо! Маленькая просьба: объясните алгоритм вычисления.
|
Сообщ.
#18
,
|
|
|
И что значит 1e-4 ?
|
Сообщ.
#19
,
|
|
|
1e-4 = 0.0001
|
Сообщ.
#20
,
|
|
|
function derivative(x, dx : real; f : pointer) : real; - Производная функции
dx - приращение x - dx/2 левая граница прямоугольника x + dx/2 правая граница прям-ка function integral(a, b, h : real; f : pointer) : real; - собственно, вычисляет интегралб равный приближенно сумме всех прям-ков шириной h. h - точность вычисления (ширина). Чем меньше значение, тем больше таких прям-ков и точнее результат. x := a + h/2; начальное значение х summation:= summation + h * sqrt( sqr(y(x)) + sqr( derivative(x,h,f) ) ); - подынтегральное выражение (высота прям-ка), т.е. (p^2 + (p')^2)^1/2 - для вычисления длины кривой. @F - передаём указатель на функцию кривой |
Сообщ.
#21
,
|
|
|
Почему начальное значение x = a + h/2, а не a?
|
Сообщ.
#22
,
|
|
|
Т.к. надо вычислить производную, берем некоторый отступ от левой границы. Тогда в точке С из промежутка [Xi-1,Xi] можно взять производную. Прямоугольник будет окрестностью той точки.
Вроде так. |
Сообщ.
#23
,
|
|
|
Я пишу x := a; - ответ тот же...??
|
Сообщ.
#24
,
|
|
|
M Тема перенесена из Delphi -> Delphi: Общие вопросы. |
Сообщ.
#25
,
|
|
|
function F(x : real) : real; FAR; begin F:=1.0-sin(x); {здесь ты описываешь свою функцию} end; А границы надо задавать в радианах. function Length(a, b, h : real; f : pointer) : real; a - левая граница отрезка b - правая граница отрезка h - точность вычислений ( 1e-3 = 1*10^(-3) ) |
Сообщ.
#26
,
|
|
|
Насколько я знаю, формула для вычисления длины кривой в полярных координатах такова:
Но даже на листике при таких параметрах считать не быстро. |
Сообщ.
#27
,
|
|
|
Как начертить этот график в MathCad?? Графика -> полярный график, а дальше как, где и что задавать не пойму (это попросили меня еще в PaintBox'е нарисовать его).
|
Сообщ.
#28
,
|
|
|
На рисунке:
внизу, х - переменная слева - формула у(х) остальное не знаю, выставляется автоматически. Прикреплённый файлmcad_polar.gif (3.89 Кбайт, скачиваний: 246) |
Сообщ.
#29
,
|
|
|
a=f1*pi/180 - левая граница, угол Фи1
b=f2*pi/180 - правая граница, угол Фи2 h - это и есть твоя точность c=0.0001 Это уже геометрия... Polar -> Cartezian x = r * cos (phi); y = r * sin (phi); Cartezian -> Polar phi = arctan (y / x); {x<>0} r = sqrt ( sqr(x) + sqr(y) ); Я понимаю формулу чуть по другому... function Degree3(x : real) : real; begin Degree3 := x * x * x; end; function f(fi : real) : real; begin f := (3 * a * cos(fi) * sin(fi)) / (Degree3(cos(fi)) + Degree3(sin(fi))) end; Прикреплённый файлcurve_length.gif (5.04 Кбайт, скачиваний: 223) |
Сообщ.
#30
,
|
|
|
Дана последовательность содержащая от 1 до 30 слов в каждом из которых от 1 до 5 строчных латинских букв между соседними словами – запятая, за последним точка.
Напечатать ту же последовательность, но удалив из нее повторные вдождения слов |