找到柯西概率的解决方案。在Matlab中

时间:2015-12-14 17:51:19

标签: matlab numerical-methods ode differential-equations

我需要一些帮助来找到Matlab中的Cauchy问题的解决方案。 问题: y''+ 10xy = 0,y(0)= 7,y'(0)= 3 我还需要绘制图表。 我写了一些代码但是,我不确定它是否正确。特别是在功能部分。 有人可以查一下吗?如果不正确,我犯了错误? 这是其他.m文件中的单独函数:

function dydx = funpr12(x,y) 
    dydx = y(2)+10*x*y 
end

主:

%% Cauchy problem
clear all, clc
xint = [0,5]; % interval
y0 = [7;3]; % initial conditions
% numerical solution using ode45
sol = ode45(@funpr12,xint,y0);
xx = [0:0.01:5]; % vector of x values
y = deval(sol,xx); % vector of y values
plot(xx,y(1,:),'r', 'LineWidth',3)
legend('y1(x)')
xlabel('x')
ylabel('y(x)')

我得到这张图:

Here is the graph

1 个答案:

答案 0 :(得分:3)

ode45及其相关类似仅用于求解{strong>一阶微分方程,其形式为y' = ...。如果要解决二阶微分问题,则需要做一些工作。

具体而言,您必须将您的问题表示为一阶微分方程的系统。您目前有以下ODE:

 y'' + 10xy = 0, y(0) = 7, y'(0) = 3

如果我们重新安排此项以解决y'',我们会得到:

y'' = -10xy, y(0) = 7, y'(0) = 3

接下来,您要使用两个变量...称之为y1y2,这样:

y1 = y
y2 = y'

您为ode45构建代码的方式,您指定的初始条件就是这样 - 使用y及其一阶猜测y'的猜测。

取每一方的衍生物给出:

y1' = y'
y2' = y''

现在,做一些最终的替换,我们得到了这个一阶微分方程的最终系统:

y1' = y2
y2' = -10*x*y1

如果您在查看此内容时遇到问题,请记住y1 = yy2 = y'y2' = y'' = -10*x*y = -10*x*y1。因此,您现在需要构建您的函数,使其如下所示:

function dydx = funpr12(x,y) 
    y1 = y(2);
    y2 = -10*x*y(1);
    dydx = [y1 y2];
end

请注意,向量y是一个双元素向量,分别代表y指定的每个时间点y'的值和x的值。我还认为使这个匿名函数更清晰。它需要的代码更少:

funpr12 = @(x,y) [y(2); -10*x*y(1)];

现在继续解决它(使用你的代码):

%%// Cauchy problem
clear all, clc

funpr12 = @(x,y) [y(2); -10*x*y(1)]; %// Change
xint = [0,5]; % interval
y0 = [7;3]; % initial conditions
% numerical solution using ode45
sol = ode45(funpr12,xint,y0); %// Change - already a handle

xx = [0:0.01:5]; % vector of x values
y = deval(sol,xx); % vector of y values
plot(xx,y(1,:),'r', 'LineWidth',3)
legend('y1(x)')
xlabel('x')
ylabel('y(x)')

请注意,deval模拟微分方程解的输出将是一个双列矩阵。第一列是系统的解决方案,而第二列是解决方案的衍生物。因此,您将要绘制第一列,这是绘图语法正在执行的操作。

我现在得到这个情节:

enter image description here