Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, уже 2 недели бьюсь с кодом и все никак не выходит: Функция f(x) представлена в виде таблицы значений, т.е. даны значения функции в некоторых точках x1, x2, . . . , xn (причем xi+1>xi), равные соответственно y1, y2, . . . , yn. Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию, т. е. считать, что функция между заданными точками изменяется линейно. Решение представить или в виде таблицы или в виде графика функции (по выбору пользователя). Также нужно сделать контроль ввода, чтобы можно было вводить только циферки

Решение задачи: «Определить значения функции в некоторой промежуточной точке хk, используя линейную интерполяцию»

textual
Листинг программы
var x,y:array of double;
    xk,yk:double;
    n,i,c:integer;
    s:string;
begin
repeat
write('Введите количество точек вычисления функции n>1 n=');
readln(s);
val(s,n,c);
if(c<>0)or(n<2)then write('N должно быть целым числом больше 1');
until(c=0)and(n>1);
setlength(x,n);
setlength(y,n);
writeln('Введите значения х в порядке возрастания ');
writeln('и соответствующие им значения функции');
writeln('Точка 1');
repeat
 write('x=');
 readln(s);
 val(s,x[i],c);
 if c<>0 then writeln('Введите число');
until c=0;
repeat
 write('y=');
 readln(s);
 val(s,y[i],c);
 if c<>0 then writeln('Введите число');
until c=0; 
for i:=1 to n-1 do
 begin
  writeln('Точка ',i+1);
  repeat
   write('x=');
   readln(s);
   val(s,x[i],c);
   if (c<>0)or (x[i]<=x[i-1]) then 
   writeln('Введите число больше ',x[i-1]);
  until (c=0)and (x[i]>x[i-1]); 
  repeat
   write('y=');
   readln(s);
   val(s,y[i],c);
   if c<>0 then 
   writeln('Введите число');
  until c=0; 
 end;
 for i:=1 to n-1 do
 begin
  writeln('Точка ',i+1);
  repeat
   write('x=');
   readln(s);
   val(s,x[i],c);
   if (c<>0)or (x[i]<=x[i-1]) then
   writeln('Введите число больше ',x[i-1]);
  until (c=0)and (x[i]>x[i-1]);
  repeat
   write('y=');
   readln(s);
   val(s,y[i],c);
   if c<>0 then
   writeln('Введите число');
  until c=0;
 end;
repeat
write('Введите значение ',x[0]:0:2,'<xk<',x[n-1]:0:2,'xk=');
readln(s);
val(s,xk,c);
if (c<>0) then  writeln('Введите число из указанного интервала');
until (c=0)and(xk>x[0])and(xk<x[n-1]);
yk:=y[i-1]+(y[i]-y[i-1])/(x[i]-x[i-1])*(xk-x[i-1]);
writeln('yk=',yk:0:2);
i:=0;
while (i<n-1)and(xk>x[i]) do i:=i+1;
n:=n+1;
setlength(x,n);
setlength(y,n);
for c:=n-1 downto i+1 do
 begin
  x[c]:=x[c-1];
  y[c]:=y[c-1];
 end;
x[i]:=xk;
y[i]:=yk;
writeln('Таблица вычислений');
writeln('-------------------');
writeln('| i |  Xi  |  Yi  |');
writeln('-------------------');
for i:=0 to n-1 do
writeln('|',i+1:3,'|',x[i]:6:2,'|',y[i]:6:2,'|');
writeln('-------------------');
end.

Объяснение кода листинга программы

  1. Ввод количества точек для вычисления функции (n).
  2. Ввод значений x и y для каждой точки.
  3. Предложение ввести значение xk в указанном интервале.
  4. Вычисление значения yk с помощью линейной интерполяции.
  5. Обновление таблицы вычислений, добавление нового значения xk и yk.
  6. Вывод таблицы вычислений.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.333 из 5
Похожие ответы