小编Ser*_*ram的帖子

与解析解相比,ODE45和Runge-Kutta方法的绝对误差

如果有人可以帮助解决以下问题,我将不胜感激.我有以下ODE:

dr/dt = 4*exp(0.8*t) - 0.5*r   ,r(0)=2, t[0,1]       (1)
Run Code Online (Sandbox Code Playgroud)

我用两种不同的方式解决了(1).通过Runge-Kutta方法(第4顺序)和ode45Matlab中的方法.我将这两个结果与分析解决方案进行了比较,分析解决方案由下式给出:

r(t) = 4/1.3 (exp(0.8*t) - exp(-0.5*t)) + 2*exp(-0.5*t)
Run Code Online (Sandbox Code Playgroud)

当我根据确切的解决方案绘制每个方法的绝对误差时,我得到以下结果:

对于RK方法,我的代码是:

h=1/50;                                            
x = 0:h:1;                                        
y = zeros(1,length(x)); 
y(1) = 2;    
F_xy = @(t,r) 4.*exp(0.8*t) - 0.5*r;                   
for i=1:(length(x)-1)                              
    k_1 = F_xy(x(i),y(i));
    k_2 = F_xy(x(i)+0.5*h,y(i)+0.5*h*k_1);
    k_3 = F_xy((x(i)+0.5*h),(y(i)+0.5*h*k_2));
    k_4 = F_xy((x(i)+h),(y(i)+k_3*h));
    y(i+1) = y(i) + (1/6)*(k_1+2*k_2+2*k_3+k_4)*h;  % main equation
end
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

并为ode45:

tspan = 0:1/50:1;
x0 = 2;
f = @(t,r) 4.*exp(0.8*t) - 0.5*r;
[tid, y_ode45] …
Run Code Online (Sandbox Code Playgroud)

matlab numerical-integration ode differential-equations runge-kutta

9
推荐指数
1
解决办法
5792
查看次数

bsxfun在矩阵乘法中的实现

一如既往地想从你身上学到更多东西,我希望能通过以下代码获得一些帮助.

我需要完成以下任务:

1)我有一个向量:

x = [1 2 3 4 5 6 7 8 9 10 11 12]
Run Code Online (Sandbox Code Playgroud)

2)和矩阵:

A =[11    14    1
    5     8    18
    10    8    19
    13    20   16]
Run Code Online (Sandbox Code Playgroud)

我需要能够将eachxevery值相乘A,这意味着:

new_matrix = [1* A
              2* A
              3* A
               ...
              12* A]
Run Code Online (Sandbox Code Playgroud)

这将给我这个new_matrix大小(12*m x n)假设A (mxn).在这种情况下(12*4x3)

我怎么能用bsxfunmatlab 做这个呢?并且,这种方法会比一个快for-loop吗?

关于我for-loop,我在这里也需要一些帮助...我无法存储每个"new_matrix"循环运行:(

for i=x
new_matrix = A.*x(i)
end
Run Code Online (Sandbox Code Playgroud)

提前致谢!! …

performance matlab matrix matrix-multiplication bsxfun

7
推荐指数
2
解决办法
1621
查看次数

在特殊情况下创建一个更大的矩阵

我有两个向量:

A=[1 2 3 4]
B=[3 5 3 5]
Run Code Online (Sandbox Code Playgroud)

我想从这些向量中找到一个矩阵,如下所示:

你可以假设cplot matrix,其中x轴是Ay-axisB:

c =
 0     4     0     4
 3     0     3     0
 0     0     0     0
 0     0     0     0
Run Code Online (Sandbox Code Playgroud)

要么:

 c1=
 0     1     0     1
 1     0     1     0
 0     0     0     0
 0     0     0     0
Run Code Online (Sandbox Code Playgroud)

我的问题是如何自动创建它,因为我有大的向量.

matlab matrix

-6
推荐指数
1
解决办法
193
查看次数