二维legendre多项式

Legendre 多项式常用来表征方形波前的畸变。

目录

    • 一维legendre多项式
      • 正交性
      • 自正交性
    • 二维Legendre多项式
      • 正交性证明
    • 可视化二维 Legendre 多项式
      • 解释
    • Legendre拟合
      • 方法1
      • MATLAB 实现
      • 解释
      • 方法2
      • 1. 定义一维 Legendre 多项式函数
      • 2. 生成二维 Legendre 多项式矩阵
      • 3. 计算 Legendre 系数
      • 4. 示例用法
      • 解释

一维legendre多项式

Legendre 多项式是一组在区间 [ − 1 , 1 ] [-1, 1] [1,1] 上定义的多项式序列,它们具有正交性。具体来说,如果 P n ( x ) P_n(x) Pn(x)表示第 n n n阶 Legendre 多项式有:

正交性

对于任何两个不同的整数 m 和 n m 和n mn,有:

∫ − 1 1 P m ( x ) P n ( x ) d x = 0 \int_{-1}^{1} P_m(x) P_n(x) \, dx = 0\ 11Pm(x)Pn(x)dx=0 

这意味着不同阶次的 Legendre 多项式在这个区间上关于标准内积是相互正交的。

自正交性

对于同一个 n n n值,Legendre 多项式的自正交条件为:

∫ − 1 1 [ P n ( x ) ] 2 d x = 2 2 n + 1 \int_{-1}^{1} [P_n(x)]^2 \, dx = \frac{2}{2n + 1} 11[Pn(x)]2dx=2n+12

这些性质使得 Legendre 多项式在数学物理、工程学以及数值分析等领域中有着广泛的应用,特别是在解决涉及球对称性的物理问题时,如电磁场理论、量子力学中的角动量理论等。

二维Legendre多项式

二维Legendre多项式通常不是以单一形式定义的,而是通过组合一维Legendre多项式来构造。在二维空间中,我们可以通过将一维Legendre多项式 P n ( x ) P_n(x) Pn(x) P m ( y ) P_m(y) Pm(y)组合起来,形成一个二维多项式 P n ( x ) P m ( y ) P_n(x)P_m(y) Pn(x)Pm(y),这样可以保持正交性。

考虑在单位方形 [-1, 1] ×[-1, 1]上定义的二维Legendre多项式 P n m ( x , y ) = P n ( x ) P m ( y ) P_{nm}(x,y) = P_n(x)P_m(y) Pnm(x,y)=Pn(x)Pm(y),其中 P n ( x ) P_n(x) Pn(x) P m ( y ) P_m(y) Pm(y) 分别是 x x x y y y方向上的一维Legendre多项式。

正交性证明

为了证明 P n m ( x , y ) P_{nm}(x,y) Pnm(x,y)的正交性,我们需要计算两个不同阶次的二维Legendre多项式之间的内积:

∬ [ − 1 , 1 ] 2 P n m ( x , y ) P k l ( x , y ) d x d y \iint_{[-1,1]^2} P_{nm}(x,y) P_{kl}(x,y) \, dx \, dy [1,1]2Pnm(x,y)Pkl(x,y)dxdy

这里 P n m ( x , y ) = P n ( x ) P m ( y ) P_{nm}(x,y) = P_n(x)P_m(y) Pnm(x,y)=Pn(x)Pm(y) P k l ( x , y ) = P k ( x ) P l ( y ) P_{kl}(x,y) = P_k(x)P_l(y) Pkl(x,y)=Pk(x)Pl(y)将积分展开:

∬ [ − 1 , 1 ] 2 P n ( x ) P m ( y ) P k ( x ) P l ( y ) d x d y = ( ∫ − 1 1 P n ( x ) P k ( x ) d x ) ( ∫ − 1 1 P m ( y ) P l ( y ) d y ) \iint_{[-1,1]^2} P_n(x)P_m(y)P_k(x)P_l(y) \, dx \, dy = \left( \int_{-1}^{1} P_n(x)P_k(x) \, dx \right) \left( \int_{-1}^{1} P_m(y)P_l(y) \, dy \right) [1,1]2Pn(x)Pm(y)Pk(x)Pl(y)dxdy=(11Pn(x)Pk(x)dx)(11Pm(y)Pl(y)dy)

根据一维Legendre多项式的正交性:

  • 如果 n ≠ k n \neq k n=k,则 ∫ − 1 1 P n ( x ) P k ( x ) d x = 0 \int_{-1}^{1} P_n(x)P_k(x) \, dx = 0 11Pn(x)Pk(x)dx=0
  • 如果 m ≠ l m \neq l m=l,则 ∫ − 1 1 P m ( y ) P l ( y ) d y = 0 \int_{-1}^{1} P_m(y)P_l(y) \, dy = 0 11Pm(y)Pl(y)dy=0

因此,当 n ≠ k n \neq k n=k m ≠ l m \neq l m=l 时,上述二重积分的结果为零,这表明 P n m ( x , y ) P_{nm}(x,y) Pnm(x,y) P k l ( x , y ) P_{kl}(x,y) Pkl(x,y)是正交的。

n = k n = k n=k m = l m = l m=l时,即两个多项式相同的情况下,积分结果为:

( ∫ − 1 1 [ P n ( x ) ] 2 d x ) ( ∫ − 1 1 [ P m ( y ) ] 2 d y ) = ( 2 2 n + 1 ) ( 2 2 m + 1 ) = 4 ( 2 n + 1 ) ( 2 m + 1 ) \left( \int_{-1}^{1} [P_n(x)]^2 \, dx \right) \left( \int_{-1}^{1} [P_m(y)]^2 \, dy \right) = \left( \frac{2}{2n+1} \right) \left( \frac{2}{2m+1} \right) = \frac{4}{(2n+1)(2m+1)} (11[Pn(x)]2dx)(11[Pm(y)]2dy)=(2n+12)(2m+12)=(2n+1)(2m+1)4

这就证明了二维Legendre多项式 P n m ( x , y ) P_{nm}(x,y) Pnm(x,y)在单位方形 [ − 1 , 1 ] × [ − 1 , 1 ] [-1, 1] \times [-1, 1] [1,1]×[1,1]上是正交的,并且当 n = k n = k n=k m = l m = l m=l时,它们的内积为 4 ( 2 n + 1 ) ( 2 m + 1 ) \frac{4}{(2n+1)(2m+1)} (2n+1)(2m+1)4。这种构造方法保证了二维Legendre多项式在多变量函数的正交分解中具有重要的应用价值。

可视化二维 Legendre 多项式

在 MATLAB 中可视化二维 Legendre 多项式可以通过以下步骤实现。我们将使用 meshgrid 函数生成网格点,然后计算每个网格点上的多项式值,最后使用 surfcontour 函数进行可视化。

下面是一个具体的例子,假设我们要可视化 P 2 ( x ) P 3 ( y ) P_{2}(x)P_{3}(y) P2(x)P3(y)这个二维 Legendre 多项式:

  1. 定义一维 Legendre 多项式
    我们可以使用递归公式或内置函数来定义一维 Legendre 多项式。

  2. 生成网格点
    使用 meshgrid 函数生成 x x x y y y 的网格点。

  3. 计算多项式值
    在每个网格点上计算 P 2 ( x ) P_2(x) P2(x) P 3 ( y ) P_3(y) P3(y)的值,然后乘积得到 P 2 ( x ) P 3 ( y ) P_{2}(x)P_{3}(y) P2(x)P3(y)

  4. 可视化
    使用 surfcontour 函数绘制三维表面图或等高线图。

以下是完整的 MATLAB 代码:

% 定义一维 Legendre 多项式函数
function P = legendre_poly(n, x)if n == 0P = ones(size(x));elseif n == 1P = x;elseP0 = ones(size(x));P1 = x;for k = 2:nP = ((2*k-1)*x.*P1 - (k-1)*P0) / k;P0 = P1;P1 = P;endend
end% 生成网格点
[x, y] = meshgrid(linspace(-1, 1, 100), linspace(-1, 1, 100));% 计算 P2(x) 和 P3(y)
P2_x = legendre_poly(2, x);
P3_y = legendre_poly(3, y);% 计算二维 Legendre 多项式 P2(x) * P3(y)
P23 = P2_x .* P3_y;% 绘制三维表面图
figure;
surf(x, y, P23);
shading interp;
colorbar;
xlabel('x');
ylabel('y');
zlabel('P_2(x) * P_3(y)');
title('2D Legendre Polynomial P_2(x) * P_3(y)');
view(3); % 设置视角为三维% 绘制等高线图
figure;
contourf(x, y, P23, 20); % 20 表示等高线的数量
colorbar;
xlabel('x');
ylabel('y');
title('Contour Plot of 2D Legendre Polynomial P_2(x) * P_3(y)');

解释

  1. 定义一维 Legendre 多项式函数legendre_poly 函数使用递归公式计算 (n) 阶 Legendre 多项式。
  2. 生成网格点meshgrid 函数生成 x x x y y y的网格点。
  3. 计算多项式值:分别计算 P 2 ( x ) P_2(x) P2(x) P 3 ( y ) P_3(y) P3(y) 的值,然后乘积得到 P 2 ( x ) ⋅ P 3 ( y ) P_2(x) \cdot P_3(y) P2(x)P3(y)
  4. 可视化:使用 surf 函数绘制三维表面图,使用 contourf 函数绘制等高线图。

在这里插入图片描述
图片出自:《基于单帧焦面图像的波前相位反演方法研究》

Legendre拟合

要计算波前 P ( x , y ) P(x, y) P(x,y)的 Legendre 系数,可以利用二维 Legendre 多项式的正交性。假设波前 P ( x , y ) P(x, y) P(x,y)在单位方形 [ − 1 , 1 ] × [ − 1 , 1 ] [-1, 1] \times [-1, 1] [1,1]×[1,1]上定义,我们可以将其展开为二维 Legendre 多项式的级数形式:

P ( x , y ) = ∑ n = 0 ∞ ∑ m = 0 ∞ c n m P n ( x ) P m ( y ) P(x, y) = \sum_{n=0}^{\infty} \sum_{m=0}^{\infty} c_{nm} P_n(x) P_m(y) P(x,y)=n=0m=0cnmPn(x)Pm(y)

其中 P n ( x ) P_n(x) Pn(x) P m ( y ) P_m(y) Pm(y)是一维 Legendre 多项式, c n m c_{nm} cnm是对应的 Legendre 系数。

方法1

利用正交性,可以通过以下步骤计算 c n m c_{nm} cnm

  1. 定义一维 Legendre 多项式
    使用递归公式或内置函数来定义一维 Legendre 多项式。

  2. 计算内积
    利用正交性,计算 c n m c_{nm} cnm的公式为:

c n m = ( 2 n + 1 ) ( 2 m + 1 ) 4 ∫ − 1 1 ∫ − 1 1 P ( x , y ) P n ( x ) P m ( y ) d x d y c_{nm} = \frac{(2n+1)(2m+1)}{4} \int_{-1}^{1} \int_{-1}^{1} P(x, y) P_n(x) P_m(y) \, dx \, dy cnm=4(2n+1)(2m+1)1111P(x,y)Pn(x)Pm(y)dxdy

MATLAB 实现

以下是一个 MATLAB 代码示例,用于计算波前 ( P(x, y) ) 的 Legendre 系数:

% 定义一维 Legendre 多项式函数
function P = legendre_poly(n, x)if n == 0P = ones(size(x));elseif n == 1P = x;elseP0 = ones(size(x));P1 = x;for k = 2:nP = ((2*k-1)*x.*P1 - (k-1)*P0) / k;P0 = P1;P1 = P;endend
end% 定义波前 P(x, y)
P = @(x, y) sin(pi*x).*cos(pi*y); % 示例波前% 计算 Legendre 系数
N = 5; % 最大阶数
c = zeros(N+1, N+1);for n = 0:Nfor m = 0:N% 生成网格点[X, Y] = meshgrid(linspace(-1, 1, 100), linspace(-1, 1, 100));% 计算 P_n(x) 和 P_m(y)Pn_x = legendre_poly(n, X);Pm_y = legendre_poly(m, Y);% 计算内积integrand = P(X, Y) .* Pn_x .* Pm_y;c(n+1, m+1) = (2*n+1)*(2*m+1)/4 * integral2(@(x, y) P(x, y) .* legendre_poly(n, x) .* legendre_poly(m, y), -1, 1, -1, 1);end
end% 显示系数
disp('Legendre 系数矩阵:');
disp(c);

解释

  1. 定义一维 Legendre 多项式函数legendre_poly 函数使用递归公式计算 n n n 阶 Legendre 多项式。
  2. 定义波前 P ( x , y ) P(x, y) P(x,y):这里使用了一个示例波前 P ( x , y ) = sin ⁡ ( π x ) cos ⁡ ( π y ) P(x, y) = \sin(\pi x) \cos(\pi y) P(x,y)=sin(πx)cos(πy)
  3. 计算 Legendre 系数
    • 生成网格点。
    • 计算每个网格点上的 P n ( x ) P_n(x) Pn(x) P m ( y ) P_m(y) Pm(y)
    • 计算内积 ∫ − 1 1 ∫ − 1 1 P ( x , y ) P n ( x ) P m ( y ) d x d y \int_{-1}^{1} \int_{-1}^{1} P(x, y) P_n(x) P_m(y) \, dx \, dy 1111P(x,y)Pn(x)Pm(y)dxdy
    • 利用正交性公式计算 c n m c_{nm} cnm

方法2

也可以可以借鉴 Zernike 系数计算的方法来计算 Legendre 系数。 Zernike-Polynomials-MATLAB。
以下是一个 MATLAB 代码示例,用于计算波前 P ( x , y ) P(x, y) P(x,y)的 Legendre 系数。

1. 定义一维 Legendre 多项式函数

首先,我们需要定义一个函数来计算一维 Legendre 多项式。

function P = legendre_poly(n, x)if n == 0P = ones(size(x));elseif n == 1P = x;elseP0 = ones(size(x));P1 = x;for k = 2:nP = ((2*k-1)*x.*P1 - (k-1)*P0) / k;P0 = P1;P1 = P;endend
end

2. 生成二维 Legendre 多项式矩阵

接下来,我们需要一个函数来生成二维 Legendre 多项式矩阵。

function legMats = legendre_mats(im, indices)dim = size(im);x = linspace(-1, 1, dim(2));y = linspace(-1, 1, dim(1));[X, Y] = meshgrid(x, y);legMats = [];for i = 1:size(indices, 1)n = indices(i, 1);m = indices(i, 2);Pn_x = legendre_poly(n, X);Pm_y = legendre_poly(m, Y);legMats(:,:,i) = Pn_x .* Pm_y;end
end

3. 计算 Legendre 系数

最后,我们编写一个函数来计算波前 P ( x , y ) P(x, y) P(x,y)的 Legendre 系数。

function [legMoments] = legendre_moments(P, indices)dim = size(P);NumCols = dim(2);NumRows = dim(1);legMats = legendre_mats(P, indices);leg_mats_reshaped = [];for i = 1:size(indices, 1)leg_mats_reshaped(:, i) = reshape(legMats(:, :, i), NumCols * NumRows, 1);endP(isnan(P)) = 0;leg_mats_reshaped(isnan(leg_mats_reshaped)) = 0;P_reshaped = reshape(P, NumCols * NumRows, 1);A = (leg_mats_reshaped.' * leg_mats_reshaped) \ (leg_mats_reshaped.' * P_reshaped);legMoments = A;
end

4. 示例用法

以下是一个示例,展示如何使用这些函数来计算波前 P ( x , y ) P(x, y) P(x,y)的 Legendre 系数。

% 创建一些波前 P(x, y) 过一个 100x100 网格
x = linspace(-1, 1, 100);
y = linspace(-1, 1, 100);
[X, Y] = meshgrid(x, y);
P = sin(pi * X) .* cos(pi * Y);% 指定希望使用的 Legendre 多项式的阶数
indices = [];
for n = 0:3for m = 0:3indices = [indices; n m];end
end% 计算 Legendre 系数
legMoments = legendre_moments(P, indices);% 显示系数及其对应的 (n, m) 索引
disp(['    Coeff     ', 'n        ', 'm']);
disp([legMoments indices]);

解释

  1. 定义一维 Legendre 多项式函数legendre_poly 函数使用递归公式计算 n n n阶 Legendre 多项式。
  2. 生成二维 Legendre 多项式矩阵legendre_mats 函数生成指定阶数的二维 Legendre 多项式矩阵。
  3. 计算 Legendre 系数legendre_moments 函数通过最小二乘法计算波前 P ( x , y ) P(x, y) P(x,y)的 Legendre 系数。
  4. 示例用法:创建一个示例波前 P ( x , y ) P(x, y) P(x,y),指定希望使用的 Legendre 多项式的阶数,并计算相应的 Legendre 系数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

台式电脑如何改ip地址:全面解析与实操指南

有时候,由于IP地址冲突、网络安全、隐私保护或特定应用需求,我们可能需要更改台式电脑的IP地址。然而,对于不熟悉网络设置的用户来说,这一过程可能显得复杂而陌生。本文将通过全面解析与实操指南,帮助大家轻松掌握台式…

【私聊记录】最近在忙什么啊?听说你在学人工智能?

小舒:哎,你最近在忙什么啊? 小元:我在学习人工智能呢。 小舒:人工智能?难不难学啊? 小元:不难,找到正确的学习姿势就不难了! 小舒:那你为什么想学…

电动越野车行业全面深入分析

电动越野摩托车是将电动技术与越野性能相结合的一类摩托车,采用电力驱动,具有环保、节能、低噪音等优点,同时保留了越野摩托车的强劲动力和适应复杂地形的能力。电动越野摩托车通常配备高性能电动机和电池组,可提供强劲的动力输出…

ctfshow--xss靶场web327-web333(一命速通不了的靶场)

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web327 打开页面是一个写信页面。 这里题目暗示不明显。 这里是要给admin写信&#xff0c;让他触发我们的xss。(不看解析不知道有个admin用户) payload: <svg οnlοadwindow.location.hrefhttp://xss平台地址…

法律文件智能识别:免费OCR平台优化数字化管理

一、系统概述 在法律行业&#xff0c;纸质文件的数字化需求日益迫切&#xff0c;合同、判决书、协议等文件的管理成为法律部门的一大难题。传统手动输入不仅耗时&#xff0c;且易出错。思通数科的OCR识别平台应运而生&#xff0c;以其开源、免费的特性为法律文档管理提供了智能…

Flutter-Engine 的定制实践:Text 绘制流程浅析及自定义underline的间距

前言 最近工作中处理的文本相关的内容较多&#xff0c;不论是刁钻的需求还是复杂的问题&#xff0c;最终都会引向一点“Flutter中的文本是如何绘制的&#xff1f;”。 这里我将以“调整下划线与文字的间距”为切入点并结合自定义Engine&#xff0c;记录一下我的个人分析和实践…

“基金申请精要:国自然基金撰写与SCI发表“

国自然基金项目撰写技巧与ChatGPT融合应用 随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。国家级和省级等各类项目的申请层出不穷&#xff0c;项目书的撰写几乎占据了申请人的全年时间。申请人既需要提出独特且有前瞻性的研究问题&#xff0c;具备突…

java的依赖注入

java的依赖注入是个什么东西&#xff1f; 计算机专业相关知识2024-08-07 17:26河北 摘要 •帮你速读文章内容 java中的依赖注入&#xff08;Dependency Injection, DI&#xff09;是一种软件设计模式&#xff0c;用于减少代码间的耦合度。它允许一个对象&#xff08;被依赖的…

别再为质量问题头疼了,六西格玛黑带培训来救场!

六西格玛&#xff0c;这一源自摩托罗拉的先进质量管理理念&#xff0c;以其严谨的数据分析、持续的流程改进和追求卓越的核心价值&#xff0c;在全球范围内赢得了广泛的认可与应用。而六西格玛黑带&#xff0c;作为这一体系中的精英&#xff0c;不仅掌握了深厚的统计学知识&…

深度学习基础知识-Batch Normalization(BN)超详细解析

一、背景和问题定义 在深层神经网络&#xff08;Deep Neural Networks, DNNs&#xff09;中&#xff0c;层与层之间的输入分布会随着参数更新不断发生变化&#xff0c;这种现象被称为内部协变量偏移&#xff08;Internal Covariate Shift&#xff09;。具体来说&#xff0c;由…

优雅的LUA数据记录方法-serpent序列化+LUA Table

目录 简述如何集成&#xff1f;如何使用序列化 反序列化 参考 简述 项目里需要使用LUA脚本将数据记录到文件&#xff0c;要方便的增加、查找、删除&#xff0c;要方便的加载与存回。 使用序列化/反序列化 lua table可以很容易实现这些功能。 序列化将table转换为字符串 反序列…

2024双11海外购物新选择,逆向代购商家的营销利器

各大电商平台早已蓄势待发&#xff0c;迎接双11这场年度消费盛宴。与往年相比&#xff0c;今年的双11筹备工作启动得更早&#xff0c;国庆假期刚一结束&#xff0c;各大平台便进入了紧张的筹备阶段。对于遍布全球的海外购物者而言&#xff0c;无论是热衷于探索中国文化的外国人…

Cyber​​Panel upgrademysqlstatus 远程命令执行漏洞(QVD-2024-44346)

0x01 产品简介 CyberPanel是一个开源的Web控制面板,它提供了一个用户友好的界面,用于管理网站、电子邮件、数据库、FTP账户等。CyberPanel旨在简化网站管理任务,使非技术用户也能轻松管理自己的在线资源。 0x02 漏洞概述 该漏洞源于upgrademysqlstatus接口未做身份验证和…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

大舍传媒:海外发稿传统新闻媒体发布新闻稿与门户媒体宣发的区别?

大舍传媒&#xff1a;海外发稿传统新闻媒体发布新闻稿与门户媒体宣发的区别&#xff1f; 在当今全球化的信息时代&#xff0c;新闻报道的传播渠道日益多元化&#xff0c;企业和个人在进行海外发稿时&#xff0c;往往面临着在传统新闻媒体和门户媒体之间的选择。那么&#xff0…

【在Linux世界中追寻伟大的One Piece】Socket编程TCP

目录 1 -> TCP socket API 2 -> V1 -Echo Server 2.1 -> 测试多个连接的情况 1 -> TCP socket API socket()&#xff1a; socket()打开一个网络通讯端口&#xff0c;如果成功的话&#xff0c;就像open()一样返回一个文件描述符。应用程序可以像读写文件一样用r…

NCCL安装(Ubuntu等)

目录 一、NCCL的定义二、安装NCCL的原因1、加速多GPU通信2、支持流行的深度学习框架3、提高计算效率4、易于使用和集成5、可扩展性 三、NCCL安装方法1、下载安装包2、更新APT数据库3、使用APT安装libnccl2包&#xff0c;另外&#xff0c;如果需要使用NCCL编译应用程序&#xff…

PostgreSQL的学习心得和知识总结(一百五十七)|新的 COPY 选项 LOG_VERBOSITY

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

Spring Boot 配置文件详解与最佳实践

目录 前言1. 配置文件的作用2. Spring Boot 主要配置内容2.1 Actuator 配置2.2 缓存配置2.3 核心配置2.4 数据库与数据迁移配置2.5 开发工具配置2.6 Docker Compose 配置2.7 JSON 配置2.8 安全配置 3. 多个配置文件的处理方法3.1 使用 Profile 文件区分环境3.2 结合优先级加载配…