我在脚本中手动遍历Matlab中的各个单元(我们称它为foo.m):
%%
%Code for cell 1
%%
%Code for cell 2
Run Code Online (Sandbox Code Playgroud)
从Matlab的命令行中,我希望能够在单元2中有选择地运行代码。文档中仅包含有关如何进行交互操作的说明(例如,将光标放在适当的单元中,然后等等)。我想要命令行的内容,所以可以执行foo.runCell(1)之类的操作来运行上面单元格1中的代码。
如果没有办法,我将把这些单元分解成单独的脚本/函数。这不太方便,因为我处于“快速磨削原型”编码模式下,因此现在将所有内容都存储在一个文件中。
我从公司网站到另一个网站移动很多.在任何一天,我可能只有我的笔记本电脑或多达四台显示器.有了多个显示器,我不知道我将选择使用哪个显示器用于MATLAB主GUI(双击matlab.exe时启动的主GUI).这取决于可用监视器的分辨率.
我使用的脚本利用程序生成的GUI(而不是GUIDE),似乎MATLAB总是在第一台显示器上弹出它们.我研究了一点,发现通过使用定位图形用户界面来选择的显示器p = get(gcf, 'Position'),set(0, 'DefaultFigurePosition', p)和movegui命令,但这次如果我事先知道我要使用的显示器才有效.
有没有办法找出主要的MATLAB GUI在哪台显示器上运行,并在同一台显示器上弹出其他小的GUI?
我正在尝试建模一个可以在每个时间步更改其配置的系统。各种配置是预先知道的,不依赖于时间步长。在某些配置之间允许转换,而在其他配置之间禁止转换。目标是构建一个跨越多个时间步长的允许转换的邻接矩阵。
让A成为s*s*k表示允许转换的逻辑矩阵,并A1...Ak表示 的页面/切片A:
A1 = A(:,:,1); A2 = A(:,:,2); ... Ak = A(:,:,k);
Run Code Online (Sandbox Code Playgroud)
第三维的含义是转换需要多少时间步,例如:如果A(1,3,2)非零,则表示状态#1可以转换为状态#3,这将需要2时间步。
让B成为我们想要构建的邻接矩阵,它表示nt时间步长。的形状B应该是示意性的(以块矩阵表示法):
A1 = A(:,:,1); A2 = A(:,:,2); ... Ak = A(:,:,k);
Run Code Online (Sandbox Code Playgroud)
其中主块对角线由nt0 个块组成,并且 的切片A逐渐“向右推”直到“时间用完”, 的切片A最终“超出”了B? 表明不可能有更多的转换。由于B由nt*nt s*s块组成,因此其大小为(nt*s)×(nt*s)。
问题:给定
Aandnt,我们如何B以最节省 CPU 和内存的方式构造?
我有一个函数d\xcf\x86/dt = \xce\xb3 - F(\xcf\x86)(其中F(\xcf\x86)-- a 是2\xcf\x80周期函数)和该函数的图形F(\xcf\x86)。
我需要创建一个程序,输出 6 个\xcf\x86(t)不同值\xce\xb3( \xce\xb3 = 0.1、0.5、0.95、1.05、2、5)和 的图t\xe2\x88\x88[0,100]。
这是函数的定义F(\xcf\x86):
-\xcf\x86/a - \xcf\x80/a, if \xcf\x86 \xe2\x88\x88 [-\xcf\x80, -\xcf\x80 + a]\n -1, if \xcf\x86 \xe2\x88\x88 [-\xcf\x80 + a, - a] \nF(\xcf\x86) = \xcf\x86/a, if \xcf\x86 \xe2\x88\x88 [- a, a]\n 1, if \xcf\x86 \xe2\x88\x88 [a, \xcf\x80 - …Run Code Online (Sandbox Code Playgroud) 我想计算n矩阵的下一个相邻元素的乘积.n要乘以的元素数量应在函数输入中给出.例如,对于此输入,我应该从第一个开始计算每3个连续元素的乘积.
[p, ind] = max_product([1 2 2 1 3 1],3);
Run Code Online (Sandbox Code Playgroud)
这给了[1*2*2, 2*2*1, 2*1*3, 1*3*1] = [4,4,6,3].
有没有实用的方法呢?现在我这样做:
for ii = 1:(length(v)-2)
p = prod(v(ii:ii+n-1));
end
Run Code Online (Sandbox Code Playgroud)
v输入向量在哪里,是n要乘的元素数.
在此示例中,n=3但可以采用任何正整数值.
根据n是奇数还是偶数还是length(v)奇数或偶数,我有时得到正确的答案但有时会出错.
例如参数:
v = [1.35912281237829 -0.958120385352704 -0.553335935098461 1.44601450110386 1.43760259196739 0.0266423803393867 0.417039432979809 1.14033971399183 -0.418125096873537 -1.99362640306847 -0.589833539347417 -0.218969651537063 1.49863539349242 0.338844452879616 1.34169199365703 0.181185490389383 0.102817336496793 0.104835620599133 -2.70026800170358 1.46129128974515 0.64413523430416 0.921962619821458 0.568712984110933]
n = 7
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Index exceeds matrix dimensions.
Error in max_product …Run Code Online (Sandbox Code Playgroud) 我有一个矩阵index在Matlab与尺寸GxN和矩阵A与尺寸MxN.
在提出我的问题之前,让我举一个例子.
clear
N=3;
G=2;
M=5;
index=[1 2 3;
13 14 15]; %GxN
A=[1 2 3;
5 6 7;
21 22 23;
1 2 3;
13 14 15]; %MxN
Run Code Online (Sandbox Code Playgroud)
我想您的帮助,以构建一个矩阵Response,大小GxM与Response(g,m)=1行是否A(m,:)等于index(g,:)否则为零.
继续上面的例子
Response= [1 0 0 1 0;
0 0 0 0 1]; %GxM
Run Code Online (Sandbox Code Playgroud)
这段代码做了我想要的(取自我之前的一个问题 - 只是为了澄清:当前的问题是不同的)
Response=permute(any(all(bsxfun(@eq, reshape(index.', N, [], G), permute(A, [2 3 4 1])), 1), 2), [3 4 1 …Run Code Online (Sandbox Code Playgroud) 我有一个MATLAB代码如下所示.我试图使用MATLAB Coder将此代码转换为C代码,但我遇到了错误.

预期逻辑,char,int,fi,single或double.找到了一个mxArray.MxArrays从对MATLAB解释器的调用返回,并且在表达式中不受支持.它们可能只用于赋值的右侧,也可用作外在函数的参数.
% Applies A-weighted filtering to sound and draws it's plot
% in a figure as output.
function A_filtering
coder.extrinsic('tic')
coder.extrinsic('toc')
coder.extrinsic('display')
sampleRate = 44100;
reader = dsp.AudioFileReader('Jet_Flypast.wav');
fs = 44100;
weightFilter = weightingFilter('A-weighting',fs);
% fileWriter = dsp.AudioFileWriter('SampleRate',fs);
% visualize(weightFilter,'class 1')
scope = dsp.SpectrumAnalyzer('SampleRate',fs,...
'PlotAsTwoSidedSpectrum',false,...
'FrequencyScale','Log',...
'FrequencyResolutionMethod','WindowLength',...
'WindowLength',sampleRate,...
'Title','A-weighted filtering',...
'ShowLegend',true,...
'ChannelNames',{'Original Signal','Filtered Signal'});
tic
while toc < 60
x = reader();
y = weightFilter(x);
scope([x(:,1),y(:,1)])
display(x(:,1))
end
release(scope);
release(weightFilter);
release(reader);
end
Run Code Online (Sandbox Code Playgroud)
这个问题可能是重复的,但我搜索了互联网,找不到任何相关的帖子.有什么方法可以解决这个错误吗?
我在MATLAB中有一个数字.然后我通过输入添加一个文本,
b = text(0.5, 0.5, 'Detector action', 'Rotation', -70, 'FontSize', 25);
Run Code Online (Sandbox Code Playgroud)
我也试过了,
uistack(b, 'top');
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
MATLAB提供了预分配/初始化数组的函数,这些数组具有常见值,如0或1.但是,如果我们希望数组具有一些任意double值,那么有多种方法可以做到这一点,并且不明显哪一个更可取.
这个问题并不新鲜 - 以前在这篇博客文章和本回答中讨论过这个问题.但是,经验表明,软件(特别是MATLAB及其执行引擎)和硬件随时间而变化,因此最佳方法可能在不同系统上有所不同.不幸的是,前面提到的资源不提供基准测试代码,这可能是回答这个问题的最终(和永恒)方式.
我正在寻找一个可以运行的基准测试,它可以告诉我在我的系统上使用最快的方法,考虑到我可能正在使用各种大小的"常规" double数组和gpuArray double数组.
matlab ×10
matrix ×3
performance ×3
arrays ×2
angle ×1
bringtofront ×1
c ×1
gpgpu ×1
graph-theory ×1
matlab-coder ×1
matlab-gui ×1
matlab-java ×1
mex ×1
ode ×1
periodicity ×1
piecewise ×1
plot ×1
position ×1
projection ×1
rotation ×1
rows ×1
text ×1