首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多对输入上运行Matlab函数并输出矩阵?

如何在多对输入上运行Matlab函数并输出矩阵?
EN

Stack Overflow用户
提问于 2018-01-27 19:30:09
回答 1查看 52关注 0票数 0

我是Matlab的新手,到目前为止,我已经学会了如何在单个数据向量上评估多个变量的函数,如下例所示,

代码语言:javascript
复制
>>data = [1,2,3,4,2,2.5,2.9,1.8,-1,1.8]
>>fun=@(x) (1/(sqrt(2*pi)*x(2)))*exp((-(data-x(1)).^2)/(2*x(2)^2)) %A Normal distribution
>>fun([1,2])

Columns 1 through 9

    0.1995    0.1760    0.1210    0.0648    0.1760    0.1506    0.1270    0.1841    0.1210

  Column 10

    0.1841

这可以像预期的那样工作,但是对于像下面这样的函数,对于多个数据源,

代码语言:javascript
复制
>>data1 = [1,2,3,4,2,2.5,2.9,1.8,-1,1.8]
>>data2 = [1,2,3.1,4.1,2.1,2.51,3.1,-1,1.9,2] 
>>p = .5092
>>fun = @(x) (1/(2*pi*x(2)*x(4)*sqrt(1-p^2))) * exp( (-1/(2-2*p^2)) * ( (data1-x(1)).^2/(x(3)^2) + (data2-x(2)).^2/(x(4)^2) - (2*p(data1-x(1))*(data2-x(2)))/(x(3)*x(4)) ) ) % A joint-probability distribution
>>fun([1,2,3,4])

Subscript indices must either be real positive integers or logicals.

Error in
@(x)(1/(2*pi*x(2) . . .

最后一个方程只是一个联合概率分布,每一个观测值都由一个配对的x和y值组成。我将如何同时在data1和data2上运行这个和类似的函数,对它们都迭代相同的索引,每次一个数字,生成一个输出矩阵?

我不能简单地运行循环的原因是,我需要将这个函数输入到一个fminunc()函数优化过程中,并让它能够计算每一对值的F值。

EN

回答 1

Stack Overflow用户

发布于 2018-01-27 19:43:49

您编写了2*p(data1-x(1)),然后将p视为向量,将其更改为2*p.*(data1-x(1))。第二个错误是(data1-x(1))*(data2-x(2))。这是一个矩阵乘法,因为维数不匹配,就会产生一个误差。我假设您想要一个标量乘法,然后再添加.,使它成为(data1-x(1)).*(data2-x(2))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48479716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档