快速幂和矩阵快速幂

  快速幂指的是A = 1;矩阵快速幂指的是A=E, E为单位矩阵,即主对角线为1,其余为0;

快速幂:一般用long long ,且取余。

#include <iostream>
using namespace std;
#define mod 1e9 + 7
#define long long ll

ll quick_pow(int n, int base){//base^n
	ll ans = 1;
	ll multi = base;
	while(n){
		if(n % 2)// n & 1 || n % 2 ==  
			ans *= multi;
		ans %= mod;
		n /= 2;// n >> 1;效率高
		multi *= multi;
		multi %= mod; 
	}
	return ans;
}

   作用:使用矩阵快速幂求递推式;例如斐波那契数列,求其第几项的值,范围到1e9,就需要用到矩阵快速幂。

   斐波那契的定义是f(1)=f(2)=1; 然后f(n)=f(n-1)+f(n-2) (n>=2) 我们也可以这样定义f(1)=f(2)=1; [f(n),f(n-1)]=[f(n-1),f(n-2)][1,1,1,0],其中[1,1,1,0] 是一个2*2的矩阵 上面一行是1,1,下面一行是1,0,这样就可以化简了写成[f(n),f(n-1)]=[f(2),f(1)]*[1,1,1,0]^(n-2)。


#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define NUM 50
#define mod 1e9
int MAXN, n;

struct node {
	int a[MUN][MUN];
	void init(){
		memset(a, 0, sizeof(a));
		for(int i = 0; i < MAXN; ++i)
			a[i][i] = 1;
	}
}A;


Matrix mul(Matrix a, Matrix b){//矩阵乘法 
	Matrix ans;
	for(int i = 0; i < MAXN; ++i){
		for(int j = 0; j < MAXN; ++j){
			ans.[i][j] = 0;
			for(int k = 0; k < MAXN; ++k)
				ans.a[i][j] += a.a[i][k] * b.a[k][j];
			ans.a[i][j] % mod;
		}
	}
	return ans; 
} 

Matrix add(Matrix a, Matrix b){//矩阵相加 
	Matrix ans;
	for(int i = 0; i < MAXN; ++i){
		for(int j = 0; j < MAXN; ++j){
			ans.a[i][j] = a.a[i][j] + b.a[i][j];
			ans.a[i][j] %= mod;
		}
	}
	return ans;
}

Matrix pow(Matrix a, int n){//矩阵快速幂 
	Matrix ans;
	ans.init;
	while(n){
		if(n & 1)
			ans = mul(ans, a);
		n >> 1;
		a = mul(a, a);
	} 
	return ans;
}

Matrix sum(Matrix a, int n){//矩阵求和 
	int m;
	Matrix ans, pre;
	if(n == 1)
		return a;
	m = (n >> 1);
	pre = sum(a, m);//[1,n/2]
	ans = add (pre, mul(pre, pow(a, m)));//ans=[1,n/2]+a^(n/2)*[1,n/2]
	if(n & 1)
		ans = add(ans, pow(a, n)); //ans=ans+a^n
	return ans;
}


void output(Matrix a)//输出矩阵
{
  for(int i=0;i<MAXN;i++)
    for(int j=0;j<MAXN;j++)
      printf("%d%c",a.a[i][j],j==MAXN-1?'\n':' ');
}
int main()
{
  freopen("in.txt","r",stdin);
  Matrix ans;
  scanf("%d%d%d",&MAXN,&n,&mod);
  for(int i=0;i<MAXN;i++)
    for(int j=0;j<MAXN;j++)
    {
      scanf("%d",&A.a[i][j]);
      A.a[i][j]%=mod;
    }
  ans=sum(A,n);
  output(ans);
  return 0;
}





基于TROPOMI高光谱遥感仪器获取的大气成分观测资料,本研究聚焦于大气污染物一氧化氮(NO₂)的空间分布与浓度定量反演问题。NO₂作为影响空气质量的关键指标,其精确监测对环境保护与大气科学研究具有显著价值。当前,利用卫星遥感数据结合先进算法实现NO₂浓度的高精度反演已成为该领域的重要研究方向。 本研究构建了一套以深度学习为核心的技术框架,整合了来自TROPOMI仪器的光谱辐射信息、观测几何参数以及辅助气象数据,形成多维度特征数据集。该数据集充分融合了不同来源的观测信息,为深入解析大气中NO₂的时空变化规律提供了数据基础,有助于提升反演模型的准确性与环境预测的可靠性。 在模型架构方面,项目设计了一种多分支神经网络,用于分别处理光谱特征与气象特征等多模态数据。各分支通过独立学习提取代表性特征,并在深层网络中进行特征融合,从而综合利用不同数据的互补信息,显著提高了NO₂浓度反演的整体精度。这种多源信息融合策略有效增强了模型对复杂大气环境的表征能力。 研究过程涵盖了系统的数据处理流程。前期预处理包括辐射定标、噪声抑制及数据标准化等步骤,以保障输入特征的质量与一致性;后期处理则涉及模型输出的物理量转换与结果验证,确保反演结果符合实际大气浓度范围,提升数据的实用价值。 此外,本研究进一步对不同功能区域(如城市建成区、工业带、郊区及自然背景区)的NO₂浓度分布进行了对比分析,揭示了人类活动与污染物空间格局的关联性。相关结论可为区域环境规划、污染管控政策的制定提供科学依据,助力大气环境治理与公共健康保护。 综上所述,本研究通过融合TROPOMI高光谱数据与多模态特征深度学习技术,发展了一套高效、准确的大气NO₂浓度遥感反演方法,不仅提升了卫星大气监测的技术水平,也为环境管理与决策支持提供了重要的技术工具。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值