求解方程{指数* prod指数(ln)}

时间:2018-06-14 14:08:19

标签: matlab equation equation-solving

我想在MATLAB中用fsolve

求解一个方程式

我正在尝试这样做:

function F = root2d(P); 

lambda = 2*10^-4;
th = -40:-1:-106;
PL1 = 10471285.480509; % (mw)
p1 = 10;
p2 = 6 ; 
p3 = 8 ; 
al = 2.5;
T = 10.^(th./10);
r = (p1*PL1^(-1)./T).^(1/al);
R = (p2*PL1^(-1)./T).^(1/al);
syms P
c = (lambda.*pi.*(R.^2));
j = 1:3;
D = zeros(3,67);
for k = 1:numel(j)
    F(1) = (prod(D(k,:)==exp(P(1).*c.*(log(P(1)).^k/factorial(k))))).*exp(-(lambda*P(1).*pi.*(r.^2)))-P;
end
fun = @root2d;
P0 = 0;
P = fsolve(fun,P0)

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

此代码中存在一些问题。我会帮助你解决最棘手的问题。

使用rubberduck debugging识别。让我通过向您解释您的代码来举例说明。

从顶部开始,您定义了一个名为root2d的函数,它返回一些对象F,然后在此函数中定义了很多常量。通过定义这些辅助函数,您可以定义符号函数F,我们之前看到的是函数的输出。继续使用此函数root2d,您现在创建一个函数句柄funroot2d,然后在最后一行中调用fsolve来解决fun

你看到错误了吗?

fsolve调用fun,它是root2d的函数句柄。因此fsolve调用root2d。运行root2d MATLAB会遇到调用fsolve的新root2d。即root2d将一遍又一遍地被推到堆栈中。

这可以通过从函数中取出最后三行,然后从另一个脚本或终端运行它们来解决。

这样做会导致新错误:

  

无法执行赋值,因为左侧的索引是   与右侧的尺寸不相容。

     

sym/privsubsasgn中的错误(第1085行)
  L_tilde2 = builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);

     

sym/subsasgn中的错误(第922行)
  C = privsubsasgn(L,R,inds{:});

     

SO中的错误(第18行)
      F(1) = (prod(D(k,:)==exp(P(1).*c.*(log(P(1)).^k/factorial(k))))).*exp(-(lambda*P(1).*pi.*(r.^2)))-P;

     

fsolve中的错误(第242行)
              fuser = feval(funfcn{3},x,varargin{:});

     

引起:
      初始目标函数评估失败。 FSOLVE不能       继续。

即。您必须确保正确编写目标函数F(1) =...