IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Программа считающая производную функции
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Люди я тут новичёк и поэтому сразу не убивайте.
Мне по  информатики задали составить программку считающую производную функции
по математики я примерно помню как это делается ,а вот чтоб в паскале написать ,мне
слабо.
Может кто знает где готовую достать ,или сам когда-то писал ,буду очень благодарен за любую помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Уточни, как будет задаваться функция: табличными значениями или просто, вводится с клавиатуры как строка. В первом случае проблем нет: математики придумали кучу алгоритмов нахождения производной (ее  конкретного числового значения), а во втором случае... не завидую.
   
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Надо будет задавать функцию которой будет считаться производная
Напримен задаётся функция
f(x)=3x(в третей)+2x(в квадрате) ,кстати х в третей пишится x^3?
и получаем в конце программы результат
f'(x)=9x^2+4x
это вродибы не так сложно но но я не знаю как с степенью работать
и табличные значения как вносить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Подожди. Задается совсем уж произвольная функция (логарифмы там, деления всякие, сложные функции) или только многочлен? С многочленом все намного проще...


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Логарифмы ,косинусы  тоже должны присутствовать все  табличные значения
(Sin(x))'=cos(x)
(ln(x))'=1/x
(cx)'=c
итд.
Может кто подскажет как это сделать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 119
Пол: Мужской

Репутация: -  0  +


Разобрать выражение на элементарные ф-ции и подсчитать производную от каждой (по таблице).
В случае сложной ф-ции использовать рекурсию.
Надо просто запрограммировать математические правила подсчёта производной.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Сначала опять-таки придется построить дерево разбора этого выражения, потом с ним работать по правилам... может, так?


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Не мог бы кто показать на паре примеров как это делается.
например
f(x)=3x^3+4
f(x)=Cos(x)/1+sin(x)
Странно что готовой программы нету .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Женский

Репутация: -  0  +


странно что не подготовились к Вашему вопросу? smile.gif
я думаю что если ты поковыряешься в инете.. то найдешь немало вариантов.. попробуй.


--------------------
непонимающая..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Я пробывал но ничего толкового не нащёл ,нету табличных значений
Может подскажеш где.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Люди куда все делись?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


профи
**

Группа: Пользователи
Сообщений: 109
Пол: Мужской

Репутация: -  1  +


Спим... ;)


--------------------
Тело, находящееся в состоянии покоя, стремится смотреть телевизор.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






а вы не пробовали искать производную исходя из определения?

f'(x)=lim[dx->0] df(x)/dx
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14





Группа: Пользователи
Сообщений: 7

Репутация: -  0  +


Может проснётесь ,мне до вторника её надо сделать.
Help.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Может ты что-то путаешь? ???  Ведь тогда эта прога должна не только
уметь считать производную, но и понимать функции, которые задаются в виде строк. Сложновато для обычной лабы!
На странице  http://borodingo.narod.ru/done/ есть пример программы
на паскале, который наз-ся "Получение формулы производной по формуле функции" может поможет? Конкретная ссылка на скачивание: http://borodingo.narod.ru/done/distrib/Postfix.zip
Но, чтобы переписать ее тебе понадобится не одна общая тетрадь! smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






переделай чуть чуть, она больше делает чем надо=)

Код

program task3(input,output);
var x,xn,xk,dx,h,hv:real;
k:integer;
function f(x:real):real;
begin f:=x*x*x-3*x;end;
function fpr1(x:real):real;
begin fpr1:=3*x*x-3;end;
function fpr2(x:real):real;
begin fpr2:=3*x*x-3; end;
function fprL(x,h:real):real;
begin fprL:=(f(x+h)-f(x))/h; end;
function fprR(x,h:real):real;
begin fprR:=(f(x)-f(x-h)); end;
function y4(x:real):real;
begin y4:=(fprL(x,h)+fprR(x,h))/2; end;
function fpr(x:real):real;
begin if x>=0 then fpr:=fpr1(x) else fpr:=fpr2(x); end;
procedure prmax(y6,y7,x:real;var max,xmax,ymax:real);
begin
   if max<=y6 then begin max:=y6; xmax:=x; ymax:=f(x);end;
   if max<=y7 then begin max:=y7; xmax:=x; ymax:=f(x);end;
end;
procedure main(xn,xk,dx,h:real);
  var
   i:integer;
   y,max,xmax,ymax,y5,y6,y7:real;
 begin
   writeln('pri h= ',h:5:5);
   i:=0;x:=xn;
   max:=abs(fprL(xn,h)-fpr(xn));
   xmax:=xn; ymax:=f(x);
   writeln(' x  y y1=f`L y2=f`R y3=f` y4=(f`L+f`R)/2 |y4-y3| |y1-y3| |y2-y3|');
   while(i<100) and (x<=xk+dx/2) do
   begin
      y5:=abs(y4(x)-fpr(x));
      y6:=abs(fprL(x,h)-fpr(x));
      y7:=abs(fprR(x,h)-fpr(x));
      writeln(' ',x:2:1,' ',f(x):1:2,' ',fprL(x,h):1:2,' ',fprR(x,h):1:2,' ',fpr(x):1:2,y4(x):1:2,y5:1:2,y6:1:2,y7:1:2);
      prmax(y6,y7,x,max,xmax,ymax);
      x:=x+dx;
      i:=i+1;
    end;
   writeln('maksimalnoe otklonenie=',max:5:2,'pri x=',xmax:5:2,'y=',
   ymax:5:2);
    end;
     begin
      write('Vvedite xn,xk,dx,h');
      readln(xn,xk,dx,hv);
      k:=1;
      repeat
       case k of
        1:begin h:=dx/10; k:=k+1; main(xn,xk,dx,h) end;
        2:begin h:=dx/100; k:=k+1; main(xn,xk,dx,h); end;
        3:begin h:=hv; k:=k+1; main(xn,xk,dx,h); end;
     end;
     until k>3;
     readln;
     end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.11.2017 20:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"