Консультация № 197357
09.12.2019, 06:02
0.00 руб.
09.12.2019, 11:59
1 1 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Проблема в том, что необходимо для каждой точки из массива x_lininterpolar[i] найти две точки из первой таблицы, между которыми она попадает, и осуществлять интерполяцию по найденным точкам первой таблицы. Не могу реализовать.
Задание:
1) Рассчитать h – шаг таблицы функции f(x), по которой с помощью линейной интерполяции можно было бы найти промежуточные значения функции с точностью 0.0001, если табличные значения функции округлены до 4-х знаков после точки.
Написать программу, которая
a) выводит таблицу значений функции с рассчитанным шагом h на интервале [c, c+15h] (таблица должна содержать 2 столбца: значения аргумента и соответствующее ему округленное до 0.0001 значение функции);
б) по сформированной таблице с помощью линейной интерполяции вычисляет приближенные значения функции в точках xi=c+0.6h*i, i=1,2,....,14 ;
в)выводит таблицу точных и приближенных значений функции (таблица должна содержать 3 столбца: значения xi из пункта б) и соответствующие им приближенные и точные значения функции).
В качестве функции взятьf(x) =(c^3 cos?((x+10c)/c)),c = 7
Решение:
Шаг h= 0.004
Код программы на pascal:
[code lang=pascal]var
funresults: array [1..15] of real;
x_lininterpolar, y_lininterpolar: array [1..15] of real;
c: integer := 7;
h: real := 0.004;
deltay, y_accuracy: array [1..14] of real;

function f(x: real): real;
begin
Result := (c * c * c * cos((x + 10 * c) / c));
end;

begin
writeln('Таблица значений функции с вычисленным шагом h');
for i: integer := 1 to 15 do
begin
funresults[i] := f(i * h);
funresults[i] := Round(funresults[i] * 10000) / 10000;
WritelnFormat('x = {0} y = {1}', i * h, funresults[i]);
end;
writeln('Значения линейной интерполяции:');
for i: integer := 1 to 15 do
begin
x_lininterpolar[i] := c + 0.6 * h * i;
x_lininterpolar[i] := Round(x_lininterpolar[i] * 10000) / 10000;
end;
for i: integer := 1 to 14 do
begin
deltay[i] := f(x_lininterpolar[i + 1]) - f(x_lininterpolar[i]);
end;
for i: integer := 1 to 14 do
begin
y_lininterpolar[i] := f(x_lininterpolar[i]) + deltay[i];
y_lininterpolar[i] := Round(y_lininterpolar[i] * 10000) / 10000;
y_accuracy[i] := f(x_lininterpolar[i]);
y_accuracy[i] := Round(y_accuracy[i] * 10000) / 10000;
end;
for i: integer := 1 to 13 do
begin
WritelnFormat('x = {0} y(приб) = {1} y(точн) = {2}', x_lininterpolar[i], y_lininterpolar[i], y_accuracy[i + 1]);
end;
readln();
end.[/code]
Прикрепленные файлы:
604548d677b2d302215d98492d24d748b5bdfbd9.png

Обсуждение

давно
Посетитель
403237
19
09.12.2019, 06:05
общий
Извините, файл не тот прикрепил, ошибся во вложение.
Прикрепленные файлы:
767207eccdb86e75b8811c89de08d430.png
Форма ответа