|
|
[求助]
求助:用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 |
|