Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 耦合dif方程的数值解_Matlab_Differential Equations - Fatal编程技术网

Matlab 耦合dif方程的数值解

Matlab 耦合dif方程的数值解,matlab,differential-equations,Matlab,Differential Equations,我有一组3个微分方程要解。它们可以在我的代码中看到。我的问题是,我想组合这些代码,这样就可以有一个关于R的for循环(如下所示) 我所拥有的: T2 = 1; [T,Y] = ode45(@ball, [0 5*T2] ,[0 0 -10]); figure plot(T,Y(:,1),'-r',T,Y(:,2),'-g',T,Y(:,3),'-b') legend('x(t)','y(t)','z(t)') xlabel('Time (in units of T2)') title(['Plo

我有一组3个微分方程要解。它们可以在我的代码中看到。我的问题是,我想组合这些代码,这样就可以有一个关于R的for循环(如下所示)

我所拥有的:

T2 = 1;
[T,Y] = ode45(@ball, [0 5*T2] ,[0 0 -10]);
figure
plot(T,Y(:,1),'-r',T,Y(:,2),'-g',T,Y(:,3),'-b')
legend('x(t)','y(t)','z(t)')
xlabel('Time (in units of T2)')
title(['Plot for RT2 = ',num2str(R)])
球在哪里

`function dr = ball(t,b)

T2 = 1;
T1 = T2/2;
d  = 0;
R  = 0.2;

dr = zeros(3,1);
dr(1) = (-1/T2)*b(1)-d*b(2);
dr(2) = (-1/T2)*b(2) + d*b(1) + R*b(3);
dr(3) = (-1/T1)*b(3) - R*b(2) ;

end`

我想要的是一个单独的程序来实现这一点,但是允许我包含一个for循环,这样我可以改变R并生成几个子批。这可能吗?

您可以使用匿名函数来实现这一点

更改
ball.m
以删除硬编码的
R
,并将其替换为输入参数:

function dr = ball(t,b,R)

T2 = 1;
T1 = T2/2;
d  = 0;
%// etc.
然后将您的
ode45
呼叫替换为以下内容:

R=0.4;
[T,Y] = ode45(@(t,b) ball(t,b,R), [0 5*T2] ,[0 0 -10]);
其中
@(t,b)ball(t,b,R)
是一个具有输入
t
b
的函数,该函数调用
ball.m
,其值在前一行中指定为
R
。因此,您可以为
循环构造
,如下所示:

for R=0.2:.02:1 %// or whatever range you want
    [T,Y] = ode45(@(t,b) ball(t,b,R), [0 5*T2] ,[0 0 -10]);
    %// etc.
end

在不使用匿名函数的情况下(这是完成结果的好方法),您也可以在
ode45
-调用中直接传递参数。在初始条件之后,下一个参数是选项,可以保留为空。在选项之后,可以提交其他参数:

function main

T2 = 1;
opt = []; % // no further options
R = 0.2; % // the parameter R to give to the function ball
[T,Y] = ode45(@ball, [0 5*T2] ,[0 0 -10], opt, R); %% // added opt and R as parameter
figure
plot(T,Y(:,1),'-r',T,Y(:,2),'-g',T,Y(:,3),'-b')
legend('x(t)','y(t)','z(t)')
xlabel('Time (in units of T2)')
title(['Plot for RT2 = ',num2str(R)])

end


function dr = ball(t,b, R)

T2 = 1;
T1 = T2/2;
d  = 0;
% R  = 0.2; % // not needed anymore

dr = zeros(3,1);
dr(1) = (-1/T2)*b(1)-d*b(2);
dr(2) = (-1/T2)*b(2) + d*b(1) + R*b(3);
dr(3) = (-1/T1)*b(3) - R*b(2) ;

end
[T,Y]=ode45(@ball[0.5*T2],[0-10],[0-10],]R);
在函数调用中,将函数更改为
函数dr=ball(T,b,R)
(在函数中删除
R=0.2