📄 deriv2.m
字号:
function [A,b,x] = deriv2(n,example)%DERIV2 Test problem: computation of the second derivative.%% [A,b,x] = deriv2(n,example)%% This is a mildly ill-posed problem. It is a discretization of a% first kind Fredholm integral equation whose kernel K is the% Green's function for the second derivative:% K(s,t) = | s(t-1) , s < t .% | t(s-1) , s >= t% Both integration intervals are [0,1], and as right-hand side g% and correspond solution f one can choose between the following:% example = 1 : g(s) = (s^3 - s)/6 , f(t) = t% example = 2 : g(s) = exp(s) + (1-e)s - 1 , f(t) = exp(t)% example = 3 : g(s) = | (4s^3 - 3s)/24 , s < 0.5% | (-4s^3 + 12s^2 - 9s + 1)/24 , s >= 0.5% f(t) = | t , t < 0.5% | 1-t , t >= 0.5% References. The first two examples are from L. M. Delves & J. L.% Mohamed, "Computational Methods for Integral Equations", Cambridge% University Press, 1985; p. 310. The third example is from A. K.% Louis and P. Maass, "A mollifier method for linear operator equations% of the first kind", Inverse Problems 6 (1990), 427-440.% Discretized by the Galerkin method with orthonormal box functions.% Per Christian Hansen, IMM, 04/21/97.% Initialization.if (nargin==1), example = 1; endh = 1/n; sqh = sqrt(h); h32 = h*sqh; h2 = h^2; sqhi = 1/sqh;t = 2/3; A = zeros(n,n);% Compute the matrix A.for i=1:n A(i,i) = h2*((i^2 - i + 0.25)*h - (i - t)); for j=1:i-1 A(i,j) = h2*(j-0.5)*((i-0.5)*h-1); endendA = A + tril(A,-1)';% Compute the right-hand side vector b.if (nargout>1) b = zeros(n,1); if (example==1) for i=1:n b(i) = h32*(i-0.5)*((i^2 + (i-1)^2)*h2/2 - 1)/6; end elseif (example==2) ee = 1 - exp(1); for i=1:n b(i) = sqhi*(exp(i*h) - exp((i-1)*h) + ee*(i-0.5)*h2 - h); end elseif (example==3) if (rem(n,2)~=0), error('Order n must be even'), else for i=1:n/2 s12 = (i*h)^2; s22 = ((i-1)*h)^2; b(i) = sqhi*(s12 + s22 - 1.5)*(s12 - s22)/24; end for i=n/2+1:n s1 = i*h; s12 = s1^2; s2 = (i-1)*h; s22 = s2^2; b(i) = sqhi*(-(s12+s22)*(s12-s22) + 4*(s1^3 - s2^3) - ... 4.5*(s12 - s22) + h)/24; end end else error('Illegal value of example') endend% Compute the solution vector x.if (nargout==3) x = zeros(n,1); if (example==1) for i=1:n, x(i) = h32*(i-0.5); end elseif(example==2) for i=1:n, x(i) = sqhi*(exp(i*h) - exp((i-1)*h)); end else for i=1:n/2, x(i) = sqhi*((i*h)^2 - ((i-1)*h)^2)/2; end for i=n/2+1:n, x(i) = sqhi*(h - ((i*h)^2 - ((i-1)*h)^2)/2); end endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -