![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
neo123 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!
Помогите решить задачку. Что то мой уже не молодой мозг, знакомый и с пасклем и с делфи и с численным моделированием, и с численными решениями дает сбои. Чувствую что вопрос какой то у меня слишком примитивный. Вообщем подскажите как сделать элементарную аппрокисацию. Линейную я так понимаю. Вот есть массив а(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
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Метод - кусочно-линейная аппроксимация.
Алгоритм такой-же как и на словах. 1. Перебор i от 2 до 7 (при диапазоне 1...8) и поиск a[i]<ai 2. Если найден, то запоминаем i и считаем пропорцию диапазона (i-1) - (i) 3. Если не найден, то считаем пропорцию из последнего диапазона (7) - (8) 4. Всё. |
neo123 |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо большое!!!
Только у меня какие то сомнения что это такой метод, поскольку мы имеем не функцию, а набор каких то чисел в диапазоне. Вот данные: 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
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Offtop. При вставке кода программы пользуемся кнопкой CODE и закрываем тег кнопкой #.
Набираем "кусочно-линейная интерполяция" - получаем в частности хабр, вики, Розетта и многое другое. У меня FreePascal, поэтому, возможны несоответствия в синтаксисе, но алгоитм описан выше
|
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 22:57 |