前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5000个matlab常见问题锦集的雄关路(002)

5000个matlab常见问题锦集的雄关路(002)

作者头像
巴山学长
发布2019-12-26 18:55:14
2.2K0
发布2019-12-26 18:55:14
举报
文章被收录于专栏:巴山学长巴山学长
为了方便各位小伙伴快速了解matlab编程中常遇问题,公众号特地推出matlab问题锦集系列,力争收集5000个常见matlab编程问题,每期推送10至30个不等的问题及解答方案,希望对大家的matlab学习有帮助。

若无特殊说明,所推送问答均来自于MATLAB AnswersStack Overflowmatlab中文论坛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文件函数,例如

代码语言:javascript
复制
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。示例如下:

代码语言:javascript
复制
>> 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) 作用一样

示例如下:

代码语言:javascript
复制
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(实参列表)

示例如下:

代码语言:javascript
复制
>> 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 函数分两次执行,首先将希腊字符显示为粗体,然后将其他文字显示为非粗体:

代码语言:javascript
复制
>> text( 0.5, 0.5, '\bf\alpha');
>> text( 0.55, 0.5, ' name');

3. 更改常规文本的字体样式,您可以使用“ \fontname{}”来修饰

代码语言:javascript
复制
>> text( 0.55, 0.5, '\fontname{Times New Roman} name');

5、MATLAB 如何绘制半透明的曲线?如何控制透明度?

基本的plot函数不支持半透明,但可使用scatter函数,且可以分开控制标记填充和标记边界的透明度。参考代码如下:

代码语言:javascript
复制
sct = scatter(x,y,'MarkerFaceColor','r','MarkerEdgeColor','k'); 
% Set property MarkerFaceAlpha and MarkerEdgeAlpha to <1.0
sct.MarkerFaceAlpha = .2;
sct.MarkerEdgeAlpha = .2;

若要使用plot绘制半透明线和透明标记,可参考:

代码语言:javascript
复制
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 函数打印百分号字符?

当需要转译百分号时,使用两个百分号表示,例如:

代码语言:javascript
复制
sprintf('100%%')

7、matlab中如何在字符串中输出单引号',如Lily's book?

若要在字符串中输出单引号',需要在字符串中同时打出两个连着的单引号'',如以下示例:

代码语言:javascript
复制
>> str = 'Lily''s book'
str =
    'Lily's book'

8、如何检查 MATLAB 结构中是否存在某字段?

isfield 函数仅检查结构体最顶层是否有特定字段,而不会检查其他层次。如果需检查所有层次,可使用以下方法:

方法1:对结构体其他层次执行 isfield,例如以下命令,将获得返回值 true。

代码语言:javascript
复制
a.b.c = 1; 
isfield(a.b,'c')

注意:如果isfield函数的第一个输入参数不是结构体,则运行结果为0。在 MATLAB 中有其他数据结构,也通过“.”运算获得下一层属性,但他们不一定是结构体。

方法2:自定义一个函数遍历结构体的所有层次。例如函数 myIsField.m,其内容如下:

代码语言:javascript
复制
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:

代码语言:javascript
复制
a.b.c = 1; 
myIsField(a,'c')

9、MATLAB 中如何更改图例中的字体大小?

通过设置 Legend 对象的 FontSize 属性, 可以更改 MATLAB 图例的字体大小。例如, 绘制4条曲线,创建图例并将图例对象分配给变量 lgd。然后, 使用点运算访问 FontSize 属性,并将值设置为14点。

代码语言:javascript
复制
plot(rand(4))
lgd = legend('One','Two','Three','Four');
lgd.FontSize = 14;

还可使用 legend 函数中的 name-value 配对参数指定 FontSize 属性。例如:

代码语言:javascript
复制
legend({'One','Two','Three','Four'},'FontSize',14)

10、 hist柱状图宽度不一样怎么办?

默认是根据数据分的,你可以设置bin。两组数,bin相同的话,统计之后,用bar画。

代码语言:javascript
复制
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 操作系统?

在程序的结尾处添加如下代码:

代码语言:javascript
复制
system('shutdown -s')

温馨提醒:本行代码将必定造成电脑关闭,而没有最终确认界面。请一定确认您已经保存了所有数据。

12、如何使用matlab绘制四维图(4D-plot)?

示例如下:

代码语言:javascript
复制
[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编程中遇到的问题以及解决方法推荐给小编,或者在推文下方留言,让大家一起学习,共同进步!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档