В каком-то коде, который я пишу, иногда я получаю тики значения как этогоКак лучше обрабатывать числовое форматирование клеща значения
Clear[z];
hz = z/(z^2 - 0.6 z + 0.18);
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];
p = BodePlot[tf, {0.01, 2 Pi},
Frame -> False, PlotLayout -> "List",
ScalingFunctions -> {{"Linear", "Absolute"}, {"Linear", "Degree"}}][[1]];
Show[p]
и это делает его трудно форматировать участок для учета это дополнительное пространство. Теперь я установил очень большое заполнение изображения, чтобы иметь достаточно места для этого дополнительного значения, и это пустое пространство.
btw Эта проблема влияет только на значения y в моем случае.
Я покажу, что я пытался решить. Но я не доволен ни метод, который я попробовал, и хотел бы спросить, если есть более простой способ решить эту проблему
Это то, что я пытался решить проблему
1) Используйте Ticks->fun
, но это не работает, так как трудно получить тики, отформатированные вправо, так как значения y-графика Bode могут меняться в единицах в зависимости от предоставленных опций: от dB до Absolute до Log10 до Linear и для учета всех этих и получения тики справа не будут работать.
Clear[z];
fun[min_, max_] :=
Module[{},
Join[Table[i, {i, Ceiling[min], Floor[max]}],
Table[j, {j, Round[min], Round[max - 1], 1}]]]
hz = z/(z^2 + 0.5);
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];
p = BodePlot[tf, {0.01, 2 Pi}, Frame -> False, PlotLayout -> "List",
ScalingFunctions -> {{"Linear", "Absolute"}, {"Linear","Degree"}},
Ticks -> fun][[1]];
Show[p]
второе решение:
сделать сюжет первым, возьмите клещи, используйте NumberForm
на них форматировать Y-значение, а затем сделать сюжет с новыми значениями клеща:
Clear[z];
hz = z/(z^2 - 0.6 z + 0.18);
tf = TransferFunctionModel[hz, z, SamplingPeriod -> 1];
p = BodePlot[tf, {0.01, 2 Pi}, Frame -> False, PlotLayout -> "List",
ScalingFunctions -> {{"Linear", "Absolute"}, {"Linear", "Degree"}}][[1]];
ticks = Ticks /. AbsoluteOptions[p, Ticks];
ticks[[2, All, 1 ;; 2]] =
If[NumericQ[#[[2]]], {#[[1]], NumberForm[#[[2]], 3]}, #] & /@
ticks[[2, All, 1 ;; 2]];
BodePlot[tf, {0.01, 2 Pi}, Frame -> False, PlotLayout -> "List",
ScalingFunctions -> {{"Linear", "Absolute"}, {"Linear", "Degree"}},
Ticks -> {ticks, Automatic}][[1]]
Вышеуказанный метод работает, но он медленный, так как мне нужно сделать BodePlot
2 раза, и я нахожу BodePlot
немного медленнее, чем обычные сюжеты, поэтому я бы предпочел не делать этого, если нет другого более простого решение.
Может ли кто-нибудь увидеть более простое решение этой проблемы, может быть, один из них - экспертные трюки?
благодаря
Update 1:
Я использовал FindDivision [] дано в ответ ниже, как это, чтобы получить участок без проблем:
BodePlot[tf, {0.01, 2 Pi}, Frame -> False, PlotLayout -> "List",
Ticks -> {{FindDivisions[{0, 10}, 10], [email protected][{0, 2}, 10]},Automatic},
ScalingFunctions -> {{"Linear", "Absolute"}, {"Linear", "Degree"}}][[1]]
Но это на самом деле не помогает мне в этом случае, поскольку я не знаю, какие дивизии делать перед собой если я не сделаю вычисление значений передаточной функции в диапазоне частот, чтобы найти минимум и максимум, который заканчивается тем, что выполняет все вычисления дважды, чего я пытаюсь избежать.
FindDivisions
будет работать хорошо, если вы знаете перед собой мин/макс диапазона участка.
Обновление 8/13/2001
Я получил ответ от ИМР на этом. Часть ответа:
Close Mathematica. Hold Control and Shift buttons while launching
Mathematica. Keep holding the buttons down till Mathematica is fully up
(the welcome screen shows up.)
Try your plot again. How does this look ?
После устранения проблемы проблема устранена! Сюжет теперь больше не показывает проблему, показанную в верхней части этой публикации.
Я не уверен, что вызвало проблему с файлами настроек, но по крайней мере сейчас, если появится новая проблема, вышеупомянутый трюк будет тем, что я попробую в первую очередь.
Это, кажется, на самом деле быть система или зависит от версии. В моей системе (Mathematica 8) ваш первый сюжет отлично подходит для меня. –
Это полезно знать. Это означает, что мне все равно придется делать это в любом случае, потому что я не уверен, в какой системе будет работать эта демоверсия. Я нахожусь на Windows XP, 64 бит, используя M 8.0.1 – Nasser
Кстати, установка $ MinPrecision = $ MachinePrecision; $ MaxPrecision = $ MachinePrecision; не влияет на эти числовые значения. – Nasser