基于小波哈尔法(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代码实现

目录
打赏
0
0
0
0
78
分享
相关文章
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
MATLAB在风险管理中的应用:从VaR计算到压力测试
本文介绍如何使用MATLAB进行风险管理,涵盖风险度量(如VaR)、压力测试和风险分解。通过历史模拟法、参数法和蒙特卡洛模拟法计算VaR,评估投资组合在极端市场条件下的表现,并通过边际VaR和成分VaR识别风险来源。结合具体案例和代码实现,帮助读者掌握MATLAB在风险管理中的应用,确保投资组合的稳健性。
数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
本项目展示了用于分析和模拟电磁干扰对数据链系统影响的算法。通过Matlab 2022a运行,提供无水印效果图预览。完整代码包含详细中文注释及操作视频。理论部分涵盖五种常见干扰模型:噪声调频、线性调频、噪声、扫频和灵巧干扰,详细介绍其原理并进行对比分析。灵巧干扰采用智能技术如认知无线电和机器学习,自适应调整干扰策略以优化效果。
基于1bitDAC的MU-MIMO的非线性预编码算法matlab性能仿真
在现代无线通信中,1-bit DAC的非线性预编码技术应用于MU-MIMO系统,旨在降低成本与能耗。本文采用MATLAB 2022a版本,深入探讨此技术,并通过算法运行效果图展示性能。核心代码支持中文注释与操作指导。理论部分包括信号量化、符号最大化准则,并对比ZF、WF、MRT及ADMM等算法,揭示了在1-bit量化条件下如何优化预编码以提升系统性能。
基于Dijkstra算法的最优行驶路线搜索matlab仿真,以实际城市复杂路线为例进行测试
使用MATLAB2022a实现的Dijkstra算法在城市地图上搜索最优行驶路线的仿真。用户通过鼠标点击设定起点和终点,算法规划路径并显示长度。测试显示,尽管在某些复杂情况下计算路径可能与实际有偏差,但多数场景下Dijkstra算法能找到接近最短路径。核心代码包括图的显示、用户交互及Dijkstra算法实现。算法基于图论,不断更新未访问节点的最短路径。测试结果证明其在简单路线及多数复杂城市路况下表现良好,但在交通拥堵等特殊情况下需结合其他数据提升准确性。
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
8月前
【光波电子学】MATLAB绘制光纤中线性偏振模式LP之单模光纤的电场分布(光斑)
该文章介绍了如何使用MATLAB绘制单模光纤中线性偏振模式LP₀₁的电场分布,并提供了相关的数学公式和参数用于模拟光纤中的光斑分布。
127 0
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
最新测试揭秘:TDengine 线性扩展能力能否满足你的性能需求?
**摘要:** TDengine 的线性扩展能力通过CPU和磁盘测试得以验证。在CPU测试中,使用TDengine V3.3.0.0和taosBenchmark,随着CPU核数从4增至12,写入性能线性提升,每个CPU增加对应约50W条/秒的提升,保持CPU在瓶颈状态。磁盘IO测试中,使用低速机械盘,增加磁盘数量导致写入性能成比例增长,充分利用新增磁盘IO。测试结果表明,无论CPU还是磁盘扩展,TDengine都能有效利用资源,展示出出色的线性扩展能力。
99 0
基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于肤色检测算法的摘要:使用MATLAB 2022a和Vivado 2019.2进行测试和仿真,涉及图像预处理、RGB到YCbCr转换、肤色模型(基于阈值或概率)以及人脸检测。核心程序展示了如何读取图像数据并输入到FPGA处理,通过`tops`模块进行中值滤波、颜色空间转换及人脸检测,最终结果输出到"face.txt"。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等