Advertisement
codisinmyvines

task31konuhov

Jan 14th, 2023
993
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.96 KB | None | 0 0
  1. function [y] = progonka(N,hx,x,K,q_a,q_b,f)
  2.     A = zeros(1,N);
  3.     C = zeros(1,N+1);
  4.     B = zeros(1,N);
  5.     C(1)=1;
  6.     for i=1:N-1
  7.         A(i)=K(x(i+1)-hx/2);
  8.         B(i+1)=K(x(i+1)+hx/2);
  9.         C(i+1)=(A(i)+B(i+1));
  10.     end
  11.     A(N)=0;
  12.     C(N+1)=1;
  13.     F = zeros(1,N+1);
  14.     F(1)=q_a;
  15.     for i=2:N
  16.         F(i)=hx^2*f(x(i));
  17.     end
  18.     F(N+1)=q_b;
  19.     y=zeros(1,N+1);
  20.     v1 = F(1)/C(1);
  21.     v2 = F(N+1)/C(N+1);
  22.     k1=B(1)/C(1);
  23.     k2=A(N)/C(N+1);
  24.     alpha = zeros(1,N);
  25.     beta = zeros(1,N);
  26.     alpha(1)=k1;
  27. %     beta(1)=k2;
  28.     beta(1)=v1;
  29.     for i=2:N
  30.         alpha(i)=B(i)/(C(i)-A(i-1)*alpha(i-1));
  31.         beta(i)=(A(i-1)*beta(i-1)+F(i))/(C(i)-A(i-1)*alpha(i-1));
  32.     end
  33.     y(N+1)=(v2+k2*beta(N))/(1-k2*alpha(N));
  34.     m=N;
  35.     while(m>=1)
  36.         y(m)=alpha(m)*y(m+1)+beta(m);
  37.         m=m-1;
  38.     end
  39. end
  40.  
  41.  
  42. %%%%%%%%%%%%%%%%%%%
  43. format long
  44. a=0; b=pi; q_a=0; q_b=1;
  45. c1=(exp(-2*pi)-exp(-pi))./(2*(1-exp(-pi))); c2=c1+1;
  46. u=@(x) exp(-x).*(-c1+sin(x)./2-cos(x)./2)-exp(-2*x)./2+c2;
  47. f=@(x) exp(-x)+sin(x);
  48. K=@(x) exp(x);
  49. N=100;
  50. hx=(b-a)/N;
  51. x=zeros(1,N+1);
  52. x(1)=a;
  53. for i=1:N
  54.     x(i+1)=x(i)+hx;
  55. end
  56. y = progonka(N,hx,x,K,q_a,q_b,f);
  57. % plot(x,u(x),'o')
  58. % hold on
  59. % plot(x,y,'r')
  60. % xlabel('x')
  61. % ylabel('U(x),y(x)')
  62. % legend('Точн. решение','Числен. решение')
  63. % title('Погрешность:',norm(u(x)-y,inf))
  64.  
  65. Amplit = 0.05;
  66. w = 100.5;
  67. f_dtb = @(x) f(x)+Amplit*sin(w*x);
  68.  
  69. f2 = figure;
  70. plot(x,f(x))
  71. hold on
  72. plot(x,f_dtb(x),'g')
  73.  
  74.  
  75. Ampl = 0.05:-0.01:-0.05;
  76. w = 200.5;
  77. psi = zeros(1,numel(Ampl));
  78. for i=1:numel(Ampl)
  79.    y_dtb = progonka(N,hx,x,K,q_a,q_b,@(x) f(x)+Ampl(i)*sin(w*x));
  80.    psi(i) = norm(y-y_dtb,inf);
  81. end
  82. f1 = figure;
  83. plot(Ampl,psi);
  84. xlabel('A')
  85. ylabel('ψ')
  86.  
  87. % plot(x,f(x))
  88. % hold on
  89. % plot(x,f_dtb(x),'g')
  90.  
  91. % hold on
  92. % plot(x,f_dtb(x),'r')
  93. % f2 = figure;
  94. % loglog([10^(-1) 10^(-2) 10^(-3)],[3.89*10^(-3) 3.91*10^(-5) 3.91*10^(-7)])
  95. % xlabel('h')
  96. % ylabel('ѱ')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement