魏尔斯特拉斯函数

魏尔斯特拉斯函数(Weierstrass function) 是一个处处连续但处处不可微的函数,它是一个经典的反例,颠覆了人们对连续性和可微性之间关系的直觉。 它的一般形式为:

f(x) = Σ (aⁿ cos(bⁿπx)) , n = 0 to ∞

其中:

  • 0 < a < 1: 控制函数的振幅衰减速度。a 越接近 1,函数的震荡越剧烈。
  • b 是正奇数: 控制函数的频率。b 越大,函数震荡越快。
  • ab > 1 + (3π/2): 这是魏尔斯特拉斯证明其处处不可微的条件。 这个条件保证了函数在任何点都无法找到一个确定的切线。

函数的性质:

  • 处处连续: 可以通过逐项求和证明其连续性。每个项都是连续的,并且级数在任何点上都一致收敛。

  • 处处不可微: 这是魏尔斯特拉斯函数最令人惊奇的性质。 在任何点上,函数图像的局部变化都过于剧烈,以至于无法定义一个确定的切线斜率。 证明过程比较复杂,通常需要用到三角恒等式和级数的性质。

  • 自相似性: 在不同的尺度下,魏尔斯特拉斯函数的图像都表现出相似的特征。这是分形几何的重要特征。

import numpy as np
import matplotlib.pyplot as plt

def weierstrass(x, a=0.5, b=3, N=10):
    """
    计算魏尔斯特拉斯函数的近似值。

    Args:
        x: x坐标值
        a: 振幅参数 (0 < a < 1)
        b: 频率参数 (正奇数)
        N:  级数求和项数

    Returns:
        魏尔斯特拉斯函数在 x 处的近似值。
    """
    sum = 0
    for n in range(N):
        sum += a**n * np.cos(b**n * np.pi * x)
    return sum

# 生成数据点
x = np.linspace(-2, 2, 500)  # 调整区间和点数
y = weierstrass(x)

# 绘制图像
plt.plot(x, y)
plt.title("Weierstrass Function (a=0.5, b=3, N=10)")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.grid(True)
plt.show()

在这里插入图片描述

在MATLAB中实现Low魏尔斯特拉斯核(LWR,也称为局部加权回归或Locally Weighted Regression)模型,通常用于非线性数据拟合,其步骤可以分为以下几个: 1. **导入数据**: 首先,你需要导入包含自变量(x)和因变量(y)的数据集。可以使用`readtable`或`csvread`等函数。 ```matlab data = readtable('your_data.csv'); X = data(:, 'x'); % 自变量矩阵 Y = data(:, 'y'); % 因变量向量 ``` 2. **选择核函数**: LWR使用的是核函数来衡量点之间的相似度。常见的核有线性、多项式、径向基函数(RBF)等。在MATLAB中,RBF是最常用的,可以使用`kernel_function`来设置。 ```matlab % RBF核的例子 sigma = 0.5; % 核函数带宽 kernel_matrix = exp(-(X.' - X).^2 / (2 * sigma^2)); % 计算核矩阵 ``` 3. **权重计算**: 根据核函数值,计算每个样本对当前预测点的权重。通常使用高斯权重,权重越高,表示该点对预测的影响越大。 ```matlab weights = kernel_matrix ./ sum(kernel_matrix, 2); % 归一化 ``` 4. **拟合模型**: 使用加权最小二乘法找到最优的模型参数。MATLAB中的`fitrlinear`函数可以处理这个任务,但是LWR需要自定义优化过程。 ```matlab % 自定义函数求解参数 params = zeros(size(X, 2), 1); % 初始化参数 for i = 1:size(Y, 1) % 对每个训练点求局部拟合 local_params = optimize_weights(params, X(i,:), Y(i), weights); params = params + weights(i,:) * local_params; end params = params / sum(weights); % 求平均得到全局参数 ``` 5. **预测与评估**: 使用求得的参数对新的输入进行预测,并通过相关指标(如均方误差)评估模型性能。 ```matlab new_x = ...; % 新的自变量向量 prediction = predict(params, new_x); % 预测值 mse = mean((Y - prediction).^2); % 计算MSE ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值