MATLAB程序出错了,怎么样修改?

functiony1=Q(r)c1=2.7132e15;M=1.989e30;G=6.672e-11;y1=c1^2./(r.^3)-M*G./(r.^2);functi... function y1=Q(r)
c1=2.7132e15;
M=1.989e30;
G=6.672e-11;
y1=c1^2./(r.^3)-M*G./(r.^2);
function y2=R(q)
y2=q;
function y3=S(r)
c1=2.7132e15;
y3=c1./(r.^2);
clear;clc;
format short
h=[0.05e7,0.01e7,0.005e7,0.001e7];%h为步长
for i=1:4
q=0;r(i)=0.6982e11;theta(i)=0;T=0;
while T<=50*24*3600
K1=Q(r(i)); L1=R(q);N1=S(r(i));
K2=Q(r(i)+h(i)/2*L1);L2=R(q+h(i)/2*K1);N2=S(r(i)+h(i)/2*L1);
K3=Q(r(i)+h(i)/2*L2);L3=R(q+h(i)/2*K2);N3=S(r(i)+h(i)/2*L2);
K4=Q(r(i)+h(i)*L3);L4=R(q+h(i)*K3);N4=S(r(i)+h(i)*L3);
T=T+h(i);
q=q+h(i)/6*(K1+2*K2+2*K3+K4);
r(i)=r(i)+h(i)/6*(L1+2*L2+2*L3+L4);
theta(i)=theta(i)+h(i)/6*(N1+2*N2+2*N3+N4);
end;
end
format long
disp('步长h对应取值为h=0.05e7,0.01e7,0.005e7,0.001e7时,')
disp('从远日点开始的第50天结束时水星的位置(r,theta)为')
disp(' ')
disp([r',theta'])
展开
 我来答
lhmhz
高粉答主

2020-05-19 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17014

向TA提问 私信TA
展开全部

题主提供的代码没有错误,但运行时出错,其问题在于,题主把自定义函数与主程序的运行顺序搞反了。

方法1、分别将y1=Q(r)、y2=R(q)和y3=S(r)自定义函数保存为Q.m、R.m和S.m文件,再将主程序保存为main.m文件,然后在命令窗口中,执行 >>main %回车

方法2、建立main.m文件,按下列顺序书写程序

①主程序

function main( )

clear;clc;
format short 

。。。。。。

disp([r',theta'])

②Q(r)自定义函数、R(q)自定义函数和S(q)自定义函数

function y1=Q(r)
c1=2.7132e15;

。。。。。。。

function y2=R(q)
y2=q;

function y3=S(r)
c1=2.7132e15;

。。。。。。。

最后执行可得




推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式