登录论坛

查看完整版本 : [MATLAB数学相关] matlab方程解法


qianduoduo.1021
2014-12-08, 12:55
解一个非线性方程组,解出来的结果是一条曲线,现在想把曲线转化为一根杆(相当于加上一个半径),采取的是用龙格库塔法解决,下面是一些程序。
function dydt=ivpodefun(t,y)
u=0.8;F=5;w3=0;d=0.2;
v=0:0.1:2*pi;
dydt=zeros(9,1);
dydt(1)=[u/sin(y(5))]*y(2)*(y(3)+y(1)*cos(y(5))-w3)-(2*y(1)/sin(y(5)))*y(2)*cos(y(5));
dydt(2)=(y(1))^2*cos(y(5))*sin(y(5))+F*sin(y(5))-u*y(1)*sin(y(5))*(y(3)+y(1)*cos(y(5))-w3);
dydt(3)=y(1)*y(2)*sin(y(5))-dydt(1)*cos(y(5));
dydt(4)=y(1);
dydt(5)=y(2);
dydt(6)=y(3);
dydt(7)=sin(y(5))*sin(y(4));
dydt(8)=-sin(y(5))*cos(y(4));
dydt(9)=cos(y(5));
dydt=dydt(: );
end

[t,y]=ode45(@ivpodefun,linspace(0,1,1000),[0.1;0.2;0.3;0.1;0.2;0.3;1;1;1]);
p1=y(:,1);
p2=y(:,2);
p3=y(:,3);
p4=y(:,4);
p5=y(:,5);
p6=y(:,6);
p7=y(:,7);
p8=y(:,8);
p9=y(:,9);
plot3(p7,p8,p9)
这是曲线的画法。
下面是加上一个半径的编程
m=d*(sin(v)*(-cos(y(4))*sin(y(6))-cos(y(5))*cos(y(6))*sin(y(4)))+cos(v)*(cos(y(6))*cos(y(4))-cos(y(5))*sin(y(6))*sin(y(4))))+y(7);
n=d*(cos(v)*(cos(y(5))*cos(y(4))*sin(y(6))+cos(y(6))*sin(y(4)))+sin(v)*(cos(y(5))*cos(y(6))*cos(y(4))-sin(y(6))*sin(y(4))))+y(8);
l=d*(-sin(v)*cos(y(6))*sin(y(5))-cos(v)*sin(y(5))*sin(y(6)))+y(9);
mesh(m,n,l)
请大师们指点啊