matlab 符号运算我的一个程序format shortsyms e bfloat hn=10;t=0;h=2*pi/n;%初始条件for j=1:16if j==1,6;11;16;w(j)=1;elsew(j)=0;endendfor i=1:n%runge-kutta方法 对常微分系统的应用 for j=1:4k(1,j)=h*(-w(j+4)+((2*e*cos(t)-1-b)/(2*(
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/26 03:40:23
matlab 符号运算我的一个程序format shortsyms e bfloat hn=10;t=0;h=2*pi/n;%初始条件for j=1:16if j==1,6;11;16;w(j)=1;elsew(j)=0;endendfor i=1:n%runge-kutta方法 对常微分系统的应用 for j=1:4k(1,j)=h*(-w(j+4)+((2*e*cos(t)-1-b)/(2*(
matlab 符号运算
我的一个程序
format short
syms e b
float h
n=10;
t=0;
h=2*pi/n;
%初始条件
for j=1:16
if j==1,6;11;16;
w(j)=1;
else
w(j)=0;
end
end
for i=1:n
%runge-kutta方法 对常微分系统的应用
for j=1:4
k(1,j)=h*(-w(j+4)+((2*e*cos(t)-1-b)/(2*(1+e*cos(t)))*w(j+8)));
end
for j=5:8
k(1,j)=h*(w(j-4)+((2*e*cos(t)+b)/(2*(1+e*cos(t)))*w(j+8)));
end
for j=9:12
k(1,j)=h*(-w(j-8)-w(j+4));
end
for j=13:16
k(1,j)=h*(-w(j-8)+w(j-4));
end
for j=1:4
k(2,j)=h*(-(w(j+4)+k(1,j+4)/2)+((2*e*cos(t+h/2)-1-b)/(2*(1+e*cos(t+h/2)))*(w(j+8)+k(1,j+8)/2)));
end
for j=5:8
k(2,j)=h*((w(j-4)+k(1,j+4)/2)+((2*e*cos(t+h/2)-1-b)/(2*(1+e*cos(t+h/2)))*(w(j+8)+k(1,j+8)/2)));
end
for j=9:12
k(2,j)=h*(-(w(j-8)+k(1,j-8)/2)-(w(j-8)+k(1,j-8)/2));
end
for j=13:16
k(2,j)=h*(-(w(j-8)+k(1,j-8)/2)+(w(j-4)+k(1,j-4)/2));
end
for j=1:4
k(3,j)=h*(-(w(j+4)+k(2,j+4)/2)+((2*e*cos(t+h/2)-1-b)/(2*(1+e*cos(t+h/2)))*(w(j+8)+k(2,j+8)/2)));
end
for j=5:8
k(3,j)=h*((w(j-4)+k(2,j+4)/2)+((2*e*cos(t+h/2)-1-b)/(2*(1+e*cos(t+h/2)))*(w(j+8)+k(2,j+8)/2)));
end
for j=9:12
k(3,j)=h*(-(w(j-8)+k(2,j-8)/2)-(w(j-8)+k(2,j-8)/2));
end
for j=13:16
k(3,j)=h*(-(w(j-8)+k(2,j-8)/2)+(w(j-4)+k(2,j-4)/2));
end
for j=1:4
k(4,j)=h*(-(w(j+4)+k(3,j+4))+((2*e*cos(t+h)-1-b)/(2*(1+e*cos(t+h)))*(w(j+8)+k(3,j+8))));
end
for j=5:8
k(4,j)=h*((w(j-4)+k(3,j+4))+((2*e*cos(t+h)-1-b)/(2*(1+e*cos(t+h)))*(w(j+8)+k(3,j+8))));
end
for j=9:12
k(4,j)=h*(-(w(j-8)+k(3,j-8))-(w(j-8)+k(3,j-8)));
end
for j=13:16
k(4,j)=h*(-(w(j-8)+k(3,j-8))+(w(j-4)+k(3,j-4)));
end
w(j)=w(j)+(k(1,j)+2*k(2,j)+2*k(3,j)+k(4,j))/6;
t=i*h;
end
disp(w)
自己编的,很不调理,望指教
matlab 符号运算我的一个程序format shortsyms e bfloat hn=10;t=0;h=2*pi/n;%初始条件for j=1:16if j==1,6;11;16;w(j)=1;elsew(j)=0;endendfor i=1:n%runge-kutta方法 对常微分系统的应用 for j=1:4k(1,j)=h*(-w(j+4)+((2*e*cos(t)-1-b)/(2*(
感觉像在写c语言.float h不要写,format已经定义了数据格式.
其二runge-kutta方法本身是一种数值方法,为什么又定义符号变量,这样会造成计算时数据格式混乱.所以matlab执行时出现一大堆错误应该是可以预见的.建议看看matlab的函数编写,你的syms e b完全可以是函数的输入变量.例如function y=ff(e,b)这样数据格式很明确.总之,虽然matlab具有符号计算的功能,但是本身也具有很多问题,造成程序中很多麻烦.而且具有强大的数值功能,所以计算过程中尽量转换为矩阵,向量格式,保持数据格式一致.