matlab - 如何在 MATLAB 中找到最小二乘成本函数的矩阵值?
问题描述
给定 S1 的值,它是一个大小为 (1,K) 的向量,我想找到大小为 (N,M) 的矩阵 B 的值,它可以最小化以下最小二乘成本函数:
sum(S2 - S1).^2
受制于:
S2(i)>=S1(i) \forall i \in {1, .., K}
其中 S2 是大小为 (1,K) 的向量,是矩阵 B 的函数。可以使用以下系统参数和方程在优化矩阵 B 后计算 S2:
clc;
clear;
% Given system parameters:
N = 2;
K = 4;
M = 2;
C_l = 4;
H = [0.1185 0.2811; 0.3550 0.8224; 0.3260 0.9644; 0.5333 0.6083]; % 4*2 matrix
A = [-2 1; -1 1]; % 2*2 matrix
C = [7 -3; 7 -3; -2 1; -2 1]; % 4*2 matrix
P = [25000000 0; 0 25000000]; % 4*4 matrix
S1 = [3.1683 3.1686 1.8716 1.8898]; % 1*4 vector
S2 = zeros(1,K); % intial value
B = zeros(N,M); % intial value
% How can we optimize the value of the B matrix to achieve our goal?
%calculate S2 from B and the other given inputs
for j=1:1:N
d(j) = (B(j,:)*P*B(j,:)')/((2^(2*C_l))-(norm(A(:,j))^2));
end
D_d = diag(d);
for i=1:1:K
V_d(i)=C(i,:)*P*B'*H(i,:)'*inv(1+H(i,:)*(A'*D_d*A+B*P*B')*H(i,:)');
sigma_d(i)=norm((V_d(i)*H(i,:)*B-C(i,:))*(P^(1/2)))^2+(V_d(i)^2)*(1+H(i,:)*A'*D_d*A*H(i,:)');
S2(i)=0.5*log2((P(1,1))/sigma_d(:,i));
end
解决方案
推荐阅读
- omnet++ - Omnetpp-5.6.1 WIndows installation issues
- powershell - 如何在 PowerShell 中使用 ForEach 计算数组中小于 10 的数字?
- rest - MULE (3.x) anypoint studio 中的 RAML 提供了一个空有效负载
- laravel-5 - Laravel 一对一关系显示属性非对象
- javascript - 转译顶级 node_modules 依赖的 ES6 嵌套 node_modules 依赖
- eclipse - eclipse断点和应用程序之间的链接不起作用
- rxjs - 动态更新可观察对象或类型号
- python - 如何停止烧瓶将包含 json 格式数据的列表再次转换为 json?
- c - 动态数组的内存分配
- swift - NSPersistentCloudKitContainer 将 NSManagedObject 子类恢复为历史值