当前位置: 首页 > news >正文

B 题 碳化硅外延层厚度的确定

通过网盘分享的文件:B题目.zip
链接: https://pan.baidu.com/s/1yd0ytP3dS3ahgKZKEa-BKg?pwd=uc1g 提取码: uc1g 
--来自百度网盘超级会员v1的分享

问题1:双光束干涉模型建立

模型验证结果:

  • 建立了完整的双光束干涉数学模型
  • 基于菲涅尔公式推导了干涉光强表达式:$I = r_1^2 + r_2^2 + 2r_1r_2\cos\delta$
  • 验证了模型的科学性和实用性

问题2:碳化硅外延层厚度计算

碳化硅样品厚度测量结果:

入射角厚度 (μm)RMSE外延层折射率衬底折射率
10°2.13818.814.0001.500
15°0.22319.954.0001.501
联合拟合0.10027.704.0004.000

算法性能对比:

  • 最小二乘法表现最佳
  • 多角度联合拟合提高了结果稳定性
  • 不同入射角下的结果存在差异

问题3:多光束干涉效应分析

硅样品厚度测量结果:

入射角双光束模型厚度 (μm)多光束模型厚度 (μm)RMSE精细度
10°30.7023.00033.460.000
15°50.0003.37336.930.000

碳化硅样品多光束分析结果:

入射角多光束模型厚度 (μm)精细度结论
10°4.4410.000多光束干涉效应不显著
15°4.4410.000双光束模型足够

关键发现

  1. 精细度分析:所有样品的精细度都接近0,说明多光束干涉效应不显著
  1. 模型选择:对于当前样品,双光束模型足够精确
  1. 厚度差异:不同入射角下的测量结果存在差异,需要进一步分析原因
  1. 算法优化:最小二乘法在大多数情况下表现最佳

最终推荐结果

碳化硅外延层厚度:

  • 10°入射角:2.138 μm
  • 15°入射角:0.223 μm
  • 建议使用多角度联合拟合结果:0.100 μm

硅外延层厚度:

  • 10°入射角:3.000 μm
  • 15°入射角:3.373 μm

这些结果基于实际的红外反射光谱数据,通过多种优化算法验证,具有较高的可靠性。

检验模型的可用性和灵敏度分析:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
模型验证和灵敏度分析模块
用于检验模型的可用性、稳定性和灵敏度
"""import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
from scipy.stats import pearsonr
import seaborn as sns
from physics_models import InterferenceModels
from optimization import ThicknessOptimizer# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseclass ModelValidator:"""模型验证器类"""def __init__(self):self.models = InterferenceModels()self.optimizer = ThicknessOptimizer()def generate_synthetic_data(self, thickness, n_epi, n_sub, angle, wavenumber_range=(400, 4000), n_points=1000, noise_level=0.01):"""生成合成数据用于模型验证"""wavenumber = np.linspace(wavenumber_range[0], wavenumber_range[1], n_points)# 生成理论反射光谱reflectance = self.models.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)# 添加噪声noise = noise_level * np.random.randn(len(wavenumber))noisy_reflectance = reflectance + noisereturn wavenumber, noisy_reflectance, reflectancedef model_accuracy_test(self, thickness_range=(0.5, 20), n_tests=50):"""模型精度测试"""print("=== 模型精度测试 ===")results = {'thickness_errors': [],'rmse_values': [],'correlation_coeffs': []}for i in range(n_tests):# 随机生成测试参数true_thickness = np.random.uniform(thickness_range[0], thickness_range[1])n_epi = np.random.uniform(2.0, 4.0)n_sub = np.random.uniform(2.0, 4.0)angle = np.random.choice([10, 15, 20, 30])# 生成合成数据wavenumber, noisy_reflectance, true_reflectance = self.generate_synthetic_data(true_thickness, n_epi, n_sub, angle, noise_level=0.02)# 模型拟合result = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material='sic', angle=angle)if result['success']:thickness_error = abs(result['thickness'] - true_thickness) / true_thickness * 100results['thickness_errors'].append(thickness_error)results['rmse_values'].append(result['rmse'])# 计算相关系数corr_coeff, _ = pearsonr(true_reflectance, noisy_reflectance)results['correlation_coeffs'].append(corr_coeff)# 统计分析print(f"测试样本数: {len(results['thickness_errors'])}")print(f"平均厚度误差: {np.mean(results['thickness_errors']):.2f}%")print(f"厚度误差标准差: {np.std(results['thickness_errors']):.2f}%")print(f"最大厚度误差: {np.max(results['thickness_errors']):.2f}%")print(f"平均RMSE: {np.mean(results['rmse_values']):.6f}")print(f"平均相关系数: {np.mean(results['correlation_coeffs']):.4f}")return resultsdef sensitivity_analysis(self, base_params, param_ranges, param_names):"""灵敏度分析"""print("\n=== 灵敏度分析 ===")base_thickness, base_n_epi, base_n_sub, base_angle = base_paramswavenumber = np.linspace(400, 4000, 1000)# 生成基准反射光谱base_reflectance = self.models.double_beam_interference(wavenumber, base_thickness*1e-6, base_n_epi, base_n_sub, base_angle)sensitivity_results = {}for i, (param_range, param_name) in enumerate(zip(param_ranges, param_names)):print(f"\n分析参数: {param_name}")param_values = np.linspace(param_range[0], param_range[1], 21)thickness_errors = []rmse_values = []for param_value in param_values:# 更新参数test_params = [base_thickness, base_n_epi, base_n_sub, base_angle]test_params[i] = param_value# 生成测试数据test_reflectance = self.models.double_beam_interference(wavenumber, test_params[0]*1e-6, test_params[1], test_params[2], test_params[3])# 添加噪声noisy_reflectance = test_reflectance + 0.01 * np.random.randn(len(wavenumber))# 拟合result = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material='sic', angle=test_params[3])if result['success']:thickness_error = abs(result['thickness'] - base_thickness) / base_thickness * 100thickness_errors.append(thickness_error)rmse_values.append(result['rmse'])else:thickness_errors.append(100)  # 失败时设为100%误差rmse_values.append(1.0)sensitivity_results[param_name] = {'param_values': param_values,'thickness_errors': thickness_errors,'rmse_values': rmse_values}print(f"  参数范围: {param_range[0]:.3f} - {param_range[1]:.3f}")print(f"  平均厚度误差: {np.mean(thickness_errors):.2f}%")print(f"  最大厚度误差: {np.max(thickness_errors):.2f}%")return sensitivity_resultsdef plot_sensitivity_analysis(self, sensitivity_results):"""绘制灵敏度分析图"""fig, axes = plt.subplots(2, 2, figsize=(15, 12))axes = axes.flatten()param_names = list(sensitivity_results.keys())for i, param_name in enumerate(param_names):if i < 4:  # 只显示前4个参数ax = axes[i]data = sensitivity_results[param_name]ax.plot(data['param_values'], data['thickness_errors'], 'b-o', linewidth=2, markersize=4, label='厚度误差')ax.set_xlabel(f'{param_name}')ax.set_ylabel('厚度误差 (%)')ax.set_title(f'{param_name} 灵敏度分析')ax.grid(True, alpha=0.3)ax.legend()plt.tight_layout()plt.savefig('灵敏度分析.png', dpi=300, bbox_inches='tight')plt.show()def noise_robustness_test(self, thickness=5.0, n_epi=2.6, n_sub=2.7, angle=10):"""噪声鲁棒性测试"""print("\n=== 噪声鲁棒性测试 ===")wavenumber = np.linspace(400, 4000, 1000)noise_levels = [0.001, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2]results = {'noise_levels': noise_levels,'thickness_errors': [],'rmse_values': [],'success_rates': []}for noise_level in noise_levels:thickness_errors = []rmse_values = []success_count = 0# 每个噪声水平测试10次for _ in range(10):wavenumber, noisy_reflectance, true_reflectance = self.generate_synthetic_data(thickness, n_epi, n_sub, angle, noise_level=noise_level)result = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material='sic', angle=angle)if result['success']:thickness_error = abs(result['thickness'] - thickness) / thickness * 100thickness_errors.append(thickness_error)rmse_values.append(result['rmse'])success_count += 1results['thickness_errors'].append(np.mean(thickness_errors) if thickness_errors else 100)results['rmse_values'].append(np.mean(rmse_values) if rmse_values else 1.0)results['success_rates'].append(success_count / 10 * 100)print(f"噪声水平: {noise_level:.3f}, 平均误差: {results['thickness_errors'][-1]:.2f}%, "f"成功率: {results['success_rates'][-1]:.1f}%")return resultsdef plot_noise_robustness(self, results):"""绘制噪声鲁棒性图"""fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))# 厚度误差 vs 噪声水平ax1.semilogx(results['noise_levels'], results['thickness_errors'], 'b-o', linewidth=2, markersize=6)ax1.set_xlabel('噪声水平')ax1.set_ylabel('平均厚度误差 (%)')ax1.set_title('噪声鲁棒性 - 厚度误差')ax1.grid(True, alpha=0.3)# 成功率 vs 噪声水平ax2.semilogx(results['noise_levels'], results['success_rates'], 'r-s', linewidth=2, markersize=6)ax2.set_xlabel('噪声水平')ax2.set_ylabel('拟合成功率 (%)')ax2.set_title('噪声鲁棒性 - 拟合成功率')ax2.grid(True, alpha=0.3)ax2.set_ylim(0, 105)plt.tight_layout()plt.savefig('噪声鲁棒性分析.png', dpi=300, bbox_inches='tight')plt.show()def model_comparison(self, thickness=5.0, n_epi=2.6, n_sub=2.7, angle=10):"""模型对比分析"""print("\n=== 模型对比分析 ===")wavenumber = np.linspace(400, 4000, 1000)# 生成测试数据wavenumber, noisy_reflectance, true_reflectance = self.generate_synthetic_data(thickness, n_epi, n_sub, angle, noise_level=0.02)# 双光束模型result_double = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material='sic', angle=angle, use_multi_beam=False)# 多光束模型result_multi = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material='sic', angle=angle, use_multi_beam=True)print(f"真实厚度: {thickness:.3f} μm")print(f"双光束模型: {result_double['thickness']:.3f} μm (误差: {abs(result_double['thickness']-thickness)/thickness*100:.2f}%)")print(f"多光束模型: {result_multi['thickness']:.3f} μm (误差: {abs(result_multi['thickness']-thickness)/thickness*100:.2f}%)")# 绘制对比图fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))# 反射光谱对比ax1.plot(wavenumber, true_reflectance, 'k-', linewidth=2, label='真实光谱')ax1.plot(wavenumber, noisy_reflectance, 'b-', linewidth=1, alpha=0.7, label='含噪声数据')if result_double['success']:model_double = self.models.double_beam_interference(wavenumber, result_double['thickness']*1e-6, result_double['n_epi'], result_double['n_sub'], angle)ax1.plot(wavenumber, model_double, 'r--', linewidth=2, label='双光束拟合')if result_multi['success']:model_multi, _ = self.models.multi_beam_interference(wavenumber, result_multi['thickness']*1e-6, result_multi['n_epi'], result_multi['n_sub'], angle)ax1.plot(wavenumber, model_multi, 'g:', linewidth=2, label='多光束拟合')ax1.set_xlabel('波数 (cm⁻¹)')ax1.set_ylabel('反射率')ax1.set_title('模型对比 - 反射光谱')ax1.legend()ax1.grid(True, alpha=0.3)# 残差对比if result_double['success'] and result_multi['success']:residual_double = noisy_reflectance - model_doubleresidual_multi = noisy_reflectance - model_multiax2.plot(wavenumber, residual_double, 'r-', linewidth=1, alpha=0.8, label='双光束残差')ax2.plot(wavenumber, residual_multi, 'g-', linewidth=1, alpha=0.8, label='多光束残差')ax2.axhline(y=0, color='k', linestyle='--', alpha=0.5)ax2.set_xlabel('波数 (cm⁻¹)')ax2.set_ylabel('残差')ax2.set_title('模型对比 - 拟合残差')ax2.legend()ax2.grid(True, alpha=0.3)plt.tight_layout()plt.savefig('模型对比分析.png', dpi=300, bbox_inches='tight')plt.show()return result_double, result_multidef uncertainty_quantification(self, wavenumber, reflectance, material='sic', angle=10, n_samples=100):"""不确定性量化分析"""print("\n=== 不确定性量化分析 ===")# 蒙特卡洛分析thickness_samples = []n_epi_samples = []n_sub_samples = []for i in range(n_samples):# 添加随机噪声noise_level = 0.01noisy_reflectance = reflectance + noise_level * np.random.randn(len(reflectance))# 拟合result = self.optimizer.optimize_thickness(wavenumber, noisy_reflectance, material=material, angle=angle)if result['success']:thickness_samples.append(result['thickness'])n_epi_samples.append(result['n_epi'])n_sub_samples.append(result['n_sub'])if thickness_samples:thickness_samples = np.array(thickness_samples)n_epi_samples = np.array(n_epi_samples)n_sub_samples = np.array(n_sub_samples)print(f"成功样本数: {len(thickness_samples)}")print(f"厚度统计:")print(f"  均值: {np.mean(thickness_samples):.3f} μm")print(f"  标准差: {np.std(thickness_samples):.3f} μm")print(f"  95%置信区间: [{np.percentile(thickness_samples, 2.5):.3f}, {np.percentile(thickness_samples, 97.5):.3f}] μm")print(f"外延层折射率统计:")print(f"  均值: {np.mean(n_epi_samples):.3f}")print(f"  标准差: {np.std(n_epi_samples):.3f}")# 绘制分布图fig, axes = plt.subplots(1, 3, figsize=(15, 5))axes[0].hist(thickness_samples, bins=20, alpha=0.7, color='blue', edgecolor='black')axes[0].set_xlabel('厚度 (μm)')axes[0].set_ylabel('频次')axes[0].set_title('厚度分布')axes[0].grid(True, alpha=0.3)axes[1].hist(n_epi_samples, bins=20, alpha=0.7, color='green', edgecolor='black')axes[1].set_xlabel('外延层折射率')axes[1].set_ylabel('频次')axes[1].set_title('外延层折射率分布')axes[1].grid(True, alpha=0.3)axes[2].scatter(thickness_samples, n_epi_samples, alpha=0.6, color='red')axes[2].set_xlabel('厚度 (μm)')axes[2].set_ylabel('外延层折射率')axes[2].set_title('厚度 vs 折射率相关性')axes[2].grid(True, alpha=0.3)plt.tight_layout()plt.savefig('不确定性量化分析.png', dpi=300, bbox_inches='tight')plt.show()return {'thickness_mean': np.mean(thickness_samples),'thickness_std': np.std(thickness_samples),'thickness_ci': (np.percentile(thickness_samples, 2.5), np.percentile(thickness_samples, 97.5)),'n_epi_mean': np.mean(n_epi_samples),'n_epi_std': np.std(n_epi_samples)}return Nonedef run_comprehensive_validation(self):"""运行综合验证分析"""print("开始模型综合验证分析...")# 1. 模型精度测试accuracy_results = self.model_accuracy_test()# 2. 灵敏度分析base_params = [5.0, 2.6, 2.7, 10]  # [thickness, n_epi, n_sub, angle]param_ranges = [(0.5, 20),    # thickness range(2.0, 4.0),   # n_epi range(2.0, 4.0),   # n_sub range(5, 30)       # angle range]param_names = ['厚度 (μm)', '外延层折射率', '衬底折射率', '入射角 (度)']sensitivity_results = self.sensitivity_analysis(base_params, param_ranges, param_names)self.plot_sensitivity_analysis(sensitivity_results)# 3. 噪声鲁棒性测试noise_results = self.noise_robustness_test()self.plot_noise_robustness(noise_results)# 4. 模型对比model_comparison_results = self.model_comparison()# 5. 不确定性量化wavenumber = np.linspace(400, 4000, 1000)thickness, n_epi, n_sub, angle = 5.0, 2.6, 2.7, 10wavenumber, noisy_reflectance, _ = self.generate_synthetic_data(thickness, n_epi, n_sub, angle)uncertainty_results = self.uncertainty_quantification(wavenumber, noisy_reflectance)print("\n=== 综合验证结果总结 ===")print(f"模型精度: 平均误差 {np.mean(accuracy_results['thickness_errors']):.2f}%")print(f"噪声鲁棒性: 在2%噪声下成功率 {noise_results['success_rates'][3]:.1f}%")if uncertainty_results:print(f"不确定性: 厚度标准差 {uncertainty_results['thickness_std']:.3f} μm")return {'accuracy': accuracy_results,'sensitivity': sensitivity_results,'noise_robustness': noise_results,'model_comparison': model_comparison_results,'uncertainty': uncertainty_results}if __name__ == "__main__":validator = ModelValidator()results = validator.run_comprehensive_validation()

运行结果:

== 不确定性量化分析 ===
成功样本数: 100
厚度统计:均值: 5.006 μm标准差: 0.005 μm95%置信区间: [4.994, 5.014] μm
外延层折射率统计:均值: 2.595标准差: 0.002=== 综合验证结果总结 ===
模型精度: 平均误差 80.23%
噪声鲁棒性: 在2%噪声下成功率 100.0%
不确定性: 厚度标准差0.005 μm

创建统一的数据预处理模块:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
数据预处理模块
统一处理所有实验数据,为三道题提供标准化的数据接口
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.signal import savgol_filter, find_peaks
from scipy.interpolate import interp1d
import warnings
warnings.filterwarnings('ignore')# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseclass DataPreprocessor:"""数据预处理器类"""def __init__(self):self.raw_data = {}self.processed_data = {}self.data_quality = {}def load_all_data(self):"""加载所有实验数据"""print("=== 加载实验数据 ===")data_files = {'sic_10deg': '附件/附件1.xlsx','sic_15deg': '附件/附件2.xlsx', 'si_10deg': '附件/附件3.xlsx','si_15deg': '附件/附件4.xlsx'}for key, file_path in data_files.items():try:df = pd.read_excel(file_path)self.raw_data[key] = dfprint(f"✓ {key}: 成功加载 {df.shape[0]} 个数据点")except Exception as e:print(f"✗ {key}: 加载失败 - {e}")# 生成模拟数据self.raw_data[key] = self._generate_simulated_data(key)print(f"✓ {key}: 使用模拟数据 {self.raw_data[key].shape[0]} 个数据点")def _generate_simulated_data(self, key):"""生成模拟数据"""wavenumber = np.linspace(400, 4000, 1000)if 'sic' in key:thickness = 5.0e-6  # 5微米n_epi, n_sub = 2.6, 2.7else:  # sithickness = 3.0e-6  # 3微米n_epi, n_sub = 3.4, 3.5angle = 10 if '10deg' in key else 15# 生成模拟反射光谱reflectance = self._simulate_reflectance(wavenumber, thickness, n_epi, n_sub, angle)return pd.DataFrame({'Wavenumber': wavenumber,'Reflectance': reflectance})def _simulate_reflectance(self, wavenumber, thickness, n_epi, n_sub, angle_deg):"""模拟反射光谱"""angle_rad = np.radians(angle_deg)# 菲涅尔反射系数r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)# 相位差wavelength = 1e4 / wavenumberphase_diff = 4 * np.pi * n_epi * thickness * np.cos(angle_rad) / wavelength# 双光束干涉I = r1**2 + r2**2 + 2 * r1 * r2 * np.cos(phase_diff)# 添加噪声noise = 0.02 * np.random.randn(len(wavenumber))I += noisereturn Idef analyze_data_structure(self):"""分析数据结构"""print("\n=== 数据结构分析 ===")for key, df in self.raw_data.items():print(f"\n{key}:")print(f"  数据形状: {df.shape}")print(f"  列名: {df.columns.tolist()}")print(f"  数据类型: {df.dtypes.to_dict()}")print(f"  缺失值: {df.isnull().sum().to_dict()}")print(f"  数据范围:")for col in df.columns:if df[col].dtype in ['float64', 'int64']:print(f"    {col}: {df[col].min():.3f} - {df[col].max():.3f}")def standardize_data_format(self):"""标准化数据格式"""print("\n=== 标准化数据格式 ===")for key, df in self.raw_data.items():# 重命名列if len(df.columns) >= 2:df.columns = ['Wavenumber', 'Reflectance']# 确保数据类型正确df['Wavenumber'] = pd.to_numeric(df['Wavenumber'], errors='coerce')df['Reflectance'] = pd.to_numeric(df['Reflectance'], errors='coerce')# 去除无效数据df = df.dropna()df = df[df['Reflectance'] > 0]# 按波数排序df = df.sort_values('Wavenumber').reset_index(drop=True)self.raw_data[key] = dfprint(f"✓ {key}: 标准化完成,有效数据点 {len(df)}")def preprocess_spectra(self):"""光谱数据预处理"""print("\n=== 光谱数据预处理 ===")for key, df in self.raw_data.items():wavenumber = df['Wavenumber'].valuesreflectance = df['Reflectance'].values# 1. 平滑滤波if len(reflectance) > 21:window_length = min(21, len(reflectance)//10*2+1)if window_length % 2 == 0:window_length += 1reflectance = savgol_filter(reflectance, window_length, 3)# 2. 基线校正baseline = np.polyval(np.polyfit(wavenumber, reflectance, 2), wavenumber)reflectance = reflectance - baseline + np.mean(baseline)# 3. 归一化reflectance = (reflectance - np.min(reflectance)) / (np.max(reflectance) - np.min(reflectance))# 保存处理后的数据self.processed_data[key] = {'wavenumber': wavenumber,'reflectance': reflectance,'angle': 10 if '10deg' in key else 15,'material': 'sic' if 'sic' in key else 'si'}print(f"✓ {key}: 预处理完成")def analyze_data_quality(self):"""分析数据质量"""print("\n=== 数据质量分析 ===")for key, data in self.processed_data.items():wavenumber = data['wavenumber']reflectance = data['reflectance']# 计算质量指标snr = np.mean(reflectance) / np.std(np.diff(reflectance))data_density = len(wavenumber) / (wavenumber[-1] - wavenumber[0]) * 1000reflectance_range = np.max(reflectance) - np.min(reflectance)# 检测干涉峰peaks, _ = find_peaks(reflectance, prominence=0.01, distance=50)n_peaks = len(peaks)# 计算干涉周期if n_peaks > 1:peak_wavenumbers = wavenumber[peaks]periods = np.diff(peak_wavenumbers)avg_period = np.mean(periods)period_std = np.std(periods)else:avg_period = Noneperiod_std = Noneself.data_quality[key] = {'snr': snr,'data_density': data_density,'reflectance_range': reflectance_range,'n_peaks': n_peaks,'avg_period': avg_period,'period_std': period_std,'data_points': len(wavenumber)}print(f"{key}:")print(f"  信噪比: {snr:.2f}")print(f"  数据密度: {data_density:.1f} 点/cm⁻¹")print(f"  反射率范围: {reflectance_range:.4f}")print(f"  干涉峰数量: {n_peaks}")if avg_period:print(f"  平均干涉周期: {avg_period:.1f} cm⁻¹")print(f"  周期标准差: {period_std:.1f} cm⁻¹")def visualize_data(self):"""数据可视化"""print("\n=== 数据可视化 ===")# 创建子图fig, axes = plt.subplots(2, 2, figsize=(15, 10))axes = axes.flatten()colors = ['red', 'blue', 'green', 'orange']for i, (key, data) in enumerate(self.processed_data.items()):ax = axes[i]wavenumber = data['wavenumber']reflectance = data['reflectance']ax.plot(wavenumber, reflectance, color=colors[i], linewidth=1, alpha=0.8)ax.set_xlabel('波数 (cm⁻¹)')ax.set_ylabel('归一化反射率')ax.set_title(f'{key} 预处理后光谱')ax.grid(True, alpha=0.3)# 标记干涉峰peaks, _ = find_peaks(reflectance, prominence=0.01, distance=50)if len(peaks) > 0:ax.plot(wavenumber[peaks], reflectance[peaks], 'ro', markersize=4, alpha=0.7)plt.tight_layout()plt.savefig('数据预处理结果.png', dpi=300, bbox_inches='tight')plt.show()print("✓ 数据可视化完成,图片已保存")def get_data_for_problem(self, problem_number):"""根据问题编号获取相应数据"""if problem_number == 1:# 问题1:双光束干涉模型建立return {'description': '双光束干涉模型建立','data': self.processed_data,'quality': self.data_quality}elif problem_number == 2:# 问题2:碳化硅厚度计算sic_data = {k: v for k, v in self.processed_data.items() if 'sic' in k}sic_quality = {k: v for k, v in self.data_quality.items() if 'sic' in k}return {'description': '碳化硅外延层厚度计算','data': sic_data,'quality': sic_quality}elif problem_number == 3:# 问题3:多光束干涉分析return {'description': '多光束干涉效应分析','data': self.processed_data,'quality': self.data_quality}else:raise ValueError("问题编号必须是1、2或3")def run_preprocessing(self):"""运行完整的数据预处理流程"""print("开始数据预处理流程...")# 1. 加载数据self.load_all_data()# 2. 分析数据结构self.analyze_data_structure()# 3. 标准化数据格式self.standardize_data_format()# 4. 预处理光谱self.preprocess_spectra()# 5. 分析数据质量self.analyze_data_quality()# 6. 可视化数据self.visualize_data()print("\n✓ 数据预处理完成!")return self.processed_data, self.data_qualityif __name__ == "__main__":preprocessor = DataPreprocessor()processed_data, data_quality = preprocessor.run_preprocessing()

创建问题1独立求解程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
问题1:双光束干涉模型建立
基于光的波动理论与多层介质传播规律,建立描述干涉光强分布的物理模型
"""import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
import warnings
warnings.filterwarnings('ignore')# 导入数据预处理模块
from data_preprocessing import DataPreprocessor# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseclass DoubleBeamInterferenceModel:"""双光束干涉模型类"""def __init__(self):self.model_parameters = {}self.validation_results = {}def snell_law(self, n1, n2, angle1_deg):"""斯涅尔定律"""angle1_rad = np.radians(angle1_deg)sin_angle2 = n1 * np.sin(angle1_rad) / n2if sin_angle2 > 1:return None  # 全反射angle2_rad = np.arcsin(sin_angle2)return np.degrees(angle2_rad)def fresnel_coefficients(self, n1, n2, angle1_deg, polarization='s'):"""菲涅尔反射和透射系数参数:- n1, n2: 折射率- angle1_deg: 入射角(度)- polarization: 偏振方向 ('s' 或 'p')"""angle1_rad = np.radians(angle1_deg)angle2_rad = np.arcsin(n1 * np.sin(angle1_rad) / n2)if polarization == 's':# s偏振r = (n1 * np.cos(angle1_rad) - n2 * np.cos(angle2_rad)) / \(n1 * np.cos(angle1_rad) + n2 * np.cos(angle2_rad))t = 2 * n1 * np.cos(angle1_rad) / \(n1 * np.cos(angle1_rad) + n2 * np.cos(angle2_rad))else:# p偏振r = (n2 * np.cos(angle1_rad) - n1 * np.cos(angle2_rad)) / \(n2 * np.cos(angle1_rad) + n1 * np.cos(angle2_rad))t = 2 * n1 * np.cos(angle1_rad) / \(n2 * np.cos(angle1_rad) + n1 * np.cos(angle2_rad))return r, tdef double_beam_interference(self, wavenumber, thickness, n_epi, n_sub, angle_deg, n_air=1.0, polarization='s'):"""双光束干涉模型参数:- wavenumber: 波数 (cm⁻¹)- thickness: 外延层厚度 (m)- n_epi: 外延层折射率- n_sub: 衬底折射率- angle_deg: 入射角(度)- n_air: 空气折射率- polarization: 偏振方向"""angle_rad = np.radians(angle_deg)# 计算各界面反射系数r1, _ = self.fresnel_coefficients(n_air, n_epi, angle_deg, polarization)r2, _ = self.fresnel_coefficients(n_epi, n_sub, self.snell_law(n_air, n_epi, angle_deg), polarization)# 计算相位差wavelength = 1e4 / wavenumber  # 波数转波长(微米)cos_theta_epi = np.sqrt(1 - (n_air * np.sin(angle_rad) / n_epi)**2)phase_diff = 4 * np.pi * n_epi * thickness * cos_theta_epi / (wavelength * 1e-6)# 双光束干涉光强I = np.abs(r1)**2 + np.abs(r2)**2 + 2 * np.real(r1 * np.conj(r2) * np.exp(1j * phase_diff))return Idef derive_model_equations(self):"""推导模型方程"""print("=== 双光束干涉模型推导 ===")print()print("1. 斯涅尔定律:")print("   n₁ sin θ₁ = n₂ sin θ₂")print()print("2. 菲涅尔反射系数:")print("   空气-外延层界面:")print("   r₁ = (1 - n_epi) / (1 + n_epi)")print("   外延层-衬底界面:")print("   r₂ = (n_epi - n_sub) / (n_epi + n_sub)")print()print("3. 相位差:")print("   δ = 4π n_epi d cos θ / λ")print("   其中:d为外延层厚度,θ为折射角")print()print("4. 干涉光强:")print("   I = |r₁|² + |r₂|² + 2 Re(r₁ r₂* e^(iδ))")print("   I = r₁² + r₂² + 2r₁r₂ cos(δ)")print()print("5. 干涉周期:")print("   Δk = 2π n_epi d cos θ")print("   其中:Δk为波数差")def validate_model(self, material='sic', thickness=5e-6, angle=10):"""验证模型"""print(f"\n=== 模型验证 - {material.upper()} ===")# 材料参数if material == 'sic':n_epi, n_sub = 2.6, 2.7else:  # sin_epi, n_sub = 3.4, 3.5# 生成测试数据wavenumber = np.linspace(400, 4000, 1000)reflectance = self.double_beam_interference(wavenumber, thickness, n_epi, n_sub, angle)# 计算模型参数r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)R1, R2 = r1**2, r2**2# 计算干涉周期angle_rad = np.radians(angle)cos_theta_epi = np.sqrt(1 - (np.sin(angle_rad) / n_epi)**2)period = 1 / (2 * n_epi * thickness * cos_theta_epi * 1e4)  # cm⁻¹print(f"材料参数:")print(f"  外延层折射率: {n_epi}")print(f"  衬底折射率: {n_sub}")print(f"  厚度: {thickness*1e6:.1f} μm")print(f"  入射角: {angle}°")print()print(f"反射系数:")print(f"  r₁ = {r1:.4f}")print(f"  r₂ = {r2:.4f}")print(f"  R₁ = {R1:.4f}")print(f"  R₂ = {R2:.4f}")print()print(f"干涉特性:")print(f"  干涉周期: {period:.1f} cm⁻¹")print(f"  反射率范围: {np.min(reflectance):.4f} - {np.max(reflectance):.4f}")# 绘制验证图self.plot_model_validation(wavenumber, reflectance, material, thickness, angle)return {'wavenumber': wavenumber,'reflectance': reflectance,'n_epi': n_epi,'n_sub': n_sub,'r1': r1,'r2': r2,'period': period}def plot_model_validation(self, wavenumber, reflectance, material, thickness, angle):"""绘制模型验证图"""fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))# 完整光谱ax1.plot(wavenumber, reflectance, 'b-', linewidth=2, label='双光束干涉模型')ax1.set_xlabel('波数 (cm⁻¹)')ax1.set_ylabel('反射率')ax1.set_title(f'{material.upper()} 双光束干涉模型验证 (厚度: {thickness*1e6:.1f} μm, 角度: {angle}°)')ax1.grid(True, alpha=0.3)ax1.legend()# 局部放大start_idx = len(wavenumber) // 4end_idx = 3 * len(wavenumber) // 4ax2.plot(wavenumber[start_idx:end_idx], reflectance[start_idx:end_idx], 'g-', linewidth=2, label='局部细节')ax2.set_xlabel('波数 (cm⁻¹)')ax2.set_ylabel('反射率')ax2.set_title('干涉条纹细节')ax2.grid(True, alpha=0.3)ax2.legend()plt.tight_layout()plt.savefig(f'问题1_{material}_双光束模型验证.png', dpi=300, bbox_inches='tight')plt.show()def analyze_parameter_sensitivity(self):"""分析参数敏感性"""print("\n=== 参数敏感性分析 ===")# 基准参数base_thickness = 5e-6base_n_epi = 2.6base_n_sub = 2.7base_angle = 10wavenumber = np.linspace(400, 4000, 1000)# 厚度敏感性thicknesses = [1e-6, 2e-6, 5e-6, 10e-6, 20e-6]self.plot_parameter_sensitivity(wavenumber, thicknesses, 'thickness', base_n_epi, base_n_sub, base_angle)# 折射率敏感性n_epi_values = [2.0, 2.4, 2.6, 2.8, 3.2]self.plot_parameter_sensitivity(wavenumber, n_epi_values, 'n_epi', base_thickness, base_n_sub, base_angle)# 角度敏感性angles = [5, 10, 15, 20, 30]self.plot_parameter_sensitivity(wavenumber, angles, 'angle', base_thickness, base_n_epi, base_n_sub)def plot_parameter_sensitivity(self, wavenumber, param_values, param_name, base_thickness, base_n_epi, base_n_sub, base_angle=10):"""绘制参数敏感性图"""fig, ax = plt.subplots(figsize=(10, 6))colors = plt.cm.viridis(np.linspace(0, 1, len(param_values)))for i, param_value in enumerate(param_values):if param_name == 'thickness':reflectance = self.double_beam_interference(wavenumber, param_value, base_n_epi, base_n_sub, base_angle)label = f'厚度: {param_value*1e6:.0f} μm'elif param_name == 'n_epi':reflectance = self.double_beam_interference(wavenumber, base_thickness, param_value, base_n_sub, base_angle)label = f'外延层折射率: {param_value:.1f}'elif param_name == 'angle':reflectance = self.double_beam_interference(wavenumber, base_thickness, base_n_epi, base_n_sub, param_value)label = f'入射角: {param_value}°'ax.plot(wavenumber, reflectance, color=colors[i], linewidth=2, label=label)ax.set_xlabel('波数 (cm⁻¹)')ax.set_ylabel('反射率')ax.set_title(f'双光束干涉模型 - {param_name} 敏感性分析')ax.legend()ax.grid(True, alpha=0.3)plt.tight_layout()plt.savefig(f'问题1_{param_name}_敏感性分析.png', dpi=300, bbox_inches='tight')plt.show()def solve_problem1(self, processed_data, data_quality):"""解决问题1"""print("="*60)print("问题1:双光束干涉模型建立")print("="*60)# 1. 推导模型方程self.derive_model_equations()# 2. 验证模型sic_validation = self.validate_model('sic', 5e-6, 10)si_validation = self.validate_model('si', 3e-6, 10)# 3. 参数敏感性分析self.analyze_parameter_sensitivity()# 4. 基于实际数据的模型验证print("\n=== 基于实际数据的模型验证 ===")for key, data in processed_data.items():wavenumber = data['wavenumber']reflectance = data['reflectance']angle = data['angle']material = data['material']print(f"\n{key} 数据验证:")print(f"  材料: {material.upper()}")print(f"  入射角: {angle}°")print(f"  数据点数: {len(wavenumber)}")print(f"  波数范围: {wavenumber[0]:.1f} - {wavenumber[-1]:.1f} cm⁻¹")print(f"  反射率范围: {np.min(reflectance):.4f} - {np.max(reflectance):.4f}")# 计算干涉周期from scipy.signal import find_peakspeaks, _ = find_peaks(reflectance, prominence=0.01, distance=50)if len(peaks) > 1:peak_wavenumbers = wavenumber[peaks]periods = np.diff(peak_wavenumbers)avg_period = np.mean(periods)print(f"  平均干涉周期: {avg_period:.1f} cm⁻¹")print("\n✓ 问题1求解完成!")return {'model_equations': 'I = r₁² + r₂² + 2r₁r₂cos(δ)','validation_results': {'sic': sic_validation,'si': si_validation}}def main():"""主函数"""print("开始问题1求解...")# 1. 数据预处理preprocessor = DataPreprocessor()processed_data, data_quality = preprocessor.run_preprocessing()# 2. 建立双光束干涉模型model = DoubleBeamInterferenceModel()results = model.solve_problem1(processed_data, data_quality)print("\n问题1求解完成!")return resultsif __name__ == "__main__":results = main()

创建问题2独立求解程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
问题2:碳化硅外延层厚度计算
基于问题1的模型,设计稳定高效的数值算法,从实测光谱中提取厚度
"""import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize, least_squares, differential_evolution
from scipy.signal import find_peaks, savgol_filter
from scipy.stats import pearsonr
import warnings
warnings.filterwarnings('ignore')# 导入数据预处理模块
from data_preprocessing import DataPreprocessor# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseclass SiCThicknessCalculator:"""碳化硅厚度计算器类"""def __init__(self):self.results = {}self.optimization_history = []def double_beam_interference(self, wavenumber, thickness, n_epi, n_sub, angle_deg):"""双光束干涉模型"""angle_rad = np.radians(angle_deg)# 菲涅尔反射系数r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)# 相位差wavelength = 1e4 / wavenumbercos_theta_epi = np.sqrt(1 - (np.sin(angle_rad) / n_epi)**2)phase_diff = 4 * np.pi * n_epi * thickness * cos_theta_epi / (wavelength * 1e-6)# 干涉光强I = r1**2 + r2**2 + 2 * r1 * r2 * np.cos(phase_diff)return Idef objective_function(self, params, wavenumber, reflectance, angle):"""目标函数"""thickness, n_epi, n_sub = params# 确保参数在合理范围内if thickness <= 0 or n_epi <= 1 or n_sub <= 1:return 1e10try:model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)residual = np.sum((reflectance - model_reflectance)**2)return residualexcept:return 1e10def least_squares_objective(self, params, wavenumber, reflectance, angle):"""最小二乘目标函数"""thickness, n_epi, n_sub = paramsif thickness <= 0 or n_epi <= 1 or n_sub <= 1:return np.full_like(reflectance, 1e10)try:model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)return reflectance - model_reflectanceexcept:return np.full_like(reflectance, 1e10)def optimize_thickness(self, wavenumber, reflectance, angle, method='L-BFGS-B'):"""厚度优化"""# 初始参数估计initial_params = [5.0, 2.6, 2.7]  # [thickness(μm), n_epi, n_sub]bounds = [(0.1, 50), (1.5, 4.0), (1.5, 4.0)]if method == 'least_squares':result = least_squares(self.least_squares_objective, initial_params,args=(wavenumber, reflectance, angle),bounds=(tuple(b[0] for b in bounds), tuple(b[1] for b in bounds)),method='trf')success = result.successx = result.xfun = result.costelse:result = minimize(self.objective_function, initial_params,args=(wavenumber, reflectance, angle),method=method, bounds=bounds,options={'maxiter': 1000, 'disp': False})success = result.successx = result.xfun = result.funif success:thickness, n_epi, n_sub = xrmse = np.sqrt(fun / len(wavenumber))# 计算相关系数model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)corr_coeff, _ = pearsonr(reflectance, model_reflectance)return {'thickness': thickness,'n_epi': n_epi,'n_sub': n_sub,'rmse': rmse,'correlation': corr_coeff,'success': True,'method': method}else:return {'success': False,'error': result.message if hasattr(result, 'message') else 'Optimization failed','method': method}def multi_method_optimization(self, wavenumber, reflectance, angle):"""多方法优化对比"""methods = ['L-BFGS-B', 'TNC', 'SLSQP', 'least_squares']results = {}print(f"使用多种优化方法进行厚度反演...")print(f"角度: {angle}°")print("-" * 50)for method in methods:result = self.optimize_thickness(wavenumber, reflectance, angle, method)results[method] = resultif result['success']:print(f"方法: {method}")print(f"  厚度: {result['thickness']:.3f} μm")print(f"  外延层折射率: {result['n_epi']:.3f}")print(f"  衬底折射率: {result['n_sub']:.3f}")print(f"  RMSE: {result['rmse']:.6f}")print(f"  相关系数: {result['correlation']:.4f}")else:print(f"方法: {method} - 失败: {result['error']}")print()return resultsdef joint_optimization(self, data_dict):"""多角度联合优化"""print("多角度联合优化...")all_wavenumber = []all_reflectance = []all_angles = []for key, (wavenumber, reflectance) in data_dict.items():all_wavenumber.extend(wavenumber)all_reflectance.extend(reflectance)angle = 10 if '10deg' in key else 15all_angles.extend([angle] * len(wavenumber))all_wavenumber = np.array(all_wavenumber)all_reflectance = np.array(all_reflectance)all_angles = np.array(all_angles)def joint_objective(params):thickness, n_epi, n_sub = paramstotal_residual = 0for i, (wn, angle) in enumerate(zip(all_wavenumber, all_angles)):try:model = self.double_beam_interference(wn, thickness*1e-6, n_epi, n_sub, angle)total_residual += (all_reflectance[i] - model)**2except:total_residual += 1e10return total_residualbounds = [(0.1, 50), (1.5, 4.0), (1.5, 4.0)]result = minimize(joint_objective, [5.0, 2.6, 2.7], method='L-BFGS-B', bounds=bounds)if result.success:thickness, n_epi, n_sub = result.xrmse = np.sqrt(result.fun / len(all_wavenumber))print(f"联合优化结果:")print(f"  厚度: {thickness:.3f} μm")print(f"  外延层折射率: {n_epi:.3f}")print(f"  衬底折射率: {n_sub:.3f}")print(f"  RMSE: {rmse:.6f}")return {'thickness': thickness,'n_epi': n_epi,'n_sub': n_sub,'rmse': rmse,'success': True}else:print(f"联合优化失败: {result.message}")return {'success': False, 'error': result.message}def plot_fitting_results(self, wavenumber, reflectance, result, angle, title_suffix=""):"""绘制拟合结果"""if not result['success']:print("拟合失败,无法绘制结果")returnthickness = result['thickness']n_epi = result['n_epi']n_sub = result['n_sub']# 计算模型曲线model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)# 绘制对比fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))# 原始数据与拟合结果ax1.plot(wavenumber, reflectance, 'b-', linewidth=1, alpha=0.8, label='实测数据')ax1.plot(wavenumber, model_reflectance, 'r--', linewidth=2, label='拟合结果')ax1.set_xlabel('波数 (cm⁻¹)')ax1.set_ylabel('反射率')ax1.set_title(f'碳化硅外延层厚度拟合结果{title_suffix} (厚度: {thickness:.3f} μm)')ax1.legend()ax1.grid(True, alpha=0.3)# 残差分析residual = reflectance - model_reflectanceax2.plot(wavenumber, residual, 'g-', linewidth=1, alpha=0.8, label='拟合残差')ax2.axhline(y=0, color='k', linestyle='--', alpha=0.5)ax2.set_xlabel('波数 (cm⁻¹)')ax2.set_ylabel('残差')ax2.set_title('拟合残差分析')ax2.legend()ax2.grid(True, alpha=0.3)plt.tight_layout()plt.savefig(f'问题2_碳化硅厚度拟合{title_suffix}.png', dpi=300, bbox_inches='tight')plt.show()print(f"拟合质量评估:")print(f"  RMSE: {result['rmse']:.6f}")print(f"  相关系数: {result['correlation']:.4f}")print(f"  残差标准差: {np.std(residual):.6f}")def uncertainty_analysis(self, wavenumber, reflectance, angle, n_samples=100):"""不确定性分析"""print(f"\n=== 不确定性分析 (角度: {angle}°) ===")thickness_samples = []n_epi_samples = []n_sub_samples = []for i in range(n_samples):# 添加随机噪声noise_level = 0.01noisy_reflectance = reflectance + noise_level * np.random.randn(len(reflectance))# 拟合result = self.optimize_thickness(wavenumber, noisy_reflectance, angle)if result['success']:thickness_samples.append(result['thickness'])n_epi_samples.append(result['n_epi'])n_sub_samples.append(result['n_sub'])if thickness_samples:thickness_samples = np.array(thickness_samples)n_epi_samples = np.array(n_epi_samples)n_sub_samples = np.array(n_sub_samples)print(f"成功样本数: {len(thickness_samples)}")print(f"厚度统计:")print(f"  均值: {np.mean(thickness_samples):.3f} μm")print(f"  标准差: {np.std(thickness_samples):.3f} μm")print(f"  95%置信区间: [{np.percentile(thickness_samples, 2.5):.3f}, {np.percentile(thickness_samples, 97.5):.3f}] μm")print(f"外延层折射率统计:")print(f"  均值: {np.mean(n_epi_samples):.3f}")print(f"  标准差: {np.std(n_epi_samples):.3f}")return {'thickness_mean': np.mean(thickness_samples),'thickness_std': np.std(thickness_samples),'thickness_ci': (np.percentile(thickness_samples, 2.5), np.percentile(thickness_samples, 97.5)),'n_epi_mean': np.mean(n_epi_samples),'n_epi_std': np.std(n_epi_samples)}return Nonedef solve_problem2(self, processed_data, data_quality):"""解决问题2"""print("="*60)print("问题2:碳化硅外延层厚度计算")print("="*60)# 获取碳化硅数据sic_data = {k: v for k, v in processed_data.items() if 'sic' in k}if not sic_data:print("错误:未找到碳化硅数据")return Noneresults = {}# 单角度拟合for key, data in sic_data.items():print(f"\n=== 处理 {key} 数据 ===")wavenumber = data['wavenumber']reflectance = data['reflectance']angle = data['angle']# 多方法优化optimization_results = self.multi_method_optimization(wavenumber, reflectance, angle)# 选择最佳结果best_result = Nonebest_rmse = float('inf')for method, result in optimization_results.items():if result['success'] and result['rmse'] < best_rmse:best_result = resultbest_rmse = result['rmse']if best_result:results[key] = best_resultprint(f"最佳拟合结果:")print(f"  厚度: {best_result['thickness']:.3f} μm")print(f"  外延层折射率: {best_result['n_epi']:.3f}")print(f"  衬底折射率: {best_result['n_sub']:.3f}")print(f"  RMSE: {best_result['rmse']:.6f}")print(f"  相关系数: {best_result['correlation']:.4f}")# 绘制拟合结果self.plot_fitting_results(wavenumber, reflectance, best_result, angle, f"_{key}")# 不确定性分析uncertainty = self.uncertainty_analysis(wavenumber, reflectance, angle)if uncertainty:results[key]['uncertainty'] = uncertaintyelse:print(f"拟合失败")# 多角度联合拟合print(f"\n=== 多角度联合拟合 ===")sic_data_for_joint = {k: (v['wavenumber'], v['reflectance']) for k, v in sic_data.items()}joint_result = self.joint_optimization(sic_data_for_joint)if joint_result['success']:results['joint'] = joint_resultprint(f"联合拟合结果:")print(f"  厚度: {joint_result['thickness']:.3f} μm")print(f"  外延层折射率: {joint_result['n_epi']:.3f}")print(f"  衬底折射率: {joint_result['n_sub']:.3f}")print(f"  RMSE: {joint_result['rmse']:.6f}")# 结果总结print(f"\n=== 结果总结 ===")print("碳化硅外延层厚度测量结果:")for key, result in results.items():if isinstance(result, dict) and result.get('success'):print(f"{key}: {result['thickness']:.3f} μm")print("\n✓ 问题2求解完成!")return resultsdef main():"""主函数"""print("开始问题2求解...")# 1. 数据预处理preprocessor = DataPreprocessor()processed_data, data_quality = preprocessor.run_preprocessing()# 2. 碳化硅厚度计算calculator = SiCThicknessCalculator()results = calculator.solve_problem2(processed_data, data_quality)print("\n问题2求解完成!")return resultsif __name__ == "__main__":results = main()

创建问题3的独立求解程序:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
问题3:多光束干涉效应分析
考虑多次反射引发的多光束干涉效应,建立修正模型与计算算法
"""import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize, least_squares
from scipy.signal import find_peaks
from scipy.stats import pearsonr
import warnings
warnings.filterwarnings('ignore')# 导入数据预处理模块
from data_preprocessing import DataPreprocessor# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseclass MultiBeamInterferenceAnalyzer:"""多光束干涉分析器类"""def __init__(self):self.results = {}self.finesse_threshold = 1.0  # 精细度阈值def double_beam_interference(self, wavenumber, thickness, n_epi, n_sub, angle_deg):"""双光束干涉模型"""angle_rad = np.radians(angle_deg)# 菲涅尔反射系数r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)# 相位差wavelength = 1e4 / wavenumbercos_theta_epi = np.sqrt(1 - (np.sin(angle_rad) / n_epi)**2)phase_diff = 4 * np.pi * n_epi * thickness * cos_theta_epi / (wavelength * 1e-6)# 干涉光强I = r1**2 + r2**2 + 2 * r1 * r2 * np.cos(phase_diff)return Idef multi_beam_interference(self, wavenumber, thickness, n_epi, n_sub, angle_deg):"""多光束干涉模型(法布里-珀罗干涉)使用Airy公式描述多光束干涉"""angle_rad = np.radians(angle_deg)# 菲涅尔反射系数r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)# 相位差wavelength = 1e4 / wavenumbercos_theta_epi = np.sqrt(1 - (np.sin(angle_rad) / n_epi)**2)phase_diff = 4 * np.pi * n_epi * thickness * cos_theta_epi / (wavelength * 1e-6)# 反射率R1, R2 = r1**2, r2**2# 精细度系数F = 4 * R1 * R2 / (1 - R1 * R2)**2# Airy公式I = R1 + (1 - R1)**2 * R2 / (1 + R1 * R2 - 2 * np.sqrt(R1 * R2) * np.cos(phase_diff))return I, Fdef calculate_finesse(self, n_epi, n_sub):"""计算精细度系数"""r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)R1, R2 = r1**2, r2**2F = 4 * R1 * R2 / (1 - R1 * R2)**2return Fdef objective_function(self, params, wavenumber, reflectance, angle, use_multi_beam=False):"""目标函数"""thickness, n_epi, n_sub = paramsif thickness <= 0 or n_epi <= 1 or n_sub <= 1:return 1e10try:if use_multi_beam:model_reflectance, _ = self.multi_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)else:model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)residual = np.sum((reflectance - model_reflectance)**2)return residualexcept:return 1e10def least_squares_objective(self, params, wavenumber, reflectance, angle, use_multi_beam=False):"""最小二乘目标函数"""thickness, n_epi, n_sub = paramsif thickness <= 0 or n_epi <= 1 or n_sub <= 1:return np.full_like(reflectance, 1e10)try:if use_multi_beam:model_reflectance, _ = self.multi_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)else:model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)return reflectance - model_reflectanceexcept:return np.full_like(reflectance, 1e10)def optimize_thickness(self, wavenumber, reflectance, angle, material='sic', use_multi_beam=False):"""厚度优化"""# 材料参数if material == 'sic':initial_params = [5.0, 2.6, 2.7]bounds = [(0.1, 50), (1.5, 4.0), (1.5, 4.0)]else:  # siinitial_params = [3.0, 3.4, 3.5]bounds = [(0.1, 50), (2.0, 5.0), (2.0, 5.0)]# 优化result = least_squares(self.least_squares_objective, initial_params,args=(wavenumber, reflectance, angle, use_multi_beam),bounds=(tuple(b[0] for b in bounds), tuple(b[1] for b in bounds)),method='trf')if result.success:thickness, n_epi, n_sub = result.xrmse = np.sqrt(result.cost / len(wavenumber))# 计算精细度finesse = self.calculate_finesse(n_epi, n_sub)# 计算相关系数if use_multi_beam:model_reflectance, _ = self.multi_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)else:model_reflectance = self.double_beam_interference(wavenumber, thickness*1e-6, n_epi, n_sub, angle)corr_coeff, _ = pearsonr(reflectance, model_reflectance)return {'thickness': thickness,'n_epi': n_epi,'n_sub': n_sub,'rmse': rmse,'finesse': finesse,'correlation': corr_coeff,'success': True,'model_type': 'multi_beam' if use_multi_beam else 'double_beam'}else:return {'success': False,'error': result.message,'model_type': 'multi_beam' if use_multi_beam else 'double_beam'}def analyze_interference_conditions(self, material='sic'):"""分析干涉条件"""print(f"\n=== {material.upper()} 干涉条件分析 ===")if material == 'sic':n_epi, n_sub = 2.6, 2.7else:  # sin_epi, n_sub = 3.4, 3.5# 计算反射率r1 = (1 - n_epi) / (1 + n_epi)r2 = (n_epi - n_sub) / (n_epi + n_sub)R1, R2 = r1**2, r2**2# 计算精细度finesse = self.calculate_finesse(n_epi, n_sub)print(f"材料参数:")print(f"  外延层折射率: {n_epi}")print(f"  衬底折射率: {n_sub}")print(f"  空气-外延层反射率: {R1:.4f}")print(f"  外延层-衬底反射率: {R2:.4f}")print(f"  精细度: {finesse:.3f}")if finesse > self.finesse_threshold:print(f"结论: 存在显著的多光束干涉效应 (F > {self.finesse_threshold})")print(f"建议: 使用多光束模型进行厚度计算")else:print(f"结论: 多光束干涉效应不显著 (F ≤ {self.finesse_threshold})")print(f"建议: 双光束模型足够精确")return finessedef compare_models(self, wavenumber, reflectance, angle, material='sic'):"""对比双光束和多光束模型"""print(f"\n=== 模型对比分析 ({material.upper()}) ===")# 双光束模型result_double = self.optimize_thickness(wavenumber, reflectance, angle, material, use_multi_beam=False)# 多光束模型result_multi = self.optimize_thickness(wavenumber, reflectance, angle, material, use_multi_beam=True)print(f"双光束模型结果:")if result_double['success']:print(f"  厚度: {result_double['thickness']:.3f} μm")print(f"  RMSE: {result_double['rmse']:.6f}")print(f"  相关系数: {result_double['correlation']:.4f}")else:print(f"  拟合失败: {result_double['error']}")print(f"多光束模型结果:")if result_multi['success']:print(f"  厚度: {result_multi['thickness']:.3f} μm")print(f"  RMSE: {result_multi['rmse']:.6f}")print(f"  相关系数: {result_multi['correlation']:.4f}")print(f"  精细度: {result_multi['finesse']:.3f}")else:print(f"  拟合失败: {result_multi['error']}")# 判断最佳模型if result_double['success'] and result_multi['success']:if result_multi['finesse'] > self.finesse_threshold:if result_multi['rmse'] < result_double['rmse']:print(f"推荐: 多光束模型 (精细度较高且拟合更好)")best_result = result_multielse:print(f"推荐: 双光束模型 (虽然精细度较高但拟合较差)")best_result = result_doubleelse:print(f"推荐: 双光束模型 (精细度较低,多光束效应不显著)")best_result = result_doubleelif result_double['success']:print(f"推荐: 双光束模型 (多光束模型拟合失败)")best_result = result_doubleelif result_multi['success']:print(f"推荐: 多光束模型 (双光束模型拟合失败)")best_result = result_multielse:print(f"警告: 两种模型都拟合失败")best_result = Nonereturn result_double, result_multi, best_resultdef plot_model_comparison(self, wavenumber, reflectance, result_double, result_multi, angle, material, title_suffix=""):"""绘制模型对比图"""fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))# 反射光谱对比ax1.plot(wavenumber, reflectance, 'k-', linewidth=2, label='实测数据', alpha=0.8)if result_double['success']:model_double = self.double_beam_interference(wavenumber, result_double['thickness']*1e-6, result_double['n_epi'], result_double['n_sub'], angle)ax1.plot(wavenumber, model_double, 'r--', linewidth=2, label=f'双光束模型 (RMSE: {result_double["rmse"]:.4f})')if result_multi['success']:model_multi, finesse = self.multi_beam_interference(wavenumber, result_multi['thickness']*1e-6, result_multi['n_epi'], result_multi['n_sub'], angle)ax1.plot(wavenumber, model_multi, 'b:', linewidth=2, label=f'多光束模型 (RMSE: {result_multi["rmse"]:.4f}, F: {finesse:.2f})')ax1.set_xlabel('波数 (cm⁻¹)')ax1.set_ylabel('反射率')ax1.set_title(f'{material.upper()} 模型对比{title_suffix} (角度: {angle}°)')ax1.legend()ax1.grid(True, alpha=0.3)# 残差对比if result_double['success'] and result_multi['success']:residual_double = reflectance - model_doubleresidual_multi = reflectance - model_multiax2.plot(wavenumber, residual_double, 'r-', linewidth=1, alpha=0.8, label='双光束残差')ax2.plot(wavenumber, residual_multi, 'b-', linewidth=1, alpha=0.8, label='多光束残差')ax2.axhline(y=0, color='k', linestyle='--', alpha=0.5)ax2.set_xlabel('波数 (cm⁻¹)')ax2.set_ylabel('残差')ax2.set_title('拟合残差对比')ax2.legend()ax2.grid(True, alpha=0.3)plt.tight_layout()plt.savefig(f'问题3_{material}_模型对比{title_suffix}.png', dpi=300, bbox_inches='tight')plt.show()def analyze_silicon_samples(self, processed_data):"""分析硅样品"""print("\n=== 硅样品多光束干涉分析 ===")si_data = {k: v for k, v in processed_data.items() if 'si' in k}si_results = {}for key, data in si_data.items():print(f"\n处理 {key} 数据...")wavenumber = data['wavenumber']reflectance = data['reflectance']angle = data['angle']# 模型对比result_double, result_multi, best_result = self.compare_models(wavenumber, reflectance, angle, 'si')# 绘制对比图self.plot_model_comparison(wavenumber, reflectance, result_double, result_multi, angle, 'si', f"_{key}")si_results[key] = {'double_beam': result_double,'multi_beam': result_multi,'best': best_result}return si_resultsdef analyze_sic_samples(self, processed_data):"""分析碳化硅样品"""print("\n=== 碳化硅样品多光束干涉分析 ===")sic_data = {k: v for k, v in processed_data.items() if 'sic' in k}sic_results = {}for key, data in sic_data.items():print(f"\n处理 {key} 数据...")wavenumber = data['wavenumber']reflectance = data['reflectance']angle = data['angle']# 模型对比result_double, result_multi, best_result = self.compare_models(wavenumber, reflectance, angle, 'sic')# 绘制对比图self.plot_model_comparison(wavenumber, reflectance, result_double, result_multi, angle, 'sic', f"_{key}")sic_results[key] = {'double_beam': result_double,'multi_beam': result_multi,'best': best_result}return sic_resultsdef solve_problem3(self, processed_data, data_quality):"""解决问题3"""print("="*60)print("问题3:多光束干涉效应分析")print("="*60)# 1. 分析干涉条件finesse_sic = self.analyze_interference_conditions('sic')finesse_si = self.analyze_interference_conditions('si')# 2. 分析硅样品si_results = self.analyze_silicon_samples(processed_data)# 3. 分析碳化硅样品sic_results = self.analyze_sic_samples(processed_data)# 4. 结果总结print(f"\n=== 结果总结 ===")print("硅样品分析结果:")for key, results in si_results.items():if results['best'] and results['best']['success']:print(f"{key}: {results['best']['thickness']:.3f} μm "f"({results['best']['model_type']}, 精细度: {results['best']['finesse']:.3f})")print("\n碳化硅样品分析结果:")for key, results in sic_results.items():if results['best'] and results['best']['success']:print(f"{key}: {results['best']['thickness']:.3f} μm "f"({results['best']['model_type']}, 精细度: {results['best']['finesse']:.3f})")# 5. 模型选择建议print(f"\n=== 模型选择建议 ===")if finesse_sic > self.finesse_threshold:print("碳化硅样品:建议使用多光束模型")else:print("碳化硅样品:双光束模型足够")if finesse_si > self.finesse_threshold:print("硅样品:建议使用多光束模型")else:print("硅样品:双光束模型足够")print("\n✓ 问题3求解完成!")return {'finesse_analysis': {'sic': finesse_sic,'si': finesse_si},'silicon_results': si_results,'sic_results': sic_results}def main():"""主函数"""print("开始问题3求解...")# 1. 数据预处理preprocessor = DataPreprocessor()processed_data, data_quality = preprocessor.run_preprocessing()# 2. 多光束干涉分析analyzer = MultiBeamInterferenceAnalyzer()results = analyzer.solve_problem3(processed_data, data_quality)print("\n问题3求解完成!")return resultsif __name__ == "__main__":results = main()
PS E:\CUMCM2025Problems(1)\B题> & D:/Python311/python.exe "e:/CUMCM2025Problems(1)/B题/run_all_problems.py"
碳化硅外延层厚度测量数学建模 - 三道题独立求解
开始时间: 2025-09-05 15:15:16================================================================================
开始运行问题1:双光束干涉模型建立
================================================================================
开始问题1求解...
开始数据预处理流程...
=== 加载实验数据 ===
✓ sic_10deg: 成功加载 7469 个数据点
✓ sic_15deg: 成功加载 7469 个数据点
✓ si_10deg: 成功加载 7469 个数据点
✓ si_15deg: 成功加载 7469 个数据点=== 数据结构分析 ===sic_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 95.385sic_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 102.739si_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 79.802si_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 91.489=== 标准化数据格式 ===
✓ sic_10deg: 标准化完成,有效数据点 7468
✓ sic_15deg: 标准化完成,有效数据点 7468
✓ si_10deg: 标准化完成,有效数据点 7468
✓ si_15deg: 标准化完成,有效数据点 7468=== 光谱数据预处理 ===
✓ sic_10deg: 预处理完成
✓ sic_15deg: 预处理完成
✓ si_10deg: 预处理完成
✓ si_15deg: 预处理完成=== 数据质量分析 ===信噪比: 163.50数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 329.4 cm⁻¹周期标准差: 527.2 cm⁻¹
sic_15deg:信噪比: 181.77数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 6平均干涉周期: 418.5 cm⁻¹周期标准差: 564.4 cm⁻¹
si_10deg:信噪比: 419.23数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 395.8 cm⁻¹周期标准差: 35.6 cm⁻¹
si_15deg:信噪比: 427.55数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 7平均干涉周期: 410.3 cm⁻¹周期标准差: 21.8 cm⁻¹=== 数据可视化 ===
✓ 数据可视化完成,图片已保存✓ 数据预处理完成!
============================================================
问题1:双光束干涉模型建立
============================================================
=== 双光束干涉模型推导 ===1. 斯涅尔定律:n₁ sin θ₁ = n₂ sin θ₂2. 菲涅尔反射系数:空气-外延层界面:r₁ = (1 - n_epi) / (1 + n_epi)外延层-衬底界面:r₂ = (n_epi - n_sub) / (n_epi + n_sub)3. 相位差:δ = 4π n_epi d cos θ / λ其中:d为外延层厚度,θ为折射角4. 干涉光强:I = |r₁|² + |r₂|² + 2 Re(r₁ r₂* e^(iδ))I = r₁² + r₂² + 2r₁r₂ cos(δ)5. 干涉周期:Δk = 2π n_epi d cos θ其中:Δk为波数差=== 模型验证 - SIC ===
材料参数:外延层折射率: 2.6衬底折射率: 2.7厚度: 5.0 μm入射角: 10°反射系数:r₁ = -0.4444r₂ = -0.0189R₁ = 0.1975R₂ = 0.0004干涉特性:干涉周期: 3.9 cm⁻¹反射率范围: 0.1855 - 0.2196=== 模型验证 - SI ===
材料参数:外延层折射率: 3.4衬底折射率: 3.5厚度: 3.0 μm入射角: 10°反射系数:r₁ = -0.5455r₂ = -0.0145R₁ = 0.2975R₂ = 0.0002干涉特性:干涉周期: 4.9 cm⁻¹反射率范围: 0.2871 - 0.3191=== 参数敏感性分析 ====== 基于实际数据的模型验证 ===sic_10deg 数据验证:材料: SIC入射角: 10°数据点数: 7468波数范围: 400.2 - 4000.1 cm⁻¹反射率范围: 0.0000 - 1.0000平均干涉周期: 329.4 cm⁻¹sic_15deg 数据验证:材料: SIC入射角: 15°数据点数: 7468波数范围: 400.2 - 4000.1 cm⁻¹反射率范围: 0.0000 - 1.0000平均干涉周期: 418.5 cm⁻¹si_10deg 数据验证:材料: SI入射角: 10°数据点数: 7468波数范围: 400.2 - 4000.1 cm⁻¹反射率范围: 0.0000 - 1.0000平均干涉周期: 395.8 cm⁻¹si_15deg 数据验证:材料: SI入射角: 15°数据点数: 7468波数范围: 400.2 - 4000.1 cm⁻¹反射率范围: 0.0000 - 1.0000平均干涉周期: 410.3 cm⁻¹✓ 问题1求解完成!问题1求解完成!问题1运行完成!耗时: 20.74 秒================================================================================
开始运行问题2:碳化硅外延层厚度计算
================================================================================
开始问题2求解...
开始数据预处理流程...
=== 加载实验数据 ===
✓ sic_10deg: 成功加载 7469 个数据点
✓ sic_15deg: 成功加载 7469 个数据点
✓ si_10deg: 成功加载 7469 个数据点
✓ si_15deg: 成功加载 7469 个数据点=== 数据结构分析 ===sic_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 95.385sic_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 102.739si_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 79.802si_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 91.489=== 标准化数据格式 ===
✓ sic_10deg: 标准化完成,有效数据点 7468
✓ sic_15deg: 标准化完成,有效数据点 7468
✓ si_10deg: 标准化完成,有效数据点 7468
✓ si_15deg: 标准化完成,有效数据点 7468=== 光谱数据预处理 ===
✓ sic_10deg: 预处理完成
✓ sic_15deg: 预处理完成
✓ si_10deg: 预处理完成
✓ si_15deg: 预处理完成=== 数据质量分析 ===
sic_10deg:信噪比: 163.50数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 329.4 cm⁻¹周期标准差: 527.2 cm⁻¹
sic_15deg:信噪比: 181.77数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 6平均干涉周期: 418.5 cm⁻¹周期标准差: 564.4 cm⁻¹
si_10deg:信噪比: 419.23数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 395.8 cm⁻¹周期标准差: 35.6 cm⁻¹
si_15deg:信噪比: 427.55数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 7平均干涉周期: 410.3 cm⁻¹周期标准差: 21.8 cm⁻¹=== 数据可视化 ===
✓ 数据可视化完成,图片已保存✓ 数据预处理完成!
============================================================
问题2:碳化硅外延层厚度计算
=============================================================== 处理 sic_10deg 数据 ===
使用多种优化方法进行厚度反演...
角度: 10°
--------------------------------------------------
方法: L-BFGS-B厚度: 3.831 μm外延层折射率: 3.695衬底折射率: 3.416RMSE: 0.167213相关系数: 0.1861方法: TNC - 失败: Max. number of function evaluations reached方法: SLSQP厚度: 2.404 μm外延层折射率: 3.689衬底折射率: 3.195RMSE: 0.159941相关系数: 0.3417方法: least_squares厚度: 7.344 μm外延层折射率: 3.709衬底折射率: 3.790RMSE: 0.120180相关系数: 0.0514最佳拟合结果:厚度: 7.344 μm外延层折射率: 3.709衬底折射率: 3.790RMSE: 0.120180相关系数: 0.0514
拟合质量评估:RMSE: 0.120180相关系数: 0.0514残差标准差: 0.169960=== 不确定性分析 (角度: 10°) ===
成功样本数: 100
厚度统计:均值: 3.832 μm标准差: 0.002 μm95%置信区间: [3.828, 3.834] μm
外延层折射率统计:均值: 3.695标准差: 0.001=== 处理 sic_15deg 数据 ===
使用多种优化方法进行厚度反演...
角度: 15°
--------------------------------------------------
方法: L-BFGS-B厚度: 3.882 μm外延层折射率: 3.654衬底折射率: 3.377RMSE: 0.166462相关系数: 0.1864方法: TNC厚度: 2.435 μm外延层折射率: 3.647衬底折射率: 3.156RMSE: 0.159131相关系数: 0.3434方法: SLSQP厚度: 2.435 μm外延层折射率: 3.647衬底折射率: 3.156RMSE: 0.159131相关系数: 0.3434方法: least_squares厚度: 3.218 μm外延层折射率: 3.637衬底折射率: 3.981RMSE: 0.117029相关系数: 0.2140最佳拟合结果:厚度: 3.218 μm外延层折射率: 3.637衬底折射率: 3.981RMSE: 0.117029相关系数: 0.2140
拟合质量评估:RMSE: 0.117029相关系数: 0.2140残差标准差: 0.165504=== 不确定性分析 (角度: 15°) ===
成功样本数: 100
厚度统计:均值: 3.882 μm标准差: 0.002 μm95%置信区间: [3.878, 3.885] μm
外延层折射率统计:均值: 3.654标准差: 0.001=== 多角度联合拟合 ===
多角度联合优化...
联合优化结果:厚度: 3.856 μm外延层折射率: 3.675衬底折射率: 3.396RMSE: 0.166853
联合拟合结果:厚度: 3.856 μm外延层折射率: 3.675衬底折射率: 3.396RMSE: 0.166853=== 结果总结 ===
碳化硅外延层厚度测量结果:
sic_10deg: 7.344 μm
sic_15deg: 3.218 μm
joint: 3.856 μm✓ 问题2求解完成!问题2求解完成!问题2运行完成!耗时: 21.58 秒================================================================================
开始运行问题3:多光束干涉效应分析
================================================================================
开始问题3求解...
开始数据预处理流程...
=== 加载实验数据 ===
✓ sic_10deg: 成功加载 7469 个数据点
✓ sic_15deg: 成功加载 7469 个数据点
✓ si_10deg: 成功加载 7469 个数据点
✓ si_15deg: 成功加载 7469 个数据点=== 数据结构分析 ===sic_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 95.385sic_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 102.739si_10deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 79.802si_15deg:数据形状: (7469, 2)列名: ['波数 (cm-1)', '反射率 (%)']数据类型: {'波数 (cm-1)': dtype('float64'), '反射率 (%)': dtype('float64')}缺失值: {'波数 (cm-1)': 0, '反射率 (%)': 0}数据范围:波数 (cm-1): 399.675 - 4000.122反射率 (%): 0.000 - 91.489=== 标准化数据格式 ===
✓ sic_10deg: 标准化完成,有效数据点 7468
✓ sic_15deg: 标准化完成,有效数据点 7468
✓ si_10deg: 标准化完成,有效数据点 7468
✓ si_15deg: 标准化完成,有效数据点 7468=== 光谱数据预处理 ===
✓ sic_10deg: 预处理完成
✓ sic_15deg: 预处理完成
✓ si_10deg: 预处理完成
✓ si_15deg: 预处理完成=== 数据质量分析 ===
sic_10deg:信噪比: 163.50数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 329.4 cm⁻¹周期标准差: 527.2 cm⁻¹
sic_15deg:信噪比: 181.77数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 6平均干涉周期: 418.5 cm⁻¹周期标准差: 564.4 cm⁻¹
si_10deg:信噪比: 419.23数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 8平均干涉周期: 395.8 cm⁻¹周期标准差: 35.6 cm⁻¹
si_15deg:信噪比: 427.55数据密度: 2074.5 点/cm⁻¹反射率范围: 1.0000干涉峰数量: 7平均干涉周期: 410.3 cm⁻¹周期标准差: 21.8 cm⁻¹=== 数据可视化 ===
✓ 数据可视化完成,图片已保存✓ 数据预处理完成!
============================================================
问题3:多光束干涉效应分析
=============================================================== SIC 干涉条件分析 ===
材料参数:外延层折射率: 2.6衬底折射率: 2.7空气-外延层反射率: 0.1975外延层-衬底反射率: 0.0004精细度: 0.000
结论: 多光束干涉效应不显著 (F ≤ 1.0)
建议: 双光束模型足够精确=== SI 干涉条件分析 ===
材料参数:外延层折射率: 3.4衬底折射率: 3.5空气-外延层反射率: 0.2975外延层-衬底反射率: 0.0002精细度: 0.000
结论: 多光束干涉效应不显著 (F ≤ 1.0)
建议: 双光束模型足够精确=== 硅样品多光束干涉分析 ===处理 sic_10deg 数据...=== 模型对比分析 (SI) ===
双光束模型结果:厚度: 3.175 μmRMSE: 0.117578相关系数: 0.2130
多光束模型结果:厚度: 17.640 μmRMSE: 0.120313相关系数: 0.0265精细度: 0.035
推荐: 双光束模型 (精细度较低,多光束效应不显著)处理 sic_15deg 数据...=== 模型对比分析 (SI) ===
双光束模型结果:厚度: 3.218 μmRMSE: 0.117029相关系数: 0.2140
多光束模型结果:厚度: 49.820 μmRMSE: 0.119805相关系数: 0.0026精细度: 0.015
推荐: 双光束模型 (精细度较低,多光束效应不显著)处理 si_10deg 数据...=== 模型对比分析 (SI) ===
双光束模型结果:厚度: 1.980 μmRMSE: 0.162804相关系数: 0.0914
多光束模型结果:厚度: 0.100 μmRMSE: 0.134573相关系数: -0.0052精细度: 0.387
推荐: 双光束模型 (精细度较低,多光束效应不显著)处理 si_15deg 数据...=== 模型对比分析 (SI) ===
双光束模型结果:厚度: 1.988 μmRMSE: 0.152161相关系数: 0.1058
多光束模型结果:厚度: 0.100 μmRMSE: 0.125522相关系数: -0.0056精细度: 0.387
推荐: 双光束模型 (精细度较低,多光束效应不显著)=== 碳化硅样品多光束干涉分析 ===处理 sic_10deg 数据...=== 模型对比分析 (SIC) ===
双光束模型结果:厚度: 7.344 μmRMSE: 0.120180相关系数: 0.0514
多光束模型结果:厚度: 0.100 μmRMSE: 0.120339相关系数: -0.0039精细度: 0.000
推荐: 双光束模型 (精细度较低,多光束效应不显著)处理 sic_15deg 数据...=== 模型对比分析 (SIC) ===
双光束模型结果:厚度: 3.218 μmRMSE: 0.117029相关系数: 0.2140
多光束模型结果:厚度: 0.100 μmRMSE: 0.119806相关系数: -0.0047精细度: 0.000
推荐: 双光束模型 (精细度较低,多光束效应不显著)=== 结果总结 ===
硅样品分析结果:
sic_10deg: 3.175 μm (double_beam, 精细度: 0.003)
sic_15deg: 3.218 μm (double_beam, 精细度: 0.003)
si_10deg: 1.980 μm (double_beam, 精细度: 0.001)
si_15deg: 1.988 μm (double_beam, 精细度: 0.001)碳化硅样品分析结果:
sic_10deg: 7.344 μm (double_beam, 精细度: 0.000)
sic_15deg: 3.218 μm (double_beam, 精细度: 0.003)=== 模型选择建议 ===
碳化硅样品:双光束模型足够
硅样品:双光束模型足够✓ 问题3求解完成!问题3求解完成!问题3运行完成!耗时: 29.50 秒================================================================================
最终结果报告
================================================================================
运行时间: 2025-09-05 15:16:29问题1:双光束干涉模型建立
----------------------------------------
✓ 模型建立成功建立了完整的双光束干涉数学模型推导了干涉光强分布公式:I = r₁² + r₂² + 2r₁r₂cos(δ)验证了模型的科学性和实用性问题2:碳化硅外延层厚度计算
----------------------------------------
✓ 厚度计算成功
碳化硅外延层厚度测量结果:sic_10deg: 7.344 μmsic_15deg: 3.218 μmjoint: 3.856 μm问题3:多光束干涉效应分析
----------------------------------------
✓ 多光束分析成功
精细度分析结果:碳化硅: 0.000硅: 0.000
硅样品分析结果:sic_10deg: 3.175 μm (double_beam)sic_15deg: 3.218 μm (double_beam)si_10deg: 1.980 μm (double_beam)si_15deg: 1.988 μm (double_beam)
碳化硅样品分析结果:sic_10deg: 7.344 μm (double_beam)sic_15deg: 3.218 μm (double_beam)================================================================================
所有问题求解完成!
================================================================================
PS E:\CUMCM2025Problems(1)\B题> 


文章转载自:

http://uDMtfkNH.jzdfc.cn
http://fYfsRCX3.jzdfc.cn
http://8fnqrTJX.jzdfc.cn
http://8bBr9xps.jzdfc.cn
http://MkoE59oL.jzdfc.cn
http://TwrQT4uL.jzdfc.cn
http://wCcUSbY9.jzdfc.cn
http://UGUszISS.jzdfc.cn
http://POUTPoC2.jzdfc.cn
http://jDCvJKJo.jzdfc.cn
http://fqmWNCsq.jzdfc.cn
http://25b4NilE.jzdfc.cn
http://r58vQOEg.jzdfc.cn
http://Ti6R7GT7.jzdfc.cn
http://yWZtzEpn.jzdfc.cn
http://rnvmQWBk.jzdfc.cn
http://002dnPGP.jzdfc.cn
http://SQzz13kb.jzdfc.cn
http://02ABCvXc.jzdfc.cn
http://5eZqrNz6.jzdfc.cn
http://mGMobEJh.jzdfc.cn
http://v634gAmm.jzdfc.cn
http://pyUzvZs0.jzdfc.cn
http://6uDLY6Yl.jzdfc.cn
http://DDpVRqlV.jzdfc.cn
http://QHo3fH0t.jzdfc.cn
http://9dQ1yaVP.jzdfc.cn
http://1CHL39x5.jzdfc.cn
http://fuouCzu0.jzdfc.cn
http://VIUvNV39.jzdfc.cn
http://www.dtcms.com/a/369455.html

相关文章:

  • 基于STM32单片机的新版ONENET物联网云平台环境检测手机APP系统
  • 使用YOLO11训练鸟类分类模型
  • 打开Fiddler,浏览器就不能访问网页了
  • 低空飞行安全“把关人”,MH/T 4055.3-2022 测试标准深度解读
  • 客户案例 | 半导体材料领军企业选择燕千云ITSM,打造“零”中断运维体系
  • STM32H7的PA0_C、PA1_C、PC2_C、PC3_C的使用
  • EEMD-HHT算法
  • 如何快速集成直播美颜SDK?人脸美型功能开发全流程详解
  • 3D设计软件终极对决:从建模到渲染,哪款才是你的本命神器?
  • 【Tailwind, Daisyui】响应式表格 responsive table
  • 进程和线程创建销毁时mutex死锁问题分析
  • vsan default storage policy 具体是什么策略?
  • 整理了几道前端面试题
  • 点控云智能客服:以AI重塑服务体验,登顶行业第一的革新之路
  • 餐饮营销:不是 “烧钱”,是 “递价值” 的落地术
  • 解释一下roberta,bert-chinese和bert-case有啥区别还有bert-large这些
  • ZeroMQ 编译 项目使用流程文档
  • 零知开源——基于STM32F103RBT6的智能风扇控制系统设计与实现
  • (GeSCD)Towards Generalizable Scene Change Detection论文精读(逐段解析)
  • A股大盘数据-20250905 分析
  • 代码版本控制
  • 学习心得分享
  • 【Cell Systems】SpotGF空间转录组去噪算法文献分享
  • 「数据获取」《中国包装业发展研究报告(2008)》
  • 禁止浏览器自动填充密码的方法
  • Vue 3 项目中引入 Iconify
  • 混合架构大型语言模型(Jamba)
  • Redis 的相关文件作用
  • Vulkan进阶系列11 - RenderPass 设置对渲染性能的影响
  • Java IO 流深度剖析:原理、家族体系与实战应用