24小时热门版块排行榜    

查看: 1077  |  回复: 1

iyearn

铜虫 (小有名气)

[求助] 求助:用matlab 循环计算椭圆积分已有1人参与

大家好,
请教大家一个在循环中计算椭圆积分的问题。我要计算的基本方程如附图。方程有三个变量,y,f,v. 我想画出y跟f之间的函数图像。
我的code如下:

syms fi;v = [0:0.001:pi/2];
L = length(v);
y = zeros(1,L);
k = zeros(1,L);
for i = 1:L
      t1 = 1./sqrt(sin(v(i))-sin(fi));
      m1 = int(t1,0,v(i));   
      k(i) = vpa(m1)
      t2 = sin(fi)/(sin(v(i))-sin(fi));
      m2 = 1/k(i)*int(t1,0,v(i));   
      y(i) = vpa(m2)   
      f(i) = k(i)^2./2;
end
plot(f,y,'b');
系统提示错误如下:
The following error occurred converting from sym to double: Error using mupadmex Error in MuPAD command: DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use the VPA function instead.
Error in NonlinearStiffness (line 10) k(i) = vpa(m1)
但是我将积分范围换成具体数值而不是数组元素时,是可以得到一个结果:
>> t1 = 1./sqrt(sin(0.2)-sin(fi));
m1 = int(t1,0,0.2);
>> m1
m1 =
(7217745006463825^(1/2)*9007199254740992^(1/2)*ellipticF(pi/4, 18014398509481984/7217745006463825)*2*i)/7217745006463825 - (2*7217745006463825^(1/2)*ellipticF(pi/4 - 1/10, 18014398509481984/7217745006463825)*(9007199254740992*sin(1/5) - 1789454248277167)^(1/2))/(7217745006463825*(1789454248277167/9007199254740992 - sin(1/5))^(1/2))
>> vpa(m1)
ans =
0.901 + 1.145e-36*i
我有两个疑问:
1. 为什么语句在循环中就运行不通呢?
2. 为什么积分结果会有虚部呢?

求助:用matlab 循环计算椭圆积分
椭圆积分.png
回复此楼

» 收录本帖的淘帖专辑推荐

matlab编程绘图

» 猜你喜欢

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

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
iyearn: 金币+10, ★★★很有帮助 2015-10-02 09:47:23
CODE:
function for_int
clear all;clc
v = [0:0.05:pi/2];
L = length(v);
y = zeros(1,L);
k = zeros(1,L);
for i = 2:L
      t1 = quadgk(@(fi) 1./sqrt(sin(v(i))-sin(fi)),0,v(i));
      m1 = t1 ;  
      k(i) = vpa(m1);
      t2 =quadgk(@(fi) sin(fi)./(sin(v(i))-sin(fi)),0,v(i));
      m2 = t2;   
      y(i) = vpa(m2)   ;
      f(i) = k(i)^2./2;
      
end

[k ;y ;f]'
plot(f,y,'--ob');

k             y            f
  1.0e+003 *

         0         0         0
    0.0004    0.0018    0.0001
    0.0006    0.0036    0.0002
    0.0008    0.0054    0.0003
    0.0009    0.0074    0.0004
    0.0010    0.0092    0.0005
    0.0011    0.0112    0.0006
    0.0012    0.0130    0.0007
    0.0013    0.0153    0.0008
    0.0014    0.0173    0.0010
    0.0015    0.0197    0.0011
    0.0016    0.0219    0.0012
    0.0017    0.0243    0.0014
    0.0018    0.0275    0.0015
    0.0018    0.0302    0.0017
    0.0019    0.0335    0.0019
    0.0020    0.0371    0.0021
    0.0021    0.0410    0.0023
    0.0022    0.0447    0.0025
    0.0024    0.0495    0.0028
    0.0025    0.0557    0.0031
    0.0026    0.0620    0.0034
    0.0028    0.0704    0.0038
    0.0029    0.0807    0.0043
    0.0031    0.0916    0.0048
    0.0033    0.1076    0.0055
    0.0035    0.1290    0.0063
    0.0038    0.1594    0.0074
    0.0042    0.2067    0.0088
    0.0047    0.2905    0.0110
    0.0054    0.4838    0.0148
    0.0072    1.4962    0.0257
求助:用matlab 循环计算椭圆积分-1
附图1.png

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2015-08-21 11:41:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 iyearn 的主题更新
信息提示
请填处理意见