我正在尝试编写一个MATLAB程序,它允许我给它一个微分方程,然后最终产生一个数值解。
正如我所见,创建这样一个程序所涉及的步骤将是:
第一:将ODE的域分离成等长的n区间 第二:替换微分算子写有限差分算子。 第三:以某种方式让MATLAB构建一个近似于ODE的线性方程组 第四:用MATLAB求解线性代数方程组 第五:绘制结果。
而且,在这个概念层面上,这对我来说都是有意义的。试图使用代码执行这些步骤是困难的。
到目前为止,我将程序分为两部分。第一部分是我尝试绘制函数,而第二部分则尝试执行集成。
第一部分:
function [y] = ODEs (n,a, b)
x= 0:(1/n):1;
A= zeros(n+1,n+1);
A(1,1)= -2;
A(1,2)= 1;
A(n+1, n+1)= -2;
A(n+1, n)=1;
for i= 2:n;
A(i,i)=-2;
A(i,i-1)=1;
A(i,i-1)=1;
end
for i=1:n+1;
b(i,1)=(x(1,i)).* (1/n);
end
y=inv(A)*b;
plot (x,y)
hold all
plot (x,(x(:).^3./6) +(b-a-(1/6)).*x(:) +a)

第二部分:
clear all;
clc;
prompt='How many times do you want to integrate the function y=x: ';
y = input(prompt);
syms ('x');
i = 1;
j = 1;
b = 1;
den_num = 1;
while i <= y
while j <= y
den_num = j*den_num;
j = j+1;
end
b = x.^y /den_num;
i = i+1;
end
pretty(b)
&#13;
此时,两个部分都充满了错误(第二部分甚至没有提供我想要的图表),但希望我尝试做的事情很清楚。我没有找到解决我遇到的所有问题的方法:我知道这将证明是巨大的。但是,如果我能朝着正确的方向前进,我们会很高兴吗?或者是否有更有效的方式来处理我错过的事情?希望这一切都有道理。