找回密码
 注册
Simdroid-非首页
查看: 90|回复: 7

求超越方程的根

[复制链接]
发表于 2014-1-26 09:14:26 | 显示全部楼层 |阅读模式 来自 河北邯郸
  X=-0.1:0.001:0.1;
a=130;
b=200;
J00=besselj(n,130*X);
J01=besselj(n+1,130*X);
J10=besselj(n,200*X);
J11=besselj(n+1,200*X);
Y00=bessely(n,130*X);
Y01=bessely(n+1,130*X);
Y10=bessely(n,200*X);
Y11=bessely(n+1,200*X);
K=(n/a-1/5000)*J00-X.*J01;
L=(n/b+1/5000)*Y10-X.*Y11;
V=(n/b+1/5000)*J10-X.*J11;
W=(n/a-1/5000)*Y00-X.*Y01;
y=K.*L-V.*W;
plot(X,y)  
hold on  
plot([-0.15 0.15],[0 0],'k');
f=@(X)K.*L-V.*W;
X=[-0.15 -0.1];
arrayfun(@(X)fzero(f,X),X);
Warning: Imaginary parts of complex X and/or Y arguments ignored
??? Operands to the || and && operators must be convertible to logical scalar values.

Error in ==> fzero at 323
    elseif ~isfinite(fx) || ~isreal(fx)

Error in ==> @(X)fzero(f,X)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2014-1-26 09:32:45 | 显示全部楼层 来自 加拿大
Simdroid开发平台
你定义的 f 并非是一个含有未知数 X 的函数句柄,而是确定的数值,因为 K.*L-V.*W 被计算为确定的数了。按照你目前的写法,可以将 J00 ~ J11, Y00~Y11,K, L, V, W 全部定义为关于X的函数,后面用
f = @(X)  K(X).*L(X)-V(X).*W(X);
另外,你的 n 是多少?
回复 不支持

使用道具 举报

发表于 2014-1-26 09:39:15 | 显示全部楼层 来自 加拿大
补充一下,你的方程并不是很复杂,其实没有必要定义这么多中间变量 J00 ~ J11, Y00~Y11。如果你是担心定义 f 的时候表达式过长, 只需分别定义 K, L, V, W 函数,然后直接定义 f

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-26 17:35:09 | 显示全部楼层 来自 河北邯郸
谢谢!我试试!
回复 不支持

使用道具 举报

 楼主| 发表于 2014-1-26 18:56:24 | 显示全部楼层 来自 河北邯郸
我试了一下,还是不行。
n=0;
X=-0.1:0.001:0.1;
a=130;
b=200;
y=((n/a-1/5000)* besselj(n,130*X)-X.* besselj(n+1,130*X)).* ((n/b+1/5000)* bessely(n,200*X)-X.* bessely(n+1,200*X))- ((n/b+1/5000)* besselj(n,200*X)-X.* besselj(n+1,200*X)).* ((n/a-1/5000)* bessely(n,130*X)-X.* bessely(n+1,130*X));
plot(X,y)  
hold on  
plot([-0.15 0.15],[0 0],'k');
f=@(X) ((n/a-1/5000)* besselj(n,130*X)-X.* besselj(n+1,130*X)).* ((n/b+1/5000)* bessely(n,200*X)-X.* bessely(n+1,200*X))- ((n/b+1/5000)* besselj(n,200*X)-X.* besselj(n+1,200*X)).* ((n/a-1/5000)* bessely(n,130*X)-X.* bessely(n+1,130*X));
X0=-0.09;
arrayfun(@(X)fzero(f,X),X0);
Warning: Imaginary parts of complex X and/or Y arguments ignored
??? Error using ==> fzero at 324
Function value at starting guess must be finite and real.

Error in ==> @(X)fzero(f,X)
回复 不支持

使用道具 举报

发表于 2014-1-26 21:13:21 | 显示全部楼层 来自 加拿大
wuhaimiao 发表于 2014-1-26 18:56
我试了一下,还是不行。
n=0;
X=-0.1:0.001:0.1;
  1. n=0;
  2. X=-0.1:0.001:0.1;
  3. a=130;
  4. b=200;
  5. f=@(X) ((n/a-1/5000)* besselj(n,130*X)-X.* besselj(n+1,130*X)).* ((n/b+1/5000)* bessely(n,200*X)-X.* bessely(n+1,200*X))- ((n/b+1/5000)* besselj(n,200*X)-X.* besselj(n+1,200*X)).* ((n/a-1/5000)* bessely(n,130*X)-X.* bessely(n+1,130*X));
  6. fplot(f,[-0.1,0.1])  
  7. hold on  
  8. plot([-0.15 0.15],[0 0],'k');
  9. X0=[0.09 0.05 0.01];
  10. sol = arrayfun(@(X)fzero(f,X),X0)
  11. sol = [sol,-sol];
  12. plot(sol, f(sol), 'bo')
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-3 01:30 , Processed in 0.046800 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表