Помогите пожалуйста решить задачу аппроксимации |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите пожалуйста решить задачу аппроксимации |
neo123 |
Сообщение
#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 Подскажите как запрограммировать, ну или хоть какой это численный метод.... Спасибо... |
Федосеев Павел |
Сообщение
#2
|
Знаток Группа: Пользователи Сообщений: 481 Пол: Мужской Реальное имя: Федосеев Павел Репутация: 9 |
Метод - кусочно-линейная аппроксимация.
Алгоритм такой-же как и на словах. 1. Перебор i от 2 до 7 (при диапазоне 1...8) и поиск a[i]<ai 2. Если найден, то запоминаем i и считаем пропорцию диапазона (i-1) - (i) 3. Если не найден, то считаем пропорцию из последнего диапазона (7) - (8) 4. Всё. |
neo123 |
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: 0 |
Спасибо большое!!!
Только у меня какие то сомнения что это такой метод, поскольку мы имеем не функцию, а набор каких то чисел в диапазоне. Вот данные: const a: array[1..8] of integer =(250,230,224,223,197,173,167,164); b: array[1..8] of integer = (460,435,460,505,510,520,480,450); T: array[1..8] of integer = (20,100,150,200,250,300,350,375); Например, нужно определить значение a и b для T=140. Я что то голову уже сломал, не получается, вот код: T1:=StrToInt(edit4.text); {T1=140} for i:=2 to 8 do begin if T[i]<T1 then begin Tk:=RoundTo((T[i]+T[i+1])/2, 1); ak:=RoundTo((a[i]+a[i+1])/2, 1); bk:=RoundTo((b[i]+b[i+1])/2, 1); Repeat begin if Tk<T1 then begin Tk:=RoundTo((Tk+T[i+1])/2, 1); ak:=RoundTo((ak+a[i+1])/2, 1); bk:=RoundTo((bk+b[i+1])/2, 1); end; if Tk>T1 then begin Tk:=RoundTo((Tk+T[i])/2, 1); ak:=RoundTo((ak+a[i+1])/2, 1); bk:=RoundTo((bk+b[i+1])/2, 1); end; end; Until Tk=T1; end; end; Подскажите пожалуйста, что не так... |
Федосеев Павел |
Сообщение
#4
|
Знаток Группа: Пользователи Сообщений: 481 Пол: Мужской Реальное имя: Федосеев Павел Репутация: 9 |
Offtop. При вставке кода программы пользуемся кнопкой CODE и закрываем тег кнопкой #.
Набираем "кусочно-линейная интерполяция" - получаем в частности хабр, вики, Розетта и многое другое. У меня FreePascal, поэтому, возможны несоответствия в синтаксисе, но алгоитм описан выше
|
Текстовая версия | 23.12.2024 20:09 |