以不同形状和大小经常弹出的问题是:为什么我会收到以下错误消息:
"未定义函数'function_name'用于'double'类型的输入参数."
本文试图解决可能出现此错误消息的所有不同方案,并提出解决方案的解决方案.
有没有办法从ctrl + c这样的调试器中停止执行matlab程序,但是能够继续执行(比如你可以说c#)?
如果没有,除了尝试在matlab代码中预先设置断点或dbstop语句之外,还有更好的解决方法吗?
我希望能够中断长时间运行的模拟以查看当前状态,然后继续模拟.
我目前使用/考虑的两个选项是
代码中的dbstop命令(或(条件)断点).缺点是有时候我不想停止模拟几个小时,有时候想要在几秒钟之后停止(我不一定知道提前知道)并且这对这种方法不起作用:如果我将中断条件设置为每5分钟中断一次,我就不能让matlab在没有交互的情况下运行数小时.如果我将条件设置得更高,我必须等待太久才能达到条件.
包括每隔几秒/几分钟保存工作空间的代码,并将工作空间导入第二个matlab实例.缺点是这是一个巨大的麻烦,也不一定允许我使用已保存工作空间的状态恢复模拟,然后逐步执行代码几次迭代.
我希望有比2中任何一个更好的解决方案.感谢任何建议!
编辑:我认为我要做的是编写简单的matlab函数,每次迭代检查环境变量或磁盘上的文件,如果我在此文件或env中设置了一个标志,则调用dbstop.通过这种方式,我可以通过编辑文件来控制断点从matlab外部命中的时间(如果需要的话).凌乱,但应该工作.
我想在MATLAB中交织两个向量.事实上,我实际上只想在每个元素之间添加一个零,但我想我会以这样的方式提出问题,以便我学会如何将其应用于其他情况.
我的具体应用:我想采用矢量(例如[1 2 3])和输出[0 1 0 2 0 3].
在更广泛的问题:我将如何做到这一点有两个不同的载体,例如[1 2 3]和[9 8 7]交织产生[9 1 8 2 7 3].
在上述任何一个或两个问题中,任何帮助都非常受欢迎.
我注意到如果A是NxN矩阵并且它具有逆矩阵.但是inv()和pinv()函数输出是不同的. - 我的环境是Win7x64 SP1,Matlab R2012a,Cygwin Octave 3.6.4,FreeMat 4.2
看看Octave的例子:
A = rand(3,3)
A =
0.185987   0.192125   0.046346
0.140710   0.351007   0.236889
0.155899   0.107302   0.300623
pinv(A) == inv(A)
ans =
0 0 0
0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
ans通过上面运行在Matlab同一命令的结果.inv(A)*A或A*inv(A),结果是Octave和Matlab中的身份3x3矩阵.A*pinv(A)和pinv(A)*A在Matlab和FreeMat身份3x3矩阵.A*pinv(A)是Octave中的身份3x3矩阵.pinv(A)*A是不是在倍频身份3x3矩阵.我不知道原因 inv(A) != pinv(A),我已经考虑了矩阵中元素的细节.这似乎是导致这个问题的浮动精度问题.
点点后10位数可能不同,如下所示:
6.65858991579923298331777914427220821380615200000000inv(A)(1,1)反对的元素
6.65858991579923209513935944414697587490081800000000 元素 pinv(A)(1,1)
precision matlab floating-accuracy matrix-inverse numerical-analysis
我创建了一个函数,它为输入变量提供向量,并为每组输入返回一个单元格数组.最终输出变量(out)似乎由包含两个1x5单元的2x1单元组成.我提供了以下截图:

我只想弄清楚如何将单元阵列(out)展平为2x5单元阵列.
我在解决Ax = B形式的系统时遇到了麻烦
该系统的解决方案应该是
x = inv(A)*B
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.
我尝试上面的代码行时收到以下错误消息:
Warning: Matrix is close to singular or badly scaled.
     Results may be inaccurate. RCOND = 1.156482e-018. 
Run Code Online (Sandbox Code Playgroud)
似乎matlab在反转我指定的矩阵时遇到了麻烦.我试着通过输入inv(A)*A来验证反函数是否正常工作
这应该给出单位矩阵,但是我得到了相同的错误和一些垃圾数.
这是我正在使用的A矩阵:
A = [5/2   1/2  -1     0     0    -1/2  -1/2   0     0
     1/2   1/2   0     0     0    -1/2  -1/2   0     0 
    -1     0     5/2  -1/2  -1     0     0    -1/2   1/2
     0     0    -1/2   1/2   0     0     0     1/2  -1/2
     0     0    -1     0     3/2  -1/2   1/2   0     0
    -1/2  -1/2   0     0    -1/2 …Run Code Online (Sandbox Code Playgroud) 这个问题是基于这个问题的讨论.我之前一直在使用稀疏矩阵,我相信我使用它们的方式很有效.
我的问题是双重的:
在下面,A = full(S)其中S是稀疏矩阵.
也就是说,稀疏等价物var = A(row, col)是什么?
我对这个话题的看法:你不会做任何不同的事情.var = S(row, col)尽可能高效.我在这方面受到了以下解释的挑战:
按照你所说的方式访问第2行和第2列的元素,S(2,2)与添加新元素相同:
var = S(2,2)=>A = full(S)=>var = A(2,2)=>S = sparse(A) => 4.
这句话真的可以说对吗?
也就是说,稀疏等价物会A(row, col) = var是什么?(假设A(row, col) == 0开始)
众所周知,A(row, col) = var对于大型稀疏矩阵来说,简单地做就很慢.从文档:
如果要更改此矩阵中的值,可能会尝试使用相同的索引:
B(3,1)= 42; %此代码确实有效,但速度很慢.
我对这个主题的看法:当使用稀疏矩阵时,你经常从向量开始并使用它们以这种方式创建矩阵:S = sparse(i,j,s,m,n).当然,您也可以像这样创建它:S = sparse(A)或者sprand(m,n,density) …
我有:
img = imread('pic.jpg','jpg');
r = img(:,:,1);
g = img(:,:,2);
b = img(:,:,3);
figure, imshow(r);
figure, imshow(g);
figure, imshow(b);
Run Code Online (Sandbox Code Playgroud)
如何在每张图片上设置标题?
我有包含矩阵的文本文件.我想把它作为矩阵在朱莉娅中阅读.
文本文件如下:
0 0 0 0 0 0 0
1 0 0 0 0 0 0
1 0 0 0 0 0 1
1 0 0 0 1 1 0
Run Code Online (Sandbox Code Playgroud)
在matlab中,您可以执行以下操作来创建矩阵M:
file='name.txt';
[M] = load(file);
Run Code Online (Sandbox Code Playgroud)
如何在朱莉娅做同样的事情?