MATLAB中如何打角标和希腊字母
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中如何打角标和希腊字母相关的知识,希望对你有一定的参考价值。
很多时候都要在matlab画图的时候添加一些公式符号之类的,有一些特殊的字符并不能直接从键盘上输入,比如希腊字母等等。但是有想用,因为这样使图看起来漂亮而且容易理解。也许你突然想到,摄氏度不就是一个小圆圈加一个大写的C么。因为o作为上标的时候它不是一个正真的圆圈,最多是个椭圆,并且它体积太大了。好吧,既然如此,那就用中文输入法打个句号。上去,即'T=25^。C'那是因为在编码中,中文句号占了两个字符的位置,所以圆圈和C的位置拉得太远,根本看不下去。行了,告诉你吧正确的表示方法为:'T=25/circC',这样就好看多了!下面给出Matlab中下标及希腊字母的使用方法,还有更多的使用方法可以参考matlab帮助文档中的Text Properties:下标用 _(下划线)上标用^ (尖号)希腊字母等特殊字符用 /加拼音如α /alphaβ /betaγ /gammaθ /thetaΘ /ThetaГ /Gammaδ /deltaΔ /Deltaξ /xiΞ /Xiη /eltaε /epsilongζ /zetaμ /miuυ /nuτ /tauλ /lamdaΛ /Lamdaπ /piΠ /Piσ /sigmaΣ /Sigmaφ /phiΦ /Phiψ /psiΨ /Psiχ /chiω /ommigaΩ /Ommiga< /leq/geq不等于 /neq<< /ll/gg正负 /pm左箭头 /leftarrow右箭头 /rightarrow上箭头 /uparrow上圆圈(度数) /circ注: 可用把须放在一起的括起来 参考技术A Matlab中下标及希腊字母的使用方法,还有更多的使用方法可以参考matlab帮助文档中的Text Properties:
下标用 _(下划线)
上标用^ (尖号)
希腊字母等特殊字符用 /加拼音如
α /alpha
β /beta
γ /gamma
θ /theta
Θ /Theta
Г /Gamma
δ /delta
Δ /Delta
ξ /xi
Ξ /Xi
η /elta
ε /epsilong
ζ /zeta
μ /miu
υ /nu
τ /tau
λ /lamda
Λ /Lamda
π /pi
Π /Pi
σ /sigma
Σ /Sigma
φ /phi
Φ /Phi
ψ /psi
Ψ /Psi
χ /chi
ω /ommiga
Ω /Ommiga
< /leq
> /geq
不等于 /neq
<< /ll
>> /gg
正负 /pm
左箭头 /leftarrow
右箭头 /rightarrow
上箭头 /uparrow
上圆圈(度数) /circ
例 text(2,3,'/alpha_2^/beta')
注: 可用把须放在一起的括起来。
如何使用 Matlab 按字母顺序对属性值对进行排序
【中文标题】如何使用 Matlab 按字母顺序对属性值对进行排序【英文标题】:How to sort property -value pair in alphabetical order with Matlab 【发布时间】:2013-01-20 21:21:22 【问题描述】:我想向现有文件添加一个属性值对。同时,所有属性都应按字母顺序排列。例如:
[Info] % property 1
value 1
[system] % property 2
value 2
如何添加其他属性,以便所有属性都按字母顺序排序。我能够使用将属性值对添加到文件末尾
fh = fopen(filename,'a')
但我无法按字母顺序对它们进行排序。
到目前为止,我尝试了以下方法,但使用此方法时,它只会打印新的属性-值对。我想在打印新属性后打印剩余属性。
function [] = myfun(filename ,propName,propvalue)
rfh = fopen(filename,'r');
tname = tempname();
wfh = fopen(tname,'w');
line = fgetl(rfh);
while ischar(line)
if (line(1) == '[') && (line(end) == ']')
property = lower(line(2:end-1)) % from ini file
String2 = property;
String1 = propName;
[sat] = sor(String1,String2)% subfunction
if sat == -1
fprintf(wfh,'[%s]\r\n%s\r\n',propName,propvalue);
else
fprintf(wfh,'%s\r\n',line);
end
else
fprintf(wfh,'%s\r\n',line);
end
line = fgetl(rfh);
end
fclose(rfh);
fclose(wfh);
movefile(tname,filename,'f')
function [sat] = sor(String1,String2)
Index = 1;
while Index < length(String1) && Index < length(String2) && String1(Index) == String2(Index)
Index = Index + 1;
end
% Return the appropriate code
if String1(Index) < String2(Index)
sat= -1
elseif String1(Index) > String2(Index)
sat= +1
else % the characters at this position are equal -- the shorter of the two strings should be "less than"
if length(String1) == length(String2)
sat = 0
elseif length(String1) < length(String2)
sat = -1
else
sat = +1
end
end
【问题讨论】:
【参考方案1】:这是.ini
文件吗?您可能想查看来自 MATLAB File Exchange 的INIConfig,这是一组用于处理排列在一个方便类中的 INI 文件的例程。我没有使用它,但也许它可以满足您的需求。
如果没有,您可以随时:
-
读入文件
逐行循环
当您发现以
[
开头的行后跟一个按字母顺序排列的单词,比您要插入的属性晚,请插入您的属性和值
包括文件的其余部分
重新写回整个文件。
【讨论】:
@Sam,感谢您的快速反应。你能给我一些关于如何定义余数的步骤(4)的提示吗?并确保该文件是“.ini”文件。 将文件读入变量filetext
。创建一个空字符串temptext
。循环遍历filetext
的每一行。如果它不是以[
开头,或者如果它以[
开头,然后在您的新属性之前按字母顺序排列一个单词,请将该行添加到temptext
。如果它以[
开头,然后在您的新属性之后按字母顺序排列一个单词,则将您的新属性添加到temptext
并继续将filetext
的所有剩余行添加到temptext
。最后将temptext
写到一个新文件中。
@Sam,您能否给我一个提示,告诉我在添加新的 prop-value 对后如何继续添加文件的其余部分。我一直在尝试,但到目前为止我确实成功了。你可以看看我上面的试用代码。非常感谢您的帮助。
对不起@bstar,我最近没机会看这个。与此同时,Shai 似乎提供了一个非常完整的解决方案。
@山姆。非常感谢您的反应。确实,来自 shai 的代码很棒。谢谢你们!!【参考方案2】:
将文件读入struct
怎么样?
function fileData = readFileIntoStruct( fileName )
%
% read [property] value pairs file into struct
%
fh = fopen( fileName, 'r' ); % read handle
line = fgetl( fh );
while ischar( line )
% property
tkn = regexp( line, '\[([^\]+)]\]', 'once', 'tokens' );
% read next line for value
val = fgetl( fh );
fileDate.(tkn1) = val;
line = fgetl( fh ); % keep reading
end
fclose( fh ); % don't forget to close the file at the end.
现在您将所有数据作为 struct
,属性作为 fieldnames
,值作为 field
值。
现在您可以通过以下方式更新属性:
function fileData = updateProperty( fileData, propName, newVal )
if isfield( fileData, propName )
fileData.(propName) = newVal;
else
warning( 'property %s does not exist - please add it first', propName );
end
你可以添加一个属性:
function fileData = addProperty( fileData, propName, newVal )
if ~isfield( fileData, propName )
fileData.(propName) = newVal;
else
warning ( 'property %s already exists, use update to change its value', propName );
end
您可以使用orderfields
按字母顺序对属性进行排序:
fileData = orderfields( fileData );
您可以简单地将struct
写回文件:
function writeDataToFile( newFileName, fileData )
fopen( newFileName , 'w' ); %write handle
propNames = fieldnames( fileData );
for ii = 1:numel( propNames )
fprintf( fh, '[%s]\r\n%s\r\n', propNamesii, fileData.(propNamesii) );
end
fclose( fh );
假设:
属性名称是合法的 Matlab 字段名称(详见变量命名)。
每个属性的值总是一个字符串。
我没有在这些示例中包含任何错误检查代码(未找到文件、格式错误的字符串等)
我假设输入文件是严格的“[prop] val”对,没有任何额外的 cmets 等。
【讨论】:
@shai,感谢您的详细回答。但是,输入文件是 [prop] 和新行中的值。 @bstar - 确实如此。如果您仔细查看function readFileIntoStruct
val
取自文件中的 next 行 (fgetl
)。而且,写回文件的函数也会把它们放到不同的行中。
@ shai,非常感谢它提供的代码,到目前为止我需要它。最重要的是,我想添加/或拥有结构属性。可以给我一些提示。特别是最终将属性结构写入文件。我的属性将类似于:[properties] newline key= value(这可能是超过 2 个键值对)
@shai,非常感谢。现在每件事都完美无缺。包括财产结构。但是,我试图在其中添加一项功能。目的是指定 property_name 的数据类型。像 [system]%string 一样,当我尝试写入 ini 文件时,我收到一个错误,即无效的文件名。数据类型是它自己的输入。有没有办法写数据类型。谢谢
@bstar - 这是一个新问题。请照原样发布 - 带有指向此的链接。以上是关于MATLAB中如何打角标和希腊字母的主要内容,如果未能解决你的问题,请参考以下文章