2875
.pdf% Выход- s - сумкаформулыСимпсона h=(b-а)/(2*М);
s1=0;
s2=0;
for k=l:M x=a+h*(2*k-l); sl-sl+feval(f,x);
end
for k-l:(M-l) x=a+h*2*k; s2=s2+feval(f,x);
end s=h*(feval(f,a)+feval(f,b)+4*sl+2*s2)/3;
Программа P28 (рекуррентная формула трапеций). Программа предназначена длявычислений поформуле трапеций
∫b f (x)dx ≈ h2 ∑2k =J1 ( f (xk −1) + f (xk ))
a
и последовательного увеличения числа подынтервалов интервала [а; b]. J-я итерация производит подсчет f(x) в 2J + 1 равноотстоящих точках.
function T=rctrap(f,a,b,n)
%Вход - f - подынтегральная функция вводится как
%строка 'f '
'% |
- а и b - верхний и нижний пределы интегрирования |
%- n - количество рекурсий
%Выход - Т -рекуррентная формула трапеций (значения)
М=1; h=b-a;
T=zeros(l,n+l);
T(l)=h*(feval(f,a)+feval(f,b))/2;
for j=l:n M=2*M; h=h/2; s=0;
for k=l:M/2 x=a+h*(2*k-l); s=s+feval(f,x);
end T(j+l)=T(j)/2+h*s;
end
Программа P29 (интегрирование по Ромбергу). Программа предназначена для нахождения приближения интеграла
b
∫ f (x)dx ≈R(J , J )
a
посредством генерирования таблицы приближений R( J, К) для J≥K и использует R(J+1, J+1) в качестве окончательного ответа. Приближения R(J, К) хранятся в специально созданной нижней треугольной матрице. Элементы R(J, 0) столбца 0 вычисляются путем последовательного использования формулы трапеций на 2J. подынтервалах интервала [a; b], затем R(J, К) вычисляется по формуле Ромберга. Элементы строки J равны
R(J,K)=R(J,K-1)+ R(J , K −1) −R(J −1, K −1) 4k −1
Для 1≤K≤J. Программа прекращает вычисления на (J+1)-й строке, когда R(J , J ) −R(J +1, J +1) <tol.
function [R, quad, err, h]=romber(f, a, b, n, tol)
%Вход - f - подынтегральнаяфункциявводитсякакстрока‘f ’
%- a иb - верхнийинижнийпределыинтегрирования
%- n - максимльноечислостроквтаблице
%- tol – допустимоеотклонение
%Выход– R – табличноезначениеРонберга
%- quad – значениеквадратуры
%- значениеквадратуры
%- err – ошибкаисключения
%- h - наименьшийшаг
M-1; h=b-a; err=l; j=0;
R=zeros(4,4);
R(l,l)*h*(feval(f,a)+feval(f,b))/2;
while((err>tol)&(J<n))|(J<4)
J=J+1;
h=h/2;
s=0;
for p=l:M x*a+h*(2*p-l); s=s+feval(f,x);
end
R(J-H.l)-R(J,l)/2+h*s; M=2*M;
for K=1:J R(J+1,K+1)=R(J+1,K)+(R(J+1,K)-R(J,K))/(4^K-1);
end err=abs(R(J,J)-R(J+l,K+1));
end quad=R(J+l,J+l);
Программа P30 ( формула Симпсона . Программа предназначена для нахождения приближения интеграла
b0 |
|
h |
|
|
∫ |
f (x)dx ≈ |
( f (a0) + f (b0) + F (c0)) |
||
|
||||
a0 |
3 |
|
по формуле Симпсона, когда C0 =(a0 +b0 )/2.
function Z=srule(f ,a0,b0,tol0)
%Вход - f - подынтегральная функция, вводимая как строка 'f '
%- аО и bО - верхний и нижний пределы интегрирования
%- tol0 - допустимое отклонение
%Выход- Z - вектор[а0 b0 S S2 err tol1] размера1x6
h=(Ь0-а0)/2; C=zeros(l,3);
C-feval(f,[a0 (a0+b0)/2 b0]); S=h*(C(l)+4*C(2)-t-C(3))/3; s2=s
toll=tolO;
err=tolO;
Z=[aO ЬО S S2 err toll];
Программа P31 (адаптивная квадратура, использующая формулу Симпсона). Программа предназначена для вычисления приближения интеграла
∫b f (x)dx =∑M= ( f (x4k−4) +4 f (x4k−3) +3f (x4k−2) +2 f (x4k−1) + f (x4k))С.
k 1
a
Составная формула Симпсона применяется на 4М подынтервалах
[x4k-4;x4k], где [a;b] = [хо;х4м] и xu-4+j = x4k-4 + jhk для каждого k = 1, ..., М и j=1,…,4.
function [SRmat,quad,err]=adapt(f,a,b,tol)
%Вход - f - подынтегральная функция, вводимая как строка 'f '
%- а и b - верхний и нижний пределы интегрирования
%- tol - допустимое отклонение
%ВыходSRmat - матрицазначений
%- quad - значение квадратуры
%- err - ошибка вычислений
%Инициализация значений
SRmat = zeros(30,6);
iterating=0;
done=l;
SRvec=zeros(l,6);
SRvec=srule(f,a,b,tol);
SRmat(1,1:6)=SRvec;
m=l;
state=iterating;
while(state==iterating)
n=m;
for j=n:-l:l
p = j;
SROvec=SRmat(p,:);
err=SROvec(5);
tol=SROvec(6); if (tol<=err)
%Деление интервала, рекуррентное применение
%формулыСимпсонаинахождениеошибки state=done;
SRlvec=SROvec;
SR2vec=SROvec;
a=SROvec(l);
b=SROvec(2);
C=(a+b)/2;
err=SROvec(5);
tol=SROvec(6);
to12=tol/2;
SRlvec=srule(f,a,c,tol2);
SR2vec=srule(f,c,b,tol2); err=abs(SROvec(3)-SRlvec(3)-SR2vec(3))/10; % Критерийточности
if (err<tol) SRmat(p,:)=SROvec;
SRmat(p,4)=SRlvec(3)+SR2vec(3);
SRmat(p,5)=err;
else
SRmat(p+1:m+l,:)=SRmat(p:m,:);
m=m+l;
SRmat(p,:)=SRlvec;
SRmat(p+1,:)=SR2vec;
state=iterating; end
end
end
end quad=sum(SRmat(:,4)); err=smn(abs(SRmat(:,5))); SRmat=SRmat(1:m,1:6);
Программа P32 (квадратура Гаусса-Лежандра). Программа предназначена для нахождения приближения интеграла
b |
|
∫f (x)dx ≈b −a ∑kN=1ωN ,k f (tN ,k ) |
|
a |
2 |
|
по значениям функции f(x) в N равноотстоящих точках
{ tN ,k }kN=1 . Выполним замену переменных |
|
|
|||||||||
t= |
a +b |
|
+ |
a −b |
x |
и |
dt= |
b −a |
dx . |
|
|
|
|
|
|
|
|||||||
2 |
|
2 |
|
|
2 |
|
|
|
|||
Абсциссы{ xN ,k }kN=1 |
|
и |
соответствующие |
им |
веса |
N
{ ωN ,k }k =1 нужно брать из заранее введенной таблицы.
function quad=gauss(f,a,b,A,W)
%Вход - f - подынтегральная функция, вводимая как строка ' f '
%- а и Ь - верхний и нижний пределы интегрирования
%- А - вектор абсцисс размера 1 х N
%- W - вектор весов размера I х N
%Выходquad - значениеквадратуры
H=length(A);
T=zeros(l,N);
T*( (a+b)/2)+( (b-a)/2) *A;
quad= ((b-a)/2)*sum(W.*feval(f ,T));
Программа P33 (метод Эйлера). Программа предназначена для решения задачи Коши у' = f(t, у) с у (а) = уо на интервале [а; b]
путем вычисления Vk+i = Уk + hf(tk, yk) для k = 0, 1, ..., M - 1.
function E=euler(f,a,b,ya,M)
%Вход - f - функция, вводимая, как строка 'f '
%- а и Ь - левая и правая крайние точки
%- уа - начальное условие у (а)
%- М - число шагов
%Выход - Е=[Т' У], где Т - вектор абсцисс и
%Y - вектор ординат
h=(b-a)/M; T=zeros(l,M+l); Y=zeros(l,M+l); T=a:h:b; Y(l)=ya;
for j=l:M Y(j+l)=Y(j)+h*feval(f,T(j),Y(j));
end E=[T’Y’];
Программа P34 (метод Гюна). Программа предназначена для решения задачи Коши у' = f(t,y) с у (а)= уо на интервале [а; b] с помощью вычислений
yk+1 = yk +h2 ( f (tk , yk) + f (tk+1, yk + f (tk , yk))) для k=0,1,.., M-1.
function H=heun(f,a,b,ya,M)
%Вход - f - функция, вводимая, как строка 'f '
%- аиb - лeвая иправаякрайние точки
%- уаначальноеусловиеу(а)
%- М - число шагов
%Выход- H=[T' Y'] , гдеТвекторабсцисси
%Y - вектор ординат
h=(b-a)/M; T=zeros(l,M+l);
Y=zeros(l,M+l);
T=a:h:b;
Y(l)=ya; for j=l:M
kl=feval(f,T(j),Y(j));
k2=feval(f,T(j+l),Y(j)+h*kl); Y(j+l)=Y(j)+(h/2)*(kl+k2);
end H=[T'Y'];
Программа P35 (метод Тейлора порядка 4). Программа предназначена для нахождения приближенного решения задачи Коши у' = f(t, у) с у (а) = уо на интервале [а; b]. Она вычисляет производные у", у"' и у"" и использует полином Тейлора на каждом шаге.
function T4=taylor(df,a,b,ya,M)
% |
Вход |
- df=[y' у" у'" у""] вводится, как строка 'df ', |
% |
|
где y'=f(t,y) |
'% |
|
- а и b - левая и правая крайние точки |
'% |
|
- уа - начальное условие у (а) |
'% |
|
- М - число шагов |
%Выход |
- Т4=[Т' Y'], где Т - вектор абсцисс и |
|
% |
|
Y - вектор ординат |
h=(b-a)/M; T=zeros(l,M+l); Y=zeros(l,M+l);
T=a:h:b;
Y(l)=ya;
for j=l:M
D=feval(df,T(j),Y(j));
Y(j+l)=Y(j)+h*(D(l)+h*(D(2)/2+h*(D(3)/6+h*D(4)/24)));
end
T4=[T' Y'];
Программа P36 (метод Рунге-Кутта порядка 4). Программа предназначена для приближенного решения задачи Коши y’=f(t,y) c f(a) = y0 на интервале [о; b] с применением формулы
yk +1 = yk + h6 (k1 +2k2 +3k3 +k4) .
function R=rk4(f,a,b,ya,M)
%Вход- f - функция, вводимаякакстрока'f'
%- а и b - левая и праваякрайние точки
%- уаначальноеусловиеу(а)
%- М - число шагов
%Выход- R=[T' Y'], гдеТвекторабсцисс
%и Y - вектор ординат
h=(b-a)/M; T=zeros(l,M+l); Y=zeros(l,M+l); T=a:h:b; Y(l)=ya;
for j-l:M kl=h*feval(f,T(j),Y(j));
k2=h*fevai(f,T(j)+h/2,Y(j)+kl/2);
k3=h*feval(f,T(j)+h/2,Y(j)+k2/2);
k4=h*feval(f,T(j)+h,Y(j)+k3);
Y(j+l)=Y(j)+(kl+2*k2+2*k3+k4)/6; end
R=[T' Y'];
Программа P37 (метод Рунге-Кутта-Фехлберга). Программа предназначена для приближенного решения задачи Коши у1 = f(t, у) с у(а) = уо на интервале [а; b] методом с заданными величиной ошибкиидлиной шага.
function R=rkf45(f,a,b,ya,M,tol)
%Вход - f - функция, вводимая, как строка 'f '
%- а и b - левая и правая крайние точки
%- уа - начальное условие у (а)
%- М - число шагов
%- tol - допустимое значение
%Выход- R=[T' Y'], гдеТлектор абсцисс
%и Y - вектор ординат
%Вводкоэффициентов, необходимыхдлявычислениязначений
%поформулам
а2=1/4;bn2=1/4;аЗ=3/8;b3=3/32;сЗ=9/32;а4=12/13; b4=1932/2197; с4=-7200/2197; d4=7296/2197; а5=1; b5=439/216; с5=-8; d5=3680/513; е5=-845/4104; а6=1/2; b6=-8/27;сб=2;d6=-3544/2565;е6=1859/4104; f6=-11/40;rl=l/360;rЗ=-128/4275;r4=-2197/75240;r5*1/50; r6=2/55;n1=25/216;nЗ=1408/2565;n4=2197/4104;n5=-1/5; big=le15;
h=(b-a)/M; hmin=h/64; hmax=64*h; maxl=200; Y(l)=ya; T(l)=a;
J =1;
br=b-0.00001*abs(b); while (T(j)<b)
if ((T(j)+h)>br) h=b-T(j);
end
507
% Вычисление значений поформулам kl=h*feval(f,T(j),Y(j)); y2=Y(j)+b2*kl;
if big<abs(y2)break,end k2=h*feval(f,T(j)+a2*h,y2); y3=Y(j)+b3*kl+c3*k2;
if big<abs(y3)break, end
k3=h*feval(f,T(j)+a3*h,y3);
y4=Y(j)+b4*kl+c4*k2+d4*k3; if big<abs(y4)break,
end
k4=h*feval(f ,Y(j)+a4*h,y4); y5=Y(j)+b5*kl+c5*k2+d5*k3+e5*k4; if big<abs(y5)break,
end k5=h*feval(f,T(j)+a5*h,y5);
y6=Y(j)+b6*kl+c6*k2+d6*k3+e6*k4+f6*k5; if big<abs(y6)break,
end k6=h*feval(f,Y(j)+a6*n,y6);
err=abs(rl*kl+r3*k3+r4*k4+r5*k5+r6*k6); ynew=Y(j)+nl*kl+n3*k3+n4*k4+n5*k5; % Заданиевеличиныошибкиидлинышагаif((err<tol)|(h<2*hmin))
Y(j+l)=ynew; if((T(j)+h)>br) T(j+l)=b: else
T(j+l)=T(j)+h; end
j = j + 1;
end
if (err=0) s=0;else
s=0.84*(tol*h/err)^(0.25); end
if((s<0.75)&(h>2*hmin))
h=h/2; end
if((s>1.50)ft(2*h<hmax)) h=2*h; end if((big<abs(Y(j)))|(maxi==j)),break,end M=j;
if (b>T(j)) M=j+1;
else.
. M=j; end
end R=[T' Y'];
Программа P38 (метод Адамса-Бешфорса-Маултона). Программа предназначена для приближенного решения задачи Коши у' = f(t,y) су(а) = уо наинтервале[а; b] сиспользованиемпрогноза
Pk+1 =yk +h/ 24(-9fk-з + 37fk-2 - 59fk-1 + 55fk)
и корректора
yk+1= yk + h/24(fk-2 -5fk-1+ 19fk +9fk+1)
function A=abm(f,T,Y)
%Вход - f - функция, вводимая как строка 'f '
%- Т - вектор абсцисс
%- Y - вектор ординат
%Замечание. Первые четыре координаты векторов Т в Y
%должны исходныезначения, полученныеметодомРК4
%Выход - А=[Т' Y'], где Т - вектор абсцисс и
%Y - вектор ординат
n=length(T);
if n<5,break,end; F=zeros(l,4); F=feval(f,T(l:4),Y(l:4)); h=T(2)-T(l);
for k=4:n-l % Прогноз
p=Y(k)+(h/24)*(F*[-9 37 -59 55]'); T(k+l)=T(l)+h*k;
F=CF(2) F(3) F(4) feval(f,T(k+l),p)]; % Корректор
Y(k+l)=Y(k)+(h/24)*(F*[l -5 19 9]'); F(4)=feval(f,T(k+l),Y(k+l));
end A=[T' Y'];
Программа P39 (метод Милна-Симпсона). Программа предназначена для приближенного решения задачи Коши у' = f(t,y),у(a)= уо на интервале [а; b]сиспользованиемпрогноза
Pk+1 = yk−3 + 43h (2 fk−2 − fk−1 + 2 fk )
икорректора
yk+1 = yk −1 + h3 ( fk−1 +4 fk + fk +1).
function M=milne(f,T,Y)
%Вход - f - функция, вводимая как строка 'f '
%- Т - вектор абсцисс
%- Y - вектор ординат
%Замечание. Первые четыре координаты векторов Т и Y должны
%иметь исходные значения, полученные методом РК4
%Выход - М=[Т' Y'], где Т - вектор абсцисс и
%Y - вектор ординат
n=length(T);
if n<5,break,end; F=zeros(l,4); F=feval(f,T(l:4),Y(l:4)); h=T(2)-T(l);
pold=0; cold=0;
for k=4:n-l % Прогноз
pnew=Y(k-3)+(4*h/3)*(F(2:4)*[2 -1 2]'); % Управляющий параметр pmod=pnew+112*(cold-pold)/121; T(k+l)=T(l)+h*k;
F=[F(2) F(3) F(4) feval(f,T(k+l),pmod)];
% Корректор
cnew=(9*Y(k)-Y(k-2)+3*h*(F(2:4)*[-l 2 l]'))/8; Y(k+l)=cnew+9*(pnew-cnew)/121;
pold=pnew;
cold=cnew;
F(4)=feval(f ,T(k+l) ,Y(k+l)) ; end
H=[T' Y'];
Программа P40 (метод Рунге-Кутта порядка N = 4 для систем).
Программа предназначена для получения приближенного решения системы дифференциальных уравнений
x((t) = f l ( t ,x l (t), ... ,x n ( t ) )
...
x' n ( t ) = f n ( t , x l (t), ... ,x n ( t ) )
с x 1 (a) =a 1 , ... , x n (a) = a N на интервале [a; b] .
function [T,Z]=rks4(F,a,b,Za,M)
%Вход - F - система, вводимая как строка 'F' '% - а и b - крайние точки интервала
%- Za=[x(a) у (а)] - начальные условия
%- М - число шагов
%Выход - Т - вектор шагов
%Z=[xl(t).. .xn(t)] , где xk(t) - приближение
%к k-й зависимой переменной
h=(b-a)/M; T=zeros(l,M+l);
Z=zeros(M+l,length(Za));
T=a:h:b;
Z(l,:)-Za:
for j=l:M kl=h*feval(F,T(j),Z(j,:));
k2=h*feval(F,T(j)+h/2,Z(j,:)+kl/2);
k3=h*fevel(F,T(j)+h/2,Z(j,:)+k2/2); k4=h*f eval(F,T(j)+h,Z(j , :)+k3) ; Z(j+l, :)=Z(j,:)+(kl+2*k2+2*k3+k4)/6;
end
Программа P41 (линейный метод пристрелки). Программа предназначена для решения краевой задачи х" = p(t)x'(t) + q(t)x(t) + r(t) с х(а) = α и х(b) = β на интервале [а; b] методом Рунге-Кутта порядка N = 4.
function L=linsht(Fl,F2,a,b,alpha,beta,M)
%Вход - F1 и F2 - системы уравнений первого
порядка,
%соответствующих задачам Коши (9) и (10);
% |
вводятся как строки 'Fl', 'F2' |
% |
- а и b крайние - точки интервала |
%-alpha = x(a) и beta = x(b); граничные условия
%- M - число шагов
%Выход - L = [T’ X], где T’ – вектор абсцисс размера (M+1)x1
%и X - вектор ординат размера (M+1)x1
%решение системы F1
Za = [alpha, 0]
[T, Z] = rks4(F1, a, b, Za, M); U = Z(:, 1);
%Решение системы F2 Za = [0,1];
[T, Z] = rks4(F2, a, b, Za, M0; V = Z(:, 1);
%Вычисление решения краквой задачи
X = U + (beta – U(M+1)*V/V(M+1);
L = [T’, X];
Программа P42 (трехдиагональные системы). Программа предназначена для решения трехдиагональной системы СХ = В, где С — трехдиагональная матрица.
function X=trisys(A,D,C,B)
%Вход - А - поддиагональ матрицы коэффициентов
%- D - главная диагональ матрицы коэффициентов
%- С - наддиагональ матрицы коэффициентов
%- В - вектор постоянных линейной системы
%Выход- X - вектор решений
N=length(B); for k=2:N
mult=A(k-l)/D(k-l); D(k)*D(k)-mult*C(k-l); B(k)=B(k)-nult*B(k-l);
end X(N)=B(N)/D(N); for k= N-l:-l:l
X(k)=(B(k)-C(k)*X(k+l))/D(k); end
Программа P43 (метод конечных разностей). Программа предназначена для приближенного решения краевой задачи
х" = p(i)x'(t) +q(t)x(t) + r(t) с граничными условиями х(а) = α и
x(b)=β на интервале [a; b] методом конечных разностей порядка
O(h2)
function F=findiff(p,q,r,a,b,alpha,beta,N)
%Вход - p,q и r - коэффициенты функций из (1)
%вводят как строки; 'p'.'q', Jr'
%- а и b - левая и правая крайние точки
%- alpha=x(a) и beta=x(b)
%- N - число тагов
%Выход- F*=[T' X'], гдеТ' - вектор абсцисс сразмера1xN
%и 'X' - вектор ординат размера IxN
%Инициализациявекторовишагаh
T=zeros(l,N+l); X=zeros(l,N-l); Va=zeros(l,N-2); Vb=zeros(l,N-l); Vc=zeros(l,N-2); Vd=zeros(l,N-l); h=(b-a)/N;
%ВычислениевекторапостоянныхВвАХ=В Vt=a+h:h:a+h*(N-l);
Vb=-h^2*feval(r,Vt); Vb(l)=Vb(l)+(l+h/2*feval(p,Vt(l)))*alpha; . Vb(N-l)=Vb(N-l)+(l-h/2*feval(p,Vt(N-l)))*beta;
%ВычислениеглавнойдиагоналиАвАХ=В Vd=2+h^2*feval(q,Vt);
%ВычислениенаддиагоналиАвАХ=В Vta=Vt(l,2:1N-1); Va=-l-h/2*feval(p.Vta);
%вычислениеподдиагоналиАвАХ=В Vtc=Vt(l,l:N-2); Vc=-l+h/2*feval(p,Vtc);
%Решение АХ=В с использованием trisys X=trisys(Va,Vd,Vc,Vb);
T=[a,Vt,b]; Х=[alpha,X,beta]; F=[T' X'];
Программа P44 (решение методом конечных разностей для волнового уравнения). Программа предназначена для приближенного решения уравне-
ния utt(x,t) = c2uxx(x,t) на R = {(x,t) : О ≤ х ≤ а, О ≤t ≤b} с u(0,t) = 0, и(а, t) = 0 для 0 ≤t ≤ b и и(х, 0) = f(x), ut(х, 0) = g(х), 0 ≤х≤а.
function U = finedif(f,g,a,b,c,n,m)
%Вход - f=u(x,0) вводится, как строка 'f'
%- g=ut(x,0) вводится, как строка 'g'
%- а и Ь - правые крайние точки интервалов [0,а] и [0,b]
%- с - постоянная в волновом уравнении
%-n и m- число точек решетки на [0,а] и [0,b]
%Выход - U - матрица решения
%Инициализация параметров и U
h=a/(n-l); k=b/(m-l); r=c*k/h; r2=r^2; r22=r^2/2; sl=l-r^2; s2=2-2*r^2;
U=zeros(n,m);
% Вычисление первого и второго рядов for i=2:n-l
U(i,l)=feval(f,h*(i-l)); U(i,2)=sl*feval(f,h*(i-l))+k*feval(g,h*(i-l)) ...
+r22*(feval(f,h*i)+feval(f,h*(i-2)));
end
% Вычисление остальных рядов U for j=3:m,
for i=2:(n-l),
U(i,j) = s2*U(i,j-l)+r2*(U(i-l,j-l)+U(i+l,j-l))-U(i,j-2); end
end U=U';
Программа P45 (метод прямой разности для уравнения теплопровод-
ности). Программа предназначена для получения приближенного
решения ut(x,t) = (cuxx(x,t) t) на R = {(x,t) : 0 ≤ х ≤ a,Q ≤t ≤Ь} с u(x,0) = f(х) для 0 ≤ х ≤а и u(0,t) = c1, u(a, t) = c1, 0 ≤t ≤b.
function U=forwdif(f,cl,c2,a,b,c,n,m)
%Вход - f=u(x,0) вводится, как строка 'f'
%- cl=u(0,t) и c2=u(a,t)
%- а и b - правые точки интервалов [0,а] и [0,b]
%- с - постоянная уравнения теплопроводности
%- n и m - числоточекрешеткинаинтервалах [0,а] и[0,b]
%Выход- U - матрицарешений
%ИнициализацияпараметровиматрицыU
h=a/(n-l); k=b/(m-l); r=c2*k/h^2; s=l2*r; U=zeros(n,m);
%Граничныеусловия
U(1, 1: m ) = c1; U(n , 1 : m ) = c 2;
%Генерированиеостальныхрядов
U(2 : n – 1, 1 ) = feval(f, h : h ; (n-2)*h ) ‘ ;
%Генерированиеостальныхрядов U for j = 2 : m
for I = 2 : n – 1
U(I, j) = s*U(I, j-1)+r*(U(i-1, j-1) + U(i+1, j-1)); end
end
U = U ‘ ;
Программа P46 (метод Кранка-Николсона для уравнения теплопроводности). Программа предназначена для приближенного решенияуравненияut(x,t) = <cuxx(x,t) на R - {(x,t) : О <= х <= а,0 <= t <= 6} с и(х,0) - f(x) для 0 < =х < =а и u(0, t) — с1, и(а, t) = c2, 0 < t < b.
function U=crnich(f,cl,c2,a,b,c,n,m)
%Вход - f=u(x,0) вводится как строка 'f '
%- cl=u(0,t) и c2=u(a,t)
%- а и b - правые точки интервалов [0, а] и [0,b]
%- с - постоянная уравнения теплопроводности
%-n и m - число точек решетки на интервалах [0,а] и [0,b]
%Выход - U - матрица решений
% Инициализация параметров и U h=a/(n-l);
k=b/(m-l); r=c^2*k/h^2; sl=2+2/r; s2=2/r-2; U=zeros(n,m);
%Граничные условия U(l,l:m)=cl; U(n,l:m)=c2;
%Генерирование первого ряда
U(2:n-l,l)=feval(f,h:h:(n-2)*h)';
%формирование диагональных и не лежащих на диагонали
%элементов А, вектора постоянных В
%и решение трехдиагональной системы АХ=В
Vd(l,l:n)=sl*oneS(l,n);
Vd(l)=l;
Vd(n)=l;
Va=-ones(l,n-l);
Va(n-l)=0;
Vc=-ones(l,n-l); Vc(l)=0; Vb(l)=cl; Vb(n)=c2;
for j=2:m
for i=2:n-l
Vb(i)=U(i-1, j-1)+U(i+1, j-1)+s2*U(I, j-1); end
X=trisys(Va, Vd, Vb); U(1:n, j)=X’
end U=U’