如何表达这个表达式

时间:2014-07-05 11:39:03

标签: matlab function sum formula

我是MATLAB的新手,我想在Matlab中制定以下的租约平方表达式。我有一些我在这里打字的代码。但优化问题解决方案似乎不正确。有谁知道为什么?

首先,我想解决热量方程 $$ T_t(x,t)= - L_x。 T(x,t)+ F(x,t)$$ 其中L_x是图的拉普拉斯矩阵。 然后从以下最小二乘法找到y。

$$ \ min_y \ sum_ {j} \ sum_ {i}(\ hat {T} _j(t_i) - T_j(t_i,y))^ 2 $$

提前致谢!!

这是我的代码:

%++++++++++++++++ main ++++++++++++++++++++
% incidence matrix for original graph
C_hat = [ 1 -1  0  0  0  0;...
         0  1 -1  0  0 -1;...
         0  0  0  0 -1  1;...
         0  0  0  1  1  0;...
        -1  0  1 -1  0  0];
% initial temperature for each vertex in original graph
  T_hat_0 = [0 7 1 9 4];
 [M_bar,n,m_bar,T_hat_heat,T_hat_temp] = simulate_temp(T_hat_0,C_hat);
 C = [ 1  1 -1 -1  0  0  0  0  0  0;...
   0 -1  0  0  1 -1  1  0  0  0;...
   0  0  1  0  0  1  0 -1 -1  0;...
   0  0  0  1  0  0 -1  0  1 -1;...
  -1  0  0  0 -1  0  0  1  0  1];
   %
   % initial temperature for each vertex in original graph
    T_0 = [0 7 1 9 4];
   %
   % initial temperature simulation
    [l,n,m,T_heat,T_temp] = simulate_temp(T_0,C);
   %
   % bounds for variables
    lb = zeros(m,1);
    ub = ones(m,1);
    %
   % initial edge weights
    w0 = ones(m,1);
   % optimization problem
   %  w = fmincon(@fun, w0, [], [], [], [], lb, ub);

     %++++++++++++++++++++ function++++++++++++++++++++++++++++
   function [i,n,m,T_heat,T_temp] = simulate_temp(T,C)
   %
     % initial conditions
      delta_t = 0.1; 
      M = 20; %% number of time steps
      t = 1; 
      [n,m] = size(C);
      I = eye(n); 
      L_w = C * C';
      T_ini = T';
      Temp = zeros(n,1);
      % Computing Temperature
      %
      for i=1:M
          K = 2*I + L_w  * delta_t;
          H = 2*I - L_w  * delta_t;
          %
          if i == 1
              T_heat = (K \ H) * T_ini;
              %
              t = t + delta_t;
          else
              T_heat = (K \ H) * Temp;
              %
              t = t + delta_t;
          end
              % replacing column of T_final with each node temperature in each
              % iteration. It adds one column to the matrix in each step
              T_temp(:,i) = T_heat;
              %
              Temp = T_heat;
      end  
   end


     %++++++++++++++++++ function+++++++++++++++++++++++++++++++++++++++++
   function w_i = fun(w);
   %
     for r=1:n
         for s=1:M_bar
             w_i = (T_hat_temp(r,s) - T_temp(r,s)).^2;
         end
     end

1 个答案:

答案 0 :(得分:0)

为了给出一个更清晰的答案,我需要更多关于你有什么形式的函数F_j和E_j的信息。

我假设您为每个F_j提供一个值x_i,然后返回一个数字。我还假设您向E_j提供值x_i和另一个值(或向量)y,并返回一个值。

我还假设'i'和'j'分别表示列和行的索引,并且它们是有限的。

我可以在不知道更多信息的情况下建议:

  1. 预先计算每个x_i的函数F_j的值,得到矩阵F - 其中元素F(i,j)给出值F_j(x_i)。
  2. 为E_j做同样的事情,给出一个矩阵E - 其中E(i,j)对应于E_j(x_i,y)。
  3. 执行(F-E)。^ 2 以减去F和E的每个元素,然后按元素方向对其进行平方。
  4. 总和((F-E)。^ 2 **,2)**。 sum(M,2)将对矩阵M的索引i求和,返回列向量。
  5. 最后,取 sum( sum((FE)。^ 2,2),1)对索引j,列进行求和,这最终会给你标量。