IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите пожалуйста решить задачу аппроксимации
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Здравствуйте!
Помогите решить задачку.
Что то мой уже не молодой мозг, знакомый и с пасклем и с делфи и с численным моделированием, и с численными решениями дает сбои.
Чувствую что вопрос какой то у меня слишком примитивный.
Вообщем подскажите как сделать элементарную аппрокисацию. Линейную я так понимаю.
Вот есть массив а(1...8) численных значений (не целых, тип реал). Например 20, 100, 150.....
Ему соответствует массив b(1...8) численных значений (не целых, тип реал). 100, 200, 300.....
И допустим, мы вводим значение ai=40, и нужно методом аппрокимации определить, какое значение из массива b ему соответствует.
Т.е., в уме рассчитаем:
a3=(a1+a2)/2=(20+100)/2=60 ему соответсвует: b3=( b1+b2)/2 = 100+200 / 2 = 150
a4=(a1+a3)/2=(20+60)/2=40 ему соответсвует: b4=(b1+b3)/2 = 100+150 / 2 = 125.

Результат: ai=40 соответствует b4=125

Подскажите как запрограммировать, ну или хоть какой это численный метод....
Спасибо...

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Offtop. При вставке кода программы пользуемся кнопкой CODE и закрываем тег кнопкой #.
Набираем "кусочно-линейная интерполяция" - получаем в частности хабр, вики, Розетта и многое другое.

У меня FreePascal, поэтому, возможны несоответствия в синтаксисе, но алгоитм описан выше

{
Кусочно-линейная интерполяция.
}

program LinearInterpoltion;

const
a: array[1..8] of real = (250, 230, 224, 223, 197, 173, 167, 164);
b: array[1..8] of real = (460, 435, 460, 505, 510, 520, 480, 450);
T: array[1..8] of real = (20, 100, 150, 200, 250, 300, 350, 375);

function LinInterp(x0: real; var x, y: array of real): real;
var
i: integer;
begin
for i := low(x) + 1 to high(x) do
begin
if (x0 <= x[i]) or (i = high(x)) then
begin
LinInterp := y[i - 1] + (y[i] - y[i - 1]) * (x0 - x[i - 1]) / (x[i] - x[i - 1]);
break;
end;
end;
end;

begin
writeln(LinInterp(15, T, a): 6: 1);
writeln(LinInterp(150, T, a): 6: 1);
writeln(LinInterp(140, T, a): 6: 1);
writeln(LinInterp(380, T, a): 6: 1);
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.09.2025 16:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name