Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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中求解不同输入值的微分方程_Matlab_Nested Loops_Runge Kutta - Fatal编程技术网

在MATLAB中求解不同输入值的微分方程

在MATLAB中求解不同输入值的微分方程,matlab,nested-loops,runge-kutta,Matlab,Nested Loops,Runge Kutta,我在matlab中编写了一个函数和一个脚本,用四阶龙格库塔法计算和绘制了一个1自由度系统的响应。这里是我想要绘制的系统对不同输入值的响应图。初始条件为零,输入如下: F(t) = 5*sin(w*t) 其中w=[2 5 10] 我不知道如何在函数中使用循环来形成w和的所有值的状态空间 解出我的方程,并为不同的w值绘制它,从而为每次迭代生成不同的输入。请注意,一种方法是为所有三种情况编写三个不同的函数并计算响应。我不希望这样。我只需要一个函数和我的脚本,它使用ode45函数来解微分方程,但要绘制

我在matlab中编写了一个函数和一个脚本,用四阶龙格库塔法计算和绘制了一个1自由度系统的响应。这里是我想要绘制的系统对不同输入值的响应图。初始条件为零,输入如下:

F(t) = 5*sin(w*t)
其中w=[2 5 10]

我不知道如何在函数中使用循环来形成w和的所有值的状态空间 解出我的方程,并为不同的w值绘制它,从而为每次迭代生成不同的输入。请注意,一种方法是为所有三种情况编写三个不同的函数并计算响应。我不希望这样。我只需要一个函数和我的脚本,它使用ode45函数来解微分方程,但要绘制所有w值的响应。你建议我怎么做。以下是我的脚本和函数:

function xDot = Myfnc(t,x)
global w
f = 5*sin(w*t);
%% Using State Space 

A = [0 1;-100 -1];
b = [0 f]';
xDot = A*x+b;
end




clc;
clear
close all;
%%
% y(..)+y(.)+100y = f(t)
% ZERO INITIAL conditions
% To A Harmonic Input
t = 0:0.1:15;
global w
w = 2;
Ics = [0 0];

[T,Y] = ode45(@Myfnc,t,Ics);

% plot(T,Y(:,1),'r','LineWidth',4)
% grid on
% hold on
% plot(T,Y(:,2),'k','LineWidth',3)
function y = power(x)
   y = x*x;
end
你可能正在寻找。这允许您将数字数组应用于同一函数

例如,如果我有以下功能:

function xDot = Myfnc(t,x)
global w
f = 5*sin(w*t);
%% Using State Space 

A = [0 1;-100 -1];
b = [0 f]';
xDot = A*x+b;
end




clc;
clear
close all;
%%
% y(..)+y(.)+100y = f(t)
% ZERO INITIAL conditions
% To A Harmonic Input
t = 0:0.1:15;
global w
w = 2;
Ics = [0 0];

[T,Y] = ode45(@Myfnc,t,Ics);

% plot(T,Y(:,1),'r','LineWidth',4)
% grid on
% hold on
% plot(T,Y(:,2),'k','LineWidth',3)
function y = power(x)
   y = x*x;
end
然后,我可以按如下方式将其应用于不同的值:

X = [1 2 3];
arrayfun(@(x) power(x),X,'UniformOutput',false);
正如你所看到的,我使用一个匿名函数来包装幂函数。
我还将“UniformOutput”设为false,这样函数就可以在单元格数组中返回不同类型的元素。如果不希望单元格数组将其设置为true。

是什么阻止您循环使用
w
的值

[2 5 10]中w的

[TY]=ode45(@(T,Y)Myfnc(T,Y,w),T,Ics,opts)
情节

这只适用于时间和w向量长度相同的情况。在我的等式中,时间向量有100个数字,但w向量有3个数字。我们不能使用
DoPri45
通常,就像在
ode45
中一样,使用外推实现,即具有“错误”错误估计的五阶步骤,就像四阶步骤一样。所以你得到了一个具有自适应步长的五阶方法。不要忘记将误差公差调整到适合您想要获得的结果精度的水平。