Помощь - Поиск - Пользователи - Календарь
Полная версия: график, корни и экстреммумы функции. проблема
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
зайка
в общем есть огромная функция 10й степени. это ладно я её задала. дальше были задания
1. составить таблицу значений на отрезке [a,b] и шагом h и построить её график. в общем проблема в построении графика этой фунции(понятия не имею как это делается)
2. найти ВСЕ корни используя метод деления отрезка пополам. Находит только один корень,т.к. при условии
y(a)*y©<0 идёт деление только в одну сторону, при том в сторону меньшую(находит этот корень). ВОПРОС: как отправить деление в другую сторону,т.е. цикл в цикле(глючит), т.к. есть 4 корня.
3. найти все относительные (локальные) экстреммумы (в какой точке достигается и чему равняется), используя метод деления отрезка пополам или метод золотого сечения. честно скажу понятия не имею как это делатьsad.gif


ЛЮДИ 1и2 я сделала, осталось про экстреммумы подумать,у кого какие мысли есть киньте пожалуйста
и вопрос как увеличить масштаб у графика? у меня отрезок получается [-0.5;0.5] его даже не видноsad.gif
Client
Цитата
проблема в построении графика
Поищи на форуме, есть такая программа.
Цитата
используя метод деления отрезка пополам
Метод половинного деления есть в FAQ'е(если это то что надо)
зайка
Цитата(Client @ 2.07.2008 19:29) *

Поищи на форуме, есть такая программа.Метод половинного деления есть в FAQ'е(если это то что надо)

метод половинного деления там только для корней а мне надо ещё для экстреммумов

НЕНАШЛАsad.gif
зайка
такой вопрос а как вам показать что я делала? у меня с паскаля не копируетсяsad.gif хотябы чтобы показали в чём ошибка
volvo
Открой PAS-файл тем же Блокнотом, например, и скопируй... Или просто присоедини сюда сам PAS-файл, не копируя (не в форме быстрого ответа, а после нажатия на кнопку "Ответить")
зайка
вот посмотрите что я делала
посмотри пожайлуйста в чём ошибка

PROGRAM abc;
uses crt;
const d1=-2; d2=2;h=0.1;
var
f1,f2,f3,s,s1,y1:longint;
k,n:integer; f,x,a:real;
function y(x:real):real; {zadaem funkciyu}
var y1:real;
procedure fact(n:integer; var f:longint);
var i:integer;
begin
f:=1;
if n=0 then f:=1
else
for i:=1 to n do
f:=f*i;
end;
procedure step(a:real;n:integer;var s:longint);
var i,b:integer;
begin
s:=1; {здесь выдаёт ошибку №202}
for i:=1 to n do
s:=s*b;a:=b;
end;
procedure step1(a,n:integer;var s:longint);
var i:integer;
begin
s:=1;
for i:=1 to n do
begin
if i mod 2=0 then s:=1 else s:=-1;
end; end;
begin {funkcii}
fact(k,f1);
fact((19-k),f2);
fact((20-2*k),f3);
step(a,10-k,s);
step1(-1,k,s1);
y1:=10*s1*f2*s/(f1*f3);
y:=0;
for k:=0 to n do
y:=y(x)+y1;
end;{konec funkcii}
begin {osnovnaya}
x:=d1;
f:=0;
writeln('| x | y |');
writeln('|------- |---------------|');
repeat
a:=4*x*x;
f:=f+y(x);
writeln('|',x:7:3,' | ',f:7:3 ,' |');
x:=x+h;
until x>d2;
writeln('|--------------------------|');
readln;
end.
до этого записывала функцию просто тупым умножением квадратов, всё работала, решила через процедуры степени и факториала и всё выдаёт ошибку. глянь пожалуйста.
и ещё написала прогу для максимумов и минимумов,(ф-я получается симметричной, т.е. дожно быть 4 экстреммума, а выдаёт только 2)

program extrem;
uses crt;
var a,b,x1,x2,y1,y2,x,y,e:real;
n,i:integer;
function f(x:real):real; {zadaem funkciyu}
var y1,y2,y3,y4:real;
begin
{f:=sqr(x)-4*x-5;}
y1:=(((sqr(sqr(sqr(4*sqr(x)))))*sqr(4*sqr(x)))/2)-((sqr(sqr(sqr(4*sqr(x)))))*(4*sqr(x))*10)+((sqr(sqr(sqr(4*sqr(x)))))*85);
y2:=- (((sqr(sqr(4*sqr(x))))*(sqr(4*sqr(x))*(4*sqr(x))))*400)+(((sqr(sqr(4*sqr(x))))*s

qr(4*sqr(x)))*113.75);
y3:=-((sqr(sqr(4*sqr(x))))*(4*sqr(x))*2002)+((sqr(sqr(4*sqr(x))))*2145)-((sqr(4*sqr(x)))*(4*sqr(x))*1320);
y4:=((sqr(4*sqr(x)))*825)-(4*sqr(x))*50+1;
f:=y1+y2+y3+y4;
end;
procedure gold1(a,b:real;var x1,y1:real);
begin
x1:=0.618*a+0.382*b;
y1:=f(x1);
end;
procedure gold2(a,b:real;var x2,y2:real);
begin
x2:=0.618*b+0.382*a;
y2:=f(x2);
end;
{osnovnaya programma}
begin
a:=-2; b:=2; e:=0.01;
gold1(a,b,x1,y1);
gold2(a,b,x2,y2);
n:=0;
while abs(b-a)>e do
begin{minimum}
if y1<y2 then
begin
b:=x2;x2:=x1;
y2:=y1;
gold1(a,b,x1,y1);
n:=n+1;
end
else
begin
a:=x1;x1:=x2;
y1:=y2;
gold2(a,b,x2,y2);
end;
end;{konec minimuma}
x:=(a+B)/2;
{for i:=1 to n do}
writeln('ymin=',f(x):4 :4,' pri x=',x:4 :4);
a:=-2; b:=2; e:=0.01;
gold1(a,b,x1,y1);
gold2(a,b,x2,y2);
n:=0;
while abs(b-a)>e do
begin{maximum}
if y1>y2 then
begin
{ a:=x1;x1:=x2;
y1:=y2;
gold2(a,b,x2,y2);
n:=n+1;}
b:=x2;x2:=x1;
y2:=y1;
gold1(a,b,x1,y1); n:=n+1;
end
else
begin
{b:=x2;x2:=x1;
y2:=y1;
gold1(a,b,x1,y1);}
a:=x1;x1:=x2;
y1:=y2;
gold2(a,b,x2,y2);
end;
end;{konec maximuma}
x:=(a+B)/2;
{for i:=1 to n do }
writeln('ymax=',f(x):4 :4,' pri x=',x:4 :4);
readln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.