Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2875

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
2.5 Mб
Скачать

% Выход- 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 (x4k4) +4 f (x4k3) +3f (x4k2) +2 f (x4k1) + f (x4k))С.

k 1

a

Составная формула Симпсона применяется на 4М подынтервалах

[x4k-4;x4k], где [a;b] = [хо;х] и 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 = yk3 + 43h (2 fk2 fk1 + 2 fk )

икорректора

yk+1 = yk 1 + h3 ( fk1 +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’

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]