基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

简介: 基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

💥1 概述

小波哈尔法(WHM)是一种求解一维非线性初值问题(IVP)的数值方法。它基于小波分析的思想,通过将原始问题转化为小波空间中的线性问题,然后进行求解。以下是一维非线性IVP测试问题的求解步骤:


1. 确定目标问题:首先,确定你要解决的一维非线性IVP测试问题。这可能涉及到一个非线性的微分方程和一些边界条件。


2. 小波基函数选择:选择适当的小波基函数来表示问题中的解。小波基函数应该具有良好的局部特性和适应性,以便更好地表示原始问题。常见的小波基函数包括Haar小波、Daubechies小波和Symlet小波等。


3. 建立小波变换:通过将问题转化为小波空间中的线性问题来建立小波变换。这可以通过将解函数和微分方程表示为小波基函数的线性组合来实现。


4. 线性方程求解:将小波变换应用于原始问题后,将其转化为一组线性方程。通过求解这组线性方程来获得小波系数,从而得到原始问题的近似解。


5. 逆小波变换:将得到的小波系数和小波基函数的逆变换应用于小波空间,将解转换回原始空间。这将给出原始问题的近似解。


6. 结果评估:评估求解结果的准确性和收敛性。可以比较近似解与真实解之间的差异,并检查所采用的小波基函数的适用性。


需要注意的是,小波哈尔法(WHM)是一个高级的数值方法,需要掌握小波分析和线性代数的基础知识。在实施过程中,还需进行适当的数值技巧,如数值积分和线性方程求解等。


📚2 运行结果

部分代码:

% step 1
% collocation points
J = 3;                              % level of decomposition
N = 2^(J + 1); % N = 2M             % number of basis functions
j = 1:N;                            % index of grid points
x = (j - 0.5) ./ N;                 % grid points
% step 2
% initial values
alpha1 = 0;                         % initial value of a function
beta1  = - 1;                       % initial value of the first derivative
a1     = beta1 - alpha1;
% step 3
% Newton solver
W = zeros(N,N);
f = zeros([N 1]);
a = zeros([N 1]);
epsilon = 1e-4;
r = ones([N 1]);
iter_ind = 0;
tic
while max(r) > epsilon   
    for j = 1:N
        % f(x) computation 
        % H, P1, P2 computation
        H = 0;               
        P1 = 0;
        P2 = 0;
        for i = 1:N
            H  = H  + a(i) * haar(x(j), i, J);
            P1 = P1 + a(i) * p1(x(j), i, J);
            P2 = P2 + a(i) * p2(x(j), i, J);            
        end;
        f(j) = 2 * (alpha1 + beta1 * x(j) + P2) * ...
            (beta1 + P1) + H;  
        % W(x) matrix computation        
        for k = 1:N
            W(j,k) = 2 * p2(x(j),k,J) * (beta1 + P1) + ...
                2 * (alpha1 + beta1 * x(j) + P2) * p1(x(j),k,J) + haar(x(j),k,J);            
        end; % for k
    end; % for j
    a_new = W \ (W*a - f);      % linear system solution
    r = abs(a_new - a);         % residual 
    disp(['iteration: ' num2str(iter_ind) ' error Newton: ' num2str(max(r))])   
    % Update variables
    a = a_new;
    iter_ind = iter_ind + 1;
end; % while
toc
% Reconstruct approximate solution
y = zeros(N,1);
for j = 1:N    
    S = 0;
    for i = 1:N
        S = S + a(i) * p2(x(j),i,J);
    end
    y(j) = alpha1 + x(j) * beta1 + S;
end; % for
%% Exact solution
yexact = - tan(x);
% critical point pi/2 ~= 1.5708
x_zero1 = 0.5 * pi; 
%% Runge - Kutta method
[x, y1] = ode113('model0', x, [alpha1 beta1]);
%% Plot graphics
set(0,'defaulttextinterpreter','latex')
set(0,'defaultaxesfontname','times')
set(0,'defaultaxesfontsize',12)
oft = 0.01;
% fig:01
figure('color','w')
plot(x,yexact,'g',x,y,'rs',x,y1(:,1),'b.')
xlabel('$x$'); ylabel('$y$');
title(['J = ' num2str(J) ', ' '2M = ' num2str(N)])
legend('Exact','WHM', 'RGK')
axis([-oft 1+oft min(yexact)-oft max(yexact)+oft])
% Absolute errors
rRGK = abs(y1(:,1) - yexact');
rWHM = abs(y - yexact');
rRW = abs(y - y1(:,1));
% fig:02
figure('color','w')
plot(x,rRGK,'b.-',x,rWHM,'r.-',x,rRW,'ms-')
xlabel('$x$'); ylabel('Absolute Error');
title('Absolute Error: $\max|y_{numeric} - y_{analytic}|$')
legend('RGK','WHM','Between RGK and WHM',...
    'Location','northoutside','Orientation','horizontal')
axis([-oft 1+oft min([rRGK; rWHM; rRW])-oft max([rRGK; rWHM; rRW])+oft])
%% Disp Errors
disp(['error RGK: ' num2str(max(rRGK)) ' error WHM: ' num2str(max(rWHM)) ...
    ' error RW: ' num2str(max(rRW))])
%% Save data
if flag == 1    
    cd 'dat'
    table0 = [x yexact' y y1(:,1)];
    fid = fopen('table0.txt','w');
    fprintf(fid, '%6.2f %6.2f %6.2f %6.2f\n', table0');
    fclose(fid);
    disp('Saved.')

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1] Siraj-ul-Islam, Imran Aziz, Bozidar Sarler, "The numerical solution

     of second-order boundary-value problems by collocation method with

     the Haar wavelets,"Mathematical and Computer Modelling, Vol. 52,

     No. 9-10, 1577-1590, 2012.


[2] Sahoo, Bishnupriya, "A study on solution of differential equations

     using Haar wavelet collocation method, MSc thesis, 2012.


🌈4 Matlab代码实现

相关文章
|
4月前
|
算法 5G vr&ar
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
|
5月前
|
算法
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
|
4月前
【光波电子学】MATLAB绘制光纤中线性偏振模式LP之单模光纤的电场分布(光斑)
该文章介绍了如何使用MATLAB绘制单模光纤中线性偏振模式LP₀₁的电场分布,并提供了相关的数学公式和参数用于模拟光纤中的光斑分布。
53 0
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
6月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
|
7月前
|
算法 计算机视觉 异构计算
基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于肤色检测算法的摘要:使用MATLAB 2022a和Vivado 2019.2进行测试和仿真,涉及图像预处理、RGB到YCbCr转换、肤色模型(基于阈值或概率)以及人脸检测。核心程序展示了如何读取图像数据并输入到FPGA处理,通过`tops`模块进行中值滤波、颜色空间转换及人脸检测,最终结果输出到"face.txt"。
|
7月前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
7月前
|
关系型数据库 新能源 调度
【matlab测试与修正】考虑源荷两侧不确定性的含风电电力系统低碳调度
【matlab测试与修正】考虑源荷两侧不确定性的含风电电力系统低碳调度
非线性优化 | 非线性问题matlab+yalmip求解案例
非线性优化 | 非线性问题matlab+yalmip求解案例
|
7月前
|
调度
知识分享|分段函数线性化及matlab测试
知识分享|分段函数线性化及matlab测试
下一篇
DataWorks