Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
demon15
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 16
#1

Численные методы - Pascal

29.04.2010, 22:32. Просмотров 580. Ответов 0
Метки нет (Все метки)

Пишу работу. По заданию нужно найти точки пересечения графиков многочлена Лагранжа ( L(x) ) и регрессии ( R(x) = a*x +b ).

Точку пересечения ( одну хотяб) нужно найти методом Ньютона и половинного деления. Не получается собственно...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
uses crt,graph;
const
lg=1000;
label
loop,lb1,lb2,lb3;
var
 
fa,fb,fc:real;
 
x,x0,x2,x1,y,e,a,b,z,h,ai,bi,d: real;
 s:string;
 error,code: integer;
i,n: integer;
Mx, My: array [1..lg] of real;
G,M: integer;
 
{процедура выводит ошибки - значения не имеет к теме}
Procedure Errorka;
begin
 if error=0 then
 writeln ('Љ®«ЁзҐбвў® в®зҐЄ ¤®«¦*® Ўлвм Ў®«миҐ *г«п!!!');
 if error=2 then
  writeln('ЌҐЇа*ўЁ«м*л© ўў®¤');
   end;
{ф-я оси X}
 function fx (x:real):integer;
  begin
   fx:=320+ round(x*20)        {20 - Є®нддЁжҐ*в б¦*вЁп }
  end;
{ф-я оси  y}
 function fy (x:reaL):integer;
  begin
   fy:=240-round(x*20);
  end;
{регрессия}
  function R (x:real): real;
   begin
    R:= a*x+b;
   end;
 
{интерполяционный многочлен Лагранжа}
function L( x:real):real;
var
i,j:integer;
p,s: real;
begin
s:=0;
     for i:=1 to n do
     begin
     p:=1;
for j:=1 to n do
 if i<>j then
 p:=p*(x - mx[j])/(mx[i]-mx[j]);
 s:=s+my[i]*p;
 end;
 L:=s;
end;
 
function F(x: real) : real;
begin
 F:= {вот здесь не знаю что.Знаю что в тчк пересеч L(x)=R(x)}
     end;
{численное вычисление производной}
function Calc(x:real):real;
     var
     znach,z,x2,dx,y: real;
     begin
     y:=f(x); z:=y;
     dx:=h;
     x2:=x+dx;
     y:=f(x2);
     znach:=(y-z)/dx;
     calc:=znach;
     end;
 
Procedure DrawningOs;
begin
setcolor(4);
line(0,fy(0),640,fy(0));
line(fx(0),fy(-12),fx(0),fy(12));
line(628,235,640,fy(0));
line(628,245,640,fy(0));
line(316,15,fx(0),fy(12));
line(324,15,fx(0),fy(12));
 end;
 
 Procedure Skala;
 begin
 setcolor(14);
 settextstyle(2,0,2);
 setlinestyle(0,0,1);
 for i:=-32 to 32 do
      begin
        line(fx(i),fy(0.1),fx(i),fy(-0.1));
        str(i,s);
        moveto(fx(i),fy(0.5));
        outtext(s);
      end;
for i:=-14 to 14 do
      begin
        line(fx(0.1),fy(i),fx(-0.1),fy(i));
        str(i,s);
        moveto(fx(0.2),fy(i));
        outtext(s);
      end;
 end;
{коэффиценты a b  регрессии}
Procedure Koff;
var
sxy,sx,sy,sqx: real;
begin
sxy:=0;
sx:=0;
sy:=0;
sqx:=0;
     for i:=1 to n do
             begin
sxy:=sxy+mx[i]*my[i];
sx:=sx+mx[i];
sy:=sy+my[i];
sqx:=sqx+ mx[i]*mx[i];
                  end;
a:=(n*sxy- sx*sy)/(n*sqx - sx);
b:=sy/n - a* sx/n;
end;
 
begin
   clrscr;
randomize;
lb1:
writeln('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® 㧫®ўле в®зҐЄ');
readln(s);
   error:=10;
   val (s,n,code);
if code <> 0 then begin
writeln;error:=2; errorka; goto lb1;
end
else
if n>0 then
 begin
   for i:=1 to n do
   begin
mx[i]:= (-2)*sin(2*i + i*i)/4+(-3)*(i-5);
my[i]:=(-2)*cos(2*i-5)+(-3)*sin(2*i-5)+i-5;
writeln('x[',i,']=',mx[i]);
writeln('y[',i,']=',my[i]);
writeln;{readln;}
end;
end
else error:=0 ;
writeln; errorka;
writeln;
  if error=0 then goto lb1;
          koff;
{=================Пока закоменченая Реализация 2х методов (вроде верная)==========}
{          x2:=0;
 ai:= fx(7);
 bi:= fx(10);
 x0:=(bi+ai)/2;
 writeln(x0);
                 h:=0.00001; e:=0.001;
 { writeln('Enter stap:');readln(h);
  writeln('Vvedite tochnost:');readln(e);
}{
 repeat
 x2:= x0 - ( f(x0)/calc(x0));
 x0:=x2;
 until abs(x2-x0) < e;                   }
 
          x:=0;
  ai:= fx(1);
 bi:= fx(2);
  e:=0.001;
 
lb3:  if f(ai) * f(bi) > 0 then begin
  x:=0.5*(ai+bi);
  if f(ai)*f(bi) > 0 then ai:=x else bi:=x;
 
  d:=(bi - ai)/abs(x);
  if d>e then goto lb3 end else  writeln('Not Root'); readln;
 
                             {
     repeat
           fa:=F(ai);
           F(b);
           fb:=fc;If (fa*fb)>0 then writeln('Ваши данные не подходят для данного метода!')
     until(fa*fb)<0;
     n:=0;
     repeat
           x:=(ai+bi)*0.5;
           F (x);
           If (fa*fc)>0 then ai:=x
           else bi:=x;
           d:=abs((bi-ai)/x);
           n:=n+1;
     until d<=e;
     writeln('Ответ: x=',x:9:4,' (1+-',e,'%)');
     writeln('f(x)=',fc:7:4);
     writeln('Количество проведенных вычислений:',n);
                    readln;   }
 
{======================================================}
g:= detect;
initgraph( g,m ,'c:\tp7\bgi');
if graphresult<> grok then
cleardevice;
 DrawningOs;
Skala;
to4ka;
  x:=-16;
   while (x<15) do begin
     x:=x+0.001;
     putpixel(fx(x),fy(R(x)),9);
     putpixel(fx(x),fy(L(x)),5);
end;
 setcolor(6);
 settextstyle(7,0,1);
 outtextxy(565,280,'R (x)');
 setcolor(7);
 settextstyle(7,0,1);
 outtextxy(535,130,' L (x)');
          setcolor(15);
 
circle( fx(?) , fy(?), 3); {ставим точку пересечения}
 
          readln;
closegraph;
END.
Добавлено через 40 минут
Ну если всё так сложно написал, спрошу проще: есть две функции, которые пересекаются. Как правильно составить третью, чтоб использовать её для вычисления координат точки пересечения начальных двух?

Добавлено через 4 часа 18 минут
И в догонку . Точку пересечения када ставим - где х а где у координата в вычислениях???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2010, 22:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Численные методы (Pascal):

Численные методы - Pascal
Ребята..учусь экстерном,заданий трыднец по предметам,не могу не лит-ры нужной найти по уравнениям в паскале...ничего...помогите плиз..как...

Численные методы - Pascal
Делаю курсовую работу, но в паскале я не особо шарю поэтому много вопросов) Вот собственно что нужно сделать в ней: 1)Заданы...

численные методы - Pascal
написать модуль, в котором используется функция метода хорд. а также как подключить ее к головной программе. Заданее спасибо!!!

Численные методы решения нелинейных уравнений - Pascal
В гибридных интегральных схемах в качестве одновитковой индуктивности может применяться тонкая металлическая полоска, нанесенная на...

Численные методы решения систем линейных алгебраических уравнений (СЛАУ) в Pascal - Pascal
Найти решение СЛАУ A*X=B , где A - матрица коэффициентов,B - вектор свободных членов,X - вектор неизвестных, методом прогонки. Заданы...

Модуль, реализующий численные... - Pascal
В данной работе необходимо создать следующие программы и программные единицы: 1.Модуль, реализующий численные методы вычисления...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2010, 22:32
Привет! Вот еще темы с ответами:

Задан файл F, компонентами которого являются численные массивы X [15]. Найти минимальные элементы каждого из массивов и вывести в выходной файл. - Pascal
добрый день. нужен текст программы к задаче в Pascal. Задан файл F, компонентами которого являются численные массивы X . Найти минимальные...

Методы сортировки - Pascal
Сравнить скорости сортировки массивов - небольшого (до 1000 елементов) и большого (10000 елементов) методами простого выбора, &quot;пузырьком&quot; и...

Методы сортировки на Паскале - Pascal
Закиньте, пожалуйста, тексты программ на Паскале сортировок пузырьком, выбором, Bogosort, блочной сортировки, топологической сортировки

Методы сортировки: вычисление адреса - Pascal
Дан массив 700 элементов,нужно отсортировать его вычислением адреса,кто-нибудь может помочь с программой? я вообще не знаю с чего начинать%)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru