MATLAB如何利用矩阵元素的通式创建符号矩阵
如果要创建一个如下形式的矩阵M:
M =
[ 1/(a + 1), 1/(a^2 + 4), 1/(a^3 + 9), 1/(a^4 + 16)]
[ 1/(a^5 + 25), 1/(a^6 + 36), 1/(a^7 + 49), 1/(a^8 + 64)]
[ 1/(a^9 + 81), 1/(a^10 + 100), 1/(a^11 + 121), 1/(a^12 + 144)]
[ 1/(a^13 + 169), 1/(a^14 + 196), 1/(a^15 + 225), 1/(a^16 + 256)]
[ 1/(a^17 + 289), 1/(a^18 + 324), 1/(a^19 + 361), 1/(a^20 + 400)]
[ 1/(a^21 + 441), 1/(a^22 + 484), 1/(a^23 + 529), 1/(a^24 + 576)]
如果一项一项地输入,太繁琐了。而此矩阵M还是有些规律的,处于第r行第c列的元素为:
M(r,c)=1/((4*r-4+c)^2+a^(4*r-4+c))
可以利用这个规律,创造一个函数来实现这个指令:
function M=symmat(row,column,f)
%symmat命令是利用通式来创建符号矩阵
%symmat(row,column,f)参数row、column分别是待创建
%符号矩阵的行数和列数,f则为矩阵元素的通式
for R=1:row
for C=1:column
c=sym(C);
r=sym(R);
M(R,C)=subs(sym(f));
end
end
在这个函数中,以“%”提示的内容是本函数的说明和帮助部分。通过这几行文字,可以知道该命令所需的参数及其含义,而且可以用help命令来单独查阅该命令的说明信息。
例题 利用矩阵元素的通式创建符号矩阵
>> syms x y c r
>> a=sin(c+(r-1)*2);
>> b=exp(r+(c-2)*3);
>> c=(c+(r-3)*4)*x+(r+(c-2)*5)*y;
>> A=symmat(3,3,a)
A =
[ sin(1), sin(2), sin(3)]
[ sin(3), sin(4), sin(5)]
[ sin(5), sin(6), sin(7)]
>> B=symmat(4,3,b)
B =
[ 1/exp(2), exp(1), exp(4)]
[ 1/exp(1), exp(2), exp(5)]
[ 1, exp(3), exp(6)]
[ exp(1), exp(4), exp(7)]
>> C=symmat(5,5,c)
C =
[ - 7*x - 4*y, y - 6*x, 6*y - 5*x, 11*y - 4*x, 16*y - 3*x]
[ - 3*x - 3*y, 2*y - 2*x, 7*y - x, 12*y, x + 17*y]
[ x - 2*y, 2*x + 3*y, 3*x + 8*y, 4*x + 13*y, 5*x + 18*y]
[ 5*x - y, 6*x + 4*y, 7*x + 9*y, 8*x + 14*y, 9*x + 19*y]
[ 9*x, 10*x + 5*y, 11*x + 10*y, 12*x + 15*y, 13*x + 20*y]
由于在函数symmat中,采用了M(R,C)=subs(sym(f))的方法,因此当f为字符参数时,symmat命令同样可以给出正确答案,例如下面的程序:
>> A=symmat(3,3,'sin(c+(r-1)*2)')
A =
[ sin(1), sin(2), sin(3)]
[ sin(3), sin(4), sin(5)]
[ sin(5), sin(6), sin(7)]
>> B=symmat(4,3,'exp(r+(c-2)*3)')
B =
[ 1/exp(2), exp(1), exp(4)]
[ 1/exp(1), exp(2), exp(5)]
[ 1, exp(3), exp(6)]
[ exp(1), exp(4), exp(7)]
>> C=symmat(5,5,'(c+(r-3)*4)*x+(r+(c-2)*5)*y')
C =
[ - 7*x - 4*y, y - 6*x, 6*y - 5*x, 11*y - 4*x, 16*y - 3*x]
[ - 3*x - 3*y, 2*y - 2*x, 7*y - x, 12*y, x + 17*y]
[ x - 2*y, 2*x + 3*y, 3*x + 8*y, 4*x + 13*y, 5*x + 18*y]
[ 5*x - y, 6*x + 4*y, 7*x + 9*y, 8*x + 14*y, 9*x + 19*y]
[ 9*x, 10*x + 5*y, 11*x + 10*y, 12*x + 15*y, 13*x + 20*y]