matlab矩阵和折叠列表

时间:2011-02-14 09:11:14

标签: matlab matrix wolfram-mathematica

我在mathematica中遇到两个问题,并希望在matlab中完成这些问题:

measure := RandomReal[] - 0.5
m = 10000;
data = Table[measure, {m}];
fig1 = ListPlot[data, PlotStyle -> {PointSize[0.015]}]
Histogram[data]

MATLAB:

measure =@ (m) rand(1,m)-0.5
m=10000;
for i=1:m
data(:,i)=measure(:,i);
end

figure(1)
plot(data,'b.','MarkerSize',0.015)

figure(2)
hist(data)

它给了我:

  

???发生以下错误   从function_handle转换为   double:使用==>时出错双

如果我这样做:

measure =rand()-0.5
    m=10000;
data=rand(1,m)-0.5

然后,我在plot1中得到了正确的结果,但是在图2中,y =轴是错误的。

另外,如果我在mathematica中有这个:

steps[m_] := Table[2 RandomInteger[] - 1, {m}]
steps[20] 
Walk1D[n_] :=  FoldList[Plus, 0, steps[n]]
LastPoint1D[n_] := Fold[Plus, 0, steps[n]]
ListPlot[Walk1D[10^4]]

我这样做了:

steps = @ (m) 2*randint(1,m,2)-1;
steps(20)

Walk1D =@ (n) cumsum(0:steps(n))  --> this is ok i think
LastPointold1D= @ (n) cumsum(0:steps(n))
LastPoint1D= @ (n) LastPointold1D(end)-->but here i now i must take the last "folding"
Walk1D(10)
LastPoint1D(10000)
plot(Walk1D(10000),'b')

我得到一个空矩阵,没有情节..

2 个答案:

答案 0 :(得分:1)

由于@Itamar基本上回答了你的第一个问题,这里是对第二个问题的评论。你做得差不多了。你需要定义

Walk1D = @ (n) cumsum(steps(n));

因为cumsumFoldList[Plus,0,your-list]的直接类比。然后,代码中的plot可以正常工作。另外,请注意,在Mathematica或Matlab代码中,没有必要单独定义LastPoint1D - 在这两种情况下,它都是生成列表的最后一点(向量)steps

编辑:

LastPoint1D上扩展一点:我的猜测是你想让它成为Walk1D计算的步行的最后一点。因此,IMO有意义只是让它成为生成的walk(vector)的函数,它返回它的最后一个点。例如:

lastPoint1D = @(walk) (walk(end));

然后,您将其用作:

walk = Walk1D(10000);
lastPoint1D(walk)

HTH

答案 1 :(得分:0)

你有一些错误/错误将你的代码翻译成Matlab:

  • 如果我没有错,则行data = Table[measure, {m}];会创建m measure个副本,在您的情况下会创建一个大小为(1,m)的随机向量。如果这是真的,那么在Matlab中它只是data = measure(m);
  • 您定义的函数会获得一个参数m,因此在调用它时使用矩阵表示法(:)是没有意义的。
  • 正如旁注,如果您将数据插入到for循环内的矩阵中,如果您事先分配矩阵,它将运行得更快,否则Matlab将重新分配内存以调整矩阵大小在每次迭代中。您可以通过data = zeros(1,m);执行此操作。
  • 你在“情节2中y =轴是错误的”是什么意思?你期待它是什么?

修改

关于你的第二个问题,如果你用文字描述你想要实现的目标,而不是试图阅读你的(产生错误的)代码,那么帮助你会更容易。明显错误的一件事是使用像0:steps(n)这样的表达式,因为你使用m:n和两个标量mn来生成一个向量,但steps(n)会产生矢量,而不是标量。您可能得到一个空矩阵,因为steps(n)返回的向量中的第一个值可能为-1,而0:-1生成一个空向量。