Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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_Math_Matrix_Differential Equations - Fatal编程技术网

Matlab 二阶常微分方程的有限差分近似

Matlab 二阶常微分方程的有限差分近似,matlab,math,matrix,differential-equations,Matlab,Math,Matrix,Differential Equations,我试图用边界条件x0=1,x3=3,在区间0-3内近似并绘制ux=expx的解。我能够绘制近似解与精确解的对比图,但该图看起来有点不对劲: % Interval a=0; b=3; n=10; % Boundary vals alpha=1; beta=3; %grid size h=(b-a)/(n+1); %Matrix generation m = -2; u = 1; l = 1; % Obtained from (y(i-1) -2y(i) + y(i+1)) = h^2 e

我试图用边界条件x0=1,x3=3,在区间0-3内近似并绘制ux=expx的解。我能够绘制近似解与精确解的对比图,但该图看起来有点不对劲:

% Interval
a=0;
b=3;
n=10;

% Boundary vals
alpha=1;
beta=3;
%grid size
h=(b-a)/(n+1); 


%Matrix generation
m = -2;
u = 1;
l = 1;

% Obtained from (y(i-1) -2y(i) + y(i+1)) = h^2 exp(x(i)


M = (1/h^2).*(diag(m*ones(1,n)) + diag(u*ones(1,n-1),1) + diag(l*ones(1,n-1),-1));

B=[];
xjj=[];


for j=1:n
    xjj=[xjj,j*h];
    if j==1
        B=[B,f(j*h)-(alpha/h^2)];

        continue 
    end
    if j==n
        B=[B,f(j*h)-(beta/h^2)];
        continue 
    else
        B=[B,f(j*h)];
    end
end

X=M\B';



x=linspace(0,3,101);
plot(xjj',X,'r*')
hold on 
plot(x,exp(x),'b-')

我感谢所有的建议和解释。这是我遵循的方案:

您可以将大循环缩短为

x=linspacea,b,n+2; B=fx2:end-1; B1-=α/h^2; Bn-=β/h^2; 精确解为ux=C*x+D+expx,边界条件为D=0和3*C+exp3=3 C=1-exp3/3

将此精确解与数值解进行对比,可以很好地适应如此大的步长:


你不使用ode解算器或符号数学工具箱有什么原因吗?好吧,这两个工具对公布的问题来说都有点太多了,但我想,在现实中它有点复杂。。。。顺便说一句,您编写了抛出和错误代码,并且动态更改了矩阵B和xjj,这在matlab中是不好的做法。我认为D=1没有看到如何将其设置为零。你假设alpha为0吗?你已经有exp0=1,剩下的C*0+D必须为0。再次感谢你的努力
f=@(x)exp(x)
a=0; b=3;
n=10;

% Boundary vals
alpha=1; beta=3;
%grid 
x=linspace(a,b,n+2); 
h=x(2)-x(1); 

% M*u=B obtained from (u(i-1) -2u(i) + u(i+1)) = h^2 exp(x(i))
M = (1/h^2).*(diag(-2*ones(1,n)) + diag(1*ones(1,n-1),1) + diag(1*ones(1,n-1),-1));
B = f(x(2:end-1)); 
B(1)-=alpha/h^2; B(n)-=beta/h^2;

U=M\B';

U = [ alpha; U; beta ];
clf;
plot(x',U,'r*')
hold on 
x=linspace(0,3,101);
C = 1-exp(3)/3
plot(x,exp(x)+C*x,'b-')