楼主: ReneeBK
3160 19

A First Course in Numerical Methods [推广有奖]

11
ReneeBK 发表于 2016-1-29 11:55:28
  1. function [A,p] = house(A)
  2. % function [A,p] = house(A)
  3. %
  4. % perform QR decomposition using Householder reflections
  5. % Transformations are of the form P_k = I - 2u_k(u_k^T), so
  6. % store effecting vector u_k in p(k) + A(k+1:m,k). Assume m > n.

  7. [m,n]=size(A); p = zeros(1,n);
  8. for k = 1:n
  9.   % define u of length = m-k+1
  10.   z = A(k:m,k);
  11.   e1 = [1; zeros(m-k,1)];
  12.   u = z+sign(z(1))*norm(z)*e1; u = u/norm(u);
  13.   % update nonzero part of A by I-2uu^T
  14.   A(k:m,k:n) = A(k:m,k:n)-2*u*(u'*A(k:m,k:n));
  15.   % store u
  16.   p(k) = u(1);
  17.   A(k+1:m,k) = u(2:m-k+1);
  18. end
复制代码

12
ReneeBK 发表于 2016-1-29 11:56:41
  1. function coefs = lsfit (t, b, n)
  2. %
  3. % function coefs = lsfit (t, b, n)
  4. %
  5. % Construct coefficients of the polynomial of
  6. % degree at most n-1 that best fits data (t,b)

  7. t = t(:); b = b(:); % make sure t and b are column vectors
  8. m = length(t);

  9. % long and skinny A
  10. A = ones(m,n);
  11. for j=1:n-1
  12.   A(:,j+1) = A(:,j).*t;
  13. end

  14. % normal equations and solution
  15. B = A'*A; y = A'*b;
  16. coefs = B \ y;
复制代码

13
ReneeBK 发表于 2016-1-29 11:57:17
  1. function [x,nr] = lsol(b,AA,p)
  2. %
  3. % function [x,nr] = lsol(b,AA,p)
  4. %
  5. % Given the output AA and p of house, which contain Q and R of matrix A,
  6. % and given a right-hand-side vector b,  solve min || b - Ax ||.
  7. % Return also the norm of the residual, nr = ||r|| = ||b - Ax||.

  8. y = b(:); [m,n] = size(AA);
  9. % transform b
  10. for k=1:n
  11.   u = [p(k);AA(k+1:m,k)];
  12.   y(k:m) = y(k:m) - 2*u *(u'*y(k:m));
  13. end
  14. % form upper triangular R and solve
  15. R = triu(AA(1:n,:));
  16. x = R \ y(1:n); nr = norm(y(n+1:m));
复制代码

14
ReneeBK 发表于 2016-1-29 11:57:49
  1. function A=kron_conv_diff(beta,gamma,N)
  2. %
  3. % function A=kron_conv_diff(beta,gamma,N)

  4. ee=ones(N,1);
  5. a=4; b=-1-gamma; c=-1-beta; d=-1+beta; e=-1+gamma;
  6. t1=spdiags([c*ee,a*ee,d*ee],-1:1,N,N);
  7. t2=spdiags([b*ee,zeros(N,1),e*ee],-1:1,N,N);
  8. A=kron(speye(N),t1)+kron(t2,speye(N));
复制代码

15
ReneeBK 发表于 2016-1-29 11:58:24
  1. function [Q,T] = lanczos(A,Q,k)
  2. %
  3. % function [Q,T] = lanczos(A,Q,k)
  4. %

  5. % preallocate for speed
  6. alpha=zeros(k,1); beta=zeros(k,1);

  7. Q(:,1) = Q(:,1)/norm(Q(:,1));
  8. beta(1,1)=0;

  9. for j=1:k
  10.   w=A*Q(:,j);
  11.   if j>1
  12.     w=A*Q(:,j)-beta(j,1)*Q(:,j-1);
  13.   end
  14.   alpha(j,1)=Q(:,j)'*w;
  15.   w=w-alpha(j,1)*Q(:,j);
  16.   beta(j+1,1)=norm(w);

  17.   if abs(beta(j+1,1))<1e-10
  18.     disp('Zero beta --- returning.');
  19.     T=spdiags([beta(2:j+1) alpha(1:j) beta(1:j)],-1:1,j+1,j);
  20.     return
  21.   end
  22.   Q(:,j+1)=w/beta(j+1,1);
  23. end
  24. T=spdiags([beta(2:end) alpha beta(1:end-1)],-1:1,k+1,k);
复制代码

16
ReneeBK 发表于 2016-1-29 11:59:05
  1. function [x,iter,res] = pcgmg (A,b,x0,tol)
  2. %
  3. % function [x,iter,res] = pcgmg (A,b,x0,tol)
  4. %
  5. % CG with V-cycle preconditioning; assume x0=0

  6. N = sqrt(length(b));
  7. flevel = log2(N+1);
  8. tol2 = tol^2;
  9. x = x0;
  10. r = b - A*x0;
  11. h = poismg(A,r,x0,flevel);
  12. d = r'*h; bb = d;
  13. p = h;

  14. iter = 0;
  15. while d > tol2 * bb
  16.   do = d;
  17.   s = A*p;
  18.   alfa = d / (p'*s);
  19.   x = x + alfa*p;
  20.   r = r - alfa*s;
  21.   h = poismg(A,r,x0,flevel);
  22.   d = r'*h;
  23.   p = h + d/do*p;
  24.   iter = iter + 1;
  25.   res(iter) = norm(r);
  26. end
复制代码

17
maintenance 发表于 2016-1-29 13:06:32

7.

  1. function A=kron_conv_diff(beta,gamma,N)
  2. %
  3. % function A=kron_conv_diff(beta,gamma,N)

  4. ee=ones(N,1);
  5. a=4; b=-1-gamma; c=-1-beta; d=-1+beta; e=-1+gamma;
  6. t1=spdiags([c*ee,a*ee,d*ee],-1:1,N,N);
  7. t2=spdiags([b*ee,zeros(N,1),e*ee],-1:1,N,N);
  8. A=kron(speye(N),t1)+kron(t2,speye(N));
复制代码

18
ken191918 发表于 2019-3-7 16:14:18
function [A,p] = house(A)
% function [A,p] = house(A)
%
% perform QR decomposition using Householder reflections
% Transformations are of the form P_k = I - 2u_k(u_k^T), so
% store effecting vector u_k in p(k) + A(k+1:m,k). Assume m > n.

[m,n]=size(A); p = zeros(1,n);
for k = 1:n
  % define u of length = m-k+1
  z = A(k:m,k);
  e1 = [1; zeros(m-k,1)];
  u = z+sign(z(1))*norm(z)*e1; u = u/norm(u);
  % update nonzero part of A by I-2uu^T
  A(k:m,k:n) = A(k:m,k:n)-2*u*(u'*A(k:m,k:n));
  % store u
  p(k) = u(1);
  A(k+1:m,k) = u(2:m-k+1);
end

19
wiwjhcwt 发表于 2019-4-28 10:05:35

谢谢分享!~~!

20
simplecolor 发表于 2020-10-26 12:51:21
谢谢分享~~!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 07:20