Я пытаюсь исправить часть графика фазы в BodePlot, так как он не переносится правильно. И нет варианта, который я мог бы использовать для
Итак, вместо того, чтобы самому делать полный график (я могу это сделать, если потребуется), я думаю сначала создать BodePlot, захватить точки данных, выполнить перенос данных (один раз Я получаю данные x, y, остальное легко), затем мне нужно вернуть новый список точек в график, а затем использовать Show, чтобы отобразить его.
Часть, в которой я застрял, извлекает точек из FullForm. Я не могу найти правильный шаблон, чтобы сделать это.
Это то, к чему я до сих пор дошел:
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2];
phasePlot=BodePlot[tf,{0.001,2 Pi},
ScalingFunctions->{Automatic,{"Linear","Degree"}},PlotLayout->"List"][[2]]
Вы видите, как это не разворачивается на 180 градусов. Это чаще встречается в dsp, чем в Bode обертывания фазового графика. Вот как он «должен» выглядеть:
Итак, вот что я сделал:
FullForm[phasePlot]
Graphics[List[
List[List[], List[],
List[Hue[0.67, 0.6, 0.6],
Line[List[List[0.0010000243495554542, -0.2673870119911639],
List[0.0013659538057574799, -0.36521403872250247],
List[0.0017318832619595053, -0.46304207336414027],
....
Я вижу там данные (x, y) Но как их вытащить? Я пробовал это:
Cases[FullForm[phasePlot], List[x_, y_] -> {x, y}, Infinity];
Но вышеупомянутое соответствует в дополнение к списку пунктов, другие вещи, которые мне не нужны d. Я пробовал много других вещей, но не смог получить только список точек.
Мне было интересно, знает ли кто-нибудь, как вытащить только точки (x, y) из приведенного выше графика. Есть ли лучший способ сделать это, кроме использования FullForm?
Спасибо
Обновление:
Я просто нашел сообщение здесь , в котором показано, как извлекать данные из графика. Поэтому я использовал его:
points = Cases[Normal@phasePlot, Line[pts_] -> pts, Infinity]