Тысяча извинений, что долго не отвечал!
У меня почему-то не отображалось наличие новых ответов в теме((((((
Debugger писал(а):Как я понял - есть неидеальная система, и необходимо узнать, как она бы вела себя в идеале?
Не совсем так. Система (исследуемая) неидеальна и одна и та же в обоих случаях.
Нужно определить, как бы она ответила на другое воздействие (на "A" вместо "C").
Debugger писал(а):В задаче на руках у тебя только "C" и "D" - и "B" никак не найти, просто нет данных для её нахождения.
Если есть возможность добыть информацию про "А" - то уже можно что-либо придумать.
"A" известна - это резкая ступенька с нулевой длительностью спада.
(С "нулевой" - то есть меньшей, чем период отсчетов, которыми заданы массивы кривых.)
Debugger писал(а):можно варьируя длинну хвоста (уменьшая её), посмотреть, куда стремится D при его уменьшении хвоста. Для этого можно разложить D в ряд Тейлора (если там точно экспонента - можно взять просто её показатель), и построить график "коэффицент - время процесса C", где время процесса С - это, например, время от конца ступеньки до падения до 5% от ступеньки. Посмотреть, чему будут равны коэффициенты при "времени процесса С" равным нулю - вот мы и вычислили B. Это экспериментальный подход, и если вы там физикой занимаетесь, странно, что вы сами до него не дошли.
Я благодарю всех оказавших мне внимание ответами!
Но я действительно до этого самостоятельно дошел))
И алгоритм получился значительно проще, вот он:
- Код: Выделить всё
B1(0) = D(0) 'Начальная точка - для всех кривых одна.
'сначала находим постоянную экспоненты для следующей точки, беря данные из середины спада
max1 = 0 'определение максимума
For i = 0 To 100
If D(i) > max1 Then max1 = D(i)
Next i
'определение середины спада
For i = 100 To 0 Step -1
If D(i) / max1 > 0.6 Then
i1 = i
i = 0
End If
Next i
'определение постоянной
k = (D(i1 + 1) - C(i1)) / (D(i1) - C(i1))
'А теперь, собственно, восстановление самой кривой
B1(1) = k * B(0) 'следующая точка после начальной
'все остальные точки
For i = 1 To 99
k = (D(i + 1) - C(i)) / (D(i) - C(i))
B1(i + 1) = k * B1(i)
Next i
Здесь B1(x) - массив востановленной кривой. В программе были для примера взяты массивы размером 101 точка (0..100).
k одинакова для любого места кривой. Однако в действительности ошибки измерения существенней на краях диапазона, поэтому сначала я просканировал, какой из отсчетов имеет приблизительно половинную амплитуду, и из этого места получил постоянную.
Имея k, можно уже построить всю "идеальную" экспонету, но, строго говоря, это было бы имитирование кривой, а не ее восстановление.
Поэтому далее, для каждой следующей точки k вычисляется заново. Что это дает? Это дает перенос имеющихся отклонений от математически точной экспоненты из "D" в "B1". (Проверено, искусственным наложением возмущений на "D").
Таким образом, мы имеем действительное восстановление: если реальная реакция системы "D" имеет какие-нибудь нюансы, небольшие изгибы, - всё это отображается и на восстановленной кривой.
Разумеется, если "D" не является точной экспонентой, то и восстановится она не абсолютно точно. Но эта погрешность - уже второго порядка малости.
На этом задачу могу считать решенной. Всем спасибо!
ЗЫ:
Вышел с этой темой на один чисто математический форум. В конце концов договорились до дифференциальных уравнений, но так ничего и не решили.