我有一个MATLAB函数myfun(v1,v2,v3,v4,v5,v6)和一个30x6矩阵A.调用该函数的方法是将每列A作为单独的输入参数传递:
myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有更好的方法来做这个没有明确写出这么多次A(:,*)?
我想知道当在GUI中按下按钮时如何连接到互联网站点.例如,如果我按下按钮,则可以弹出浏览器窗口以显示"stackoverflow.com/".
在使用MATLAB 2D滤波器功能filter2(B,X)和卷积功能时conv(X,B,''),我看到该filter2功能本质上是2D卷积,但是旋转了180度的滤波器系数矩阵.在输出方面filter2和conv2,我看到下面的关系成立:
output matrix of filter2 = each element negated of output of conv2
Run Code Online (Sandbox Code Playgroud)
编辑:我不对; 上述关系一般不成立,但我在少数情况下看到过.通常,两个输出矩阵是不相关的,因为在两者中都获得了2个完全不同的内核,这些内核用于卷积.
我理解如何执行2D卷积.我想要理解的是这在图像处理术语中的含义.我如何可视化这里发生的事情?将滤波器系数矩阵旋转180度意味着什么?
我正在处理一个非常庞大的矩阵,因此希望在MATLAB中使用并行计算来运行集群.在这里,我使用以下方法创建了一个稀疏矩阵
Ad = sparse(length(con)*length(uni_core), length(con)*length(uni_core));
Run Code Online (Sandbox Code Playgroud)
我有一个书面函数,adj使用它我可以填充矩阵Ad.的循环运行时,都会从功能adj我得到的方形对称矩阵将被分配给Ad从3682*(i-1)+1到3682 *(i-1)+3682在第一索引并且类似地在第二索引.这显示在这里:
parfor i = 1:length(con)
Ad((3682*(i-1))+1:((3682*(i-1))+3682), ...
(3682*(i-1))+1:((3682*(i-1))+3682)) = adj(a, b, uni_core);
end
Run Code Online (Sandbox Code Playgroud)
在正常的for循环中,它运行没有任何问题.但在parfor并行计算中,我收到的错误是使用切片数组时出现问题parfor.
我有一个小的.m文件,我在MATLAB R2010b中通过F5在编辑器中按下来运行.这是文件:
clear all, close all, clc;
%why are you printing !?
a = 1
c = eye(5);
Run Code Online (Sandbox Code Playgroud)
我希望这个代码在运行时显示以下内容:
a =
1
Run Code Online (Sandbox Code Playgroud)
但相反它显示了这个:
%why are you printing !?
a = 1
a =
1
c = eye(5);
Run Code Online (Sandbox Code Playgroud)
如果我从控制台调用该文件,则会发生相同的行为.我无法在互联网上或在MATLAB的控制台设置中找到任何更改此信息.我使用过许多不同版本的MATLAB,这在以前从未发生过.
我想在MATLAB中加载RGB图像并将其转换为二进制图像,我可以在其中选择二进制图像具有多少像素.例如,我将300x300 png/jpg图像加载到MATLAB中,最终得到的二进制图像(像素只能是#000或#FFF)可能是10x10像素.
这是我到目前为止所尝试的:
load trees % from MATLAB
gray=rgb2gray(map); % 'map' is loaded from 'trees'. Convert to grayscale.
threshold=128;
lbw=double(gray>threshold);
BW=im2bw(X,lbw); % 'X' is loaded from 'trees'.
imshow(X,map), figure, imshow(BW)
Run Code Online (Sandbox Code Playgroud)
(我从互联网搜索中得到了一些上述内容.)
在做这个时,我最终得到了一个黑色的图像imshow(BW).
我正在寻找一种优雅的方法来计算离散卷积的"乘积",而不是总和.
这是离散卷积的公式:
在这种情况下,我们可以使用: conv(x,y)
现在我想实现这些操作
当然我可以使用一个循环,但我正在寻找一个技巧来线性化这个操作.
例:
f = [2 4 3 9 7 1]
g = [3 2 1]
dist = length(g)-1;
for ii = 1:length(f)-dist
x(ii) = prod(f(ii:ii+dist).*g)
end
Run Code Online (Sandbox Code Playgroud)
x =
Run Code Online (Sandbox Code Playgroud)144 648 1134 378
这是一个微不足道的问题,但我只是从matlab开始,并且还没有习惯他们的思维方式(和语法).
对于那些曾经做过FEM等事情的人来说,我所要求的是显而易见的.
你如何组合几个小的刚度矩阵.比如,你得到(元素1)局部刚度矩阵4x4,(元素2)相同 - 当然只有不同的矩阵,但仍然是4x4.
最简单的方法是什么:
[|--------| 0 0 ]
[| | 0 0 ]
[| |--|-----|]
[|-----|--| |]
[0 0 | |]
[0 0 |--------|]
(a33+b11, a34+b12,
(a43+b12, a44+b22, ...)
Run Code Online (Sandbox Code Playgroud)
即做一个"大人物"?
[r,c,d] = size(rgbImage); %# Get the image dimensions
Run Code Online (Sandbox Code Playgroud)
什么是r,c,d站在这里?
我想在MATLAB图中轴外的每个数据点上创建一条带有圆形标记的线,类似于
line([x1 x2],[y1 y2],'Color','k','Marker','o')
Run Code Online (Sandbox Code Playgroud)
会产生。
要将线对象放置在轴外,我只是尝试使用annotation:
annotation('line',phi1([x1 x2]),phi2([y1 y2]),'Color','k','Marker','o')
Run Code Online (Sandbox Code Playgroud)
其中phi1和phi2是适当的坐标转换,以适合当前图形的坐标x和y轴内。
我期望这行得通,因为线对象具有marker属性。但是,通过annotation,我收到以下错误消息:
Error using matlab.graphics.shape.Line/set
There is no Marker property on the Line class.
Error in matlab.graphics.chart.internal.ctorHelper (line 8)
set(obj, pvpairs{:});
Error in matlab.graphics.shape.Line
Error in annotation (line 128)
h = matlab.graphics.shape.Line(aargs{:});
Run Code Online (Sandbox Code Playgroud)
同样,用该annotation函数绘制矩形时,不能设置该Curvature属性。似乎annotation不支持这些类型的属性,即使它像line或rectangle函数那样创建线或矩形对象。我尝试摆弄注解句柄和子项,但没有成功。
有任何解决方法的想法吗?