警告:更新文本时出错
Warning: Error updating Text
MATLAB 给我如下警告:
Warning: Error updating Text.
Character vector must have valid interpreter syntax:
$\Theta(s) = 9.24\cdot 10^{04 }\cdot \frac{s + 0}{s^{4} + 140s^{3} + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$
我不确定为什么它是无效语法。我正在使用以下代码:
numericTF = struct;
symbolTF = struct;
if strcmp(vars.response_type,'Position')
typeString = 'Theta(s)';
else
typeString = 'Omega(s)';
end
tf4thOnum = [1 I/P];
tf4thOden = [1 (b*L+R*J)/J/L (R*b+ Kb*Km)/J/L 2*Km*P/J/L I*2*Km/J/L];
tf4thOgain = 2*Km*P/J/L;
tf4thOstr = sprintf('$\%s = %4.3g \cdot \frac{s + %4.3g}{s^{4} + %4.3gs^{3} + %4.3gs^{2} + %4.3gs + %4.3g}$', typeString, tf4thOgain,tf4thOnum(2:end),tf4thOden(2:end));
tf4thOsym = '\frac{k_ak_mk_p}{JL}\cdot\frac{s+\frac{k_i}{k_p}}{s^4+\frac{bL+RJ}{JL}s^3+\frac{bR+k_bk_m}{JL}s^2+\frac{k_ak_mk_p}{JL}s+\frac{k_ik_mk_ap}{JL}}$';
另外一个添加科学计数法的函数:
function instring = cleanExps(instring)
exps = findstr(instring,'e+');
maxn = length(exps);
if ~isempty(exps)
for ii = 1:maxn
if isempty(exps) break; end
instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{' instring(exps(1)+2:exps(1)+4) '}']);
exps = findstr(instring,'e+');
end
end
exps = findstr(instring,'e-');
maxn = length(exps);
if ~isempty(exps)
for ii = 1:maxn
if isempty(exps) break; end
instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{-' instring(exps(1)+2:exps(1)+4) '}']);
exps = findstr(instring,'e-');
end
end
根据警告消息,我假设您正在尝试将 text object 的字符串设置为以下内容(为清楚起见,我将其分成多行):
str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
' + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'];
这里至少有两件事中的一件出错了...
首先,您需要确保将文本对象的 'Interpreter'
property 设置为 'latex'
而不是默认的 'tex'
,因为您使用的是 LaTeX 标记。
其次,您的术语语法中有两个错误,请在此处注明:
'... + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'
^ ^
那两个大括号应该在 s
的另一边。第一个导致语法错误,因为 10^{...}^{...}
没有意义。第二个只是错误地将 s
放入指数中。
这两个错误似乎是您的 cleanExps
函数中的错误造成的。该函数中出现的每个 +4
都应该是 +3
以防止它在指数后包含太多字符。如果您有兴趣,一个更强大且可能更快的函数替代方法是调用 regexprep
:
instring = regexprep(instring, 'e([+|-]+)(\d+)', '\cdot 10^{${setdiff(,''+'')}}');
修复错误并确保您使用的是 latex
解释器设置后,一切都应该可以正常工作。例如:
str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
' + 2.35\cdot 10^{03}s^{2} + 9.24\cdot 10^{04}s + 0}$'];
hText = text(0.1, 0.5, str, 'Interpreter', 'latex', 'FontSize', 14);
MATLAB 给我如下警告:
Warning: Error updating Text.
Character vector must have valid interpreter syntax:
$\Theta(s) = 9.24\cdot 10^{04 }\cdot \frac{s + 0}{s^{4} + 140s^{3} + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$
我不确定为什么它是无效语法。我正在使用以下代码:
numericTF = struct;
symbolTF = struct;
if strcmp(vars.response_type,'Position')
typeString = 'Theta(s)';
else
typeString = 'Omega(s)';
end
tf4thOnum = [1 I/P];
tf4thOden = [1 (b*L+R*J)/J/L (R*b+ Kb*Km)/J/L 2*Km*P/J/L I*2*Km/J/L];
tf4thOgain = 2*Km*P/J/L;
tf4thOstr = sprintf('$\%s = %4.3g \cdot \frac{s + %4.3g}{s^{4} + %4.3gs^{3} + %4.3gs^{2} + %4.3gs + %4.3g}$', typeString, tf4thOgain,tf4thOnum(2:end),tf4thOden(2:end));
tf4thOsym = '\frac{k_ak_mk_p}{JL}\cdot\frac{s+\frac{k_i}{k_p}}{s^4+\frac{bL+RJ}{JL}s^3+\frac{bR+k_bk_m}{JL}s^2+\frac{k_ak_mk_p}{JL}s+\frac{k_ik_mk_ap}{JL}}$';
另外一个添加科学计数法的函数:
function instring = cleanExps(instring)
exps = findstr(instring,'e+');
maxn = length(exps);
if ~isempty(exps)
for ii = 1:maxn
if isempty(exps) break; end
instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{' instring(exps(1)+2:exps(1)+4) '}']);
exps = findstr(instring,'e+');
end
end
exps = findstr(instring,'e-');
maxn = length(exps);
if ~isempty(exps)
for ii = 1:maxn
if isempty(exps) break; end
instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{-' instring(exps(1)+2:exps(1)+4) '}']);
exps = findstr(instring,'e-');
end
end
根据警告消息,我假设您正在尝试将 text object 的字符串设置为以下内容(为清楚起见,我将其分成多行):
str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
' + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'];
这里至少有两件事中的一件出错了...
首先,您需要确保将文本对象的 'Interpreter'
property 设置为 'latex'
而不是默认的 'tex'
,因为您使用的是 LaTeX 标记。
其次,您的术语语法中有两个错误,请在此处注明:
'... + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'
^ ^
那两个大括号应该在 s
的另一边。第一个导致语法错误,因为 10^{...}^{...}
没有意义。第二个只是错误地将 s
放入指数中。
这两个错误似乎是您的 cleanExps
函数中的错误造成的。该函数中出现的每个 +4
都应该是 +3
以防止它在指数后包含太多字符。如果您有兴趣,一个更强大且可能更快的函数替代方法是调用 regexprep
:
instring = regexprep(instring, 'e([+|-]+)(\d+)', '\cdot 10^{${setdiff(,''+'')}}');
修复错误并确保您使用的是 latex
解释器设置后,一切都应该可以正常工作。例如:
str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
' + 2.35\cdot 10^{03}s^{2} + 9.24\cdot 10^{04}s + 0}$'];
hText = text(0.1, 0.5, str, 'Interpreter', 'latex', 'FontSize', 14);