在 MATLAB 中求解不同输入值的微分方程
Solving Differential Equations IN MATLAB For Different Values Of Input
我编写了一个函数和一个脚本,用于在 matlab 中使用四阶龙格库塔方法计算和绘制 1 自由度系统的响应。这是我想绘制系统对不同输入值的响应的东西。我的初始条件为零,输入如下:
F(t) = 5*sin(w*t)
其中 w = [2 5 10]
我不知道如何在我的函数中使用循环来为 w 和的所有值形成状态 space
求解我的方程式并针对 w 的不同值绘制它,这使得每次迭代都有不同的输入。请注意,一种方法是为所有三种情况编写三个不同的函数并计算 response.I 不想要的。我只想要一个函数和我的脚本,它使用 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)
您可能正在寻找 arrayfun。这允许您将一组数字应用于同一函数。
例如,如果我有以下功能:
function y = power(x)
y = x*x;
end
然后我可以按如下方式使用它以将其应用于不同的值:
X = [1 2 3];
arrayfun(@(x) power(x),X,'UniformOutput',false);
如您所见,我正在使用匿名函数来包装幂函数。
此外,我使用 'UniformOutput' 为假,因此该函数可以 return 元胞数组中的不同类型的元素。如果您不想使用元胞数组,请将其设置为 true。
是什么阻止您循环遍历 w
的值?
for w in [2 5 10]
[T Y] = ode45(@(t,y)Myfnc(t,y,w),t,Ics,opts)
plot...
我编写了一个函数和一个脚本,用于在 matlab 中使用四阶龙格库塔方法计算和绘制 1 自由度系统的响应。这是我想绘制系统对不同输入值的响应的东西。我的初始条件为零,输入如下:
F(t) = 5*sin(w*t)
其中 w = [2 5 10]
我不知道如何在我的函数中使用循环来为 w 和的所有值形成状态 space 求解我的方程式并针对 w 的不同值绘制它,这使得每次迭代都有不同的输入。请注意,一种方法是为所有三种情况编写三个不同的函数并计算 response.I 不想要的。我只想要一个函数和我的脚本,它使用 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)
您可能正在寻找 arrayfun。这允许您将一组数字应用于同一函数。
例如,如果我有以下功能:
function y = power(x)
y = x*x;
end
然后我可以按如下方式使用它以将其应用于不同的值:
X = [1 2 3];
arrayfun(@(x) power(x),X,'UniformOutput',false);
如您所见,我正在使用匿名函数来包装幂函数。 此外,我使用 'UniformOutput' 为假,因此该函数可以 return 元胞数组中的不同类型的元素。如果您不想使用元胞数组,请将其设置为 true。
是什么阻止您循环遍历 w
的值?
for w in [2 5 10]
[T Y] = ode45(@(t,y)Myfnc(t,y,w),t,Ics,opts)
plot...