haiqsim 发表于 2009-3-18 11:13:32

解线性方程组出错,如何改正

本帖最后由 ljelly 于 2009-3-18 13:25 编辑

在解线性符号方程组时,出现如下错误提示:
??? Error using ==> maple
Error, (in expand/bigprod) object too large
Error in ==> F:\ProgramFiles\MATLAB65\toolbox\symbolic\@sym\mldivide.m
On line 25==>    X = maple('linsolve',char(A),char(B),'''_rank''');
Error in ==> F:\ProgramFiles\MATLAB65\toolbox\symbolic\linsolve.m
On line 8==> X = sym(A)\sym(B);

我是新手,不太懂,哪位大虾遇到过这种情况能否帮忙解释一下,可能是什么地方出现问题了呢?
原来要解的未知数有160个,是确定待定系数的问题,我后来改成求10个系数,还是出错,请大侠指教啊!
小弟先谢啦

messenger 发表于 2009-3-18 12:06:06

如果你不把程序贴上来,从提示上很难准确看出是出了什么问题。

haiqsim 发表于 2009-3-18 14:41:36

既然如此,那就麻烦达人帮忙看看了,本来是觉得程序有点长,而且有几个自定义的函数文件(下面是直接调用的),
% 先求解160×160的系数矩阵,求得180个系数,即A1~A80和=C1~C80

%(1)利用symat和diag两个函数创建对角系数矩阵
syms m n a c r v D q h eta;
b=a;v=0.3;ksi=a/2;h=0.3*a;
i=1:5;                                                       % 设置取项项数,取80项
m=2*i-1;n=2*i-1;                                                % m取80项,m=1,3,5,...;n=1,即准备创建80×1的矩阵(列向量)
V11=symat(5,1,p11(c,r,a,b,q,h,v))         % 用symat函数,创建80×1的矩阵
Matr11=diag(V11)                           % 用diag函数将列向量V1转化为主对角矩阵Matr11(An的系数矩阵)
V22=symat(5,1,p22(r,c,a,b,q,h,v))         % 用symat函数,创建80×1的矩阵
Matr22=diag(V22)                           % 用diag函数将列向量V1转化为主对角矩阵Matr22(Cm的系数矩阵)
V13=symat(5,1,p13(c,r,a,b,q,h,v))         % 用symat函数,创建80×1的矩阵(方程右端非齐次项)
V23=symat(5,1,p23(r,c,a,b,q,h,v))         % 用symat函数,创建80×1的矩阵(方程右端非齐次项)

%(2)利用事先定义的矩阵赋值函数symat,通过矩阵元素的通式为矩阵元素赋值
% Matr12=symat(80,80,p12(c,r,a,b,h,v))       % 用symat函数,创建80×80的矩阵Matr12(Cm的系数矩阵)
% V13=symat(80,1,p13(c,r,a,b,h,v))         % 用symat函数,创建80×1的矩阵(方程右端非齐次项)
% Matr21=symat(80,80,p21(r,c,a,b,h,v))       % 用symat函数,创建80×80的矩阵Matr21(An的系数矩阵)
% V23=symat(80,1,p23(r,c,a,b,h,v))         % 用symat函数,创建80×1的矩阵(方程右端非齐次项)

% 还是用for循环求多项矩阵,ms比symat要快些
for i=1:5
    for j=1:5
      k=2*i-1;l=2*j-1;
      Matr12(i,j)=p12(l,k,a,b,q,h,v)
      Matr21(i,j)=p21(k,l,a,b,q,h,v)
    end
end

%(3)组装总的系数矩阵
L1=vpa(,4)
L2=vpa(,4)
L =vpa(,4)
R=vpa(,4)

%(4)求解160个系数
s=vpa(linsolve(L,R),4)

%(5)求各种板厚x=a/2截面处挠度沿y向变化的数值解
sum1=0;sum2=0;sum3=0;sum4=0;sum5=0;
for i=1:5;
   m=2*i-1; n=2*i-1; j=i+5;
   An(n)=s(i,1);
   Cm(m)=s(j,1);
   f1=4*q/D/a*(1+1/2/cosh(alpham(m,a)*b/2)*(alpham(m,a)*(eta-b/2)*sinh(alpham(m,a)*(eta-b/2))-(2+alpham(m,a)*b/2*tanh(alpham(m,a)*b/2))*cosh(alpham(m,a)*(eta-b/2)))+...
      (1-cosh(alpham(m,a)*(eta-b/2))/cosh(alpham(m,a)*b/2))*h^2/10*(2-v)/(1-v)*alpham(m,a)^2)*sin(alpham(m,a)*ksi)/alpham(m,a)^5;
   f2=1/2/D*(betan(n,b)*a*coth(betan(n,b)*a)-betan(n,b)*(a-ksi)*coth(betan(n,b)*(a-ksi)))*sinh(betan(n,b)*(a-ksi))/betan(n,b)^2/sinh(betan(n,b)*a)*sin(betan(n,b)*eta);
   f3=1/2/D*(betan(n,b)*a*coth(betan(n,b)*a)-betan(n,b)*ksi*coth(betan(n,b)*ksi))*sinh(betan(n,b)*ksi)/betan(n,b)^2/sinh(betan(n,b)*a)*sin(betan(n,b)*eta);
   f4=1/2/D*(alpham(m,a)*b*coth(alpham(m,a)*b)-alpham(m,a)*(b-eta)*coth(alpham(m,a)*(b-eta)))*sinh(alpham(m,a)*(b-eta))/alpham(m,a)^2/sinh(alpham(m,a)*b)*sin(alpham(m,a)*ksi);
   f5=1/2/D*(alpham(m,a)*b*coth(alpham(m,a)*b)-alpham(m,a)*eta*coth(alpham(m,a)*eta))*sinh(alpham(m,a)*eta)/alpham(m,a)^2/sinh(alpham(m,a)*b)*sin(alpham(m,a)*ksi);
   sum1=sum1+f1
   sum2=sum2+f2
   sum3=sum3+f3
   sum4=sum4+f4
   sum5=sum5+f5
end
w=vpa(sum1+sum2+sum3+sum4+sum5,4)
%vpa(subs(w,ksi,0.75*a),6)

haiqsim 发表于 2009-3-18 14:43:36

本帖最后由 haiqsim 于 2009-3-18 14:48 编辑

忘了修改,不要看注释,是之前的,没改:)

刚刚发现,原来版主帮忙把帖子主题给修改了,这样更明确!
非常感谢负责、热心的ljelly版主,:handshake

messenger 发表于 2009-3-18 22:40:23

线性方程组方程的个数太多了,用符号求解解不出来

haiqsim 发表于 2009-3-19 14:05:10

哦,还真是这样啊:(
那是不是只好直接往里代数值呢,有什么好的解决办法么,请大侠赐教!
不知道符号求解,对方程个数的限制大概在多少个以内,以后也好另谋出路啊!

messenger 发表于 2009-3-19 15:58:51

只能直接往里代数值了,用数值求解

符号求解,用克莱姆法则,计算量很大的,觉得大概方程个数的限制大概在5左右,具体是多少,你可以自己试一下
页: [1]
查看完整版本: 解线性方程组出错,如何改正