若无特殊说明,所推送问答均来自于MATLAB Answers、Stack Overflow、matlab中文论坛、matlab中国论坛、matlab技术论坛、小木虫、CSDN以及百度贴吧等,不再作专门的参考资料来源声明。
现在就开始5000个matlab问题收集的第二期,本期推送12个问题!
1、在MATLABParallel Computing Toolbox中,我能使用的最大worker数是多少?
在 R2013b 之后的版本(不含)中,MATLAB Parallel Computing Toolbox 对 worker 数量没有限制。在此之前,最大数量是12。需要说明的是,默认情况下,MATLAB 会将 worker 数指定为 CPU 的核心数,您可以在 MATLAB 中执行 parpool,观察返回的结果。如果您对本地集群配置文件进行了设置,则 MATLAB 会按照该设置配置 worker。如果您希望使用多台计算机来执行并行和分布式作业处理,则需要使用MATLAB Distributed Computing Server来利用其他计算机的计算资源。
2、自定义函数求值的有哪些常用方法?
a、函数 m 文件
自定义一个以function开头的m文件函数,例如
function r = add(a,b)
r = a+b;
end
b、用字符变量表达式
把函数表达式定义成字符串表达式,给字符串变量名赋数值后,通过数值转换命令 eval 将字符串表达式转换成数值,从而得出函数值。
创建字符串表达式时注意:
1、表达式两端必须加单引号界定。
2、表达式中的四则运算必须用数组算法符号(即点运算符号),否则就成为矩阵函数.
3、将表达式赋值给一个标识符 f,保存在工作空间,可多次使用。f 的数据类型是字符串。
4、可以先输入字符串表达式,后给字符串变量名(这里的变量名要和 f 中的相同)赋值。
5、可以使用 eval 或 subs,但不能使用 feval。字符串表达式可以是多变量的。当使用用 subs 时,只能用 subs(e) 和 subs(e,n) 这两种形式,而不能用 subs(e,o,n) 这种形式。其中 subs(e,n) 只能处理单变量的字符串表达式。
综上,推荐使用 eval。示例如下:
>> f='x^2+y'; % 多变量的字符串表达式
>> y=1;
>> eval(f) % 只能用 eval
>> ans =
10
c、三、用内联函数命令 inline
定义格式1:fun=inline(字符串表达式)
定义格式2:fun=inline(字符串表达式,'var',...)
1、输入参数“字符串表达式”可以是函数字符串表达式,或是代表它的标识符(按方法一定义的字符串表达式的标识符 f)。
2、函数表达式采用数组算法时,定义的是函数矩阵(矩阵的元素是函数),若采用矩阵算法,则定义的是矩阵函数(自变量是矩阵的函数)。
3、将内联函数保存在工作空间,可多次使用。
4、与 inline 相关的结果命令:
argnames(fun):返回内联函数中的形参变量列表
char(fun):将内联函数转换成字符串
formula(fun):同 char(fun) 作用一样
示例如下:
u=[1 2];v=[2 3];
% 定义格式1
>> f = inline('3*sin(2*x.^2)+y')
f =
Inline function:
f(x,y) = 3*sin(2*x.^2)+y
>> f(u,v)
ans =
4.7279 5.9681
d、匿名函数
定义格式:fhandle =@(arglist) expr 其中,fhandle 是函数句柄,@是用于构造函数句柄的特殊符号,arglist 是形参变量列表,其中的变量顺序是自定义的,expr 是函数主体表达式。arglist 中的变量与 expr 中的一一对应。 调用格式:fhandle(实参列表)
示例如下:
>> sqr = @(x) x.^2
sqr =
@(x)x.^2
>> a = sqr(5)
a =
25
3、MATLAB 为什么报错“数组索引必须为正整数或逻辑值。”?
索引数组时,如果使用不是正整数或逻辑值的索引值时,会发生此报错。以下是导致此报错时的一些建议:
1)仔细检查索引值是否为正整数。MATLAB 中的索引不能为 0,一般情况下从1开始。
2)如果使用逻辑变量索引,请确保索引数组类型为逻辑变量,而不是由1和0组成的double数组。也可以在索引前,将double数组转换为逻辑数组。
3)如果使用浮点算法来计算索引数组, 则数组值可能不是整数精度。如果知道索引值非常接近整数,则可以用 round 函数。
4)当定义了一个与 MATLAB 内建函数重名的变量时,该函数会被覆盖,于是产生同样的报错(调用函数的传参和数组索引都使用相同的括号)。
4、MATLAB 中如何使希腊字符和常规文本在 Tex 标记中具有相同的字体粗细?
提供以下几种使希腊字符和常规文本看起来更相似的方法:
1. 使用 LaTeX interpreter,从而,所有文字都通过 LaTeX 字体显示,参考: https://www.mathworks.cn/help/matlab/creating_plots/greek-letters-and-special-characters-in-graph-text.html#mw_f46705d3-cc38-4f7e-b947-992866f293cc 此时要将“需要解释为公式”的内容,用$$标注。
2. 将 text 函数分两次执行,首先将希腊字符显示为粗体,然后将其他文字显示为非粗体:
>> text( 0.5, 0.5, '\bf\alpha');
>> text( 0.55, 0.5, ' name');
3. 更改常规文本的字体样式,您可以使用“ \fontname{}”来修饰
>> text( 0.55, 0.5, '\fontname{Times New Roman} name');
5、MATLAB 如何绘制半透明的曲线?如何控制透明度?
基本的plot函数不支持半透明,但可使用scatter函数,且可以分开控制标记填充和标记边界的透明度。参考代码如下:
sct = scatter(x,y,'MarkerFaceColor','r','MarkerEdgeColor','k');
% Set property MarkerFaceAlpha and MarkerEdgeAlpha to <1.0
sct.MarkerFaceAlpha = .2;
sct.MarkerEdgeAlpha = .2;
若要使用plot绘制半透明线和透明标记,可参考:
plt = plot(x,y);
plt.Color(4) = 0.2
hold on
sct= scatter(x,y,'MarkerFaceColor','r','MarkerEdgeColor','k');
sct.MarkerFaceAlpha = .2;
hold off
6、如何使用 MATLAB 中的 sprintf 函数打印百分号字符?
当需要转译百分号时,使用两个百分号表示,例如:
sprintf('100%%')
7、matlab中如何在字符串中输出单引号',如Lily's book?
若要在字符串中输出单引号',需要在字符串中同时打出两个连着的单引号'',如以下示例:
>> str = 'Lily''s book'
str =
'Lily's book'
8、如何检查 MATLAB 结构中是否存在某字段?
isfield 函数仅检查结构体最顶层是否有特定字段,而不会检查其他层次。如果需检查所有层次,可使用以下方法:
方法1:对结构体其他层次执行 isfield,例如以下命令,将获得返回值 true。
a.b.c = 1;
isfield(a.b,'c')
注意:如果isfield函数的第一个输入参数不是结构体,则运行结果为0。在 MATLAB 中有其他数据结构,也通过“.”运算获得下一层属性,但他们不一定是结构体。
方法2:自定义一个函数遍历结构体的所有层次。例如函数 myIsField.m,其内容如下:
function isFieldResult = myIsField (inStruct, fieldName)
% inStruct is the name of the structure or an array of structures to search
% fieldName is the name of the field for which the function searches
isFieldResult = 0;
f = fieldnames(inStruct(1));
for i=1:length(f)
if(strcmp(f{i},strtrim(fieldName)))
isFieldResult = 1;
return;
elseif isstruct(inStruct(1).(f{i}))
isFieldResult = myIsField(inStruct(1).(f{i}), fieldName);
if isFieldResult
return;
end
end
end
调用时,将返回 true:
a.b.c = 1;
myIsField(a,'c')
9、MATLAB 中如何更改图例中的字体大小?
通过设置 Legend 对象的 FontSize 属性, 可以更改 MATLAB 图例的字体大小。例如, 绘制4条曲线,创建图例并将图例对象分配给变量 lgd。然后, 使用点运算访问 FontSize 属性,并将值设置为14点。
plot(rand(4))
lgd = legend('One','Two','Three','Four');
lgd.FontSize = 14;
还可使用 legend 函数中的 name-value 配对参数指定 FontSize 属性。例如:
legend({'One','Two','Three','Four'},'FontSize',14)
10、 hist柱状图宽度不一样怎么办?
默认是根据数据分的,你可以设置bin。两组数,bin相同的话,统计之后,用bar画。
hi_bi = linspace(0,22,21);
hi_va_a = hist(a,hi_bi);
hi_va_b = hist(b,hi_bi);
subplot(2,2,1)
bar(hi_bi,hi_va_a);xlim([0,23]);ylim([0 25]);hold on;
subplot(2,2,2)
bar(hi_bi,hi_va_b);xlim([0,23]);ylim([0 25]);hold on;
11、 在程序计算完成后,如何用一行指令或函数关闭 windows 操作系统?
在程序的结尾处添加如下代码:
system('shutdown -s')
温馨提醒:本行代码将必定造成电脑关闭,而没有最终确认界面。请一定确认您已经保存了所有数据。
12、如何使用matlab绘制四维图(4D-plot)?
示例如下:
[x,y,z] = meshgrid(0:.5:10,0:.5:10,0:.5:10);
c = x.^2+y.^2+z.^2;
xs = 0:0.5:10;
ys = xs;
zs = xs;
c(7:15,7:15,13:21)=NaN;
figure('Color','w');
h = slice(x,y,z,c,xs,ys,zs);
set(h,'FaceColor','interp','EdgeColor','none')
camproj perspective
box on
view(-70,70)
colormap hsv
colorbar
效果图
以上就是今天的全部内容,欢迎各位小伙伴将自己平时matlab编程中遇到的问题以及解决方法推荐给小编,或者在推文下方留言,让大家一起学习,共同进步!