Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 01:26   #1
mishka-medved
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию Delphi. Считаем вторую производную+график.

Проблема вот в чем. Задали мне, на мой взгляд, умопомрачительную курсовую на этот семестр. Нужно найти вторую производную от очень сложной функции+нарисовать график этой функции НЕ теми возможностями, которые предусмотрены в делфи. Сначала я делал всё по муторному, но препод сказал чтобы я эту функцию оформил в отдельном модуле в виде функции, а не считал сначала y потом y2 и потом y3. На данный момент это меня завело в ступор. КАК это сделать(оформить в виде функции)? Вот дана функция
y:=power(x,1/3)*(6*sin(12*x)+12*cos(6*x));
Вторую производную выводим по формуле
z:=(y2-2*y+y3)/(dx*dx)

где
dx-приращение функции
y2, y3 это Y от приращения x+dx и x-dx

Изначально я успешно считал это всё вот так:

PHP код:
x:= strtofloat (edit1.Text);
dx:=strtofloat (edit2.Text);
y:=power(x,1/3)*(6*sin(12*x)+12*cos(6*x));
x2:=x+dx;
y2:=power(x2,1/3)*(6*sin(12*x2)+12*cos(6*x2));
x3:=x-dx;
y3:=power(x3,1/3)*(6*sin(12*x3)+12*cos(6*x3));
z:=(y2-2*y+y3)/(dx*dx);
label4.Caption:=floattostr(z); 
Но что и как делать теперь?
mishka-medved вне форума Ответить с цитированием
Старый 15.05.2012, 08:02   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Оформите Вашу функцию (математическую) отдельной функцией (программной) и при вычислении производных обращайтесь к ней столько раз, сколько необходимо.
s-andriano вне форума Ответить с цитированием
Старый 16.05.2012, 01:51   #3
mishka-medved
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию

Это понятно, но сколько бы я ни читал информацию насчет этого, не могу сообразить как это делать.
mishka-medved вне форума Ответить с цитированием
Старый 16.05.2012, 07:59   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Примерно так:
описываем функцию:
Код:
function MyFunc(x : extended) : extended;
begin
  MyFunc := power(x,1/3)*(6*sin(12*x)+12*cos(6*x));
end;
а потом пользуемся ею:
Код:
x:= strtofloat (edit1.Text);
dx:=strtofloat (edit2.Text);
y := MyFunc(x);
y2 := MyFunc(x+dx);
y3 := MyFunc(x-dx);
s-andriano вне форума Ответить с цитированием
Старый 16.05.2012, 11:11   #5
mishka-medved
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию

Спасибо, сейчас попробую
mishka-medved вне форума Ответить с цитированием
Старый 16.05.2012, 13:22   #6
mishka-medved
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию

Запихнул в отдельный модуль эту функцию
Код:
unit Unit2;

{$mode objfpc}{$H+}

interface
function proizv(x:real):real;

implementation
uses
  Classes, SysUtils, Math, Unit1;

 function proizv(x:real):real;
 begin
y:=x*ln(x);
 end;

end.
Считаю вторую производную в программе для простейшей функции. Выводит полнейшую ахинею. Вторая производная логарифма это 1/x. А он мне сумасшедшие числа начинает выводить. Вот код основной программы

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
x:=strtofloat (edit1.Text);
dx:=strtofloat (edit2.Text);
y:=proizv(x);
y2:=proizv(x+dx);
y3:=proizv(x-dx);
z:=(y2-2*y+y3)/(dx*dx);
label1.Caption:=floattostr(z);
end;
Что опять не так сделал?
mishka-medved вне форума Ответить с цитированием
Старый 16.05.2012, 21:08   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ваша функция proizv вместо результата возвращает мусор.
В коде должно быть:
Код:
proizv := ...
s-andriano вне форума Ответить с цитированием
Старый 20.05.2012, 21:34   #8
mishka-medved
 
Регистрация: 15.05.2012
Сообщений: 5
По умолчанию

Вместо чего? Я извиняюсь, мне пока не показать как это должно быть на деле я не пойму.

Добавил: Кажется получается. Сейчас попробую для курсовой править...

Последний раз редактировалось mishka-medved; 20.05.2012 в 21:41.
mishka-medved вне форума Ответить с цитированием
Старый 20.05.2012, 21:52   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Возьмите любой учебник по программированию и прочитайте, что такое функция.
Любое общение подразумевает некоторый минимальный уровень познаний. Иначе мы так и будем разговаривать на разных языках.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поместить вторую форму в Delphi Kreadlling Общие вопросы Delphi 5 06.04.2012 17:26
как можно вычислить производную в степени n+1? -=Andriushka=- Общие вопросы C/C++ 6 09.11.2011 06:49
Пожалуйста, помогите решить производную Emi Свободное общение 6 27.06.2009 00:24