【问题标题】:Solving variable number system of equations using fsolve (Matlab)使用 fsolve (Matlab) 求解变数方程组
【发布时间】:2016-06-22 03:18:35
【问题描述】:

我正在使用 fsolve 为可变数量的方程/未知数 (N) 求解矩阵方程。我已经为N=2,3 提供了一个问题示例,但是在每个示例的最后一行,我必须将每个方程“硬编码”到 fsolve 中。如果N 是一个变量,这将不起作用。我的问题:如何在可变数量的方程上调用 fsolve(在本例中为一般 N)?唯一的问题是调用 fsolve。

clear all    
N = 2;
M(:,:,1) = rand(N);
M(:,:,2) = rand(N);
eqn = @(E,n) det(eye(N)-M(:,:,n)*diag(E));

%how do I write this line if I don't know what N is??
[E_values, Fval, Fflag] = fsolve(@(E) [eqn(E,1);eqn(E,2)],[1,1]) 

或者对于N=3 将是:

clear all
N = 3;
M(:,:,1) = rand(N);
M(:,:,2) = rand(N);
M(:,:,3) = rand(N);
eqn = @(E,n) det(eye(N)-M(:,:,n)*diag(E));

%how do I write this line if I don't know what N is??
[E_values, Fval, Fflag] = fsolve(@(E) [eqn(E,1);eqn(E,2);eqn(E,3)],[1,1,1]) 

(请注意,这可能有也可能没有解决方案,具体取决于 M,没关系)。谢谢。

【问题讨论】:

    标签: matlab function matrix linear-algebra


    【解决方案1】:

    创建一个函数genEqn,它输出一个数组,其大小取决于输入N。通过定义一个新函数eqn,传递方程数和矩阵M的参数,基于主要的。使用 eqn 作为 fsolve 的输入。下面是一个包含 5 个方程的示例,但它同样适用于任意数字。

    function varEqFsolve
    
    N = 5;
    for k = 1:N
        M(:,:,k) = rand(N);
    end
    
    guess = ones(1,N);
    eqn = @(E) genEq(E,M,N);
    
    [E_values, Fval, Fflag] = fsolve(eqn,guess)
    
    function F = genEq(E,M,N)
    
    for k = 1:N
        F(k) = det(eye(N)-M(:,:,k)*diag(E));
    end
    

    参考:http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html

    【讨论】:

      【解决方案2】:

      把匿名函数变成合适的函数并使用循环。

      function main
      
      N = round(rand*8+3);
      for i=1:N
          M(:,:,i) = rand(N);
      end
      
      [E_values, Fval, Fflag] = fsolve(@(E) F(E,M),ones(N,1)) 
      
      end
      
      function y=F(E,M)
      
      N = size(M,3);
      y = zeros(N,1);
      for i=1:N
          y(i) = det(eye(N)-M(:,:,i)*diag(E));
      end
      
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        • 2020-10-29
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多