2017-09-20 32 views
1

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 

回答

1

我从您正尝试将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($1,''+'')}$2}'); 

修复bug,并确保您使用的是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); 

enter image description here

+0

这是非常有用的!但是,我认为tf4thOstr格式正确?问题可能是字符串和数字之间的转换? –

+0

我添加了显示方程的科学记数法的代码。这可能是问题所在。 –

+0

@DavidLing:是的,你的'cleanExps'函数有一个错误。修复了更新后的答案。 – gnovice