24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2549  |  回复: 12

Illusionist

银虫 (正式写手)

[求助] matlab求解色散方程,求助

m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
pi=3.141592653;
K=((K0×n1)^2-B^2)^(1/2)
P0=(B^2-(K0×n0)^2)^(1/2)
P2=(B^2-(K0×n2)^2)^(1/2)
hK=m×pi+artan(P0/K)+artan(P2/K)
精确求解B

我写的代码,但是出现一些问题

clear
clc
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
pi=3.141592653;
syms B

K=((K0*n1)^2-B.^2).^0.5;
P0=(B.^2-(K0*n0)^2).^0.5;
P2=(B.^2-(K0*n2)^2).^0.5;
ya=m*pi+atan(P0./K)+atan(P2./K);
f=fsolve(@(B)ya-K.*h,30);


提示错误信息:
??? Undefined function or method
'full' for input arguments of
type 'sym'.

Error in ==> trustnleqn at 28
Fvec = full(Fvec);

Error in ==> fsolve at 378
    [x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=...
   
Error in ==> Untitled at 16
f=fsolve(@(B)ya-K.*h,30);
回复此楼

» 猜你喜欢

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

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

xcj3630385

木虫 (小有名气)

长江11号

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
Illusionist: 金币+10, ★★★很有帮助, 我试一下··· 2012-05-29 07:55:47
B是数组吗?我想B应该定义成符号变量。
sym(‘B’);且不能是数组乘的形式吧?
我觉得方程还是写成函数的形式比较好。
长江11号
2楼2012-05-28 23:30:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小刘8885

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
Illusionist: 金币+5 2012-05-29 11:33:05
fsolve这句里面的初值30,改一下,可能会有帮助。改成比较接近的值,会加快逼近速度。
3楼2012-05-29 10:23:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
Illusionist: 金币+20, ★★★很有帮助 2012-05-29 11:35:05
CODE:
clear
clc
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
f=fsolve(@(B)func(B,K,k0,n0,n1,n2,m,h),30);
新建一个func.m的文件,写上如下代码,然后条用上面的代码
function fb=func(B,K,k0,n0,n1,n2,m,h)
K=((K0*n1)^2-B.^2).^0.5;
P0=(B.^2-(K0*n0)^2).^0.5;
P2=(B.^2-(K0*n2)^2).^0.5;
ya=m*pi+atan(P0./K)+atan(P2./K);
fb=ya-K.*h;
end

4楼2012-05-29 10:56:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Illusionist

银虫 (正式写手)

引用回帖:
4楼: Originally posted by lijie169 at 2012-05-29 10:56:13
clear
clc
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
f=fsolve(@(B)func(B,K,k0,n0,n1,n2,m,h),30);
新建一个func.m的文件,写上如下代码,然后条用上面的代码
function fb=func(B,K,k0, ...

还是有提示错误,初值改为1,5,30都不行···
Error in ==> @(B)func(B,K,k0,n0,n1,n2,m,h)


Error in ==> fsolve at 254
            fuser = feval(funfcn{3},x,varargin{:});

Error in ==> Untitled2 at 9
f=fsolve(@(B)func(B,K,k0,n0,n1,n2,m,h),1);
Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
5楼2012-05-29 11:34:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

感谢参与,应助指数 +1
求一个B用solve就行了
B=-13048834.721882891877855850939664
showmethemoney
6楼2012-05-29 11:44:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
Illusionist: 金币+15, ★★★★★最佳答案, 可是··我的matlab一直··busy····怎么办啊·· 2012-05-29 20:21:52
clear
clc
syms B
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
pi=3.141592653;
K=((K0*n1)^2-B.^2).^0.5;
P0=(B.^2-(K0*n0)^2).^0.5;
P2=(B.^2-(K0*n2)^2).^0.5;
ya=m*pi+atan(P0./K)+atan(P2./K);
yaa=ya-K.*h;
yab=simplify(yaa);
f=solve(yab,B)
showmethemoney
7楼2012-05-29 11:46:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
5楼: Originally posted by Illusionist at 2012-05-29 11:34:49
还是有提示错误,初值改为1,5,30都不行···
Error in ==> @(B)func(B,K,k0,n0,n1,n2,m,h)


Error in ==> fsolve at 254
            fuser = feval(funfcn{3},x,varargin{:});

Error in ==> U ...

看了一下,你给的源代码,func(B,K,k0,n0,n1,n2,m,h),中的第二参数给成K0,我给弄成小写的了,两个地方都得改
CODE:
clear
clc
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
f=fsolve(@(B)func(B,K,K0,n0,n1,n2,m,h),30);
新建一个func.m的文件,写上如下代码,然后条用上面的代码
function fb=func(B,K,K0,n0,n1,n2,m,h)
K=((K0*n1)^2-B.^2).^0.5;
P0=(B.^2-(K0*n0)^2).^0.5;
P2=(B.^2-(K0*n2)^2).^0.5;
ya=m*pi+atan(P0./K)+atan(P2./K);
fb=ya-K.*h;
end

8楼2012-05-29 13:06:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

CODE:
clear
clc
m=1;
h=1.5E-6;
n0=1.504;
n1=2.2899;
n2=1;
K0=5.927E+6;
f=fsolve(@(B)func(B,K0,n0,n1,n2,m,h),30);
新建一个func.m的文件,写上如下代码,然后条用上面的代码
function fb=func(B,K0,n0,n1,n2,m,h)
K=((K0*n1)^2-B.^2).^0.5;
P0=(B.^2-(K0*n0)^2).^0.5;
P2=(B.^2-(K0*n2)^2).^0.5;
ya=m*pi+atan(P0./K)+atan(P2./K);
fb=ya-K.*h;
end

这个应该是对的
9楼2012-05-29 13:08:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小刘8885

木虫 (正式写手)

六楼的同志,给的答案比较好,建议采用。
10楼2012-05-29 14:29:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Illusionist 的主题更新
信息提示
请填处理意见