2017-09-20 44 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