24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1440  |  回复: 14

wkxj

新虫 (初入文坛)

[求助] matlab中将含有变量“w”的复杂多项式存入矩阵元素,无法生成矩阵。哪里出问题了?

clc;
tic;
epssys=1.0e-6;

syms w
%w=1000;
a =40e-3;                                             
aa1 = a* [1 0 0];                                       
aa2 = a* [0 1 0];
aa3 = a* [0 0 1];
ra11 = (2*pi)*cross(aa2,aa3)/dot(aa1,cross(aa2,aa3));      
ra22 = (2*pi)*cross(aa3,aa1)/dot(aa1,cross(aa2,aa3));
ra1 = ra11(1:2);
ra2 = ra22(1:2);
lml1=0.0001419e9;                                      %空气纵波的拉梅常数
lml2=290.24e9;                                         %钢纵波的拉梅常数
lmn1=0;                                                %空气中没有横波
lmn2=71e9;                                             %钢横波的拉梅常数
rou1=1.29;                                             %空气密度
rou2=7800;                                             %钢密度

a1=w*0.003;
a2=w*1.376e-004;
b2=w*3.315e-004;
                                                   
r=0.01;
bh2 = @(nu,z)besselj(nu,z)-1i*bessely(nu,z);
% tg=[];
%tg=num2str(ones(5, 5));
tg=ones(5, 5);
for n2=1:5
    for n3=1:5
        n=n2-3;
        n1=n3-3;
      
        A11=n*besselj(n,a1*r)/r-a1*besselj(n+1,a1*r);  
        B11=n*bh2(n,a1*r)/r-a1*bh2(n+1,a1*r);  
        C11=n*besselj(n,a2*r)/r-a2*besselj(n+1,a2*r);  
        C21=1i*n*besselj(n,b2*r);
        C31=1i*kz*(n*besselj(n,b2*r)/r-b2*besselj(n+1,b2*r))/kt2;  %kt2^2=ω^2*ρ2/μ2   

            A121=-kz^2*lml1*besselj(n,a1*r);      
            A122=(2*n*lml1*a1+2*lml1*a1)*besselj(n+1,a1*r)/r;
            A123=lml1*a1^2*besselj(n+2,a1*r);
        A12=A121-A122+A123;
            B121=-kz^2*lml1*bh2(n,a1*r);
            B122=(2*n*lml1*a1+2*lml1*a1)*bh2(n+1,a1*r)/r;
            B123=lml1*a1^2*bh2(n+2,a1*r);
        B12=B121-B122+B123;
            C121=(2*lmn2*n^2-2*lmn2*n-lml2*r^2*kz^2)*besselj(n,a2*r)/r^2;  %α2=a2
            C122=(4*lmn2*n+2*lmn2+2*n*lml2+2*lml2)*a2*besselj(n+1,a2*r)/r;
            C123=(2*lmn2*a2^2+lml2*a2^2)*besselj(n+2,a2*r);
        C12=C121-C122+C123;
            C221=(2*lmn2*1i*n^2-2*lmn2*1i*n)*besselj(n,b2*r)/(kt2*r^2);      %β2=b2
            C222=2*lmn2*1i*n*b2*besselj(n+1,b2*r)/(kt2*r);
        C22=C221-C222;
            C321=(2*lmn2*1i*kz*(n^2-n))*besselj(n,b2*r)/(kt2*r^2);
            C322=(2*lmn2*1i*kz*(2*n+1))*b2*besselj(n+1,b2*r)/(kt2*r);
            C323=2*lmn2*1i*kz*b2^2*besselj(n+2,b2*r)/kt2;
        C32=C321-C322+C323;

            C131=2*lmn2*(1i*n^2+n^2)*besselj(n,a2*r)/r^2;
            C132=2*lmn2*1i*n*a2*besselj(n+1,a2*r)/r;
        C13=C131-C132;
            C231=lmn2*(2*n-2*n^2)*besselj(n,b2*r)/r^2;
            C232=lmn2*2*n*b2*besselj(n+1,b2*r)/r;
            C233=lmn2*b2^2*besselj(n+2,b2*r);
        C23=C231+C232+C233;
            C331=lmn2*(2*n*kz-2*n^2*kz)*besselj(n,b2*r)/(kt2*r^2);
            C332=lmn2*2*n*kz*b2*besselj(n+1,b2*r)/(kt2*r);
        C33=C331+C332;

            C141=lmn2*2*1i*kz*n*besselj(n,a2*r)/r;
            C142=lmn2*2*1i*kz*a2*besselj(n+1,a2*r);
        C14=C141+C142;
        C24=-n*kz*lmn2*besselj(n,b2*r)/r;
            C341=b2^2*lmn2*n*besselj(n,b2*r)/(kt2*r);
            C342=b2^3*lmn2*besselj(n+1,b2*r)/kt2;
        C34=C341-C342;

        F1=C12*C23*C34;
        F2=C22*C33*C14;
        F3=C32*C13*C24;
        F4=C32*C23*C14;
        F5=C22*C13*C34;
        F6=C12*C24*C33;
        F7=C11*C23*C34;
        F8=C11*C33*C24;
        F9=C21*C33*C14;
        F10=C21*C13*C34;
        F11=C31*C13*C24;
        F12=C31*C23*C14;
        Tn1=A11*(F1+F2+F3-F4-F5-F6);
        Tn2=B12*(F7-F8+F9-F10+F11-F12);
        Tn=(Tn1/Tn2);

        tg_1=Tn;
        tg(n2,n3)=str2double(vpa(tg_1));     
    end;
end;
tg
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

bessel函数应该都是调用的besselmx(这个好像是一个c编译成的mex)
可能是mex不支持符号运算吧。

程序太长了
2楼2015-04-29 22:48:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wkxj

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 信彼南山 at 2015-04-29 22:48:31
bessel函数应该都是调用的besselmx(这个好像是一个c编译成的mex)
可能是mex不支持符号运算吧。

程序太长了

其实就是中间代换的几个比较繁琐,但是没有多大的意义,可以忽略。最后得到的矩阵行列式det=0,要解出变量w的。现在矩阵一直出不来,不知道为什么。
3楼2015-04-30 10:15:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wkxj

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 信彼南山 at 2015-04-29 22:48:31
bessel函数应该都是调用的besselmx(这个好像是一个c编译成的mex)
可能是mex不支持符号运算吧。

程序太长了

clc;
tic;
epssys=1.0e-6;

syms w
kl1=w*0.003;
kl2=w*1.376e-004;
kt2=w*3.315e-004;
kz=0;                                         
a1 = sqrt(kl1^2-kz^2);                              
a2 = sqrt(kl2^2-kz^2);                              
b2 = sqrt(kt2^2-kz^2);                                                                                 
r=0.01;
bh2 = @(nu,z)besselj(nu,z)-1i*bessely(nu,z);

tg=zeros(5,5);
for n2=1:5
    for n3=1:5
        n=n2-3;
        n1=n3-3;
      
        A11=n*besselj(n,a1*r)/r-a1*besselj(n+1,a1*r);  
        B11=n*bh2(n,a1*r)/r-a1*bh2(n+1,a1*r);   
        C11=n*besselj(n,a2*r)/r-a2*besselj(n+1,a2*r);   
        C21=1i*n*besselj(n,b2*r);
      
            A121=0;
            A122=(2*n*lml1*a1+2*lml1*a1)*besselj(n+1,a1*r)/r;
            A123=lml1*a1^2*besselj(n+2,a1*r);
        A12=A121-A122+A123;
            B121=0;
            B122=(2*n*lml1*a1+2*lml1*a1)*bh2(n+1,a1*r)/r;
            B123=lml1*a1^2*bh2(n+2,a1*r);
        B12=B121-B122+B123;
            C121=(2*lmn2*n^2-2*lmn2*n)*besselj(n,a2*r)/r^2;
            C122=(4*lmn2*n+2*lmn2+2*n*lml2+2*lml2)*a2*besselj(n+1,a2*r)/r;
            C123=(2*lmn2*a2^2+lml2*a2^2)*besselj(n+2,a2*r);
        C12=C121-C122+C123;
            C221=(2*lmn2*1i*n^2-2*lmn2*1i*n)*besselj(n,b2*r)/(kt2*r^2);      
            C222=2*lmn2*1i*n*b2*besselj(n+1,b2*r)/(kt2*r);
        C22=C221-C222;
            C131=2*lmn2*(1i*n^2+n^2)*besselj(n,a2*r)/r^2;
            C132=2*lmn2*1i*n*a2*besselj(n+1,a2*r)/r;
        C13=C131-C132;
            C231=lmn2*(2*n-2*n^2)*besselj(n,b2*r)/r^2;
            C232=lmn2*2*n*b2*besselj(n+1,b2*r)/r;
            C233=lmn2*b2^2*besselj(n+2,b2*r);
        C23=C231+C232+C233;
            C341=b2^2*lmn2*n*besselj(n,b2*r)/(kt2*r);
            C342=b2^3*lmn2*besselj(n+1,b2*r)/kt2;
        C34=C341-C342;
        F1=C12*C23*C34;
        F5=C22*C13*C34;
        F7=C11*C23*C34;
        F10=C21*C13*C34;
        Tn1=A11*(F1-F5)-A12*(F7-F10);
        Tn2=B12*(F7-F10)-B11*(F1-F5);
        Tn=vpa(Tn1/Tn2);
        tg_1=Tn;
        tg(n2,n3)=str2double(vpa(tg_1));     
     
    end;
end;
tg
4楼2015-04-30 11:05:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

问题就在于你的程序太长了,至少要找到问题出在哪么
可以考虑把无关的语句删掉,找到出问题的那句
5楼2015-04-30 20:11:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wkxj

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by 信彼南山 at 2015-04-30 20:11:31
问题就在于你的程序太长了,至少要找到问题出在哪么
可以考虑把无关的语句删掉,找到出问题的那句

我已经整理了,该怎么联系你
6楼2015-04-30 21:13:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wkxj

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by 信彼南山 at 2015-04-30 20:11:31
问题就在于你的程序太长了,至少要找到问题出在哪么
可以考虑把无关的语句删掉,找到出问题的那句

clc;
tic;
epssys=1.0e-6;

syms w
a1=w*0.003;
a2=w*1.376e-004;
kt2=w*3.315e-004;
b2 = kt2;                                                                                 
r=0.01;
bh2 = @(nu,z)besselj(nu,z)-1i*bessely(nu,z);

tg=zeros(5,5);
for n2=1:5
    for n3=1:5
        n=n2-3;
        n1=n3-3;
      
        A11=n*besselj(n,a1*r)/r-a1*besselj(n+1,a1*r);  
        tg_1=A11;
        tg(n2,n3)=str2double(vpa(tg_1));     
        
      
    end;
end;
tg
7楼2015-04-30 21:16:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

刚看了一下
你那句str2double(vpa(tg_1))
str2double的操作要做什么没看明白

符号变量转化为数字??那结果似乎一定是NAN吧?
8楼2015-04-30 23:26:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wkxj

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by 信彼南山 at 2015-04-30 23:26:38
刚看了一下
你那句str2double(vpa(tg_1))
str2double的操作要做什么没看明白

符号变量转化为数字??那结果似乎一定是NAN吧?

w是一个未知数,我要生成一个矩阵tg,然后det=0求解出w的值。

[ 发自小木虫客户端 ]
9楼2015-05-01 00:12:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

[/code]
tg_1=A11;
tg(n2,n3)=str2double(vpa(tg_1));     
[/code]
这两句改一下
CODE:
tg(n2,n3) = A11;

这样应该就能创建那个5x5的矩阵了。

不过对这个5x5的矩阵求det的话估计希望不大。

个人觉得应该考虑修改算法。
10楼2015-05-01 19:45:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wkxj 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 297,工科调剂? +10 河南农业大学-能 2026-04-14 10/500 2026-04-15 21:50 by noqvsozv
[考研] 322求调剂 +7 123安康 2026-04-12 14/700 2026-04-15 21:48 by noqvsozv
[考研] 272分材料子求调剂 +41 Loy0361 2026-04-10 54/2700 2026-04-14 18:00 by lhj2009
[考研] 药学305求调剂 +10 玛卡巴卡boom 2026-04-10 10/500 2026-04-14 15:55 by zs92450
[考研] 本科211,报考085601-310分 +16 ararak 2026-04-13 16/800 2026-04-14 14:55 by Delta2012
[考研] 求调剂 +12 何气正 2026-04-13 13/650 2026-04-14 14:47 by zs92450
[考研] 农学0904 312求调剂 +4 Say Never 2026-04-11 4/200 2026-04-14 09:10 by zs92450
[考研] 机械还有还有名额吗?太难了 +8 笑笑袁 2026-04-10 8/400 2026-04-14 08:44 by screening
[基金申请] 2026 WR青拔 +3 冬日阳光CAS 2026-04-09 6/300 2026-04-13 18:40 by liuchb715
[考研] 346分,工科0854求调剂,专硕 +6 moser233 2026-04-12 7/350 2026-04-12 22:11 by fqwang
[考研] 0854调剂 +12 长弓傲 2026-04-09 13/650 2026-04-12 09:56 by 逆水乘风
[考研] 调剂 +10 只叙离别辞 2026-04-09 12/600 2026-04-11 20:57 by 逆水乘风
[考研] 352 求调剂 +6 yzion 2026-04-11 8/400 2026-04-11 16:24 by 明月此时有
[考研] 调剂 +5 文道星台 2026-04-11 5/250 2026-04-11 15:01 by 凯凯要变帅
[考研] 296求调剂 +6 汪!?! 2026-04-09 6/300 2026-04-11 11:25 by zhq0425
[考研] 311求调剂 +13 xyp想读书 2026-04-10 14/700 2026-04-11 09:41 by 猪会飞
[考研] 281求调剂 +11 觉得好的吧 2026-04-10 11/550 2026-04-11 09:35 by 逆水乘风
[考研] 初试261 +3 Asht少 2026-04-10 6/300 2026-04-10 16:38 by Asht少
[考研] 314求调剂 +14 weltZeng 2026-04-09 14/700 2026-04-09 23:14 by wolf97
[考研] 337求调剂 +4 Gky09300550, 2026-04-09 4/200 2026-04-09 17:18 by 帕尔马拉特
信息提示
请填处理意见