登录论坛

查看完整版本 : [MATLAB基础] 级数求和的问题!


xjtu713
2009-07-15, 10:14
帮忙看一下这段代码,为什么不能实现?
式中:n就是一个离散点数,给定具体n值后,就会得出n个s 和F的函数值,s1是对于给定的n值所得的实部,s2是所得到的虚部,在这一项D=2*exp(a*t)*(symsum(s1,n,1,5000)-symsum(s2,n,1,5000)-0.5*s3);中,我就是想实现当取n从1取到5000,把s1计算出来的实部全部相加,s2把虚部相加,由于我也是初学,这样简单的问题也没搞定,希望大家给我看看那里有错误?


syms n F s1 s2 s3 a T k L u m g F1 D t
for t=1:0.1:10
s = a + 2*n*pi*i/T;
m = 500;
k = 100000;
u = 0.01;
T = 20;
L = 5000;
a = 0.5;
g = 9.8;
F = -k*m*s*u*(m*s*s+2*k)/((m*s*s+k)*(m*s*s+2*k)-k*k)+2*m*g/s;
F1 = -k*m*s*u*(m*a*a+2*k)/((m*a*a+k)*(m*a*a+2*k)-k*k)+2*m*g/a;
s1=real(F*cos(2*n*pi*t/T));
s2=imag(F*sin(2*n*pi*t/T));
s3=real(F1);
D=2*exp(a*t)*(symsum(s1,n,1,5000)-symsum(s2,n,1,5000)-0.5*s3);
end
plot(t,D,'-')
hold on

TTT_IOU
2009-07-15, 16:10
你的s3是做什么用,里面也有n的,是对n求和还是什么?

xjtu713
2009-07-15, 16:40
s3也是取F1的实部,其实F1就是一个实数

xjtu713
2009-07-15, 16:47
S3 只是在取不同的t时,s3被(symsum(s1,n,1,5000)-symsum(s2,n,1,5000)-0.5*s3)减一次,

silas_xue
2009-07-17, 23:13
lz 能否把你在运行该段程序时显示的matlab的整句错误提示贴上来 大家一起讨论一下

TTT_IOU
2009-07-18, 12:34
s3中有n,而你没对n作操作,所以没法得到结果

xjtu713
2009-07-20, 10:21
我写错了,不好意思,F1中的那个s是a。我写错了,要是a
的化,就可以得到把

TTT_IOU
2009-07-21, 00:19
试试这样:
syms n
T = 20;
m = 500;
k = 100000;
u = 0.01;
L = 5000;
a = 0.5;
g = 9.8;
s = a + 2*n*pi*i/T;
w=0;
for t=1:0.1:10
w=w+1;
F = -k*m*s*u*(m*s*s+2*k)/((m*s*s+k)*(m*s*s+2*k)-k*k)+2*m*g/s;
F1 = -k*m*a*u*(m*a*a+2*k)/((m*a*a+k)*(m*a*a+2*k)-k*k)+2*m*g/a;
s1=real(F*cos(2*n*pi*t/T));
s2=imag(F*sin(2*n*pi*t/T));
s3=real(F1);
f1=symsum(s1,n,1,5000);%%5000的话数值太大,很耗时间的,机子需要时间的
f2=symsum(s2,n,1,5000);
D(w)=2*exp(a*t)*(f1-f2-0.5*s3);
end
t=1:0.1:10;
plot(t,double(D))

xjtu713
2009-07-21, 10:58
谢谢楼主的答复,我运行可一下,的确很慢,还有就是在end后面的t=1:0.1:10;是不是不需要了把,前面已经有个循环了