Самоучитель Matlab
function s = u2(A,x,y,t,k) s=0;
Nmax=length(A); for m=1:Nmax
for n=1:Nmax s=s+A(m,n)*cos(pi*t*sqrt(m^2+n^2*k^2)).*sin(pi*m*x).*sin(pi*n*y); end
end end
Функцией u2() вычисляется ряд для решения дифференциального уравнения. Особенность функции, по сравнению с предыдущим случаем, состоит в том, что, помимо пространственных переменных x и y, времени t и параметра k, первым аргументом функции передается список A коэффициентов разложения функции начального профиля по базисным функциям. Количество слагаемых в ряде определяется количеством элементов (коэффициентов) в списке A. Коэффициенты этого списка вычисляются с помощью другой функции, которая называется Coefs(). Ее код приведен ниже:
function A=Coefs(f) Nmax=30; A=zeros(Nmax,Nmax); for m=1:Nmax
for n=1:Nmax F=@(x,y)(f(x,y).*sin(pi*m*x).*sin(pi*n*y)); A(m,n)=4*quad2d(F,0,1,0,1);
end
end end
Аргумент у функции один – указатель f на функцию, определяющую профиль начального распределения мембраны. Предполагается, что это функция двух переменных. В теле функции Coefs() определяется переменная Nmax. Ее значение в данном случае равно 100, и это количество слагаемых ряда (по каждой из индексных переменных). Командой A=zeros(Nmax,Nmax) определяется нулевая квадратная матрица, в которую будут заноситься вычисленные коэффициенты разложения. В теле вложенных операторов цикла на основе указателя f командой F=@(x,y)(f(x,y).*sin(pi*m*x).*sin(pi*n*y))
определяется подынтегральная функция, на основе которой вычисляются коэффициенты ряда. Коэффициенты вычисляются командой A(m,n)=4*quad2d(F,0,1,0,1). В этой команде использована функция quad2d(), предназначенная для вычисления интегралов по плоской области. Первым аргументом функции передается указатель на подын-