⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpfun.m

📁 computation of conformal maps to polygonally bounded regions
💻 M
字号:
function F = rpfun(y,fdat)
%   Returns residual for solution of nonlinear equations. 
%   $Id: rpfun.m 251 2003-03-07 16:34:11Z driscoll $

[n,beta,nmlen,left,right,cmplx,qdat,corners] = deal(fdat{:});

% Transform y (unconstr. vars) to z (actual params)
z = rptrnsfm(y,corners);

% Compute the integrals appearing in nonlinear eqns.
zleft = z(left);
zright = z(right);

% To use stquad, must put strip ends into z, beta
ends = find(diff(imag(z([1:n 1]))));
z = [z(1:ends(1));Inf;z(ends(1)+1:ends(2));-Inf;z(ends(2)+1:n)];
beta = [beta(1:ends(1));0;beta(ends(1)+1:ends(2));0;beta(ends(2)+1:n)];
% Put dummy columns into qdat at ends
idx = [1:ends(1) n+1 ends(1)+1:ends(2) n+1 ends(2)+1:n n+1];
qdat = qdat(:,[idx idx+n+1]);
% Change singularity indices to reflect ends
left = left + (left > ends(1)) + (left > ends(2));
right = right + (right > ends(1)) + (right > ends(2));

ints = zeros(size(zleft));
% Two-stage integrations
s2 = (right(:) - left(:) == 1) & (imag(zleft) - imag(zright) == 0);
mid = mean([zleft(s2) zright(s2)],2);
ints(s2) = stquadh(zleft(s2),mid,left(s2),z,beta,qdat) ...
    - stquadh(zright(s2),mid,right(s2),z,beta,qdat);

% Three-stage integrations
mid1 = real(zleft(~s2)) + i/2;
mid2 = real(zright(~s2)) + i/2;
ints(~s2) = stquad(zleft(~s2),mid1,left(~s2),z,beta,qdat) ...
    + stquadh(mid1,mid2,zeros(size(mid1)),z,beta,qdat) ...
    - stquad(zright(~s2),mid2,right(~s2),z,beta,qdat);

if any(ints==0)|any(isnan(ints))
  % Singularities were too crowded. 
  warning('Severe crowding')
end

% Compute nonlinear equation residual values.
cmplx2 = cmplx(2:length(cmplx));
F = abs(ints(~cmplx)); 		% F(1) = abs(ints(1))
F = log( (F(2:end)/F(1)) ./ nmlen(~cmplx2) );
if any(cmplx)
  F2 = log( (ints(cmplx)/ints(1)) ./ nmlen(cmplx2) );
  F = [F;real(F2);imag(F2)];
end
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -