matlab 多个向量的余弦角_matlab中怎么求一个行向量的反余弦值

这篇博客提供了一个MATLAB函数`ucos`,用于计算一个向量与矩阵中所有行向量的夹角余弦值,并找出最大和最小余弦值及其对应行。示例展示了如何使用该函数处理特定数据,结果显示最大余弦值发生在第一行,最小余弦值发生在第一行与第四行。
摘要由CSDN通过智能技术生成

2016-08-06 回答

楼主试试下述代码:

%{

matlab 一个向量和矩阵中各行向量的夹角余弦值 求高手解答

比如a=(1,2,3,4,5)

b={1,2,3,4,5;

6,7,8,9,10;

11,12,13,14,15;

16,17,18,19,20}

分别求向量a与矩阵b中各行向量的夹角余弦值

并输出最大的夹角余弦值,及所对应的具体是哪一行向量

%}

function [cosxy maxcos maxcosangle rcmaxcos mincos mincosangle rcmincos] = ucos(x,y)

% ucos功能:

% (1) 计算矩阵 x 的各行向量与矩阵 y 的各行向量之间的夹角余弦,存储在输出项 cosxy 中;

% (2) 计算最大夹角余弦值及其所对应的角度,分别存储在输出项 maxcos 和 maxcosangle 中;

% (3) 输出最大余弦值所对应的 x 和 y 所在的行,存储在 rcmaxcos 中;

% (4) 计算最小夹角余弦值及其所对应的角度,分别存储在输出项 mincos 和 mincosangle 中;

% (5) 输出最小余弦值所对应的 x 和 y 所在的行,存储在 rcmincos 中;

[rx cx] = size(x);

[ry cy] = size(y);

if cx~=cy

error('输入的矩阵类型不匹配,输入的矩阵x和y必须列数相同')

end

cosxy = zeros(rx,ry);

for k = 1:rx

for l = 1:ry

cosxy(k,l) = sum(x(k,:).*y(l,:))/norm(x(k,:))/norm(y(l,:));

end

end

maxcos = max(max(cosxy));

maxcosangle = acos(maxcos);

[r c] = find(cosxy==maxcos); % 找出最大余弦值所在的行r和列c;

rcmaxcos = [r c];

disp(['最大余弦值出现在x的第 ' num2str(r) ' 行与y的第 ' num2str(c) ' 行.'])

mincos = min(min(cosxy));

mincosangle = acos(mincos);

[r c] = find(cosxy==mincos); % 找出最小余弦值所在的行r和列c;

rcmincos = [r c];

disp(['最小余弦值出现在x的第 ' num2str(r) ' 行与y的第 ' num2str(c) ' 行.'])

执行你的数据:

>> a = [1,2,3,4,5];

>> b = [1,2,3,4,5;

6,7,8,9,10;

11,12,13,14,15;

16,17,18,19,20];

>> [cosxy maxcos maxcosangle rcmaxcos mincos mincosangle rcmincos] = ucos(a,b);

最大余弦值出现在x的第 1 行与y的第 1 行.

最小余弦值出现在x的第 1 行与y的第 4 行.

cosxy = [ 1 0.964950504732767 0.945343100616969 0.935153458570522]

maxcos = 1

maxcosangle = 0

rcmaxcos = [1 1]

mincos = 0.935153458570522

mincosangle = 0.362104308112746

rcmincos = [1 4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值