Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа считающая производную функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dex
Люди я тут новичёк и поэтому сразу не убивайте.
Мне по  информатики задали составить программку считающую производную функции
по математики я примерно помню как это делается ,а вот чтоб в паскале написать ,мне
слабо.
Может кто знает где готовую достать ,или сам когда-то писал ,буду очень благодарен за любую помощь.
Nemo
Уточни, как будет задаваться функция: табличными значениями или просто, вводится с клавиатуры как строка. В первом случае проблем нет: математики придумали кучу алгоритмов нахождения производной (ее  конкретного числового значения), а во втором случае... не завидую.
   
Dex
Надо будет задавать функцию которой будет считаться производная
Напримен задаётся функция
f(x)=3x(в третей)+2x(в квадрате) ,кстати х в третей пишится x^3?
и получаем в конце программы результат
f'(x)=9x^2+4x
это вродибы не так сложно но но я не знаю как с степенью работать
и табличные значения как вносить?
trminator
Подожди. Задается совсем уж произвольная функция (логарифмы там, деления всякие, сложные функции) или только многочлен? С многочленом все намного проще...
Dex
Логарифмы ,косинусы  тоже должны присутствовать все  табличные значения
(Sin(x))'=cos(x)
(ln(x))'=1/x
(cx)'=c
итд.
Может кто подскажет как это сделать.
zx1024
Разобрать выражение на элементарные ф-ции и подсчитать производную от каждой (по таблице).
В случае сложной ф-ции использовать рекурсию.
Надо просто запрограммировать математические правила подсчёта производной.
trminator
Сначала опять-таки придется построить дерево разбора этого выражения, потом с ним работать по правилам... может, так?
Dex
Не мог бы кто показать на паре примеров как это делается.
например
f(x)=3x^3+4
f(x)=Cos(x)/1+sin(x)
Странно что готовой программы нету .
fms
странно что не подготовились к Вашему вопросу? smile.gif
я думаю что если ты поковыряешься в инете.. то найдешь немало вариантов.. попробуй.
Dex
Я пробывал но ничего толкового не нащёл ,нету табличных значений
Может подскажеш где.
Dex
Люди куда все делись?
oleg309
Спим... ;)
sca
а вы не пробовали искать производную исходя из определения?

f'(x)=lim[dx->0] df(x)/dx
Dex
Может проснётесь ,мне до вторника её надо сделать.
Help.
LinkIn
Может ты что-то путаешь? ???  Ведь тогда эта прога должна не только
уметь считать производную, но и понимать функции, которые задаются в виде строк. Сложновато для обычной лабы!
На странице  http://borodingo.narod.ru/done/ есть пример программы
на паскале, который наз-ся "Получение формулы производной по формуле функции" может поможет? Конкретная ссылка на скачивание: http://borodingo.narod.ru/done/distrib/Postfix.zip
Но, чтобы переписать ее тебе понадобится не одна общая тетрадь! smile.gif
anka
переделай чуть чуть, она больше делает чем надо=)

Код

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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.