Ваш пример
eq1=0.2*cos(2pi*t*3+phase1)+vertical offset1
eq2=0.7*cos(2pi*t*9+phase2)+vertical offset2
eq3=0.8*cos(2pi*t*5+phase3)+vertical offset3
eq_total=eq1+eq2+eq3
, где максимальная амплитуда должна быть меньше 0,8, имеет бесконечно много решений.Если у вас нет какой-либо дополнительной цели, которую вы хотели бы достичь, я предлагаю вам изменить проблему так, чтобы вы нашли комбинацию фазовых углов с максимальной амплитудой, равной точно 0,8 (или 0,79, чтобы выгарантированно будет ниже).
Кроме того, только два из трех фазовых углов являются независимыми;если вы увеличите все, скажем, на pi/3
, решение все еще остается в силе.Таким образом, у вас есть только два неизвестных в eq_total
.
. Вы можете решить задачу нелинейной оптимизации, например, FMINSEARCH .Вы формулируете проблему так, что max(abs(eq_total(phase1,phase2)))
должно быть равно 0,79.
Таким образом:
%# define the vector t, verticalOffset here
%# objectiveFunction is (eq_total-0.79)^2, so the phase shifts 1 and 2 that
%# satisfy this (approximately) should guarantee that signal never exceeds 0.8
objectiveFunction = @(phase)(max(abs(0.2*cos(2*pi*t+phase(1))+0.7*cos(2*pi*t*9+phase(2))+0.8*cos(2*pi*t*5)+verticalOffset)) - 0.79)^2;
%# search for optimal phase shift, starting at no shift
solution = fminsearch(objectiveFunction,[0;0]);
EDIT
К сожалению, когда я пытаюсьэтот код и график результатов максимальная амплитуда не 0,79 это больше 1. Я делаю что-то не так?см. код ниже t = linspace (0,1,8000);verticalOffset = 0;targetFunction = @ (phase) (max (abs (0.2 * cos (2 * pi * t + phase (1)) + 0.7 * cos (2 * pi * t * 9 + phase (2)) + 0.8 * cos (2* p i * t * 5) + verticalOffset)) - 0,79) ^ 2;s1 = fminsearch (targetFunction, [0; 0]) eqt = 0,2 * cos (2 * pi * t + s1 (1)) + 0,7 * cos (2 * pi * t * 9 + s1 (2)) + 0,8 *сов (2 * пи * T * 5) + verticalOffs и др;plot (eqt)
fminsearch
найдет минимум целевой функции.Нужно ли проверять, удовлетворяет ли это решение всем вашим условиям.В этом случае решение, заданное fminsearch
с начальным значением [0;0]
, дает максимум ~ 1,3, что явно недостаточно.Однако, когда вы построите максимум для диапазона фазовых углов от 0 до 2pi, вы увидите, что `fminsearch не застрял в плохом локальном минимуме.Скорее, хорошего решения нет вообще (максимальная ось Z).
![enter image description here](https://i.stack.imgur.com/rrPM2.png)