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

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

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

> Помогите пожалуйста решить задачу аппроксимации
neo123
сообщение 14.08.2014 21:21
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Федосеев Павел
сообщение 21.08.2014 20:44
Сообщение #2


Бывалый
***

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

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


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

 



- Текстовая версия 18.06.2025 23:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"